Annotation of 43BSD/contrib/dipress/src/bin/ipmetrics/tex.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1984, 1985 Xerox Corp.
                      3:  *
                      4:  *  create TeX font files
                      5:  *
                      6:  * HISTORY
                      7:  *     Dec, 1985       Lee Moore, Xerox Webster Research Center
                      8:  *             Created.
                      9:  *
                     10:  */
                     11: 
                     12: #include <stdio.h>
                     13: #include <math.h>
                     14: #include "stack.h"
                     15: #include "token.h"
                     16: #include "config.h"
                     17: #include "ipmetrics.h"
                     18: #include "tex.h"
                     19: 
                     20: #define TRUE   1
                     21: #define FALSE  0
                     22: 
                     23: #define public
                     24: #define private        static
                     25: 
                     26: public char *malloc();
                     27: 
                     28: public char *DeviceName,
                     29:            *LibraryDirectory;
                     30: 
                     31: public
                     32: CleanUpTeX(configChain)
                     33:     struct FontConfig *configChain; {
                     34:        struct FontConfig *p;
                     35: 
                     36:        WriteTeXInstallFile(configChain);
                     37:        WriteTeXCleanUpFile(configChain);
                     38: 
                     39:        for( p = configChain; p != NULL; p = p->Next )
                     40:                if( !p->SeenFlag )
                     41:                        printf("couldn't find: %s/%s/%s\n",
                     42:                                p->FontPt1, p->FontPt2, p->FontPt3);
                     43: }
                     44: 
                     45: 
                     46: private
                     47: WriteTeXInstallFile(configChain)
                     48:     struct FontConfig *configChain; {
                     49:        int i;
                     50:        FILE *installFile;
                     51:        struct FontConfig *p;
                     52: 
                     53:        if( (installFile = fopen(INSTALLNAME, "w")) == NULL ) {
                     54:            fprintf(stderr, "can't open the file 'install' for writing\n");
                     55:            return; }
                     56: 
                     57:        fprintf(installFile, "#! /bin/sh\n");
                     58:        fprintf(installFile, "if test ! -d %s/fonts/%s\n", LibraryDirectory, DeviceName);
                     59:        fprintf(installFile, "  then\n");
                     60:        fprintf(installFile, "    mkdir %s/fonts/%s\n", LibraryDirectory, DeviceName);
                     61:        fprintf(installFile, "  fi\n");
                     62:        fprintf(installFile, "if test ! -d %s/fonts/%s/tex\n", LibraryDirectory, DeviceName);
                     63:        fprintf(installFile, "  then\n");
                     64:        fprintf(installFile, "    mkdir %s/fonts/%s/tex\n", LibraryDirectory, DeviceName);
                     65:        fprintf(installFile, "  fi\n");
                     66: 
                     67: 
                     68:        for( p = configChain; p != NULL; p = p->Next )
                     69:                if( p->SeenFlag ) {
                     70:                        fprintf(installFile, "cp %s.pl %s/fonts/%s/tex\n",
                     71:                                p->TroffName, LibraryDirectory, DeviceName);
                     72:                        fprintf(installFile, "pltotf %s.pl %s.tfm\n",
                     73:                                p->TroffName, p->TroffName); }
                     74: 
                     75:        fprintf(installFile, "cd %s/fonts/%s/tex\n", LibraryDirectory,
                     76:                        DeviceName);
                     77:        fclose(installFile);
                     78:        chmod(INSTALLNAME, 0755); }
                     79: 
                     80: 
                     81: /*
                     82:  * write a file that rm's all the files created by this program
                     83:  */
                     84: 
                     85: private
                     86: WriteTeXCleanUpFile(configChain)
                     87:     struct FontConfig *configChain; {
                     88:        int i;
                     89:        FILE *cleanupFile;
                     90:        struct FontConfig *p;
                     91: 
                     92:        if( (cleanupFile = fopen(CLEANUPNAME, "w")) == NULL ) {
                     93:            fprintf(stderr, "can't open the file 'cleanup' for writing\n");
                     94:            return; }
                     95: 
                     96:        fprintf(cleanupFile, "#! /bin/sh\n");
                     97: 
                     98:        for( p = configChain; p != NULL; p = p->Next )
                     99:                if( p->SeenFlag )
                    100:                        fprintf(cleanupFile, "rm %s.pl\n", p->TroffName);
                    101: 
                    102:        fprintf(cleanupFile, "rm %s\n", CLEANUPNAME);
                    103:        fprintf(cleanupFile, "rm %s\n", INSTALLNAME);
                    104:        fclose(cleanupFile);
                    105:        chmod(CLEANUPNAME, 0755); }
                    106: 
                    107: 
                    108: PerTeXFont(configChain, fontDescVec)
                    109: struct FontConfig *configChain;
                    110: unsigned char *fontDescVec; {
                    111:        unsigned char *charMetricsProperty,
                    112:                      *metricsProperty,
                    113:                      *width,
                    114:                      *charMetric;
                    115:        char iSender[MAXTOKENSIZE],
                    116:             iCharName[MAXTOKENSIZE],
                    117:             fileType[MAXTOKENSIZE],
                    118:            *fontName[40],
                    119:             metricFileName[40],
                    120:             iCharSet[MAXTOKENSIZE],
                    121:             iCharCode[MAXTOKENSIZE];
                    122:        FILE *descFile,
                    123:             *modelFile;
                    124:        struct FontConfig *p;
                    125:        struct TokenState *ts;
                    126:        int charSet,
                    127:            charNumber,
                    128:            charIndex;
                    129:        double xWidth;
                    130: 
                    131:        if( !GetFontNameProperty(fontDescVec, fontName) ) {
                    132:                fprintf(stderr, "ipmetrics: can't get font name\n");
                    133:                return;
                    134:        }
                    135: 
                    136:        if( (charMetricsProperty = GetStringProp("characterMetrics", fontDescVec))
                    137:                        == NULL ) {
                    138:                printf("ipmetrics: can't find 'characterMetrics' property\n");
                    139:                return; }
                    140: 
                    141:        for( p = configChain; p != NULL; p = p->Next ) {
                    142:                if( !(strcmp(p->FontPt1,  fontName[0]) == 0 &&
                    143:                            strcmp(p->FontPt2,  fontName[1]) == 0 &&
                    144:                            strcmp(p->FontPt3,  fontName[2]) == 0) )
                    145:                        continue;
                    146: 
                    147:                sprintf(metricFileName, "%s.pl", p->TroffName);
                    148: 
                    149:                if( (descFile = fopen(metricFileName, "w")) == NULL ) {
                    150:                        printf("ipmetrics: can't open %s for writing\n", metricFileName);
                    151:                        return;}
                    152:        
                    153:                if( (modelFile = fopen(p->MapFile, "r")) == NULL ) {
                    154:                        printf("ipmetrics: can't open %s for reading\n", p->MapFile);
                    155:                        return;}
                    156: 
                    157:                p->SeenFlag = TRUE;
                    158: /*             (void) strcpy(malloc((unsigned) 40), p->TroffName);     */
                    159:        
                    160:                ts = InitTokenStream(modelFile);
                    161: 
                    162:                fprintf(descFile, "(COMMENT %s/%s/%s for Interpress device %s\n", p->FontPt1, p->FontPt2, p->FontPt3, DeviceName);
                    163: 
                    164:                fprintf(descFile, " for interpress device '%s')\n", DeviceName);
                    165:                fprintf(descFile, "(FAMILY %s)\n", p->TroffName);
                    166:                fprintf(descFile, "(DESIGNSIZE D 10)\n");
                    167:                fprintf(descFile, "(DESIGNUNITS D 1)\n");
                    168: 
                    169:                GetToken(ts, fileType, MAXTOKENSIZE);
                    170:                /* file type doesn't mean much in this case... */
                    171: 
                    172:                while( !EndOfFile(ts) ) {
                    173:                        GetToken(ts, iCharSet, MAXTOKENSIZE);
                    174:                        sscanf(iCharSet, "%o", &charSet);
                    175:                        GetToken(ts, iCharCode, MAXTOKENSIZE);
                    176:                        sscanf(iCharCode, "%o", &charNumber);
                    177:                        GetToken(ts, iSender, MAXTOKENSIZE); /* ignored... */
                    178:                        GetToken(ts, iCharName, MAXTOKENSIZE);
                    179:                        charIndex = Make16BitChar(charSet, charNumber);
                    180: 
                    181:                        /* skip the rest of this loop if it's not in this font */
                    182:                        if( (charMetric =
                    183:                            GetIntegerProp(charIndex, charMetricsProperty)) == NULL )
                    184:                                continue;
                    185: 
                    186:                        if( (width = GetStringProp("widthX", charMetric)) == NULL ){
                    187:                                printf("ipmetrics: can't find widthX property of %d\n",
                    188:                                        charIndex);
                    189:                                continue;}
                    190: 
                    191:                        if( gettype(width) != type_number ) {
                    192:                                printf("ipmetrics: width not of type number for %d\n",
                    193:                                        charIndex);
                    194:                                continue;}
                    195:        
                    196:                        if( getsubtype(width) != subtype_rational ) {
                    197:                                printf("ipmetrics: width not of subtype number for %d\n",
                    198:                                        charIndex);
                    199:                                continue;}
                    200:        
                    201:                        xWidth = ((float) getnumerator(width)) / ((float) getdenominator(width));
                    202:        
                    203:                        fprintf(descFile, "(CHARACTER O %3o", charNumber);
                    204:                        fprintf(descFile, " (CHARWD R %6.4f))", xWidth);
                    205: 
                    206:                        if( charSet == 0 )
                    207:                                fprintf(descFile, "\n");
                    208:                        else
                    209:                                fprintf(descFile, "\t(COMMENT in charset 0%o)\n", charSet);
                    210: 
                    211:                        while( !EndOfLine(ts) ) {
                    212:                                GetToken(ts, iCharName, MAXTOKENSIZE);} }
                    213: 
                    214:                CloseTokenStream(ts);
                    215:                fclose(descFile);
                    216:                fclose(modelFile); }
                    217: }

unix.superglobalmegacorp.com

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