Commit | Line | Data |
---|---|---|
ca8289cc BJ |
1 | # |
2 | /* | |
3 | * tell vcat which fonts are loaded on the "typesetter" | |
4 | */ | |
5 | #define MAGIC_NUMBER 0436 | |
6 | #define RAILMAG_FILE "/usr/lib/vfont/railmag" | |
7 | ||
8 | char *concat(); | |
9 | int rmfd; | |
10 | char *rm[4]; | |
11 | char tbuf[256]; | |
12 | ||
13 | main(argc, argv) | |
14 | int argc; | |
15 | char *argv[]; | |
16 | { | |
17 | register int fnum; | |
18 | char cbuf[4][50]; | |
19 | ||
20 | readrm(); | |
21 | if(argc <= 1) | |
22 | { | |
23 | printrm(); | |
24 | exit(0); | |
25 | } | |
26 | while(--argc) | |
27 | { | |
28 | argv++; | |
29 | fnum = argv[0][0]-'0'; | |
30 | if(fnum < 1 || fnum > 4) | |
31 | error("Invalid font number"); | |
32 | checkfont(argv[1]); | |
33 | if(argv[1][0] == '/') | |
34 | rm[fnum-1] = argv[1]; | |
35 | else | |
36 | rm[fnum-1] = concat(cbuf[fnum-1], "/usr/lib/vfont/", argv[1]); | |
37 | argv++; argc--; | |
38 | } | |
39 | writerm(); | |
40 | } | |
41 | ||
42 | ||
43 | error(str) | |
44 | char *str; | |
45 | { | |
46 | ||
47 | write(2, "Railmag: ", 9); | |
48 | write(2, str, strlen(str)); | |
49 | write(2, "\n", 1); | |
50 | exit(); | |
51 | } | |
52 | ||
53 | ||
54 | checkfont(file) | |
55 | char *file; | |
56 | { | |
57 | register int fd; | |
58 | char cbuf[80]; | |
59 | char cbuf2[80]; | |
60 | short word; | |
61 | ||
62 | if((fd = open(concat(cbuf, file, ".10"), 0)) < 0) | |
63 | if((fd = open(concat(cbuf2, "/usr/lib/vfont/", cbuf), 0)) < 0) | |
64 | error("cant open font"); | |
65 | if(read(fd, &word, 2) != 2) | |
66 | error("cant read font"); | |
67 | if(word != MAGIC_NUMBER) | |
68 | error("font has no magic number"); | |
69 | close(fd); | |
70 | } | |
71 | ||
72 | readrm() | |
73 | { | |
74 | register int i; | |
75 | register char *cp; | |
76 | char c; | |
77 | ||
78 | if((rmfd = open(RAILMAG_FILE, 0)) < 0) | |
79 | error("No railmag file"); | |
80 | cp = tbuf; | |
81 | for(i = 0; i < 4; i++) | |
82 | { | |
83 | rm[i] = cp; | |
84 | while(read(rmfd, &c, 1) == 1 && c != '\n') | |
85 | *cp++ = c; | |
86 | *cp++ = '\0'; | |
87 | } | |
88 | } | |
89 | ||
90 | printrm() | |
91 | { | |
92 | register int i; | |
93 | ||
94 | for(i = 0; i < 4; i++) | |
95 | printf("%s on %d\n", rm[i], i+1); | |
96 | } | |
97 | ||
98 | writerm() | |
99 | { | |
100 | register int i; | |
101 | register char *cp; | |
102 | ||
103 | unlink(RAILMAG_FILE); | |
104 | if((rmfd = creat(RAILMAG_FILE, 0644)) < 0) | |
105 | error("cant recreate railmag file"); | |
106 | for(i = 0; i < 4; i++) | |
107 | { | |
108 | cp = rm[i]; | |
109 | while(*cp != '\0') | |
110 | write(rmfd, cp++, 1); | |
111 | write(rmfd, "\n", 1); | |
112 | } | |
113 | } | |
114 | ||
115 | char * | |
116 | concat(outbuf,in1,in2) | |
117 | char *outbuf,*in1,*in2; | |
118 | { | |
119 | char *save; | |
120 | ||
121 | save = outbuf; | |
122 | while(*in1) | |
123 | *outbuf++ = *in1++; | |
124 | while(*in2) | |
125 | *outbuf++ = *in2++; | |
126 | return(save); | |
127 | } |