From 3a3602861226e995d95a8898668cd559c3ca1cf6 Mon Sep 17 00:00:00 2001 From: Benji Dial Date: Wed, 17 Feb 2021 16:35:02 -0500 Subject: quick bitmap font format, borrowing new default font from X --- attribs.txt | 4 + doc/pbf.txt | 18 + fs-skel/attribs.txt | 3 - fs-skel/fonts/berry.bdf | 3286 -------------------------------------------- fs-skel/fonts/fixed-10.pbf | Bin 0 -> 2812 bytes makefile | 9 +- src/kernel/idt.c | 3 +- src/user/libfont/bdf.c | 15 +- src/user/libfont/bdf.h | 5 +- src/user/libfont/fonts.c | 21 +- src/user/libfont/pbf.c | 43 + src/user/libfont/pbf.h | 11 + src/user/popups/info.c | 2 +- src/user/terminal/main.c | 2 +- tools/pbf-gen.rb | 66 + 15 files changed, 168 insertions(+), 3320 deletions(-) create mode 100644 attribs.txt create mode 100644 doc/pbf.txt delete mode 100644 fs-skel/attribs.txt delete mode 100644 fs-skel/fonts/berry.bdf create mode 100644 fs-skel/fonts/fixed-10.pbf create mode 100644 src/user/libfont/pbf.c create mode 100644 src/user/libfont/pbf.h create mode 100644 tools/pbf-gen.rb diff --git a/attribs.txt b/attribs.txt new file mode 100644 index 0000000..83609f0 --- /dev/null +++ b/attribs.txt @@ -0,0 +1,4 @@ +fs-skel/fonts/fixed-10.pbf: + "-misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1" + From the X Window System's "misc fixed" set. + Public Domain. \ No newline at end of file diff --git a/doc/pbf.txt b/doc/pbf.txt new file mode 100644 index 0000000..f42474c --- /dev/null +++ b/doc/pbf.txt @@ -0,0 +1,18 @@ +Portland Bitmap Font format + +This format is intended as a quickly readable font format. + +Header: + byte: character width + byte: character height + byte: horizontal padding + byte: vertical padding + dword: offset into file of default character bitmap + +For each character (255 of them, 0x01 to 0xff): + dword: offset into bitmap data area of character bitmap, + or 0xffffffff if the default should be used. + +Bitmap data area: + bitmaps are from left to right, then from top to bottom. + the least significant bit of a byte is the "first" one. \ No newline at end of file diff --git a/fs-skel/attribs.txt b/fs-skel/attribs.txt deleted file mode 100644 index 67e3dc1..0000000 --- a/fs-skel/attribs.txt +++ /dev/null @@ -1,3 +0,0 @@ -fonts/berry.bdf: -Modified by me from cherry, by camille, which is under BSD Zero. -Cherry is available at . \ No newline at end of file diff --git a/fs-skel/fonts/berry.bdf b/fs-skel/fonts/berry.bdf deleted file mode 100644 index 4e19453..0000000 --- a/fs-skel/fonts/berry.bdf +++ /dev/null @@ -1,3286 +0,0 @@ -STARTFONT 2.1 -FONT -benji-berry-Medium-R-Normal--10-100-75-75-C-100-ISO10646-1 -SIZE 10 75 75 -FONTBOUNDINGBOX 6 10 0 -2 -STARTPROPERTIES 14 -POINT_SIZE 100 -PIXEL_SIZE 10 -RESOLUTION_X 75 -RESOLUTION_Y 75 -AVERAGE_WIDTH 100 -SPACING "C" -CHARSET_ENCODING "1" -CHARSET_REGISTRY "ISO10646" -FOUNDRY "benji" -FAMILY_NAME "berry" -FONT_DESCENT 2 -FONT_ASCENT 8 -_GBDFED_INFO "Edited with gbdfed 1.6." -COPYRIGHT "Public Domain. Based on cherry by camille." -ENDPROPERTIES -CHARS 192 -STARTCHAR UNKNOWN -ENCODING 0 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -48 -10 -20 -00 -20 -00 -FC -ENDCHAR -STARTCHAR SPACE -ENCODING 32 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -00 -00 -00 -00 -00 -00 -ENDCHAR -STARTCHAR EXCLAMATION MARK -ENCODING 33 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -10 -10 -10 -00 -10 -10 -00 -00 -ENDCHAR -STARTCHAR QUOTATION MARK -ENCODING 34 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -28 -28 -28 -00 -00 -00 -00 -00 -00 -ENDCHAR -STARTCHAR NUMBER SIGN -ENCODING 35 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -28 -28 -7C -28 -7C -28 -28 -00 -00 -ENDCHAR -STARTCHAR DOLLAR SIGN -ENCODING 36 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -38 -54 -30 -18 -54 -38 -10 -00 -ENDCHAR -STARTCHAR PERCENT SIGN -ENCODING 37 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -24 -54 -28 -10 -28 -54 -48 -00 -00 -ENDCHAR -STARTCHAR AMPERSAND -ENCODING 38 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -20 -50 -50 -20 -54 -48 -34 -00 -00 -ENDCHAR -STARTCHAR APOSTROPHE -ENCODING 39 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -10 -10 -00 -00 -00 -00 -00 -00 -ENDCHAR -STARTCHAR LEFT PARENTHESIS -ENCODING 40 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -18 -20 -20 -20 -20 -20 -20 -18 -00 -ENDCHAR -STARTCHAR RIGHT PARENTHESIS -ENCODING 41 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -60 -10 -10 -10 -10 -10 -10 -60 -00 -ENDCHAR -STARTCHAR ASTERISK -ENCODING 42 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -28 -10 -7C -10 -28 -00 -00 -ENDCHAR -STARTCHAR PLUS SIGN -ENCODING 43 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -10 -10 -7C -10 -10 -00 -00 -ENDCHAR -STARTCHAR COMMA -ENCODING 44 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -00 -00 -10 -10 -20 -00 -ENDCHAR -STARTCHAR HYPHEN-MINUS -ENCODING 45 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -00 -78 -00 -00 -00 -00 -ENDCHAR -STARTCHAR FULL STOP -ENCODING 46 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -00 -00 -10 -10 -00 -00 -ENDCHAR -STARTCHAR SOLIDUS -ENCODING 47 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -08 -08 -10 -10 -20 -20 -40 -40 -00 -ENDCHAR -STARTCHAR DIGIT ZERO -ENCODING 48 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -58 -68 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR DIGIT ONE -ENCODING 49 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -30 -50 -10 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR DIGIT TWO -ENCODING 50 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -48 -10 -20 -40 -78 -00 -00 -ENDCHAR -STARTCHAR DIGIT THREE -ENCODING 51 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -70 -08 -08 -30 -08 -08 -70 -00 -00 -ENDCHAR -STARTCHAR DIGIT FOUR -ENCODING 52 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -30 -30 -50 -78 -10 -10 -00 -00 -ENDCHAR -STARTCHAR DIGIT FIVE -ENCODING 53 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -78 -40 -40 -70 -08 -08 -70 -00 -00 -ENDCHAR -STARTCHAR DIGIT SIX -ENCODING 54 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -40 -40 -70 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR DIGIT SEVEN -ENCODING 55 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -78 -08 -10 -10 -20 -20 -20 -00 -00 -ENDCHAR -STARTCHAR DIGIT EIGHT -ENCODING 56 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -48 -30 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR DIGIT NINE -ENCODING 57 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -48 -38 -08 -08 -30 -00 -00 -ENDCHAR -STARTCHAR COLON -ENCODING 58 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -10 -10 -00 -10 -10 -00 -00 -ENDCHAR -STARTCHAR SEMICOLON -ENCODING 59 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -10 -10 -00 -10 -10 -20 -00 -ENDCHAR -STARTCHAR LESS-THAN SIGN -ENCODING 60 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -08 -10 -20 -10 -08 -00 -00 -ENDCHAR -STARTCHAR EQUALS SIGN -ENCODING 61 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -78 -00 -78 -00 -00 -00 -ENDCHAR -STARTCHAR GREATER-THAN SIGN -ENCODING 62 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -40 -20 -10 -20 -40 -00 -00 -ENDCHAR -STARTCHAR QUESTION MARK -ENCODING 63 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -48 -10 -20 -00 -20 -00 -00 -ENDCHAR -STARTCHAR COMMERCIAL AT -ENCODING 64 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -38 -44 -5C -54 -4C -40 -3C -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER A -ENCODING 65 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -30 -48 -48 -78 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER B -ENCODING 66 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -70 -48 -48 -70 -48 -48 -70 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER C -ENCODING 67 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -40 -40 -40 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER D -ENCODING 68 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -70 -48 -48 -48 -48 -48 -70 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER E -ENCODING 69 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -78 -40 -40 -70 -40 -40 -78 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER F -ENCODING 70 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -78 -40 -40 -70 -40 -40 -40 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER G -ENCODING 71 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -40 -58 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER H -ENCODING 72 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -48 -48 -78 -48 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER I -ENCODING 73 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -38 -10 -10 -10 -10 -10 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER J -ENCODING 74 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -38 -08 -08 -08 -08 -08 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER K -ENCODING 75 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -48 -50 -70 -50 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER L -ENCODING 76 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -40 -40 -40 -40 -40 -40 -78 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER M -ENCODING 77 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -78 -48 -48 -48 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER N -ENCODING 78 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -68 -68 -58 -58 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER O -ENCODING 79 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -48 -48 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER P -ENCODING 80 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -70 -48 -48 -70 -40 -40 -40 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER Q -ENCODING 81 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -48 -48 -48 -48 -30 -18 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER R -ENCODING 82 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -70 -48 -48 -70 -48 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER S -ENCODING 83 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -40 -30 -08 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER T -ENCODING 84 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -7C -10 -10 -10 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER U -ENCODING 85 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -48 -48 -48 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER V -ENCODING 86 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -48 -48 -48 -48 -30 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER W -ENCODING 87 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -48 -48 -48 -48 -78 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER X -ENCODING 88 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -48 -48 -30 -48 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER Y -ENCODING 89 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -44 -44 -28 -28 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER Z -ENCODING 90 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -78 -08 -10 -20 -20 -40 -78 -00 -00 -ENDCHAR -STARTCHAR LEFT SQUARE BRACKET -ENCODING 91 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -38 -20 -20 -20 -20 -20 -20 -38 -00 -ENDCHAR -STARTCHAR REVERSE SOLIDUS -ENCODING 92 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -40 -40 -20 -20 -10 -10 -08 -08 -00 -ENDCHAR -STARTCHAR RIGHT SQUARE BRACKET -ENCODING 93 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -70 -10 -10 -10 -10 -10 -10 -70 -00 -ENDCHAR -STARTCHAR CIRCUMFLEX ACCENT -ENCODING 94 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -30 -48 -00 -00 -00 -00 -00 -00 -ENDCHAR -STARTCHAR LOW LINE -ENCODING 95 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -00 -00 -00 -78 -00 -00 -ENDCHAR -STARTCHAR GRAVE ACCENT -ENCODING 96 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -20 -10 -08 -00 -00 -00 -00 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER A -ENCODING 97 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -38 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER B -ENCODING 98 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -40 -40 -70 -48 -48 -48 -70 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER C -ENCODING 99 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -30 -48 -40 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER D -ENCODING 100 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -08 -08 -38 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER E -ENCODING 101 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -30 -48 -78 -40 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER F -ENCODING 102 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -18 -20 -78 -20 -20 -20 -20 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER G -ENCODING 103 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -38 -48 -48 -48 -38 -08 -30 -ENDCHAR -STARTCHAR LATIN SMALL LETTER H -ENCODING 104 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -40 -40 -70 -48 -48 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER I -ENCODING 105 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -00 -30 -10 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER J -ENCODING 106 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -10 -00 -30 -10 -10 -10 -10 -10 -60 -ENDCHAR -STARTCHAR LATIN SMALL LETTER K -ENCODING 107 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -40 -40 -48 -50 -70 -50 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER L -ENCODING 108 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -10 -10 -10 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER M -ENCODING 109 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -48 -78 -48 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER N -ENCODING 110 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -70 -48 -48 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER O -ENCODING 111 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -30 -48 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER P -ENCODING 112 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -70 -48 -48 -48 -70 -40 -40 -ENDCHAR -STARTCHAR LATIN SMALL LETTER Q -ENCODING 113 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -38 -48 -48 -48 -38 -08 -08 -ENDCHAR -STARTCHAR LATIN SMALL LETTER R -ENCODING 114 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -58 -60 -40 -40 -40 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER S -ENCODING 115 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -38 -40 -30 -08 -70 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER T -ENCODING 116 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -20 -20 -78 -20 -20 -20 -18 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER U -ENCODING 117 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -48 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER V -ENCODING 118 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -48 -48 -48 -30 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER W -ENCODING 119 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -48 -48 -48 -78 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER X -ENCODING 120 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -48 -48 -30 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER Y -ENCODING 121 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -48 -48 -48 -48 -38 -08 -30 -ENDCHAR -STARTCHAR LATIN SMALL LETTER Z -ENCODING 122 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -78 -10 -20 -40 -78 -00 -00 -ENDCHAR -STARTCHAR LEFT CURLY BRACKET -ENCODING 123 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -18 -20 -20 -C0 -C0 -20 -20 -18 -00 -ENDCHAR -STARTCHAR VERTICAL LINE -ENCODING 124 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -10 -10 -10 -10 -10 -10 -10 -00 -ENDCHAR -STARTCHAR RIGHT CURLY BRACKET -ENCODING 125 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -60 -10 -10 -0C -0C -10 -10 -60 -00 -ENDCHAR -STARTCHAR TILDE -ENCODING 126 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -20 -54 -08 -00 -00 -00 -00 -ENDCHAR -STARTCHAR NO-BREAK SPACE -ENCODING 160 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -00 -00 -48 -78 -00 -00 -ENDCHAR -STARTCHAR INVERTED EXCLAMATION MARK -ENCODING 161 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -10 -00 -10 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR CENT SIGN -ENCODING 162 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -10 -38 -50 -50 -50 -38 -10 -00 -ENDCHAR -STARTCHAR POUND SIGN -ENCODING 163 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -18 -24 -20 -70 -20 -24 -7C -00 -00 -ENDCHAR -STARTCHAR CURRENCY SIGN -ENCODING 164 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -44 -38 -28 -38 -44 -00 -00 -ENDCHAR -STARTCHAR YEN SIGN -ENCODING 165 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -44 -44 -28 -7C -10 -7C -10 -00 -00 -ENDCHAR -STARTCHAR BROKEN BAR -ENCODING 166 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -10 -10 -00 -00 -10 -10 -10 -00 -ENDCHAR -STARTCHAR SECTION SIGN -ENCODING 167 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -60 -50 -48 -28 -18 -48 -30 -ENDCHAR -STARTCHAR DIAERESIS -ENCODING 168 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -28 -00 -00 -00 -00 -00 -00 -00 -00 -ENDCHAR -STARTCHAR COPYRIGHT SIGN -ENCODING 169 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -78 -84 -B4 -A4 -B4 -84 -78 -00 -00 -ENDCHAR -STARTCHAR FEMININE ORDINAL INDICATOR -ENCODING 170 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -38 -48 -48 -38 -00 -78 -00 -00 -00 -00 -ENDCHAR -STARTCHAR LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -ENCODING 171 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -24 -48 -48 -24 -00 -00 -00 -ENDCHAR -STARTCHAR NOT SIGN -ENCODING 172 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -00 -78 -08 -08 -00 -00 -ENDCHAR -STARTCHAR SOFT HYPHEN -ENCODING 173 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -00 -38 -00 -00 -00 -00 -ENDCHAR -STARTCHAR REGISTERED SIGN -ENCODING 174 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -78 -84 -B4 -B4 -AC -84 -78 -00 -00 -ENDCHAR -STARTCHAR MACRON -ENCODING 175 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -78 -00 -00 -00 -00 -00 -00 -00 -00 -ENDCHAR -STARTCHAR DEGREE SIGN -ENCODING 176 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -48 -30 -00 -00 -00 -00 -00 -ENDCHAR -STARTCHAR PLUS-MINUS SIGN -ENCODING 177 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -10 -10 -7C -10 -10 -7C -00 -00 -ENDCHAR -STARTCHAR SUPERSCRIPT TWO -ENCODING 178 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -10 -20 -78 -00 -00 -00 -00 -ENDCHAR -STARTCHAR SUPERSCRIPT THREE -ENCODING 179 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -70 -08 -30 -08 -70 -00 -00 -00 -00 -ENDCHAR -STARTCHAR ACUTE ACCENT -ENCODING 180 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -00 -00 -00 -00 -00 -00 -00 -ENDCHAR -STARTCHAR MICRO SIGN -ENCODING 181 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -48 -48 -48 -48 -78 -44 -40 -ENDCHAR -STARTCHAR PILCROW SIGN -ENCODING 182 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -3C -74 -74 -34 -14 -14 -14 -00 -00 -ENDCHAR -STARTCHAR MIDDLE DOT -ENCODING 183 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -10 -10 -00 -00 -00 -00 -ENDCHAR -STARTCHAR CEDILLA -ENCODING 184 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -00 -00 -00 -00 -10 -20 -ENDCHAR -STARTCHAR SUPERSCRIPT ONE -ENCODING 185 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -30 -10 -10 -10 -00 -00 -00 -00 -ENDCHAR -STARTCHAR MASCULINE ORDINAL INDICATOR -ENCODING 186 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -30 -48 -48 -30 -00 -78 -00 -00 -00 -00 -ENDCHAR -STARTCHAR RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -ENCODING 187 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -48 -24 -24 -48 -00 -00 -00 -ENDCHAR -STARTCHAR VULGAR FRACTION ONE QUARTER -ENCODING 188 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -40 -C4 -48 -50 -20 -54 -94 -1C -04 -04 -ENDCHAR -STARTCHAR VULGAR FRACTION ONE HALF -ENCODING 189 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -40 -C4 -48 -50 -20 -58 -A4 -08 -10 -3C -ENDCHAR -STARTCHAR VULGAR FRACTION THREE QUARTERS -ENCODING 190 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -C0 -24 -C8 -30 -E0 -54 -94 -1C -04 -04 -ENDCHAR -STARTCHAR INVERTED QUESTION MARK -ENCODING 191 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -10 -00 -10 -20 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER A WITH GRAVE -ENCODING 192 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -30 -48 -78 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER A WITH ACUTE -ENCODING 193 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -30 -48 -78 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER A WITH CIRCUMFLEX -ENCODING 194 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -30 -48 -00 -30 -48 -78 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER A WITH TILDE -ENCODING 195 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -28 -50 -00 -30 -48 -78 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER A WITH DIAERESIS -ENCODING 196 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -00 -30 -48 -78 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER A WITH RING ABOVE -ENCODING 197 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -30 -48 -30 -30 -48 -78 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER AE -ENCODING 198 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -1C -30 -30 -5C -70 -90 -9C -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER C WITH CEDILLA -ENCODING 199 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -40 -40 -40 -48 -30 -10 -20 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER E WITH GRAVE -ENCODING 200 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -78 -40 -70 -40 -78 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER E WITH ACUTE -ENCODING 201 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -78 -40 -70 -40 -78 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER E WITH CIRCUMFLEX -ENCODING 202 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -30 -48 -00 -78 -40 -70 -40 -78 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER E WITH DIAERESIS -ENCODING 203 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -00 -78 -40 -70 -40 -78 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER I WITH GRAVE -ENCODING 204 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -38 -10 -10 -10 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER I WITH ACUTE -ENCODING 205 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -08 -10 -00 -38 -10 -10 -10 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER I WITH CIRCUMFLEX -ENCODING 206 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -28 -00 -38 -10 -10 -10 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER I WITH DIAERESIS -ENCODING 207 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -28 -00 -38 -10 -10 -10 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER ETH -ENCODING 208 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -38 -24 -24 -74 -24 -24 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER N WITH TILDE -ENCODING 209 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -28 -50 -00 -48 -68 -58 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER O WITH GRAVE -ENCODING 210 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -30 -48 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER O WITH ACUTE -ENCODING 211 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -30 -48 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER O WITH CIRCUMFLEX -ENCODING 212 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -30 -48 -00 -30 -48 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER O WITH TILDE -ENCODING 213 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -28 -50 -00 -30 -48 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER O WITH DIAERESIS -ENCODING 214 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -00 -30 -48 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR MULTIPLICATION SIGN -ENCODING 215 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -00 -28 -10 -28 -00 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER O WITH STROKE -ENCODING 216 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -34 -48 -58 -58 -68 -48 -B0 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER U WITH GRAVE -ENCODING 217 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -48 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER U WITH ACUTE -ENCODING 218 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -48 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER U WITH CIRCUMFLEX -ENCODING 219 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -30 -48 -00 -48 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER U WITH DIAERESIS -ENCODING 220 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -00 -48 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER Y WITH ACUTE -ENCODING 221 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -08 -10 -00 -44 -28 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN CAPITAL LETTER THORN -ENCODING 222 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -40 -40 -70 -48 -48 -70 -40 -40 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER SHARP S -ENCODING 223 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -30 -48 -50 -48 -48 -48 -50 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER A WITH GRAVE -ENCODING 224 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -38 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER A WITH ACUTE -ENCODING 225 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -38 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER A WITH CIRCUMFLEX -ENCODING 226 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -28 -00 -38 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER A WITH TILDE -ENCODING 227 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -28 -50 -00 -38 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER A WITH DIAERESIS -ENCODING 228 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -28 -00 -38 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER A WITH RING ABOVE -ENCODING 229 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -28 -10 -38 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER AE -ENCODING 230 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -6C -14 -38 -50 -6C -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER C WITH CEDILLA -ENCODING 231 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -30 -48 -40 -48 -30 -10 -20 -ENDCHAR -STARTCHAR LATIN SMALL LETTER E WITH GRAVE -ENCODING 232 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -30 -48 -78 -40 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER E WITH ACUTE -ENCODING 233 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -30 -48 -78 -40 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER E WITH CIRCUMFLEX -ENCODING 234 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -30 -48 -00 -30 -48 -78 -40 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER E WITH DIAERESIS -ENCODING 235 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -00 -30 -48 -78 -40 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER I WITH GRAVE -ENCODING 236 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -30 -10 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER I WITH ACUTE -ENCODING 237 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -08 -10 -00 -30 -10 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER I WITH CIRCUMFLEX -ENCODING 238 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -28 -00 -30 -10 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER I WITH DIAERESIS -ENCODING 239 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -28 -00 -30 -10 -10 -10 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER ETH -ENCODING 240 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -60 -60 -10 -30 -48 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER N WITH TILDE -ENCODING 241 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -28 -50 -00 -70 -48 -48 -48 -48 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER O WITH GRAVE -ENCODING 242 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -00 -30 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER O WITH ACUTE -ENCODING 243 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -00 -30 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER O WITH CIRCUMFLEX -ENCODING 244 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -30 -48 -00 -00 -30 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER O WITH TILDE -ENCODING 245 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -28 -50 -00 -00 -30 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER O WITH DIAERESIS -ENCODING 246 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -00 -00 -30 -48 -48 -30 -00 -00 -ENDCHAR -STARTCHAR DIVISION SIGN -ENCODING 247 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -10 -00 -7C -00 -10 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER O WITH STROKE -ENCODING 248 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -00 -00 -34 -48 -78 -48 -B0 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER U WITH GRAVE -ENCODING 249 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -20 -10 -00 -00 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER U WITH ACUTE -ENCODING 250 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -00 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER U WITH CIRCUMFLEX -ENCODING 251 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -30 -48 -00 -00 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER U WITH DIAERESIS -ENCODING 252 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -00 -00 -48 -48 -48 -38 -00 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER Y WITH ACUTE -ENCODING 253 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -10 -20 -00 -00 -48 -48 -48 -38 -08 -30 -ENDCHAR -STARTCHAR LATIN SMALL LETTER THORN -ENCODING 254 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -40 -50 -68 -48 -48 -68 -50 -40 -00 -ENDCHAR -STARTCHAR LATIN SMALL LETTER Y WITH DIAERESIS -ENCODING 255 -SWIDTH 576 0 -DWIDTH 6 0 -BBX 6 10 0 -2 -BITMAP -00 -48 -00 -00 -48 -48 -48 -38 -08 -30 -ENDCHAR -ENDFONT diff --git a/fs-skel/fonts/fixed-10.pbf b/fs-skel/fonts/fixed-10.pbf new file mode 100644 index 0000000..e0b88f1 Binary files /dev/null and b/fs-skel/fonts/fixed-10.pbf differ diff --git a/makefile b/makefile index 3dbc96e..68690e6 100644 --- a/makefile +++ b/makefile @@ -31,9 +31,9 @@ out/fs/bin/%: obj/%.elf mkdir -p $(shell dirname $@) objcopy -S $< $@ -out/fs/man/%.man: src/man/%.pre - mkdir -p $(shell dirname $@) - python3 tools/man-gen.py $< $@ +#out/fs/man/%.man: src/man/%.pre +# mkdir -p $(shell dirname $@) +# python3 tools/man-gen.py $< $@ out/fs: out/fs/bin/init out/fs/bin/highway out/fs/bin/meminfo \ out/fs/bin/terminal out/fs/bin/hello out/fs/bin/mkpopup @@ -89,7 +89,8 @@ obj/knob.so: obj/knob/file.o obj/knob/format.o obj/knob/rand.o \ obj/libterm.so: obj/libterm/terminal.o obj/libterm/termtask.o obj/libterm/readline.o ld ${partlink} $^ -o $@ -obj/libfont.so: obj/libfont/bdf.o obj/libfont/fonts.o obj/libfont/filist.o +obj/libfont.so: obj/libfont/bdf.o obj/libfont/pbf.o obj/libfont/fonts.o \ + obj/libfont/filist.o ld ${partlink} $^ -o $@ obj/popups.so: obj/popups/info.o obj/popups/popup.o diff --git a/src/kernel/idt.c b/src/kernel/idt.c index 99284ac..c79ae7b 100644 --- a/src/kernel/idt.c +++ b/src/kernel/idt.c @@ -256,9 +256,10 @@ void exception_halt(uint32_t eax, uint32_t ebx, uint32_t ecx, __builtin_unreachable(); } +#define MAX_STACK_EXPAND_PAGES 256 //returns true if stack was expanded bool pf_check_stack(uint32_t cr2) { - if (cr2 >= active_task->stack_bottom - 0x1000) { + if (cr2 >= active_task->stack_bottom - 0x1000 * MAX_STACK_EXPAND_PAGES) { switch_to_kernel_cr3(); pd_user_allocate(active_task->page_directory, active_task->stack_bottom -= 4096, 1, true); switch_to_task_cr3(); diff --git a/src/user/libfont/bdf.c b/src/user/libfont/bdf.c index 2c19a15..de5489d 100644 --- a/src/user/libfont/bdf.c +++ b/src/user/libfont/bdf.c @@ -17,16 +17,10 @@ static inline uint8_t hex_to_n(char ch) { } //very minimal implementation -bool try_load_bdf(const char *path, struct font_info *into) { - struct file *f = open_file(path); - if (!f) - PANIC("Can't open font file sent by get_font."); - +bool try_load_bdf(struct file *f, struct font_info *into) { read_line_from_file(f, line_buf, LINE_BUF_SIZE - 1); - if (!strequ(line_buf, "STARTFONT 2.1")) { - close_file(f); + if (!strequ(line_buf, "STARTFONT 2.1")) return false; - } for (uint16_t i = 0; i < 256; ++i) into->bitmaps[i] = 0; @@ -71,9 +65,6 @@ bool try_load_bdf(const char *path, struct font_info *into) { } } - close_file(f); - f = 0; - if ((into->char_height == -1) || (into->char_width == -1) || (into->space_height == -1) || @@ -90,8 +81,6 @@ bool try_load_bdf(const char *path, struct font_info *into) { return true; bad_format: - if (f) - close_file(f); for (uint16_t i = 0; i < 256; ++i) if (into->bitmaps[i]) free_block(into->bitmaps[i]); diff --git a/src/user/libfont/bdf.h b/src/user/libfont/bdf.h index 4ed4189..cbf3772 100644 --- a/src/user/libfont/bdf.h +++ b/src/user/libfont/bdf.h @@ -1,8 +1,11 @@ #ifndef LIBFONT_BDF_H #define LIBFONT_BDF_H +#include +#include + #include -bool try_load_bdf(const char *path, struct font_info *into); +bool try_load_bdf(struct file *f, struct font_info *into); #endif \ No newline at end of file diff --git a/src/user/libfont/fonts.c b/src/user/libfont/fonts.c index 1692992..c085604 100644 --- a/src/user/libfont/fonts.c +++ b/src/user/libfont/fonts.c @@ -6,14 +6,18 @@ #include "filist.h" #include "bdf.h" +#include "pbf.h" #define FONT_PATH "fonts/" #define FONT_PATH_L 6 struct font_loader_t { const char *ext; - bool (*func)(const char *, struct font_info *); + bool (*func)(struct file *f, struct font_info *); } font_loaders[] = { + { .ext = ".pbf", + .func = try_load_pbf + }, { .ext = ".bdf", .func = try_load_bdf }, @@ -36,20 +40,17 @@ struct font_info *get_font(const char *name) { blockcpy(buf + FONT_PATH_L, name, name_len); strcpy(buf + FONT_PATH_L + name_len, i->ext); struct file *f = open_file(buf); - if (!f) { - free_block(buf); + free_block(buf); + if (!f) continue; - } - syslogf("[libfont] Loading %s%s...", name, i->ext); - if (i->func(buf, font)) { + //syslogf("[libfont] Loading %s%s...", name, i->ext); + if (i->func(f, font)) { close_file(f); - free_block(buf); - syslogf("[libfont] Loaded %s%s.", name, i->ext); + //syslogf("[libfont] Loaded %s%s.", name, i->ext); return font; } close_file(f); - free_block(buf); - syslogf("[libfont] Failed to load %s%s.", name, i->ext); + //syslogf("[libfont] Failed to load %s%s.", name, i->ext); } del_last(); return 0; diff --git a/src/user/libfont/pbf.c b/src/user/libfont/pbf.c new file mode 100644 index 0000000..34d5be5 --- /dev/null +++ b/src/user/libfont/pbf.c @@ -0,0 +1,43 @@ +#include + +#include +#include +#include + +#include + +bool try_load_pbf(struct file *f, struct font_info *into) { + uint8_t head[4]; + if (read_from_file(f, 4, head) != 4) + return false; + + into->space_width = head[0] + head[2]; + into->space_height = head[1] + head[3]; + into->char_width = head[0]; + into->char_height = head[1]; + + const uint16_t bm_size = head[0] * head[1]; + const uint16_t bm_bytes = (bm_size - 1) / 8 + 1; + + uint32_t bm_offsets[256]; + if (read_from_file(f, 4 * 256, bm_offsets) != 4 * 256) + return false; + + uint8_t bm_buf[256 * 256 / 8]; + + for (uint16_t i = 0; i < 256; ++i) + if (bm_offsets[i] == 0xffffffff) + into->bitmaps[i] = 0; + else { + bool *bp = get_block(bm_size); + if (!bp) + PANIC("couldn't allocate memory in pbf loader (todo: fail gracefully)"); + seek_file_to(f, 4 + 4 * 256 + bm_offsets[i]); + read_from_file(f, bm_bytes, bm_buf); + for (uint16_t j = 0; j < bm_size; ++j) + bp[j] = (bm_buf[j / 8] >> (j % 8)) & 1; + into->bitmaps[i] = bp; + } + + return true; +} \ No newline at end of file diff --git a/src/user/libfont/pbf.h b/src/user/libfont/pbf.h new file mode 100644 index 0000000..bcf5d18 --- /dev/null +++ b/src/user/libfont/pbf.h @@ -0,0 +1,11 @@ +#ifndef LIBFONT_PBF_H +#define LIBFONT_PBF_H + +#include +#include + +#include + +bool try_load_pbf(struct file *f, struct font_info *into); + +#endif \ No newline at end of file diff --git a/src/user/popups/info.c b/src/user/popups/info.c index 5b3f6ae..667d440 100644 --- a/src/user/popups/info.c +++ b/src/user/popups/info.c @@ -9,7 +9,7 @@ #include #define PADDING 6 -#define FONT "berry" +#define FONT "fixed-10" static const struct font_info *info_font = 0; diff --git a/src/user/terminal/main.c b/src/user/terminal/main.c index 15ca6a1..08c17e1 100644 --- a/src/user/terminal/main.c +++ b/src/user/terminal/main.c @@ -10,7 +10,7 @@ #include #include -#define FONT_HARDCODE "berry" +#define FONT_HARDCODE "fixed-10" _window_handle_t window; uint8_t *pixbuf; diff --git a/tools/pbf-gen.rb b/tools/pbf-gen.rb new file mode 100644 index 0000000..f4c59c8 --- /dev/null +++ b/tools/pbf-gen.rb @@ -0,0 +1,66 @@ +#args: .hex file, .pbf file, hex pitch, char width, char height, hz padding, vt padding +#converts the .hex output of gbdfed into a pbf file +#6x9x0x0 + +bitmaps = {} + +File.readlines(ARGV[0]).map do |l| + bitmaps[l[0..3].to_i 16] = (l[5..-2].to_i(16) + 2**80).to_s(2)[1..-1] +end + +data_area_entries = {} + +bitmaps.each do |cp, bm| + lines = bm.scan /.{#{ARGV[2].to_i}}/ + this_entry = [] + this_byte = 0 + byte_mask = 1 + for y in 0..(ARGV[4].to_i() - 1) do + for x in 0..(ARGV[3].to_i() - 1) do + if lines[y][x] == '1' + this_byte |= byte_mask + end + byte_mask *= 2 + if byte_mask == 256 + byte_mask = 1 + this_entry << this_byte + this_byte = 0 + end + end + end + if byte_mask != 1 + this_entry << this_byte + end + data_area_entries[cp] = this_entry +end + +data_area = [] + +def put_u32(f, n) + f.putc (n % 256) + f.putc ((n / 256) % 256) + f.putc ((n / 65536) % 256) + f.putc ((n / 16777216) % 256) +end + +File.open(ARGV[1], 'wb') do |f| + f.putc ARGV[3].to_i + f.putc ARGV[4].to_i + f.putc ARGV[5].to_i + f.putc ARGV[6].to_i + + for cp in 0..255 do + if data_area_entries.key? cp + put_u32(f, data_area.length) + for b in data_area_entries[cp] do + data_area << b + end + else + put_u32(f, 0) + end + end + + for b in data_area do + f.putc b + end +end \ No newline at end of file -- cgit v1.2.3