From: Bill Joy Date: Tue, 10 Apr 1979 10:31:04 +0000 (-0800) Subject: BSD 3 development X-Git-Tag: BSD-3~1011 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/9b463af31e6c9abdb33be700ea37055a842ee0db BSD 3 development Work on file usr/src/cmd/versatec/vwidth.c Synthesized-from: 3bsd --- diff --git a/usr/src/cmd/versatec/vwidth.c b/usr/src/cmd/versatec/vwidth.c new file mode 100644 index 0000000000..41aa3f1bfe --- /dev/null +++ b/usr/src/cmd/versatec/vwidth.c @@ -0,0 +1,272 @@ +# + +# + +/* + * Creates a width table for troff from a versatec font for a + * normal font. + * Usage: width font point_size + * where font is the file name of the versatec font and + * point_size is it point size. + * It is better to use as large a point size font as possible + * to avoid round off. + */ + +struct wtable + { + char charloc; + char *name; + } wtable[] + { + '\214', "space", + '!', "!", + '"', "\"", + '#', "#", + '$', "$", + '%', "%", + '&', "&", + '\'', "'", + '(', "(", + ')', ")", + '*', "*", + '+', "+", + ',', ",", + '-', "- hyphen", + '.', ".", + '/', "/", + '0', "0", + '1', "1", + '2', "2", + '3', "3", + '4', "4", + '5', "5", + '6', "6", + '7', "7", + '8', "8", + '9', "9", + ':', ":", + ';', ";", + '<', "<", + '=', "=", + '>', ">", + '?', "?", + '@', "@", + 'A', "A", + 'B', "B", + 'C', "C", + 'D', "D", + 'E', "E", + 'F', "F", + 'G', "G", + 'H', "H", + 'I', "I", + 'J', "J", + 'K', "K", + 'L', "L", + 'M', "M", + 'N', "N", + 'O', "O", + 'P', "P", + 'Q', "Q", + 'R', "R", + 'S', "S", + 'T', "T", + 'U', "U", + 'V', "V", + 'W', "W", + 'X', "X", + 'Y', "Y", + 'Z', "Z", + '[', "[", + '\\', "\\", + ']', "]", + '^', "^", + '_', "_", + '\`', "\`", + 'a', "a", + 'b', "b", + 'c', "c", + 'd', "d", + 'e', "e", + 'f', "f", + 'g', "g", + 'h', "h", + 'i', "i", + 'j', "j", + 'k', "k", + 'l', "l", + 'm', "m", + 'n', "n", + 'o', "o", + 'p', "p", + 'q', "q", + 'r', "r", + 's', "s", + 't', "t", + 'u', "u", + 'v', "v", + 'w', "w", + 'x', "x", + 'y', "y", + 'z', "z", + '{', "{", + '|', "|", + '}', "}", + '~', "~", + '\206', "narrow space", + '-', "hyphen", + '\07', "bullet", + '\010', "square", + '\06', "3/4 em dash", + '\05', "rule", + '\021', "1/4", + '\022', "1/2", + '\023', "3/4", + '\04', "minus", + '\01', "fi", + '\02', "fl", + '\03', "ff", + '\011', "ffi", + '\012', "ffl", + '\013', "degree", + '\014', "dagger", + '\200', "section (unimplem)", + '\015', "foot mark", + '\200', "acute acc (unimplem)", + '\200', "grave acc (unimplem)", + '\200', "underrule (unimplem)", + '\200', "slash (unimplem)", + '\203', "half narrow space", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\200', "null", + '\017', "registered", + '\016', "copyright", + '\200', "null", + '\020', "cent", + 0, 0 + }; + +struct desc + { + short addr; + short nbytes; + char up; + char down; + char left; + char right; + short width; + } desc[256]; + +main(argc, argv) + int argc; + char *argv[]; + { + register int cl; + register esc; + register w; + int i, psize; + int fd, high; + + if(argc != 3) + { + printf("arg count\n"); + exit(); + } + fd = open(argv[1], 0); + psize = atoi(argv[2]); + lseek(fd, 10, 0); + read(fd, &desc, sizeof desc); + high = desc['a'].up+1; + printf("char XXw[256-32] {\n"); + for(i = 0; wtable[i].charloc != 0; i++) + { + cl = wtable[i].charloc & 0377; + if(cl & 0200) + w = cl & 0177; + else + w = desc[cl].width*(54./25.)*(6./psize)+.5; + esc = 0; + if((cl >= '0' && cl <= '9') || (cl >= 'A' && cl <= 'Z') || + (cl >= 'a' && cl <= 'z')) + { + if(desc[cl].up > high) + esc =| 0200; + if(desc[cl].down > 0) + esc =| 0100; + } + if(esc) + printf("%d+0%o,\t/* %s */\n", w, esc, wtable[i].name); + else + printf("%d,\t\t/* %s */\n", w, wtable[i].name); + } + printf("};\n"); + }