Annotation of researchv10no/cmd/troff/ancient.nroff/terms.d/maketerms.c, revision 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.