Ignore:
Timestamp:
Sep 27, 2008, 11:52:27 AM (12 years ago)
Author:
Sam Hocevar
Message:

makefont.c: change the font data encoding, the source is now 5% smaller.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/tools/makefont.c

    r2405 r2819  
    188188    printf("static unsigned int const %s_size = %i;\n",
    189189           prefix, 4 + control_size + data_size);
    190     printf("static struct {\n");
    191     printf("char ");
    192     for(i = 0; (i + 1) * STRING_CHUNKS < 8 + control_size + data_size; i++)
    193         printf("d%x[%i],%c", i, STRING_CHUNKS, (i % 6) == 5 ? '\n' : ' ');
    194     printf("d%x[%i];\n", i, 4 + control_size + data_size - i * STRING_CHUNKS);
    195     printf("} %s_data = {\n", prefix);
    196     printf("\n");
     190    printf("static char %s_data[%i] =\n", prefix, 4 + control_size + data_size);
     191    printf("{\n");
    197192
    198193    printf("/* file: */\n");
    199     printf("\"\\xCA\\xCA\" /* caca_header */\n");
     194    printf("0xCA,0xCA, /* caca_header */\n");
    200195    written += 2;
    201     printf("\"FT\" /* caca_file_type */\n");
     196    printf("'F','T', /* caca_file_type */\n");
    202197    written += 2;
    203198    printf("\n");
    204199
    205200    printf("/* font_header: */\n");
    206     printf_u32("\"%s\" /* control_size */\n", control_size);
    207     printf_u32("\"%s\" /* data_size */\n", data_size);
    208     printf_u16("\"%s\" /* version */\n", 1);
    209     printf_u16("\"%s\" /* blocks */\n", blocks);
    210     printf_u32("\"%s\" /* glyphs */\n", glyphs);
    211     printf_u16("\"%s\" /* bpp */\n", bpp);
    212     printf_u16("\"%s\" /* std width */\n", stdwidth);
    213     printf_u16("\"%s\" /* std height */\n", height);
    214     printf_u16("\"%s\" /* max width */\n", fullwidth);
    215     printf_u16("\"%s\" /* max height */\n", height);
    216     printf_u16("\"%s\" /* flags */\n", 1);
     201    printf_u32("%s /* control_size */\n", control_size);
     202    printf_u32("%s /* data_size */\n", data_size);
     203    printf_u16("%s /* version */\n", 1);
     204    printf_u16("%s /* blocks */\n", blocks);
     205    printf_u32("%s /* glyphs */\n", glyphs);
     206    printf_u16("%s /* bpp */\n", bpp);
     207    printf_u16("%s /* std width */\n", stdwidth);
     208    printf_u16("%s /* std height */\n", height);
     209    printf_u16("%s /* max width */\n", fullwidth);
     210    printf_u16("%s /* max height */\n", height);
     211    printf_u16("%s /* flags */\n", 1);
    217212    printf("\n");
    218213
     
    221216    for(b = 0; blocklist[b + 1]; b += 2)
    222217    {
    223         printf_u32("\"%s", blocklist[b]);
     218        printf_u32("%s", blocklist[b]);
    224219        printf_u32("%s", blocklist[b + 1]);
    225         printf_u32("%s\"\n", n);
     220        printf_u32("%s\n", n);
    226221        n += blocklist[b + 1] - blocklist[b];
    227222    }
     
    302297        for(i = blocklist[b]; i < blocklist[b + 1]; i++)
    303298        {
    304             printf_u16("\"%s", gtab[n].data_width);
     299            printf_u16("%s", gtab[n].data_width);
    305300            printf_u16("%s", height);
    306             printf_u32("%s\"\n", gtab[gtab[n].same_as].data_offset);
     301            printf_u32("%s\n", gtab[gtab[n].same_as].data_offset);
    307302            n++;
    308303        }
     
    321316
    322317            if(gtab[n].same_as == n)
    323                 printf_hex(" */ \"%s\"\n",
     318                printf_hex(" */ %s\n",
    324319                           glyph_data + gtab[n].data_offset, gtab[n].data_size);
    325320            else
     
    451446    char buf[BUFSIZ];
    452447    char *parser = buf;
    453     int rev = 0; /* we use this variable to rewind 2 bytes after \000
    454                   * was printed when the next char starts with "\", too. */
    455448
    456449    while(bytes--)
    457     {
    458         uint8_t ch = *data++;
    459 
    460         if(written == STRING_CHUNKS)
    461         {
    462             parser += sprintf(parser, "\", \"");
    463             written = 0;
    464             rev = 0;
    465         }
    466 
    467         if(ch == '\\' || ch == '"')
    468         {
    469             parser -= rev;
    470             parser += sprintf(parser, "\\%c", ch);
    471             rev = 0;
    472         }
    473         else if(ch >= 0x20 && ch < 0x7f)
    474         {
    475             parser += sprintf(parser, "%c", ch);
    476             rev = 0;
    477         }
    478         else
    479         {
    480             parser -= rev;
    481             parser += sprintf(parser, "\\%.03o", ch);
    482             rev = ch ? 0 : 2;
    483         }
    484 
    485         written++;
    486     }
    487 
    488     parser -= rev;
     450        parser += sprintf(parser, "%i,", (unsigned int)*data++);
    489451    parser[0] = '\0';
    490452
Note: See TracChangeset for help on using the changeset viewer.