xref: /csrg-svn/old/vfilters/railmag/railmag.c (revision 42804)
120200Sdist /*
220200Sdist  * Copyright (c) 1983 Regents of the University of California.
333682Sbostic  * All rights reserved.
433682Sbostic  *
5*42804Sbostic  * %sccs.include.redist.c%
620200Sdist  */
720200Sdist 
813945Ssam #ifndef lint
933682Sbostic char copyright[] =
1033682Sbostic "@(#) Copyright (c) 1983 Regents of the University of California.\n\
1133682Sbostic  All rights reserved.\n";
1233682Sbostic #endif /* not lint */
1313945Ssam 
1433682Sbostic #ifndef lint
15*42804Sbostic static char sccsid[] = "@(#)railmag.c	5.4 (Berkeley) 06/01/90";
1633682Sbostic #endif /* not lint */
1733682Sbostic 
1812080Sralph /*
1912080Sralph  * tell vcat which fonts are loaded on the "typesetter"
2012080Sralph  */
2112080Sralph 
2212080Sralph #define MAGIC_NUMBER 0436
2312080Sralph #define RAILMAG_FILE "/usr/lib/vfont/railmag"
2412080Sralph 
2512080Sralph char	*concat();
2612080Sralph int	rmfd;
2712080Sralph char	*rm[4];
2812080Sralph char	tbuf[256];
2912080Sralph 
main(argc,argv)3012080Sralph main(argc, argv)
3112080Sralph 	int argc;
3212080Sralph 	char *argv[];
3312080Sralph {
3412080Sralph 	register int fnum;
3512080Sralph 	char cbuf[4][50];
3612080Sralph 
3712080Sralph 	readrm();
3812080Sralph 	if (argc <= 1) {
3912080Sralph 		printrm();
4012080Sralph 		exit(0);
4112080Sralph 	}
4212080Sralph 	while (--argc) {
4312080Sralph 		argv++;
4412080Sralph 		fnum = argv[0][0] - '0';
4512080Sralph 		if (fnum < 1 || fnum > 4)
4612080Sralph 			error("Invalid font number");
4712080Sralph 		checkfont(argv[1]);
4812080Sralph 		if (argv[1][0] == '/')
4912080Sralph 			rm[fnum-1] = argv[1];
5012080Sralph 		else
5112080Sralph 			rm[fnum-1] = concat(cbuf[fnum-1], "/usr/lib/vfont/", argv[1]);
5212080Sralph 		argv++;	argc--;
5312080Sralph 	}
5412080Sralph 	writerm();
5512080Sralph }
5612080Sralph 
error(str)5712080Sralph error(str)
5812080Sralph 	char *str;
5912080Sralph {
6012080Sralph 	write(2, "Railmag: ", 9);
6112080Sralph 	write(2, str, strlen(str));
6212080Sralph 	write(2, "\n", 1);
6312080Sralph 	exit();
6412080Sralph }
6512080Sralph 
checkfont(file)6612080Sralph checkfont(file)
6712080Sralph 	char *file;
6812080Sralph {
6912080Sralph 	register int fd;
7012080Sralph 	char cbuf[80];
7112080Sralph 	char cbuf2[80];
7212080Sralph 	short word;
7312080Sralph 
7412080Sralph 	if ((fd = open(concat(cbuf, file, ".10"), 0)) < 0)
7512080Sralph 		if ((fd = open(concat(cbuf2, "/usr/lib/vfont/", cbuf), 0)) < 0)
7612080Sralph 			error("cant open font");
7712080Sralph 	if (read(fd, &word, 2) != 2)
7812080Sralph 		error("cant read font");
7912080Sralph 	if (word != MAGIC_NUMBER)
8012080Sralph 		error("font has no magic number");
8112080Sralph 	close(fd);
8212080Sralph }
8312080Sralph 
readrm()8412080Sralph readrm()
8512080Sralph {
8612080Sralph 	register int i;
8712080Sralph 	register char *cp;
8812080Sralph 	char c;
8912080Sralph 
9012080Sralph 	if ((rmfd = open(RAILMAG_FILE, 0)) < 0)
9112080Sralph 		error("No railmag file");
9212080Sralph 	cp = tbuf;
9312080Sralph 	for (i = 0; i < 4; i++) {
9412080Sralph 		rm[i] = cp;
9512080Sralph 		while (read(rmfd, &c, 1) == 1 && c != '\n')
9612080Sralph 			*cp++ = c;
9712080Sralph 		*cp++ = '\0';
9812080Sralph 	}
9912080Sralph }
10012080Sralph 
printrm()10112080Sralph printrm()
10212080Sralph {
10312080Sralph 	register int i;
10412080Sralph 
10512080Sralph 	for (i = 0; i < 4; i++)
10612080Sralph 		printf("%s on %d\n", rm[i], i+1);
10712080Sralph }
10812080Sralph 
writerm()10912080Sralph writerm()
11012080Sralph {
11112080Sralph 	register int i;
11212080Sralph 	register char *cp;
11312080Sralph 
11412080Sralph 	unlink(RAILMAG_FILE);
11512080Sralph 	if ((rmfd = creat(RAILMAG_FILE, 0644)) < 0)
11612080Sralph 		error("cant recreate railmag file");
11712080Sralph 	for (i = 0; i < 4; i++) {
11812080Sralph 		cp = rm[i];
11912080Sralph 		while (*cp != '\0')
12012080Sralph 			write(rmfd, cp++, 1);
12112080Sralph 		write(rmfd, "\n", 1);
12212080Sralph 	}
12312080Sralph }
12412080Sralph 
12512080Sralph char *
concat(outbuf,in1,in2)12612080Sralph concat(outbuf, in1, in2)
12712080Sralph 	register char *outbuf, *in1, *in2;
12812080Sralph {
12912080Sralph 	char *save;
13012080Sralph 
13112080Sralph 	save = outbuf;
13212080Sralph 	while (*in1)
13312080Sralph 		*outbuf++ = *in1++;
13412080Sralph 	while (*in2)
13512080Sralph 		*outbuf++ = *in2++;
13612080Sralph 	return(save);
13712080Sralph }
138