Annotation of coherent/d/286_KERNEL/USRSRC/io/tools/fontgen.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.