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