home *** CD-ROM | disk | FTP | other *** search
- /*
- * setup.c: hterm set-up menu system (not regident)
- *
- * Author: HIRANO Satoshi
- * (C) 1989, 1990 Halca Computer Science Laboratory TM
- * University of Tokyo
- *
- * 2.2 89/05/16 Halca.Hirano change Shift-JIS menu item to ASCII
- * V2.2 distribution
- * 2.3 89/06/15 Halca.Hirano integrate 98 and PC
- * 2.4 89/07/04 Halca.Hirano builtin mini mini emacs editor
- * 2.5 89/07/15 Halca.Hirano add help system
- * 2.6 89/07/20 Halca.Hirano add PFkey editor
- * 2.7 89/07/27 Halca.Hirano make effort to reduce code size
- * ---- V2.3.-1 distribution ----
- * 2.8 89/09/15 Halca.Hirano add RTS/CTS flow ctrl, fix lineMode bug
- * 2.9 89/09/21 Halca.Hirano add xmodem file transfer facility
- * add file xfer options set-up
- * ---- V2.4.0 distribution ----
- * 3.0 89/10/04 Halca.Hirano fix port number bug
- * move change directory to file.c
- * 3.1 89/11/10 Tominaga@Titech ported to J3100,
- * improve many items.
- * put 'done' message after clearing display
- * don't change lowScrRegion at resetTerminal()
- * locate(0,0) after returing from DOS
- * put 'not supported' or 'only this' messages instead of 'xx only'
- * put 'only this' messages properly
- * add ^U (erase to top of line) to mini-mini-emacs editor
- * ---- V2.5.0 distribution ----
- * 3.2 89/11/29 Halca.Hirano add audible/visible/both bell mode
- * 3.3 89/12/04 Halca.Hirano add remap keys!
- * drop ER at exit
- * 3.4 89/12/12 Halca.Hirano move getting filename for filexfer to
- * kermit.c/xmodem.c so that these functions are able to be called from
- * communication mode.
- * ---- V2.5.1 distribution ----
- * 3.5 89/12/16 Halca.Hirano save/restore dropER in set-up file
- * 3.6 90/06/16 Halca.Hirano
- * rewrite menu interpreter smaller
- * use locate/reverseMode instead of sprintf("ESC[10;20fESC[7m....
- *
- * $Header: setup.cv 1.21 90/07/04 18:02:18 hirano Exp $
- *
- */
-
- #include "option.h"
- #ifdef SETUP
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include "config.h"
- #include "hterm.h"
- #include "default.h"
- #include "global.h"
- #include "version.h"
-
-
- /*
- * menu entry
- */
- struct _menu {
- int x, y; /* menu position */
- char *string; /* menu label string */
- char *key; /* help database index key */
- };
-
- #define sorry() putStatus(future)
- #define onlyThis() putStatus(only)
- #define notSupported() putStatus(useOtherMachine)
-
- static int first = YES;
- static char manual[70] = "intro";
- static char toNext[] = " To Next Set-Up ";
- static char toDir[] = " To Directory ";
- static char msg_prnNotRdy[] = "Printer not ready";
- static char msg_bsOff[] = " BS Key Watcher OFF ";
- static char msg_bsNum[] = " BS Key Watcher %2u%% ";
- static char useOtherMachine[] = "not supported";
- static char future[] = "Future Function";
- static char only[] = "Only this";
-
- static void mainDirectory(void);
- static int displayDirectory(void );
- static int dispEnhanstDirectory(void );
- static int generalDirectory(void );
- static int genEnhanstDirectory(void );
- static int commDirectory(void );
- static int printerDirectory(void );
- static int keybdDirectory(void );
- static int keyRemapDirectory(void );
- static int tabDirectory(void );
- static int fileXferDirectory(void );
- static int xferOptionsDirectory(void );
- static void putmenu(int num,struct _menu *p);
- static int getmenu(int num,struct _menu *p,int menu);
-
- void setup()
- {
- showHelp = NO;
- mode = M_SETUP;
- showPage1();
-
- conPrint(versionString());
- conPrint("Copyright (C) 1986, 1990 Halca Computer Science Laboratory TM\n\r");
- conPrint(" University of Tokyo\n\r");
- conPrint("All rights reserved.\n\r");
- conPrint("Author: HIRANO Satoshi\n\r");
- conPrint("Automatic hterm information: hterm@tkl.iis.u-tokyo.ac.jp\n\r");
- conPrint("Bug report and contribution: hterm-bug@tkl.iis.u-tokyo.ac.jp\n\r");
- conPrint("Please use this software freely, but only for peaceful purpose.\n\r\n");
- reverseMode();
- conPrint(" ? for help ");
- normalMode();
-
- mainDirectory();
-
- mode = M_COMM;
- showPage0();
- }
-
- /*
- ** static void mainDirectory
- *
- * main set-up directory
- */
- struct _menu smainmenu[] =
- {/* 0 */ {0, 0, " hterm Set-Up Directory", NULL},
- /* 1 */ {0, 2, " Display ", "M1"},
- /* 2 */ {10, 2, " General ", "M2"},
- /* 3 */ {20, 2, " Communication ", "M3"},
- /* 4 */ {36, 2, " Keyboard ", "M4"},
- /* 5 */ {47, 2, " Printer ", "M5"},
- /* 6 */ {57, 2, " Tabs ", "M6"},
- /* 7 */ {0, 4, " File Xfer ", "M7"},
- /* 8 */ {12, 4, " OS ", "M8"},
- /* 9 */ {18, 4, NULL, "M9"},
- /* 10*/ {29, 4, " Clear Display ", "M10"},
- /* 11*/ {45, 4, " Clear Comm ", "M11"},
- /* 12*/ {58, 4, " Reset Terminal ", "M12"},
- /* 13*/ {0, 6, " Redial ", "M13"},
- /* 14*/ {9, 6, " Manual ", "intro"},
- /* 15*/ {18, 6, " Save Set-Up ", "M15"},
- /* 16*/ {32, 6, " Exit Set-up ", "M16"},
- /* 17*/ {46, 6, " Exit hterm ", "M17"}};
- #define N_MENU 17
-
- char *sm_online[] = {" Off Line ", " On Line "};
-
- static void mainDirectory()
- {
- register int menu, status;
- char *diag;
-
- smainmenu[9].string = sm_online[online];
- menu = 1; status = M_DIRECTORY;
- for(;;) {
- if (status != M_NEXT) {
- if (status != M_NOCHANGE)
- putmenu(N_MENU, smainmenu);
- menu = getmenu(N_MENU, smainmenu, menu);
- }
- status = M_NOCHANGE;
- switch(menu) {
- case 1: status = displayDirectory(); break;
- case 2: status = generalDirectory(); break;
- case 3: status = commDirectory(); break;
- case 4: status = keybdDirectory(); break;
- case 5: status = printerDirectory(); break;
- case 6: status = tabDirectory(); break;
- case 7: status = fileXferDirectory(); break;
- case 8: callOS(); goto redraw;
- case 9:smainmenu[9].string = sm_online[online = !online]; break;
- case 10:
- clearSavedPage(page0Save);
- clearSavedPage(ansiVramSave);
- curYSave = 0, curXSave = 0; attrSave = eraseAttr;
- #ifdef UOP_GRAPHICS
- plot_erase();
- #endif /* UOP_GRAPHICS */
- goto redraw;
- case 11: portSetup(); ansiSetup();
- break;
- case 12:
- resetTerminal();
- redraw:
- putmenu(N_MENU, smainmenu);
- break;
- case 13:
- redial = !redial;
- if (redial)
- putStatus("redial after set-up");
- else
- putStatus("No redial");
- break;
- case 14: {
- char *nextKey;
- strcpy(tmpBuf, manual);
- if (emacs("Topics: ", tmpBuf, MAX_FILE_NAME, E_NO_HELP) == ERR)
- break;
- if (tmpBuf[0] == '\0' || tmpBuf[0] == '?')
- strcpy(manual, "intro");
- else
- strcpy(manual, tmpBuf);
- if ((nextKey = helpSystem(manual)) != (char *)NULL);
- strcpy(manual, nextKey);
- }
- break;
- case 15: strcpy(tmpBuf, setFileName);
- if (emacs("Set-Up filename: ", tmpBuf, MAX_FILE_NAME, (E_HELP|E_FILE)) == ERR)
- break;
- if ((diag = saveSetup(tmpBuf)) != NULL) {
- putStatus(diag); bell();
- } else {
- strcpy(setFileName, tmpBuf);
- }
- break;
- case 16: return;
- case 17:
- showPage0(); termination();
- case END_SETUP: return;
- }
- if (status == END_SETUP) return;
- else if (status == M_NEXT)
- if (++menu > 7) menu = 1;
- if (status == M_DIRECTORY)
- menu = 1;
- }
- }
-
-
- /*
- ** displayDirectory()
- *
- * display setup directory
- */
- struct _menu sdisplay[] = {
- /* 0 */{0, 0, " Display Set-Up", NULL},
- /* 1 */{0, 2, toNext, "D1"},
- /* 2 */{17, 2, toDir, "to dir"},
- /* 3 */{32, 2, NULL, "D3"}, /* interpret */
- /* 4 */{56, 2, NULL, "D4"}, /* auto wrap */
- /* 5 */{0, 4, NULL, "D5"}, /* soft font */
- /* 6 */{12, 4, NULL, "D6"}, /* cursor */
- /* 7 */{24, 4, NULL, "D7"}, /* statline */
- /* 8 */{41, 4, NULL, "D8"}};/* backquote */
- #undef N_MENU
- #define N_MENU 8
-
- char *sd_intCon[] = {" No Interpret Controls ", " Interpret Controls "};
- char *sd_aWrap[] = {" No Auto Wrap ", " Auto Wrap "};
- char *sd_softFont[] = {" ROM Font ", " Soft Font "};
- char *sd_cur[] = {" No Cursor ", " Cursor "};
- char *sd_sLine[] = {" No Status Line ", " Status Line "};
- char *sd_backQ[] = {" No Backquote ", " Backquote "};
-
- static displayDirectory()
- {
- register int menu;
- int softFontDummy;
- char *msg;
-
- sdisplay[3].string = sd_intCon[intConSave];
- sdisplay[4].string = sd_aWrap[autoWrap];
- sdisplay[5].string = sd_softFont[softFont];
- sdisplay[6].string = sd_cur[cursorSave];
- sdisplay[7].string = sd_sLine[0 /*stLineEnable*/];
- sdisplay[8].string = sd_backQ[backQuote];
- putmenu(N_MENU, sdisplay);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, sdisplay, menu)) {
- case 1: return(dispEnhanstDirectory());
- case 2: return(M_DIRECTORY);
- case 3: sdisplay[3].string = sd_intCon[intConSave = !intConSave]; break;
- case 4: sdisplay[4].string = sd_aWrap[autoWrap = !autoWrap]; break;
- case 5:
- #ifdef SOFT_FONT
- softFontDummy = !softFont;
- if (softFontDummy && fontFileLoaded == NO) {
- putStatus("Loading font...");
- msg = fontLoad(fontName);
- if (msg) {
- putStatus(msg);
- break;
- }
- }
- if (softFont)
- attrib = eraseAttr = _NORMAL; /* normal attribute */
- initPage();
- softFont = softFontDummy;
- sdisplay[5].string = sd_softFont[softFont];
- setCRTMode();
- putmenu(N_MENU, sdisplay);
- #else
- putStatus("soft font not installed");
- #endif /* SOFT_FONT */
- break;
- case 6: sdisplay[6].string = sd_cur[cursorSave = !cursorSave]; break;
- case 7: sorry(); break;
- #if 0
- case 7:
- if ((statline = !statline) == YES)
- enable25();
- else
- disable25();
- sdisplay[7].string = sd_sLine[statline]; break;
- #endif
- case 8: /* PC98 only */
- #ifdef PC98
- sdisplay[8].string = sd_backQ[backQuote = !backQuote]; break;
- #else
- onlyThis(); break;
- #endif /* PC98 */
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** dispEnhanstDirectory()
- *
- * display enhancements set-up directory
- */
- struct _menu sdispenhanst[] = {
- /* 0 */{0, 0, " Display Enhancements Set-Up", NULL},
- /* 1 */{0, 2, toNext, "d1"},
- /* 2 */{17, 2, toDir, "to dir"},
- /* 3 */{32, 2, " magenda char ", "d3"}, /* ccol */
- /* 4 */{47, 2, " magenda back ", "d4"}, /* bcol */
- /* 5 */{62, 2, " magenda border ", "d5"},
- /* 6 */{0, 4, NULL, "d6"}, /*blink*/
- /* 7 */{18, 4, NULL, "d7"}, /* under */
- /* 8 */{43, 4, NULL, "d8"}};/*vbell*/
- #undef N_MENU
- #define N_MENU 8
-
- char *sde_blinkCursor[] = {" Static Cursor ", " Blinking Cursor "};
- char *sde_blockCursor[] = {" Underline Cursor Style ", " Block Cursor Style "};
- char *sde_vbell[] = {" Audible Bell ", " Visible Bell ", " Both A/V Bell "};
- char *sde_ccol = " %s Char ";
- char *sde_ecol = " %s Back ";
- char *sde_bcol = " %s Border ";
- #ifdef PC98
- char *colname[] = {"Black ","Blue ","Red ","Vioret ","Green ",
- "Magenta", "Yellow ","White "};
- #endif
- #if defined(IBMPC) || defined(J3100)
- char *colname[] = {"Black ","Blue ","Green ", "Cyan ","Red ",
- "Magenta", "Brown ","White "};
- #endif
-
- static dispEnhanstDirectory()
- {
- register int menu;
- int ccol;
- int ecol;
- int bcol;
-
- if (softFont)
- attrib = eraseAttr = _NORMAL; /* normal attribute */
-
- #ifdef PC98
- bcol = border>>4;
-
- if (eraseAttr & B_REVER) {
- ecol = eraseAttr>>5; /* non-black */
- ccol = 0;
- } else {
- ecol = 0; /* black */
- ccol = attrib>>5;
- }
- #endif
- #ifdef IBMPC
- ccol = attrib & 0x07;
- ecol = (attrib & 0x70) >> 4;
- bcol = 0;
- #endif
- #ifdef J3100
- ccol = 7;
- ecol = 0;
- bcol = 0;
- #endif
- sprintf(sdispenhanst[3].string, sde_ccol, colname[ccol]);
- sprintf(sdispenhanst[4].string, sde_ecol, colname[ecol]);
- sprintf(sdispenhanst[5].string, sde_bcol, colname[bcol]);
- sdispenhanst[6].string = sde_blinkCursor[blinkCursor];
- sdispenhanst[7].string = sde_blockCursor[blockCursor];
- sdispenhanst[8].string = sde_vbell[visibleBell];
- putmenu(N_MENU, sdispenhanst);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, sdispenhanst, menu)) {
- case 1: return(M_NEXT);
- case 2: return(M_DIRECTORY);
- #ifdef PC98
- case 3:
- if (softFont)
- break;
- if (ecol != 0) {
- putStatus("Only black char with non-black backgroud");
- break;
- }
- if (++ccol >= MAX_BACK_COLOR) ccol = 0;
- eraseAttr = attrSave = attrib = (ccol<<5)|B_NORMAL;
- goto clearAll;
- case 4: if (++ecol >= MAX_BACK_COLOR) ecol = 0;
- if (softFont)
- break;
- if (ecol == 0) { /* black */
- eraseAttr = A_WHITE|B_NORMAL;
- ccol = 7; /* white char */
- } else {
- eraseAttr = (ecol<<5)|B_REVER|B_NORMAL;
- ccol = 0; /* black char */
- }
- attrSave = attrib = eraseAttr;
- sprintf(sdispenhanst[4].string, sde_ecol, colname[ecol]);
- clearAll: sprintf(sdispenhanst[3].string, sde_ccol, colname[ccol]);
- initPage();
- clearSavedPage(page0Save);
- curXSave = curYSave = 0;
- putmenu(N_MENU, sdispenhanst);
- break;
- case 5: if (++bcol >= MAX_BACK_COLOR) bcol = 0;
- border = (bcol << 4);
- sprintf(sdispenhanst[5].string, sde_bcol, colname[bcol]);
- setBorder(border);
- break;
- #endif /* PC98 */
- #ifdef IBMPC
- case 3:
- if (softFont)
- break;
- if (++ccol >= MAX_BACK_COLOR) ccol = 0;
- goto clearAll;
- case 4:
- if (softFont)
- break;
- if (++ecol >= MAX_BACK_COLOR) ecol = 0;
- clearAll: attrSave = eraseAttr = attrib = (ccol | (ecol<<4));
- sprintf(sdispenhanst[3].string, sde_ccol, colname[ccol]);
- sprintf(sdispenhanst[4].string, sde_ecol, colname[ecol]);
- initPage();
- clearSavedPage(page0Save);
- curXSave = curYSave = 0;
- putmenu(N_MENU, sdispenhanst);
- break;
- case 5:
- break;
- #endif /* IBMPC */
- #ifdef J3100
- case 3: case 4: case 5: break;
- #endif /* J3100 */
- case 6:
- sdispenhanst[6].string = sde_blinkCursor[blinkCursor = !blinkCursor];
- break;
- case 7:
- sdispenhanst[7].string = sde_blockCursor[blockCursor = !blockCursor];
- break;
- case 8: if (++visibleBell > MAX_BELL_MODE) visibleBell = 0;
- sdispenhanst[8].string = sde_vbell[visibleBell]; break;
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** generalDirectory
- *
- * general set-up directory
- */
- struct _menu sgeneral[] = {
- /* 0 */{0, 0, " General Set-Up"},
- /* 1 */{0, 2, toNext, "G1"},
- /* 2 */{17, 2, toDir, "to dir"},
- /* 3 */{32, 2, " VT200 Mode, 7 Bit Controls ", "G3"},
- /* 4 */{61, 2, " VT220 ID ", "G4"},
- /* 5 */{0, 4, NULL, "G5"}, /*keypad*/
- /* 6 */{17, 4, NULL, "G6"}, /*cursor*/
- /* 7 */{38, 4, NULL, "G7"}, /*newline*/
- /* 8 */{52, 4, NULL, "G8"}, /*JIS*/
- /* 9 */{0, 6, NULL, "G9"}, /*fep*/
- /* 10*/{22, 6, NULL, "G10"},/*speed*/
- /* 11*/{37, 6, NULL, "G11"}};/*bskey*/
- #undef N_MENU
- #define N_MENU 11
-
- char *sg_padkey[] = {" Numeric Keypad ", " Appl. Keypad "};
- char *sg_curkey[] = {" Normal Cursor Keys ", " Appl. Cursor Keys "};
- char *sg_newline[] = {" No New Line ", " New Line "};
- char *sg_code[] = {" Shift JIS ", " Old JIS ", " New JIS ",
- " EUC ", " NEC KANJI "};
- #ifdef J3100
- char *sg_fep[] = {" KANJI-KEY FEP "};
- #else /* !J3100 */
- char *sg_fep[] = {" No FEP ", " CTRL-XFER FEP ",
- " SHIFT-XFER FEP ", " CTRL/SHIFT-XFER FEP "};
- #endif /* J3100 */
- char *sg_mSpeed[] = {" Mouse Fast ", " Mouse Middle ", " Mouse Slow "};
-
- static generalDirectory()
- {
- register int menu;
- int tmp;
- char buf[10];
- char buf2[40];
- extern int newline;
-
- sgeneral[5].string = sg_padkey[applKeypad];
- sgeneral[6].string = sg_curkey[applCursor];
- sgeneral[7].string = sg_newline[newline];
- #ifdef KANJI
- sgeneral[8].string = sg_code[kanjiSave];
- sgeneral[9].string = sg_fep[fepInvoke];
- #else
- sgeneral[8].string = " No KANJI ";
- sgeneral[9].string = " No KANJI ";
- #endif /* KANJI */
- sgeneral[10].string = sg_mSpeed[mouseSpeed];
- if (bsKeyRatio) {
- sprintf(buf2, msg_bsNum /*" BS Key Watcher %2u%% "*/, bsKeyRatio);
- sgeneral[11].string = buf2;
- } else
- sgeneral[11].string = msg_bsOff/*" BS Key Watcher OFF "*/;
-
- putmenu(N_MENU, sgeneral);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, sgeneral, menu)) {
- case 1: return(genEnhanstDirectory());
- case 2: return(M_DIRECTORY);
- case 3: case 4:
- onlyThis(); break;
- case 5: sgeneral[5].string = sg_padkey[applKeypad = !applKeypad]; break;
- case 6: sgeneral[6].string = sg_curkey[applCursor = !applCursor]; break;
- case 7: sgeneral[7].string = sg_newline[newline = !newline]; break;
- #ifdef KANJI
- case 8: if (++kanjiSave > KMAX) kanjiSave = SJIS;
- sgeneral[8].string = sg_code[kanjiSave]; break;
- case 9:
- #if MAX_FEP_XFER
- if (++fepInvoke > MAX_FEP_XFER)
- fepInvoke = 0;
- sgeneral[9].string = sg_fep[fepInvoke];
- if (fepInvoke == FEP_BOTHXFER)
- putStatus("Please take attention.");
- else
- clearStatus();
- #else
- onlyThis();
- #endif /* MAX_FEP_XFER */
- break;
- #else
- case 8: case 9: onlyThis(); break;
- #endif /* KANJI */
- case 10: if (++mouseSpeed > MOUSE_SPEED_MAX)
- mouseSpeed = 0;
- sgeneral[10].string = sg_mSpeed[mouseSpeed];
- break;
- case 11:
- #ifdef BS_WATCHER
- sprintf(buf, "%d%%", bsKeyRatio);
- if (emacs("BS key ratio (N% or off): ", buf, 10, E_NO_HELP) == ERR)
- break;
- tmp = atoi(buf);
- if (tmp < 0 || tmp > 99)
- break;
- bsKeyRatio = tmp;
- if (bsKeyRatio) {
- sprintf(buf2, msg_bsNum/*" BS Key Watcher %2u%% "*/, bsKeyRatio);
- sgeneral[11].string = buf2;
- } else
- sgeneral[11].string = msg_bsOff /*" BS Key Watcher OFF "*/;
- #else
- onlyThis();
- #endif /* BS_WATCHER */
- break;
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** genEnhanstDirectory
- *
- * general enhansments set-up directory
- */
- struct _menu sgenenhanst[] = {
- /* 0 */{0, 0, " General Enhancements Set-Up"},
- /* 1 */{0, 2, toNext, "g1"},
- /* 2 */{17, 2, toDir, "to dir"},
- /* 3 */{32, 2, NULL, "g3"},/*form*/
- /* 4 */{58, 2, NULL, "g4"},/*linemode*/
- /* 5 */{0, 4, NULL, "g5"},/*tab*/
- /* 6 */{12, 4, NULL, "g6"},/*saver*/
- /* 7 */{28, 4, NULL, "g7"},/*bsave*/
- /* 8 */{42, 4, NULL, "g8"},/*lock*/
- /* 9 */{0, 6, NULL, "g9"},/*dial*/
- /* 10*/{24, 6, " Dialing Sequence ", "g10"},/*seq*/
- /* 11*/{43, 6, " Default Command ", "g11"}};/*com*/
- #undef N_MENU
- #define N_MENU 11
-
- char *sge_form[] = {" Form Feed: Line Feed ", " Form Feed: Home & Clear "};
- char *sge_lineMode[] = {" 24 line mode ", " 25 line mode ",
- " 19 line mode ", " 20 line mode "};
- char *sge_tab[] = {" Skip Tab ", " Space Tab "};
- char *sge_saver[] = {" CRT Saver Off ", " CRT Saver 3 ", " CRT Saver 10 "};
- char *sge_lock[] = {" No Shift/Ctrl Lock ", " Shift/Ctrl Lock "};
- char *sge_dial[] = {" No Dialing at Startup ", " Dialing at Startup "};
-
- static genEnhanstDirectory()
- {
- register int menu;
- extern int formfeed;
- extern char *saverName(); /* saver??.c */
-
- sgenenhanst[3].string = sge_form[formfeed];
- sgenenhanst[4].string = sge_lineMode[lineMode];
- sgenenhanst[5].string = sge_tab[spaceTab];
- sgenenhanst[6].string = sge_saver[saver];
- sgenenhanst[7].string = saverName(saverType);
- sgenenhanst[8].string = sge_lock[shiftLock];
- sgenenhanst[9].string = sge_dial[dialStartup];
-
- putmenu(N_MENU, sgenenhanst);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, sgenenhanst, menu)) {
- case 1: return(M_NEXT);
- case 2: return(M_DIRECTORY);
- case 3: sgenenhanst[3].string = sge_form[formfeed = !formfeed]; break;
- case 4: if (++lineMode > MAX_LINE_MODE) lineMode = 0;
- sgenenhanst[4].string = sge_lineMode[lineMode];
- clearSavedPage(page0Save);
- curXSave = curYSave = saveX = saveY = 0;
- setLineMode(lineMode);
- lowScrRgSave = bottomLine;
- setLineMode(LINE_MODE_25);
- break;
- case 5: sgenenhanst[5].string = sge_tab[spaceTab = !spaceTab]; break;
- case 6: if (++saver > MAX_CRT_SAVER) saver = 0;
- setTimerValue();
- sgenenhanst[6].string = sge_saver[saver];
- break;
- case 7: if (maxSaverType == 0) {
- onlyThis();
- } else {
- if (++saverType > maxSaverType) saverType = 0;
- sgenenhanst[7].string = saverName(saverType);
- }
- break;
- #ifdef PC98
- case 8: sgenenhanst[8].string = sge_lock[shiftLock = !shiftLock];
- if (shiftLock)
- (void)helpSystem("shift lock");
- else
- clearCopyright();
- break;
- #else
- case 8: notSupported(); break;
- #endif /* PC98 */
- case 9: sgenenhanst[9].string = sge_dial[dialStartup = !dialStartup];
- break;
- case 10: strcpy(tmpBuf, phone);
- if (emacs("Sequence: ", tmpBuf, MAX_PHONE, E_HELP) != ERR)
- strcpy(phone, tmpBuf);
- break;
- case 11:
- strcpy(tmpBuf, defaultCommandLine);
- if (emacs("command: ", tmpBuf, MAX_FILE_NAME, E_HELP) != ERR)
- strcpy(defaultCommandLine, tmpBuf);
- break;
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** commDirectory()
- *
- * communication set-up directory
- */
- struct _menu scom[] = {
- /* 0 */{0, 0, " Communication Set-Up"},
- /* 1 */{0, 2, toNext, "C1"},
- /* 2 */{17, 2, toDir, "to dir"},
- /* 3 */{32, 2, " Baud Rate = 38400 ", "C3"},
- /* 4 */{52, 2, NULL, "C4"},/*parity*/
- /* 5 */{0, 4, NULL, "C5"},/*stop*/
- /* 6 */{13, 4, NULL, "C6"},/*echo*/
- /* 7 */{29, 4, NULL, "C7"},/*xon*/
- /* 8 */{44, 4, NULL, "C8"},/*port*/
- /* 9 */{52, 4, NULL, "C9"}};/*drop*/
- #undef N_MENU
- #define N_MENU 9
-
- char *sc_baud = " Baud Rate = %5u ";
- char *sc_par[] = {" 8 Bits, No Parity ", " 8 Bits, Even Parity ",
- " 7 Bits, No Parity ", " 7 Bits, Even Parity ", " 7 Bits, Space Parity "};
- char *sc_stop[] = {" 1 Stop Bit ", " 2 Stop Bit "};
- char *sc_echo[] = {" No Local Echo ", " Local Echo "};
- char *sc_xon[] = {" No Flow Ctrl ", " XON/XOFF ", " RTS/CTS "};
- char *sc_port[] = {" COM1: ", " COM2: ", " COM3: ", " COM4: ", " Ether "};
- char *sc_drop[] = {" Keep Line at Exit ", " Drop Line at Exit "};
-
- static commDirectory()
- {
- register int menu;
-
- sprintf(scom[3].string, sc_baud, numBaud(baud));
- scom[4].string = sc_par[paritybit];
- scom[5].string = sc_stop[stopbit];
- scom[6].string = sc_echo[echoMode];
- scom[7].string = sc_xon[xonXoff];
- scom[8].string = sc_port[portNo];
- scom[9].string = sc_drop[dropER];
-
- putmenu(N_MENU, scom);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, scom, menu)) {
- case 1: return(M_NEXT);
- case 2: return(M_DIRECTORY);
- case 3: if (++baud > BAUD_NUM_MAX) baud = 1;
- if (numBaud(baud) == 0)
- baud = 1;
- sprintf(scom[3].string, sc_baud, numBaud(baud));
- initPortDevice(baud, parity);
- baudrate = numBaud(baud);
- break;
- case 4: if (++paritybit > MAX_PARITY) paritybit = 0;
- scom[4].string = sc_par[paritybit];
- parity = parcalc(paritybit, stopbit);
- initPortDevice(baud, parity);
- break;
- case 5: stopbit = !stopbit;
- scom[5].string = sc_stop[stopbit];
- parity = parcalc(paritybit, stopbit);
- initPortDevice(baud, parity);
- break;
- case 6: scom[6].string = sc_echo[echoMode = !echoMode]; break;
- case 7: if (++xonXoff > FLOWCTRL_MAX) xonXoff = 0;
- scom[7].string = sc_xon[xonXoff];
- break;
- case 8: if (++portNo > MAX_PORT) portNo = 0;
- scom[8].string = sc_port[portNo];
- setPort(portNo);
- break;
- case 9: scom[9].string = sc_drop[dropER = !dropER]; break;
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** printerDirectory
- *
- * printer set-up directory
- */
- struct _menu sprinter[] = {
- /* 0 */{0, 0, " Printer Set-Up"},
- /* 1 */{0, 2, toNext, "P1"},
- /* 2 */{17, 2, toDir, "to dir"},
- /* 3 */{32, 2, NULL, "P3"}, /*auto*/
- /* 4 */{45, 2, " Send Formfeed ", "P4"},/*form*/
- /* 5 */{61, 2, " Spacing=8 ", "P5"}};/*spacing*/
- #undef N_MENU
- #define N_MENU 5
-
- char *sp_print[] = {" No Print ", " Auto Print "};
- char *sp_space = " Spacing=%d ";
-
- static printerDirectory()
- {
- register int menu;
-
- sprinter[3].string = sp_print[printMSave];
- sprintf(sprinter[5].string, sp_space, spacing);
- putmenu(N_MENU, sprinter);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, sprinter, menu)) {
- case 1: return(M_NEXT);
- case 2: return(M_DIRECTORY);
- case 3: printMSave = !printMSave;
- if (printMSave == YES)
- if (checkPrinterReady() == ERR) {
- printMSave = NO;
- putStatus(msg_prnNotRdy /*"Printer not ready"*/); bell();
- } else
- printOn();
- sprinter[3].string = sp_print[printMSave];
- break;
- case 4: if (checkPrinterReady() == ERR) {
- putStatus(msg_prnNotRdy /*"Printer not ready"*/); bell();
- } else
- outPrinter(0x0c);
- break;
- case 5: /* PC98 only */
- if (++spacing > 8) spacing = 0;
- sprintf(sprinter[5].string, sp_space, spacing);
- break;
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** keybdDirectory()
- *
- * keyboard set-up directory
- */
- struct _menu skey[] = {
- /* 0 */{0, 0, " Keyboard Set-Up "},
- /* 1 */{0, 2, toNext, "K1"},
- /* 2 */{17, 2, toDir, "to dir"},
- /* 3 */{32, 2, NULL, "K3"},/*click*/
- /* 4 */{46, 2, NULL, "K4"},/*ansi*/
- /* 5 */{64, 2, NULL, "K5"},/*bs*/
- /* 6 */{0, 4, " Remap Keys ", "K6"},
- /* 7 */{13, 4, " Function Keys ", "K7"},
- /* 8 */{29, 4, " SHIFT-Function Keys ", "K8"},
- /* 9 */{51, 4, " CTRL-Function keys ", "K9"},
- /* 10*/{0, 6, " META-Function keys ", "K10"},
- /* 11*/{21, 6, " Normal Cursor Keys ", "K11"},
- /* 12*/{42, 6, " Appl. Cursor Keys ", "K12"},
- /* 13*/{62, 6, " Appl. Keypad ", "K13"}};
- #undef N_MENU
- #define N_MENU 13
-
- char *sk_click[] = {" No Keyclick ", " Keyclick "};
- char *sk_asckey[] = {" PC9801 Keyboard ", " ANSI Keyboard "};
- char *sk_bsDel[] = {" BS key BS ", " BS key DEL "};
-
- static keybdDirectory()
- {
- register int menu;
-
- skey[3].string = sk_click[clickFlag];
- skey[4].string = sk_asckey[asckey];
- skey[5].string = sk_bsDel[bsDel];
-
- putmenu(N_MENU, skey);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, skey, menu)) {
- case 1: return(M_NEXT);
- case 2: return(M_DIRECTORY);
- case 3: skey[3].string = sk_click[clickFlag = !clickFlag]; break;
- #ifdef PC98
- #ifdef PC98XA
- case 4: onlyThis(); break;
- #else
- case 4: /* PC98 only */
- skey[4].string = sk_asckey[asckey = !asckey];
- keyMode(); break;
- #endif /* PC98XA */
- #else
- case 4: onlyThis(); break;
- #endif /* PC98 */
- case 5: skey[5].string = sk_bsDel[bsDel = !bsDel];
- setBSDel(bsDel); break;
- case 6: switch(keyRemapDirectory()) {
- case M_DIRECTORY: return(M_DIRECTORY);
- case M_NEXT: putmenu(N_MENU, skey); menu = 6; break;
- default: return(END_SETUP);
- }
- break;
- case 7: editPFKey(); break;
- case 8: editSPFKey(); break;
- case 9: (void)helpSystem(skey[9].key); break;
- case 10: (void)helpSystem(skey[10].key); break;
- case 11: editCursorKey(); break;
- case 12: editAppCursorKey(); break;
- case 13: editAppKeyPad(); break;
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** keyRemapDirectory()
- *
- * keyboard remap set-up directory
- */
- struct _menu sremap[] = {
- /* 0 */{0, 0, " Keyboard Map Set-Up ", NULL},
- /* 1 */{0, 2, " To Directory ", "to dir"},
- /* 2 */{15, 2, " To Keyboard Set-Up ", "k2"},
- /* 3 */{36, 2, " Normal-Keys ", "k3"},
- /* 4 */{50, 2, " Shift-Keys ", "k4"},
- /* 5 */{63, 2, " CTRL-Keys ", "k5"},
- /* 6 */{0, 4, " Kana Keys ", "k6"},
- /* 7 */{12, 4, " Shift-Kana Keys ", "k7"},
- /* 8 */{30, 4, " hterm CTRL-Key Binding ", "k8"},
- /* 9 */{55, 4, " Swap keys ", "k9"}};
- #undef N_MENU
- #define N_MENU 9
-
- static keyRemapDirectory()
- {
- register int menu;
-
- putmenu(N_MENU, sremap);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, sremap, menu)) {
- case 1: return(M_DIRECTORY);
- case 2: return(M_NEXT);
- case 8: editBinding(); break;
- #ifdef PC98
- case 3: editNormalKeys(); break;
- case 4: editShiftKeys(); break;
- case 5: editCtrlKeys(); break;
- case 6: editKanaKeys(); break;
- case 7: editShKanaKeys(); break;
- case 9: editKeySwapTable(); break;
- #else
- case 3: case 4: case 5: case 6: case 7: case 9:
- sorry();
- break;
- #endif
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** tabDirectory()
- *
- * tab set-up directory
- */
- struct _menu stab[] = {
- /* 0 */{0, 0, " Tab Set-Up"},
- /* 1 */{0, 2, toNext, "T1"},
- /* 2 */{17, 2, toDir, "to dir"},
- /* 3 */{32, 2, " Clear All Tabs ", "T3"},
- /* 4 */{49, 2, NULL, "T4"},
- /* 5 */{0, 4, " Edit Tabs ", "T5"}};
- #undef N_MENU
- #define N_MENU 5
-
- char *tab_ntab[] = {" Set 4 Column Tabs ", " Set 8 Column Tabs "};
-
- static tabDirectory()
- {
- register int menu;
- static int tabn = 0;
-
- stab[4].string = tab_ntab[tabn];
-
- putmenu(N_MENU, stab);
- menu = 1;
- for (;;) {
- dispTabs();
- switch(menu = getmenu(N_MENU, stab, menu)) {
- case 1: return(M_NEXT);
- case 2: return(M_DIRECTORY);
- case 3: clearAllTabs(); dispTabs(); break;
- case 4: stab[4].string = tab_ntab[tabn = !tabn];
- setTabs(tabn ? 8 : 4); dispTabs(); break;
- case 5: editTabs(); break;
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** fileXferDirectory()
- *
- * file transfer set-up directory
- */
- struct _menu fxfer[] = {
- /* 0 */{0, 0, " File Transfer Set-Up"},
- /* 1 */{0, 2, toNext, "X1"},
- /* 2 */{17, 2, toDir, "to dir"},
- /* 3 */{32, 2, " Options ", "X3"},
- /* 4 */{42, 2, NULL, "X4"}, /* log*/
- /* 5 */{61, 2, NULL, "X5"}, /* up*/
- /* 6 */{0, 4, " XMODEM Receive ", "X6"},
- /* 7 */{17, 4, " XMODEM Send ", "X7"},
- /* 8 */{31, 4, " Change Directory ", "X8"},
- /* 9 */{0, 6, " KERMIT Receive ", "X9"},
- /* 10*/{17, 6, " KERMIT Send ", "X10"},
- /* 11*/{31, 6, " KERMIT Get ", "X11"},
- /* 12*/{44, 6, " KERMIT Finish ", "X12"}};
- #undef N_MENU
- #define N_MENU 12
-
- char *fx_up[] = {" File Up Load Off ", " File Up Load On "};
- char *fx_log[] = {" Logging Off ", " Logging On "};
-
- static fileXferDirectory()
- {
- register int menu;
-
- fxfer[4].string = fx_up[upLoadSave ? 1 : 0];
- fxfer[5].string = fx_log[loggingSave ? 1 : 0];
-
- putmenu(N_MENU, fxfer);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, fxfer, menu)) {
- case 1: return(M_NEXT);
- case 2: return(M_DIRECTORY);
- case 3: switch (xferOptionsDirectory()) {
- case M_DIRECTORY: return(M_DIRECTORY);
- case M_NEXT: putmenu(N_MENU, fxfer); menu = 3; break;
- default: return(END_SETUP);
- }
- break;
- case 4: fxfer[4].string = fx_up[setUpLoad()];
- break;
- case 5: fxfer[5].string = fx_log[setLogging()];
- break;
- #ifdef XMODEM
- case 6: xrec(); break;
- case 7: xsend(); break;
- #else
- case 6: case 7:
- putStatus("XMODEM is not configured. Recompile hterm.");
- break;
- #endif /* XMODEM */
- case 8: changeDirectory(); /* in file.c */
- break;
- #ifdef KERMIT
- case 9: krec(); break;
- case 10: ksend(); break;
- case 11: kget(); break;
- case 12: kfinish(); break;
- #else
- case 9: case 10: case 11: case 12:
- putStatus("Kermit is not configured. Recompile hterm.");
- break;
- #endif /* KERMIT */
- case END_SETUP: return(END_SETUP);
- }
- }
- }
-
- /*
- ** xferOptionsDirectory()
- *
- * file transfer options set-up direcotory
- */
- struct _menu xsetup[] = {
- /* 0 */{0, 0, " File Xfer Options Set-Up", NULL},
- /* 1 */{0, 2, " To Directory ", "to dir"},
- /* 2 */{15, 2, " To File Xfer ", "x2"},
- /* 3 */{30, 2, NULL, "x3"},/*logtype*/
- /* 4 */{47, 2, NULL, "x4"},/*uptype*/
- /* 5 */{0, 4, NULL, "x5"},/*ftype*/
- /* 6 */{16, 4, NULL, "x6"},/*longp*/
- /* 7 */{31, 4, " Up Load Delay=100 ", "x7"}};/*delay*/
- #undef N_MENU
- #define N_MENU 7
-
- char *xs_log[] = {" Logging Text ", " Logging Binary "};
- char *xs_up[] = {" Up Load Text ", " Up Load Binary "};
- char *xs_xtype[] = {" XMODEM Binary ", " XMODEM Text "};
- char *xs_longp[] = {" Short Packet ", " Long Packet "};
- char *xs_delay = " Up Load Delay=%3d ";
-
- static xferOptionsDirectory()
- {
- register int menu;
-
- xsetup[3].string = xs_log[loggingType-1];
- xsetup[4].string = xs_up[upLoadType-1];
- xsetup[5].string = xs_xtype[xmodemType];
- xsetup[6].string = xs_longp[xmodemLongP];
- sprintf(xsetup[7].string, xs_delay, upLoadDelay);
-
- putmenu(N_MENU, xsetup);
- menu = 1;
- for (;;) {
- switch(menu = getmenu(N_MENU, xsetup, menu)) {
- case 1: return (M_DIRECTORY);
- case 2: return (M_NEXT);
- case 3: loggingType = loggingType == LOG_CONVERT ? LOG_NO_CONVERT : LOG_CONVERT;
- xsetup[3].string = xs_log[loggingType-1];
- break;
- case 4: upLoadType = upLoadType == UP_CONVERT ? UP_NO_CONVERT : UP_CONVERT;
- xsetup[4].string = xs_up[upLoadType-1];
- break;
- case 5: xsetup[5].string = xs_xtype[xmodemType = !xmodemType];
- break;
- case 6: xsetup[6].string = xs_longp[xmodemLongP = !xmodemLongP];
- break;
- case 7: upLoadDelay += 10;
- if (upLoadDelay >= 80) upLoadDelay = 10;
- sprintf(xsetup[7].string, xs_delay, upLoadDelay);
- break;
- case END_SETUP:
- return(END_SETUP);
- }
- }
- }
-
- /*
- *
- * setup utilities and goodies
- *
- */
-
- /*
- ** static void putmenu(register int num, register struct _menu *p)
- *
- * display set-up direcotry menu
- */
- static void putmenu(num, p)
- register int num;
- register struct _menu *p;
- {
- if (first)
- showHelp = YES;
- else if (showHelp)
- clearCopyright();
- normalMode();
- clearLine(SETUP_LINE, BOTTOM_LINE_25_MODE);
- locate(p->x, (p->y)+SETUP_LINE);
- conPrint(p->string);
- p++; num--;
- reverseMode();
- while (num-- >= 0) {
- locate(p->x, (p->y)+SETUP_LINE);
- conPrint(p->string);
- p++;
- }
- normalMode();
- }
-
- /*
- ** static getmenu(int num, register struct _menu p[], register int menu)
- *
- * return a selected item from menu
- */
- static int getmenu(num, p, menu)
- int num;
- register struct _menu p[];
- register int menu;
- {
- int oldmenu;
- char i, j, k;
- u_short key;
-
- oldmenu = menu;
- #ifdef J3100
- normalMode();
- locate(p[menu].x, p[menu].y+SETUP_LINE);
- #else
- if (softFont)
- normalMode();
- else
- conPrint("\x1b[0;7;5;1m");
- locate(p[menu].x, p[menu].y+SETUP_LINE);
- #endif /* J3100 */
- conPrint(p[menu].string);
- normalMode();
- for (;;) {
- oldmenu = menu;
- while ((int)(key = keyin()) == (-1)) {
- ;
- #ifdef TIMER_TEST /* timer test facility for debug */
- sprintf(tmpBuf, "%d ", timerValue);
- locate(0,24);
- conPrint(tmpBuf);
- #endif /* TIMER_TEST */
- }
- if ((key & 0xff) == 0x0d)
- return(menu);
- if (showHelp) {
- clearCopyright();
- showHelp = NO;
- }
- clearStatus();
- if (key == HOME_KEY || key == bindTab[C_TOL]) {
- menu = 1;
- } else if (key == END_KEY || key == bindTab[C_EOL]) {
- menu = num;
- } else if (key == LEFT_KEY || key == bindTab[C_BDEL] ||
- key == 'h' || key == DEL || key == bindTab[C_LEFT]) {
- if (--menu <= 0) menu = num;
- } else if (key == UP_KEY || key == 'k' || key == bindTab[C_UP]) {
- if (p[menu].y != 2) {
- for (i = 0; i <= menu; i++)
- if (p[menu].y - 2 == p[i].y)
- break; /* i = upper line first item */
- for (j = i; j <= menu; j++)
- if (p[menu].y == p[j].y)
- break; /* j = same line first item */
- menu = (menu - j > j - 1) ? (j - 1) : (i + menu - j);
- }
- } else if (key == DOWN_KEY || key == 'j' || key == bindTab[C_DOWN]) {
- for (i = 0; i <= menu; i++)
- if (p[menu].y == p[i].y)
- break; /* i = same line first item */
- for (j = i; j < num + 1; j++)
- if (p[menu].y + 2 == p[j].y)
- break; /* j = lower line first item */
- if (j == num + 1)
- ; /* menu is lowest line */
- else {
- for (k = j; k < (num + 1) && (p[menu].y+2) == p[k].y; k++)
- ;
- --k; /* k = lower line last item */
- menu = (menu - i + j >= k) ? k : (j + menu - i);
- }
- } else if (key == RIGHT_KEY || key == SPACE || key == 9 ||
- key == 'l' || key == bindTab[C_RIGHT]) {
- if (++menu > num) menu = 1;
- } else if (key == SETUP_KEY || key == META_PF9) { /* exit set-up */
- return(END_SETUP);
- } else if (key == STOP_KEY || key == META_PF10) { /* exit hterm */
- termination();
- } else if (key == ESC || key == bindTab[C_ESC]) { /* escape */
- if (p != smainmenu)
- return(2); /* to M_DIRECTORY */
- else
- return(END_SETUP); /* exit set-up */
- } else if (key == '?' || key == HELP_KEY) { /* help */
- (void)helpSystem(p[menu].key);
- } else {
- bell();
- }
- reverseMode();
- locate(p[oldmenu].x, p[oldmenu].y+SETUP_LINE);
- conPrint(p[oldmenu].string);
- #ifdef J3100
- normalMode();
- locate(p[menu].x, p[menu].y+SETUP_LINE);
- #else
- if (softFont)
- normalMode();
- else
- conPrint("\x1b[0;7;5;1m");
- locate(p[menu].x, p[menu].y+SETUP_LINE);
- #endif /* J3100 */
- conPrint(p[menu].string);
- normalMode();
- }
- }
- #else
- char *sge_lineMode[] = {" 24 line mode ", " 25 line mode ",
- " 19 line mode ", " 20 line mode "};
- char *sc_baud = " Baud Rate = %5u ";
- char *sc_par[] = {" 8 Bits, No Parity ", " 8 Bits, Even Parity ",
- " 7 Bits, No Parity ", " 7 Bits, Even Parity ", " 7 Bits, Space Parity "};
- #endif /* SETUP */
-