Annotation of coherent/b/kernel/io.386/fontgen.c, revision 1.1

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

unix.superglobalmegacorp.com

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