diff options
-rw-r--r-- | .gitignore | 5 | ||||
-rw-r--r-- | AMSB.txt | 404 | ||||
-rw-r--r-- | CHANGES.txt | 19 | ||||
-rw-r--r-- | Makefile | 66 | ||||
-rw-r--r-- | README.txt | 37 | ||||
-rw-r--r-- | TODO | 9 | ||||
-rw-r--r-- | a8cat.1 | 9 | ||||
-rw-r--r-- | a8cat.c | 126 | ||||
-rwxr-xr-x | a8diff | 56 | ||||
-rw-r--r-- | a8diff.1 | 118 | ||||
-rw-r--r-- | a8diff.rst | 50 | ||||
-rw-r--r-- | a8eol.1 | 9 | ||||
-rw-r--r-- | a8xd.1 | 9 | ||||
-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 | 9 | ||||
-rw-r--r-- | atascii.c | 157 | ||||
-rw-r--r-- | atascii.h | 44 | ||||
-rw-r--r-- | atr2xfd.1 | 9 | ||||
-rw-r--r-- | atrsize.1 | 9 | ||||
-rw-r--r-- | axe.1 | 9 | ||||
-rw-r--r-- | bas.c | 101 | ||||
-rw-r--r-- | bas.h | 5 | ||||
-rw-r--r-- | bas2aplus.1 | 211 | ||||
-rw-r--r-- | bas2aplus.c | 272 | ||||
-rw-r--r-- | bas2aplus.rst | 143 | ||||
-rw-r--r-- | blob2c.1 | 9 | ||||
-rw-r--r-- | blob2xex.1 | 9 | ||||
-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 | 9 | ||||
-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 | 9 | ||||
-rw-r--r-- | dasm2atasm.1 | 9 | ||||
-rwxr-xr-x | diffbas | 56 | ||||
-rw-r--r-- | diffbas.1 | 132 | ||||
-rw-r--r-- | diffbas.rst | 57 | ||||
-rw-r--r-- | dumpbas.1 | 9 | ||||
-rw-r--r-- | fauxtari.7 | 346 | ||||
-rw-r--r-- | fauxtari.rst | 175 | ||||
-rw-r--r-- | fenders.1 | 9 | ||||
-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 | 399 | ||||
-rw-r--r-- | listbas.c | 1116 | ||||
-rw-r--r-- | listbas.rst | 368 | ||||
-rw-r--r-- | manftr.rst | 7 | ||||
-rw-r--r-- | ossintbas.7 | 582 | ||||
-rw-r--r-- | ossintbas.rst | 14 | ||||
-rw-r--r-- | ossintbas_content.rst | 319 | ||||
-rw-r--r-- | protbas.1 | 9 | ||||
-rw-r--r-- | renumbas.1 | 26 | ||||
-rw-r--r-- | renumbas.c | 9 | ||||
-rw-r--r-- | renumbas.rst | 19 | ||||
-rw-r--r-- | rom2cart.1 | 9 | ||||
-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 | 9 | ||||
-rw-r--r-- | unmac65.c | 4 | ||||
-rw-r--r-- | unprotbas.1 | 9 | ||||
-rw-r--r-- | ver.rst | 2 | ||||
-rw-r--r-- | vxrefbas.1 | 9 | ||||
-rw-r--r-- | whichbas.1 | 299 | ||||
-rw-r--r-- | whichbas.c | 1050 | ||||
-rw-r--r-- | whichbas.h | 19 | ||||
-rw-r--r-- | whichbas.rst | 174 | ||||
-rw-r--r-- | xex.5 | 9 | ||||
-rw-r--r-- | xex1to2.1 | 9 | ||||
-rw-r--r-- | xexamine.1 | 9 | ||||
-rw-r--r-- | xexcat.1 | 9 | ||||
-rw-r--r-- | xexsplit.1 | 9 | ||||
-rw-r--r-- | xfd2atr.1 | 9 |
115 files changed, 57341 insertions, 583 deletions
@@ -1,3 +1,8 @@ +bas2aplus +listamsb +whichbas +equates.m65 +fendersdbl.atasm *.bas *.BAS *.LST 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 whichbas -SCRIPTS=dasm2atasm -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 +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 @@ -63,8 +74,12 @@ vxrefbas: bas.o cxrefbas: bas.o bcdfp.o linetab.o -listbas: listbas.c bas.o bcdfp.o tokens.o atables.o - $(CC) $(CFLAGS) -o listbas listbas.c bas.o bcdfp.o tokens.o atables.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 @@ -72,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 @@ -176,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. @@ -230,12 +260,20 @@ install-subdirs: subdirs 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) \ + 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 -s $$SRC/$$i . ; done + ; do rm -f $$i; ln -sf $$SRC/$$i . ; done @@ -5,11 +5,15 @@ 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. 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. atrcheck - Check an Atari 8-bit ATR disk image for various types of problems. @@ -20,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. @@ -33,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. @@ -52,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. @@ -63,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 dasm2atasm which is 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-07-02" "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 @@ -143,28 +143,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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); @@ -108,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 { @@ -124,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; @@ -228,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]); @@ -243,36 +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("-")); @@ -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-07-02" "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: @@ -467,28 +467,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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 "A8XD" 1 "2024-07-02" "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 @@ -238,28 +238,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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/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-07-02" "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: @@ -2156,28 +2156,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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 @@ -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-07-02" "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: @@ -187,28 +187,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -201,28 +201,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -142,28 +142,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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. @@ -22,6 +22,17 @@ int verbose = 0; 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; @@ -31,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; @@ -71,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"); } @@ -80,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; } @@ -98,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); @@ -108,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) { @@ -201,8 +243,9 @@ int vntable_ok(void) { 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++; @@ -211,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; @@ -305,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."); } @@ -328,33 +383,43 @@ 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) { @@ -366,7 +431,7 @@ void walk_code(unsigned int startlineno, unsigned int endlineno) { if(allow_hex_const) { CALL(on_num_const); } - pos += 6; + pos += numconst_size; break; case OP_STRCONST: CALL(on_exp_token); @@ -184,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; @@ -203,6 +205,9 @@ 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-07-02" "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: @@ -122,28 +122,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -213,28 +213,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -231,28 +231,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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 @@ -160,28 +160,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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 18f0100..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-07-02" "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: @@ -229,28 +229,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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 diff --git a/diffbas.1 b/diffbas.1 new file mode 100644 index 0000000..67a9f4f --- /dev/null +++ b/diffbas.1 @@ -0,0 +1,132 @@ +.\" 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 "DIFFBAS" 1 "2025-03-11" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +diffbas \- Show differences between two tokenized Atari 8-bit BASIC files +.SH SYNOPSIS +.sp +diffbas [\fIdiff\-options\fP] [\fB\-\-\fP \fIlistbas\-options\fP] \fIfile1\fP \fIfile2\fP +.SH DESCRIPTION +.sp +\fBdiffbas\fP shows the differences between two tokenized (SAVEd) +Atari BASIC programs, using \fBlistbas\fP(1) and \fBdiff\fP(1). +.SH OPTIONS +.sp +\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 +$ diffbas \-u \-\-color \-\- \-n A.BAS B.BAS +.ft P +.fi +.UNINDENT +.UNINDENT +.SH EXAMPLE +.INDENT 0.0 +.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. +.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/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-07-02" "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 @@ -210,28 +210,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -276,28 +276,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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,12 +27,12 @@ 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-07-05" "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\-m\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 @@ -41,27 +41,129 @@ format. .sp By default, output is Unicode in UTF\-8 encoding, with ANSI/VT220 escape sequences for inverse video and color syntax highlighting. +.sp +\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\-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. -.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... +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 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 for details. +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 or \fB\-m\fP are in effect, since these -modes don\(aqt support color anyway. +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 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 @@ -76,48 +178,191 @@ 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. +terminal emulators, and most not\-so\-modern ones in the UNIX world. See +\fBNOTES\fP for a list of tested terminal emulators. .sp -The color scheme is: +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 \fByellow\fP -Commands. Also "command operators" such as the \fBGOTO\fP in \fBON/GOTO\fP and -the \fBSTEP\fP in a \fBFOR\fP command. These are really operators as far as -BASIC is concerned, but it makes more sense to colorize them as commands. +.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 \fBgreen\fP -Operators (except functions and "command operators"). +.B \fI5\fP +Purple (aka violet). .TP -.B \fBpurple\fP -Functions. +.B \fI6\fP +Cyan. .TP -.B \fBred\fP -Numbers (except line numbers at the start of a line) and string -constants. +.B \fI7\fP +White. .TP -.B \fBcyan\fP -Line numbers at the start of a line, comments (\fBREM\fP text) and \fBDATA\fP elements. +.B \fIn\fP +No custom color. Output will be in the terminal\(aqs default foreground color. .UNINDENT .sp -Variable names and commas between \fBDATA\fP elements are not highlighted, -so they\(aqll appear in the default foreground color (usually white if the -terminal has a black background, or black if the background is white). +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 -Note that nothing is highlighted in blue. This is because it\(aqs -difficult to read on many terminals. Also, black and white are not -used because presumably, one or the other is the background color of -the terminal. +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 @@ -127,13 +372,16 @@ 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 only supports Atari BASIC, not Turbo BASIC or BASIC XL/XE. +\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. By default, it uses -\fBa8cat\fP(1) to convert the output to something human\-readable +\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 @@ -143,23 +391,79 @@ 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 -I thought about adding an HTML output option, but there\(aqs no need: if you want -a colorful listing of an Atari BASIC program, install \fBaha\fP(1) from -\fI\%https://github.com/theZiz/aha\fP (or your distro\(aqs package repo) and run -something like: +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 -listbas PROGRAM.BAS | aha > program.html +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 if there was an error reading the input (e.g. file @@ -181,28 +485,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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,45 +8,239 @@ #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, utf8 = 1, magazine = 0, inv = 0, - color = 1, bold = 0, badtok = 0; +const char *cmd_tokens[256]; +const char *op_tokens[256]; -const char **table = ata2utf; +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 [-a] [-b] [-i] [-m] [-n] [-v] <inputfile>\n", self); + 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(" -b: use bold for color output.\n"); - printf(" -i: show immediate mode command (line 32768).\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, "viamnbh")) != -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': utf8 = magazine = 0; color = 0; break; - case 'm': utf8 = 0 ; magazine = 1; color = 0; table = ata2mag; break; - case 'n': color = 0; break; - case 'b': bold = 1; 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(); @@ -54,19 +248,74 @@ void parse_args(int argc, char **argv) { } } - 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); + } + } +} + +/* 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; + } + } + + 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 setup_outfh(void) { - if(! (utf8 || magazine) ) { + if(output_mode == M_ATASCII) { if(isatty(fileno(stdout))) { die("Refusing to write ATASCII data to the terminal."); } } - outfh = stdout; + outfh = freopen(NULL, "wb", stdout); + if(!outfh) { + perror("freopen()"); + die("Can't reopen standard output in binary mode."); + } return; } @@ -99,20 +348,49 @@ double bcd2double(const unsigned char *num) { return result; } -void color_on(unsigned char c) { - printf("\x1b[%d;3%dm", bold, c); +void color_on(int c) { + cur_color = c; + if(c != NO_COLOR) + printf(COLOR_FMT, bold, c); } void color_off(void) { - fputs("\x1b[0m", outfh); + cur_color = -1; + fputs(COLOR_OFF, outfh); } -void print_number(unsigned int pos) { - if(color) color_on(C_RED); - fprintf(outfh, "%G", bcd2double(program + pos)); +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} @@ -120,22 +398,22 @@ void print_number(unsigned int pos) { need to be printed that way. */ int affects_inv(unsigned char c) { switch(c) { - case 0x1b: - case 0x1c: - case 0x1d: - case 0x1e: - case 0x1f: - case 0x9b: - case 0x9c: - case 0x9d: - case 0x9e: - case 0x9f: - case 0x7d: - case 0x7e: - case 0x7f: - case 0xfd: - case 0xfe: - case 0xff: + 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; @@ -143,26 +421,48 @@ int affects_inv(unsigned char c) { } void start_inv(unsigned char c) { - if(utf8) { - fputs("\x1b[7m", outfh); - inv = 1; - } else if(magazine) { - if(affects_inv(c)) { - fputs("{inv}", outfh); + 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) { - if(utf8) { - fputs("\x1b[0m", outfh); - inv = 0; - } else if(magazine) { - if(affects_inv(c)) { - fputs("{norm}", outfh); + 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; } } @@ -176,119 +476,537 @@ void print_ata_chr(unsigned char c) { end_inv(c); } } - fputs(table[c & 0x7f], outfh); + + 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(C_RED); + if(color) color_on(color_op); outchr('"'); + if(color) color_on(color_const); while(len--) print_ata_chr(program[pos++]); - if(inv) end_inv(0); + 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) { - if(color) color_on(C_CYAN); + 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(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(color) color_on(C_YELLOW); - if(tok > last_command || (!(name = commands[tok]))) { + if((!(name = cmd_tokens[tok]))) { fprintf(outfh, "(bad cmd token $%02x) ", tok); badtok = 1; } else { - fprintf(outfh, "%s ", name); + 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(); } -CALLBACK(print_op) { - const char *name; +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 OP_NUMCONST: - print_number(pos + 1); - return; - case OP_STRCONST: - print_string(pos + 2, program[pos + 1]); - return; - case OP_EOL: - return; - default: break; + 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; } - if(color) { + /* common ops for Atari, Turbo, BXL, BXE */ + if(tok <= last_operator) { if(tok > 0x3c) - color_on(C_PURPLE); - else if(tok == OP_UMINUS) - color_on(C_RED); /* show leading - in same color as the number */ + 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(C_YELLOW); + color_on(color_cmd); else - color_on(C_GREEN); + color_on(color_op); + return; } - if(tok > last_operator || (!(name = operators[tok]))) { - fprintf(outfh, "(bad op token $%02x)", tok); - badtok = 1; - } else { - fprintf(outfh, "%s", name); - } - if(color) color_off(); + + 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 + color_on(color_op); /* in case of bad token when bas_type == B_BASIC */ } -CALLBACK(print_varname) { +void print_varname(unsigned char varnum) { int i, count; - unsigned char c, c_on = 0;; + unsigned char c; + + if(color) color_on(color_varnames); - tok &= 0x7f; - for(i = vnstart, count = 0; count < tok; i++) { + 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)) { - color_on(C_GREEN); - c_on = 1; + if(color) color_on(color_op); } outchr(c & 0x7f); } while (c < 0x80); - if(c_on) color_off(); + 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, 0); + return; + case OP_STRCONST: + print_string(pos + 2, program[pos + 1]); + return; + case OP_EOL: + /* 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(color) op_color_on(tok); + + if((!(name = op_tokens[tok]))) { + fprintf(outfh, "(bad op token $%02x)", tok); + 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(); +} + +/* 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) { unsigned char c, is_data = program[pos - 1] == CMD_DATA, comma = 0; inv = 0; - if(color) color_on(C_CYAN); + if(color) color_on(is_data ? color_data : color_rem); while(program[pos] != 0x9b) { c = program[pos++]; if(color && is_data && c == ',') { - color_off(); + color_on(color_op); comma = 1; } else { comma = 0; } print_ata_chr(c); if(comma) - color_on(C_CYAN); + color_on(is_data ? color_data : color_rem); } if(inv) end_inv(0); if(color) color_off(); } CALLBACK(print_newline) { - if(utf8 || magazine) - outchr('\n'); - else + if(output_mode == M_ATASCII) outchr(0x9b); + else + outchr('\n'); } CALLBACK(code_prot) { @@ -296,21 +1014,207 @@ CALLBACK(code_prot) { 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(); @@ -322,7 +1226,7 @@ int main(int argc, char **argv) { list(); if(badtok) { - fprintf(stderr, "%s: program has unknown tokens; maybe Turbo BASIC or BASIC XL/XE?\n", self); + fprintf(stderr, "%s: Program has unknown tokens; wrong BASIC dialect?\n", self); return 2; } diff --git a/listbas.rst b/listbas.rst index 881da5f..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** | **-m** ] **input-file** +listbas [**-a** | **-d** | **-m** | **-x** | **-U**] [**-B**] [**-u**] [**-i**] [**-l**] [**-n** | **-C**] [**-v**] [**-c** *colors*] [**-r** *line-range*] **input-file** DESCRIPTION =========== @@ -23,76 +23,298 @@ format. By default, output is Unicode in UTF-8 encoding, with ANSI/VT220 escape sequences for inverse video and color syntax highlighting. +**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. 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). -**-b** - Use bold, for color output. This may make it easier to read on - some terminals. Or, it may hurt your eyes... +**-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. -**-i** - Include the immediate mode command (line 32768) in the output. +**-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. -**-m** - Output "magazine listing". See the **-m** option for **a8cat** for details. +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** or **-m** are in effect, since these - modes don't support color anyway. + 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 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. +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. -The color scheme is: +*7* + White. -**yellow** - Commands. Also "command operators" such as the **GOTO** in **ON/GOTO** and - the **STEP** in a **FOR** command. These are really operators as far as - BASIC is concerned, but it makes more sense to colorize them as commands. +*n* + No custom color. Output will be in the terminal's default foreground color. -**green** - Operators (except functions and "command operators"). +The order they're used in the *colors* argument is: -**purple** - Functions. +**1** + BASIC keywords. Default: *3* (yellow). -**red** - Numbers (except line numbers at the start of a line) and string - constants. +**2** + Operators, including quotes around strings and commas between **DATA** items. Default: *2* (green). -**cyan** - Line numbers at the start of a line, comments (**REM** text) and **DATA** elements. +**3** + Functions. Default: *5* (purple). -Variable names and commas between **DATA** elements are not highlighted, -so they'll appear in the default foreground color (usually white if the -terminal has a black background, or black if the background is white). +**4** + Constants (numeric or string). Default: *1* (red). -Note that nothing is highlighted in blue. This is because it's -difficult to read on many terminals. Also, black and white are not -used because presumably, one or the other is the background color of -the terminal. +**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** prints ATASCII graphics as Unicode equivalents, so the listing @@ -100,13 +322,16 @@ protection. - **listbas** does color syntax highlighting. -- **listbas** only supports Atari BASIC, not Turbo BASIC or BASIC XL/XE. +- **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. By default, it uses - **a8cat**\(1) to convert the output to something human-readable +- **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. @@ -116,14 +341,71 @@ 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:: -I thought about adding an HTML output option, but there's no need: if you want -a colorful listing of an Atari BASIC program, install **aha**\(1) from -https://github.com/theZiz/aha (or your distro's package repo) and run -something like:: + export LISTBAS_OPTS="-c123456 -d" - listbas PROGRAM.BAS | aha > program.html + 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 =========== @@ -17,28 +17,33 @@ SEE ALSO **atr2xfd**\(1), **atrsize**\(1), **axe**\(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), **unmac65**\(1), **unprotbas**\(1), **vxrefbas**\(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-07-02" "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 @@ -117,28 +117,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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 @@ -179,28 +182,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -245,28 +245,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -377,28 +377,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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 c521116..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-07-02" "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 @@ -344,28 +344,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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 @@ -120,28 +120,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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. +. @@ -4,8 +4,10 @@ #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 @@ -17,24 +19,95 @@ 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; -int keep_going = 0; /* -k flag */ - void print_help(void) { - printf("Usage: %s [-v] [-k] <inputfile>\n", self); + 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, "vk")) != -1) { + 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); @@ -43,10 +116,18 @@ void parse_args(int argc, char **argv) { if(optind >= argc) die("No input file given (and stdin not supported)."); - else + + if(optind == argc - 1) { /* got one filename only */ open_input(argv[optind]); - if(input_file == stdin) - die("Reading from standard input not supported."); + 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. @@ -58,26 +139,227 @@ void add_type(int 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"; - } else if(bas_type == BT_TURBO) { - name = "Turbo BASIC XL"; + script_ret = SRET_BXE; } else { - name = "Not Atari BASIC; probably either Turbo or BXL/BXE"; + /* 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(verbose) fprintf(stderr, " final bas_type %02x\n", bas_type); + 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) ; +} - fputs(name, stdout); - putchar('\n'); +/* 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) ; +} - exit(bas_type == BT_ATARI ? 0 : bas_type + 8); +/* 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) { @@ -85,13 +367,18 @@ void remove_type(int type) { if(keep_going) return; - /* without -k, stop if it gets narrowed down to one of these two. */ - if(bas_type == BT_TURBO || bas_type == BT_BXE) + /* 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; + int has_args = 0, has_var_arg = 0, vartype = -1; unsigned char nexttok; last_cmd = tok; @@ -100,129 +387,310 @@ CALLBACK(handle_cmd) { 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); - bas_type = BT_INVALID; - print_result(); + keep_going = 0; + set_type(BT_INVALID); } - nexttok = program[pos + 1]; - has_args = !(nexttok == OP_EOS || nexttok == OP_EOL); + /* we have tokens 0x3a to 0x68 in both TB and BXE, or 47 of them. - /* 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) - 0x42: Maybe: BPUT or RGET (take the same args... but not quite!) - 0x43: Maybe: BGET or BPUT (take the same args... but not quite!) 0x46: LOOP or CP (no args either way) 0x49: LOCK or UNPROTECT (take the same args) - 0x4B: RENAME in both Turbo and BXL/XE (take the same args) - 0x60: CLS or HITCLR (no args either way) - This leaves 40 we can check. - Covered so far: 34 (85%) - TODO: Unknown tokens: - 0x54: ??? in TB (find out what), LVAR in BXL/BXE. - 0x5A: BLOAD or... what? (Jindroush lists it as ?5A?) - TODO: + 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) - 0x5C: GO# (1 arg only) or SORTUP (optional 2nd arg of USING, but no comma) - 0x5D: # (1 arg only) or SORTDOWN (optional 2nd arg of USING, but no comma) - 0x5F: PAINT (req 2 args) or NUM (optional 2 args, probly not appear in program) - */ + 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 0x61: /* DSOUND (4 num args) or INVERSE (no args) */ - case 0x62: /* CIRCLE (3 num args) or NORMAL (no args) */ + 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) */ - /* EXTEND can't show up in a program except maybe line 32768, e.g. - EXTEND:SAVE "D:BLAH". */ - remove_type(BT_BXL); - if(lineno < 32768) { - remove_type(BT_BXE); - } + + 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 (1st arg is number), PROCEDURE (arg is string const (not var!)) */ + + 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) { - remove_type(BT_TURBO); + /* 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) */ - /* not conclusive: without args means TB, but with arg, + + 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) */ - /* not conclusive: without args means TB, but with arg, + + 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) */ + 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) */ + + 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) */ - /* XXX: this doesn't do anything if the arg is a variable; we - could examine the type, but we don't yet */ + + 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) */ - if(nexttok < 0x80) { + /* 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 0x57: /* DUMP (1 optional string arg) or LOCAL (1 variable arg) */ - if(!has_args || (nexttok == OP_STRCONST)) { - /* if there's no arg, or one string constant arg... */ - /* XXX: DUMP A$ not detected */ + + 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); @@ -240,8 +708,39 @@ CALLBACK(handle_op) { /* 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.. */ - bas_type = BT_TURBO; - print_result(); + 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) */ @@ -251,90 +750,132 @@ CALLBACK(handle_op) { } remove_type(BT_ATARI); + /* only Turbo has op tokens numbered 0x69 and up. */ if(tok >= 0x69) { - remove_type(BT_BXL_BXE); + set_type(BT_TURBO); } if(tok >= 0x6E) { fprintf(stderr, "handle_op: invalid operator %02x at line %d\n", tok, lineno); - bas_type = BT_INVALID; - print_result(); + 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, 6 of them are undecidable, and the rest are - covered here, which means 70% coverage of the shared ops. + 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 - 0x5e FRAC (num func, 1 arg) or DPEEK (num func, 1 arg), can't tell apart - 0x63 RND (func, 1 num arg) or ERR (func, 1 num arg), 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. Note that - BXL has this as another END token, which works like the - regular END, but cannot be entered in the editor so unlikely - to show up in a program (but we handle it here anyway) */ + 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 if(nexttok == OP_EOS || nexttok == OP_EOL) { - /* weird BXL END token */ - remove_type(BT_TURBO | BT_BXE); } else { remove_type(BT_TURBO); } break; + case 0x59: /* INKEY$ (0 arg pseudo-func) in TB, string array separator semicolon in BXL/BXE */ - if(nexttok == OP_NUMCONST || nexttok >= 0x80) { - /* INKEY$ may not be followed by a numeric constant or a variable of any kind */ + /* 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) */ - if(last_op_tok == OP_NUMCONST || last_op_tok == OP_HEXCONST || last_op_tok >= 0x80) { - /* if the last token was a variable or a numeric, this is infix - (can't be a function, last token would have to have been a command - or a regular operator). */ + /* 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 */ - if(nexttok2 == OP_STRCONST) { - remove_type(BT_BXL_BXE); - } else if(nexttok2 > 0x80 && (get_vartype(nexttok2) == TYPE_STRING)) { - /* TODO: see if this test is actually valid! */ + /* 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 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 */ - if(nexttok == OP_STRCONST || nexttok >= 0x80) { - /* %0 %1 %2 can't be followed by a string constant *or* a variable */ + + 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 { - /* whereas LEFT$ RIGHT$ MID$ can't be followed by anything else */ remove_type(BT_BXL_BXE); } break; + default: break; } @@ -355,18 +896,38 @@ CALLBACK(handle_end_stmt) { remove_type(BT_TURBO); } break; - case 0x3e: /* WHILE (1 arg) or DPOKE (2 args) */ + + 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) { + 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); @@ -374,6 +935,14 @@ CALLBACK(handle_end_stmt) { 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 */ @@ -383,6 +952,7 @@ CALLBACK(handle_end_stmt) { 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); @@ -390,6 +960,7 @@ CALLBACK(handle_end_stmt) { remove_type(BT_BXL_BXE); } break; + default: break; } if(verbose) fprintf(stderr, " bas_type now %02x\n", bas_type); @@ -397,62 +968,287 @@ CALLBACK(handle_end_stmt) { last_cmd = last_op_tok = 0; } -void foreign(const char *name) { - fclose(input_file); - puts(name); - exit(0); /* TODO: pick a better number */ +/* 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 i, nuls, c, d; + int c, d; c = fgetc(input_file); d = fgetc(input_file); - if(c == 0 && d == 0) { + 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 == EOF || d == EOF) - die("File is too short to be a BASIC program of any kind."); + 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!)"); + foreign("XEX executable (not BASIC at all!)", SRET_NOT_BASIC); if(c == 0xfe && d == 0xfe) - foreign("Mac/65 tokenized source (not BASIC at all!)"); + foreign("Mac/65 tokenized source (not BASIC at all!)", SRET_NOT_BASIC); if(c == 0xdd && d == 0x00) - foreign("EXTENDed OSS BASIC XE"); + 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 (huh?)"); + foreign("ELF executable (not BASIC at all!)", SRET_NOT_BASIC); } - if(!(c == 0 && d == 0)) { - if(fseek(input_file, -3, SEEK_END) == 0) { - nuls = 0; - for(i = 0; i < 3; i++) { - if(fgetc(input_file) == 0) nuls++; - } - if(nuls == 3) { - foreign("Microsoft 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)"); + foreign("Text file, could be LISTed BASIC (or not)", SRET_NOT_BASIC); if(isprint(c) && isprint(d)) - foreign("Text file (not BASIC at all!)"); + 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. - foreign("Unknown file type (not BASIC at all!)"); + 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) { @@ -464,13 +1260,11 @@ int main(int argc, char **argv) { readfile(); parse_header(); + check_oss_int(); - allow_hex_const = 1; - on_cmd_token = handle_cmd; - on_exp_token = handle_op; - on_end_stmt = handle_end_stmt; - - walk_all_code(); + 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 index 472b216..f886c76 100644 --- a/whichbas.rst +++ b/whichbas.rst @@ -10,23 +10,43 @@ Determine BASIC variant of a tokenized Atari 8-bit program SYNOPSIS ======== -whichbas [-v] *input-file* +whichbas [-v] *input-file* [*input-file* ...] DESCRIPTION =========== -**whichbas** reads a tokenized Atari 8-bit BASIC, Turbo BASIC, -BASIC XL, BASIC XE, or Atari Microsoft BASIC program and attempts to -discover which BASIC is required to run it. -*input-file* must be an actual file. **whichbas** can't read from +**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. @@ -37,7 +57,8 @@ Detection Options NOTES ===== -Atari BASIC programs are detected 100% reliably. +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 @@ -55,37 +76,140 @@ 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 "Not Atari BASIC; -probably either Turbo or BXL/BXE". +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. -Atari Microsoft BASIC is detected by checking that the first two -bytes of the file are not zero, and that the last 3 are zero. This -may result in false positives (files that aren't BASIC programs at + - 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. -LIMITATIONS +EXIT STATUS =========== -Currently, **whichbas** doesn't look at the variable name or type -tables. One problem caused by this: If a program uses only Atari BASIC -tokens, but uses variable(s) with _ in the name, it will be identified -as Atari BASIC... even though _ in variable names is illegal in Atari -BASIC and pretty much guarantees the program is Turbo/BXL/BXE. -Looking at the variable types could also improve detection, since -Turbo and BXL/BXE support extended variable types (procedure labels -for Turbo, string arrays for BXL/BXE). +Without the **-s** option, exit status is 0 for success, non-zero for +failure. -**whichbas** knows nothing about other BASICs such as Frost BASIC, -BASIC/A+, Altirra BASIC... +With the **-s** option, the exit status is: -EXIT STATUS -=========== +**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. -0 for success, 1 for failure. +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-07-02" "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: @@ -304,28 +304,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -78,28 +78,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -136,28 +136,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -196,28 +196,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -189,28 +189,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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-07-02" "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: @@ -117,28 +117,33 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \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. |