|
|
1.1 ! root 1: /* maketerms.c - make terminal driving tables for nroff ! 2: * ! 3: * ! 4: * SCCS: @(#)maket.src 1.16 ! 5: * ! 6: */ ! 7: ! 8: ! 9: #include "terms.hd" /* terminal table structure */ ! 10: #include "stdio.h" ! 11: ! 12: #ifndef unix ! 13: #define tso ! 14: #endif ! 15: ! 16: #ifdef tso ! 17: #include "tab37.c" ! 18: #include "tablp.c" ! 19: #include "tabX.c" ! 20: #endif ! 21: ! 22: #ifdef PART1 ! 23: #include "tab300.c" /* terminal table initializations */ ! 24: #include "tab300-12.c" ! 25: #include "tab300s.c" ! 26: #include "tab300s-12.c" ! 27: #include "tab37.c" ! 28: #include "tab382.c" ! 29: #include "tab4000A.c" ! 30: #endif ! 31: #ifdef PART2 ! 32: #include "tab450.c" ! 33: #include "tab450-12.c" ! 34: #include "tab832.c" ! 35: #include "taba1.c" ! 36: #include "tablp.c" ! 37: #include "tabtn300.c" ! 38: #include "tabX.c" ! 39: #endif ! 40: #ifdef PART3 ! 41: #include "tab2631.c" ! 42: #include "tab2631-c.c" ! 43: #include "tab2631-e.c" ! 44: #include "tabavt.c" ! 45: #endif ! 46: ! 47: ! 48: #define SSIZE 2000 /* string output buffer size */ ! 49: #ifdef unix ! 50: #define mkterm(pname, tname) file = fopen("pname","w"); \ ! 51: puttab(file, &tname); \ ! 52: fclose(file); ! 53: #endif ! 54: #ifdef tso ! 55: #define mkterm(pname, tname) file = fopen("pname.t","w,BINARY"); \ ! 56: puttab(file, &tname); \ ! 57: fclose(file); ! 58: #endif ! 59: ! 60: ! 61: extern char *putstr(); /* it's down below */ ! 62: ! 63: ! 64: struct termtable tbuf; /* terminal structure output buffer */ ! 65: char sbuf[SSIZE]; /* structure string output buffer */ ! 66: int sbp; /* string buffer pointer */ ! 67: FILE *file; /* file descriptor */ ! 68: ! 69: ! 70: main() ! 71: { ! 72: #ifdef PART1 ! 73: mkterm(tab300, t300) ! 74: mkterm(tab300-12, t30012) ! 75: mkterm(tab300s, t300s) ! 76: mkterm(tab300s-12, t300s12) ! 77: mkterm(tab37, t37) ! 78: mkterm(tab382, t382) ! 79: mkterm(tab4000A, t4000A) ! 80: #endif ! 81: #ifdef PART2 ! 82: mkterm(tab450, t450) ! 83: mkterm(tab450-12, t45012) ! 84: mkterm(tab832, t832) ! 85: mkterm(taba1, ta1) ! 86: mkterm(tablp, tlp) ! 87: mkterm(tabtn300, ttn300) ! 88: mkterm(tabX, tX) ! 89: #endif ! 90: #ifdef PART3 ! 91: mkterm(tab2631, t2631) ! 92: mkterm(tab2631-c, t2631c) ! 93: mkterm(tab2631-e, t2631e) ! 94: mkterm(tabavt, tavt) ! 95: #endif ! 96: #ifdef tso ! 97: mkterm(tab37, t37) ! 98: mkterm(tablp, tlp) ! 99: mkterm(tabX, tX) ! 100: #endif ! 101: } ! 102: ! 103: ! 104: puttab(fc, tab) ! 105: FILE *fc; ! 106: struct termtable *tab; ! 107: { int i; ! 108: ! 109: sbp = 0; /* reset string pointer */ ! 110: ! 111: tbuf.bset = tab->bset; /* copy values to output structure */ ! 112: tbuf.breset = tab->breset; ! 113: tbuf.Hor = tab->Hor; ! 114: tbuf.Vert = tab->Vert; ! 115: tbuf.Newline = tab->Newline; ! 116: tbuf.Char = tab->Char; ! 117: tbuf.Em = tab->Em; ! 118: tbuf.Halfline = tab->Halfline; ! 119: tbuf.Adj = tab->Adj; ! 120: ! 121: tbuf.twinit = putstr(tab->twinit,0); /* copy strings and pointers */ ! 122: tbuf.twrest = putstr(tab->twrest,0); ! 123: tbuf.twnl = putstr(tab->twnl,0); ! 124: tbuf.hlr = putstr(tab->hlr,0); ! 125: tbuf.hlf = putstr(tab->hlf,0); ! 126: tbuf.flr = putstr(tab->flr,0); ! 127: tbuf.bdon = putstr(tab->bdon,0); ! 128: tbuf.bdoff = putstr(tab->bdoff,0); ! 129: tbuf.iton = putstr(tab->iton,0); ! 130: tbuf.itoff = putstr(tab->itoff,0); ! 131: tbuf.ploton = putstr(tab->ploton,0); ! 132: tbuf.plotoff = putstr(tab->plotoff,0); ! 133: tbuf.up = putstr(tab->up,0); ! 134: tbuf.down = putstr(tab->down,0); ! 135: tbuf.right = putstr(tab->right,0); ! 136: tbuf.left = putstr(tab->left,0); ! 137: ! 138: for (i=0; i<(256-32); i++) /* do the same for codetab */ ! 139: ! 140: tbuf.codetab[i] = putstr(tab->codetab[i],2); ! 141: ! 142: tbuf.zzz = tab->zzz; /* ??? */ ! 143: ! 144: fwrite((char *)&sbp,sizeof(sbp),1,fc); ! 145: fwrite((char *)&tbuf,sizeof(tbuf),1,fc); ! 146: fwrite((char *)sbuf,sbp,1,fc); ! 147: } ! 148: ! 149: ! 150: ! 151: char *putstr(pt, cnt) ! 152: char *pt; ! 153: int cnt; ! 154: { char *p; ! 155: register int i, j, k; ! 156: ! 157: if (pt == (char *)0) return (0); /* null pointer */ ! 158: for (i=0; i<sbp; i++) { /* check for string in buffer */ ! 159: ! 160: for (p=pt,k=cnt,j=i; ! 161: ((j<sbp) && (sbuf[j]==*p) && ((k-->0) || *p)); ! 162: j++,p++) ; ! 163: ! 164: if ((j<sbp) && !sbuf[j] && !*p) ! 165: return ((char *)i); } ! 166: ! 167: /* not in table now - add it */ ! 168: ! 169: i = sbp; ! 170: ! 171: for (k=cnt,p=pt; ((sbp<SSIZE) && ((k-->0) || *p)); p++) ! 172: ! 173: sbuf[sbp++] = *p; /* put string */ ! 174: ! 175: sbuf[sbp++] = 0; /* terminate string */ ! 176: ! 177: if (sbp >= SSIZE) { ! 178: ! 179: fputs("? string area overflow\n",23); ! 180: exit(-1); } ! 181: ! 182: return ((char *)i); ! 183: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.