head 1.10; access ; symbols ; locks ; comment @ * @; 1.10 date 89.05.02.13.22.28; author pkern; state Exp; branches ; next 1.9; 1.9 date 89.04.05.16.58.53; author pkern; state Exp; branches ; next 1.8; 1.8 date 89.03.01.12.20.35; author pkern; state Exp; branches ; next 1.7; 1.7 date 89.02.23.17.47.54; author pkern; state Exp; branches ; next 1.6; 1.6 date 89.02.15.17.21.17; author pkern; state Exp; branches ; next 1.5; 1.5 date 89.02.03.15.50.15; author pkern; state Exp; branches ; next 1.4; 1.4 date 89.01.31.14.29.27; author pkern; state Exp; branches ; next 1.3; 1.3 date 89.01.31.14.28.28; author pkern; state Exp; branches ; next 1.2; 1.2 date 89.01.31.13.36.10; author pkern; state Exp; branches ; next 1.1; 1.1 date 89.01.05.13.37.05; author pkern; state Exp; branches ; next ; desc @@ 1.10 log @minor changes for 132-wide @ text @/* * setup.c: * setups(): emulate the Lanpar XT100+ setup screens. * (beware! code in setups() is not pretty) * genstat(): put general status bar on line 25. * * Copyright (c) 1989 University of Toronto. All rights reserved. * Anyone may use or copy this software, except that it may not be * sold for profit, that this copyright notice remain intact, and that * credit is given where it is due. The University of Toronto and the * author make no warranty and accept no liability for this software. */ static char rcsid[] = "$Header: setup.c,v 1.9 89/04/05 16:58:53 pkern Exp $"; #include "cterm.h" #include MACHINE_H #define TOGGLE(a) (a)=((a)+1)%2 /* toggle between 0 and 1 */ #define SWAP(a,b,g) g=a;a=b;b=g; /* swap a & b using g */ extern char tabs[], ansback[]; extern char proginfo[], copyright[]; extern uchar m_ansi, m_columns, m_newline; extern uchar m_repeat, m_reverse, m_smooth, m_wrap; extern char *bauds[]; extern uchar txtxfr; extern uchar c_norm, c_rev, c_bold, c_stat; /* main port parameters */ int n_port=-1, nbaud=B9600, t_spd=9600, r_spd=9600; uchar bpc=1, parity=0, stopbits=0, m_prty=0; /* printer port parameters */ int p_port=3, pbaud=B1200, pr_spd=1200; uchar p_bpc=1, p_prty=0, p_sbits=0, pm_pty=0; uchar cursor=1; /* block or underline cursor (block) */ uchar echo=0; /* local echo (none) */ uchar transparent=0; /* control chars (interpret) */ uchar local=0; /* connect (on line) */ uchar flowctl=1, xoff=0; /* auto xon/xoff, ready to receive */ uchar interlace=0; /* graphics display */ uchar ignrflow=0; /* don't ignore remote xon/xoff */ char rxoff=0; /* no remote XOFF yet */ uchar devrep=1; /* device report */ uchar altkey=0; /* alt key (emulate keypad) */ extern char *ukascii; uchar pt, zilch=0; uchar *sB[16] = { /* setup B related variables */ &m_smooth, /* scroll mode */ &m_repeat, /* autorepeat */ &m_reverse, /* screen mode */ &cursor, /* cursor type */ &zilch, /* margin bell (NA) (off) */ &zilch, /* keyclick (NA) (off) */ &m_ansi, /* ansi/vt52 */ &flowctl, /* auto xon/xoff */ &zilch, /* #/pound sign (NA) (#) */ &m_wrap, /* wraparound */ &m_newline, /* newline */ &interlace, /* interlace */ &parity, /* parity sense */ &m_prty, /* parity */ &bpc, /* bits per char */ /* &zilch; /* power (NA) (60 Hz) */ &stopbits /* stop bits */ }; uchar *sC[16] = { &zilch, /* printer => host */ &zilch, /* printer test */ &zilch, /* print termination */ &zilch, /* print extent */ &p_prty, /* printer parity sense */ &pm_pty, /* printer parity */ &p_bpc, /* printer bits per char */ &echo, /* local echo */ &zilch, /* screen saver */ &zilch, /* diagnostic mode */ &zilch, /* two page operation */ /* &zilch, /* smooth scroll speed */ &altkey, /* Alt key usage */ &transparent, /* transparency mode */ &ignrflow, /* discard xon/xoff from host */ &zilch, /* character rate to host */ &devrep /* identification */ }; int *sBi[3] = { &n_port, /* comm port number */ &t_spd, /* Tx speed */ &r_spd /* Rx speed */ }; int *sCi[2] = { &p_port, /* printer port */ &pr_spd /* printer speed */ }; static char *sBs[48] = { /* setup B label strings */ "SCROLL: ", "jump", "smooth", "AUTOREPEAT: ", "off", "on", "SCREEN BACKGROUND: ", "dark", "light", "CURSOR: ", "underline", "block", "MARGIN BELL: ", "off", "on", "KEYCLICK: ", "off", "on", "ANSI/VT52: ", "vt52", "ansi", "AUTO XON XOFF: ", "off", "on", "SHIFTED \"3\": ", "#", UK_s3, "WRAP AROUND: ", "off", "on", "NEW LINE: ", "off", "on", "INTERLACE: ", "off", "on", "PARITY SENSE: ", "odd", "even", "PARITY: ", "disabled", "enabled", "BITS PER CHAR: ", "7", "8", /* "POWER (HZ): ", "60", "50", */ "STOPBITS: ", "1", "2", }; static char *sCs[48] = { /* setup C label strings */ "PRINTER => HOST: ", "disabled", "enabled", "PRINTER TEST: ", "disabled", "enabled", "PRINT TERMINATION: ", "none", "form feed", "PRINT EXTENT: ", "scroll window", "all", "PARITY SENSE: ", "odd", "even", "PARITY: ", "disabled", "enabled", "BITS PER CHAR: ", "7", "8", "LOCAL ECHO: ", "disabled", "enabled", "SCREEN SAVER: ", "disabled", "enabled", "DIAGNOSTIC MODE: ", "disabled", "enabled", "TWO PAGE OPERATION (80 COL): ", "disabled", "enabled", /* "SMOOTH SCROLL SPEED: ", "slow", "fast", */ "ALT KEY: ", "emulate keypad", "Meta key", "TRANSPARENCY MODE: ", "disabled", "enabled", "DO NOT PROCESS \"XOFF/XON\": ", "disabled", "enabled", "CHARACTER RATE TO HOST: ", "unlimited", "limited to 60 cps", "DEVICE REPORT: ", "Esc[?1;11c", "Esc[?1;2c", }; /* print prompt string and get an answer in nbuf[] */ char * pget(prompt, buf, n) char *prompt, buf[]; int n; { char *cgets(); burps(prompt, 1, 21, 0); curs_xy(strlen(prompt)+1, 21); if (!n) return ((char *)0); buf[0] = n; return(cgets(buf)); } /* clean up prompt area */ pclean(x) int x; { curs_xy(1, 21); eol_erase(1, 21); curs_xy(x, 23); /* return to proper position */ } /* display setup screens, set modes/parameters */ setups() { int ac; char **av, *nmpr; int (*proto)(), kermit(), xmodem(), text(); uchar uc; char b, pb, nbuf[256], *p, *s; int c, i, n, n0, x, ox, togl, pnum, ppn; /* restore kb interrupts */ reset_kbd(); /* save screen image */ save_scr(); pt = *(ukascii+'l'); pnum = n_port; ppn = p_port; b = nbaud; pb = pbaud; togl = 0; nmpr = ""; set_up: /* re-entry ... refreshes info screen */ curs_xy(1, 1); eos_erase(1, 1); genstat(1, 1); burps("SET-UP", 2, 2, AT_BLINK); burps("TO EXIT PRESS \"SETUP\"", 2, 4, AT_UL); burps(proginfo, 2, 6, 0); burps(copyright, 2, 7, 0); #ifdef PC /* re-map function key defines */ #define K_F11 K_F9 #define K_F12 K_F10 burps("\ F1 F2 F3 F4 \ F7 F8 F9 F10 ", 1, 10, 0); #else burps("\ F1 F2 F3 F4 \ F9 F10 F11 F12 ", 1, 10, 0); #endif burps("\ SETUP (SETUP) Break Backspace\ Up Down Left Right ", 1, 11, 0); burps("\ clear/ clear line/ setups\ toggle transmit receive 80/132 reset ", 1, 14, 0); burps("\ set tabs all tabs local a/b/c\ 1/0 speed speed (port #) ", 1, 15, 0); burps("\ 2@@ 3# 4$ 5% \ 6^ 7& 8* 9( 0) ", 1, 16, 0); set_a: /* setup screen A: tabs, dos & misc commands */ burps("A", 9, 2, AT_BLINK); for (i=uc=0; i+580) ? 80 : 132); goto set_up; case BS: case K_F11: case K_LEFT: x=(x>1)?x-1:1; curs_xy(x, 23); break; case SP: case K_F12: case K_RIGHT: x=(x<80)?x+1:80; curs_xy(x, 23); break; case CR: curs_xy(x=1, 23); break; case HT: curs_xy(x=tab(x), 23); break; case '5': case K_DOWN: goto set_b; break; case K_UP: goto set_c; break; case '4': /* toggle connect mode */ TOGGLE(local); genstat(x, 23); break; case '2': /* toggle tab */ if (tabs[x-1] == 'T') tabs[x-1] = SP; else tabs[x-1] = 'T'; burpc(tabs[x-1], x, 23); curs_xy(x-1, 23); break; case K_INS: /* set tab */ tabs[x-1] = 'T'; burpc(tabs[x-1], x, 23); curs_xy(x-1, 23); break; case K_DEL: /* erase tab */ tabs[x-1] = SP; burpc(tabs[x-1], x, 23); curs_xy(x-1, 23); break; case 'T': /* set default tabs */ curs_xy(1, 23); for(i=0; i1)?x-1:1; break; case SP: case K_F12: case K_RIGHT: x=(x 27 || i & 4) continue; i = (i & 3) | ((i & 24) >> 1); n = i * 3; if (togl) switch (i) { /* block 1 */ case 1: TOGGLE(m_repeat); kbautorep(m_repeat); break; case 2: TOGGLE(m_reverse); bkgnd(m_reverse); break; case 3: TOGGLE(cursor); curs_type(cursor); break; /* * case 6: case 7: case 9: case 10: * case 12: case 13: case 14: case 15: * TOGGLE(*sB[i]); break; */ /* block 2 */ case 6: TOGGLE(m_ansi); break; case 7: TOGGLE(flowctl); break; /* block 3 */ case 9: TOGGLE(m_wrap); break; case 10: TOGGLE(m_newline); break; case 11: TOGGLE(interlace); break; /* block 4 */ case 12: TOGGLE(parity); break; case 13: TOGGLE(m_prty); break; case 14: TOGGLE(bpc); break; case 15: TOGGLE(stopbits); break; default: break; } sdisp(x, *sB[i], sBs[n], sBs[n+1], sBs[n+2]); } goto done; set_c: /* setup C: some comm stuff, mostly printer-related */ curs_xy(1, 23); eos_erase(1, 23); burps("C", 9, 2, AT_BLINK); for (i=0; i<16; i++) nbuf[i] = (*sC[i]) + '0'; burps("1 .... 2 .... 3 .... 4 ....", 1, 24, 0); for(i=16, n=27; i; i-=4, n-=8) { nbuf[i] = NUL; burps(nbuf+i-4, n, 24, AT_REV); } burps("PRINTER PORT .", 49, 24, 0); s = "0"; *s = '1'+ppn; burps(s, 63, 24, 0); burps("SPEED ..... ", 66, 24, 0); burps(bauds[pb], 72, 24, 0); curs_xy(1, 23); for(ox=x=1, togl=0;; togl=0) { switch(c=kbdget()) { case K_SETUP: case K_F2: goto done; case '0': goto fresh; break; case BS: case K_F11: case K_LEFT: x=(x>1)?x-1:1; break; case SP: case K_F12: case K_RIGHT: x=(x<80)?x+1:80; break; case K_UP: goto set_b; break; case '4': /* toggle connect mode */ TOGGLE(local); genstat(x, 23); break; case '5': case K_DOWN: goto set_a; break; case CR: x = 1; break; case HT: x = tab(x); break; case '6': togl++; break; case '7': case '8': /* printer speed */ pb = (pb+1) % (EXTB+1); burps(bauds[pb], 72, 24, 0); curs_xy(x, 23); break; case '9': /* was 80/132 toggle */ case 'p': case 'P': /* printer port */ ppn = (ppn+1) % NPORTS; s = "0"; *s = '1'+ppn; burps(s, 63, 24, 0); curs_xy(x, 23); break; case 'S': /* save setups */ goto dumpit; break; case '!': /* dos command */ goto cmd; break; default: break; } if (x != ox) { eol_erase(ox, 23); curs_xy(x, 23); } ox = x; i = x-3; if (i > 27 || i & 4) continue; i = (i & 3) | ((i & 24) >> 1); n = i * 3; if (togl) switch (i) { /* * case 4: case 5: case 6: case 7: case 12: * TOGGLE(*sC[i]); break; */ case 4: TOGGLE(p_prty); break; case 5: TOGGLE(pm_pty); break; case 6: TOGGLE(p_bpc); break; case 7: TOGGLE(echo); break; /* block 3 */ case 11: TOGGLE(altkey); break; /* block 4 */ case 12: TOGGLE(transparent); break; case 13: TOGGLE(ignrflow); break; case 15: TOGGLE(devrep); break; default: break; } sdisp(x, *sC[i], sCs[n], sCs[n+1], sCs[n+2]); } done: pbaud = pb; pr_reset(); p_port = ppn; pr_init(); nbaud = b; if (pnum != n_port) { reset_prt(); n_port = pnum; init_prt(); } restore_scr(); init_kbd(); set_prt(); devset(); } /* display a setup option, underline current selection */ sdisp(x, sw, label, off, on) int x, sw; char *label, *off, *on; { char *p; int l, n, f; l = strlen(label); n = strlen(on); f = x+2+l+n; n = x+1+l; p = "0"; *p = '0' + (sw>0); burps(p, x, 24, AT_REV); burps(label, x+1, 23, 0); burps(on, n, 23, (sw)? AT_UL : 0); *p = '/'; burps(p, f-1, 23, 0); burps(off, f, 23, (sw)? 0 : AT_UL); *p = pt; burps(p, x, 23, 0); } char stbuf[133]; /* status line buffer */ extern char led[]; /* general status line */ genstat(x, y) uchar x, y; { /* comm information */ sprintf(stbuf, "port:%d data:%d%c%d speed:%5s %4s ", n_port+1, bpc+7, ((m_prty) ? ((parity) ? 'E' : 'O') : 'N'), stopbits+1, bauds[nbaud], (txtxfr)?" cat":" "); /* connect mode "leds" */ sprintf(&stbuf+35, "on line %c local %c ", (local) ? SP : '*', (local) ? '*' : SP); /* programmable "leds" */ sprintf(&stbuf+60, "1 %c 2 %c 3 %c 4 %c ", led[0], led[1], led[2], led[3]); sturp(stbuf, x, y); } @ 1.9 log @proto arg-maker cleaned up more generic columns (m_columns used) colours/intensities now set-able by user. @ text @d13 1 a13 1 static char rcsid[] = "$Header: setup.c,v 1.8 89/03/01 12:20:35 pkern Exp $"; d212 1 a212 1 /* re-map function keys */ d216 2 a217 4 F1 F2 F3 F4 \ F7 F8 F9 F10 \ SETUP (SETUP) Break Backspace\ Up Down Left Right ", 1, 10, 0); d220 2 a221 4 F1 F2 F3 F4 \ F9 F10 F11 F12 \ SETUP (SETUP) Break Backspace\ Up Down Left Right ", 1, 10, 0); d224 6 a229 2 clear/ clear line/ setups\ toggle transmit receive 80/132 reset \ d231 4 a234 3 1/0 speed speed (port #) \ 2@@ 3# 4$ 5% \ 6^ 7& 8* 9( 0) ", 1, 14, 0); a571 1 init_gfx(); d729 1 a729 1 char stbuf[81]; /* status line buffer */ @ 1.8 log @*** empty log message *** @ text @d3 1 a3 1 * setups(): simulate the Lanpar XT100+ setup screens. d13 1 a13 1 static char rcsid[] = "$Header: setup.c,v 1.7 89/02/23 17:47:54 pkern Exp $"; d23 2 a24 2 extern uchar m_ansi, m_wrap, m_newline; extern uchar m_smooth, m_repeat, m_reverse; d28 1 a28 1 extern uchar stcolour; d31 1 a31 1 int n_port=1, nbaud=B9600, t_spd=9600, r_spd=9600; a183 1 char *malloc(), *realloc(), *strtok(); d186 1 d237 3 a239 3 for (i=0; i<80; i+=20) { burps("1234567890", i+1, 24, 0); burps("1234567890", i+11, 24, AT_REV); d241 2 a242 1 tabs[80] = NUL; d256 4 d305 1 a305 1 for(i=0; i<80; i++) { d314 1 a314 1 for(i=0; i<80; i++) tabs[i] = SP; d378 17 a394 15 ac = 1; av = (char **)malloc(2 * sizeof(p)); av[0] = malloc(strlen(nmpr)+1); strcpy(av[0], nmpr); p = strtok(s, " \t"); while (p) { av[ac] = malloc(strlen(p)+1); strcpy(av[ac++], p); if (p = realloc(av, (ac+1) * sizeof(p))) av = (char **)p; #ifdef debug cprintf("-%d: %s\r\n", ac, av[ac-1]); #endif doxpnd(&ac, &av); p = strtok((char *)0, " \t"); d396 1 a396 11 av[ac] = (char *)0; #ifdef debug cprintf("argc = %d\r\n", ac); for(i=0; av[i]; i++) cprintf(" %s", av[i]); cputs("\r\n"); #endif /* make the call to protocol handler */ n = proto(ac,av); /* transfer done, show exit status */ d398 1 a398 4 sprintf(nbuf, "%s returned %d", av[0], n); burps(nbuf, 1, 25, AT_REV); curs_xy(strlen(nbuf)+1, 25); /* wait for user, then clean up */ a400 4 while (ac) free(av[--ac]); free(av); nmpr = ""; d411 18 d430 2 a431 3 s = pget("status line colour [0-7]: ", nbuf, 80); if (*s) { stcolour = atoi(s); a432 2 } pclean(x); d468 1 a468 1 case K_RIGHT: x=(x<80)?x+1:80; break; d547 4 @ 1.7 log @copyright info updated ALT bit label updated @ text @d13 1 a13 1 static char rcsid[] = "$Header: setup.c,v 1.6 89/02/15 17:21:17 pkern Exp $"; d22 1 @ 1.6 log @code added for altkey flag handling. @ text @d7 5 a11 1 * copyright (c) University of Toronto, 1988. d13 1 a13 1 static char rcsid[] = "$Header: setup.c,v 1.5 89/02/03 15:50:15 pkern Exp $"; d146 1 a146 1 "ALT KEY: ", "emulate keypad", "set 8th bit", d206 4 a209 1 burps(COPYRIGHT, 2, 6, 0); @ 1.5 log @TI-specific code cleaned out @ text @d9 1 a9 1 static char rcsid[] = "$Header: setup.c,v 1.4 89/01/31 14:29:27 pkern Exp $"; a24 2 extern char *NAME, *VERS, *COPY, *CWHO; d42 1 d52 1 d57 1 d62 1 d75 1 d80 1 d84 3 a86 1 &zilch, /* smooth scroll speed */ d109 1 d114 1 d119 1 d132 1 d137 1 d141 3 a143 1 "SMOOTH SCROLL SPEED: ", "slow", "fast", d202 1 a202 4 burps(NAME, 60, 2, 0); burps(VERS, 60 + strlen(NAME) + 1, 2, 0); burps(COPY, 60, 3, 0); burps(CWHO, 60, 4, 0); d211 1 a211 1 Up Down Left Right ", 1, 8, 0); d217 1 a217 1 Up Down Left Right ", 1, 8, 0); d662 2 a663 1 @ 1.4 log @*** empty log message *** @ text @d9 1 a9 1 static char rcsid[] = "$Header: setup.c,v 1.3 89/01/31 14:28:28 pkern Exp $"; a16 1 extern int keyhit; d143 2 d147 1 d166 1 d193 4 d199 6 d208 1 d237 4 a244 4 case BS: case K_F11: case K_LEFT: x=(x>1)?x-1:1; curs_xy(x, 23); break; d264 2 a265 1 burpc(tabs[x-1]); burpc(BS); d270 2 a271 1 burpc(tabs[x-1]); burpc(BS); d276 2 a277 1 burpc(tabs[x-1]); burpc(BS); a284 1 burpc(tabs[i]); d286 1 d439 4 a446 4 case BS: case K_F11: case K_LEFT: x=(x>1)?x-1:1; break; d464 5 a468 2 burps("A = ", 1, 21, 0); curs_xy(5, 21); i = 0; d470 2 a471 2 if (c