|
|
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.