Annotation of 40BSD/cmd/vpr/vwidth.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     Creates a width table for troff from a versatec font for a
                      3:  *             normal font.
                      4:  *     Usage: width font [ point_size ]
                      5:  *             where font is the file name of the versatec font and
                      6:  *             point_size is it point size.
                      7:  *     If the point size is omitted it is taken from the suffix of
                      8:  *     the font name, as bocklin.14 => 14 point.
                      9:  *     It is better to use as large a point size font as possible 
                     10:  *     to avoid round off.
                     11:  */
                     12: 
                     13: #include <stdio.h>
                     14: 
                     15: struct wtable
                     16:        {
                     17:        char charloc;
                     18:        char *name;
                     19:        } wtable[]
                     20:                = {
                     21:                '\214', "space",
                     22:                '!',    "!",
                     23:                '"',    "\"",
                     24:                '#',    "#",
                     25:                '$',    "$",
                     26:                '%',    "%",
                     27:                '&',    "&",
                     28:                '\'',   "'",
                     29:                '(',    "(",
                     30:                ')',    ")",
                     31:                '*',    "*",
                     32:                '+',    "+",
                     33:                ',',    ",",
                     34:                '-',    "- hyphen",
                     35:                '.',    ".",
                     36:                '/',    "/",
                     37:                '0',    "0",
                     38:                '1',    "1",
                     39:                '2',    "2",
                     40:                '3',    "3",
                     41:                '4',    "4",
                     42:                '5',    "5",
                     43:                '6',    "6",
                     44:                '7',    "7",
                     45:                '8',    "8",
                     46:                '9',    "9",
                     47:                ':',    ":",
                     48:                ';',    ";",
                     49:                '<',    "<",
                     50:                '=',    "=",
                     51:                '>',    ">",
                     52:                '?',    "?",
                     53:                '@',    "@",
                     54:                'A',    "A",
                     55:                'B',    "B",
                     56:                'C',    "C",
                     57:                'D',    "D",
                     58:                'E',    "E",
                     59:                'F',    "F",
                     60:                'G',    "G",
                     61:                'H',    "H",
                     62:                'I',    "I",
                     63:                'J',    "J",
                     64:                'K',    "K",
                     65:                'L',    "L",
                     66:                'M',    "M",
                     67:                'N',    "N",
                     68:                'O',    "O",
                     69:                'P',    "P",
                     70:                'Q',    "Q",
                     71:                'R',    "R",
                     72:                'S',    "S",
                     73:                'T',    "T",
                     74:                'U',    "U",
                     75:                'V',    "V",
                     76:                'W',    "W",
                     77:                'X',    "X",
                     78:                'Y',    "Y",
                     79:                'Z',    "Z",
                     80:                '[',    "[",
                     81:                '\\',   "\\",
                     82:                ']',    "]",
                     83:                '^',    "^",
                     84:                '_',    "_",
                     85:                '\`',   "\`",
                     86:                'a',    "a",
                     87:                'b',    "b",
                     88:                'c',    "c",
                     89:                'd',    "d",
                     90:                'e',    "e",
                     91:                'f',    "f",
                     92:                'g',    "g",
                     93:                'h',    "h",
                     94:                'i',    "i",
                     95:                'j',    "j",
                     96:                'k',    "k",
                     97:                'l',    "l",
                     98:                'm',    "m",
                     99:                'n',    "n",
                    100:                'o',    "o",
                    101:                'p',    "p",
                    102:                'q',    "q",
                    103:                'r',    "r",
                    104:                's',    "s",
                    105:                't',    "t",
                    106:                'u',    "u",
                    107:                'v',    "v",
                    108:                'w',    "w",
                    109:                'x',    "x",
                    110:                'y',    "y",
                    111:                'z',    "z",
                    112:                '{',    "{",
                    113:                '|',    "|",
                    114:                '}',    "}",
                    115:                '~',    "~",
                    116:                '\206', "narrow space",
                    117:                '-',    "hyphen",
                    118:                '\07',  "bullet",
                    119:                '\010', "square",
                    120:                '\06',  "3/4 em dash",
                    121:                '\05',  "rule",
                    122:                '\021', "1/4",
                    123:                '\022', "1/2",
                    124:                '\023', "3/4",
                    125:                '\04',  "minus",
                    126:                '\01',  "fi",
                    127:                '\02',  "fl",
                    128:                '\03',  "ff",
                    129:                '\011', "ffi",
                    130:                '\012', "ffl",
                    131:                '\013', "degree",
                    132:                '\014', "dagger",
                    133:                '\200', "section (unimplem)",
                    134:                '\015', "foot mark",
                    135:                '\200', "acute acc (unimplem)",
                    136:                '\200', "grave acc (unimplem)",
                    137:                '\200', "underrule (unimplem)",
                    138:                '\200', "slash (unimplem)",
                    139:                '\203', "half narrow space",
                    140:                '\200', "null",
                    141:                '\200', "null",
                    142:                '\200', "null",
                    143:                '\200', "null",
                    144:                '\200', "null",
                    145:                '\200', "null",
                    146:                '\200', "null",
                    147:                '\200', "null",
                    148:                '\200', "null",
                    149:                '\200', "null",
                    150:                '\200', "null",
                    151:                '\200', "null",
                    152:                '\200', "null",
                    153:                '\200', "null",
                    154:                '\200', "null",
                    155:                '\200', "null",
                    156:                '\200', "null",
                    157:                '\200', "null",
                    158:                '\200', "null",
                    159:                '\200', "null",
                    160:                '\200', "null",
                    161:                '\200', "null",
                    162:                '\200', "null",
                    163:                '\200', "null",
                    164:                '\200', "null",
                    165:                '\200', "null",
                    166:                '\200', "null",
                    167:                '\200', "null",
                    168:                '\200', "null",
                    169:                '\200', "null",
                    170:                '\200', "null",
                    171:                '\200', "null",
                    172:                '\200', "null",
                    173:                '\200', "null",
                    174:                '\200', "null",
                    175:                '\200', "null",
                    176:                '\200', "null",
                    177:                '\200', "null",
                    178:                '\200', "null",
                    179:                '\200', "null",
                    180:                '\200', "null",
                    181:                '\200', "null",
                    182:                '\200', "null",
                    183:                '\200', "null",
                    184:                '\200', "null",
                    185:                '\200', "null",
                    186:                '\200', "null",
                    187:                '\200', "null",
                    188:                '\200', "null",
                    189:                '\200', "null",
                    190:                '\200', "null",
                    191:                '\200', "null",
                    192:                '\200', "null",
                    193:                '\200', "null",
                    194:                '\200', "null",
                    195:                '\200', "null",
                    196:                '\200', "null",
                    197:                '\200', "null",
                    198:                '\200', "null",
                    199:                '\200', "null",
                    200:                '\200', "null",
                    201:                '\200', "null",
                    202:                '\200', "null",
                    203:                '\200', "null",
                    204:                '\200', "null",
                    205:                '\200', "null",
                    206:                '\200', "null",
                    207:                '\200', "null",
                    208:                '\200', "null",
                    209:                '\200', "null",
                    210:                '\200', "null",
                    211:                '\017', "registered",
                    212:                '\016', "copyright",
                    213:                '\200', "null",
                    214:                '\020', "cent",
                    215:                0,      0
                    216:                };
                    217: 
                    218: struct desc
                    219:        {
                    220:        short addr;
                    221:        short nbytes;
                    222:        char up;
                    223:        char down;
                    224:        char left;
                    225:        char right;
                    226:        short width;
                    227:        } desc[256];
                    228: 
                    229: main(argc, argv)
                    230:        int argc;
                    231:        char *argv[];
                    232: {
                    233:        register int cl;
                    234:        register esc;
                    235:        register w;
                    236:        int i, psize;
                    237:        int fd, high;
                    238: 
                    239:        if(argc != 3 && argc != 2) {
                    240:                printf("Usage: vwidth font [pointsize] > font.c\n");
                    241:                exit(1);
                    242:        }
                    243:        fd = open(argv[1], 0);
                    244:        if (argc == 3)
                    245:                psize = atoi(argv[2]);
                    246:        else {
                    247:                char *p;
                    248:                for (p=argv[1]; *p && *p != '.'; p++)
                    249:                        ;
                    250:                if (*p==0) {
                    251:                        psize = 10;
                    252:                        fprintf(stderr, "Assuming %d point\n", psize);
                    253:                } else
                    254:                        psize = atoi(p+1);
                    255:        }
                    256:        lseek(fd, 10, 0);
                    257:        read(fd, desc, sizeof desc);
                    258:        high = desc['a'].up+1;
                    259:        printf("char XXw[256-32] = {\n");
                    260:        for(i = 0; wtable[i].charloc != 0; i++)
                    261:                {
                    262:                cl = wtable[i].charloc & 0377;
                    263:                if(cl & 0200)
                    264:                        w = cl & 0177;
                    265:                   else
                    266:                        w = desc[cl].width*(54./25.)*(6./psize)+.5;
                    267:                esc = 0;
                    268:                if((cl >= '0' && cl <= '9') || (cl >= 'A' && cl <= 'Z') ||
                    269:                                        (cl >= 'a' && cl <= 'z'))
                    270:                        {
                    271:                        if(desc[cl].up > high)
                    272:                                esc |= 0200;
                    273:                        if(desc[cl].down > 0)
                    274:                                esc |= 0100;
                    275:                        }
                    276:                if(esc)
                    277:                        printf("%d+0%o,\t/* %s */\n", w, esc, wtable[i].name);
                    278:                   else
                    279:                        printf("%d,\t\t/* %s */\n", w, wtable[i].name);
                    280:                }
                    281:        printf("};\n");
                    282:        }

unix.superglobalmegacorp.com

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