Changeset 98895c5c in mainline


Ignore:
Timestamp:
2009-03-24T16:09:17Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2fce275
Parents:
6a75902c
Message:

simplify glyph mapping function
draw invalid glyphs with a distinctive color

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • contrib/font/bdf2c.pl

    r6a75902c r98895c5c  
    102102@chars = sort { $a <=> $b } (@chars);
    103103
    104 print "#define FONT_GLYPHS     " . @chars . "\n";
     104print "#define FONT_GLYPHS     " . (@chars + 1). "\n";
    105105print "#define FONT_SCANLINES  " . $height . "\n";
    106106
    107107print "\n";
    108108print "index_t fb_font_glyph(const wchar_t ch)\n";
    109 print "{";
     109print "{\n";
     110print "\tif (ch == 0x0000)\n";
     111print "\t\treturn 0;\n\n";
    110112
    111113my $pos = 0;
     
    118120                        if ($start == $prev) {
    119121                                printf "\tif (ch == 0x%.4x)\n", $start;
     122                                print "\t\treturn " . $start_pos . ";\n";
    120123                        } else {
    121124                                printf "\tif ((ch >= 0x%.4x) && (ch <= 0x%.4x))\n", $start, $prev;
     125                                print "\t\treturn (ch - " . ($start - $start_pos) . ");\n";
    122126                        }
    123127                       
    124                         print "\t\treturn (ch - " . ($start - $start_pos) . ");\n";
    125128                        print "\t\n";
    126129                }
     
    129132                $start_pos = $pos;
    130133        }
     134       
    131135        $pos++;
    132136        $prev = $index;
    133137}
    134138
    135 print "\treturn 31;\n";
     139print "\treturn " . @chars . ";\n";
    136140print "}\n";
    137141
     
    139143print "uint8_t fb_font[FONT_GLYPHS][FONT_SCANLINES] = {";
    140144
    141 my $f1 = 0;
    142145for $index (@chars) {
    143         print "," if ($f1 > 0);
    144146        print "\n\t{";
    145147       
     
    150152        }
    151153       
    152         print "}";
    153         $f1++;
     154        print "},";
    154155}
    155156
    156 print "\n};\n";
     157print "\n\t\n\t/* Special glyph for unknown character */\n\t{";
     158my $y;
     159for ($y = 0; $y < $height; $y++) {
     160        print ", " if ($y > 0);
     161        printf "0x%.2x", $glyphs[63]->[$y];
     162}
     163
     164print "}\n};\n";
  • kernel/genarch/include/fb/font-8x16.h

    r6a75902c r98895c5c  
    3636#define KERN_FONT_8X16_H_
    3737
    38 #define FONT_GLYPHS     2898
     38#define FONT_GLYPHS     2899
    3939#define FONT_WIDTH      8
    4040#define FONT_SCANLINES  16
  • kernel/genarch/src/fb/fb.c

    r6a75902c r98895c5c  
    7878#define BG_COLOR     0x000080
    7979#define FG_COLOR     0xffff00
     80#define INV_COLOR    0xaaaaaa
    8081
    8182#define CURSOR       0x2588
     
    345346       
    346347        for (glyph = 0; glyph < FONT_GLYPHS; glyph++) {
     348                uint32_t fg_color;
     349               
     350                if (glyph == FONT_GLYPHS - 1)
     351                        fg_color = INV_COLOR;
     352                else
     353                        fg_color = FG_COLOR;
     354               
    347355                unsigned int y;
    348356               
     
    354362                                    x * pixelbytes];
    355363                                uint32_t rgb = (fb_font[glyph][y] &
    356                                     (1 << (7 - x))) ? FG_COLOR : BG_COLOR;
     364                                    (1 << (7 - x))) ? fg_color : BG_COLOR;
    357365                                rgb_conv(dst, rgb);
    358366                        }
  • kernel/genarch/src/fb/font-8x16.c

    r6a75902c r98895c5c  
    6767       
    6868        if (ch == 0x02ee)
    69                 return (ch - 120);
     69                return 630;
    7070       
    7171        if ((ch >= 0x0300) && (ch <= 0x0301))
     
    7373       
    7474        if (ch == 0x0303)
    75                 return (ch - 138);
     75                return 633;
    7676       
    7777        if (ch == 0x0309)
    78                 return (ch - 143);
     78                return 634;
    7979       
    8080        if ((ch >= 0x0312) && (ch <= 0x0314))
     
    8282       
    8383        if (ch == 0x0323)
    84                 return (ch - 165);
     84                return 638;
    8585       
    8686        if ((ch >= 0x0340) && (ch <= 0x0341))
     
    9191       
    9292        if (ch == 0x037a)
    93                 return (ch - 247);
     93                return 643;
    9494       
    9595        if (ch == 0x037e)
    96                 return (ch - 250);
     96                return 644;
    9797       
    9898        if ((ch >= 0x0384) && (ch <= 0x038a))
     
    100100       
    101101        if (ch == 0x038c)
    102                 return (ch - 256);
     102                return 652;
    103103       
    104104        if ((ch >= 0x038e) && (ch <= 0x03a1))
     
    157157       
    158158        if (ch == 0x060c)
    159                 return (ch - 366);
     159                return 1182;
    160160       
    161161        if (ch == 0x061b)
    162                 return (ch - 380);
     162                return 1183;
    163163       
    164164        if (ch == 0x061f)
    165                 return (ch - 383);
     165                return 1184;
    166166       
    167167        if ((ch >= 0x0621) && (ch <= 0x063a))
     
    181181       
    182182        if (ch == 0x10d3)
    183                 return (ch - 2919);
     183                return 1388;
    184184       
    185185        if (ch == 0x10d7)
    186                 return (ch - 2922);
     186                return 1389;
    187187       
    188188        if (ch == 0x10da)
    189                 return (ch - 2924);
     189                return 1390;
    190190       
    191191        if (ch == 0x10dd)
    192                 return (ch - 2926);
     192                return 1391;
    193193       
    194194        if (ch == 0x10e6)
    195                 return (ch - 2934);
     195                return 1392;
    196196       
    197197        if ((ch >= 0x1e00) && (ch <= 0x1e9b))
     
    214214       
    215215        if (ch == 0x2070)
    216                 return (ch - 6588);
     216                return 1716;
    217217       
    218218        if ((ch >= 0x2074) && (ch <= 0x208f))
     
    235235       
    236236        if (ch == 0x2300)
    237                 return (ch - 6749);
     237                return 2211;
    238238       
    239239        if (ch == 0x2302)
    240                 return (ch - 6750);
     240                return 2212;
    241241       
    242242        if ((ch >= 0x2308) && (ch <= 0x230b))
     
    244244       
    245245        if (ch == 0x2310)
    246                 return (ch - 6759);
     246                return 2217;
    247247       
    248248        if (ch == 0x2318)
    249                 return (ch - 6766);
     249                return 2218;
    250250       
    251251        if ((ch >= 0x231a) && (ch <= 0x231b))
     
    262262       
    263263        if (ch == 0x23ce)
    264                 return (ch - 6906);
     264                return 2260;
    265265       
    266266        if ((ch >= 0x2409) && (ch <= 0x240d))
     
    271271       
    272272        if (ch == 0x2426)
    273                 return (ch - 6986);
     273                return 2268;
    274274       
    275275        if ((ch >= 0x2500) && (ch <= 0x2595))
     
    289289       
    290290        if (ch == 0x2620)
    291                 return (ch - 7237);
     291                return 2523;
    292292       
    293293        if (ch == 0x2622)
    294                 return (ch - 7238);
     294                return 2524;
    295295       
    296296        if (ch == 0x2626)
    297                 return (ch - 7241);
     297                return 2525;
    298298       
    299299        if ((ch >= 0x2628) && (ch <= 0x262b))
     
    328328       
    329329        if (ch == 0xfc90)
    330                 return (ch - 61934);
     330                return 2722;
    331331       
    332332        if ((ch >= 0xfcf2) && (ch <= 0xfcf4))
     
    337337       
    338338        if (ch == 0xfdf2)
    339                 return (ch - 62280);
     339                return 2730;
    340340       
    341341        if ((ch >= 0xfe50) && (ch <= 0xfe52))
     
    352352       
    353353        if (ch == 0xfe74)
    354                 return (ch - 62380);
     354                return 2760;
    355355       
    356356        if ((ch >= 0xfe76) && (ch <= 0xfefc))
     
    358358       
    359359        if (ch == 0xfeff)
    360                 return (ch - 62383);
    361        
    362         return 31;
     360                return 2896;
     361       
     362        return 2898;
    363363}
    364364
     
    32613261        {0x00, 0x00, 0x22, 0x12, 0x12, 0x0a, 0x0a, 0x0e, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
    32623262        {0xf1, 0x35, 0x55, 0x8a, 0xe0, 0x06, 0x95, 0xd6, 0xb5, 0x97, 0x00, 0xee, 0x8a, 0xee, 0x28, 0xe8},
    3263         {0x00, 0x38, 0x7c, 0x7c, 0xc6, 0x92, 0xf2, 0xe6, 0xfe, 0xe6, 0x7c, 0x7c, 0x38, 0x00, 0x00, 0x00}
     3263        {0x00, 0x38, 0x7c, 0x7c, 0xc6, 0x92, 0xf2, 0xe6, 0xfe, 0xe6, 0x7c, 0x7c, 0x38, 0x00, 0x00, 0x00},
     3264       
     3265        /* Special glyph for unknown character */
     3266        {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}
    32643267};
    32653268
Note: See TracChangeset for help on using the changeset viewer.