|
|
1.1 root 1: /* (-lgl
2: * COHERENT Driver Kit Version 1.1.0
3: * Copyright (c) 1982, 1990 by Mark Williams Company.
4: * All rights reserved. May not be copied without permission.
5: -lgl) */
6: /*
7: * fontgen - generate 16x8 font assembler source on stdout.
8: */
9:
10: #define BIT(n) (1 << (n))
11: #define BITS(n) (((n) >= 4) ? (3 << (((n) - 4) * 2)) : (3 << (((n) + 4) * 2)))
12:
13: unsigned char ibuf[1024];
14: unsigned char odef[] = "\tB________ = 0000000\n";
15: unsigned char obuf[] = "\t.word\tB________\n";
16:
17: main()
18: {
19: register unsigned s;
20: register unsigned j;
21: register unsigned i;
22: extern long lseek();
23:
24: /*
25: * Read fonts from /dev/mem at offset 0xFFA6E.
26: */
27: close(0);
28: if (open("/dev/mem", 0) != 0)
29: fatal("/dev/mem: can't open\n");
30: if (lseek( 0, 0xFFA6EL, 0) != 0xFFA6EL)
31: fatal("/dev/mem: can't seek to fonts");
32: if (read( 0, ibuf, sizeof ibuf ) != sizeof ibuf)
33: fatal("/dev/mem: can't read fonts");
34:
35: /*
36: * Define symbolic constants.
37: */
38: for (i=0; i < 256; ++i) {
39: /* Generate constant's name. */
40: s = i;
41: for (j=10; --j >= 2; s>>=1)
42: odef[j] = (s&1) ? 'X' : '_';
43:
44: /* Convert 8 pixel width to 16 pixels */
45: s = 0;
46: for (j=0; j < 8; ++j)
47: if (i & BIT(j))
48: s |= BITS(j);
49:
50: /* Generate constant's value */
51: for (j=19; j >= 14; --j) {
52: odef[j] = (s & 7) + '0';
53: s >>= 3;
54: }
55:
56: /* Print constant's name and value */
57: send( odef );
58: }
59: send( "\n\t.globl\tfontw_\nfontw_:" );
60:
61: /*
62: * Define fonts for 128 characters.
63: */
64: for (i=0; i < sizeof ibuf; ++i) {
65:
66: /* Format and print one pixel line */
67: j = 16;
68: s = ibuf[i];
69: while ( --j >= 8 ) {
70: obuf[j] = (s&1) ? 'X' : '_' ;
71: s >>= 1;
72: }
73: send( obuf );
74:
75: /* Insert blank line between characters for readability */
76: if ( (i & 7) == 7 )
77: send( "\n" );
78: }
79: exit( 0 );
80: }
81:
82: /*
83: * Fatal( msg ) - report error, and abort.
84: */
85:
86: fatal( msg )
87: register char *msg;
88: {
89: write( 2, msg, strlen(msg) );
90: exit( 1 );
91: }
92:
93: /*
94: * send( s ) - write null-terminated string to standard output.
95: */
96:
97: send( s )
98: register char *s;
99: {
100: write( 1, s, strlen(s) );
101: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.