xref: /csrg-svn/old/vpr/vtools/rotprt.c (revision 13945)
1 #ifndef lint
2 static char sccsid[] = "@(#)rotprt.c	4.2 (Berkeley) 07/16/83";
3 #endif
4 
5 /*
6  * Print a rotated font.
7  */
8 
9 #include <stdio.h>
10 #include <vfont.h>
11 #include <sys/types.h>
12 #include <sys/stat.h>
13 
14 char	*chp;
15 char	*sbrk();
16 
17 main(argc,argv)
18 char **argv;
19 {
20 	struct header h;
21 	struct dispatch d[256];
22 	struct stat stb;
23 	off_t tell();
24 	int i,size;
25 
26 	argc--, argv++;
27 	if (argc > 0) {
28 		close(0);
29 		if (open(argv[0], 0) < 0)
30 			perror(argv[0]), exit(1);
31 	}
32 	if (read(0, &h, sizeof(h)) != sizeof(h))
33 		fprintf(stderr, "header read error\n"), exit(1);
34 	if (h.magic != 0436)
35 		fprintf(stderr, "bad magic number\n"), exit(1);
36 	if (read(0, d, sizeof(d)) != sizeof(d))
37 		fprintf(stderr, "dispatch read error\n"), exit(1);
38 	fstat(0, &stb);
39 	size = stb.st_size - tell(0);
40 	fprintf(stderr, "%d bytes of characters\n", size);
41 	chp = sbrk(size);
42 	read(0, chp, size);
43 	/* write(1, &h, sizeof (h)); */
44 	for (i = 0; i < 256; i++)
45 		rprt(i, &d[i], chp+d[i].addr);
46 }
47 
48 rprt(i, dp, cp)
49 	int i;
50 	struct dispatch *dp;
51 	char *cp;
52 {
53 	int bpl, j;
54 
55 	if (dp->nbytes == 0)
56 		return;
57 	if (i >= 0200)
58 		printf("M-"), i -= 0200;
59 	if (i < 040)
60 		printf("^%c", i|'@');
61 	else if (i == 0177)
62 		printf("^?");
63 	else
64 		printf("%c", i);
65 	printf("%d bytes, l %d r %d u %d d %d:\n",
66 	    dp->nbytes, dp->left, dp->right, dp->up, dp->down);
67 	bpl = (dp->up+dp->down+7)/8;
68 	for (i = 0; i < dp->right+dp->left; i++) {
69 		for (j = 0; j < bpl; j++)
70 			pbits(cp[j]);
71 		cp += bpl;
72 		printf("\n");
73 	}
74 	printf("========\n");
75 }
76 
77 pbits(i)
78 	register int i;
79 {
80 	register int j;
81 
82 	for (j = 8; j > 0; j--) {
83 		printf((i & 0x80) ? " *" : "  ");
84 		i <<= 1;
85 	}
86 }
87