head 1.9; branch ; access ; symbols ; locks ; comment @ * @; 1.9 date 89.07.23.13.10.20; author pkern; state Exp; branches ; next 1.8; 1.8 date 89.06.08.13.26.03; author pkern; state Exp; branches ; next 1.7; 1.7 date 89.03.23.13.23.45; author pkern; state Exp; branches ; next 1.6; 1.6 date 89.02.15.17.19.46; author pkern; state Exp; branches ; next 1.5; 1.5 date 89.02.03.18.38.01; author pkern; state Exp; branches ; next 1.4; 1.4 date 89.02.03.16.46.39; author pkern; state Exp; branches ; next 1.3; 1.3 date 89.02.03.15.51.32; author pkern; state Exp; branches ; next 1.2; 1.2 date 89.01.31.14.01.45; author pkern; state Exp; branches ; next 1.1; 1.1 date 89.01.31.13.25.24; author pkern; state Exp; branches ; next ; desc @@ 1.9 log @*** empty log message *** @ text @/* * defs.c: init file(s) read or write handling. * * 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: defs.c,v 1.8 89/06/08 13:26:03 pkern Exp $"; #include #include #include #include "cterm.h" extern char tabs[]; extern uchar *sB[16], *sC[16]; extern int *sBi[3], *sCi[2]; extern int nbaud, pbaud, t_spd, pr_spd; extern char ansback[]; extern uchar c_norm, c_rev, c_bold, c_ul, c_stat; static char *svfl = FINIT; /* saved setups filename */ static char fnbuf[80]; /* * getdef -- retrieve setup configuration from a file. * - reads from fnam instead of FINIT, if fnam not null. */ getdefs(fnam) char *fnam; { FILE *fp, *fopen(); unsigned int ntoi(); int n=0, na=0, nb=0, nc=0, nt=0, chr_esc(); char *p, *bp, buf[128], *fgets(), *strchr(), *strtok(); nbaud = prtspd(t_spd); pbaud = prtspd(pr_spd); if (fnam && *fnam) /* ... then use another setups file */ { strcpy(fnbuf, fnam); svfl = fnbuf; } if ((fp = fopen(svfl, "r")) == NULL) return(-1); /* read the saved setups and do the initializations */ while(bp = fgets(buf, 127, fp)) { p = bp; bp += strlen(bp); switch(buf[0]) { case 'A': /* set some tabs */ nb = nc = 0; do { while (p 15) *(sBi[nb-16]) = atoi(p); else *(sB[nb]) = atoi(p) % 2; nb++; while (p < bp && isdigit(*p)) p++; } break; case 'C': /* setup C */ na = nb = 0; /* * get the 4 block of 4 1/0 flags and * the printer port number and speed */ while (p < bp && nc < 18) { if (!isdigit(*p)) { if (*p == '#') break; p++; continue; } if (nc > 15) *(sCi[nc-16]) = atoi(p); else *(sC[nc]) = atoi(p) % 2; nc++; while (p < bp && isdigit(*p)) p++; } break; case 'M': { /* Answerback message */ int c=0, d=0, i=0, n=0; na = nb = nc = 0; d = buf[2]; /* delimiter */ p += 3; /* start of message */ while (p < bp && *p != d) { if ((c = *p++) != '\\') { ansback[i++] = c; continue; } if ((c = chr_esc(p, &n)) < 0) continue; ansback[i++] = c; p += n; } ansback[i] = NUL; break; } case 'X': /* setup X: colour settings */ na = nb = nc = 0; p = strtok(p, " \t"); while ((p = strtok(NULL, " \t")) != NULL) { int c; c = *p; if ((p = strchr(p, '=')) == NULL) break; n = ntoi(++p); switch (c) { case 'n': c_norm = n; break; case 'r': c_rev = n; break; case 'b': c_bold = n; break; case 'u': c_ul = n; break; case 's': c_stat = n; break; } } break; default: /* notes, junk, ... etc. */ break; } } fclose(fp); /* set new tabs */ if (nt) for(na=0; na<132; na++) tabs[na] = (tabs[na] == 't') ? 'T' : SP; /* adjustments */ *(sBi[0]) -= 1; *(sCi[0]) -= 1; /* n_port--; p_port--; */ nbaud = prtspd(t_spd); pbaud = prtspd(pr_spd); #ifdef debug cputs("B: "); for(n=0; n<16; n++) cprintf(" %d%s", *sB[n], ((n+1)%4)?"":" "); cprintf(" %d %d %d\r\n", *sBi[0], *sBi[1], *sBi[2]); cputs("C: "); for(n=0; n<16; n++) cprintf(" %d%s", *sC[n], ((n+1)%4)?"":" "); cprintf(" %d %d\r\n", *sCi[0], *sCi[1]); n = getch(); #endif return(0); } /* * putdefs -- write current setup configuration to file svfl */ putdefs() { FILE *fp, *fopen(); int i, n; if ((fp = fopen(svfl, "a")) == NULL) return(-1); /* save tabs */ fprintf(fp, "# -- cterm setups --\n# setup A: tabs\nA:"); for (i=n=0; i<132; i++) { if (tabs[i] == 'T') { fprintf(fp, " %d", i+1); n += 2 + (i > 8) + (i > 98); } if (n > 72) { n = 0; fprintf(fp, "\nA:"); } } fprintf(fp, "\n#\n# setup B: main terminal options\nB:"); for (i=0; i<16; i++) fprintf(fp, " %d%s", *sB[i], ((i+1)%4)?"":" "); /* n_port, t_spd, r_spd */ fprintf(fp, " %d %d %d\n", *sBi[0]+1, *sBi[1], *sBi[2]); fprintf(fp, "#\n# setup C: printer & misc. options\nC:"); for (i=0; i<16; i++) fprintf(fp, " %d%s", *sC[i], ((i+1)%4)?"":" "); /* p_port, pr_spd */ fprintf(fp, " %d %d\n", *sCi[0]+1, *sCi[1]); fprintf(fp, "#\n# Answerback Message\nM:\""); for (i=0; ansback[i]; i++) { char *fmt = "%c"; if (ansback[i] < ' ' || ansback[i] > '~') fmt = "\\%03o"; fprintf(fp, fmt, (uchar)ansback[i]); } fprintf(fp, "\"\n\ #\n# setup X: text colour/intensity settings\n\ X: normal=%d reverse=%d bold=%d underline=%d status=%d\n", c_norm, c_rev, c_bold, c_ul, c_stat); #ifdef debug fprintf(fp, "#\n# debugging\n#\n"); #endif fclose(fp); return(0); } /* * chr_esc(): decode '\\' escape sequence * returns the char value, *ip == num of chars read */ static chr_esc(s, ip) char *s; int *ip; { int i, n; i = 0; n = -1; *ip = 1; switch (*s) { case 'a': n = '\007'; break; /* ANSI: audible bell */ case 'b': n = '\b'; break; /* BS */ case 'f': n = '\f'; break; /* FF */ case 'n': n = '\n'; break; /* LF */ case 'r': n = '\r'; break; /* CR */ case 't': n = '\t'; break; /* HT */ case 'v': n = '\v'; break; /* VT */ case '\\': n = '\\'; break; case '\'': n = '\''; break; case '\"': n = '\"'; break; case '?': n = '?'; break; case '0': case '1': case '2': case '3': /* octal */ n = *s++ - '0'; if (*s < '0' || *s > '7') break; n = (n * 8) + *s++ - '0'; *ip += 1; if (*s < '0' || *s > '7') break; n = (n * 8) + *s++ - '0'; *ip += 1; break; case 'x': /* hex */ for (i=0; i<3; i++) { if (!isxdigit(*++s)) break; n *= 16; if (*s < 'A') n += *s - '0'; else if (*s < 'a') n += *s - 'A' + 10; else n += *s - 'a' + 10; } *ip = i; break; default: /* unknown */ *ip = 0; break; } return(n); } static unsigned int ntoi(s) char *s; { unsigned int n=0; while (*s == ' ' && *s == '\t') s++; if (!s || !*s) return(n); if (*s != '0') return(atoi(s)); if (*++s == 'x') { /* hexidecimal */ while (isxdigit(*++s)) { n *= 16; if (*s < 'A') n += *s - '0'; else if (*s < 'a') n += *s - 'A' + 10; else n += *s - 'a' + 10; } return(n); } /* octal */ while (*s >= '0' && *s < '8') n = n*8 + *s++ - '0'; return(n); } @ 1.8 log @*** empty log message *** @ text @d10 1 a10 1 static char rcsid[] = "$Header: defs.c,v 1.7 89/03/23 13:23:45 pkern Exp $"; a16 4 #ifdef PC #include "pc.h" #endif d24 1 a24 1 extern uchar c_norm, c_rev, c_bold, c_stat; d37 1 a37 1 unsigned int ntoi(), *ap, *mp=NULL; d57 1 a57 1 if (p 72) d145 1 @ 1.4 log @*** empty log message *** @ text @d6 1 a6 1 static char rcsid[] = "$Header: defs.c,v 1.3 89/02/03 15:51:32 pkern Exp $"; a33 1 d106 3 @ 1.3 log @*** empty log message *** @ text @d6 1 a6 1 static char rcsid[] = "$Header: defs.c,v 1.2 89/01/31 14:01:45 pkern Exp $"; d127 1 a127 1 FILE *fp, fopen(); @ 1.2 log @*** empty log message *** @ text @d6 1 a6 1 static char rcsid[] = "$Header$"; d30 2 a31 2 FILE *fp; char *p, *bp, buf[128]; d43 1 a43 1 /* read the saved setups and initialize */ d59 2 a60 2 * get the 4 block of 4 1/0 flags and * the port and transmit and receive speeds d127 1 a127 1 FILE *fp; @ 1.1 log @Initial revision @ text @d6 2 a7 1 static char *ID = "defs.c Oct/88 Univ. of Toronto"; d11 1 a11 1 #include "common.h" @