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