xref: /original-bsd/old/roff/troff_font/mkfont.c (revision 279692fa)
1 #ifndef lint
2 static char sccsid[] = "@(#)mkfont.c	4.3 02/16/88";
3 #endif lint
4 
5 #include "mkfont1.c"
6 
7 /*
8   this program takes 102 width values
9   (one per line) in the order provided bu Graphic
10   Systems and prepares a C-compileable width table.
11 */
12 char ibuf[512];
13 int id;
14 int width[102];
15 int ascii[102];
16 int zero;
17 int emw, hyw;
18 int xxx;
19 
20 main(argc,argv)
21 int argc;
22 char **argv;
23 {
24 	register i, j;
25 	register char *p;
26 
27 	while((--argc > 0) && ((++argv)[0][0]=='-')){
28 		switch(argv[0][1]){
29 			default:
30 				continue;
31 		}
32 	}
33 	if(argc){
34 		if((id=open(argv[0],0)) < 0){
35 			printf("Cannot open: %s.\n",argv[0]);
36 			exit(1);
37 		}
38 	}
39 	j = read(id,ibuf,512);
40 	p = ibuf;
41 	for(i=0; i<102; i++){
42 		width[i] = atoi(p);
43 		while(*p++ != '\n');
44 	}
45 	for(i=0; i<102; i++){
46 		if(font[i].name < 0177){
47 			ascii[i] = font[i].name;
48 		}else{
49 			for(j=0; chtab[j] != 0; j += 2){
50 				if(font[i].name == chtab[j])break;
51 			}
52 			ascii[i] = chtab[j+1] & 0377;
53 			if(chtab[j] == PAIR('h','y')) hyw = width[i];
54 			if(chtab[j] == PAIR('e','m')) emw = width[i];
55 		}
56 	}
57 	printf("char XXw[256-32] {\t/*XX*/\n");
58 	for(i=040; i<256; i++){
59 		if(i == 0377){
60 			printf("0};\n");
61 			break;
62 		}
63 		if(i == 0177){
64 			printf("6,\t %s\n",nametab[i-040]);
65 			continue;
66 		}
67 		if(i == 0226){
68 			printf("3,\t %s\n",nametab[i-040]);
69 			continue;
70 		}
71 		if(i == ' '){
72 			printf("12,\t %s\n",nametab[i-040]);
73 			continue;
74 		}
75 		if(i == '-'){
76 			printf("%d,\t %s\n",hyw,nametab[i-040]);
77 			continue;
78 		}
79 		for(j=0; j<102; j++){
80 			if(ascii[j] == i)break;
81 		}
82 		if(j == 102){
83 			printf("0,");
84 			zero++;
85 			if(nametab[i-040]){
86 				printf("\t %s\n",nametab[i-040]);
87 				zero = 0;
88 			}else if(i < 0177){
89 				printf("\t /*%c*/\n",i);
90 				zero = 0;
91 			}
92 			if(zero && !((i+1)%8)){
93 				printf("\n");
94 				zero = 0;
95 			}
96 		}else{
97 			if(zero){
98 				zero = 0;
99 				printf("\n");
100 			}
101 			printf("%d",width[j]);
102 			if(font[j].ctval)printf("+0%d00, ",font[j].ctval);
103 			else printf(",\t ");
104 			printf("%s\n",nametab[i-040]);
105 		}
106 	}
107 }
108