BSD 3 development
[unix-history] / usr / src / cmd / versatec / railmag.c
CommitLineData
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
8char *concat();
9int rmfd;
10char *rm[4];
11char tbuf[256];
12
13main(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
43error(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
54checkfont(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
72readrm()
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
90printrm()
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
98writerm()
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
115char *
116concat(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}