Annotation of researchv10no/cmd/troff/ancient.nroff/terms.d/maketerms.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.