Annotation of researchv10no/cmd/troff/devaps/makeaps.c, revision 1.1.1.1

1.1       root        1: /*
                      2:   makedev:
                      3:        read text info about a particular device
                      4:        (e.g., cat, 202, aps5) from file, convert
                      5:        it into internal (binary) form suitable for
                      6:        fast reading by troff initialization (ptinit()).
                      7: 
                      8:        Usage:
                      9: 
                     10:        makedev DESC [ F ... ]
                     11:                uses DESC to create a description file
                     12:                using the information therein.
                     13:                It creates the file DESC.out.
                     14: 
                     15:        makedev F ...
                     16:                makes the font tables for fonts F only,
                     17:                creates files F.out.
                     18: 
                     19:        DESC.out contains:
                     20:        dev structure with fundamental sizes
                     21:        list of sizes (nsizes+1) terminated by 0, as short's
                     22:        indices of char names (nchtab * sizeof(short))
                     23:        char names as hy\0em\0... (lchname)
                     24:        nfonts occurrences of
                     25:                widths (nwidth)
                     26:                kerning (nwidth) [ascender+descender only so far]
                     27:                codes (nwidth) to drive actual typesetter
                     28:                fitab (nchtab+128-32)
                     29:        each of these is an array of char.
                     30: 
                     31:        dev.filesize contains the number of bytes
                     32:        in the file, excluding the dev part itself.
                     33: 
                     34:        F.out contains the font header, width, kern, codes, and fitab.
                     35:        Width, kern and codes are parallel arrays.
                     36:        (Which suggests that they ought to be together?)
                     37:        Later, we might allow for codes which are actually
                     38:        sequences of formatting info so characters can be drawn.
                     39: */
                     40: 
                     41: #include       "stdio.h"
                     42: #include       "dev.h"
                     43: 
                     44: #define        BMASK   0377
                     45: 
                     46: #define        SLANT_BIT       1                                       /* slant flag is bit 0 */
                     47: #define        FONT_BIT        2                                       /* font flag is bit 1 */
                     48: #define        RANGE_BIT       4                                       /* range flag is bit 2 */
                     49: 
                     50: #define        SLANT_VAL       3                                       /* slant angle starts in bit 3 */
                     51: #define        RANGE_VAL       5                                       /* max range starts in bit 5 */
                     52: 
                     53: #define        skipline(f)     while(getc(f) != '\n')
                     54: 
                     55: struct dev     dev;
                     56: struct font    font;
                     57: 
                     58: #define        NSIZE   100     /* maximum number of sizes */
                     59: short  size[NSIZE];
                     60: #define        NCH     256     /* max number of characters with funny names */
                     61: char   chname[5*NCH];  /* character names, including \0 for each */
                     62: short  chtab[NCH];     /* index of character in chname */
                     63: 
                     64: #define        NFITAB  (NCH + 128-32)  /* includes ascii chars, but not non-graphics */
                     65: char   fitab[NFITAB];  /* font index table: position of char i on this font. */
                     66:                        /* zero if not there */
                     67: 
                     68: #define        FSIZE   200     /* size of a physical font (e.g., 102 for cat) */
                     69: char   width[FSIZE];   /* width table for a physical font */
                     70: char   kern[FSIZE];    /* ascender+descender info */
                     71: char   code[FSIZE];    /* actual device codes for a physical font */
                     72: char   alt_code[FSIZE];                                /* code for alternate font */
                     73: int            alt_font[FSIZE];                                /* alternate font to use */
                     74: 
                     75: int            dbg = 0;                                                /* debug flag */
                     76: 
                     77: 
                     78: #define        NFONT   10      /* max number of default fonts */
                     79: char   fname[NFONT][10];       /* temp space to hold default font names */
                     80: 
                     81: int    fflag   = 0;    /* on if font table to be written */
                     82: int    fdout;  /* output file descriptor */
                     83: char   *fout   = "DESC.out";
                     84: 
                     85: main(argc, argv)
                     86: char *argv[];
                     87: {
                     88:        FILE *fin;
                     89:        char cmd[100], *p;
                     90:        int i, totfont, v;
                     91: 
                     92:        if ((fin = fopen("DESC", "r")) == NULL) {
                     93:                fprintf(stderr, "makedev: can't open %s\n", argv[1]);
                     94:                exit(1);
                     95:        }
                     96:        while (fscanf(fin, "%s", cmd) != EOF) {
                     97:                if (cmd[0] == '#')      /* comment */
                     98:                        skipline(fin);
                     99:                else if (strcmp(cmd, "debug") == 0)  
                    100:                        dbg++;
                    101:                else if (strcmp(cmd, "res") == 0) {
                    102:                        fscanf(fin, "%hd", &dev.res);
                    103:                } else if (strcmp(cmd, "hor") == 0) {
                    104:                        fscanf(fin, "%hd", &dev.hor);
                    105:                } else if (strcmp(cmd, "vert") == 0) {
                    106:                        fscanf(fin, "%hd", &dev.vert);
                    107:                } else if (strcmp(cmd, "unitwidth") == 0) {
                    108:                        fscanf(fin, "%hd", &dev.unitwidth);
                    109:                } else if (strcmp(cmd, "sizescale") == 0) {
                    110:                        fscanf(fin, "%hd", &dev.sizescale);
                    111:                } else if (strcmp(cmd, "paperwidth") == 0) {
                    112:                        fscanf(fin, "%hd", &dev.paperwidth);
                    113:                } else if (strcmp(cmd, "paperlength") == 0) {
                    114:                        fscanf(fin, "%hd", &dev.paperlength);
                    115:                } else if (strcmp(cmd, "spare1") == 0) {
                    116:                        fscanf(fin, "%hd", &dev.spare1);
                    117:                } else if (strcmp(cmd, "spare2") == 0) {
                    118:                        fscanf(fin, "%hd", &dev.spare2);
                    119:                } else if (strcmp(cmd, "sizes") == 0) {
                    120:                        dev.nsizes = 0;
                    121:                        while (fscanf(fin, "%d", &v) != EOF && v != 0)
                    122:                                size[dev.nsizes++] = v;
                    123:                        size[dev.nsizes] = 0;   /* need an extra 0 at the end */
                    124:                } else if (strcmp(cmd, "fonts") == 0) {
                    125:                        fscanf(fin, "%hd", &dev.nfonts);
                    126:                        for (i = 0; i < dev.nfonts; i++)
                    127:                                fscanf(fin, "%s", fname[i]);
                    128:                } else if (strcmp(cmd, "charset") == 0) {
                    129:                        p = chname;
                    130:                        dev.nchtab = 0;
                    131:                        while (fscanf(fin, "%s", p) != EOF) {
                    132:                                chtab[dev.nchtab++] = p - chname;
                    133:                                while (*p++)    /* skip to end of name */
                    134:                                        ;
                    135:                        }
                    136:                        dev.lchname = p - chname;
                    137:                        chtab[dev.nchtab++] = 0;        /* terminate properly */
                    138:                } else
                    139:                        fprintf(stderr, "makedev: unknown command %s\n", cmd);
                    140:        }
                    141:        if (argc > 0 && strcmp(argv[1], "DESC") == 0) {
                    142:                fdout = creat(fout, 0666);
                    143:                if (fdout < 0) {
                    144:                        fprintf(stderr, "makedev: can't open %s\n", fout);
                    145:                        exit(1);
                    146:                }
                    147:                write(fdout, &dev, sizeof(struct dev));
                    148:                write(fdout, size, (dev.nsizes+1) * sizeof(size[0]));   /* we need a 0 on the end */
                    149:                write(fdout, chtab, dev.nchtab * sizeof(chtab[0]));
                    150:                write(fdout, chname, dev.lchname);
                    151:                totfont = 0;
                    152:                for (i = 0; i < dev.nfonts; i++) {
                    153:                        totfont += dofont(fname[i]);
                    154:                        write(fdout, &font, sizeof(struct font));
                    155:                        write(fdout, width, font.nwfont & BMASK);
                    156:                        write(fdout, kern, font.nwfont & BMASK);
                    157:                        write(fdout, code, font.nwfont & BMASK);
                    158:                        write(fdout, fitab, dev.nchtab+128-32);
                    159:                }
                    160:                lseek(fdout, 0L, 0);    /* back to beginning to install proper size */
                    161:                dev.filesize =          /* excluding dev struct itself */
                    162:                        (dev.nsizes+1) * sizeof(size[0])
                    163:                        + dev.nchtab * sizeof(chtab[0])
                    164:                        + dev.lchname * sizeof(char)
                    165:                        + totfont * sizeof(char);
                    166:                write(fdout, &dev, sizeof(struct dev));
                    167:                close(fdout);
                    168:                argc--;
                    169:                argv++;
                    170:        }
                    171:        for (i = 1; i < argc; i++)
                    172:                dofont(argv[i]);
                    173:        exit(0);
                    174: }
                    175: 
                    176: 
                    177: /*****************************************************************************/
                    178: 
                    179: 
                    180: dofont(name)
                    181: 
                    182: 
                    183:        char    *name;                                          /* string containing name of font */
                    184: 
                    185: 
                    186: {
                    187: 
                    188: 
                    189:        FILE    *fin;                                           /* input file descriptor */
                    190:        int             fdout;                                          /* output file descriptor */
                    191:        int             i, nw, spacewidth, n, v;
                    192:        char    buf[100], ch[10], s1[10], s2[10], s3[10], cmd[30];
                    193:        char    s4[10];                                         /* used to check for extra info */
                    194:        int             count;                                          /* value returned from sscanf() */
                    195:        int             dflt_range;                                     /* default maximum range for font */
                    196:        int             dflt_slant;                                     /* default slant for this font */
                    197: 
                    198: 
                    199: 
                    200:        /********************************************************************
                    201:         *                                                                                                                                      *
                    202:         *              This routine is responsible for making the '.out' file for      *
                    203:         *      the font specified by the parameter name. It also sets up some  *
                    204:         *      of the data structures needed to make the DESC.out file in the  *
                    205:         *      main routine. In addition I have changed this routine so that   *
                    206:         *      we can add some typesetter dependent parameters to the font             *
                    207:         *      files and have this information dumped out to a 'add' file              *
                    208:         *      for this font, which can be read as needed by the aps driver.   *
                    209:         *                                                                                                                                      *
                    210:         ********************************************************************/
                    211: 
                    212: 
                    213: 
                    214:        if ((fin = fopen(name, "r")) == NULL) {
                    215:                fprintf(stderr, "makedev: can't open font %s\n", name);
                    216:                exit(2);
                    217:        }       /* End if */
                    218: 
                    219:        sprintf(cmd, "%s.out", name);           /* output file is name.out */
                    220:        fdout = creat(cmd, 0666);                       /* create the '.out' font file */
                    221: 
                    222:        font.specfont = 0;                                      /* by default it isn't special font */
                    223:        font.ligfont = 0;                                       /* it also has no ligatures either */
                    224:        font.spare1 = 0;                                        /* all the flags are initially off */
                    225:        spacewidth = 0;                                         /* tables may specify a spacewidth */
                    226:        dflt_range = 3;                                         /* max range available on the APS-5 */
                    227:        dflt_slant = 0;                                         /* no slant for this font yet */
                    228: 
                    229:        for (i = 0; i < NFITAB; i++)            /* initialize font index table */
                    230:                fitab[i] = 0;
                    231: 
                    232:        for (i = 0; i < FSIZE; i++)  {          /* initialize character tables */
                    233:                width[i] = kern[i] = code[i] = 0;
                    234:                alt_font[i] = 0;
                    235:                alt_code[i] = 0;
                    236:        }       /* End for */
                    237: 
                    238:        while (fscanf(fin, "%s", cmd) != EOF)  {        /* read the font file */
                    239: 
                    240:                if (strcmp(cmd, "name") == 0)
                    241:                        fscanf(fin, "%s", font.namefont);
                    242:                else if (strcmp(cmd, "internalname") == 0)
                    243:                        fscanf(fin, "%s", font.intname);
                    244:                else if (strcmp(cmd, "special") == 0)
                    245:                        font.specfont = 1;
                    246:                else if (strcmp(cmd, "ligatures") == 0) {
                    247:                        skipline(fin);  /* skip over any names for now */
                    248:                        font.ligfont = 1;
                    249:                } else if (strcmp(cmd, "spacewidth") == 0) {
                    250:                        fscanf(fin, "%d", &spacewidth);
                    251:                        width[0] = spacewidth;  /* width of space on this font */
                    252:                } else if (strcmp(cmd, "charset") == 0) {
                    253:                        skipline(fin);
                    254:                        nw = 0;
                    255: 
                    256:                        /* widths are origin 1 so fitab==0 can mean "not there" */
                    257: 
                    258:                        while (fgets(buf, 100, fin) != NULL)  {         /* read next line */
                    259: 
                    260:                                count = sscanf(buf, "%s %s %s %s %s", ch, s1, s2, s3, s4);
                    261: 
                    262:                                if (s1[0] != '"')  {    /* it's a genuine new character */
                    263: 
                    264:                                        nw++;
                    265:                                        width[nw] = atoi(s1);
                    266:                                        kern[nw] = atoi(s2);
                    267: 
                    268:                                        /* temporarily, pick up one byte as code */
                    269: 
                    270:                                        if ( s3[0] == '0' )                     /* code is in octal */
                    271:                                                sscanf(s3, "%o", &i);
                    272:                                        else
                    273:                                                sscanf(s3, "%d", &i);   /* otherwise it is decimal */
                    274:                                        code[nw] = i;
                    275: 
                    276:                                        if ( count > 4  &&  font.spare1 )       /* process the rest */
                    277:                                                finish_line(buf, nw);   
                    278: 
                    279:                                }       /* End if */
                    280: 
                    281:                                /* otherwise it's a synonym for previous character,
                    282:                                /* so leave previous values intact
                    283:                                */
                    284: 
                    285:                                if (strlen(ch) == 1)    /* it's ascii */
                    286:                                        fitab[ch[0] - 32] = nw; /* fitab origin omits non-graphics */
                    287:                                else {          /* it has a funny name */
                    288:                                        for (i = 0; i < dev.nchtab; i++)
                    289:                                                if (strcmp(&chname[chtab[i]], ch) == 0) {
                    290:                                                        fitab[i + 128-32] = nw; /* starts after the ascii */
                    291:                                                        break;
                    292:                                                }       /* End if */
                    293: 
                    294:                                        if (i >= dev.nchtab)
                    295:                                                fprintf(stderr, "makedev: font %s: %s not in charset\n", name, ch);
                    296:                                }       /* End else */
                    297: 
                    298:                        }       /* End while */
                    299:                        nw++;
                    300:                        font.nwfont = n = nw;
                    301:                } else if ( strcmp(cmd, "alternate_font") == 0 )
                    302:                        font.spare1 |= FONT_BIT;                /* set alternate font bit */
                    303:                else if ( strcmp(cmd, "default_slant") == 0 )  {
                    304:                        font.spare1 &= ~(3 << SLANT_VAL);       /* clear two slant val bits */
                    305:                        font.spare1 |= SLANT_BIT;                       /* set font slant bit */
                    306:                        fscanf(fin, "%d", &dflt_slant); /* read the default slant value */
                    307:                        if ( dflt_slant > 0 )                   /* encode it as 01 */
                    308:                                font.spare1 |= (1 << SLANT_VAL);
                    309:                        else if ( dflt_slant < 0 )              /* encode it as 10 */
                    310:                                font.spare1 |= (1 << (SLANT_VAL + 1));
                    311:                } else if ( strcmp(cmd, "max_range") == 0 )  {
                    312:                        font.spare1 |= RANGE_BIT;               /* set range bit in spare1 */
                    313:                        fscanf(fin, "%d", &dflt_range); /* read default font slant */
                    314:                        if ( dflt_range < 1  ||  dflt_range > 4 )  {
                    315:                                fprintf(stderr, "makedev: illegal default range %d\n",dflt_range);
                    316:                                exit(1);
                    317:                        }       /* End if */
                    318:                        font.spare1 |= (dflt_range << RANGE_VAL);
                    319:                } else if ( strcmp(cmd, "debug") == 0 )
                    320:                        dbg++;
                    321: 
                    322:        }       /* End while */
                    323: 
                    324:        if (spacewidth == 0)
                    325:                width[0] = dev.res * dev.unitwidth / 72 / 3;
                    326:        fclose(fin);
                    327: 
                    328:        write(fdout, &font, sizeof(struct font));
                    329:        write(fdout, width, font.nwfont & BMASK);
                    330:        write(fdout, kern, font.nwfont & BMASK);
                    331:        write(fdout, code, font.nwfont & BMASK);
                    332:        write(fdout, fitab, dev.nchtab+128-32);
                    333:        close(fdout);
                    334: 
                    335:        if ( font.spare1 ) add_font(name);
                    336: 
                    337:        if ( dbg ) dump_font();
                    338: 
                    339:        v = sizeof(struct font) + 3 * n + dev.nchtab + 128-32;
                    340:        fprintf(stderr, "%3s: %3d chars, width %3d, size %3d\n",
                    341:                font.namefont, nw, width[0], v);
                    342:        return v;
                    343: 
                    344: }      /* End of dofont */
                    345: 
                    346: 
                    347: /*****************************************************************************/
                    348: 
                    349: 
                    350: finish_line(buf, nw)
                    351: 
                    352: 
                    353:        char    *buf;                                           /* contains current input line */
                    354:        int             nw;                                                     /* current index in char tables */
                    355: 
                    356: 
                    357: {
                    358: 
                    359: 
                    360:        char    s[3][20];                                       /* used for special char commands */
                    361:        char    v[3][20];                                       /* used to hold values */
                    362:        int             count;                                          /* number of vals read in sscanf() */
                    363:        int             range;                                          /* value of max range for character */
                    364:        int             angle;                                          /* value of slant angle for char */
                    365:        int             i;                                                      /* for loop index */
                    366: 
                    367: 
                    368: 
                    369:        /********************************************************************
                    370:         *                                                                                                                                      *
                    371:         *              This routine is called from dofont() to finish scanning an      *
                    372:         *      input line which has additional character information on it.    *
                    373:         *      The line was read in dofont() and put in the buffer buf, while  *
                    374:         *      the current index that we are using for the character tables is *
                    375:         *      the value of the parameter nw. The format of the additional             *
                    376:         *      information that may appear in a line in the character set part *
                    377:         *      of a font file is shown below,                                                                  *
                    378:         *                                                                                                                                      *
                    379:         *                               slant l  max_range m  font n                                           *
                    380:         *                                                                                                                                      *
                    381:         *      where l, m, and n are integers. Any or all of these commands    *
                    382:         *      may appear on a given line after the normal code entry for the  *
                    383:         *      current character.                                                                                              *
                    384:         *                                                                                                                                      *
                    385:         ********************************************************************/
                    386: 
                    387: 
                    388: 
                    389:        count = sscanf(buf,"%*s %*s %*s %*s %s %s %s %s %s %s",s[0],v[0],s[1],v[1],s[2],v[2]);
                    390: 
                    391:        if ( (count % 2 != 0) || (count == 0) )  {
                    392:                fprintf(stderr, "makedev: format error in charset table\n");
                    393:                exit(1);
                    394:        }       /* End if */
                    395: 
                    396:        alt_code[nw] = code[nw];                        /* store real code in alt_code array */
                    397:        code[nw] = 128;                                         /* turn bit 7 on */
                    398: 
                    399:        for ( i = 0; i < count/2; i++ )  {              /* process the strings */
                    400: 
                    401:                if ( strcmp(s[i], "font") == 0 )  {             /* have an alternate font */
                    402:                        code[nw] |= FONT_BIT;           /* turn font bit on */
                    403:                        alt_font[nw] = atoi(v[i]);      /* save this font number */
                    404:                } else if ( strcmp(s[i], "max_range") == 0 )  {
                    405:                        code[nw] &= ~(3 << RANGE_VAL);
                    406:                        code[nw] |= RANGE_BIT;
                    407:                        range = atoi(v[i]);
                    408:                        if ( range < 1  ||  range > 4 )  {
                    409:                                fprintf(stderr, "makedev: illegal range\n");
                    410:                                exit(1);
                    411:                        }       /* End if */
                    412:                        code[nw] |= (range << RANGE_VAL);
                    413:                } else if ( strcmp(s[i], "slant" ) == 0 )  {
                    414:                        code[nw] &= ~(3 << SLANT_VAL);
                    415:                        code[nw] |= SLANT_BIT;
                    416:                        angle = atoi(v[i]);
                    417:                        if ( angle > 0 )                        /* set angle bits to 01 */
                    418:                                code[nw] |= (1 << SLANT_VAL);
                    419:                        else if ( angle < 0 )           /* set angle bits to 10 */
                    420:                                code[nw] |= (1 << (SLANT_VAL + 1));
                    421:                } else {                                                /* illegal command - abort */
                    422:                        fprintf(stderr, "makedev: illegal command\n");
                    423:                        exit(1);
                    424:                }       /* End else */
                    425: 
                    426:        }       /* End for */
                    427:        if ( code[nw] & BMASK == 128 )  {
                    428:                fprintf(stderr, "makedev: char code %d less than 129\n", code[nw]);
                    429:                exit(1);
                    430:        }       /* End if */
                    431: 
                    432: }      /* End of finish_line */
                    433: 
                    434: 
                    435: /*****************************************************************************/
                    436: 
                    437: 
                    438: add_font(name)
                    439: 
                    440: 
                    441:        char    *name;                                          /* name of currnent font */
                    442: 
                    443: 
                    444: {
                    445: 
                    446: 
                    447:        int             fdout;                                          /* output file descriptor */
                    448:        int             k;                                                      /* number of width entries */
                    449:        char    cmd[30];                                        /* used to create output file */
                    450: 
                    451: 
                    452: 
                    453:        /********************************************************************
                    454:         *                                                                                                                                      *
                    455:         *              This routine is called from dofont() to write out the           *
                    456:         *      additional information that was specified in the input font             *
                    457:         *      file. As currently implemented the alternate code table and             *
                    458:         *      the alternate font tables are always written to the output              *
                    459:         *      file.                                                                                                                   *
                    460:         *                                                                                                                                      *
                    461:         ********************************************************************/
                    462: 
                    463: 
                    464: 
                    465:        sprintf(cmd, "%s.add", name);           /* file will be 'name'.add */
                    466:        fdout = creat(cmd, 0666);                       /* create the '.add' file */
                    467: 
                    468:        k = font.nwfont & BMASK;
                    469: 
                    470:        write(fdout, alt_font, FSIZE * sizeof(alt_font[0]));
                    471:        write(fdout, alt_code, FSIZE);
                    472: 
                    473:        close(fdout);
                    474: 
                    475: }      /* End of add_font */
                    476: 
                    477: 
                    478: /*****************************************************************************/
                    479: 
                    480: 
                    481: dump_font()
                    482: 
                    483: 
                    484: {
                    485: 
                    486: 
                    487:        int             pos;                                            /* position in character tables */
                    488:        int             j;                                                      /* for loop index */
                    489:        int             code_val;                                       /* number in code table */
                    490: 
                    491: 
                    492: 
                    493:        /********************************************************************
                    494:         *                                                                                                                                      *
                    495:         *              This routine is called to dump the information that we have     *
                    496:         *      read from the current font file.                                                                *
                    497:         *                                                                                                                                      *
                    498:         ********************************************************************/
                    499: 
                    500: 
                    501: 
                    502:        printf("DATA FOR FONT %s:\n\n", font.namefont);
                    503: 
                    504:        printf("  font structure data:\n");
                    505:        printf("\t\tfont.nwfont = %d\n", font.nwfont & BMASK);
                    506:        printf("\t\tfont.specfont = %d\n", font.specfont & BMASK);
                    507:        printf("\t\tfont.ligfont = %d\n", font.ligfont & BMASK);
                    508:        printf("\t\tfont.spare1 = 0%o\n", font.spare1 & BMASK);
                    509:        printf("\t\tfont.intname = %s\n\n", font.intname);
                    510: 
                    511:        printf("  CHAR     WIDTH      KERN      CODE     INDEX\n");
                    512: 
                    513:        for ( j = 0; j < dev.nchtab + 128 - 32; j++ )  {
                    514: 
                    515:                if ( (pos = fitab[j] & BMASK) != 0 )  {
                    516:                        if ( j >= 96 )
                    517:                                printf("%5s", &chname[chtab[j-96]]);
                    518:                        else printf("%5c", (j + 32) & BMASK);
                    519:                        printf("%10d", width[pos] & BMASK);
                    520:                        printf("%10d", kern[pos] & BMASK);
                    521:                        code_val = code[pos] & BMASK;
                    522:                        printf("%10d", code_val & BMASK);
                    523:                        printf("%10d", j);
                    524: 
                    525:                        if ( code_val > 128 )  {
                    526:                                printf("%5d", alt_code[pos] & BMASK);
                    527:                                if ( code_val & SLANT_BIT )  
                    528:                                        printf("  slant %d", (code_val >> SLANT_VAL) & 03);
                    529:                                if ( code_val & FONT_BIT )
                    530:                                        printf("  font %d", alt_font[pos]);
                    531:                                if ( code_val & RANGE_BIT )
                    532:                                        printf("  range %d", (code_val >> RANGE_VAL) & 03);
                    533:                        }       /* End if */
                    534: 
                    535:                        printf("\n");
                    536:                }       /* End if */
                    537: 
                    538:        }       /* End for */
                    539: 
                    540:        printf("\n\n");
                    541: 
                    542: }      /* End of dump_font */
                    543: 
                    544: 
                    545: /*****************************************************************************/
                    546: 
                    547: 

unix.superglobalmegacorp.com

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