diff options
| -rw-r--r-- | .gitignore | 28 | ||||
| -rw-r--r-- | AMSB.txt | 404 | ||||
| -rw-r--r-- | CHANGES.txt | 19 | ||||
| -rw-r--r-- | Makefile | 72 | ||||
| -rw-r--r-- | README.txt | 42 | ||||
| -rw-r--r-- | TODO | 9 | ||||
| -rw-r--r-- | a8cat.1 | 30 | ||||
| -rw-r--r-- | a8cat.c | 131 | ||||
| -rw-r--r-- | a8cat.rst | 17 | ||||
| -rwxr-xr-x | a8diff | 56 | ||||
| -rw-r--r-- | a8diff.1 | 118 | ||||
| -rw-r--r-- | a8diff.rst | 50 | ||||
| -rw-r--r-- | a8eol.1 | 13 | ||||
| -rwxr-xr-x | a8utf8 | 172 | ||||
| -rw-r--r-- | a8utf8.rst | 57 | ||||
| -rw-r--r-- | a8xd.1 | 115 | ||||
| -rw-r--r-- | a8xd.c | 136 | ||||
| -rw-r--r-- | a8xd.rst | 84 | ||||
| -rwxr-xr-x | abas2html | 109 | ||||
| -rw-r--r-- | abas2html.1 | 172 | ||||
| -rw-r--r-- | abas2html.rst | 90 | ||||
| -rw-r--r-- | amsb.7 | 600 | ||||
| -rw-r--r-- | amsb.rst | 13 | ||||
| -rw-r--r-- | amsb40.rst | 31 | ||||
| -rw-r--r-- | amsb40.txt | 668 | ||||
| -rw-r--r-- | amsb_content.rst | 406 | ||||
| -rw-r--r-- | amsbtok.h | 161 | ||||
| -rw-r--r-- | aplus_tokens.c | 179 | ||||
| -rw-r--r-- | aplus_tokens.h | 5 | ||||
| -rw-r--r-- | atascii.7 | 15 | ||||
| -rw-r--r-- | atascii.c | 157 | ||||
| -rw-r--r-- | atascii.h | 44 | ||||
| -rw-r--r-- | atascii.rst | 2 | ||||
| -rw-r--r-- | atr2xfd.1 | 13 | ||||
| -rw-r--r-- | atrsize.1 | 13 | ||||
| -rw-r--r-- | axe.1 | 13 | ||||
| -rw-r--r-- | bas.c | 140 | ||||
| -rw-r--r-- | bas.h | 10 | ||||
| -rw-r--r-- | bas2aplus.1 | 211 | ||||
| -rw-r--r-- | bas2aplus.c | 272 | ||||
| -rw-r--r-- | bas2aplus.rst | 143 | ||||
| -rw-r--r-- | blob2c.1 | 13 | ||||
| -rw-r--r-- | blob2xex.1 | 13 | ||||
| -rw-r--r-- | bxe_tokens.c | 19 | ||||
| -rw-r--r-- | bxe_tokens.h | 2 | ||||
| -rw-r--r-- | bxl_tokens.c | 64 | ||||
| -rw-r--r-- | bxl_tokens.h | 5 | ||||
| -rw-r--r-- | cart2xex.1 | 13 | ||||
| -rwxr-xr-x | colorize-amsb | 284 | ||||
| -rw-r--r-- | colorize-amsb.1 | 100 | ||||
| -rw-r--r-- | colorize-amsb.rst | 39 | ||||
| -rw-r--r-- | cxrefbas.1 | 13 | ||||
| -rw-r--r-- | dasm2atasm.1 | 13 | ||||
| -rwxr-xr-x | diffbas | 56 | ||||
| -rw-r--r-- | diffbas.1 (renamed from a8utf8.1) | 87 | ||||
| -rw-r--r-- | diffbas.rst | 57 | ||||
| -rw-r--r-- | dumpbas.1 | 13 | ||||
| -rw-r--r-- | fauxtari.7 | 346 | ||||
| -rw-r--r-- | fauxtari.rst | 175 | ||||
| -rw-r--r-- | fenders.1 | 13 | ||||
| -rw-r--r-- | fendersdbl.dasm | 9 | ||||
| -rw-r--r-- | fonts/FauxtariScalableMono.ttf | bin | 0 -> 57484 bytes | |||
| -rw-r--r-- | fonts/Makefile | 2 | ||||
| -rw-r--r-- | fonts/char0.raw | bin | 0 -> 8 bytes | |||
| -rw-r--r-- | fonts/dupglyphs.pl | 42 | ||||
| -rw-r--r-- | fonts/fauxtari-16.bdf | 9893 | ||||
| -rw-r--r-- | fonts/fauxtari-16.psf | bin | 0 -> 18030 bytes | |||
| -rw-r--r-- | fonts/fauxtari-16.txt | 4796 | ||||
| -rw-r--r-- | fonts/fauxtari-24.bdf | 13325 | ||||
| -rw-r--r-- | fonts/fauxtari-24.psf | bin | 0 -> 38510 bytes | |||
| -rw-r--r-- | fonts/fauxtari-24.txt | 5331 | ||||
| -rw-r--r-- | fonts/fauxtari-8.bdf | 6461 | ||||
| -rw-r--r-- | fonts/fauxtari-8.psf | bin | 0 -> 5742 bytes | |||
| -rw-r--r-- | fonts/fauxtari-8.txt | 4261 | ||||
| -rw-r--r-- | fonts/fixbdf.pl | 41 | ||||
| -rw-r--r-- | fonts/mkpsf.pl | 1358 | ||||
| -rw-r--r-- | fonts/sorttxtfont.pl | 33 | ||||
| -rw-r--r-- | install-fonts.sh | 69 | ||||
| -rw-r--r-- | int_disk_tokens.c | 94 | ||||
| -rw-r--r-- | int_disk_tokens.h | 5 | ||||
| -rw-r--r-- | int_tokens.c | 189 | ||||
| -rw-r--r-- | int_tokens.h | 5 | ||||
| -rw-r--r-- | jindroush/Makefile | 8 | ||||
| -rw-r--r-- | jindroush/README.txt | 7 | ||||
| -rw-r--r-- | jindroush/chkbas/basic_xe.h | 6 | ||||
| -rw-r--r-- | jindroush/chkbas/basic_xl.h | 6 | ||||
| -rw-r--r-- | jindroush/man/chkbas.1 | 18 | ||||
| -rw-r--r-- | jindroush/man/chkbas.rst | 8 | ||||
| -rw-r--r-- | listamsb.1 | 377 | ||||
| -rw-r--r-- | listamsb.c | 1010 | ||||
| -rw-r--r-- | listamsb.rst | 313 | ||||
| -rw-r--r-- | listbas.1 | 413 | ||||
| -rw-r--r-- | listbas.c | 1161 | ||||
| -rw-r--r-- | listbas.rst | 372 | ||||
| -rw-r--r-- | manftr.rst | 43 | ||||
| -rw-r--r-- | ossintbas.7 | 582 | ||||
| -rw-r--r-- | ossintbas.rst | 14 | ||||
| -rw-r--r-- | ossintbas_content.rst | 319 | ||||
| -rw-r--r-- | protbas.1 | 13 | ||||
| -rw-r--r-- | renumbas.1 | 30 | ||||
| -rw-r--r-- | renumbas.c | 9 | ||||
| -rw-r--r-- | renumbas.rst | 19 | ||||
| -rw-r--r-- | rom2cart.1 | 13 | ||||
| -rw-r--r-- | tokens.c | 2 | ||||
| -rw-r--r-- | turbo_tokens.c | 82 | ||||
| -rw-r--r-- | turbo_tokens.h | 5 | ||||
| -rw-r--r-- | unmac65.1 | 13 | ||||
| -rw-r--r-- | unmac65.c | 4 | ||||
| -rw-r--r-- | unprotbas.1 | 13 | ||||
| -rw-r--r-- | ver.rst | 2 | ||||
| -rw-r--r-- | vxrefbas.1 | 13 | ||||
| -rw-r--r-- | whichbas.1 | 299 | ||||
| -rw-r--r-- | whichbas.c | 1271 | ||||
| -rw-r--r-- | whichbas.h | 19 | ||||
| -rw-r--r-- | whichbas.rst | 215 | ||||
| -rw-r--r-- | xex.5 | 13 | ||||
| -rw-r--r-- | xex1to2.1 | 13 | ||||
| -rw-r--r-- | xexamine.1 | 13 | ||||
| -rw-r--r-- | xexcat.1 | 13 | ||||
| -rw-r--r-- | xexsplit.1 | 13 | ||||
| -rw-r--r-- | xfd2atr.1 | 13 | 
121 files changed, 58265 insertions, 751 deletions
@@ -1,11 +1,20 @@ +bas2aplus +listamsb +whichbas +equates.m65 +fendersdbl.atasm  *.bas  *.BAS +*.LST +*.XEX  *.car  *.cart  *.rom  *.swp  *.syms +*.a8s  1 +1.*  2  3  *.atr @@ -13,7 +22,9 @@  *.old  *.bak  *.o +a8cat  a8eol +a8xd  atr2xfd  atrsize  axe @@ -23,6 +34,7 @@ cart2rom  fenders  rom2cart  unmac65 +xex1to2  xexcat  xexsplit  xfd2atr @@ -31,6 +43,7 @@ blob2xex  vxrefbas  cxrefbas  dumpbas +listbas  renumbas  protbas  unprotbas @@ -40,3 +53,18 @@ ksiders/atrextr  ksiders/makeatr  ksiders/sortatr  ksiders/unmakatr +jindroush/acvt/acvt +jindroush/acvt/switches.cpp +jindroush/adir/adir +jindroush/adir/switches.cpp +jindroush/aext/aext +jindroush/aext/switches.cpp +jindroush/bas2boot/bas2boot +jindroush/bas2boot/switches.cpp +jindroush/chkbas/chkbas +jindroush/chkbas/switches.cpp +jindroush/chkexe/chkexe +jindroush/chkexe/switches.cpp +jindroush/chkrom/chkrom +jindroush/chkrom/switches.cpp +jindroush/lib/libjindroush.a diff --git a/AMSB.txt b/AMSB.txt new file mode 100644 index 0000000..f277e26 --- /dev/null +++ b/AMSB.txt @@ -0,0 +1,404 @@ +Atari Microsoft BASIC Notes +--------------------------- + +AMSB is actually a pretty cool BASIC for the Atari 8-bit. I never +got the chance to use it 'back in the day' because it was expensive, +required a floppy drive and at least 32K of RAM (my poor 400 had a +tape drive for the first few years), and then later on, there was +Turbo BASIC XL, which was cooler than AMSB, and also freeware. + +This file is a collection of notes I made to myself while developing +listamsb. The information here might be useful (e.g. if you're trying +to repair a damaged AMSB file) and hopefully is interesting. Enjoy! + +This file is part of the bw-atari8-utils source. You can get the +latest version of the source from: + +https://slackware.uk/~urchlay/repos/bw-atari8-tools + +...which you can either view with a web browser or use with the 'git +clone' command. + +                                -- B. Watson <urchlay@slackware.uk> + + +Tokenized file format +--------------------- + +File begins with a 3-byte header: + +offset | purpose +-------+------------------------------------------------------- +   0   | 0 for a normal program, 1 for LOCKed (encrypted). +   1   | LSB, program length, not counting the 3-byte header... +   2   | MSB, "        " + +The program length should always be the actual file size minus 3.  If +it's not, the file has either been truncated or had junk added to the +end. In a LOCKed program, the program length bytes are not encrypted. + +After the header, the lines of code (encrypted, for LOCKed programs). +Each line has a 4-byte header: + +offset | purpose +-------+------------------------------------------------------- +   0   | LSB, address of the last byte of this line... +   1   | MSB, address  ...which is ignored on LOAD! +   2   | LSB of line number +   3   | MSB "  "    " + +The rest of the line is the tokens, terminated by a $00 byte. The +next 2 bytes after the $00 is the last-byte offset of the next line. + +The last "line" of the program has a $0000 offset, which indicates the +end of the program. Since the actual last line ends with a $00, that +means there will be three $00 bytes in a row as the last 3 bytes of +the file. And that's the *only* place 3 $00's in a row will occur. + +Tokenization is "lightweight": there are no tokenized numerics, +they're just stored as ASCII characters, as typed. There's no "string +constant follows" token like there is in Atari BASIC (well, there is, +it's just a double-quote, $22. There's no length byte). Variable names +are not tokenized, either, they're just stored as-is (name in ASCII, +including trailing $ for strings, etc). Numeric constants are just +stored as ASCII digits, just as you typed them. + +In fact the only things that are tokenized are BASIC keywords: +commands and functions... NOT including user functions defined +with DEF (those are stored as just the ASCII function name, like +variables). + +There are 2 sets of tokens. One set is single-byte, $80 and up. +These are commands. The other set is functions, which are 2 bytes: +$FF followed by the token number. See amsbtok.h in the source for the +actual tokens. + +AMSB saves the end-of-line pointers, but it totally ignores them +on LOAD. The SAVEd file format does *not* have a load address (as e.g. +Commodore BASIC does), so there's no way to know the address of the +start of the program (other than counting backwards from the next line, +since its address is known). It's not just a constant either: it +depends on what MEMLO was set to when the program was saved (which varies +depending on what version of AMSB you have, what DOS you boot, whether +or not you have the R: device driver loaded, etc etc). + + +Redundant Tokens +---------------- + +There are two separate tokens each for PRINT and AT: + +token | text +------+----------------------- + $ab  | "PRINT " + $ac  | "PRINT" + $df  | "AT(" + $e0  | "AT " + +When tokenizing a line, AMSB will actually use the $ab token if +there's a space after PRINT (or ?), otherwise it will use the +$ac token. These lines actually get tokenized differently: + +10 PRINT "HELLO" +10 PRINT"HELLO" + +Same applies to the $df and $e0 AT tokens: if the user entered +"AT(X,Y)", $df is used. Otherwise, with "AT (X,Y)", $e0 is used +(followed by an ASCII left parenthesis). + +3 tokens include the opening parenthesis: + +token | text +------+----------------------- + $d2  | "TAB(" + $d6  | "SPC(" + $df  | "AT(" + +Normally in AMSB, it's OK to leave a space between a function name +and the left-paren. PEEK (123) and SIN (1) are both valid. However, +for SPC and TAB, no space is allowed, because the ( is part of the +token. AT would be the same way, except there's a separate token $e0 +that *includes* the space. Weird, huh? A side effect of this is +that "SPC (10)" or "TAB (10)" won't be treated as a function call. +Instead, the SPC or TAB is treated as a variable name. If you write: + +PRINT TAB (10);"HELLO" + +...it'll print " 0 HELLO" at the start of the line[*], instead of "HELLO" +in the 10th column as you might have expected. It also means that AT, +TAB, and SPC are valid variable names in AMSB, which is an exception +to the rule that keywords can't be used as variable names (e.g. SIN=1 +or STRING$="HELLO" are invalid). + +[*] Unless you've assigned another value to TAB, of couse. + + +Unused Tokens +------------- + +If you look at the token list in amsbtok.h (or in a hex dump +of the AMSB executable or cartridge image), you'll see a lot of +double-quotes mixed in with the list. AMSB doesn't actually tokenize +the " character (it's stored as $22, its ASCII value), so these seem +to be placeholders, either because some tokens were deleted from the +language during its development, or else they're intended for some +future version of AMSB that never happened. + +The weird quote tokens are $99, $c8 to $d0, $d5, and $e7 to $ed. If +you hexedit a program to replace a regular double-quote with one of +these tokens, it will list as either "" or just one ", but it will +cause a syntax error at runtime. + + +LOADing Untokenized Files +------------------------- + +If the first byte of the file is anything other than $00 or $01, +AMSB's LOAD command reads it in as a text file (LISTed rather than +SAVEd). + +When LOAD is reading a text file, if the last byte of the file isn't +an ATASCII EOL ($9b), you'll get #136 ERROR. The program doesn't get +deleted, but the last line of the file didn't get loaded. This could +happen if a LISTed file somehow got truncated. + +While on the subject... the manual doesn't mention it, but if you LOAD +a text file without line numbers, the code gets executed in direct +mode during the load (like Atari BASIC's ENTER command does). This +means you could write scripts (batch files) for AMSB... though you'd +be better off using MERGE, rather than LOAD (MERGE is basically the +same thing as Atari BASIC's ENTER). + + +Program Length Header Mismatch +------------------------------ + +When AMSB's LOAD command executes, it reads the 3-byte header, then +reads as many bytes as the header's program length says. + +If the header length is longer than the rest of the file, you get +a #136 ERROR (aka Atari's EOF), and the partially loaded program is +erased (basically it does a NEW). + +If the length is shorter than the program, it'll stop loading no +matter how much more data is in the file. This means it can stop in +the middle of a line. It also means, if there was already a program in +memory that was longer than the program length, you get a "hybrid" mix +of the new program followed by the remainder of the old one. This is +because the three $00 bytes at the end of the program weren't read in. + +If the program length is correct for the actual program (so the three +$00 bytes get read), but there's extra data appended to the file, AMSB +will never read the extra data at all. + + +String Limitations +------------------ + +String literals in AMSB cannot contain the | or ATASCII heart +characters. + +AMSB uses | as a terminator for quoted strings, e.g. "STRING" will +be tokenized as: "STRING| + +If you try to use a | in a quoted string, it gets turned into a double +quote: "FOO|BAR" comes out as "FOO"BAR which is a syntax error! + +String variables can store | but only with e.g. CHR$(124) or reading +from a file: it's string *literals* that don't allow it. + +The reason | is used for a terminating quote is to allow doubling up +the quotes to embed them in a string: + +A$ = "HAS ""QUOTES""" +PRINT A$ will print: HAS "QUOTES" + +At first I thought "no pipe characters in strings, WTF man?" but it's +probably no worse than Atari BASIC's "no quotes in strings constants" +rule. It *would* be nice if the AMSB manual actually documented the +fact that | can't occur in a string constant. Not documenting it makes +it a bug... and they have unused tokens in the $Fx range, I don't see +why they had to use a printing character for this. + +You also can't put a heart (ATASCII character 0) in a string +literal. It will be treated as the end of the line, as though you +pressed Enter (and anything else on the line is ignored). This isn't +documented in the manual, either. + +Like the | character, you can use CHR$(0) to store a heart in a string +and it will work correctly. + + +Line Number Range +----------------- + +AMSB doesn't allow entering line numbers above 63999, but if a file +is e.g. hex-edited to have a line number that's out of range, it will +LIST and RUN just fine... except that it's impossible to GOTO or GOSUB +to an out-of-range line. It will still execute if program flow falls +into it. + + +Differences Between Versions +---------------------------- + +The language is the same in AMSB versions 1 and 2. Tokenized files +made by one version will LOAD and RUN in the other version. + +Version 1, the disk version, always has the full set of commands +avaiable. Version 2, the cart, only has the full set if the extension +disk is booted. The missing ones still get tokenized, but you get SN +ERROR at runtime if you try to execute them. This doesn't affect the +detokenizer at all. The missing commands: + +AUTO +DEF (the string version; numeric is still present) +NOTE +RENUM +TRON +TROFF +DEL +USING +STRING$ (function, not a command) + +RENUM only works in direct mode, not a program. Executing it +gives a FUNCTION CALL ERROR. + +AUTO is (oddly) allowed in a program. Executing it exits the program +and puts you back in the editor, in auto-numbering mode. + +It would seem weird to have POINT available but not NOTE... except +that AMSB doesn't even *have* POINT. Instead, the disk addresses +returned by NOTE are used with AT() in a PRINT statement. Not sure +if AT() works without the extensions loaded, but it won't be useful +anyway without NOTE. + +One other difference between versions 1 and 2: version 2 will LOAD and +RUN the file D:AUTORUN.AMB at startup, if it exists. + + +Colon Weirdness +--------------- + +AMSB allows comments to be started with the ! and ' characters (as +well as the traditional REM). For the ! and ' variety, if they +come at the end of a line after some code, you don't have to put a colon. +Example: + +10 GRAPHICS 2+16 ! NO TEXT WINDOW + +However... in the tokenized format, there *is* a tokenized colon +just before the tokenized ! or ' character. LIST doesn't display it. +If you did put a colon: + +10 CLOSE #1:! WE'RE DONE WITH THE FILE + +...then there will be *two* colons in the tokenized file, and only +one will be LISTed. + +The ELSE keyword works the same way. In this line: + +10 IF A THEN PRINT ELSE STOP + +...there is actually a : character just before the token for ELSE. + +Even weirder: you can put as many colons in a row as you like, and +AMSB will treat it like single colon. This line of code is valid +and runs correctly: + +10 PRINT "FOO"::::::PRINT "BAR" + +These colons are displayed normally in LIST output. + + +Memory Usage +------------ + +On a 48K/64K Atari, FRE(0) for AMSB 1 with DOS booted (since you can't +use it without) but no device drivers is 21020. MEMLO is awfully high +($6a00). + +For AMSB 2 with DOS booted, but without the extensions loaded, FRE(0) +is 24352. With extensions it's 20642 (even though the banner says 20644 +BYTES FREE). + +AMSB 2 without DOS gives you 29980, but how are you gonna load or save +programs without DOS? Nobody wants to use cassette, especially not +people who could afford to buy the AMSB II cartridge. + + +LOCKed Programs +--------------- + +If you save a program with SAVE "filename" LOCK, it gets saved in an +"encrypted" form. Loading a locked program disbles the LISTing or +editing the program (you get LK ERROR if you try). + +The "encryption" is no better than ROT13. To encrypt, subtract each +byte from 0x54 (in an 8-bit register, using twos complement). To +decrypt, do the same. This is a reciprocal cipher, and you can think +of it as the binary equivalent of ROT13. + +You can tell a LOCKed program because its first byte will be 1 instead +of 0. The next 2 bytes (the program length) unencrypted. The rest of +the file is encrypted with the lame scheme described above. + +When AMSB has a LOCKed program loaded into memory, it's *not* stored +encrypted in RAM. It would be perfectly possible to write BASIC code +using direct mode to write the tokenized program out to disk. The +program starts at MEMLO and extends up to the first occurrence of +three $00 bytes. The hardest part of this would be generating the +header using only direct-mode BASIC statements (but it could be done). + +However... there's no need to do that. AMSB has a flag that tells it +whether or not the currently-loaded program is LOCKed. You can just +clear the flag: + +POKE 168,0 + +Now AMSB won't consider the program LOCKed, and you can SAVE a regular +copy of it (and LIST, edit, etc). + + +Line Length Limit +----------------- + +In the editor, after a POKE 82,0 (to set the left margin to 0), you +can enter 120 characters (3 screen lines) on a logical line. If you +enter a program line that way *without* a space after the line number, +then LIST it, it will be 121 characters long, because AMSB will +display a space after the line number. + +If you use a text editor (or write a program) to create an untokenized +BASIC program, you can have a line of code that's 125 characters +long. AMSB will accept it just fine, with LOAD. If a line is 126 +characters or longer, AMSB will silently ignore that line when +LOADing. + +If you create a 125-character line (with a text editor) consisting +only of a comment that begins with ! or ', without a space after the +line number, LOAD it, then SAVE it, that line will be 129 bytes long +in tokenized form. AMSB will LOAD it with no problems. + +If you hex-edit a SAVEd file to create a longer line, AMSB will +accept that, too... up to 255 bytes. At 256 bytes, AMSB will lock +up after LOAD. + + +Crunching +--------- + +AMSB stores spaces in the tokenized program, just like other 8-bit +MS BASICs do, but it requires you to put spaces between keywords and +variables (unlike e.g. Commodore 64 BASIC). This seems to be because +AMSB allows keywords inside of variable names: you can have a variable +called LIFE (which contains the keyword IF) in AMSB, but you can't in +C=64 BASIC (which gives a syntax error becase it sees "L IF E"). + +This applies to numbers, too: POKE710,0 is a syntax error in +AMSB. This is because POKE710 is actually a valid variable name: try +POKE710=123 followed by PRINT POKE710. + +However. The spaces aren't needed when the program is RUN. It would be +possible to remove all the spaces outside of strings or comments and +the program would still work fine. diff --git a/CHANGES.txt b/CHANGES.txt new file mode 100644 index 0000000..17c581e --- /dev/null +++ b/CHANGES.txt @@ -0,0 +1,19 @@ +This is just a list of the user-visible changes. The real log is the +git commit log, of course. + +version 0.2.3 (not released yet): + +- OSS Integer BASIC is now supported in listbas. +- new tool: abas2html. +- add color syntax highlighting to listamsb. +- add -k option to listamsb: keep comment-only lines when crunching. +- convert AMSB.txt to a section 7 man page. +- a8cat now uses correct ANSI code to disable inverse video. + +version 0.2.2: + +- Added this file, CHANGES.txt. +- whichbas now detects LOCKed AMSB programs. +- AMSB.txt is now installed in the doc dir with 'make install'. + +version 0.2.1: first release @@ -1,3 +1,4 @@ +# This Makefile requires GNU make.  # Install paths. DESTDIR is used for installing to an alternate location,  # for people making RPM/deb/tgz/etc packages. @@ -9,6 +10,9 @@ MAN1DIR=$(MANDIR)/man1  MAN5DIR=$(MANDIR)/man5  MAN7DIR=$(MANDIR)/man7  DOCDIR=$(PREFIX)/share/doc/bw-atari8-tools +PSFDIR=$(PREFIX)/share/kbd/consolefonts +BDFDIR=$(PREFIX)/share/share/fonts/misc +TTFDIR=$(PREFIX)/share/share/fonts/TTF  # Compiler stuff  COPT=-O2 @@ -16,17 +20,20 @@ CC=gcc  CFLAGS=-Wall $(COPT) -ansi -D_GNU_SOURCE -DVERSION=\"$(VERSION)\"  # BINS and SCRIPTS go in $BINDIR, DOCS go in $DOCDIR -BINS=a8eol atr2xfd atrsize axe blob2c blob2xex cart2xex cxrefbas dumpbas fenders protbas renumbas rom2cart unmac65 unprotbas vxrefbas xex1to2 xexamine xexcat xexsplit xfd2atr listbas a8cat a8xd -SCRIPTS=dasm2atasm a8utf8 -MANS=a8eol.1 xfd2atr.1 atr2xfd.1 blob2c.1 cart2xex.1 fenders.1 xexsplit.1 xexcat.1 atrsize.1 rom2cart.1 unmac65.1 axe.1 dasm2atasm.1 a8utf8.1 blob2xex.1 xexamine.1 xex1to2.1 unprotbas.1 protbas.1 renumbas.1 dumpbas.1 vxrefbas.1 cxrefbas.1 listbas.1 a8cat.1 a8xd.1 +BINS=a8eol atr2xfd atrsize axe blob2c blob2xex cart2xex cxrefbas dumpbas fenders protbas renumbas rom2cart unmac65 unprotbas vxrefbas xex1to2 xexamine xexcat xexsplit xfd2atr listbas a8cat a8xd whichbas bas2aplus listamsb +SCRIPTS=dasm2atasm diffbas a8diff colorize-amsb abas2html +MANS=a8eol.1 xfd2atr.1 atr2xfd.1 blob2c.1 cart2xex.1 fenders.1 xexsplit.1 xexcat.1 atrsize.1 rom2cart.1 unmac65.1 axe.1 dasm2atasm.1 blob2xex.1 xexamine.1 xex1to2.1 unprotbas.1 protbas.1 renumbas.1 dumpbas.1 vxrefbas.1 cxrefbas.1 listbas.1 a8cat.1 a8xd.1 whichbas.1 diffbas.1 a8diff.1 bas2aplus.1 listamsb.1 colorize-amsb.1 abas2html.1  MAN5S=xex.5 -MAN7S=atascii.7 -DOCS=README.txt equates.inc *.dasm LICENSE ksiders/atr.txt +MAN7S=atascii.7 fauxtari.7 amsb.7 ossintbas.7 +DOCS=README.txt CHANGES.txt equates.inc *.dasm LICENSE ksiders/atr.txt +PSFS=fonts/fauxtari-8.psf fonts/fauxtari-16.psf fonts/fauxtari-24.psf +BDFS=fonts/fauxtari-8.bdf fonts/fauxtari-16.bdf fonts/fauxtari-24.bdf +TTF=fonts/FauxtariScalableMono.ttf  SUBDIRS=ksiders jindroush  # All the programs share this version number... -VERSION=0.2.1 +VERSION=0.2.2  # If your system doesn't support gzipped man pages, comment this out:  GZIP_MAN=y @@ -47,7 +54,11 @@ RST2MAN=rst2man  # "make clean" and "make distclean" will not delete the 6502 object  # code (the *.bin files), but "make realclean" will. -all: $(BINS) manpages symlinks subdirs +all: $(BINS) manpages symlinks subdirs $(TTF) amsb40.txt + +atest: atest.c atascii.c atables.c wtable.c + +intbas: bas.o  unprotbas: bas.o @@ -57,12 +68,18 @@ renumbas: bas.o bcdfp.o linetab.o  dumpbas: bas.o +whichbas: bas.o +  vxrefbas: bas.o  cxrefbas: bas.o bcdfp.o linetab.o -listbas: listbas.c bas.o bcdfp.o tokens.o -	$(CC) $(CFLAGS) -o listbas listbas.c bas.o bcdfp.o tokens.o -lm +bas2aplus: bas.o + +listbas: listbas.c bas.o bcdfp.o tokens.o atables.o turbo_tokens.o aplus_tokens.o bxl_tokens.o bxe_tokens.o int_disk_tokens.o int_tokens.o +	$(CC) $(CFLAGS) -o listbas listbas.c bas.o bcdfp.o tokens.o atables.o turbo_tokens.o aplus_tokens.o bxl_tokens.o bxe_tokens.o int_disk_tokens.o int_tokens.o -lm + +listamsb: listamsb.o atascii.o atables.o  bas.o: bas.c bas.h @@ -70,12 +87,12 @@ wtable.o: wtable.c wtable.h  atables.o: atables.c atables.h -a8cat: a8cat.c atables.o wtable.o +a8cat: a8cat.c atables.o wtable.o atascii.o  a8xd: a8xd.c atables.o  subdirs: -	for dir in $(SUBDIRS); do make -C $$dir COPT="$(COPT)"; done +	@for dir in $(SUBDIRS); do ${MAKE} --no-print-directory -C $$dir COPT="$(COPT)"; done  a8eol: a8eol.c @@ -174,9 +191,24 @@ manpages: $(MANS) $(MAN5S) $(MAN7S)  %.5: %.rst manhdr5.rst manftr.rst  	$(RST2MAN) $< > $@ +amsb.7: amsb.rst manhdr7.rst manftr.rst amsb_content.rst + +ossintbas.7: ossintbas.rst manhdr7.rst manftr.rst ossintbas_content.rst +  %.7: %.rst manhdr7.rst manftr.rst  	$(RST2MAN) $< > $@ +fonts/fauxtari-8.bdf: fonts/mkpsf.pl +	( cd fonts && perl mkpsf.pl ) + +$(TTF): fonts/fauxtari-8.bdf +	bitmapfont2ttf --family-name "Fauxtari Scalable Mono" fonts/fauxtari-8.bdf $(TTF) + +# 40-column version of amsb.7, as plain text, for use an an Atari BBS. +amsb40.txt: amsb_content.rst amsb40.rst +	rst2man amsb40.rst > amsb40.7 +	LANG=C MANWIDTH=40 man --nj ./amsb40.7 > amsb40.txt +  # "make clean" does NOT remove the .bin or _bin.[ch] files. This is  # for people who don't have either dasm or atasm installed.  # also, it doesn't remove the man pages. these are checked into git, even. @@ -227,3 +259,21 @@ install-subdirs: subdirs  	for dir in $(SUBDIRS); do \  		make -C $$dir DESTDIR=$(DESTDIR) PREFIX=$(PREFIX) BINDIR=$(BINDIR) MAN1DIR=$(MAN1DIR) GZIP_MAN=$(GZIP_MAN) DOCDIR=$(DOCDIR) install; \  	done + +install-fonts: all +	sh install-fonts.sh "$(DESTDIR)" "$(BDFDIR)" "$(TTFDIR)" + +user-font: user-fonts + +user-fonts: +	$(MAKE) install-fonts BDFDIR=$(HOME)/.fonts TTFDIR=$(HOME)/.fonts + +user-symlinks: all +	SRC=$$( pwd ) ; \ +	mkdir -p ~/bin ; \ +	cd ~/bin && \ +	for i in $(BINS) $(SCRIPTS) \ +		ksiders/atrdir ksiders/atrextr ksiders/makeatr ksiders/sortatr ksiders/unmakatr \ +		jindroush/chkrom/chkrom jindroush/chkbas/chkbas jindroush/bas2boot/bas2boot \ +		jindroush/chkexe/chkexe jindroush/adir/adir jindroush/acvt/acvt jindroush/aext/aext \ +		; do rm -f $$i; ln -sf $$SRC/$$i . ; done @@ -2,10 +2,17 @@ This is a collection of Atari 8-bit related utilities I've written for  or ported to Linux. They should be usable as-is on other UNIX-like  systems, including Cygwin for MS-Windows. +a8cat      - Convert Atari 8-bit text to/from UTF-8 encoded Unicode or plain +             text. + +a8diff     - Show differences between two Atari ATASCII text files. +  a8eol      - Convert Atari 8-bit text files to/from UNIX / DOS / Mac Classic               text file format. -a8utf8     - Convert Atari 8-bit text to UTF-8 encoded Unicode. +a8xd       - ATASCII and Unicode aware hex dump. + +abas2html  - Convert tokenized Atari BASIC to lovely HTML, using aha.  atr2xfd    - Convert an Atari 8-bit ATR disk image to a raw (XFD) image. @@ -17,6 +24,8 @@ atrsize    - Change the size of an Atari 8-bit ATR disk image, or create  axe        - ATR/XFD Editor. Copy files into & out of ATR and XFD images,               create blank ATR images, etc. +bas2aplus  - Convert Atari BASIC (and some BASIC XL/XE) programs to BASIC/A+. +  blob2c     - Create C source and header files from a binary file.  blob2xex   - Create a XEX file from arbitrary data. @@ -30,10 +39,14 @@ cxrefbas   - Code cross-reference for tokenized Atari 8-bit BASIC files.  dasm2atasm - Convert 6502 assembly in DASM syntax to ATASM (or MAC/65) format. +diffbas    - Show differences between two tokenized Atari 8-bit BASIC files. +  dumpbas    - Formatted hexdump for tokenized Atari 8-bit BASIC files.  fenders    - Install Fenders 3-sector loader in boot sectors of an ATR image. +listamsb   - Detokenize (LIST) Atari Microsoft BASIC programs. +  listbas    - Detokenize (LIST) Atari 8-bit BASIC programs.  protbas    - LIST-protect Atari 8-bit BASIC programs. @@ -49,6 +62,9 @@ vxrefbas   - Variable cross-reference for tokenized Atari 8-bit BASIC files.  unprotbas  - Unprotect LIST-protected BASIC programs. +whichbas   - Examine a BASIC program, decide whether it's Atari BASIC, +             Turbo BASIC, BASIC XL, BASIC XE, or Atari Microsoft BASIC. +  xex1to2    - Convert an Atari DOS 1.0 executable into a standard XEX file.  xexamine   - Show information on XEX files. @@ -60,19 +76,25 @@ xexsplit   - Split a multi-segment Atari 8-bit executable (XEX) into  xfd2atr    - Convert an Atari 8-bit XFD (raw) disk image to an ATR image. -All are written in C, except a8utf8 and dasm2atasm which are written -in Perl. All utilities have man pages. +All are written in C, except dasm2atasm which is written in Perl and +diffbas which is a shell script. All utilities have man pages. + +Also included: + +- "equates.inc", a 6502 assembly header file that defines the Atari 8-bit +  system equates. It's meant to be used with either the DASM or ATASM 6502 +  cross assemblers. -Also included is "equates.inc", a 6502 assembly header file that defines -the Atari 8-bit system equates. It's meant to be used with either the -DASM or ATASM 6502 cross assemblers. +- Collections of utilities by Ken Siders and Jindrich Kubec. See the +  README.txt files in the ksiders/ and jindroush/ directories for details. -Also included: collections of utilities by Ken Siders and Jindrich -Kubec. See the README.txt files in the ksiders/ and jindroush/ -directories for details. +- X11 and Linux console fonts composed of glyphs taken from various versions +  of the Atari XL/XE ROMs. The font family is "Fauxtari"; see fauxtari(7) +  or fauxtari.rst for details.  To install, use the standard "make && make install" process. The default -prefix for installation is /usr/local. +prefix for installation is /usr/local. GNU make is required, so +use "gmake" if you're on e.g. FreeBSD.  You may use "make install PREFIX=/somewhere/else" to install somewhere  other than /usr/local. Binaries will be installed to $PREFIX/bin, man @@ -1,4 +1,13 @@  for now: + +fauxtari: +- Figure out why fauxtari doesn't show up in font-selections +  dialogs in xfc4-terminal, gnome-terminal; also it doesn't +  show up in "kitty +list-fonts" output. + +listbas: +- A+/BXL/BXE indentation needs work (BXE seems OK). +  These may need library (xex.c) changes:  xexcat: handle run/init addresses embedded in a segment longer than    2 bytes. Implemented in library, but not used by xexcat yet. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "A8CAT" 1 "2024-06-29" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "A8CAT" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  a8cat \- Convert Atari 8-bit text to UTF-8 encoded Unicode (and back).  .SH SYNOPSIS @@ -87,12 +87,17 @@ Unicode graphics character. In text mode, ATASCII tabs, backspace,  and bells are translated to the ASCII versions.  .TP  .B  \-r -Reverse conversion: Input is UTF\-8, output is ATASCII (or XL ICS, with \fB\-i\fP). -Beware that printing ATASCII to a terminal may look funny, and may -even confuse the terminal. Redirecting to a file is safe; piping -to a pager usually is. Only the UTF\-8 codepoints that correspond to -ATASCII characters will be converted. If the \fB\-i\fP option was used to -create the input, it must be used with \fB\-r\fP also. +Reverse conversion: Input is plain text, or UTF\-8 created by a previous +run of \fBa8cat\fP; output is ATASCII (or XL ICS, with \fB\-i\fP). ASCII +tabs, backspaces, and newlines will be coverted to the ATASCII +equivalent. ASCII carriage returns will be silently ignored. +.sp +Only the UTF\-8 codepoints that correspond to ATASCII characters will +be converted. If the \fB\-i\fP option was used to create the input, it +must be used with \fB\-r\fP also. +.sp +\fBa8cat\fP will refuse to print ATASCII to a terminal. You must +redirect or pipe the output.  .TP  .B  \-m  Magazine listing mode. Rather than Unicode graphics characters, @@ -132,32 +137,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -6,20 +6,12 @@  #include <wchar.h>  #include <errno.h> -#include "atables.h" +#include "atascii.h"  #include "wtable.h" -const char **table = ata2utf; +int reverse = 0, verbose = 0; -/* XXX: hard-coded ANSI/vt100 escape sequences. would be -   better but more complex to use terminfo to support any ol' -   terminal... */ -const char *inverse_on  = "\x1b[7m"; -const char *inverse_off = "\x1b[0m"; - -int verbose = 0; -int underline = 0, reverse = 0, textmode = 0, ics = 0; -int magazine = 0, stripinv = 0; +atascii_ctx actx;  const char *self; @@ -73,9 +65,9 @@ int handle_escape_seq(int inv, FILE *input, const char *file, int line) {  		buf[count] = c; /* FIXME: might be a wide char! */  	} -	if(strcmp(inverse_on, buf) == 0) { +	if(strcmp(atascii_inverse_on, buf) == 0) {  		return 0x80; -	} else if(strcmp(inverse_off, buf) == 0) { +	} else if(strcmp(atascii_inverse_off, buf) == 0) {  		return 0;  	} else {  		fprintf(stderr, "%s: warning: %s:%d: unrecognized ANSI escape sequence.\n", self, file, line); @@ -94,6 +86,8 @@ int a8revcat(const char *file) {  	while( (c = fgetwc(input)) != WEOF ) {  		if(c == 0x1b) {  			inv = handle_escape_seq(inv, input, file, line); +		} else if(c == '\r') { +			continue; /* swallow carriage returns */  		} else if(c == '\n') {  			putchar(0x9b);  			line++; @@ -106,7 +100,7 @@ int a8revcat(const char *file) {  		} else if(c < 0x80) {  			putchar(c | inv);  		} else { -			d = wchar2atascii(c, ics); +			d = wchar2atascii(c, actx.flags & ATA_FLAG_ICS);  			if(d == -1) {  				fprintf(stderr, "%s: warning: %s:%d: unrecognized Unicode character %04x.\n", self, file, line, c);  			} else { @@ -122,103 +116,24 @@ int a8revcat(const char *file) {  	return 0;  } -void inverse(int onoff) { -	fputs((onoff ? inverse_on : inverse_off ), stdout); -} -  int a8cat(const char *file) {  	FILE *input; -	int c, inv = 0, line = 1; +	int c; +	char converted[20];  	if( !(input = open_input(file)) )  		return 1;  	while( (c = fgetc(input)) != EOF ) { -		if(c == 0x9b) { -			putchar('\n'); -			line++; -			continue; -		} - -		if(stripinv) c &= 0x7f; - -		if(textmode) { -			switch(c) { -				case 0x7f: /* tab */ -					putchar('\t'); -					continue; -				case 0xfd: /* bell */ -					putchar('\a'); -					continue; -				case 0x7e: /* backspace */ -					putchar('\b'); -					continue; -				default: break; -			} -		} - -		if(!underline) { -			/* strings of inverse chars only get one "inverse on" ANSI -			   sequence, and one "inverse off" afterwards. */ -			if(c & 0x80) { -				if(!inv) { -					inv = 1; -					if(magazine) -						fputs("{inv}", stdout); -					else -						inverse(1); -				} -			} else { -				if(inv) { -					inv = 0; -					if(magazine) -						fputs("{norm}", stdout); -					else -						inverse(0); -				} -			} -		} - -		if(magazine) { -			/* special cases: control codes with bit 7 set can't go -			   in the table since it's only got 128 entries. */ -			switch(c) { -				case 0x9c: -					fputs("{del-line}", stdout); continue; -				case 0x9d: -					fputs("{ins-line}", stdout); continue; -				case 0x9e: -					fputs("{clr-tab}", stdout); continue; -				case 0x9f: -					fputs("{set-tab}", stdout); continue; -				case 0xfd: -					fputs("{bell}", stdout); continue; -				case 0xfe: -					fputs("{del-char}", stdout); continue; -				case 0xff: -					fputs("{ins-char}", stdout); continue; -			} -		} - -		fputs(table[c & 0x7f], stdout); - -		if(underline && (c & 0x80)) { -			putchar('\b'); -			putchar('_'); -		} +		fputs(atascii_a2utf(&actx, c, converted), stdout);  	}  	/* gotta turn off inverse, so if there's another file after this one,  	   it doesn't start out being printed in inverse. */ -	if(inv && !underline) { -		if(magazine) -			fputs("{norm}", stdout); -		else -			inverse(0); -	} +	fputs(atascii_a2utf(&actx, ATA_CHR_FINISH, converted), stdout);  	if(verbose) -		fprintf(stderr, "%s: %s: converted %d lines, closing file.\n", self, file, line - 1); +		fprintf(stderr, "%s: %s: converted %d lines, closing file.\n", self, file, actx.lines - 1);  	fclose(input);  	return 0; @@ -226,6 +141,7 @@ int a8cat(const char *file) {  int main(int argc, char **argv) {  	int opt, result = 0; +	int mode = ATA_MODE_UTF8, flags = 0;  	set_self(argv[0]); @@ -241,33 +157,42 @@ int main(int argc, char **argv) {  	while( (opt = getopt(argc, argv, "ihurtmsv")) != -1) {  		switch(opt) { -			case 'i': table = ics2utf; ics = 1; break; +			case 'i': flags |= ATA_FLAG_ICS; break;  			case 'h': print_help(); exit(0); break; -			case 'u': underline = 1; break; +			case 'u': flags |= ATA_FLAG_UNDERLINE; break;  			case 'r': reverse = 1; break; -			case 't': textmode = 1; break; -			case 'm': table = ata2mag; magazine = 1; break; -			case 's': stripinv = 1; break; +			case 't': flags |= ATA_FLAG_TEXTMODE; break; +			case 'm': mode = ATA_MODE_MAGAZINE; break; +			case 's': flags |= ATA_FLAG_STRIP_INVERSE; break;  			case 'v': verbose = 1; break;  			default: print_help(); exit(1); break;  		}  	} +	atascii_context_init(&actx, mode, flags); +  	if(reverse) { +		if(isatty(fileno(stdout))) +			die("Refusing to write ATASCII to a terminal."); + +		/*  		if(underline || textmode || stripinv || magazine) {  			die("-t, -u, -m, -s options don't make sense with -r.\n");  		} +		*/  		/* the language_country part of the locale doesn't matter,           since we aren't doing localization. the encoding *has*           to be UTF-8. */  		setlocale(LC_CTYPE, "en_US.UTF-8");  	} +	/*  	if(magazine) {  		if(ics || stripinv || underline) {  			die("-i, -s, -u options don't make sense with -m.\n");  		}  	} +	*/  	if(optind >= argc) {  		result = (reverse ? a8revcat("-") : a8cat("-")); @@ -61,12 +61,17 @@ OPTIONS    and bells are translated to the ASCII versions.  -r -  Reverse conversion: Input is UTF-8, output is ATASCII (or XL ICS, with **-i**). -  Beware that printing ATASCII to a terminal may look funny, and may -  even confuse the terminal. Redirecting to a file is safe; piping -  to a pager usually is. Only the UTF-8 codepoints that correspond to -  ATASCII characters will be converted. If the **-i** option was used to -  create the input, it must be used with **-r** also. +  Reverse conversion: Input is plain text, or UTF-8 created by a previous +  run of **a8cat**; output is ATASCII (or XL ICS, with **-i**). ASCII +  tabs, backspaces, and newlines will be coverted to the ATASCII +  equivalent. ASCII carriage returns will be silently ignored. + +  Only the UTF-8 codepoints that correspond to ATASCII characters will +  be converted. If the **-i** option was used to create the input, it +  must be used with **-r** also. + +  **a8cat** will refuse to print ATASCII to a terminal. You must +  redirect or pipe the output.  -m    Magazine listing mode. Rather than Unicode graphics characters, @@ -0,0 +1,56 @@ +#!/bin/sh + +usage() { +  cat <<EOF +Usage: $( basename $0 ) [diff-opts] [-- a8cat-opts] file1 file2 + +Diff two Atari ATASCII files, using a8cat(1) and diff(1). + +[diff-opts] is passed through as-is to diff. +[a8cat-opts] is passed through as-is to a8cat. +EOF +  exit "$1" +} + +cleanup() { +  if [ "$dir" != "" ]; then +    cd +    rm -rf "$dir" +  fi +} + +if [ "$1" = "-h" -o "$1" = "--help" -o "$1" = "" ]; then +  usage 0 +fi + +for i in "$@"; do +  if [ -f "$i" ]; then +    if [ "$file1" = "" ]; then +      file1="$( realpath $i )" +      base1="$( basename $i )".txt +    elif [ "$file2" = "" ]; then +      file2="$( realpath $i )" +      base2="$( basename $i )".txt +    else +      usage 1 +    fi +  elif [ "$i" = "--" ]; then +    opts="a8catopts" +  elif [ "$opts" = "a8catopts" ]; then +    a8catopts="$a8catopts $i" +  else +    diffopts="$diffopts $i" +  fi +done + +dir="$( mktemp -d -t diffbas.XXXXXXXXXX )" +[ -d "$dir" ] +cd "$dir" +trap cleanup EXIT +set -e + +a8cat $a8catopts "$file1" > $base1 +a8cat $a8catopts "$file2" > $base2 +diff $diffopts $base1 $base2 + +exit 0 diff --git a/a8diff.1 b/a8diff.1 new file mode 100644 index 0000000..fc4f378 --- /dev/null +++ b/a8diff.1 @@ -0,0 +1,118 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "A8DIFF" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +a8diff \- Show differences between two Atari 8-bit ATASCII text files +.SH SYNOPSIS +.sp +a8diff [\fIdiff\-options\fP] [\fB\-\-\fP \fIa8cat\-options\fP] \fIfile1\fP \fIfile2\fP +.SH DESCRIPTION +.sp +\fBa8diff\fP shows the differences between two ATASCII text files, +using \fBa8cat\fP(1) and \fBdiff\fP(1). +.SH OPTIONS +.sp +\fBa8diff\fP takes no options of its own. It will pass options as\-is +to both \fBa8cat\fP and \fBdiff\fP\&. Use \fB\-\-\fP to separate them: everything +before \fB\-\-\fP is passed to \fBdiff\fP, and everything between \fB\-\-\fP and +the first filename is passed to \fBa8cat\fP\&. +.SH EXAMPLE +.sp +A.LST and B.LST were both created by the \fBLIST\fP command in BASIC. +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +$ a8diff \-u A.LST B.LST + +\-\-\- A.LST.txt 2024\-07\-12 23:56:46.937965855 \-0400 ++++ B.LST.txt 2024\-07\-12 23:56:46.938965854 \-0400 +@@ \-1,3 +1,4 @@ + 10 ? "THIS LINE IS IN BOTH PROGRAMS." + 20 ? "THIS LINE IS ALSO IN BOTH." ++25 ? "THIS LINE ONLY IN B.LST!" + 30 END +.ft P +.fi +.UNINDENT +.UNINDENT +.SH EXIT STATUS +.sp +0 for success. On failure, the exit status is that of whichever command +failed (\fBa8diff\fP or \fBdiff\fP). +.SH COPYRIGHT +.sp +WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. +.SH AUTHOR +.INDENT 0.0 +.IP B. 3 +Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. +.UNINDENT +.SH SEE ALSO +.sp +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\fP(7). +.sp +Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference +Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. +.\" Generated by docutils manpage writer. +. diff --git a/a8diff.rst b/a8diff.rst new file mode 100644 index 0000000..4273642 --- /dev/null +++ b/a8diff.rst @@ -0,0 +1,50 @@ +====== +a8diff +====== + +----------------------------------------------------------- +Show differences between two Atari 8-bit ATASCII text files +----------------------------------------------------------- + +.. include:: manhdr.rst + +SYNOPSIS +======== + +a8diff [*diff-options*] [**--** *a8cat-options*] *file1* *file2* + +DESCRIPTION +=========== +**a8diff** shows the differences between two ATASCII text files, +using **a8cat**\(1) and **diff**\(1). + +OPTIONS +======= +**a8diff** takes no options of its own. It will pass options as-is +to both **a8cat** and **diff**. Use **--** to separate them: everything +before **--** is passed to **diff**, and everything between **--** and +the first filename is passed to **a8cat**. + +EXAMPLE +======= + +A.LST and B.LST were both created by the **LIST** command in BASIC. + +:: + +  $ a8diff -u A.LST B.LST + +  --- A.LST.txt	2024-07-12 23:56:46.937965855 -0400 +  +++ B.LST.txt	2024-07-12 23:56:46.938965854 -0400 +  @@ -1,3 +1,4 @@ +   10 ? "THIS LINE IS IN BOTH PROGRAMS." +   20 ? "THIS LINE IS ALSO IN BOTH." +  +25 ? "THIS LINE ONLY IN B.LST!" +   30 END  + +EXIT STATUS +=========== +0 for success. On failure, the exit status is that of whichever command +failed (**a8diff** or **diff**). + +.. include:: manftr.rst @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "A8EOL" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "A8EOL" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  a8eol \- convert Atari 8-bit text files to/from UNIX/Windows/Mac  .\" RST source for a8eol(1) man page. Convert with: @@ -461,32 +461,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -1,172 +0,0 @@ -#!/usr/bin/perl -w - -# convert A8 text to UTF-8. Control graphics characters are replaced with -# nearest Unicode equivalents (mostly from the box-drawing range, or from -# the basic-latin range with -i option). - -# Careful editing this script: you need an editor that groks UTF-8, or at -# least one that won't mangle the UTF-8 sequences embedded in the tables -# below. - -($SELF = $0) =~ s,.*/,,; - -binmode(STDOUT, ":utf8"); -binmode(STDIN, ":bytes"); - -use utf8; - -%atascii_table = ( -	0 => "♥", -	1 => "┣", -	2 => "┃", -	3 => "┛", -	4 => "┫", -	5 => "┓", -	6 => "╱", -	7 => "╲", -	8 => "◢", -	9 => "▗", -	10 => "◣", -	11 => "▝", -	12 => "▘", -	13 => "▔", -	14 => "▁", -	15 => "▖", -	16 => "♣", -	17 => "┏", -	18 => "━", -	19 => "╋", -	20 => "●", -	21 => "▄", -	22 => "▎", -	23 => "┳", -	24 => "┻", -	25 => "▌", -	26 => "┗", -	27 => "␛", -	28 => "↑", -	29 => "↓", -	30 => "←", -	31 => "→", -	96 => "◆", -	123 => "♠", -	125 => "↰", -	126 => "◀", -	127 => "▶", -	136 => "◤", -	137 => "▛", -	138 => "◥", -	139 => "▙", -	140 => "▟", -	141 => "▆", -	142 => "🮅", -	143 => "▜", -	148 => "◙", -	149 => "▀", -	150 => "🮊", -	153 => "▐", -	155 => "\n", -	156 => "⍐", -	157 => "⍗", -	158 => "⍇", -	159 => "⍈", -	160 => "█", -); - -%xl_intl_table = ( -	0 => "á", -	1 => "ù", -	2 => "Ñ", -	3 => "É", -	4 => "ç", -	5 => "ô", -	6 => "ò", -	7 => "ì", -	8 => "£", -	9 => "ï", -	10 => "ü", -	11 => "ä", -	12 => "Ö", -	13 => "ú", -	14 => "ó", -	15 => "ö", -	16 => "Ü", -	17 => "â", -	18 => "û", -	19 => "î", -	20 => "é", -	21 => "è", -	22 => "ñ", -	23 => "ê", -	24 => "ȧ", -	25 => "à", -	26 => "Ȧ", -	27 => "␛", -	28 => "↑", -	29 => "↓", -	30 => "←", -	31 => "→", -	96 => "¡", -	123 => "Ä", -	126 => "◀", -	127 => "▶", -	155 => "\n", -); - -undef $/; - -$table = \%atascii_table; -$print_table = 0; -while(@ARGV && $ARGV[0] =~ /^-/) { -	for($ARGV[0]) { -		/^-i$/ && do { $table = \%xl_intl_table; next; }; -		/^-t$/ && do { $print_table = 1; next; }; -		/^-r$/ && do { $reverse = 1; next; }; -		/^--?h/ && do { usage(0) }; -		warn "$SELF: unknown option: $_\n"; -		usage(1); -	} -	shift @ARGV; -} - -if($reverse) { -	binmode(STDOUT, ":bytes"); -	for(keys %$table) { -		$revtable{ord($table->{$_})} = chr($_); -	} -	$table = \%revtable; -} - -if($print_table) { -	for(sort { $a <=> $b } keys %$table) { -		my $chr = translate(chr $_); -		$chr = '\n' if $chr eq "\n"; -		printf '"%d","$%02x","%s"' . "\n", $_, $_, $chr; -	} -	exit 0; -} - -$_ = <>; -s/(.)/translate($1)/seg; -print; - -sub translate { -	my $o = ord(shift); -	my $ret; - -	$ret = $table->{$o}; -	return $ret if defined($ret); - -	$ret = $table->{$o & 0x7f}; -	return $ret if defined($ret); - -	return chr($o & 0x7f); -} - -sub usage { -	print <<EOF; -Usage: $SELF [--help] | [-t [-r] [-i]] | [-r] [-i] infile [infile ...] -See man page for details. -EOF -	exit $_[0]; -} diff --git a/a8utf8.rst b/a8utf8.rst deleted file mode 100644 index ec9fbba..0000000 --- a/a8utf8.rst +++ /dev/null @@ -1,57 +0,0 @@ -.. RST source for a8utf8(1) man page. Convert with: -..   rst2man.py a8utf8.rst > a8utf8.1 -.. rst2man.py comes from the SBo development/docutils package. - -====== -a8utf8 -====== - --------------------------------------------------- -Convert Atari 8-bit text to UTF-8 encoded Unicode. --------------------------------------------------- - -.. include:: manhdr.rst - -SYNOPSIS -======== - -*a8utf8* [**-r**] [**-i**] [*infile*] [*infile ...*] - -*a8utf8* [**-r**] [**-i**] **-t** - -DESCRIPTION -=========== - -Convert Atari 8-bit ATASCII or XL ICS (International Character -Set) text to UTF-8 encoded Unicode. Control graphics characters are -replaced with their nearest Unicode equivalents (mostly from the Box -Drawing block, or from the Basic Latin block with **-i** option). - -If no *infile* is given, input is read from standard input. Output always -goes to standard output; to write to a file, use a command like:: - -  a8utf8 atari.txt > converted.txt - -The output is plain UTF-8 Unicode, without BOM. - -Inverse video (characters codes above **$80**) are translated to -their non-inverse equivalents, except **$9B** (Atari EOL), which is -translated to **\\n** (newline). - -OPTIONS -======= - --i -  Input uses Atari XL/XE International Character Set encoding, rather than -  ATASCII graphics. - --t -  Print table of Atari to Unicode equivalents, in CSV format. Can -  be used with or without **-i** and/or **-r** (four different tables). - --r -  Reverse conversion: Input is UTF-8, output is ATASCII (or XL ICS, with **-i**). -  Beware that printing ATASCII to a terminal may look funny, and may even confuse -  the terminal. Redirecting to a file is safe. - -.. include:: manftr.rst @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "A8XD" 1 "2024-06-30" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "A8XD" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  a8xd \- Atari 8-bit ATASCII-aware hex dump  .SH SYNOPSIS @@ -42,36 +42,24 @@ The ATASCII codes are converted to UTF\-8, in the same way as  \fBa8cat\fP(1). Codes with the high bit set are displayed in inverse  video, using ANSI/VT\-100 escape sequences.  .sp -By default, the output is colorized: -.INDENT 0.0 -.INDENT 3.5 -.INDENT 0.0 -.IP \(bu 2 -Normal characters are green. This includes alphanumerics, spaces, and -punctuation. -.IP \(bu 2 -Codes \fB$00\fP (null, or ATASCII heart) and \fB$9B\fP (EOL) are red. -.IP \(bu 2 -Control characters are yellow. This includes codes \fB$01\fP to \fB$1F\fP -(control + letters/punctuation, escape, and arrow keys), \fB$60\fP, \fB$7B\fP, \fB$7D\fP -(clear screen), \fB$7E\fP (backspace), and \fB$7F\fP (tab). -.UNINDENT -.UNINDENT -.UNINDENT -.sp -The colors and inverse rendering apply to both the ATASCII and hex bytes. +By default, the output is colorized (see \fBCOLORS\fP, below). The +colors and inverse rendering apply to both the ATASCII and hex bytes.  .sp  Without \fIinfile\fP, or if \fIinfile\fP is \fB\-\fP, \fBa8xd\fP reads from standard input.  .SH OPTIONS  .INDENT 0.0  .TP  .B  \-a -ANTIC mode: treat the input as screen bytes. Can usefully be combined -with \fB\-g\fP\&. +ANTIC mode: treat the input as screen bytes (aka "internal codes") +rather than ATASCII. Can usefully be combined with \fB\-g\fP or \fB\-f\fP\&. +.TP +.B  \-f +Like \fB\-g\fP, but using the top half of the character set. This is +what you\(aqd see on the Atari with \fIGRAPHICS 1:POKE 756,226\fP\&.  .TP  .B  \-g -Graphics mode. Changes the colorization so it looks like \fIGRAPHICS 1\fP (or 2) -on the Atari. +Graphics mode. Changes the printed characters and colorization so it +looks like \fIGRAPHICS 1\fP (or 2) on the Atari.  .TP  .B  \-i  Print XL/XE International Character Set conversions instead of ATASCII. @@ -123,6 +111,76 @@ Show built\-in help and exit.  .B \fB\-\-version\fP  Show version number and exit.  .UNINDENT +.SH COLORS +.sp +The default color scheme is: +.INDENT 0.0 +.INDENT 3.5 +.INDENT 0.0 +.IP \(bu 2 +Non\-control characters are green. This includes alphanumerics, spaces, and +punctuation. These are the characters that ATASCII has in common with +ASCII. +.IP \(bu 2 +Graphics characters are yellow. This includes \fB$01\fP to \fB$1a\fP (the +alphabet, with the Control key held down), \fB$60\fP (the diamond), and +\fB$7b\fP (the spade). +.IP \(bu 2 +Codes \fB$00\fP (null, or ATASCII heart) and \fB$9B\fP (EOL) are red. These +characters are used as delimiters, so it makes sense for them to +stand out. +.IP \(bu 2 +Cursor control characters are purple. These are characters that perform +some action when printed to the \fIE:\fP device. These are: +.INDENT 2.0 +.INDENT 3.5 +.INDENT 0.0 +.TP +.B \fB$1b\fP +Escape. +.TP +.B \fB$1c\fP through \fB$1f\fP +Cursor movement (up/down/left/right arrows). +.TP +.B \fB$7d\fP +Clear screen. +.TP +.B \fB$7e\fP +Backspace. +.TP +.B \fB$7f\fP +Tab. +.TP +.B \fB$9c\fP +Delete line. +.TP +.B \fB$9d\fP +Insert line. +.TP +.B \fB$9e\fP +Clear tab stop. +.TP +.B \fB$9f\fP +Set tab stop. +.TP +.B \fB$fd\fP +Bell. +.TP +.B \fB$fe\fP +Delete character. +.TP +.B \fB$ff\fP +Insert character. +.UNINDENT +.UNINDENT +.UNINDENT +.UNINDENT +.UNINDENT +.UNINDENT +.sp +In \fB\-f\fP and \fB\-g\fP modes, the above doesn\(aqt apply. Instead, the +colors are (close to) the colors that would appear in \fIGRAPHICS 1\fP, +with the default palette.  .SH NOTES  .sp  \fBa8xd\fP requires the terminal emulator to support UTF\-8 and use a @@ -174,32 +232,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -14,6 +14,15 @@  #define UC_WORD_FMT "%04X"  #define UC_BYTE_FMT "%02X" +/* colors. don't use black or white: one or the other is likely +   the terminal's text color already. +   don't use blue because it's hard to read. */ +#define C_RED     1 +#define C_GREEN   2 +#define C_YELLOW  3 +#define C_PURPLE  5 +#define C_CYAN    6 +  /* translation table (see atables.c), choices are     ata2utf, ics2utf, or magazine. */  const char **table = ata2utf; @@ -31,7 +40,7 @@ const char *byte_format = LC_BYTE_FMT;  /* command line options change these. */  int verbose = 0, color = 1, disp_offset = 0, maxlen = 0;  int seek_whence = 0, seekpos = 0, filepos = 0, limit = 0; -int graphics = 0, screencodes = 0; +int graphics = 0, screencodes = 0, high_font = 0;  const char *self; @@ -49,7 +58,7 @@ void die(const char *msg) {  }  void print_help(void) { -	printf("Usage:\n  %s [-a] [-g] [-i] [-l limit] [-m] [-o offset] [-s [-]seek] [-u] [-v] [file]\n", self); +	printf("Usage:\n  %s [-a] [-f] [-g] [-i] [-l limit] [-m] [-o offset] [-s [-]seek] [-u] [-v] [file]\n", self);  	printf("   -a: Input is ANTIC screencodes (default is ATASCII).\n");  	printf("   -g: GR.1/2 style colorization.\n");  	printf("   -i: Input is XL intl charset (default is ATASCII).\n"); @@ -128,32 +137,50 @@ FILE *open_input(const char *file) {  	return input;  } +int get_text_color(unsigned char c) { +	unsigned char c7 = c & 0x7f; + +	if(c == 0 || c == 0x9b) { +		return C_RED; +	} else if((c7 >= 0x1b && c7 <= 0x1f) || (c7 >= 0x7d)) { +		/* cursor control characters: +			- 0x1b (esc) +			- 0x1c-0x1f (arrows), 0x9c-0x9f +			- 0x7d/0xf3 (cls, bell) +			- 0x7e, 0xfe (delete line, char) +			- 0x7f, 0xff (tab, insert char) +			*/ +		return C_PURPLE; +	} else if(c7 < 32 || c7 == 0x60 || c7 == 0x7b) { +		return C_YELLOW; +	} else { +		return C_GREEN; +	} +} + +int get_graphics_color(unsigned char c) { +	if(c < 0x20) +		return C_GREEN; +	else if(c >= 0x20 && c < 0x60) +		return C_YELLOW; +	else if(c >= 0x60 && c < 0x80) +		return C_GREEN; +	else if(c >= 0x80 && c < 0xa0) +		return C_RED; +	else if(c >= 0xa0 && c < 0xe0) +		return C_CYAN; +	else /* c >= 0xe0 */ +		return C_RED; +} +  char *get_color(unsigned char c) {  	int color; -	unsigned char c7 = c & 0x7f;  	static char outbuf[32];  	if(graphics) { -		if(c < 0x20) -			color = 2; -		else if(c >= 0x20 && c < 0x60) -			color = 3; -		else if(c >= 0x60 && c < 0x80) -			color = 2; -		else if(c >= 0x80 && c < 0xa0) -			color = 1; -		else if(c >= 0xa0 && c < 0xe0) -			color = 6; /* cyan (blue is too dark on most terminals) */ -		else /* c >= 0xe0 */ -			color = 1; +		color = get_graphics_color(c);  	} else { -		if(c == 0 || c == 0x9b) { -			color = 1; /* red */ -		} else if(c7 < 32 || c7 == 0x60 || c7 == 0x7b || c7 == 0x7d || c7 == 0x7e || c7 == 0x7f) { -			color = 3; /* yellow/orange */ -		} else { -			color = 2; /* green */ -		} +		color = get_text_color(c);  	}  	if(color) { @@ -171,16 +198,22 @@ char *get_color(unsigned char c) {     $60-$7F get displayed in green, as $40-$5F.     for $80-$FF, same thing, but green is red, and orange is blue.  */ -char *get_graphics(unsigned char c) { -	static char result[2]; +unsigned char get_graphics(unsigned char c) {  	c &= 0x7f;  	if(c < 0x20)  		c += 0x20;  	else if(c >= 0x60)  		c -= 0x20; -	result[0] = c; -	result[1] = 0; -	return result; +	return c; +} + +unsigned char get_high_graphics(unsigned char c) { +	c &= 0x7f; +	if(c >= 0x20 && c < 0x40) +		c -= 0x20; +	else if(c >= 0x40) +		c += 0x20; +	return c;  }  unsigned char screen2ata(unsigned char c) { @@ -231,6 +264,19 @@ void seek_input(FILE *input) {  	}  } +void append_str_f(char *buf, int *pos, const char *fmt, const char *str) { +	*pos += sprintf(buf + *pos, fmt, str); +} + +void append_str(char *buf, int *pos, const char *str) { +	append_str_f(buf, pos, "%s", str); +} + +void append_hex(char *buf, int *pos, const unsigned char byte) { +	*pos += sprintf(buf + *pos, byte_format, byte); +} + +  void dump_line(const unsigned char *buf, int len) {  	char hex[1024], asc[1024];  	int hpos = 0, apos = 0, count = len; @@ -244,26 +290,35 @@ void dump_line(const unsigned char *buf, int len) {  	while(len) {  		c = *buf; -		if(screencodes) c = screen2ata(c);  		inv = !graphics && (c & 0x80); +		if(screencodes) c = screen2ata(c); -		if(color) hpos += sprintf(hex + hpos, "%s", get_color(c)); -		if(inv) hpos += sprintf(hex + hpos, "%s", inverse_on); -		hpos += sprintf(hex + hpos, byte_format, c); -		if(color || inv) hpos += sprintf(hex + hpos, "%s", color_off); -		hex[hpos++] = ' '; -		if(count - len == 7) hex[hpos++] = ' '; +		hpos += printf("%s", get_color(c)); +		if(inv) hpos += printf("%s", inverse_on); +		hpos += printf(byte_format, *buf); /* *buf here, not c! */ +		if(color || inv) hpos += printf("%s", color_off); +		putchar(' '); +		hpos++; +		if(count - len == 7) { +			putchar(' '); +			hpos++; +		} -		if(color) apos += sprintf(asc + apos, "%s", get_color(c)); -		if(inv) apos += sprintf(asc + apos, "%s", inverse_on); -		apos += sprintf(asc + apos, "%s", (graphics ? get_graphics(c) : table[c & 0x7f])); -		if(color || inv) apos += sprintf(asc + apos, "%s", color_off); +		if(color) append_str(asc, &apos, get_color(c)); +		if(inv) append_str(asc, &apos, inverse_on); +		if(graphics) { +			if(high_font) +				c = get_high_graphics(c); +			else +				c = get_graphics(c); +		} +		apos += sprintf(asc + apos, "%s", table[c & 0x7f]); +		if(color || inv) append_str(asc, &apos, color_off);  		filepos++;  		buf++;  		len--;  	} -	printf("%s", hex);  	/* what shall we use to fill the empty spaces? */  	if(count < 8) putchar(' '); @@ -316,7 +371,7 @@ int main(int argc, char **argv) {  		exit(0);  	} -	while( (opt = getopt(argc, argv, "vhimus:o:l:ga")) != -1) { +	while( (opt = getopt(argc, argv, "vhimus:o:l:gaf")) != -1) {  		switch(opt) {  			case 'v': verbose = 1; break;  			case 'h': print_help(); exit(0); break; @@ -328,6 +383,7 @@ int main(int argc, char **argv) {  			case 'l': limit = parse_limit_arg(optarg); break;  			case 'g': graphics = 1; break;  			case 'a': screencodes = 1; break; +			case 'f': graphics = high_font = 1; break;  			default: print_help(); exit(1); break;  		}  	} @@ -23,18 +23,8 @@ The ATASCII codes are converted to UTF-8, in the same way as  **a8cat**\(1). Codes with the high bit set are displayed in inverse  video, using ANSI/VT-100 escape sequences. -By default, the output is colorized: - -  - Normal characters are green. This includes alphanumerics, spaces, and -    punctuation. - -  - Codes **$00** (null, or ATASCII heart) and **$9B** (EOL) are red. - -  - Control characters are yellow. This includes codes **$01** to **$1F** -    (control + letters/punctuation, escape, and arrow keys), **$60**, **$7B**, **$7D** -    (clear screen), **$7E** (backspace), and **$7F** (tab). - -The colors and inverse rendering apply to both the ATASCII and hex bytes. +By default, the output is colorized (see **COLORS**, below). The +colors and inverse rendering apply to both the ATASCII and hex bytes.  Without *infile*, or if *infile* is **-**, **a8xd** reads from standard input. @@ -43,11 +33,15 @@ OPTIONS  -a    ANTIC mode: treat the input as screen bytes (aka "internal codes") -  rather than ATASCII. Can usefully be combined with **-g**. +  rather than ATASCII. Can usefully be combined with **-g** or **-f**. + +-f +  Like **-g**, but using the top half of the character set. This is +  what you'd see on the Atari with *GRAPHICS 1:POKE 756,226*.  -g -  Graphics mode. Changes the colorization so it looks like *GRAPHICS 1* (or 2) -  on the Atari. +  Graphics mode. Changes the printed characters and colorization so it +  looks like *GRAPHICS 1* (or 2) on the Atari.  -i    Print XL/XE International Character Set conversions instead of ATASCII. @@ -89,6 +83,66 @@ OPTIONS  **--version**    Show version number and exit. +COLORS +====== + +The default color scheme is: + +  - Non-control characters are green. This includes alphanumerics, spaces, and +    punctuation. These are the characters that ATASCII has in common with +    ASCII. + +  - Graphics characters are yellow. This includes **$01** to **$1a** (the +    alphabet, with the Control key held down), **$60** (the diamond), and +    **$7b** (the spade). + +  - Codes **$00** (null, or ATASCII heart) and **$9B** (EOL) are red. These +    characters are used as delimiters, so it makes sense for them to +    stand out. + +  - Cursor control characters are purple. These are characters that perform +    some action when printed to the *E:* device. These are: + +      **$1b** +        Escape. + +      **$1c** through **$1f** +        Cursor movement (up/down/left/right arrows). + +      **$7d** +        Clear screen. + +      **$7e** +        Backspace. + +      **$7f** +        Tab. + +      **$9c** +        Delete line. + +      **$9d** +        Insert line. + +      **$9e** +        Clear tab stop. + +      **$9f** +        Set tab stop. + +      **$fd** +        Bell. + +      **$fe** +        Delete character. + +      **$ff** +        Insert character. + +In **-f** and **-g** modes, the above doesn't apply. Instead, the +colors are (close to) the colors that would appear in *GRAPHICS 1*, +with the default palette. +  NOTES  ===== diff --git a/abas2html b/abas2html new file mode 100755 index 0000000..6da890f --- /dev/null +++ b/abas2html @@ -0,0 +1,109 @@ +#!/bin/sh + +# this is supposed to be POSIX sh compliant. their getopts docs: +# https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html + +SELF="$( echo $0 | sed 's,.*/,,' )" + +die() { +	echo "$SELF: $1" >& 2 +	exit 1 +} + +checkbin() { +	if ! which "$1" >/dev/null 2>/dev/null; then +		die "$1 not found on PATH, can't continue" +	fi +} + +print_help() { +	cat <<EOF +$SELF: convert tokenized Atari BASIC to HTML +B. Watson <urchlay@slackware.uk>, WTFPL +Usage: $SELF -a<aha-options> -b<basver> -m input.bas <output.html> +  -a   next option is passed to aha(1). may be used multiple times. +  -b   set BASIC dialect. default is autodetection. valid dialects: +       -ba   Atari 8K BASIC +       -ba+  OSS BASIC/A+ +       -bm   Atari Microsoft BASIC +       -bt   Turbo BASIC XL +       -bxl  OSS BASIC XL +       -bxe  OSS BASIC XE +       -bic  OSS Integer BASIC (cartridge version) +       -bid  OSS Integer BASIC (disk version) +  -m   monochrome: disable color syntax highlighting. +if output filename is missing, it defaults to the input filename, with +the extension changed to .html (e.g. FOO.BAS => FOO.html). +EOF +	exit $1 +} + +# main() +if [ "$*" = "--help" ]; then +	print_help 0 +fi + +while getopts ":hb:a:mMn" opt; do +	case "$opt" in +		b)   BASVER="$OPTARG"              ;; +		a)   AHA_OPTS="$AHA_OPTS $OPTARG"  ;; +		m|M|n) MONO="1"                    ;; +		h)   print_help 0                  ;; +		*)   die "invalid option -$OPTARG" ;; +	esac +done + +shift $(($OPTIND - 1)) + +if [ -z "$1" ]; then +	die "no input file given (try -h)" +else +	infile="$1" +fi + +if [ -n "$2" ]; then +	outfile="$2" +else +	outfile="$( echo "$infile" | sed 's,\.[^.]*$,.html,' )" +	if [ "$infile" = "$outfile" ]; then +		outfile="$infile".html +	fi +fi + +if [ "$BASVER" = "" ]; then +	checkbin whichbas +	whichbas -s "$infile" +	case "$?" in +		3)       BASVER="a"  ;; +		4|7|8|9) BASVER="t"  ;; +		5)       BASVER="xl" ;; +		6|12)    BASVER="xe" ;; +		11)      BASVER="m"  ;; +		14)      BASVER="a+" ;; +		15)      BASVER="ic" ;; +		16)      BASVER="id" ;; +		*)       die "can't detect BASIC dialect; use -b<xx> option" ;; +	esac +fi + +case "$BASVER" in +	m)                  LISTER=listamsb ; BASVER=""          ;; +	a|t|xl|xe|a+|id|ic) LISTER=listbas  ; BASVER="-b$BASVER" ;; +	*) die "$BASVER not a valid BASIC dialect"         ;; +esac + +checkbin $LISTER +checkbin aha +if [ "$LISTER" = "listamsb" ]; then +	if [ "$MONO" = "1" ]; then +		MONO_OPT="-M" +	else +		checkbin "${COLORIZE_AMSB:-colorize-amsb}" +	fi +else +	if [ "$MONO" = "1" ]; then +		MONO_OPT="-n" +	fi +fi + +exec $LISTER $BASVER $MONO_OPT "$infile" | aha -t "$infile" $AHA_OPTS > "$outfile" diff --git a/abas2html.1 b/abas2html.1 new file mode 100644 index 0000000..03d48c5 --- /dev/null +++ b/abas2html.1 @@ -0,0 +1,172 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "ABAS2HTML" 1 "2025-04-01" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +abas2html \- Create HTML from tokenized Atari BASIC +.SH SYNOPSIS +.sp +\fBabas2html\fP [\fB\-h\fP] [\fB\-a\fP \fIaha\-opts\fP] [\fB\-b\fP \fIdialect\fP] [\fB\-m\fP] \fIinput\-file\fP [\fIoutput\-file\fP] +.SH DESCRIPTION +.sp +\fBabas2html\fP is a shell script wrapper for \fBlistbas\fP(1), +\fBlistamsb\fP(1), and \fBaha\fP(1). It creates an HTML file of the +program listing, with color syntax highlighting by default. ATASCII +characters are converted to Unicode equivalents, and inverse video is +displayed correctly. +.sp +\fIinput\-file\fP must be a tokenized BASIC program, either Atari 8K BASIC, +OSS BASIC/A+, Atari Microsoft BASIC, Turbo BASIC XL, OSS BASIC XL, or +OSS BASIC XE. You can specify the BASIC dialect (see \fB\-b\fP, below) or +let it be autodetected (via \fBwhichbas\fP(1)). +.sp +\fIoutput\-file\fP will be an HTML file, created by \fBaha\fP(1). If +no output filename is given, it will be costructed by changing the +filename extension to \fI\&.html\fP, or (if there is no extension) by adding +\fI\&.html\fP to the input filename. +.sp +\fBaha\fP can be installed from \fI\%https://github.com/theZiz/aha\fP or from +your distribution\(aqs package repository (e.g. \fBsbopkg \-i aha\fP on Slackware, +\fBapt install aha\fP on Debian or Ubuntu). +.SH OPTIONS +.INDENT 0.0 +.TP +.B  \-a +Next option is passed to \fBaha\fP(1). May be used multiple times. +Examples: +.INDENT 7.0 +.INDENT 3.5 +.sp +.nf +.ft C +abas2html \-a \-b \-a \-n FOO.BAS    # black background, no header +abas2html \-a"\-b \-n" FOO.BAS      # same thing, quotes required +.ft P +.fi +.UNINDENT +.UNINDENT +.TP +.B  \-b +Set BASIC dialect. Default is autodetection. Valid dialects: +.sp +\fB\-ba\fP   Atari 8K BASIC +.sp +\fB\-ba+\fP  OSS BASIC/A+ +.sp +\fB\-bm\fP   Atari Microsoft BASIC +.sp +\fB\-bt\fP   Turbo BASIC XL +.sp +\fB\-bxl\fP  OSS BASIC XL +.sp +\fB\-bxe\fP  OSS BASIC XE +.sp +\fB\-bic\fP  OSS Integer BASIC (cartridge version) +.sp +\fB\-bid\fP  OSS Integer BASIC (disk version) +.TP +.B  \-m +Monochrome: disable color syntax highlighting. +.UNINDENT +.SH ENVIRONMENT +.INDENT 0.0 +.TP +.B \fBPATH\fP +The various programs executed are searched for in \fBPATH\fP\&. If you don\(aqt +have the utilities installed system\-wide, you can use something like: +.INDENT 7.0 +.INDENT 3.5 +.sp +.nf +.ft C +PATH=.:$PATH ./abas2html <...> +.ft P +.fi +.UNINDENT +.UNINDENT +.TP +.B \fBLISTBAS_OPTS\fP +See \fBlistbas\fP(1) for usage. Note that Atari Microsoft BASIC programs +are listed with \fBlistamsb\fP, which is not affected by this environment +variable. +.TP +.B \fBCOLORIZE_AMSB\fP +Used by \fBlistamsb\fP(1) when listing Atari Microsoft BASIC programs. +.UNINDENT +.SH EXIT STATUS +.sp +0 for success, non\-zero for failure. +.SH COPYRIGHT +.sp +WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. +.SH AUTHOR +.INDENT 0.0 +.IP B. 3 +Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. +.UNINDENT +.SH SEE ALSO +.sp +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\fP(7). +.sp +Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference +Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. +.\" Generated by docutils manpage writer. +. diff --git a/abas2html.rst b/abas2html.rst new file mode 100644 index 0000000..73e803e --- /dev/null +++ b/abas2html.rst @@ -0,0 +1,90 @@ +========= +abas2html +========= + +-------------------------------------- +Create HTML from tokenized Atari BASIC +-------------------------------------- + +.. include:: manhdr.rst + +SYNOPSIS +======== + +**abas2html** [**-h**] [**-a** *aha-opts*] [**-b** *dialect*] [**-m**] *input-file* [*output-file*] + +DESCRIPTION +=========== + +**abas2html** is a shell script wrapper for **listbas**\(1), +**listamsb**\(1), and **aha**\(1). It creates an HTML file of the +program listing, with color syntax highlighting by default. ATASCII +characters are converted to Unicode equivalents, and inverse video is +displayed correctly. + +*input-file* must be a tokenized BASIC program, either Atari 8K BASIC, +OSS BASIC/A+, Atari Microsoft BASIC, Turbo BASIC XL, OSS BASIC XL, or +OSS BASIC XE. You can specify the BASIC dialect (see **-b**, below) or +let it be autodetected (via **whichbas**\(1)). + +*output-file* will be an HTML file, created by **aha**\(1). If +no output filename is given, it will be costructed by changing the +filename extension to *.html*, or (if there is no extension) by adding +*.html* to the input filename. + +**aha** can be installed from https://github.com/theZiz/aha or from +your distribution's package repository (e.g. **sbopkg -i aha** on Slackware, +**apt install aha** on Debian or Ubuntu). + +OPTIONS +======= + +-a   Next option is passed to **aha**\(1). May be used multiple times. +     Examples:: + +       abas2html -a -b -a -n FOO.BAS    # black background, no header +       abas2html -a"-b -n" FOO.BAS      # same thing, quotes required + +-b   Set BASIC dialect. Default is autodetection. Valid dialects: + +     **-ba**   Atari 8K BASIC + +     **-ba+**  OSS BASIC/A+ + +     **-bm**   Atari Microsoft BASIC + +     **-bt**   Turbo BASIC XL + +     **-bxl**  OSS BASIC XL + +     **-bxe**  OSS BASIC XE + +     **-bic**  OSS Integer BASIC (cartridge version) + +     **-bid**  OSS Integer BASIC (disk version) + +-m   Monochrome: disable color syntax highlighting. + +ENVIRONMENT +=========== + +**PATH** +  The various programs executed are searched for in **PATH**. If you don't +  have the utilities installed system-wide, you can use something like:: + +    PATH=.:$PATH ./abas2html <...> + +**LISTBAS_OPTS** +  See **listbas**\(1) for usage. Note that Atari Microsoft BASIC programs +  are listed with **listamsb**, which is not affected by this environment +  variable. + +**COLORIZE_AMSB** +  Used by **listamsb**\(1) when listing Atari Microsoft BASIC programs. + +EXIT STATUS +=========== + +0 for success, non-zero for failure. + +.. include:: manftr.rst @@ -0,0 +1,600 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "AMSB" 7 "2025-03-13" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +amsb \- Atari Microsoft BASIC Notes +.SH DESCRIPTION +.sp +Atari Microsoft BASIC is actually a pretty cool BASIC for the Atari 8\-bit. I never +got the chance to use it \(aqback in the day\(aq because it was expensive, +required a floppy drive and at least 32K of RAM (my poor 400 had a +tape drive for the first few years), and then later on, there was +Turbo BASIC XL, which was cooler than AMSB, and also freeware. +.sp +This file is a collection of notes I made to myself while developing +listamsb. The information here might be useful (e.g. if you\(aqre trying +to repair a damaged AMSB file) and hopefully is interesting. Enjoy! +.sp +This file is part of the bw\-atari8\-utils source. You can get the +latest version of the source from: +.sp +\fI\%https://slackware.uk/~urchlay/repos/bw\-atari8\-tools\fP +.sp +\&...which you can either view with a web browser or use with the \(aqgit +clone\(aq command. +.SH NOTES +.SS Tokenized file format +.sp +File begins with a 3\-byte header: +.TS +center; +|l|l|. +_ +T{ +Offset +T}	T{ +Purpose +T} +_ +T{ +0 +T}	T{ +0 for a normal program, 1 for LOCKed (encrypted) +T} +_ +T{ +1 +T}	T{ +LSB, program length, not counting the 3\-byte header +T} +_ +T{ +2 +T}	T{ +MSB, program length +T} +_ +.TE +.sp +The program length should always be the actual file size minus 3.  If +it\(aqs not, the file has either been truncated or had junk added to the +end. In a LOCKed program, the program length bytes are not encrypted. +.sp +After the header, the lines of code (encrypted, for LOCKed programs). +Each line has a 4\-byte header: +.TS +center; +|l|l|. +_ +T{ +0 +T}	T{ +LSB, address of the last byte of this line... +T} +_ +T{ +1 +T}	T{ +MSB, address  ...which is ignored on LOAD! +T} +_ +T{ +2 +T}	T{ +LSB, line number +T} +_ +T{ +3 +T}	T{ +MSB, line number +T} +_ +.TE +.sp +The rest of the line is the tokens, terminated by a $00 byte. The +next 2 bytes after the $00 is the last\-byte offset of the next line. +.sp +The last "line" of the program has a $0000 offset, which indicates the +end of the program. Since the actual last line ends with a $00, that +means there will be three $00 bytes in a row as the last 3 bytes of +the file. And that\(aqs the \fIonly\fP place 3 $00\(aqs in a row will occur. +.sp +Tokenization is "lightweight": there are no tokenized numerics, +they\(aqre just stored as ASCII characters, as typed. There\(aqs no "string +constant follows" token like there is in Atari BASIC (well, there is, +it\(aqs just a double\-quote, $22. There\(aqs no length byte). Variable names +are not tokenized, either, they\(aqre just stored as\-is (name in ASCII, +including trailing $ for strings, etc). Numeric constants are just +stored as ASCII digits, just as you typed them. +.sp +In fact the only things that are tokenized are BASIC keywords: +commands and functions... NOT including user functions defined +with DEF (those are stored as just the ASCII function name, like +variables). +.sp +There are 2 sets of tokens. One set is single\-byte, $80 and up. +These are commands. The other set is functions, which are 2 bytes: +$FF followed by the token number. See amsbtok.h in the source for the +actual tokens. +.sp +AMSB saves the end\-of\-line pointers, but it totally ignores them +on LOAD. The SAVEd file format does \fInot\fP have a load address (as e.g. +Commodore BASIC does), so there\(aqs no way to know the address of the +start of the program (other than counting backwards from the next line, +since its address is known). It\(aqs not just a constant either: it +depends on what MEMLO was set to when the program was saved (which varies +depending on what version of AMSB you have, what DOS you boot, whether +or not you have the R: device driver loaded, etc etc). +.SS Redundant Tokens +.sp +There are two separate tokens each for PRINT and AT: +.TS +center; +|l|l|. +_ +T{ +$ab +T}	T{ +PRINT +T} +_ +T{ +$ac +T}	T{ +PRINT +T} +_ +T{ +$df +T}	T{ +AT( +T} +_ +T{ +$e0 +T}	T{ +AT +T} +_ +.TE +.sp +When tokenizing a line, AMSB will actually use the $ab token if +there\(aqs a space after PRINT (or ?), otherwise it will use the +$ac token. These lines actually get tokenized differently: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10 PRINT "HELLO" +10 PRINT"HELLO" +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +Same applies to the $df and $e0 AT tokens: if the user entered +"AT(X,Y)", $df is used. Otherwise, with "AT (X,Y)", $e0 is used +(followed by an ASCII left parenthesis). +.sp +3 tokens include the opening parenthesis: +.TS +center; +|l|l|. +_ +T{ +$d2 +T}	T{ +TAB( +T} +_ +T{ +$d6 +T}	T{ +SPC( +T} +_ +T{ +$df +T}	T{ +AT( +T} +_ +.TE +.sp +Normally in AMSB, it\(aqs OK to leave a space between a function name +and the left\-paren. PEEK (123) and SIN (1) are both valid. However, +for SPC and TAB, no space is allowed, because the ( is part of the +token. AT would be the same way, except there\(aqs a separate token $e0 +that \fIincludes\fP the space. Weird, huh? A side effect of this is +that "SPC (10)" or "TAB (10)" won\(aqt be treated as a function call. +Instead, the SPC or TAB is treated as a variable name. If you write: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +PRINT TAB (10);"HELLO" +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +\&...it\(aqll print " 0 HELLO" at the start of the line[*], instead of "HELLO" +in the 10th column as you might have expected. It also means that AT, +TAB, and SPC are valid variable names in AMSB, which is an exception +to the rule that keywords can\(aqt be used as variable names (e.g. SIN=1 +or STRING$="HELLO" are invalid). +.sp +[*] Unless you\(aqve assigned another value to TAB, of couse. +.SS Unused Tokens +.sp +If you look at the token list in amsbtok.h (or in a hex dump +of the AMSB executable or cartridge image), you\(aqll see a lot of +double\-quotes mixed in with the list. AMSB doesn\(aqt actually tokenize +the " character (it\(aqs stored as $22, its ASCII value), so these seem +to be placeholders, either because some tokens were deleted from the +language during its development, or else they\(aqre intended for some +future version of AMSB that never happened. +.sp +The weird quote tokens are $99, $c8 to $d0, $d5, and $e7 to $ed. If +you hexedit a program to replace a regular double\-quote with one of +these tokens, it will list as either "" or just one ", but it will +cause a syntax error at runtime. +.SS LOADing Untokenized Files +.sp +If the first byte of the file is anything other than $00 or $01, +AMSB\(aqs LOAD command reads it in as a text file (LISTed rather than +SAVEd). +.sp +When LOAD is reading a text file, if the last byte of the file isn\(aqt +an ATASCII EOL ($9b), you\(aqll get #136 ERROR. The program doesn\(aqt get +deleted, but the last line of the file didn\(aqt get loaded. This could +happen if a LISTed file somehow got truncated. +.sp +While on the subject... the manual doesn\(aqt mention it, but if you LOAD +a text file without line numbers, the code gets executed in direct +mode during the load (like Atari BASIC\(aqs ENTER command does). This +means you could write scripts (batch files) for AMSB... though you\(aqd +be better off using MERGE, rather than LOAD (MERGE is basically the +same thing as Atari BASIC\(aqs ENTER). +.SS Program Length Header Mismatch +.sp +When AMSB\(aqs LOAD command executes, it reads the 3\-byte header, then +reads as many bytes as the header\(aqs program length says. +.sp +If the header length is longer than the rest of the file, you get +a #136 ERROR (aka Atari\(aqs EOF), and the partially loaded program is +erased (basically it does a NEW). +.sp +If the length is shorter than the program, it\(aqll stop loading no +matter how much more data is in the file. This means it can stop in +the middle of a line. It also means, if there was already a program in +memory that was longer than the program length, you get a "hybrid" mix +of the new program followed by the remainder of the old one. This is +because the three $00 bytes at the end of the program weren\(aqt read in. +.sp +If the program length is correct for the actual program (so the three +$00 bytes get read), but there\(aqs extra data appended to the file, AMSB +will never read the extra data at all. +.SS String Limitations +.sp +String literals in AMSB cannot contain the | or ATASCII heart +characters. +.sp +AMSB uses | as a terminator for quoted strings, e.g. "STRING" will +be tokenized as: "STRING| +.sp +If you try to use a | in a quoted string, it gets turned into a double +quote: "FOO|BAR" comes out as "FOO"BAR which is a syntax error! +.sp +String variables can store | but only with e.g. CHR$(124) or reading +from a file: it\(aqs string \fIliterals\fP that don\(aqt allow it. +.sp +The reason | is used for a terminating quote is to allow doubling up +the quotes to embed them in a string: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +A$ = "HAS ""QUOTES""" +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +PRINT A$ will print: HAS "QUOTES" +.sp +At first I thought "no pipe characters in strings, WTF man?" but it\(aqs +probably no worse than Atari BASIC\(aqs "no quotes in strings constants" +rule. It \fIwould\fP be nice if the AMSB manual actually documented the +fact that | can\(aqt occur in a string constant. Not documenting it makes +it a bug... and they have unused tokens in the $Fx range, I don\(aqt see +why they had to use a printing character for this. +.sp +You also can\(aqt put a heart (ATASCII character 0) in a string +literal. It will be treated as the end of the line, as though you +pressed Enter (and anything else on the line is ignored). This isn\(aqt +documented in the manual, either. +.sp +Like the | character, you can use CHR$(0) to store a heart in a string +and it will work correctly. +.SS Line Number Range +.sp +AMSB doesn\(aqt allow entering line numbers above 63999, but if a file +is e.g. hex\-edited to have a line number that\(aqs out of range, it will +LIST and RUN just fine... except that it\(aqs impossible to GOTO or GOSUB +to an out\-of\-range line. It will still execute if program flow falls +into it. +.SS Differences Between Versions +.sp +The language is the same in AMSB versions 1 and 2. Tokenized files +made by one version will LOAD and RUN in the other version. +.sp +Version 1, the disk version, always has the full set of commands +avaiable. Version 2, the cart, only has the full set if the extension +disk is booted. The missing ones still get tokenized, but you get SN +ERROR at runtime if you try to execute them. This doesn\(aqt affect the +detokenizer at all. The missing commands: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +AUTO +DEF (string version only) +NOTE +RENUM +TRON +TROFF +DEL +USING +STRING$ (function) +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +RENUM only works in direct mode, not a program. Executing it +gives a FUNCTION CALL ERROR. +.sp +AUTO is (oddly) allowed in a program. Executing it exits the program +and puts you back in the editor, in auto\-numbering mode. +.sp +It would seem weird to have POINT available but not NOTE... except +that AMSB doesn\(aqt even \fIhave\fP POINT. Instead, the disk addresses +returned by NOTE are used with AT() in a PRINT statement. Not sure +if AT() works without the extensions loaded, but it won\(aqt be useful +anyway without NOTE. +.sp +One other difference between versions 1 and 2: version 2 will LOAD and +RUN the file D:AUTORUN.AMB at startup, if it exists. +.SS Colon Weirdness +.sp +AMSB allows comments to be started with the ! and \(aq characters (as +well as the traditional REM). For the ! and \(aq variety, if they +come at the end of a line after some code, you don\(aqt have to put a colon. +Example: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10 GRAPHICS 2+16 ! NO TEXT +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +However... in the tokenized format, there \fIis\fP a tokenized colon +just before the tokenized ! or \(aq character. LIST doesn\(aqt display it. +If you did put a colon: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10 CLOSE #1:! WE\(aqRE DONE +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +\&...then there will be \fItwo\fP colons in the tokenized file, and only +one will be LISTed. +.sp +The ELSE keyword works the same way. In this line: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10 IF A THEN PRINT ELSE STOP +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +\&...there is actually a : character just before the token for ELSE. +.sp +Even weirder: you can put as many colons in a row as you like, and +AMSB will treat it like single colon. This line of code is valid +and runs correctly: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10 PRINT "A"::::::PRINT "A" +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +These colons are displayed normally in LIST output. +.SS Memory Usage +.sp +On a 48K/64K Atari, FRE(0) for AMSB 1 with DOS booted (since you can\(aqt +use it without) but no device drivers is 21020. MEMLO is awfully high +($6a00). +.sp +For AMSB 2 with DOS booted, but without the extensions loaded, FRE(0) +is 24352. With extensions it\(aqs 20642 (even though the banner says 20644 +BYTES FREE). +.sp +AMSB 2 without DOS gives you 29980, but how are you gonna load or save +programs without DOS? Nobody wants to use cassette, especially not +people who could afford to buy the AMSB II cartridge. +.SS LOCKed Programs +.sp +If you save a program with SAVE "filename" LOCK, it gets saved in an +"encrypted" form. Loading a locked program disables the LISTing or +editing the program (you get LK ERROR if you try). +.sp +The "encryption" is no better than ROT13. To encrypt, subtract each +byte from 0x54 (in an 8\-bit register, using twos complement). To +decrypt, do the same. This is a reciprocal cipher, and you can think +of it as the binary equivalent of ROT13. +.sp +You can tell a LOCKed program because its first byte will be 1 instead +of 0. The next 2 bytes (the program length) unencrypted. The rest of +the file is encrypted with the lame scheme described above. +.sp +When AMSB has a LOCKed program loaded into memory, it\(aqs \fInot\fP stored +encrypted in RAM. It would be perfectly possible to write BASIC code +using direct mode to write the tokenized program out to disk. The +program starts at MEMLO and extends up to the first occurrence of +three $00 bytes. The hardest part of this would be generating the +header using only direct\-mode BASIC statements (but it could be done). +.sp +However... there\(aqs no need to do that. AMSB has a flag that tells it +whether or not the currently\-loaded program is LOCKed. You can just +clear the flag: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +POKE 168,0 +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +Now AMSB won\(aqt consider the program LOCKed, and you can SAVE a regular +copy of it (and LIST, edit, etc). +.SS Line Length Limit +.sp +In the editor, after a POKE 82,0 (to set the left margin to 0), you +can enter 120 characters (3 screen lines) on a logical line. If you +enter a program line that way \fIwithout\fP a space after the line number, +then LIST it, it will be 121 characters long, because AMSB will +display a space after the line number. +.sp +If you use a text editor (or write a program) to create an untokenized +BASIC program, you can have a line of code that\(aqs 125 characters +long. AMSB will accept it just fine, with LOAD. If a line is 126 +characters or longer, AMSB will silently ignore that line when +LOADing. +.sp +If you create a 125\-character line (with a text editor) consisting +only of a comment that begins with ! or \(aq, without a space after the +line number, LOAD it, then SAVE it, that line will be 129 bytes long +in tokenized form. AMSB will LOAD it with no problems. +.sp +If you hex\-edit a SAVEd file to create a longer line, AMSB will +accept that, too... up to 255 bytes. At 256 bytes, AMSB will lock +up after LOAD. +.SS Crunching +.sp +AMSB stores spaces in the tokenized program, just like other 8\-bit +MS BASICs do, but it requires you to put spaces between keywords and +variables (unlike e.g. Commodore 64 BASIC). This seems to be because +AMSB allows keywords inside of variable names: you can have a variable +called LIFE (which contains the keyword IF) in AMSB, but you can\(aqt in +C=64 BASIC (which gives a syntax error becase it sees "L IF E"). +.sp +This applies to numbers, too: POKE710,0 is a syntax error in +AMSB. This is because POKE710 is actually a valid variable name: try +POKE710=123 followed by PRINT POKE710. +.sp +However. The spaces aren\(aqt needed when the program is RUN. It would be +possible to remove all the spaces outside of strings or comments and +the program would still work fine. +.SH COPYRIGHT +.sp +WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. +.SH AUTHOR +.INDENT 0.0 +.IP B. 3 +Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. +.UNINDENT +.SH SEE ALSO +.sp +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\fP(7). +.sp +Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference +Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. +.\" Generated by docutils manpage writer. +. diff --git a/amsb.rst b/amsb.rst new file mode 100644 index 0000000..19557ee --- /dev/null +++ b/amsb.rst @@ -0,0 +1,13 @@ +==== +amsb +==== + +--------------------------- +Atari Microsoft BASIC Notes +--------------------------- + +.. include:: manhdr7.rst + +.. include:: amsb_content.rst + +.. include:: manftr.rst diff --git a/amsb40.rst b/amsb40.rst new file mode 100644 index 0000000..6998211 --- /dev/null +++ b/amsb40.rst @@ -0,0 +1,31 @@ +==== +amsb +==== + +-------------------- +Atari MS BASIC Notes +-------------------- + +.. include:: ver.rst +.. |date| date:: + +:Manual section: 7 +:Manual group: Urchlay +:Date: |date| +:Version: |version| + +.. include:: amsb_content.rst + +COPYRIGHT +========= + +WTFPL. See http://www.wtfpl.net/txt/copying for details. + +AUTHOR +====== + +B. Watson + +Email: urchlay@slackware.uk + +IRC: Urchlay on irc.libera.chat *##atari*. diff --git a/amsb40.txt b/amsb40.txt new file mode 100644 index 0000000..5c6f537 --- /dev/null +++ b/amsb40.txt @@ -0,0 +1,668 @@ +AMSB(7)         Urchlay        AMSB(7) + +NAME +       amsb - Atari MS BASIC Notes + +DESCRIPTION +       Atari Microsoft BASIC is actu- +       ally a pretty cool BASIC for +       the Atari 8-bit. I never got +       the chance to use it 'back in +       the day' because it was expen- +       sive, required a floppy drive +       and at least 32K of RAM (my +       poor 400 had a tape drive for +       the first few years), and then +       later on, there was Turbo BASIC +       XL, which was cooler than AMSB, +       and also freeware. + +       This file is a collection of +       notes I made to myself while +       developing listamsb. The infor- +       mation here might be useful +       (e.g. if you're trying to re- +       pair a damaged AMSB file) and +       hopefully is interesting. En- +       joy! + +       This file is part of the +       bw-atari8-utils source. You can +       get the latest version of the +       source from: + +       https://slackware.uk/~urchlay/repos/bw-atari8-tools + +       ...which you can either view +       with a web browser or use with +       the 'git clone' command. + +NOTES +   Tokenized file format +       File begins with a 3-byte +       header: + +          +-------+---------------+ +          |Offset | Purpose       | +          +-------+---------------+ +          |0      | 0 for a nor-  | +          |       | mal program,  | +          |       | 1 for LOCKed  | +          |       | (encrypted)   | +          +-------+---------------+ +          |1      | LSB, program  | +          |       | length, not   | +          |       | counting the  | +          |       | 3-byte header | +          +-------+---------------+ +          |2      | MSB, program  | +          |       | length        | +          +-------+---------------+ + +       The program length should al- +       ways be the actual file size +       minus 3.  If it's not, the file +       has either been truncated or +       had junk added to the end. In a +       LOCKed program, the program +       length bytes are not encrypted. + +       After the header, the lines of +       code (encrypted, for LOCKed +       programs).  Each line has a +       4-byte header: + +             +--+--------------+ +             |0 | LSB, address | +             |  | of the last  | +             |  | byte of this | +             |  | line...      | +             +--+--------------+ +             |1 | MSB, address | +             |  | ...which is  | +             |  | ignored on   | +             |  | LOAD!        | +             +--+--------------+ +             |2 | LSB, line    | +             |  | number       | +             +--+--------------+ +             |3 | MSB, line    | +             |  | number       | +             +--+--------------+ + +       The rest of the line is the to- +       kens, terminated by a $00 byte. +       The next 2 bytes after the $00 +       is the last-byte offset of the +       next line. + +       The last "line" of the program +       has a $0000 offset, which indi- +       cates the end of the program. +       Since the actual last line ends +       with a $00, that means there +       will be three $00 bytes in a +       row as the last 3 bytes of the +       file. And that's the only place +       3 $00's in a row will occur. + +       Tokenization is "lightweight": +       there are no tokenized numer- +       ics, they're just stored as +       ASCII characters, as typed. +       There's no "string constant +       follows" token like there is in +       Atari BASIC (well, there is, +       it's just a double-quote, $22. +       There's no length byte). Vari- +       able names are not tokenized, +       either, they're just stored +       as-is (name in ASCII, including +       trailing $ for strings, etc). +       Numeric constants are just +       stored as ASCII digits, just as +       you typed them. + +       In fact the only things that +       are tokenized are BASIC key- +       words: commands and func- +       tions... NOT including user +       functions defined with DEF +       (those are stored as just the +       ASCII function name, like vari- +       ables). + +       There are 2 sets of tokens. One +       set is single-byte, $80 and up. +       These are commands. The other +       set is functions, which are 2 +       bytes: $FF followed by the to- +       ken number. See amsbtok.h in +       the source for the actual to- +       kens. + +       AMSB saves the end-of-line +       pointers, but it totally ig- +       nores them on LOAD. The SAVEd +       file format does not have a +       load address (as e.g.  Com- +       modore BASIC does), so there's +       no way to know the address of +       the start of the program (other +       than counting backwards from +       the next line, since its ad- +       dress is known). It's not just +       a constant either: it depends +       on what MEMLO was set to when +       the program was saved (which +       varies depending on what ver- +       sion of AMSB you have, what DOS +       you boot, whether or not you +       have the R: device driver +       loaded, etc etc). + +   Redundant Tokens +       There are two separate tokens +       each for PRINT and AT: + +                +----+-------+ +                |$ab | PRINT | +                +----+-------+ +                |$ac | PRINT | +                +----+-------+ +                |$df | AT(   | +                +----+-------+ +                |$e0 | AT    | +                +----+-------+ + +       When tokenizing a line, AMSB +       will actually use the $ab token +       if there's a space after PRINT +       (or ?), otherwise it will use +       the $ac token. These lines ac- +       tually get tokenized differ- +       ently: + +          10 PRINT "HELLO" +          10 PRINT"HELLO" + +       Same applies to the $df and $e0 +       AT tokens: if the user entered +       "AT(X,Y)", $df is used. Other- +       wise, with "AT (X,Y)", $e0 is +       used (followed by an ASCII left +       parenthesis). + +       3 tokens include the opening +       parenthesis: + +                +----+------+ +                |$d2 | TAB( | +                +----+------+ +                |$d6 | SPC( | +                +----+------+ +                |$df | AT(  | +                +----+------+ + +       Normally in AMSB, it's OK to +       leave a space between a func- +       tion name and the left-paren. +       PEEK (123) and SIN (1) are both +       valid. However, for SPC and +       TAB, no space is allowed, be- +       cause the ( is part of the to- +       ken. AT would be the same way, +       except there's a separate token +       $e0 that includes the space. +       Weird, huh? A side effect of +       this is that "SPC (10)" or "TAB +       (10)" won't be treated as a +       function call.  Instead, the +       SPC or TAB is treated as a +       variable name. If you write: + +          PRINT TAB (10);"HELLO" + +       ...it'll print " 0 HELLO" at +       the start of the line[*], in- +       stead of "HELLO" in the 10th +       column as you might have ex- +       pected. It also means that AT, +       TAB, and SPC are valid variable +       names in AMSB, which is an ex- +       ception to the rule that key- +       words can't be used as variable +       names (e.g. SIN=1 or +       STRING$="HELLO" are invalid). + +       [*] Unless you've assigned an- +       other value to TAB, of couse. + +   Unused Tokens +       If you look at the token list +       in amsbtok.h (or in a hex dump +       of the AMSB executable or car- +       tridge image), you'll see a lot +       of double-quotes mixed in with +       the list. AMSB doesn't actually +       tokenize the " character (it's +       stored as $22, its ASCII +       value), so these seem to be +       placeholders, either because +       some tokens were deleted from +       the language during its devel- +       opment, or else they're in- +       tended for some future version +       of AMSB that never happened. + +       The weird quote tokens are $99, +       $c8 to $d0, $d5, and $e7 to +       $ed. If you hexedit a program +       to replace a regular dou- +       ble-quote with one of these to- +       kens, it will list as either "" +       or just one ", but it will +       cause a syntax error at run- +       time. + +   LOADing Untokenized Files +       If the first byte of the file +       is anything other than $00 or +       $01, AMSB's LOAD command reads +       it in as a text file (LISTed +       rather than SAVEd). + +       When LOAD is reading a text +       file, if the last byte of the +       file isn't an ATASCII EOL +       ($9b), you'll get #136 ERROR. +       The program doesn't get +       deleted, but the last line of +       the file didn't get loaded. +       This could happen if a LISTed +       file somehow got truncated. + +       While on the subject... the +       manual doesn't mention it, but +       if you LOAD a text file without +       line numbers, the code gets ex- +       ecuted in direct mode during +       the load (like Atari BASIC's +       ENTER command does). This means +       you could write scripts (batch +       files) for AMSB... though you'd +       be better off using MERGE, +       rather than LOAD (MERGE is ba- +       sically the same thing as Atari +       BASIC's ENTER). + +   Program Length Header Mismatch +       When AMSB's LOAD command exe- +       cutes, it reads the 3-byte +       header, then reads as many +       bytes as the header's program +       length says. + +       If the header length is longer +       than the rest of the file, you +       get a #136 ERROR (aka Atari's +       EOF), and the partially loaded +       program is erased (basically it +       does a NEW). + +       If the length is shorter than +       the program, it'll stop loading +       no matter how much more data is +       in the file. This means it can +       stop in the middle of a line. +       It also means, if there was al- +       ready a program in memory that +       was longer than the program +       length, you get a "hybrid" mix +       of the new program followed by +       the remainder of the old one. +       This is because the three $00 +       bytes at the end of the program +       weren't read in. + +       If the program length is cor- +       rect for the actual program (so +       the three $00 bytes get read), +       but there's extra data appended +       to the file, AMSB will never +       read the extra data at all. + +   String Limitations +       String literals in AMSB cannot +       contain the | or ATASCII heart +       characters. + +       AMSB uses | as a terminator for +       quoted strings, e.g. "STRING" +       will be tokenized as: "STRING| + +       If you try to use a | in a +       quoted string, it gets turned +       into a double quote: "FOO|BAR" +       comes out as "FOO"BAR which is +       a syntax error! + +       String variables can store | +       but only with e.g. CHR$(124) or +       reading from a file: it's +       string literals that don't al- +       low it. + +       The reason | is used for a ter- +       minating quote is to allow dou- +       bling up the quotes to embed +       them in a string: + +          A$ = "HAS ""QUOTES""" + +       PRINT A$ will print: HAS +       "QUOTES" + +       At first I thought "no pipe +       characters in strings, WTF +       man?" but it's probably no +       worse than Atari BASIC's "no +       quotes in strings constants" +       rule. It would be nice if the +       AMSB manual actually documented +       the fact that | can't occur in +       a string constant. Not docu- +       menting it makes it a bug... +       and they have unused tokens in +       the $Fx range, I don't see why +       they had to use a printing +       character for this. + +       You also can't put a heart +       (ATASCII character 0) in a +       string literal. It will be +       treated as the end of the line, +       as though you pressed Enter +       (and anything else on the line +       is ignored). This isn't docu- +       mented in the manual, either. + +       Like the | character, you can +       use CHR$(0) to store a heart in +       a string and it will work cor- +       rectly. + +   Line Number Range +       AMSB doesn't allow entering +       line numbers above 63999, but +       if a file is e.g. hex-edited to +       have a line number that's out +       of range, it will LIST and RUN +       just fine... except that it's +       impossible to GOTO or GOSUB to +       an out-of-range line. It will +       still execute if program flow +       falls into it. + +   Differences Between Versions +       The language is the same in +       AMSB versions 1 and 2. Tok- +       enized files made by one ver- +       sion will LOAD and RUN in the +       other version. + +       Version 1, the disk version, +       always has the full set of com- +       mands avaiable. Version 2, the +       cart, only has the full set if +       the extension disk is booted. +       The missing ones still get tok- +       enized, but you get SN ERROR at +       runtime if you try to execute +       them. This doesn't affect the +       detokenizer at all. The missing +       commands: + +          AUTO +          DEF (string version only) +          NOTE +          RENUM +          TRON +          TROFF +          DEL +          USING +          STRING$ (function) + +       RENUM only works in direct +       mode, not a program. Executing +       it gives a FUNCTION CALL ERROR. + +       AUTO is (oddly) allowed in a +       program. Executing it exits the +       program and puts you back in +       the editor, in auto-numbering +       mode. + +       It would seem weird to have +       POINT available but not NOTE... +       except that AMSB doesn't even +       have POINT. Instead, the disk +       addresses returned by NOTE are +       used with AT() in a PRINT +       statement. Not sure if AT() +       works without the extensions +       loaded, but it won't be useful +       anyway without NOTE. + +       One other difference between +       versions 1 and 2: version 2 +       will LOAD and RUN the file +       D:AUTORUN.AMB at startup, if it +       exists. + +   Colon Weirdness +       AMSB allows comments to be +       started with the ! and ' char- +       acters (as well as the tradi- +       tional REM). For the ! and ' +       variety, if they come at the +       end of a line after some code, +       you don't have to put a colon. +       Example: + +          10 GRAPHICS 2+16 ! NO TEXT + +       However... in the tokenized +       format, there is a tokenized +       colon just before the tokenized +       ! or ' character. LIST doesn't +       display it.  If you did put a +       colon: + +          10 CLOSE #1:! WE'RE DONE + +       ...then there will be two +       colons in the tokenized file, +       and only one will be LISTed. + +       The ELSE keyword works the same +       way. In this line: + +          10 IF A THEN PRINT ELSE STOP + +       ...there is actually a : char- +       acter just before the token for +       ELSE. + +       Even weirder: you can put as +       many colons in a row as you +       like, and AMSB will treat it +       like single colon. This line of +       code is valid and runs cor- +       rectly: + +          10 PRINT "A"::::::PRINT "A" + +       These colons are displayed nor- +       mally in LIST output. + +   Memory Usage +       On a 48K/64K Atari, FRE(0) for +       AMSB 1 with DOS booted (since +       you can't use it without) but +       no device drivers is 21020. +       MEMLO is awfully high ($6a00). + +       For AMSB 2 with DOS booted, but +       without the extensions loaded, +       FRE(0) is 24352. With exten- +       sions it's 20642 (even though +       the banner says 20644 BYTES +       FREE). + +       AMSB 2 without DOS gives you +       29980, but how are you gonna +       load or save programs without +       DOS? Nobody wants to use cas- +       sette, especially not people +       who could afford to buy the +       AMSB II cartridge. + +   LOCKed Programs +       If you save a program with SAVE +       "filename" LOCK, it gets saved +       in an "encrypted" form. Loading +       a locked program disables the +       LISTing or editing the program +       (you get LK ERROR if you try). + +       The "encryption" is no better +       than ROT13. To encrypt, sub- +       tract each byte from 0x54 (in +       an 8-bit register, using twos +       complement). To decrypt, do the +       same. This is a reciprocal ci- +       pher, and you can think of it +       as the binary equivalent of +       ROT13. + +       You can tell a LOCKed program +       because its first byte will be +       1 instead of 0. The next 2 +       bytes (the program length) un- +       encrypted. The rest of the file +       is encrypted with the lame +       scheme described above. + +       When AMSB has a LOCKed program +       loaded into memory, it's not +       stored encrypted in RAM. It +       would be perfectly possible to +       write BASIC code using direct +       mode to write the tokenized +       program out to disk. The pro- +       gram starts at MEMLO and ex- +       tends up to the first occur- +       rence of three $00 bytes. The +       hardest part of this would be +       generating the header using +       only direct-mode BASIC state- +       ments (but it could be done). + +       However... there's no need to +       do that. AMSB has a flag that +       tells it whether or not the +       currently-loaded program is +       LOCKed. You can just clear the +       flag: + +          POKE 168,0 + +       Now AMSB won't consider the +       program LOCKed, and you can +       SAVE a regular copy of it (and +       LIST, edit, etc). + +   Line Length Limit +       In the editor, after a POKE +       82,0 (to set the left margin to +       0), you can enter 120 charac- +       ters (3 screen lines) on a log- +       ical line. If you enter a pro- +       gram line that way without a +       space after the line number, +       then LIST it, it will be 121 +       characters long, because AMSB +       will display a space after the +       line number. + +       If you use a text editor (or +       write a program) to create an +       untokenized BASIC program, you +       can have a line of code that's +       125 characters long. AMSB will +       accept it just fine, with LOAD. +       If a line is 126 characters or +       longer, AMSB will silently ig- +       nore that line when LOADing. + +       If you create a 125-character +       line (with a text editor) con- +       sisting only of a comment that +       begins with ! or ', without a +       space after the line number, +       LOAD it, then SAVE it, that +       line will be 129 bytes long in +       tokenized form. AMSB will LOAD +       it with no problems. + +       If you hex-edit a SAVEd file to +       create a longer line, AMSB will +       accept that, too... up to 255 +       bytes. At 256 bytes, AMSB will +       lock up after LOAD. + +   Crunching +       AMSB stores spaces in the tok- +       enized program, just like other +       8-bit MS BASICs do, but it re- +       quires you to put spaces be- +       tween keywords and variables +       (unlike e.g. Commodore 64 BA- +       SIC). This seems to be because +       AMSB allows keywords inside of +       variable names: you can have a +       variable called LIFE (which +       contains the keyword IF) in +       AMSB, but you can't in C=64 BA- +       SIC (which gives a syntax error +       becase it sees "L IF E"). + +       This applies to numbers, too: +       POKE710,0 is a syntax error in +       AMSB. This is because POKE710 +       is actually a valid variable +       name: try POKE710=123 followed +       by PRINT POKE710. + +       However. The spaces aren't +       needed when the program is RUN. +       It would be possible to remove +       all the spaces outside of +       strings or comments and the +       program would still work fine. + +COPYRIGHT +       WTFPL. See +       http://www.wtfpl.net/txt/copying +       for details. + +AUTHOR +       B. Watson + +       Email: urchlay@slackware.uk + +       IRC: Urchlay on irc.libera.chat +       ##atari. + +0.2.2         2025-03-13       AMSB(7) diff --git a/amsb_content.rst b/amsb_content.rst new file mode 100644 index 0000000..51cbb25 --- /dev/null +++ b/amsb_content.rst @@ -0,0 +1,406 @@ +DESCRIPTION +=========== + +Atari Microsoft BASIC is actually a pretty cool BASIC for the Atari 8-bit. I never +got the chance to use it 'back in the day' because it was expensive, +required a floppy drive and at least 32K of RAM (my poor 400 had a +tape drive for the first few years), and then later on, there was +Turbo BASIC XL, which was cooler than AMSB, and also freeware. + +This file is a collection of notes I made to myself while developing +listamsb. The information here might be useful (e.g. if you're trying +to repair a damaged AMSB file) and hopefully is interesting. Enjoy! + +This file is part of the bw-atari8-utils source. You can get the +latest version of the source from: + +https://slackware.uk/~urchlay/repos/bw-atari8-tools + +...which you can either view with a web browser or use with the 'git +clone' command. + +NOTES +===== + +Tokenized file format +--------------------- + +File begins with a 3-byte header: + +.. csv-table:: + +  "Offset", "Purpose" +  "0", "0 for a normal program, 1 for LOCKed (encrypted)" +  "1", "LSB, program length, not counting the 3-byte header" +  "2", "MSB, program length" + +The program length should always be the actual file size minus 3.  If +it's not, the file has either been truncated or had junk added to the +end. In a LOCKed program, the program length bytes are not encrypted. + +After the header, the lines of code (encrypted, for LOCKed programs). +Each line has a 4-byte header: + +.. csv-table:: + +  "0", "LSB, address of the last byte of this line..." +  "1", "MSB, address  ...which is ignored on LOAD!" +  "2", "LSB, line number" +  "3", "MSB, line number" + +The rest of the line is the tokens, terminated by a $00 byte. The +next 2 bytes after the $00 is the last-byte offset of the next line. + +The last "line" of the program has a $0000 offset, which indicates the +end of the program. Since the actual last line ends with a $00, that +means there will be three $00 bytes in a row as the last 3 bytes of +the file. And that's the *only* place 3 $00's in a row will occur. + +Tokenization is "lightweight": there are no tokenized numerics, +they're just stored as ASCII characters, as typed. There's no "string +constant follows" token like there is in Atari BASIC (well, there is, +it's just a double-quote, $22. There's no length byte). Variable names +are not tokenized, either, they're just stored as-is (name in ASCII, +including trailing $ for strings, etc). Numeric constants are just +stored as ASCII digits, just as you typed them. + +In fact the only things that are tokenized are BASIC keywords: +commands and functions... NOT including user functions defined +with DEF (those are stored as just the ASCII function name, like +variables). + +There are 2 sets of tokens. One set is single-byte, $80 and up. +These are commands. The other set is functions, which are 2 bytes: +$FF followed by the token number. See amsbtok.h in the source for the +actual tokens. + +AMSB saves the end-of-line pointers, but it totally ignores them +on LOAD. The SAVEd file format does *not* have a load address (as e.g. +Commodore BASIC does), so there's no way to know the address of the +start of the program (other than counting backwards from the next line, +since its address is known). It's not just a constant either: it +depends on what MEMLO was set to when the program was saved (which varies +depending on what version of AMSB you have, what DOS you boot, whether +or not you have the R: device driver loaded, etc etc). + + +Redundant Tokens +---------------- + +There are two separate tokens each for PRINT and AT: + +.. csv-table:: + +  "$ab", "PRINT " +  "$ac", "PRINT" +  "$df", "AT(" +  "$e0", "AT " + +When tokenizing a line, AMSB will actually use the $ab token if +there's a space after PRINT (or ?), otherwise it will use the +$ac token. These lines actually get tokenized differently:: + +  10 PRINT "HELLO" +  10 PRINT"HELLO" + +Same applies to the $df and $e0 AT tokens: if the user entered +"AT(X,Y)", $df is used. Otherwise, with "AT (X,Y)", $e0 is used +(followed by an ASCII left parenthesis). + +3 tokens include the opening parenthesis: + +.. csv-table:: + +  "$d2", "TAB(" +  "$d6", "SPC(" +  "$df", "AT(" + +Normally in AMSB, it's OK to leave a space between a function name +and the left-paren. PEEK (123) and SIN (1) are both valid. However, +for SPC and TAB, no space is allowed, because the ( is part of the +token. AT would be the same way, except there's a separate token $e0 +that *includes* the space. Weird, huh? A side effect of this is +that "SPC (10)" or "TAB (10)" won't be treated as a function call. +Instead, the SPC or TAB is treated as a variable name. If you write:: + +  PRINT TAB (10);"HELLO" + +...it'll print " 0 HELLO" at the start of the line[*], instead of "HELLO" +in the 10th column as you might have expected. It also means that AT, +TAB, and SPC are valid variable names in AMSB, which is an exception +to the rule that keywords can't be used as variable names (e.g. SIN=1 +or STRING$="HELLO" are invalid). + +[*] Unless you've assigned another value to TAB, of couse. + + +Unused Tokens +------------- + +If you look at the token list in amsbtok.h (or in a hex dump +of the AMSB executable or cartridge image), you'll see a lot of +double-quotes mixed in with the list. AMSB doesn't actually tokenize +the " character (it's stored as $22, its ASCII value), so these seem +to be placeholders, either because some tokens were deleted from the +language during its development, or else they're intended for some +future version of AMSB that never happened. + +The weird quote tokens are $99, $c8 to $d0, $d5, and $e7 to $ed. If +you hexedit a program to replace a regular double-quote with one of +these tokens, it will list as either "" or just one ", but it will +cause a syntax error at runtime. + + +LOADing Untokenized Files +------------------------- + +If the first byte of the file is anything other than $00 or $01, +AMSB's LOAD command reads it in as a text file (LISTed rather than +SAVEd). + +When LOAD is reading a text file, if the last byte of the file isn't +an ATASCII EOL ($9b), you'll get #136 ERROR. The program doesn't get +deleted, but the last line of the file didn't get loaded. This could +happen if a LISTed file somehow got truncated. + +While on the subject... the manual doesn't mention it, but if you LOAD +a text file without line numbers, the code gets executed in direct +mode during the load (like Atari BASIC's ENTER command does). This +means you could write scripts (batch files) for AMSB... though you'd +be better off using MERGE, rather than LOAD (MERGE is basically the +same thing as Atari BASIC's ENTER). + + +Program Length Header Mismatch +------------------------------ + +When AMSB's LOAD command executes, it reads the 3-byte header, then +reads as many bytes as the header's program length says. + +If the header length is longer than the rest of the file, you get +a #136 ERROR (aka Atari's EOF), and the partially loaded program is +erased (basically it does a NEW). + +If the length is shorter than the program, it'll stop loading no +matter how much more data is in the file. This means it can stop in +the middle of a line. It also means, if there was already a program in +memory that was longer than the program length, you get a "hybrid" mix +of the new program followed by the remainder of the old one. This is +because the three $00 bytes at the end of the program weren't read in. + +If the program length is correct for the actual program (so the three +$00 bytes get read), but there's extra data appended to the file, AMSB +will never read the extra data at all. + + +String Limitations +------------------ + +String literals in AMSB cannot contain the | or ATASCII heart +characters. + +AMSB uses | as a terminator for quoted strings, e.g. "STRING" will +be tokenized as: "STRING| + +If you try to use a | in a quoted string, it gets turned into a double +quote: "FOO|BAR" comes out as "FOO"BAR which is a syntax error! + +String variables can store | but only with e.g. CHR$(124) or reading +from a file: it's string *literals* that don't allow it. + +The reason | is used for a terminating quote is to allow doubling up +the quotes to embed them in a string:: + +  A$ = "HAS ""QUOTES""" + +PRINT A$ will print: HAS "QUOTES" + +At first I thought "no pipe characters in strings, WTF man?" but it's +probably no worse than Atari BASIC's "no quotes in strings constants" +rule. It *would* be nice if the AMSB manual actually documented the +fact that | can't occur in a string constant. Not documenting it makes +it a bug... and they have unused tokens in the $Fx range, I don't see +why they had to use a printing character for this. + +You also can't put a heart (ATASCII character 0) in a string +literal. It will be treated as the end of the line, as though you +pressed Enter (and anything else on the line is ignored). This isn't +documented in the manual, either. + +Like the | character, you can use CHR$(0) to store a heart in a string +and it will work correctly. + + +Line Number Range +----------------- + +AMSB doesn't allow entering line numbers above 63999, but if a file +is e.g. hex-edited to have a line number that's out of range, it will +LIST and RUN just fine... except that it's impossible to GOTO or GOSUB +to an out-of-range line. It will still execute if program flow falls +into it. + + +Differences Between Versions +---------------------------- + +The language is the same in AMSB versions 1 and 2. Tokenized files +made by one version will LOAD and RUN in the other version. + +Version 1, the disk version, always has the full set of commands +avaiable. Version 2, the cart, only has the full set if the extension +disk is booted. The missing ones still get tokenized, but you get SN +ERROR at runtime if you try to execute them. This doesn't affect the +detokenizer at all. The missing commands:: + +  AUTO +  DEF (string version only) +  NOTE +  RENUM +  TRON +  TROFF +  DEL +  USING +  STRING$ (function) + +RENUM only works in direct mode, not a program. Executing it +gives a FUNCTION CALL ERROR. + +AUTO is (oddly) allowed in a program. Executing it exits the program +and puts you back in the editor, in auto-numbering mode. + +It would seem weird to have POINT available but not NOTE... except +that AMSB doesn't even *have* POINT. Instead, the disk addresses +returned by NOTE are used with AT() in a PRINT statement. Not sure +if AT() works without the extensions loaded, but it won't be useful +anyway without NOTE. + +One other difference between versions 1 and 2: version 2 will LOAD and +RUN the file D:AUTORUN.AMB at startup, if it exists. + + +Colon Weirdness +--------------- + +AMSB allows comments to be started with the ! and ' characters (as +well as the traditional REM). For the ! and ' variety, if they +come at the end of a line after some code, you don't have to put a colon. +Example:: + +  10 GRAPHICS 2+16 ! NO TEXT + +However... in the tokenized format, there *is* a tokenized colon +just before the tokenized ! or ' character. LIST doesn't display it. +If you did put a colon:: + +  10 CLOSE #1:! WE'RE DONE + +...then there will be *two* colons in the tokenized file, and only +one will be LISTed. + +The ELSE keyword works the same way. In this line:: + +  10 IF A THEN PRINT ELSE STOP + +...there is actually a : character just before the token for ELSE. + +Even weirder: you can put as many colons in a row as you like, and +AMSB will treat it like single colon. This line of code is valid +and runs correctly:: + +  10 PRINT "A"::::::PRINT "A" + +These colons are displayed normally in LIST output. + + +Memory Usage +------------ + +On a 48K/64K Atari, FRE(0) for AMSB 1 with DOS booted (since you can't +use it without) but no device drivers is 21020. MEMLO is awfully high +($6a00). + +For AMSB 2 with DOS booted, but without the extensions loaded, FRE(0) +is 24352. With extensions it's 20642 (even though the banner says 20644 +BYTES FREE). + +AMSB 2 without DOS gives you 29980, but how are you gonna load or save +programs without DOS? Nobody wants to use cassette, especially not +people who could afford to buy the AMSB II cartridge. + + +LOCKed Programs +--------------- + +If you save a program with SAVE "filename" LOCK, it gets saved in an +"encrypted" form. Loading a locked program disables the LISTing or +editing the program (you get LK ERROR if you try). + +The "encryption" is no better than ROT13. To encrypt, subtract each +byte from 0x54 (in an 8-bit register, using twos complement). To +decrypt, do the same. This is a reciprocal cipher, and you can think +of it as the binary equivalent of ROT13. + +You can tell a LOCKed program because its first byte will be 1 instead +of 0. The next 2 bytes (the program length) unencrypted. The rest of +the file is encrypted with the lame scheme described above. + +When AMSB has a LOCKed program loaded into memory, it's *not* stored +encrypted in RAM. It would be perfectly possible to write BASIC code +using direct mode to write the tokenized program out to disk. The +program starts at MEMLO and extends up to the first occurrence of +three $00 bytes. The hardest part of this would be generating the +header using only direct-mode BASIC statements (but it could be done). + +However... there's no need to do that. AMSB has a flag that tells it +whether or not the currently-loaded program is LOCKed. You can just +clear the flag:: + +  POKE 168,0 + +Now AMSB won't consider the program LOCKed, and you can SAVE a regular +copy of it (and LIST, edit, etc). + + +Line Length Limit +----------------- + +In the editor, after a POKE 82,0 (to set the left margin to 0), you +can enter 120 characters (3 screen lines) on a logical line. If you +enter a program line that way *without* a space after the line number, +then LIST it, it will be 121 characters long, because AMSB will +display a space after the line number. + +If you use a text editor (or write a program) to create an untokenized +BASIC program, you can have a line of code that's 125 characters +long. AMSB will accept it just fine, with LOAD. If a line is 126 +characters or longer, AMSB will silently ignore that line when +LOADing. + +If you create a 125-character line (with a text editor) consisting +only of a comment that begins with ! or ', without a space after the +line number, LOAD it, then SAVE it, that line will be 129 bytes long +in tokenized form. AMSB will LOAD it with no problems. + +If you hex-edit a SAVEd file to create a longer line, AMSB will +accept that, too... up to 255 bytes. At 256 bytes, AMSB will lock +up after LOAD. + + +Crunching +--------- + +AMSB stores spaces in the tokenized program, just like other 8-bit +MS BASICs do, but it requires you to put spaces between keywords and +variables (unlike e.g. Commodore 64 BASIC). This seems to be because +AMSB allows keywords inside of variable names: you can have a variable +called LIFE (which contains the keyword IF) in AMSB, but you can't in +C=64 BASIC (which gives a syntax error becase it sees "L IF E"). + +This applies to numbers, too: POKE710,0 is a syntax error in +AMSB. This is because POKE710 is actually a valid variable name: try +POKE710=123 followed by PRINT POKE710. + +However. The spaces aren't needed when the program is RUN. It would be +possible to remove all the spaces outside of strings or comments and +the program would still work fine. diff --git a/amsbtok.h b/amsbtok.h new file mode 100644 index 0000000..fe83906 --- /dev/null +++ b/amsbtok.h @@ -0,0 +1,161 @@ +const char *std_tokens[] = { +	"END", /* 80 */ +	"FOR", /* 81 */ +	"NEXT", /* 82 */ +	"READ", /* 83 */ +	"DATA", /* 84 */ +	"RESTORE", /* 85 */ +	"LINE", /* 86 */ +	"INPUT", /* 87 */ +	"DEFSTR", /* 88 */ +	"DEFINT", /* 89 */ +	"DEFDBL", /* 8a */ +	"DEFSNG", /* 8b */ +	"OPTION", /* 8c */ +	"DIM", /* 8d */ +	"COMMON", /* 8e */ +	"DEF", /* 8f */ +	"LET", /* 90 */ +	"RANDOMIZE", /* 91 */ +	"GOTO", /* 92 */ +	"GOSUB", /* 93 */ +	"RETURN", /* 94 */ +	"GO", /* 95 */ +	"RUN", /* 96 */ +	"IF", /* 97 */ +	"REM", /* 98 */ +	"\"", /* 99 */ +	"'", /* 9a */ +	"!", /* 9b */ +	"ELSE", /* 9c */ +	"THEN", /* 9d */ +	"STOP", /* 9e */ +	"CONT", /* 9f */ +	"RESUME", /* a0 */ +	"ERROR", /* a1 */ +	"ON", /* a2 */ +	"AFTER", /* a3 */ +	"POKE", /* a4 */ +	"WAIT", /* a5 */ +	"MOVE", /* a6 */ +	"LOAD", /* a7 */ +	"SAVE", /* a8 */ +	"VERIFY", /* a9 */ +	"MERGE", /* aa */ +	"PRINT ", /* ab */ +	"PRINT", /* ac */ +	"LIST", /* ad */ +	"AUTO", /* ae */ +	"DEL", /* af */ +	"TRON", /* b0 */ +	"TROFF", /* b1 */ +	"RENUM", /* b2 */ +	"OPEN", /* b3 */ +	"CLOSE", /* b4 */ +	"GET", /* b5 */ +	"PUT", /* b6 */ +	"NOTE", /* b7 */ +	"LOCK", /* b8 */ +	"UNLOCK", /* b9 */ +	"KILL", /* ba */ +	"NAME", /* bb */ +	"GRAPHICS", /* bc */ +	"COLOR", /* bd */ +	"PLOT", /* be */ +	"FILL", /* bf */ +	"SETCOLOR", /* c0 */ +	"SOUND", /* c1 */ +	"CLS", /* c2 */ +	"DOS", /* c3 */ +	"CLEAR", /* c4 */ +	"NEW", /* c5 */ +	"CLOAD", /* c6 */ +	"CSAVE", /* c7 */ +	"\"", /* c8 */ +	"\"", /* c9 */ +	"\"", /* ca */ +	"\"", /* cb */ +	"\"", /* cc */ +	"\"", /* cd */ +	"\"", /* ce */ +	"\"", /* cf */ +	"\"", /* d0 */ +	"BASE", /* d1 */ +	"TAB(", /* d2 */ +	"TO", /* d3 */ +	"SUB", /* d4 */ +	"\"", /* d5 */ +	"SPC(", /* d6 */ +	"NOT", /* d7 */ +	"STEP", /* d8 */ +	"ALL", /* d9 */ +	"USING", /* da */ +	"RESERVE", /* db */ +	"UPDATE", /* dc */ +	"OUTPUT", /* dd */ +	"APPEND", /* de */ +	"AT(", /* df */ +	"AT ", /* e0 */ +	"PLM0", /* e1 */ +	"PLM2", /* e2 */ +	"PLM1", /* e3 */ +	"CHR0", /* e4 */ +	"CHR1", /* e5 */ +	"CHR2", /* e6 */ +	"\"", /* e7 */ +	"\"", /* e8 */ +	"\"", /* e9 */ +	"\"", /* ea */ +	"\"", /* eb */ +	"\"", /* ec */ +	"\"", /* ed */ +	"+", /* ee */ +	"-", /* ef */ +	"*", /* f0 */ +	"/", /* f1 */ +	"^", /* f2 */ +	"AND", /* f3 */ +	"OR", /* f4 */ +	"XOR", /* f5 */ +	">", /* f6 */ +	"=", /* f7 */ +	"<", /* f8 */ +}; + +const char *ext_tokens[] = { +	"SGN", /* ffa3 */ +	"INT", /* ffa4 */ +	"ABS", /* ffa5 */ +	"FRE", /* ffa6 */ +	"POS", /* ffa7 */ +	"SQR", /* ffa8 */ +	"LOG", /* ffa9 */ +	"EXP", /* ffaa */ +	"COS", /* ffab */ +	"SIN", /* ffac */ +	"TAN", /* ffad */ +	"ATN", /* ffae */ +	"PEEK", /* ffaf */ +	"LEN", /* ffb0 */ +	"STR$", /* ffb1 */ +	"VAL", /* ffb2 */ +	"ASC", /* ffb3 */ +	"CHR$", /* ffb4 */ +	"STATUS", /* ffb5 */ +	"EOF", /* ffb6 */ +	"LEFT$", /* ffb7 */ +	"RIGHT$", /* ffb8 */ +	"MID$", /* ffb9 */ +	"INSTR", /* ffba */ +	"STRING$", /* ffbb */ +	"VARPTR", /* ffbc */ +	"USR", /* ffbd */ +	"SCRN$", /* ffbe */ +	"RND", /* ffbf */ +	"TIME$", /* ffc0 */ +	"TIME", /* ffc1 */ +	"INKEY$", /* ffc2 */ +	"ERR", /* ffc3 */ +	"ERL", /* ffc4 */ +	"STACK", /* ffc5 */ +}; diff --git a/aplus_tokens.c b/aplus_tokens.c new file mode 100644 index 0000000..d685189 --- /dev/null +++ b/aplus_tokens.c @@ -0,0 +1,179 @@ +/* these have to be full sets of tokens, because A+'s tokens don't +   match Atari BASIC's */ + +const char *aplus_cmds[] = { +	"REM",        /* $00 */ +	"DATA",       /* $01 */ +	"INPUT",      /* $02 */ +	"LIST",       /* $03 */ +	"ENTER",      /* $04 */ +	"LET",        /* $05 */ +	"IF",         /* $06 */ +	"FOR",        /* $07 */ +	"NEXT",       /* $08 */ +	"GOTO",       /* $09 */ +	"RENUM",      /* $0a */ +	"GOSUB",      /* $0b */ +	"TRAP",       /* $0c */ +	"BYE",        /* $0d */ +	"CONT",       /* $0e */ +	"CLOSE",      /* $0f */ +	"CLR",        /* $10 */ +	"DEG",        /* $11 */ +	"DIM",        /* $12 */ +	"WHILE",      /* $13 */ +	"ENDWHILE",   /* $14 */ +	"TRACEOFF",   /* $15 */ +	"TRACE",      /* $16 */ +	"ELSE",       /* $17 */ +	"ENDIF",      /* $18 */ +	"END",        /* $19 */ +	"NEW",        /* $1a */ +	"OPEN",       /* $1b */ +	"LOAD",       /* $1c */ +	"SAVE",       /* $1d */ +	"STATUS",     /* $1e */ +	"NOTE",       /* $1f */ +	"POINT",      /* $20 */ +	"XIO",        /* $21 */ +	"ON",         /* $22 */ +	"POKE",       /* $23 */ +	"DPOKE",      /* $24 */ +	"PRINT",      /* $25 */ +	"RAD",        /* $26 */ +	"READ",       /* $27 */ +	"RESTORE",    /* $28 */ +	"RETURN",     /* $29 */ +	"RUN",        /* $2a */ +	"STOP",       /* $2b */ +	"POP",        /* $2c */ +	"?",          /* $2d */ +	"GET",        /* $2e */ +	"PUT",        /* $2f */ +	"LOMEM",      /* $30 */ +	"DEL",        /* $31 */ +	"RPUT",       /* $32 */ +	"RGET",       /* $33 */ +	"BPUT",       /* $34 */ +	"BGET",       /* $35 */ +	"TAB",        /* $36 */ +	"CP",         /* $37 */ +	"DOS",        /* $38 */ +	"ERASE",      /* $39 */ +	"PROTECT",    /* $3a */ +	"UNPROTECT",  /* $3b */ +	"DIR",        /* $3c */ +	"RENAME",     /* $3d */ +	"MOVE",       /* $3e */ +	"COLOR",      /* $3f */ +	"GRAPHICS",   /* $40 */ +	"PLOT",       /* $41 */ +	"POSITION",   /* $42 */ +	"DRAWTO",     /* $43 */ +	"SETCOLOR",   /* $44 */ +	"LOCATE",     /* $45 */ +	"SOUND",      /* $46 */ +	"LPRINT",     /* $47 */ +	"CSAVE",      /* $48 */ +	"CLOAD",      /* $49 */ +	"MISSILE",    /* $4a */ +	"PMCLR",      /* $4b */ +	"PMCOLOR",    /* $4c */ +	"PMGRAPHICS", /* $4d */ +	"PMMOVE",     /* $4e */ +	"PMWIDTH",    /* $4f */ +	"SET",        /* $50 */ +	"LVAR",       /* $51 */ +	"",           /* $52, silent LET */ +	"ERROR-  "    /* $53 */ +}; + +const int aplus_cmd_size = sizeof(aplus_cmds); + +const char *aplus_ops[] = { +	0, 0, 0, 0, 0, 0, 0, 0, +	0, 0, 0, 0, 0, 0, 0, 0, +	0, 0, +	",",       /* $12 */ +	"$",       /* $13 */ +	":",       /* $14 */ +	";",       /* $15 */ +	"",        /* $16 */ +	" GOTO ",  /* $17 */ +	" GOSUB ", /* $18 */ +	" TO ",    /* $19 */ +	" STEP ",  /* $1a */ +	" THEN ",  /* $1b */ +	" USING ", /* $1c */ +	"#",       /* $1d */ +	"<=",      /* $1e */ +	"<>",      /* $1f */ +	">=",      /* $20 */ +	"<",       /* $21 */ +	">",       /* $22 */ +	"=",       /* $23 */ +	"^",       /* $24 */ +	"*",       /* $25 */ +	"+",       /* $26 */ +	"-",       /* $27 */ +	"/",       /* $28 */ +	" NOT ",   /* $29 */ +	" OR ",    /* $2a */ +	" AND ",   /* $2b */ +	"!",       /* $2c */ +	"&",       /* $2d */ +	"(",       /* $2e */ +	")",       /* $2f */ +	"=",       /* $30 */ +	"=",       /* $31 */ +	"<=",      /* $32 */ +	"<>",      /* $33 */ +	">=",      /* $34 */ +	"<",       /* $35 */ +	">",       /* $36 */ +	"=",       /* $37 */ +	"+",       /* $38 */ +	"-",       /* $39 */ +	"(",       /* $3a */ +	"",        /* $3b */ +	"",        /* $3c */ +	"(",       /* $3d */ +	"(",       /* $3e */ +	",",       /* $3f */ +	"STR$",    /* $40 */ +	"CHR$",    /* $41 */ +	"USR",     /* $42 */ +	"ASC",     /* $43 */ +	"VAL",     /* $44 */ +	"LEN",     /* $45 */ +	"ADR",     /* $46 */ +	"BUMP",    /* $47 */ +	"FIND",    /* $48 */ +	"DPEEK",   /* $49 */ +	"ATN",     /* $4a */ +	"COS",     /* $4b */ +	"PEEK",    /* $4c */ +	"SIN",     /* $4d */ +	"RND",     /* $4e */ +	"FRE",     /* $4f */ +	"EXP",     /* $50 */ +	"LOG",     /* $51 */ +	"CLOG",    /* $52 */ +	"SQR",     /* $53 */ +	"SGN",     /* $54 */ +	"ABS",     /* $55 */ +	"INT",     /* $56 */ +	"SYS",     /* $57 */ +	"PADDLE",  /* $58 */ +	"STICK",   /* $59 */ +	"PTRIG",   /* $5a */ +	"STRIG",   /* $5b */ +	"VSTICK",  /* $5c */ +	"HSTICK",  /* $5d */ +	"PMADR",   /* $5e */ +	"ERR",     /* $5f */ +	"TAB",     /* $60 */ +	"PEN",     /* $61 */ +}; + +const int aplus_ops_size = sizeof(aplus_ops); diff --git a/aplus_tokens.h b/aplus_tokens.h new file mode 100644 index 0000000..f0c905d --- /dev/null +++ b/aplus_tokens.h @@ -0,0 +1,5 @@ +extern const char *aplus_cmds[]; +extern const char *aplus_ops[]; + +extern const int aplus_cmd_size; +extern const int aplus_ops_size; @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "ATASCII" 7 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "ATASCII" 7 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  atascii \- Atari 8-bit character set  .\" RST source for atascii(7) man page. Convert with: @@ -1714,7 +1714,7 @@ T{  T}	T{  7e  T}	T{ -[delete] +[backspace]  T}	T{  254  T}	T{ @@ -2150,32 +2150,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. diff --git a/atascii.c b/atascii.c new file mode 100644 index 0000000..d4e4a91 --- /dev/null +++ b/atascii.c @@ -0,0 +1,157 @@ +#include "atascii.h" + +const char *atascii_inverse_on  = "\x1b[7m"; +const char *atascii_inverse_off = "\x1b[27m"; + +/* only called in magazine mode. cursor control characters +   like a bell in the middle of a non-inverse string +   should not cause it to print {inv}{bell}{norm}. The {bell} +   is "inherently" inverse (since its high bit is set) but doesn't +   need to be printed that way. */ +static int affects_inv(int c) { +	switch(c) { +		case 0x1b: /* esc */ +		case 0x1c: /* up */ +		case 0x1d: /* down */ +		case 0x1e: /* left */ +		case 0x1f: /* right */ +		case 0x9b: /* EOL */ +		case 0x9c: /* del line */ +		case 0x9d: /* ins line */ +		case 0x9e: /* clear tab */ +		case 0x9f: /* set tab */ +		case 0x7d: /* cls */ +		case 0x7e: /* BS */ +		case 0x7f: /* tab */ +		case 0xfd: /* bell */ +		case 0xfe: /* del chr */ +		case 0xff: /* ins chr */ +			return 0; +		default: +			return 1; +	} +} + +int atascii_context_init(atascii_ctx *ctx, int mode, int flags) { +	memset(ctx, 0, sizeof(atascii_ctx)); + +	switch(mode) { +		case ATA_MODE_UTF8: +			if(flags & ATA_FLAG_ICS) +				ctx->table = ics2utf; +			else +				ctx->table = ata2utf; +			break; +		case ATA_MODE_MAGAZINE: +			ctx->flags &= ~ATA_FLAG_UNDERLINE; +			ctx->table = ata2mag; +			break; +		default: +			return 0; +	} + +	ctx->mode = mode; +	ctx->flags = flags; + +	return 1; +} + +char *atascii_a2utf(atascii_ctx *ctx, int src, char *dest) { +	dest[0] = 0; + +	if(src == ATA_CHR_FINISH) { +		if(ctx->inv) +			strcpy(dest, ctx->mode == ATA_MODE_MAGAZINE ? "{norm}": atascii_inverse_off); +		return dest; +	} + +	if(src == 0x9b) { +		strcpy(dest, "\n"); +		ctx->lines++; +		return dest; +	} + +	if(ctx->flags & ATA_FLAG_TEXTMODE) { +		switch(src) { +			case 0x7f: /* tab */ +				strcpy(dest, "\t"); +				return dest; +			case 0xfd: /* bell */ +				strcpy(dest, "\a"); +				return dest; +			case 0x7e: /* backspace */ +				strcpy(dest, "\b"); +				return dest; +			default: break; +		} +	} + +	if(ctx->flags & ATA_FLAG_STRIP_INVERSE) src &= 0x7f; + +	if(!(ctx->flags & ATA_FLAG_UNDERLINE)) { +		/* strings of inverse chars only get one "inverse on" ANSI +			sequence, and one "inverse off" afterwards. */ +		if(src & 0x80) { +			if(!ctx->inv) { +				if(ctx->mode == ATA_MODE_MAGAZINE) { +					if(affects_inv(src)) { +						strcpy(dest, "{inv}"); +						ctx->inv = 1; +					} +				} else { +					strcpy(dest, atascii_inverse_on); +					ctx->inv = 1; +				} +			} +		} else { +			if(ctx->inv) { +				if(ctx->mode == ATA_MODE_MAGAZINE) { +					if(affects_inv(src)) { +						strcpy(dest, "{norm}"); +						ctx->inv = 0; +					} +				} else { +					strcpy(dest, atascii_inverse_off); +					ctx->inv = 0; +				} +			} +		} +	} + +	if(ctx->mode == ATA_MODE_MAGAZINE) { +		/* special cases: control codes with bit 7 set can't go +			in the table since it's only got 128 entries. */ +		switch(src) { +			case 0x9c: +				strcat(dest, "{del-line}"); return dest; +			case 0x9d: +				strcat(dest, "{ins-line}"); return dest; +			case 0x9e: +				strcat(dest, "{clr-tab}"); return dest; +			case 0x9f: +				strcat(dest, "{set-tab}"); return dest; +			case 0xfd: +				strcat(dest, "{bell}"); return dest; +			case 0xfe: +				strcat(dest, "{del-char}"); return dest; +			case 0xff: +				strcat(dest, "{ins-char}"); return dest; +			default: break; +		} +	} + +	strcat(dest, ctx->table[src & 0x7f]); + +	if((ctx->flags & ATA_FLAG_UNDERLINE) && (src & 0x80)) { +		strcat(dest, "\b_"); +	} + +	return dest; +} + +const char *atascii_finish(atascii_ctx *ctx) { +	if(ctx->inv) +		return ATA_MODE_MAGAZINE ? "{norm}": atascii_inverse_off; +	else +		return ""; +}; diff --git a/atascii.h b/atascii.h new file mode 100644 index 0000000..08abc3f --- /dev/null +++ b/atascii.h @@ -0,0 +1,44 @@ +#ifndef ATASCII_H +#define ATASCII_H + +#include <stdio.h> +#include <string.h> +#include "atables.h" + +#define ATA_MODE_UTF8 0 /* default */ +#define ATA_MODE_MAGAZINE 1 +/* TODO: #define ATA_MODE_DOTS 2 */ + +#define ATA_FLAG_NONE 0 /* default */ +#define ATA_FLAG_UNDERLINE 1 +#define ATA_FLAG_ICS 2 +#define ATA_FLAG_TEXTMODE 4 +#define ATA_FLAG_STRIP_INVERSE 8 + +#define ATA_CHR_FINISH -1 + +extern const char *atascii_inverse_on; +extern const char *atascii_inverse_off; + +typedef struct { +	int mode; +	int flags; +	int inv; +	int lines; +	const char **table; +} atascii_ctx; + +/* returns true if mode and flags are valid, 0 otherwise. */ +extern int atascii_context_init(atascii_ctx *ctx, int mode, int flags); + +/* obeys all the flags and modes. +   result goes in dest, which needs to be 9 bytes in utf-8 mode (big +   enough to handle up to 4 bytes of UTF-8 plus 4 bytes of ANSI escape +   code plus a terminating null), or 12 bytes in magazine mode. +	the return value is dest. + */ +extern char *atascii_a2utf(atascii_ctx *ctx, int src, char *dest); + +extern const char *atascii_finish(atascii_ctx *ctx); + +#endif diff --git a/atascii.rst b/atascii.rst index 8f96d2a..54e47b8 100644 --- a/atascii.rst +++ b/atascii.rst @@ -155,7 +155,7 @@ brackets denote screen control codes.     "123", "7b", "♠", "251", "fb", ""     "124", "7c", "\|", "252", "fc", ""     "125", "7d", "[clear screen]", "253", "fd", "[bell]" -   "126", "7e", "[delete]", "254", "fe", "[delete char]" +   "126", "7e", "[backspace]", "254", "fe", "[delete char]"     "127", "7f", "[tab]", "255", "ff", "[insert char]"  In the Atari XL and XE ROMs, there is a second character set, known as @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "ATR2XFD" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "ATR2XFD" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  atr2xfd \- Convert an Atari 8-bit ATR disk image to a raw (XFD) image  .\" RST source for atr2xfd(1) man page. Convert with: @@ -181,32 +181,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "ATRSIZE" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "ATRSIZE" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  atrsize \- Change the size of an Atari 8-bit ATR disk image, or create a blank ATR image  .\" RST source for atrsize(1) man page. Convert with: @@ -195,32 +195,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "AXE" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "AXE" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  axe \- ATR/XFD Editor  .\" RST source for axe(1) man page. Convert with: @@ -136,32 +136,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -10,7 +10,29 @@  #include "bas.h" +/* caller's parse_args() should set this for the -v option */  int verbose = 0; + +/* hex constants work the same way in Turbo BASIC and BASIC XL/XE: they're +   exactly like numeric constants, 6-byte BCD FP, but introduced with +   OP_HEXCONST instead of OP_NUMCONST. +   If allow_hex_const is set, on_exp_token will be called for OP_HEXCONST. +	Otherwise, a warning will be printed, on_exp_token will NOT be called, +   but the constant is skipped the same as a regular numeric, to keep +   in sync with the token stream. */ +int allow_hex_const = 0; + +/* BASIC XL token 0x5a is followed by a single "subtoken", this skips it. */ +int bxl_exttok_hack = 0; + +/* 2 for OSS Integer BASIC, 6 for the BCD constants in all others. */ +int numconst_size = 6; + +/* BASIC/A+ and OSS Integer use the same cmd tokens for REM and DATA that +   BASIC does, but not for the ERROR- token. bas.c needs to know what +   token is ERROR- so it can handle it correctly. */ +int error_token = CMD_ERROR; +  unsigned short lomem;  unsigned short vntp;  unsigned short vntd; @@ -20,6 +42,8 @@ unsigned short stmcur;  unsigned short starp;  unsigned short codestart;  unsigned short code_end; +unsigned short save_command_pos; +unsigned short save_command_tok;  unsigned short vnstart;  unsigned short vvstart;  int filelen; @@ -60,6 +84,7 @@ void readfile(void) {  	else if(filelen > MAX_PROG_SIZE)  		fprintf(stderr, "Warning: file is %d bytes, suspiciously large for a BASIC program.\n", filelen);  	fclose(input_file); +	input_file = NULL; /* so caller can tell it's closed */  	if(filelen < MIN_PROG_SIZE)  		die("File too short to be a BASIC program (truncated?)\n");  } @@ -69,6 +94,7 @@ int writefile(void) {  	outbytes = fwrite(program, 1, filelen, output_file);  	fclose(output_file); +	output_file = NULL; /* so caller can tell it's closed */  	if(verbose) fprintf(stderr, "Wrote %d bytes.\n", outbytes);  	return outbytes;  } @@ -87,9 +113,12 @@ void dump_header_vars(void) {  	fprintf(stderr, "LOMEM  $%04x    VNTP $%04x   VNTD $%04x  VVTP $%04x\n", lomem, vntp, vntd, vvtp);  	fprintf(stderr, "STMTAB $%04x  STMCUR $%04x  STARP $%04x\n", stmtab, stmcur, starp);  	fprintf(stderr, "vnstart $%04x, vvstart $%04x, codestart $%04x, code_end $%04x\n", vnstart, vvstart, codestart, code_end); +	fprintf(stderr, "save_command_pos $%04x (tok $%02x)\n", save_command_pos, save_command_tok);  }  void parse_header(void) { +	int vntp_offset; +  	lomem = getword(0);  	vntp = getword(2);  	vntd = getword(4); @@ -97,18 +126,42 @@ void parse_header(void) {  	stmtab = getword(8);  	stmcur = getword(10);  	starp = getword(12); +  	codestart = stmtab - TBL_OFFSET - (vntp - 256);  	vnstart = vntp - TBL_OFFSET;  	vvstart = vvtp - TBL_OFFSET; +	save_command_pos = stmcur - TBL_OFFSET; +	save_command_tok = program[save_command_pos + 4];  	code_end = starp - TBL_OFFSET; -	if(lomem) die("This doesn't look like an Atari BASIC program (no $0000 signature)."); +	if(vnstart > 0x0e) { +		if(verbose) +			fprintf(stderr, "VNTP is $%02x (not ($100), adjusting pointers.\n", vntp); +		vntp_offset = vnstart - 0x0e; +		vnstart -= vntp_offset; +		vvstart -= vntp_offset; +	}  	if(filelen < code_end) {  		fprintf(stderr, "Warning: file is truncated: %d bytes, should be %d.\n", filelen, code_end);  	}  	if(verbose) dump_header_vars(); + +	/* these checks are actually kind of conservative. */ +	if(lomem == 0x77) { +		numconst_size = 2; +		if(verbose) +			fprintf(stderr, "OSS Integer BASIC $7700 signature found, OK.\n"); +	} else if(lomem == 0) { +		if(verbose) +			fprintf(stderr, "BASIC $0000 signature found, OK.\n"); +	} else { +		die("Not an Atari BASIC program (no $0000 or $7700 signature)."); +	} +	if(vntp < 0x100) die("Not an Atari BASIC program (invalid VNTP)."); +	if(vvtp < vntd) die("Not an Atari BASIC program (invalid VVTP)."); +	if(starp < vvtp) die("Not an Atari BASIC program (invalid STARP).");  }  void update_header(void) { @@ -171,23 +224,28 @@ int vntable_ok(void) {  	/* first pass: bad = 1 if all the bytes in the table have the same  		value, no matter what it is. */  	vp = vnstart + 1; -	bad = 1; -	while(vp < vvstart - 1) { -		if(program[vp] != program[vnstart]) { -			bad = 0; -			break; + +	/* don't do this check if the table is only one byte long! */ +	if(vp < vvstart - 1) { +		bad = 1; +		while(vp < vvstart - 1) { +			if(program[vp] != program[vnstart]) { +				bad = 0; +				break; +			} +			vp++;  		} -		vp++; +		if(bad) return 0;  	} -	if(bad) return 0;  	/* 2nd pass: bad = 1 if there's any invalid character in the table. */  	vp = vnstart;  	while(vp < vvstart) {  		unsigned char c = program[vp]; -		/* treat a null byte as end-of-table, ignore any junk between it and VNTP. */ -		if(c == 0) break; +		/* allow for (but don't require) dummy byte at VNTD. used to just +		   quit when we hit 0, but 0 might be part of a scrambled table. */ +		if(c == 0 && vp == (vvstart - 1)) break;  		vp++; @@ -196,6 +254,10 @@ int vntable_ok(void) {  		/* numbers and letters are allowed, inverse or normal. */  		c &= 0x7f; +		if(c == '_') { +			fprintf(stderr, "%s: Underscore in variable name; Turbo or BASIC XE?\n", self); +			continue; +		}  		if(c >= 0x30 && c <= 0x39) continue;  		if(c >= 0x41 && c <= 0x5a) continue; @@ -290,14 +352,22 @@ void walk_code(unsigned int startlineno, unsigned int endlineno) {  		lineno = tmpno;  		offset = program[linepos + 2];  		nextpos = linepos + offset; +		if(nextpos > filelen) { +			fprintf(stderr, "Warning: program truncated in the middle of line %d.\n", lineno); +			return; +		}  		end = nextpos;  		pos = linepos; -		if(offset < 6) { +		if(offset < 5) { +			/* actually, real Atari BASIC's minimum offset is 6. however, if you use +			   the "--" (line of dashes, command token 0x54) in Turbo BASIC XL, you +			   get an offset of 5, because there's no end-of-line after it. +			   it seems better to accomodate Turbo here. */  			CALL(on_bad_line_length);  			offset = program[linepos + 2]; /* on_bad_line_length fixed it (we hope) */ -			if(offset < 6) +			if(offset < 5)  				die("Fatal: Program is code-protected; unprotect it first.");  		} @@ -313,33 +383,55 @@ void walk_code(unsigned int startlineno, unsigned int endlineno) {  		pos = linepos + 3;  		while(pos < nextpos) { /* loop over statements within a line */  			soffset = program[pos]; +			if(!soffset) { +				fprintf(stderr, "Fatal: next-statement offset is 0 at line %d, pos %04x\n", lineno, pos); +				exit(1); +			}  			end = linepos + soffset;  			CALL(on_start_stmt);  			while(pos < end) {  /* loop over tokens within a statement */  				pos++;  				CALL(on_cmd_token); -				switch(program[pos]) { -					case CMD_REM: -					case CMD_DATA: -					case CMD_ERROR: -						pos++; -						CALL(on_text); -						pos = end; -						break; -					default: -						pos++; -						break; + +				tok = program[pos]; +				if((tok == CMD_REM) || (tok == CMD_DATA) || /* same in all */ +						tok == error_token) +				{ +					pos++; +					CALL(on_text); +					pos = end; +				} else if(bxl_exttok_hack && tok == 0x5a) { +					pos += 2; /* skip subtoken */ +				} else { +					pos++;  				}  				while(pos < end) {     /* loop over operators */  					tok = program[pos];  					switch(tok) { +						case 0: /* Turbo variables numbered >= $80 */ +							CALL(on_exp_token); +							/* on_exp_token callback better know what to do with $00! */ +							pos += 2; +							break;  						case OP_NUMCONST:  							CALL(on_exp_token);  							pos++;  							CALL(on_num_const); -							pos += 6; +							pos += numconst_size; +							break; +						case OP_HEXCONST: +							if(allow_hex_const) { +								CALL(on_exp_token); +							} else { +								fprintf(stderr, "%s: found Turbo/BXL/BXE hex constant at line %d, skipping\n", self, lineno); +							} +							pos++; +							if(allow_hex_const) { +								CALL(on_num_const); +							} +							pos += numconst_size;  							break;  						case OP_STRCONST:  							CALL(on_exp_token); @@ -92,8 +92,10 @@  #define CMD_ILET      0x36 /* implied LET */  #define CMD_ERROR     0x37 -/* operators. 0x00-0x0d and 0x0a-0x11 are not used. +/* operators. 0x00-0x0d and 0x0a-0x11 are not used in Atari BASIC; +   0x0d is used (in the same way) in both Turbo BASIC and BXL/BXE.     0x3d-0x54 are functions. */ +#define OP_HEXCONST     0x0d  #define OP_NUMCONST     0x0e  #define OP_STRCONST     0x0f  #define OP_COMMA        0x12 @@ -182,6 +184,8 @@ extern unsigned short starp;  /* positions where various parts of the file start,     derived from the header vars above. */  extern unsigned short codestart; +extern unsigned short save_command_pos; +extern unsigned short save_command_tok;  extern unsigned short code_end;  extern unsigned short vnstart;  extern unsigned short vvstart; @@ -200,6 +204,10 @@ extern FILE *output_file;  extern char *output_filename;  extern int verbose; +extern int allow_hex_const; +extern int bxl_exttok_hack; +extern int numconst_size; +extern int error_token;  extern void set_self(const char *argv0);  extern void die(const char *msg); diff --git a/bas2aplus.1 b/bas2aplus.1 new file mode 100644 index 0000000..722e8c2 --- /dev/null +++ b/bas2aplus.1 @@ -0,0 +1,211 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "BAS2APLUS" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +bas2aplus \- Convert Atari BASIC (and some BASIC XL/XE) programs to BASIC/A+ +.SH SYNOPSIS +.sp +bas2aplus \fIinput\-file\fP \fIoutput\-file\fP +.SH DESCRIPTION +.sp +\fBbas2aplus\fP reads an Atari BASIC or BASIC XL/XE tokenized (SAVEd) +program and converts it to BASIC/A+. The conversion is a simple token +replacement; no syntax or semantic analysis is done. +.sp +\fIinput\-file\fP must be an Atari BASIC, BASIC XL, or BASIC XE program. +Turbo BASIC is not supported. Trying to convert a program that is +already BASIC/A+ will appear to succeed, but the resulting program +will be gibberish and will likely crash BASIC/A+ when \fBRUN\fP\&. +.sp +All Atari BASIC programs can be successfully converted. Some BASIC +XL/XE tokens have no equivalent in BASIC/A+, so programs using these +can\(aqt be converted (you will see messages on standard error, in that +case). +.SH OPTIONS +.SS General Options +.INDENT 0.0 +.TP +.B \fB\-\-help\fP +Print usage message and exit. +.TP +.B \fB\-\-version\fP +Print version number and exit. +.TP +.B \fB\-v\fP +Verbose operation. When displaying a number in verbose mode, it will +be prefixed with \fI$\fP if it\(aqs in hex, or no prefix for decimal. +.UNINDENT +.SH BASIC +.sp +BASIC/A+ is basically a later version of Atari BASIC, by the same team +that developed Atari BASIC. As such, it\(aqs source\-compatible with Atari +BASIC, but \fInot\fP token\-compatible. +.sp +BASIC/A+ uses a different set of token numbers, but has all but two +of the same tokens used by Atari BASIC. Conversion should always +succeed, for an Atari BASIC program. +.sp +The two missing tokens are the \fBCOM\fP and \fBGO TO\fP commands, which +are converted to \fBDIM\fP and \fBGOTO\fP, respectively. +.sp +The resulting program should \fBLOAD\fP and \fBRUN\fP in BASIC/A+ and +function identically to the BASIC version, unless it uses memory +that\(aqs reserved in A+. \fBUSR()\fP routines that are stored in the lower +half of Page 6 will have to be relocated, since A+ uses this area +itself. See the BASIC/A+ manual for full details. +.SH BASIC XL +.sp +BASIC XL is basically the next version of BASIC/A+, by the +same developers. The token lists were rearranged so that it\(aqs +token\-compatible with Atari BASIC, and includes all the extra +commands/functions/etc from BASIC/A+... with different token numbers. +.sp +BASIC XL has keywords and operators that don\(aqt exist in BASIC/A+, +which can\(aqt be translated by \fBbas2aplus\fP\&. These are: +.INDENT 0.0 +.TP +.B \fBNUM\fP +Rarely found in a program (usually only used in direct mode). +.TP +.B \fBFAST\fP +Just doesn\(aqt exist in BASIC/A+. +.TP +.B \fBLOCAL\fP, \fBEXIT\fP, \fBPROCEDURE\fP, \fBCALL\fP, \fBSORTUP\fP, \fBSORTDOWN\fP +These BASIC XL commands are provided by the disk\-based Toolkit +extension, which doesn\(aqt exist for BASIC/A+. +.TP +.B \fBString Arrays\fP +BASIC/A+ doesn\(aqt support these; if your BASIC XL program uses them, +it won\(aqt convert correctly. +.TP +.B \fBBUMP\fP and \fBFIND\fP +While BASIC/A+ does support these functions, the token\-level syntax +is different; it would be possible to translate them, but it would +require recalculating the line offset and statement offsets for +every line that uses them. For now, they\(aqre not supported. +.TP +.B \fB%\fP +The exclusive OR operator in BASIC XL. No such animal, in A+. +.TP +.B \fBHEX$\fP, \fBRANDOM\fP, \fBLEFT$\fP, \fBRIGHT$\fP, \fBMID$\fP +These functions don\(aqt exist in BASIC/A+. +.UNINDENT +.sp +Also, BASIC XL supports hex constants, with a leading \fB$\fP\&. A+ +doesn\(aqt support these, so they get converted to the equivalent decimal +constant. This is basically a cosmetic change; \fBA=$0600\fP assigns the +same value as \fBA=1536\fP\&. +.sp +BASIC XL also allows some syntax that\(aqs not valid in BASIC +A+. For instance, \fBDIR\fP is allowed with no argument in XL. +\fBbas2aplus\fP doesn\(aqt detect these constructs. +.SH BASIC XE +.sp +BASIC XE is the last in the series of OSS BASIC interpreters. It +supports "EXTENDed" mode, which allows BASIC XE to use all the +memory in a 130XE, but such programs are \fInot\fP supported by +\fBbas2aplus\fP\&. Only non\-EXTENDed BASIC XE programs can be converted. +.sp +BASIC XE adds a few keywords to BASIC XL, which also don\(aqt exist in +A+. These are: +.INDENT 0.0 +.TP +.B \fBEXTEND\fP +This command is direct\-mode only, so it will never appear in a SAVEd +program anyway. +.TP +.B \fBHITCLR\fP, \fBINVERSE\fP, \fBNORMAL\fP, \fBBLOAD\fP, \fBBSAVE\fP +Not supported in either A+ or XL. +.UNINDENT +.sp +BASIC XE also allows some syntax that\(aqs not valid in either BASIC XL +or A+. For instance, \fBIF <condition>\fP, without \fBTHEN\fP, can appear +as the last statement on a line, and \fBLVAR\fP no longer requires an +argument. \fBbas2aplus\fP doesn\(aqt detect these constructs. +.sp +Actually, BASIC/A+ will \fBLIST\fP and \fBRUN\fP programs with the \fBIF\fP +issue, but such lines can\(aqt be edited in A+. Easy enough to add a +\fB:REM\fP to the end of the line, though. +.SH TURBO BASIC +.sp +Not supported. It\(aqs also an extended version of Atari BASIC (by +a different developer), but extends the syntax in ways that just +wouldn\(aqt convert directly to BASIC/A+. +.SH EXIT STATUS +.sp +0 for success, non\-zero for failure. +.SH COPYRIGHT +.sp +WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. +.SH AUTHOR +.INDENT 0.0 +.IP B. 3 +Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. +.UNINDENT +.SH SEE ALSO +.sp +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\fP(7). +.sp +Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference +Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. +.\" Generated by docutils manpage writer. +. diff --git a/bas2aplus.c b/bas2aplus.c new file mode 100644 index 0000000..de259aa --- /dev/null +++ b/bas2aplus.c @@ -0,0 +1,272 @@ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <time.h> + +#include "bas.h" + +#undef DUMP_TABLES + +#include "tokens.c" +#include "aplus_tokens.c" +#include "bxl_tokens.c" +#include "bxe_tokens.c" + +int errs = 0; + +/* there are a few more BXL commands past 0x55, but they have no +   A+ equivalents. */ +#define LAST_BXL_CMD 0x55 +#define LAST_BXL_OP 0x65 + +/* cmd_table[basic_token] or op_table[basic_token] gives the equivalent +   A+ token. note that there's no "GO TO" or "COM" in A+, we translate +   those as GOTO and DIM. */ +unsigned char cmd_table[] = { +	/* Atari BASIC: */ +	/* REM DATA INPUT COLOR LIST ENTER LET IF:*/ +	0x00, 0x01, 0x02, 0x3f, 0x03, 0x04, 0x05, 0x06,  /* 0x00 - 0x07 */ + +	/* FOR NEXT GOTO GO<sp>TO GOSUB TRAP BYE CONT: */ +	0x07, 0x08, 0x09, 0x09, 0x0b, 0x0c, 0x0d, 0x0e,  /* 0x08 - 0x0f */ + +	/* COM CLOSE CLR DEG DIM END NEW OPEN: */ +	0x12, 0x0f, 0x10, 0x11, 0x12, 0x19, 0x1a, 0x1b,  /* 0x10 - 0x17 */ + +	/* LOAD SAVE STATUS NOTE POINT XIO ON POKE: */ +	0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,  /* 0x18 - 0x1f */ + +	/* PRINT RAD READ RESTORE RETURN RUN STOP POP: */ +	0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c,  /* 0x20 - 0x27 */ + +	/* ? GET PUT GRAPHICS PLOT POSITION DOS DRAWTO: */ +	0x2d, 0x2e, 0x2f, 0x40, 0x41, 0x42, 0x38, 0x43,  /* 0x28 - 0x2f */ + +	/* SETCOLOR LOCATE SOUND LPRINT CSAVE CLOAD <silent-let> ERROR-: */ +	0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x52, 0x53,  /* 0x30 - 0x37 */ + +	/* BASIC XL: */ +	/* WHILE ENDWHILE TRACEOFF TRACE ELSE ENDIF DPOKE LOMEM: */ +	0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x24, 0x30,  /* 0x38-0x3f */ + +	/* DEL RPUT RGET BPUT BGET TAB CP ERASE: */ +	0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x39,  /* 0x40-0x47 */ + +	/* PROTECT UNPROTECT DIR RENAME MOVE MISSILE PMCLR PMCOLOR: */ +	0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x4a, 0x4b, 0x4c,  /* 0x48-0x4f */ + +	/* PMGRAPHICS PMMOVE PMWIDTH SET LVAR RENUM: */ +	0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x0a,              /* 0x50-0x55 */ + +}; + +/* 0xff means "untranslatable". these are: +   BUMP( FIND( HEX$ RANDOM( +   ...though BUMP( and FIND( do have A+ equivalents (they just need +   a left paren inserted after) */ +unsigned char op_table[] = { +	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* not used: 0x00-0x07 */ +	0xff, 0xff, 0xff, 0xff, 0xff,                   /* not used: 0x08-0x0c */ +	0x0e,       /* convert BXL hex const to decimal */ +	0x0e, 0x0f, /* numeric and string consts are the same */ +	0xff, 0xff, /* these 2 not used: 0x10-0x11 */ + +	/* these are the same, 0x12-0x1b */ +	0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, + +	/* 0x1c-0x2a off by one due to USING inserted at 0x1c */ +	0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, +	0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + +	/* 0x2b-0x43 off by 3 due to ! and & */ +	0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, +	0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, +	0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, +	0x46, + +	/* 0x44-0x50 */ +	0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, +	0x52, 0x53, 0x54, 0x55, 0x56, + +	/* 0x51-0x54 (last BASIC) */ +	0x58, 0x59, 0x5a, 0x5b, + +	/* BXL stuff, 0x55-0x5f */ +	0x1c, 0xff /* % */, 0x2c, 0x2d, +	0xff, /* string array semicolon */ +	0xff, /* BUMP( (TODO: A+ token 0x47 plus a paren) */ +	0xff, /* FIND( (TODO: A+ token 0x48 plus a paren) */ +	0xff, /* HEX$ */ +	0xff, /* RANDOM( */ +	0x49, /* DPEEK */ +	0x57, /* SYS */ +	0x5c, /* VSTICK */ +	0x5d, /* HSTICK */ +	0x5e, /* PMADR */ +	0x5f, /* ERR */ +	0x60, /* TAB */ +	0x61, /* PEN */ + +}; + +#ifdef DUMP_TABLES +void dump_tables(void) { +	int i; + +	for(i = 0; i <= LAST_BXL_CMD; i++) { +		const char *b, *ap = aplus_cmds[cmd_table[i]]; +		if(i <= last_command) +			b = commands[i]; +		else +			b = bxl_cmds[i - 0x38]; +		printf("%02x: %s   %s%s\n", i, b, ap, (strcmp(b, ap) == 0) ? " SAME" : ""); +	} + +	printf("\n\n"); + +	for(i = 0x12; i <= LAST_BXL_OP; i++) { +		int j = op_table[i];; +		const char *b, *ap; +		if(j == 0xff) +			ap = "(not in A+)"; +		else +			ap = aplus_ops[j]; +		if(i <= last_operator) +			b = operators[i]; +		else +			b = bxl_ops[i - 0x55]; +		printf("%02x: %s   %s%s\n", i, b, ap, (strcmp(b, ap) == 0) ? " SAME" : ""); +	} +} +#endif + +void print_help(void) { +	printf("%s [input-file] [output-file]\n", self); +} + +void parse_args(int argc, char **argv) { +	int opt; + +	while( (opt = getopt(argc, argv, "v")) != -1) { +		switch(opt) { +			case 'v': verbose =     1; break; +			case 'h': print_help(); exit(0); +			default: +				print_help(); +				exit(1); +		} +	} + +	if(optind == argc) +		die("No input file given."); +	else +		open_input(argv[optind]); + +	if(++optind == argc) +		die("No output file given."); +	else +		output_filename = argv[optind]; + +	if(argv[++optind]) +		die("Only one input and one output file allowed."); +} + +const char *get_tok_name(unsigned char tok, int is_cmd) { +	if(is_cmd) { +		if(tok <= last_command) { +			return commands[tok]; +		} else if(tok == 0x5a) { +			return "BASIC XL LOCAL/EXIT/PROCEDURE/CALL/SORTUP/SORTDOWN"; +		} else if(tok == 0x59 || (tok > 0x5a && tok < 0x65)) { +			return bxe_cmds[tok - 0x57]; +		} else if(tok > last_command && tok <= 0x58) { +			return bxl_cmds[tok - 0x38]; +		} else { +			return "(maybe Turbo BASIC?)"; +		} +	} else { +		if(tok < 0x12) return ""; +		if(tok <= last_operator) { +			return operators[tok]; +		} else if(tok <= 0x68) { +			return bxl_ops[tok - 0x55]; +		} else { +			return "(maybe Turbo BASIC?)"; +		} +	} +} + +void unsupported_msg(unsigned char tok, int lineno, int is_cmd) { +	fprintf(stderr, "%s: Invalid %s \"%s\" ($%02x) at line %d, not converted.\n", +			self, is_cmd ? "command" : "operator", get_tok_name(tok, is_cmd), tok, lineno); +	errs++; +} + +int is_supported_cmd(unsigned char tok, int lineno) { +	if(tok > LAST_BXL_CMD) { +		unsupported_msg(tok, lineno, 1); +		return 0; +	} +	return 1; +} + +int is_supported_op(unsigned char tok, int lineno) { +	if(tok > LAST_BXL_OP || op_table[tok] == 0xff) { +		unsupported_msg(tok, lineno, 0); +		return 0; +	} +	return 1; +} + +CALLBACK(conv_cmd) { +	if(!is_supported_cmd(tok, lineno)) +		return; + +	program[pos] = cmd_table[tok]; + +	if(verbose && tok != program[pos]) +		fprintf(stderr, "command \"%s\" ($%02x) converted to $%02x at line %d, pos $%04x\n", +				get_tok_name(tok, 1), tok, program[pos], lineno, pos); +} + +CALLBACK(conv_op) { +	if(!is_supported_op(tok, lineno)) +		return; + +	program[pos] = op_table[tok]; + +	if(verbose && tok != program[pos]) +		fprintf(stderr, "operator \"%s\" ($%02x) converted to $%02x at line %d, pos $%04x\n", +				get_tok_name(tok, 0), tok, program[pos], lineno, pos); +} + +int main(int argc, char **argv) { +#ifdef DUMP_TABLES +	dump_tables(); exit(0); +#endif +	set_self(*argv); +	parse_general_args(argc, argv, print_help); +	parse_args(argc, argv); + +	readfile(); +	parse_header(); + +	on_cmd_token = conv_cmd; +	on_exp_token = conv_op; + +	allow_hex_const = 1; +	walk_all_code(); + +	open_output(output_filename); +	writefile(); + +	if(errs) { +		fprintf(stderr, "%s: program has %d invalid tokens; BASIC/A+ won't RUN it.\n", +				self, errs); +		return 1; +	} + +	return 0; +} diff --git a/bas2aplus.rst b/bas2aplus.rst new file mode 100644 index 0000000..4ce3f50 --- /dev/null +++ b/bas2aplus.rst @@ -0,0 +1,143 @@ +========= +bas2aplus +========= + +--------------------------------------------------------------- +Convert Atari BASIC (and some BASIC XL/XE) programs to BASIC/A+ +--------------------------------------------------------------- + +.. include:: manhdr.rst + +SYNOPSIS +======== + +bas2aplus *input-file* *output-file* + +DESCRIPTION +=========== + +**bas2aplus** reads an Atari BASIC or BASIC XL/XE tokenized (SAVEd) +program and converts it to BASIC/A+. The conversion is a simple token +replacement; no syntax or semantic analysis is done. + +*input-file* must be an Atari BASIC, BASIC XL, or BASIC XE program. +Turbo BASIC is not supported. Trying to convert a program that is +already BASIC/A+ will appear to succeed, but the resulting program +will be gibberish and will likely crash BASIC/A+ when **RUN**. + +All Atari BASIC programs can be successfully converted. Some BASIC +XL/XE tokens have no equivalent in BASIC/A+, so programs using these +can't be converted (you will see messages on standard error, in that +case). + +OPTIONS +======= + +.. include:: genopts.rst + +BASIC +===== + +BASIC/A+ is basically a later version of Atari BASIC, by the same team +that developed Atari BASIC. As such, it's source-compatible with Atari +BASIC, but *not* token-compatible. + +BASIC/A+ uses a different set of token numbers, but has all but two +of the same tokens used by Atari BASIC. Conversion should always +succeed, for an Atari BASIC program. + +The two missing tokens are the **COM** and **GO TO** commands, which +are converted to **DIM** and **GOTO**, respectively. + +The resulting program should **LOAD** and **RUN** in BASIC/A+ and +function identically to the BASIC version, unless it uses memory +that's reserved in A+. **USR()** routines that are stored in the lower +half of Page 6 will have to be relocated, since A+ uses this area +itself. See the BASIC/A+ manual for full details. + +BASIC XL +======== + +BASIC XL is basically the next version of BASIC/A+, by the +same developers. The token lists were rearranged so that it's +token-compatible with Atari BASIC, and includes all the extra +commands/functions/etc from BASIC/A+... with different token numbers. + +BASIC XL has keywords and operators that don't exist in BASIC/A+, +which can't be translated by **bas2aplus**. These are: + +**NUM** +  Rarely found in a program (usually only used in direct mode). + +**FAST** +  Just doesn't exist in BASIC/A+. + +**LOCAL**, **EXIT**, **PROCEDURE**, **CALL**, **SORTUP**, **SORTDOWN** +  These BASIC XL commands are provided by the disk-based Toolkit +  extension, which doesn't exist for BASIC/A+. + +**String Arrays** +  BASIC/A+ doesn't support these; if your BASIC XL program uses them, +  it won't convert correctly. + +**BUMP** and **FIND** +  While BASIC/A+ does support these functions, the token-level syntax +  is different; it would be possible to translate them, but it would +  require recalculating the line offset and statement offsets for +  every line that uses them. For now, they're not supported. + +**%** +  The exclusive OR operator in BASIC XL. No such animal, in A+. + +**HEX$**, **RANDOM**, **LEFT$**, **RIGHT$**, **MID$** +  These functions don't exist in BASIC/A+. + +Also, BASIC XL supports hex constants, with a leading **$**. A+ +doesn't support these, so they get converted to the equivalent decimal +constant. This is basically a cosmetic change; **A=$0600** assigns the +same value as **A=1536**. + +BASIC XL also allows some syntax that's not valid in BASIC +A+. For instance, **DIR** is allowed with no argument in XL. +**bas2aplus** doesn't detect these constructs. + +BASIC XE +======== + +BASIC XE is the last in the series of OSS BASIC interpreters. It +supports "EXTENDed" mode, which allows BASIC XE to use all the +memory in a 130XE, but such programs are *not* supported by +**bas2aplus**. Only non-EXTENDed BASIC XE programs can be converted. + +BASIC XE adds a few keywords to BASIC XL, which also don't exist in +A+. These are: + +**EXTEND** +  This command is direct-mode only, so it will never appear in a SAVEd +  program anyway. + +**HITCLR**, **INVERSE**, **NORMAL**, **BLOAD**, **BSAVE** +  Not supported in either A+ or XL. + +BASIC XE also allows some syntax that's not valid in either BASIC XL +or A+. For instance, **IF <condition>**, without **THEN**, can appear +as the last statement on a line, and **LVAR** no longer requires an +argument. **bas2aplus** doesn't detect these constructs. + +Actually, BASIC/A+ will **LIST** and **RUN** programs with the **IF** +issue, but such lines can't be edited in A+. Easy enough to add a +**:REM** to the end of the line, though. + +TURBO BASIC +=========== + +Not supported. It's also an extended version of Atari BASIC (by +a different developer), but extends the syntax in ways that just +wouldn't convert directly to BASIC/A+. + +EXIT STATUS +=========== + +0 for success, non-zero for failure. + +.. include:: manftr.rst @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "BLOB2C" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "BLOB2C" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  blob2c \- Create C source and header files from a binary file  .\" RST source for blob2c(1) man page. Convert with: @@ -116,32 +116,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "BLOB2XEX" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "BLOB2XEX" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  blob2xex \- Create Atari 8-bit executables from arbitrary data  .\" RST source for blob2xex(1) man page. Convert with: @@ -207,32 +207,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. diff --git a/bxe_tokens.c b/bxe_tokens.c new file mode 100644 index 0000000..5189ee0 --- /dev/null +++ b/bxe_tokens.c @@ -0,0 +1,19 @@ +/* BXL and BXE token tables are identical up to 0x56 */ +const char *bxe_cmds[] = { +	"LOCAL",     /* $57 */ +	"EXTEND",    /* $58 */ +	"PROCEDURE", /* $59 */ +	0,           /* $5A */ +	"CALL",      /* $5B */ +	"SORTUP",    /* $5C */ +	"SORTDOWN",  /* $5D */ +	"EXIT",      /* $5E */ +	"NUM",       /* $5F */ +	"HITCLR",    /* $60 */ +	"INVERSE",   /* $61 */ +	"NORMAL",    /* $62 */ +	"BLOAD",     /* $63 */ +	"BSAVE"      /* $64 */ +}; + +const int bxe_cmd_size = sizeof(bxe_cmds); diff --git a/bxe_tokens.h b/bxe_tokens.h new file mode 100644 index 0000000..25bc14a --- /dev/null +++ b/bxe_tokens.h @@ -0,0 +1,2 @@ +extern const char *bxe_cmds[]; +extern const int bxe_cmd_size; diff --git a/bxl_tokens.c b/bxl_tokens.c new file mode 100644 index 0000000..3543f11 --- /dev/null +++ b/bxl_tokens.c @@ -0,0 +1,64 @@ +const char *bxl_cmds[] = { +	"WHILE",       /* $38 */ +	"ENDWHILE",    /* $39 */ +	"TRACEOFF",    /* $3A */ +	"TRACE",       /* $3B */ +	"ELSE",        /* $3C */ +	"ENDIF",       /* $3D */ +	"DPOKE",       /* $3E */ +	"LOMEM",       /* $3F */ +	"DEL",         /* $40 */ +	"RPUT",        /* $41 */ +	"RGET",        /* $42 */ +	"BPUT",        /* $43 */ +	"BGET",        /* $44 */ +	"TAB",         /* $45 */ +	"CP",          /* $46 */ +	"ERASE",       /* $47 */ +	"PROTECT",     /* $48 */ +	"UNPROTECT",   /* $49 */ +	"DIR",         /* $4A */ +	"RENAME",      /* $4B */ +	"MOVE",        /* $4C */ +	"MISSILE",     /* $4D */ +	"PMCLR",       /* $4E */ +	"PMCOLOR",     /* $4F */ +	"PMGRAPHICS",  /* $50 */ +	"PMMOVE",      /* $51 */ +	"PMWIDTH",     /* $52 */ +	"SET",         /* $53 */ +	"LVAR",        /* $54 */ +	"RENUM",       /* $55 */ +	"FAST",        /* $56 */ +	"NUM",         /* $57 */ +	"END",         /* $58 */ +	0,             /* $59 */ +	"",            /* $5A, disk extensions */ +}; + +const int bxl_cmd_size = sizeof(bxl_cmds); + +const char *bxl_ops[] = { +	" USING ",       /* $55 */ +	"%",             /* $56 */ +	"!",             /* $57 */ +	"&",             /* $58 */ +	";",             /* $59 */ +	"BUMP(",         /* $5A */ +	"FIND(",         /* $5B */ +	"HEX$",          /* $5C */ +	"RANDOM(",       /* $5D */ +	"DPEEK",         /* $5E */ +	"SYS",           /* $5F */ +	"VSTICK",        /* $60 */ +	"HSTICK",        /* $61 */ +	"PMADR",         /* $62 */ +	"ERR",           /* $63 */ +	"TAB",           /* $64 */ +	"PEN",           /* $65 */ +	"LEFT$(",        /* $66 */ +	"RIGHT$(",       /* $67 */ +	"MID$(",         /* $68 */ +}; + +const int bxl_ops_size = sizeof(bxl_ops); diff --git a/bxl_tokens.h b/bxl_tokens.h new file mode 100644 index 0000000..b769038 --- /dev/null +++ b/bxl_tokens.h @@ -0,0 +1,5 @@ +extern const char *bxl_cmds[]; +extern const int bxl_cmd_size; + +extern const char *bxl_ops[]; +extern const int bxl_ops_size; @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "CART2XEX" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "CART2XEX" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  cart2xex \- Convert an Atari 8-bit ROM cartridge image to a binary load file  .\" RST source for cart2xex(1) man page. Convert with: @@ -225,32 +225,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. diff --git a/colorize-amsb b/colorize-amsb new file mode 100755 index 0000000..4d6c616 --- /dev/null +++ b/colorize-amsb @@ -0,0 +1,284 @@ +#!/usr/bin/perl -w + +# colorize output from listbas... *after* it's been converted to utf8 +# with a8cat, including ANSI codes for reverse/normal video. + +($SELF = $0) =~ s,.*/,,; + +%colornames = ( +		none => 0, +		red => 1, +		green => 2, +		yellow => 3, +		blue => 4, +		purple => 5, +		cyan => 6, +); + +%colors = ( +		numbers => 'red', +		commands => 'yellow', +		functions => 'purple', +		linenumbers => 'cyan', +		comments => 'blue', +		variables => 'none', +		operators => 'green', +		strings => 'red', +); + +@commands = qw/ +	END FOR NEXT READ DATA RESTORE LINE INPUT DEFSTR DEFINT DEFDBL DEFSNG +	OPTION DIM COMMON DEF LET RANDOMIZE GOTO GOSUB RETURN GO RUN IF +	ELSE THEN STOP CONT RESUME ERROR ON AFTER POKE WAIT MOVE LOAD SAVE +	VERIFY MERGE PRINT PRINT LIST AUTO DEL TRON TROFF RENUM OPEN CLOSE +	GET PUT NOTE LOCK UNLOCK KILL NAME GRAPHICS COLOR PLOT FILL SETCOLOR +	SOUND CLS DOS CLEAR NEW CLOAD CSAVE BASE TO SUB NOT STEP ALL USING +	RESERVE UPDATE OUTPUT APPEND AT PLM0 PLM2 PLM1 CHR0 CHR1 CHR2 AND +	OR XOR +/; + +@functions = qw/ +	TAB SPC AT SGN INT ABS FRE POS SQR LOG EXP COS SIN TAN ATN PEEK LEN STR +	VAL ASC CHR STATUS EOF LEFT RIGHT MID INSTR STRING VARPTR USR SCRN RND +	TIME INKEY ERR ERL STACK +/; + +$cmdhash{$_}++ for @commands; +$funchash{$_}++ for @functions; + +sub conf_file_name { +	my $home = $ENV{HOME}; +	if(!defined $home) { +		warn "$SELF: HOME not set in environment, not reading config file\n"; +		return undef; +	} +	return $home . '/.colorize-amsb.conf'; +} + +sub read_config { +	my $file = conf_file_name(); +	return 1 if !defined $file; # caller won't create +	open my $fh, '<', $file or return 0; # not found, caller will create + +	while(<$fh>) { +		chomp; +		s/#.*//; +		next if /^\s*$/; +		s/^\s*//; +		s/\s*$//; +		$_ = lc $_; +		if(/^([a-z]+)[^a-z]+([a-z]+)*$/) { +			my($k, $v) = ($1, $2); +			if(!defined $colors{$k}) { +				warn "$SELF: $file:$.: unknown color type '$k', ignoring\n"; +			} elsif(!defined $colornames{$v}) { +				warn "$SELF: $file:$.: unknown color name '$v', ignoring\n"; +			} else { +				$colors{$k} = $v; +			} +		} else { +			warn "$SELF: $file:$.: malformed line, skipping\n"; +		} +	} + +	close $fh; +} + +sub create_config { +	my $file = conf_file_name(); +	return unless defined $file; +	open my $fh, '>', $file or do { +		warn "$SELF: can't create $file: $!\n"; +		return; +	}; + +	my $types = join(" ", sort keys %colors); +	my $names = join(" ", sort keys %colornames); + +	print $fh <<EOF; +# colorize-amsb.conf + +# lines with # are comments. blank lines are ignored. + +# each line is "type = color", where valid types are: +#   $types +# and valid colors are: +#   $names + +EOF + +	for(sort keys %colors) { +		print $fh '#' . $_ . ' = ' . $colors{$_} . "\n"; +	} + +	close $fh; +} + +sub is_cmd { +	return $cmdhash{$_[0]}; +} + +sub is_func { +	return $funchash{$_[0]}; +} + +sub is_punct { +	for($_[0]) { +		return 0 if length > 1; +		return 0 if /[\sA-Za-z0-9]/; +	} +	return 1; +} + +sub is_varname { +	return $_[0] =~ /^[A-Z]/; +} + +sub start_color { +	my $color = shift; +	my $colortype = $colors{$color} || die "invalid color type $color\n"; +	my $colornum = $colornames{$colortype}; +	die "invalid color name $color\n" unless defined $colornum; +	if($colornum) { +		print "\x1b[3" . $colornum . "m"; +	} +} + +sub end_color { +	print "\x1b[0m"; +} + +sub colorize { +	my $color = shift; +	my $text = shift; +	#warn "color $color, text '$text'\n"; +	start_color($color) if $color; +	print $text; +	end_color if $color; +} + +sub colorize_line { +	my $line = shift; + +	# skip initial blank line (or really any blank lines) +	return unless length $line; + +	# split on non-word characters, capturing the delimiters. +	# spliting this: 10 PRINT "HELLO":A=1.0E+10:END +	# ...gives this set of tokens: +	#   10 +	#   <space> +	#   PRINT +	#   <space> +	#   " +	#   HELLO +	#   " +	#   : +	#   1 +	#   . +	#   0E +	#   + +	#   10 +	#   : +	#   END + +	@toks = (split(/(\W)/, $line)); + +	# special case the line number +	my $tok = shift @toks; +	if($tok =~ /^\d+/) { +		colorize('linenumbers', $tok); +	} else { +		die "$SELF: no line number at line $., not LISTed AMSB?\n"; +	} + +	my $lasttok = ''; +	my $lastcolor = 0; +	my $in_comment = 0; +	my $in_string = 0; + +	# iterate over the rest of the tokens. kinda hairy, sorry. +	for my $tok (@toks) { +		my $color = 0; + +		if($in_comment || $in_string) { +			$color = 0; +			if($in_string && $tok eq '"') { +				$in_string = 0; +				$color = 'operators'; +			} +		} elsif($tok =~ /^REM|!|'/) { +			start_color('comments'); # rest of line +			$in_comment = 1; +		} elsif($tok eq '"') { +			$color = 'operators'; +			$in_string = 1; +		} elsif($tok eq '#') { +			if($lastcolor eq 'variables') { +				# double-precision variable +				$color = 'variables'; +			} else { +				# OPEN #, PRINT #, CLOSE #, etc +				$color = 'operators'; +			} +		} elsif($tok eq '%') { +			# integer variable +			$color = 'variables'; +		} elsif($tok eq '#' && $lastcolor eq 'variables') { +			# double-precision variable +			$color = 'variables'; +		} elsif($tok eq '$') { +			# $ takes either the functions or variables color +			$color = $lastcolor; +		} elsif($tok eq '.') { +			# decimal point only appears in a number +			$color = 'numbers'; +		} elsif(($tok eq '-' || $tok eq '+') && $lasttok =~ /^\d+E$/) { +			# scientific notation (entire number is the same color) +			$color = 'numbers'; +		} elsif($tok eq '&') { +			# hex constant operator +			$color = 'numbers'; +		} elsif($lasttok eq '&') { +			# hex constant argument +			$color = 'numbers'; +		} elsif(is_cmd($tok)) { +			$color = 'commands'; +		} elsif(is_func($tok)) { +			$color = 'functions'; +		} elsif(is_punct($tok)) { +			$color = 'operators'; +		} elsif(is_varname($tok)) { +			$color = 'variables'; +		} else { +			$color = 'numbers'; +		} + +		# if $color == 0, colorize() just prints the token without escape codes. +		colorize($color, $tok); + +		# if we just started a string, set the strings color. +		if($tok eq '"' && $in_string) { +			start_color('strings'); +		} +		$lastcolor = $color; +		$lasttok = $tok; +	} + +	# don't leave the text color enabled at the end of the line. +	end_color() if $in_comment || $in_string; +} + +# main() +binmode(STDIN, ":utf8"); +binmode(STDOUT, ":utf8"); + +if(!read_config()) { +	create_config(); +} + +while(<>) { +	chomp; +	colorize_line($_); +	print "\n"; +} diff --git a/colorize-amsb.1 b/colorize-amsb.1 new file mode 100644 index 0000000..f18143d --- /dev/null +++ b/colorize-amsb.1 @@ -0,0 +1,100 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "COLORIZE-AMSB" 1 "2025-03-16" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +colorize-amsb \- color syntax highlighting for detokenized Atari MS BASIC +.SH SYNOPSIS +.sp +\fBcolorize\-amsb\fP [\fBfile\fP] +.SH DESCRIPTION +.sp +\fBcolorize\-amsb\fP is a filter that postprocesses the LISTed output +of \fBlistamsb\fP, after it has been piped through \fBa8cat\fP\&. Normally, +there\(aqs no need to run \fBcolorize\-amsb\fP explicitly, as it\(aqs called by +\fBlistamsb\fP automatically. +.sp +\fBcolorize\-amsb\fP takes no options. +.SH CONFIGURATION +.sp +The colors are controlled by the config file, \fB~/.colorize\-amsb.conf\fP\&. +.sp +If the file doesn\(aqt exist, \fBcolorize\-amsb\fP creates it, with all +options commented out. See the comments in the file for the syntax. +.SH EXIT STATUS +.sp +0 for success, non\-zero for any error. Error messages are printed to \fBstderr\fP\&. +.SH COPYRIGHT +.sp +WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. +.SH AUTHOR +.INDENT 0.0 +.IP B. 3 +Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. +.UNINDENT +.SH SEE ALSO +.sp +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\fP(7). +.sp +Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference +Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. +.\" Generated by docutils manpage writer. +. diff --git a/colorize-amsb.rst b/colorize-amsb.rst new file mode 100644 index 0000000..b680b31 --- /dev/null +++ b/colorize-amsb.rst @@ -0,0 +1,39 @@ +============= +colorize-amsb +============= + +-------------------------------------------------------- +color syntax highlighting for detokenized Atari MS BASIC +-------------------------------------------------------- + +.. include:: manhdr.rst + +SYNOPSIS +======== + +**colorize-amsb** [**file**] + +DESCRIPTION +=========== + +**colorize-amsb** is a filter that postprocesses the LISTed output +of **listamsb**, after it has been piped through **a8cat**. Normally, +there's no need to run **colorize-amsb** explicitly, as it's called by +**listamsb** automatically. + +**colorize-amsb** takes no options. + +CONFIGURATION +============= + +The colors are controlled by the config file, **~/.colorize-amsb.conf**. + +If the file doesn't exist, **colorize-amsb** creates it, with all +options commented out. See the comments in the file for the syntax. + +EXIT STATUS +=========== + +0 for success, non-zero for any error. Error messages are printed to **stderr**. + +.. include:: manftr.rst @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "CXREFBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "CXREFBAS" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  cxrefbas \- Code cross-reference for tokenized Atari 8-bit BASIC files  .SH SYNOPSIS @@ -154,32 +154,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. diff --git a/dasm2atasm.1 b/dasm2atasm.1 index e67f694..733037c 100644 --- a/dasm2atasm.1 +++ b/dasm2atasm.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "DASM2ATASM" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "DASM2ATASM" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  dasm2atasm \- Convert 6502 assembly source from dasm syntax to atasm or ca65 syntax.  .\" RST source for dasm2atasm(1) man page. Convert with: @@ -223,32 +223,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -0,0 +1,56 @@ +#!/bin/sh + +usage() { +  cat <<EOF +Usage: $( basename $0 ) [diff-opts] [-- listbas-opts] file1.bas file2.bas + +Diff two tokenized Atari BASIC programs, using listbas(1) and diff(1). + +[diff-opts] is passed through as-is to diff. +[listbas-opts] is passed through as-is to listbas. +EOF +  exit "$1" +} + +cleanup() { +  if [ "$dir" != "" ]; then +    cd +    rm -rf "$dir" +  fi +} + +if [ "$1" = "-h" -o "$1" = "--help" -o "$1" = "" ]; then +  usage 0 +fi + +for i in "$@"; do +  if [ -f "$i" ]; then +    if [ "$file1" = "" ]; then +      file1="$( realpath $i )" +      base1="$( basename $i )".lst +    elif [ "$file2" = "" ]; then +      file2="$( realpath $i )" +      base2="$( basename $i )".lst +    else +      usage 1 +    fi +  elif [ "$i" = "--" ]; then +    opts="listbasopts" +  elif [ "$opts" = "listbasopts" ]; then +    listbasopts="$listbasopts $i" +  else +    diffopts="$diffopts $i" +  fi +done + +dir="$( mktemp -d -t diffbas.XXXXXXXXXX )" +[ -d "$dir" ] +cd "$dir" +trap cleanup EXIT +set -e + +listbas $listbasopts "$file1" > $base1 +listbas $listbasopts "$file2" > $base2 +diff $diffopts $base1 $base2 + +exit 0 @@ -27,61 +27,61 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "A8UTF8" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "DIFFBAS" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME -a8utf8 \- Convert Atari 8-bit text to UTF-8 encoded Unicode. -.\" RST source for a8utf8(1) man page. Convert with: -. -.\" rst2man.py a8utf8.rst > a8utf8.1 -. -.\" rst2man.py comes from the SBo development/docutils package. -. +diffbas \- Show differences between two tokenized Atari 8-bit BASIC files  .SH SYNOPSIS  .sp -\fIa8utf8\fP [\fB\-r\fP] [\fB\-i\fP] [\fIinfile\fP] [\fIinfile ...\fP] -.sp -\fIa8utf8\fP [\fB\-r\fP] [\fB\-i\fP] \fB\-t\fP +diffbas [\fIdiff\-options\fP] [\fB\-\-\fP \fIlistbas\-options\fP] \fIfile1\fP \fIfile2\fP  .SH DESCRIPTION  .sp -Convert Atari 8\-bit ATASCII or XL ICS (International Character -Set) text to UTF\-8 encoded Unicode. Control graphics characters are -replaced with their nearest Unicode equivalents (mostly from the Box -Drawing block, or from the Basic Latin block with \fB\-i\fP option). +\fBdiffbas\fP shows the differences between two tokenized (SAVEd) +Atari BASIC programs, using \fBlistbas\fP(1) and \fBdiff\fP(1). +.SH OPTIONS  .sp -If no \fIinfile\fP is given, input is read from standard input. Output always -goes to standard output; to write to a file, use a command like: +\fBdiffbas\fP takes no options of its own. It will pass options as\-is +to both \fBlistbas\fP and \fBdiff\fP\&. Use \fB\-\-\fP to separate them: everything +before \fB\-\-\fP is passed to \fBdiff\fP, and everything between \fB\-\-\fP and +the first filename is passed to \fBlistbas\fP\&. +.SH COLOR +.sp +By default, the output is colorized by \fBlistbas\fP\&. If you want to use +\fBdiff\fP\(aqs \fB\-\-color\fP option, you should use \fB\-n\fP as a \fBlistbas\fP +option. Color diffs are most useful with \fB\-u\fP (unified diff format), +so the command would look like:  .INDENT 0.0  .INDENT 3.5  .sp  .nf  .ft C -a8utf8 atari.txt > converted.txt +$ diffbas \-u \-\-color \-\- \-n A.BAS B.BAS  .ft P  .fi  .UNINDENT  .UNINDENT -.sp -The output is plain UTF\-8 Unicode, without BOM. -.sp -Inverse video (characters codes above \fB$80\fP) are translated to -their non\-inverse equivalents, except \fB$9B\fP (Atari EOL), which is -translated to \fB\en\fP (newline). -.SH OPTIONS +.SH EXAMPLE  .INDENT 0.0 -.TP -.B  \-i -Input uses Atari XL/XE International Character Set encoding, rather than -ATASCII graphics. -.TP -.B  \-t -Print table of Atari to Unicode equivalents, in CSV format. Can -be used with or without \fB\-i\fP and/or \fB\-r\fP (four different tables). -.TP -.B  \-r -Reverse conversion: Input is UTF\-8, output is ATASCII (or XL ICS, with \fB\-i\fP). -Beware that printing ATASCII to a terminal may look funny, and may even confuse -the terminal. Redirecting to a file is safe. +.INDENT 3.5 +.sp +.nf +.ft C +$ diffbas \-u A.BAS B.BAS + +\-\-\- A.BAS.lst 2024\-07\-12 23:56:46.937965855 \-0400 ++++ B.BAS.lst 2024\-07\-12 23:56:46.938965854 \-0400 +@@ \-1,3 +1,4 @@ + 10 ? "THIS LINE IS IN BOTH PROGRAMS." + 20 ? "THIS LINE IS ALSO IN BOTH." ++25 ? "THIS LINE ONLY IN B.BAS!" + 30 END +.ft P +.fi  .UNINDENT +.UNINDENT +.SH EXIT STATUS +.sp +0 for success. On failure, the exit status is that of whichever command +failed (\fBlistbas\fP or \fBdiff\fP).  .SH COPYRIGHT  .sp  WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. @@ -92,32 +92,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. diff --git a/diffbas.rst b/diffbas.rst new file mode 100644 index 0000000..0fd94c0 --- /dev/null +++ b/diffbas.rst @@ -0,0 +1,57 @@ +======= +diffbas +======= + +-------------------------------------------------------------- +Show differences between two tokenized Atari 8-bit BASIC files +-------------------------------------------------------------- + +.. include:: manhdr.rst + +SYNOPSIS +======== + +diffbas [*diff-options*] [**--** *listbas-options*] *file1* *file2* + +DESCRIPTION +=========== +**diffbas** shows the differences between two tokenized (SAVEd) +Atari BASIC programs, using **listbas**\(1) and **diff**\(1). + +OPTIONS +======= +**diffbas** takes no options of its own. It will pass options as-is +to both **listbas** and **diff**. Use **--** to separate them: everything +before **--** is passed to **diff**, and everything between **--** and +the first filename is passed to **listbas**. + +COLOR +===== +By default, the output is colorized by **listbas**. If you want to use +**diff**\'s **--color** option, you should use **-n** as a **listbas** +option. Color diffs are most useful with **-u** (unified diff format), +so the command would look like:: + +  $ diffbas -u --color -- -n A.BAS B.BAS + +EXAMPLE +======= + +:: + +  $ diffbas -u A.BAS B.BAS + +  --- A.BAS.lst	2024-07-12 23:56:46.937965855 -0400 +  +++ B.BAS.lst	2024-07-12 23:56:46.938965854 -0400 +  @@ -1,3 +1,4 @@ +   10 ? "THIS LINE IS IN BOTH PROGRAMS." +   20 ? "THIS LINE IS ALSO IN BOTH." +  +25 ? "THIS LINE ONLY IN B.BAS!" +   30 END  + +EXIT STATUS +=========== +0 for success. On failure, the exit status is that of whichever command +failed (**listbas** or **diff**). + +.. include:: manftr.rst @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "DUMPBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "DUMPBAS" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  dumpbas \- Formatted hexdump for tokenized Atari 8-bit BASIC files  .SH SYNOPSIS @@ -204,32 +204,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. diff --git a/fauxtari.7 b/fauxtari.7 new file mode 100644 index 0000000..3300496 --- /dev/null +++ b/fauxtari.7 @@ -0,0 +1,346 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "FAUXTARI" 7 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +fauxtari \- Atari 8-bit-based font for Linux console and X11/Wayland/Mac/Windows +.SH DESCRIPTION +.sp +\fBfauxtari\fP is a set of monospaced bitmap fonts for use with the +Linux console or graphical environments such as X11. Most of the +glyphs are taken from the Atari XL/XE ROM font; see \fBGLYPHS\fP, below. +.sp +Three font formats are provided: \fBpsf\fP, for use with the console; +\fBbdf\fP, for use with "old\-school" X11 apps such as \fBxterm\fP(1); +and \fBttf\fP for use with modern X11/Wayland/Mac/Windows apps. +.SH APPEARANCE +.sp +The console (\fBpsf\fP files) and X11 (\fBbdf\fP files) fonts each come +in 3 sizes: 8x8 (original size), 16x16 (scaled 2x), and 24x24 (scaled +3x). The scaling has no interpolation or antialiasing, so the larger +fonts have a blocky "retro" look. +.sp +The appearance of the font is also vertically squashed, since it was +designed for non\-square pixels (NTSC and PAL "pixels" are slightly +taller than they are wide). This allows you to fit a \fIlot\fP of text +on the screen, in the console or with a fullscreen X terminal: +.TS +center; +|l|l|l|. +_ +T{ +Font Size +T}	T{ +Display Size +T}	T{ +Characters +T} +_ +T{ +8x8 +T}	T{ +1280x1024 +T}	T{ +160x128 +T} +_ +T{ +8x8 +T}	T{ +1920x1080 +T}	T{ +240x135 +T} +_ +T{ +8x8 +T}	T{ +3840x2160 +T}	T{ +480x270 +T} +_ +T{ +16x16 +T}	T{ +1280x1024 +T}	T{ +80x64 +T} +_ +T{ +16x16 +T}	T{ +1920x1080 +T}	T{ +120x67 +T} +_ +T{ +16x16 +T}	T{ +3840x2160 +T}	T{ +240x135 +T} +_ +T{ +24x24 +T}	T{ +1280x1024 +T}	T{ +53x42 +T} +_ +T{ +24x24 +T}	T{ +1920x1080 +T}	T{ +80x45 +T} +_ +T{ +24x24 +T}	T{ +3840x2160 +T}	T{ +160x90 +T} +_ +.TE +.sp +Of course, the smaller font sizes might be too small to read, especially +on smaller displays. +.sp +The TrueType font is scalable, but always retains the pixelated look. +.SH CONSOLE +.sp +If the \fBpsf\fP fonts have been installed to the standard console font +directory (usually \fB/usr/share/kbd/consolefonts/\fP; this is done by +\fBmake install\fP when \fBbw\-atari8\-tools\fP is built), you can use e.g.: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +setfont fauxtari\-16 +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +Replace the 16 with 8 or 24, for the other sizes. For Slackware Linux, +you can make this the default in \fB/etc/rc.d/rc.font\fP, or just put it +in \fB/etc/rc.d/rc.local\fP\&. Other Linux distributions will have their +own ways to set this up (especially systemd\-based ones). +.SH X11/ETC +.SS TTF (scalable) +.sp +The scalable font is called \fBFauxtari Scalable Mono\fP, and should be +selectable from graphical applications that allow choosing the font. +You may also see \fBFauxtari Fixed Mono\fP in the list; this is the \fBbdf\fP +font. +.sp +It can also be used in \fBurxvt\fP and \fBxterm\fP (provided \fBxterm\fP +was built with support for TTF fonts): +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +urxvt \-fn \(aqxft:Fauxtari Scalable Mono:pixelsize=16\(aq + +xterm \-fa \(aqFauxtari Scalable Mono\(aq \-fs 16 +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +The font can be scaled to any size, though it will look best if you +stick with multiples of 8 pixels. +.sp +The scalable font should also work on Wayland, Macintosh, or Windows +systems, though this hasn\(aqt been tested. +.SS BDF (non\-scalable) +.sp +If the \fBbdf\fP fonts have been installed (via \fBmake install\fP when +\fBbw\-atari8\-tools\fP is built), you should be able to launch a terminal +via: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +xterm \-fn fauxtari\-16 +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +Replace the 16 with 8 or 24, for the other sizes. These names are +aliases (added to \fBfonts.alias\fP in the font directory); the full +names are: +.INDENT 0.0 +.IP \(bu 2 +\-bw\-fauxtari fixed mono\-medium\-r\-normal\-\-8\-80\-75\-75\-c\-80\-iso10646\-1 +.IP \(bu 2 +\-bw\-fauxtari fixed mono\-medium\-r\-normal\-\-16\-160\-75\-75\-c\-160\-iso10646\-1 +.IP \(bu 2 +\-bw\-fauxtari fixed mono\-medium\-r\-normal\-\-24\-240\-75\-75\-c\-240\-iso10646\-1 +.UNINDENT +.sp +For \fBurxvt\fP(1), you might have to turn off the \fBboldFont\fP resource (set +it to an empty string), or run it as: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +urxvt \-fn fauxtari\-16 \-fb "" +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +This keeps \fBurxvt\fP from using some other font (from its built\-in +list, or from your \fBURxvt.font\fP resource) for bold characters. +.sp +For \fBst\fP from suckless.org, run: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +st \-f fauxtari\-16 +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +It\(aqs possible to use the fonts with \fBrxvt\fP, but since \fBrxvt\fP +doesn\(aqt support Unicode, it won\(aqt be all that useful except for plain +ASCII text. Why are you still using \fBrxvt\fP, anyway? +.SH GLYPHS +.sp +All 3 sizes contain the same set of glyphs. These include: +.INDENT 0.0 +.IP \(bu 2 +Printable ASCII. Complete. Mostly taken from the Atari 800XL ROM +($E000 area), except the \fB~\fP \fB{\fP \fB}\fP \fB\(ga\fP characters which are +missing from the Atari\(aqs character set (these were hand\-drawn by the +author). +.IP \(bu 2 +Unicode mappings for ATASCII graphics characters. Complete set. These +work well with \fBlistbas\fP(1), \fBa8cat\fP(1), and \fBa8xd\fP(1). The glyphs +are taken from the 800XL ROM. +.IP \(bu 2 +The XL International Character set (umlauted/accented letters, plus +the \fB¡\fP character and the British pound sign), taken from the 800XL ROM +($CC00 area). +.IP \(bu 2 +Arabic, taken from Atari\(aqs Arabic model of the 65XE. Only the +isolated and terminal letter forms are included, but these are +also mapped to the Unicode codepoints for the initial and medial forms. +Hopefully this results in readable Arabic text. The creator of +\fBfauxtari\fP can\(aqt read Arabic at all and doesn\(aqt know anyone who +can, so some of the character mappings may be wrong. +.IP \(bu 2 +Hebrew glyphs, the complete aleph\-bet, taken from the Hebrew ROM +modification that was available for sale in Israel in the early 1980s. +I\(aqm almost 100% certain this was a 3rd\-party product, not made by Atari. +.IP \(bu 2 +Polish accented letters, taken from a Polish XL ROM found on the Web +at some point. No idea who created this or whether it was homebrew or +commercial. +.IP \(bu 2 +A few extra Latin\-1 characters, hand\-drawn by the author. These include +Spanish punctuation (quotation marks, inverted question mark), the +copyright symbol, and the Euro currency sign. +.IP \(bu 2 +TODO: Commodore 64 graphics characters. +.UNINDENT +.SH LIMITATIONS +.INDENT 0.0 +.IP \(bu 2 +There should be more glyphs; at least Unicode Latin\-1 should have complete +coverage. Some of them (e.g. fractions) will be hard to do in 8x8 character +cells... +.IP \(bu 2 +There are no true descenders, since the Atari ROM character set doesn\(aqt use them. +Someday I may add hand\-hacked true descender versions of the fonts. +.UNINDENT +.SH COPYRIGHT +.sp +WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. +.SH AUTHOR +.INDENT 0.0 +.IP B. 3 +Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. +.UNINDENT +.SH SEE ALSO +.sp +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\fP(7). +.sp +Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference +Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. +.\" Generated by docutils manpage writer. +. diff --git a/fauxtari.rst b/fauxtari.rst new file mode 100644 index 0000000..736a9c4 --- /dev/null +++ b/fauxtari.rst @@ -0,0 +1,175 @@ +======== +fauxtari +======== + +-------------------------------------------------------------------- +Atari 8-bit-based font for Linux console and X11/Wayland/Mac/Windows +-------------------------------------------------------------------- + +.. include:: manhdr7.rst + +DESCRIPTION +=========== + +**fauxtari** is a set of monospaced bitmap fonts for use with the +Linux console or graphical environments such as X11. Most of the +glyphs are taken from the Atari XL/XE ROM font; see **GLYPHS**, below. + +Three font formats are provided: **psf**, for use with the console; +**bdf**, for use with "old-school" X11 apps such as **xterm**\(1); +and **ttf** for use with modern X11/Wayland/Mac/Windows apps. + +APPEARANCE +========== + +The console (**psf** files) and X11 (**bdf** files) fonts each come +in 3 sizes: 8x8 (original size), 16x16 (scaled 2x), and 24x24 (scaled +3x). The scaling has no interpolation or antialiasing, so the larger +fonts have a blocky "retro" look. + +The appearance of the font is also vertically squashed, since it was +designed for non-square pixels (NTSC and PAL "pixels" are slightly +taller than they are wide). This allows you to fit a *lot* of text +on the screen, in the console or with a fullscreen X terminal: + +.. csv-table:: + +  "Font Size", "Display Size", "Characters" +  "8x8", "1280x1024", "160x128" +  "8x8", "1920x1080", "240x135" +  "8x8", "3840x2160", "480x270" +  "16x16", "1280x1024", "80x64" +  "16x16", "1920x1080", "120x67" +  "16x16", "3840x2160", "240x135" +  "24x24", "1280x1024", "53x42" +  "24x24", "1920x1080", "80x45" +  "24x24", "3840x2160", "160x90" + +Of course, the smaller font sizes might be too small to read, especially +on smaller displays. + +The TrueType font is scalable, but always retains the pixelated look. + +CONSOLE +======= + +If the **psf** fonts have been installed to the standard console font +directory (usually **/usr/share/kbd/consolefonts/**; this is done by +**make install** when **bw-atari8-tools** is built), you can use e.g.:: + +  setfont fauxtari-16 + +Replace the 16 with 8 or 24, for the other sizes. For Slackware Linux, +you can make this the default in **/etc/rc.d/rc.font**, or just put it +in **/etc/rc.d/rc.local**. Other Linux distributions will have their +own ways to set this up (especially systemd-based ones). + +X11/etc +======= + +TTF (scalable) +-------------- + +The scalable font is called **Fauxtari Scalable Mono**, and should be +selectable from graphical applications that allow choosing the font. +You may also see **Fauxtari Fixed Mono** in the list; this is the **bdf** +font. + +It can also be used in **urxvt** and **xterm** (provided **xterm** +was built with support for TTF fonts):: + +  urxvt -fn 'xft:Fauxtari Scalable Mono:pixelsize=16' + +  xterm -fa 'Fauxtari Scalable Mono' -fs 16 + +The font can be scaled to any size, though it will look best if you +stick with multiples of 8 pixels. + +The scalable font should also work on Wayland, Macintosh, or Windows +systems, though this hasn't been tested. + +BDF (non-scalable) +------------------ + +If the **bdf** fonts have been installed (via **make install** when +**bw-atari8-tools** is built), you should be able to launch a terminal +via:: + +  xterm -fn fauxtari-16 + +Replace the 16 with 8 or 24, for the other sizes. These names are +aliases (added to **fonts.alias** in the font directory); the full +names are: + +- -bw-fauxtari fixed mono-medium-r-normal--8-80-75-75-c-80-iso10646-1 + +- -bw-fauxtari fixed mono-medium-r-normal--16-160-75-75-c-160-iso10646-1 + +- -bw-fauxtari fixed mono-medium-r-normal--24-240-75-75-c-240-iso10646-1 + +For **urxvt**\(1), you might have to turn off the **boldFont** resource (set +it to an empty string), or run it as:: + +  urxvt -fn fauxtari-16 -fb "" + +This keeps **urxvt** from using some other font (from its built-in +list, or from your **URxvt.font** resource) for bold characters. + +For **st** from suckless.org, run:: + +  st -f fauxtari-16 + +It's possible to use the fonts with **rxvt**, but since **rxvt** +doesn't support Unicode, it won't be all that useful except for plain +ASCII text. Why are you still using **rxvt**, anyway? + +GLYPHS +====== + +All 3 sizes contain the same set of glyphs. These include: + +- Printable ASCII. Complete. Mostly taken from the Atari 800XL ROM +  ($E000 area), except the **~** **{** **}** **`** characters which are +  missing from the Atari's character set (these were hand-drawn by the +  author). + +- Unicode mappings for ATASCII graphics characters. Complete set. These +  work well with **listbas**\(1), **a8cat**\(1), and **a8xd**\(1). The glyphs +  are taken from the 800XL ROM. + +- The XL International Character set (umlauted/accented letters, plus  +  the **¡** character and the British pound sign), taken from the 800XL ROM +  ($CC00 area). + +- Arabic, taken from Atari's Arabic model of the 65XE. Only the +  isolated and terminal letter forms are included, but these are +  also mapped to the Unicode codepoints for the initial and medial forms. +  Hopefully this results in readable Arabic text. The creator of +  **fauxtari** can't read Arabic at all and doesn't know anyone who +  can, so some of the character mappings may be wrong. + +- Hebrew glyphs, the complete aleph-bet, taken from the Hebrew ROM +  modification that was available for sale in Israel in the early 1980s. +  I'm almost 100% certain this was a 3rd-party product, not made by Atari. + +- Polish accented letters, taken from a Polish XL ROM found on the Web +  at some point. No idea who created this or whether it was homebrew or +  commercial. + +- A few extra Latin-1 characters, hand-drawn by the author. These include +  Spanish punctuation (quotation marks, inverted question mark), the +  copyright symbol, and the Euro currency sign. + +- TODO: Commodore 64 graphics characters. + +LIMITATIONS +=========== + +- There should be more glyphs; at least Unicode Latin-1 should have complete +  coverage. Some of them (e.g. fractions) will be hard to do in 8x8 character +  cells... + +- There are no true descenders, since the Atari ROM character set doesn't use them. +  Someday I may add hand-hacked true descender versions of the fonts. + +.. include:: manftr.rst @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "FENDERS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "FENDERS" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  fenders \- Install Fenders 3-sector loader in boot sectors of an ATR image  .\" RST source for fenders(1) man page. Convert with: @@ -270,32 +270,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. diff --git a/fendersdbl.dasm b/fendersdbl.dasm index cb6ea3f..23ebec7 100644 --- a/fendersdbl.dasm +++ b/fendersdbl.dasm @@ -287,18 +287,13 @@ clear_zp:     INY     BPL   clear_zp -; the "JSR try_read" below MUST be located at $087f. -; The JSR opcode is the last byte loaded in the 3-sector boot loader, -; and its operand is the first 2 bytes loaded from sector 720! - .if *<>$087f -   .echo "Code offsets have changed, fix me (", *, "should be $087f)" -   .err - .endif     JSR   try_read ; cut here!     DEX  read_segment: +   ; The JSR opcode below is the last byte in sector 3. +   ; Its operand is the first 2 bytes in sector 720.     JSR   get_next_byte     STA   dest_ptr     JSR   get_next_byte diff --git a/fonts/FauxtariScalableMono.ttf b/fonts/FauxtariScalableMono.ttf Binary files differnew file mode 100644 index 0000000..590bc3b --- /dev/null +++ b/fonts/FauxtariScalableMono.ttf diff --git a/fonts/Makefile b/fonts/Makefile new file mode 100644 index 0000000..cb1c69f --- /dev/null +++ b/fonts/Makefile @@ -0,0 +1,2 @@ +all: +	cd .. && $(MAKE) diff --git a/fonts/char0.raw b/fonts/char0.raw Binary files differnew file mode 100644 index 0000000..a699b13 --- /dev/null +++ b/fonts/char0.raw diff --git a/fonts/dupglyphs.pl b/fonts/dupglyphs.pl new file mode 100644 index 0000000..0532522 --- /dev/null +++ b/fonts/dupglyphs.pl @@ -0,0 +1,42 @@ +#!/usr/bin/perl -w + +# read a psftools .txt font, for any glyph that has multiple Unicode +# codepoints, output that glyph multiple times (one per codepoint). +# result is suitable for conversion to a BDF. + +$glyphcount = 0; + +sub dup { +	my $orig = shift; +	my $new; +	my $ret; +	my @cps = ($orig =~ /\[(\w+)\];/g); + +	for my $cp (@cps) { +		#warn ">> $cp <<\n"; +		$glyphcount++; +		($new = $orig) =~ s,(Unicode: ).*,$1\[$cp\];,; +		$ret .= $new; +	} +	return $ret; +} + +$/ = '%'; + +<>; +$header = '%' . <>; + +$zerocount = 0; +while(<>) { +	next if /\[0000\];/ && ($zerocount++); +	if(/Unicode:.*;.*;/) { +		$_ = dup($_); +	} else { +		$glyphcount++; +	} +	$output .= $_; +} + +$header =~ s/(Length:\s+)\d+/$1$glyphcount/; + +print $header . $output; diff --git a/fonts/fauxtari-16.bdf b/fonts/fauxtari-16.bdf new file mode 100644 index 0000000..8a219f0 --- /dev/null +++ b/fonts/fauxtari-16.bdf @@ -0,0 +1,9893 @@ +STARTFONT 2.1 +FONT -BW-Fauxtari Fixed Mono-Medium-R-Normal--16-160-75-75-C-160-iso10646-1 +SIZE 16 75 75 +FONTBOUNDINGBOX 16 16 0 -4 +STARTPROPERTIES 18 +FOUNDRY "BW" +FAMILY_NAME "Fauxtari Fixed Mono" +FACE_NAME "Fauxtari 16" +WEIGHT_NAME "Medium" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 16 +POINT_SIZE 160 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "C" +AVERAGE_WIDTH 160 +CHARSET_REGISTRY "iso10646" +CHARSET_ENCODING "1" +FONT_DESCENT 4 +FONT_ASCENT 12 +DEFAULT_CHAR 0 +ENDPROPERTIES +CHARS 429 +STARTCHAR C0000 +ENCODING 0 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3cfc +3cfc +3000 +3000 +000c +000c +3000 +3000 +000c +000c +3f3c +3f3c +0000 +0000 +ENDCHAR +STARTCHAR C0001 +ENCODING 32 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0002 +ENCODING 33 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0003 +ENCODING 34 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0004 +ENCODING 35 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +ffff +ffff +3c3c +3c3c +3c3c +3c3c +ffff +ffff +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C0005 +ENCODING 36 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +0ffc +0ffc +3c00 +3c00 +0ff0 +0ff0 +003c +003c +3ff0 +3ff0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0006 +ENCODING 37 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3cf0 +3cf0 +03c0 +03c0 +0f00 +0f00 +3c3c +3c3c +303c +303c +0000 +0000 +ENDCHAR +STARTCHAR C0007 +ENCODING 38 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03f0 +03f0 +0f3c +0f3c +03f0 +03f0 +0fc0 +0fc0 +3cff +3cff +3c3c +3c3c +0fcf +0fcf +0000 +0000 +ENDCHAR +STARTCHAR C0008 +ENCODING 39 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0009 +ENCODING 40 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +03f0 +03f0 +03c0 +03c0 +03c0 +03c0 +03f0 +03f0 +00fc +00fc +0000 +0000 +ENDCHAR +STARTCHAR C000a +ENCODING 41 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3f00 +3f00 +0fc0 +0fc0 +03c0 +03c0 +03c0 +03c0 +0fc0 +0fc0 +3f00 +3f00 +0000 +0000 +ENDCHAR +STARTCHAR C000b +ENCODING 42 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +0ff0 +0ff0 +ffff +ffff +0ff0 +0ff0 +3c3c +3c3c +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C000c +ENCODING 43 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +03c0 +03c0 +3ffc +3ffc +03c0 +03c0 +03c0 +03c0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C000d +ENCODING 44 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +0f00 +0f00 +ENDCHAR +STARTCHAR C000e +ENCODING 45 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +3ffc +3ffc +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C000f +ENCODING 46 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0010 +ENCODING 47 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +003c +003c +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3c00 +3c00 +3000 +3000 +0000 +0000 +ENDCHAR +STARTCHAR C0011 +ENCODING 48 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3cfc +3cfc +3f3c +3f3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0012 +ENCODING 49 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0fc0 +0fc0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0013 +ENCODING 50 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0014 +ENCODING 51 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +00f0 +00f0 +03c0 +03c0 +00f0 +00f0 +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0015 +ENCODING 52 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00f0 +00f0 +03f0 +03f0 +0ff0 +0ff0 +3cf0 +3cf0 +3ffc +3ffc +00f0 +00f0 +0000 +0000 +ENDCHAR +STARTCHAR C0016 +ENCODING 53 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +3c00 +3c00 +3ff0 +3ff0 +003c +003c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0017 +ENCODING 54 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c00 +3c00 +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0018 +ENCODING 55 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +003c +003c +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +0f00 +0f00 +0000 +0000 +ENDCHAR +STARTCHAR C0019 +ENCODING 56 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C001a +ENCODING 57 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +0ffc +0ffc +003c +003c +00f0 +00f0 +0fc0 +0fc0 +0000 +0000 +ENDCHAR +STARTCHAR C001b +ENCODING 58 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C001c +ENCODING 59 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +0f00 +0f00 +ENDCHAR +STARTCHAR C001d +ENCODING 60 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +003c +003c +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +03c0 +03c0 +00f0 +00f0 +003c +003c +0000 +0000 +ENDCHAR +STARTCHAR C001e +ENCODING 61 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3ffc +3ffc +0000 +0000 +0000 +0000 +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C001f +ENCODING 62 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +0f00 +0f00 +03c0 +03c0 +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3c00 +3c00 +0000 +0000 +ENDCHAR +STARTCHAR C0020 +ENCODING 63 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +00f0 +00f0 +03c0 +03c0 +0000 +0000 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0021 +ENCODING 64 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3cfc +3cfc +3cfc +3cfc +3c00 +3c00 +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0022 +ENCODING 65 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +3ffc +3ffc +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C0023 +ENCODING 66 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ff0 +3ff0 +3c3c +3c3c +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +3ff0 +3ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0024 +ENCODING 67 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c00 +3c00 +3c00 +3c00 +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0025 +ENCODING 68 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +3cf0 +3cf0 +3c3c +3c3c +3c3c +3c3c +3cf0 +3cf0 +3fc0 +3fc0 +0000 +0000 +ENDCHAR +STARTCHAR C0026 +ENCODING 69 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +3c00 +3c00 +3ff0 +3ff0 +3c00 +3c00 +3c00 +3c00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0027 +ENCODING 70 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +3c00 +3c00 +3ff0 +3ff0 +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +0000 +0000 +ENDCHAR +STARTCHAR C0028 +ENCODING 71 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ffc +0ffc +3c00 +3c00 +3c00 +3c00 +3cfc +3cfc +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0029 +ENCODING 72 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3ffc +3ffc +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C002a +ENCODING 73 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C002b +ENCODING 74 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +003c +003c +003c +003c +003c +003c +003c +003c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C002c +ENCODING 75 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3cf0 +3cf0 +3fc0 +3fc0 +3fc0 +3fc0 +3cf0 +3cf0 +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C002d +ENCODING 76 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C002e +ENCODING 77 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c0f +3c0f +3f3f +3f3f +3fff +3fff +3ccf +3ccf +3c0f +3c0f +3c0f +3c0f +0000 +0000 +ENDCHAR +STARTCHAR C002f +ENCODING 78 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3f3c +3f3c +3ffc +3ffc +3ffc +3ffc +3cfc +3cfc +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C0030 +ENCODING 79 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0031 +ENCODING 80 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +3ff0 +3ff0 +3c00 +3c00 +3c00 +3c00 +0000 +0000 +ENDCHAR +STARTCHAR C0032 +ENCODING 81 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3cf0 +3cf0 +0f3c +0f3c +0000 +0000 +ENDCHAR +STARTCHAR C0033 +ENCODING 82 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +3ff0 +3ff0 +3cf0 +3cf0 +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C0034 +ENCODING 83 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c00 +3c00 +0ff0 +0ff0 +003c +003c +003c +003c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0035 +ENCODING 84 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0036 +ENCODING 85 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0037 +ENCODING 86 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0038 +ENCODING 87 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c0f +3c0f +3c0f +3c0f +3ccf +3ccf +3fff +3fff +3f3f +3f3f +3c0f +3c0f +0000 +0000 +ENDCHAR +STARTCHAR C0039 +ENCODING 88 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C003a +ENCODING 89 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C003b +ENCODING 90 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3c00 +3c00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C003c +ENCODING 91 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03fc +03fc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03fc +03fc +0000 +0000 +ENDCHAR +STARTCHAR C003d +ENCODING 92 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3000 +3000 +3c00 +3c00 +0f00 +0f00 +03c0 +03c0 +00f0 +00f0 +003c +003c +0000 +0000 +ENDCHAR +STARTCHAR C003e +ENCODING 93 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +3fc0 +3fc0 +0000 +0000 +ENDCHAR +STARTCHAR C003f +ENCODING 94 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00c0 +00c0 +03f0 +03f0 +0f3c +0f3c +3c0f +3c0f +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0040 +ENCODING 95 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ffff +ffff +0000 +0000 +ENDCHAR +STARTCHAR C0041 +ENCODING 96 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f00 +0f00 +0f00 +0f00 +03c0 +03c0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0042 +ENCODING 97 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ff0 +0ff0 +003c +003c +0ffc +0ffc +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0043 +ENCODING 98 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c00 +3c00 +3c00 +3c00 +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +3ff0 +3ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0044 +ENCODING 99 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ff0 +0ff0 +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0045 +ENCODING 100 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +003c +003c +003c +003c +0ffc +0ffc +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0046 +ENCODING 101 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c00 +3c00 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0047 +ENCODING 102 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +03c0 +03c0 +0ffc +0ffc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0048 +ENCODING 103 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ffc +0ffc +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0049 +ENCODING 104 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c00 +3c00 +3c00 +3c00 +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C004a +ENCODING 105 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0000 +0000 +0fc0 +0fc0 +03c0 +03c0 +03c0 +03c0 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C004b +ENCODING 106 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +003c +003c +0000 +0000 +003c +003c +003c +003c +003c +003c +003c +003c +0ff0 +0ff0 +ENDCHAR +STARTCHAR C004c +ENCODING 107 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c00 +3c00 +3c00 +3c00 +3cf0 +3cf0 +3fc0 +3fc0 +3cf0 +3cf0 +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C004d +ENCODING 108 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0fc0 +0fc0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C004e +ENCODING 109 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3c3c +3c3c +3fff +3fff +3fff +3fff +3ccf +3ccf +3c0f +3c0f +0000 +0000 +ENDCHAR +STARTCHAR C004f +ENCODING 110 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C0050 +ENCODING 111 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0051 +ENCODING 112 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +3ff0 +3ff0 +3c00 +3c00 +3c00 +3c00 +ENDCHAR +STARTCHAR C0052 +ENCODING 113 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ffc +0ffc +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +003c +003c +003c +003c +ENDCHAR +STARTCHAR C0053 +ENCODING 114 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3ff0 +3ff0 +3c3c +3c3c +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +0000 +0000 +ENDCHAR +STARTCHAR C0054 +ENCODING 115 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ffc +0ffc +3c00 +3c00 +0ff0 +0ff0 +003c +003c +3ff0 +3ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0055 +ENCODING 116 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +3ffc +3ffc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +00fc +00fc +0000 +0000 +ENDCHAR +STARTCHAR C0056 +ENCODING 117 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0057 +ENCODING 118 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0058 +ENCODING 119 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3c0f +3c0f +3ccf +3ccf +3fff +3fff +0ffc +0ffc +0f3c +0f3c +0000 +0000 +ENDCHAR +STARTCHAR C0059 +ENCODING 120 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3c3c +3c3c +0ff0 +0ff0 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C005a +ENCODING 121 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +00f0 +00f0 +3fc0 +3fc0 +ENDCHAR +STARTCHAR C005b +ENCODING 122 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3ffc +3ffc +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C005c +ENCODING 123 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +03c0 +03c0 +0f00 +0f00 +03c0 +03c0 +03c0 +03c0 +00f0 +00f0 +0000 +0000 +ENDCHAR +STARTCHAR C005d +ENCODING 124 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C005e +ENCODING 125 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +03c0 +03c0 +03c0 +03c0 +00f0 +00f0 +03c0 +03c0 +03c0 +03c0 +0f00 +0f00 +0000 +0000 +ENDCHAR +STARTCHAR C005f +ENCODING 126 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3f0f +3f0f +f3cf +f3cf +f0fc +f0fc +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0060 +ENCODING 160 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0061 +ENCODING 161 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0062 +ENCODING 162 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0ffc +0ffc +3c00 +3c00 +3c00 +3c00 +0ffc +0ffc +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0063 +ENCODING 163 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03f0 +03f0 +0f00 +0f00 +0f00 +0f00 +3fc0 +3fc0 +0f00 +0f00 +0f00 +0f00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0064 +ENCODING 164 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +300c +300c +0ff0 +0ff0 +0c30 +0c30 +0c30 +0c30 +0ff0 +0ff0 +300c +300c +0000 +0000 +ENDCHAR +STARTCHAR C0065 +ENCODING 165 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c3c +3c3c +3c3c +3c3c +03c0 +03c0 +3ffc +3ffc +03c0 +03c0 +3ffc +3ffc +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0066 +ENCODING 166 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0067 +ENCODING 167 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03f0 +03f0 +0c00 +0c00 +03c0 +03c0 +0c30 +0c30 +03c0 +03c0 +0030 +0030 +0fc0 +0fc0 +0000 +0000 +ENDCHAR +STARTCHAR C0068 +ENCODING 168 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0069 +ENCODING 169 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3ff0 +3ff0 +c00c +c00c +c3cc +c3cc +cc0c +cc0c +c3cc +c3cc +c00c +c00c +3ff0 +3ff0 +0000 +0000 +ENDCHAR +STARTCHAR C006a +ENCODING 170 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +00fc +00fc +0f3c +0f3c +03fc +03fc +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C006b +ENCODING 171 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +3c3c +3c3c +f0f0 +f0f0 +3c3c +3c3c +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C006c +ENCODING 172 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +3ffc +3ffc +003c +003c +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C006d +ENCODING 173 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +3ffc +3ffc +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C006e +ENCODING 174 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3ff0 +3ff0 +c00c +c00c +cf0c +cf0c +cccc +cccc +cf0c +cf0c +cccc +cccc +3ff0 +3ff0 +0000 +0000 +ENDCHAR +STARTCHAR C006f +ENCODING 175 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0070 +ENCODING 176 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0c30 +0c30 +03c0 +03c0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0071 +ENCODING 177 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +3ffc +3ffc +03c0 +03c0 +0000 +0000 +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0072 +ENCODING 178 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f00 +0f00 +30c0 +30c0 +0300 +0300 +0c00 +0c00 +3fc0 +3fc0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0073 +ENCODING 179 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f00 +0f00 +30c0 +30c0 +0300 +0300 +30c0 +30c0 +0f00 +0f00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0074 +ENCODING 180 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00f0 +00f0 +03c0 +03c0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0075 +ENCODING 181 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +003c +003c +0000 +0000 +ENDCHAR +STARTCHAR C0076 +ENCODING 182 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f3c +0f3c +3f3c +3f3c +3f3c +3f3c +0f3c +0f3c +033c +033c +033c +033c +0000 +0000 +ENDCHAR +STARTCHAR C0077 +ENCODING 183 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0078 +ENCODING 184 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +03c0 +03c0 +03c0 +03c0 +0f00 +0f00 +ENDCHAR +STARTCHAR C0079 +ENCODING 185 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0fc0 +0fc0 +03c0 +03c0 +0ff0 +0ff0 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C007a +ENCODING 186 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0c30 +0c30 +03c0 +03c0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C007b +ENCODING 187 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +f0f0 +f0f0 +3c3c +3c3c +f0f0 +f0f0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C007c +ENCODING 191 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0000 +0000 +03c0 +03c0 +00f0 +00f0 +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C007d +ENCODING 192 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f00 +0f00 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C007e +ENCODING 193 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00f0 +00f0 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C007f +ENCODING 194 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +300c +300c +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C0080 +ENCODING 195 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +3cf0 +3cf0 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C0081 +ENCODING 196 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c3c +3c3c +3c3c +3c3c +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C0082 +ENCODING 197 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +0c30 +0c30 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C0083 +ENCODING 198 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ffc +0ffc +3fc0 +3fc0 +f3c0 +f3c0 +fffc +fffc +f3c0 +f3c0 +f3fc +f3fc +0000 +0000 +ENDCHAR +STARTCHAR C0084 +ENCODING 199 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c00 +3c00 +3c3c +3c3c +0ff0 +0ff0 +03c0 +03c0 +0f00 +0f00 +ENDCHAR +STARTCHAR C0085 +ENCODING 201 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +3ffc +3ffc +3c00 +3c00 +3ff0 +3ff0 +3c00 +3c00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0086 +ENCODING 202 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +300c +300c +3ffc +3ffc +3c00 +3c00 +3ff0 +3ff0 +3c00 +3c00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0087 +ENCODING 203 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +0000 +0000 +3ffc +3ffc +3c00 +3c00 +3ff0 +3ff0 +3c00 +3c00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0088 +ENCODING 204 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +03c0 +03c0 +3ffc +3ffc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0089 +ENCODING 205 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +3ffc +3ffc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C008a +ENCODING 206 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +300c +300c +3ffc +3ffc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C008b +ENCODING 207 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +0000 +0000 +3ffc +3ffc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C008c +ENCODING 208 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +3cf0 +3cf0 +3c3c +3c3c +ff3c +ff3c +3cf0 +3cf0 +3fc0 +3fc0 +0000 +0000 +ENDCHAR +STARTCHAR C008d +ENCODING 209 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +3cf0 +3cf0 +0000 +0000 +3f3c +3f3c +3f3c +3f3c +3ffc +3ffc +3cfc +3cfc +0000 +0000 +ENDCHAR +STARTCHAR C008e +ENCODING 210 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +0ff0 +0ff0 +333c +333c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C008f +ENCODING 211 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +003c +003c +0ff0 +0ff0 +3ccc +3ccc +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0090 +ENCODING 214 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c3c +3c3c +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0091 +ENCODING 215 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +0ff0 +0ff0 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0092 +ENCODING 217 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +03c0 +03c0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0093 +ENCODING 218 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0094 +ENCODING 220 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c3c +3c3c +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C0095 +ENCODING 221 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0096 +ENCODING 222 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c00 +3c00 +3ff0 +3ff0 +3c3c +3c3c +3ff0 +3ff0 +3c00 +3c00 +3c00 +3c00 +0000 +0000 +ENDCHAR +STARTCHAR C0097 +ENCODING 223 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03f0 +03f0 +0f3c +0f3c +0ff0 +0ff0 +0f3c +0f3c +0f3f +0f3f +0ffc +0ffc +3c00 +3c00 +ENDCHAR +STARTCHAR C0098 +ENCODING 224 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +03c0 +03c0 +0ff0 +0ff0 +003c +003c +0ffc +0ffc +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0099 +ENCODING 225 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +0ff0 +0ff0 +003c +003c +0ffc +0ffc +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C009a +ENCODING 226 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +300c +300c +0000 +0000 +0ff0 +0ff0 +00fc +00fc +0f3c +0f3c +03fc +03fc +0000 +0000 +ENDCHAR +STARTCHAR C009b +ENCODING 227 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +3cf0 +3cf0 +0000 +0000 +0ff0 +0ff0 +00fc +00fc +0f3c +0f3c +03fc +03fc +0000 +0000 +ENDCHAR +STARTCHAR C009c +ENCODING 228 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +0000 +0000 +0ff0 +0ff0 +003c +003c +0ffc +0ffc +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C009d +ENCODING 229 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +3c3c +3c3c +03f0 +03f0 +003c +003c +0ffc +0ffc +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C009e +ENCODING 230 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3f3c +3f3c +03cf +03cf +3ffc +3ffc +f3c0 +f3c0 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C009f +ENCODING 231 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ff0 +0ff0 +3c00 +3c00 +3c00 +3c00 +0ff0 +0ff0 +03c0 +03c0 +0f00 +0f00 +ENDCHAR +STARTCHAR C00a0 +ENCODING 232 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c00 +3c00 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00a1 +ENCODING 233 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c00 +3c00 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00a2 +ENCODING 234 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +f00f +f00f +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c00 +3c00 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00a3 +ENCODING 235 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c3c +3c3c +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c00 +3c00 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00a4 +ENCODING 236 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +03c0 +03c0 +0000 +0000 +0fc0 +0fc0 +03c0 +03c0 +03c0 +03c0 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00a5 +ENCODING 237 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +0000 +0000 +0fc0 +0fc0 +03c0 +03c0 +03c0 +03c0 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00a6 +ENCODING 238 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +3c3c +3c3c +0000 +0000 +0fc0 +0fc0 +03c0 +03c0 +03c0 +03c0 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00a7 +ENCODING 239 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +0000 +0000 +0fc0 +0fc0 +03c0 +03c0 +03c0 +03c0 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00a8 +ENCODING 240 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3cc0 +3cc0 +0f00 +0f00 +33c0 +33c0 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00a9 +ENCODING 241 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +3cf0 +3cf0 +0000 +0000 +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C00aa +ENCODING 242 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +03c0 +03c0 +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00ab +ENCODING 243 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00ac +ENCODING 244 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +3c3c +3c3c +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00ad +ENCODING 245 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +3cf0 +3cf0 +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00ae +ENCODING 246 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00af +ENCODING 247 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0000 +0000 +3ffc +3ffc +0000 +0000 +03c0 +03c0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00b0 +ENCODING 249 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +03c0 +03c0 +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C00b1 +ENCODING 250 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C00b2 +ENCODING 251 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +3c3c +3c3c +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C00b3 +ENCODING 252 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C00b4 +ENCODING 253 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +0000 +0000 +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +00f0 +00f0 +3fc0 +3fc0 +ENDCHAR +STARTCHAR C00b5 +ENCODING 254 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +3c00 +3c00 +3fc0 +3fc0 +3cf0 +3cf0 +3fc0 +3fc0 +3c00 +3c00 +3c00 +3c00 +0000 +0000 +ENDCHAR +STARTCHAR C00b6 +ENCODING 255 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c3c +3c3c +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ffc +0ffc +00f0 +00f0 +3fc0 +3fc0 +ENDCHAR +STARTCHAR C00b7 +ENCODING 260 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +3ffc +3ffc +3c3c +3c3c +000f +000f +ENDCHAR +STARTCHAR C00b8 +ENCODING 261 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ff0 +0ff0 +003c +003c +0ffc +0ffc +3c3c +3c3c +0ffc +0ffc +000f +000f +ENDCHAR +STARTCHAR C00b9 +ENCODING 262 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +0ff0 +0ff0 +3cfc +3cfc +3c00 +3c00 +3c00 +3c00 +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C00ba +ENCODING 263 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +0ff0 +0ff0 +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00bb +ENCODING 280 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3fc0 +3fc0 +3c00 +3c00 +3fc0 +3fc0 +3c00 +3c00 +3ffc +3ffc +03c0 +03c0 +03fc +03fc +0000 +0000 +ENDCHAR +STARTCHAR C00bc +ENCODING 281 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3ffc +3ffc +3c00 +3c00 +0ff0 +0ff0 +003c +003c +ENDCHAR +STARTCHAR C00bd +ENCODING 321 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c00 +3c00 +3c00 +3c00 +3fc0 +3fc0 +3f00 +3f00 +fc00 +fc00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C00be +ENCODING 322 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0fc0 +0fc0 +03c0 +03c0 +03f0 +03f0 +0fc0 +0fc0 +03c0 +03c0 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00bf +ENCODING 323 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +33cc +33cc +3c3c +3c3c +3ffc +3ffc +3ffc +3ffc +3cfc +3cfc +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C00c0 +ENCODING 324 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +3ff0 +3ff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0000 +0000 +ENDCHAR +STARTCHAR C00c1 +ENCODING 346 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +0ff0 +0ff0 +3c00 +3c00 +0ff0 +0ff0 +003c +003c +003c +003c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00c2 +ENCODING 347 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +0ffc +0ffc +3c00 +3c00 +0ff0 +0ff0 +003c +003c +3ff0 +3ff0 +0000 +0000 +ENDCHAR +STARTCHAR C00c3 +ENCODING 377 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +3ffc +3ffc +0f3c +0f3c +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C00c4 +ENCODING 378 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +03c0 +03c0 +3ffc +3ffc +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C00c5 +ENCODING 379 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +3ffc +3ffc +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3c00 +3c00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C00c6 +ENCODING 380 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +0000 +0000 +3ffc +3ffc +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C00c7 +ENCODING 551 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +0000 +0000 +0ff0 +0ff0 +003c +003c +0ffc +0ffc +3c3c +3c3c +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C00c8 +ENCODING 1488 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +f03c +f03c +ff3c +ff3c +f3fc +f3fc +f0f0 +f0f0 +f03c +f03c +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00c9 +ENCODING 1489 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +ffc0 +ffc0 +03f0 +03f0 +00f0 +00f0 +00f0 +00f0 +fffc +fffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00ca +ENCODING 1490 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +00f0 +00f0 +00f0 +00f0 +3ff0 +3ff0 +fc3c +fc3c +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00cb +ENCODING 1491 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fffc +fffc +03f0 +03f0 +00f0 +00f0 +00f0 +00f0 +00f0 +00f0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00cc +ENCODING 1492 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +003c +003c +303c +303c +3c3c +3c3c +3c3c +3c3c +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00cd +ENCODING 1493 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +03f0 +03f0 +00f0 +00f0 +00f0 +00f0 +00f0 +00f0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00ce +ENCODING 1494 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +3f00 +3f00 +0f00 +0f00 +0f00 +0f00 +0f00 +0f00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00cf +ENCODING 1495 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00d0 +ENCODING 1496 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +f3fc +f3fc +f33c +f33c +f03c +f03c +f03c +f03c +fff0 +fff0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00d1 +ENCODING 1497 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ff0 +3ff0 +03f0 +03f0 +00f0 +00f0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00d2 +ENCODING 1498 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +00fc +00fc +003c +003c +003c +003c +003c +003c +003c +003c +003c +003c +ENDCHAR +STARTCHAR C00d3 +ENCODING 1499 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +003c +003c +003c +003c +00fc +00fc +fff0 +fff0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00d4 +ENCODING 1500 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +f000 +f000 +fff0 +fff0 +003c +003c +003c +003c +00fc +00fc +0ff0 +0ff0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00d5 +ENCODING 1501 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00d6 +ENCODING 1502 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +f3f0 +f3f0 +3f3c +3f3c +3c3c +3c3c +3c3c +3c3c +3cfc +3cfc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00d7 +ENCODING 1503 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03fc +03fc +00fc +00fc +003c +003c +003c +003c +003c +003c +003c +003c +003c +003c +ENDCHAR +STARTCHAR C00d8 +ENCODING 1504 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03fc +03fc +003c +003c +003c +003c +00fc +00fc +3ff0 +3ff0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00d9 +ENCODING 1505 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fffc +fffc +3c3c +3c3c +3c3c +3c3c +3cf0 +3cf0 +3fc0 +3fc0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00da +ENCODING 1506 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fcfc +fcfc +3c3c +3c3c +0f3c +0f3c +0f3c +0f3c +fff0 +fff0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00db +ENCODING 1507 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +3cfc +3cfc +3c3c +3c3c +003c +003c +003c +003c +003c +003c +003c +003c +ENDCHAR +STARTCHAR C00dc +ENCODING 1508 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +3c3c +3c3c +3c3c +3c3c +00fc +00fc +fff0 +fff0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00dd +ENCODING 1509 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +f0fc +f0fc +3c3c +3c3c +3cf0 +3cf0 +3fc0 +3fc0 +3c00 +3c00 +3c00 +3c00 +3c00 +3c00 +ENDCHAR +STARTCHAR C00de +ENCODING 1510 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +f03c +f03c +3cfc +3cfc +0fc0 +0fc0 +00f0 +00f0 +fffc +fffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00df +ENCODING 1511 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +00fc +00fc +f03c +f03c +f0f0 +f0f0 +f3c0 +f3c0 +f000 +f000 +f000 +f000 +ENDCHAR +STARTCHAR C00e0 +ENCODING 1512 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +00fc +00fc +003c +003c +003c +003c +003c +003c +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00e1 +ENCODING 1513 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +c30c +c30c +f30c +f30c +fc3c +fc3c +f0f0 +f0f0 +fff0 +fff0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00e2 +ENCODING 1514 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +fff0 +fff0 +3cfc +3cfc +3c3c +3c3c +3c3c +3c3c +fc3c +fc3c +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00e3 +ENCODING 1567 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +0f00 +0f00 +03c0 +03c0 +0000 +0000 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C00e4 +ENCODING 1569 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +03f0 +03f0 +0f00 +0f00 +03f0 +03f0 +0fc0 +0fc0 +0c00 +0c00 +0000 +0000 +ENDCHAR +STARTCHAR C00e5 +ENCODING 1570 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C00e6 +ENCODING 1572 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c00 +3c00 +f0ff +f0ff +03cf +03cf +00ff +00ff +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C00e7 +ENCODING 1575 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00e8 +ENCODING 1576 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +03c0 +03c0 +ENDCHAR +STARTCHAR C00e9 +ENCODING 1577 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03cf +03cf +0000 +0000 +00ff +00ff +03cf +03cf +03cf +03cf +03ff +03ff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00ea +ENCODING 1578 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f3c +0f3c +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00eb +ENCODING 1579 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +3c3c +3c3c +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00ec +ENCODING 1580 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c00 +3c00 +3c0f +3c0f +0fc0 +0fc0 +ENDCHAR +STARTCHAR C00ed +ENCODING 1581 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c03 +3c03 +3c00 +3c00 +0ff0 +0ff0 +ENDCHAR +STARTCHAR C00ee +ENCODING 1582 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c03 +3c03 +3c00 +3c00 +0ff0 +0ff0 +ENDCHAR +STARTCHAR C00ef +ENCODING 1583 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +003c +003c +000f +000f +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C00f0 +ENCODING 1584 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +0000 +0000 +00f0 +00f0 +003c +003c +000f +000f +000f +000f +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C00f1 +ENCODING 1585 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +003c +003c +000f +000f +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C00f2 +ENCODING 1586 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +000f +000f +0000 +0000 +003c +003c +000f +000f +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C00f3 +ENCODING 1587 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +c333 +c333 +c333 +c333 +c3ff +c3ff +c3fc +c3fc +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C00f4 +ENCODING 1588 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +0f0f +0f0f +0000 +0000 +c333 +c333 +c333 +c333 +c3ff +c3ff +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C00f5 +ENCODING 1589 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +c3c3 +c3c3 +c303 +c303 +c3ff +c3ff +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C00f6 +ENCODING 1590 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +0000 +0000 +00ff +00ff +c3c3 +c3c3 +c303 +c303 +c3ff +c3ff +ffc0 +ffc0 +3f00 +3f00 +ENDCHAR +STARTCHAR C00f7 +ENCODING 1591 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00f8 +ENCODING 1592 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3cf0 +3cf0 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00f9 +ENCODING 1593 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +03c0 +03c0 +03c0 +03c0 +0fff +0fff +3c03 +3c03 +3f00 +3f00 +0ffc +0ffc +ENDCHAR +STARTCHAR C00fa +ENCODING 1594 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +00fc +00fc +03c0 +03c0 +03c0 +03c0 +0fff +0fff +3c03 +3c03 +3f00 +3f00 +0ffc +0ffc +ENDCHAR +STARTCHAR C00fb +ENCODING 1601 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f00 +0f00 +003f +003f +f0f3 +f0f3 +f03f +f03f +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C00fc +ENCODING 1602 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +0000 +0000 +003f +003f +30f3 +30f3 +f03f +f03f +f00f +f00f +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C00fd +ENCODING 1603 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +0f0f +0f0f +0c0f +0c0f +3f0f +3f0f +000f +000f +c00f +c00f +fffc +fffc +0000 +0000 +ENDCHAR +STARTCHAR C00fe +ENCODING 1604 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +000f +000f +000f +000f +000f +000f +3c0f +3c0f +3c0f +3c0f +3c0f +3c0f +0ffc +0ffc +ENDCHAR +STARTCHAR C00ff +ENCODING 1605 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +003c +003c +03ff +03ff +0ff3 +0ff3 +3c3f +3c3f +3c0f +3c0f +3c00 +3c00 +3c00 +3c00 +ENDCHAR +STARTCHAR C0100 +ENCODING 1606 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0000 +0000 +0c0c +0c0c +3c0f +3c0f +3c0f +3c0f +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0101 +ENCODING 1607 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +03cf +03cf +03cf +03cf +03ff +03ff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0102 +ENCODING 1608 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +03cf +03cf +03ff +03ff +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0103 +ENCODING 1609 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00fc +00fc +f3cf +f3cf +f3c3 +f3c3 +f0f3 +f0f3 +f0f0 +f0f0 +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0104 +ENCODING 1610 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +c3ff +c3ff +c3c3 +c3c3 +f0f3 +f0f3 +3ff3 +3ff3 +0000 +0000 +0f3c +0f3c +ENDCHAR +STARTCHAR C0105 +ENCODING 1632 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +003c +003c +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +3c00 +3c00 +3000 +3000 +0000 +0000 +ENDCHAR +STARTCHAR C0106 +ENCODING 1633 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00c0 +00c0 +03f0 +03f0 +0ffc +0ffc +03f0 +03f0 +00c0 +00c0 +0000 +0000 +ENDCHAR +STARTCHAR C0107 +ENCODING 1634 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C0108 +ENCODING 1635 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0ff0 +0ff0 +3c3c +3c3c +3c00 +3c00 +0f00 +0f00 +03c0 +03c0 +00f0 +00f0 +003c +003c +ENDCHAR +STARTCHAR C0109 +ENCODING 1636 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ccf +3ccf +3ccf +3ccf +3fff +3fff +3f00 +3f00 +0f00 +0f00 +0fc0 +0fc0 +03c0 +03c0 +ENDCHAR +STARTCHAR C010a +ENCODING 1637 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03fc +03fc +0fc0 +0fc0 +3f00 +3f00 +03f0 +03f0 +0fc0 +0fc0 +3f00 +3f00 +0ffc +0ffc +ENDCHAR +STARTCHAR C010b +ENCODING 1638 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03f0 +03f0 +0ffc +0ffc +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3ffc +3ffc +0ff0 +0ff0 +ENDCHAR +STARTCHAR C010c +ENCODING 1639 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ff0 +3ff0 +3ff0 +3ff0 +00f0 +00f0 +00f0 +00f0 +00f0 +00f0 +00f0 +00f0 +00f0 +00f0 +ENDCHAR +STARTCHAR C010d +ENCODING 1640 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +0ff0 +0ff0 +0ff0 +0ff0 +03c0 +03c0 +ENDCHAR +STARTCHAR C010e +ENCODING 1641 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0ff0 +0ff0 +0ff0 +0ff0 +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +3c3c +ENDCHAR +STARTCHAR C010f +ENCODING 8211 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +3ffc +3ffc +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0110 +ENCODING 8212 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +3ffc +3ffc +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0111 +ENCODING 8216 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f00 +0f00 +03c0 +03c0 +00f0 +00f0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0112 +ENCODING 8217 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00f0 +00f0 +03c0 +03c0 +0f00 +0f00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0113 +ENCODING 8220 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +0f0f +0f0f +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0114 +ENCODING 8221 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c3c +3c3c +3c3c +3c3c +f0f0 +f0f0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0115 +ENCODING 8249 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +03c0 +03c0 +0f00 +0f00 +03c0 +03c0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0116 +ENCODING 8250 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +03c0 +03c0 +00f0 +00f0 +03c0 +03c0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0117 +ENCODING 8364 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03fc +03fc +0f00 +0f00 +3ff0 +3ff0 +0f00 +0f00 +3ff0 +3ff0 +0f00 +0f00 +03fc +03fc +0000 +0000 +ENDCHAR +STARTCHAR C0118 +ENCODING 8592 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0f00 +0f00 +3ffc +3ffc +0f00 +0f00 +03c0 +03c0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0119 +ENCODING 8593 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0ff0 +0ff0 +3ffc +3ffc +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C011a +ENCODING 8594 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +00f0 +00f0 +3ffc +3ffc +00f0 +00f0 +03c0 +03c0 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C011b +ENCODING 8595 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +3ffc +3ffc +0ff0 +0ff0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C011c +ENCODING 8624 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3ffc +3ffc +3fc0 +3fc0 +3ff0 +3ff0 +3cfc +3cfc +3c3c +3c3c +003c +003c +0000 +0000 +ENDCHAR +STARTCHAR C011d +ENCODING 9243 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3fc0 +3fc0 +3c00 +3c00 +3fc0 +3fc0 +3c00 +3c00 +3ffc +3ffc +03c0 +03c0 +03fc +03fc +0000 +0000 +ENDCHAR +STARTCHAR C011e +ENCODING 9473 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +ffff +ffff +ffff +ffff +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C011f +ENCODING 9475 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +ENDCHAR +STARTCHAR C0120 +ENCODING 9487 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +03ff +03ff +03ff +03ff +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C0121 +ENCODING 9491 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +ffc0 +ffc0 +ffc0 +ffc0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C0122 +ENCODING 9495 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03ff +03ff +03ff +03ff +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0123 +ENCODING 9499 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ffc0 +ffc0 +ffc0 +ffc0 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0124 +ENCODING 9507 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03ff +03ff +03ff +03ff +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C0125 +ENCODING 9515 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ffc0 +ffc0 +ffc0 +ffc0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C0126 +ENCODING 9523 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +ffff +ffff +ffff +ffff +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C0127 +ENCODING 9531 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ffff +ffff +ffff +ffff +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0128 +ENCODING 9547 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ffff +ffff +ffff +ffff +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C0129 +ENCODING 9585 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +003f +003f +00fc +00fc +03f0 +03f0 +0fc0 +0fc0 +3f00 +3f00 +fc00 +fc00 +f000 +f000 +ENDCHAR +STARTCHAR C012a +ENCODING 9586 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +f000 +f000 +fc00 +fc00 +3f00 +3f00 +0fc0 +0fc0 +03f0 +03f0 +00fc +00fc +003f +003f +000f +000f +ENDCHAR +STARTCHAR C012b +ENCODING 9601 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ffff +ffff +ffff +ffff +ENDCHAR +STARTCHAR C012c +ENCODING 9604 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ffff +ffff +ffff +ffff +ffff +ffff +ffff +ffff +ENDCHAR +STARTCHAR C012d +ENCODING 9612 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ENDCHAR +STARTCHAR C012e +ENCODING 9614 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +f000 +f000 +f000 +f000 +f000 +f000 +f000 +f000 +f000 +f000 +f000 +f000 +f000 +f000 +f000 +f000 +ENDCHAR +STARTCHAR C012f +ENCODING 9620 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +ffff +ffff +ffff +ffff +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0130 +ENCODING 9622 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ENDCHAR +STARTCHAR C0131 +ENCODING 9623 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +00ff +00ff +00ff +00ff +00ff +00ff +00ff +00ff +ENDCHAR +STARTCHAR C0132 +ENCODING 9624 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +ff00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0133 +ENCODING 9629 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00ff +00ff +00ff +00ff +00ff +00ff +00ff +00ff +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0134 +ENCODING 9654 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0300 +0300 +03c0 +03c0 +03f0 +03f0 +03fc +03fc +03f0 +03f0 +03c0 +03c0 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR C0135 +ENCODING 9664 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00c0 +00c0 +03c0 +03c0 +0fc0 +0fc0 +3fc0 +3fc0 +0fc0 +0fc0 +03c0 +03c0 +00c0 +00c0 +0000 +0000 +ENDCHAR +STARTCHAR C0136 +ENCODING 9670 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0ff0 +0ff0 +3ffc +3ffc +3ffc +3ffc +0ff0 +0ff0 +03c0 +03c0 +0000 +0000 +ENDCHAR +STARTCHAR C0137 +ENCODING 9679 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0ff0 +0ff0 +3ffc +3ffc +3ffc +3ffc +3ffc +3ffc +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C0138 +ENCODING 9698 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0003 +0003 +000f +000f +003f +003f +00ff +00ff +03ff +03ff +0fff +0fff +3fff +3fff +ffff +ffff +ENDCHAR +STARTCHAR C0139 +ENCODING 9699 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +c000 +c000 +f000 +f000 +fc00 +fc00 +ff00 +ff00 +ffc0 +ffc0 +fff0 +fff0 +fffc +fffc +ffff +ffff +ENDCHAR +STARTCHAR C013a +ENCODING 9824 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0ff0 +0ff0 +3ffc +3ffc +3ffc +3ffc +03c0 +03c0 +0ff0 +0ff0 +0000 +0000 +ENDCHAR +STARTCHAR C013b +ENCODING 9827 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03f0 +03f0 +03f0 +03f0 +3f3f +3f3f +3f3f +3f3f +00c0 +00c0 +03f0 +03f0 +0000 +0000 +ENDCHAR +STARTCHAR C013c +ENCODING 9829 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f3c +0f3c +3fff +3fff +3fff +3fff +0ffc +0ffc +03f0 +03f0 +00c0 +00c0 +0000 +0000 +ENDCHAR +STARTCHAR C013d +ENCODING 62456 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +0c0f +0c0f +0f0f +0f0f +03cf +03cf +00cf +00cf +00fc +00fc +3ff0 +3ff0 +0000 +0000 +ENDCHAR +STARTCHAR C013e +ENCODING 65152 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +03f0 +03f0 +0f00 +0f00 +03f0 +03f0 +0fc0 +0fc0 +0c00 +0c00 +0000 +0000 +ENDCHAR +STARTCHAR C013f +ENCODING 65153 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C0140 +ENCODING 65154 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +03c0 +ENDCHAR +STARTCHAR C0141 +ENCODING 65157 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c00 +3c00 +f0ff +f0ff +03cf +03cf +00ff +00ff +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0142 +ENCODING 65158 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3c00 +3c00 +f0ff +f0ff +03cf +03cf +00ff +00ff +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0143 +ENCODING 65165 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0144 +ENCODING 65166 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0145 +ENCODING 65167 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +03c0 +03c0 +ENDCHAR +STARTCHAR C0146 +ENCODING 65168 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +03c0 +03c0 +ENDCHAR +STARTCHAR C0147 +ENCODING 65169 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +000f +000f +000f +000f +ffff +ffff +0000 +0000 +003c +003c +ENDCHAR +STARTCHAR C0148 +ENCODING 65170 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +03c0 +03c0 +ENDCHAR +STARTCHAR C0149 +ENCODING 65171 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03cf +03cf +0000 +0000 +00ff +00ff +03cf +03cf +03cf +03cf +03ff +03ff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C014a +ENCODING 65172 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03cf +03cf +0000 +0000 +00ff +00ff +03cf +03cf +03cf +03cf +03ff +03ff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C014b +ENCODING 65173 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f3c +0f3c +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C014c +ENCODING 65174 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f3c +0f3c +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C014d +ENCODING 65175 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3cf0 +3cf0 +0000 +0000 +000f +000f +000f +000f +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C014e +ENCODING 65176 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f3c +0f3c +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C014f +ENCODING 65177 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +3c3c +3c3c +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0150 +ENCODING 65178 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +3c3c +3c3c +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0151 +ENCODING 65179 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +3c3c +3c3c +0000 +0000 +000f +000f +000f +000f +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0152 +ENCODING 65180 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +3c3c +3c3c +0000 +0000 +f00f +f00f +f00f +f00f +3ffc +3ffc +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0153 +ENCODING 65181 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c00 +3c00 +3c0f +3c0f +0fc0 +0fc0 +ENDCHAR +STARTCHAR C0154 +ENCODING 65182 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c00 +3c00 +3c0f +3c0f +0fc0 +0fc0 +ENDCHAR +STARTCHAR C0155 +ENCODING 65183 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3fc0 +3fc0 +30f0 +30f0 +003c +003c +ffff +ffff +0000 +0000 +00f0 +00f0 +ENDCHAR +STARTCHAR C0156 +ENCODING 65184 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c00 +3c00 +3c0f +3c0f +0fc0 +0fc0 +ENDCHAR +STARTCHAR C0157 +ENCODING 65185 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c03 +3c03 +3c00 +3c00 +0ff0 +0ff0 +ENDCHAR +STARTCHAR C0158 +ENCODING 65186 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c03 +3c03 +3c00 +3c00 +0ff0 +0ff0 +ENDCHAR +STARTCHAR C0159 +ENCODING 65187 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3fc0 +3fc0 +30f0 +30f0 +003c +003c +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C015a +ENCODING 65188 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c03 +3c03 +3c00 +3c00 +0ff0 +0ff0 +ENDCHAR +STARTCHAR C015b +ENCODING 65189 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c03 +3c03 +3c00 +3c00 +0ff0 +0ff0 +ENDCHAR +STARTCHAR C015c +ENCODING 65190 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c03 +3c03 +3c00 +3c00 +0ff0 +0ff0 +ENDCHAR +STARTCHAR C015d +ENCODING 65191 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +0000 +0000 +3fc0 +3fc0 +30f0 +30f0 +003c +003c +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C015e +ENCODING 65192 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +3fc0 +3fc0 +00f0 +00f0 +0ffc +0ffc +3c0f +3c0f +3c03 +3c03 +3c00 +3c00 +0ff0 +0ff0 +ENDCHAR +STARTCHAR C015f +ENCODING 65193 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +003c +003c +000f +000f +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0160 +ENCODING 65194 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +003c +003c +000f +000f +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0161 +ENCODING 65195 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +0000 +0000 +00f0 +00f0 +003c +003c +000f +000f +000f +000f +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0162 +ENCODING 65196 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +0000 +0000 +00f0 +00f0 +003c +003c +000f +000f +000f +000f +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0163 +ENCODING 65197 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +003c +003c +000f +000f +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0164 +ENCODING 65198 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +003c +003c +000f +000f +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0165 +ENCODING 65199 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +000f +000f +0000 +0000 +003c +003c +000f +000f +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0166 +ENCODING 65200 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +000f +000f +0000 +0000 +003c +003c +000f +000f +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C0167 +ENCODING 65201 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +c333 +c333 +c333 +c333 +c3ff +c3ff +c3fc +c3fc +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C0168 +ENCODING 65202 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +c333 +c333 +c333 +c333 +c3ff +c3ff +c3fc +c3fc +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C0169 +ENCODING 65203 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +30c3 +30c3 +f3cf +f3cf +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C016a +ENCODING 65204 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +c333 +c333 +c333 +c333 +c3ff +c3ff +c3fc +c3fc +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C016b +ENCODING 65205 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +0f0f +0f0f +0000 +0000 +c333 +c333 +c333 +c333 +c3ff +c3ff +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C016c +ENCODING 65206 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +0f0f +0f0f +0000 +0000 +c333 +c333 +c333 +c333 +c3ff +c3ff +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C016d +ENCODING 65207 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +3c3c +3c3c +0000 +0000 +30c3 +30c3 +f3cf +f3cf +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C016e +ENCODING 65208 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +0f0f +0f0f +0000 +0000 +c333 +c333 +c333 +c333 +c3ff +c3ff +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C016f +ENCODING 65209 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +c3c3 +c3c3 +c303 +c303 +c3ff +c3ff +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C0170 +ENCODING 65210 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +c3c3 +c3c3 +c303 +c303 +c3ff +c3ff +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C0171 +ENCODING 65211 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +33c3 +33c3 +ff03 +ff03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0172 +ENCODING 65212 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +c3c3 +c3c3 +c303 +c303 +c3ff +c3ff +ff00 +ff00 +3c00 +3c00 +ENDCHAR +STARTCHAR C0173 +ENCODING 65213 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +0000 +0000 +00ff +00ff +c3c3 +c3c3 +c303 +c303 +c3ff +c3ff +ffc0 +ffc0 +3f00 +3f00 +ENDCHAR +STARTCHAR C0174 +ENCODING 65214 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +0000 +0000 +00ff +00ff +c3c3 +c3c3 +c303 +c303 +c3ff +c3ff +ffc0 +ffc0 +3f00 +3f00 +ENDCHAR +STARTCHAR C0175 +ENCODING 65215 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +03c0 +03c0 +0000 +0000 +00ff +00ff +33c3 +33c3 +ff03 +ff03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0176 +ENCODING 65216 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +00f0 +00f0 +0000 +0000 +00ff +00ff +c3c3 +c3c3 +c303 +c303 +c3ff +c3ff +ffc0 +ffc0 +3f00 +3f00 +ENDCHAR +STARTCHAR C0177 +ENCODING 65217 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0178 +ENCODING 65218 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0179 +ENCODING 65219 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C017a +ENCODING 65220 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C017b +ENCODING 65221 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3cf0 +3cf0 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C017c +ENCODING 65222 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3cf0 +3cf0 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C017d +ENCODING 65223 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3cf0 +3cf0 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C017e +ENCODING 65224 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3cf0 +3cf0 +3c00 +3c00 +3cff +3cff +3fc3 +3fc3 +3f03 +3f03 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C017f +ENCODING 65225 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +03c0 +03c0 +03c0 +03c0 +0fff +0fff +3c03 +3c03 +3f00 +3f00 +0ffc +0ffc +ENDCHAR +STARTCHAR C0180 +ENCODING 65226 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +03c0 +03c0 +03c0 +03c0 +0fff +0fff +3c03 +3c03 +3f00 +3f00 +0ffc +0ffc +ENDCHAR +STARTCHAR C0181 +ENCODING 65227 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03f0 +03f0 +0ffc +0ffc +0f00 +0f00 +03c0 +03c0 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0182 +ENCODING 65228 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +03c0 +03c0 +03c0 +03c0 +0fff +0fff +3c03 +3c03 +3f00 +3f00 +0ffc +0ffc +ENDCHAR +STARTCHAR C0183 +ENCODING 65229 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +00fc +00fc +03c0 +03c0 +03c0 +03c0 +0fff +0fff +3c03 +3c03 +3f00 +3f00 +0ffc +0ffc +ENDCHAR +STARTCHAR C0184 +ENCODING 65230 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +00fc +00fc +03c0 +03c0 +03c0 +03c0 +0fff +0fff +3c03 +3c03 +3f00 +3f00 +0ffc +0ffc +ENDCHAR +STARTCHAR C0185 +ENCODING 65231 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +03f0 +03f0 +0ffc +0ffc +0f00 +0f00 +03c0 +03c0 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0186 +ENCODING 65232 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3c00 +3c00 +00fc +00fc +03c0 +03c0 +03c0 +03c0 +0fff +0fff +3c03 +3c03 +3f00 +3f00 +0ffc +0ffc +ENDCHAR +STARTCHAR C0187 +ENCODING 65233 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f00 +0f00 +003f +003f +f0f3 +f0f3 +f03f +f03f +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0188 +ENCODING 65234 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f00 +0f00 +003f +003f +f0f3 +f0f3 +f03f +f03f +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0189 +ENCODING 65235 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f00 +0f00 +0000 +0000 +00ff +00ff +00f3 +00f3 +003f +003f +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C018a +ENCODING 65236 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0f00 +0f00 +003f +003f +f0f3 +f0f3 +f03f +f03f +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C018b +ENCODING 65237 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +0000 +0000 +003f +003f +30f3 +30f3 +f03f +f03f +f00f +f00f +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C018c +ENCODING 65238 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +0000 +0000 +003f +003f +30f3 +30f3 +f03f +f03f +f00f +f00f +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C018d +ENCODING 65239 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +3cf0 +3cf0 +0000 +0000 +03ff +03ff +03c3 +03c3 +00ff +00ff +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C018e +ENCODING 65240 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0f3c +0f3c +0000 +0000 +003f +003f +30f3 +30f3 +f03f +f03f +f00f +f00f +3ffc +3ffc +0000 +0000 +ENDCHAR +STARTCHAR C018f +ENCODING 65241 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +0f0f +0f0f +0c0f +0c0f +3f0f +3f0f +000f +000f +c00f +c00f +fffc +fffc +0000 +0000 +ENDCHAR +STARTCHAR C0190 +ENCODING 65242 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +0f0f +0f0f +0c0f +0c0f +3f0f +3f0f +000f +000f +c00f +c00f +fffc +fffc +0000 +0000 +ENDCHAR +STARTCHAR C0191 +ENCODING 65243 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +03f0 +03f0 +003c +003c +000f +000f +000f +000f +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C0192 +ENCODING 65244 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +0f0f +0f0f +0c0f +0c0f +3f0f +3f0f +000f +000f +c00f +c00f +fffc +fffc +0000 +0000 +ENDCHAR +STARTCHAR C0193 +ENCODING 65245 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +000f +000f +000f +000f +000f +000f +3c0f +3c0f +3c0f +3c0f +3c0f +3c0f +0ffc +0ffc +ENDCHAR +STARTCHAR C0194 +ENCODING 65246 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +000f +000f +000f +000f +000f +000f +3c0f +3c0f +3c0f +3c0f +3c0f +3c0f +0ffc +0ffc +ENDCHAR +STARTCHAR C0195 +ENCODING 65247 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +000f +000f +000f +000f +000f +000f +000f +000f +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C0196 +ENCODING 65248 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +000f +000f +000f +000f +000f +000f +3c0f +3c0f +3c0f +3c0f +3c0f +3c0f +0ffc +0ffc +ENDCHAR +STARTCHAR C0197 +ENCODING 65249 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +003c +003c +03ff +03ff +0ff3 +0ff3 +3c3f +3c3f +3c0f +3c0f +3c00 +3c00 +3c00 +3c00 +ENDCHAR +STARTCHAR C0198 +ENCODING 65250 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +003c +003c +03ff +03ff +0ff3 +0ff3 +3c3f +3c3f +3c0f +3c0f +3c00 +3c00 +3c00 +3c00 +ENDCHAR +STARTCHAR C0199 +ENCODING 65251 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +003f +003f +00f3 +00f3 +fff3 +fff3 +003f +003f +0000 +0000 +ENDCHAR +STARTCHAR C019a +ENCODING 65252 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +003c +003c +03ff +03ff +0ff3 +0ff3 +3c3f +3c3f +3c0f +3c0f +3c00 +3c00 +3c00 +3c00 +ENDCHAR +STARTCHAR C019b +ENCODING 65253 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0000 +0000 +0c0c +0c0c +3c0f +3c0f +3c0f +3c0f +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C019c +ENCODING 65254 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0000 +0000 +0c0c +0c0c +3c0f +3c0f +3c0f +3c0f +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C019d +ENCODING 65255 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00f0 +00f0 +0000 +0000 +000f +000f +000f +000f +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C019e +ENCODING 65256 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +03c0 +03c0 +0000 +0000 +0c0c +0c0c +3c0f +3c0f +3c0f +3c0f +0ffc +0ffc +0000 +0000 +ENDCHAR +STARTCHAR C019f +ENCODING 65257 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +03cf +03cf +03cf +03cf +03ff +03ff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C01a0 +ENCODING 65258 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +03cf +03cf +03cf +03cf +03ff +03ff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C01a1 +ENCODING 65259 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0300 +0300 +0ffc +0ffc +0c3f +0c3f +0fc3 +0fc3 +ffff +ffff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C01a2 +ENCODING 65260 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +03cf +03cf +03cf +03cf +03ff +03ff +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR C01a3 +ENCODING 65261 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +03cf +03cf +03ff +03ff +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C01a4 +ENCODING 65262 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00ff +00ff +03cf +03cf +03ff +03ff +000f +000f +003c +003c +3ff0 +3ff0 +ENDCHAR +STARTCHAR C01a5 +ENCODING 65263 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00fc +00fc +f3cf +f3cf +f3c3 +f3c3 +f0f3 +f0f3 +f0f0 +f0f0 +3ff0 +3ff0 +ENDCHAR +STARTCHAR C01a6 +ENCODING 65264 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +00fc +00fc +f3cf +f3cf +f3c3 +f3c3 +f0f3 +f0f3 +f0f0 +f0f0 +3ff0 +3ff0 +ENDCHAR +STARTCHAR C01a7 +ENCODING 65265 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +c3ff +c3ff +c3c3 +c3c3 +f0f3 +f0f3 +3ff3 +3ff3 +0000 +0000 +0f3c +0f3c +ENDCHAR +STARTCHAR C01a8 +ENCODING 65266 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +c3ff +c3ff +c3c3 +c3c3 +f0f3 +f0f3 +3ff3 +3ff3 +0000 +0000 +0f3c +0f3c +ENDCHAR +STARTCHAR C01a9 +ENCODING 65267 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +000f +000f +000f +000f +ffff +ffff +0000 +0000 +0f3c +0f3c +ENDCHAR +STARTCHAR C01aa +ENCODING 65268 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0000 +0000 +00fc +00fc +c3ff +c3ff +c3c3 +c3c3 +f0f3 +f0f3 +3ff3 +3ff3 +0000 +0000 +0f3c +0f3c +ENDCHAR +STARTCHAR C01ab +ENCODING 65271 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +000f +000f +0c0f +0c0f +0f0f +0f0f +03cf +03cf +00cf +00cf +00fc +00fc +3ff0 +3ff0 +0000 +0000 +ENDCHAR +STARTCHAR C01ac +ENCODING 65533 +SWIDTH 666 0 +DWIDTH 16 0 +BBX 16 16 0 -4 +BITMAP +0ff0 +0ff0 +3c3c +3c3c +33cc +33cc +3f3c +3f3c +3ffc +3ffc +3f3c +3f3c +0ff0 +0ff0 +0000 +0000 +ENDCHAR +ENDFONT diff --git a/fonts/fauxtari-16.psf b/fonts/fauxtari-16.psf Binary files differnew file mode 100644 index 0000000..8462735 --- /dev/null +++ b/fonts/fauxtari-16.psf diff --git a/fonts/fauxtari-16.txt b/fonts/fauxtari-16.txt new file mode 100644 index 0000000..1f450d9 --- /dev/null +++ b/fonts/fauxtari-16.txt @@ -0,0 +1,4796 @@ +%PSF2 +Version: 0 +Flags: 1 +Length: 512 +Width: 16 +Height: 16 +% +Unicode: [2665]; +Bitmap: \ +-------------------------------- \ +----####--####------####--####-- \ +--##############--############## \ +--##############--############## \ +----##########------##########-- \ +------######----------######---- \ +--------##--------------##------ \ +-------------------------------- +% +Unicode: [2523]; +Bitmap: \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------##########------########## \ +------##########------########## \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ +% +Unicode: [2503]; +Bitmap: \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### +% +Unicode: [251b]; +Bitmap: \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +##########------##########------ \ +##########------##########------ \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [252b]; +Bitmap: \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +##########------##########------ \ +##########------##########------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ +% +Unicode: [2513]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +##########------##########------ \ +##########------##########------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ +% +Unicode: [2571]; +Bitmap: \ +------------####------------#### \ +----------######----------###### \ +--------######----------######-- \ +------######----------######---- \ +----######----------######------ \ +--######----------######-------- \ +######----------######---------- \ +####------------####------------ +% +Unicode: [2572]; +Bitmap: \ +####------------####------------ \ +######----------######---------- \ +--######----------######-------- \ +----######----------######------ \ +------######----------######---- \ +--------######----------######-- \ +----------######----------###### \ +------------####------------#### +% +Unicode: [25e2]; +Bitmap: \ +--------------##--------------## \ +------------####------------#### \ +----------######----------###### \ +--------########--------######## \ +------##########------########## \ +----############----############ \ +--##############--############## \ +################################ +% +Unicode: [2597]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +--------########--------######## \ +--------########--------######## \ +--------########--------######## \ +--------########--------######## +% +Unicode: [25e3]; +Bitmap: \ +##--------------##-------------- \ +####------------####------------ \ +######----------######---------- \ +########--------########-------- \ +##########------##########------ \ +############----############---- \ +##############--##############-- \ +################################ +% +Unicode: [259d]; +Bitmap: \ +--------########--------######## \ +--------########--------######## \ +--------########--------######## \ +--------########--------######## \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [2598]; +Bitmap: \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [2594]; +Bitmap: \ +################################ \ +################################ \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [2581]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +################################ \ +################################ +% +Unicode: [2596]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- +% +Unicode: [2663]; +Bitmap: \ +-------------------------------- \ +------######----------######---- \ +------######----------######---- \ +--######--######--######--###### \ +--######--######--######--###### \ +--------##--------------##------ \ +------######----------######---- \ +-------------------------------- +% +Unicode: [250f]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +------##########------########## \ +------##########------########## \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ +% +Unicode: [2501]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +################################ \ +################################ \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [254b]; +Bitmap: \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +################################ \ +################################ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ +% +Unicode: [25cf]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----########--------########---- \ +--############----############-- \ +--############----############-- \ +--############----############-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [2584]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +################################ \ +################################ \ +################################ \ +################################ +% +Unicode: [258e]; +Bitmap: \ +####------------####------------ \ +####------------####------------ \ +####------------####------------ \ +####------------####------------ \ +####------------####------------ \ +####------------####------------ \ +####------------####------------ \ +####------------####------------ +% +Unicode: [2533]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +################################ \ +################################ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ +% +Unicode: [253b]; +Bitmap: \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +################################ \ +################################ \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [258c]; +Bitmap: \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- \ +########--------########-------- +% +Unicode: [2517]; +Bitmap: \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------##########------########## \ +------##########------########## \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0118];[241b]; +Bitmap: \ +--########--------########------ \ +--####------------####---------- \ +--########--------########------ \ +--####------------####---------- \ +--############----############-- \ +------####------------####------ \ +------########--------########-- \ +-------------------------------- +% +Unicode: [2191]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +----########--------########---- \ +--############----############-- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- +% +Unicode: [2193]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +--############----############-- \ +----########--------########---- \ +------####------------####------ \ +-------------------------------- +% +Unicode: [2190]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +----####------------####-------- \ +--############----############-- \ +----####------------####-------- \ +------####------------####------ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [2192]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +--------####------------####---- \ +--############----############-- \ +--------####------------####---- \ +------####------------####------ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0020];[00a0]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0021]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- \ +------####------------####------ \ +-------------------------------- +% +Unicode: [0022]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0023]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +################################ \ +--####----####----####----####-- \ +--####----####----####----####-- \ +################################ \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [0024]; +Bitmap: \ +------####------------####------ \ +----##########------##########-- \ +--####------------####---------- \ +----########--------########---- \ +----------####------------####-- \ +--##########------##########---- \ +------####------------####------ \ +-------------------------------- +% +Unicode: [0025]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--####--####------####--####---- \ +------####------------####------ \ +----####------------####-------- \ +--####----####----####----####-- \ +--##------####----##------####-- \ +-------------------------------- +% +Unicode: [0026]; +Bitmap: \ +------######----------######---- \ +----####--####------####--####-- \ +------######----------######---- \ +----######----------######------ \ +--####--########--####--######## \ +--####----####----####----####-- \ +----######--####----######--#### \ +-------------------------------- +% +Unicode: [0027]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0028]; +Bitmap: \ +-------------------------------- \ +--------######----------######-- \ +------######----------######---- \ +------####------------####------ \ +------####------------####------ \ +------######----------######---- \ +--------######----------######-- \ +-------------------------------- +% +Unicode: [0029]; +Bitmap: \ +-------------------------------- \ +--######----------######-------- \ +----######----------######------ \ +------####------------####------ \ +------####------------####------ \ +----######----------######------ \ +--######----------######-------- \ +-------------------------------- +% +Unicode: [002a]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +----########--------########---- \ +################################ \ +----########--------########---- \ +--####----####----####----####-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [002b]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +--############----############-- \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [002c];[00b8]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +----####------------####-------- +% +Unicode: [002d];[00ad];[2013];[2014]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +--############----############-- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [002e]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- +% +Unicode: [002f]; +Bitmap: \ +-------------------------------- \ +----------####------------####-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--####------------####---------- \ +--##--------------##------------ \ +-------------------------------- +% +Unicode: [0030]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####--######----####--######-- \ +--######--####----######--####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0031]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +----######----------######------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +--############----############-- \ +-------------------------------- +% +Unicode: [0032]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [0033]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +--------####------------####---- \ +------####------------####------ \ +--------####------------####---- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0034]; +Bitmap: \ +-------------------------------- \ +--------####------------####---- \ +------######----------######---- \ +----########--------########---- \ +--####--####------####--####---- \ +--############----############-- \ +--------####------------####---- \ +-------------------------------- +% +Unicode: [0035]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +--####------------####---------- \ +--##########------##########---- \ +----------####------------####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0036]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####------------####---------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0037]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +----------####------------####-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +----####------------####-------- \ +-------------------------------- +% +Unicode: [0038]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0039]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +----##########------##########-- \ +----------####------------####-- \ +--------####------------####---- \ +----######----------######------ \ +-------------------------------- +% +Unicode: [003a]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- +% +Unicode: [003b]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +----####------------####-------- +% +Unicode: [003c]; +Bitmap: \ +----------####------------####-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +------####------------####------ \ +--------####------------####---- \ +----------####------------####-- \ +-------------------------------- +% +Unicode: [003d]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--############----############-- \ +-------------------------------- \ +-------------------------------- \ +--############----############-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [003e]; +Bitmap: \ +--####------------####---------- \ +----####------------####-------- \ +------####------------####------ \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--####------------####---------- \ +-------------------------------- +% +Unicode: [003f]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--------####------------####---- \ +------####------------####------ \ +-------------------------------- \ +------####------------####------ \ +-------------------------------- +% +Unicode: [0040]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####--######----####--######-- \ +--####--######----####--######-- \ +--####------------####---------- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [0041]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--############----############-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [0042]; +Bitmap: \ +-------------------------------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--##########------##########---- \ +-------------------------------- +% +Unicode: [0043]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####------------####---------- \ +--####------------####---------- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0044]; +Bitmap: \ +-------------------------------- \ +--########--------########------ \ +--####--####------####--####---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####--####------####--####---- \ +--########--------########------ \ +-------------------------------- +% +Unicode: [0045]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +--####------------####---------- \ +--##########------##########---- \ +--####------------####---------- \ +--####------------####---------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [0046]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +--####------------####---------- \ +--##########------##########---- \ +--####------------####---------- \ +--####------------####---------- \ +--####------------####---------- \ +-------------------------------- +% +Unicode: [0047]; +Bitmap: \ +-------------------------------- \ +----##########------##########-- \ +--####------------####---------- \ +--####------------####---------- \ +--####--######----####--######-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [0048]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--############----############-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [0049]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +--############----############-- \ +-------------------------------- +% +Unicode: [004a]; +Bitmap: \ +-------------------------------- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [004b]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--####--####------####--####---- \ +--########--------########------ \ +--########--------########------ \ +--####--####------####--####---- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [004c]; +Bitmap: \ +-------------------------------- \ +--####------------####---------- \ +--####------------####---------- \ +--####------------####---------- \ +--####------------####---------- \ +--####------------####---------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [004d]; +Bitmap: \ +-------------------------------- \ +--####------####--####------#### \ +--######--######--######--###### \ +--##############--############## \ +--####--##--####--####--##--#### \ +--####------####--####------#### \ +--####------####--####------#### \ +-------------------------------- +% +Unicode: [004e]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--######--####----######--####-- \ +--############----############-- \ +--############----############-- \ +--####--######----####--######-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [004f]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0050]; +Bitmap: \ +-------------------------------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--##########------##########---- \ +--####------------####---------- \ +--####------------####---------- \ +-------------------------------- +% +Unicode: [0051]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####--####------####--####---- \ +----####--####------####--####-- \ +-------------------------------- +% +Unicode: [0052]; +Bitmap: \ +-------------------------------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--##########------##########---- \ +--####--####------####--####---- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [0053]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####------------####---------- \ +----########--------########---- \ +----------####------------####-- \ +----------####------------####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0054]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- +% +Unicode: [0055]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--############----############-- \ +-------------------------------- +% +Unicode: [0056]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +------####------------####------ \ +-------------------------------- +% +Unicode: [0057]; +Bitmap: \ +-------------------------------- \ +--####------####--####------#### \ +--####------####--####------#### \ +--####--##--####--####--##--#### \ +--##############--############## \ +--######--######--######--###### \ +--####------####--####------#### \ +-------------------------------- +% +Unicode: [0058]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [0059]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- +% +Unicode: [005a]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--####------------####---------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [005b]; +Bitmap: \ +-------------------------------- \ +------########--------########-- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------########--------########-- \ +-------------------------------- +% +Unicode: [005c]; +Bitmap: \ +-------------------------------- \ +--##--------------##------------ \ +--####------------####---------- \ +----####------------####-------- \ +------####------------####------ \ +--------####------------####---- \ +----------####------------####-- \ +-------------------------------- +% +Unicode: [005d]; +Bitmap: \ +-------------------------------- \ +--########--------########------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +--########--------########------ \ +-------------------------------- +% +Unicode: [005e]; +Bitmap: \ +-------------------------------- \ +--------##--------------##------ \ +------######----------######---- \ +----####--####------####--####-- \ +--####------####--####------#### \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [005f]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +################################ \ +-------------------------------- +% +Unicode: [25c6]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +----########--------########---- \ +--############----############-- \ +--############----############-- \ +----########--------########---- \ +------####------------####------ \ +-------------------------------- +% +Unicode: [0061]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----########--------########---- \ +----------####------------####-- \ +----##########------##########-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [0062]; +Bitmap: \ +-------------------------------- \ +--####------------####---------- \ +--####------------####---------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--##########------##########---- \ +-------------------------------- +% +Unicode: [0063]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----########--------########---- \ +--####------------####---------- \ +--####------------####---------- \ +--####------------####---------- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0064]; +Bitmap: \ +-------------------------------- \ +----------####------------####-- \ +----------####------------####-- \ +----##########------##########-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [0065]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--############----############-- \ +--####------------####---------- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0066]; +Bitmap: \ +-------------------------------- \ +--------######----------######-- \ +------####------------####------ \ +----##########------##########-- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- +% +Unicode: [0067]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----##########------##########-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----##########------##########-- \ +----------####------------####-- \ +--##########------##########---- +% +Unicode: [0068]; +Bitmap: \ +-------------------------------- \ +--####------------####---------- \ +--####------------####---------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [0069]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +-------------------------------- \ +----######----------######------ \ +------####------------####------ \ +------####------------####------ \ +----########--------########---- \ +-------------------------------- +% +Unicode: [006a]; +Bitmap: \ +-------------------------------- \ +----------####------------####-- \ +-------------------------------- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +----########--------########---- +% +Unicode: [006b]; +Bitmap: \ +-------------------------------- \ +--####------------####---------- \ +--####------------####---------- \ +--####--####------####--####---- \ +--########--------########------ \ +--####--####------####--####---- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [006c]; +Bitmap: \ +-------------------------------- \ +----######----------######------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +----########--------########---- \ +-------------------------------- +% +Unicode: [006d]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--####----####----####----####-- \ +--##############--############## \ +--##############--############## \ +--####--##--####--####--##--#### \ +--####------####--####------#### \ +-------------------------------- +% +Unicode: [006e]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [006f]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0070]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--##########------##########---- \ +--####------------####---------- \ +--####------------####---------- +% +Unicode: [0071]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----##########------##########-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----##########------##########-- \ +----------####------------####-- \ +----------####------------####-- +% +Unicode: [0072]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####------------####---------- \ +--####------------####---------- \ +--####------------####---------- \ +-------------------------------- +% +Unicode: [0073]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----##########------##########-- \ +--####------------####---------- \ +----########--------########---- \ +----------####------------####-- \ +--##########------##########---- \ +-------------------------------- +% +Unicode: [0074]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +--############----############-- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +--------######----------######-- \ +-------------------------------- +% +Unicode: [0075]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [0076]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +------####------------####------ \ +-------------------------------- +% +Unicode: [0077]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--####------####--####------#### \ +--####--##--####--####--##--#### \ +--##############--############## \ +----##########------##########-- \ +----####--####------####--####-- \ +-------------------------------- +% +Unicode: [0078]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--####----####----####----####-- \ +----########--------########---- \ +------####------------####------ \ +----########--------########---- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [0079]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----##########------##########-- \ +--------####------------####---- \ +--########--------########------ +% +Unicode: [007a]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--############----############-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [2660]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +----########--------########---- \ +--############----############-- \ +--############----############-- \ +------####------------####------ \ +----########--------########---- \ +-------------------------------- +% +Unicode: [007c];[0622];[fe81];[fe82]; +Bitmap: \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ +% +Unicode: [21b0]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +--########--------########------ \ +--##########------##########---- \ +--####--######----####--######-- \ +--####----####----####----####-- \ +----------####------------####-- \ +-------------------------------- +% +Unicode: [25c0]; +Bitmap: \ +--------##--------------##------ \ +------####------------####------ \ +----######----------######------ \ +--########--------########------ \ +----######----------######------ \ +------####------------####------ \ +--------##--------------##------ \ +-------------------------------- +% +Unicode: [25b6]; +Bitmap: \ +------##--------------##-------- \ +------####------------####------ \ +------######----------######---- \ +------########--------########-- \ +------######----------######---- \ +------####------------####------ \ +------##--------------##-------- \ +-------------------------------- +% +Unicode: [00e1]; +Bitmap: \ +--------####------------####---- \ +------####------------####------ \ +----########--------########---- \ +----------####------------####-- \ +----##########------##########-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [00f9]; +Bitmap: \ +----####------------####-------- \ +------####------------####------ \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [00d1]; +Bitmap: \ +----####--####------####--####-- \ +--####--####------####--####---- \ +-------------------------------- \ +--######--####----######--####-- \ +--######--####----######--####-- \ +--############----############-- \ +--####--######----####--######-- \ +-------------------------------- +% +Unicode: [00c9]; +Bitmap: \ +--------####------------####---- \ +------####------------####------ \ +--############----############-- \ +--####------------####---------- \ +--##########------##########---- \ +--####------------####---------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [00e7]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----########--------########---- \ +--####------------####---------- \ +--####------------####---------- \ +----########--------########---- \ +------####------------####------ \ +----####------------####-------- +% +Unicode: [00f4]; +Bitmap: \ +----########--------########---- \ +--####----####----####----####-- \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00f2]; +Bitmap: \ +----####------------####-------- \ +------####------------####------ \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00ec]; +Bitmap: \ +----####------------####-------- \ +------####------------####------ \ +-------------------------------- \ +----######----------######------ \ +------####------------####------ \ +------####------------####------ \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00a3]; +Bitmap: \ +------######----------######---- \ +----####------------####-------- \ +----####------------####-------- \ +--########--------########------ \ +----####------------####-------- \ +----####------------####-------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [00ef]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +-------------------------------- \ +----######----------######------ \ +------####------------####------ \ +------####------------####------ \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00fc]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [00e4]; +Bitmap: \ +----####--####------####--####-- \ +-------------------------------- \ +----########--------########---- \ +----------####------------####-- \ +----##########------##########-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [00d6]; +Bitmap: \ +--####----####----####----####-- \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00fa]; +Bitmap: \ +--------####------------####---- \ +------####------------####------ \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [00f3]; +Bitmap: \ +--------####------------####---- \ +------####------------####------ \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00f6]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00dc]; +Bitmap: \ +--####----####----####----####-- \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--############----############-- \ +-------------------------------- +% +Unicode: [00e5]; +Bitmap: \ +----########--------########---- \ +--####----####----####----####-- \ +------######----------######---- \ +----------####------------####-- \ +----##########------##########-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [00fb]; +Bitmap: \ +----########--------########---- \ +--####----####----####----####-- \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [00ee]; +Bitmap: \ +----########--------########---- \ +--####----####----####----####-- \ +-------------------------------- \ +----######----------######------ \ +------####------------####------ \ +------####------------####------ \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00e9]; +Bitmap: \ +--------####------------####---- \ +------####------------####------ \ +----########--------########---- \ +--####----####----####----####-- \ +--############----############-- \ +--####------------####---------- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00e8]; +Bitmap: \ +----####------------####-------- \ +------####------------####------ \ +----########--------########---- \ +--####----####----####----####-- \ +--############----############-- \ +--####------------####---------- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [00f1]; +Bitmap: \ +----####--####------####--####-- \ +--####--####------####--####---- \ +-------------------------------- \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [00ea]; +Bitmap: \ +----########--------########---- \ +####--------########--------#### \ +----########--------########---- \ +--####----####----####----####-- \ +--############----############-- \ +--####------------####---------- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0227]; +Bitmap: \ +------####------------####------ \ +-------------------------------- \ +----########--------########---- \ +----------####------------####-- \ +----##########------##########-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [00e0]; +Bitmap: \ +----####------------####-------- \ +------####------------####------ \ +----########--------########---- \ +----------####------------####-- \ +----##########------##########-- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [00a1]; +Bitmap: \ +------####------------####------ \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +-------------------------------- +% +Unicode: [00c4]; +Bitmap: \ +--####----####----####----####-- \ +--####----####----####----####-- \ +------####------------####------ \ +----########--------########---- \ +--####----####----####----####-- \ +--############----############-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [05d0]; +Bitmap: \ +-------------------------------- \ +####------####--####------####-- \ +########--####--########--####-- \ +####--########--####--########-- \ +####----####----####----####---- \ +####------####--####------####-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05d1]; +Bitmap: \ +-------------------------------- \ +##########------##########------ \ +------######----------######---- \ +--------####------------####---- \ +--------####------------####---- \ +##############--##############-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05d2]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--------####------------####---- \ +--------####------------####---- \ +--##########------##########---- \ +######----####--######----####-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05d3]; +Bitmap: \ +-------------------------------- \ +##############--##############-- \ +------######----------######---- \ +--------####------------####---- \ +--------####------------####---- \ +--------####------------####---- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05d4]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +----------####------------####-- \ +--##------####----##------####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05d5]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +------######----------######---- \ +--------####------------####---- \ +--------####------------####---- \ +--------####------------####---- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05d6]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +--######----------######-------- \ +----####------------####-------- \ +----####------------####-------- \ +----####------------####-------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05d7]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05d8]; +Bitmap: \ +-------------------------------- \ +####--########--####--########-- \ +####--##--####--####--##--####-- \ +####------####--####------####-- \ +####------####--####------####-- \ +############----############---- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05d9]; +Bitmap: \ +-------------------------------- \ +--##########------##########---- \ +------######----------######---- \ +--------####------------####---- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05da]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +--------######----------######-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- +% +Unicode: [05db]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +----------####------------####-- \ +----------####------------####-- \ +--------######----------######-- \ +############----############---- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05dc]; +Bitmap: \ +####------------####------------ \ +############----############---- \ +----------####------------####-- \ +----------####------------####-- \ +--------######----------######-- \ +----########--------########---- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05dd]; +Bitmap: \ +-------------------------------- \ +--############----############-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--############----############-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05de]; +Bitmap: \ +-------------------------------- \ +####--######----####--######---- \ +--######--####----######--####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####--######----####--######-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05df]; +Bitmap: \ +-------------------------------- \ +------########--------########-- \ +--------######----------######-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- +% +Unicode: [05e0]; +Bitmap: \ +-------------------------------- \ +------########--------########-- \ +----------####------------####-- \ +----------####------------####-- \ +--------######----------######-- \ +--##########------##########---- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05e1]; +Bitmap: \ +-------------------------------- \ +##############--##############-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####--####------####--####---- \ +--########--------########------ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05e2]; +Bitmap: \ +-------------------------------- \ +######--######--######--######-- \ +--####----####----####----####-- \ +----####--####------####--####-- \ +----####--####------####--####-- \ +############----############---- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05e3]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +--####--######----####--######-- \ +--####----####----####----####-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- +% +Unicode: [05e4]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--------######----------######-- \ +############----############---- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05e5]; +Bitmap: \ +-------------------------------- \ +####----######--####----######-- \ +--####----####----####----####-- \ +--####--####------####--####---- \ +--########--------########------ \ +--####------------####---------- \ +--####------------####---------- \ +--####------------####---------- +% +Unicode: [05e6]; +Bitmap: \ +-------------------------------- \ +####------####--####------####-- \ +--####--######----####--######-- \ +----######----------######------ \ +--------####------------####---- \ +##############--##############-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05e7]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +--------######----------######-- \ +####------####--####------####-- \ +####----####----####----####---- \ +####--####------####--####------ \ +####------------####------------ \ +####------------####------------ +% +Unicode: [05e8]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +--------######----------######-- \ +----------####------------####-- \ +----------####------------####-- \ +----------####------------####-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05e9]; +Bitmap: \ +-------------------------------- \ +##----##----##--##----##----##-- \ +####--##----##--####--##----##-- \ +######----####--######----####-- \ +####----####----####----####---- \ +############----############---- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [05ea]; +Bitmap: \ +-------------------------------- \ +############----############---- \ +--####--######----####--######-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +######----####--######----####-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0179]; +Bitmap: \ +------####------------####------ \ +--############----############-- \ +----####--####------####--####-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [0105]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----########--------########---- \ +----------####------------####-- \ +----##########------##########-- \ +--####----####----####----####-- \ +----##########------##########-- \ +------------####------------#### +% +Unicode: [017a]; +Bitmap: \ +--------####------------####---- \ +------####------------####------ \ +--############----############-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [0107]; +Bitmap: \ +--------####------------####---- \ +------####------------####------ \ +----########--------########---- \ +--####------------####---------- \ +--####------------####---------- \ +--####------------####---------- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [015a]; +Bitmap: \ +------####------------####------ \ +----########--------########---- \ +--####------------####---------- \ +----########--------########---- \ +----------####------------####-- \ +----------####------------####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0119]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--############----############-- \ +--####------------####---------- \ +----########--------########---- \ +----------####------------####-- +% +Unicode: [00df]; +Bitmap: \ +-------------------------------- \ +------######----------######---- \ +----####--####------####--####-- \ +----########--------########---- \ +----####--####------####--####-- \ +----####--######----####--###### \ +----##########------##########-- \ +--####------------####---------- +% +Unicode: [0141]; +Bitmap: \ +-------------------------------- \ +--####------------####---------- \ +--####------------####---------- \ +--########--------########------ \ +--######----------######-------- \ +######----------######---------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [0142]; +Bitmap: \ +-------------------------------- \ +----######----------######------ \ +------####------------####------ \ +------######----------######---- \ +----######----------######------ \ +------####------------####------ \ +----########--------########---- \ +-------------------------------- +% +Unicode: [0143]; +Bitmap: \ +--------####------------####---- \ +--##--####--##----##--####--##-- \ +--####----####----####----####-- \ +--############----############-- \ +--############----############-- \ +--####--######----####--######-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [0144]; +Bitmap: \ +--------####------------####---- \ +------####------------####------ \ +--##########------##########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +-------------------------------- +% +Unicode: [00d3]; +Bitmap: \ +----------####------------####-- \ +----########--------########---- \ +--####--##--##----####--##--##-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +-------------------------------- +% +Unicode: [015b]; +Bitmap: \ +--------####------------####---- \ +------####------------####------ \ +----##########------##########-- \ +--####------------####---------- \ +----########--------########---- \ +----------####------------####-- \ +--##########------##########---- \ +-------------------------------- +% +Unicode: [0106]; +Bitmap: \ +--------####------------####---- \ +----########--------########---- \ +--####--######----####--######-- \ +--####------------####---------- \ +--####------------####---------- \ +--####----####----####----####-- \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [0104]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--############----############-- \ +--####----####----####----####-- \ +------------####------------#### +% +Unicode: [017b]; +Bitmap: \ +------####------------####------ \ +--############----############-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--####------------####---------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [017c]; +Bitmap: \ +------####------------####------ \ +-------------------------------- \ +--############----############-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--############----############-- \ +-------------------------------- +% +Unicode: [0660]; +Bitmap: \ +-------------------------------- \ +----------####------------####-- \ +--------####------------####---- \ +------####------------####------ \ +----####------------####-------- \ +--####------------####---------- \ +--##--------------##------------ \ +-------------------------------- +% +Unicode: [0661]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--------##--------------##------ \ +------######----------######---- \ +----##########------##########-- \ +------######----------######---- \ +--------##--------------##------ \ +-------------------------------- +% +Unicode: [0662]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ \ +------####------------####------ +% +Unicode: [0663]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +--####------------####---------- \ +----####------------####-------- \ +------####------------####------ \ +--------####------------####---- \ +----------####------------####-- +% +Unicode: [0664]; +Bitmap: \ +-------------------------------- \ +--####--##--####--####--##--#### \ +--####--##--####--####--##--#### \ +--##############--############## \ +--######----------######-------- \ +----####------------####-------- \ +----######----------######------ \ +------####------------####------ +% +Unicode: [0665]; +Bitmap: \ +-------------------------------- \ +------########--------########-- \ +----######----------######------ \ +--######----------######-------- \ +------######----------######---- \ +----######----------######------ \ +--######----------######-------- \ +----##########------##########-- +% +Unicode: [0666]; +Bitmap: \ +-------------------------------- \ +------######----------######---- \ +----##########------##########-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--############----############-- \ +----########--------########---- +% +Unicode: [0667]; +Bitmap: \ +-------------------------------- \ +--##########------##########---- \ +--##########------##########---- \ +--------####------------####---- \ +--------####------------####---- \ +--------####------------####---- \ +--------####------------####---- \ +--------####------------####---- +% +Unicode: [0668]; +Bitmap: \ +-------------------------------- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +----########--------########---- \ +----########--------########---- \ +------####------------####------ +% +Unicode: [0669]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +----########--------########---- \ +----########--------########---- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- \ +--####----####----####----####-- +% +Unicode: [0624];[fe85];[fe86]; +Bitmap: \ +-------------------------------- \ +--####------------####---------- \ +####----############----######## \ +------####--####------####--#### \ +--------########--------######## \ +------------####------------#### \ +----------####------------####-- \ +--##########------##########---- +% +Unicode: [0634];[feb5];[feb6];[feb8]; +Bitmap: \ +--------####------------####---- \ +----####----####----####----#### \ +-------------------------------- \ +##----##--##--####----##--##--## \ +##----##--##--####----##--##--## \ +##----############----########## \ +########--------########-------- \ +--####------------####---------- +% +Unicode: [0648];[feed];[feee]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--------########--------######## \ +------####--####------####--#### \ +------##########------########## \ +------------####------------#### \ +----------####------------####-- \ +--##########------##########---- +% +Unicode: [0629];[fe93];[fe94]; +Bitmap: \ +------####--####------####--#### \ +-------------------------------- \ +--------########--------######## \ +------####--####------####--#### \ +------####--####------####--#### \ +------##########------########## \ +-------------------------------- \ +-------------------------------- +% +Unicode: [064a];[fef1];[fef2];[fef4]; +Bitmap: \ +-------------------------------- \ +--------######----------######-- \ +##----############----########## \ +##----####----####----####----## \ +####----####--######----####--## \ +--##########--##--##########--## \ +-------------------------------- \ +----####--####------####--####-- +% +Unicode: [062b];[fe99];[fe9a];[fe9c]; +Bitmap: \ +------####------------####------ \ +--####----####----####----####-- \ +-------------------------------- \ +####--------########--------#### \ +####--------########--------#### \ +--############----############-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0628];[fe8f];[fe90];[fe92]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +####--------########--------#### \ +####--------########--------#### \ +--############----############-- \ +-------------------------------- \ +------####------------####------ +% +Unicode: [0644];[fedd];[fede];[fee0]; +Bitmap: \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +--####------####--####------#### \ +--####------####--####------#### \ +--####------####--####------#### \ +----##########------##########-- +% +Unicode: [0621];[fe80]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +------######----------######---- \ +----####------------####-------- \ +------######----------######---- \ +----######----------######------ \ +----##--------------##---------- \ +-------------------------------- +% +Unicode: [0647];[fee9];[feea];[feec]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--------########--------######## \ +------####--####------####--#### \ +------####--####------####--#### \ +------##########------########## \ +-------------------------------- \ +-------------------------------- +% +Unicode: [062a];[fe95];[fe96];[fe98]; +Bitmap: \ +-------------------------------- \ +----####--####------####--####-- \ +-------------------------------- \ +####--------########--------#### \ +####--------########--------#### \ +--############----############-- \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0646];[fee5];[fee6];[fee8]; +Bitmap: \ +-------------------------------- \ +------####------------####------ \ +-------------------------------- \ +----##------##------##------##-- \ +--####------####--####------#### \ +--####------####--####------#### \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [0645];[fee1];[fee2];[fee4]; +Bitmap: \ +-------------------------------- \ +----------####------------####-- \ +------##########------########## \ +----########--##----########--## \ +--####----######--####----###### \ +--####------####--####------#### \ +--####------------####---------- \ +--####------------####---------- +% +Unicode: [062c];[fe9d];[fe9e];[fea0]; +Bitmap: \ +-------------------------------- \ +--########--------########------ \ +--------####------------####---- \ +----##########------##########-- \ +--####------####--####------#### \ +--####------------####---------- \ +--####------####--####------#### \ +----######----------######------ +% +Unicode: [062e];[fea5];[fea6];[fea8]; +Bitmap: \ +------------####------------#### \ +--########--------########------ \ +--------####------------####---- \ +----##########------##########-- \ +--####------####--####------#### \ +--####--------##--####--------## \ +--####------------####---------- \ +----########--------########---- +% +Unicode: [062d];[fea1];[fea2];[fea4]; +Bitmap: \ +-------------------------------- \ +--########--------########------ \ +--------####------------####---- \ +----##########------##########-- \ +--####------####--####------#### \ +--####--------##--####--------## \ +--####------------####---------- \ +----########--------########---- +% +Unicode: [0636];[febd];[febe];[fec0]; +Bitmap: \ +--------####------------####---- \ +-------------------------------- \ +--------########--------######## \ +##----####----####----####----## \ +##----##------####----##------## \ +##----############----########## \ +##########------##########------ \ +--######----------######-------- +% +Unicode: [0642];[fed5];[fed6];[fed8]; +Bitmap: \ +----####--####------####--####-- \ +-------------------------------- \ +----------######----------###### \ +--##----####--##--##----####--## \ +####------##########------###### \ +####--------########--------#### \ +--############----############-- \ +-------------------------------- +% +Unicode: [0633];[feb1];[feb2];[feb4]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +##----##--##--####----##--##--## \ +##----##--##--####----##--##--## \ +##----############----########## \ +##----########--##----########-- \ +########--------########-------- \ +--####------------####---------- +% +Unicode: [0641];[fed1];[fed2];[fed4]; +Bitmap: \ +-------------------------------- \ +----####------------####-------- \ +----------######----------###### \ +####----####--######----####--## \ +####------##########------###### \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0639];[fec9];[feca];[fecc]; +Bitmap: \ +-------------------------------- \ +--------######----------######-- \ +------####------------####------ \ +------####------------####------ \ +----############----############ \ +--####--------##--####--------## \ +--######----------######-------- \ +----##########------##########-- +% +Unicode: [0643];[fed9];[feda];[fedc]; +Bitmap: \ +------------####------------#### \ +----####----####----####----#### \ +----##------####----##------#### \ +--######----####--######----#### \ +------------####------------#### \ +##----------######----------#### \ +##############--##############-- \ +-------------------------------- +% +Unicode: [0635];[feb9];[feba];[febc]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--------########--------######## \ +##----####----####----####----## \ +##----##------####----##------## \ +##----############----########## \ +########--------########-------- \ +--####------------####---------- +% +Unicode: [063a];[fecd];[fece];[fed0]; +Bitmap: \ +--####------------####---------- \ +--------######----------######-- \ +------####------------####------ \ +------####------------####------ \ +----############----############ \ +--####--------##--####--------## \ +--######----------######-------- \ +----##########------##########-- +% +Unicode: [0649];[feef];[fef0]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--------######----------######-- \ +####--####--########--####--#### \ +####--####----######--####----## \ +####----####--######----####--## \ +####----####----####----####---- \ +--##########------##########---- +% +Unicode: [0632];[feaf];[feb0]; +Bitmap: \ +-------------------------------- \ +------------####------------#### \ +-------------------------------- \ +----------####------------####-- \ +------------####------------#### \ +------------####------------#### \ +----------####------------####-- \ +--##########------##########---- +% +Unicode: [feb7]; +Bitmap: \ +------####------------####------ \ +--####----####----####----####-- \ +-------------------------------- \ +--##----##----##--##----##----## \ +####--####--########--####--#### \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [062f];[fea9];[feaa];[0631];[fead];[feae]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +----------####------------####-- \ +------------####------------#### \ +------------####------------#### \ +----------####------------####-- \ +--##########------##########---- +% +Unicode: [0630];[feab];[feac]; +Bitmap: \ +----####------------####-------- \ +-------------------------------- \ +--------####------------####---- \ +----------####------------####-- \ +------------####------------#### \ +------------####------------#### \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [fef3]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +------------####------------#### \ +------------####------------#### \ +################################ \ +-------------------------------- \ +----####--####------####--####-- +% +Unicode: [fe9b]; +Bitmap: \ +------####------------####------ \ +--####----####----####----####-- \ +-------------------------------- \ +------------####------------#### \ +------------####------------#### \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fe91]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +------------####------------#### \ +------------####------------#### \ +################################ \ +-------------------------------- \ +----------####------------####-- +% +Unicode: [fedf]; +Bitmap: \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0627];[fe8d];[fe8e]; +Bitmap: \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +------------####------------#### \ +-------------------------------- \ +-------------------------------- +% +Unicode: [feeb]; +Bitmap: \ +-------------------------------- \ +------##--------------##-------- \ +----##########------##########-- \ +----##----######----##----###### \ +----######----##----######----## \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fe97]; +Bitmap: \ +-------------------------------- \ +--####--####------####--####---- \ +-------------------------------- \ +------------####------------#### \ +------------####------------#### \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fee7]; +Bitmap: \ +-------------------------------- \ +--------####------------####---- \ +-------------------------------- \ +------------####------------#### \ +------------####------------#### \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fee3]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +----------######----------###### \ +--------####--##--------####--## \ +############--##############--## \ +----------######----------###### \ +-------------------------------- +% +Unicode: [fe9f]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--########--------########------ \ +--##----####------##----####---- \ +----------####------------####-- \ +################################ \ +-------------------------------- \ +--------####------------####---- +% +Unicode: [fef7];[f3f8]; +Bitmap: \ +------------####------------#### \ +----##------####----##------#### \ +----####----####----####----#### \ +------####--####------####--#### \ +--------##--####--------##--#### \ +--------######----------######-- \ +--##########------##########---- \ +-------------------------------- +% +Unicode: [fea7]; +Bitmap: \ +----####------------####-------- \ +-------------------------------- \ +--########--------########------ \ +--##----####------##----####---- \ +----------####------------####-- \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fea3]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--########--------########------ \ +--##----####------##----####---- \ +----------####------------####-- \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [febf]; +Bitmap: \ +------####------------####------ \ +-------------------------------- \ +--------########--------######## \ +--##--####----##--##--####----## \ +########------##########------## \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fed7]; +Bitmap: \ +--####--####------####--####---- \ +-------------------------------- \ +------##########------########## \ +------####----##------####----## \ +--------########--------######## \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [feb3]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +-------------------------------- \ +--##----##----##--##----##----## \ +####--####--########--####--#### \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fed3]; +Bitmap: \ +----####------------####-------- \ +-------------------------------- \ +--------########--------######## \ +--------####--##--------####--## \ +----------######----------###### \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fecb]; +Bitmap: \ +-------------------------------- \ +------######----------######---- \ +----##########------##########-- \ +----####------------####-------- \ +------####------------####------ \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fedb]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +------######----------######---- \ +----------####------------####-- \ +------------####------------#### \ +------------####------------#### \ +----##########------##########-- \ +-------------------------------- +% +Unicode: [febb]; +Bitmap: \ +-------------------------------- \ +-------------------------------- \ +--------########--------######## \ +--##--####----##--##--####----## \ +########------##########------## \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0637];[fec1];[fec2];[fec4];[fec3]; +Bitmap: \ +--####------------####---------- \ +--####------------####---------- \ +--####--########--####--######## \ +--########----##--########----## \ +--######------##--######------## \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [fecf]; +Bitmap: \ +--####------------####---------- \ +------######----------######---- \ +----##########------##########-- \ +----####------------####-------- \ +------####------------####------ \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [0638];[fec5];[fec6];[fec8];[fec7]; +Bitmap: \ +--####--####------####--####---- \ +--####------------####---------- \ +--####--########--####--######## \ +--########----##--########----## \ +--######------##--######------## \ +################################ \ +-------------------------------- \ +-------------------------------- +% +Unicode: [061f]; +Bitmap: \ +-------------------------------- \ +----########--------########---- \ +--####----####----####----####-- \ +----####------------####-------- \ +------####------------####------ \ +-------------------------------- \ +------####------------####------ \ +-------------------------------- +% +// dotted-box (no such glyph) +Unicode: [0000]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --####--######-- \ +        --####--######-- \ +        --##------------ \ +        --##------------ \ +        ------------##-- \ +        ------------##-- \ +        --##------------ \ +        --##------------ \ +        ------------##-- \ +        ------------##-- \ +        --######--####-- \ +        --######--####-- \ +        ---------------- +        ---------------- +% +// backtick +Unicode: [0060]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ----####-------- \ +        ----####-------- \ +        ----####-------- \ +        ----####-------- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// curlies +Unicode: [007b]; +Bitmap: \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ----####-------- \ +        ----####-------- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        --------####---- \ +        --------####---- \ +        ---------------- +        ---------------- +% +Unicode: [007d]; +Bitmap: \ +        ----####-------- \ +        ----####-------- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ----####-------- \ +        ----####-------- \ +        ---------------- +        ---------------- +% +// tilde +Unicode: [007e]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --######----#### \ +        --######----#### \ +        ####--####--#### \ +        ####--####--#### \ +        ####----######-- \ +        ####----######-- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// euro +Unicode: [20ac]; +Bitmap: \ +        ------########-- \ +        ------########-- \ +        ----####-------- \ +        ----####-------- \ +        --##########---- \ +        --##########---- \ +        ----####-------- \ +        ----####-------- \ +        --##########---- \ +        --##########---- \ +        ----####-------- \ +        ----####-------- \ +        ------########-- \ +        ------########-- \ +        ---------------- +        ---------------- +% +// spanish left-quote +Unicode: [00ab]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        --####----####-- \ +        --####----####-- \ +        ####----####---- \ +        ####----####---- \ +        --####----####-- \ +        --####----####-- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// spanish right-quote +Unicode: [00bb]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ####----####---- \ +        ####----####---- \ +        --####----####-- \ +        --####----####-- \ +        ####----####---- \ +        ####----####---- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// spanish inverted question mark +Unicode: [00bf]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        --------####---- \ +        --------####---- \ +        --####----####-- \ +        --####----####-- \ +        ----########---- \ +        ----########---- \ +        ---------------- +        ---------------- +% +// copyright +Unicode: [00a9]; +Bitmap: \ +        --##########---- \ +        --##########---- \ +        ##----------##-- \ +        ##----------##-- \ +        ##----####--##-- \ +        ##----####--##-- \ +        ##--##------##-- \ +        ##--##------##-- \ +        ##----####--##-- \ +        ##----####--##-- \ +        ##----------##-- \ +        ##----------##-- \ +        --##########---- \ +        --##########---- \ +        ---------------- +        ---------------- +% +// registered +Unicode: [00ae]; +Bitmap: \ +        --##########---- \ +        --##########---- \ +        ##----------##-- \ +        ##----------##-- \ +        ##--####----##-- \ +        ##--####----##-- \ +        ##--##--##--##-- \ +        ##--##--##--##-- \ +        ##--####----##-- \ +        ##--####----##-- \ +        ##--##--##--##-- \ +        ##--##--##--##-- \ +        --##########---- \ +        --##########---- \ +        ---------------- +        ---------------- +% +// degrees +Unicode: [00b0];[00ba]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ----##----##---- \ +        ----##----##---- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// cents +Unicode: [00a2]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ----##########-- \ +        ----##########-- \ +        --####---------- \ +        --####---------- \ +        --####---------- \ +        --####---------- \ +        ----##########-- \ +        ----##########-- \ +        ------####------ \ +        ------####------ \ +        ---------------- +        ---------------- +% +// "currency sign" +// FIXME: not bold enough +Unicode: [00a4]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --##--------##-- \ +        --##--------##-- \ +        ----########---- \ +        ----########---- \ +        ----##----##---- \ +        ----##----##---- \ +        ----##----##---- \ +        ----##----##---- \ +        ----########---- \ +        ----########---- \ +        --##--------##-- \ +        --##--------##-- \ +        ---------------- +        ---------------- +% +// yen +Unicode: [00a5]; +Bitmap: \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ------####------ \ +        ------####------ \ +        --############-- \ +        --############-- \ +        ------####------ \ +        ------####------ \ +        --############-- \ +        --############-- \ +        ------####------ \ +        ------####------ \ +        ---------------- +        ---------------- +% +// broken bar +Unicode: [00a6]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ---------------- +        ---------------- +% +// section sign +// FIXME: not bold enough +Unicode: [00a7]; +Bitmap: \ +        ------######---- \ +        ------######---- \ +        ----##---------- \ +        ----##---------- \ +        ------####------ \ +        ------####------ \ +        ----##----##---- \ +        ----##----##---- \ +        ------####------ \ +        ------####------ \ +        ----------##---- \ +        ----------##---- \ +        ----######------ \ +        ----######------ \ +        ---------------- +        ---------------- +% +// diaresis (cha, cha, cha!) +Unicode: [00a8]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// feminine ordinal (superscript a) +Unicode: [00aa]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ----########---- \ +        ----########---- \ +        --------######-- \ +        --------######-- \ +        ----####--####-- \ +        ----####--####-- \ +        ------########-- \ +        ------########-- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// "not" sign +Unicode: [00ac]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        --############-- \ +        --############-- \ +        ----------####-- \ +        ----------####-- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// macron +Unicode: [00af]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --############-- \ +        --############-- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// plus-minus +Unicode: [00b1]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        --############-- \ +        --############-- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        --############-- \ +        --############-- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// superscript 2 +// FIXME: not bold enough +Unicode: [00b2]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ----####-------- \ +        ----####-------- \ +        --##----##------ \ +        --##----##------ \ +        ------##-------- \ +        ------##-------- \ +        ----##---------- \ +        ----##---------- \ +        --########------ \ +        --########------ \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// FIXME: not bold enough +// superscript 3 +Unicode: [00b3]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ----####-------- \ +        ----####-------- \ +        --##----##------ \ +        --##----##------ \ +        ------##-------- \ +        ------##-------- \ +        --##----##------ \ +        --##----##------ \ +        ----####-------- \ +        ----####-------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// acute +Unicode: [00b4]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// mu +Unicode: [00b5]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ----##########-- \ +        ----##########-- \ +        ----------####-- \ +        ----------####-- \ +        ---------------- +        ---------------- +% +// paragraph +Unicode: [00b6]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ----####--####-- \ +        ----####--####-- \ +        --######--####-- \ +        --######--####-- \ +        --######--####-- \ +        --######--####-- \ +        ----####--####-- \ +        ----####--####-- \ +        ------##--####-- \ +        ------##--####-- \ +        ------##--####-- \ +        ------##--####-- \ +        ---------------- +        ---------------- +% +// middle dot +Unicode: [00b7]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// superscript 1 +Unicode: [00b9]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ----######------ \ +        ----######------ \ +        ------####------ \ +        ------####------ \ +        ----########---- \ +        ----########---- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +// FIXME: MISSING fractions, 00bc/00bd/00bc, ¼ ½ ¾, hard to do in 8x8 +% +// A with grave +Unicode: [00c0]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ----####-------- \ +        ----####-------- \ +        ------####------ \ +        ------####------ \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --############-- \ +        --############-- \ +        --####----####-- \ +        --####----####-- \ +        ---------------- +        ---------------- +% +// A with acute +Unicode: [00c1]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --############-- \ +        --############-- \ +        --####----####-- \ +        --####----####-- \ +        ---------------- +        ---------------- +% +// A with circumflex +Unicode: [00c2]; +Bitmap: \ +        ----########---- \ +        ----########---- \ +        --##--------##-- \ +        --##--------##-- \ +        ------####------ \ +        ------####------ \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --############-- \ +        --############-- \ +        --####----####-- \ +        --####----####-- \ +        ---------------- +        ---------------- +% +// A with tilde +Unicode: [00c3]; +Bitmap: \ +        ----####--####-- \ +        ----####--####-- \ +        --####--####---- \ +        --####--####---- \ +        ------####------ \ +        ------####------ \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --############-- \ +        --############-- \ +        --####----####-- \ +        --####----####-- \ +        ---------------- +        ---------------- +% +// A with ring +Unicode: [00c5]; +Bitmap: \ +        ------####------ \ +        ------####------ \ +        ----##----##---- \ +        ----##----##---- \ +        ------####------ \ +        ------####------ \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --############-- \ +        --############-- \ +        --####----####-- \ +        --####----####-- \ +        ---------------- +        ---------------- +% +// AE ligature +Unicode: [00c6]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ----##########-- \ +        ----##########-- \ +        --########------ \ +        --########------ \ +        ####--####------ \ +        ####--####------ \ +        ##############-- \ +        ##############-- \ +        ####--####------ \ +        ####--####------ \ +        ####--########-- \ +        ####--########-- \ +        ---------------- +        ---------------- +// FIXME: this is hideous! +% +// C with cedilla +Unicode: [00c7]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --####---------- \ +        --####---------- \ +        --####----####-- \ +        --####----####-- \ +        ----########---- \ +        ----########---- \ +        ------####------ \ +        ------####------ \ +        ----####-------- +        ----####-------- +% +// E with circumflex +Unicode: [00ca]; +Bitmap: \ +        ----########---- \ +        ----########---- \ +        --##--------##-- \ +        --##--------##-- \ +        --############-- \ +        --############-- \ +        --####---------- \ +        --####---------- \ +        --##########---- \ +        --##########---- \ +        --####---------- \ +        --####---------- \ +        --############-- \ +        --############-- \ +        ---------------- +        ---------------- +// FIXME: ugly! +% +// E with umlaut +Unicode: [00cb]; +Bitmap: \ +        ----####--####-- \ +        ----####--####-- \ +        ---------------- \ +        ---------------- \ +        --############-- \ +        --############-- \ +        --####---------- \ +        --####---------- \ +        --##########---- \ +        --##########---- \ +        --####---------- \ +        --####---------- \ +        --############-- \ +        --############-- \ +        ---------------- +        ---------------- +% +// I with grave +Unicode: [00cc]; +Bitmap: \ +        ----####-------- \ +        ----####-------- \ +        ------####------ \ +        ------####------ \ +        --############-- \ +        --############-- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        --############-- \ +        --############-- \ +        ---------------- +        ---------------- +% +// I with acute +Unicode: [00cd]; +Bitmap: \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        --############-- \ +        --############-- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        --############-- \ +        --############-- \ +        ---------------- +        ---------------- +% +// I with circumflex +Unicode: [00ce]; +Bitmap: \ +        ----########---- \ +        ----########---- \ +        --##--------##-- \ +        --##--------##-- \ +        --############-- \ +        --############-- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        --############-- \ +        --############-- \ +        ---------------- +        ---------------- +// FIXME: ugly! +% +// I with umlaut +Unicode: [00cf]; +Bitmap: \ +        ----####--####-- \ +        ----####--####-- \ +        ---------------- \ +        ---------------- \ +        --############-- \ +        --############-- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        --############-- \ +        --############-- \ +        ---------------- +        ---------------- +% +// capital eth +Unicode: [00d0]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --########------ \ +        --########------ \ +        --####--####---- \ +        --####--####---- \ +        --####----####-- \ +        --####----####-- \ +        ########--####-- \ +        ########--####-- \ +        --####--####---- \ +        --####--####---- \ +        --########------ \ +        --########------ \ +        ---------------- +        ---------------- +% +// O with grave +Unicode: [00d2]; +Bitmap: \ +        --####---------- \ +        --####---------- \ +        ----########---- \ +        ----########---- \ +        --##--##--####-- \ +        --##--##--####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ----########---- \ +        ----########---- \ +        ---------------- +        ---------------- +// FIXME: MISSING Ô Õ +% +// multiplication +Unicode: [00d7]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --####----####-- \ +        --####----####-- \ +        ----########---- \ +        ----########---- \ +        ------####------ \ +        ------####------ \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +// FIXME: MISSING Ø +% +// U with grave +Unicode: [00d9]; +Bitmap: \ +        ----####-------- \ +        ----####-------- \ +        ------####------ \ +        ------####------ \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --############-- \ +        --############-- \ +        ---------------- +        ---------------- +% +// U with acute +Unicode: [00da]; +Bitmap: \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --############-- \ +        --############-- \ +        ---------------- +        ---------------- +// FIXME: MISSING Û +% +// Y with acute +Unicode: [00dd]; +Bitmap: \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ----########---- \ +        ----########---- \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ---------------- +        ---------------- +% +// capital thorn +Unicode: [00de]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --####---------- \ +        --####---------- \ +        --##########---- \ +        --##########---- \ +        --####----####-- \ +        --####----####-- \ +        --##########---- \ +        --##########---- \ +        --####---------- \ +        --####---------- \ +        --####---------- \ +        --####---------- \ +        ---------------- +        ---------------- +% +// a with circumflex +Unicode: [00e2]; +Bitmap: \ +        ----########---- \ +        ----########---- \ +        --##--------##-- \ +        --##--------##-- \ +        ---------------- \ +        ---------------- \ +        ----########---- \ +        ----########---- \ +        --------######-- \ +        --------######-- \ +        ----####--####-- \ +        ----####--####-- \ +        ------########-- \ +        ------########-- \ +        ---------------- +        ---------------- +% +// a with tilde +Unicode: [00e3]; +Bitmap: \ +        ----####--####-- \ +        ----####--####-- \ +        --####--####---- \ +        --####--####---- \ +        ---------------- \ +        ---------------- \ +        ----########---- \ +        ----########---- \ +        --------######-- \ +        --------######-- \ +        ----####--####-- \ +        ----####--####-- \ +        ------########-- +        ------########-- +// FIXME: touches bottom +% +// ae ligature +Unicode: [00e6]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        --######--####-- \ +        --######--####-- \ +        ------####--#### \ +        ------####--#### \ +        --############-- \ +        --############-- \ +        ####--####------ \ +        ####--####------ \ +        --############-- \ +        --############-- \ +        ---------------- +        ---------------- +// FIXME: fugly +% +// e with umlaut +Unicode: [00eb]; +Bitmap: \ +        --####----####-- \ +        --####----####-- \ +        ---------------- \ +        ---------------- \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --############-- \ +        --############-- \ +        --####---------- \ +        --####---------- \ +        ----########---- \ +        ----########---- \ +        ---------------- +        ---------------- +% +// i with acute +Unicode: [00ed]; +Bitmap: \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ----######------ \ +        ----######------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ------####------ \ +        ----########---- \ +        ----########---- \ +        ---------------- +        ---------------- +% +// lowercase eth +Unicode: [00f0]; +Bitmap: \ +        --####--##------ \ +        --####--##------ \ +        ----####-------- \ +        ----####-------- \ +        --##--####------ \ +        --##--####------ \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ----########---- \ +        ----########---- \ +        ---------------- +        ---------------- +% +// o with tilde +Unicode: [00f5]; +Bitmap: \ +        ----####--####-- \ +        ----####--####-- \ +        --####--####---- \ +        --####--####---- \ +        ---------------- \ +        ---------------- \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ----########---- \ +        ----########---- \ +        ---------------- +        ---------------- +% +// division +Unicode: [00f7]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        --############-- \ +        --############-- \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +// FIXME: MISSING ø +% +// y with acute +Unicode: [00fd]; +Bitmap: \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ----##########-- \ +        ----##########-- \ +        --------####---- \ +        --------####---- \ +        --########------ +        --########------ +% +// lowercase thorn +Unicode: [00fe]; +Bitmap: \ +        --####---------- \ +        --####---------- \ +        --####---------- \ +        --####---------- \ +        --########------ \ +        --########------ \ +        --####--####---- \ +        --####--####---- \ +        --########------ \ +        --########------ \ +        --####---------- \ +        --####---------- \ +        --####---------- \ +        --####---------- \ +        ---------------- +        ---------------- +% +// y with umlaut +Unicode: [00ff]; +Bitmap: \ +        --####----####-- \ +        --####----####-- \ +        ---------------- \ +        ---------------- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ----##########-- \ +        ----##########-- \ +        --------####---- \ +        --------####---- \ +        --########------ +        --########------ +% +// left single curly quote +Unicode: [2018]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ----####-------- \ +        ----####-------- \ +        ------####------ \ +        ------####------ \ +        --------####---- \ +        --------####---- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// right single curly quote +Unicode: [2019]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        ----####-------- \ +        ----####-------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// left double curly quote +Unicode: [201c]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ----####----#### \ +        ----####----#### \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// right double curly quote +Unicode: [201d]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        --####----####-- \ +        ####----####---- \ +        ####----####---- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// spanish left single quote +Unicode: [2039]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        ----####-------- \ +        ----####-------- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// spanish right single quote +Unicode: [203a]; +Bitmap: \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ---------------- \ +        ------####------ \ +        ------####------ \ +        --------####---- \ +        --------####---- \ +        ------####------ \ +        ------####------ \ +        ---------------- \ +        ---------------- \ +        ---------------- +        ---------------- +% +// replacement character for missing glyphs +Unicode: [fffd]; +Bitmap: \ +        ----########---- \ +        ----########---- \ +        --####----####-- \ +        --####----####-- \ +        --##--####--##-- \ +        --##--####--##-- \ +        --######--####-- \ +        --######--####-- \ +        --############-- \ +        --############-- \ +        --######--####-- \ +        --######--####-- \ +        ----########---- \ +        ----########---- \ +        ---------------- +        ---------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/fonts/fauxtari-24.bdf b/fonts/fauxtari-24.bdf new file mode 100644 index 0000000..8cb0933 --- /dev/null +++ b/fonts/fauxtari-24.bdf @@ -0,0 +1,13325 @@ +STARTFONT 2.1 +FONT -BW-Fauxtari Fixed Mono-Medium-R-Normal--24-240-75-75-C-240-iso10646-1 +SIZE 24 75 75 +FONTBOUNDINGBOX 24 24 0 -6 +STARTPROPERTIES 18 +FOUNDRY "BW" +FAMILY_NAME "Fauxtari Fixed Mono" +FACE_NAME "Fauxtari 24" +WEIGHT_NAME "Medium" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 24 +POINT_SIZE 240 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "C" +AVERAGE_WIDTH 240 +CHARSET_REGISTRY "iso10646" +CHARSET_ENCODING "1" +FONT_DESCENT 6 +FONT_ASCENT 18 +DEFAULT_CHAR 0 +ENDPROPERTIES +CHARS 429 +STARTCHAR C0000 +ENCODING 0 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8ff8 +1f8ff8 +1f8ff8 +1c0000 +1c0000 +1c0000 +000038 +000038 +000038 +1c0000 +1c0000 +1c0000 +000038 +000038 +000038 +1ff1f8 +1ff1f8 +1ff1f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0001 +ENCODING 32 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0002 +ENCODING 33 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0003 +ENCODING 34 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0004 +ENCODING 35 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +ffffff +ffffff +ffffff +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +ffffff +ffffff +ffffff +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0005 +ENCODING 36 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +03fff8 +03fff8 +03fff8 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0006 +ENCODING 37 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f8fc0 +1f8fc0 +1f8fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1f81f8 +1f81f8 +1f81f8 +1c01f8 +1c01f8 +1c01f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0007 +ENCODING 38 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007fc0 +007fc0 +007fc0 +03f1f8 +03f1f8 +03f1f8 +007fc0 +007fc0 +007fc0 +03fe00 +03fe00 +03fe00 +1f8fff +1f8fff +1f8fff +1f81f8 +1f81f8 +1f81f8 +03fe3f +03fe3f +03fe3f +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0008 +ENCODING 39 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0009 +ENCODING 40 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +007fc0 +007fc0 +007fc0 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007fc0 +007fc0 +007fc0 +000ff8 +000ff8 +000ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C000a +ENCODING 41 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ff000 +1ff000 +1ff000 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03fe00 +03fe00 +03fe00 +1ff000 +1ff000 +1ff000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C000b +ENCODING 42 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +ffffff +ffffff +ffffff +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C000c +ENCODING 43 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C000d +ENCODING 44 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +ENDCHAR +STARTCHAR C000e +ENCODING 45 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C000f +ENCODING 46 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0010 +ENCODING 47 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1f8000 +1f8000 +1f8000 +1c0000 +1c0000 +1c0000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0011 +ENCODING 48 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f8ff8 +1f8ff8 +1f8ff8 +1ff1f8 +1ff1f8 +1ff1f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0012 +ENCODING 49 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0013 +ENCODING 50 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0014 +ENCODING 51 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0015 +ENCODING 52 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000fc0 +000fc0 +000fc0 +007fc0 +007fc0 +007fc0 +03ffc0 +03ffc0 +03ffc0 +1f8fc0 +1f8fc0 +1f8fc0 +1ffff8 +1ffff8 +1ffff8 +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0016 +ENCODING 53 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +0001f8 +0001f8 +0001f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0017 +ENCODING 54 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0018 +ENCODING 55 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +0001f8 +0001f8 +0001f8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +03f000 +03f000 +03f000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0019 +ENCODING 56 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C001a +ENCODING 57 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +0001f8 +0001f8 +0001f8 +000fc0 +000fc0 +000fc0 +03fe00 +03fe00 +03fe00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C001b +ENCODING 58 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C001c +ENCODING 59 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +ENDCHAR +STARTCHAR C001d +ENCODING 60 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +0001f8 +0001f8 +0001f8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +0001f8 +0001f8 +0001f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C001e +ENCODING 61 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C001f +ENCODING 62 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1f8000 +1f8000 +1f8000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0020 +ENCODING 63 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0021 +ENCODING 64 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f8ff8 +1f8ff8 +1f8ff8 +1f8ff8 +1f8ff8 +1f8ff8 +1f8000 +1f8000 +1f8000 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0022 +ENCODING 65 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0023 +ENCODING 66 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1fffc0 +1fffc0 +1fffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0024 +ENCODING 67 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0025 +ENCODING 68 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +1f8fc0 +1f8fc0 +1f8fc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f8fc0 +1f8fc0 +1f8fc0 +1ffe00 +1ffe00 +1ffe00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0026 +ENCODING 69 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0027 +ENCODING 70 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0028 +ENCODING 71 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03fff8 +03fff8 +03fff8 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8ff8 +1f8ff8 +1f8ff8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0029 +ENCODING 72 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C002a +ENCODING 73 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C002b +ENCODING 74 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C002c +ENCODING 75 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f8fc0 +1f8fc0 +1f8fc0 +1ffe00 +1ffe00 +1ffe00 +1ffe00 +1ffe00 +1ffe00 +1f8fc0 +1f8fc0 +1f8fc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C002d +ENCODING 76 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C002e +ENCODING 77 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f803f +1f803f +1f803f +1ff1ff +1ff1ff +1ff1ff +1fffff +1fffff +1fffff +1f8e3f +1f8e3f +1f8e3f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +000000 +000000 +000000 +ENDCHAR +STARTCHAR C002f +ENCODING 78 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1ff1f8 +1ff1f8 +1ff1f8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1f8ff8 +1f8ff8 +1f8ff8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0030 +ENCODING 79 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0031 +ENCODING 80 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1fffc0 +1fffc0 +1fffc0 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0032 +ENCODING 81 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f8fc0 +1f8fc0 +1f8fc0 +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0033 +ENCODING 82 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1fffc0 +1fffc0 +1fffc0 +1f8fc0 +1f8fc0 +1f8fc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0034 +ENCODING 83 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0035 +ENCODING 84 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0036 +ENCODING 85 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0037 +ENCODING 86 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0038 +ENCODING 87 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f8e3f +1f8e3f +1f8e3f +1fffff +1fffff +1fffff +1ff1ff +1ff1ff +1ff1ff +1f803f +1f803f +1f803f +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0039 +ENCODING 88 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C003a +ENCODING 89 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C003b +ENCODING 90 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1f8000 +1f8000 +1f8000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C003c +ENCODING 91 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007ff8 +007ff8 +007ff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007ff8 +007ff8 +007ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C003d +ENCODING 92 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1c0000 +1c0000 +1c0000 +1f8000 +1f8000 +1f8000 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +0001f8 +0001f8 +0001f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C003e +ENCODING 93 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +1ffe00 +1ffe00 +1ffe00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C003f +ENCODING 94 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000e00 +000e00 +000e00 +007fc0 +007fc0 +007fc0 +03f1f8 +03f1f8 +03f1f8 +1f803f +1f803f +1f803f +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0040 +ENCODING 95 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ffffff +ffffff +ffffff +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0041 +ENCODING 96 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f000 +03f000 +03f000 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0042 +ENCODING 97 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0043 +ENCODING 98 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1fffc0 +1fffc0 +1fffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0044 +ENCODING 99 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0045 +ENCODING 100 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0046 +ENCODING 101 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0047 +ENCODING 102 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +007e00 +007e00 +007e00 +03fff8 +03fff8 +03fff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0048 +ENCODING 103 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0049 +ENCODING 104 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C004a +ENCODING 105 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C004b +ENCODING 106 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C004c +ENCODING 107 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8fc0 +1f8fc0 +1f8fc0 +1ffe00 +1ffe00 +1ffe00 +1f8fc0 +1f8fc0 +1f8fc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C004d +ENCODING 108 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C004e +ENCODING 109 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1fffff +1fffff +1fffff +1fffff +1fffff +1fffff +1f8e3f +1f8e3f +1f8e3f +1f803f +1f803f +1f803f +000000 +000000 +000000 +ENDCHAR +STARTCHAR C004f +ENCODING 110 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0050 +ENCODING 111 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0051 +ENCODING 112 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1fffc0 +1fffc0 +1fffc0 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0052 +ENCODING 113 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +ENDCHAR +STARTCHAR C0053 +ENCODING 114 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0054 +ENCODING 115 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03fff8 +03fff8 +03fff8 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0055 +ENCODING 116 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000ff8 +000ff8 +000ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0056 +ENCODING 117 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0057 +ENCODING 118 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0058 +ENCODING 119 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1f803f +1f803f +1f803f +1f8e3f +1f8e3f +1f8e3f +1fffff +1fffff +1fffff +03fff8 +03fff8 +03fff8 +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0059 +ENCODING 120 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C005a +ENCODING 121 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000fc0 +000fc0 +000fc0 +1ffe00 +1ffe00 +1ffe00 +ENDCHAR +STARTCHAR C005b +ENCODING 122 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C005c +ENCODING 123 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C005d +ENCODING 124 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C005e +ENCODING 125 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C005f +ENCODING 126 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ff03f +1ff03f +1ff03f +fc7e3f +fc7e3f +fc7e3f +fc0ff8 +fc0ff8 +fc0ff8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0060 +ENCODING 160 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0061 +ENCODING 161 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0062 +ENCODING 162 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03fff8 +03fff8 +03fff8 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +03fff8 +03fff8 +03fff8 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0063 +ENCODING 163 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007fc0 +007fc0 +007fc0 +03f000 +03f000 +03f000 +03f000 +03f000 +03f000 +1ffe00 +1ffe00 +1ffe00 +03f000 +03f000 +03f000 +03f000 +03f000 +03f000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0064 +ENCODING 164 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1c0038 +1c0038 +1c0038 +03ffc0 +03ffc0 +03ffc0 +0381c0 +0381c0 +0381c0 +0381c0 +0381c0 +0381c0 +03ffc0 +03ffc0 +03ffc0 +1c0038 +1c0038 +1c0038 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0065 +ENCODING 165 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0066 +ENCODING 166 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0067 +ENCODING 167 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007fc0 +007fc0 +007fc0 +038000 +038000 +038000 +007e00 +007e00 +007e00 +0381c0 +0381c0 +0381c0 +007e00 +007e00 +007e00 +0001c0 +0001c0 +0001c0 +03fe00 +03fe00 +03fe00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0068 +ENCODING 168 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0069 +ENCODING 169 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1fffc0 +1fffc0 +1fffc0 +e00038 +e00038 +e00038 +e07e38 +e07e38 +e07e38 +e38038 +e38038 +e38038 +e07e38 +e07e38 +e07e38 +e00038 +e00038 +e00038 +1fffc0 +1fffc0 +1fffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C006a +ENCODING 170 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +000ff8 +000ff8 +000ff8 +03f1f8 +03f1f8 +03f1f8 +007ff8 +007ff8 +007ff8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C006b +ENCODING 171 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +fc0fc0 +fc0fc0 +fc0fc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C006c +ENCODING 172 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +0001f8 +0001f8 +0001f8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C006d +ENCODING 173 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C006e +ENCODING 174 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1fffc0 +1fffc0 +1fffc0 +e00038 +e00038 +e00038 +e3f038 +e3f038 +e3f038 +e38e38 +e38e38 +e38e38 +e3f038 +e3f038 +e3f038 +e38e38 +e38e38 +e38e38 +1fffc0 +1fffc0 +1fffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C006f +ENCODING 175 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0070 +ENCODING 176 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +0381c0 +0381c0 +0381c0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0071 +ENCODING 177 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0072 +ENCODING 178 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f000 +03f000 +03f000 +1c0e00 +1c0e00 +1c0e00 +007000 +007000 +007000 +038000 +038000 +038000 +1ffe00 +1ffe00 +1ffe00 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0073 +ENCODING 179 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f000 +03f000 +03f000 +1c0e00 +1c0e00 +1c0e00 +007000 +007000 +007000 +1c0e00 +1c0e00 +1c0e00 +03f000 +03f000 +03f000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0074 +ENCODING 180 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0075 +ENCODING 181 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +0001f8 +0001f8 +0001f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0076 +ENCODING 182 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +1ff1f8 +1ff1f8 +1ff1f8 +1ff1f8 +1ff1f8 +1ff1f8 +03f1f8 +03f1f8 +03f1f8 +0071f8 +0071f8 +0071f8 +0071f8 +0071f8 +0071f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0077 +ENCODING 183 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0078 +ENCODING 184 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +ENDCHAR +STARTCHAR C0079 +ENCODING 185 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C007a +ENCODING 186 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +0381c0 +0381c0 +0381c0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C007b +ENCODING 187 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +fc0fc0 +fc0fc0 +fc0fc0 +1f81f8 +1f81f8 +1f81f8 +fc0fc0 +fc0fc0 +fc0fc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C007c +ENCODING 191 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C007d +ENCODING 192 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C007e +ENCODING 193 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C007f +ENCODING 194 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +1c0038 +1c0038 +1c0038 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0080 +ENCODING 195 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +1f8fc0 +1f8fc0 +1f8fc0 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0081 +ENCODING 196 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0082 +ENCODING 197 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +0381c0 +0381c0 +0381c0 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0083 +ENCODING 198 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03fff8 +03fff8 +03fff8 +1ffe00 +1ffe00 +1ffe00 +fc7e00 +fc7e00 +fc7e00 +fffff8 +fffff8 +fffff8 +fc7e00 +fc7e00 +fc7e00 +fc7ff8 +fc7ff8 +fc7ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0084 +ENCODING 199 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f8000 +1f8000 +1f8000 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +ENDCHAR +STARTCHAR C0085 +ENCODING 201 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +1f8000 +1f8000 +1f8000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0086 +ENCODING 202 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +1c0038 +1c0038 +1c0038 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +1f8000 +1f8000 +1f8000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0087 +ENCODING 203 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +1f8000 +1f8000 +1f8000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0088 +ENCODING 204 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0089 +ENCODING 205 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C008a +ENCODING 206 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +1c0038 +1c0038 +1c0038 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C008b +ENCODING 207 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C008c +ENCODING 208 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +1f8fc0 +1f8fc0 +1f8fc0 +1f81f8 +1f81f8 +1f81f8 +fff1f8 +fff1f8 +fff1f8 +1f8fc0 +1f8fc0 +1f8fc0 +1ffe00 +1ffe00 +1ffe00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C008d +ENCODING 209 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +1f8fc0 +1f8fc0 +1f8fc0 +000000 +000000 +000000 +1ff1f8 +1ff1f8 +1ff1f8 +1ff1f8 +1ff1f8 +1ff1f8 +1ffff8 +1ffff8 +1ffff8 +1f8ff8 +1f8ff8 +1f8ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C008e +ENCODING 210 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +1c71f8 +1c71f8 +1c71f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C008f +ENCODING 211 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +0001f8 +0001f8 +0001f8 +03ffc0 +03ffc0 +03ffc0 +1f8e38 +1f8e38 +1f8e38 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0090 +ENCODING 214 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0091 +ENCODING 215 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0092 +ENCODING 217 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0093 +ENCODING 218 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0094 +ENCODING 220 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0095 +ENCODING 221 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0096 +ENCODING 222 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8000 +1f8000 +1f8000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1fffc0 +1fffc0 +1fffc0 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0097 +ENCODING 223 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007fc0 +007fc0 +007fc0 +03f1f8 +03f1f8 +03f1f8 +03ffc0 +03ffc0 +03ffc0 +03f1f8 +03f1f8 +03f1f8 +03f1ff +03f1ff +03f1ff +03fff8 +03fff8 +03fff8 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0098 +ENCODING 224 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0099 +ENCODING 225 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C009a +ENCODING 226 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +1c0038 +1c0038 +1c0038 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +000ff8 +000ff8 +000ff8 +03f1f8 +03f1f8 +03f1f8 +007ff8 +007ff8 +007ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C009b +ENCODING 227 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +1f8fc0 +1f8fc0 +1f8fc0 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +000ff8 +000ff8 +000ff8 +03f1f8 +03f1f8 +03f1f8 +007ff8 +007ff8 +007ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C009c +ENCODING 228 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C009d +ENCODING 229 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +007fc0 +007fc0 +007fc0 +0001f8 +0001f8 +0001f8 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C009e +ENCODING 230 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1ff1f8 +1ff1f8 +1ff1f8 +007e3f +007e3f +007e3f +1ffff8 +1ffff8 +1ffff8 +fc7e00 +fc7e00 +fc7e00 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C009f +ENCODING 231 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +ENDCHAR +STARTCHAR C00a0 +ENCODING 232 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00a1 +ENCODING 233 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00a2 +ENCODING 234 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +fc003f +fc003f +fc003f +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00a3 +ENCODING 235 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00a4 +ENCODING 236 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00a5 +ENCODING 237 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00a6 +ENCODING 238 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00a7 +ENCODING 239 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00a8 +ENCODING 240 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8e00 +1f8e00 +1f8e00 +03f000 +03f000 +03f000 +1c7e00 +1c7e00 +1c7e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00a9 +ENCODING 241 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +1f8fc0 +1f8fc0 +1f8fc0 +000000 +000000 +000000 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00aa +ENCODING 242 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00ab +ENCODING 243 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00ac +ENCODING 244 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00ad +ENCODING 245 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +1f8fc0 +1f8fc0 +1f8fc0 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00ae +ENCODING 246 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00af +ENCODING 247 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00b0 +ENCODING 249 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00b1 +ENCODING 250 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00b2 +ENCODING 251 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00b3 +ENCODING 252 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00b4 +ENCODING 253 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000fc0 +000fc0 +000fc0 +1ffe00 +1ffe00 +1ffe00 +ENDCHAR +STARTCHAR C00b5 +ENCODING 254 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1ffe00 +1ffe00 +1ffe00 +1f8fc0 +1f8fc0 +1f8fc0 +1ffe00 +1ffe00 +1ffe00 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00b6 +ENCODING 255 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000fc0 +000fc0 +000fc0 +1ffe00 +1ffe00 +1ffe00 +ENDCHAR +STARTCHAR C00b7 +ENCODING 260 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +00003f +00003f +00003f +ENDCHAR +STARTCHAR C00b8 +ENCODING 261 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +00003f +00003f +00003f +ENDCHAR +STARTCHAR C00b9 +ENCODING 262 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +03ffc0 +03ffc0 +03ffc0 +1f8ff8 +1f8ff8 +1f8ff8 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00ba +ENCODING 263 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00bb +ENCODING 280 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1ffe00 +1ffe00 +1ffe00 +1f8000 +1f8000 +1f8000 +1ffe00 +1ffe00 +1ffe00 +1f8000 +1f8000 +1f8000 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007ff8 +007ff8 +007ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00bc +ENCODING 281 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +ENDCHAR +STARTCHAR C00bd +ENCODING 321 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1ffe00 +1ffe00 +1ffe00 +1ff000 +1ff000 +1ff000 +ff8000 +ff8000 +ff8000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00be +ENCODING 322 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +007fc0 +007fc0 +007fc0 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00bf +ENCODING 323 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +1c7e38 +1c7e38 +1c7e38 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1f8ff8 +1f8ff8 +1f8ff8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c0 +ENCODING 324 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +1fffc0 +1fffc0 +1fffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c1 +ENCODING 346 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c2 +ENCODING 347 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03fff8 +03fff8 +03fff8 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c3 +ENCODING 377 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +03f1f8 +03f1f8 +03f1f8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c4 +ENCODING 378 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c5 +ENCODING 379 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1f8000 +1f8000 +1f8000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c6 +ENCODING 380 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c7 +ENCODING 551 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +0001f8 +0001f8 +0001f8 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c8 +ENCODING 1488 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +fc01f8 +fc01f8 +fc01f8 +fff1f8 +fff1f8 +fff1f8 +fc7ff8 +fc7ff8 +fc7ff8 +fc0fc0 +fc0fc0 +fc0fc0 +fc01f8 +fc01f8 +fc01f8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00c9 +ENCODING 1489 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +fffe00 +fffe00 +fffe00 +007fc0 +007fc0 +007fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +fffff8 +fffff8 +fffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00ca +ENCODING 1490 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +1fffc0 +1fffc0 +1fffc0 +ff81f8 +ff81f8 +ff81f8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00cb +ENCODING 1491 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +fffff8 +fffff8 +fffff8 +007fc0 +007fc0 +007fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00cc +ENCODING 1492 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +0001f8 +0001f8 +0001f8 +1c01f8 +1c01f8 +1c01f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00cd +ENCODING 1493 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +007fc0 +007fc0 +007fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00ce +ENCODING 1494 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +1ff000 +1ff000 +1ff000 +03f000 +03f000 +03f000 +03f000 +03f000 +03f000 +03f000 +03f000 +03f000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00cf +ENCODING 1495 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00d0 +ENCODING 1496 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +fc7ff8 +fc7ff8 +fc7ff8 +fc71f8 +fc71f8 +fc71f8 +fc01f8 +fc01f8 +fc01f8 +fc01f8 +fc01f8 +fc01f8 +ffffc0 +ffffc0 +ffffc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00d1 +ENCODING 1497 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1fffc0 +1fffc0 +1fffc0 +007fc0 +007fc0 +007fc0 +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00d2 +ENCODING 1498 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +000ff8 +000ff8 +000ff8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +ENDCHAR +STARTCHAR C00d3 +ENCODING 1499 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +000ff8 +000ff8 +000ff8 +ffffc0 +ffffc0 +ffffc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00d4 +ENCODING 1500 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +fc0000 +fc0000 +fc0000 +ffffc0 +ffffc0 +ffffc0 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +000ff8 +000ff8 +000ff8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00d5 +ENCODING 1501 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00d6 +ENCODING 1502 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +fc7fc0 +fc7fc0 +fc7fc0 +1ff1f8 +1ff1f8 +1ff1f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f8ff8 +1f8ff8 +1f8ff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00d7 +ENCODING 1503 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007ff8 +007ff8 +007ff8 +000ff8 +000ff8 +000ff8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +ENDCHAR +STARTCHAR C00d8 +ENCODING 1504 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007ff8 +007ff8 +007ff8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +000ff8 +000ff8 +000ff8 +1fffc0 +1fffc0 +1fffc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00d9 +ENCODING 1505 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +fffff8 +fffff8 +fffff8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f8fc0 +1f8fc0 +1f8fc0 +1ffe00 +1ffe00 +1ffe00 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00da +ENCODING 1506 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ff8ff8 +ff8ff8 +ff8ff8 +1f81f8 +1f81f8 +1f81f8 +03f1f8 +03f1f8 +03f1f8 +03f1f8 +03f1f8 +03f1f8 +ffffc0 +ffffc0 +ffffc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00db +ENCODING 1507 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +1f8ff8 +1f8ff8 +1f8ff8 +1f81f8 +1f81f8 +1f81f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +ENDCHAR +STARTCHAR C00dc +ENCODING 1508 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +000ff8 +000ff8 +000ff8 +ffffc0 +ffffc0 +ffffc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00dd +ENCODING 1509 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +fc0ff8 +fc0ff8 +fc0ff8 +1f81f8 +1f81f8 +1f81f8 +1f8fc0 +1f8fc0 +1f8fc0 +1ffe00 +1ffe00 +1ffe00 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C00de +ENCODING 1510 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +fc01f8 +fc01f8 +fc01f8 +1f8ff8 +1f8ff8 +1f8ff8 +03fe00 +03fe00 +03fe00 +000fc0 +000fc0 +000fc0 +fffff8 +fffff8 +fffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00df +ENCODING 1511 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +000ff8 +000ff8 +000ff8 +fc01f8 +fc01f8 +fc01f8 +fc0fc0 +fc0fc0 +fc0fc0 +fc7e00 +fc7e00 +fc7e00 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +ENDCHAR +STARTCHAR C00e0 +ENCODING 1512 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +000ff8 +000ff8 +000ff8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +0001f8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00e1 +ENCODING 1513 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +e07038 +e07038 +e07038 +fc7038 +fc7038 +fc7038 +ff81f8 +ff81f8 +ff81f8 +fc0fc0 +fc0fc0 +fc0fc0 +ffffc0 +ffffc0 +ffffc0 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00e2 +ENCODING 1514 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +ffffc0 +ffffc0 +ffffc0 +1f8ff8 +1f8ff8 +1f8ff8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +ff81f8 +ff81f8 +ff81f8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00e3 +ENCODING 1567 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00e4 +ENCODING 1569 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +007fc0 +007fc0 +007fc0 +03f000 +03f000 +03f000 +007fc0 +007fc0 +007fc0 +03fe00 +03fe00 +03fe00 +038000 +038000 +038000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00e5 +ENCODING 1570 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C00e6 +ENCODING 1572 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8000 +1f8000 +1f8000 +fc0fff +fc0fff +fc0fff +007e3f +007e3f +007e3f +000fff +000fff +000fff +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C00e7 +ENCODING 1575 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00e8 +ENCODING 1576 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C00e9 +ENCODING 1577 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e3f +007e3f +007e3f +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007e3f +007e3f +007e3f +007fff +007fff +007fff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00ea +ENCODING 1578 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00eb +ENCODING 1579 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00ec +ENCODING 1580 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8000 +1f8000 +1f8000 +1f803f +1f803f +1f803f +03fe00 +03fe00 +03fe00 +ENDCHAR +STARTCHAR C00ed +ENCODING 1581 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8007 +1f8007 +1f8007 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C00ee +ENCODING 1582 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8007 +1f8007 +1f8007 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C00ef +ENCODING 1583 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C00f0 +ENCODING 1584 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +000000 +000000 +000000 +000fc0 +000fc0 +000fc0 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00f1 +ENCODING 1585 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C00f2 +ENCODING 1586 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +00003f +00003f +00003f +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C00f3 +ENCODING 1587 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e07fff +e07fff +e07fff +e07ff8 +e07ff8 +e07ff8 +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C00f4 +ENCODING 1588 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +03f03f +03f03f +03f03f +000000 +000000 +000000 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e07fff +e07fff +e07fff +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C00f5 +ENCODING 1589 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +e07e07 +e07e07 +e07e07 +e07007 +e07007 +e07007 +e07fff +e07fff +e07fff +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C00f6 +ENCODING 1590 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +000fff +000fff +000fff +e07e07 +e07e07 +e07e07 +e07007 +e07007 +e07007 +e07fff +e07fff +e07fff +fffe00 +fffe00 +fffe00 +1ff000 +1ff000 +1ff000 +ENDCHAR +STARTCHAR C00f7 +ENCODING 1591 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00f8 +ENCODING 1592 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8fc0 +1f8fc0 +1f8fc0 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00f9 +ENCODING 1593 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffff +03ffff +03ffff +1f8007 +1f8007 +1f8007 +1ff000 +1ff000 +1ff000 +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C00fa +ENCODING 1594 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +000ff8 +000ff8 +000ff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffff +03ffff +03ffff +1f8007 +1f8007 +1f8007 +1ff000 +1ff000 +1ff000 +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C00fb +ENCODING 1601 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f000 +03f000 +03f000 +0001ff +0001ff +0001ff +fc0fc7 +fc0fc7 +fc0fc7 +fc01ff +fc01ff +fc01ff +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00fc +ENCODING 1602 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +0001ff +0001ff +0001ff +1c0fc7 +1c0fc7 +1c0fc7 +fc01ff +fc01ff +fc01ff +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00fd +ENCODING 1603 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +03f03f +03f03f +03f03f +03803f +03803f +03803f +1ff03f +1ff03f +1ff03f +00003f +00003f +00003f +e0003f +e0003f +e0003f +fffff8 +fffff8 +fffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C00fe +ENCODING 1604 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C00ff +ENCODING 1605 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +007fff +007fff +007fff +03ffc7 +03ffc7 +03ffc7 +1f81ff +1f81ff +1f81ff +1f803f +1f803f +1f803f +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0100 +ENCODING 1606 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +038038 +038038 +038038 +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0101 +ENCODING 1607 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007e3f +007e3f +007e3f +007fff +007fff +007fff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0102 +ENCODING 1608 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007fff +007fff +007fff +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0103 +ENCODING 1609 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +fc7e3f +fc7e3f +fc7e3f +fc7e07 +fc7e07 +fc7e07 +fc0fc7 +fc0fc7 +fc0fc7 +fc0fc0 +fc0fc0 +fc0fc0 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0104 +ENCODING 1610 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +e07fff +e07fff +e07fff +e07e07 +e07e07 +e07e07 +fc0fc7 +fc0fc7 +fc0fc7 +1fffc7 +1fffc7 +1fffc7 +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +ENDCHAR +STARTCHAR C0105 +ENCODING 1632 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1f8000 +1f8000 +1f8000 +1c0000 +1c0000 +1c0000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0106 +ENCODING 1633 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000e00 +000e00 +000e00 +007fc0 +007fc0 +007fc0 +03fff8 +03fff8 +03fff8 +007fc0 +007fc0 +007fc0 +000e00 +000e00 +000e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0107 +ENCODING 1634 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0108 +ENCODING 1635 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f8000 +1f8000 +1f8000 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +0001f8 +0001f8 +0001f8 +ENDCHAR +STARTCHAR C0109 +ENCODING 1636 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8e3f +1f8e3f +1f8e3f +1f8e3f +1f8e3f +1f8e3f +1fffff +1fffff +1fffff +1ff000 +1ff000 +1ff000 +03f000 +03f000 +03f000 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C010a +ENCODING 1637 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007ff8 +007ff8 +007ff8 +03fe00 +03fe00 +03fe00 +1ff000 +1ff000 +1ff000 +007fc0 +007fc0 +007fc0 +03fe00 +03fe00 +03fe00 +1ff000 +1ff000 +1ff000 +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C010b +ENCODING 1638 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007fc0 +007fc0 +007fc0 +03fff8 +03fff8 +03fff8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1ffff8 +1ffff8 +1ffff8 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C010c +ENCODING 1639 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1fffc0 +1fffc0 +1fffc0 +1fffc0 +1fffc0 +1fffc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +000fc0 +ENDCHAR +STARTCHAR C010d +ENCODING 1640 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03ffc0 +03ffc0 +03ffc0 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C010e +ENCODING 1641 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +ENDCHAR +STARTCHAR C010f +ENCODING 8211 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0110 +ENCODING 8212 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0111 +ENCODING 8216 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0112 +ENCODING 8217 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0113 +ENCODING 8220 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +03f03f +03f03f +03f03f +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0114 +ENCODING 8221 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +1f81f8 +fc0fc0 +fc0fc0 +fc0fc0 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0115 +ENCODING 8249 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0116 +ENCODING 8250 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0117 +ENCODING 8364 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007ff8 +007ff8 +007ff8 +03f000 +03f000 +03f000 +1fffc0 +1fffc0 +1fffc0 +03f000 +03f000 +03f000 +1fffc0 +1fffc0 +1fffc0 +03f000 +03f000 +03f000 +007ff8 +007ff8 +007ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0118 +ENCODING 8592 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03f000 +03f000 +03f000 +1ffff8 +1ffff8 +1ffff8 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0119 +ENCODING 8593 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C011a +ENCODING 8594 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +000fc0 +000fc0 +000fc0 +1ffff8 +1ffff8 +1ffff8 +000fc0 +000fc0 +000fc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C011b +ENCODING 8595 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +1ffff8 +1ffff8 +1ffff8 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C011c +ENCODING 8624 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffff8 +1ffff8 +1ffff8 +1ffe00 +1ffe00 +1ffe00 +1fffc0 +1fffc0 +1fffc0 +1f8ff8 +1f8ff8 +1f8ff8 +1f81f8 +1f81f8 +1f81f8 +0001f8 +0001f8 +0001f8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C011d +ENCODING 9243 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1ffe00 +1ffe00 +1ffe00 +1f8000 +1f8000 +1f8000 +1ffe00 +1ffe00 +1ffe00 +1f8000 +1f8000 +1f8000 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +007ff8 +007ff8 +007ff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C011e +ENCODING 9473 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C011f +ENCODING 9475 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +ENDCHAR +STARTCHAR C0120 +ENCODING 9487 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +007fff +007fff +007fff +007fff +007fff +007fff +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0121 +ENCODING 9491 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +fffe00 +fffe00 +fffe00 +fffe00 +fffe00 +fffe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0122 +ENCODING 9495 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007fff +007fff +007fff +007fff +007fff +007fff +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0123 +ENCODING 9499 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +fffe00 +fffe00 +fffe00 +fffe00 +fffe00 +fffe00 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0124 +ENCODING 9507 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007fff +007fff +007fff +007fff +007fff +007fff +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0125 +ENCODING 9515 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +fffe00 +fffe00 +fffe00 +fffe00 +fffe00 +fffe00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0126 +ENCODING 9523 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0127 +ENCODING 9531 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0128 +ENCODING 9547 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0129 +ENCODING 9585 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +0001ff +0001ff +0001ff +000ff8 +000ff8 +000ff8 +007fc0 +007fc0 +007fc0 +03fe00 +03fe00 +03fe00 +1ff000 +1ff000 +1ff000 +ff8000 +ff8000 +ff8000 +fc0000 +fc0000 +fc0000 +ENDCHAR +STARTCHAR C012a +ENCODING 9586 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +fc0000 +fc0000 +fc0000 +ff8000 +ff8000 +ff8000 +1ff000 +1ff000 +1ff000 +03fe00 +03fe00 +03fe00 +007fc0 +007fc0 +007fc0 +000ff8 +000ff8 +000ff8 +0001ff +0001ff +0001ff +00003f +00003f +00003f +ENDCHAR +STARTCHAR C012b +ENCODING 9601 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +ENDCHAR +STARTCHAR C012c +ENCODING 9604 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +ENDCHAR +STARTCHAR C012d +ENCODING 9612 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +ENDCHAR +STARTCHAR C012e +ENCODING 9614 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +fc0000 +ENDCHAR +STARTCHAR C012f +ENCODING 9620 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +ffffff +ffffff +ffffff +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0130 +ENCODING 9622 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +ENDCHAR +STARTCHAR C0131 +ENCODING 9623 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +ENDCHAR +STARTCHAR C0132 +ENCODING 9624 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +fff000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0133 +ENCODING 9629 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000fff +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0134 +ENCODING 9654 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007000 +007000 +007000 +007e00 +007e00 +007e00 +007fc0 +007fc0 +007fc0 +007ff8 +007ff8 +007ff8 +007fc0 +007fc0 +007fc0 +007e00 +007e00 +007e00 +007000 +007000 +007000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0135 +ENCODING 9664 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000e00 +000e00 +000e00 +007e00 +007e00 +007e00 +03fe00 +03fe00 +03fe00 +1ffe00 +1ffe00 +1ffe00 +03fe00 +03fe00 +03fe00 +007e00 +007e00 +007e00 +000e00 +000e00 +000e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0136 +ENCODING 9670 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +03ffc0 +03ffc0 +03ffc0 +007e00 +007e00 +007e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0137 +ENCODING 9679 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +03ffc0 +03ffc0 +03ffc0 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0138 +ENCODING 9698 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000007 +000007 +000007 +00003f +00003f +00003f +0001ff +0001ff +0001ff +000fff +000fff +000fff +007fff +007fff +007fff +03ffff +03ffff +03ffff +1fffff +1fffff +1fffff +ffffff +ffffff +ffffff +ENDCHAR +STARTCHAR C0139 +ENCODING 9699 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +e00000 +e00000 +e00000 +fc0000 +fc0000 +fc0000 +ff8000 +ff8000 +ff8000 +fff000 +fff000 +fff000 +fffe00 +fffe00 +fffe00 +ffffc0 +ffffc0 +ffffc0 +fffff8 +fffff8 +fffff8 +ffffff +ffffff +ffffff +ENDCHAR +STARTCHAR C013a +ENCODING 9824 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +1ffff8 +007e00 +007e00 +007e00 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C013b +ENCODING 9827 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007fc0 +007fc0 +007fc0 +007fc0 +007fc0 +007fc0 +1ff1ff +1ff1ff +1ff1ff +1ff1ff +1ff1ff +1ff1ff +000e00 +000e00 +000e00 +007fc0 +007fc0 +007fc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C013c +ENCODING 9829 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +1fffff +1fffff +1fffff +1fffff +1fffff +1fffff +03fff8 +03fff8 +03fff8 +007fc0 +007fc0 +007fc0 +000e00 +000e00 +000e00 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C013d +ENCODING 62456 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +03803f +03803f +03803f +03f03f +03f03f +03f03f +007e3f +007e3f +007e3f +000e3f +000e3f +000e3f +000ff8 +000ff8 +000ff8 +1fffc0 +1fffc0 +1fffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C013e +ENCODING 65152 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +007fc0 +007fc0 +007fc0 +03f000 +03f000 +03f000 +007fc0 +007fc0 +007fc0 +03fe00 +03fe00 +03fe00 +038000 +038000 +038000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C013f +ENCODING 65153 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0140 +ENCODING 65154 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0141 +ENCODING 65157 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8000 +1f8000 +1f8000 +fc0fff +fc0fff +fc0fff +007e3f +007e3f +007e3f +000fff +000fff +000fff +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0142 +ENCODING 65158 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8000 +1f8000 +1f8000 +fc0fff +fc0fff +fc0fff +007e3f +007e3f +007e3f +000fff +000fff +000fff +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0143 +ENCODING 65165 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0144 +ENCODING 65166 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0145 +ENCODING 65167 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0146 +ENCODING 65168 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0147 +ENCODING 65169 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +00003f +00003f +00003f +00003f +00003f +00003f +ffffff +ffffff +ffffff +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +ENDCHAR +STARTCHAR C0148 +ENCODING 65170 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +007e00 +007e00 +007e00 +ENDCHAR +STARTCHAR C0149 +ENCODING 65171 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e3f +007e3f +007e3f +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007e3f +007e3f +007e3f +007fff +007fff +007fff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C014a +ENCODING 65172 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e3f +007e3f +007e3f +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007e3f +007e3f +007e3f +007fff +007fff +007fff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C014b +ENCODING 65173 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C014c +ENCODING 65174 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C014d +ENCODING 65175 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1f8fc0 +1f8fc0 +1f8fc0 +000000 +000000 +000000 +00003f +00003f +00003f +00003f +00003f +00003f +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C014e +ENCODING 65176 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C014f +ENCODING 65177 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0150 +ENCODING 65178 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0151 +ENCODING 65179 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +00003f +00003f +00003f +00003f +00003f +00003f +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0152 +ENCODING 65180 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +fc003f +fc003f +fc003f +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0153 +ENCODING 65181 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8000 +1f8000 +1f8000 +1f803f +1f803f +1f803f +03fe00 +03fe00 +03fe00 +ENDCHAR +STARTCHAR C0154 +ENCODING 65182 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8000 +1f8000 +1f8000 +1f803f +1f803f +1f803f +03fe00 +03fe00 +03fe00 +ENDCHAR +STARTCHAR C0155 +ENCODING 65183 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +1c0fc0 +1c0fc0 +1c0fc0 +0001f8 +0001f8 +0001f8 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000fc0 +000fc0 +000fc0 +ENDCHAR +STARTCHAR C0156 +ENCODING 65184 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8000 +1f8000 +1f8000 +1f803f +1f803f +1f803f +03fe00 +03fe00 +03fe00 +ENDCHAR +STARTCHAR C0157 +ENCODING 65185 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8007 +1f8007 +1f8007 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C0158 +ENCODING 65186 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8007 +1f8007 +1f8007 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C0159 +ENCODING 65187 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +1c0fc0 +1c0fc0 +1c0fc0 +0001f8 +0001f8 +0001f8 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C015a +ENCODING 65188 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8007 +1f8007 +1f8007 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C015b +ENCODING 65189 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8007 +1f8007 +1f8007 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C015c +ENCODING 65190 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8007 +1f8007 +1f8007 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C015d +ENCODING 65191 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +000000 +000000 +000000 +1ffe00 +1ffe00 +1ffe00 +1c0fc0 +1c0fc0 +1c0fc0 +0001f8 +0001f8 +0001f8 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C015e +ENCODING 65192 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +1ffe00 +1ffe00 +1ffe00 +000fc0 +000fc0 +000fc0 +03fff8 +03fff8 +03fff8 +1f803f +1f803f +1f803f +1f8007 +1f8007 +1f8007 +1f8000 +1f8000 +1f8000 +03ffc0 +03ffc0 +03ffc0 +ENDCHAR +STARTCHAR C015f +ENCODING 65193 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0160 +ENCODING 65194 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0161 +ENCODING 65195 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +000000 +000000 +000000 +000fc0 +000fc0 +000fc0 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0162 +ENCODING 65196 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +000000 +000000 +000000 +000fc0 +000fc0 +000fc0 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0163 +ENCODING 65197 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0164 +ENCODING 65198 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0165 +ENCODING 65199 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +00003f +00003f +00003f +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0166 +ENCODING 65200 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +00003f +00003f +00003f +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C0167 +ENCODING 65201 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e07fff +e07fff +e07fff +e07ff8 +e07ff8 +e07ff8 +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0168 +ENCODING 65202 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e07fff +e07fff +e07fff +e07ff8 +e07ff8 +e07ff8 +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0169 +ENCODING 65203 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +1c0e07 +1c0e07 +1c0e07 +fc7e3f +fc7e3f +fc7e3f +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C016a +ENCODING 65204 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e07fff +e07fff +e07fff +e07ff8 +e07ff8 +e07ff8 +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C016b +ENCODING 65205 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +03f03f +03f03f +03f03f +000000 +000000 +000000 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e07fff +e07fff +e07fff +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C016c +ENCODING 65206 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +03f03f +03f03f +03f03f +000000 +000000 +000000 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e07fff +e07fff +e07fff +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C016d +ENCODING 65207 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +1f81f8 +1f81f8 +1f81f8 +000000 +000000 +000000 +1c0e07 +1c0e07 +1c0e07 +fc7e3f +fc7e3f +fc7e3f +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C016e +ENCODING 65208 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +03f03f +03f03f +03f03f +000000 +000000 +000000 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e071c7 +e07fff +e07fff +e07fff +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C016f +ENCODING 65209 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +e07e07 +e07e07 +e07e07 +e07007 +e07007 +e07007 +e07fff +e07fff +e07fff +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0170 +ENCODING 65210 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +e07e07 +e07e07 +e07e07 +e07007 +e07007 +e07007 +e07fff +e07fff +e07fff +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0171 +ENCODING 65211 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +1c7e07 +1c7e07 +1c7e07 +fff007 +fff007 +fff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0172 +ENCODING 65212 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +e07e07 +e07e07 +e07e07 +e07007 +e07007 +e07007 +e07fff +e07fff +e07fff +fff000 +fff000 +fff000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0173 +ENCODING 65213 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +000fff +000fff +000fff +e07e07 +e07e07 +e07e07 +e07007 +e07007 +e07007 +e07fff +e07fff +e07fff +fffe00 +fffe00 +fffe00 +1ff000 +1ff000 +1ff000 +ENDCHAR +STARTCHAR C0174 +ENCODING 65214 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +000fff +000fff +000fff +e07e07 +e07e07 +e07e07 +e07007 +e07007 +e07007 +e07fff +e07fff +e07fff +fffe00 +fffe00 +fffe00 +1ff000 +1ff000 +1ff000 +ENDCHAR +STARTCHAR C0175 +ENCODING 65215 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +007e00 +007e00 +007e00 +000000 +000000 +000000 +000fff +000fff +000fff +1c7e07 +1c7e07 +1c7e07 +fff007 +fff007 +fff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0176 +ENCODING 65216 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +000fff +000fff +000fff +e07e07 +e07e07 +e07e07 +e07007 +e07007 +e07007 +e07fff +e07fff +e07fff +fffe00 +fffe00 +fffe00 +1ff000 +1ff000 +1ff000 +ENDCHAR +STARTCHAR C0177 +ENCODING 65217 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0178 +ENCODING 65218 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0179 +ENCODING 65219 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C017a +ENCODING 65220 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C017b +ENCODING 65221 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8fc0 +1f8fc0 +1f8fc0 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C017c +ENCODING 65222 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8fc0 +1f8fc0 +1f8fc0 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C017d +ENCODING 65223 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8fc0 +1f8fc0 +1f8fc0 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C017e +ENCODING 65224 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8fc0 +1f8fc0 +1f8fc0 +1f8000 +1f8000 +1f8000 +1f8fff +1f8fff +1f8fff +1ffe07 +1ffe07 +1ffe07 +1ff007 +1ff007 +1ff007 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C017f +ENCODING 65225 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffff +03ffff +03ffff +1f8007 +1f8007 +1f8007 +1ff000 +1ff000 +1ff000 +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C0180 +ENCODING 65226 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffff +03ffff +03ffff +1f8007 +1f8007 +1f8007 +1ff000 +1ff000 +1ff000 +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C0181 +ENCODING 65227 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007fc0 +007fc0 +007fc0 +03fff8 +03fff8 +03fff8 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0182 +ENCODING 65228 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffff +03ffff +03ffff +1f8007 +1f8007 +1f8007 +1ff000 +1ff000 +1ff000 +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C0183 +ENCODING 65229 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +000ff8 +000ff8 +000ff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffff +03ffff +03ffff +1f8007 +1f8007 +1f8007 +1ff000 +1ff000 +1ff000 +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C0184 +ENCODING 65230 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +000ff8 +000ff8 +000ff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffff +03ffff +03ffff +1f8007 +1f8007 +1f8007 +1ff000 +1ff000 +1ff000 +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C0185 +ENCODING 65231 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +007fc0 +007fc0 +007fc0 +03fff8 +03fff8 +03fff8 +03f000 +03f000 +03f000 +007e00 +007e00 +007e00 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0186 +ENCODING 65232 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8000 +1f8000 +1f8000 +000ff8 +000ff8 +000ff8 +007e00 +007e00 +007e00 +007e00 +007e00 +007e00 +03ffff +03ffff +03ffff +1f8007 +1f8007 +1f8007 +1ff000 +1ff000 +1ff000 +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C0187 +ENCODING 65233 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f000 +03f000 +03f000 +0001ff +0001ff +0001ff +fc0fc7 +fc0fc7 +fc0fc7 +fc01ff +fc01ff +fc01ff +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0188 +ENCODING 65234 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f000 +03f000 +03f000 +0001ff +0001ff +0001ff +fc0fc7 +fc0fc7 +fc0fc7 +fc01ff +fc01ff +fc01ff +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0189 +ENCODING 65235 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f000 +03f000 +03f000 +000000 +000000 +000000 +000fff +000fff +000fff +000fc7 +000fc7 +000fc7 +0001ff +0001ff +0001ff +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C018a +ENCODING 65236 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +03f000 +03f000 +03f000 +0001ff +0001ff +0001ff +fc0fc7 +fc0fc7 +fc0fc7 +fc01ff +fc01ff +fc01ff +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C018b +ENCODING 65237 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +0001ff +0001ff +0001ff +1c0fc7 +1c0fc7 +1c0fc7 +fc01ff +fc01ff +fc01ff +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C018c +ENCODING 65238 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +0001ff +0001ff +0001ff +1c0fc7 +1c0fc7 +1c0fc7 +fc01ff +fc01ff +fc01ff +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C018d +ENCODING 65239 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +1f8fc0 +1f8fc0 +1f8fc0 +000000 +000000 +000000 +007fff +007fff +007fff +007e07 +007e07 +007e07 +000fff +000fff +000fff +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C018e +ENCODING 65240 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03f1f8 +03f1f8 +03f1f8 +000000 +000000 +000000 +0001ff +0001ff +0001ff +1c0fc7 +1c0fc7 +1c0fc7 +fc01ff +fc01ff +fc01ff +fc003f +fc003f +fc003f +1ffff8 +1ffff8 +1ffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C018f +ENCODING 65241 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +03f03f +03f03f +03f03f +03803f +03803f +03803f +1ff03f +1ff03f +1ff03f +00003f +00003f +00003f +e0003f +e0003f +e0003f +fffff8 +fffff8 +fffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0190 +ENCODING 65242 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +03f03f +03f03f +03f03f +03803f +03803f +03803f +1ff03f +1ff03f +1ff03f +00003f +00003f +00003f +e0003f +e0003f +e0003f +fffff8 +fffff8 +fffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0191 +ENCODING 65243 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +007fc0 +007fc0 +007fc0 +0001f8 +0001f8 +0001f8 +00003f +00003f +00003f +00003f +00003f +00003f +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0192 +ENCODING 65244 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +03f03f +03f03f +03f03f +03803f +03803f +03803f +1ff03f +1ff03f +1ff03f +00003f +00003f +00003f +e0003f +e0003f +e0003f +fffff8 +fffff8 +fffff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0193 +ENCODING 65245 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C0194 +ENCODING 65246 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C0195 +ENCODING 65247 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C0196 +ENCODING 65248 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +00003f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +03fff8 +03fff8 +03fff8 +ENDCHAR +STARTCHAR C0197 +ENCODING 65249 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +007fff +007fff +007fff +03ffc7 +03ffc7 +03ffc7 +1f81ff +1f81ff +1f81ff +1f803f +1f803f +1f803f +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0198 +ENCODING 65250 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +007fff +007fff +007fff +03ffc7 +03ffc7 +03ffc7 +1f81ff +1f81ff +1f81ff +1f803f +1f803f +1f803f +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C0199 +ENCODING 65251 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +0001ff +0001ff +0001ff +000fc7 +000fc7 +000fc7 +ffffc7 +ffffc7 +ffffc7 +0001ff +0001ff +0001ff +000000 +000000 +000000 +ENDCHAR +STARTCHAR C019a +ENCODING 65252 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +0001f8 +0001f8 +0001f8 +007fff +007fff +007fff +03ffc7 +03ffc7 +03ffc7 +1f81ff +1f81ff +1f81ff +1f803f +1f803f +1f803f +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +1f8000 +ENDCHAR +STARTCHAR C019b +ENCODING 65253 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +038038 +038038 +038038 +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C019c +ENCODING 65254 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +038038 +038038 +038038 +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C019d +ENCODING 65255 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000fc0 +000fc0 +000fc0 +000000 +000000 +000000 +00003f +00003f +00003f +00003f +00003f +00003f +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C019e +ENCODING 65256 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007e00 +007e00 +007e00 +000000 +000000 +000000 +038038 +038038 +038038 +1f803f +1f803f +1f803f +1f803f +1f803f +1f803f +03fff8 +03fff8 +03fff8 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C019f +ENCODING 65257 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007e3f +007e3f +007e3f +007fff +007fff +007fff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C01a0 +ENCODING 65258 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007e3f +007e3f +007e3f +007fff +007fff +007fff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C01a1 +ENCODING 65259 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +007000 +007000 +007000 +03fff8 +03fff8 +03fff8 +0381ff +0381ff +0381ff +03fe07 +03fe07 +03fe07 +ffffff +ffffff +ffffff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C01a2 +ENCODING 65260 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007e3f +007e3f +007e3f +007fff +007fff +007fff +000000 +000000 +000000 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C01a3 +ENCODING 65261 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007fff +007fff +007fff +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C01a4 +ENCODING 65262 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000fff +000fff +000fff +007e3f +007e3f +007e3f +007fff +007fff +007fff +00003f +00003f +00003f +0001f8 +0001f8 +0001f8 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C01a5 +ENCODING 65263 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +fc7e3f +fc7e3f +fc7e3f +fc7e07 +fc7e07 +fc7e07 +fc0fc7 +fc0fc7 +fc0fc7 +fc0fc0 +fc0fc0 +fc0fc0 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C01a6 +ENCODING 65264 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +fc7e3f +fc7e3f +fc7e3f +fc7e07 +fc7e07 +fc7e07 +fc0fc7 +fc0fc7 +fc0fc7 +fc0fc0 +fc0fc0 +fc0fc0 +1fffc0 +1fffc0 +1fffc0 +ENDCHAR +STARTCHAR C01a7 +ENCODING 65265 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +e07fff +e07fff +e07fff +e07e07 +e07e07 +e07e07 +fc0fc7 +fc0fc7 +fc0fc7 +1fffc7 +1fffc7 +1fffc7 +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +ENDCHAR +STARTCHAR C01a8 +ENCODING 65266 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +e07fff +e07fff +e07fff +e07e07 +e07e07 +e07e07 +fc0fc7 +fc0fc7 +fc0fc7 +1fffc7 +1fffc7 +1fffc7 +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +ENDCHAR +STARTCHAR C01a9 +ENCODING 65267 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +00003f +00003f +00003f +00003f +00003f +00003f +ffffff +ffffff +ffffff +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +ENDCHAR +STARTCHAR C01aa +ENCODING 65268 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +000000 +000000 +000000 +000ff8 +000ff8 +000ff8 +e07fff +e07fff +e07fff +e07e07 +e07e07 +e07e07 +fc0fc7 +fc0fc7 +fc0fc7 +1fffc7 +1fffc7 +1fffc7 +000000 +000000 +000000 +03f1f8 +03f1f8 +03f1f8 +ENDCHAR +STARTCHAR C01ab +ENCODING 65271 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +00003f +00003f +00003f +03803f +03803f +03803f +03f03f +03f03f +03f03f +007e3f +007e3f +007e3f +000e3f +000e3f +000e3f +000ff8 +000ff8 +000ff8 +1fffc0 +1fffc0 +1fffc0 +000000 +000000 +000000 +ENDCHAR +STARTCHAR C01ac +ENCODING 65533 +SWIDTH 666 0 +DWIDTH 24 0 +BBX 24 24 0 -6 +BITMAP +03ffc0 +03ffc0 +03ffc0 +1f81f8 +1f81f8 +1f81f8 +1c7e38 +1c7e38 +1c7e38 +1ff1f8 +1ff1f8 +1ff1f8 +1ffff8 +1ffff8 +1ffff8 +1ff1f8 +1ff1f8 +1ff1f8 +03ffc0 +03ffc0 +03ffc0 +000000 +000000 +000000 +ENDCHAR +ENDFONT diff --git a/fonts/fauxtari-24.psf b/fonts/fauxtari-24.psf Binary files differnew file mode 100644 index 0000000..901df8d --- /dev/null +++ b/fonts/fauxtari-24.psf diff --git a/fonts/fauxtari-24.txt b/fonts/fauxtari-24.txt new file mode 100644 index 0000000..e667ba8 --- /dev/null +++ b/fonts/fauxtari-24.txt @@ -0,0 +1,5331 @@ +%PSF2 +Version: 0 +Flags: 1 +Length: 512 +Width: 24 +Height: 24 +% +Unicode: [2665]; +Bitmap: \ +------------------------------------------------------------------------ \ +------######---######---------######---######---------######---######--- \ +---#####################---#####################---##################### \ +---#####################---#####################---##################### \ +------###############---------###############---------###############--- \ +---------#########---------------#########---------------#########------ \ +------------###---------------------###---------------------###--------- \ +------------------------------------------------------------------------ +% +Unicode: [2523]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------###############---------###############---------############### \ +---------###############---------###############---------############### \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- +% +Unicode: [2503]; +Bitmap: \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### +% +Unicode: [251b]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +###############---------###############---------###############--------- \ +###############---------###############---------###############--------- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [252b]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +###############---------###############---------###############--------- \ +###############---------###############---------###############--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- +% +Unicode: [2513]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +###############---------###############---------###############--------- \ +###############---------###############---------###############--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- +% +Unicode: [2571]; +Bitmap: \ +------------------######------------------######------------------###### \ +---------------#########---------------#########---------------######### \ +------------#########---------------#########---------------#########--- \ +---------#########---------------#########---------------#########------ \ +------#########---------------#########---------------#########--------- \ +---#########---------------#########---------------#########------------ \ +#########---------------#########---------------#########--------------- \ +######------------------######------------------######------------------ +% +Unicode: [2572]; +Bitmap: \ +######------------------######------------------######------------------ \ +#########---------------#########---------------#########--------------- \ +---#########---------------#########---------------#########------------ \ +------#########---------------#########---------------#########--------- \ +---------#########---------------#########---------------#########------ \ +------------#########---------------#########---------------#########--- \ +---------------#########---------------#########---------------######### \ +------------------######------------------######------------------###### +% +Unicode: [25e2]; +Bitmap: \ +---------------------###---------------------###---------------------### \ +------------------######------------------######------------------###### \ +---------------#########---------------#########---------------######### \ +------------############------------############------------############ \ +---------###############---------###############---------############### \ +------##################------##################------################## \ +---#####################---#####################---##################### \ +######################################################################## +% +Unicode: [2597]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------############------------############------------############ \ +------------############------------############------------############ \ +------------############------------############------------############ \ +------------############------------############------------############ +% +Unicode: [25e3]; +Bitmap: \ +###---------------------###---------------------###--------------------- \ +######------------------######------------------######------------------ \ +#########---------------#########---------------#########--------------- \ +############------------############------------############------------ \ +###############---------###############---------###############--------- \ +##################------##################------##################------ \ +#####################---#####################---#####################--- \ +######################################################################## +% +Unicode: [259d]; +Bitmap: \ +------------############------------############------------############ \ +------------############------------############------------############ \ +------------############------------############------------############ \ +------------############------------############------------############ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [2598]; +Bitmap: \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [2594]; +Bitmap: \ +######################################################################## \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [2581]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +######################################################################## \ +######################################################################## +% +Unicode: [2596]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ +% +Unicode: [2663]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------#########---------------#########---------------#########------ \ +---------#########---------------#########---------------#########------ \ +---#########---#########---#########---#########---#########---######### \ +---#########---#########---#########---#########---#########---######### \ +------------###---------------------###---------------------###--------- \ +---------#########---------------#########---------------#########------ \ +------------------------------------------------------------------------ +% +Unicode: [250f]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---------###############---------###############---------############### \ +---------###############---------###############---------############### \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- +% +Unicode: [2501]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +######################################################################## \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [254b]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +######################################################################## \ +######################################################################## \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- +% +Unicode: [25cf]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---##################------##################------##################--- \ +---##################------##################------##################--- \ +---##################------##################------##################--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [2584]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +######################################################################## \ +######################################################################## \ +######################################################################## \ +######################################################################## +% +Unicode: [258e]; +Bitmap: \ +######------------------######------------------######------------------ \ +######------------------######------------------######------------------ \ +######------------------######------------------######------------------ \ +######------------------######------------------######------------------ \ +######------------------######------------------######------------------ \ +######------------------######------------------######------------------ \ +######------------------######------------------######------------------ \ +######------------------######------------------######------------------ +% +Unicode: [2533]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +######################################################################## \ +######################################################################## \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- +% +Unicode: [253b]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +######################################################################## \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [258c]; +Bitmap: \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ \ +############------------############------------############------------ +% +Unicode: [2517]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------###############---------###############---------############### \ +---------###############---------###############---------############### \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0118];[241b]; +Bitmap: \ +---############------------############------------############--------- \ +---######------------------######------------------######--------------- \ +---############------------############------------############--------- \ +---######------------------######------------------######--------------- \ +---##################------##################------##################--- \ +---------######------------------######------------------######--------- \ +---------############------------############------------############--- \ +------------------------------------------------------------------------ +% +Unicode: [2191]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---##################------##################------##################--- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [2193]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---##################------##################------##################--- \ +------############------------############------------############------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [2190]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---##################------##################------##################--- \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [2192]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------------######------------------######------------------######------ \ +---##################------##################------##################--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0020];[00a0]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0021]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [0022]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0023]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +######################################################################## \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +######################################################################## \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [0024]; +Bitmap: \ +---------######------------------######------------------######--------- \ +------###############---------###############---------###############--- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +---###############---------###############---------###############------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [0025]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######---######---------######---######---------######---######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---######------######------######------######------######------######--- \ +---###---------######------###---------######------###---------######--- \ +------------------------------------------------------------------------ +% +Unicode: [0026]; +Bitmap: \ +---------#########---------------#########---------------#########------ \ +------######---######---------######---######---------######---######--- \ +---------#########---------------#########---------------#########------ \ +------#########---------------#########---------------#########--------- \ +---######---############---######---############---######---############ \ +---######------######------######------######------######------######--- \ +------#########---######------#########---######------#########---###### \ +------------------------------------------------------------------------ +% +Unicode: [0027]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0028]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------#########---------------#########---------------#########--- \ +---------#########---------------#########---------------#########------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------#########---------------#########---------------#########------ \ +------------#########---------------#########---------------#########--- \ +------------------------------------------------------------------------ +% +Unicode: [0029]; +Bitmap: \ +------------------------------------------------------------------------ \ +---#########---------------#########---------------#########------------ \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------#########---------------#########---------------#########--------- \ +---#########---------------#########---------------#########------------ \ +------------------------------------------------------------------------ +% +Unicode: [002a]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +######################################################################## \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [002b]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---##################------##################------##################--- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [002c];[00b8]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ +% +Unicode: [002d];[00ad];[2013];[2014]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [002e]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [002f]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---######------------------######------------------######--------------- \ +---###---------------------###---------------------###------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0030]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######---#########------######---#########------######---#########--- \ +---#########---######------#########---######------#########---######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0031]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [0032]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [0033]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------------######------------------######------------------######------ \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0034]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------######------------------######------------------######------ \ +---------#########---------------#########---------------#########------ \ +------############------------############------------############------ \ +---######---######---------######---######---------######---######------ \ +---##################------##################------##################--- \ +------------######------------------######------------------######------ \ +------------------------------------------------------------------------ +% +Unicode: [0035]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +---######------------------######------------------######--------------- \ +---###############---------###############---------###############------ \ +---------------######------------------######------------------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0036]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------------------######------------------######--------------- \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0037]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +---------------######------------------######------------------######--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +------######------------------######------------------######------------ \ +------------------------------------------------------------------------ +% +Unicode: [0038]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0039]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +---------------######------------------######------------------######--- \ +------------######------------------######------------------######------ \ +------#########---------------#########---------------#########--------- \ +------------------------------------------------------------------------ +% +Unicode: [003a]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [003b]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ +% +Unicode: [003c]; +Bitmap: \ +---------------######------------------######------------------######--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------------######------------------######------------------######------ \ +---------------######------------------######------------------######--- \ +------------------------------------------------------------------------ +% +Unicode: [003d]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [003e]; +Bitmap: \ +---######------------------######------------------######--------------- \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---######------------------######------------------######--------------- \ +------------------------------------------------------------------------ +% +Unicode: [003f]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [0040]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######---#########------######---#########------######---#########--- \ +---######---#########------######---#########------######---#########--- \ +---######------------------######------------------######--------------- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [0041]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [0042]; +Bitmap: \ +------------------------------------------------------------------------ \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---###############---------###############---------###############------ \ +------------------------------------------------------------------------ +% +Unicode: [0043]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0044]; +Bitmap: \ +------------------------------------------------------------------------ \ +---############------------############------------############--------- \ +---######---######---------######---######---------######---######------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######---######---------######---######---------######---######------ \ +---############------------############------------############--------- \ +------------------------------------------------------------------------ +% +Unicode: [0045]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +---######------------------######------------------######--------------- \ +---###############---------###############---------###############------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [0046]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +---######------------------######------------------######--------------- \ +---###############---------###############---------###############------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +------------------------------------------------------------------------ +% +Unicode: [0047]; +Bitmap: \ +------------------------------------------------------------------------ \ +------###############---------###############---------###############--- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######---#########------######---#########------######---#########--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [0048]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [0049]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [004a]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [004b]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######---######---------######---######---------######---######------ \ +---############------------############------------############--------- \ +---############------------############------------############--------- \ +---######---######---------######---######---------######---######------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [004c]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [004d]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######---------######---######---------######---######---------###### \ +---#########---#########---#########---#########---#########---######### \ +---#####################---#####################---##################### \ +---######---###---######---######---###---######---######---###---###### \ +---######---------######---######---------######---######---------###### \ +---######---------######---######---------######---######---------###### \ +------------------------------------------------------------------------ +% +Unicode: [004e]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---#########---######------#########---######------#########---######--- \ +---##################------##################------##################--- \ +---##################------##################------##################--- \ +---######---#########------######---#########------######---#########--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [004f]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0050]; +Bitmap: \ +------------------------------------------------------------------------ \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---###############---------###############---------###############------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +------------------------------------------------------------------------ +% +Unicode: [0051]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######---######---------######---######---------######---######------ \ +------######---######---------######---######---------######---######--- \ +------------------------------------------------------------------------ +% +Unicode: [0052]; +Bitmap: \ +------------------------------------------------------------------------ \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---###############---------###############---------###############------ \ +---######---######---------######---######---------######---######------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [0053]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0054]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [0055]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [0056]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [0057]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######---------######---######---------######---######---------###### \ +---######---------######---######---------######---######---------###### \ +---######---###---######---######---###---######---######---###---###### \ +---#####################---#####################---##################### \ +---#########---#########---#########---#########---#########---######### \ +---######---------######---######---------######---######---------###### \ +------------------------------------------------------------------------ +% +Unicode: [0058]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [0059]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [005a]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---######------------------######------------------######--------------- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [005b]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------############------------############------------############--- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------############------------############------------############--- \ +------------------------------------------------------------------------ +% +Unicode: [005c]; +Bitmap: \ +------------------------------------------------------------------------ \ +---###---------------------###---------------------###------------------ \ +---######------------------######------------------######--------------- \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------------######------------------######------------------######------ \ +---------------######------------------######------------------######--- \ +------------------------------------------------------------------------ +% +Unicode: [005d]; +Bitmap: \ +------------------------------------------------------------------------ \ +---############------------############------------############--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---############------------############------------############--------- \ +------------------------------------------------------------------------ +% +Unicode: [005e]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------###---------------------###---------------------###--------- \ +---------#########---------------#########---------------#########------ \ +------######---######---------######---######---------######---######--- \ +---######---------######---######---------######---######---------###### \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [005f]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +######################################################################## \ +------------------------------------------------------------------------ +% +Unicode: [25c6]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---##################------##################------##################--- \ +---##################------##################------##################--- \ +------############------------############------------############------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [0061]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [0062]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---###############---------###############---------###############------ \ +------------------------------------------------------------------------ +% +Unicode: [0063]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0064]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [0065]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0066]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------#########---------------#########---------------#########--- \ +---------######------------------######------------------######--------- \ +------###############---------###############---------###############--- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [0067]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +---------------######------------------######------------------######--- \ +---###############---------###############---------###############------ +% +Unicode: [0068]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [0069]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [006a]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +------############------------############------------############------ +% +Unicode: [006b]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######---######---------######---######---------######---######------ \ +---############------------############------------############--------- \ +---######---######---------######---######---------######---######------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [006c]; +Bitmap: \ +------------------------------------------------------------------------ \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [006d]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---#####################---#####################---##################### \ +---#####################---#####################---##################### \ +---######---###---######---######---###---######---######---###---###### \ +---######---------######---######---------######---######---------###### \ +------------------------------------------------------------------------ +% +Unicode: [006e]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [006f]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0070]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---###############---------###############---------###############------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- +% +Unicode: [0071]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- +% +Unicode: [0072]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +------------------------------------------------------------------------ +% +Unicode: [0073]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------###############---------###############---------###############--- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +---###############---------###############---------###############------ \ +------------------------------------------------------------------------ +% +Unicode: [0074]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---##################------##################------##################--- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------#########---------------#########---------------#########--- \ +------------------------------------------------------------------------ +% +Unicode: [0075]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [0076]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [0077]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---######---------######---######---------######---######---------###### \ +---######---###---######---######---###---######---######---###---###### \ +---#####################---#####################---##################### \ +------###############---------###############---------###############--- \ +------######---######---------######---######---------######---######--- \ +------------------------------------------------------------------------ +% +Unicode: [0078]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [0079]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------######------------------######------------------######------ \ +---############------------############------------############--------- +% +Unicode: [007a]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [2660]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---##################------##################------##################--- \ +---##################------##################------##################--- \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [007c];[0622];[fe81];[fe82]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- +% +Unicode: [21b0]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +---############------------############------------############--------- \ +---###############---------###############---------###############------ \ +---######---#########------######---#########------######---#########--- \ +---######------######------######------######------######------######--- \ +---------------######------------------######------------------######--- \ +------------------------------------------------------------------------ +% +Unicode: [25c0]; +Bitmap: \ +------------###---------------------###---------------------###--------- \ +---------######------------------######------------------######--------- \ +------#########---------------#########---------------#########--------- \ +---############------------############------------############--------- \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +------------###---------------------###---------------------###--------- \ +------------------------------------------------------------------------ +% +Unicode: [25b6]; +Bitmap: \ +---------###---------------------###---------------------###------------ \ +---------######------------------######------------------######--------- \ +---------#########---------------#########---------------#########------ \ +---------############------------############------------############--- \ +---------#########---------------#########---------------#########------ \ +---------######------------------######------------------######--------- \ +---------###---------------------###---------------------###------------ \ +------------------------------------------------------------------------ +% +Unicode: [00e1]; +Bitmap: \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [00f9]; +Bitmap: \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [00d1]; +Bitmap: \ +------######---######---------######---######---------######---######--- \ +---######---######---------######---######---------######---######------ \ +------------------------------------------------------------------------ \ +---#########---######------#########---######------#########---######--- \ +---#########---######------#########---######------#########---######--- \ +---##################------##################------##################--- \ +---######---#########------######---#########------######---#########--- \ +------------------------------------------------------------------------ +% +Unicode: [00c9]; +Bitmap: \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +---##################------##################------##################--- \ +---######------------------######------------------######--------------- \ +---###############---------###############---------###############------ \ +---######------------------######------------------######--------------- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [00e7]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ +% +Unicode: [00f4]; +Bitmap: \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00f2]; +Bitmap: \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00ec]; +Bitmap: \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00a3]; +Bitmap: \ +---------#########---------------#########---------------#########------ \ +------######------------------######------------------######------------ \ +------######------------------######------------------######------------ \ +---############------------############------------############--------- \ +------######------------------######------------------######------------ \ +------######------------------######------------------######------------ \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [00ef]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00fc]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [00e4]; +Bitmap: \ +------######---######---------######---######---------######---######--- \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [00d6]; +Bitmap: \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00fa]; +Bitmap: \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [00f3]; +Bitmap: \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00f6]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00dc]; +Bitmap: \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [00e5]; +Bitmap: \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---------#########---------------#########---------------#########------ \ +---------------######------------------######------------------######--- \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [00fb]; +Bitmap: \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [00ee]; +Bitmap: \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00e9]; +Bitmap: \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00e8]; +Bitmap: \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [00f1]; +Bitmap: \ +------######---######---------######---######---------######---######--- \ +---######---######---------######---######---------######---######------ \ +------------------------------------------------------------------------ \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [00ea]; +Bitmap: \ +------############------------############------------############------ \ +######------------############------------############------------###### \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0227]; +Bitmap: \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [00e0]; +Bitmap: \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [00a1]; +Bitmap: \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +Unicode: [00c4]; +Bitmap: \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [05d0]; +Bitmap: \ +------------------------------------------------------------------------ \ +######---------######---######---------######---######---------######--- \ +############---######---############---######---############---######--- \ +######---############---######---############---######---############--- \ +######------######------######------######------######------######------ \ +######---------######---######---------######---######---------######--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05d1]; +Bitmap: \ +------------------------------------------------------------------------ \ +###############---------###############---------###############--------- \ +---------#########---------------#########---------------#########------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ \ +#####################---#####################---#####################--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05d2]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ \ +---###############---------###############---------###############------ \ +#########------######---#########------######---#########------######--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05d3]; +Bitmap: \ +------------------------------------------------------------------------ \ +#####################---#####################---#####################--- \ +---------#########---------------#########---------------#########------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05d4]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +---------------######------------------######------------------######--- \ +---###---------######------###---------######------###---------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05d5]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---------#########---------------#########---------------#########------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05d6]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +---#########---------------#########---------------#########------------ \ +------######------------------######------------------######------------ \ +------######------------------######------------------######------------ \ +------######------------------######------------------######------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05d7]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05d8]; +Bitmap: \ +------------------------------------------------------------------------ \ +######---############---######---############---######---############--- \ +######---###---######---######---###---######---######---###---######--- \ +######---------######---######---------######---######---------######--- \ +######---------######---######---------######---######---------######--- \ +##################------##################------##################------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05d9]; +Bitmap: \ +------------------------------------------------------------------------ \ +---###############---------###############---------###############------ \ +---------#########---------------#########---------------#########------ \ +------------######------------------######------------------######------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05da]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +------------#########---------------#########---------------#########--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- +% +Unicode: [05db]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +------------#########---------------#########---------------#########--- \ +##################------##################------##################------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05dc]; +Bitmap: \ +######------------------######------------------######------------------ \ +##################------##################------##################------ \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +------------#########---------------#########---------------#########--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05dd]; +Bitmap: \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05de]; +Bitmap: \ +------------------------------------------------------------------------ \ +######---#########------######---#########------######---#########------ \ +---#########---######------#########---######------#########---######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######---#########------######---#########------######---#########--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05df]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------############------------############------------############--- \ +------------#########---------------#########---------------#########--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- +% +Unicode: [05e0]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------############------------############------------############--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +------------#########---------------#########---------------#########--- \ +---###############---------###############---------###############------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05e1]; +Bitmap: \ +------------------------------------------------------------------------ \ +#####################---#####################---#####################--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######---######---------######---######---------######---######------ \ +---############------------############------------############--------- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05e2]; +Bitmap: \ +------------------------------------------------------------------------ \ +#########---#########---#########---#########---#########---#########--- \ +---######------######------######------######------######------######--- \ +------######---######---------######---######---------######---######--- \ +------######---######---------######---######---------######---######--- \ +##################------##################------##################------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05e3]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +---######---#########------######---#########------######---#########--- \ +---######------######------######------######------######------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- +% +Unicode: [05e4]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------#########---------------#########---------------#########--- \ +##################------##################------##################------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05e5]; +Bitmap: \ +------------------------------------------------------------------------ \ +######------#########---######------#########---######------#########--- \ +---######------######------######------######------######------######--- \ +---######---######---------######---######---------######---######------ \ +---############------------############------------############--------- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- +% +Unicode: [05e6]; +Bitmap: \ +------------------------------------------------------------------------ \ +######---------######---######---------######---######---------######--- \ +---######---#########------######---#########------######---#########--- \ +------#########---------------#########---------------#########--------- \ +------------######------------------######------------------######------ \ +#####################---#####################---#####################--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05e7]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +------------#########---------------#########---------------#########--- \ +######---------######---######---------######---######---------######--- \ +######------######------######------######------######------######------ \ +######---######---------######---######---------######---######--------- \ +######------------------######------------------######------------------ \ +######------------------######------------------######------------------ +% +Unicode: [05e8]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +------------#########---------------#########---------------#########--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05e9]; +Bitmap: \ +------------------------------------------------------------------------ \ +###------###------###---###------###------###---###------###------###--- \ +######---###------###---######---###------###---######---###------###--- \ +#########------######---#########------######---#########------######--- \ +######------######------######------######------######------######------ \ +##################------##################------##################------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [05ea]; +Bitmap: \ +------------------------------------------------------------------------ \ +##################------##################------##################------ \ +---######---#########------######---#########------######---#########--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +#########------######---#########------######---#########------######--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0179]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---##################------##################------##################--- \ +------######---######---------######---######---------######---######--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [0105]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------######------------------######------------------###### +% +Unicode: [017a]; +Bitmap: \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +---##################------##################------##################--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [0107]; +Bitmap: \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [015a]; +Bitmap: \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +---------------######------------------######------------------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0119]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- +% +Unicode: [00df]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------#########---------------#########---------------#########------ \ +------######---######---------######---######---------######---######--- \ +------############------------############------------############------ \ +------######---######---------######---######---------######---######--- \ +------######---#########------######---#########------######---######### \ +------###############---------###############---------###############--- \ +---######------------------######------------------######--------------- +% +Unicode: [0141]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---############------------############------------############--------- \ +---#########---------------#########---------------#########------------ \ +#########---------------#########---------------#########--------------- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [0142]; +Bitmap: \ +------------------------------------------------------------------------ \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +---------#########---------------#########---------------#########------ \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [0143]; +Bitmap: \ +------------######------------------######------------------######------ \ +---###---######---###------###---######---###------###---######---###--- \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---##################------##################------##################--- \ +---######---#########------######---#########------######---#########--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [0144]; +Bitmap: \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +---###############---------###############---------###############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ +% +Unicode: [00d3]; +Bitmap: \ +---------------######------------------######------------------######--- \ +------############------------############------------############------ \ +---######---###---###------######---###---###------######---###---###--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------------------------------------------------------------------------ +% +Unicode: [015b]; +Bitmap: \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------###############---------###############---------###############--- \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ \ +---------------######------------------######------------------######--- \ +---###############---------###############---------###############------ \ +------------------------------------------------------------------------ +% +Unicode: [0106]; +Bitmap: \ +------------######------------------######------------------######------ \ +------############------------############------------############------ \ +---######---#########------######---#########------######---#########--- \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######------######------######------######------######------######--- \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [0104]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +---######------######------######------######------######------######--- \ +------------------######------------------######------------------###### +% +Unicode: [017b]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---##################------##################------##################--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---######------------------######------------------######--------------- \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [017c]; +Bitmap: \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +---##################------##################------##################--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [0660]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- \ +------------######------------------######------------------######------ \ +---------######------------------######------------------######--------- \ +------######------------------######------------------######------------ \ +---######------------------######------------------######--------------- \ +---###---------------------###---------------------###------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0661]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------###---------------------###---------------------###--------- \ +---------#########---------------#########---------------#########------ \ +------###############---------###############---------###############--- \ +---------#########---------------#########---------------#########------ \ +------------###---------------------###---------------------###--------- \ +------------------------------------------------------------------------ +% +Unicode: [0662]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- +% +Unicode: [0663]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------------------######------------------######--------------- \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------------######------------------######------------------######------ \ +---------------######------------------######------------------######--- +% +Unicode: [0664]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######---###---######---######---###---######---######---###---###### \ +---######---###---######---######---###---######---######---###---###### \ +---#####################---#####################---##################### \ +---#########---------------#########---------------#########------------ \ +------######------------------######------------------######------------ \ +------#########---------------#########---------------#########--------- \ +---------######------------------######------------------######--------- +% +Unicode: [0665]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------############------------############------------############--- \ +------#########---------------#########---------------#########--------- \ +---#########---------------#########---------------#########------------ \ +---------#########---------------#########---------------#########------ \ +------#########---------------#########---------------#########--------- \ +---#########---------------#########---------------#########------------ \ +------###############---------###############---------###############--- +% +Unicode: [0666]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------#########---------------#########---------------#########------ \ +------###############---------###############---------###############--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---##################------##################------##################--- \ +------############------------############------------############------ +% +Unicode: [0667]; +Bitmap: \ +------------------------------------------------------------------------ \ +---###############---------###############---------###############------ \ +---###############---------###############---------###############------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ \ +------------######------------------######------------------######------ +% +Unicode: [0668]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +------############------------############------------############------ \ +------############------------############------------############------ \ +---------######------------------######------------------######--------- +% +Unicode: [0669]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------############------------############------------############------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- \ +---######------######------######------######------######------######--- +% +Unicode: [0624];[fe85];[fe86]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######------------------######------------------######--------------- \ +######------##################------##################------############ \ +---------######---######---------######---######---------######---###### \ +------------############------------############------------############ \ +------------------######------------------######------------------###### \ +---------------######------------------######------------------######--- \ +---###############---------###############---------###############------ +% +Unicode: [0634];[feb5];[feb6];[feb8]; +Bitmap: \ +------------######------------------######------------------######------ \ +------######------######------######------######------######------###### \ +------------------------------------------------------------------------ \ +###------###---###---######------###---###---######------###---###---### \ +###------###---###---######------###---###---######------###---###---### \ +###------##################------##################------############### \ +############------------############------------############------------ \ +---######------------------######------------------######--------------- +% +Unicode: [0648];[feed];[feee]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------############------------############------------############ \ +---------######---######---------######---######---------######---###### \ +---------###############---------###############---------############### \ +------------------######------------------######------------------###### \ +---------------######------------------######------------------######--- \ +---###############---------###############---------###############------ +% +Unicode: [0629];[fe93];[fe94]; +Bitmap: \ +---------######---######---------######---######---------######---###### \ +------------------------------------------------------------------------ \ +------------############------------############------------############ \ +---------######---######---------######---######---------######---###### \ +---------######---######---------######---######---------######---###### \ +---------###############---------###############---------############### \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [064a];[fef1];[fef2];[fef4]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------#########---------------#########---------------#########--- \ +###------##################------##################------############### \ +###------######------######------######------######------######------### \ +######------######---#########------######---#########------######---### \ +---###############---###---###############---###---###############---### \ +------------------------------------------------------------------------ \ +------######---######---------######---######---------######---######--- +% +Unicode: [062b];[fe99];[fe9a];[fe9c]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +######------------############------------############------------###### \ +######------------############------------############------------###### \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0628];[fe8f];[fe90];[fe92]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +######------------############------------############------------###### \ +######------------############------------############------------###### \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- +% +Unicode: [0644];[fedd];[fede];[fee0]; +Bitmap: \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +---######---------######---######---------######---######---------###### \ +---######---------######---######---------######---######---------###### \ +---######---------######---######---------######---######---------###### \ +------###############---------###############---------###############--- +% +Unicode: [0621];[fe80]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---------#########---------------#########---------------#########------ \ +------######------------------######------------------######------------ \ +---------#########---------------#########---------------#########------ \ +------#########---------------#########---------------#########--------- \ +------###---------------------###---------------------###--------------- \ +------------------------------------------------------------------------ +% +Unicode: [0647];[fee9];[feea];[feec]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------############------------############------------############ \ +---------######---######---------######---######---------######---###### \ +---------######---######---------######---######---------######---###### \ +---------###############---------###############---------############### \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [062a];[fe95];[fe96];[fe98]; +Bitmap: \ +------------------------------------------------------------------------ \ +------######---######---------######---######---------######---######--- \ +------------------------------------------------------------------------ \ +######------------############------------############------------###### \ +######------------############------------############------------###### \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0646];[fee5];[fee6];[fee8]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------###---------###---------###---------###---------###---------###--- \ +---######---------######---######---------######---######---------###### \ +---######---------######---######---------######---######---------###### \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [0645];[fee1];[fee2];[fee4]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- \ +---------###############---------###############---------############### \ +------############---###------############---###------############---### \ +---######------#########---######------#########---######------######### \ +---######---------######---######---------######---######---------###### \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- +% +Unicode: [062c];[fe9d];[fe9e];[fea0]; +Bitmap: \ +------------------------------------------------------------------------ \ +---############------------############------------############--------- \ +------------######------------------######------------------######------ \ +------###############---------###############---------###############--- \ +---######---------######---######---------######---######---------###### \ +---######------------------######------------------######--------------- \ +---######---------######---######---------######---######---------###### \ +------#########---------------#########---------------#########--------- +% +Unicode: [062e];[fea5];[fea6];[fea8]; +Bitmap: \ +------------------######------------------######------------------###### \ +---############------------############------------############--------- \ +------------######------------------######------------------######------ \ +------###############---------###############---------###############--- \ +---######---------######---######---------######---######---------###### \ +---######------------###---######------------###---######------------### \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ +% +Unicode: [062d];[fea1];[fea2];[fea4]; +Bitmap: \ +------------------------------------------------------------------------ \ +---############------------############------------############--------- \ +------------######------------------######------------------######------ \ +------###############---------###############---------###############--- \ +---######---------######---######---------######---######---------###### \ +---######------------###---######------------###---######------------### \ +---######------------------######------------------######--------------- \ +------############------------############------------############------ +% +Unicode: [0636];[febd];[febe];[fec0]; +Bitmap: \ +------------######------------------######------------------######------ \ +------------------------------------------------------------------------ \ +------------############------------############------------############ \ +###------######------######------######------######------######------### \ +###------###---------######------###---------######------###---------### \ +###------##################------##################------############### \ +###############---------###############---------###############--------- \ +---#########---------------#########---------------#########------------ +% +Unicode: [0642];[fed5];[fed6];[fed8]; +Bitmap: \ +------######---######---------######---######---------######---######--- \ +------------------------------------------------------------------------ \ +---------------#########---------------#########---------------######### \ +---###------######---###---###------######---###---###------######---### \ +######---------###############---------###############---------######### \ +######------------############------------############------------###### \ +---##################------##################------##################--- \ +------------------------------------------------------------------------ +% +Unicode: [0633];[feb1];[feb2];[feb4]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +###------###---###---######------###---###---######------###---###---### \ +###------###---###---######------###---###---######------###---###---### \ +###------##################------##################------############### \ +###------############---###------############---###------############--- \ +############------------############------------############------------ \ +---######------------------######------------------######--------------- +% +Unicode: [0641];[fed1];[fed2];[fed4]; +Bitmap: \ +------------------------------------------------------------------------ \ +------######------------------######------------------######------------ \ +---------------#########---------------#########---------------######### \ +######------######---#########------######---#########------######---### \ +######---------###############---------###############---------######### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0639];[fec9];[feca];[fecc]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------#########---------------#########---------------#########--- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------##################------##################------################## \ +---######------------###---######------------###---######------------### \ +---#########---------------#########---------------#########------------ \ +------###############---------###############---------###############--- +% +Unicode: [0643];[fed9];[feda];[fedc]; +Bitmap: \ +------------------######------------------######------------------###### \ +------######------######------######------######------######------###### \ +------###---------######------###---------######------###---------###### \ +---#########------######---#########------######---#########------###### \ +------------------######------------------######------------------###### \ +###---------------#########---------------#########---------------###### \ +#####################---#####################---#####################--- \ +------------------------------------------------------------------------ +% +Unicode: [0635];[feb9];[feba];[febc]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------############------------############------------############ \ +###------######------######------######------######------######------### \ +###------###---------######------###---------######------###---------### \ +###------##################------##################------############### \ +############------------############------------############------------ \ +---######------------------######------------------######--------------- +% +Unicode: [063a];[fecd];[fece];[fed0]; +Bitmap: \ +---######------------------######------------------######--------------- \ +------------#########---------------#########---------------#########--- \ +---------######------------------######------------------######--------- \ +---------######------------------######------------------######--------- \ +------##################------##################------################## \ +---######------------###---######------------###---######------------### \ +---#########---------------#########---------------#########------------ \ +------###############---------###############---------###############--- +% +Unicode: [0649];[feef];[fef0]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------#########---------------#########---------------#########--- \ +######---######---############---######---############---######---###### \ +######---######------#########---######------#########---######------### \ +######------######---#########------######---#########------######---### \ +######------######------######------######------######------######------ \ +---###############---------###############---------###############------ +% +Unicode: [0632];[feaf];[feb0]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------######------------------######------------------###### \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +---------------######------------------######------------------######--- \ +---###############---------###############---------###############------ +% +Unicode: [feb7]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +---###------###------###---###------###------###---###------###------### \ +######---######---############---######---############---######---###### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [062f];[fea9];[feaa];[0631];[fead];[feae]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +---------------######------------------######------------------######--- \ +---###############---------###############---------###############------ +% +Unicode: [0630];[feab];[feac]; +Bitmap: \ +------######------------------######------------------######------------ \ +------------------------------------------------------------------------ \ +------------######------------------######------------------######------ \ +---------------######------------------######------------------######--- \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [fef3]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------######---######---------######---######---------######---######--- +% +Unicode: [fe9b]; +Bitmap: \ +---------######------------------######------------------######--------- \ +---######------######------######------######------######------######--- \ +------------------------------------------------------------------------ \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fe91]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +######################################################################## \ +------------------------------------------------------------------------ \ +---------------######------------------######------------------######--- +% +Unicode: [fedf]; +Bitmap: \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0627];[fe8d];[fe8e]; +Bitmap: \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [feeb]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------###---------------------###---------------------###------------ \ +------###############---------###############---------###############--- \ +------###------#########------###------#########------###------######### \ +------#########------###------#########------###------#########------### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fe97]; +Bitmap: \ +------------------------------------------------------------------------ \ +---######---######---------######---######---------######---######------ \ +------------------------------------------------------------------------ \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fee7]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------######------------------######------------------######------ \ +------------------------------------------------------------------------ \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fee3]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---------------#########---------------#########---------------######### \ +------------######---###------------######---###------------######---### \ +##################---#####################---#####################---### \ +---------------#########---------------#########---------------######### \ +------------------------------------------------------------------------ +% +Unicode: [fe9f]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---############------------############------------############--------- \ +---###------######---------###------######---------###------######------ \ +---------------######------------------######------------------######--- \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------######------------------######------------------######------ +% +Unicode: [fef7];[f3f8]; +Bitmap: \ +------------------######------------------######------------------###### \ +------###---------######------###---------######------###---------###### \ +------######------######------######------######------######------###### \ +---------######---######---------######---######---------######---###### \ +------------###---######------------###---######------------###---###### \ +------------#########---------------#########---------------#########--- \ +---###############---------###############---------###############------ \ +------------------------------------------------------------------------ +% +Unicode: [fea7]; +Bitmap: \ +------######------------------######------------------######------------ \ +------------------------------------------------------------------------ \ +---############------------############------------############--------- \ +---###------######---------###------######---------###------######------ \ +---------------######------------------######------------------######--- \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fea3]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---############------------############------------############--------- \ +---###------######---------###------######---------###------######------ \ +---------------######------------------######------------------######--- \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [febf]; +Bitmap: \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +------------############------------############------------############ \ +---###---######------###---###---######------###---###---######------### \ +############---------###############---------###############---------### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fed7]; +Bitmap: \ +---######---######---------######---######---------######---######------ \ +------------------------------------------------------------------------ \ +---------###############---------###############---------############### \ +---------######------###---------######------###---------######------### \ +------------############------------############------------############ \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [feb3]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---###------###------###---###------###------###---###------###------### \ +######---######---############---######---############---######---###### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fed3]; +Bitmap: \ +------######------------------######------------------######------------ \ +------------------------------------------------------------------------ \ +------------############------------############------------############ \ +------------######---###------------######---###------------######---### \ +---------------#########---------------#########---------------######### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fecb]; +Bitmap: \ +------------------------------------------------------------------------ \ +---------#########---------------#########---------------#########------ \ +------###############---------###############---------###############--- \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fedb]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +---------#########---------------#########---------------#########------ \ +---------------######------------------######------------------######--- \ +------------------######------------------######------------------###### \ +------------------######------------------######------------------###### \ +------###############---------###############---------###############--- \ +------------------------------------------------------------------------ +% +Unicode: [febb]; +Bitmap: \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ \ +------------############------------############------------############ \ +---###---######------###---###---######------###---###---######------### \ +############---------###############---------###############---------### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0637];[fec1];[fec2];[fec4];[fec3]; +Bitmap: \ +---######------------------######------------------######--------------- \ +---######------------------######------------------######--------------- \ +---######---############---######---############---######---############ \ +---############------###---############------###---############------### \ +---#########---------###---#########---------###---#########---------### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [fecf]; +Bitmap: \ +---######------------------######------------------######--------------- \ +---------#########---------------#########---------------#########------ \ +------###############---------###############---------###############--- \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [0638];[fec5];[fec6];[fec8];[fec7]; +Bitmap: \ +---######---######---------######---######---------######---######------ \ +---######------------------######------------------######--------------- \ +---######---############---######---############---######---############ \ +---############------###---############------###---############------### \ +---#########---------###---#########---------###---#########---------### \ +######################################################################## \ +------------------------------------------------------------------------ \ +------------------------------------------------------------------------ +% +Unicode: [061f]; +Bitmap: \ +------------------------------------------------------------------------ \ +------############------------############------------############------ \ +---######------######------######------######------######------######--- \ +------######------------------######------------------######------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ \ +---------######------------------######------------------######--------- \ +------------------------------------------------------------------------ +% +// dotted-box (no such glyph) +Unicode: [0000]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######---#########--- \ +        ---######---#########--- \ +        ---######---#########--- \ +        ---###------------------ \ +        ---###------------------ \ +        ---###------------------ \ +        ------------------###--- \ +        ------------------###--- \ +        ------------------###--- \ +        ---###------------------ \ +        ---###------------------ \ +        ---###------------------ \ +        ------------------###--- \ +        ------------------###--- \ +        ------------------###--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// backtick +Unicode: [0060]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// curlies +Unicode: [007b]; +Bitmap: \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +Unicode: [007d]; +Bitmap: \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// tilde +Unicode: [007e]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---#########------###### \ +        ---#########------###### \ +        ---#########------###### \ +        ######---######---###### \ +        ######---######---###### \ +        ######---######---###### \ +        ######------#########--- \ +        ######------#########--- \ +        ######------#########--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// euro +Unicode: [20ac]; +Bitmap: \ +        ---------############--- \ +        ---------############--- \ +        ---------############--- \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---------############--- \ +        ---------############--- \ +        ---------############--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// spanish left-quote +Unicode: [00ab]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ######------######------ \ +        ######------######------ \ +        ######------######------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// spanish right-quote +Unicode: [00bb]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ######------######------ \ +        ######------######------ \ +        ######------######------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ######------######------ \ +        ######------######------ \ +        ######------######------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// spanish inverted question mark +Unicode: [00bf]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// copyright +Unicode: [00a9]; +Bitmap: \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ###---------------###--- \ +        ###---------------###--- \ +        ###---------------###--- \ +        ###------######---###--- \ +        ###------######---###--- \ +        ###------######---###--- \ +        ###---###---------###--- \ +        ###---###---------###--- \ +        ###---###---------###--- \ +        ###------######---###--- \ +        ###------######---###--- \ +        ###------######---###--- \ +        ###---------------###--- \ +        ###---------------###--- \ +        ###---------------###--- \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// registered +Unicode: [00ae]; +Bitmap: \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ###---------------###--- \ +        ###---------------###--- \ +        ###---------------###--- \ +        ###---######------###--- \ +        ###---######------###--- \ +        ###---######------###--- \ +        ###---###---###---###--- \ +        ###---###---###---###--- \ +        ###---###---###---###--- \ +        ###---######------###--- \ +        ###---######------###--- \ +        ###---######------###--- \ +        ###---###---###---###--- \ +        ###---###---###---###--- \ +        ###---###---###---###--- \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// degrees +Unicode: [00b0];[00ba]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------###------###------ \ +        ------###------###------ \ +        ------###------###------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// cents +Unicode: [00a2]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------###############--- \ +        ------###############--- \ +        ------###############--- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ------###############--- \ +        ------###############--- \ +        ------###############--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// "currency sign" +// FIXME: not bold enough +Unicode: [00a4]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---###------------###--- \ +        ---###------------###--- \ +        ---###------------###--- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------###------###------ \ +        ------###------###------ \ +        ------###------###------ \ +        ------###------###------ \ +        ------###------###------ \ +        ------###------###------ \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---###------------###--- \ +        ---###------------###--- \ +        ---###------------###--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// yen +Unicode: [00a5]; +Bitmap: \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// broken bar +Unicode: [00a6]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// section sign +// FIXME: not bold enough +Unicode: [00a7]; +Bitmap: \ +        ---------#########------ \ +        ---------#########------ \ +        ---------#########------ \ +        ------###--------------- \ +        ------###--------------- \ +        ------###--------------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------###------###------ \ +        ------###------###------ \ +        ------###------###------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------------###------ \ +        ---------------###------ \ +        ---------------###------ \ +        ------#########--------- \ +        ------#########--------- \ +        ------#########--------- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// diaresis (cha, cha, cha!) +Unicode: [00a8]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// feminine ordinal (superscript a) +Unicode: [00aa]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------#########--- \ +        ------------#########--- \ +        ------------#########--- \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ---------############--- \ +        ---------############--- \ +        ---------############--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// "not" sign +Unicode: [00ac]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---------------######--- \ +        ---------------######--- \ +        ---------------######--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// macron +Unicode: [00af]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// plus-minus +Unicode: [00b1]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// superscript 2 +// FIXME: not bold enough +Unicode: [00b2]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---###------###--------- \ +        ---###------###--------- \ +        ---###------###--------- \ +        ---------###------------ \ +        ---------###------------ \ +        ---------###------------ \ +        ------###--------------- \ +        ------###--------------- \ +        ------###--------------- \ +        ---############--------- \ +        ---############--------- \ +        ---############--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// FIXME: not bold enough +// superscript 3 +Unicode: [00b3]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---###------###--------- \ +        ---###------###--------- \ +        ---###------###--------- \ +        ---------###------------ \ +        ---------###------------ \ +        ---------###------------ \ +        ---###------###--------- \ +        ---###------###--------- \ +        ---###------###--------- \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// acute +Unicode: [00b4]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// mu +Unicode: [00b5]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------###############--- \ +        ------###############--- \ +        ------###############--- \ +        ---------------######--- \ +        ---------------######--- \ +        ---------------######--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// paragraph +Unicode: [00b6]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ---------###---######--- \ +        ---------###---######--- \ +        ---------###---######--- \ +        ---------###---######--- \ +        ---------###---######--- \ +        ---------###---######--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// middle dot +Unicode: [00b7]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// superscript 1 +Unicode: [00b9]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------#########--------- \ +        ------#########--------- \ +        ------#########--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +// FIXME: MISSING fractions, 00bc/00bd/00bc, ¼ ½ ¾, hard to do in 8x8 +% +// A with grave +Unicode: [00c0]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// A with acute +Unicode: [00c1]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// A with circumflex +Unicode: [00c2]; +Bitmap: \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---###------------###--- \ +        ---###------------###--- \ +        ---###------------###--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// A with tilde +Unicode: [00c3]; +Bitmap: \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ---######---######------ \ +        ---######---######------ \ +        ---######---######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// A with ring +Unicode: [00c5]; +Bitmap: \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------###------###------ \ +        ------###------###------ \ +        ------###------###------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// AE ligature +Unicode: [00c6]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------###############--- \ +        ------###############--- \ +        ------###############--- \ +        ---############--------- \ +        ---############--------- \ +        ---############--------- \ +        ######---######--------- \ +        ######---######--------- \ +        ######---######--------- \ +        #####################--- \ +        #####################--- \ +        #####################--- \ +        ######---######--------- \ +        ######---######--------- \ +        ######---######--------- \ +        ######---############--- \ +        ######---############--- \ +        ######---############--- \ +        ------------------------ +        ------------------------ +        ------------------------ +// FIXME: this is hideous! +% +// C with cedilla +Unicode: [00c7]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------######------------ +        ------######------------ +        ------######------------ +% +// E with circumflex +Unicode: [00ca]; +Bitmap: \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---###------------###--- \ +        ---###------------###--- \ +        ---###------------###--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ +        ------------------------ +        ------------------------ +// FIXME: ugly! +% +// E with umlaut +Unicode: [00cb]; +Bitmap: \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// I with grave +Unicode: [00cc]; +Bitmap: \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// I with acute +Unicode: [00cd]; +Bitmap: \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// I with circumflex +Unicode: [00ce]; +Bitmap: \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---###------------###--- \ +        ---###------------###--- \ +        ---###------------###--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ +        ------------------------ +        ------------------------ +// FIXME: ugly! +% +// I with umlaut +Unicode: [00cf]; +Bitmap: \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// capital eth +Unicode: [00d0]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---############--------- \ +        ---############--------- \ +        ---############--------- \ +        ---######---######------ \ +        ---######---######------ \ +        ---######---######------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ############---######--- \ +        ############---######--- \ +        ############---######--- \ +        ---######---######------ \ +        ---######---######------ \ +        ---######---######------ \ +        ---############--------- \ +        ---############--------- \ +        ---############--------- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// O with grave +Unicode: [00d2]; +Bitmap: \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---###---###---######--- \ +        ---###---###---######--- \ +        ---###---###---######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------------------ +        ------------------------ +        ------------------------ +// FIXME: MISSING Ô Õ +% +// multiplication +Unicode: [00d7]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +// FIXME: MISSING Ø +% +// U with grave +Unicode: [00d9]; +Bitmap: \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// U with acute +Unicode: [00da]; +Bitmap: \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ +        ------------------------ +        ------------------------ +// FIXME: MISSING Û +% +// Y with acute +Unicode: [00dd]; +Bitmap: \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// capital thorn +Unicode: [00de]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---###############------ \ +        ---###############------ \ +        ---###############------ \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// a with circumflex +Unicode: [00e2]; +Bitmap: \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---###------------###--- \ +        ---###------------###--- \ +        ---###------------###--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------#########--- \ +        ------------#########--- \ +        ------------#########--- \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ---------############--- \ +        ---------############--- \ +        ---------############--- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// a with tilde +Unicode: [00e3]; +Bitmap: \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ---######---######------ \ +        ---######---######------ \ +        ---######---######------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------#########--- \ +        ------------#########--- \ +        ------------#########--- \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ---------############--- +        ---------############--- +        ---------############--- +// FIXME: touches bottom +% +// ae ligature +Unicode: [00e6]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---------######---###### \ +        ---------######---###### \ +        ---------######---###### \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ######---######--------- \ +        ######---######--------- \ +        ######---######--------- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ +        ------------------------ +        ------------------------ +// FIXME: fugly +% +// e with umlaut +Unicode: [00eb]; +Bitmap: \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// i with acute +Unicode: [00ed]; +Bitmap: \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------#########--------- \ +        ------#########--------- \ +        ------#########--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// lowercase eth +Unicode: [00f0]; +Bitmap: \ +        ---######---###--------- \ +        ---######---###--------- \ +        ---######---###--------- \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---###---######--------- \ +        ---###---######--------- \ +        ---###---######--------- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// o with tilde +Unicode: [00f5]; +Bitmap: \ +        ------######---######--- \ +        ------######---######--- \ +        ------######---######--- \ +        ---######---######------ \ +        ---######---######------ \ +        ---######---######------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// division +Unicode: [00f7]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +// FIXME: MISSING ø +% +// y with acute +Unicode: [00fd]; +Bitmap: \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------###############--- \ +        ------###############--- \ +        ------###############--- \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---############--------- +        ---############--------- +        ---############--------- +% +// lowercase thorn +Unicode: [00fe]; +Bitmap: \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---############--------- \ +        ---############--------- \ +        ---############--------- \ +        ---######---######------ \ +        ---######---######------ \ +        ---######---######------ \ +        ---############--------- \ +        ---############--------- \ +        ---############--------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ---######--------------- \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// y with umlaut +Unicode: [00ff]; +Bitmap: \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------###############--- \ +        ------###############--- \ +        ------###############--- \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---############--------- +        ---############--------- +        ---############--------- +% +// left single curly quote +Unicode: [2018]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// right single curly quote +Unicode: [2019]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// left double curly quote +Unicode: [201c]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ------######------###### \ +        ------######------###### \ +        ------######------###### \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// right double curly quote +Unicode: [201d]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ######------######------ \ +        ######------######------ \ +        ######------######------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// spanish left single quote +Unicode: [2039]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------######------------ \ +        ------######------------ \ +        ------######------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// spanish right single quote +Unicode: [203a]; +Bitmap: \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------######------ \ +        ------------######------ \ +        ------------######------ \ +        ---------######--------- \ +        ---------######--------- \ +        ---------######--------- \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +// replacement character for missing glyphs +Unicode: [fffd]; +Bitmap: \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ---######------######--- \ +        ---######------######--- \ +        ---######------######--- \ +        ---###---######---###--- \ +        ---###---######---###--- \ +        ---###---######---###--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---##################--- \ +        ---##################--- \ +        ---##################--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ---#########---######--- \ +        ------############------ \ +        ------############------ \ +        ------############------ \ +        ------------------------ +        ------------------------ +        ------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +% +Unicode: [0000]; +Bitmap: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ diff --git a/fonts/fauxtari-8.bdf b/fonts/fauxtari-8.bdf new file mode 100644 index 0000000..f54470d --- /dev/null +++ b/fonts/fauxtari-8.bdf @@ -0,0 +1,6461 @@ +STARTFONT 2.1 +FONT -BW-Fauxtari Fixed Mono-Medium-R-Normal--8-80-75-75-C-80-iso10646-1 +SIZE 8 75 75 +FONTBOUNDINGBOX 8 8 0 -2 +STARTPROPERTIES 18 +FOUNDRY "BW" +FAMILY_NAME "Fauxtari Fixed Mono" +FACE_NAME "Fauxtari 8" +WEIGHT_NAME "Medium" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 8 +POINT_SIZE 80 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "C" +AVERAGE_WIDTH 80 +CHARSET_REGISTRY "iso10646" +CHARSET_ENCODING "1" +FONT_DESCENT 2 +FONT_ASCENT 6 +DEFAULT_CHAR 0 +ENDPROPERTIES +CHARS 429 +STARTCHAR C0000 +ENCODING 0 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +6e +40 +02 +40 +02 +76 +00 +ENDCHAR +STARTCHAR C0001 +ENCODING 32 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0002 +ENCODING 33 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +18 +18 +18 +00 +18 +00 +ENDCHAR +STARTCHAR C0003 +ENCODING 34 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +66 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0004 +ENCODING 35 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +ff +66 +66 +ff +66 +00 +ENDCHAR +STARTCHAR C0005 +ENCODING 36 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +3e +60 +3c +06 +7c +18 +00 +ENDCHAR +STARTCHAR C0006 +ENCODING 37 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +6c +18 +30 +66 +46 +00 +ENDCHAR +STARTCHAR C0007 +ENCODING 38 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +1c +36 +1c +38 +6f +66 +3b +00 +ENDCHAR +STARTCHAR C0008 +ENCODING 39 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +18 +18 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0009 +ENCODING 40 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +1c +18 +18 +1c +0e +00 +ENDCHAR +STARTCHAR C000a +ENCODING 41 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +70 +38 +18 +18 +38 +70 +00 +ENDCHAR +STARTCHAR C000b +ENCODING 42 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +3c +ff +3c +66 +00 +00 +ENDCHAR +STARTCHAR C000c +ENCODING 43 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +18 +7e +18 +18 +00 +00 +ENDCHAR +STARTCHAR C000d +ENCODING 44 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +18 +30 +ENDCHAR +STARTCHAR C000e +ENCODING 45 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +7e +00 +00 +00 +00 +ENDCHAR +STARTCHAR C000f +ENCODING 46 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +18 +00 +ENDCHAR +STARTCHAR C0010 +ENCODING 47 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +06 +0c +18 +30 +60 +40 +00 +ENDCHAR +STARTCHAR C0011 +ENCODING 48 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +6e +76 +66 +3c +00 +ENDCHAR +STARTCHAR C0012 +ENCODING 49 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +38 +18 +18 +18 +7e +00 +ENDCHAR +STARTCHAR C0013 +ENCODING 50 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +0c +18 +30 +7e +00 +ENDCHAR +STARTCHAR C0014 +ENCODING 51 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +0c +18 +0c +66 +3c +00 +ENDCHAR +STARTCHAR C0015 +ENCODING 52 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0c +1c +3c +6c +7e +0c +00 +ENDCHAR +STARTCHAR C0016 +ENCODING 53 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +60 +7c +06 +66 +3c +00 +ENDCHAR +STARTCHAR C0017 +ENCODING 54 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +60 +7c +66 +66 +3c +00 +ENDCHAR +STARTCHAR C0018 +ENCODING 55 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +06 +0c +18 +30 +30 +00 +ENDCHAR +STARTCHAR C0019 +ENCODING 56 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +3c +66 +66 +3c +00 +ENDCHAR +STARTCHAR C001a +ENCODING 57 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +3e +06 +0c +38 +00 +ENDCHAR +STARTCHAR C001b +ENCODING 58 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +18 +18 +00 +18 +18 +00 +ENDCHAR +STARTCHAR C001c +ENCODING 59 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +18 +18 +00 +18 +18 +30 +ENDCHAR +STARTCHAR C001d +ENCODING 60 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +06 +0c +18 +30 +18 +0c +06 +00 +ENDCHAR +STARTCHAR C001e +ENCODING 61 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +7e +00 +00 +7e +00 +00 +ENDCHAR +STARTCHAR C001f +ENCODING 62 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +30 +18 +0c +18 +30 +60 +00 +ENDCHAR +STARTCHAR C0020 +ENCODING 63 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +0c +18 +00 +18 +00 +ENDCHAR +STARTCHAR C0021 +ENCODING 64 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +6e +6e +60 +3e +00 +ENDCHAR +STARTCHAR C0022 +ENCODING 65 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +3c +66 +66 +7e +66 +00 +ENDCHAR +STARTCHAR C0023 +ENCODING 66 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7c +66 +7c +66 +66 +7c +00 +ENDCHAR +STARTCHAR C0024 +ENCODING 67 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +60 +60 +66 +3c +00 +ENDCHAR +STARTCHAR C0025 +ENCODING 68 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +6c +66 +66 +6c +78 +00 +ENDCHAR +STARTCHAR C0026 +ENCODING 69 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +60 +7c +60 +60 +7e +00 +ENDCHAR +STARTCHAR C0027 +ENCODING 70 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +60 +7c +60 +60 +60 +00 +ENDCHAR +STARTCHAR C0028 +ENCODING 71 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3e +60 +60 +6e +66 +3e +00 +ENDCHAR +STARTCHAR C0029 +ENCODING 72 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +7e +66 +66 +66 +00 +ENDCHAR +STARTCHAR C002a +ENCODING 73 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +18 +18 +18 +18 +7e +00 +ENDCHAR +STARTCHAR C002b +ENCODING 74 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +06 +06 +06 +06 +66 +3c +00 +ENDCHAR +STARTCHAR C002c +ENCODING 75 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +6c +78 +78 +6c +66 +00 +ENDCHAR +STARTCHAR C002d +ENCODING 76 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +60 +60 +60 +60 +60 +7e +00 +ENDCHAR +STARTCHAR C002e +ENCODING 77 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +63 +77 +7f +6b +63 +63 +00 +ENDCHAR +STARTCHAR C002f +ENCODING 78 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +76 +7e +7e +6e +66 +00 +ENDCHAR +STARTCHAR C0030 +ENCODING 79 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +66 +66 +66 +3c +00 +ENDCHAR +STARTCHAR C0031 +ENCODING 80 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7c +66 +66 +7c +60 +60 +00 +ENDCHAR +STARTCHAR C0032 +ENCODING 81 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +66 +66 +6c +36 +00 +ENDCHAR +STARTCHAR C0033 +ENCODING 82 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7c +66 +66 +7c +6c +66 +00 +ENDCHAR +STARTCHAR C0034 +ENCODING 83 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +60 +3c +06 +06 +3c +00 +ENDCHAR +STARTCHAR C0035 +ENCODING 84 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +18 +18 +18 +18 +18 +00 +ENDCHAR +STARTCHAR C0036 +ENCODING 85 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +66 +66 +66 +7e +00 +ENDCHAR +STARTCHAR C0037 +ENCODING 86 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +66 +66 +3c +18 +00 +ENDCHAR +STARTCHAR C0038 +ENCODING 87 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +63 +63 +6b +7f +77 +63 +00 +ENDCHAR +STARTCHAR C0039 +ENCODING 88 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +3c +3c +66 +66 +00 +ENDCHAR +STARTCHAR C003a +ENCODING 89 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +3c +18 +18 +18 +00 +ENDCHAR +STARTCHAR C003b +ENCODING 90 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +0c +18 +30 +60 +7e +00 +ENDCHAR +STARTCHAR C003c +ENCODING 91 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +1e +18 +18 +18 +18 +1e +00 +ENDCHAR +STARTCHAR C003d +ENCODING 92 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +40 +60 +30 +18 +0c +06 +00 +ENDCHAR +STARTCHAR C003e +ENCODING 93 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +18 +18 +18 +18 +78 +00 +ENDCHAR +STARTCHAR C003f +ENCODING 94 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +08 +1c +36 +63 +00 +00 +00 +ENDCHAR +STARTCHAR C0040 +ENCODING 95 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +ff +00 +ENDCHAR +STARTCHAR C0041 +ENCODING 96 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +30 +30 +18 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0042 +ENCODING 97 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3c +06 +3e +66 +3e +00 +ENDCHAR +STARTCHAR C0043 +ENCODING 98 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +60 +60 +7c +66 +66 +7c +00 +ENDCHAR +STARTCHAR C0044 +ENCODING 99 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3c +60 +60 +60 +3c +00 +ENDCHAR +STARTCHAR C0045 +ENCODING 100 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +06 +06 +3e +66 +66 +3e +00 +ENDCHAR +STARTCHAR C0046 +ENCODING 101 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3c +66 +7e +60 +3c +00 +ENDCHAR +STARTCHAR C0047 +ENCODING 102 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +18 +3e +18 +18 +18 +00 +ENDCHAR +STARTCHAR C0048 +ENCODING 103 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3e +66 +66 +3e +06 +7c +ENDCHAR +STARTCHAR C0049 +ENCODING 104 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +60 +60 +7c +66 +66 +66 +00 +ENDCHAR +STARTCHAR C004a +ENCODING 105 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +00 +38 +18 +18 +3c +00 +ENDCHAR +STARTCHAR C004b +ENCODING 106 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +06 +00 +06 +06 +06 +06 +3c +ENDCHAR +STARTCHAR C004c +ENCODING 107 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +60 +60 +6c +78 +6c +66 +00 +ENDCHAR +STARTCHAR C004d +ENCODING 108 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +38 +18 +18 +18 +18 +3c +00 +ENDCHAR +STARTCHAR C004e +ENCODING 109 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +66 +7f +7f +6b +63 +00 +ENDCHAR +STARTCHAR C004f +ENCODING 110 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +7c +66 +66 +66 +66 +00 +ENDCHAR +STARTCHAR C0050 +ENCODING 111 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3c +66 +66 +66 +3c +00 +ENDCHAR +STARTCHAR C0051 +ENCODING 112 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +7c +66 +66 +7c +60 +60 +ENDCHAR +STARTCHAR C0052 +ENCODING 113 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3e +66 +66 +3e +06 +06 +ENDCHAR +STARTCHAR C0053 +ENCODING 114 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +7c +66 +60 +60 +60 +00 +ENDCHAR +STARTCHAR C0054 +ENCODING 115 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3e +60 +3c +06 +7c +00 +ENDCHAR +STARTCHAR C0055 +ENCODING 116 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +7e +18 +18 +18 +0e +00 +ENDCHAR +STARTCHAR C0056 +ENCODING 117 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +66 +66 +66 +66 +3e +00 +ENDCHAR +STARTCHAR C0057 +ENCODING 118 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +66 +66 +66 +3c +18 +00 +ENDCHAR +STARTCHAR C0058 +ENCODING 119 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +63 +6b +7f +3e +36 +00 +ENDCHAR +STARTCHAR C0059 +ENCODING 120 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +66 +3c +18 +3c +66 +00 +ENDCHAR +STARTCHAR C005a +ENCODING 121 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +66 +66 +66 +3e +0c +78 +ENDCHAR +STARTCHAR C005b +ENCODING 122 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +7e +0c +18 +30 +7e +00 +ENDCHAR +STARTCHAR C005c +ENCODING 123 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +18 +30 +18 +18 +0c +00 +ENDCHAR +STARTCHAR C005d +ENCODING 124 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR C005e +ENCODING 125 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +18 +18 +0c +18 +18 +30 +00 +ENDCHAR +STARTCHAR C005f +ENCODING 126 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +73 +db +ce +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0060 +ENCODING 160 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0061 +ENCODING 161 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +00 +18 +18 +18 +18 +18 +00 +ENDCHAR +STARTCHAR C0062 +ENCODING 162 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +3e +60 +60 +3e +18 +00 +ENDCHAR +STARTCHAR C0063 +ENCODING 163 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +1c +30 +30 +78 +30 +30 +7e +00 +ENDCHAR +STARTCHAR C0064 +ENCODING 164 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +42 +3c +24 +24 +3c +42 +00 +ENDCHAR +STARTCHAR C0065 +ENCODING 165 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +66 +66 +18 +7e +18 +7e +18 +00 +ENDCHAR +STARTCHAR C0066 +ENCODING 166 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +18 +00 +18 +18 +18 +00 +ENDCHAR +STARTCHAR C0067 +ENCODING 167 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +1c +20 +18 +24 +18 +04 +38 +00 +ENDCHAR +STARTCHAR C0068 +ENCODING 168 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0069 +ENCODING 169 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +7c +82 +9a +a2 +9a +82 +7c +00 +ENDCHAR +STARTCHAR C006a +ENCODING 170 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +0e +36 +1e +00 +00 +00 +ENDCHAR +STARTCHAR C006b +ENCODING 171 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +66 +cc +66 +00 +00 +ENDCHAR +STARTCHAR C006c +ENCODING 172 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +7e +06 +00 +00 +00 +ENDCHAR +STARTCHAR C006d +ENCODING 173 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +7e +00 +00 +00 +00 +ENDCHAR +STARTCHAR C006e +ENCODING 174 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +7c +82 +b2 +aa +b2 +aa +7c +00 +ENDCHAR +STARTCHAR C006f +ENCODING 175 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0070 +ENCODING 176 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +24 +18 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0071 +ENCODING 177 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +7e +18 +00 +7e +00 +00 +ENDCHAR +STARTCHAR C0072 +ENCODING 178 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +30 +48 +10 +20 +78 +00 +00 +ENDCHAR +STARTCHAR C0073 +ENCODING 179 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +30 +48 +10 +48 +30 +00 +00 +ENDCHAR +STARTCHAR C0074 +ENCODING 180 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0c +18 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0075 +ENCODING 181 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +66 +66 +66 +3e +06 +00 +ENDCHAR +STARTCHAR C0076 +ENCODING 182 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +36 +76 +76 +36 +16 +16 +00 +ENDCHAR +STARTCHAR C0077 +ENCODING 183 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +18 +18 +00 +00 +00 +ENDCHAR +STARTCHAR C0078 +ENCODING 184 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +00 +18 +18 +30 +ENDCHAR +STARTCHAR C0079 +ENCODING 185 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +38 +18 +3c +00 +00 +00 +ENDCHAR +STARTCHAR C007a +ENCODING 186 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +24 +18 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C007b +ENCODING 187 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +cc +66 +cc +00 +00 +ENDCHAR +STARTCHAR C007c +ENCODING 191 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +00 +18 +0c +66 +3c +00 +ENDCHAR +STARTCHAR C007d +ENCODING 192 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +30 +18 +3c +66 +7e +66 +00 +ENDCHAR +STARTCHAR C007e +ENCODING 193 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0c +18 +3c +66 +7e +66 +00 +ENDCHAR +STARTCHAR C007f +ENCODING 194 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +42 +18 +3c +66 +7e +66 +00 +ENDCHAR +STARTCHAR C0080 +ENCODING 195 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +6c +18 +3c +66 +7e +66 +00 +ENDCHAR +STARTCHAR C0081 +ENCODING 196 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +66 +66 +18 +3c +66 +7e +66 +00 +ENDCHAR +STARTCHAR C0082 +ENCODING 197 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +24 +18 +3c +66 +7e +66 +00 +ENDCHAR +STARTCHAR C0083 +ENCODING 198 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3e +78 +d8 +fe +d8 +de +00 +ENDCHAR +STARTCHAR C0084 +ENCODING 199 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +60 +66 +3c +18 +30 +ENDCHAR +STARTCHAR C0085 +ENCODING 201 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +7e +60 +7c +60 +7e +00 +ENDCHAR +STARTCHAR C0086 +ENCODING 202 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +42 +7e +60 +7c +60 +7e +00 +ENDCHAR +STARTCHAR C0087 +ENCODING 203 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +00 +7e +60 +7c +60 +7e +00 +ENDCHAR +STARTCHAR C0088 +ENCODING 204 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +18 +7e +18 +18 +18 +7e +00 +ENDCHAR +STARTCHAR C0089 +ENCODING 205 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +7e +18 +18 +18 +7e +00 +ENDCHAR +STARTCHAR C008a +ENCODING 206 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +42 +7e +18 +18 +18 +7e +00 +ENDCHAR +STARTCHAR C008b +ENCODING 207 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +00 +7e +18 +18 +18 +7e +00 +ENDCHAR +STARTCHAR C008c +ENCODING 208 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +6c +66 +f6 +6c +78 +00 +ENDCHAR +STARTCHAR C008d +ENCODING 209 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +6c +00 +76 +76 +7e +6e +00 +ENDCHAR +STARTCHAR C008e +ENCODING 210 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +3c +56 +66 +66 +66 +3c +00 +ENDCHAR +STARTCHAR C008f +ENCODING 211 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +06 +3c +6a +66 +66 +66 +3c +00 +ENDCHAR +STARTCHAR C0090 +ENCODING 214 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +66 +00 +3c +66 +66 +66 +3c +00 +ENDCHAR +STARTCHAR C0091 +ENCODING 215 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +3c +18 +3c +66 +00 +00 +ENDCHAR +STARTCHAR C0092 +ENCODING 217 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +18 +66 +66 +66 +66 +7e +00 +ENDCHAR +STARTCHAR C0093 +ENCODING 218 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +66 +66 +66 +66 +7e +00 +ENDCHAR +STARTCHAR C0094 +ENCODING 220 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +66 +00 +66 +66 +66 +66 +7e +00 +ENDCHAR +STARTCHAR C0095 +ENCODING 221 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +66 +66 +3c +18 +18 +00 +ENDCHAR +STARTCHAR C0096 +ENCODING 222 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +60 +7c +66 +7c +60 +60 +00 +ENDCHAR +STARTCHAR C0097 +ENCODING 223 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +1c +36 +3c +36 +37 +3e +60 +ENDCHAR +STARTCHAR C0098 +ENCODING 224 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +18 +3c +06 +3e +66 +3e +00 +ENDCHAR +STARTCHAR C0099 +ENCODING 225 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +3c +06 +3e +66 +3e +00 +ENDCHAR +STARTCHAR C009a +ENCODING 226 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +42 +00 +3c +0e +36 +1e +00 +ENDCHAR +STARTCHAR C009b +ENCODING 227 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +6c +00 +3c +0e +36 +1e +00 +ENDCHAR +STARTCHAR C009c +ENCODING 228 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +00 +3c +06 +3e +66 +3e +00 +ENDCHAR +STARTCHAR C009d +ENCODING 229 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +66 +1c +06 +3e +66 +3e +00 +ENDCHAR +STARTCHAR C009e +ENCODING 230 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +76 +1b +7e +d8 +7e +00 +ENDCHAR +STARTCHAR C009f +ENCODING 231 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3c +60 +60 +3c +18 +30 +ENDCHAR +STARTCHAR C00a0 +ENCODING 232 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +18 +3c +66 +7e +60 +3c +00 +ENDCHAR +STARTCHAR C00a1 +ENCODING 233 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +3c +66 +7e +60 +3c +00 +ENDCHAR +STARTCHAR C00a2 +ENCODING 234 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +c3 +3c +66 +7e +60 +3c +00 +ENDCHAR +STARTCHAR C00a3 +ENCODING 235 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +66 +00 +3c +66 +7e +60 +3c +00 +ENDCHAR +STARTCHAR C00a4 +ENCODING 236 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +18 +00 +38 +18 +18 +3c +00 +ENDCHAR +STARTCHAR C00a5 +ENCODING 237 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +00 +38 +18 +18 +3c +00 +ENDCHAR +STARTCHAR C00a6 +ENCODING 238 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +66 +00 +38 +18 +18 +3c +00 +ENDCHAR +STARTCHAR C00a7 +ENCODING 239 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +00 +38 +18 +18 +3c +00 +ENDCHAR +STARTCHAR C00a8 +ENCODING 240 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +68 +30 +58 +3c +66 +66 +3c +00 +ENDCHAR +STARTCHAR C00a9 +ENCODING 241 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +6c +00 +7c +66 +66 +66 +00 +ENDCHAR +STARTCHAR C00aa +ENCODING 242 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +18 +00 +3c +66 +66 +3c +00 +ENDCHAR +STARTCHAR C00ab +ENCODING 243 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +00 +3c +66 +66 +3c +00 +ENDCHAR +STARTCHAR C00ac +ENCODING 244 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +66 +00 +3c +66 +66 +3c +00 +ENDCHAR +STARTCHAR C00ad +ENCODING 245 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +6c +00 +3c +66 +66 +3c +00 +ENDCHAR +STARTCHAR C00ae +ENCODING 246 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +00 +3c +66 +66 +3c +00 +ENDCHAR +STARTCHAR C00af +ENCODING 247 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +00 +7e +00 +18 +00 +00 +ENDCHAR +STARTCHAR C00b0 +ENCODING 249 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +18 +00 +66 +66 +66 +3e +00 +ENDCHAR +STARTCHAR C00b1 +ENCODING 250 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +00 +66 +66 +66 +3e +00 +ENDCHAR +STARTCHAR C00b2 +ENCODING 251 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +66 +00 +66 +66 +66 +3e +00 +ENDCHAR +STARTCHAR C00b3 +ENCODING 252 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +00 +66 +66 +66 +3e +00 +ENDCHAR +STARTCHAR C00b4 +ENCODING 253 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +00 +66 +66 +3e +0c +78 +ENDCHAR +STARTCHAR C00b5 +ENCODING 254 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +60 +78 +6c +78 +60 +60 +00 +ENDCHAR +STARTCHAR C00b6 +ENCODING 255 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +66 +00 +66 +66 +66 +3e +0c +78 +ENDCHAR +STARTCHAR C00b7 +ENCODING 260 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +3c +66 +66 +7e +66 +03 +ENDCHAR +STARTCHAR C00b8 +ENCODING 261 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3c +06 +3e +66 +3e +03 +ENDCHAR +STARTCHAR C00b9 +ENCODING 262 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +3c +6e +60 +60 +66 +3e +00 +ENDCHAR +STARTCHAR C00ba +ENCODING 263 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +3c +60 +60 +60 +3c +00 +ENDCHAR +STARTCHAR C00bb +ENCODING 280 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +78 +60 +78 +60 +7e +18 +1e +00 +ENDCHAR +STARTCHAR C00bc +ENCODING 281 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3c +66 +7e +60 +3c +06 +ENDCHAR +STARTCHAR C00bd +ENCODING 321 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +60 +60 +78 +70 +e0 +7e +00 +ENDCHAR +STARTCHAR C00be +ENCODING 322 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +38 +18 +1c +38 +18 +3c +00 +ENDCHAR +STARTCHAR C00bf +ENCODING 323 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +5a +66 +7e +7e +6e +66 +00 +ENDCHAR +STARTCHAR C00c0 +ENCODING 324 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +7c +66 +66 +66 +66 +00 +ENDCHAR +STARTCHAR C00c1 +ENCODING 346 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +3c +60 +3c +06 +06 +3c +00 +ENDCHAR +STARTCHAR C00c2 +ENCODING 347 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +3e +60 +3c +06 +7c +00 +ENDCHAR +STARTCHAR C00c3 +ENCODING 377 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +7e +36 +0c +18 +30 +7e +00 +ENDCHAR +STARTCHAR C00c4 +ENCODING 378 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +18 +7e +0c +18 +30 +7e +00 +ENDCHAR +STARTCHAR C00c5 +ENCODING 379 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +7e +0c +18 +30 +60 +7e +00 +ENDCHAR +STARTCHAR C00c6 +ENCODING 380 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +00 +7e +0c +18 +30 +7e +00 +ENDCHAR +STARTCHAR C00c7 +ENCODING 551 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +00 +3c +06 +3e +66 +3e +00 +ENDCHAR +STARTCHAR C00c8 +ENCODING 1488 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +c6 +f6 +de +cc +c6 +00 +00 +ENDCHAR +STARTCHAR C00c9 +ENCODING 1489 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +f8 +1c +0c +0c +fe +00 +00 +ENDCHAR +STARTCHAR C00ca +ENCODING 1490 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +0c +0c +7c +e6 +00 +00 +ENDCHAR +STARTCHAR C00cb +ENCODING 1491 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fe +1c +0c +0c +0c +00 +00 +ENDCHAR +STARTCHAR C00cc +ENCODING 1492 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +06 +46 +66 +66 +00 +00 +ENDCHAR +STARTCHAR C00cd +ENCODING 1493 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +1c +0c +0c +0c +00 +00 +ENDCHAR +STARTCHAR C00ce +ENCODING 1494 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +70 +30 +30 +30 +00 +00 +ENDCHAR +STARTCHAR C00cf +ENCODING 1495 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +66 +66 +66 +66 +00 +00 +ENDCHAR +STARTCHAR C00d0 +ENCODING 1496 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +de +d6 +c6 +c6 +fc +00 +00 +ENDCHAR +STARTCHAR C00d1 +ENCODING 1497 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7c +1c +0c +00 +00 +00 +00 +ENDCHAR +STARTCHAR C00d2 +ENCODING 1498 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +0e +06 +06 +06 +06 +06 +ENDCHAR +STARTCHAR C00d3 +ENCODING 1499 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +06 +06 +0e +fc +00 +00 +ENDCHAR +STARTCHAR C00d4 +ENCODING 1500 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +c0 +fc +06 +06 +0e +3c +00 +00 +ENDCHAR +STARTCHAR C00d5 +ENCODING 1501 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +66 +66 +66 +7e +00 +00 +ENDCHAR +STARTCHAR C00d6 +ENCODING 1502 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +dc +76 +66 +66 +6e +00 +00 +ENDCHAR +STARTCHAR C00d7 +ENCODING 1503 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +1e +0e +06 +06 +06 +06 +06 +ENDCHAR +STARTCHAR C00d8 +ENCODING 1504 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +1e +06 +06 +0e +7c +00 +00 +ENDCHAR +STARTCHAR C00d9 +ENCODING 1505 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fe +66 +66 +6c +78 +00 +00 +ENDCHAR +STARTCHAR C00da +ENCODING 1506 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +ee +66 +36 +36 +fc +00 +00 +ENDCHAR +STARTCHAR C00db +ENCODING 1507 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +6e +66 +06 +06 +06 +06 +ENDCHAR +STARTCHAR C00dc +ENCODING 1508 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +66 +66 +0e +fc +00 +00 +ENDCHAR +STARTCHAR C00dd +ENCODING 1509 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +ce +66 +6c +78 +60 +60 +60 +ENDCHAR +STARTCHAR C00de +ENCODING 1510 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +c6 +6e +38 +0c +fe +00 +00 +ENDCHAR +STARTCHAR C00df +ENCODING 1511 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +0e +c6 +cc +d8 +c0 +c0 +ENDCHAR +STARTCHAR C00e0 +ENCODING 1512 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +0e +06 +06 +06 +00 +00 +ENDCHAR +STARTCHAR C00e1 +ENCODING 1513 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +92 +d2 +e6 +cc +fc +00 +00 +ENDCHAR +STARTCHAR C00e2 +ENCODING 1514 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +fc +6e +66 +66 +e6 +00 +00 +ENDCHAR +STARTCHAR C00e3 +ENCODING 1567 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +30 +18 +00 +18 +00 +ENDCHAR +STARTCHAR C00e4 +ENCODING 1569 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +1c +30 +1c +38 +20 +00 +ENDCHAR +STARTCHAR C00e5 +ENCODING 1570 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR C00e6 +ENCODING 1572 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +60 +cf +1b +0f +03 +06 +7c +ENDCHAR +STARTCHAR C00e7 +ENCODING 1575 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +03 +03 +03 +03 +03 +00 +00 +ENDCHAR +STARTCHAR C00e8 +ENCODING 1576 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +c3 +c3 +7e +00 +18 +ENDCHAR +STARTCHAR C00e9 +ENCODING 1577 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +1b +00 +0f +1b +1b +1f +00 +00 +ENDCHAR +STARTCHAR C00ea +ENCODING 1578 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +36 +00 +c3 +c3 +7e +00 +00 +ENDCHAR +STARTCHAR C00eb +ENCODING 1579 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +66 +00 +c3 +c3 +7e +00 +00 +ENDCHAR +STARTCHAR C00ec +ENCODING 1580 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +0c +3e +63 +60 +63 +38 +ENDCHAR +STARTCHAR C00ed +ENCODING 1581 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +0c +3e +63 +61 +60 +3c +ENDCHAR +STARTCHAR C00ee +ENCODING 1582 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +78 +0c +3e +63 +61 +60 +3c +ENDCHAR +STARTCHAR C00ef +ENCODING 1583 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +06 +03 +03 +06 +7c +ENDCHAR +STARTCHAR C00f0 +ENCODING 1584 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +00 +0c +06 +03 +03 +3e +00 +ENDCHAR +STARTCHAR C00f1 +ENCODING 1585 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +06 +03 +03 +06 +7c +ENDCHAR +STARTCHAR C00f2 +ENCODING 1586 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +03 +00 +06 +03 +03 +06 +7c +ENDCHAR +STARTCHAR C00f3 +ENCODING 1587 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +95 +95 +9f +9e +f0 +60 +ENDCHAR +STARTCHAR C00f4 +ENCODING 1588 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +33 +00 +95 +95 +9f +f0 +60 +ENDCHAR +STARTCHAR C00f5 +ENCODING 1589 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +99 +91 +9f +f0 +60 +ENDCHAR +STARTCHAR C00f6 +ENCODING 1590 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +00 +0f +99 +91 +9f +f8 +70 +ENDCHAR +STARTCHAR C00f7 +ENCODING 1591 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C00f8 +ENCODING 1592 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +6c +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C00f9 +ENCODING 1593 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +18 +18 +3f +61 +70 +3e +ENDCHAR +STARTCHAR C00fa +ENCODING 1594 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +0e +18 +18 +3f +61 +70 +3e +ENDCHAR +STARTCHAR C00fb +ENCODING 1601 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +30 +07 +cd +c7 +ff +00 +00 +ENDCHAR +STARTCHAR C00fc +ENCODING 1602 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +00 +07 +4d +c7 +c3 +7e +00 +ENDCHAR +STARTCHAR C00fd +ENCODING 1603 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +33 +23 +73 +03 +83 +fe +00 +ENDCHAR +STARTCHAR C00fe +ENCODING 1604 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +03 +03 +03 +63 +63 +63 +3e +ENDCHAR +STARTCHAR C00ff +ENCODING 1605 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +06 +1f +3d +67 +63 +60 +60 +ENDCHAR +STARTCHAR C0100 +ENCODING 1606 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +00 +22 +63 +63 +3e +00 +ENDCHAR +STARTCHAR C0101 +ENCODING 1607 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +1b +1b +1f +00 +00 +ENDCHAR +STARTCHAR C0102 +ENCODING 1608 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +1b +1f +03 +06 +7c +ENDCHAR +STARTCHAR C0103 +ENCODING 1609 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0e +db +d9 +cd +cc +7c +ENDCHAR +STARTCHAR C0104 +ENCODING 1610 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +9f +99 +cd +7d +00 +36 +ENDCHAR +STARTCHAR C0105 +ENCODING 1632 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +06 +0c +18 +30 +60 +40 +00 +ENDCHAR +STARTCHAR C0106 +ENCODING 1633 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +08 +1c +3e +1c +08 +00 +ENDCHAR +STARTCHAR C0107 +ENCODING 1634 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR C0108 +ENCODING 1635 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +3c +66 +60 +30 +18 +0c +06 +ENDCHAR +STARTCHAR C0109 +ENCODING 1636 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +6b +6b +7f +70 +30 +38 +18 +ENDCHAR +STARTCHAR C010a +ENCODING 1637 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +1e +38 +70 +1c +38 +70 +3e +ENDCHAR +STARTCHAR C010b +ENCODING 1638 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +1c +3e +66 +66 +66 +7e +3c +ENDCHAR +STARTCHAR C010c +ENCODING 1639 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7c +7c +0c +0c +0c +0c +0c +ENDCHAR +STARTCHAR C010d +ENCODING 1640 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +66 +66 +3c +3c +18 +ENDCHAR +STARTCHAR C010e +ENCODING 1641 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +3c +3c +66 +66 +66 +66 +ENDCHAR +STARTCHAR C010f +ENCODING 8211 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +7e +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0110 +ENCODING 8212 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +7e +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0111 +ENCODING 8216 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +30 +18 +0c +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0112 +ENCODING 8217 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0c +18 +30 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0113 +ENCODING 8220 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +33 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0114 +ENCODING 8221 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +66 +66 +cc +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0115 +ENCODING 8249 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +18 +30 +18 +00 +00 +ENDCHAR +STARTCHAR C0116 +ENCODING 8250 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +18 +0c +18 +00 +00 +ENDCHAR +STARTCHAR C0117 +ENCODING 8364 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +1e +30 +7c +30 +7c +30 +1e +00 +ENDCHAR +STARTCHAR C0118 +ENCODING 8592 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +30 +7e +30 +18 +00 +00 +ENDCHAR +STARTCHAR C0119 +ENCODING 8593 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +3c +7e +18 +18 +18 +00 +ENDCHAR +STARTCHAR C011a +ENCODING 8594 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +0c +7e +0c +18 +00 +00 +ENDCHAR +STARTCHAR C011b +ENCODING 8595 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +18 +18 +7e +3c +18 +00 +ENDCHAR +STARTCHAR C011c +ENCODING 8624 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +7e +78 +7c +6e +66 +06 +00 +ENDCHAR +STARTCHAR C011d +ENCODING 9243 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +78 +60 +78 +60 +7e +18 +1e +00 +ENDCHAR +STARTCHAR C011e +ENCODING 9473 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +ff +ff +00 +00 +00 +ENDCHAR +STARTCHAR C011f +ENCODING 9475 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +03 +03 +03 +03 +03 +03 +03 +ENDCHAR +STARTCHAR C0120 +ENCODING 9487 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +1f +1f +18 +18 +18 +ENDCHAR +STARTCHAR C0121 +ENCODING 9491 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +f8 +f8 +18 +18 +18 +ENDCHAR +STARTCHAR C0122 +ENCODING 9495 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +1f +1f +00 +00 +00 +ENDCHAR +STARTCHAR C0123 +ENCODING 9499 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +f8 +f8 +00 +00 +00 +ENDCHAR +STARTCHAR C0124 +ENCODING 9507 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +1f +1f +18 +18 +18 +ENDCHAR +STARTCHAR C0125 +ENCODING 9515 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +f8 +f8 +18 +18 +18 +ENDCHAR +STARTCHAR C0126 +ENCODING 9523 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +ff +ff +18 +18 +18 +ENDCHAR +STARTCHAR C0127 +ENCODING 9531 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +ff +ff +00 +00 +00 +ENDCHAR +STARTCHAR C0128 +ENCODING 9547 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +ff +ff +18 +18 +18 +ENDCHAR +STARTCHAR C0129 +ENCODING 9585 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +07 +0e +1c +38 +70 +e0 +c0 +ENDCHAR +STARTCHAR C012a +ENCODING 9586 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +c0 +e0 +70 +38 +1c +0e +07 +03 +ENDCHAR +STARTCHAR C012b +ENCODING 9601 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +00 +00 +ff +ff +ENDCHAR +STARTCHAR C012c +ENCODING 9604 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +ff +ff +ff +ff +ENDCHAR +STARTCHAR C012d +ENCODING 9612 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +ENDCHAR +STARTCHAR C012e +ENCODING 9614 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +c0 +c0 +c0 +c0 +c0 +c0 +c0 +c0 +ENDCHAR +STARTCHAR C012f +ENCODING 9620 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +ff +ff +00 +00 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0130 +ENCODING 9622 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +f0 +f0 +f0 +f0 +ENDCHAR +STARTCHAR C0131 +ENCODING 9623 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +00 +0f +0f +0f +0f +ENDCHAR +STARTCHAR C0132 +ENCODING 9624 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +f0 +f0 +f0 +f0 +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0133 +ENCODING 9629 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0f +0f +0f +0f +00 +00 +00 +00 +ENDCHAR +STARTCHAR C0134 +ENCODING 9654 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +10 +18 +1c +1e +1c +18 +10 +00 +ENDCHAR +STARTCHAR C0135 +ENCODING 9664 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +08 +18 +38 +78 +38 +18 +08 +00 +ENDCHAR +STARTCHAR C0136 +ENCODING 9670 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +3c +7e +7e +3c +18 +00 +ENDCHAR +STARTCHAR C0137 +ENCODING 9679 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +3c +7e +7e +7e +3c +00 +ENDCHAR +STARTCHAR C0138 +ENCODING 9698 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +01 +03 +07 +0f +1f +3f +7f +ff +ENDCHAR +STARTCHAR C0139 +ENCODING 9699 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +80 +c0 +e0 +f0 +f8 +fc +fe +ff +ENDCHAR +STARTCHAR C013a +ENCODING 9824 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +3c +7e +7e +18 +3c +00 +ENDCHAR +STARTCHAR C013b +ENCODING 9827 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +1c +1c +77 +77 +08 +1c +00 +ENDCHAR +STARTCHAR C013c +ENCODING 9829 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +36 +7f +7f +3e +1c +08 +00 +ENDCHAR +STARTCHAR C013d +ENCODING 62456 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +23 +33 +1b +0b +0e +7c +00 +ENDCHAR +STARTCHAR C013e +ENCODING 65152 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +1c +30 +1c +38 +20 +00 +ENDCHAR +STARTCHAR C013f +ENCODING 65153 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR C0140 +ENCODING 65154 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR C0141 +ENCODING 65157 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +60 +cf +1b +0f +03 +06 +7c +ENDCHAR +STARTCHAR C0142 +ENCODING 65158 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +60 +cf +1b +0f +03 +06 +7c +ENDCHAR +STARTCHAR C0143 +ENCODING 65165 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +03 +03 +03 +03 +03 +00 +00 +ENDCHAR +STARTCHAR C0144 +ENCODING 65166 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +03 +03 +03 +03 +03 +00 +00 +ENDCHAR +STARTCHAR C0145 +ENCODING 65167 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +c3 +c3 +7e +00 +18 +ENDCHAR +STARTCHAR C0146 +ENCODING 65168 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +c3 +c3 +7e +00 +18 +ENDCHAR +STARTCHAR C0147 +ENCODING 65169 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +03 +03 +ff +00 +06 +ENDCHAR +STARTCHAR C0148 +ENCODING 65170 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +c3 +c3 +7e +00 +18 +ENDCHAR +STARTCHAR C0149 +ENCODING 65171 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +1b +00 +0f +1b +1b +1f +00 +00 +ENDCHAR +STARTCHAR C014a +ENCODING 65172 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +1b +00 +0f +1b +1b +1f +00 +00 +ENDCHAR +STARTCHAR C014b +ENCODING 65173 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +36 +00 +c3 +c3 +7e +00 +00 +ENDCHAR +STARTCHAR C014c +ENCODING 65174 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +36 +00 +c3 +c3 +7e +00 +00 +ENDCHAR +STARTCHAR C014d +ENCODING 65175 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +6c +00 +03 +03 +ff +00 +00 +ENDCHAR +STARTCHAR C014e +ENCODING 65176 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +36 +00 +c3 +c3 +7e +00 +00 +ENDCHAR +STARTCHAR C014f +ENCODING 65177 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +66 +00 +c3 +c3 +7e +00 +00 +ENDCHAR +STARTCHAR C0150 +ENCODING 65178 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +66 +00 +c3 +c3 +7e +00 +00 +ENDCHAR +STARTCHAR C0151 +ENCODING 65179 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +66 +00 +03 +03 +ff +00 +00 +ENDCHAR +STARTCHAR C0152 +ENCODING 65180 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +66 +00 +c3 +c3 +7e +00 +00 +ENDCHAR +STARTCHAR C0153 +ENCODING 65181 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +0c +3e +63 +60 +63 +38 +ENDCHAR +STARTCHAR C0154 +ENCODING 65182 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +0c +3e +63 +60 +63 +38 +ENDCHAR +STARTCHAR C0155 +ENCODING 65183 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +78 +4c +06 +ff +00 +0c +ENDCHAR +STARTCHAR C0156 +ENCODING 65184 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +0c +3e +63 +60 +63 +38 +ENDCHAR +STARTCHAR C0157 +ENCODING 65185 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +0c +3e +63 +61 +60 +3c +ENDCHAR +STARTCHAR C0158 +ENCODING 65186 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +0c +3e +63 +61 +60 +3c +ENDCHAR +STARTCHAR C0159 +ENCODING 65187 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +78 +4c +06 +ff +00 +00 +ENDCHAR +STARTCHAR C015a +ENCODING 65188 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +78 +0c +3e +63 +61 +60 +3c +ENDCHAR +STARTCHAR C015b +ENCODING 65189 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +78 +0c +3e +63 +61 +60 +3c +ENDCHAR +STARTCHAR C015c +ENCODING 65190 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +78 +0c +3e +63 +61 +60 +3c +ENDCHAR +STARTCHAR C015d +ENCODING 65191 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +00 +78 +4c +06 +ff +00 +00 +ENDCHAR +STARTCHAR C015e +ENCODING 65192 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +78 +0c +3e +63 +61 +60 +3c +ENDCHAR +STARTCHAR C015f +ENCODING 65193 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +06 +03 +03 +06 +7c +ENDCHAR +STARTCHAR C0160 +ENCODING 65194 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +06 +03 +03 +06 +7c +ENDCHAR +STARTCHAR C0161 +ENCODING 65195 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +00 +0c +06 +03 +03 +3e +00 +ENDCHAR +STARTCHAR C0162 +ENCODING 65196 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +00 +0c +06 +03 +03 +3e +00 +ENDCHAR +STARTCHAR C0163 +ENCODING 65197 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +06 +03 +03 +06 +7c +ENDCHAR +STARTCHAR C0164 +ENCODING 65198 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +06 +03 +03 +06 +7c +ENDCHAR +STARTCHAR C0165 +ENCODING 65199 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +03 +00 +06 +03 +03 +06 +7c +ENDCHAR +STARTCHAR C0166 +ENCODING 65200 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +03 +00 +06 +03 +03 +06 +7c +ENDCHAR +STARTCHAR C0167 +ENCODING 65201 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +95 +95 +9f +9e +f0 +60 +ENDCHAR +STARTCHAR C0168 +ENCODING 65202 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +95 +95 +9f +9e +f0 +60 +ENDCHAR +STARTCHAR C0169 +ENCODING 65203 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +49 +db +ff +00 +00 +ENDCHAR +STARTCHAR C016a +ENCODING 65204 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +95 +95 +9f +9e +f0 +60 +ENDCHAR +STARTCHAR C016b +ENCODING 65205 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +33 +00 +95 +95 +9f +f0 +60 +ENDCHAR +STARTCHAR C016c +ENCODING 65206 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +33 +00 +95 +95 +9f +f0 +60 +ENDCHAR +STARTCHAR C016d +ENCODING 65207 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +66 +00 +49 +db +ff +00 +00 +ENDCHAR +STARTCHAR C016e +ENCODING 65208 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +33 +00 +95 +95 +9f +f0 +60 +ENDCHAR +STARTCHAR C016f +ENCODING 65209 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +99 +91 +9f +f0 +60 +ENDCHAR +STARTCHAR C0170 +ENCODING 65210 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +99 +91 +9f +f0 +60 +ENDCHAR +STARTCHAR C0171 +ENCODING 65211 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +59 +f1 +ff +00 +00 +ENDCHAR +STARTCHAR C0172 +ENCODING 65212 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +99 +91 +9f +f0 +60 +ENDCHAR +STARTCHAR C0173 +ENCODING 65213 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +00 +0f +99 +91 +9f +f8 +70 +ENDCHAR +STARTCHAR C0174 +ENCODING 65214 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +00 +0f +99 +91 +9f +f8 +70 +ENDCHAR +STARTCHAR C0175 +ENCODING 65215 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +18 +00 +0f +59 +f1 +ff +00 +00 +ENDCHAR +STARTCHAR C0176 +ENCODING 65216 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +0c +00 +0f +99 +91 +9f +f8 +70 +ENDCHAR +STARTCHAR C0177 +ENCODING 65217 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C0178 +ENCODING 65218 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C0179 +ENCODING 65219 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C017a +ENCODING 65220 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C017b +ENCODING 65221 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +6c +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C017c +ENCODING 65222 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +6c +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C017d +ENCODING 65223 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +6c +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C017e +ENCODING 65224 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +6c +60 +6f +79 +71 +ff +00 +00 +ENDCHAR +STARTCHAR C017f +ENCODING 65225 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +18 +18 +3f +61 +70 +3e +ENDCHAR +STARTCHAR C0180 +ENCODING 65226 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +18 +18 +3f +61 +70 +3e +ENDCHAR +STARTCHAR C0181 +ENCODING 65227 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +1c +3e +30 +18 +ff +00 +00 +ENDCHAR +STARTCHAR C0182 +ENCODING 65228 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +18 +18 +3f +61 +70 +3e +ENDCHAR +STARTCHAR C0183 +ENCODING 65229 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +0e +18 +18 +3f +61 +70 +3e +ENDCHAR +STARTCHAR C0184 +ENCODING 65230 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +0e +18 +18 +3f +61 +70 +3e +ENDCHAR +STARTCHAR C0185 +ENCODING 65231 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +1c +3e +30 +18 +ff +00 +00 +ENDCHAR +STARTCHAR C0186 +ENCODING 65232 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +60 +0e +18 +18 +3f +61 +70 +3e +ENDCHAR +STARTCHAR C0187 +ENCODING 65233 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +30 +07 +cd +c7 +ff +00 +00 +ENDCHAR +STARTCHAR C0188 +ENCODING 65234 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +30 +07 +cd +c7 +ff +00 +00 +ENDCHAR +STARTCHAR C0189 +ENCODING 65235 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +30 +00 +0f +0d +07 +ff +00 +00 +ENDCHAR +STARTCHAR C018a +ENCODING 65236 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +30 +07 +cd +c7 +ff +00 +00 +ENDCHAR +STARTCHAR C018b +ENCODING 65237 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +00 +07 +4d +c7 +c3 +7e +00 +ENDCHAR +STARTCHAR C018c +ENCODING 65238 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +00 +07 +4d +c7 +c3 +7e +00 +ENDCHAR +STARTCHAR C018d +ENCODING 65239 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +6c +00 +1f +19 +0f +ff +00 +00 +ENDCHAR +STARTCHAR C018e +ENCODING 65240 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +36 +00 +07 +4d +c7 +c3 +7e +00 +ENDCHAR +STARTCHAR C018f +ENCODING 65241 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +33 +23 +73 +03 +83 +fe +00 +ENDCHAR +STARTCHAR C0190 +ENCODING 65242 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +33 +23 +73 +03 +83 +fe +00 +ENDCHAR +STARTCHAR C0191 +ENCODING 65243 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +1c +06 +03 +03 +3e +00 +ENDCHAR +STARTCHAR C0192 +ENCODING 65244 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +33 +23 +73 +03 +83 +fe +00 +ENDCHAR +STARTCHAR C0193 +ENCODING 65245 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +03 +03 +03 +63 +63 +63 +3e +ENDCHAR +STARTCHAR C0194 +ENCODING 65246 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +03 +03 +03 +63 +63 +63 +3e +ENDCHAR +STARTCHAR C0195 +ENCODING 65247 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +03 +03 +03 +03 +ff +00 +00 +ENDCHAR +STARTCHAR C0196 +ENCODING 65248 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +03 +03 +03 +63 +63 +63 +3e +ENDCHAR +STARTCHAR C0197 +ENCODING 65249 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +06 +1f +3d +67 +63 +60 +60 +ENDCHAR +STARTCHAR C0198 +ENCODING 65250 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +06 +1f +3d +67 +63 +60 +60 +ENDCHAR +STARTCHAR C0199 +ENCODING 65251 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +07 +0d +fd +07 +00 +ENDCHAR +STARTCHAR C019a +ENCODING 65252 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +06 +1f +3d +67 +63 +60 +60 +ENDCHAR +STARTCHAR C019b +ENCODING 65253 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +00 +22 +63 +63 +3e +00 +ENDCHAR +STARTCHAR C019c +ENCODING 65254 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +00 +22 +63 +63 +3e +00 +ENDCHAR +STARTCHAR C019d +ENCODING 65255 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0c +00 +03 +03 +ff +00 +00 +ENDCHAR +STARTCHAR C019e +ENCODING 65256 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +18 +00 +22 +63 +63 +3e +00 +ENDCHAR +STARTCHAR C019f +ENCODING 65257 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +1b +1b +1f +00 +00 +ENDCHAR +STARTCHAR C01a0 +ENCODING 65258 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +1b +1b +1f +00 +00 +ENDCHAR +STARTCHAR C01a1 +ENCODING 65259 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +10 +3e +27 +39 +ff +00 +00 +ENDCHAR +STARTCHAR C01a2 +ENCODING 65260 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +1b +1b +1f +00 +00 +ENDCHAR +STARTCHAR C01a3 +ENCODING 65261 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +1b +1f +03 +06 +7c +ENDCHAR +STARTCHAR C01a4 +ENCODING 65262 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0f +1b +1f +03 +06 +7c +ENDCHAR +STARTCHAR C01a5 +ENCODING 65263 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0e +db +d9 +cd +cc +7c +ENDCHAR +STARTCHAR C01a6 +ENCODING 65264 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +0e +db +d9 +cd +cc +7c +ENDCHAR +STARTCHAR C01a7 +ENCODING 65265 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +9f +99 +cd +7d +00 +36 +ENDCHAR +STARTCHAR C01a8 +ENCODING 65266 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +9f +99 +cd +7d +00 +36 +ENDCHAR +STARTCHAR C01a9 +ENCODING 65267 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +00 +00 +03 +03 +ff +00 +36 +ENDCHAR +STARTCHAR C01aa +ENCODING 65268 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +00 +0e +9f +99 +cd +7d +00 +36 +ENDCHAR +STARTCHAR C01ab +ENCODING 65271 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +03 +23 +33 +1b +0b +0e +7c +00 +ENDCHAR +STARTCHAR C01ac +ENCODING 65533 +SWIDTH 666 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +3c +66 +5a +76 +7e +76 +3c +00 +ENDCHAR +ENDFONT diff --git a/fonts/fauxtari-8.psf b/fonts/fauxtari-8.psf Binary files differnew file mode 100644 index 0000000..a58b0e0 --- /dev/null +++ b/fonts/fauxtari-8.psf diff --git a/fonts/fauxtari-8.txt b/fonts/fauxtari-8.txt new file mode 100644 index 0000000..f82836e --- /dev/null +++ b/fonts/fauxtari-8.txt @@ -0,0 +1,4261 @@ +%PSF2 +Version: 0 +Flags: 1 +Length: 512 +Width: 8 +Height: 8 +% +Unicode: [2665]; +Bitmap: \ +-------- \ +--##-##- \ +-####### \ +-####### \ +--#####- \ +---###-- \ +----#--- \ +-------- +% +Unicode: [2523]; +Bitmap: \ +---##--- \ +---##--- \ +---##--- \ +---##### \ +---##### \ +---##--- \ +---##--- \ +---##--- +% +Unicode: [2503]; +Bitmap: \ +------## \ +------## \ +------## \ +------## \ +------## \ +------## \ +------## \ +------## +% +Unicode: [251b]; +Bitmap: \ +---##--- \ +---##--- \ +---##--- \ +#####--- \ +#####--- \ +-------- \ +-------- \ +-------- +% +Unicode: [252b]; +Bitmap: \ +---##--- \ +---##--- \ +---##--- \ +#####--- \ +#####--- \ +---##--- \ +---##--- \ +---##--- +% +Unicode: [2513]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +#####--- \ +#####--- \ +---##--- \ +---##--- \ +---##--- +% +Unicode: [2571]; +Bitmap: \ +------## \ +-----### \ +----###- \ +---###-- \ +--###--- \ +-###---- \ +###----- \ +##------ +% +Unicode: [2572]; +Bitmap: \ +##------ \ +###----- \ +-###---- \ +--###--- \ +---###-- \ +----###- \ +-----### \ +------## +% +Unicode: [25e2]; +Bitmap: \ +-------# \ +------## \ +-----### \ +----#### \ +---##### \ +--###### \ +-####### \ +######## +% +Unicode: [2597]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-------- \ +----#### \ +----#### \ +----#### \ +----#### +% +Unicode: [25e3]; +Bitmap: \ +#------- \ +##------ \ +###----- \ +####---- \ +#####--- \ +######-- \ +#######- \ +######## +% +Unicode: [259d]; +Bitmap: \ +----#### \ +----#### \ +----#### \ +----#### \ +-------- \ +-------- \ +-------- \ +-------- +% +Unicode: [2598]; +Bitmap: \ +####---- \ +####---- \ +####---- \ +####---- \ +-------- \ +-------- \ +-------- \ +-------- +% +Unicode: [2594]; +Bitmap: \ +######## \ +######## \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- +% +Unicode: [2581]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +######## \ +######## +% +Unicode: [2596]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-------- \ +####---- \ +####---- \ +####---- \ +####---- +% +Unicode: [2663]; +Bitmap: \ +-------- \ +---###-- \ +---###-- \ +-###-### \ +-###-### \ +----#--- \ +---###-- \ +-------- +% +Unicode: [250f]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +---##### \ +---##### \ +---##--- \ +---##--- \ +---##--- +% +Unicode: [2501]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +######## \ +######## \ +-------- \ +-------- \ +-------- +% +Unicode: [254b]; +Bitmap: \ +---##--- \ +---##--- \ +---##--- \ +######## \ +######## \ +---##--- \ +---##--- \ +---##--- +% +Unicode: [25cf]; +Bitmap: \ +-------- \ +-------- \ +--####-- \ +-######- \ +-######- \ +-######- \ +--####-- \ +-------- +% +Unicode: [2584]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-------- \ +######## \ +######## \ +######## \ +######## +% +Unicode: [258e]; +Bitmap: \ +##------ \ +##------ \ +##------ \ +##------ \ +##------ \ +##------ \ +##------ \ +##------ +% +Unicode: [2533]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +######## \ +######## \ +---##--- \ +---##--- \ +---##--- +% +Unicode: [253b]; +Bitmap: \ +---##--- \ +---##--- \ +---##--- \ +######## \ +######## \ +-------- \ +-------- \ +-------- +% +Unicode: [258c]; +Bitmap: \ +####---- \ +####---- \ +####---- \ +####---- \ +####---- \ +####---- \ +####---- \ +####---- +% +Unicode: [2517]; +Bitmap: \ +---##--- \ +---##--- \ +---##--- \ +---##### \ +---##### \ +-------- \ +-------- \ +-------- +% +Unicode: [0118];[241b]; +Bitmap: \ +-####--- \ +-##----- \ +-####--- \ +-##----- \ +-######- \ +---##--- \ +---####- \ +-------- +% +Unicode: [2191]; +Bitmap: \ +-------- \ +---##--- \ +--####-- \ +-######- \ +---##--- \ +---##--- \ +---##--- \ +-------- +% +Unicode: [2193]; +Bitmap: \ +-------- \ +---##--- \ +---##--- \ +---##--- \ +-######- \ +--####-- \ +---##--- \ +-------- +% +Unicode: [2190]; +Bitmap: \ +-------- \ +---##--- \ +--##---- \ +-######- \ +--##---- \ +---##--- \ +-------- \ +-------- +% +Unicode: [2192]; +Bitmap: \ +-------- \ +---##--- \ +----##-- \ +-######- \ +----##-- \ +---##--- \ +-------- \ +-------- +% +Unicode: [0020];[00a0]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- +% +Unicode: [0021]; +Bitmap: \ +-------- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +-------- \ +---##--- \ +-------- +% +Unicode: [0022]; +Bitmap: \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +-------- \ +-------- \ +-------- \ +-------- +% +Unicode: [0023]; +Bitmap: \ +-------- \ +-##--##- \ +######## \ +-##--##- \ +-##--##- \ +######## \ +-##--##- \ +-------- +% +Unicode: [0024]; +Bitmap: \ +---##--- \ +--#####- \ +-##----- \ +--####-- \ +-----##- \ +-#####-- \ +---##--- \ +-------- +% +Unicode: [0025]; +Bitmap: \ +-------- \ +-##--##- \ +-##-##-- \ +---##--- \ +--##---- \ +-##--##- \ +-#---##- \ +-------- +% +Unicode: [0026]; +Bitmap: \ +---###-- \ +--##-##- \ +---###-- \ +--###--- \ +-##-#### \ +-##--##- \ +--###-## \ +-------- +% +Unicode: [0027]; +Bitmap: \ +-------- \ +---##--- \ +---##--- \ +---##--- \ +-------- \ +-------- \ +-------- \ +-------- +% +Unicode: [0028]; +Bitmap: \ +-------- \ +----###- \ +---###-- \ +---##--- \ +---##--- \ +---###-- \ +----###- \ +-------- +% +Unicode: [0029]; +Bitmap: \ +-------- \ +-###---- \ +--###--- \ +---##--- \ +---##--- \ +--###--- \ +-###---- \ +-------- +% +Unicode: [002a]; +Bitmap: \ +-------- \ +-##--##- \ +--####-- \ +######## \ +--####-- \ +-##--##- \ +-------- \ +-------- +% +Unicode: [002b]; +Bitmap: \ +-------- \ +---##--- \ +---##--- \ +-######- \ +---##--- \ +---##--- \ +-------- \ +-------- +% +Unicode: [002c];[00b8]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +---##--- \ +---##--- \ +--##---- +% +Unicode: [002d];[00ad];[2013];[2014]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-######- \ +-------- \ +-------- \ +-------- \ +-------- +% +Unicode: [002e]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +---##--- \ +---##--- \ +-------- +% +Unicode: [002f]; +Bitmap: \ +-------- \ +-----##- \ +----##-- \ +---##--- \ +--##---- \ +-##----- \ +-#------ \ +-------- +% +Unicode: [0030]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +-##-###- \ +-###-##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [0031]; +Bitmap: \ +-------- \ +---##--- \ +--###--- \ +---##--- \ +---##--- \ +---##--- \ +-######- \ +-------- +% +Unicode: [0032]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +----##-- \ +---##--- \ +--##---- \ +-######- \ +-------- +% +Unicode: [0033]; +Bitmap: \ +-------- \ +-######- \ +----##-- \ +---##--- \ +----##-- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [0034]; +Bitmap: \ +-------- \ +----##-- \ +---###-- \ +--####-- \ +-##-##-- \ +-######- \ +----##-- \ +-------- +% +Unicode: [0035]; +Bitmap: \ +-------- \ +-######- \ +-##----- \ +-#####-- \ +-----##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [0036]; +Bitmap: \ +-------- \ +--####-- \ +-##----- \ +-#####-- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [0037]; +Bitmap: \ +-------- \ +-######- \ +-----##- \ +----##-- \ +---##--- \ +--##---- \ +--##---- \ +-------- +% +Unicode: [0038]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +--####-- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [0039]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +--#####- \ +-----##- \ +----##-- \ +--###--- \ +-------- +% +Unicode: [003a]; +Bitmap: \ +-------- \ +-------- \ +---##--- \ +---##--- \ +-------- \ +---##--- \ +---##--- \ +-------- +% +Unicode: [003b]; +Bitmap: \ +-------- \ +-------- \ +---##--- \ +---##--- \ +-------- \ +---##--- \ +---##--- \ +--##---- +% +Unicode: [003c]; +Bitmap: \ +-----##- \ +----##-- \ +---##--- \ +--##---- \ +---##--- \ +----##-- \ +-----##- \ +-------- +% +Unicode: [003d]; +Bitmap: \ +-------- \ +-------- \ +-######- \ +-------- \ +-------- \ +-######- \ +-------- \ +-------- +% +Unicode: [003e]; +Bitmap: \ +-##----- \ +--##---- \ +---##--- \ +----##-- \ +---##--- \ +--##---- \ +-##----- \ +-------- +% +Unicode: [003f]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +----##-- \ +---##--- \ +-------- \ +---##--- \ +-------- +% +Unicode: [0040]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +-##-###- \ +-##-###- \ +-##----- \ +--#####- \ +-------- +% +Unicode: [0041]; +Bitmap: \ +-------- \ +---##--- \ +--####-- \ +-##--##- \ +-##--##- \ +-######- \ +-##--##- \ +-------- +% +Unicode: [0042]; +Bitmap: \ +-------- \ +-#####-- \ +-##--##- \ +-#####-- \ +-##--##- \ +-##--##- \ +-#####-- \ +-------- +% +Unicode: [0043]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +-##----- \ +-##----- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [0044]; +Bitmap: \ +-------- \ +-####--- \ +-##-##-- \ +-##--##- \ +-##--##- \ +-##-##-- \ +-####--- \ +-------- +% +Unicode: [0045]; +Bitmap: \ +-------- \ +-######- \ +-##----- \ +-#####-- \ +-##----- \ +-##----- \ +-######- \ +-------- +% +Unicode: [0046]; +Bitmap: \ +-------- \ +-######- \ +-##----- \ +-#####-- \ +-##----- \ +-##----- \ +-##----- \ +-------- +% +Unicode: [0047]; +Bitmap: \ +-------- \ +--#####- \ +-##----- \ +-##----- \ +-##-###- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [0048]; +Bitmap: \ +-------- \ +-##--##- \ +-##--##- \ +-######- \ +-##--##- \ +-##--##- \ +-##--##- \ +-------- +% +Unicode: [0049]; +Bitmap: \ +-------- \ +-######- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +-######- \ +-------- +% +Unicode: [004a]; +Bitmap: \ +-------- \ +-----##- \ +-----##- \ +-----##- \ +-----##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [004b]; +Bitmap: \ +-------- \ +-##--##- \ +-##-##-- \ +-####--- \ +-####--- \ +-##-##-- \ +-##--##- \ +-------- +% +Unicode: [004c]; +Bitmap: \ +-------- \ +-##----- \ +-##----- \ +-##----- \ +-##----- \ +-##----- \ +-######- \ +-------- +% +Unicode: [004d]; +Bitmap: \ +-------- \ +-##---## \ +-###-### \ +-####### \ +-##-#-## \ +-##---## \ +-##---## \ +-------- +% +Unicode: [004e]; +Bitmap: \ +-------- \ +-##--##- \ +-###-##- \ +-######- \ +-######- \ +-##-###- \ +-##--##- \ +-------- +% +Unicode: [004f]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [0050]; +Bitmap: \ +-------- \ +-#####-- \ +-##--##- \ +-##--##- \ +-#####-- \ +-##----- \ +-##----- \ +-------- +% +Unicode: [0051]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##-##-- \ +--##-##- \ +-------- +% +Unicode: [0052]; +Bitmap: \ +-------- \ +-#####-- \ +-##--##- \ +-##--##- \ +-#####-- \ +-##-##-- \ +-##--##- \ +-------- +% +Unicode: [0053]; +Bitmap: \ +-------- \ +--####-- \ +-##----- \ +--####-- \ +-----##- \ +-----##- \ +--####-- \ +-------- +% +Unicode: [0054]; +Bitmap: \ +-------- \ +-######- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +-------- +% +Unicode: [0055]; +Bitmap: \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +-######- \ +-------- +% +Unicode: [0056]; +Bitmap: \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +--####-- \ +---##--- \ +-------- +% +Unicode: [0057]; +Bitmap: \ +-------- \ +-##---## \ +-##---## \ +-##-#-## \ +-####### \ +-###-### \ +-##---## \ +-------- +% +Unicode: [0058]; +Bitmap: \ +-------- \ +-##--##- \ +-##--##- \ +--####-- \ +--####-- \ +-##--##- \ +-##--##- \ +-------- +% +Unicode: [0059]; +Bitmap: \ +-------- \ +-##--##- \ +-##--##- \ +--####-- \ +---##--- \ +---##--- \ +---##--- \ +-------- +% +Unicode: [005a]; +Bitmap: \ +-------- \ +-######- \ +----##-- \ +---##--- \ +--##---- \ +-##----- \ +-######- \ +-------- +% +Unicode: [005b]; +Bitmap: \ +-------- \ +---####- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---####- \ +-------- +% +Unicode: [005c]; +Bitmap: \ +-------- \ +-#------ \ +-##----- \ +--##---- \ +---##--- \ +----##-- \ +-----##- \ +-------- +% +Unicode: [005d]; +Bitmap: \ +-------- \ +-####--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +-####--- \ +-------- +% +Unicode: [005e]; +Bitmap: \ +-------- \ +----#--- \ +---###-- \ +--##-##- \ +-##---## \ +-------- \ +-------- \ +-------- +% +Unicode: [005f]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +-------- \ +######## \ +-------- +% +Unicode: [25c6]; +Bitmap: \ +-------- \ +---##--- \ +--####-- \ +-######- \ +-######- \ +--####-- \ +---##--- \ +-------- +% +Unicode: [0061]; +Bitmap: \ +-------- \ +-------- \ +--####-- \ +-----##- \ +--#####- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [0062]; +Bitmap: \ +-------- \ +-##----- \ +-##----- \ +-#####-- \ +-##--##- \ +-##--##- \ +-#####-- \ +-------- +% +Unicode: [0063]; +Bitmap: \ +-------- \ +-------- \ +--####-- \ +-##----- \ +-##----- \ +-##----- \ +--####-- \ +-------- +% +Unicode: [0064]; +Bitmap: \ +-------- \ +-----##- \ +-----##- \ +--#####- \ +-##--##- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [0065]; +Bitmap: \ +-------- \ +-------- \ +--####-- \ +-##--##- \ +-######- \ +-##----- \ +--####-- \ +-------- +% +Unicode: [0066]; +Bitmap: \ +-------- \ +----###- \ +---##--- \ +--#####- \ +---##--- \ +---##--- \ +---##--- \ +-------- +% +Unicode: [0067]; +Bitmap: \ +-------- \ +-------- \ +--#####- \ +-##--##- \ +-##--##- \ +--#####- \ +-----##- \ +-#####-- +% +Unicode: [0068]; +Bitmap: \ +-------- \ +-##----- \ +-##----- \ +-#####-- \ +-##--##- \ +-##--##- \ +-##--##- \ +-------- +% +Unicode: [0069]; +Bitmap: \ +-------- \ +---##--- \ +-------- \ +--###--- \ +---##--- \ +---##--- \ +--####-- \ +-------- +% +Unicode: [006a]; +Bitmap: \ +-------- \ +-----##- \ +-------- \ +-----##- \ +-----##- \ +-----##- \ +-----##- \ +--####-- +% +Unicode: [006b]; +Bitmap: \ +-------- \ +-##----- \ +-##----- \ +-##-##-- \ +-####--- \ +-##-##-- \ +-##--##- \ +-------- +% +Unicode: [006c]; +Bitmap: \ +-------- \ +--###--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +--####-- \ +-------- +% +Unicode: [006d]; +Bitmap: \ +-------- \ +-------- \ +-##--##- \ +-####### \ +-####### \ +-##-#-## \ +-##---## \ +-------- +% +Unicode: [006e]; +Bitmap: \ +-------- \ +-------- \ +-#####-- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +-------- +% +Unicode: [006f]; +Bitmap: \ +-------- \ +-------- \ +--####-- \ +-##--##- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [0070]; +Bitmap: \ +-------- \ +-------- \ +-#####-- \ +-##--##- \ +-##--##- \ +-#####-- \ +-##----- \ +-##----- +% +Unicode: [0071]; +Bitmap: \ +-------- \ +-------- \ +--#####- \ +-##--##- \ +-##--##- \ +--#####- \ +-----##- \ +-----##- +% +Unicode: [0072]; +Bitmap: \ +-------- \ +-------- \ +-#####-- \ +-##--##- \ +-##----- \ +-##----- \ +-##----- \ +-------- +% +Unicode: [0073]; +Bitmap: \ +-------- \ +-------- \ +--#####- \ +-##----- \ +--####-- \ +-----##- \ +-#####-- \ +-------- +% +Unicode: [0074]; +Bitmap: \ +-------- \ +---##--- \ +-######- \ +---##--- \ +---##--- \ +---##--- \ +----###- \ +-------- +% +Unicode: [0075]; +Bitmap: \ +-------- \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [0076]; +Bitmap: \ +-------- \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +--####-- \ +---##--- \ +-------- +% +Unicode: [0077]; +Bitmap: \ +-------- \ +-------- \ +-##---## \ +-##-#-## \ +-####### \ +--#####- \ +--##-##- \ +-------- +% +Unicode: [0078]; +Bitmap: \ +-------- \ +-------- \ +-##--##- \ +--####-- \ +---##--- \ +--####-- \ +-##--##- \ +-------- +% +Unicode: [0079]; +Bitmap: \ +-------- \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +--#####- \ +----##-- \ +-####--- +% +Unicode: [007a]; +Bitmap: \ +-------- \ +-------- \ +-######- \ +----##-- \ +---##--- \ +--##---- \ +-######- \ +-------- +% +Unicode: [2660]; +Bitmap: \ +-------- \ +---##--- \ +--####-- \ +-######- \ +-######- \ +---##--- \ +--####-- \ +-------- +% +Unicode: [007c];[0622];[fe81];[fe82]; +Bitmap: \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- +% +Unicode: [21b0]; +Bitmap: \ +-------- \ +-######- \ +-####--- \ +-#####-- \ +-##-###- \ +-##--##- \ +-----##- \ +-------- +% +Unicode: [25c0]; +Bitmap: \ +----#--- \ +---##--- \ +--###--- \ +-####--- \ +--###--- \ +---##--- \ +----#--- \ +-------- +% +Unicode: [25b6]; +Bitmap: \ +---#---- \ +---##--- \ +---###-- \ +---####- \ +---###-- \ +---##--- \ +---#---- \ +-------- +% +Unicode: [00e1]; +Bitmap: \ +----##-- \ +---##--- \ +--####-- \ +-----##- \ +--#####- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [00f9]; +Bitmap: \ +--##---- \ +---##--- \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [00d1]; +Bitmap: \ +--##-##- \ +-##-##-- \ +-------- \ +-###-##- \ +-###-##- \ +-######- \ +-##-###- \ +-------- +% +Unicode: [00c9]; +Bitmap: \ +----##-- \ +---##--- \ +-######- \ +-##----- \ +-#####-- \ +-##----- \ +-######- \ +-------- +% +Unicode: [00e7]; +Bitmap: \ +-------- \ +-------- \ +--####-- \ +-##----- \ +-##----- \ +--####-- \ +---##--- \ +--##---- +% +Unicode: [00f4]; +Bitmap: \ +--####-- \ +-##--##- \ +-------- \ +--####-- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [00f2]; +Bitmap: \ +--##---- \ +---##--- \ +-------- \ +--####-- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [00ec]; +Bitmap: \ +--##---- \ +---##--- \ +-------- \ +--###--- \ +---##--- \ +---##--- \ +--####-- \ +-------- +% +Unicode: [00a3]; +Bitmap: \ +---###-- \ +--##---- \ +--##---- \ +-####--- \ +--##---- \ +--##---- \ +-######- \ +-------- +% +Unicode: [00ef]; +Bitmap: \ +-------- \ +-##--##- \ +-------- \ +--###--- \ +---##--- \ +---##--- \ +--####-- \ +-------- +% +Unicode: [00fc]; +Bitmap: \ +-------- \ +-##--##- \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [00e4]; +Bitmap: \ +--##-##- \ +-------- \ +--####-- \ +-----##- \ +--#####- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [00d6]; +Bitmap: \ +-##--##- \ +-------- \ +--####-- \ +-##--##- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [00fa]; +Bitmap: \ +----##-- \ +---##--- \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [00f3]; +Bitmap: \ +----##-- \ +---##--- \ +-------- \ +--####-- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [00f6]; +Bitmap: \ +-------- \ +-##--##- \ +-------- \ +--####-- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [00dc]; +Bitmap: \ +-##--##- \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +-######- \ +-------- +% +Unicode: [00e5]; +Bitmap: \ +--####-- \ +-##--##- \ +---###-- \ +-----##- \ +--#####- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [00fb]; +Bitmap: \ +--####-- \ +-##--##- \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [00ee]; +Bitmap: \ +--####-- \ +-##--##- \ +-------- \ +--###--- \ +---##--- \ +---##--- \ +--####-- \ +-------- +% +Unicode: [00e9]; +Bitmap: \ +----##-- \ +---##--- \ +--####-- \ +-##--##- \ +-######- \ +-##----- \ +--####-- \ +-------- +% +Unicode: [00e8]; +Bitmap: \ +--##---- \ +---##--- \ +--####-- \ +-##--##- \ +-######- \ +-##----- \ +--####-- \ +-------- +% +Unicode: [00f1]; +Bitmap: \ +--##-##- \ +-##-##-- \ +-------- \ +-#####-- \ +-##--##- \ +-##--##- \ +-##--##- \ +-------- +% +Unicode: [00ea]; +Bitmap: \ +--####-- \ +##----## \ +--####-- \ +-##--##- \ +-######- \ +-##----- \ +--####-- \ +-------- +% +Unicode: [0227]; +Bitmap: \ +---##--- \ +-------- \ +--####-- \ +-----##- \ +--#####- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [00e0]; +Bitmap: \ +--##---- \ +---##--- \ +--####-- \ +-----##- \ +--#####- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [00a1]; +Bitmap: \ +---##--- \ +-------- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +-------- +% +Unicode: [00c4]; +Bitmap: \ +-##--##- \ +-##--##- \ +---##--- \ +--####-- \ +-##--##- \ +-######- \ +-##--##- \ +-------- +% +Unicode: [05d0]; +Bitmap: \ +-------- \ +##---##- \ +####-##- \ +##-####- \ +##--##-- \ +##---##- \ +-------- \ +-------- +% +Unicode: [05d1]; +Bitmap: \ +-------- \ +#####--- \ +---###-- \ +----##-- \ +----##-- \ +#######- \ +-------- \ +-------- +% +Unicode: [05d2]; +Bitmap: \ +-------- \ +--####-- \ +----##-- \ +----##-- \ +-#####-- \ +###--##- \ +-------- \ +-------- +% +Unicode: [05d3]; +Bitmap: \ +-------- \ +#######- \ +---###-- \ +----##-- \ +----##-- \ +----##-- \ +-------- \ +-------- +% +Unicode: [05d4]; +Bitmap: \ +-------- \ +######-- \ +-----##- \ +-#---##- \ +-##--##- \ +-##--##- \ +-------- \ +-------- +% +Unicode: [05d5]; +Bitmap: \ +-------- \ +--####-- \ +---###-- \ +----##-- \ +----##-- \ +----##-- \ +-------- \ +-------- +% +Unicode: [05d6]; +Bitmap: \ +-------- \ +######-- \ +-###---- \ +--##---- \ +--##---- \ +--##---- \ +-------- \ +-------- +% +Unicode: [05d7]; +Bitmap: \ +-------- \ +######-- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +-------- \ +-------- +% +Unicode: [05d8]; +Bitmap: \ +-------- \ +##-####- \ +##-#-##- \ +##---##- \ +##---##- \ +######-- \ +-------- \ +-------- +% +Unicode: [05d9]; +Bitmap: \ +-------- \ +-#####-- \ +---###-- \ +----##-- \ +-------- \ +-------- \ +-------- \ +-------- +% +Unicode: [05da]; +Bitmap: \ +-------- \ +######-- \ +----###- \ +-----##- \ +-----##- \ +-----##- \ +-----##- \ +-----##- +% +Unicode: [05db]; +Bitmap: \ +-------- \ +######-- \ +-----##- \ +-----##- \ +----###- \ +######-- \ +-------- \ +-------- +% +Unicode: [05dc]; +Bitmap: \ +##------ \ +######-- \ +-----##- \ +-----##- \ +----###- \ +--####-- \ +-------- \ +-------- +% +Unicode: [05dd]; +Bitmap: \ +-------- \ +-######- \ +-##--##- \ +-##--##- \ +-##--##- \ +-######- \ +-------- \ +-------- +% +Unicode: [05de]; +Bitmap: \ +-------- \ +##-###-- \ +-###-##- \ +-##--##- \ +-##--##- \ +-##-###- \ +-------- \ +-------- +% +Unicode: [05df]; +Bitmap: \ +-------- \ +---####- \ +----###- \ +-----##- \ +-----##- \ +-----##- \ +-----##- \ +-----##- +% +Unicode: [05e0]; +Bitmap: \ +-------- \ +---####- \ +-----##- \ +-----##- \ +----###- \ +-#####-- \ +-------- \ +-------- +% +Unicode: [05e1]; +Bitmap: \ +-------- \ +#######- \ +-##--##- \ +-##--##- \ +-##-##-- \ +-####--- \ +-------- \ +-------- +% +Unicode: [05e2]; +Bitmap: \ +-------- \ +###-###- \ +-##--##- \ +--##-##- \ +--##-##- \ +######-- \ +-------- \ +-------- +% +Unicode: [05e3]; +Bitmap: \ +-------- \ +######-- \ +-##-###- \ +-##--##- \ +-----##- \ +-----##- \ +-----##- \ +-----##- +% +Unicode: [05e4]; +Bitmap: \ +-------- \ +######-- \ +-##--##- \ +-##--##- \ +----###- \ +######-- \ +-------- \ +-------- +% +Unicode: [05e5]; +Bitmap: \ +-------- \ +##--###- \ +-##--##- \ +-##-##-- \ +-####--- \ +-##----- \ +-##----- \ +-##----- +% +Unicode: [05e6]; +Bitmap: \ +-------- \ +##---##- \ +-##-###- \ +--###--- \ +----##-- \ +#######- \ +-------- \ +-------- +% +Unicode: [05e7]; +Bitmap: \ +-------- \ +######-- \ +----###- \ +##---##- \ +##--##-- \ +##-##--- \ +##------ \ +##------ +% +Unicode: [05e8]; +Bitmap: \ +-------- \ +######-- \ +----###- \ +-----##- \ +-----##- \ +-----##- \ +-------- \ +-------- +% +Unicode: [05e9]; +Bitmap: \ +-------- \ +#--#--#- \ +##-#--#- \ +###--##- \ +##--##-- \ +######-- \ +-------- \ +-------- +% +Unicode: [05ea]; +Bitmap: \ +-------- \ +######-- \ +-##-###- \ +-##--##- \ +-##--##- \ +###--##- \ +-------- \ +-------- +% +Unicode: [0179]; +Bitmap: \ +---##--- \ +-######- \ +--##-##- \ +----##-- \ +---##--- \ +--##---- \ +-######- \ +-------- +% +Unicode: [0105]; +Bitmap: \ +-------- \ +-------- \ +--####-- \ +-----##- \ +--#####- \ +-##--##- \ +--#####- \ +------## +% +Unicode: [017a]; +Bitmap: \ +----##-- \ +---##--- \ +-######- \ +----##-- \ +---##--- \ +--##---- \ +-######- \ +-------- +% +Unicode: [0107]; +Bitmap: \ +----##-- \ +---##--- \ +--####-- \ +-##----- \ +-##----- \ +-##----- \ +--####-- \ +-------- +% +Unicode: [015a]; +Bitmap: \ +---##--- \ +--####-- \ +-##----- \ +--####-- \ +-----##- \ +-----##- \ +--####-- \ +-------- +% +Unicode: [0119]; +Bitmap: \ +-------- \ +-------- \ +--####-- \ +-##--##- \ +-######- \ +-##----- \ +--####-- \ +-----##- +% +Unicode: [00df]; +Bitmap: \ +-------- \ +---###-- \ +--##-##- \ +--####-- \ +--##-##- \ +--##-### \ +--#####- \ +-##----- +% +Unicode: [0141]; +Bitmap: \ +-------- \ +-##----- \ +-##----- \ +-####--- \ +-###---- \ +###----- \ +-######- \ +-------- +% +Unicode: [0142]; +Bitmap: \ +-------- \ +--###--- \ +---##--- \ +---###-- \ +--###--- \ +---##--- \ +--####-- \ +-------- +% +Unicode: [0143]; +Bitmap: \ +----##-- \ +-#-##-#- \ +-##--##- \ +-######- \ +-######- \ +-##-###- \ +-##--##- \ +-------- +% +Unicode: [0144]; +Bitmap: \ +----##-- \ +---##--- \ +-#####-- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +-------- +% +Unicode: [00d3]; +Bitmap: \ +-----##- \ +--####-- \ +-##-#-#- \ +-##--##- \ +-##--##- \ +-##--##- \ +--####-- \ +-------- +% +Unicode: [015b]; +Bitmap: \ +----##-- \ +---##--- \ +--#####- \ +-##----- \ +--####-- \ +-----##- \ +-#####-- \ +-------- +% +Unicode: [0106]; +Bitmap: \ +----##-- \ +--####-- \ +-##-###- \ +-##----- \ +-##----- \ +-##--##- \ +--#####- \ +-------- +% +Unicode: [0104]; +Bitmap: \ +-------- \ +---##--- \ +--####-- \ +-##--##- \ +-##--##- \ +-######- \ +-##--##- \ +------## +% +Unicode: [017b]; +Bitmap: \ +---##--- \ +-######- \ +----##-- \ +---##--- \ +--##---- \ +-##----- \ +-######- \ +-------- +% +Unicode: [017c]; +Bitmap: \ +---##--- \ +-------- \ +-######- \ +----##-- \ +---##--- \ +--##---- \ +-######- \ +-------- +% +Unicode: [0660]; +Bitmap: \ +-------- \ +-----##- \ +----##-- \ +---##--- \ +--##---- \ +-##----- \ +-#------ \ +-------- +% +Unicode: [0661]; +Bitmap: \ +-------- \ +-------- \ +----#--- \ +---###-- \ +--#####- \ +---###-- \ +----#--- \ +-------- +% +Unicode: [0662]; +Bitmap: \ +-------- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- \ +---##--- +% +Unicode: [0663]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +-##----- \ +--##---- \ +---##--- \ +----##-- \ +-----##- +% +Unicode: [0664]; +Bitmap: \ +-------- \ +-##-#-## \ +-##-#-## \ +-####### \ +-###---- \ +--##---- \ +--###--- \ +---##--- +% +Unicode: [0665]; +Bitmap: \ +-------- \ +---####- \ +--###--- \ +-###---- \ +---###-- \ +--###--- \ +-###---- \ +--#####- +% +Unicode: [0666]; +Bitmap: \ +-------- \ +---###-- \ +--#####- \ +-##--##- \ +-##--##- \ +-##--##- \ +-######- \ +--####-- +% +Unicode: [0667]; +Bitmap: \ +-------- \ +-#####-- \ +-#####-- \ +----##-- \ +----##-- \ +----##-- \ +----##-- \ +----##-- +% +Unicode: [0668]; +Bitmap: \ +-------- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- \ +--####-- \ +--####-- \ +---##--- +% +Unicode: [0669]; +Bitmap: \ +-------- \ +---##--- \ +--####-- \ +--####-- \ +-##--##- \ +-##--##- \ +-##--##- \ +-##--##- +% +Unicode: [0624];[fe85];[fe86]; +Bitmap: \ +-------- \ +-##----- \ +##--#### \ +---##-## \ +----#### \ +------## \ +-----##- \ +-#####-- +% +Unicode: [0634];[feb5];[feb6];[feb8]; +Bitmap: \ +----##-- \ +--##--## \ +-------- \ +#--#-#-# \ +#--#-#-# \ +#--##### \ +####---- \ +-##----- +% +Unicode: [0648];[feed];[feee]; +Bitmap: \ +-------- \ +-------- \ +----#### \ +---##-## \ +---##### \ +------## \ +-----##- \ +-#####-- +% +Unicode: [0629];[fe93];[fe94]; +Bitmap: \ +---##-## \ +-------- \ +----#### \ +---##-## \ +---##-## \ +---##### \ +-------- \ +-------- +% +Unicode: [064a];[fef1];[fef2];[fef4]; +Bitmap: \ +-------- \ +----###- \ +#--##### \ +#--##--# \ +##--##-# \ +-#####-# \ +-------- \ +--##-##- +% +Unicode: [062b];[fe99];[fe9a];[fe9c]; +Bitmap: \ +---##--- \ +-##--##- \ +-------- \ +##----## \ +##----## \ +-######- \ +-------- \ +-------- +% +Unicode: [0628];[fe8f];[fe90];[fe92]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +##----## \ +##----## \ +-######- \ +-------- \ +---##--- +% +Unicode: [0644];[fedd];[fede];[fee0]; +Bitmap: \ +------## \ +------## \ +------## \ +------## \ +-##---## \ +-##---## \ +-##---## \ +--#####- +% +Unicode: [0621];[fe80]; +Bitmap: \ +-------- \ +-------- \ +---###-- \ +--##---- \ +---###-- \ +--###--- \ +--#----- \ +-------- +% +Unicode: [0647];[fee9];[feea];[feec]; +Bitmap: \ +-------- \ +-------- \ +----#### \ +---##-## \ +---##-## \ +---##### \ +-------- \ +-------- +% +Unicode: [062a];[fe95];[fe96];[fe98]; +Bitmap: \ +-------- \ +--##-##- \ +-------- \ +##----## \ +##----## \ +-######- \ +-------- \ +-------- +% +Unicode: [0646];[fee5];[fee6];[fee8]; +Bitmap: \ +-------- \ +---##--- \ +-------- \ +--#---#- \ +-##---## \ +-##---## \ +--#####- \ +-------- +% +Unicode: [0645];[fee1];[fee2];[fee4]; +Bitmap: \ +-------- \ +-----##- \ +---##### \ +--####-# \ +-##--### \ +-##---## \ +-##----- \ +-##----- +% +Unicode: [062c];[fe9d];[fe9e];[fea0]; +Bitmap: \ +-------- \ +-####--- \ +----##-- \ +--#####- \ +-##---## \ +-##----- \ +-##---## \ +--###--- +% +Unicode: [062e];[fea5];[fea6];[fea8]; +Bitmap: \ +------## \ +-####--- \ +----##-- \ +--#####- \ +-##---## \ +-##----# \ +-##----- \ +--####-- +% +Unicode: [062d];[fea1];[fea2];[fea4]; +Bitmap: \ +-------- \ +-####--- \ +----##-- \ +--#####- \ +-##---## \ +-##----# \ +-##----- \ +--####-- +% +Unicode: [0636];[febd];[febe];[fec0]; +Bitmap: \ +----##-- \ +-------- \ +----#### \ +#--##--# \ +#--#---# \ +#--##### \ +#####--- \ +-###---- +% +Unicode: [0642];[fed5];[fed6];[fed8]; +Bitmap: \ +--##-##- \ +-------- \ +-----### \ +-#--##-# \ +##---### \ +##----## \ +-######- \ +-------- +% +Unicode: [0633];[feb1];[feb2];[feb4]; +Bitmap: \ +-------- \ +-------- \ +#--#-#-# \ +#--#-#-# \ +#--##### \ +#--####- \ +####---- \ +-##----- +% +Unicode: [0641];[fed1];[fed2];[fed4]; +Bitmap: \ +-------- \ +--##---- \ +-----### \ +##--##-# \ +##---### \ +######## \ +-------- \ +-------- +% +Unicode: [0639];[fec9];[feca];[fecc]; +Bitmap: \ +-------- \ +----###- \ +---##--- \ +---##--- \ +--###### \ +-##----# \ +-###---- \ +--#####- +% +Unicode: [0643];[fed9];[feda];[fedc]; +Bitmap: \ +------## \ +--##--## \ +--#---## \ +-###--## \ +------## \ +#-----## \ +#######- \ +-------- +% +Unicode: [0635];[feb9];[feba];[febc]; +Bitmap: \ +-------- \ +-------- \ +----#### \ +#--##--# \ +#--#---# \ +#--##### \ +####---- \ +-##----- +% +Unicode: [063a];[fecd];[fece];[fed0]; +Bitmap: \ +-##----- \ +----###- \ +---##--- \ +---##--- \ +--###### \ +-##----# \ +-###---- \ +--#####- +% +Unicode: [0649];[feef];[fef0]; +Bitmap: \ +-------- \ +-------- \ +----###- \ +##-##-## \ +##-##--# \ +##--##-# \ +##--##-- \ +-#####-- +% +Unicode: [0632];[feaf];[feb0]; +Bitmap: \ +-------- \ +------## \ +-------- \ +-----##- \ +------## \ +------## \ +-----##- \ +-#####-- +% +Unicode: [feb7]; +Bitmap: \ +---##--- \ +-##--##- \ +-------- \ +-#--#--# \ +##-##-## \ +######## \ +-------- \ +-------- +% +Unicode: [062f];[fea9];[feaa];[0631];[fead];[feae]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-----##- \ +------## \ +------## \ +-----##- \ +-#####-- +% +Unicode: [0630];[feab];[feac]; +Bitmap: \ +--##---- \ +-------- \ +----##-- \ +-----##- \ +------## \ +------## \ +--#####- \ +-------- +% +Unicode: [fef3]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +------## \ +------## \ +######## \ +-------- \ +--##-##- +% +Unicode: [fe9b]; +Bitmap: \ +---##--- \ +-##--##- \ +-------- \ +------## \ +------## \ +######## \ +-------- \ +-------- +% +Unicode: [fe91]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +------## \ +------## \ +######## \ +-------- \ +-----##- +% +Unicode: [fedf]; +Bitmap: \ +------## \ +------## \ +------## \ +------## \ +------## \ +######## \ +-------- \ +-------- +% +Unicode: [0627];[fe8d];[fe8e]; +Bitmap: \ +------## \ +------## \ +------## \ +------## \ +------## \ +------## \ +-------- \ +-------- +% +Unicode: [feeb]; +Bitmap: \ +-------- \ +---#---- \ +--#####- \ +--#--### \ +--###--# \ +######## \ +-------- \ +-------- +% +Unicode: [fe97]; +Bitmap: \ +-------- \ +-##-##-- \ +-------- \ +------## \ +------## \ +######## \ +-------- \ +-------- +% +Unicode: [fee7]; +Bitmap: \ +-------- \ +----##-- \ +-------- \ +------## \ +------## \ +######## \ +-------- \ +-------- +% +Unicode: [fee3]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-----### \ +----##-# \ +######-# \ +-----### \ +-------- +% +Unicode: [fe9f]; +Bitmap: \ +-------- \ +-------- \ +-####--- \ +-#--##-- \ +-----##- \ +######## \ +-------- \ +----##-- +% +Unicode: [fef7];[f3f8]; +Bitmap: \ +------## \ +--#---## \ +--##--## \ +---##-## \ +----#-## \ +----###- \ +-#####-- \ +-------- +% +Unicode: [fea7]; +Bitmap: \ +--##---- \ +-------- \ +-####--- \ +-#--##-- \ +-----##- \ +######## \ +-------- \ +-------- +% +Unicode: [fea3]; +Bitmap: \ +-------- \ +-------- \ +-####--- \ +-#--##-- \ +-----##- \ +######## \ +-------- \ +-------- +% +Unicode: [febf]; +Bitmap: \ +---##--- \ +-------- \ +----#### \ +-#-##--# \ +####---# \ +######## \ +-------- \ +-------- +% +Unicode: [fed7]; +Bitmap: \ +-##-##-- \ +-------- \ +---##### \ +---##--# \ +----#### \ +######## \ +-------- \ +-------- +% +Unicode: [feb3]; +Bitmap: \ +-------- \ +-------- \ +-------- \ +-#--#--# \ +##-##-## \ +######## \ +-------- \ +-------- +% +Unicode: [fed3]; +Bitmap: \ +--##---- \ +-------- \ +----#### \ +----##-# \ +-----### \ +######## \ +-------- \ +-------- +% +Unicode: [fecb]; +Bitmap: \ +-------- \ +---###-- \ +--#####- \ +--##---- \ +---##--- \ +######## \ +-------- \ +-------- +% +Unicode: [fedb]; +Bitmap: \ +-------- \ +-------- \ +---###-- \ +-----##- \ +------## \ +------## \ +--#####- \ +-------- +% +Unicode: [febb]; +Bitmap: \ +-------- \ +-------- \ +----#### \ +-#-##--# \ +####---# \ +######## \ +-------- \ +-------- +% +Unicode: [0637];[fec1];[fec2];[fec4];[fec3]; +Bitmap: \ +-##----- \ +-##----- \ +-##-#### \ +-####--# \ +-###---# \ +######## \ +-------- \ +-------- +% +Unicode: [fecf]; +Bitmap: \ +-##----- \ +---###-- \ +--#####- \ +--##---- \ +---##--- \ +######## \ +-------- \ +-------- +% +Unicode: [0638];[fec5];[fec6];[fec8];[fec7]; +Bitmap: \ +-##-##-- \ +-##----- \ +-##-#### \ +-####--# \ +-###---# \ +######## \ +-------- \ +-------- +% +Unicode: [061f]; +Bitmap: \ +-------- \ +--####-- \ +-##--##- \ +--##---- \ +---##--- \ +-------- \ +---##--- \ +-------- +% +// dotted-box (no such glyph) +Unicode: [0000]; +Bitmap: \ +        -------- \ +        -##-###- \ +        -#------ \ +        ------#- \ +        -#------ \ +        ------#- \ +        -###-##- \ +        -------- +% +// backtick +Unicode: [0060]; +Bitmap: \ +        -------- \ +        --##---- \ +        --##---- \ +        ---##--- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// curlies +Unicode: [007b]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        ---##--- \ +        --##---- \ +        ---##--- \ +        ---##--- \ +        ----##-- \ +        -------- +% +Unicode: [007d]; +Bitmap: \ +        --##---- \ +        ---##--- \ +        ---##--- \ +        ----##-- \ +        ---##--- \ +        ---##--- \ +        --##---- \ +        -------- +% +// tilde +Unicode: [007e]; +Bitmap: \ +        -------- \ +        -###--## \ +        ##-##-## \ +        ##--###- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// euro +Unicode: [20ac]; +Bitmap: \ +        ---####- \ +        --##---- \ +        -#####-- \ +        --##---- \ +        -#####-- \ +        --##---- \ +        ---####- \ +        -------- +% +// spanish left-quote +Unicode: [00ab]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        -##--##- \ +        ##--##-- \ +        -##--##- \ +        -------- \ +        -------- +% +// spanish right-quote +Unicode: [00bb]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        ##--##-- \ +        -##--##- \ +        ##--##-- \ +        -------- \ +        -------- +% +// spanish inverted question mark +Unicode: [00bf]; +Bitmap: \ +        -------- \ +        ---##--- \ +        -------- \ +        ---##--- \ +        ----##-- \ +        -##--##- \ +        --####-- \ +        -------- +% +// copyright +Unicode: [00a9]; +Bitmap: \ +        -#####-- \ +        #-----#- \ +        #--##-#- \ +        #-#---#- \ +        #--##-#- \ +        #-----#- \ +        -#####-- \ +        -------- +% +// registered +Unicode: [00ae]; +Bitmap: \ +        -#####-- \ +        #-----#- \ +        #-##--#- \ +        #-#-#-#- \ +        #-##--#- \ +        #-#-#-#- \ +        -#####-- \ +        -------- +% +// degrees +Unicode: [00b0];[00ba]; +Bitmap: \ +        -------- \ +        ---##--- \ +        --#--#-- \ +        ---##--- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// cents +Unicode: [00a2]; +Bitmap: \ +        -------- \ +        ---##--- \ +        --#####- \ +        -##----- \ +        -##----- \ +        --#####- \ +        ---##--- \ +        -------- +% +// "currency sign" +// FIXME: not bold enough +Unicode: [00a4]; +Bitmap: \ +        -------- \ +        -#----#- \ +        --####-- \ +        --#--#-- \ +        --#--#-- \ +        --####-- \ +        -#----#- \ +        -------- +% +// yen +Unicode: [00a5]; +Bitmap: \ +        -##--##- \ +        -##--##- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        -------- +% +// broken bar +Unicode: [00a6]; +Bitmap: \ +        -------- \ +        ---##--- \ +        ---##--- \ +        -------- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -------- +% +// section sign +// FIXME: not bold enough +Unicode: [00a7]; +Bitmap: \ +        ---###-- \ +        --#----- \ +        ---##--- \ +        --#--#-- \ +        ---##--- \ +        -----#-- \ +        --###--- \ +        -------- +% +// diaresis (cha, cha, cha!) +Unicode: [00a8]; +Bitmap: \ +        -------- \ +        -##--##- \ +        -##--##- \ +        -------- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// feminine ordinal (superscript a) +Unicode: [00aa]; +Bitmap: \ +        -------- \ +        --####-- \ +        ----###- \ +        --##-##- \ +        ---####- \ +        -------- \ +        -------- \ +        -------- +% +// "not" sign +Unicode: [00ac]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        -######- \ +        -----##- \ +        -------- \ +        -------- \ +        -------- +% +// macron +Unicode: [00af]; +Bitmap: \ +        -------- \ +        -######- \ +        -------- \ +        -------- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// plus-minus +Unicode: [00b1]; +Bitmap: \ +        -------- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        -------- \ +        -######- \ +        -------- \ +        -------- +% +// superscript 2 +// FIXME: not bold enough +Unicode: [00b2]; +Bitmap: \ +        -------- \ +        --##---- \ +        -#--#--- \ +        ---#---- \ +        --#----- \ +        -####--- \ +        -------- \ +        -------- +% +// FIXME: not bold enough +// superscript 3 +Unicode: [00b3]; +Bitmap: \ +        -------- \ +        --##---- \ +        -#--#--- \ +        ---#---- \ +        -#--#--- \ +        --##---- \ +        -------- \ +        -------- +% +// acute +Unicode: [00b4]; +Bitmap: \ +        -------- \ +        ----##-- \ +        ---##--- \ +        -------- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// mu +Unicode: [00b5]; +Bitmap: \ +        -------- \ +        -------- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        --#####- \ +        -----##- \ +        -------- +% +// paragraph +Unicode: [00b6]; +Bitmap: \ +        -------- \ +        --##-##- \ +        -###-##- \ +        -###-##- \ +        --##-##- \ +        ---#-##- \ +        ---#-##- \ +        -------- +% +// middle dot +Unicode: [00b7]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        ---##--- \ +        ---##--- \ +        -------- \ +        -------- \ +        -------- +% +// superscript 1 +Unicode: [00b9]; +Bitmap: \ +        -------- \ +        ---##--- \ +        --###--- \ +        ---##--- \ +        --####-- \ +        -------- \ +        -------- \ +        -------- +// FIXME: MISSING fractions, 00bc/00bd/00bc, ¼ ½ ¾, hard to do in 8x8 +% +// A with grave +Unicode: [00c0]; +Bitmap: \ +        -------- \ +        --##---- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// A with acute +Unicode: [00c1]; +Bitmap: \ +        -------- \ +        ----##-- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// A with circumflex +Unicode: [00c2]; +Bitmap: \ +        --####-- \ +        -#----#- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// A with tilde +Unicode: [00c3]; +Bitmap: \ +        --##-##- \ +        -##-##-- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// A with ring +Unicode: [00c5]; +Bitmap: \ +        ---##--- \ +        --#--#-- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// AE ligature +Unicode: [00c6]; +Bitmap: \ +        -------- \ +        --#####- \ +        -####--- \ +        ##-##--- \ +        #######- \ +        ##-##--- \ +        ##-####- \ +        -------- +// FIXME: this is hideous! +% +// C with cedilla +Unicode: [00c7]; +Bitmap: \ +        -------- \ +        --####-- \ +        -##--##- \ +        -##----- \ +        -##--##- \ +        --####-- \ +        ---##--- \ +        --##---- +% +// E with circumflex +Unicode: [00ca]; +Bitmap: \ +        --####-- \ +        -#----#- \ +        -######- \ +        -##----- \ +        -#####-- \ +        -##----- \ +        -######- \ +        -------- +// FIXME: ugly! +% +// E with umlaut +Unicode: [00cb]; +Bitmap: \ +        --##-##- \ +        -------- \ +        -######- \ +        -##----- \ +        -#####-- \ +        -##----- \ +        -######- \ +        -------- +% +// I with grave +Unicode: [00cc]; +Bitmap: \ +        --##---- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -######- \ +        -------- +% +// I with acute +Unicode: [00cd]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -######- \ +        -------- +% +// I with circumflex +Unicode: [00ce]; +Bitmap: \ +        --####-- \ +        -#----#- \ +        -######- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -######- \ +        -------- +// FIXME: ugly! +% +// I with umlaut +Unicode: [00cf]; +Bitmap: \ +        --##-##- \ +        -------- \ +        -######- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -######- \ +        -------- +% +// capital eth +Unicode: [00d0]; +Bitmap: \ +        -------- \ +        -####--- \ +        -##-##-- \ +        -##--##- \ +        ####-##- \ +        -##-##-- \ +        -####--- \ +        -------- +% +// O with grave +Unicode: [00d2]; +Bitmap: \ +        -##----- \ +        --####-- \ +        -#-#-##- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        --####-- \ +        -------- +// FIXME: MISSING Ô Õ +% +// multiplication +Unicode: [00d7]; +Bitmap: \ +        -------- \ +        -##--##- \ +        --####-- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -------- \ +        -------- +// FIXME: MISSING Ø +% +// U with grave +Unicode: [00d9]; +Bitmap: \ +        --##---- \ +        ---##--- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        -######- \ +        -------- +% +// U with acute +Unicode: [00da]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        -######- \ +        -------- +// FIXME: MISSING Û +% +// Y with acute +Unicode: [00dd]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -##--##- \ +        -##--##- \ +        --####-- \ +        ---##--- \ +        ---##--- \ +        -------- +% +// capital thorn +Unicode: [00de]; +Bitmap: \ +        -------- \ +        -##----- \ +        -#####-- \ +        -##--##- \ +        -#####-- \ +        -##----- \ +        -##----- \ +        -------- +% +// a with circumflex +Unicode: [00e2]; +Bitmap: \ +        --####-- \ +        -#----#- \ +        -------- \ +        --####-- \ +        ----###- \ +        --##-##- \ +        ---####- \ +        -------- +% +// a with tilde +Unicode: [00e3]; +Bitmap: \ +        --##-##- \ +        -##-##-- \ +        -------- \ +        --####-- \ +        ----###- \ +        --##-##- \ +        ---####- +// FIXME: touches bottom +% +// ae ligature +Unicode: [00e6]; +Bitmap: \ +        -------- \ +        -------- \ +        -###-##- \ +        ---##-## \ +        -######- \ +        ##-##--- \ +        -######- \ +        -------- +// FIXME: fugly +% +// e with umlaut +Unicode: [00eb]; +Bitmap: \ +        -##--##- \ +        -------- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##----- \ +        --####-- \ +        -------- +% +// i with acute +Unicode: [00ed]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -------- \ +        --###--- \ +        ---##--- \ +        ---##--- \ +        --####-- \ +        -------- +% +// lowercase eth +Unicode: [00f0]; +Bitmap: \ +        -##-#--- \ +        --##---- \ +        -#-##--- \ +        --####-- \ +        -##--##- \ +        -##--##- \ +        --####-- \ +        -------- +% +// o with tilde +Unicode: [00f5]; +Bitmap: \ +        --##-##- \ +        -##-##-- \ +        -------- \ +        --####-- \ +        -##--##- \ +        -##--##- \ +        --####-- \ +        -------- +% +// division +Unicode: [00f7]; +Bitmap: \ +        -------- \ +        ---##--- \ +        -------- \ +        -######- \ +        -------- \ +        ---##--- \ +        -------- \ +        -------- +// FIXME: MISSING ø +% +// y with acute +Unicode: [00fd]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -------- \ +        -##--##- \ +        -##--##- \ +        --#####- \ +        ----##-- \ +        -####--- +% +// lowercase thorn +Unicode: [00fe]; +Bitmap: \ +        -##----- \ +        -##----- \ +        -####--- \ +        -##-##-- \ +        -####--- \ +        -##----- \ +        -##----- \ +        -------- +% +// y with umlaut +Unicode: [00ff]; +Bitmap: \ +        -##--##- \ +        -------- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        --#####- \ +        ----##-- \ +        -####--- +% +// left single curly quote +Unicode: [2018]; +Bitmap: \ +        -------- \ +        --##---- \ +        ---##--- \ +        ----##-- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// right single curly quote +Unicode: [2019]; +Bitmap: \ +        -------- \ +        ----##-- \ +        ---##--- \ +        --##---- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// left double curly quote +Unicode: [201c]; +Bitmap: \ +        -------- \ +        -##--##- \ +        -##--##- \ +        --##--## \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// right double curly quote +Unicode: [201d]; +Bitmap: \ +        -------- \ +        -##--##- \ +        -##--##- \ +        ##--##-- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// spanish left single quote +Unicode: [2039]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        ---##--- \ +        --##---- \ +        ---##--- \ +        -------- \ +        -------- +% +// spanish right single quote +Unicode: [203a]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        ---##--- \ +        ----##-- \ +        ---##--- \ +        -------- \ +        -------- +% +// replacement character for missing glyphs +Unicode: [fffd]; +Bitmap: \ +        --####-- \ +        -##--##- \ +        -#-##-#- \ +        -###-##- \ +        -######- \ +        -###-##- \ +        --####-- \ +        -------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- +% +Unicode: [0000]; +Bitmap: ---------------------------------------------------------------- diff --git a/fonts/fixbdf.pl b/fonts/fixbdf.pl new file mode 100644 index 0000000..e0ba143 --- /dev/null +++ b/fonts/fixbdf.pl @@ -0,0 +1,41 @@ +#!/usr/bin/perl -w + +# clean up BDF files created by psf2bdf. + +$px = shift || die "$0: missing pixel size argument"; + + +$pointsize = $px * 10; +$avgwidth = $px * 10; # square font! + +$font = "-BW-Fauxtari Fixed Mono-Medium-R-Normal--$px-$pointsize-75-75-C-$avgwidth-iso10646-1"; + +while(<>) { +	chomp; +	if(/^STARTPROPERTIES\s+(\d+)/) { +		$oldprop = $1; +		$newprop = $oldprop + 15; +		print <<EOF; +STARTPROPERTIES $newprop +FOUNDRY "BW" +FAMILY_NAME "Fauxtari Fixed Mono" +FACE_NAME "Fauxtari $px" +WEIGHT_NAME "Medium" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE $px +POINT_SIZE $pointsize +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "C" +AVERAGE_WIDTH $avgwidth +CHARSET_REGISTRY "iso10646" +CHARSET_ENCODING "1" +EOF +	} elsif(/^FONT\s/) { +		print "FONT $font\n"; +	} else { +		print "$_\n"; +	} +} diff --git a/fonts/mkpsf.pl b/fonts/mkpsf.pl new file mode 100644 index 0000000..8a349f1 --- /dev/null +++ b/fonts/mkpsf.pl @@ -0,0 +1,1358 @@ +#!/usr/bin/perl -w + +# Read raw font data from atari rom images, plus a few hand-drawn +# "text bitmaps" from __DATA__. + +# Write 3 bitmap font "txt" files in the format txt2psf expects, then +# runs txt2psf on them. Results in 3 fonts: + +# fauxtari-8.psf - 8x8 native size +# fauxtari-16.psf - 16x16 scaled up +# fauxtari-24.psf - 24x24 scaled up + +# The fiddly bits of this are getting the Unicode mappings correct. + +# ROM dumps are mapped to Atari address space at $C000, the regular +# charset starts at $E000, so it's at offset $2000 (8192) in the +# image. The XL international set is at $CC00, or offset $0C00 (3072). +# In the Arabic ROM, the Arabic font takes the place of the standard +# charset. All the charsets are 1K in size. + +# Arabic ROM, plus some info about it and a mention of the Hebrew ROM: +# https://www.savetz.com/vintagecomputers/arabic65xe/ + +use bytes; + +$fontname = "fauxtari"; + +sub byte2line { +	my $t = shift; +	$t = sprintf("%08b", $t); +	$t =~ y/0/-/; +	$t =~ y/1/#/; +	return $t; +} + +sub scale_line { +	my $line = shift; +	my $scale = shift; +	my $one = '#' x $scale; +	my $zero = '-' x $scale; + +	$line =~ s/#/$one/g; +	$line =~ s/-/$zero/g; +	return ($line x $scale); +} + +sub chr2output { +	my $codepoint = shift; +	my $bytes = shift; +	my $scale = shift || 1; +	my $unicode = ""; + +	if(!ref $codepoint) { +		$codepoint = [ $codepoint ]; +	} + +	$unicode .= sprintf("[%04x];", $_) for @$codepoint; + +	my $result = sprintf("%%\nUnicode: %s\nBitmap: \\\n", $unicode); +	for(0..7) { +		my $byte = $bytes->[$_]; +		my $line = byte2line($byte); +		$result .= scale_line($line, $scale); +		$result .= " \\" unless $_ == 7; +		$result .= "\n"; +	} +	return $result; +} + +sub internal2byte { +	my $t = shift; +	$t =~ y/-/0/; +	$t =~ y/#/1/; +	return pack("B*", $t); +} + +sub psf2txt_header { +	my $charcount = shift; +	my $scale = shift; +	my $w = 8 * $scale; +	my $h = 8 * $scale; +	return <<EOF; +%PSF2 +Version: 0 +Flags: 1 +Length: $charcount +Width: $w +Height: $h +EOF +} + +sub read_rom { +	my $data; +	my $filename = shift; +	my $offset = shift; +	my $charcount = shift; +	my $len = $charcount * 8; +	open my $fh, '<', $filename; +	read($fh, $data, 16384); +	close $fh; +	return substr($data, $offset, $len); +} + +# position in the map (array index) is the raw glyph number, in +# the order we read the font data. +# value is the Unicode codepoint. if there are multiple codepoints +# for the glyph, make the value an array ref (see 0x1B below, the +# Atari Escape glyph is both 0x0118 aka LATIN CAPITAL LETTER E WITH OGONEK, +# and 0x241b aka SYMBOL FOR ESCAPE). +sub setup_map { +	our @map = ( +			0x2665, # 0x00 +			0x2523, # 0x01 +			0x2503, # 0x02 +			0x251b, # 0x03 +			0x252b, # 0x04 +			0x2513, # 0x05 +			0x2571, # 0x06 +			0x2572, # 0x07 +			0x25e2, # 0x08 +			0x2597, # 0x09 +			0x25e3, # 0x0a +			0x259d, # 0x0b +			0x2598, # 0x0c +			0x2594, # 0x0d +			0x2581, # 0x0e +			0x2596, # 0x0f +			0x2663, # 0x10 +			0x250f, # 0x11 +			0x2501, # 0x12 +			0x254b, # 0x13 +			0x25cf, # 0x14 +			0x2584, # 0x15 +			0x258e, # 0x16 +			0x2533, # 0x17 +			0x253b, # 0x18 +			0x258c, # 0x19 +			0x2517, # 0x1a +			[ 0x0118, 0x241b ], # 0x1b +			0x2191, # 0x1c +			0x2193, # 0x1d +			0x2190, # 0x1e +			0x2192, # 0x1f +			[ 0x0020, 0xa0 ], # 0x20 (plus  ) +			0x0021, # 0x21 +			0x0022, # 0x22 +			0x0023, # 0x23 +			0x0024, # 0x24 +			0x0025, # 0x25 +			0x0026, # 0x26 +			0x0027, # 0x27 +			0x0028, # 0x28 +			0x0029, # 0x29 +			0x002a, # 0x2a +			0x002b, # 0x2b +			[ 0x002c, 0x00b8 ], # 0x2c (comma and cedilla) +			[ 0x002d, 0x00ad, 0x2013, 0x2014 ], # 0x2d (plus soft hyphen, en, em) +			0x002e, # 0x2e +			0x002f, # 0x2f +			0x0030, # 0x30 +			0x0031, # 0x31 +			0x0032, # 0x32 +			0x0033, # 0x33 +			0x0034, # 0x34 +			0x0035, # 0x35 +			0x0036, # 0x36 +			0x0037, # 0x37 +			0x0038, # 0x38 +			0x0039, # 0x39 +			0x003a, # 0x3a +			0x003b, # 0x3b +			0x003c, # 0x3c +			0x003d, # 0x3d +			0x003e, # 0x3e +			0x003f, # 0x3f +			0x0040, # 0x40 +			0x0041, # 0x41 +			0x0042, # 0x42 +			0x0043, # 0x43 +			0x0044, # 0x44 +			0x0045, # 0x45 +			0x0046, # 0x46 +			0x0047, # 0x47 +			0x0048, # 0x48 +			0x0049, # 0x49 +			0x004a, # 0x4a +			0x004b, # 0x4b +			0x004c, # 0x4c +			0x004d, # 0x4d +			0x004e, # 0x4e +			0x004f, # 0x4f +			0x0050, # 0x50 +			0x0051, # 0x51 +			0x0052, # 0x52 +			0x0053, # 0x53 +			0x0054, # 0x54 +			0x0055, # 0x55 +			0x0056, # 0x56 +			0x0057, # 0x57 +			0x0058, # 0x58 +			0x0059, # 0x59 +			0x005a, # 0x5a +			0x005b, # 0x5b +			0x005c, # 0x5c +			0x005d, # 0x5d +			0x005e, # 0x5e +			0x005f, # 0x5f +			0x25c6, # 0x60 +			0x0061, # 0x61 +			0x0062, # 0x62 +			0x0063, # 0x63 +			0x0064, # 0x64 +			0x0065, # 0x65 +			0x0066, # 0x66 +			0x0067, # 0x67 +			0x0068, # 0x68 +			0x0069, # 0x69 +			0x006a, # 0x6a +			0x006b, # 0x6b +			0x006c, # 0x6c +			0x006d, # 0x6d +			0x006e, # 0x6e +			0x006f, # 0x6f +			0x0070, # 0x70 +			0x0071, # 0x71 +			0x0072, # 0x72 +			0x0073, # 0x73 +			0x0074, # 0x74 +			0x0075, # 0x75 +			0x0076, # 0x76 +			0x0077, # 0x77 +			0x0078, # 0x78 +			0x0079, # 0x79 +			0x007a, # 0x7a +			0x2660, # 0x7b +			[ 0x007c, 0x0622, 0xfe81, 0xfe82 ], # 0x7c, pipe + arabic ﺁ +			0x21b0, # 0x7d +			0x25c0, # 0x7e +			0x25b6, # 0x7f + +# next, 28 "international" characters from the xl rom $cc00 area +# á +			0x00e1, # 0x80 +# ù +			0x00f9, # 0x81 +# Ñ +			0x00d1, # 0x82 +# É +			0x00c9, # 0x83 +# ç +			0x00e7, # 0x84 +# ô (or is it?) +			0x00f4, # 0x85 +# ò +			0x00f2, # 0x86 +# ì +			0x00ec, # 0x87 +# £ +			0x00a3, # 0x88 +# ï +			0x00ef, # 0x89 +# ü +			0x00fc, # 0x8a +# ä +			0x00e4, # 0x8b +# Ö +			0x00d6, # 0x8c +# ú +			0x00fa, # 0x8d +# ó +			0x00f3, # 0x8e +# ö +			0x00f6, # 0x8f +# Ü +			0x00dc, # 0x90 +# å +			0x00e5, # 0x91 +# û (?) +			0x00fb, # 0x92 +# î +			0x00ee, # 0x93 +# é +			0x00e9, # 0x94 +# è +			0x00e8, # 0x95 +# ñ +			0x00f1, # 0x96 +# ê +			0x00ea, # 0x97 +# ȧ +			0x0227, # 0x98 +# à +			0x00e0, # 0x99 +# ¡ +			0x00a1, # 0x9a +# Ä +			0x00c4, # 0x9b + +# hebrew rom is probably a 3rd-party hack, afaik never released by +# atari, but i'm told the glyphs look good (by someone who reads hebrew), +# so include it here. +			0x05d0, # 0x9c +			0x05d1, # 0x9d +			0x05d2, # 0x9e +			0x05d3, # 0x9f +			0x05d4, # 0xa0 +			0x05d5, # 0xa1 +			0x05d6, # 0xa2 +			0x05d7, # 0xa3 +			0x05d8, # 0xa4 +			0x05d9, # 0xa5 +			0x05da, # 0xa6 +			0x05db, # 0xa7 +			0x05dc, # 0xa8 +			0x05dd, # 0xa9 +			0x05de, # 0xaa +			0x05df, # 0xab +			0x05e0, # 0xac +			0x05e1, # 0xad +			0x05e2, # 0xae +			0x05e3, # 0xaf +			0x05e4, # 0xb0 +			0x05e5, # 0xb1 +			0x05e6, # 0xb2 +			0x05e7, # 0xb3 +			0x05e8, # 0xb4 +			0x05e9, # 0xb5 +			0x05ea, # 0xb6 + +# polish rom. probably a 3rd-party hack, but there are a lot of polish +# atari users out there. +			0x0179, # 0xb7 +			0x0105, # 0xb8 +			0x017a, # 0xb9 +			0x0107, # 0xba +			0x015a, # 0xbb +			0x0119, # 0xbc +# german sharp s, not polish at all: +			0x00df, # 0xbd +			0x0141, # 0xbe +			0x0142, # 0xbf +			0x0143, # 0xc0 +			0x0144, # 0xc1 +			0x00d3, # 0xc3 +# 0xc3 weird-looking v? +# next glyph is e with ogonek, we already have it as esc +			0x015b, # 0xc4 +			0x0106, # 0xc5 +			0x0104, # 0xc6 +			0x017b, # 0xc7 +			0x017c, # 0xc8 + +# the rest are from the arabic xe rom +			0x0660, # eastern arabic numeral 0 +			0x0661, # eastern arabic numeral 1 +			0x0662, # eastern arabic numeral 2 +			0x0663, # eastern arabic numeral 3 +			0x0664, # eastern arabic numeral 4 +			0x0665, # eastern arabic numeral 5 +			0x0666, # eastern arabic numeral 6 +			0x0667, # eastern arabic numeral 7 +			0x0668, # eastern arabic numeral 8 +			0x0669, # eastern arabic numeral 9 + +# todo: figure out the arabic letter mappings. might need someone who +# actually reads arabic to make sense of them... what i've got is just +# a guess. +			[ 0x0624, 0xfe85, 0xfe86 ], # 0x3c, maybe? + +			[ 0x0634, 0xfeb5, 0xfeb6, 0xfeb8 ], # 0x41 +			[ 0x0648, 0xfeed, 0xfeee ], # 0x42 +			[ 0x0629, 0xfe93, 0xfe94 ], # 0x43 +			[ 0x064a, 0xfef1, 0xfef2, 0xfef4 ], # 0x44 +			[ 0x062b, 0xfe99, 0xfe9a, 0xfe9c ], # 0x45 +			[ 0x0628, 0xfe8f, 0xfe90, 0xfe92 ], # 0x46 +			[ 0x0644, 0xfedd, 0xfede, 0xfee0 ], # 0x47 +			[ 0x0621, 0xfe80 ], # 0x48 +			[ 0x0647, 0xfee9, 0xfeea, 0xfeec ], # 0x49 +			[ 0x062a, 0xfe95, 0xfe96, 0xfe98 ], # 0x4a +			[ 0x0646, 0xfee5, 0xfee6, 0xfee8 ], # 0x4b +			[ 0x0645, 0xfee1, 0xfee2, 0xfee4 ], # 0x4c +			[ 0x062c, 0xfe9d, 0xfe9e, 0xfea0 ], # 0x4d +			# xxx don't know what 0x4e is +			[ 0x062e, 0xfea5, 0xfea6, 0xfea8 ], # 0x4f +			[ 0x062d, 0xfea1, 0xfea2, 0xfea4 ], # 0x50 +			[ 0x0636, 0xfebd, 0xfebe, 0xfec0 ], # 0x51 +			[ 0x0642, 0xfed5, 0xfed6, 0xfed8 ], # 0x52 +			[ 0x0633, 0xfeb1, 0xfeb2, 0xfeb4 ], # 0x53 +			[ 0x0641, 0xfed1, 0xfed2, 0xfed4 ], # 0x54 +			[ 0x0639, 0xfec9, 0xfeca, 0xfecc ], # 0x55 +			[ 0x0643, 0xfed9, 0xfeda, 0xfedc ], # 0x56 +			[ 0x0635, 0xfeb9, 0xfeba, 0xfebc ], # 0x57 +			# xxx don't know what 0x58 is +			[ 0x063a, 0xfecd, 0xfece, 0xfed0 ], # 0x59 +			[ 0x0649, 0xfeef, 0xfef0 ], # 0x5a +			[ 0x0632, 0xfeaf, 0xfeb0 ], # 0x60 +			0xfeb7, # 0x61 +			# xxx 0x62 isn't really both ﺩ and ﺭ but where's the atari's ﺭ at? +			[ 0x062f, 0xfea9, 0xfeaa, 0x0631, 0xfead, 0xfeae ], # 0x62 +			[ 0x0630, 0xfeab, 0xfeac ], # 0x63 +			0xfef3, # 0x64 +			0xfe9b, # 0x65 +			0xfe91, # 0x66 +			0xfedf, # 0x67 +			[ 0x0627, 0xfe8d, 0xfe8e ], # 0x68 +			0xfeeb, # 0x69 +			0xfe97, # 0x6a +			0xfee7, # 0x6b +			0xfee3, # 0x6c +			0xfe9f, # 0x6d +			[ 0xfef7, 0xf3f8 ], # 0x6e +			0xfea7, # 0x6f +			0xfea3, # 0x70 +			0xfebf, # 0x71 +			0xfed7, # 0x72 +			0xfeb3, # 0x73 +			0xfed3, # 0x74 +			0xfecb, # 0x75 +			0xfedb, # 0x76 +			0xfebb, # 0x77 +			[ 0x0637, 0xfec1, 0xfec2, 0xfec4, 0xfec3 ], # 0x78 +			0xfecf, # 0x79 +			[ 0x0638, 0xfec5, 0xfec6, 0xfec8, 0xfec7 ], # 0x7a +			0x061f, # 0x7f +			); +} + +### main() +setup_map(); + +@scale1 = (); +@scale2 = (); +@scale3 = (); + +$raw .= read_rom("atarixl.rom", 0x2200, 32); +$raw .= read_rom("atarixl.rom", 0x2000, 32); +$raw .= read_rom("atarixl.rom", 0x2100, 32); +$raw .= read_rom("atarixl.rom", 0x2300, 32); +$raw .= read_rom("atarixl.rom", 0xe00, 26); +$raw .= read_rom("atarixl.rom", 0xf00, 1); +$raw .= read_rom("atarixl.rom", 0xfd8, 1); + +$raw .= read_rom("xl_hebrew.rom", 0xf00, 27); + +$raw .= read_rom("xl_polish.rom", 0xe00, 6); +$raw .= read_rom("xl_polish.rom", 0xe50, 5); +$raw .= read_rom("xl_polish.rom", 0xe80, 1); +$raw .= read_rom("xl_polish.rom", 0xe98, 1); +$raw .= read_rom("xl_polish.rom", 0xeb0, 3); +$raw .= read_rom("xl_polish.rom", 0xed0, 1); + +$raw .= read_rom("xe_arabic.rom", 0x2000+8*15, 10); +$raw .= read_rom("xe_arabic.rom", 0x2000+8*0x3c, 1); +$raw .= read_rom("xe_arabic.rom", 0x2000+8*0x41, 13); +$raw .= read_rom("xe_arabic.rom", 0x2000+8*0x4f, 9); +$raw .= read_rom("xe_arabic.rom", 0x2000+8*0x59, 2); +$raw .= read_rom("xe_arabic.rom", 0x2000+8*0x60, 27); +$raw .= read_rom("xe_arabic.rom", 0x2000+8*0x7f, 1); + +$cnt = 0; +while($raw =~ /(.{8})/gc) { +	my @bytes; +	my $got = $1; +	my $chr = $map[$cnt++]; +	die "$0: incomplete map" unless defined $chr; +	#warn $got; +	push @bytes, ord(substr($got, $_, 1)) for(0..7); +	#warn $_ for @bytes; +	push @scale1, chr2output($chr, \@bytes, 1); +	push @scale2, chr2output($chr, \@bytes, 2); +	push @scale3, chr2output($chr, \@bytes, 3); +} + +while(<DATA>) { +	push @scale1, $_; +	$cnt++ if /^%/; +	if(/^\s*[-#]/) { +		push @scale2, scale_line($_, 2); +		push @scale3, scale_line($_, 3); +	} else { +		push @scale2, $_; +		push @scale3, $_; +	} +} + +#warn "$cnt characters\n"; +#warn "(padding to 256 characters)\n" unless $cnt >= 256; +#warn "(padding to 512 characters)\n" unless $cnt >= 512; + +# 512 glyphs is the max for a PSF font. There can be more +# *codepoints*, because the Unicode directory allows the same +# glyph to represent multiple codepoints (e.g. space and +# non-breaking space). +if($cnt > 512) { +	die "$0: too many glyphs ($cnt > 512)"; +} + +# The kernel refuses to load a font that isn't exactly +# 256 or 512 glyphs, so we have to pad with junk glyphs. +while($cnt < 512) { +	my $fake = "%\nUnicode: [0000];\nBitmap: "; +	push @scale1, $fake . (("-" x 8) x 8) . "\n"; +	push @scale2, $fake . (("-" x 16) x 16) . "\n"; +	push @scale3, $fake . (("-" x 24) x 24) . "\n"; +	$cnt++; +} + +#warn "$cnt characters with padding\n"; + +# What is dupglyphs.pl for? +# PSF allows the same glyph to represent multiple codepoints (e.g. +# space and NBSP, or hyphen/soft-hyphen/en-dash). We only get 512 +# glyphs max for a PSF, so we definitely want to use this. +# BDF on the other hand doesn't allow this. So if the same glyph +# data is to be used for multiple codepoints in BDF, the glyph data +# has to be repeated for each codepoint. Bloats the font, but not +# too much. The BDF is also what gets made into the TTF. I'm pretty +# sure TTF supports multiple codepoints per glyph, but until I +# learn some other way besides bitmapfont2ttf to generate the TTF, +# it also will have dup glyph bloat. On the bright side, dupglyphs.pl +# removes all the padding characters required by the psf font. +sub mkfonts { +	my $px = shift; +	my $scaled_data = shift; +	my $scale = shift; + +	open $fh, '>', "$fontname-$px.txt" or die $!; +	print $fh psf2txt_header($cnt, $scale); +	print $fh $_ for(@$scaled_data); +	close $fh; + +	system("txt2psf $fontname-$px.txt $fontname-$px.psf"); +	system("perl dupglyphs.pl $fontname-$px.txt | perl sorttxtfont.pl | txt2psf | psf2bdf --defchar=0 --iso10646 --fontname=$fontname-$px | perl ./fixbdf.pl $px > $fontname-$px.bdf"); +} + +mkfonts(8, \@scale1, 1); +mkfonts(16, \@scale2, 2); +mkfonts(24, \@scale3, 3); + +exit 0; + +__DATA__ +% +// dotted-box (no such glyph) +Unicode: [0000]; +Bitmap: \ +        -------- \ +        -##-###- \ +        -#------ \ +        ------#- \ +        -#------ \ +        ------#- \ +        -###-##- \ +        -------- +% +// backtick +Unicode: [0060]; +Bitmap: \ +        -------- \ +        --##---- \ +        --##---- \ +        ---##--- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// curlies +Unicode: [007b]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        ---##--- \ +        --##---- \ +        ---##--- \ +        ---##--- \ +        ----##-- \ +        -------- +% +Unicode: [007d]; +Bitmap: \ +        --##---- \ +        ---##--- \ +        ---##--- \ +        ----##-- \ +        ---##--- \ +        ---##--- \ +        --##---- \ +        -------- +% +// tilde +Unicode: [007e]; +Bitmap: \ +        -------- \ +        -###--## \ +        ##-##-## \ +        ##--###- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// euro +Unicode: [20ac]; +Bitmap: \ +        ---####- \ +        --##---- \ +        -#####-- \ +        --##---- \ +        -#####-- \ +        --##---- \ +        ---####- \ +        -------- +% +// spanish left-quote +Unicode: [00ab]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        -##--##- \ +        ##--##-- \ +        -##--##- \ +        -------- \ +        -------- +% +// spanish right-quote +Unicode: [00bb]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        ##--##-- \ +        -##--##- \ +        ##--##-- \ +        -------- \ +        -------- +% +// spanish inverted question mark +Unicode: [00bf]; +Bitmap: \ +        -------- \ +        ---##--- \ +        -------- \ +        ---##--- \ +        ----##-- \ +        -##--##- \ +        --####-- \ +        -------- +% +// copyright +Unicode: [00a9]; +Bitmap: \ +        -#####-- \ +        #-----#- \ +        #--##-#- \ +        #-#---#- \ +        #--##-#- \ +        #-----#- \ +        -#####-- \ +        -------- +% +// registered +Unicode: [00ae]; +Bitmap: \ +        -#####-- \ +        #-----#- \ +        #-##--#- \ +        #-#-#-#- \ +        #-##--#- \ +        #-#-#-#- \ +        -#####-- \ +        -------- +% +// degrees +Unicode: [00b0];[00ba]; +Bitmap: \ +        -------- \ +        ---##--- \ +        --#--#-- \ +        ---##--- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// cents +Unicode: [00a2]; +Bitmap: \ +        -------- \ +        ---##--- \ +        --#####- \ +        -##----- \ +        -##----- \ +        --#####- \ +        ---##--- \ +        -------- +% +// "currency sign" +// FIXME: not bold enough +Unicode: [00a4]; +Bitmap: \ +        -------- \ +        -#----#- \ +        --####-- \ +        --#--#-- \ +        --#--#-- \ +        --####-- \ +        -#----#- \ +        -------- +% +// yen +Unicode: [00a5]; +Bitmap: \ +        -##--##- \ +        -##--##- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        -------- +% +// broken bar +Unicode: [00a6]; +Bitmap: \ +        -------- \ +        ---##--- \ +        ---##--- \ +        -------- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -------- +% +// section sign +// FIXME: not bold enough +Unicode: [00a7]; +Bitmap: \ +        ---###-- \ +        --#----- \ +        ---##--- \ +        --#--#-- \ +        ---##--- \ +        -----#-- \ +        --###--- \ +        -------- +% +// diaresis (cha, cha, cha!) +Unicode: [00a8]; +Bitmap: \ +        -------- \ +        -##--##- \ +        -##--##- \ +        -------- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// feminine ordinal (superscript a) +Unicode: [00aa]; +Bitmap: \ +        -------- \ +        --####-- \ +        ----###- \ +        --##-##- \ +        ---####- \ +        -------- \ +        -------- \ +        -------- +% +// "not" sign +Unicode: [00ac]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        -######- \ +        -----##- \ +        -------- \ +        -------- \ +        -------- +% +// macron +Unicode: [00af]; +Bitmap: \ +        -------- \ +        -######- \ +        -------- \ +        -------- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// plus-minus +Unicode: [00b1]; +Bitmap: \ +        -------- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        -------- \ +        -######- \ +        -------- \ +        -------- +% +// superscript 2 +// FIXME: not bold enough +Unicode: [00b2]; +Bitmap: \ +        -------- \ +        --##---- \ +        -#--#--- \ +        ---#---- \ +        --#----- \ +        -####--- \ +        -------- \ +        -------- +% +// FIXME: not bold enough +// superscript 3 +Unicode: [00b3]; +Bitmap: \ +        -------- \ +        --##---- \ +        -#--#--- \ +        ---#---- \ +        -#--#--- \ +        --##---- \ +        -------- \ +        -------- +% +// acute +Unicode: [00b4]; +Bitmap: \ +        -------- \ +        ----##-- \ +        ---##--- \ +        -------- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// mu +Unicode: [00b5]; +Bitmap: \ +        -------- \ +        -------- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        --#####- \ +        -----##- \ +        -------- +% +// paragraph +Unicode: [00b6]; +Bitmap: \ +        -------- \ +        --##-##- \ +        -###-##- \ +        -###-##- \ +        --##-##- \ +        ---#-##- \ +        ---#-##- \ +        -------- +% +// middle dot +Unicode: [00b7]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        ---##--- \ +        ---##--- \ +        -------- \ +        -------- \ +        -------- +% +// superscript 1 +Unicode: [00b9]; +Bitmap: \ +        -------- \ +        ---##--- \ +        --###--- \ +        ---##--- \ +        --####-- \ +        -------- \ +        -------- \ +        -------- +// FIXME: MISSING fractions, 00bc/00bd/00bc, ¼ ½ ¾, hard to do in 8x8 +% +// A with grave +Unicode: [00c0]; +Bitmap: \ +        -------- \ +        --##---- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// A with acute +Unicode: [00c1]; +Bitmap: \ +        -------- \ +        ----##-- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// A with circumflex +Unicode: [00c2]; +Bitmap: \ +        --####-- \ +        -#----#- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// A with tilde +Unicode: [00c3]; +Bitmap: \ +        --##-##- \ +        -##-##-- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// A with ring +Unicode: [00c5]; +Bitmap: \ +        ---##--- \ +        --#--#-- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##--##- \ +        -------- +% +// AE ligature +Unicode: [00c6]; +Bitmap: \ +        -------- \ +        --#####- \ +        -####--- \ +        ##-##--- \ +        #######- \ +        ##-##--- \ +        ##-####- \ +        -------- +// FIXME: this is hideous! +% +// C with cedilla +Unicode: [00c7]; +Bitmap: \ +        -------- \ +        --####-- \ +        -##--##- \ +        -##----- \ +        -##--##- \ +        --####-- \ +        ---##--- \ +        --##---- +% +// E with circumflex +Unicode: [00ca]; +Bitmap: \ +        --####-- \ +        -#----#- \ +        -######- \ +        -##----- \ +        -#####-- \ +        -##----- \ +        -######- \ +        -------- +// FIXME: ugly! +% +// E with umlaut +Unicode: [00cb]; +Bitmap: \ +        --##-##- \ +        -------- \ +        -######- \ +        -##----- \ +        -#####-- \ +        -##----- \ +        -######- \ +        -------- +% +// I with grave +Unicode: [00cc]; +Bitmap: \ +        --##---- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -######- \ +        -------- +% +// I with acute +Unicode: [00cd]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -######- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -######- \ +        -------- +% +// I with circumflex +Unicode: [00ce]; +Bitmap: \ +        --####-- \ +        -#----#- \ +        -######- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -######- \ +        -------- +// FIXME: ugly! +% +// I with umlaut +Unicode: [00cf]; +Bitmap: \ +        --##-##- \ +        -------- \ +        -######- \ +        ---##--- \ +        ---##--- \ +        ---##--- \ +        -######- \ +        -------- +% +// capital eth +Unicode: [00d0]; +Bitmap: \ +        -------- \ +        -####--- \ +        -##-##-- \ +        -##--##- \ +        ####-##- \ +        -##-##-- \ +        -####--- \ +        -------- +% +// O with grave +Unicode: [00d2]; +Bitmap: \ +        -##----- \ +        --####-- \ +        -#-#-##- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        --####-- \ +        -------- +// FIXME: MISSING Ô Õ +% +// multiplication +Unicode: [00d7]; +Bitmap: \ +        -------- \ +        -##--##- \ +        --####-- \ +        ---##--- \ +        --####-- \ +        -##--##- \ +        -------- \ +        -------- +// FIXME: MISSING Ø +% +// U with grave +Unicode: [00d9]; +Bitmap: \ +        --##---- \ +        ---##--- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        -######- \ +        -------- +% +// U with acute +Unicode: [00da]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        -######- \ +        -------- +// FIXME: MISSING Û +% +// Y with acute +Unicode: [00dd]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -##--##- \ +        -##--##- \ +        --####-- \ +        ---##--- \ +        ---##--- \ +        -------- +% +// capital thorn +Unicode: [00de]; +Bitmap: \ +        -------- \ +        -##----- \ +        -#####-- \ +        -##--##- \ +        -#####-- \ +        -##----- \ +        -##----- \ +        -------- +% +// a with circumflex +Unicode: [00e2]; +Bitmap: \ +        --####-- \ +        -#----#- \ +        -------- \ +        --####-- \ +        ----###- \ +        --##-##- \ +        ---####- \ +        -------- +% +// a with tilde +Unicode: [00e3]; +Bitmap: \ +        --##-##- \ +        -##-##-- \ +        -------- \ +        --####-- \ +        ----###- \ +        --##-##- \ +        ---####- +// FIXME: touches bottom +% +// ae ligature +Unicode: [00e6]; +Bitmap: \ +        -------- \ +        -------- \ +        -###-##- \ +        ---##-## \ +        -######- \ +        ##-##--- \ +        -######- \ +        -------- +// FIXME: fugly +% +// e with umlaut +Unicode: [00eb]; +Bitmap: \ +        -##--##- \ +        -------- \ +        --####-- \ +        -##--##- \ +        -######- \ +        -##----- \ +        --####-- \ +        -------- +% +// i with acute +Unicode: [00ed]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -------- \ +        --###--- \ +        ---##--- \ +        ---##--- \ +        --####-- \ +        -------- +% +// lowercase eth +Unicode: [00f0]; +Bitmap: \ +        -##-#--- \ +        --##---- \ +        -#-##--- \ +        --####-- \ +        -##--##- \ +        -##--##- \ +        --####-- \ +        -------- +% +// o with tilde +Unicode: [00f5]; +Bitmap: \ +        --##-##- \ +        -##-##-- \ +        -------- \ +        --####-- \ +        -##--##- \ +        -##--##- \ +        --####-- \ +        -------- +% +// division +Unicode: [00f7]; +Bitmap: \ +        -------- \ +        ---##--- \ +        -------- \ +        -######- \ +        -------- \ +        ---##--- \ +        -------- \ +        -------- +// FIXME: MISSING ø +% +// y with acute +Unicode: [00fd]; +Bitmap: \ +        ----##-- \ +        ---##--- \ +        -------- \ +        -##--##- \ +        -##--##- \ +        --#####- \ +        ----##-- \ +        -####--- +% +// lowercase thorn +Unicode: [00fe]; +Bitmap: \ +        -##----- \ +        -##----- \ +        -####--- \ +        -##-##-- \ +        -####--- \ +        -##----- \ +        -##----- \ +        -------- +% +// y with umlaut +Unicode: [00ff]; +Bitmap: \ +        -##--##- \ +        -------- \ +        -##--##- \ +        -##--##- \ +        -##--##- \ +        --#####- \ +        ----##-- \ +        -####--- +% +// left single curly quote +Unicode: [2018]; +Bitmap: \ +        -------- \ +        --##---- \ +        ---##--- \ +        ----##-- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// right single curly quote +Unicode: [2019]; +Bitmap: \ +        -------- \ +        ----##-- \ +        ---##--- \ +        --##---- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// left double curly quote +Unicode: [201c]; +Bitmap: \ +        -------- \ +        -##--##- \ +        -##--##- \ +        --##--## \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// right double curly quote +Unicode: [201d]; +Bitmap: \ +        -------- \ +        -##--##- \ +        -##--##- \ +        ##--##-- \ +        -------- \ +        -------- \ +        -------- \ +        -------- +% +// spanish left single quote +Unicode: [2039]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        ---##--- \ +        --##---- \ +        ---##--- \ +        -------- \ +        -------- +% +// spanish right single quote +Unicode: [203a]; +Bitmap: \ +        -------- \ +        -------- \ +        -------- \ +        ---##--- \ +        ----##-- \ +        ---##--- \ +        -------- \ +        -------- +% +// replacement character for missing glyphs +Unicode: [fffd]; +Bitmap: \ +        --####-- \ +        -##--##- \ +        -#-##-#- \ +        -###-##- \ +        -######- \ +        -###-##- \ +        --####-- \ +        -------- diff --git a/fonts/sorttxtfont.pl b/fonts/sorttxtfont.pl new file mode 100644 index 0000000..62c37cc --- /dev/null +++ b/fonts/sorttxtfont.pl @@ -0,0 +1,33 @@ +#!/usr/bin/perl -w + +# sort a font in psftools .txt format, by unicode codepoint. +# only the *first* codepoint per glyph is used as the key. + +undef $/; +$_ = <>; +@glyphs = split "%"; +shift @glyphs; +$header = "%" . (shift @glyphs); + +# 0 is a special case because fonts intended to become PSFs will +# be padded with extra characters with encoding 0. only the first +# one seen is the real one. +$zeroseen = 0; + +for(@glyphs) { +	my($cp, $dcp); +	($cp) = (/Unicode: \[([0-9a-fA-F]+)/); +	$dcp = eval "0x$cp"; +	if($dcp == 0) { +		next if $zeroseen++; +	} +	if(defined $sortme{$dcp}) { +		warn "duplicate codepoint 0x$cp\n"; +	} +	$sortme{$dcp} = $_; +} + +for(sort { $a <=> $b } keys %sortme) { +	push @sorted, $sortme{$_}; +} +print join("%", $header, @sorted); diff --git a/install-fonts.sh b/install-fonts.sh new file mode 100644 index 0000000..7d803f8 --- /dev/null +++ b/install-fonts.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +# Install the BDF fonts where they belong. DESTDIR, BDFDIR, and TTFDIR +# must be given as arguments. If DESTDIR is blank, the X server and +# fontconfig will be informed about the new fonts. If DESTDIR is NOT +# blank, we're not really installing the fonts system-wide, so no +# extra config will be done (the files will just be copied). + +DESTDIR="$1" +BDFDIR="$2" +TTFDIR="$3" + +SYSTEM=yes + +if [ "$DISPLAY" = "" ]; then +	SYSTEM=no +fi + +if [ "$DESTDIR" != "" ]; then +	BDFDIR="$DESTDIR/$BDFDIR" +	TTFDIR="$DESTDIR/$TTFDIR" +	SYSTEM=no +fi + +if [ "$#" != "3" -o "$BDFDIR" = "" ]; then +	echo "usage: $0 <destdir> <bdfdir> <ttfdir>" +	exit 1 +fi + +echo -n "$0: will " +if [ "$SYSTEM" != "yes" ]; then +	echo -n "NOT " +fi +echo "run mkfontdir/mkfontscale/xset/fc-cache" + +install_font() { +	BDF=fauxtari-$1.bdf +	ALIAS=fauxtari-$1 +	cp "fonts/$BDF" "$BDFDIR" +	chown root:root "$BDFDIR/$BDF" &> /dev/null +	if [ "$SYSTEM" = "yes" ]; then +		( cd "$BDFDIR" +		  mkfontdir +		  mkfontscale +		  if ! grep "^$ALIAS" fonts.alias &> /dev/null; then +			  NAME="$( grep "^$BDF" fonts.dir | cut -d' ' -f2- )" +			  echo "$ALIAS \"$NAME\"" >> fonts.alias +		  fi +		) +	fi +} + +mkdir -p "$BDFDIR" || exit 1 +mkdir -p "$TTFDIR" || exit 1 +install_font 8 +install_font 16 +install_font 24 + +cp "fonts/FauxtariScalableMono.ttf" "$TTFDIR" +if [ "$SYSTEM" = "yes" ]; then +	fc-cache -f "$BDFDIR" &> /dev/null +	xset fp rehash &> /dev/null +	if [ "$BDFDIR" != "$TTFDIR" ]; then +		cd "$TTFDIR" +		mkfontdir +		mkfontscale +		fc-cache -f "$TTFDIR" &> /dev/null +	fi +fi diff --git a/int_disk_tokens.c b/int_disk_tokens.c new file mode 100644 index 0000000..3ea0f77 --- /dev/null +++ b/int_disk_tokens.c @@ -0,0 +1,94 @@ +const char *int_disk_cmds[] = { +	"REM",        /* $00 */ +	"DATA",       /* $01 */ +	"INPUT",      /* $02 */ +	"COLOR",      /* $03 */ +	"LIST",       /* $04 */ +	"ENTER",      /* $05 */ +	"LET",        /* $06 */ +	"IF",         /* $07 */ +	"FOR",        /* $08 */ +	"NEXT",       /* $09 */ +	"GOTO",       /* $0A */ +	"GO TO",      /* $0B */ +	"GOSUB",      /* $0C */ +	"TRAP",       /* $0D */ +	"BYE",        /* $0E */ +	"CONT",       /* $0F */ +	"COM",        /* $10 */ +	"CLOSE",      /* $11 */ +	"CLR",        /* $12 */ +	"VBLANKWAIT", /* $13 */ +	"DIM",        /* $14 */ +	"END",        /* $15 */ +	"NEW",        /* $16 */ +	"OPEN",       /* $17 */ +	"LOAD",       /* $18 */ +	"SAVE",       /* $19 */ +	"STATUS",     /* $1A */ +	"NOTE",       /* $1B */ +	"POINT",      /* $1C */ +	"XIO",        /* $1D */ +	"ON",         /* $1E */ +	"POKE",       /* $1F */ +	"PRINT",      /* $20 */ +	"READ",       /* $21 */ +	"RESTORE",    /* $22 */ +	"RETURN",     /* $23 */ +	"RUN",        /* $24 */ +	"STOP",       /* $25 */ +	"POP",        /* $26 */ +	"?",          /* $27 */ +	"GET",        /* $28 */ +	"PUT",        /* $29 */ +	"GRAPHICS",   /* $2A */ +	"PLOT",       /* $2B */ +	"POSITION",   /* $2C */ +	"DOS",        /* $2D */ +	"DRAWTO",     /* $2E */ +	"SETCOLOR",   /* $2F */ +	"LOCATE",     /* $30 */ +	"SOUND",      /* $31 */ +	"LPRINT",     /* $32 */ +	"CSAVE",      /* $33 */ +	"CLOAD",      /* $34 */ +	"",          /* $35 */ +	"ERROR- ",    /* $36 */ +	"WHILE",      /* $37 */ +	"ENDWHILE",   /* $38 */ +	"TRACEOFF",   /* $39 */ +	"TRACE",      /* $3A */ +	"ELSE",       /* $3B */ +	"ENDIF",      /* $3C */ +	"DPOKE",      /* $3D */ +	"LOMEM",      /* $3E */ +	"DEL",        /* $3F */ +	"VINC",       /* $40 */ +	"VDEC",       /* $41 */ +	"VCONST",     /* $42 */ +	"BPUT",       /* $43 */ +	"BGET",       /* $44 */ +	"TAB",        /* $45 */ +	"CP",         /* $46 */ +	"ERASE",      /* $47 */ +	"PROTECT",    /* $48 */ +	"UNPROTECT",  /* $49 */ +	"DIR",        /* $4A */ +	"RENAME",     /* $4B */ +	"MOVE",       /* $4C */ +	"MISSILE",    /* $4D */ +	"PMCLR",      /* $4E */ +	"PMCOLOR",    /* $4F */ +	"PMGRAPHICS", /* $50 */ +	"PMMOVE",     /* $51 */ +	"PMWIDTH",    /* $52 */ +	"SET",        /* $53 */ +	"LVAR",       /* $54 */ +	"RENUM",      /* $55 */ +	"FAST",       /* $56 */ +	"NUM",        /* $57 */ +	"END",        /* $58 */ +}; + +const int int_disk_cmd_size = sizeof(int_disk_cmds); + diff --git a/int_disk_tokens.h b/int_disk_tokens.h new file mode 100644 index 0000000..f5059d9 --- /dev/null +++ b/int_disk_tokens.h @@ -0,0 +1,5 @@ +extern const char *int_disk_cmds[]; +#define int_disk_ops int_ops + +extern const int int_disk_cmd_size; +#define int_disk_ops_size int_ops_size diff --git a/int_tokens.c b/int_tokens.c new file mode 100644 index 0000000..9875e75 --- /dev/null +++ b/int_tokens.c @@ -0,0 +1,189 @@ +const char *int_cmds[] = { +	"REM",        /* $00 */ +	"DATA",       /* $01 */ +	"INPUT",      /* $02 */ +	"COLOR",      /* $03 */ +	"LIST",       /* $04 */ +	"ENTER",      /* $05 */ +	"LET",        /* $06 */ +	"IF",         /* $07 */ +	"FOR",        /* $08 */ +	"NEXT",       /* $09 */ +	"GOTO",       /* $0A */ +	"GO TO",      /* $0B */ +	"GOSUB",      /* $0C */ +	"TRAP",       /* $0D */ +	"BYE",        /* $0E */ +	"CONT",       /* $0F */ +	"COM",        /* $10 */ +	"CLOSE",      /* $11 */ +	"CLR",        /* $12 */ +	"VBLANKWAIT", /* $13 */ +	"HITCLR",     /* $14 */ +	"       ",    /* $15 */ +	"DIM",        /* $16 */ +	"END",        /* $17 */ +	"NEW",        /* $18 */ +	"OPEN",       /* $19 */ +	"LOAD",       /* $1A */ +	"SAVE",       /* $1B */ +	"STATUS",     /* $1C */ +	"NOTE",       /* $1D */ +	"POINT",      /* $1E */ +	"XIO",        /* $1F */ +	"ON",         /* $20 */ +	"POKE",       /* $21 */ +	"PRINT",      /* $22 */ +	"READ",       /* $23 */ +	"RESTORE",    /* $24 */ +	"RETURN",     /* $25 */ +	"RUN",        /* $26 */ +	"STOP",       /* $27 */ +	"POP",        /* $28 */ +	"?",          /* $29 */ +	"GET",        /* $2A */ +	"PUT",        /* $2B */ +	"GRAPHICS",   /* $2C */ +	"PLOT",       /* $2D */ +	"POSITION",   /* $2E */ +	"DOS",        /* $2F */ +	"DRAWTO",     /* $30 */ +	"SETCOLOR",   /* $31 */ +	"LOCATE",     /* $32 */ +	"SOUND",      /* $33 */ +	"LPRINT",     /* $34 */ +	"CSAVE",      /* $35 */ +	"CLOAD",      /* $36 */ +	"",           /* $37 */ +	"ERROR- ",    /* $38 */ +	"WHILE",      /* $39 */ +	"ENDWHILE",   /* $3A */ +	"TRACEOFF",   /* $3B */ +	"TRACE",      /* $3C */ +	"ELSE",       /* $3D */ +	"ENDIF",      /* $3E */ +	"DPOKE",      /* $3F */ +	"LOMEM",      /* $40 */ +	"DEL",        /* $41 */ +	"VINC",       /* $42 */ +	"VDEC",       /* $43 */ +	"VCONST",     /* $44 */ +	"BPUT",       /* $45 */ +	"BGET",       /* $46 */ +	"TAB",        /* $47 */ +	"CP",         /* $48 */ +	"ERASE",      /* $49 */ +	"PROTECT",    /* $4A */ +	"UNPROTECT",  /* $4B */ +	"DIR",        /* $4C */ +	"RENAME",     /* $4D */ +	"MOVE",       /* $4E */ +	"MISSILE",    /* $4F */ +	"PMCLR",      /* $50 */ +	"PMCOLOR",    /* $51 */ +	"PMGRAPHICS", /* $52 */ +	"PMMOVE",     /* $53 */ +	"PMWIDTH",    /* $54 */ +	"SET",        /* $55 */ +	"LVAR",       /* $56 */ +	"RENUM",      /* $57 */ +	"FAST",       /* $58 */ +	"NUM",        /* $59 */ +	"END",        /* $5A */ +}; + +const int int_cmd_size = sizeof(int_cmds); + +const char *int_ops[] = { +	0, 0, 0, 0, 0, 0, 0, 0, +	0, 0, 0, 0, 0, 0, 0, 0, +	",",          /* $10 */ +	":",          /* $11 */ +	";",          /* $12 */ +	"",           /* $13 */ +	" GOTO ",     /* $14 */ +	" GOSUB ",    /* $15 */ +	" TO ",       /* $16 */ +	" STEP ",     /* $17 */ +	"=",          /* $18 */ +	"=",          /* $19 */ +	" THEN ",     /* $1A */ +	"#",          /* $1B */ +	"^&",         /* $1C */ +	"^!",         /* $1D */ +	"^%",         /* $1E */ +	">>",         /* $1F */ +	"<<",         /* $20 */ +	"<=",         /* $21 */ +	"<>",         /* $22 */ +	">=",         /* $23 */ +	"<",          /* $24 */ +	">",          /* $25 */ +	"=",          /* $26 */ +	"\\",         /* $27 */ +	"*",          /* $28 */ +	"+",          /* $29 */ +	"-",          /* $2A */ +	"/",          /* $2B */ +	"%",          /* $2C */ +	" NOT ",      /* $2D */ +	" OR ",       /* $2E */ +	" AND ",      /* $2F */ +	"!",          /* $30 */ +	"&",          /* $31 */ +	"(",          /* $32 */ +	")",          /* $33 */ +	"<=",         /* $34 */ +	"<>",         /* $35 */ +	">=",         /* $36 */ +	"<",          /* $37 */ +	">",          /* $38 */ +	"=",          /* $39 */ +	"+",          /* $3A */ +	"-",          /* $3B */ +	"(",          /* $3C */ +	"",           /* $3D */ +	"",           /* $3E */ +	"(",          /* $3F */ +	"(",          /* $40 */ +	",",          /* $41 */ +	";",          /* $42 */ +	"LEFT$(",     /* $43 */ +	"RIGHT$(",    /* $44 */ +	"MID$(",      /* $45 */ +	"STR$(",      /* $46 */ +	"CHR$(",      /* $47 */ +	"USR(",       /* $48 */ +	"ASC(",       /* $49 */ +	"VAL(",       /* $4A */ +	"LEN(",       /* $4B */ +	"ADR(",       /* $4C */ +	"BUMP(",      /* $4D */ +	"FIND(",      /* $4E */ +	"HEX$(",      /* $4F */ +	"RANDOM(",    /* $50 */ +	"DPEEK(",     /* $51 */ +	"RUN(",       /* $52 */ +	"    ",       /* $53 */ +	"PEEK(",      /* $54 */ +	"    ",       /* $55 */ +	"RND(",       /* $56 */ +	"FRE(",       /* $57 */ +	"SQR(",       /* $58 */ +	"SGN(",       /* $59 */ +	"ABS(",       /* $5A */ +	"INT(",       /* $5B */ +	"SYS(",       /* $5C */ +	"PADDLE(",    /* $5D */ +	"STICK(",     /* $5E */ +	"PTRIG(",     /* $5F */ +	"STRIG(",     /* $60 */ +	"VSTICK(",    /* $61 */ +	"HSTICK(",    /* $62 */ +	"PMADR(",     /* $63 */ +	"ERR(",       /* $64 */ +	"TAB(",       /* $65 */ +	"PEN(",       /* $66 */ +}; + +const int int_ops_size = sizeof(int_ops); diff --git a/int_tokens.h b/int_tokens.h new file mode 100644 index 0000000..135890e --- /dev/null +++ b/int_tokens.h @@ -0,0 +1,5 @@ +extern const char *int_cmds[]; +extern const char *int_ops[]; + +extern const int int_cmd_size; +extern const int int_ops_size; diff --git a/jindroush/Makefile b/jindroush/Makefile index 605dc70..a4fe4c9 100644 --- a/jindroush/Makefile +++ b/jindroush/Makefile @@ -18,15 +18,15 @@ BINS=acvt adir aext bas2boot chkbas chkexe chkrom  W=-Wall -Wno-write-strings  all: libs manpages -	for i in $(BINS); do \ -		make -C $$i COPT="$(COPT) $(W)" ; \ +	@for i in $(BINS); do \ +		$(MAKE) --no-print-directory -C $$i COPT="$(COPT) $(W)" ; \  	done  manpages: -	make -C man +	@$(MAKE) --no-print-directory -C man  libs: -	make -C lib COPT="$(COPT) $(W)" +	@$(MAKE) --no-print-directory -C lib COPT="$(COPT) $(W)"  clean:  	make -C lib clean diff --git a/jindroush/README.txt b/jindroush/README.txt index 31d9af9..a085003 100644 --- a/jindroush/README.txt +++ b/jindroush/README.txt @@ -29,9 +29,10 @@ I've made to Jindroush's code:    with mode 0600; changed this to 0666 (which will still be affected    by the user's umask). -- Added "listbas" symlink, to save typing "chkbas -short" over and over -  again. -  - adir's -dir option now creates the directory if it doesn't exist.  - Wrote man pages for all the utilities. + +- Fixed a bug in chkbas: BASIC XL and XE's LEFT$ RIGHT$ MID$ were +  being printed without the left parenthesis (e.g Left$(A$,3) was +  coming out as Left$A$,3). diff --git a/jindroush/chkbas/basic_xe.h b/jindroush/chkbas/basic_xe.h index fc86131..56e0276 100644 --- a/jindroush/chkbas/basic_xe.h +++ b/jindroush/chkbas/basic_xe.h @@ -209,9 +209,9 @@ char* aOpsBasicXe[] = {  	"ERR",			//63  	"TAB",			//64  	"PEN",			//65 -	"LEFT$",			//66 -	"RIGHT$",		//67 -	"MID$",			//68 +	"LEFT$(",		//66 +	"RIGHT$(",		//67 +	"MID$(",			//68  };  #define BASICXE_CMD_NUM ( sizeof( aCmdsBasicXe ) / sizeof( aCmdsBasicXe[ 0 ] ) ) diff --git a/jindroush/chkbas/basic_xl.h b/jindroush/chkbas/basic_xl.h index a97f8a7..97dd627 100644 --- a/jindroush/chkbas/basic_xl.h +++ b/jindroush/chkbas/basic_xl.h @@ -203,9 +203,9 @@ char* aOpsBasicXl[] = {  	"ERR",			//63  	"TAB",			//64  	"PEN",			//65 -	"LEFT$",			//66 -	"RIGHT$",		//67 -	"MID$",			//68 +	"LEFT$(",		//66 +	"RIGHT$(",		//67 +	"MID$(",			//68  };  #define BASICXL_CMD_NUM ( sizeof( aCmdsBasicXl ) / sizeof( aCmdsBasicXl[ 0 ] ) ) diff --git a/jindroush/man/chkbas.1 b/jindroush/man/chkbas.1 index 1f5313a..f2664f3 100644 --- a/jindroush/man/chkbas.1 +++ b/jindroush/man/chkbas.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "CHKBAS" 1 "2024-06-25" "1.10" "Jindroush's Atari 8-bit tools" +.TH "CHKBAS" 1 "2024-07-10" "1.10" "Jindroush's Atari 8-bit tools"  .SH NAME  chkbas \- check and detokenize Atari BASIC SAVEd files  .SH SYNOPSIS @@ -45,6 +45,22 @@ standard output. If \fBbasic\-file\fP is anything other than standard  Atari BASIC, the BASIC dialect must be specified (see \fBOPTIONS\fP,  below).  .sp +It\(aqs highly recommended to avoid running \fBchkbas\fP without +redirecting or piping its output: If the program contains ATASCII +graphics or inverse characters, they will be printed as\-is to the +terminal, which can confuse the terminal. For simply reading the code, +pipe to \fBa8cat\fP(1), thus: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +$ chkbas \-atari PROGRAM.BAS | a8cat +.ft P +.fi +.UNINDENT +.UNINDENT +.sp  Sample run, with no options:  .INDENT 0.0  .INDENT 3.5 diff --git a/jindroush/man/chkbas.rst b/jindroush/man/chkbas.rst index e16f475..b6c678f 100644 --- a/jindroush/man/chkbas.rst +++ b/jindroush/man/chkbas.rst @@ -28,6 +28,14 @@ standard output. If **basic-file** is anything other than standard  Atari BASIC, the BASIC dialect must be specified (see **OPTIONS**,  below). +It's highly recommended to avoid running **chkbas** without +redirecting or piping its output: If the program contains ATASCII +graphics or inverse characters, they will be printed as-is to the +terminal, which can confuse the terminal. For simply reading the code, +pipe to **a8cat**\(1), thus:: + +  $ chkbas -atari PROGRAM.BAS | a8cat +  Sample run, with no options::    $ chkbas HELLO.BAS diff --git a/listamsb.1 b/listamsb.1 new file mode 100644 index 0000000..b5e2213 --- /dev/null +++ b/listamsb.1 @@ -0,0 +1,377 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "LISTAMSB" 1 "2025-04-02" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +listamsb \- List the source of a tokenized Atari Microsoft BASIC program +.SH SYNOPSIS +.sp +listamsb [\fB\-U\fP] | [\fB\-C\fP [\fB\-k\fP]] | [\fB\-D\fP] | [[\fB\-L\fP] [\fB\-a\fP] [\fB\-c\fP] [\fB\-v\fP] [\fB\-h\fP] [\fB\-i\fP] [\fB\-u\fP] [\fB\-t\fP] [\fB\-m\fP] [\fB\-M\fP] [\fB\-n\fP] [\fB\-s\fP] [\fB\-r\fP \fIline\-range\fP] ...] [\fBinput\-file\fP] [\fBoutput\-file\fP] +.SH DESCRIPTION +.sp +\fBlistamsb\fP acts like the \fILIST\fP command in Atari Microsoft BASIC. It reads a +tokenized (SAVEd) AMSB program and prints the code in human\-readable +format. +.sp +\fBlistamsb\fP supports both versions of Atari Microsoft BASIC: the +disk\-based version 1 and the cartridge\-based version 2. The language +is the same for both versions, so there\(aqs no need to specify it. +.sp +\fBinput\-file\fP must be a tokenized AMSB program. If no \fBinput\-file\fP is given, +input is read from \fBstdin\fP\&. +.sp +Programs created with \fISAVE "filename" LOCK\fP are autodetected, +and will be listed normally. It\(aqs also possible to convert a LOCKed +program to an unencrypted one, with the \fB\-U\fP option. +.sp +Programs can be "crunched" and "decrunched" with the \fB\-C\fP and \fB\-D\fP +options. +.sp +If no \fBoutput\-file\fP is given, output is to \fBstdout\fP\&. When output +is to a file, the file will be overwritten without prompting if it +already exists. +.sp +By default, output is modern UTF\-8 equivalents of the ATASCII +character set, with ANSI control sequences for inverse video and +color. See the \fB\-M\fP, \fB\-a\fP, \fB\-i\fP, \fB\-u\fP, \fB\-t\fP, \fB\-m\fP, \fB\-s\fP +options to change the output style. +.sp +When listing in color (when the \fB\-M\fP option is not used), +\fBlistamsb\fP\(aqs output is piped through \fBcolorize\-amsb\fP, which must +be available in your \fBPATH\fP\&. +.sp +\fBlistamsb\fP will not write binary data (ATASCII or tokenized BASIC) +directly to a terminal, under any circumstances. +.SH OPTIONS +.SS Operation Modes +.INDENT 0.0 +.TP +.B \fB\-L\fP +LIST program. This is the default, so there\(aqs no need to give this option +normally. See next section for options that control the listing. +.TP +.B \fB\-C\fP +"Crunch" program: remove comments and spaces that occur outside of a +string. The resulting program is tokenized, and is usually 5 to 10 +percent smaller. It should RUN correctly, but will be difficult to +edit in AMSB because its parser requires the spaces. +.sp +The crunched program will always be unLOCKed. +.sp +If any comment\-only lines are the target of GOTO or GOSUB, the +program won\(aqt RUN correctly because all comment\-only lines are +removed. If this happens, you can use the \fB\-k\fP option (see below). +.sp +This option must be used with an \fBoutput\-file\fP, since seeking is done. +None of the other options have any effect with \fB\-C\fP\&. +.TP +.B \fB\-D\fP +"Decrunch" a crunched program. Puts spaces where they\(aqre required for +AMSB\(aqs parser. The resulting program is tokenized, and will be +editable in AMSB. Of course, any comments that were removed during +crunching will not magically be restored (they\(aqre gone). +.sp +The decrunched program will always be unLOCKed. +.sp +This option must be used with an \fBoutput\-file\fP, since seeking is done. +None of the other options have any effect with \fB\-D\fP\&. +.TP +.B \fB\-U\fP +UnLOCK or LOCK the the program. Locked programs are created with +\fISAVE "filename" LOCK\fP\&. The "encryption" is a reciprocal cipher: locking and +unlocking are the same operation (similar to ROT13). The output will +be the locked or unlocked tokenized program (rather than a listing). +.sp +This option must be used with an \fBoutput\-file\fP, a pipe, or +redirection: \fBlistamsb\fP will not write tokenized BASIC to a +terminal. None of the other options have any effect with \fB\-U\fP\&. +.UNINDENT +.SS Options for \fB\-L\fP (list) Mode +.sp +None of these options have any effect when used with \fB\-C\fP, \fB\-D\fP, +or \fB\-U\fP\&. +.INDENT 0.0 +.TP +.B \fB\-a\fP +Output raw ATASCII. This option must be used with an +\fBoutput\-file\fP, a pipe, or redirection: \fBlistamsb\fP will not write +ATASCII to a terminal. \fBcolorize\-amsb\fP is not used, with this option. +.TP +.B \fB\-c\fP +Check only. No output on \fBstdout\fP\&. Diagnostics are still printed on stderr, +and the exit status is unchanged. It\(aqs an error to give an \fBoutput\-file\fP with +this option. +.TP +.B \fB\-i\fP +Input uses Atari XL/XE International Character Set encoding, rather than +ATASCII graphics. +.TP +.B \fB\-u\fP +Use underlining for inverse video (see \fBa8cat\fP(1) for more detail). +.TP +.B \fB\-t\fP +Text mode (see \fBa8cat\fP(1) for more detail). +.TP +.B \fB\-m\fP +Magazine listing mode (see \fBa8cat\fP(1) for more detail). +.TP +.B \fB\-s\fP +Strip bit 7 (inverse video bit; see \fBa8cat\fP(1) for more detail). +.TP +.B \fB\-M\fP +Monochrome listing: disable color syntax highlighting, meaning \fBcolorize\-amsb\fP +is not used. +.TP +.B \fB\-r\fP \fIline\-range\fP +Show only part of the listing. \fIline\-range\fP can be a single line, or +a comma\- or hyphen\-separated pair of starting and ending line numbers (e.g. \fB100,200\fP, or +\fB1000\-2000\fP). +.sp +If the start line number is omitted (e.g. \fB,100\fP), it will be treated as +\fB0\fP (meaning, list from the beginning of the program). If the ending line +number is omitted (e.g. \fB100,\fP), it means "list until the end of the program". +\fB\-r,\fP or \fB\-r\-\fP is equivalent to not using the \fB\-r\fP option at all. +.TP +.B \fB\-n\fP +No empty line. By default, \fBlistamsb\fP prints an empty line at the +start of the output, to match AMSB\(aqs LIST command. +.UNINDENT +.SS Options for \fB\-C\fP (crunch) Mode +.INDENT 0.0 +.TP +.B \fB\-k\fP +Keep comment\-only lines. Normally these are removed. If the program +gives UNDEF\(aqD LINE ERROR, it means the target line was a comment\-only +line that got removed. With \fB\-k\fP, these lines will be kept, although +the actual comments won\(aqt (\fI10 REM HELLO\fP will become \fI10 REM\fP). +.UNINDENT +.SS Utility Options +.INDENT 0.0 +.TP +.B \fB\-v\fP +Verbose output, on \fBstderr\fP\&. May be given twice for extra verbosity, +which shows each line number, its offset, length, and end\-of\-line pointer. +Can be used with any of the mode options (\fB\-C\fP, \fB\-D\fP, \fB\-L\fP, \fB\-U\fP). +.TP +.B \fB\-h\fP, \fB\-\-help\fP +Print built\-in help and exit. +.TP +.B \fB\-\-version\fP +Print version number and exit. +.UNINDENT +.SH DIAGNOSTICS +.sp +All error and warning messages are written to the standard error output. +.SS Fatal errors +.sp +These are errors in the program header at the start of the file. They +generally mean the input isn\(aqt actually an tokenized Atari Microsoft +BASIC file. +.INDENT 0.0 +.IP \(bu 2 +not an AMSB file: first byte not $00 or $01 +.sp +Pretty self\-explanatory: if the file doesn\(aqt begin with a \fI$00\fP or +\fI$01\fP byte, it\(aqs not a tokenized AMSB file. +.IP \(bu 2 +not an AMSB file: too big (\fIN\fP bytes), won\(aqt fit in Atari memory +.sp +The file can\(aqt be a tokenized AMSB file because there was no way +for it to be created. It must be some other kind of file that begins +with a \fI$00\fP byte. +.IP \(bu 2 +not an AMSB file: program size too small (\fIN\fP). Atari BASIC file? +.sp +The program header claims the file is 0, 1, 3, or 4 bytes long. This +is impossible, so this isn\(aqt an AMSB file. A lot of Atari BASIC +programs begin with three \fI$00\fP bytes, so that might be what this is. +.IP \(bu 2 +program length is 2, no code in file (SAVE after NEW) +.sp +Probably, someone did a SAVE when there was no program in memory. It +could also mean this isn\(aqt an AMSB file at all. +.UNINDENT +.SS Warnings +.sp +These are non\-fatal: \fBlistamsb\fP logs the warning to stderr, then +continues processing. +.INDENT 0.0 +.IP \(bu 2 +unexpected EOF, file truncated? +.sp +A tokenized AMSB file always ends with three null bytes (\fI$00\fP). +This file doesn\(aqt. Probably the rest of the file is missing. +.IP \(bu 2 +line \fIL\fP: EOL address \fIA\fP too (low|high) +.sp +Each line begins with the address of the next line. If the address +is below \fI$0700\fP, it\(aqs below the minimum value of \fIMEMLO\fP, which +is impossible. If it\(aqs above \fI$bc1f\fP, it would be in the display +list, screen memory, or OS ROM (also impossible). File is +corrupt, or not an AMSB file. +.IP \(bu 2 +line \fIL\fP: EOL address \fIA\fP <= previous \fIB\fP +.sp +Corrupt file, or not an AMSB file. +.IP \(bu 2 +line \fIL\fP is suspiciously long +.sp +The line is >128 bytes long, but less than 256. AMSB can execute +lines of this length, but it\(aqs impossible to actually enter them +in the editor, because a logical line can\(aqt be longer than 3 +screen lines. Possibly corrupted file. +.IP \(bu 2 +line \fIL\fP is impossibly long +.sp +The line is >= 256 bytes long. AMSB will crash, if you try to +LOAD the file. Corrupted file. +.IP \(bu 2 +line \fIL\fP EOL address doesn\(aqt match actual line length \fIN\fP +.sp +Corrupt file, or not an AMSB file. +.IP \(bu 2 +line number out of order +.sp +Corrupt file, or not an AMSB file. +.IP \(bu 2 +line number out range +.sp +The program contains a line number that\(aqs greater than \fI63999\fP\&. How +did that happen? +.IP \(bu 2 +line \fIL\fP has character \fIC\fP outside of a string. maybe Atari BASIC? +.sp +This happens when ATASCII codes 0 to 31 (\fI$1f\fP) appear in the program. +AMSB can create files like this, but at runtime, it\(aqs a syntax error. +More likely, it means this is an Atari BASIC file. +.IP \(bu 2 +program size doesn\(aqt match size in header +.sp +Might mean this isn\(aqt an AMSB file. If you\(aqre sure it is, it might +be truncated, or part of the file might have been overwritten with +\fI$00\fP bytes. It could also mean the length in the header has somehow +gotten corrupted. +.IP \(bu 2 +trailing garbage at end of file +.sp +Might mean this isn\(aqt an AMSB file. If you\(aqre sure it is, garbage +data has somehow gotten appended to the file, after the three \fI$00\fP +bytes that end the program. Maybe it was downloaded with a crappy +version of XMODEM that pads the last block. The good news is, +AMSB will just ignore the garbage when you LOAD the file, so it +won\(aqt hurt anything. +.IP \(bu 2 +file has \fIN\fP unknown tokens +.sp +Either the file is corrupt, or this is a file from some \fIother\fP variant +of Microsoft BASIC (e.g. Commodore, AppleSoft, GW\-BASIC, TRS\-80). If +you see this warning, you\(aqll also see \fIN\fP <unknown token \fIXX\fP> +messages in the actual listing. +.UNINDENT +.SH ENVIRONMENT +.INDENT 0.0 +.TP +.B \fBCOLORIZE_AMSB\fP +Path to the \fBcolorize\-amsb\fP executable. Can be the absolute path +or just the executable (searched for in \fBPATH\fP). If not set, +defaults to \fIcolorize\-amsb\fP\&. +.UNINDENT +.SH LIMITATIONS +.sp +\fBlistamsb\fP may behave strangely when fed something other than a +tokenized AMSB program, at least if the first byte in the file +is \fB$00\fP or \fB$01\fP\&. Unfortunately, tokenized Atari BASIC (and +variants like Turbo and BASIC XL) begin with \fB$00\fP\&. Usually +you\(aqll get this error: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +not an AMSB file: program size too small (0). Atari BASIC file? +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +\&...but occasionally you may get a bunch of warnings and gibberish +output instead. +.SH EXIT STATUS +.sp +0 for success, 1 if there was an error reading the input (e.g. file +not found), or 2 if the input file had errors or warnings (see +\fBDIAGNOSTICS\fP). +.SH COPYRIGHT +.sp +WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. +.SH AUTHOR +.INDENT 0.0 +.IP B. 3 +Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. +.UNINDENT +.SH SEE ALSO +.sp +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\fP(7). +.sp +Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference +Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. +.\" Generated by docutils manpage writer. +. diff --git a/listamsb.c b/listamsb.c new file mode 100644 index 0000000..3815db2 --- /dev/null +++ b/listamsb.c @@ -0,0 +1,1010 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <errno.h> +#include <string.h> +#include <stdarg.h> +#include <ctype.h> +#include <sys/stat.h> + +#include "atascii.h" +#include "amsbtok.h" + +/* this should always be defined in <stdio.h>, but just in case... */ +#ifndef BUFSIZ +#define BUFSIZ 4096 +#endif + +/* range for one-byte tokens */ +#define MIN_STD_TOK 0x80 /* END */ +#define MAX_STD_TOK 0xf8 /* <   */ + +/* range for 2nd byte of two-byte tokens (1st is always 0xff) */ +#define MIN_EXT_TOK 0xa3 /* SGN */ +#define MAX_EXT_TOK 0xc5 /* STACK */ + +/* AMSB's tokens for "!", "'", REM. used to introduce comments */ +#define TOK_REM    0x98 +#define TOK_SQUOTE 0x9a +#define TOK_BANG   0x9b + +/* various other AMSB tokens */ +#define TOK_ELSE   0x9c +#define TOK_IF     0x97 +#define TOK_THEN   0x9d +#define TOK_AND    0xf3 +#define TOK_OR     0xf4 +#define TOK_NOT    0xf5 + +/* good old Atari EOL character */ +#define EOL 0x9b + +/* every MS BASIC I ever saw had the same line number limit. it's +   kind of arbitrary: why not allow the full range, up to 65535? */ +#define MAX_LINENO 63999 + +/* a program bigger than this can't possibly fit into memory, +   even with cart-based AMSB2 and no DOS loaded. */ +#define MAX_PROGLEN 30000 + +/* there should never be a valid line of BASIC longer than MAX_LINE_LEN +   bytes, since there would be no way to enter it in the editor. AMSB +   uses the standard E: device, which limits you to 3 40-column screen +   lines, or max 120 bytes (after POKE 82,0). there *cannot* be a line +   longer than MAX_LINE_LEN_HARD, because AMSB would crash when you +   try to LOAD such a program. */ +#define MAX_LINE_LEN 0x80 +#define MAX_LINE_LEN_HARD 0xff + +/* a program whose header has a length less than MIN_PROGLEN can't be +   a real AMSB program. EMPTY_PROGLEN is what you get if you +   SAVE when there's no program in memory (right after boot or +   a NEW). The minimum size for a program that actually contains +   code seems to be 5 (for 10 PRINT) */ +#define MIN_PROGLEN 5 +#define EMPTY_PROGLEN 2 + +/* a file shorter than this can't be an AMSB program */ +#define MIN_BYTES 5 + +/* an EOL address below this has to be an error, since +   this is the lowest MEMLO can ever be. */ +#define MIN_PTR 0x0700 + +/* an EOL address higher than this has to be an error, since +	it would overlap the GR.0 display list or the ROMs at $c000 */ +#define MAX_PTR 0xbc1f + +/* SAVE "filename" LOCK does 'encryption' by subtracting every byte +   from this (except the 3-byte header) */ +#define UNLOCK_KEY 0x54 + +#define ENV_VAR "COLORIZE_AMSB" + +const char *self; + +atascii_ctx actx; + +int verbosity =   0;           /* -v */ +int raw_output =  0;           /* -a */ +int check_only =  0;           /* -c */ +int startline =   0;           /* -r */ +int endline   =   65536;       /* -r */ +int unlock_mode = 0;           /* -l */ +int initial_eol = 1;           /* -n */ +int crunch      = 0;           /* -C, -D */ +int decrunch    = 0;           /* -D */ +int keep_rems   = 0;           /* -k */ +int color       = 1;           /* -m */ + +int locked =      0; +int need_pclose = 0; +int bytes_read =  0; +int warnings =    0; +int proglen =     0; +int linecount =   0; +int header_read = 0; +int printing    = 0; +int spacecount  = 0; + +FILE *infile; +FILE *outfile; + +const char *outname = NULL; + +void verbose(int level, const char *fmt, ...) { +	va_list ap; + +	if(verbosity < level) return; + +	va_start(ap, fmt); +	vfprintf(stderr, fmt, ap); +	va_end(ap); +	fputc('\n', stderr); +} + +void finish(int rv); + +#define VA_FUNC(func, prefix, action) \ +	void func(const char *fmt, ...) { \ +		va_list ap; \ +		va_start(ap, fmt); \ +		fprintf(stderr, "%s: %s: ", self, prefix); \ +		vfprintf(stderr, fmt, ap); \ +		va_end(ap); \ +		fputc('\n', stderr); \ +		action; \ +	} + +VA_FUNC(die,    "error",   finish(2)); +VA_FUNC(os_err, "fatal",   exit(1)); +VA_FUNC(warn,   "warning", warnings++); + +void set_self(const char *argv0) { +   char *p; + +   self = argv0; +   p = strrchr(self, '/'); +   if(p) self = p + 1; +} + +const char *plural(int count) { +	return count == 1 ? "" : "s"; +} + +int is_comment_start(unsigned char tok) { +	return (tok == TOK_REM || tok == TOK_SQUOTE || tok == TOK_BANG); +} + +off_t get_file_len(const char *name) { +	struct stat st; +	if(stat(name, &st) != 0) return 0; +	return st.st_size; +} + +/* post-processing: print "summary", exit. called by either die() +	or main() (on normal exit). */ +void finish(int rv) { +	int progsize; + +	verbose(1, "read %d bytes", bytes_read); +	verbose(1, "listed %d line%s", linecount, plural(linecount)); + +	if(header_read) { +		if(!linecount) warn("no lines of code in program"); +		progsize = bytes_read - 3; +		if(proglen == progsize) { +			verbose(1, "file size matches proglen"); +		} else { +			warn("program size %d doesn't match size %d in header,", +					progsize, proglen); +			fputs("          ", stderr); +			if(proglen > progsize) { +				fputs("AMSB will give #136 ERROR and fail to LOAD this file\n", stderr); +			} else { +				fputs("AMSB will stop LOADing before the end of this file\n", stderr); +			} +		} +		if(fgetc(infile) != EOF) warn("trailing garbage at end of file"); +	} else { +		if(feof(infile)) +			warn("file is %d byte%s, too short to be an AMSB program", bytes_read, plural(bytes_read)); +	} + +	if(warnings) { +		fprintf(stderr, "%s: file has %d warning%s\n", +			self, warnings, plural(warnings)); +		rv = 2; +	} + +	if(need_pclose) { +		int got = pclose(outfile); +		verbose(1, "return value from pipe is %d", got); +		if(got != 0) { +			os_err("colorize-amsb child process failed, do you have it on your PATH?"); +		} +	} else { +		fclose(outfile); +		/* if we were writing to actual file and no data was written, rm it */ +		if(outname && get_file_len(outname) == 0) +			unlink(outname); +	} + +	verbose(2, "spaces outside strings/comments: %d (%.1f%%)", +		spacecount, +		(float)(spacecount) / (float)(bytes_read) * 100.0); + +	verbose(1, "exit status: %d (%s)", rv, (rv ? "ERROR" : "OK")); + +	exit(rv); +} + +unsigned char read_byte(void) { +	int c; + +	c = fgetc(infile); + +	if(c < 0) die("unexpected EOF in %s (byte %d), file truncated?", +			(header_read ? "program" : "header"), bytes_read); + +	bytes_read++; +	return (unsigned char)c; +} + +/* "decrypt" a byte from a "SAVE x LOCK" program. */ +unsigned char unlock_byte(unsigned char b) { +	return ((UNLOCK_KEY - b) & 0xff); +} + +/* the "encryption" is the same (process is reciprocal) */ +#define lock_byte(x) unlock_byte(x) + +/* read and (if needed) decrypt a byte from the program. */ +unsigned char read_prog_byte(void) { +	unsigned char b = read_byte(); +	return locked ? unlock_byte(b) : b; +} + +/* read a word from the program, does not decrypt */ +int read_word(void) { +	int w; + +	w = read_byte(); +	w |= (read_byte() << 8); + +	return w; +} + +/* read and (if needed) decrypt a word from the program. */ +int read_prog_word(void) { +	int w; + +	w = read_prog_byte(); +	w |= (read_prog_byte() << 8); + +	return w; +} + +void read_header(void) { +	/* $00 for plain, $01 for SAVE with LOCK */ +	locked = read_byte(); +	if(locked > 1) die("not an AMSB file: first byte is $%02x, not $00 or $01", locked); + +	if(locked) +		verbose(1, "program is locked, decrypting"); +	else +		verbose(1, "program is not locked"); + +	proglen = read_word(); + +	verbose(1, "proglen == %d (%04x)", proglen, proglen); + +	if(proglen > MAX_PROGLEN) { +		die("not an AMSB file: too big (%d bytes), won't fit in Atari memory", proglen); +	} + +	if(proglen == EMPTY_PROGLEN) { +		warn("program length is 2, no code in file (SAVE after NEW)"); +	} else { +		if(proglen < MIN_PROGLEN) { +			die("not an AMSB file: program size too small (%d). Atari BASIC file?", proglen); +		} +	} + +	header_read = 1; +} + +void unknown_token(int tok) { +	int ext; +	if(!printing) return; +	ext = (tok > 0xff); +	tok &= 0xff; +	fprintf(outfile, "<unknown %stoken ", (ext ? "extended " : "")); +	fprintf(outfile, "%s%02x>", (ext ? "$ff ": ""), tok); +} + +void list_char(unsigned char c) { +	if(!printing) return; +	if(raw_output) { +		fputc(c, outfile); +	} else { +		char buf[20]; +		fputs(atascii_a2utf(&actx, c, buf), outfile); +	} +} + +int expand_token(int t, unsigned char *buf); + +int list_token(int tok) { +	unsigned char text[10]; +	if(!expand_token(tok, text)) { +		unknown_token(tok); +		return 0; +	} +	if(printing) fputs((char *)text, outfile); +	return 1; +} + +void list_lineno(int l) { +	/* note that AMSB always puts a space after the line number in LIST */ +	if(printing) fprintf(outfile, "%d ", l); +} + +void start_listing(void) { +	/* AMSB always prints a blank line when it LISTs, so we do, too. +	   unless it's disabled with -n, of course. */ +	if(initial_eol) { +		if(raw_output) { +			fputc(0x9b, outfile); +		} else { +			fputc('\n', outfile); +		} +	} +} + +int read_token(int literal); + +/* meat and potatoes. does the actual detokenizing. gets called once +   per line of code. returns false when it hits the last line, or +   true if there are more lines. */ +int next_line(void) { +	static int last_lineno = -1; +	static int last_ptr = -1; +	int tok, ptr, lineno, was_colon = 0, in_string = 0, in_comment = 0, offset, len; + +	offset = bytes_read; + +	/* pointer to last token on the line, offset by whatever MEMLO +		happened to be when the file was SAVEd. 0 means this is the +		last line. */ +	ptr = read_prog_word(); +	if(!ptr) { +		verbose(1, "end of program"); +		return 0; +	} + +	lineno = read_prog_word(); +	verbose(2, "found line %d, offset %d, end-of-line %d", lineno, offset, ptr); + +	printing = (lineno >= startline) && (lineno <= endline); + +	if(ptr < MIN_PTR) { +		warn("line %d: EOL address $%04x too low (<$%04x)", lineno, ptr, MIN_PTR); +	} else if(ptr >= MAX_PTR) { +		warn("line %d: EOL address $%04x too high (>$%04x)", lineno, ptr, MAX_PTR); +	} + +	if(last_ptr != -1) { +		if(ptr <= last_ptr) { +			warn("line %d: EOL address $%04x <= previous $%04x", lineno, ptr, last_ptr); +		} +	} + +	if(lineno <= last_lineno) { +		warn("line number out of order (%d <= %d)", lineno, last_lineno); +	} + +	if(lineno > MAX_LINENO) { +		warn("line number out range (%d > %d)", lineno, MAX_LINENO); +	} + +	last_lineno = lineno; + +	list_lineno(lineno); + +	/* walk and print the tokens. when we hit a null byte, break out of the +	   loop, we're done with this line. */ +	while(1) { +		tok = read_token(in_string || in_comment); + +		if(in_string) { +			if(tok == 0x00) { +				/* null byte ends both the string and the line of code. +				   don't print a closing quote because AMSB doesn't. */ +				break; +			} else if(tok == '|') { +				/* pipe is how AMSB stores the closing quote. end the string +				   but not the line of code, and print a " character. */ +				in_string = 0; +				list_char('"'); +			} else { +				/* normal string character. */ +				list_char(tok); +				/* one " character embedded in a string gets printed as "" */ +				if(tok == '"') list_char(tok); +			} +			continue; +		} else if(in_comment) { +			/* null byte ends both the comment and the line of code. */ +			if(tok == 0x00) break; +			list_char(tok); +			continue; +		} + +		if(was_colon) { +			if(tok != TOK_SQUOTE && tok != TOK_BANG && tok != TOK_ELSE) { +				list_char(':'); +			} +			was_colon = 0; +		} + +		if(tok == ':') { +			/* statement separator. don't print the colon yet, the next token +			   might be ELSE or a ! or ' for a comment */ +			was_colon = 1; +		} else if(tok == '"') { +			/* begin string. strings start but *don't end* with a double-quote */ +			in_string = 1; +			list_char(tok); +		} else if(tok >= 0x80) { +			if(!list_token(tok)) +				warn("unknown %stoken %s$%02x at line %d", +						(tok > 0xff ? "extended " : ""), +						(tok > 0xff ? "$ff " : ""), +						tok & 0xff, +						lineno); +			if(is_comment_start(tok)) in_comment = 1; +		} else { +			/* null byte means the line of code is done */ +			if(!tok) break; +			if(tok < 0x20) { +				/* ATASCII graphics outside of a string */ +				warn("line %d has character %d outside of a string, maybe Atari BASIC?", +						lineno, tok); +			} +			if(tok == ' ') spacecount++; +			list_char(tok); +		} +	} + +	len = bytes_read - offset; + +	verbose(2, "      line %d length: %d", lineno, len); + +	if(len > MAX_LINE_LEN) { +		int hard = len > MAX_LINE_LEN_HARD; +		warn("line %d is %s long (length %d > %d)", +			lineno, +			hard ? "impossibly" : "supiciously", +			len, +			hard ? MAX_LINE_LEN_HARD : MAX_LINE_LEN); +	} + +	if(last_ptr != -1) { +		int plen = ptr - last_ptr; +		if(len != plen) { +			warn("line %d: EOL address doesn't match actual line length %d (should be %d)", lineno, len, plen); +		} +	} + +	last_ptr = ptr; + +	list_char(EOL); + +	if(!raw_output && (actx.inv)) { +		char buf[20]; +		fputs(atascii_a2utf(&actx, ATA_CHR_FINISH, buf), outfile); +	} + +	return 1; +} + +/* when this gets called, input and output are open, read_header() +   has already run. "locking" and "unlocking" are the same +   transform, so this function does both. +   note that *no* checking of the program code is done here, so +   there's no need to finish() afterwards. */ +void unlock_program(void) { +	int c; + +	/* do not convert this to warn() (it ain't a warning) */ +	fprintf(stderr, "%s: program is %slocked, output will be %slocked\n", +		self, locked ? "" : "un", locked ? "un" : ""); + +	/* 3-byte header: 0 for unlocked, 1 for locked */ +	fputc(!locked, outfile); +	/* LSB of program length (not encrypted) */ +	fputc(proglen & 0xff, outfile); +	/* MSB */ +	fputc((proglen >> 8) & 0xff, outfile); + +	/* rest of file, including trailing nulls, is transformed */ +	while( (c = fgetc(infile)) >= 0) +		fputc(unlock_byte(c & 0xff), outfile); + +	fclose(outfile); +	exit(0); +} + +void write_code(int addr, int lineno, const unsigned char *code) { +	fputc(addr & 0xff, outfile); +	fputc((addr >> 8) & 0xff, outfile); +	fputc(lineno & 0xff, outfile); +	fputc((lineno >> 8) & 0xff, outfile); +	fputs((char *)code, outfile); +	fputc(0x00, outfile); +} + +int comment_only_line(const unsigned char *code) { +	if(code[0] == TOK_REM) return 1; +	if(code[0] == ':') { +		if(code[1] == TOK_SQUOTE || code[1] == TOK_BANG) +			return 1; +	} +	return 0; +} + +int crunch_line(void) { +	unsigned char code[MAX_LINE_LEN_HARD + 1], byte; +	int lineno, ptr, codelen = 0, in_string = 0, in_comment = 0, commentstart = 0; +	static int addr = 0x700; /* doesn't really matter where */ + +	ptr = read_prog_word(); +	if(!ptr) return -1; +	lineno = read_prog_word(); + +	verbose(2, "crunching line %d", lineno); + +	while(1) { +		if(codelen >= MAX_LINE_LEN_HARD) +			die("line %d too long, crunching failed", lineno); +		byte = read_prog_byte(); + +		if(byte != 0) { +			if(in_string) { +				if(byte == '|') +					in_string = 0; +			} else if(in_comment) { +				continue; +			} else { +				if(byte == '"') +					in_string = 1; +				else if(is_comment_start(byte)) { +					in_comment = 1; +					commentstart = codelen; +				} +				else if(byte == ' ') +					continue; +			} +		} + +		code[codelen++] = byte; +		if(byte == 0) break; +	} + +	/* omit comment-only lines */ +	if(!keep_rems) { +		if(comment_only_line(code)) { +			verbose(1, "removing comment-only line %d", lineno); +			return 0; +		} +	} + +	/* omit trailing comments */ +	if(commentstart > 1) { +		code[commentstart - 1] = 0; /* null out the colon before the comment */ +		codelen = commentstart; + +		/* removing the comment from this: 10 PRINT :! BLAH +		   ...leaves a trailing colon. get rid of it if needed. */ +		if(codelen >= 2) { +			if(code[codelen - 2] == ':') { +				code[codelen - 2] = 0; +				codelen--; +			} +		} +	} + +	codelen += 4; /* account for ptr and lineno */ +	addr += codelen; + +	write_code(addr, lineno, code); + +	return codelen; +} + +int expand_token(int t, unsigned char *buf) { +	const char *result; + +	if(t < 0x80) { +		buf[0] = t; +		buf[1] = 0; +		return 1; +	} + +	if(t > 0xff) { +		t &= 0xff; +		if(t > MAX_EXT_TOK) +			return 0; +		result = ext_tokens[t - MIN_EXT_TOK]; +	} else { +		if(t > MAX_STD_TOK) +			return 0; +		result = std_tokens[t - MIN_STD_TOK]; +	} + +	strcpy((char *)buf, result); +	return 1; +} + +int read_token(int literal) { +	int tok = read_prog_byte(); +	if(literal) return tok; +	if(tok == 0xff) { +		tok <<= 8; +		tok |= read_prog_byte(); +	} +	return tok; +} + +int token_is_extended(int tok) { +	return tok > 0xff; +} + +int append_token(int tok, unsigned char *buf, int len) { +	if(token_is_extended(tok)) { +		buf[len++] = 0xff; +		buf[len++] = tok & 0xff; +	} else { +		buf[len++] = tok; +	} +	return len; +} + +/* only called during decrunching. +	the tokenizer in AMSB requires spaces to separate keywords +   and variables/numbers. "IF A THEN 100" really needs the spaces +   before and after the A, for example. */ +int need_space_between(int t1, int t2) { +	unsigned char text1[10], text2[10]; +	unsigned char t1last, t2first; + +	if(!t1) return 0; /* start of line */ +	if(!t2) return 0; /* end of line */ +	if(t1 < 0x80 && t2 < 0x80) return 0; /* 2 ASCII chars */ + +	if( !(expand_token(t1, text1) && expand_token(t2, text2)) ) +		die("invalid token in program, decrunching failed"); + +	t1last = text1[strlen((char *)text1) - 1]; /* "PRINT" => "T" */ +	t2first = text2[0];                        /* "PRINT" => "P" */ + +	/* if we already have a space, don't need to add another */ +	if(t1last == ' ' || t2first == ' ') return 0; + +	/* IF, THEN, and operators like AND/OR/NOT always get a +	   space after them, for readability. */ +	switch(t1) { +		case TOK_IF: +		case TOK_THEN: +		case TOK_ELSE: +		case TOK_AND: +		case TOK_OR: +		case TOK_NOT: +			return 1; +		default: break; +	} + +	/* these always get a space before them, for readability. */ +	switch(t2) { +		case TOK_THEN: +		case TOK_AND: +		case TOK_OR: +		case TOK_NOT: +			return 1; +		default: break; +	} + +	if(t1 >= 0x80 && isalnum(t1last)) { +		/* space not really required between OPEN/PRINT/CLOSE and #, +	      but put one there for neatness. */ +		if(t2first == '#') return 1; +		/* same for POKE &52,0 or DATA &FF */ +		if(t2first == '&') return 1; +		/* INPUT "PROMPT";A$ or DATA "FOO" */ +		if(t2first == '"') return 1; +	} + +	/* space not really required between a closing quote and +	   a keyword, but put it in for neatness. examples: +	     OPEN #1,"D:X" INPUT +	     IF A$="FOO" THEN 10 +        PRINT "YOUR IQ IS" IQ +      these look weird without the space after the " */ +	if(isalnum(t2first)) { +		if(t1last == '|') return 1; +		if(t1last == '$') return 1; /* OPEN #1,F$ OUTPUT */ +	} + +	return(isalnum(t1last) && isalnum(t2first)); +} + +int decrunch_line(void) { +	unsigned char code[MAX_LINE_LEN_HARD + 10]; +	int lineno, tok = 0, prev, ptr, codelen = 0, in_string = 0, in_comment = 0; +	static int addr = 0x700; /* doesn't really matter where */ + +	ptr = read_prog_word(); +	if(!ptr) return -1; +	lineno = read_prog_word(); + +	verbose(2, "decrunching line %d", lineno); + +	while(1) { +		if(codelen >= MAX_LINE_LEN_HARD) +			die("line %d too long, decrunching failed", lineno); +		prev = tok; +		tok = read_token(in_string || in_comment); + +		if(tok != 0) { +			if(in_string) { +				if(tok == '|') +					in_string = 0; +			} else if(in_comment) { +				/* NOP */ +			} else { +				if(tok == ' ' || is_comment_start(tok)) { +					verbose(1, "found space/comment at line %d", lineno); +					spacecount++; +				} +				if(tok == '"') { +					in_string = 1; +					if(need_space_between(prev, tok)) +						code[codelen++] = ' '; +				} else if(is_comment_start(tok)) { +					in_comment = 1; +				} else if(prev == ':' && tok == TOK_ELSE) { +					/* special case, ELSE needs a space before the (invisible) +					   colon that comes before it. */ +					code[codelen - 1] = ' '; +					code[codelen++] = prev; +				} else if(need_space_between(prev, tok)) { +					code[codelen++] = ' '; +				} +			} +		} + +		codelen = append_token(tok, code, codelen); +		if(tok == 0) break; +	} + +	codelen += 4; /* account for ptr and lineno */ +	addr += codelen; + +	write_code(addr, lineno, code); + +	return codelen; +} + +/* despite the name, this handles both crunching and decrunching */ +void crunch_program(void) { +	int newproglen = 0, linelen = 0; +	float percent; + +	fputc(0x00, outfile); /* signature (0 = not locked) */ +	fputc(0x00, outfile); /* length LSB (fill in later) */ +	fputc(0x00, outfile); /* length MSB " "             */ + +	while((linelen = decrunch ? decrunch_line() : crunch_line()) != -1) +		newproglen += linelen; + +	/* trailing $00 $00 */ +	fputc(0x00, outfile); +	fputc(0x00, outfile); + +	/* fill in length in header */ +	if(fseek(outfile, 1L, SEEK_SET) < 0) os_err("fseek() failed"); +	newproglen += 2; /* account for trailing $00 $00 */ +	fputc(newproglen & 0xff, outfile); +	fputc((newproglen >> 8) & 0xff, outfile); +	fclose(outfile); + +	/* show the user how the size changed */ +	newproglen += 3; +	percent = 100.0 * (1.0 - (float)newproglen / (float)bytes_read); +	verbose(1, "%scrunched %d byte program to %d bytes (%.1f%% %s)", +			decrunch ? "de" : "", +			bytes_read, +			newproglen, +			percent < 0 ? -percent : percent, +			percent < 0 ? "larger" : "smaller"); + +	if(decrunch && spacecount) +		warn("%d spaces/comments, are you sure it was crunched?", spacecount); +} + +void print_help(void) { +	printf("%s v" VERSION " - detokenize Atari Microsoft BASIC files\n", self); +	puts("By B. Watson <urchlay@slackware.uk>, released under the WTFPL"); +	printf("Usage: %s [[-[acCDUMnviutms] ...] [-r *start,end*]] <file> <outfile>\n", self); +	puts("  -a: raw ATASCII output"); +	puts("  -c: check only (no listing)"); +	puts("  -C: crunch program"); +	puts("  -D: decrunch program"); +	puts("  -U: lock or unlock program"); +	puts("  -M: monochrome listing (no colorization)"); +	puts("  -n: no blank line at start of listing"); +	puts("  -v: verbosity"); +	puts("  -r: only list lines numbered from *start* to *end*"); +	puts("  --help, -h: print this help and exit"); +	puts("  --version:  print version number and exit"); +	puts("  -i -u -t -m -s: same as a8cat (try 'a8cat -h')"); +	puts("file must be a tokenized (SAVEd) AMSB file. if not given, reads from stdin."); +	puts("if outfile not given, writes to stdout"); +} + +void version(void) { +	printf("%s " VERSION "\n", self); +} + +void get_line_range(const char *arg) { +	int val = 0, comma = 0; +	const char *p = arg; + +	while(*p) { +		if(*p >= '0' && *p <= '9') { +			val *= 10; +			val += *p - '0'; +			if(val > MAX_LINENO) { +				os_err("invalid line number for -r (range is 0-%d)", MAX_LINENO); +			} +		} else if(*p == ',' || *p == '-') { +			if(comma) os_err("invalid argument for -r (too many commas)"); +			comma++; +			startline = val; +			val = 0; +		} else { +			if(comma) os_err("invalid argument for -r (only digits and comma allowed)"); +		} +		p++; +	} + +	if(comma) +		endline = val ? val : MAX_LINENO; +	else +		startline = endline = val; + +	if(endline < startline) +		os_err("invalid argument for -r (start > end)"); +} + +void parse_args(int argc, char **argv) { +	int opt, ropt = 0; +	int ata_mode = ATA_MODE_UTF8, ata_flags = ATA_FLAG_NONE, a8catopt = 0; + +	if(argc >= 2) { +		if(strcmp(argv[1], "--help") == 0) { +			print_help(); +			exit(0); +		} else if(strcmp(argv[1], "--version") == 0) { +			version(); +			exit(0); +		} +	} + +	while( (opt = getopt(argc, argv, "MDCnLUlr:cvaiutmshk")) != -1) { +		switch(opt) { +			case 'L': crunch = decrunch = unlock_mode = 0; break; +			case 'D': decrunch =    1; break; +			case 'C': crunch =      1; break; +			case 'l': +			case 'U': unlock_mode = 1; break; +			case 'k': keep_rems   = 1; break; +			case 'c': check_only  = 1; break; +			case 'a': raw_output  = 1; break; +			case 'v': verbosity++    ; break; +			case 'n': initial_eol = 0; break; +			case 'M': color =       0; break; +			case 'h': print_help(); exit(0); +			case 'r': get_line_range(optarg); ropt++; break; +			case 'i': ata_flags |= ATA_FLAG_ICS; a8catopt++; break; +			case 'u': ata_flags |= ATA_FLAG_UNDERLINE; a8catopt++; break; +			case 't': ata_flags |= ATA_FLAG_ICS; a8catopt++; break; +			case 'm': ata_mode = ATA_MODE_MAGAZINE; a8catopt++; break; +			case 's': ata_flags |= ATA_FLAG_STRIP_INVERSE; a8catopt++; break; +			default: print_help(); exit(1); +		} +	} + +	if((unlock_mode + crunch + decrunch) > 1) { +		os_err("only one of -C, -D, -L, -U may be used"); +	} + +	if(keep_rems && !decrunch) { +		warn("-k option ignored since -D not given"); +	} + +	if(unlock_mode || crunch || decrunch) { +		if(!initial_eol || check_only || raw_output || ropt || a8catopt || !color) { +			warn("-[acimMnrstu] options ignored with -U, -C, or -D"); +		} +	} else if(!raw_output) { +		atascii_context_init(&actx, ata_mode, ata_flags); +	} + +	if(optind >= argc) { +		if(isatty(fileno(stdin))) { +			print_help(); +			os_err("can't read binary data from a terminal"); +		} +		freopen(NULL, "rb", stdin); +		infile = stdin; +	} else { +		infile = fopen(argv[optind], "rb"); +		if(!infile) { +			os_err("%s: %s", argv[optind], strerror(errno)); +		} +	} + +	optind++; +	if(optind < argc) { +		/* we were passed an output file */ +		outname = argv[optind]; +		if(check_only) +			os_err("can't use output filename %s with -c", outname); +		if(!freopen(outname, "wb", stdout)) +			os_err("%s: %s", outname, strerror(errno)); +		verbose(1, "redirected stdout to %s", outname); +	} else if(crunch || decrunch) { +		os_err("can't use stdout with -%c, must give an output filename", +			crunch ? 'C' : 'D'); +	} +} + +void open_output() { +	if(check_only) { +		outfile = freopen("/dev/null", "wb", stdout); +		if(!outfile) { +			os_err("/dev/null: %s", strerror(errno)); +		} +		verbose(1, "using /dev/null for output (check_only)"); +	} else if(raw_output || unlock_mode || crunch || decrunch) { +		if(isatty(fileno(stdout))) { +			os_err("refusing to write %s to a terminal", +				(raw_output ? "raw ATASCII" : "tokenized BASIC")); +		} +		outfile = stdout; +		verbose(1, "using stdout for output"); +	} else { +		if(color) { +			char *exe = getenv(ENV_VAR); +			if(!exe) exe = "colorize-amsb"; +			verbose(1, "using pipe for output: %s", exe); +			outfile = popen(exe, "w"); /* "wb" not allowed! */ +			/* we probably never see this error. popen() fails only if +				we feed it an invalid mode, or if fork() or pipe() fails, +				or I suppose if some idjit has done a "rm -f /bin/sh"... +				all other errors are caught at pclose(). */ +			if(!outfile) os_err("|%s: %s", exe, strerror(errno)); +			need_pclose = 1; +		} else { +			outfile = stdout; +		} +	} +} + +int main(int argc, char **argv) { +	set_self(argv[0]); + +	parse_args(argc, argv); + +	open_output(); + +	read_header(); + +	if(unlock_mode) { +		unlock_program(); +		exit(0); /* don't need finish() here, no parsing done */ +	} else if(crunch || decrunch) { +		crunch_program(); +		exit(0); +	} + +	start_listing(); + +	while(next_line()) +		linecount++; + +	finish(0); +	return 0; /* never executes; shuts up gcc warning */ +} diff --git a/listamsb.rst b/listamsb.rst new file mode 100644 index 0000000..5bb5640 --- /dev/null +++ b/listamsb.rst @@ -0,0 +1,313 @@ +======== +listamsb +======== + +------------------------------------------------------------ +List the source of a tokenized Atari Microsoft BASIC program +------------------------------------------------------------ + +.. include:: manhdr.rst + +SYNOPSIS +======== + +listamsb [**-U**] | [**-C** [**-k**]] | [**-D**] | [[**-L**] [**-a**] [**-c**] [**-v**] [**-h**] [**-i**] [**-u**] [**-t**] [**-m**] [**-M**] [**-n**] [**-s**] [**-r** *line-range*] ...] [**input-file**] [**output-file**] + +DESCRIPTION +=========== + +**listamsb** acts like the *LIST* command in Atari Microsoft BASIC. It reads a +tokenized (SAVEd) AMSB program and prints the code in human-readable +format. + +**listamsb** supports both versions of Atari Microsoft BASIC: the +disk-based version 1 and the cartridge-based version 2. The language +is the same for both versions, so there's no need to specify it. + +**input-file** must be a tokenized AMSB program. If no **input-file** is given, +input is read from **stdin**. + +Programs created with *SAVE "filename" LOCK* are autodetected, +and will be listed normally. It's also possible to convert a LOCKed +program to an unencrypted one, with the **-U** option. + +Programs can be "crunched" and "decrunched" with the **-C** and **-D** +options. + +If no **output-file** is given, output is to **stdout**. When output +is to a file, the file will be overwritten without prompting if it +already exists. + +By default, output is modern UTF-8 equivalents of the ATASCII +character set, with ANSI control sequences for inverse video and +color. See the **-M**, **-a**, **-i**, **-u**, **-t**, **-m**, **-s** +options to change the output style. + +When listing in color (when the **-M** option is not used), +**listamsb**\'s output is piped through **colorize-amsb**, which must +be available in your **PATH**\. + +**listamsb** will not write binary data (ATASCII or tokenized BASIC) +directly to a terminal, under any circumstances. + +OPTIONS +======= + +Operation Modes +--------------- + +**-L** +  LIST program. This is the default, so there's no need to give this option +  normally. See next section for options that control the listing. + +**-C** +  "Crunch" program: remove comments and spaces that occur outside of a +  string. The resulting program is tokenized, and is usually 5 to 10 +  percent smaller. It should RUN correctly, but will be difficult to +  edit in AMSB because its parser requires the spaces. + +  The crunched program will always be unLOCKed. + +  If any comment-only lines are the target of GOTO or GOSUB, the +  program won't RUN correctly because all comment-only lines are +  removed. If this happens, you can use the **-k** option (see below). + +  This option must be used with an **output-file**, since seeking is done. +  None of the other options have any effect with **-C**. + +**-D** +  "Decrunch" a crunched program. Puts spaces where they're required for +  AMSB's parser. The resulting program is tokenized, and will be +  editable in AMSB. Of course, any comments that were removed during +  crunching will not magically be restored (they're gone). + +  The decrunched program will always be unLOCKed. + +  This option must be used with an **output-file**, since seeking is done. +  None of the other options have any effect with **-D**. + +**-U** +  UnLOCK or LOCK the the program. Locked programs are created with +  *SAVE "filename" LOCK*. The "encryption" is a reciprocal cipher: locking and +  unlocking are the same operation (similar to ROT13). The output will +  be the locked or unlocked tokenized program (rather than a listing). + +  This option must be used with an **output-file**, a pipe, or +  redirection: **listamsb** will not write tokenized BASIC to a +  terminal. None of the other options have any effect with **-U**. + +Options for **-L** (list) Mode +------------------------------ + +None of these options have any effect when used with **-C**, **-D**, +or **-U**. + +**-a** +  Output raw ATASCII. This option must be used with an +  **output-file**, a pipe, or redirection: **listamsb** will not write +  ATASCII to a terminal. **colorize-amsb** is not used, with this option. + +**-c** +  Check only. No output on **stdout**. Diagnostics are still printed on stderr, +  and the exit status is unchanged. It's an error to give an **output-file** with +  this option. + +**-i** +  Input uses Atari XL/XE International Character Set encoding, rather than +  ATASCII graphics. + +**-u** +  Use underlining for inverse video (see **a8cat**\(1) for more detail). + +**-t** +  Text mode (see **a8cat**\(1) for more detail). + +**-m** +  Magazine listing mode (see **a8cat**\(1) for more detail). + +**-s** +  Strip bit 7 (inverse video bit; see **a8cat**\(1) for more detail). + +**-M** +  Monochrome listing: disable color syntax highlighting, meaning **colorize-amsb** +  is not used. + +**-r** *line-range* +  Show only part of the listing. *line-range* can be a single line, or +  a comma- or hyphen-separated pair of starting and ending line numbers (e.g. **100,200**, or +  **1000-2000**). + +  If the start line number is omitted (e.g. **,100**), it will be treated as +  **0** (meaning, list from the beginning of the program). If the ending line +  number is omitted (e.g. **100,**), it means "list until the end of the program". +  **-r,** or **-r-** is equivalent to not using the **-r** option at all. + +**-n** +  No empty line. By default, **listamsb** prints an empty line at the +  start of the output, to match AMSB's LIST command. + +Options for **-C** (crunch) Mode +-------------------------------- + +**-k** +  Keep comment-only lines. Normally these are removed. If the program +  gives UNDEF'D LINE ERROR, it means the target line was a comment-only +  line that got removed. With **-k**, these lines will be kept, although +  the actual comments won't (*10 REM HELLO* will become *10 REM*). + +Utility Options +--------------- + +**-v** +  Verbose output, on **stderr**. May be given twice for extra verbosity, +  which shows each line number, its offset, length, and end-of-line pointer. +  Can be used with any of the mode options (**-C**, **-D**, **-L**, **-U**). + +**-h**\, **--help** +  Print built-in help and exit. + +**--version** +  Print version number and exit. + +DIAGNOSTICS +=========== + +All error and warning messages are written to the standard error output. + +Fatal errors +------------ + +These are errors in the program header at the start of the file. They +generally mean the input isn't actually an tokenized Atari Microsoft +BASIC file. + +- not an AMSB file: first byte not $00 or $01 + +  Pretty self-explanatory: if the file doesn't begin with a *$00* or +  *$01* byte, it's not a tokenized AMSB file. + +- not an AMSB file: too big (*N* bytes), won't fit in Atari memory + +  The file can't be a tokenized AMSB file because there was no way +  for it to be created. It must be some other kind of file that begins +  with a *$00* byte. + +- not an AMSB file: program size too small (*N*). Atari BASIC file? + +  The program header claims the file is 0, 1, 3, or 4 bytes long. This +  is impossible, so this isn't an AMSB file. A lot of Atari BASIC +  programs begin with three *$00* bytes, so that might be what this is. + +- program length is 2, no code in file (SAVE after NEW) + +  Probably, someone did a SAVE when there was no program in memory. It +  could also mean this isn't an AMSB file at all. + +Warnings +-------- + +These are non-fatal: **listamsb** logs the warning to stderr, then +continues processing. + +- unexpected EOF, file truncated? + +  A tokenized AMSB file always ends with three null bytes (*$00*\). +  This file doesn't. Probably the rest of the file is missing. + +- line *L*: EOL address *A* too (low|high) + +  Each line begins with the address of the next line. If the address +  is below *$0700*, it's below the minimum value of *MEMLO*, which +  is impossible. If it's above *$bc1f*, it would be in the display +  list, screen memory, or OS ROM (also impossible). File is +  corrupt, or not an AMSB file. + +- line *L*: EOL address *A* <= previous *B* + +  Corrupt file, or not an AMSB file. + +- line *L* is suspiciously long + +  The line is >128 bytes long, but less than 256. AMSB can execute +  lines of this length, but it's impossible to actually enter them +  in the editor, because a logical line can't be longer than 3 +  screen lines. Possibly corrupted file. + +- line *L* is impossibly long + +  The line is >= 256 bytes long. AMSB will crash, if you try to +  LOAD the file. Corrupted file. + +- line *L* EOL address doesn't match actual line length *N* + +  Corrupt file, or not an AMSB file. + +- line number out of order + +  Corrupt file, or not an AMSB file. + +- line number out range + +  The program contains a line number that's greater than *63999*. How +  did that happen? + +- line *L* has character *C* outside of a string. maybe Atari BASIC? + +  This happens when ATASCII codes 0 to 31 (*$1f*\) appear in the program. +  AMSB can create files like this, but at runtime, it's a syntax error. +  More likely, it means this is an Atari BASIC file. + +- program size doesn't match size in header + +  Might mean this isn't an AMSB file. If you're sure it is, it might +  be truncated, or part of the file might have been overwritten with +  *$00* bytes. It could also mean the length in the header has somehow +  gotten corrupted. + +- trailing garbage at end of file + +  Might mean this isn't an AMSB file. If you're sure it is, garbage +  data has somehow gotten appended to the file, after the three *$00* +  bytes that end the program. Maybe it was downloaded with a crappy +  version of XMODEM that pads the last block. The good news is, +  AMSB will just ignore the garbage when you LOAD the file, so it +  won't hurt anything. + +- file has *N* unknown tokens + +  Either the file is corrupt, or this is a file from some *other* variant +  of Microsoft BASIC (e.g. Commodore, AppleSoft, GW-BASIC, TRS-80). If +  you see this warning, you'll also see *N* <unknown token *XX*> +  messages in the actual listing. + +ENVIRONMENT +=========== + +**COLORIZE_AMSB** +  Path to the **colorize-amsb** executable. Can be the absolute path +  or just the executable (searched for in **PATH**). If not set, +  defaults to *colorize-amsb*. + + +LIMITATIONS +=========== + +**listamsb** may behave strangely when fed something other than a +tokenized AMSB program, at least if the first byte in the file +is **$00** or **$01**. Unfortunately, tokenized Atari BASIC (and +variants like Turbo and BASIC XL) begin with **$00**. Usually +you'll get this error:: + +  not an AMSB file: program size too small (0). Atari BASIC file? + +\.\.\.but occasionally you may get a bunch of warnings and gibberish +output instead. + +EXIT STATUS +=========== + +0 for success, 1 if there was an error reading the input (e.g. file +not found), or 2 if the input file had errors or warnings (see +**DIAGNOSTICS**). + +.. include:: manftr.rst @@ -27,38 +27,143 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "LISTBAS" 1 "2024-06-26" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "LISTBAS" 1 "2025-03-26" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  listbas \- List the source of a tokenized Atari 8-bit BASIC program  .SH SYNOPSIS  .sp -listbas [\fB\-v\fP] [\fB\-i\fP] [\fB\-a\fP | \fB\-u\fP ] \fBinput\-file\fP +listbas [\fB\-a\fP | \fB\-d\fP | \fB\-m\fP | \fB\-x\fP | \fB\-U\fP] [\fB\-B\fP] [\fB\-u\fP] [\fB\-i\fP] [\fB\-l\fP] [\fB\-n\fP | \fB\-C\fP] [\fB\-v\fP] [\fB\-c\fP \fIcolors\fP] [\fB\-r\fP \fIline\-range\fP] \fBinput\-file\fP  .SH DESCRIPTION  .sp  \fBlistbas\fP acts like the \fILIST\fP command in BASIC. It reads a  tokenized (SAVEd) BASIC program and prints the code in human\-readable  format.  .sp -By default, output is piped through \fBa8eol\fP(1), to convert ATASCII -characters to human\-readable sequences. Raw ATASCII and Unicode output -are also available. +By default, output is Unicode in UTF\-8 encoding, with ANSI/VT220 +escape sequences for inverse video and color syntax highlighting.  .sp -\fBa8eol\fP(1) and \fBa8utf8\fP(1) (for \fB\-u\fP) are run as external -processes. The executables are searched for first in the current -directory, and then in \fIPATH\fP\&. +\fBlistbas\fP supports several BASIC dialects used on the Atari. By +default, the BASIC dialect is autodetected by running \fBwhichbas\fP(1) +as an external process. To override this, see the \fB\-b\fP option, below. +.sp +Note: OSS Integer BASIC is \fInot\fP to be confused with Apple II Integer BASIC!  .SH OPTIONS -.SS List options +.SS BASIC options  .INDENT 0.0  .TP +.B \fB\-b\fP +Set the BASIC dialect the program will be treated as. This disables +autodetection. Supported dialects are: +.INDENT 7.0 +.TP +.B \fB\-ba\fP +Atari BASIC. +.TP +.B \fB\-ba+\fP +OSS BASIC/A+. +.TP +.B \fB\-bic\fP +OSS Integer BASIC, cartridge version. +.TP +.B \fB\-bid\fP +OSS Integer BASIC, disk version (uses different tokens from the cart). +.TP +.B \fB\-bt\fP +Turbo BASIC XL. +.TP +.B \fB\-bxl\fP +OSS BASIC XL. +.TP +.B \fB\-bxe\fP +OSS BASIC XE. +.UNINDENT +.sp +See \fBBASIC DIALECTS\fP below for details. +.TP +.B \fB\-r\fP \fIline\-range\fP +Show only part of the listing. \fIline\-range\fP can be a single line, or +a comma\-separated pair of starting and ending line numbers (e.g. \fB100,200\fP). +If the start line number is omitted (e.g. \fB,100\fP), it will be treated as +\fB0\fP (meaning, list from the beginning of the program). If the ending line +number is omitted (e.g. \fB100,\fP), it means "list until the end of the program". +\fB\-r,\fP is equivalent to not using the \fB\-r\fP option at all. +.TP  .B \fB\-i\fP -Include the immediate mode command (line 32768) in the output. +Include the immediate mode command (line 32768) in the output. This option has no +effect if the \fB\-r\fP option is used to stop listing before the end of the program. +.TP +.B \fB\-l\fP +Do not print line numbers at the start of each line. \fBGOTO\fP, \fBGOSUB\fP, +\fBTRAP\fP, and \fBTHEN\fP target line numbers are still printed. +.TP +.B \fB\-t\fP +Do not indent, if the program is Turbo BASIC, BASIC/A+, BASIC XL, or BASIC XE. +By default, indentation is enabled for everything but Atari BASIC. +If you want to indent an Atari BASIC program, use \fB\-bt\fP or \fB\-bxe\fP\&. +Integer BASIC indentation is not yet supported. +.TP +.B \fB\-k\fP +Do not print keywords in mixed case (e.g. \fBPrint\fP, \fBGraphics\fP), +for BASIC XL, BASIC XE, or Integer BASIC. Equivalent of \fBSET 5,0\fP\&. +.UNINDENT +.SS Output modes +.sp +The default output mode is Unicode/UTF\-8 representations of ATASCII +characters. +.INDENT 0.0 +.TP +.B \fB\-U\fP +Output Unicode/UTF\-8 representations of ATASCII characters. This is +the default output mode; the \fB\-U\fP option is provided so you can +override \fB\-a\fP, \fB\-d\fP, \fB\-m\fP, \fB\-x\fP in \fBLISTBAS_OPTS\fP (see +\fBENVIRONMENT\fP, below). +.TP +.B \fB\-x\fP +Output Unicode/UTF\-8 representations of the XL International Character +Set, rather than ATASCII.  .TP  .B \fB\-a\fP  Output raw ATASCII; no translation to the host character set. Must be -used with redirection; \fBlistbas\fP will not write ATASCII to the terminal. +used with redirection or a pipe; \fBlistbas\fP will not write ATASCII to the terminal. +ATASCII output does not support color (because ATASCII doesn\(aqt). +.TP +.B \fB\-m\fP +Output "magazine listing". See the \fB\-m\fP option for \fBa8cat\fP(1) for details. +Color is supported in this mode. No Unicode/UTF\-8 characters are printed in +this mode. +.TP +.B \fB\-d\fP +Print dots rather than Unicode/UTF\-8 characters. Color and inverse +video are still supported in this mode, but no Unicode/UTF8 characters +are printed. Use this only if your terminal \fIreally\fP doesn\(aqt support +Unicode (e.g. \fBrxvt\fP(1))... but even then, \fB\-m\fP is preferred, +because you can\(aqt tell what the dots are supposed to represent. +.UNINDENT +.SS Other display options +.INDENT 0.0 +.TP +.B \fB\-C\fP +Enable color syntax highlighting. This option is enabled by default; +the \fB\-C\fP option is provided so you can override \fB\-n\fP in +\fBLISTBAS_OPTS\fP (see \fBENVIRONMENT\fP, below). +.TP +.B \fB\-n\fP +No color. Has no effect if \fB\-a\fP is in effect, since this +mode doesn\(aqt support color anyway. Disabling color does not +disable reverse video. +.TP +.B \fB\-B\fP +Use bold for color output. This may make it easier to read on +some terminals. Or, it may hurt your eyes...  .TP  .B \fB\-u\fP -Use \fBa8utf8\fP(1) to translate ATASCII to ASCII. +Use underlining for inverse video, rather than reverse video output. +.TP +.B \fB\-c\fP \fIcolors\fP +Customize the color scheme. See \fBCOLORS\fP, below, for the format of the +\fIcolors\fP argument. Once you\(aqve found a set of colors you like, +you can place this option in the \fBLISTBAS_OPTS\fP environment variable +to use your colors by default. See \fBENVIRONMENT\fP, below.  .UNINDENT  .SS General Options  .INDENT 0.0 @@ -73,24 +178,212 @@ Print version number and exit.  Verbose operation. When displaying a number in verbose mode, it will  be prefixed with \fI$\fP if it\(aqs in hex, or no prefix for decimal.  .UNINDENT +.SH BASIC DIALECTS +.sp +Note that Turbo, BASIC XL, and BASIC XE are all proper supersets of +Atari BASIC, so you can view an Atari BASIC program with any of +\fB\-bt\fP, \fB\-bxl\fP, or \fB\-bxe\fP\&. Also, BASIC XE is a superset of BASIC XL +(provided BASIC XL\(aqs disk\-based toolkit extended commands are not used), +so you can usually use \fB\-bxe\fP on a BASIC XL program. +.sp +BASIC/A+ uses incompatible tokens, so its programs can\(aqt be viewed as +any of the others. Trying to do this results in a very funny\-looking +listing, with commands like \fBPOSITION\fP with no arguments (or with a +string argument, or \fBPOSITION #6;"string"\fP; it so happens A+ uses the +same token number for \fBPOSITION\fP that the other BASICs use for +\fB?\fP). The same thing would happen if you booted BASIC/A+ on an Atari +and tried to \fBLOAD\fP an Atari BASIC program. I can\(aqt help but think +this is a major reason BASIC/A+ didn\(aqt sell that well (fortunately, +OSS realized their mistake and fixed it in BASIC XL). +.sp +OSS Integer BASIC also uses incompatible tokens. However, it uses a +different signature (first byte of file is \fB$77\fP), so it will be +reliably autodetected. The disk and cartridge versions of Integer +BASIC use different tokens; this is also autodetected pretty +reliably. If the code doesn\(aqt make sense, try \fB\-bic\fP or \fB\-bid\fP +to override the autodetection. +.sp +If you see lots of "bad token XX" messages, or if the code +just doesn\(aqt make any sense, you\(aqre using the wrong BASIC +option. \fBwhichbas\fP(1) can usually detect the BASIC a program was +written in, but if the results are ambiguous, \fBlistbas\fP will assume +Turbo BASIC XL. If this is wrong, use \fB\-bxl\fP or \fB\-bxe\fP to force +the issue. +.SH COLORS +.sp +Color output only works on terminal emulators (or real terminals) +that support ANSI/VT220 style escape codes. This includes all modern +terminal emulators, and most not\-so\-modern ones in the UNIX world. See +\fBNOTES\fP for a list of tested terminal emulators. +.sp +You can customize the colors by using the \fB\-c\fP \fIcolors\fP option, either +on the command line, or in the \fBLISTBAS_OPTS\fP environment variable. +\fIcolors\fP is a string of exactly 8 characters, each of which must be the +digits \fI0\fP through \fI7\fP to specify a color, or the letter \fIn\fP to specify +no color. +.sp +The colors are the standard ANSI ones, plus \fIn\fP: +.INDENT 0.0 +.TP +.B \fI0\fP +Black. +.TP +.B \fI1\fP +Red. +.TP +.B \fI2\fP +Green. +.TP +.B \fI3\fP +Yellow (or brown/orange, on some terminals). +.TP +.B \fI4\fP +Blue. +.TP +.B \fI5\fP +Purple (aka violet). +.TP +.B \fI6\fP +Cyan. +.TP +.B \fI7\fP +White. +.TP +.B \fIn\fP +No custom color. Output will be in the terminal\(aqs default foreground color. +.UNINDENT +.sp +The order they\(aqre used in the \fIcolors\fP argument is: +.INDENT 0.0 +.TP +.B \fB1\fP +BASIC keywords. Default: \fI3\fP (yellow). +.TP +.B \fB2\fP +Operators, including quotes around strings and commas between \fBDATA\fP items. Default: \fI2\fP (green). +.TP +.B \fB3\fP +Functions. Default: \fI5\fP (purple). +.TP +.B \fB4\fP +Constants (numeric or string). Default: \fI1\fP (red). +.TP +.B \fB5\fP +Line numbers (at the start of a line only; \fBGOTO\fP and \fBGOSUB\fP line numbers +are constants). Default: \fI6\fP (cyan). +.TP +.B \fB6\fP +\fBREM\fP text. Default: \fI4\fP (blue). +.TP +.B \fB7\fP +\fBDATA\fP items (but not the commas between them). Default: \fI6\fP (cyan). +.TP +.B \fB8\fP +Variable names. Default: \fIn\fP (uncolorized). +.UNINDENT +.sp +So, the default color scheme is equivalent to: +.INDENT 0.0 +.INDENT 3.5 +\fB\-c\fP \fI3251646n\fP +.UNINDENT +.UNINDENT +.sp +Black and white are not used by default because presumably, one or the +other is the background color of the terminal.  .SH NOTES +.SS Indentation +.sp +The indentation isn\(aqt all that well\-tested yet, but so far it seems work +correctly. The \fB\-t\fP option is the equivalent of \fB*L\-\fP for Turbo, +or \fBSET 12,0\fP for BXL/BXE. The different BASICs have different +indentation rules; try viewing the same Atari BASIC program with +\fB\-bt\fP, \fB\-bxl\fP, and \fB\-bxe\fP to compare them. +.sp +\fBlistbas \-t\fP is also (as far as I know) the only way to \fBLIST\fP +a BASIC/A+ program without indentation, since BASIC/A+ itself doesn\(aqt +have a way to disable it. +.sp +Turbo BASIC, at least, will "max out" the indentation level at some +point. Once there are 60 or so levels of indent, it stops adding +more. \fBlistbas\fP doesn\(aqt emulate this behaviour (shouldn\(aqt be a +problem, it\(aqs a pathological case). +.sp +BASIC XL actually does indentation within a line. If you write: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10 IF A:IF B:IF C:REM +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +\&...BXL lists it as: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10   If A:  If B:  If C:Rem +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +\fBlistbas\fP only indents at the start of a line, so this behaviour is +not emulated. +.sp +One thing \fBlistbas\fP gets right: the \fBLIST\fP command in Turbo, A+, +BXL, and BXE always starts out with 0 indent spaces, if you\(aqre only +listing part of a program. BXE example: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10 While 1 +20   If Peek(764)<>255 +30     ? "SOMEONE PRESSED A KEY":Poke 764,255 +40   Endif +50 Endwhile +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +\&...but if you give a \fBLIST 30\fP in BXE, you\(aqll get line 30 without any +indentation. \fBlistbas\fP does this, too, if you use the \fB\-r\fP option. +.SS Protected Programs  .sp  \fBlistbas\fP will refuse to operate on a LIST\-protected program with  scrambled variable names. For code\-protected programs, it will stop at  the line with the invalid offset. Use \fBunprotbas\fP(1) to remove the  protection. +.SS Comparison to chkbas  .sp  \fBlistbas\fP is similar to Jindroush\(aqs \fBchkbas\fP(1). The main differences are:  .INDENT 0.0  .IP \(bu 2 -\fBlistbas\fP only supports Atari BASIC, not Turbo BASIC or BASIC XL/XE. +\fBlistbas\fP prints ATASCII graphics as Unicode equivalents, so the listing +looks very similar to how it would appear on the Atari. +.IP \(bu 2 +\fBlistbas\fP does color syntax highlighting. +.IP \(bu 2 +\fBlistbas\fP supports OSS BASIC/A+ and Integer BASIC in addition to Turbo and BXL/BXE. +.IP \(bu 2 +\fBlistbas\fP indents BASIC/A+, Turbo, BXL, and BXE code, just like the +actual BASICs do.  .IP \(bu 2  \fBlistbas\fP doesn\(aqt show information about the variables. Use \fBvxrefbas\fP(1)  for that.  .IP \(bu 2 -\fBlistbas\fP will not write ATASCII data to your terminal. Instead, it uses -\fBa8eol\fP(1) or \fBa8utf8\fP(1) to convert the output to something human\-readable -that won\(aqt confuse the terminal. +\fBlistbas\fP will not write ATASCII data to your terminal. By default, it +converts ATASCII characters into Unicode/UTF\-8 characters +that won\(aqt confuse the terminal. When outputting raw ATASCII (\fB\-a\fP option), +it refuses to run if standard output is a terminal.  .IP \(bu 2  \fBlistbas\fP only lists line 32768 (the immediate mode command) if  specifically asked to do so. @@ -98,11 +391,84 @@ specifically asked to do so.  \fBlistbas\fP doesn\(aqt print a banner on startup.  .IP \(bu 2  \fBlistbas\fP tells you if the program is protected, and refuses to operate -on variable\-protected programs. +on variable\-protected programs. For code\-protected programs, it lists +the program up to the "poisoned" line (normally the last line). +.UNINDENT +.SS Terminal Support +.sp +The color and inverse/bold/underline support assumes your terminal supports +ANSI/VT220 escape codes... but it does \fInot\fP use \fBcurses\fP(3X) or +\fBterminfo\fP(5), or even look at \fBTERM\fP in the environment. It just +blindly emits the escape codes. Likewise, Unicode characters are printed +in UTF\-8 encoding, without actually checking whether the terminal or the +current locale supports UTF\-8. +.sp +\fBlistbas\fP has been tested and is known to work in at least these +terminals: +.INDENT 0.0 +.INDENT 3.5 +\fBrxvt\-unicode\fP, aka \fBurxvt\fP\&. This is the terminal the author uses. +.sp +\fBxterm\fP \- tested frequently. Requires the XTerm.locale resource +to be set to \fBUTF\-8\fP (e.g. in \fB~/.Xdefaults\fP), or the \fB\-lc\fP +and/or \fB\-en UTF\-8\fP command line options. +.sp +\fBLinux console\fP \- works fine, but good luck finding a font with +all the Unicode graphics characters. Better use \fB\-m\fP\&. +.sp +\fBkitty\fP \- very fancy terminal emulator that supports both X11 and +Wayland. \fBlistbas\fP was only tested on X11. +.sp +\fBxfce4\-terminal\fP \- version 0.8.10, with XFCE4 4.16.0. +.sp +\fBkonsole\fP \- the KDE terminal, from KDE 5.90. +.sp +\fBgnome\-terminal\fP \- version 3.43.90. +.sp +\fBst\fP \- minimal terminal from suckless.org, version 0.9.2. +.sp +\fBmlterm\fP \- version 3.9.3. +.sp +\fBkmscon\fP \- version 9.0.0. \fI\%https://github.com/Aetf/kmscon\fP +.sp +\fBfbterm\fP \- version 1.8. \fI\%https://github.com/sfzhi/fbterm\fP +.UNINDENT +.UNINDENT +.sp +Also, \fBrxvt\fP and \fBaterm\fP don\(aqt support Unicode, but they will +otherwise work (display color and inverse) with the \fB\-m\fP or \fB\-d\fP +options to \fBlistbas\fP\&. +.SS HTML Output +.sp +See \fBabas2html\fP(1). +.SH ENVIRONMENT +.INDENT 0.0 +.TP +.B \fBLISTBAS_OPTS\fP +If this environment variable is set, \fBlistbas\fP parses its value as though +the contents were placed on the command line as options, preceding any actual +option. Example: +.INDENT 7.0 +.INDENT 3.5 +.sp +.nf +.ft C +export LISTBAS_OPTS="\-c123456 \-d" +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +If you place the above line in your shell\(aqs startup script, \fBlistbas\fP will +use your custom color scheme, and will default to the "dots" output mode. If +you then run \fBlistbas\fP the \fB\-c\fP and/or \fB\-x\fP, \fB\-m\fP options, the options +on the command line will override the environment.  .UNINDENT  .SH EXIT STATUS  .sp -0 for success, 1 for failure. +0 for success, 1 if there was an error reading the input (e.g. file +not found), or 2 if the input file has invalid tokens (if this +happens, you will also see a warning about it on stderr).  .SH COPYRIGHT  .sp  WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. @@ -113,32 +479,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -8,75 +8,315 @@  #include <math.h>  #include <errno.h> +#include <sys/wait.h> +  #include "bas.h"  #include "bcdfp.h"  #include "tokens.h" +#include "turbo_tokens.h" +#include "aplus_tokens.h" +#include "bxl_tokens.h" +#include "bxe_tokens.h" +#include "int_tokens.h" +#include "int_disk_tokens.h" +#include "atables.h" +#include "whichbas.h" + +#define B_ATARI SRET_ATARI +#define B_TURBO SRET_TURBO +#define B_APLUS SRET_APLUS +#define B_BXL   SRET_BXL +#define B_BXE   SRET_BXE +#define B_INT_C SRET_OSSINT_CART +#define B_INT_D SRET_OSSINT_DISK + +#define COLOR_FMT "\x1b[%d;3%dm"  /* 1st %d is 1 for bold, 2nd is color */ + +#define COLOR_OFF "\x1b[0m" /* clears inverse, too! */ +#define INV_OFF   "\x1b[0m" /* clears color, too! */ + +/* These would be better to use, allow turning off color and inverse +   independently, but are not as widely supported by various terminals. */ +/* #define COLOR_OFF "\x1b[39;49m" */ +/* #define INV_OFF   "\x1b[27m"" */ + +#define INV_ON   "\x1b[7m"  /* goes all the way back to the original VT100 */ +#define ULINE_ON "\x1b[4m" + +#define MAG_INV  "{inv}" +#define MAG_NORM "{norm}" + +/* colors. */ +#define NO_COLOR -1 +#define C_RED     1 +#define C_GREEN   2 +#define C_YELLOW  3 +#define C_BLUE    4 +#define C_PURPLE  5 +#define C_CYAN    6 +#define C_WHITE   7 + +#define ENV_OPTS "LISTBAS_OPTS" +#define ENV_MAX_ARGS 64 +/* #define DEBUG_ENV */ + +/* output modes */ +#define M_UTF8    0   /* default */ +#define M_UTF8_I  1   /* -x */ +#define M_ATASCII 2   /* -a      */ +#define M_MAG     3   /* -m      */ +#define M_DOTS    4   /* -d      */ -int immediate = 0, a8utf8 = 0, a8eol = 1; +const char *cmd_tokens[256]; +const char  *op_tokens[256]; + +int bas_type = B_ATARI; /* -b */ + +int output_mode = M_UTF8; + +int bold =        0;  /* 1 with -B */ +int color =       1;  /* 0 with -n */ +int immediate =   0;  /* 1 with -i */ +int underline =   0;  /* 1 with -u */ +int skip_lineno = 0;  /* 1 with -l */ +int dump_tables = 0;  /* 1 with -D */ +int autodetect  = 1;  /* 0 with -b */ +int mixed_case  = 1;  /* 0 with -k, or if input is B_ATARI or B_APLUS */ +int indent =      1;  /* 0 with -t, or if input is B_ATARI */ +int startline =   0;  /* -r */ +int endline   =   32767;  /* -r */ + +/* change these with -c */ +int color_cmd =       C_YELLOW; +int color_op  =       C_GREEN; +int color_func =      C_PURPLE; +int color_const =     C_RED; +int color_lineno =    C_CYAN; +int color_rem =       C_BLUE; +int color_data =      C_CYAN; +int color_varnames  = NO_COLOR; + +const char *input_filename; + +int indent_level =    0; +int if_without_then = 0; +int badtok =          0; /* set to 1 if we find a bad token */ +int inv =             0; /* set to 1 when we're printing inverse */ +int cur_color =      -1; /* -1 = no color */ + +int first_stmt = 1; /* true if cmd token comes right after lineno */  FILE *outfh; +int parse_color(char c) { +	if(c == 'n') +		return NO_COLOR; + +	if(c >= '0' && c <= '7') +		return c - '0'; + +	fprintf(stderr, "%s: Invalid color '%c'.\n", self, c); +	exit(1); +} + +void parse_color_scheme(const char *arg) { +	if(!arg) return; + +	if(strlen(arg) != 8) +		die("Color scheme must be 8 characters."); + +	color_cmd =       parse_color(arg[0]); +	color_op  =       parse_color(arg[1]); +	color_func =      parse_color(arg[2]); +	color_const =     parse_color(arg[3]); +	color_lineno =    parse_color(arg[4]); +	color_rem =       parse_color(arg[5]); +	color_data =      parse_color(arg[6]); +	color_varnames  = parse_color(arg[7]); +} + +int get_bas_type(char *arg) { +	if(arg[0] == 't') +		return B_TURBO; + +	if(arg[0] == 'i') { +		if(arg[1] == 'd') +			return B_INT_D; +		else if(arg[1] == 'c') +			return B_INT_C; +	} + +	if(arg[0] == 'a') { +		if(arg[1] == '+') +			return B_APLUS; +		else +			return B_ATARI; +	} + +	if(arg[0] == 'x') { +		if(arg[1] == 'l') +			return B_BXL; +		else if(arg[1] == 'e') +			return B_BXE; +	} + +	fprintf(stderr, "%s: Invalid BASIC type for -b option: %s\n", self, arg); +	exit(1); +} + +void get_line_range(const char *arg) { +	int val = 0, comma = 0; +	const char *p = arg; + +	while(*p) { +		if(*p >= '0' && *p <= '9') { +			val *= 10; +			val += *p - '0'; +			if(val > 32768) die("Invalid line number for -r (range is 0-32768)."); +		} else if(*p == ',' || *p == '-') { +			if(comma) die("Invalid argument for -r (too many commas)."); +			comma++; +			startline = val; +			val = 0; +		} else { +			if(comma) die("Invalid argument for -r (only digits and comma allowed)."); +		} +		p++; +	} + +	if(comma) +		endline = val ? val : 32767; +	else +		startline = endline = val; + +	if(endline < startline) +		die("Invalid argument for -r (start > end)."); +} +  void print_help(void) { -	printf("Usage: %s [-v] [-i] [-a|-u] <inputfile>\n", self); -	printf("  -v: verbose.\n"); -	printf("  -i: show immediate mode command (line 32768).\n"); +	printf("Usage: %s [-a|-d|-m|-x|-U] [-B] [-i] [-l] [-u] [-n|-C] [-v] [-c *colors*] [-r *start,end* ] [-k] [-t] <inputfile>\n", self); +	printf("  -b <XX>: set BASIC type. XX is:\n"); +	printf("     a  = Atari 8K   t  = Turbo    xl = Basic XL    xe = Basic XE\n"); +	printf("     a+ = OSS A+     ic = OSS Integer (cart)        id = OSS Int (disk)\n"); +	printf("  -U: output ATASCII as Unicode/UTF-8 (this is the default).\n");  	printf("  -a: output raw ATASCII.\n"); -	printf("  -u: output Unicode.\n"); +	printf("  -d: use dots instead of Unicode/UTF-8.\n"); +	printf("  -m: magazine style listing (see a8cat(1)).\n"); +	printf("  -x: XL international character set (UTF-8).\n"); +	printf("  -B: use bold for color output.\n"); +	printf("  -i: show immediate mode command (line 32768).\n"); +	printf("  -l: don't print line numbers.\n"); +	printf("  -C: enable color syntax highlighting (this is the default).\n"); +	printf("  -n: disable color syntax highlighting.\n"); +	printf("  -u: use underline for inverse video.\n"); +	printf("  -c: use custom colors (see man page).\n"); +	printf("  -k: disable mixed case keywords for BXL/BXE (e.g. Print).\n"); +	printf("  -t: disable Turbo/BXL/BXE indentation.\n"); +	printf("  -r: only list lines numbered from *start* to *end*.\n"); +	printf("  -v: verbose.\n");  } -void parse_args(int argc, char **argv) { +void parse_args(int argc, char **argv, int from_env) {  	int opt; -	while( (opt = getopt(argc, argv, "viau")) != -1) { +	optind = 1; + +	while( (opt = getopt(argc, argv, "r:Db:UCviamnBdhxulc:kt")) != -1) {  		switch(opt) { -			case 'v': verbose = 1; break; -			case 'i': immediate = 1; break; -			case 'a': a8utf8 = a8eol = 0; break; -			case 'u': a8utf8 = 1; a8eol = 0; break; +			case 'U': output_mode = M_UTF8;    break; +			case 'a': output_mode = M_ATASCII; break; +			case 'm': output_mode = M_MAG;     break; +			case 'd': output_mode = M_DOTS;    break; +			case 'x': output_mode = M_UTF8_I;  break; +			case 'D': dump_tables = 1; break; +			case 'v': verbose =     1; break; +			case 'i': immediate =   1; break; +			case 'B': bold =        1; break; +			case 'u': underline =   1; break; +			case 'C': color =       1; break; +			case 'n': color =       0; break; +			case 'l': skip_lineno = 1; break; +			case 'k': mixed_case =  0; break; +			case 't': indent =      0; break; +			case 'b': autodetect = 0; bas_type = get_bas_type(optarg); break; +			case 'r': get_line_range(optarg); break; +			case 'c': parse_color_scheme(optarg); break; +			case 'h': print_help(); exit(0);  			default:  				print_help();  				exit(1);  		}  	} -	if(optind >= argc) -		die("No input file given (use - for stdin)."); -	else -		open_input(argv[optind]); +	if(output_mode == M_ATASCII) color = 0; + +	if(!from_env) { +		if(optind >= argc) { +			die("No input file given (use - for stdin)."); +		} else { +			input_filename = argv[optind]; +			open_input(input_filename); +		} +	}  } -void setup_outfh(void) { -	const char *cmd; - -	/* search current dir before PATH. no easy way to detect errors here, -	   have to wait until we call pclose(). */ -	if(a8eol) { -		cmd = "./a8eol -u -c 2>/dev/null || a8eol -u -c 2>/dev/null || exit 1"; -	} else if(a8utf8) { -		cmd = "./a8utf8 2>/dev/null || a8utf8 2>/dev/null || exit 1"; -	} else { -		if(isatty(fileno(stdout))) { -			die("Refusing to write ATASCII data to the terminal."); +/* make a fake argv and argc */ +void parse_env_args(void) { +	int fargc; +	char *fargv[ENV_MAX_ARGS + 1]; +	char *env, *p; + +	env = getenv(ENV_OPTS); +	if(!env) return; + +#ifdef DEBUG_ENV +	fprintf(stderr, "%s: " ENV_OPTS " is set in the env, using it.\n", self); +#endif + +	fargv[0] = (char *)self; +	fargv[1] = env; +	fargc = 2; + +	for(p = env; *p; p++) { +		if(*p == ' ' || *p == '\t') { +			*p = '\0'; +			if(fargc == ENV_MAX_ARGS) { +				/* not gonna bother with the man page for this, it's +				   long enough already. it's a pathological case. */ +				fprintf(stderr, "%s: Too many spaces in " ENV_OPTS " (max %d)\n", self, ENV_MAX_ARGS - 1); +				break; +			} +			fargv[fargc++] = p + 1;  		} -		outfh = stdout; -		return;  	} -	outfh = popen(cmd, "w"); -	if(!outfh) { -		/* fork() or pipe() failed. does NOT detect if the command -		   wasn't found. */ -		perror(self); -		exit(1); +	fargv[fargc] = NULL; + +#ifdef DEBUG_ENV +	{ +		char **p; +		fprintf(stderr, "%s: Read options from environment:\n", self); +		for(p = fargv + 1; *p; p++) { +			fprintf(stderr, "\t%s\n", *p); +		}  	} +#endif + +	parse_args(fargc, fargv, 1);  } -void close_outfh(void) { -	if(a8eol || a8utf8) { -		if(pclose(outfh)) { -			die("output filter failed; a8eol or a8utf8 not in current dir or $PATH."); +void setup_outfh(void) { +	if(output_mode == M_ATASCII) { +		if(isatty(fileno(stdout))) { +			die("Refusing to write ATASCII data to the terminal.");  		}  	} +	outfh = freopen(NULL, "wb", stdout); +	if(!outfh) { +		perror("freopen()"); +		die("Can't reopen standard output in binary mode."); +	} +	return;  }  void outchr(char c) { @@ -108,94 +348,873 @@ double bcd2double(const unsigned char *num) {  	return result;  } -void print_number(unsigned int pos) { -	fprintf(outfh, "%G", bcd2double(program + pos)); +void color_on(int c) { +	cur_color = c; +	if(c != NO_COLOR) +		printf(COLOR_FMT, bold, c); +} + +void color_off(void) { +	cur_color = -1; +	fputs(COLOR_OFF, outfh); +} + +void print_int_number(unsigned int pos, int hex) { +	unsigned int num = program[pos] | (program[pos + 1] << 8); +	if(color) color_on(color_const); +	if(hex) { +		fprintf(outfh, (num > 0xff ? "%04x" : "%02x"), num); +	} else { +		fprintf(outfh, "%d", num); +	} +	if(color) color_off(); +} + +void print_bcd_number(unsigned int pos, int hex) { +	double num = bcd2double(program + pos); +	if(color) color_on(color_const); +	if(hex) { +		if(num < 0 || num > 0xffff) { +			fprintf(stderr, "%s: invalid Turbo/BXL/BXE hex const %lf at pos $%04x\n", self, num, pos); +		} +		fprintf(outfh, (num > 0xff ? "%04x" : "%02x"), (unsigned int)num); +	} else { +		fprintf(outfh, "%G", num); +	} +	if(color) color_off(); +} + +void print_number(unsigned int pos, int hex) { +	if(bas_type == B_INT_C || bas_type == B_INT_D) +		print_int_number(pos, hex); +	else +		print_bcd_number(pos, hex); +} + +/* only called in magazine mode. cursor control characters +   like a bell in the middle of a non-inverse string +   should not cause it to print {inv}{bell}{norm}. The {bell} +   is "inherently" inverse (since its high bit is set) but doesn't +   need to be printed that way. */ +int affects_inv(unsigned char c) { +	switch(c) { +		case 0x1b: /* esc */ +		case 0x1c: /* up */ +		case 0x1d: /* down */ +		case 0x1e: /* left */ +		case 0x1f: /* right */ +		case 0x9b: /* EOL */ +		case 0x9c: /* del line */ +		case 0x9d: /* ins line */ +		case 0x9e: /* clear tab */ +		case 0x9f: /* set tab */ +		case 0x7d: /* cls */ +		case 0x7e: /* BS */ +		case 0x7f: /* tab */ +		case 0xfd: /* bell */ +		case 0xfe: /* del chr */ +		case 0xff: /* ins chr */ +			return 0; +		default: +			return 1; +	} +} + +void start_inv(unsigned char c) { +	switch(output_mode) { +		case M_DOTS: +		case M_UTF8: +		case M_UTF8_I: +			if(underline) +				fputs(ULINE_ON, outfh); +			else +				fputs(INV_ON, outfh); +			inv = 1; +			break; +		case M_MAG: +			if(affects_inv(c)) { +				fputs(MAG_INV, outfh); +				inv = 1; +			} +			break; +		case M_ATASCII: +		default: +			break; +	} +} + +void end_inv(unsigned char c) { +	switch(output_mode) { +		case M_DOTS: +		case M_UTF8: +		case M_UTF8_I: +			fputs(INV_OFF, outfh); +			inv = 0; +			/* work around INV_OFF also turning off color. */ +			if(cur_color > -1) +				color_on(cur_color); +			break; +		case M_MAG: +			if(affects_inv(c)) { +				fputs(MAG_NORM, outfh); +				inv = 0; +			} +			break; +		case M_ATASCII: +		default: +			break; +	} +} + +void print_ata_chr(unsigned char c) { +	if(c & 0x80) { +		if(!inv) { +			start_inv(c); +		} +	} else { +		if(inv) { +			end_inv(c); +		} +	} + +	switch(output_mode) { +		case M_DOTS: +			fputc(isprint(c & 0x7f) ? c & 0x7f : '.', outfh); +			break; +		case M_UTF8: +			fputs(ata2utf[c & 0x7f], outfh); +			break; +		case M_UTF8_I: +			fputs(ics2utf[c & 0x7f], outfh); +			break; +		case M_MAG: +			fputs(ata2mag[c & 0x7f], outfh); +			break; +		case M_ATASCII: +		default: +			outchr(c); +			break; +	} +} + +void print_mixed_case(const char *name) { +	char c; + +	if(!*name) return; +	if(*name == ' ') +		outchr(*name++); +	outchr(*name++); +	while(( c = *name++)) { +		if(c >= 'A' && c <= 'Z') +			c |= 0x20; +		if(color && c == '(' && cur_color != color_op) color_on(color_op); +		outchr(c); +	}  }  void print_string(unsigned int pos, unsigned int len) { +	inv = 0; +	if(color) color_on(color_op);  	outchr('"'); -	while(len--) outchr(program[pos++]); +	if(color) color_on(color_const); +	while(len--) print_ata_chr(program[pos++]); +	if(inv) { +		end_inv(0); +	} +	if(color) color_on(color_op);  	outchr('"'); +	if(color) color_off(); +} + +const char *get_bxl_ext_name(unsigned char tok) { +	switch(tok) { +		case 0x10: +			return "Local"; +		case 0x11: +			return "Exit"; +		case 0x12: +			return "Procedure"; +		case 0x13: +			return "Call"; +		case 0x14: +			return "Sortup"; +		case 0x15: +			return "Sortdown"; +		default: +			return "(bad BXL ext token)"; +	} +} + +void clear_callbacks(void); +void init_callbacks(void); + +int cmd_is_if; + +CALLBACK(find_cmd_if) { +	cmd_is_if = 0; +	if((bas_type == B_APLUS && tok == 0x06) || (bas_type != B_APLUS && tok == CMD_IF)) { +		cmd_is_if = 1; +		if_without_then++; /* find_then() decrements it, if there's a THEN */ +	} +} + +CALLBACK(find_op_then) { +	if(verbose) +		fprintf(stderr, "find_op_then lineno %d, pos %04x, tok %02x\n", lineno, pos, tok); + +	if(cmd_is_if && tok == OP_THEN) +		if_without_then--; +} + +/* walk_code()'s API isn't really set up to be reentrant, but we +   can do one level of sub-walk. */ +void find_then(int lineno, unsigned short pos) { +	clear_callbacks(); +	on_exp_token = find_op_then; +	on_cmd_token = find_cmd_if; +	walk_code(lineno, lineno); +	init_callbacks();  }  CALLBACK(print_lineno) { +	unsigned char cmd_tok; + +	first_stmt = 1; + +	if(indent) { +		cmd_tok = program[pos + 4]; +		if_without_then = 0; +		if((bas_type == B_APLUS && cmd_tok == 0x06) || (bas_type != B_APLUS && cmd_tok == CMD_IF)) { +			find_then(lineno, pos); +		} +	} + +	if(skip_lineno) return; +	if(color) color_on(color_lineno);  	fprintf(outfh, "%d ", lineno); +	if(color) color_off(); +} + +/* indentation is totally different between A+, BXL, and BXE. +   Turbo and BXE use the same indent style, but Turbo has more +   keywords that indent (e.g. REPEAT, DO). + +   A+ always indents on the lines after a WHILE or a FOR, unless there's +   a matching ENDWHILE or NEXT on the same line. It indents the lines +   after IF only if there's no THEN and no matching ENDIF on the +   same line. ENDWHILE, NEXT, ENDIF all un-undent one level. The style +   is that the the ending keyword (or ELSE) does NOT get unindented, +   itself: + +   WHILE 1 +     PRINT "OK" +     ENDWHILE +   PRINT "HEY" + +   That looks *wrong* to me (the ENDWHILE should line up with the WHILE), but +   that's how A+ works. + +  BXL's style is to indent the entire block to the same level: + +     While 1 +     Print "OK" +     Endwhile +   Print "HEY" + +   This applies even if the whole block's on one line: + +    ? "OK" +      For I=1 To 10:Next I +    ? "OK" + +BXE and Turbo work like modern style: the keywords that start and end the +block are not indented, only the lines between them. + +   While 1 +     Print "OK" +   Endwhile +   Print "HEY" + + */ + +void print_indent(void) { +	int i; +	if(indent_level < 0) indent_level = 0; +	for(i = 0; i < indent_level; i++) { +		outchr(' '); +		outchr(' '); +	} +} + +void aplus_indent_line(const unsigned char tok) { +	if(first_stmt) print_indent(); + +	switch(tok) { +		case 0x07: /* FOR */ +		case 0x13: /* WHILE */ +			indent_level++; +			return; +		case 0x08: /* NEXT */ +		case 0x14: /* ENDWHILE */ +		case 0x18: /* ENDIF */ +			indent_level--; +			return; +		default: break; +	} +	if(if_without_then) { +		indent_level++; +		if_without_then = 0; +	} +} + +void turbo_indent_line(const unsigned char tok) { +	switch(tok) { +		case 0x40:    /* ELSE */ +			if(first_stmt) { +				/* gets "outdented" */ +				indent_level--; +				print_indent(); +				indent_level++; +			} +			return; +		case CMD_FOR: /* FOR */ +		case 0x3c:    /* REPEAT */ +		case 0x3e:    /* WHILE */ +		case 0x45:    /* DO */ +		case 0x4f:    /* PROC */ +			if(first_stmt) print_indent(); +			indent_level++; +			return; +		case CMD_NEXT: /* NEXT */ +		case 0x3d:     /* UNTIL */ +		case 0x3f:     /* WEND */ +		case 0x41:     /* ENDIF */ +		case 0x46:     /* LOOP */ +		case 0x51:     /* ENDPROC */ +			indent_level--; +			break; +		default: break; +	} +	if(first_stmt) print_indent(); +	if(if_without_then) { +		indent_level++; +		if_without_then = 0; +	} +} + +/* Note: BXL's PROCEDURE/EXIT (from toolkit extensions) does +   *not* get indented. */ +void bxl_indent_line(unsigned char tok) { +	if(if_without_then) { +		indent_level++; +		if_without_then = 0; +	} +	switch(tok) { +		case CMD_FOR: /* FOR */ +		case 0x38:    /* WHILE */ +			indent_level++; +			break; +		case CMD_NEXT: /* NEXT */ +		case 0x39:     /* ENDWHILE */ +		case 0x3d:     /* ENDIF */ +			if(first_stmt) print_indent(); +			indent_level--; +			return; +		default: break; +	} +	if(first_stmt) print_indent(); +} + +void bxe_indent_line(const unsigned char tok) { +	switch(tok) { +		case 0x3c:    /* ELSE */ +			if(first_stmt) { +				/* gets "outdented" */ +				indent_level--; +				print_indent(); +				indent_level++; +			} +			return; +		case CMD_FOR: /* FOR */ +		case 0x38:    /* WHILE */ +		case 0x59:    /* PROCEDURE */ +			if(first_stmt) print_indent(); +			indent_level++; +			return; +		case CMD_NEXT: /* NEXT */ +		case 0x39:     /* ENDWHILE */ +		case 0x5e:     /* EXIT */ +		case 0x3d:     /* ENDIF */ +			indent_level--; +			break; +		default: break; +	} +	if(first_stmt) print_indent(); +	if(if_without_then) { +		if_without_then = 0; +		indent_level++; +	} +} + +void indent_line(const unsigned char tok) { +	if(!indent) return; + +	switch(bas_type) { +		case B_APLUS: aplus_indent_line(tok); return; +		case B_TURBO: turbo_indent_line(tok); return; +		case   B_BXL:   bxl_indent_line(tok); return; +		case   B_BXE:   bxe_indent_line(tok); return; +		/* TODO: case B_INT_C: int_indent_line(tok); return; */ +		case B_ATARI: +		default: +			return; +	}  }  CALLBACK(print_cmd) {  	const char *name; -	if(tok == CMD_ILET) return; +	indent_line(tok); +	if(first_stmt) +		first_stmt = 0; -	if(tok > last_command || (!(name = commands[tok]))) +	if(bas_type == B_APLUS) { +		if(tok == 0x52) return; +	} else if(bas_type == B_INT_C) { +		if(tok == 0x37) return; +	} else if(bas_type == B_INT_D) { +		if(tok == 0x35) return; +	} else { +		if(tok == CMD_ILET) return; +	} + +	if(color) color_on(color_cmd); + +	if((!(name = cmd_tokens[tok]))) {  		fprintf(outfh, "(bad cmd token $%02x) ", tok); +		badtok = 1; +	} else { +		if(bas_type == B_BXL && tok == 0x5a) +			name = get_bxl_ext_name(program[pos + 1]); + +		if(mixed_case /* && (bas_type == B_BXL || bas_type == B_BXE) */) { +			print_mixed_case(name); +			outchr(' '); +		} else { +			fprintf(outfh, "%s ", name); +		} +	} + +	if(color) color_off(); +} + +void aplus_op_color_on(unsigned char tok) { +	int c = color_op; + +	if((tok >= 0x17 && tok <= 0x1c) || (tok >= 0x29 && tok <= 0x2b)) { +		/* keywords */ +		c = color_cmd; +	} else if(tok >= 0x40) { +		/* functions */ +		c = color_func; +	} else if(tok == 0x38 || tok == 0x39) { +		/* unary +/- */ +		c = color_const; +	} + +	color_on(c); +} + +/* pseudo-funcs listed here are ones that don't take (), e.g. +   X=RND or A$=INKEY$. right now they're colored the same as regular +   functions, but it might make sense to color them as variables? +   also, %0 %1 %2 %3 (tokens 0x66 to 0x69) are currently op-colored, +   perhaps they should be constant-colored? */ +void turbo_op_color_on(unsigned char tok) { +	switch(tok) { +		case 0x55: +		case 0x58: +		case 0x59: /* pseudo-func */ +		case 0x5b: +		case 0x5c: +		case 0x5e: +		case 0x5f: /* pseudo-func */ +		case 0x60: /* pseudo-func */ +		case 0x63: /* pseudo-func */ +		case 0x64: +		case 0x65: +		case 0x6b: +		case 0x6c: /* pseudo-func */ +		case 0x6d: /* pseudo-func */ +			color_on(color_func); +			break; +		case 0x5a: +		case 0x5d: +		case 0x61: +		case 0x62: +		case 0x6a: +			color_on(color_cmd); +			break; +		default: +			color_on(color_op); +			break; +	} +} + +/* BXL and BXE use the same operator tokens */ +void bxlxe_op_color_on(unsigned char tok) { +	int c = color_op; + +	if(tok == 0x55) { +		c = color_cmd; +	} else if(tok >= 0x5a) { +		c = color_func; +	} + +	color_on(c); +} + +void op_color_on(unsigned char tok) { +	if(!color) return; + +	if(bas_type == B_APLUS) { +		aplus_op_color_on(tok); +		return; +	} + +	/* common ops for Atari, Turbo, BXL, BXE */ +	if(tok <= last_operator) { +		if(tok > 0x3c) +			color_on(color_func); +		else if(tok == OP_UMINUS || tok == OP_UPLUS) +			color_on(color_const); /* show leading sign in same color as the number */ +		else if((tok >= 0x17 && tok <= 0x1b) || (tok >= 0x28 && tok <= 0x2a)) +			color_on(color_cmd); +		else +			color_on(color_op); +		return; +	} + +	if(bas_type == B_TURBO) +		turbo_op_color_on(tok); +	else if(bas_type == B_BXL || bas_type == B_BXE) +		bxlxe_op_color_on(tok);  	else -		fprintf(outfh, "%s ", name); +		color_on(color_op); /* in case of bad token when bas_type == B_BASIC */ +} + +void print_varname(unsigned char varnum) { +	int i, count; +	unsigned char c; + +	if(color) color_on(color_varnames); + +	for(i = vnstart, count = 0; count < varnum; i++) { +		if(program[i] & 0x80) count++; +		if(i == codestart) { +			fprintf(outfh, "(bad var tok $%02x)", varnum | 0x80); +			return; +		} +	} + +	do { +		c = program[i++]; +		if(color && c == ('(' | 0x80)) { +			if(color) color_on(color_op); +		} +		outchr(c & 0x7f); +	} while (c < 0x80); +	if(color) color_off();  }  CALLBACK(print_op) {  	const char *name;  	switch(tok) { +		case 0: /* Turbo variables numbered >= $80 */ +			if(bas_type == B_TURBO) { +				print_varname(program[pos + 1] | 0x80); +				return; +			} else { +				fprintf(stderr, "%s: got Turbo ext var tok at line %d, in non-Turbo program!\n", self, lineno); +			} +			break; +		case OP_HEXCONST: +			if(color) color_on(color_op); +			outchr('$'); +			print_number(pos + 1, 1); +			return;  		case OP_NUMCONST: -			print_number(pos + 1); +			print_number(pos + 1, 0);  			return;  		case OP_STRCONST:  			print_string(pos + 2, program[pos + 1]);  			return;  		case OP_EOL: -			return; +			/* in Integer BASIC, this token is TO */ +			if((bas_type != B_INT_C) && (bas_type != B_INT_D)) return; +			break; +		case 0x13: +			/* in Integer BASIC, this is the real end-of-line token */ +			if(bas_type == B_INT_D || bas_type == B_INT_C) return;  		default: break;  	} -	if(tok > last_operator || (!(name = operators[tok]))) +	if(color) op_color_on(tok); + +	if((!(name = op_tokens[tok]))) {  		fprintf(outfh, "(bad op token $%02x)", tok); -	else -		fprintf(outfh, "%s", name); +		badtok = 1; +	} else { +		if(bas_type == B_BXL || bas_type == B_BXE || bas_type == B_INT_C || bas_type == B_INT_D) +			print_mixed_case(name); +		else +			fprintf(outfh, "%s", name); +	} +	if(color) color_off();  } -CALLBACK(print_varname) { -	int i, count; -	unsigned char c; - -	tok &= 0x7f; -	for(i = vnstart, count = 0; count < tok; i++) { -		if(program[i] & 0x80) count++; -	} -	do { -		outchr( (c = program[i++]) & 0x7f); -	} while (c < 0x80); +/* for normal BASIC/A+/XL/XE variable tokens, $80-$FF. Turbo uses +   these, too, but it supports 256 variables, so it only uses $80-$FF +   for the first 128 vars. */ +CALLBACK(print_std_varname) { +	print_varname(tok & 0x7f);  }  CALLBACK(print_text) { -	while(program[pos] != 0x9b) outchr(program[pos++]); +	unsigned char c, is_data = program[pos - 1] == CMD_DATA, comma = 0; + +	inv = 0; +	if(color) color_on(is_data ? color_data : color_rem); +	while(program[pos] != 0x9b) { +		c = program[pos++]; +		if(color && is_data && c == ',') { +			color_on(color_op); +			comma = 1; +		} else { +			comma = 0; +		} +		print_ata_chr(c); +		if(comma) +			color_on(is_data ? color_data : color_rem); +	} +	if(inv) end_inv(0); +	if(color) color_off();  }  CALLBACK(print_newline) { -	outchr(0x9b); +	if(output_mode == M_ATASCII) +		outchr(0x9b); +	else +		outchr('\n');  }  CALLBACK(code_prot) {  	fprintf(stderr, "%s: Program is code-protected, stopping at line %d.\n", self, lineno); -	close_outfh();  	exit(0);  } -void list(void) { +void clear_callbacks(void) { +	on_start_line = 0; +	on_cmd_token = 0; +	on_exp_token = 0; +	on_var_token = 0; +	on_end_line = 0; +	on_text = 0; +	on_bad_line_length = 0; +} + +void init_callbacks(void) {  	on_start_line = print_lineno;  	on_cmd_token = print_cmd;  	on_exp_token = print_op; -	on_var_token = print_varname; +	on_var_token = print_std_varname; /* see also: print_turbo_varname() */  	on_end_line = print_newline;  	on_text = print_text;  	on_bad_line_length = code_prot; -	walk_code(0, 32767 + immediate); +} + +void list(void) { +	init_callbacks(); +	if(endline == 32767 && immediate) endline++; +	walk_code(startline, endline); +} + +void init_bas_tables() { +	memmove(cmd_tokens, commands, (last_command + 1) * sizeof(char *)); +	memmove(op_tokens, operators, (last_operator + 1) * sizeof(char *)); +} + +void init_aplus_tables() { +	memmove(cmd_tokens, aplus_cmds, aplus_cmd_size); +	memmove(op_tokens, aplus_ops, aplus_ops_size); +} + +/* cartridge version */ +void init_int_tables() { +	memmove(cmd_tokens, int_cmds, int_cmd_size); +	memmove(op_tokens, int_ops, int_ops_size); +} + +void init_int_disk_tables() { +	memmove(cmd_tokens, int_disk_cmds, int_disk_cmd_size); +	memmove(op_tokens, int_disk_ops, int_disk_ops_size); +} + +void init_turbo_tables() { +	memmove(cmd_tokens + last_command  + 1, turbo_cmds, turbo_cmd_size); +	memmove(op_tokens  + last_operator + 1, turbo_ops,  turbo_ops_size); +} + +void init_bxl_tables() { +	memmove(cmd_tokens + last_command  + 1, bxl_cmds, bxl_cmd_size); +	memmove(op_tokens  + last_operator + 1, bxl_ops,  bxl_ops_size); +} + +/* BXE's token table is identical to BXL's, and the commands are the +   same up to token 0x56 (FAST). */ +void init_bxe_tables() { +	init_bxl_tables(); +	memmove(cmd_tokens + 0x57, bxe_cmds, bxe_cmd_size); +} + +void init_token_tables() { +	if(bas_type == B_APLUS) { +		init_aplus_tables(); +		return; +	} else if(bas_type == B_INT_C) { +		init_int_tables(); +		return; +	} else if(bas_type == B_INT_D) { +		init_int_disk_tables(); +		return; +	} + +	init_bas_tables(); + +	if(bas_type == B_TURBO) +		init_turbo_tables(); +	else if(bas_type == B_BXL) +		init_bxl_tables(); +	else if(bas_type == B_BXE) +		init_bxe_tables(); + +	if(dump_tables) { +		int i; +		printf("commands:\n\n"); +		for(i = 0; i < 0x65; i++) +			printf("%s $%02x\n", (cmd_tokens[i] ? cmd_tokens[i] : "(null)"), i); +		printf("operators:\n\n"); +		for(i = 0x12; i < 0x69; i++) +			printf("%s $%02x\n", (op_tokens[i] ? op_tokens[i] : "(null)"), i); +		exit(0); +	} +} + +void set_bas_dialect(int d) { +	if(verbose) +		fprintf(stderr, "set_bas_dialect(%d)\n", d); + +	switch(d) { +		case 0: +		case 1: +			die("whichbas child process failed"); +			break; +		case SRET_ATARI: +		case SRET_APLUS: +		case SRET_TURBO: +		case SRET_BXL: +		case SRET_BXE: +		case SRET_OSSINT_CART: +		case SRET_OSSINT_DISK: +			bas_type = d; +			break; +		case SRET_AMSB: +			die("This is an Atari Microsoft BASIC program. Use listamsb."); +			break; +		case SRET_COMPILED_TURBO: +		case SRET_NOT_BASIC: +			die("This is not any kind of BASIC program I know about."); +			break; +		default: +			fprintf(stderr, "whichbas results ambiguous; guessing Turbo BASIC\n"); +			bas_type = SRET_TURBO; +			break; +	} +} + +void detect_bas_dialect() { +	pid_t pid, status; +	int wstatus; +	const char *args[4]; + +	args[0] = "whichbas"; +	args[1] = "-s"; +	args[2] = input_filename; +	args[3] = 0; + +	pid = fork(); +	if(pid == -1) { +		perror("fork()"); +		die("Can't spawn child process"); +	} else if(pid) { +		/* we are the parent */ +		status = waitpid(pid, &wstatus, 0); +		if(status < 0) { +			perror("waitpid()"); +			die("Child process went south"); +		} +		if(!WIFEXITED(wstatus)) { +			die("Child process went south"); +		} +		set_bas_dialect(WEXITSTATUS(wstatus)); +	} else { +		/* we are the child */ +		if(execvp(args[0], (char * const *)args) < 0) { +			perror("Can't execute whichbas"); +			exit(1); +		} +	} +} + +void init_bas_dialect() { +	if(autodetect) +		detect_bas_dialect(); + +	if(bas_type == B_INT_C || bas_type == B_INT_D) { +		numconst_size = 2; +		if(bas_type == B_INT_C) +			error_token = 0x38; +		else +			error_token = 0x36; +		allow_hex_const = 1; +		mixed_case = 1; +	} + +	if(bas_type == B_TURBO || bas_type == B_BXL || bas_type == B_BXE) +		allow_hex_const = 1; + +	if(bas_type == B_APLUS) +		error_token = 0x53; + +	if(bas_type == B_BXL) +		bxl_exttok_hack = 1; + +	if(bas_type == B_ATARI || bas_type == B_APLUS || bas_type == B_TURBO) +		mixed_case = 0; + +	if(bas_type == B_ATARI) +		indent = 0;  }  int main(int argc, char **argv) {  	set_self(*argv);  	parse_general_args(argc, argv, print_help); -	parse_args(argc, argv); +	parse_env_args(); +	parse_args(argc, argv, 0); + +	init_bas_dialect(); +	init_token_tables();  	readfile();  	parse_header(); @@ -205,7 +1224,11 @@ int main(int argc, char **argv) {  	setup_outfh();  	list(); -	close_outfh(); + +	if(badtok) { +		fprintf(stderr, "%s: Program has unknown tokens; wrong BASIC dialect?\n", self); +		return 2; +	}  	return 0;  } diff --git a/listbas.rst b/listbas.rst index c4a937a..d15792b 100644 --- a/listbas.rst +++ b/listbas.rst @@ -11,7 +11,7 @@ List the source of a tokenized Atari 8-bit BASIC program  SYNOPSIS  ======== -listbas [**-v**] [**-i**] [**-a** | **-u** ] **input-file** +listbas [**-a** | **-d** | **-m** | **-x** | **-U**] [**-B**] [**-u**] [**-i**] [**-l**] [**-n** | **-C**] [**-v**] [**-c** *colors*] [**-r** *line-range*] **input-file**  DESCRIPTION  =========== @@ -20,50 +20,320 @@ DESCRIPTION  tokenized (SAVEd) BASIC program and prints the code in human-readable  format. -By default, output is piped through **a8eol**\(1), to convert ATASCII -characters to human-readable sequences. Raw ATASCII and Unicode output -are also available. +By default, output is Unicode in UTF-8 encoding, with ANSI/VT220 +escape sequences for inverse video and color syntax highlighting. -**a8eol**\(1) and **a8utf8**\(1) (for **-u**) are run as external -processes. The executables are searched for first in the current -directory, and then in *PATH*. +**listbas** supports several BASIC dialects used on the Atari. By +default, the BASIC dialect is autodetected by running **whichbas**\(1) +as an external process. To override this, see the **-b** option, below. + +Note: OSS Integer BASIC is *not* to be confused with Apple II Integer BASIC!  OPTIONS  ======= -List options ------------- +BASIC options +------------- + +**-b** +  Set the BASIC dialect the program will be treated as. This disables +  autodetection. Supported dialects are: + +  **-ba** +    Atari BASIC. + +  **-ba+** +    OSS BASIC/A+. + +  **-bic** +    OSS Integer BASIC, cartridge version. + +  **-bid** +    OSS Integer BASIC, disk version (uses different tokens from the cart). + +  **-bt** +    Turbo BASIC XL. + +  **-bxl** +    OSS BASIC XL. + +  **-bxe** +    OSS BASIC XE. + +  See **BASIC DIALECTS** below for details. + +**-r** *line-range* +  Show only part of the listing. *line-range* can be a single line, or +  a comma-separated pair of starting and ending line numbers (e.g. **100,200**). +  If the start line number is omitted (e.g. **,100**), it will be treated as +  **0** (meaning, list from the beginning of the program). If the ending line +  number is omitted (e.g. **100,**), it means "list until the end of the program". +  **-r,** is equivalent to not using the **-r** option at all.  **-i** -  Include the immediate mode command (line 32768) in the output. +  Include the immediate mode command (line 32768) in the output. This option has no +  effect if the **-r** option is used to stop listing before the end of the program. + +**-l** +  Do not print line numbers at the start of each line. **GOTO**, **GOSUB**, +  **TRAP**, and **THEN** target line numbers are still printed. + +**-t** +  Do not indent, if the program is Turbo BASIC, BASIC/A+, BASIC XL, or BASIC XE. +  By default, indentation is enabled for everything but Atari BASIC. +  If you want to indent an Atari BASIC program, use **-bt** or **-bxe**. +  Integer BASIC indentation is not yet supported. + +**-k** +  Do not print keywords in mixed case (e.g. **Print**, **Graphics**), +  for BASIC XL, BASIC XE, or Integer BASIC. Equivalent of **SET 5,0**. + +Output modes +------------ + +The default output mode is Unicode/UTF-8 representations of ATASCII +characters. + +**-U** +  Output Unicode/UTF-8 representations of ATASCII characters. This is +  the default output mode; the **-U** option is provided so you can +  override **-a**, **-d**, **-m**, **-x** in **LISTBAS_OPTS** (see +  **ENVIRONMENT**, below). + +**-x** +  Output Unicode/UTF-8 representations of the XL International Character +  Set, rather than ATASCII.  **-a**    Output raw ATASCII; no translation to the host character set. Must be -  used with redirection; **listbas** will not write ATASCII to the terminal. +  used with redirection or a pipe; **listbas** will not write ATASCII to the terminal. +  ATASCII output does not support color (because ATASCII doesn't). + +**-m** +  Output "magazine listing". See the **-m** option for **a8cat**\(1) for details. +  Color is supported in this mode. No Unicode/UTF-8 characters are printed in +  this mode. + +**-d** +  Print dots rather than Unicode/UTF-8 characters. Color and inverse +  video are still supported in this mode, but no Unicode/UTF8 characters +  are printed. Use this only if your terminal *really* doesn't support +  Unicode (e.g. **rxvt**\(1))... but even then, **-m** is preferred, +  because you can't tell what the dots are supposed to represent. + +Other display options +--------------------- + +**-C** +  Enable color syntax highlighting. This option is enabled by default; +  the **-C** option is provided so you can override **-n** in +  **LISTBAS_OPTS** (see **ENVIRONMENT**, below). + +**-n** +  No color. Has no effect if **-a** is in effect, since this +  mode doesn't support color anyway. Disabling color does not +  disable reverse video. + +**-B** +  Use bold for color output. This may make it easier to read on +  some terminals. Or, it may hurt your eyes...  **-u** -  Use **a8utf8**\(1) to translate ATASCII to ASCII. +  Use underlining for inverse video, rather than reverse video output. + +**-c** *colors* +  Customize the color scheme. See **COLORS**, below, for the format of the +  *colors* argument. Once you've found a set of colors you like, +  you can place this option in the **LISTBAS_OPTS** environment variable +  to use your colors by default. See **ENVIRONMENT**, below.  .. include:: genopts.rst +BASIC DIALECTS +============== + +Note that Turbo, BASIC XL, and BASIC XE are all proper supersets of +Atari BASIC, so you can view an Atari BASIC program with any of +**-bt**, **-bxl**, or **-bxe**. Also, BASIC XE is a superset of BASIC XL +(provided BASIC XL's disk-based toolkit extended commands are not used), +so you can usually use **-bxe** on a BASIC XL program. + +BASIC/A+ uses incompatible tokens, so its programs can't be viewed as +any of the others. Trying to do this results in a very funny-looking +listing, with commands like **POSITION** with no arguments (or with a +string argument, or **POSITION #6;"string"**; it so happens A+ uses the +same token number for **POSITION** that the other BASICs use for +**?**). The same thing would happen if you booted BASIC/A+ on an Atari +and tried to **LOAD** an Atari BASIC program. I can't help but think +this is a major reason BASIC/A+ didn't sell that well (fortunately, +OSS realized their mistake and fixed it in BASIC XL). + +OSS Integer BASIC also uses incompatible tokens. However, it uses a +different signature (first byte of file is **$77**), so it will be +reliably autodetected. The disk and cartridge versions of Integer +BASIC use different tokens; this is also autodetected pretty +reliably. If the code doesn't make sense, try **-bic** or **-bid** +to override the autodetection. + +If you see lots of "bad token XX" messages, or if the code +just doesn't make any sense, you're using the wrong BASIC +option. **whichbas**\(1) can usually detect the BASIC a program was +written in, but if the results are ambiguous, **listbas** will assume +Turbo BASIC XL. If this is wrong, use **-bxl** or **-bxe** to force +the issue. + +COLORS +====== + +Color output only works on terminal emulators (or real terminals) +that support ANSI/VT220 style escape codes. This includes all modern +terminal emulators, and most not-so-modern ones in the UNIX world. See +**NOTES** for a list of tested terminal emulators. + +You can customize the colors by using the **-c** *colors* option, either +on the command line, or in the **LISTBAS_OPTS** environment variable. +*colors* is a string of exactly 8 characters, each of which must be the +digits *0* through *7* to specify a color, or the letter *n* to specify +no color. + +The colors are the standard ANSI ones, plus *n*: + +*0* +  Black. + +*1* +  Red. + +*2* +  Green. + +*3* +  Yellow (or brown/orange, on some terminals). + +*4* +  Blue. + +*5* +  Purple (aka violet). + +*6* +  Cyan. + +*7* +  White. + +*n* +  No custom color. Output will be in the terminal's default foreground color. + +The order they're used in the *colors* argument is: + +**1** +  BASIC keywords. Default: *3* (yellow). + +**2** +  Operators, including quotes around strings and commas between **DATA** items. Default: *2* (green). + +**3** +  Functions. Default: *5* (purple). + +**4** +  Constants (numeric or string). Default: *1* (red). + +**5** +  Line numbers (at the start of a line only; **GOTO** and **GOSUB** line numbers +  are constants). Default: *6* (cyan). + +**6** +  **REM** text. Default: *4* (blue). + +**7** +  **DATA** items (but not the commas between them). Default: *6* (cyan). + +**8** +  Variable names. Default: *n* (uncolorized). + +So, the default color scheme is equivalent to: + +  **-c** *3251646n* + +Black and white are not used by default because presumably, one or the +other is the background color of the terminal. +  NOTES  ===== +Indentation +----------- + +The indentation isn't all that well-tested yet, but so far it seems work +correctly. The **-t** option is the equivalent of **\*L\ -** for Turbo, +or **SET 12,0** for BXL/BXE. The different BASICs have different +indentation rules; try viewing the same Atari BASIC program with +**-bt**, **-bxl**, and **-bxe** to compare them. + +**listbas -t** is also (as far as I know) the only way to **LIST** +a BASIC/A+ program without indentation, since BASIC/A+ itself doesn't +have a way to disable it. + +Turbo BASIC, at least, will "max out" the indentation level at some +point. Once there are 60 or so levels of indent, it stops adding +more. **listbas** doesn't emulate this behaviour (shouldn't be a +problem, it's a pathological case). + +BASIC XL actually does indentation within a line. If you write:: + +  10 IF A:IF B:IF C:REM + +...BXL lists it as:: + +  10   If A:  If B:  If C:Rem + +**listbas** only indents at the start of a line, so this behaviour is +not emulated. + +One thing **listbas** gets right: the **LIST** command in Turbo, A+, +BXL, and BXE always starts out with 0 indent spaces, if you're only +listing part of a program. BXE example:: + +  10 While 1 +  20   If Peek(764)<>255 +  30     ? "SOMEONE PRESSED A KEY":Poke 764,255 +  40   Endif +  50 Endwhile + +...but if you give a **LIST 30** in BXE, you'll get line 30 without any +indentation. **listbas** does this, too, if you use the **-r** option. + +Protected Programs +------------------ +  **listbas** will refuse to operate on a LIST-protected program with  scrambled variable names. For code-protected programs, it will stop at  the line with the invalid offset. Use **unprotbas**\(1) to remove the  protection. +Comparison to chkbas +-------------------- +  **listbas** is similar to Jindroush's **chkbas**\(1). The main differences are: -- **listbas** only supports Atari BASIC, not Turbo BASIC or BASIC XL/XE. +- **listbas** prints ATASCII graphics as Unicode equivalents, so the listing +  looks very similar to how it would appear on the Atari. + +- **listbas** does color syntax highlighting. + +- **listbas** supports OSS BASIC/A+ and Integer BASIC in addition to Turbo and BXL/BXE. + +- **listbas** indents BASIC/A+, Turbo, BXL, and BXE code, just like the +  actual BASICs do.  - **listbas** doesn't show information about the variables. Use **vxrefbas**\(1)    for that. -- **listbas** will not write ATASCII data to your terminal. Instead, it uses -  **a8eol**\(1) or **a8utf8**\(1) to convert the output to something human-readable -  that won't confuse the terminal. +- **listbas** will not write ATASCII data to your terminal. By default, it +  converts ATASCII characters into Unicode/UTF-8 characters +  that won't confuse the terminal. When outputting raw ATASCII (**-a** option), +  it refuses to run if standard output is a terminal.  - **listbas** only lists line 32768 (the immediate mode command) if    specifically asked to do so. @@ -71,11 +341,77 @@ protection.  - **listbas** doesn't print a banner on startup.  - **listbas** tells you if the program is protected, and refuses to operate -  on variable-protected programs. +  on variable-protected programs. For code-protected programs, it lists +  the program up to the "poisoned" line (normally the last line). + +Terminal Support +---------------- + +The color and inverse/bold/underline support assumes your terminal supports +ANSI/VT220 escape codes... but it does *not* use **curses**\(3X) or +**terminfo**\(5), or even look at **TERM** in the environment. It just +blindly emits the escape codes. Likewise, Unicode characters are printed +in UTF-8 encoding, without actually checking whether the terminal or the +current locale supports UTF-8. + +**listbas** has been tested and is known to work in at least these +terminals: + +  **rxvt-unicode**, aka **urxvt**. This is the terminal the author uses. + +  **xterm** - tested frequently. Requires the XTerm.locale resource +  to be set to **UTF-8** (e.g. in **~/.Xdefaults**\), or the **-lc** +  and/or **-en UTF-8** command line options. + +  **Linux console** - works fine, but good luck finding a font with +  all the Unicode graphics characters. Better use **-m**. + +  **kitty** - very fancy terminal emulator that supports both X11 and +  Wayland. **listbas** was only tested on X11. + +  **xfce4-terminal** - version 0.8.10, with XFCE4 4.16.0. + +  **konsole** - the KDE terminal, from KDE 5.90. + +  **gnome-terminal** - version 3.43.90. + +  **st** - minimal terminal from suckless.org, version 0.9.2. + +  **mlterm** - version 3.9.3. + +  **kmscon** - version 9.0.0. https://github.com/Aetf/kmscon + +  **fbterm** - version 1.8. https://github.com/sfzhi/fbterm + +Also, **rxvt** and **aterm** don't support Unicode, but they will +otherwise work (display color and inverse) with the **-m** or **-d** +options to **listbas**. + +HTML Output +----------- + +See **abas2html**\(1). + +ENVIRONMENT +=========== + +**LISTBAS_OPTS** +  If this environment variable is set, **listbas** parses its value as though +  the contents were placed on the command line as options, preceding any actual +  option. Example:: + +    export LISTBAS_OPTS="-c123456 -d" + +  If you place the above line in your shell's startup script, **listbas** will +  use your custom color scheme, and will default to the "dots" output mode. If +  you then run **listbas** the **-c** and/or **-x**, **-m** options, the options +  on the command line will override the environment.  EXIT STATUS  =========== -0 for success, 1 for failure. +0 for success, 1 if there was an error reading the input (e.g. file +not found), or 2 if the input file has invalid tokens (if this +happens, you will also see a warning about it on stderr).  .. include:: manftr.rst @@ -11,32 +11,39 @@ B. Watson <urchlay@slackware.uk>; Urchlay on irc.libera.chat *##atari*.  SEE ALSO  ======== -**a8eol**\(1),  -**a8utf8**\(1),  -**atr2xfd**\(1),  -**atrsize**\(1),  +**a8cat**\(1), +**a8eol**\(1), +**a8xd**\(1), +**atr2xfd**\(1), +**atrsize**\(1),  **axe**\(1), -**blob2c**\(1),  -**blob2xex**\(1),  -**cart2xex**\(1),  -**cxrefbas**\(1),  -**dasm2atasm**\(1),  -**dumpbas**\(1),  -**f2toxex**\(1),  -**fenders**\(1),  +**bas2aplus**\(1), +**blob2c**\(1), +**blob2xex**\(1), +**cart2xex**\(1), +**cxrefbas**\(1), +**dasm2atasm**\(1), +**diffbas**\(1), +**dumpbas**\(1), +**f2toxex**\(1), +**fenders**\(1),  **listbas**\(1), +**listamsb**\(1),  **protbas**\(1), -**renumbas**\(1),  -**rom2cart**\(1),  +**renumbas**\(1), +**rom2cart**\(1),  **unmac65**\(1),  **unprotbas**\(1),  **vxrefbas**\(1), -**xexamine**\(1),  -**xexcat**\(1),  -**xexsplit**\(1),  +**whichbas**\(1), +**xex1to2**\(1), +**xexamine**\(1), +**xexcat**\(1), +**xexsplit**\(1),  **xfd2atr**\(1),  **xex**\(5), -**atascii**\(7). +**atascii**\(7), +**fauxtari**\(7).  Any good Atari 8-bit book: *De Re Atari*, *The Atari BASIC  Reference  Manual*,  the  *OS Users' Guide*, *Mapping the Atari*, etc. diff --git a/ossintbas.7 b/ossintbas.7 new file mode 100644 index 0000000..dda00d3 --- /dev/null +++ b/ossintbas.7 @@ -0,0 +1,582 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "OSSINTBAS" 7 "2025-03-25" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +ossintbas \- OSS Integer BASIC Notes +.SH DESCRIPTION +.sp +OSS Integer BASIC is a BASIC interpreter from OSS, similar to BASIC XL +and BASIC XE. It was never released as a commercial product, and was +eventually released into the Public Domain. +.sp +It appears to be complete and free of major bugs. There is no manual +for it, so I\(aqm documenting the differences between Integer BASIC and +BASIC XL/XE here, as I discover them. +.sp +For more info on the release: +.INDENT 0.0 +.INDENT 3.5 +\fI\%https://forums.atariage.com/topic/257029\-oss\-d\-day\-part\-3\-integer\-basic\-source\-code\-now\-in\-pd/\fP +.UNINDENT +.UNINDENT +.SH NUMERICS +.sp +All numbers are signed 16\-bit integers. There is no floating point support +at all. +.sp +Two\(aqs complement is used, so bit 15 is the sign bit, and \fI\-1\fP is +represented as \fI$FFFF\fP\&. +.sp +The range is \fI\-32768\fP to \fI32767\fP\&. Somewhat confusingly (but also +usefully), positive numbers in the range \fI32768\fP to \fI65535\fP can be +entered in program code, or as response to \fBINPUT\fP, etc... but when +they are \fBPRINT\fPed, they will appear as negative numbers. This +is unlike Apple\(aqs Integer BASIC, for instance. It was probably done +so that BASIC code could use the familiar memory locations. Example: +\fBPEEK(53279)\fP to read the console keys. It would be very annoying if +this had to be written as \fBPEEK(\-12257)\fP\&... although it does work +if written that way (Apple\-style). +.sp +Although floating point is not supported, it\(aqs possible to enter +numbers with a decimal point or even scientific notation. These will +silently be converted to integers, with rounding. If the result is +outside the range \fI\-32768\fP to \fI65535\fP, you\(aqll get an \fBERROR\- 3\fP\&. +This applies to numbers entered as part of the program as well as +those entered in response to \fBINPUT\fP, or \fBREAD\fP from \fBDATA\fP +lines. +.SH COMMANDS +.sp +\fBVBLANKWAIT\fP +.INDENT 0.0 +.INDENT 3.5 +Pause and wait for a vertical blank interrupt to occur. +.sp +Abbreviation: \fBV.\fP +.UNINDENT +.UNINDENT +.sp +\fBVINC\fP \fI<var>\fP +.INDENT 0.0 +.INDENT 3.5 +Increment (add 1 to) a variable. This is about 30% faster than +\fBA=A+1\fP\&. +.sp +Abbreviation: \fBVI.\fP +.UNINDENT +.UNINDENT +.sp +\fBVDEC\fP \fI<var>\fP +.INDENT 0.0 +.INDENT 3.5 +Decrement (subtract 1 from) a variable. Faster than \fBA=A\-1\fP\&. +.sp +Abbreviation: \fBVD.\fP +.UNINDENT +.UNINDENT +.sp +\fBVCONST\fP \fI<num>\fP, \fI<var>\fP +.INDENT 0.0 +.INDENT 3.5 +Add a constant to \fIvar\fP\&. There are 8 constants, numbered 0 through +7. They are set with the \fBSET\fP command, using arguments 16 to 23 +to set the constants. Example: \fBSET 16,10\fP sets constant 0 to 123, +and \fBVCONST 0,A\fP adds 10 to A. +.sp +If \fI<num>\fP is greater than 7, the variable will be +unchanged. \fBSET\fP won\(aqt accept a number higher than 23 for its first +argument, so there\(aqd be no way to set any constants other than 0 +to 7 anyway. +.sp +When Integer BASIC first starts up, the constants are initialized +to what amounts to garbage values. You can examine them with +\fBSYS(16)\fP through \fBSYS(23)\fP, but it\(aqs a bad idea to depend on +them because the values are different between the disk and cartridge +versions of Integer BASIC. +.sp +Using VCONST is about 15% faster than just adding a number to a +variable. +.sp +Abbreviation: \fBVC.\fP +.UNINDENT +.UNINDENT +.SH FUNCTIONS +.sp +\fBRUN(0)\fP +.INDENT 0.0 +.INDENT 3.5 +Returns the run (coldstart) address of the interpreter. \fB? USR(RUN(0))\fP +restarts Integer BASIC. The \fI0\fP is a \(aqdummy\(aq argument (ignored, like \fBFRE(0)\fP). +.UNINDENT +.UNINDENT +.SH OPERATORS +.sp +\fB!\fP +.INDENT 0.0 +.INDENT 3.5 +Binary OR. Infix operator. +.UNINDENT +.UNINDENT +.sp +\fB&\fP +.INDENT 0.0 +.INDENT 3.5 +Binary AND. Infix operator. +.UNINDENT +.UNINDENT +.sp +\fB%\fP +.INDENT 0.0 +.INDENT 3.5 +Binary exclusive OR (XOR). Infix operator. +.UNINDENT +.UNINDENT +.sp +\fB<<\fP +.INDENT 0.0 +.INDENT 3.5 +Left shift, like C. Infix operator. Result is the expression on the left, +shifted left by the number of bits on the right. Examples: \fB1<<4\fP +is 16, \fB255<<1\fP is 510. +.sp +Bits shifted off the left end of the number are lost. Zeroes are +shifted in, for the low\-order bit(s). Shifting anything left 16 times +results in zero. Since bit 15 is the sign bit, shifting a 1 into bit +15 will result in a negative number. +.UNINDENT +.UNINDENT +.sp +\fB>>\fP +.INDENT 0.0 +.INDENT 3.5 +Right shift, like C. Infix operator. Result is the expression +on the left, shifted to the right, by the number of bits on the +right. Examples: \fB16>>4\fP is 1, \fB255>>1\fP is 127. +.sp +Bits shifted off the right end of the number are lost. Zeroes are +shifted in, for the high\-order bit(s). Shifting any negative number +to the right will result in a positive numbers, since a zero will be +shifted into the sigh bit. +.UNINDENT +.UNINDENT +.sp +\fB^&\fP +.INDENT 0.0 +.INDENT 3.5 +Binary NAND. Like AND, but inverts the bits in the result. Infix operator. +.UNINDENT +.UNINDENT +.sp +\fB^!\fP +.INDENT 0.0 +.INDENT 3.5 +Binary NOR. Infix operator. +.UNINDENT +.UNINDENT +.sp +\fB^%\fP +.INDENT 0.0 +.INDENT 3.5 +Binary NXOR. Infix operator. +.UNINDENT +.UNINDENT +.sp +\fB\e\fP +.INDENT 0.0 +.INDENT 3.5 +Modulus. Infix operator. Result of \fBX&Y\fP is the remainder of \fBX/Y\fP\&. +.sp +\fINOTE\fP that this is \fBbroken\fP in the cartridge version of Integer BASIC, +though it works correctly in the disk version. See \fBBUGS\fP, below. +.UNINDENT +.UNINDENT +.SH COMPATIBILITY +.sp +Integer BASIC can\(aqt LOAD programs that were SAVEd by any other BASIC, +and programs SAVEd by Integer BASIC can\(aqt be LOADed in any other +BASIC. Use LIST and ENTER instead. +.sp +Actually, the disk and cartridge versions of Integer BASIC can\(aqt even +LOAD each others\(aq programs. They use a different set of token numbers. +This is because the cartridge version includes the \fBHITCLR\fP command, +but the disk version does not. +.sp +The \fBINT()\fP function exists in Integer BASIC, but it doesn\(aqt actually +do anything. Seems to be provided for compatibility with other BASICs. +.SS Missing Commands +.sp +Integer BASIC has the full command set of the BASIC XL cartridge, +minus these commands: +.sp +\fBDEG\fP \fBRAD\fP \fBRGET\fP \fBRPUT\fP +.sp +The cartridge version of Integer BASIC has the \fBHITCLR\fP command +(from BASIC XE), but the disk version does not. +.sp +The BASIC XL extension disk commands (\fBLOCAL\fP, \fBEXIT\fP, +\fBPROCEDURE\fP, \fBCALL\fP, \fBSORTUP\fP, and \fBSORTDOWN\fP) don\(aqt exist in +Integer BASIC. If there was ever an extensions disk for Integer BASIC, +nobody\(aqs found it yet. +.sp +The extra commands in BASIC XE (\fBEXTEND\fP, \fBINVERSE\fP, \fBNORMAL\fP, +\fBBLOAD\fP, and \fBBSAVE\fP) are not supported. +.SS Missing Operators/Functions +.INDENT 0.0 +.TP +.B \fB^\fP +There is no exponentiation operator; \fB2^2\fP is a syntax error. +.TP +.B \fBATN()\fP, \fBCLOG()\fP, \fBCOS()\fP, \fBEXP()\fP, \fBLOG()\fP, \fBSIN()\fP +There are no trigonometric functions in Integer BASIC. These can +be used as array variable names, if you wish. +.TP +.B \fBUSING\fP +BASIC XL and XE\(aqs "PRINT USING" doesn\(aqt exist in Integer BASIC. +.UNINDENT +.SH PERFORMANCE +.sp +OSS Integer BASIC is \fIfast\fP, compared to other interpreted BASICs on +the Atari. It even outperforms Turbo BASIC XL (though, not \fIcompiled\fP +Turbo). +.sp +For testing, I used a modified version of the Sieve of Eratosthenes +program, found in the source for \fBbas55\fP\&. The program finds and +prints all the prime numbers between 2 and 1000. The code: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10 POKE 18,0:POKE 19,0:POKE 20,0 +20 DIM A(1000) +30 N=1000 +100 S=SQR(N) +110 FOR I=2 TO S +120 IF A(I)=1 THEN 170 +130 D=N/I +140 FOR J=I TO D +150 A(I*J)=1 +160 NEXT J +170 NEXT I +180 FOR I=2 TO N +190 IF A(I)=1 THEN 210 +200 PRINT I +210 NEXT I +1000 PRINT PEEK(18)*256*256+PEEK(19)*256+PEEK(20) +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +Line 1000 prints how many jiffies the program took to run. I used +Atari800 5.2.0 emulating an NTSC Atari 800XL, so one jiffy is 1/60 of +a second. The "Fastchip" results use Charles Marslet\(aqs OS floating +point replacement ROM. For Integer BASIC, BASIC XL and BASIC XE, +separate runs were done with the line \fB5 FAST\fP at the start of the +program. Results: +.TS +center; +|l|l|l|. +_ +T{ +BASIC +T}	T{ +Jiffies +T}	T{ +Speedup +T} +_ +T{ +Atari 8K +T}	T{ +1867 +T}	T{ +\-\- +T} +_ +T{ +A+ +T}	T{ +1671 +T}	T{ +1.12 +T} +_ +T{ +Atari 8K (Fastchip) +T}	T{ +1587 +T}	T{ +1.18 +T} +_ +T{ +A+ (Fastchip) +T}	T{ +1569 +T}	T{ +1.19 +T} +_ +T{ +XE +T}	T{ +1440 +T}	T{ +1.3 +T} +_ +T{ +AMSB2 +T}	T{ +1518 +T}	T{ +1.23 +T} +_ +T{ +XL +T}	T{ +1270 +T}	T{ +1.47 +T} +_ +T{ +Altirra +T}	T{ +1166 +T}	T{ +1.67 +T} +_ +T{ +XL (FAST) +T}	T{ +1110 +T}	T{ +1.68 +T} +_ +T{ +XL (Fastchip) +T}	T{ +1049 +T}	T{ +1.78 +T} +_ +T{ +XL (Fastchip, FAST) +T}	T{ +887 +T}	T{ +2.1 +T} +_ +T{ +Turbo +T}	T{ +825 +T}	T{ +2.3 +T} +_ +T{ +XE (FAST) +T}	T{ +777 +T}	T{ +2.4 +T} +_ +T{ +XE (Fastchip, FAST) +T}	T{ +777 +T}	T{ +2.4 +T} +_ +T{ +Altirra (Fastchip) +T}	T{ +769 +T}	T{ +2.43 +T} +_ +T{ +Integer +T}	T{ +719 +T}	T{ +2.6 +T} +_ +T{ +Integer (FAST) +T}	T{ +575 +T}	T{ +3.25 +T} +_ +.TE +.sp +Turbo BASIC XL, Atari Microsoft BASIC, and OSS Integer BASIC run at +the same speed with or without the Fastchip ROM, since they don\(aqt use +the OS floating point routines. +.sp +For reference, I rewrote the program in C and compiled it with +cc65. It runs in 349 jiffies, 5.35x as fast as BASIC, with or without +the Fastchip ROM. Since cc65 only supports integer arithmetic, this +probably represents the theoretical maximum speed the algorithm could +run in on the Atari, without rewriting it in assembly. By comparison, +Integer BASIC looks pretty good. +.sp +If you get rid of lines 180 to 210 (don\(aqt print the results), Integer +BASIC with FAST runs it in 245 jiffies, and the equivalent C program +runs in 61 jiffies. This shows that CIO and the E: device are the +"bottleneck" for this program (and that compiled C is still faster +than anything interpreted). +.SH BUGS +.SS Modulo Arithmetic +.sp +The \fB\e\fP (modulus) operator returns incorrect results in the +cartridge version of Integer BASIC. This program demonstrates the +bug: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +10 For I=1 To 10 +20   ? I,I\e3,I\-(I/3)*3 +30 Next I +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +When run with the disk version, the results are correct: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +1         1         1 +2         2         2 +3         0         0 +4         1         1 +5         2         2 +6         0         0 +7         1         1 +8         2         2 +9         0         0 +10        1         1 +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +The same program run with the cartridge version gives: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +1         254       1 +2         255       2 +3         0         0 +4         1         1 +5         2         2 +6         253       0 +7         254       1 +8         255       2 +9         0         0 +10        1         1 +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +This is obviously wrong. +.sp +If you\(aqre writing a real program in Integer BASIC, I recommend +avoiding the \fB\e\fP operator entirely. Write something like \fBX\-X/Y*Y\fP +instead. +.SH COPYRIGHT +.sp +WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. +.SH AUTHOR +.INDENT 0.0 +.IP B. 3 +Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. +.UNINDENT +.SH SEE ALSO +.sp +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\fP(7). +.sp +Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference +Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. +.\" Generated by docutils manpage writer. +. diff --git a/ossintbas.rst b/ossintbas.rst new file mode 100644 index 0000000..38fe649 --- /dev/null +++ b/ossintbas.rst @@ -0,0 +1,14 @@ +========= +ossintbas +========= + +----------------------- +OSS Integer BASIC Notes +----------------------- + +.. include:: manhdr7.rst + +.. include:: ossintbas_content.rst + +.. include:: manftr.rst + diff --git a/ossintbas_content.rst b/ossintbas_content.rst new file mode 100644 index 0000000..2289a84 --- /dev/null +++ b/ossintbas_content.rst @@ -0,0 +1,319 @@ +DESCRIPTION +=========== + +OSS Integer BASIC is a BASIC interpreter from OSS, similar to BASIC XL +and BASIC XE. It was never released as a commercial product, and was +eventually released into the Public Domain. + +It appears to be complete and free of major bugs. There is no manual +for it, so I'm documenting the differences between Integer BASIC and +BASIC XL/XE here, as I discover them. + +For more info on the release: + +  https://forums.atariage.com/topic/257029-oss-d-day-part-3-integer-basic-source-code-now-in-pd/ + +NUMERICS +======== + +All numbers are signed 16-bit integers. There is no floating point support +at all. + +Two's complement is used, so bit 15 is the sign bit, and *-1* is +represented as *$FFFF*. + +The range is *-32768* to *32767*. Somewhat confusingly (but also +usefully), positive numbers in the range *32768* to *65535* can be +entered in program code, or as response to **INPUT**, etc... but when +they are **PRINT**\ed, they will appear as negative numbers. This +is unlike Apple's Integer BASIC, for instance. It was probably done +so that BASIC code could use the familiar memory locations. Example: +**PEEK(53279)** to read the console keys. It would be very annoying if +this had to be written as **PEEK(-12257)**\... although it does work +if written that way (Apple-style). + +Although floating point is not supported, it's possible to enter +numbers with a decimal point or even scientific notation. These will +silently be converted to integers, with rounding. If the result is +outside the range *-32768* to *65535*, you'll get an **ERROR- 3**. +This applies to numbers entered as part of the program as well as +those entered in response to **INPUT**, or **READ** from **DATA** +lines. + +COMMANDS +======== + +**VBLANKWAIT** + +  Pause and wait for a vertical blank interrupt to occur. + +  Abbreviation: **V.** + +**VINC** *<var>* + +  Increment (add 1 to) a variable. This is about 30% faster than +  **A=A+1**. + +  Abbreviation: **VI.** + +**VDEC** *<var>* + +  Decrement (subtract 1 from) a variable. Faster than **A=A-1**. + +  Abbreviation: **VD.** + +**VCONST** *<num>*, *<var>* + +  Add a constant to *var*. There are 8 constants, numbered 0 through +  7. They are set with the **SET** command, using arguments 16 to 23 +  to set the constants. Example: **SET 16,10** sets constant 0 to 123, +  and **VCONST 0,A** adds 10 to A. + +  If *<num>* is greater than 7, the variable will be +  unchanged. **SET** won't accept a number higher than 23 for its first +  argument, so there'd be no way to set any constants other than 0 +  to 7 anyway. + +  When Integer BASIC first starts up, the constants are initialized +  to what amounts to garbage values. You can examine them with +  **SYS(16)** through **SYS(23)**, but it's a bad idea to depend on +  them because the values are different between the disk and cartridge +  versions of Integer BASIC. + +  Using VCONST is about 15% faster than just adding a number to a +  variable. + +  Abbreviation: **VC.** + + +FUNCTIONS +========= + +**RUN(0)** + +  Returns the run (coldstart) address of the interpreter. **? USR(RUN(0))** +  restarts Integer BASIC. The *0* is a 'dummy' argument (ignored, like **FRE(0)**\). + +OPERATORS +========= + +**!** + +  Binary OR. Infix operator. + +**&** + +  Binary AND. Infix operator. + +**%** + +  Binary exclusive OR (XOR). Infix operator. + +**<<** + +  Left shift, like C. Infix operator. Result is the expression on the left, +  shifted left by the number of bits on the right. Examples: **1<<4** +  is 16, **255<<1** is 510. + +  Bits shifted off the left end of the number are lost. Zeroes are +  shifted in, for the low-order bit(s). Shifting anything left 16 times +  results in zero. Since bit 15 is the sign bit, shifting a 1 into bit +  15 will result in a negative number. + +**>>** + +  Right shift, like C. Infix operator. Result is the expression +  on the left, shifted to the right, by the number of bits on the +  right. Examples: **16>>4** is 1, **255>>1** is 127. + +  Bits shifted off the right end of the number are lost. Zeroes are +  shifted in, for the high-order bit(s). Shifting any negative number +  to the right will result in a positive numbers, since a zero will be +  shifted into the sigh bit. + +**^&** + +  Binary NAND. Like AND, but inverts the bits in the result. Infix operator. + +**^!** + +  Binary NOR. Infix operator. + +**^%** + +  Binary NXOR. Infix operator. + +**\\** + +  Modulus. Infix operator. Result of **X&Y** is the remainder of **X/Y**. + +  *NOTE* that this is **broken** in the cartridge version of Integer BASIC, +  though it works correctly in the disk version. See **BUGS**, below. + + +COMPATIBILITY +============= + +Integer BASIC can't LOAD programs that were SAVEd by any other BASIC, +and programs SAVEd by Integer BASIC can't be LOADed in any other +BASIC. Use LIST and ENTER instead. + +Actually, the disk and cartridge versions of Integer BASIC can't even +LOAD each others' programs. They use a different set of token numbers. +This is because the cartridge version includes the **HITCLR** command, +but the disk version does not. + +The **INT()** function exists in Integer BASIC, but it doesn't actually +do anything. Seems to be provided for compatibility with other BASICs. + +Missing Commands +---------------- + +Integer BASIC has the full command set of the BASIC XL cartridge, +minus these commands: + +**DEG** **RAD** **RGET** **RPUT** + +The cartridge version of Integer BASIC has the **HITCLR** command +(from BASIC XE), but the disk version does not. + +The BASIC XL extension disk commands (**LOCAL**, **EXIT**, +**PROCEDURE**, **CALL**, **SORTUP**, and **SORTDOWN**) don't exist in +Integer BASIC. If there was ever an extensions disk for Integer BASIC, +nobody's found it yet. + +The extra commands in BASIC XE (**EXTEND**, **INVERSE**, **NORMAL**, +**BLOAD**, and **BSAVE**) are not supported. + +Missing Operators/Functions +--------------------------- + +**^** +  There is no exponentiation operator; **2^2** is a syntax error. + +**ATN()**, **CLOG()**, **COS()**, **EXP()**, **LOG()**, **SIN()** +  There are no trigonometric functions in Integer BASIC. These can +  be used as array variable names, if you wish. + +**USING** +  BASIC XL and XE's "PRINT USING" doesn't exist in Integer BASIC. + +PERFORMANCE +=========== + +OSS Integer BASIC is *fast*, compared to other interpreted BASICs on +the Atari. It even outperforms Turbo BASIC XL (though, not *compiled* +Turbo). + +For testing, I used a modified version of the Sieve of Eratosthenes +program, found in the source for **bas55**. The program finds and +prints all the prime numbers between 2 and 1000. The code:: + +  10 POKE 18,0:POKE 19,0:POKE 20,0 +  20 DIM A(1000) +  30 N=1000 +  100 S=SQR(N) +  110 FOR I=2 TO S +  120 IF A(I)=1 THEN 170 +  130 D=N/I +  140 FOR J=I TO D +  150 A(I*J)=1 +  160 NEXT J +  170 NEXT I +  180 FOR I=2 TO N +  190 IF A(I)=1 THEN 210 +  200 PRINT I +  210 NEXT I +  1000 PRINT PEEK(18)*256*256+PEEK(19)*256+PEEK(20) + +Line 1000 prints how many jiffies the program took to run. I used +Atari800 5.2.0 emulating an NTSC Atari 800XL, so one jiffy is 1/60 of +a second. The "Fastchip" results use Charles Marslet's OS floating +point replacement ROM. For Integer BASIC, BASIC XL and BASIC XE, +separate runs were done with the line **5 FAST** at the start of the +program. Results: + +.. csv-table:: + +  "BASIC", "Jiffies", "Speedup" +  "Atari 8K", "1867", "--" +  "A+", "1671", "1.12" +  "Atari 8K (Fastchip)", "1587", "1.18" +  "A+ (Fastchip)", "1569", "1.19" +  "XE", "1440", "1.3" +  "AMSB2", "1518", "1.23" +  "XL", "1270", "1.47" +  "Altirra", "1166", "1.67" +  "XL (FAST)", "1110", "1.68" +  "XL (Fastchip)", "1049", "1.78" +  "XL (Fastchip, FAST)", "887", "2.1" +  "Turbo", "825", "2.3" +  "XE (FAST)", "777", "2.4" +  "XE (Fastchip, FAST)", "777", "2.4" +  "Altirra (Fastchip)", "769", "2.43" +  "Integer", "719", "2.6" +  "Integer (FAST)", "575", "3.25" + +Turbo BASIC XL, Atari Microsoft BASIC, and OSS Integer BASIC run at +the same speed with or without the Fastchip ROM, since they don't use +the OS floating point routines. + +For reference, I rewrote the program in C and compiled it with +cc65. It runs in 349 jiffies, 5.35x as fast as BASIC, with or without +the Fastchip ROM. Since cc65 only supports integer arithmetic, this +probably represents the theoretical maximum speed the algorithm could +run in on the Atari, without rewriting it in assembly. By comparison, +Integer BASIC looks pretty good. + +If you get rid of lines 180 to 210 (don't print the results), Integer +BASIC with FAST runs it in 245 jiffies, and the equivalent C program +runs in 61 jiffies. This shows that CIO and the E: device are the +"bottleneck" for this program (and that compiled C is still faster +than anything interpreted). + + +BUGS +==== + +Modulo Arithmetic +----------------- + +The **\\** (modulus) operator returns incorrect results in the +cartridge version of Integer BASIC. This program demonstrates the +bug:: + +  10 For I=1 To 10 +  20   ? I,I\3,I-(I/3)*3 +  30 Next I + +When run with the disk version, the results are correct:: + +  1         1         1 +  2         2         2 +  3         0         0 +  4         1         1 +  5         2         2 +  6         0         0 +  7         1         1 +  8         2         2 +  9         0         0 +  10        1         1 + +The same program run with the cartridge version gives:: + +  1         254       1 +  2         255       2 +  3         0         0 +  4         1         1 +  5         2         2 +  6         253       0 +  7         254       1 +  8         255       2 +  9         0         0 +  10        1         1 + +This is obviously wrong. + +If you're writing a real program in Integer BASIC, I recommend +avoiding the **\\** operator entirely. Write something like **X-X/Y\*Y** +instead. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "PROTBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "PROTBAS" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  protbas \- LIST-protect Atari 8-bit BASIC programs  .SH SYNOPSIS @@ -111,32 +111,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "RENUMBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "RENUMBAS" 1 "2025-03-27" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  renumbas \- Renumber Atari 8-bit BASIC programs  .SH SYNOPSIS @@ -38,9 +38,10 @@ renumbas [\fB\-v\fP] [\fB\-s\fP \fIstart\-lineno\fP] [\fB\-i\fP \fIincrement\fP]  \fBrenumbas\fP reads a tokenized Atari 8\-bit BASIC program and writes a  renumbered copy of the program.  .sp -\fBinput\-file\fP must be a tokenized (SAVEd) Atari BASIC program. Use -\fI\-\fP to read from standard input, but \fBrenumbas\fP will refuse to -read from standard input if it\(aqs a terminal. +\fBinput\-file\fP must be a tokenized (SAVEd) Atari BASIC, BASIC XL, +BASIC XE, or Turbo BASIC program. Use \fI\-\fP to read from standard input, +but \fBrenumbas\fP will refuse to read from standard input if it\(aqs a +terminal.  .sp  \fBoutput\-file\fP will be the renumbered BASIC program. If it already  exists, it will be overwritten. Use \fI\-\fP to write to standard output, @@ -48,10 +49,12 @@ but \fBrenumbas\fP will refuse to write to standard output if it\(aqs a  terminal (since tokenized BASIC is binary data and may confuse the  terminal).  .sp -Line number references are changed in every line where they occur, so -e.g. if line 100 gets changed to 200, any other line that does a \fIGOTO\fP -\fI100\fP (or \fIGOSUB\fP, \fIRESTORE\fP, \fITRAP\fP, etc) will be updated with the new line -number. +Line number references are changed in every line where they occur, +so e.g. if line 100 gets changed to 200, any other line that does a +\fIGOTO\fP \fI100\fP (or \fIGOSUB\fP, \fIRESTORE\fP, \fITRAP\fP, etc) will be updated with +the new line number. If the input is BASIC/A+ or OSS Integer BASIC, +the line numbers will be changed, but references to them \fIwill not\fP +be updated (a warning will be printed to stderr, in that case).  .sp  Computed line numbers can\(aqt be updated (e.g. \fIGOTO A or GOSUB  1000+A*100\fP). These will cause warnings on stderr, so you can fix them @@ -173,32 +176,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -122,6 +122,14 @@ void renumber(void) {  	walk_all_code();  } +void check_basic_type(void) { +	if(lomem == 0x77) { +		fprintf(stderr, "%s: Warning: OSS Integer BASIC not fully supported.\n", self); +	} else if(save_command_tok == 0x1d || save_command_tok == 0x48) { +		fprintf(stderr, "%s: Warning: BASIC/A+ not fully supported.\n", self); +	} +} +  int main(int argc, char **argv) {  	set_self(*argv);  	parse_general_args(argc, argv, print_help); @@ -129,6 +137,7 @@ int main(int argc, char **argv) {  	readfile();  	parse_header(); +	check_basic_type();  	build_ref_table();  	renumber(); diff --git a/renumbas.rst b/renumbas.rst index a442ccb..bcfa996 100644 --- a/renumbas.rst +++ b/renumbas.rst @@ -14,12 +14,14 @@ renumbas [**-v**] [**-s** *start-lineno*] [**-i** *increment*] [**-f** *first-li  DESCRIPTION  =========== +  **renumbas** reads a tokenized Atari 8-bit BASIC program and writes a  renumbered copy of the program.  -**input-file** must be a tokenized (SAVEd) Atari BASIC program. Use -*-* to read from standard input, but **renumbas** will refuse to -read from standard input if it's a terminal. +**input-file** must be a tokenized (SAVEd) Atari BASIC, BASIC XL, +BASIC XE, or Turbo BASIC program. Use *-* to read from standard input, +but **renumbas** will refuse to read from standard input if it's a +terminal.  **output-file** will be the renumbered BASIC program. If it already  exists, it will be overwritten. Use *-* to write to standard output, @@ -27,10 +29,13 @@ but **renumbas** will refuse to write to standard output if it's a  terminal (since tokenized BASIC is binary data and may confuse the  terminal). -Line number references are changed in every line where they occur, so -e.g. if line 100 gets changed to 200, any other line that does a *GOTO* -*100* (or *GOSUB*, *RESTORE*, *TRAP*, etc) will be updated with the new line -number. +Line number references are changed in every line where they occur, +so e.g. if line 100 gets changed to 200, any other line that does a +*GOTO* *100* (or *GOSUB*, *RESTORE*, *TRAP*, etc) will be updated with +the new line number. If the input is BASIC/A+ or OSS Integer BASIC, +the line numbers will be changed, but references to them *will not* +be updated (a warning will be printed to stderr, in that case). +  Computed line numbers can't be updated (e.g. *GOTO A or GOSUB  1000+A*100*). These will cause warnings on stderr, so you can fix them @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "ROM2CART" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "ROM2CART" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  rom2cart \- Convert a raw ROM image to an Atari800 CART image, or vice versa  .\" RST source for rom2cart(1) man page. Convert with: @@ -239,32 +239,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -54,7 +54,7 @@ const char *commands[] = {  	"CSAVE",    /* $34 */  	"CLOAD",  	"",         /* $36, implied LET */ -	"ERROR -"   /* $37 */ +	"ERROR-  "  /* $37 */  };  const unsigned short last_command = (sizeof(commands) / sizeof(char *)) - 1; diff --git a/turbo_tokens.c b/turbo_tokens.c new file mode 100644 index 0000000..2278e21 --- /dev/null +++ b/turbo_tokens.c @@ -0,0 +1,82 @@ +/* these start at token 0x38 */ +const char *turbo_cmds[] = { +	"DPOKE", /* $38 */ +	"MOVE", +	"-MOVE", +	"*F", +	"REPEAT", +	"UNTIL", +	"WHILE", +	"WEND", +	"ELSE",  /* $40 */ +	"ENDIF", +	"BPUT", +	"BGET", +	"FILLTO", +	"DO", +	"LOOP", +	"EXIT", +	"DIR",   /* $48 */ +	"LOCK", +	"UNLOCK", +	"RENAME", +	"DELETE", +	"PAUSE", +	"TIME$=", +	"PROC", +	"EXEC",   /* $50 */ +	"ENDPROC", +	"FCOLOR", +	"*L", +	"------------------------------", +	"RENUM", +	"DEL", +	"DUMP", +	"TRACE",  /* $58 */ +	"TEXT", +	"BLOAD", +	"BRUN", +	"GO#", +	"#", +	"*B", +	"PAINT", +	"CLS",    /* $58 */ +	"DSOUND", +	"CIRCLE", +	"%PUT", +	"%GET"    /* $64 */ +}; + +const int turbo_cmd_size = sizeof(turbo_cmds); + +/* these start at token 0x55 */ +const char *turbo_ops[] = { +	"DPEEK", /* $55 */ +	"&", +	"!", +	"INSTR", /* $58 */ +	"INKEY$", +	" EXOR ", +	"HEX$", +	"DEC", +	" DIV ", +	"FRAC", +	"TIME$", +	"TIME",  /* $60 */ +	" MOD ", +	" EXEC ", +	"RND", +	"RAND", +	"TRUNC", +	"%0", +	"%1", +	"%2",    /* $68 */ +	"%3", +	" GO# ", +	"UINSTR", +	"ERR", +	"ERL",   /* $6D */ +}; + +const int turbo_ops_size = sizeof(turbo_ops); + diff --git a/turbo_tokens.h b/turbo_tokens.h new file mode 100644 index 0000000..3cb83ec --- /dev/null +++ b/turbo_tokens.h @@ -0,0 +1,5 @@ +extern const char *turbo_cmds[]; +extern const int turbo_cmd_size; + +extern const char *turbo_ops[]; +extern const int turbo_ops_size; @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "UNMAC65" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "UNMAC65" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  unmac65 \- Detokenize Atari 8-bit Mac/65 SAVEd files.  .\" RST source for unmac65(1) man page. Convert with: @@ -371,32 +371,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -822,6 +822,7 @@ void atari8_get_opts() {  #endif  void usage() { +	fputs(BANNER, stderr);  	fprintf(stderr, "usage: " SELF " [options] inputfile\n\n");  	fprintf(stderr, "options:\n");  #ifndef ATARI8 @@ -998,9 +999,8 @@ void handle_cli_opts(int argc, char **argv) {  }  int main(int argc, char **argv) { -	fputs(BANNER, stderr); -  #ifdef ATARI8 +	fputs(BANNER, stderr);  	while(1) {  	if(argc < 2) {  		atari8_get_opts(); diff --git a/unprotbas.1 b/unprotbas.1 index b6655e7..7521520 100644 --- a/unprotbas.1 +++ b/unprotbas.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "UNPROTBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "UNPROTBAS" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  unprotbas \- Unprotect LIST-protected Atari 8-bit BASIC programs  .SH SYNOPSIS @@ -338,32 +338,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -1 +1 @@ -.. |version| replace:: 0.2.1 +.. |version| replace:: 0.2.2 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "VXREFBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "VXREFBAS" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  vxrefbas \- Variable cross-reference for tokenized Atari 8-bit BASIC files  .SH SYNOPSIS @@ -114,32 +114,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. diff --git a/whichbas.1 b/whichbas.1 new file mode 100644 index 0000000..6be299f --- /dev/null +++ b/whichbas.1 @@ -0,0 +1,299 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "WHICHBAS" 1 "2025-03-26" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +whichbas \- Determine BASIC variant of a tokenized Atari 8-bit program +.SH SYNOPSIS +.sp +whichbas [\-v] \fIinput\-file\fP [\fIinput\-file\fP ...] +.SH DESCRIPTION +.sp +\fBwhichbas\fP reads tokenized Atari 8\-bit BASIC, Turbo BASIC, BASIC +XL, BASIC XE, BASIC/A+, OSS Integer BASIC, or Atari Microsoft BASIC +programs and attempts to discover which BASIC is required to run each +one. +.sp +Note: OSS Integer BASIC is \fInot\fP to be confused with Apple II Integer BASIC! +.sp +\fIinput\-file\fPs must be actual files. \fBwhichbas\fP can\(aqt read from +standard input, because it seeks in the input file. +.sp +With multiple \fIinput\-file\fPs, the output is one line per file, +with the filename, a tab, and the detected BASIC. With only one +\fIinput\-file\fP, the filename and tab are not printed. +.SH OPTIONS +.sp +\fINote\fP: none of the options \fB\-s\fP \fB\-k\fP \fB\-v\fP are allowed +when checking multiple files; they only work if there\(aqs just one +\fIinput\-file\fP argument. +.SS Detection Options +.INDENT 0.0 +.TP +.B \fB\-s\fP +Script (or silent) mode. Instead of printing a human\-readable +name like "Turbo BASIC XL" or "OSS BASIC XE" to stdout, \fBwhichbas\fP +will print nothing on standard output, but will exit with a status +indicating what it detected. The caller can check the return status +(e.g. the \fB$?\fP variable in Bourne/POSIX shells, or \fBERRORLEVEL\fP +in MS\-DOS or Windows). See \fBEXIT STATUS\fP, below. +.TP +.B \fB\-k\fP +Keep going. The default is to stop looking at the program if the +BASIC type gets narrowed down to either Turbo BASIC or BASIC XE. +This option also enables \fB\-v\fP (verbose). It\(aqs really only useful +for testing, if you\(aqre hacking on \fBwhichbas\fP itself. +.UNINDENT +.SS General Options +.INDENT 0.0 +.TP +.B \fB\-\-help\fP +Print usage message and exit. +.TP +.B \fB\-\-version\fP +Print version number and exit. +.TP +.B \fB\-v\fP +Verbose operation. When displaying a number in verbose mode, it will +be prefixed with \fI$\fP if it\(aqs in hex, or no prefix for decimal. +.UNINDENT +.SH NOTES +.sp +Atari BASIC programs are detected \fIalmost\fP 100% reliably. See \fBBUGS\fP, below, +for the gory details. +.sp +Turbo BASIC, BASIC XL, and BASIC XE are all supersets of Atari BASIC. +If you wrote a program using one of them, but didn\(aqt use any of the +extra commands or functions, the result is still an Atari BASIC program. +Likewise, if you wrote a program using BASIC XE, but only used the +commands/functions it has in common with BASIC XL, it would be +detected as BASIC XL. +.sp +There are two types of BASIC XE programs: regular and \fIEXTEND\fPed. The +extended type is detected 100% reliably, because the first byte of the +file changes from \fB$00\fP to \fB$DD\fP\&. Non\-extended programs are only +identified as BASIC XE if they use any of the extra commands BASIC XE +adds to those found in BASIC XL. +.sp +Detection of Turbo vs. BXL/BXE isn\(aqt 100% reliable, and probably +never will be. There\(aqs too much overlap between the sets of extra +tokens added by each. Programs that don\(aqt use very many of the extra +functions provided by Turbo/BXL/BXE may show up as "Either Turbo BASIC XL +or OSS BASIC XL". +.sp +Atari Microsoft BASIC is detected by checking that: +.INDENT 0.0 +.INDENT 3.5 +.INDENT 0.0 +.IP \(bu 2 +the first byte of the file is \fB$00\fP\&. +.IP \(bu 2 +the next 2 bytes (LSB/MSB) are the same as the actual file length minus 3. +.IP \(bu 2 +the last 3 bytes of the file are zero. +.UNINDENT +.UNINDENT +.UNINDENT +.sp +This may result in false positives (files that aren\(aqt BASIC programs at +all might show up as Microsoft). Also, no distinction is made between +Atari MS BASIC 1.0 and 2.0. +.sp +OSS BASIC/A+ is an extended form of Atari BASIC. It\(aqs source +compatible with Atari BASIC, but not token\-compatible because it uses +different token numbers for the regular BASIC commands and operators. +Example: SAVE is token \fB$19\fP in Atari BASIC (also Turbo/BXL/BXE), +but in A+ it\(aqs token \fB$1D\fP\&. Detection should be 100% reliable, but +since there aren\(aqt many BASIC/A+ programs in the wild, it hasn\(aqt been +thoroughly tested. +.sp +OSS Integer BASIC is a product that was developed by OSS, but never +released until recently. It\(aqs similar to BASIC XL and XE, but uses +16\-bit integers for all numeric operations, rather than 6\-byte BCD +floating point. Integer BASIC\(aqs SAVEd programs are recognized by the +first two bytes, which are always \fB$77\fP \fB$00\fP\&. There are two known +versions of Integer BASIC (disk and cartridge), which use different +command tokens; \fBwhichbas\fP detects which version by looking at the +token SAVE or CSAVE command at the end of the file. +.sp +Various non\-BASIC files are detected (including Mac/65 source, +ELF binaries, etc) as a convenience, but I wouldn\(aqt rely on +\fBwhichbas\fP\(aqs non\-BASIC file type detection if I were you. +If you need the \fBfile\fP(1) command, use it. +.sp +\fBwhichbas\fP knows nothing about other BASICs such as Frost BASIC or +Altirra BASIC. +.sp +When using multiple \fIinput\-file\fP arguments, a separate instance of +\fBwhichbas\fP is spawned for each file. This isn\(aqt the most efficient +approach, but it shouldn\(aqt cause problems on reasonably modern +systems. +.SH BUGS +.SS Misdetection +.sp +It\(aqs possible to get a BASIC XL/XE program to misdetect as Atari BASIC +by writing a program that does these things: +.INDENT 0.0 +.INDENT 3.5 +.INDENT 0.0 +.IP \(bu 2 +Dimension a string array with a number of elements that isn\(aqt just a +numeric constant or numeric variable (e.g. \fIDIM A$(2+2,10)\fP or +\fIDIM A$(I*2,10)\fP). The code that detects a string array \fIDIM\fP command +can only handle simple cases like \fIDIM A$(10,10)\fP or \fIDIM A$(I,10)\fP\&. +It doesn\(aqt actually matter if the 2nd argument is a fancy expression, +though. +.IP \(bu 2 +Does \fInot\fP actually \fIuse\fP the string array variable by assigning to +it or reading a value from it. String array accesses in BASIC XL/XE +are reliably detected because they require a semicolon after the +first number, even if there isn\(aqt a 2nd number. Example: \fI? A$(2;)\fP +prints the 2nd element of the \fIA$\fP string array. If it were written +as \fI? A$(2)\fP, but \fIA$\fP is a string array (not a regular string), +BASIC XL/XE would give an \fIError 40\fP (string type mismatch) at +runtime. +.UNINDENT +.UNINDENT +.UNINDENT +.sp +The good news is, such a program will still work fine in Atari BASIC. +Atari BASIC will dimension it as a regular string variable and ignore +the 2nd dimension. Since it\(aqs not actually used elsewhere in the program, +it doesn\(aqt hurt anything. +.SH EXIT STATUS +.sp +Without the \fB\-s\fP option, exit status is 0 for success, non\-zero for +failure. +.sp +With the \fB\-s\fP option, the exit status is: +.INDENT 0.0 +.TP +.B \fB0\fP +Not used with \fB\-s\fP\&. +.TP +.B \fB1\fP or \fB2\fP +Error reading file. Error message will be printed on standard error. +.TP +.B \fB3\fP +Atari BASIC detected. +.TP +.B \fB4\fP +Turbo BASIC detected. +.TP +.B \fB5\fP +OSS BASIC XL detected. +.TP +.B \fB6\fP +Non\-EXTENDed OSS BASIC XE detected. +.TP +.B \fB7\fP +Turbo BASIC or BASIC XL (undecided which). +.TP +.B \fB8\fP +Turbo BASIC or non\-EXTENDed BASIC XE (undecided which). +.TP +.B \fB9\fP +Turbo BASIC, BASIC XL, or non\-EXTENDed BASIC XE (undecided which). +.TP +.B \fB10\fP +Unknown Atari BASIC derivative (not Atari BASIC, but not +Turbo/BXL/BXE/A+ either). +.TP +.B \fB11\fP +Atari Microsoft BASIC detected. +.TP +.B \fB12\fP +EXTENDed OSS BASIC XE detected. +.TP +.B \fB13\fP +Compiled Turbo BASIC detected. +.TP +.B \fB14\fP +OSS BASIC/A+ detected. +.TP +.B \fB15\fP +OSS Integer BASIC (cartridge version) detected. +.TP +.B \fB16\fP +OSS Integer BASIC (disk version) detected. +.TP +.B \fB64\fP +None of the above; not BASIC. +.UNINDENT +.sp +In the future, more exit codes may be defined (in the range \fB15\fP to +\fB63\fP), but the existing ones will not change. +.SH COPYRIGHT +.sp +WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. +.SH AUTHOR +.INDENT 0.0 +.IP B. 3 +Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. +.UNINDENT +.SH SEE ALSO +.sp +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\fP(7). +.sp +Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference +Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. +.\" Generated by docutils manpage writer. +. diff --git a/whichbas.c b/whichbas.c new file mode 100644 index 0000000..001d8d8 --- /dev/null +++ b/whichbas.c @@ -0,0 +1,1271 @@ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <time.h> +#include <sys/wait.h> + +#include "bas.h" +#include "whichbas.h" + +#define BT_INVALID 0 +#define BT_ATARI 1 +#define BT_TURBO 2 +#define BT_BXL 4 +#define BT_BXE 8 + +#define BT_BXL_BXE (BT_BXL | BT_BXE) + +int bas_type = 0x0f; /* start out with all enabled */ + +int script_mode = 0; /* -s flag */ +int script_ret; /* -s mode, exit with one of SRET_* from whichbas.h as status */ + +int keep_going = 0; /* -k flag */ + +int comma_count; /* count of regular commas (not string/array) in statement */ +unsigned char last_cmd; +unsigned char last_op_tok; +unsigned short last_cmd_pos; + +void print_help(void) { +	printf("Usage: %s [-v] [-h] [-k] [-s] <inputfile> ...\n", self); +} + +int child_errs = 0; + +/* return true if the child ran and returned 0 (success) */ +int spawn_child(const char **args) { +	pid_t pid, status; +	int wstatus; + +	pid = fork(); +	if(pid == -1) { +		perror("fork()"); +		die("Can't spawn child process"); +	} else if(pid) { +		/* we are the parent */ +		status = waitpid(pid, &wstatus, 0); +		if(status < 0) { +			perror("waitpid()"); +			die("Child process went south"); +		} +		if(! (WIFEXITED(wstatus) && WEXITSTATUS(wstatus) == 0) ) { +			child_errs++; +			return 0; +		} +	} else { +		/* we are the child */ +		if(execv(args[0], (char * const *)args) < 0) { +			perror("exec()"); +			exit(1); +		} +	} + +	return 1; +} + +/* this is not the ideal way to handle multiple files. it forks a new +   process for each one. however, I embedded a bunch of die() calls +   in bas.c, thinking I'd never use some of the functions more than once +   in the same run. what I get for trying to KISS... */ +void multiple_files(const char *argv0, char **list) { +	const char *args[5]; /* 5 because eventually we include -k and/or -v */ +	int kidstat; + +	/* this isn't needed for things to work, but if I write buggy code, +	   it avoids a forkbomb. */ +	setenv("WHICHBAS_MULTI_PARANOIA", "1", 1); + +	args[0] = argv0; +	args[2] = NULL; + +	while(*list) { +		args[1] = *list; +		printf("%s:\t", *list); +		fflush(stdout); +		kidstat = spawn_child(args); +		if(!kidstat) puts("(detection failed)"); +		fflush(stdout); +		list++; +	} + +	if(child_errs) { +		fprintf(stderr, "%s: exiting with error status because some files failed.\n", self); +		exit(1); +	} else { +		exit(0); +	} +} + +void parse_args(int argc, char **argv) { +	int opt; + +	while( (opt = getopt(argc, argv, "vksh")) != -1) { +		switch(opt) { +			case 'v': verbose = 1; break; +			case 'k': keep_going = verbose = 1; break; +			case 's': script_mode = 1; break; +			case 'h': print_help(); exit(0); +			default: +				print_help(); +				exit(1); +		} +	} + +	if(optind >= argc) +		die("No input file given (and stdin not supported)."); + +	if(optind == argc - 1) { /* got one filename only */ +		open_input(argv[optind]); +		if(input_file == stdin) +			die("Reading from standard input not supported."); +	} else { /* got multiple filenames */ +		if(keep_going || verbose || script_mode) +			die("-k, -v, -s not supported with multiple filenames (yet?)"); +		if(getenv("WHICHBAS_MULTI_PARANOIA")) +			die("BUG: multiple_files() recursion!"); +		multiple_files(argv[0], argv + optind); +	} +} + +/* don't need this. +void add_type(int type) { +	bas_type |= type; +} +*/ + +void print_result(void) { +	const char *name; + +	if(verbose) fprintf(stderr, "   final bas_type %02x\n", bas_type); + +	if(bas_type == BT_INVALID) { +		name = "Unknown variant: Not Atari BASIC, Turbo, BXL, or BXE"; +		script_ret = SRET_UKNOWN_DERIV; +	} else if(bas_type & BT_ATARI) { +		name = "Atari BASIC"; +		script_ret = SRET_ATARI; +	} else if(bas_type & BT_TURBO) { +		if(bas_type & BT_BXL) { +			name = "Either Turbo BASIC XL or OSS BASIC XL"; +			script_ret = SRET_TURBO_OR_BXL; +		} else if(bas_type & BT_BXE) { +			name = "Either Turbo BASIC XL or OSS BASIC XE"; +			script_ret = SRET_TURBO_OR_BXE; +		} else { /* bas_type == BT_TURBO */ +			name = "Turbo BASIC XL"; +			script_ret = SRET_TURBO; +		} +	} else if(bas_type == BT_BXL || bas_type == (BT_BXL | BT_BXE)) { +		name = "OSS BASIC XL"; +		script_ret = SRET_BXL; +	} else if(bas_type == BT_BXE) { +		name = "OSS BASIC XE"; +		script_ret = SRET_BXE; +	} else { +		/* this one should never happen: */ +		name = "Either Turbo BASIC XL, OSS BASIC XL, or OSS BASIC XE"; +		script_ret = SRET_TURBO_OR_BXL_OR_BXE; +	} + +	if(script_mode) { +		exit(script_ret); +	} else { +		puts(name); +		exit(0); +	} +} + +/* return true if a token is numeric constant +   (including TB/BXE/BXL hex) */ +int is_numconst_op(unsigned char tok) { +	switch(tok) { +		case OP_NUMCONST: +		case OP_HEXCONST: +			return 1; +		default: +			return 0; +	} +} + +/* return true if a token is a function that *returns* +   a numeric value (says nothing about the argument types, +   though!) */ +int is_numeric_func(unsigned char tok) { +	switch(tok) { +		case OP_FUNC_USR: +		case OP_FUNC_ASC: +		case OP_FUNC_VAL: +		case OP_FUNC_LEN: +		case OP_FUNC_ADR: +		case OP_FUNC_ATN: +		case OP_FUNC_COS: +		case OP_FUNC_PEEK: +		case OP_FUNC_SIN: +		case OP_FUNC_RND: +		case OP_FUNC_FRE: +		case OP_FUNC_EXP: +		case OP_FUNC_LOG: +		case OP_FUNC_CLOG: +		case OP_FUNC_SQR: +		case OP_FUNC_SGN: +		case OP_FUNC_ABS: +		case OP_FUNC_INT: +		case OP_FUNC_PADDLE: +		case OP_FUNC_STICK: +		case OP_FUNC_PTRIG: +		case OP_FUNC_STRIG: +			return 1; +		default: +			return 0; +	} +} + +/* return true if a token is an arithmetic operator */ +int is_arith_op(unsigned char tok) { +	switch(tok) { +		case OP_UPLUS:    /* not sure these two... */ +		case OP_UMINUS:   /* ...really belong here */ +		case OP_NUM_LE: +		case OP_NUM_NE: +		case OP_NUM_GE: +		case OP_NUM_LT: +		case OP_NUM_GT: +		case OP_NUM_EQ: +		case OP_POWER: +		case OP_MULT: +		case OP_PLUS: +		case OP_MINUS: +		case OP_DIVIDE: +		case OP_NOT: +		case OP_OR: +		case OP_AND: +		case OP_NUM_ASSIGN: +		case OP_GRP_LPAR: /* yes, this belongs here, (((A$))) is a syntax error! */ +			return 1; +		default: +			return 0; +	} +} + +int is_numeric_var(unsigned char tok) { +	int vartype; + +	if(tok < 0x80) +		return 0; + +	vartype = get_vartype(tok); +	return (vartype == TYPE_SCALAR || vartype == TYPE_ARRAY); +} + +/* return true if a token is: +   - a numeric constant (including hex constants), +   - a numeric variable (including arrays), +	- a function that returns a numeric (e.g. ASC(), SIN()). +	for now, only standard Atari BASIC tokens are considered. +	unary minus and plus make sense here, but binary ops don't. + */ +int is_numeric_rval(unsigned char tok) { +	return +		(tok == OP_UMINUS)    || +		(tok == OP_UPLUS)     || +		is_numconst_op  (tok) || +		is_numeric_func (tok) || +		is_numeric_var  (tok) ; +} + +/* return true if a token is: +   - a numeric constant (including hex constants), +   - a numeric variable (including arrays), +   - a math operator (plus, minus, etc), +	- a function that returns a numeric (e.g. ASC(), SIN()). +	for now, only standard Atari BASIC tokens are considered. + */ +int is_numeric_op(unsigned char tok) { +	return +		is_numeric_rval (tok) || +		is_arith_op     (tok) ; +} + +int is_string_var(unsigned char tok) { +	return (tok >= 0x80 && (get_vartype(tok) == TYPE_STRING)); +} + +int is_string_const(unsigned char tok) { +	return (tok == OP_STRCONST); +} + +int is_string_exp_op(unsigned char tok) { +	switch(tok) { +		case OP_STR_ASSIGN: +		case OP_STR_LE: +		case OP_STR_NE: +		case OP_STR_GE: +		case OP_STR_LT: +		case OP_STR_GT: +		case OP_STR_EQ: +		case OP_STR_LPAR: /* the ( in: A$(1)="A" */ +			return 1; +		default: +			return 0; +	} +} + +int is_string_func(unsigned char tok) { +	switch(tok) { +		case OP_FUNC_STR: +		case OP_FUNC_CHR: +			return 1; +		default: +			return 0; +	} +} + +/* return true if a token is: +   - a string constant, +   - a string variable, +   - a function that returns a string. +*/ +int is_string_rval(unsigned char tok) { +	return +		is_string_const  (tok) || +		is_string_func   (tok) || +		is_string_var    (tok) ; +} + +/* return true if a token is: +   - a string constant, +   - a string variable, +   - a string expression operator, like OP_STR_LE, +   - a function that returns a string. +*/ +int is_string_op(unsigned char tok) { +	return +		is_string_rval   (tok) || +		is_string_exp_op (tok) ; +} + +/* true if an operator token is a string function in BASIC XL (or XE). +   these tokens are all numeric functions in Turbo, so be sure you +   know what you're doing! */ +int is_bxl_string_func(unsigned char tok) { +	switch(tok) { +		case 0x5c: /* BXL HEX$, Turbo DEC */ +		case 0x66: /* BXL LEFT$, Turbo %0 */ +		case 0x67: /* BXL RIGHT$, Turbo %1 */ +		case 0x68: /* BXL MID$, Turbo %2 */ +			return 1; +		default: +			return 0; +	} +} + +void remove_type(int type) { +	bas_type &= ((~type) & 0x0f); + +	if(keep_going) return; + +	/* without -k, stop if it gets narrowed down to one of these 4. */ +	if(bas_type == BT_ATARI || bas_type == BT_TURBO || bas_type == BT_BXE || bas_type == BT_BXL) +		print_result(); +} + +void set_type(int type) { +	bas_type = type; +	if(!keep_going) print_result(); +} + +CALLBACK(handle_cmd) { +	int has_args = 0, has_var_arg = 0, vartype = -1; +	unsigned char nexttok; + +	last_cmd = tok; +	last_cmd_pos = pos; +	comma_count = 0; + +	if(verbose) fprintf(stderr, "handle_cmd: lineno %d, tok $%02x, bas_type was %02x\n", lineno, tok, bas_type); + +	nexttok = program[pos + 1]; +	has_args = !(nexttok == OP_EOS || nexttok == OP_EOL); +	if(nexttok >= 0x80) { +		has_var_arg = 1; +		vartype = get_vartype(nexttok); +	} + +	/* this switch is for tokens that are the same in Atari/Turbo/BXL/BXE, but with +	   different semantics. non-Atari-BASIC tokens go in the switch below, not +	   this one. */ +	switch(tok) { +	   /* TB uses the same token for CLOSE as Atari and BXL/BXE, but it allows +	      it to have no argument (meaning, close all IOCBs). SOUND is the same +		   (no args = silence all POKEY channels). */ +		case CMD_CLOSE: +		case CMD_SOUND: +			if(!has_args) { +				set_type(BT_TURBO); +			} +			break; +		case CMD_INPUT: +			/* TB, BXL, BXE all support INPUT "Prompt",VAR with the same tokenized +			   form. Atari BASIC doesn't allow string constants in INPUT args. */ +			if(has_args) { +				if(nexttok == OP_STRCONST) { +					int pos_after_string; +					remove_type(BT_ATARI); +					/* TB only: INPUT "Prompt";VAR is also supported (not in BXL/BXE) */ +					pos_after_string = pos + 3 + program[pos + 2]; +					if(verbose) +						fprintf(stderr, +								"===> INPUT with string prompt at line %d, " +								"pos %04x, pos_after_string %04x (token %02x)\n", +								lineno, pos, pos_after_string, program[pos_after_string]); +					if(program[pos_after_string] == OP_SEMICOLON) { +						set_type(BT_TURBO); +					} +				} +			} else { /* has_args is false, oh shit! */ +				fprintf(stderr, "*** INPUT without variable at line %d.\n*** Rev A BASIC bug, program will crash, better fix it!\n", lineno); +				set_type(BT_ATARI); +			} +			break; +		case CMD_GET: +		case CMD_PUT: +		   /* TB uses the same tokens for GET and PUT as Atari/BXL/BXE, but it allows +		      the argument to be a variable without a # in front of it. */ +			if(nexttok != OP_HASH) { +				set_type(BT_TURBO); +			} +			/* PARTIAL: we really should detect GET #1,A$. this is Turbo-only, but +			   probably nobody ever uses it because it doesn't seem to *work*, +			   at least not in TB 1.5. A$ always ends up empty with length 0. */ +			break; +		case CMD_RESTORE: +		case CMD_TRAP: +			/* TB allows RESTORE #LABEL and TRAP #LABEL */ +			if(nexttok == OP_HASH) { +				set_type(BT_TURBO); +			} +			break; +		default: break; +	} + +	if(tok <= CMD_ERROR) return; /* legal in BASIC, ignore */ +	remove_type(BT_ATARI); +	if(tok >= 0x59) remove_type(BT_BXL); + +	if(tok >= 0x65) { +		fprintf(stderr, "handle_cmd: invalid command %02x at line %d\n", tok, lineno); +		keep_going = 0; +		set_type(BT_INVALID); +	} + +	/* we have tokens 0x3a to 0x68 in both TB and BXE, or 47 of them. + +      Some tokens can't be determined, because they take the +      same argument (or lack of) in both Turbo and BXL/XE. These +      are: + +      0x3c: REPEAT or ELSE (no args either way) +      0x46: LOOP or CP (no args either way) +      0x49: LOCK or UNPROTECT (take the same args) +      0x4B: RENAME in both Turbo and BXL/XE (same token, same args) + +      4 of them, this leaves 43 we can check. + +      Covered so far: 41 (95%). +      However, some of these are marked PARTIAL because they're not detected +      under all circumstances. + +      Unchecked tokens: + +      0x5B: BRUN or CALL (both take a string, CALL allows "USING" though) +            This isn't really important, as CALL requires a PROCEDURE to +            exist, and we *do* catch the PROCEDURE token. +      0x5F: PAINT (req 2 args) or NUM (optional 2 args). +            Again, not important, because it's highly unlikely any BXL/BXE +            program will contain NUM... because when it executes, it stops the +            program and goes back to the READY prompt (in auto-numbering mode). +    */ +	switch(tok) { +		case 0x39: /* MOVE <args> or ENDWHILE */ +		case 0x3a: /* -MOVE <args> or TRACEOFF */ +		case 0x3d: /* UNTIL <args> or ENDIF */ +		case 0x56: /* DEL <args> or FAST */ +      case 0x62: /* CIRCLE (3 or 4 num args) or NORMAL (no args) */ +			/* COMPLETE */ +			if(has_args) { +				remove_type(BT_BXL_BXE); +			} else { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x58: /* TRACE (optional + or -), EXTEND (BXE; no args) */ +			/* COMPLETE */ +			/* In BXL, this looks to be an extra END token, that behaves the same +			   as the regular one, but can't be entered in the editor. Assume +			   no BXL program contains this token. */ +			/* In BXE, EXTEND can't actually appear in a program (it's direct +			   mode only). The only way to get EXTEND into a BXE program is +			   to do a direct mode command like: +			   EXTEND:SAVE "D:PROG" +				...which of course puts it at line 32768. But this code will +			   never see that, because we'd already detect EXTENDed BXE +			   based on the first 2 bytes of the file. +			*/ +			/* So, if we see this token, it *has* to be Turbo's TRACE, whether +			   or not it has an argument. */ +			set_type(BT_TURBO); +			break; + +		case 0x59: /* TEXT or PROCEDURE */ +			/* COMPLETE */ +			/* Turbo: TEXT (1st arg is number), +            BXL: invalid token, +            BXE: PROCEDURE (arg is string const (not var!)) */ +			if(nexttok == OP_STRCONST) { +				/* this token doesn't seem to be valid in BXL at all */ +				set_type(BT_BXE); +			} else { +				remove_type(BT_BXL_BXE); +			} +			break; + +		case 0x3f: /* WEND or LOMEM <args> */ +		case 0x40: /* ELSE or DEL <args> */ +		case 0x41: /* ENDIF or RPUT <args> */ +		case 0x45: /* DO or TAB <args> */ +		case 0x47: /* EXIT or ERASE <args> */ +		case 0x51: /* ENDPROC or PMMOVE <args> */ +			/* COMPLETE */ +			if(has_args) { +				remove_type(BT_TURBO); +			} else { +				remove_type(BT_BXL_BXE); +			} +			break; + +		case 0x48: /* DIR (optional arg) or PROTECT (req'd arg) */ +			/* PARTIAL: without args means TB, but with arg, +				it could be either */ +			if(!has_args) { +				remove_type(BT_BXL_BXE); +			} +			break; + +		case 0x4a: /* UNLOCK (req'd arg) or DIR (optional arg) */ +			/* PARTIAL: without args means BXL/BXE, but with arg, +				it could be either */ +			if(!has_args) { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x3b: /* *F (optional + or -), TRACE (no arg) */ +		case 0x5e: /* *B (optional + or -) or EXIT (no arg) */ +			/* PARTIAL: doesn't catch *F or *B by itself with no +/- */ +			if(has_args) { +				remove_type(BT_BXL_BXE); +			} +			break; + +		case 0x44: /* FILLTO or BGET (check for a # after the token) */ +			/* COMPLETE */ +			if(nexttok == OP_HASH) { +				remove_type(BT_TURBO); +			} else { +				remove_type(BT_BXL_BXE); +			} +			break; + +		case 0x4e: /* TIME$= (1 string arg) or PMCLR (1 num arg) */ +			/* PARTIAL: but almost complete. nothing happens if it's +			   TIME$= with a string function (probably rare) or PMCLR +			   with a complex expression. */ +			if(nexttok == OP_STRCONST) { +				remove_type(BT_BXL_BXE); +			} else if(has_var_arg && vartype == TYPE_STRING) { +				remove_type(BT_BXL_BXE); +			} else if(nexttok == OP_NUMCONST) { +				remove_type(BT_TURBO); +			} else if(has_var_arg && vartype == TYPE_SCALAR) { +				remove_type(BT_TURBO); +			} +			break; + +      case 0x50: /* EXEC (1 arg, *must* be variable) or PMGRAPHICS (1 num arg, may be const) */ +			/* PARTIAL: PMGRAPHICS VAR won't be detected. but this usage is rare. */ +			/* This check is actually redundant, because EXEC requires Turbo's +			   label type (high bits in var name table both set to 1), which we already +			   detected in check_variables().  */ +			if(!has_var_arg) { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x54: /* -- in TB, LVAR in BXL/BXE */ +			/* COMPLETE */ +			/* We can tell these apart because: +				1. TB gives us a next-statement offset of 5 if -- is the first (or +				   actually only) statement on a line. Normally, the minimum offset +				   is 6, but there's no OP_EOL after this token for some reason. +			   2. If -- is the 2nd or or later statement on a line (after a colon) +			      it *does* get a statement terminator, but it's 0x9b (ATASCII EOL, +				   like a REM or DATA gets). +			   Note that it's impossible to put more statements *after* the --, +			   they just get ignored if you type them. This doesn't help us +			   here, but it's interesting anyway. +			   Also, the -- is what you type to enter it into the program, but +			   it get LISTed as a line of 30 dashes. +			   The explanation is a lot longer than the code... */ +			if(program[pos - 1] == 0x05 || nexttok == 0x9b) { +				set_type(BT_TURBO); +			} else { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x57: /* DUMP (1 optional string arg) or LOCAL (1 *numeric* variable arg) */ +			/* BXL/BXE's LOCAL only works on scalars, not arrays or strings. so if there's +			   no arg, or one string arg... */ +			/* PARTIAL: almost complete, doesn't handle DUMP func$(arg), which I +				doubt anyone uses anyway. */ +			if(!has_args) { +				/* only Turbo allows no arg... */ +				remove_type(BT_BXL_BXE); +			} else if(nexttok == OP_STRCONST) { +				/* only Turbo allows a string constant arg... */ +				remove_type(BT_BXL_BXE); +			} else if(has_var_arg && vartype == TYPE_STRING) { +				/* only Turbo allows a string variable arg... */ +				remove_type(BT_BXL_BXE); +			} else if(has_var_arg && vartype == TYPE_SCALAR) { +				/* only BXL/BXL allows a scalar variable arg */ +				remove_type(BT_TURBO); +			} +			break; + +		case 0x5a: /* TB: BLOAD; BXL: extension mechanism; BXE: invalid. */ +			/* COMPLETE */ +			/* This is the token used for the BXL EXTEND.COM added commands, +			   from the Toolkit disk. It's followed by a byte ranging 0x10 +			   to 0x15 that specifies which extended command, e.g. 0x5a 0x11 means +			   EXIT, 0x5a 0x12 is PROCEDURE, 0x5a 0x13 is CALL. Although +			   these look like BXE's extra commands, they aren't the same tokens, +			   and BXE will choke on them (RUN causes "Error- 33", LIST causes +			   a lockup). */ +			if(nexttok >= 0x10 && nexttok <= 0x15) { +				/* worth mentioning to the user... */ +				fprintf(stderr, "Note: program requires EXTEND.COM from BASIC XL Toolkit disk.\n"); +				set_type(BT_BXL); +			} else { +				/* it's BLOAD if followed by e.g. OP_STRCONST or a variable */ +				set_type(BT_TURBO); +			} +			break; + +		case 0x5c: /* GO# (1 arg only) or SORTUP (optional 2nd arg of USING, but no comma) */ +		case 0x5d: /* # (1 arg only) or SORTDOWN (optional 2nd arg of USING, but no comma) */ +			/* COMPLETE but no longer needed (check_variables() already found the +			   11xxxxxx variables) */ +			/* Turbo BASIC labels have the high 2 bits set to 11, which is illegal +			   in Atari/BXL/BXE. */ +			if(vartype == 3) { +				remove_type(BT_BXL_BXE); +			} else { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x60: /* CLS (optional IOCB with #) or HITCLR (no args) */ +			/* PARTIAL: without args, can't tell them apart. */ +			/* I doubt CLS #IOCB is actually used in many Turbo BASIC +			   programs, because it's broken (at least in Turbo 1.5). +			   It's supposed to only clear the screen of output that +			   happened after the OPEN #IOCB, but it really clears the +			   whole screen. */ +			if(nexttok == OP_HASH) { +				remove_type(BT_BXL_BXE); +			} +			break; + +		default: break; +	} +	if(verbose) fprintf(stderr, "   bas_type now %02x\n", bas_type); +} + +CALLBACK(handle_op) { +	unsigned char nexttok  = program[pos + 1]; +	unsigned char nexttok2 = program[pos + 2]; + +	if(tok == OP_COMMA) comma_count++; + +	if(verbose) fprintf(stderr, "handle_op: lineno %d, tok $%02x, comma_count %d, bas_type was %02x\n", lineno, tok, comma_count, bas_type); + +	if(tok == 0x00) { +		/* Turbo allows 256 variables, tokenizes the first 128 normally ($80-$FF). +		   The extra ones above $FF are tokenized as $00, varnum - $80. None of +		   our other BASICs uses $00 as an operator token, so.. */ +		set_type(BT_TURBO); +	} + +	/* attempt to detect BXL/BXE DIM for 2D string arrays. +	   DIM A$(10,10) is illegal in Atari/Turbo. +	   PARTIAL: this only works if the first dimension is either a +	   constant or a scalar variable (not an array element or an +	   expression). fortunately most programs use constants in DIM. +	 */ +	if(tok == OP_DIM_STR_LPAR) { +		int str2d = 0; +		if(nexttok >= 0x80 && nexttok2 == OP_ARR_COMMA) { +			str2d = 1; +		} else if(nexttok == OP_NUMCONST || nexttok == OP_HEXCONST) { +			str2d = (program[pos + 8] == OP_ARR_COMMA); +		} +		if(str2d) { +			if(verbose) +				fprintf(stderr, "===> found 2d string array at line %d\n", lineno); +			remove_type(BT_ATARI | BT_TURBO); +		} +	} + +	/* BXL/BXE allows string concatenation in assignment with the comma, +	   A$="FOO","BAR" or A$=C$,D$. */ +	if(last_cmd == CMD_LET || last_cmd == CMD_ILET) { +		if(program[last_cmd_pos + 2] == OP_STR_ASSIGN) { +			if(tok == OP_COMMA) { +				if(is_string_rval(nexttok)) { +					remove_type(BT_ATARI | BT_TURBO); +				} +			} +		} +	} + +	if(tok == OP_HEXCONST) remove_type(BT_ATARI); /* hex const (turbo *and* bxl/xe) */ +	if(tok <= OP_FUNC_STRIG) { +		if(verbose) fprintf(stderr, "   bas_type now %02x\n", bas_type); +		return; /* legal in BASIC, ignore */ +	} +	remove_type(BT_ATARI); + +	/* only Turbo has op tokens numbered 0x69 and up. */ +	if(tok >= 0x69) { +		set_type(BT_TURBO); +	} + +	if(tok >= 0x6E) { +		fprintf(stderr, "handle_op: invalid operator %02x at line %d\n", tok, lineno); +		keep_going = 0; +		set_type(BT_INVALID); +	} + +	/* There are 25 extra operators in Turbo, and 20 of them are shared with +	   BXL/BXE. Of the 20, 4 of them are undecidable, and the rest are +	   covered here, which means 80% coverage of the shared ops. +	   Undecidables are: +	   0x56 & (logical AND) or % (XOR), both infix numeric ops; can't tell apart +	   0x57 ! (logical OR) in both Turbo and BXL/BXE, can't tell apart +	   0x64 RAND (func, 1 num arg) or TAB (func, 1 num arg), can't tell apart +	   0x65 TRUNC (func, 1 num arg) or PEN (func, 1 num arg), can't tell apart +	 */ +	switch(tok) { +		case 0x55: /* DPEEK (function) TB, USING (infix, not a function) in BXL/BXE */ +		case 0x58: /* INSTR (function) or & (infix numeric) in BXE. */ +		case 0x5b: /* HEX$ (func, takes 1 num arg) or FIND( (pseudo-func, 3 args */ +			/* COMPLETE */ +			if(nexttok == OP_FUNC_LPAR) { +				remove_type(BT_BXL_BXE); +			} else { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x59: /* INKEY$ (0 arg pseudo-func) in TB, string array separator semicolon in BXL/BXE */ +			/* PARTIAL: ...but pretty good. we *can't* check nexttok == OP_GRP_RPAR, because +			   VAL(INKEY$) or ASC(INKEY$) are legit Turbo code. */ +			if(nexttok == OP_EOS || nexttok == OP_EOL) { +				/* the semicolon can't be the last token on the line (needs at least +				   a right-paren), but INKEY$ can. */ +				remove_type(BT_BXL_BXE); +			} else if(pos == last_cmd_pos + 1) { +				/* INKEY$ can be the first operator after the command, e.g if the command +				   is IF. The semicolon cannot. */ +				remove_type(BT_BXL_BXE); +			} else if(is_string_exp_op(last_op_tok) || is_string_exp_op(nexttok)) { +				/* A$=INKEY$, IF INKEY$=A$, A$(LEN(A$)+1)=INKEY$, INKEY$<>"A"... */ +				remove_type(BT_BXL_BXE); +			} else if(is_numeric_op(last_op_tok) || is_numeric_op(nexttok)) { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x5a: /* EXOR (infix num op) or BUMP( (pseudo-function, no OP_FUNC_LPAR) */ +		case 0x5d: /* DIV (infix num op) or RANDOM( (pseudo-func, 1 or 2 num args) */ +			/* COMPLETE (I think, anyway) */ +			if(last_op_tok == OP_GRP_RPAR || last_op_tok == OP_NUMCONST || last_op_tok == OP_HEXCONST || last_op_tok >= 0x80) { +				/* if the last token was a variable or a numeric, or a right paren, +				   this is infix (can't be a function, last token would have to have +				   been a command or a math/etc operator). */ +				remove_type(BT_BXL_BXE); +			} else { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x5c: /* DEC (function, takes str) in TB, HEX$ (function, takes num) in BXL/BXE */ +			/* COMPLETE */ +			if(is_string_rval(nexttok2)) { +				remove_type(BT_BXL_BXE); +			} else if(is_numeric_op(nexttok2)) { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x5e: /* FRAC (num func, 1 arg) or DPEEK (num func, 1 arg) in BXL... +		              however BXE has an optional 2nd arg. */ +			{ +				/* PARTIAL: This detects the 2nd arg for simple cases where the +				   1st arg is a constant or a numeric variable, but not if the +				   1st arg is an expression or an array element. */ +				int has2 = 0; +				if(nexttok2 == OP_NUMCONST || nexttok2 == OP_HEXCONST) { +					if(program[pos + 9] == OP_ARR_COMMA) +						has2 = 1; +				} else if(nexttok2 >= 0x80 && program[pos + 3] == OP_ARR_COMMA) { +					has2 = (get_vartype(nexttok2) == TYPE_SCALAR); +				} +				if(has2) { +					set_type(BT_BXE); +				} +			} +			break; + +		case 0x5f: /* TIME$ in TB, SYS (function) in BXL/BXE */ +		case 0x60: /* TIME in TB, VSTICK (function) in BXL/BXE */ +		case 0x61: /* MOD (infix op) in TB, HSTICK (function) in BXL/BXE */ +		case 0x62: /* EXEC (infix op, with ON) in TB, PMADR (function) in BXL/BXE */ +			/* COMPLETE */ +			if(nexttok == OP_FUNC_LPAR) { +				remove_type(BT_TURBO); +			} else { +				remove_type(BT_BXL_BXE); +			} +			break; + +		case 0x63: /* RND (pseudo-func, no arg) or ERR (func, 1 num arg) */ +			/* COMPLETE */ +			if(nexttok != OP_FUNC_LPAR) { +				set_type(BT_TURBO); +			} +			break; + +		case 0x66: /* %0 in TB, LEFT$( (pseudo-func, takes string) in BXL/BXE */ +		case 0x67: /* %1 in TB, RIGHT$( (pseudo-func, takes string) in BXL/BXE */ +		case 0x68: /* %2 in TB, MID$( (pseudo-func, takes string) in BXL/BXE */ +			/* COMPLETE */ +			/* LEFT$/RIGHT$/MID$ do NOT get OP_FUNC_LPAR (the "(" is part of the +			   token name). They're always followed by a string operator... and +			   it works out that none of the tokens for BXL-only string funcs +			   are allowed to follow %0 %1 %2 in Turbo. */ +			if(is_string_op(nexttok) || is_bxl_string_func(nexttok)) { +				remove_type(BT_TURBO); +			} else { +				remove_type(BT_BXL_BXE); +			} +			break; + +		default: +			break; +	} + +	last_op_tok = tok; +	if(verbose) fprintf(stderr, "   bas_type now %02x\n", bas_type); +} + +/* we can count commas, because both Turbo and BXE/BXL use the "array" comma +   to separate function arguments, not the "regular" comma. */ +CALLBACK(handle_end_stmt) { +	if(verbose) fprintf(stderr, "handle_end_stmt: lineno %d, tok $%02x, last_cmd $%02x, comma_count %d, bas_type was %02x\n", lineno, tok, last_cmd, comma_count, bas_type); +	switch(last_cmd) { +		case 0x38: /* DPOKE (2 args) or WHILE (1 arg) */ +			if(comma_count) { +				remove_type(BT_BXL_BXE); +			} else { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x3e: /* WHILE (1 arg) or DPOKE (2 or 3 args) */ +		case 0x4c: /* DELETE (1 arg) or MOVE (3 or 4 args) */ +		case 0x4d: /* PAUSE (1 arg) or MISSILE (3 args) */ +      case 0x52: /* FCOLOR (1 arg) or PMWIDTH (2 args) */ +      case 0x53: /* *L (optional + or - only) or SET (req 2 num args) */ +      case 0x4f: /* PROC (1 arg) or PMCOLOR (3 args) */ +			if(comma_count) { /* 1 arg means no commas */ +				remove_type(BT_TURBO); +			} else { +				remove_type(BT_BXL_BXE); +			} +			break; + +		case 0x42: /* BPUT or RGET */ +			/* PARTIAL: +			   Turbo BGET always takes 3 args, BXL/BXE RGET takes 2 or more. +			   We can at least rule out Turbo if there aren't exactly 3 args. */ +			if(comma_count != 2) { +				remove_type(BT_TURBO); +			} +			break; + +		case 0x43: /* BGET or BPUT */ +			/* PARTIAL: +			   Turbo BGET and BPUT always take 3 args. So does BXL BPUT. +				BXE BPUT takes 3 args and an optional 4th. */ +			if(comma_count != 2) { +				set_type(BT_BXE); +			} +			break; + +      case 0x55: /* RENUM in both (TB req 3 args, BXL up to two) */ +			if(comma_count == 2) { +				remove_type(BT_BXL_BXE); +			} else { +				remove_type(BT_TURBO); +			} +			break; + +      case 0x61: /* DSOUND (0 or 4 num args) or INVERSE (no args) */ +			/* PARTIAL: can't tell no-argument DSOUND from INVERSE. */ +			if(comma_count) { +				remove_type(BT_BXL_BXE); +			} +			break; + +      case 0x63: /* %PUT (usually seen with optional #; 1 or 2 args) or BLOAD (1 string arg) */ +			if(comma_count) { +				/* multiple args */ +				remove_type(BT_BXL_BXE); +			} else if(program[last_cmd_pos + 1] == OP_STRCONST) { +				/* one arg, string const. XXX: check var type */ +				remove_type(BT_TURBO); +			} +			break; + +      case 0x64: /* %GET (usually seen with optional #; 1 or 2 args) or BSAVE (3 args) */ +			if(comma_count == 2) { +				remove_type(BT_TURBO); +			} else { +				remove_type(BT_BXL_BXE); +			} +			break; + +		default: break; +	} +	if(verbose) fprintf(stderr, "   bas_type now %02x\n", bas_type); + +	last_cmd = last_op_tok = 0; +} + +/* return true if input_file is Atari MS BASIC. +   AMSB files begin with a 3-byte header: 0x00 or 0x01, then 2 byte length +   (LSB/MSB), which is actually 3 bytes less than the full length of +   the file (or, it's the length of the file minus the 3-byte header). +   Also, the files always end with 3 0x00 bytes. +	We check that the header length is 3 bytes less than the file length, +   then check for the 3 0x00's at the end... or, if the first byte was 1, +   meaning "locked program", check for 3 "encrypted" 0x00's at the end. + */ +int detect_amsb(void) { +	int trailing_byte_value = 0, len, c; + +	if(verbose) fprintf(stderr, "entering detect_amsb()\n"); + +	rewind(input_file); +	c = fgetc(input_file); +	if(c > 1) return 0; +	if(c) trailing_byte_value = 0x54; +	c = fgetc(input_file); +	if(c == EOF) return 0; +	len = (fgetc(input_file) << 8) | c; + +	if(verbose) fprintf(stderr, "detect_amsb() header len==%d (file size should be %d)\n", len, len + 3); + +	fseek(input_file, 0, SEEK_END); +	c = ftell(input_file); +	if(verbose) fprintf(stderr, "detect_amsb() file size %d\n", c); +	if(len != (c - 3)) { +		if(verbose) fprintf(stderr, "detect_amsb() wrong file size!\n"); +		return 0; +	} + +	if(verbose) fprintf(stderr, "detect_amsb() file size is correct, checking for 3 nulls\n"); +	fseek(input_file, -3, SEEK_END); +	if(fgetc(input_file) != trailing_byte_value) return 0; +	if(fgetc(input_file) != trailing_byte_value) return 0; +	if(fgetc(input_file) != trailing_byte_value) return 0; + +	if(verbose) fprintf(stderr, "detect_amsb() found 3 nulls, return 1\n"); + +	return 1; +} + +void foreign(const char *name, int srval) { +	if(input_file) fclose(input_file); +	if(script_mode) { +		exit(srval); +	} else { +		puts(name); +		exit(0); +	} +} + +void detect_foreign(void) { +	int c, d; + +	c = fgetc(input_file); +	d = fgetc(input_file); + +	if(c == EOF || d == EOF) +		die("File is too short to be a BASIC program of any kind."); + +	if((c == 0 || c == 0x77) && d == 0) { +		/* This is why we can't read from stdin. */ +		rewind(input_file); +		return; +	} + +	if(c == 0xfb && d == 0xc2) +		foreign("Compiled Turbo BASIC XL", SRET_COMPILED_TURBO); + +	if(c == 0xff && d == 0xff) +		foreign("XEX executable (not BASIC at all!)", SRET_NOT_BASIC); + +	if(c == 0xfe && d == 0xfe) +		foreign("Mac/65 tokenized source (not BASIC at all!)", SRET_NOT_BASIC); + +	if(c == 0xdd && d == 0x00) +		foreign("EXTENDed OSS BASIC XE", SRET_EXTENDED_BXE); + +	if(c == 0x7f && d == 'E') { +		c = fgetc(input_file); +		d = fgetc(input_file); +		if(c == 'L' && d == 'F') +			foreign("ELF executable (not BASIC at all!)", SRET_NOT_BASIC); +	} + +	if((c == 0 || c == 1) && detect_amsb()) { +		foreign("Atari Microsoft BASIC", SRET_AMSB); +	} + +	if(isdigit(c) && (d == 0x20 || isdigit(d))) +		foreign("Text file, could be LISTed BASIC (or not)", SRET_NOT_BASIC); + +	if(isprint(c) && isprint(d)) +		foreign("Text file (not BASIC at all!)", SRET_NOT_BASIC); + +	foreign("Unknown file type (not BASIC at all!)", SRET_NOT_BASIC); +} + +void check_variables(void) { +	int pos; + +	if(vntp == vntd) return; + +	/* Unlike Atari BASIC, Turbo variables can have _ in the names. +	   So can BASIC XE, though it's not documented in the BASIC XE +	   Reference Manual that I have. +	   BXL can't have _ in variable names. */ +	for(pos = vnstart; pos < vvstart; pos++) { +		if((program[pos] & 0x7f) == '_') { +			remove_type(BT_ATARI | BT_BXL); +		} +	} + +	/* Also, Turbo line labels (for PROC/EXEC and #/GO#) are variables +	   with a type that's illegal in Atari/BXL/BXE. */ +	for(pos = vvstart; pos < codestart; pos += 8) { +		if((program[pos] & 0xc0) == 0xc0) { +			set_type(BT_TURBO); +		} +	} + +	/* I was hoping to check for BXL/BXE string arrays here. However, +	   looking at a SAVEd file, they look identical to regular string +	   variables (variable type $80, rest of the VVTP entry all $00). +	   When the program's actually in memory, BXL/BXE sets the +	   variable type byte to $91 for DIMed string array var and +	   $81 (same as Atari/Turbo) for a regular DIMed string var. +	   Unfortunately in the SAVE file, it's always $80. */ + +	/* Another thing that can't be detected: BXL/BXE's FAST mode changes +	   the program in memory (line number targets become addresses), +	   but programs don't get SAVEd this way: SAVE turns off FAST and +	   restores the program to its original state before writing it +	   to disk. Too bad. */ +} + +/* BASIC/A+ support is *very* simple. It's similar to BASIC XL (no +   surprise there)... but unlike Turbo, BXL, and BXE, it's *not* +   token-compatible with original Atari BASIC. Rather than add +   their new tokens to the end of the lists, they're mixed in with +   the others. So A+ can't even LOAD or RUN Atari BASIC files. +   Appendix J of the BASIC/A+ manual tells you to LIST in BASIC, +   reboot, ENTER in A+, to "port" your BASIC programs to A+. I +   suppose if you upgraded from A+ to BASIC XL or XE, you'd have +   to do the same thing to use A+ programs in XL/XE. + +   While this was probably a PITA for BASIC/A+ users back in the day, +   it makes it *really* easy to detect A+ here. The last line of +   every SAVEed program is the direct-mode command, and contains either +   a SAVE or CSAVE cmd token. Which is the same token in Atari, Turbo, +   BXL, and BXE... but *different* in A+. + +   However... I've run into at least one BASIC program in the Holmes +   Archive that was missing its line 32768 (wish I could remember which). +   And it's possible for files to get truncated... so I'll check a few +   other command tokens, to deal with cases like this. + */ +void found_aplus(void) { +	foreign("OSS BASIC/A+", SRET_APLUS); +} + +CALLBACK(check_aplus_cmd) { +	int has_args; +	unsigned char nexttok, nexttok2; + +	nexttok = program[pos + 1]; +	nexttok2 = program[pos + 2]; +	has_args = !(nexttok == OP_EOS || nexttok == OP_EOL); +	if(verbose) fprintf(stderr, "check_aplus_cmd: line %d, pos $%04x, tok $%02x, nexttok $%02x, nexttok2 $%02x\n", lineno, pos, tok, nexttok, nexttok2); + +	switch(tok) { +		case CMD_POP:      /* A+ READ */ +		case CMD_DOS:      /* A+ GET */ +		case CMD_DEG:      /* A+ WHILE */ +		case CMD_CLR:      /* A+ DIM */ +		case 0x46:         /* A+ SOUND <args>, Turbo LOOP, BXL/XE CP */ +		case 0x3c:         /* A+ DIR <req'd arg>, Turbo REPEAT, BXL/XE ELSE */ +			if(has_args) +				found_aplus(); +			break; + +		case CMD_SAVE:     /* A+ END */ +		case CMD_GRAPHICS: /* A+ STOP */ +		case CMD_DIM:      /* A+ ENDWHILE */ +		/* case CMD_GET: */     /* A+ RETURN, but Turbo allows 0 args too! */ +		case 0x38:         /* A+ DOS, Turbo DPOKE, BXL/XE WHILE */ +			if(!has_args) +				found_aplus(); +			break; + +		case CMD_POSITION: /* A+ ? */ +			/* PARTIAL: does nothing if 1st arg is numeric. */ +			if(!has_args) +				/* POSITION can't have 0 args. */ +				found_aplus(); +			else if(is_string_rval(nexttok)) +				/* ? "STRING" or ? A$, e.g., can't be POSITION */ +				found_aplus(); +			else if(nexttok == OP_NUM_LE) /* numeric <= in BASIC, # in A+ */ +				found_aplus(); +			break; + +		case CMD_RUN: /* A+ PRINT */ +			/* PARTIAL: only detects PRINT # or PRINT <num> ... */ +			/* A+'s # token is BASIC's OP_NUM_LE! */ +			if(nexttok == OP_NUM_LE) +				found_aplus(); +			else if(is_numconst_op(nexttok) || is_numeric_var(nexttok)) +				found_aplus(); +			break; + +		case CMD_XIO:    /* A+ SAVE */ +			/* most programs, this is enough, because they'll end with +				32768 SAVE "D:BLAH" */ +			if(is_string_rval(nexttok)) +				found_aplus(); +			break; + +		case CMD_OPEN:   /* A+ ELSE */ +		/* case CMD_CLOSE: */  /* A+ DEG */ /* can't check, Turbo allows no args */ +		case CMD_STATUS: /* A+ NEW */ +		case CMD_POINT:  /* A+ LOAD */ +		case 0x42:       /* A+ POSITION, Turbo BPUT, BXL RGET */ +		case 0x43:       /* A+ DRAWTO, Turbo BGET, BXL BPUT */ +			if(nexttok != OP_HASH) /* # in BASIC, USING in A+ */ +				found_aplus(); +			break; + +		/* case 0x48: */ /* A+ CSAVE, Turbo DIR, BXL/BXE PROTECT */ +			/* DIR without arg is OK, so we can't really check this. */ +			/* break; */ + +		case CMD_DRAWTO: /* A+ PUT */ +		case CMD_SOUND:  /* A+ RPUT */ +		case CMD_LPRINT: /* A+ RGET */ +		case CMD_CSAVE:  /* A+ BPUT */ +		case CMD_CLOAD:  /* A+ BGET */ +		case CMD_ON:     /* A+ STATUS */ +		case CMD_NOTE:   /* A+ OPEN */ +		case CMD_CONT:   /* A+ CLOSE */ +		case CMD_RAD:    /* A+ XIO */ +			if(nexttok == OP_NUM_LE) /* numeric <= in BASIC, # in A+ */ +				found_aplus(); +			break; + +		default: break; +	} + +	last_cmd = tok; +} + +void check_oss_int(void) { +	if(lomem != 0x77) return; +	switch(save_command_tok) { +		case 0x19: /* SAVE */ +		case 0x33: /* CSAVE */ +			foreign("OSS Integer BASIC (disk)", SRET_OSSINT_DISK); +			break; +		default: +			foreign("OSS Integer BASIC (cartridge)", SRET_OSSINT_CART); +			break; +	} +} + +void check_aplus(void) { +	allow_hex_const = 1; + +	on_cmd_token = check_aplus_cmd; +	walk_all_code(); +} + +void check_atari_turbo_oss(void) { +	allow_hex_const = 1; + +	on_cmd_token = handle_cmd; +	on_exp_token = handle_op; +	on_end_stmt = handle_end_stmt; + +	walk_all_code(); +} + +int main(int argc, char **argv) { +	set_self(*argv); +	parse_general_args(argc, argv, print_help); +	parse_args(argc, argv); + +	detect_foreign(); + +	readfile(); +	parse_header(); +	check_oss_int(); + +	check_variables(); +	check_aplus(); +	check_atari_turbo_oss(); + +	print_result(); /* always exits */ +	return 0; /* never happens, shuts up gcc's warning though */ +} diff --git a/whichbas.h b/whichbas.h new file mode 100644 index 0000000..0e6bb72 --- /dev/null +++ b/whichbas.h @@ -0,0 +1,19 @@ +/* this stuff is in a separate .h file so that eventually, +   listbas.c can include it (it'll execute "whichbas -s" to detect +   the BASIC type). */ + +#define SRET_ATARI                 3 +#define SRET_TURBO                 4 +#define SRET_BXL                   5 +#define SRET_BXE                   6 +#define SRET_TURBO_OR_BXL          7 +#define SRET_TURBO_OR_BXE          8 +#define SRET_TURBO_OR_BXL_OR_BXE   9 +#define SRET_UKNOWN_DERIV         10 +#define SRET_AMSB                 11 +#define SRET_EXTENDED_BXE         12 +#define SRET_COMPILED_TURBO       13 +#define SRET_APLUS                14 +#define SRET_OSSINT_CART          15 +#define SRET_OSSINT_DISK          16 +#define SRET_NOT_BASIC            64 diff --git a/whichbas.rst b/whichbas.rst new file mode 100644 index 0000000..f886c76 --- /dev/null +++ b/whichbas.rst @@ -0,0 +1,215 @@ +======== +whichbas +======== + +---------------------------------------------------------- +Determine BASIC variant of a tokenized Atari 8-bit program +---------------------------------------------------------- + +.. include:: manhdr.rst + +SYNOPSIS +======== +whichbas [-v] *input-file* [*input-file* ...] + +DESCRIPTION +=========== + +**whichbas** reads tokenized Atari 8-bit BASIC, Turbo BASIC, BASIC +XL, BASIC XE, BASIC/A+, OSS Integer BASIC, or Atari Microsoft BASIC +programs and attempts to discover which BASIC is required to run each +one. + +Note: OSS Integer BASIC is *not* to be confused with Apple II Integer BASIC! + +*input-file*\s must be actual files. **whichbas** can't read from +standard input, because it seeks in the input file. + +With multiple *input-file*\s, the output is one line per file, +with the filename, a tab, and the detected BASIC. With only one +*input-file*, the filename and tab are not printed. + +OPTIONS +======= + +*Note*\: none of the options **-s** **-k** **-v** are allowed +when checking multiple files; they only work if there's just one +*input-file* argument. + +Detection Options +----------------- + +**-s** +  Script (or silent) mode. Instead of printing a human-readable +  name like "Turbo BASIC XL" or "OSS BASIC XE" to stdout, **whichbas** +  will print nothing on standard output, but will exit with a status +  indicating what it detected. The caller can check the return status +  (e.g. the **$?** variable in Bourne/POSIX shells, or **ERRORLEVEL** +  in MS-DOS or Windows). See **EXIT STATUS**, below. + +**-k** +  Keep going. The default is to stop looking at the program if the +  BASIC type gets narrowed down to either Turbo BASIC or BASIC XE. +  This option also enables **-v** (verbose). It's really only useful +  for testing, if you're hacking on **whichbas** itself. + +.. include:: genopts.rst + +NOTES +===== +Atari BASIC programs are detected *almost* 100% reliably. See **BUGS**, below, +for the gory details. + +Turbo BASIC, BASIC XL, and BASIC XE are all supersets of Atari BASIC. +If you wrote a program using one of them, but didn't use any of the +extra commands or functions, the result is still an Atari BASIC program. +Likewise, if you wrote a program using BASIC XE, but only used the +commands/functions it has in common with BASIC XL, it would be +detected as BASIC XL. + +There are two types of BASIC XE programs: regular and *EXTEND*\ed. The +extended type is detected 100% reliably, because the first byte of the +file changes from **$00** to **$DD**. Non-extended programs are only +identified as BASIC XE if they use any of the extra commands BASIC XE +adds to those found in BASIC XL. + +Detection of Turbo vs. BXL/BXE isn't 100% reliable, and probably +never will be. There's too much overlap between the sets of extra +tokens added by each. Programs that don't use very many of the extra +functions provided by Turbo/BXL/BXE may show up as "Either Turbo BASIC XL +or OSS BASIC XL". + +Atari Microsoft BASIC is detected by checking that: + +  - the first byte of the file is **$00**\. + +  - the next 2 bytes (LSB/MSB) are the same as the actual file length minus 3. + +  - the last 3 bytes of the file are zero. + +This may result in false positives (files that aren't BASIC programs at +all might show up as Microsoft). Also, no distinction is made between +Atari MS BASIC 1.0 and 2.0. + +OSS BASIC/A+ is an extended form of Atari BASIC. It's source +compatible with Atari BASIC, but not token-compatible because it uses +different token numbers for the regular BASIC commands and operators. +Example: SAVE is token **$19** in Atari BASIC (also Turbo/BXL/BXE), +but in A+ it's token **$1D**. Detection should be 100% reliable, but +since there aren't many BASIC/A+ programs in the wild, it hasn't been +thoroughly tested. + +OSS Integer BASIC is a product that was developed by OSS, but never +released until recently. It's similar to BASIC XL and XE, but uses +16-bit integers for all numeric operations, rather than 6-byte BCD +floating point. Integer BASIC's SAVEd programs are recognized by the +first two bytes, which are always **$77** **$00**. There are two known +versions of Integer BASIC (disk and cartridge), which use different +command tokens; **whichbas** detects which version by looking at the +token SAVE or CSAVE command at the end of the file. + +Various non-BASIC files are detected (including Mac/65 source, +ELF binaries, etc) as a convenience, but I wouldn't rely on +**whichbas**\'s non-BASIC file type detection if I were you. +If you need the **file**\(1) command, use it. + +**whichbas** knows nothing about other BASICs such as Frost BASIC or +Altirra BASIC. + +When using multiple *input-file* arguments, a separate instance of +**whichbas** is spawned for each file. This isn't the most efficient +approach, but it shouldn't cause problems on reasonably modern +systems. + +BUGS +==== +Misdetection +------------ +It's possible to get a BASIC XL/XE program to misdetect as Atari BASIC +by writing a program that does these things: + +  - Dimension a string array with a number of elements that isn't just a +    numeric constant or numeric variable (e.g. *DIM A$(2+2,10)* or +    *DIM A$(I*2,10)*). The code that detects a string array *DIM* command +    can only handle simple cases like *DIM A$(10,10)* or *DIM A$(I,10)*. +    It doesn't actually matter if the 2nd argument is a fancy expression, +    though. + +  - Does *not* actually *use* the string array variable by assigning to +    it or reading a value from it. String array accesses in BASIC XL/XE +    are reliably detected because they require a semicolon after the +    first number, even if there isn't a 2nd number. Example: *? A$(2;)* +    prints the 2nd element of the *A$* string array. If it were written +    as *? A$(2)*, but *A$* is a string array (not a regular string), +    BASIC XL/XE would give an *Error 40* (string type mismatch) at +    runtime. + +The good news is, such a program will still work fine in Atari BASIC. +Atari BASIC will dimension it as a regular string variable and ignore +the 2nd dimension. Since it's not actually used elsewhere in the program, +it doesn't hurt anything. + +EXIT STATUS +=========== + +Without the **-s** option, exit status is 0 for success, non-zero for +failure. + +With the **-s** option, the exit status is: + +**0** +  Not used with **-s**. + +**1** or **2** +  Error reading file. Error message will be printed on standard error. + +**3** +  Atari BASIC detected. + +**4** +  Turbo BASIC detected. + +**5** +  OSS BASIC XL detected. + +**6** +  Non-EXTENDed OSS BASIC XE detected. + +**7** +  Turbo BASIC or BASIC XL (undecided which). + +**8** +  Turbo BASIC or non-EXTENDed BASIC XE (undecided which). + +**9** +  Turbo BASIC, BASIC XL, or non-EXTENDed BASIC XE (undecided which). + +**10** +  Unknown Atari BASIC derivative (not Atari BASIC, but not +  Turbo/BXL/BXE/A+ either). + +**11** +  Atari Microsoft BASIC detected. + +**12** +  EXTENDed OSS BASIC XE detected. + +**13** +  Compiled Turbo BASIC detected. + +**14** +  OSS BASIC/A+ detected. + +**15** +  OSS Integer BASIC (cartridge version) detected. + +**16** +  OSS Integer BASIC (disk version) detected. + +**64** +  None of the above; not BASIC. + +In the future, more exit codes may be defined (in the range **15** to +**63**), but the existing ones will not change. + +.. include:: manftr.rst @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "XEX" 5 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEX" 5 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  xex \- Atari 8-bit executable file format.  .\" RST source for xex(5) man page. Convert with: @@ -298,32 +298,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "XEX1TO2" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEX1TO2" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  xex1to2 \- Convert an Atari DOS 1.0 executable to a standard Atari executable  .\" RST source for xex1to2(1) man page. Convert with: @@ -72,32 +72,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "XEXAMINE" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEXAMINE" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  xexamine \- Show information on Atari 8-bit executables (XEX)  .\" RST source for xexamine(1) man page. Convert with: @@ -130,32 +130,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "XEXCAT" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEXCAT" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  xexcat \- Concatenate Atari 8-bit executables (XEX) into a single XEX file.  .\" RST source for xexcat(1) man page. Convert with: @@ -190,32 +190,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "XEXSPLIT" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEXSPLIT" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  xexsplit \- Split a multi-segment Atari 8-bit executable (XEX) into multiple single-segment files.  .\" RST source for xexsplit(1) man page. Convert with: @@ -183,32 +183,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "XFD2ATR" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XFD2ATR" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools"  .SH NAME  xfd2atr \- Convert an Atari 8-bit XFD (raw) disk image to an ATR image.  .\" RST source for xfd2atr(1) man page. Convert with: @@ -111,32 +111,39 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\  .UNINDENT  .SH SEE ALSO  .sp +\fBa8cat\fP(1),  \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1),  \fBatr2xfd\fP(1),  \fBatrsize\fP(1),  \fBaxe\fP(1), +\fBbas2aplus\fP(1),  \fBblob2c\fP(1),  \fBblob2xex\fP(1),  \fBcart2xex\fP(1),  \fBcxrefbas\fP(1),  \fBdasm2atasm\fP(1), +\fBdiffbas\fP(1),  \fBdumpbas\fP(1),  \fBf2toxex\fP(1),  \fBfenders\fP(1),  \fBlistbas\fP(1), +\fBlistamsb\fP(1),  \fBprotbas\fP(1),  \fBrenumbas\fP(1),  \fBrom2cart\fP(1),  \fBunmac65\fP(1),  \fBunprotbas\fP(1),  \fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1),  \fBxexamine\fP(1),  \fBxexcat\fP(1),  \fBxexsplit\fP(1),  \fBxfd2atr\fP(1),  \fBxex\fP(5), -\fBatascii\fP(7). +\fBatascii\fP(7), +\fBfauxtari\fP(7).  .sp  Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference  Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc.  | 
