Browse Source

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

tags/v0.99.beta14
Sam Hocevar sam 16 years ago
parent
commit
33b3fb51ae
3 changed files with 12189 additions and 12421 deletions
  1. +6084
    -6156
      cucul/mono9.data
  2. +6084
    -6206
      cucul/monobold12.data
  3. +21
    -59
      tools/makefont.c

+ 6084
- 6156
cucul/mono9.data
File diff suppressed because it is too large
View File


+ 6084
- 6206
cucul/monobold12.data
File diff suppressed because it is too large
View File


+ 21
- 59
tools/makefont.c View File

@@ -187,42 +187,37 @@ int main(int argc, char *argv[])


printf("static unsigned int const %s_size = %i;\n", printf("static unsigned int const %s_size = %i;\n",
prefix, 4 + control_size + data_size); prefix, 4 + control_size + data_size);
printf("static struct {\n");
printf("char ");
for(i = 0; (i + 1) * STRING_CHUNKS < 8 + control_size + data_size; i++)
printf("d%x[%i],%c", i, STRING_CHUNKS, (i % 6) == 5 ? '\n' : ' ');
printf("d%x[%i];\n", i, 4 + control_size + data_size - i * STRING_CHUNKS);
printf("} %s_data = {\n", prefix);
printf("\n");
printf("static char %s_data[%i] =\n", prefix, 4 + control_size + data_size);
printf("{\n");


printf("/* file: */\n"); printf("/* file: */\n");
printf("\"\\xCA\\xCA\" /* caca_header */\n");
printf("0xCA,0xCA, /* caca_header */\n");
written += 2; written += 2;
printf("\"FT\" /* caca_file_type */\n");
printf("'F','T', /* caca_file_type */\n");
written += 2; written += 2;
printf("\n"); printf("\n");


printf("/* font_header: */\n"); printf("/* font_header: */\n");
printf_u32("\"%s\" /* control_size */\n", control_size);
printf_u32("\"%s\" /* data_size */\n", data_size);
printf_u16("\"%s\" /* version */\n", 1);
printf_u16("\"%s\" /* blocks */\n", blocks);
printf_u32("\"%s\" /* glyphs */\n", glyphs);
printf_u16("\"%s\" /* bpp */\n", bpp);
printf_u16("\"%s\" /* std width */\n", stdwidth);
printf_u16("\"%s\" /* std height */\n", height);
printf_u16("\"%s\" /* max width */\n", fullwidth);
printf_u16("\"%s\" /* max height */\n", height);
printf_u16("\"%s\" /* flags */\n", 1);
printf_u32("%s /* control_size */\n", control_size);
printf_u32("%s /* data_size */\n", data_size);
printf_u16("%s /* version */\n", 1);
printf_u16("%s /* blocks */\n", blocks);
printf_u32("%s /* glyphs */\n", glyphs);
printf_u16("%s /* bpp */\n", bpp);
printf_u16("%s /* std width */\n", stdwidth);
printf_u16("%s /* std height */\n", height);
printf_u16("%s /* max width */\n", fullwidth);
printf_u16("%s /* max height */\n", height);
printf_u16("%s /* flags */\n", 1);
printf("\n"); printf("\n");


printf("/* block_info: */\n"); printf("/* block_info: */\n");
n = 0; n = 0;
for(b = 0; blocklist[b + 1]; b += 2) for(b = 0; blocklist[b + 1]; b += 2)
{ {
printf_u32("\"%s", blocklist[b]);
printf_u32("%s", blocklist[b]);
printf_u32("%s", blocklist[b + 1]); printf_u32("%s", blocklist[b + 1]);
printf_u32("%s\"\n", n);
printf_u32("%s\n", n);
n += blocklist[b + 1] - blocklist[b]; n += blocklist[b + 1] - blocklist[b];
} }
printf("\n"); printf("\n");
@@ -301,9 +296,9 @@ int main(int argc, char *argv[])
{ {
for(i = blocklist[b]; i < blocklist[b + 1]; i++) for(i = blocklist[b]; i < blocklist[b + 1]; i++)
{ {
printf_u16("\"%s", gtab[n].data_width);
printf_u16("%s", gtab[n].data_width);
printf_u16("%s", height); printf_u16("%s", height);
printf_u32("%s\"\n", gtab[gtab[n].same_as].data_offset);
printf_u32("%s\n", gtab[gtab[n].same_as].data_offset);
n++; n++;
} }
} }
@@ -320,7 +315,7 @@ int main(int argc, char *argv[])
printf_unicode(&gtab[n]); printf_unicode(&gtab[n]);


if(gtab[n].same_as == n) if(gtab[n].same_as == n)
printf_hex(" */ \"%s\"\n",
printf_hex(" */ %s\n",
glyph_data + gtab[n].data_offset, gtab[n].data_size); glyph_data + gtab[n].data_offset, gtab[n].data_size);
else else
{ {
@@ -450,42 +445,9 @@ static int printf_hex(char const *fmt, uint8_t *data, int bytes)
{ {
char buf[BUFSIZ]; char buf[BUFSIZ];
char *parser = buf; char *parser = buf;
int rev = 0; /* we use this variable to rewind 2 bytes after \000
* was printed when the next char starts with "\", too. */


while(bytes--) while(bytes--)
{
uint8_t ch = *data++;

if(written == STRING_CHUNKS)
{
parser += sprintf(parser, "\", \"");
written = 0;
rev = 0;
}

if(ch == '\\' || ch == '"')
{
parser -= rev;
parser += sprintf(parser, "\\%c", ch);
rev = 0;
}
else if(ch >= 0x20 && ch < 0x7f)
{
parser += sprintf(parser, "%c", ch);
rev = 0;
}
else
{
parser -= rev;
parser += sprintf(parser, "\\%.03o", ch);
rev = ch ? 0 : 2;
}

written++;
}

parser -= rev;
parser += sprintf(parser, "%i,", (unsigned int)*data++);
parser[0] = '\0'; parser[0] = '\0';


return printf(fmt, buf); return printf(fmt, buf);


Loading…
Cancel
Save