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