diff options
Diffstat (limited to '')
67 files changed, 32030 insertions, 0 deletions
diff --git a/util/alevt/COPYRIGHT b/util/alevt/COPYRIGHT new file mode 100644 index 0000000..17930ea --- /dev/null +++ b/util/alevt/COPYRIGHT @@ -0,0 +1,297 @@ +This message applies to all files within the archive: + + Copyright (C) 1998,1999,2000 Edgar Toernig (froese@gmx.de) + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License Version 2 as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + +And here's the GNU GPL V2: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/util/alevt/ChangeLog b/util/alevt/ChangeLog new file mode 100644 index 0000000..896ddc3 --- /dev/null +++ b/util/alevt/ChangeLog @@ -0,0 +1,535 @@ +Thu Feb 11 22:05:00 MET 2010 (1.7.0) + + - redesigned version: + - outfile, new starting methods, libzvbi implementation + - lots of bug fixes, all patches available in the Internet applied + - extensive code cleanup + +Mon Dec 3 03:11:07 MET 2007 (1.6.2) + + - compilation fixes for newer gcc + - makefile tweaks (man vs share/man, /usr/X11R6 vs /usr, etc) + - default device changed to /dev/vbi0 + - adapt to current v4l2 api + - some minor fixes collected during the past years + + This is a build-time update to conform to newer compilers and + system environments. If you have a running AleVT there's no + reason to update. The only real fix is in the html-exporter + which was producing broken html (missing double-quotes). + +Thu Jan 23 01:53:10 MET 2003 + + - Fixed a bug in contrib/cap-all.c (fdset_init before vbi_open) + - Expaned cap-all.c to show how to save in two formats simultaneously. + +Tue Aug 20 05:22:16 MEST 2002 (1.6.1) + + - Removed the bttv-warning from the help pages ;-) + +Mon Jul 23 18:34:32 MEST 2001 + + - Fixed bug in ui.c - found by <pawel@sakowski.eu.org>. + - When clicking on page numbers accept sub-page numbers too. + +Sat Dec 23 15:12:11 MET 2000 + + - Fixed 'double height last line' bug in export.c reported by + <Matthias.Kleinmann@urz.uni-heidelberg.de> + +Thu Oct 12 02:19:31 MEST 2000 + + - The fix was wrong. Removed it. + +Wed Oct 11 19:41:38 MEST 2000 (1.6.0) + + - Some documentation tweaks. + - Release. Made it 1.6 because of V4l2 API. + +Thu Sep 21 21:07:12 MEST 2000 + + - Removed old bttv-only decoder. Only the v4l2-based stays. + If the device does not support v4l2, default parameters + appropriate for the bttv-driver are taken. + - Subpage cycling (up/down and 2nd wheel) stays in the current + page. + +Sat Sep 16 23:52:12 MEST 2000 + + - Experimental v4l2 interface added. + - Finetune defaults to 1 now. Works best for me. Tell me + if you don't like it. + - Russian patch still not added :-/ + - Fixed the bug in xio.c that Ben Smithurst + <ben@scientia.demon.co.uk> found. + - Added the dual-wheel-mouse patch from Holger Fitzner. + +Tue May 30 03:09:24 MEST 2000 + + - As Matto Fransen <matto@matto.nl> reported: the ; after   + in exp-html is missing. fixed that. + +Tue May 9 20:21:52 MEST 2000 + + - Removed the -oldbttv/-newbttv options. If your driver has + a buffer size different from that in the current bttv you + either have to support the VBISIZE ioctl or change the source. + (Tried to implement an autodetect by non-blocking reads but + that confuses the driver that much that it no longers gives + reasonable data.) + - Added a compression option to the png export filter and + changed the default compression level to the lib's default. + The prev default of 9 was way to slow. + +Wed May 3 19:18:55 MEST 2000 + + - Added a smaller font. Made out of the neep9 font from + the really great jmk-fonts (http://www.pobox.com/~jmknoble). + +Sat Apr 29 02:36:41 MEST 2000 + + - Fixed SEGV in export.c:adjust. + - Fixed a possible buffer overrun in exp-txt.c + +Thu Nov 4 21:18:52 MET 1999 (1.5.1) + + - Added os.h. That way alevt compiles right out of the + box on all BSD systems (I hope *g*). + - Fixed the DST bug in alevt-date. + - Put vtwiz.pl in contrib, a perl/tk/set-tv script to + launch alevt written by Joern Borgert. + +Tue Oct 26 23:55:09 MEST 1999 (1.5.1-pre1) + + - Added timeout option to alevt-cap. + - Use install instead of cp in the Makefile. + - Added -I/usr/local/include and -L/usr/local/lib + in the Makefile. + - Changed #ifdef FREEBSD to #ifdef BSD. + - exchanged contrib/paul-export.patch with + paul.fmt_page.c (a replacement for export.c:fmt_page()) + and paul.fmt_page.patch (the same in form of a + patch file). + - Some doc corrections. + +Thu Oct 14 02:49:48 MEST 1999 + + - Added FREEBSD patches. + +Fri Oct 8 23:36:45 MEST 1999 (1.5.0) + + - Updated the documentation. + + So, what's new since 1.4.9 (nearly 4 months ago)? + Two major things: full latin-2 support and export + filters for alevt-cap and alevt itself. + + For the latin-2 support page enhancement packets + have to be decoded and some latin-1 pages may + benefit from that, too. Note: if you select + latin-2 everything is latin-2, even cut'n paste. + (new cmdline option -charset latin-1|2) + + The export filters allow saving pages in different + formats. At the moment there's ascii (with and with- + out color), html, png, and ppm. The png filter + requires libpng. If you don't have it (or don't want + png support) just remove the WITH_PNG from the + Makefile. To save the currently displayed page just + press 's'. See alevt-cap(1) for the format string. + + Preview: 1.5.1 will have the FreeBSD patches and + any bug fixes. (But not more *g*). + +Fri Oct 8 02:06:35 MEST 1999 (1.5.0-pre4) + + Finally I could get away from my Playstation and + work a little bit on alevt *g* + + - Tried to change alevt-date with freebsd patches from + Thomas Runge <runge@rostock.zgdv.de>. They do not + have the timezone and daylight variables. But I do + not have tm_gmtoff. So it's commented out for the + moment. + - Made font.[ch] so that only one copy of the fonts is + in the executable when including export modules + (exp-gfx.c uses them). Had to tweak the makefile. + - Added 's' for saving pages to files. Prompts for + a format string and a filename and saves the + currently displayed page. + (Formerly, 's' and 'S' were aliases for '/' and '?' + (searching)) + - Found a bug in export.c regarding double height lines. + - Added a patch to the contrib dir to pass the URL you + click on to netscape. + + The documentation updates are still missing. That's + the last thing to do for 1.5.0. But that's so boring... + +Fri Aug 20 21:28:18 MEST 1999 + + Back from holidays and time for alevt... + + - Added html, png, and ppm export modules from Paul. + - Fixed the return status for export_output. + - Tweaked the makefile for libpng support. + - Added the export howto to the contrib dir. + - Added Paul's fmt_page routine to contrib as a patch + to export.c + - Added "-format help" to list all output formats and + its options. + + Still to do: update man page of alevt-cap, add export + to alevt, add erc to alevt-cap. + + Oh, btw, alevt is running on FreeBSD with the bt848 + driver from Roger Hardiman <roger@cs.strath.ac.uk> *g*. + I wonder if it's possible to port his driver to linux. + Maybe it runs better then bttv... (I still get reports + with stuck xawtvs ...) + +Mon Jul 19 01:15:50 MEST 1999 (1.5.0-pre3) + + - Added export modules. It's gotten much to complex. + + A lot of things still to do: add other formats [Paul?], + add documentation, add format-help, add export to alevt, + add erc to alevt-cap, ... + +Mon Jul 12 00:09:03 MEST 1999 + + - Added an incomplete 20x24 font to the contrib dir. + +Tue Jun 29 00:46:03 MEST 1999 (1.5.0-pre2) + + - Added lanugage tables from Radoslaw. + - Added new latin-2 font from Radoslaw. + - Fixed a bug with hold graphics. There's still one bug + on CNN's page 100 (has to do with set-after behaviour of + color select in hold graphics mode). The last line of the + earth should be blue-blue-green not blue-green-green. + AleVT always uses set-at behaviour. Afaik, this combination + (hold + set-after) is the only way to see the difference + between set-at and set-after. Set-after will blow up the + code so I will leave it as it is. + - vbi now collects all pkt26 and enhances the page before + it is passed on. Seem's to work. + +Tue Jun 22 22:13:45 MEST 1999 (1.5.0-pre1) + + - Fixed hamm24. And, it should be fast now *g* + - Moved the language conversion parts to lang.c + - Added additional lang_chars for use with the latin-2 charset. + - Added -charset latin-1/2 option. + - Added pkt x/26 decoding. ... and noticed, that these packets + are sent between line 0 and 1. FUCK. Now I have to save + all x/26 until the page is complete. But not today... :-( + + Things are getting more and more uglier. The right thing + to do would be to make a big font with all possible chars + (including cyrillic, arabic, smoothed graphics, ...). + That would mean to make each char in vtp->data 16 bit. + And then add an attribute word for each char so that the + enhanced attributes work, too. Searching and cut & paste + would be more complicated... but the worst, the pages + will be much bigger (4 times larger). Really bad for + the cache and god knows for what else... + Is it worth all the trouble??? I don't need that! + +Tue Jun 15 01:25:40 MEST 1999 + + - Changed .specs file again. I previously changed alevt.spec + instead of alevt.spec.in :-( + +Mon Jun 14 23:45:48 MEST 1999 (1.4.9) + + - Made a very simple capture program (alevt-cap). Just collects + the given pages and writes them to disk in ASCII. + I will only accept bug reports/fixes, no enhancement requests + at the moment *g* + (I can't believe it; I even wrote a man page...) + - Changed the subpage delimiter on the command line from '/' to '.' + The old one ('/') is still accepted. (Reason: alevt-cap uses + the page number as part of the filename and a / is inconvenient. + And I already wanted to let you enter subpages with the keypad + and the '.' would be a nice key for that.) + - Tweaked the .specs file... (Btw, alevt-date and alevt-cap should + not be installed in the X11 tree.) + +Thu Jun 10 22:13:40 MEST 1999 + + - moved the hamming decoding and associated table to hamm.c + - played with pkt26 to support polish stations. not finished. + +Tue Jun 8 21:00:42 MEST 1999 + + - Added -[no]bell option. And the 'b' key. + - Replaced all xio_bell calls with appropriate status messages. + +Sat Jun 5 00:42:19 MEST 1999 (1.4.8) + + - Shit. Just after the release I found a bug. The header line + isn't updated as it should :-( (Just affects parallel mode + transmission, so no new version, yet.) + - Created mailing list. Either go to http://alevt.listbot.com/ + or write mail to alevt-subscribe@listbot.com. + - Added bttv-patch to the contrib dir for those who don't want + to wait for bttv-0.6.5. + +Fri Jun 4 17:19:41 MEST 1999 (1.4.7) + + - Added autodetection of VBIBUF_SIZE (only with newer bttv, 0.6.5). + - Forgot to close vbi_fd in vbi_close :-/ + - Made ERC on by default. If the page has no errors it + costs nothing and if it has you'll turn it on anyway. + - Changed parameters of EV_HEADER. + - Removed XAWTV_HACKS. + - Updated some docu. + - Modified the contrib samples to reflect previous API changes. + +Fri May 28 20:16:44 MEST 1999 + + - Added status messages. + - Added EV_TIMER event. + - Added channel change detection (only with newer bttv, 0.6.5). + Sends EV_RESET event. The XAWTV_HACKS can be removed *phww*. + Now the cache is automatically cleared if you switch to a + new channel. It even works with a SAT receiver connected to + Video-In. + +Thu May 27 23:54:32 MEST 1999 (1.4.6 unofficial) + + - Cache reset didn't reset npages and hi_subno. + - Added XAWTV_HACKS, that is: alevt scans for a window with + the _XAWTV_STATION property and registers for property changes. + Result: when switching channels in xawtv, the cache is cleared. + (This is just an ugly hack. Xawtv must already be running + when alevt is started. If you quit and restart xawtv, it no + longer works. There's no method to detect if the monitored + xawtv is really the one controlling our /dev/vbi, etc...) + Added on request of Paul Ortyl <ortylp@key.net.pl>. + - Added error reduction circuit. It's part of the cache. + Errors in a new page are replaced by characters/lines from + an already cached (older) page. May be toggled by pressing + 'e' (editor is now on 'E'). It's not enabled by default + because it takes some CPU time. Idea by Paul Ortyl. + - TODO: clean up. document new features. add status messages. + +Sun May 23 19:13:07 MEST 1999 (1.4.5) + + - New spec file from Karsten Hopp <karsten.hopp@delix.de> + - Changed it even further *g* + - Fixed a bug with graphics selection of double height lines. + - Documented the -oldbttv option in the man page. Now it's in + every page. This should finally halve the mails I get. + (For the other halve I have to write alevt-capture *g*) + +Sat May 8 02:41:21 MEST 1999 + + - Ehhh, changed u32 typedef from unsigned long to unsigned int. + Same for s32. The Alpha's longs are 64 bits. + Thanks to Sdruddin Rejeb <rejeb@dpmail.epfl.ch>. + (There's something strange with this in the X libs. They are + sometimes very lazy about ints and longs. Someone with an + Alpha should check the cut & paste, both, text and graphics + selections.) + +Thu Apr 29 22:38:37 MEST 1999 + + - Updated contrib/t1.c + - Added ':' as a subpage delimiter for clicking (2:7 is the same as 2/7) + +Mon Apr 19 19:40:09 MEST 1999 + + - Switched the scrolling direction of the wheel + +Mon Mar 29 01:23:06 MEST 1999 (1.4.4) + + - fixed DST bug in alevt-date + - added crude latin-2 support. 'make FONT=latin-2' should be enough. + (found the stuff on the website http://www.penguin.cz/~marvin/ of + Daniel Smolik <smolikdan@email.cz>. I don't know if he is the one + who made the font). + +Wed Mar 17 20:53:59 MET 1999 + + - added timeout to alevt-date + +Fri Feb 19 18:22:53 MET 1999 (1.4.3> + + - Makefile changes. + +Fri Jan 29 18:01:27 MET 1999 + + - fixed bug in dllist.h. dl_insert_first(h, dl_remove(n)) was only + working due to gcc implementation details. + +Mon Jan 25 18:33:42 MET 1999 (1.4.2) + + - fixed 'clear cache'. no longer removes the help pages. + - made next/prev key/button to skip missing pages. + - added support for wheeled mice. (I heard it's really cool *g*) + - problem with subpages > 0xff fixed. + +Thu Jan 21 17:31:46 MET 1999 (1.4.1) + + - added man pages from Thomas Schoepf <schoepf@usa.net>. + - added rpm-spec file from Mario Mikocevic <mozgy@times.hr>. + (looks a little bit odd, but I don't know very much about rpms) + - minor option fix in alevt-date (people are really using it!?!) + +Tue Jan 5 03:50:08 MET 1999 (1.4.0) + + - should be 1.3.10 but that gives problems with the help pages :-( + - fixed varargs for alpha + - default is now -newbttv (aka -fuckbttv). use -oldbttv for v<0.5.20. + +Sat Jan 2 21:40:54 MET 1999 + + - small patches to alevt-date (-vbi options and tzset fix) + - played with pkt8/30. what a mess. MTV is 25:13 ahead *g* + +Wed Dec 30 19:30:14 MET 1998 (1.3.9) + + - slightly modified the pll (may need further tuning) + +Wed Dec 30 05:27:26 MET 1998 (1.3.8) + + - added pll (-finetune auto). try -debug for status msgs. + +Tue Dec 29 05:15:53 MET 1998 (1.3.7) + + - added finetune option (see README) + - you may now type -newbttv instead of -fuckbttv *g* + +Mon Dec 28 19:36:32 MET 1998 (1.3.6) + + - Makefile: R5 -> R6 :-( + - vbi.c now works without cache.c + - added alevt-date (set system time from teletext) + - bug in option parsing (error reporting) + +Thu Dec 17 19:56:16 MET 1998 (1.3.5) + + - added -L/usr/X11R6/lib in Makefile + - put some blurb (in german) in contrib. + +Thu Dec 17 05:01:34 MET 1998 (1.3.4) + + - added class hints on (invisible) leader window to make docking + in wmaker easier. instant name for leader is "VTLeader" and for + the viewing windows "VTPage" + - made the icon a little bit smaller + +Mon Dec 14 23:05:41 MET 1998 (1.3.3) + + Release 1.3.3 + + - added spanish/portuguese charset decoding + - added similar looking glyphs for czech + - minor changes on the font + - middle click on current page number opens new parent window + - case dependant search if the pattern begins with a '!' + - line editing may be aborted with ^C + +Sun Dec 13 17:55:32 MET 1998 (1.3.2) + + - when there were multiple windows of the same page, cycling through + the subpages changed all windows. fixed. + - hilight the found text (make it the selection). + - slightly modified the hilight colors. + - default window size set to 41x25 (looks better). + - rewrote the editor. + +Sun Dec 13 07:03:10 MET 1998 (1.3.1) + + - fixed one command line option + - corrected bug in searching + +Sat Dec 12 20:27:03 MET 1998 (1.3.0) + + Release 1.3.0 + + - searching is now ready (still need a status line for error msgs). + - set SIGPIPE to SIG_DFL. some shells (KDE) set it to SIG_IGN and then + the timer task won't be killed on exit. + - updated the help pages. + - I'm frustrated! BTTV_VERSION doesn't work on /dev/vbi. So no + autodetection of driver version. Added -fuckbttv option instead. + +Fri Dec 11 19:36:03 MET 1998 (1.2.5) + + - reworked national charset (lang) handling. everthing now done in vbi.c. + the rest just deals with latin-1. + - first version of searching (functional, but dirty. needs more work.) + +Thu Dec 10 20:06:27 MET 1998 (1.2.4) + + - new file edline.c (line editor for the menu line. start for searching...) + - blinking cursor + - added an 48x48 icon from Ulf Rompe + - added pasting into the line editor (insert key). + - release ownership of XA_PRIMARY when deselecting selection. + +Tue Dec 8 21:26:26 MET 1998 (1.2.3) + + - new file ui.c (most user interface stuff from main.c) + - rewrote option parsing + - allow specification of child windows on command line. now + it's possible to regenerate the complete window layout by + the commandline (may be of some use for session management). + - some spelling fixes in the help pages from Mark Bryars + +Mon Dec 7 16:59:28 MET 1998 (1.2.2) + + - reworked hidden handling in xio.c + +Sun Dec 6 19:54:10 MET 1998 (1.2.1) + + - class name changed! from Alevt to AleVT. + - window/icon title shows current page number + - changed the icon to a 64 pixel width one. not nice but ... + - added a small mini icon for the title bar. is there a property I can set? + - pressing on the CPN puts the page on hold + - pressing on the violet * reveals concealed text + - added simple menu if no FastText menu is present + - allow subpages to be specified on the command line (eg 100/4) + +Sat Dec 5 20:59:51 MET 1998 (1.2.0) + + Release 1.2.0 + + - finished the help pages. + - added command line handling + - added user geometry handling in xio.c + +Sat Dec 5 02:28:16 MET 1998 (1.1.2) + + - allow magazin 9 (help system) + - start box char after a pagenumber selects subpage 1 (hack) + - added a crude page editor (just to create the help pages. not for users.) + - started with the online help system (sounds great, hehe) + +Tue Dec 1 20:19:53 MET 1998 (1.1.1) + + - added concept of parent and child windows. now, the middle mouse + button changes the contens of the child window. if there isn't + one, it is created. + - Middle mouse button on x/y (subpage cycling) selects the previous + subpage. (updating the child with subpages is hairy...) + +Sun Nov 29 23:34:18 MET 1998 (1.1.0) + + Release 1.1.0 + + - removed most of the recovery for single bad lines (does too much harm) + - changed handling of parallel mode transmission (untested. unused in .de) + - added selection (text & graphic!). try pasting into xpaint :-) + - added cache-clear function ('c') + - click on x/y selects the next subpage + - some minor tweaks + - added an icon bitmap. + +Wed Nov 24 23:33:34 MET 1998 (1.0.0) + + First Release 1.0.0 diff --git a/util/alevt/EXPORT.HOWTO b/util/alevt/EXPORT.HOWTO new file mode 100644 index 0000000..b9fba67 --- /dev/null +++ b/util/alevt/EXPORT.HOWTO @@ -0,0 +1,84 @@ +HOW TO IMPLEMENT A NEW EXPORT MODULE: + +As an example look at exp-txt.c (it implements two modules which +are pretty similar). + +You have to create one exported structure (struct export_module). +This structure holds the following data: + +1. The name of the format (example: "ascii"). + +2. The default extension to use for building filenames ("txt"). + +3. A list of module options. It's a 0 terminated array of char +pointers, one for each option (similar to argv of main). +If an option string contains a '=', it is an option that +requires an argument. The part after the '=' is ignored at +the moment. Later, I want to add help messages that show +these options strings and then the part after the '=' becomes +useful. +If you do not have local options, set this field to 0. + +4. The number of bytes for local data in the export structure. +There you may store data collected during option parsing or +for whatever you want. +Don't use global variables for storing this data! With +alevt-cap you may give: + +alevt-cap -format ascii,color 100 -format ascii 100 + +to save the page in two different formats. Using global +vars would inhibit this. The data area in struct export +starts at the 'data' field. You have to cast it to the +appropriate type (see the D macro in exp-txt.c). +If you do not need local data, set this field to 0. + +5. An open function (or call it constructor). It is called +when your module is needed and it is passed a struct export +(the instance). This function may be used to initialize +the local data in the export struct. +If all goes well return 0. Else call export_error (see +below) and return -1. +If you do not need an open function, set this field to 0. + +6. A close function (or call it destructor). It is called +when your module is no longer needed. If you allocated +memory in the open func, this is the place to free it. +If you do not need a close function, set it to 0. + +7. An option function. It is called for each module option +the user has given. It is passed an option number (first +option in the option-array gives 1, ...) and a char pointer +to the argument for that option (0 if the option does not +need an arg). The argument pointer keeps valid until the +close function is called. +If all goes well, return 0. Else call export_error and +return -1. +If you gave an option list at point 3 you have to specify +this function. Else set it to 0. + +8. An output function. It is called to produce the output. +It is given the file name to use and a fmt_page pointer. +The fmt_page contains an interpreted image of the page. +There are no control chars in it. It uses the character +set defined by the two fonts. +These function may be called consecutive for multiple +pages. Don't expect one output for one open/close. +Return codes as above... (0: ok, -1: error). + +The export_error function: If one of your functions wants to +report an error, it has to use the export_error function. +It's a printf like function to set error messages. In alevt-cap +these messages are printed to stderr, in alevt they will be +shown in the status line (so don't make them too long). + +The last step is to add your export_module structure to the +list of modules in export.c (at the top). +Please, make sure that this structure is the only exported +symbol. All other things should be static. + +That's all. A structure describing your module and 4 functions +(open, close, option, output) to implement it. Shouldn't be too +complicated. + +Ciao, ET. diff --git a/util/alevt/Makefile b/util/alevt/Makefile new file mode 100644 index 0000000..2f7c8da --- /dev/null +++ b/util/alevt/Makefile @@ -0,0 +1,130 @@ +VER=1.7.0 +OPT=-O -g -w +DEFS=-DWITH_PNG +DEFS+=-DUSE_LIBZVBI +FONT=vtxt +MAN_DIR=man +DESTDIR= +PREFIX=/usr +HOSTCC=$(CC) +CFLAGS=$(OPT) -DVERSION=\"$(VER)\" $(DEFS) -I$(USR_X11R6)/include +EXPOBJS=export.o exp-txt.o exp-html.o exp-gfx.o font.o +OBJS=main.o ui.o xio.o fdset.o vbi.o cache.o help.o search.o misc.o hamm.o lang.o $(EXPOBJS) +TOBJS=alevt-date.o vbi.o fdset.o misc.o hamm.o lang.o +COBJS=alevt-cap.o vbi.o fdset.o misc.o hamm.o lang.o $(EXPOBJS) + +ifneq ($(findstring WITH_PNG,$(DEFS)),) +EXPLIBS=-lpng -lz -lm +endif + +ifneq ($(findstring USE_LIBZVBI,$(DEFS)),) +ZVBILIB=-lzvbi -lpthread +EXPLIBS+=$(ZVBILIB) +endif + +all: alevt alevt-date alevt-cap alevt.1 alevt-date.1 alevt-cap.1 + +alevt: $(OBJS) + $(CC) $(OPT) $(OBJS) -o alevt -L$(PREFIX)/lib -L$(PREFIX)/lib64 -lX11 $(EXPLIBS) + +alevt-date: $(TOBJS) + $(CC) $(OPT) $(TOBJS) -o alevt-date $(ZVBILIB) + +alevt-cap: $(COBJS) + $(CC) $(OPT) $(COBJS) -o alevt-cap $(EXPLIBS) + +font.o: font1.xbm font2.xbm font3.xbm font4.xbm +fontsize.h: font1.xbm font2.xbm font3.xbm font4.xbm + fgrep -h "#define" font1.xbm font2.xbm font3.xbm font4.xbm >fontsize.h + +font1.xbm: bdf2xbm $(FONT)-latin-1.bdf + ./bdf2xbm font1 <$(FONT)-latin-1.bdf >font1.xbm + +font2.xbm: bdf2xbm $(FONT)-latin-2.bdf + ./bdf2xbm font2 <$(FONT)-latin-2.bdf >font2.xbm + +font3.xbm: bdf2xbm vtxt-koi8.bdf + ./bdf2xbm font3 <vtxt-koi8.bdf >font3.xbm + +font4.xbm: bdf2xbm vtxt-iso8859-7.bdf + ./bdf2xbm font4 <vtxt-iso8859-7.bdf >font4.xbm + +bdf2xbm: bdf2xbm.c + $(HOSTCC) bdf2xbm.c -o bdf2xbm + +clean: + rm -f *.o page*.txt a.out core bdf2xbm font?.xbm fontsize.h + rm -f alevt alevt-date alevt-cap + +rpm-install: all + install -m 0755 alevt ${RPM_BUILD_ROOT}$(USR_X11R6)/bin + install -m 0755 alevt-date ${RPM_BUILD_ROOT}$(USR_X11R6)/bin + install -m 0755 alevt-cap ${RPM_BUILD_ROOT}$(USR_X11R6)/bin + install -m 0644 alevt.1 ${RPM_BUILD_ROOT}$(USR_X11R6)/$(MAN)/man1 + install -m 0644 alevt-date.1 ${RPM_BUILD_ROOT}$(USR_X11R6)/$(MAN)/man1 + install -m 0644 alevt-cap.1 ${RPM_BUILD_ROOT}$(USR_X11R6)/$(MAN)/man1 + install -d 0755 $(RPM_BUILD_ROOT)$(USR_X11R6)/include/X11/pixmaps + install -m 0644 alevt.png $(RPM_BUILD_ROOT)$(USR_X11R6)/include/X11/pixmaps + +install: all + install -m 0755 alevt $(DESTDIR)$(PREFIX)/bin + install -m 0755 alevt-date $(DESTDIR)$(PREFIX)/bin + install -m 0755 alevt-cap $(DESTDIR)$(PREFIX)/bin + install -m 0644 alevt.1 $(DESTDIR)$(PREFIX)/share/man/man1 + install -m 0644 alevt-date.1 $(DESTDIR)$(PREFIX)/share/man/man1 + install -m 0644 alevt-cap.1 $(DESTDIR)$(PREFIX)/share/man/man1 + install -m 0644 alevt.png $(DESTDIR)$(PREFIX)/share/pixmaps + install -m 0644 alevt.desktop $(DESTDIR)$(PREFIX)/share/applications + +uninstall: clean + rm -f /usr/bin/alevt /usr/bin/alevt-cap /usr/bin/alevt-date \ + /usr/share/pixmaps/alevt.png /usr/share/applications/alevt.desktop \ + /usr/share/man/man1/alevt.1 /usr/share/man/man1/alevt-cap.1 \ + /usr/share/man/man1/alevt-date.1 + +depend: + makedepend -Y -- $(CFLAGS_none) -- *.c 2>/dev/null + +tar-html: alevt.1 alevt-date.1 alevt-cap.1 + for i in alevt.1 alevt-date.1 alevt-cap.1 ; do \ + j=`basename $$i .1` ; \ + j=`basename $$j .1x` ; \ + nroff -man $$i | { \ + echo "<HTML><HEAD><TITLE>AleVT</TITLE></HEAD><BODY>" ; \ + man2html -bare -uelem U -nodepage ; \ + echo "</B0DY></HTML>" ; \ + } | sed -e "s,</B> <B>, ,g" -e "s,</U> <U>, ,g" >~/exit/alevt/$$j.html ;\ + done + +tar: tar-html clean + sed s/VERSION/$(VER)/g <alevt.lsm.in >~/exit/alevt/alevt-$(VER).lsm + sed s/VERSION/$(VER)/g <alevt.spec.in >alevt.spec + cd .. ;\ + ln -s alevt alevt-$(VER) ;\ + tar vcfz ~/exit/alevt/alevt-$(VER).tar.gz alevt-$(VER)/* ;\ + rm alevt-$(VER) + cat <CHANGELOG >~/exit/alevt/changes + +# DO NOT DELETE + +alevt-cap.o: vt.h misc.h fdset.h dllist.h vbi.h cache.h lang.h export.h +alevt-date.o: os.h vt.h misc.h fdset.h dllist.h vbi.h cache.h lang.h +cache.o: misc.h dllist.h cache.h vt.h help.h +exp-gfx.o: lang.h misc.h vt.h export.h font.h fontsize.h +exp-html.o: lang.h misc.h vt.h export.h +exp-txt.o: os.h export.h vt.h misc.h +export.o: vt.h misc.h export.h +fdset.o: dllist.h misc.h fdset.h +font.o: font1.xbm font2.xbm font3.xbm font4.xbm +hamm.o: vt.h misc.h hamm.h +help.o: vt.h misc.h vt900.out vt901.out vt902.out vt903.out vt904.out vt905.out +help.o: vt906.out vt907.out vt908.out vt909.out vt910.out vt911.out vt912.out +lang.o: misc.h vt.h lang.h +main.o: vt.h misc.h fdset.h dllist.h xio.h vbi.h cache.h lang.h ui.h +main.o: search.h +misc.o: misc.h +search.o: vt.h misc.h cache.h dllist.h search.h +ui.o: vt.h misc.h xio.h dllist.h vbi.h cache.h lang.h fdset.h +ui.o: search.h export.h ui.h +vbi.o: os.h vt.h misc.h vbi.h dllist.h cache.h lang.h fdset.h hamm.h +xio.o: vt.h misc.h dllist.h xio.h fdset.h lang.h icon.xbm font.h fontsize.h diff --git a/util/alevt/README b/util/alevt/README new file mode 100644 index 0000000..83985f0 --- /dev/null +++ b/util/alevt/README @@ -0,0 +1,72 @@ +Hi, + +this software is not just a program, it's moreover a legend. +It is THE protagonist of all videotext applications under Linux. + +During the past 10 years the video standards, the APIs, the kernel +have seen lots of changes. +But unfortunately this program has NOT seen much maintenance. +The results of that misfit appearance are: + +1. lots of forks flying around in the Internet +2. lots of patches flying around, some good, some disgusting, some out of time +3. lots of cruft which is completely outdated or obsolete for other reasons + +To handle all that in one big effort I decided to redesign the program +completely, enlarging its capabilities for DVB-S at the same time. + +So here are the changes: + +1. Erasure of old help pages and rename / reorganize / update the rest +-> redesign of the online help system / implying alevt-date and alevt-cap + +2. Erasure of old outdated integers, functions, parameters: + +- bell, big_buf, debug, display, editor, erc, fine_tune, newbttv, +- oldbttv + +3. Coding style cleanups (no superfluous comments, not more than + 80 characters per column, no uncommented code. + +4. No strange characters in the outfile, latin alphabet in purity instead. + +5. Alevt can be started in 4 modes now if you are running it in DVB mode: + +- by service id (sid) +- by teletext pid (ttpid) +- by channel name +- without parameter + +6. Starting it in DVB mode on the command line it presents you +a table with human readable values such as sid, teletext pid, +PMT (Program Map Table), provider name, service name, language, service type. +This makes it easier for you to start multiple teletext windows +in multiple console sessions manually. + +If working with a script and the option -o (outfile) you can +also start multiple teletext windows of all channels in a transponder. +I develop a GUI using TCL / TK 8.5 and Iwidgets 4.01 to do that and other +tasks graphically (i. e. by mouse click). + +7. If you install the program on the command line by typing "make & + make install" there is an uninstaller now to revert the installation: + "make uninstall". + +ENJOY IT! + +Uwe Bugla, February 11th, 2010. + +External dependencies + +AleVT needs some system libraries to be installed in your system. +They are zlib, libX11, libpng and libzvbi. + +Credits go to: +- Andreas Rottmann from debian.org for compiler fixes and + other kinds of investigation. +- Francesco Lavra for supplying a kernel patch to avoid kernel demux + incompatibilities with kernels >= 2.6.32 +- Andy Walls for helpful investigation in kernelspace +- Edgar Toernig for providing the source version 1.6.2 and doing all the + development for the basic versions +- Tom Zoerner for the implementation of libzvbi diff --git a/util/alevt/README.OLD b/util/alevt/README.OLD new file mode 100644 index 0000000..4fb0e41 --- /dev/null +++ b/util/alevt/README.OLD @@ -0,0 +1,78 @@ +Hi, Menden, 21 Sep 2000 + + This program decodes and displays Videotext/Teletext from a + /dev/vbi device. + + +COMPILE & INSTALL: + + There's nothing to configure. A simple 'make' is all. + If you do not want png support remove the WITH_PNG in + the Makefile. Additionally, if you want a smaller font + uncomment the "FONT=neep9" line. + + It gives you 'alevt', 'alevt-date', and 'alevt-cap' and + their man pages 'alevt.1x', 'alevt-date.1', and 'alevt-cap.1'. + + You can install them where ever you want (i.e. /usr/local/bin). + The programs are self-contained and require no other files. + + NOTE: Be careful with 'make install'. It's just for me :-) + + +PROBLEMS: + + If you have a lot of decoding errors (lot of these lightning symbols) + you may try pressing the 'f' and 'F' key. This allows fine tuning of + the decoder circuit. There's also a -finetune command line option. + This should only be necessary on really bad signals. + + Maybe, I add autotuning later... + + UPDATE: added autotuning. It's the default. If you add -debug the + the actions of the pll are printed to stdout. + + To get the old (pre finetune) behaviour start it with -finetune 0. + + UPDATE: disabled autotuning *g* sometimes it's too jumpy... + + +ALEVT-DATE: + I added a little tool to set the system time from the videotext + time. The date is not interpreted (not even transmitted on some + channels). So it allows only adjustment of +/-12 hours. + The default allowed adjustment is limited to +/-2 hours (use + -delta to change). Without the -set option it just display + the date in the format of the date command. Look at strftime(3) + for possible control sequences you may use in the -format option. + + +HACKING: + + If you want to play with the font size, you may resize it with + xv (xv font1.xbm). Just make sure, that its width is a multiple of + 32 and its height a multiple of 8. A simple make will create + a version of AleTV with the new font. Warning: a make clean + will erase font1.xbm. The next make will recreate font.xbm from + vtxt.bdf. + + AleVT has a built in page editor. If you start it with -editor + you may press 'E' to invoke it. For the usage you have to consult + the sources. (It's very crude!) + + +TODO: (no specific order) + + - Error correction in alevt-cap + - Better language support. Internal 16-bit charset. + - Separated graphics. + - Rewrite the whole stuff. A networked teletext daemon and clients + that connect to it for display, capture, cgi, ... + + +NEWER VERSIONS: + + The primary site of AleVT is http://goron.de/~froese + +Have fun, +Edgar Toernig (froese@gmx.de) diff --git a/util/alevt/ReadmeGR b/util/alevt/ReadmeGR new file mode 100644 index 0000000..68d32c2 --- /dev/null +++ b/util/alevt/ReadmeGR @@ -0,0 +1,28 @@ +29-9-2003 + +�������� ��� �� ALEVT +� �������� ��������� ����� ������������� �� patch alevt-1.6.3.rus.diff ��� �������� ��� ������ +contrib ��� sources ��� alevt-1.6.3 + +��������� �� ��������� �� ��� ��������� + +alevt -charset iso8859-7 + +� + +alevt -charset el + +�������� ��� ����� �� ������: +��������� ���������� ��� font file vtxt-iso8859-7.bdf +�� �������� ���������� �������� ��� bold �� ����� �� ���� ���������� ��� �������� +������ ����� ������������� �� ���� graphics (0x01 -0x1f) + +������� ��� �� �� �������������� ����� ���� �� ���������� + +������ ����� �� �������� �������� �� ��� ������� ��� ������� ��� ��� sl45sms@yahoo.gr +�� ������� ����� ����������� ������� ��� ��� ������� �� �������� �� ������ �� ��� ������� ��� +���� ��������� ��� ������������ + +������� ������ ��� �������� �� �������� �� �������� ��� http://go.to/sl45sms/alevt/index.html + +��������� ���������� diff --git a/util/alevt/TODO b/util/alevt/TODO new file mode 100644 index 0000000..4b56676 --- /dev/null +++ b/util/alevt/TODO @@ -0,0 +1,12 @@ +Hi, these are issues that I unfortunately cannot resolve myself: + +1. graphical menu written in GKT2, to be used in general connection with + the outfile (-o) option. + +2. for usage without script and outfile option: + DVB monitoring demon helping the program to rewrite the PAT when the + external player software has chosen a channel which is part of a + new transponder. + At the moment alevt hangs when the transponder is changed. + +Uwe Bugla, February 11th, 2010. diff --git a/util/alevt/alevt-cap.1 b/util/alevt/alevt-cap.1 new file mode 100644 index 0000000..2af1879 --- /dev/null +++ b/util/alevt/alevt-cap.1 @@ -0,0 +1,53 @@ +.TH alevt-cap 1 "February 07, 2010" +.SH NAME +alevt-cap \- capture teletext windows. +.SH SYNOPSIS +.B alevt-cap +.RI [ options ] +.br +.SH DESCRIPTION +This manual page documents briefly the +.B alevt-cap +commands. +.PP +\fBalevt-cap\fP is a program to capture teletext pages. +.SH OPTIONS +.TP +.B \-cs -charset <latin-1/2/koi8-r/iso-8859-7> +character set +.TP +.B \-f -format <fmt[,options]> +format to save +.TP +.B \-f help -format help +lists available storage formats +.TP +.B \-h -help +print this page +.TP +.B \-n -name <filename> +page name to save +.B \-t -timeout <secs> +timeout +.TP +.B \-s -sid <sid> +service pid +.TP +.B \-t -ttpid <ttpid> +teletext pid +.TP +.B \-v -vbi <vbidev> +vbi device +.TP +Sequence: /dev/vbi; /dev/vbi0; /dev/video0; /dev/dvb/adapter0/demux0 +.TP +ppp.ss stands for a page number and an optional +subpage number (example: 123.4). +.TP +.SH SEE ALSO +.BR alevt-date (1) , alevt (1). +.br +.SH AUTHOR +alevt-cap was written by Edgar Toernig <froese@gmx.de>. +.PP +This manual page was written by Uwe Bugla <uwe.bugla@gmx.de>. diff --git a/util/alevt/alevt-cap.c b/util/alevt/alevt-cap.c new file mode 100644 index 0000000..9e0c3bd --- /dev/null +++ b/util/alevt/alevt-cap.c @@ -0,0 +1,280 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <locale.h> +#include <signal.h> +#include <unistd.h> +#include "vt.h" +#include "misc.h" +#include "fdset.h" +#include "vbi.h" +#include "lang.h" +#include "dllist.h" +#include "export.h" + +static volatile int timed_out = 0; +static char *channel; +char *outfile = ""; +u_int16_t sid; + + +struct req +{ + struct dl_node node[1]; + char *name; // file name + char *pgno_str; // the pgno as given on the cmdline + int pgno, subno; // decoded pgno + struct export *export; // export data + struct vt_page vtp[1]; // the capture page data +}; + + +static void usage(FILE *fp, int exitval) +{ + fprintf(fp, "\nUsage: %s [options] ppp.ss...\n", prgname); + fprintf(fp, + "\n" + " Valid options:\t\tDefault:\n" + " -cs -charset\t\tlatin-1\n" + " <latin-1/2/koi8-r/iso8859-7>\n" + " -f -format <fmt,options>\tascii\n" + " -f help -format help\n" + " -h -help\n" + " -n -name <filename>\t\tttext-%%s.%%e\n" + " -s -sid <sid>\t\t(none;dvb only)\n" + " -to -timeout <secs>\t\t(none)\n" + " -t -ttpid <ttpid>\t\t(none;dvb only)\n" + " -v -vbi <vbidev>\t\t/dev/vbi\n" + " \t\t/dev/vbi0\n" + " \t\t/dev/video0\n" + " \t\t/dev/dvb/adapter0/demux0\n" + "\n" + " ppp.ss stands for a page number and an\n" + " optional subpage number (ie 123.4).\n" + ); + exit(exitval); +} + + +static void exp_help(FILE *fp) +{ + struct export_module **ep; + char **cp, c; + + fprintf(fp, + "\nSyntax: -format Name[,Options]\n" + "\n" + " Name\tExt.\tOptions\n" + " --------------------------------\n" + ); + for (ep = modules; *ep; ep++) + { + fprintf(fp, " %-7s\t.%-4s", (*ep)->fmt_name, (*ep)->extension); + for (c = '\t', cp = (*ep)->options; cp && *cp; cp++, c = ',') + fprintf(fp, "%c%s", c, *cp); + fprintf(fp, "\n"); + } + fprintf(fp, + "\n" + "Common options: reveal,hide\n" + "Example: -format ansi,reveal,bg=none\n" + "\n" + ); + exit(0); +} + + +static int arg_pgno(char *p, int *subno) +{ + char *end; + int pgno; + + *subno = ANY_SUB; + if (*p) + { + pgno = strtol(p, &end, 16); + if ((*end == ':' || *end == '/' || *end == '.') && end[1]) + *subno = strtol(end + 1, &end, 16); + if (*end == 0) + if (pgno >= 0x100 && pgno <= 0x899) + if (*subno == ANY_SUB || (*subno >= 0x00 && *subno <= 0x3f7f)) + return pgno; + } + fatal("%s: invalid page number", p); +} + + +static int option(int argc, char **argv, int *ind, char **arg) +{ + static struct { char *nam, *altnam; int arg; } opts[] = { + { "-charset", "-cs", 1 }, + { "-format", "-f", 1 }, + { "-help", "-h", 0 }, + { "-name", "-n", 1 }, + { "-sid", "-s", 1 }, + { "-timeout", "-to", 1 }, + { "-ttpid", "-t", 1 }, + { "-vbi", "-v", 1 }, + }; + int i; + + if (*ind >= argc) + return 0; + + *arg = argv[(*ind)++]; + for (i = 0; i < NELEM(opts); ++i) + if (streq(*arg, opts[i].nam) || streq(*arg, opts[i].altnam)) + { + if (opts[i].arg) + if (*ind < argc) + *arg = argv[(*ind)++]; + else + fatal("option %s requires an argument", *arg); + return i+1; + } + + if (**arg == '-') + { + fatal("%s: invalid option", *arg); + usage(stderr, 2); + } + + return -1; +} + + +static void event(struct dl_head *reqs, struct vt_event *ev) +{ + struct req *req, *nxt; + + switch (ev->type) + { + case EV_PAGE: // new page + { + struct vt_page *vtp = ev->p1; + + for (req = PTR reqs->first; nxt = PTR req->node->next; req = nxt) + if (req->pgno == vtp->pgno) + if (req->subno == ANY_SUB || req->subno == vtp->subno) + { + *req->vtp = *vtp; + dl_insert_last(reqs + 1, dl_remove(req->node)); + } + } + } +} + + +int main(int argc, char **argv) +{ + char *vbi_name = NULL; + int timeout = 0; + char *fname = "ttext-%s.%e"; + char *out_fmt = "ascii"; + struct export *fmt = 0; + int opt, ind; + char *arg; + struct vbi *vbi; + struct req *req; + struct dl_head reqs[2]; // simple linear lists of requests & captures + int ttpid = -1; + + setlocale (LC_CTYPE, ""); + setprgname(argv[0]); + + fdset_init(fds); + dl_init(reqs); // the requests + dl_init(reqs+1); // the captured pages + + ind = 1; + while (opt = option(argc, argv, &ind, &arg)) + switch (opt) + { + case 1: // charset + if (streq(arg, "latin-1") || streq(arg, "1")) + latin1 = 1; + else if (streq(arg, "latin-2") || streq(arg, "2")) + latin1 = 0; + else if (streq(arg, "koi8-r") || streq(arg, "koi")) + latin1 = KOI8; + else if (streq(arg, "iso8859-7") || streq(arg, "el")) + latin1 = GREEK; + else + fatal("bad charset (not latin-1/2/koi8-r/iso8859-7)"); + break; + case 2: // format + if (streq(arg, "help") || streq(arg, "?") || streq(arg, "list")) + exp_help(stdout); + out_fmt = arg; + fmt = 0; + break; + case 3: // help + usage(stdout, 0); + break; + case 4: // name + fname = arg; + break; + case 5: // timeout + timeout = strtol(arg, 0, 10); + if (timeout < 1 || timeout > 999999) + fatal("bad timeout value", timeout); + break; + case 6: // service id + sid = strtoul(arg, NULL, 0); + break; + case 7: // teletext pid + ttpid = strtoul(arg, NULL, 0); + break; + case 8: // vbi + vbi_name = arg; + break; + case -1: // non-option arg + if (not fmt) + fmt = export_open(out_fmt); + if (not fmt) + fatal("%s", export_errstr()); + if (not(req = malloc(sizeof(*req)))) + out_of_mem(sizeof(*req)); + req->name = fname; + req->pgno_str = arg; + req->pgno = arg_pgno(arg, &req->subno); + req->export = fmt; + dl_insert_last(reqs, req->node); + break; + } + + if (dl_empty(reqs)) + fatal("no pages requested"); + + // setup device + if (not(vbi = vbi_open(vbi_name, 0, channel, outfile, sid, ttpid))) + fatal("cannot open %s", vbi_name); + vbi_add_handler(vbi, event, reqs); // register event handler + + if (timeout) + alarm(timeout); + + // capture pages (moves requests from reqs[0] to reqs[1]) + while (not dl_empty(reqs) && not timed_out) + if (fdset_select(fds, 30000) == 0) // 30sec select time out + { + error("no signal."); + break; + } + + alarm(0); + vbi_del_handler(vbi, event, reqs); + vbi_close(vbi); + if (not dl_empty(reqs)) + error("capture aborted. Some pages are missing."); + + for (req = PTR reqs[1].first; req->node->next; req = PTR req->node->next) + { + fname = export_mkname(req->export, req->name, req->vtp, req->pgno_str); + if (not fname || export(req->export, req->vtp, fname)) + error("error saving page %s: %s", req->pgno_str, export_errstr()); + if (fname) + free(fname); + } + exit(dl_empty(reqs) ? 0 : 1); +} diff --git a/util/alevt/alevt-date.1 b/util/alevt/alevt-date.1 new file mode 100644 index 0000000..69d2f6f --- /dev/null +++ b/util/alevt/alevt-date.1 @@ -0,0 +1,41 @@ +.TH alevt-date 1 "February 07, 2010" +.SH NAME +alevt-date \- print out UTC date. +.SH SYNOPSIS +.B alevt-date +.RI [ options ] +.br +.SH DESCRIPTION +This manual page documents briefly the +.B alevt-date +commands. +.PP +\fBalevt-date\fP is a program to print the UTC date. +.SH OPTIONS +.TP +.B \-d -delta <max_secs> +maximum delta +.TP +.B \-f -format <fmtstr> +time format +.TP +.B \-h -help +print this page +.TP +.B \-s -set +set the system clock +.TP +.B \-t -timeout <seconds> +timeout +.TP +.B \-v -vbi <vbidev> +vbi device /dev/vbi; /dev/vbi0; /dev/video0; /dev/dvb/adapter0/demux0 +.TP +.br +.SH SEE ALSO +.BR alevt-cap (1) , alevt (1). +.br +.SH AUTHOR +alevt-date was written by Edgar Toernig <froese@gmx.de>. +.PP +This manual page was written by Uwe Bugla <uwe.bugla@gmx.de>. diff --git a/util/alevt/alevt-date.c b/util/alevt/alevt-date.c new file mode 100644 index 0000000..5496937 --- /dev/null +++ b/util/alevt/alevt-date.c @@ -0,0 +1,225 @@ +#include <stdio.h> +#include <string.h> +#include <sys/time.h> +#include <time.h> +#include <stdlib.h> +#include <unistd.h> +#include <signal.h> +#include "os.h" +#include "vt.h" +#include "fdset.h" +#include "vbi.h" +#include "lang.h" +#include "misc.h" + +char *fmt = "%a %b %d %H:%M:%S %Z %Y"; +int max_diff = 2*60*60; // default: 2 hours +int set_time = 0; +char *outfile = ""; +static char *channel; +u_int16_t sid; + + +static void chk_time(int t) +{ + struct tm *tm; + time_t sys_t; + int dt; + char buf[256]; + + if (t < 0 || t > 235959 || t%100 > 59 || t/100%100 > 59) + return; + + sys_t = time(0); + tm = localtime(&sys_t); + + // Now convert to UTC seconds + t = t/100/100 * 60*60 + t/100%100 * 60 + t%100; +#ifdef BSD + t -= tm->tm_gmtoff; // dst already included... +#else + t += timezone; + if (tm->tm_isdst) + t -= 60*60; +#endif + + dt = t - sys_t % (24*60*60); + if (dt <= -12*60*60) + dt += 24*60*60; + + if (dt <= -max_diff || dt >= max_diff) + fatal("time diff too big (%2d:%02d:%02d)", dt/60/60, abs(dt)/60%60, abs(dt)%60); + + sys_t += dt; + + if (set_time) + { + struct timeval tv[1]; + + tv->tv_sec = sys_t; + tv->tv_usec = 500000; + if (settimeofday(tv, 0) == -1) + ioerror("settimeofday"); + } + if (*fmt) + { + tm = localtime(&sys_t); + if (strftime(buf, sizeof(buf), fmt, tm)) + puts(buf); + } + exit(0); +} + + +static void event(void *_, struct vt_event *ev) +{ + switch (ev->type) + { + /* vbi may generate EV_PAGE, EV_HEADER, EV_XPACKET */ + /* for event arguments see vt.h */ + + case EV_HEADER: // a new title line (for running headers) + { + static int last_t = -1; + u8 *s = ev->p1; + int i, t = 1; + + if (ev->i2 & PG_OUTOFSEQ) + break; + + for (i = 32; i < 40; ++i) + if (s[i] >= '0' && s[i] <= '9') + t = t * 10+ s[i] - '0'; + if (t >= 1000000 && t <= 1235959) + if (t == last_t || t - last_t == 1) + chk_time(t - 1000000); + last_t = t; + break; + } + } +} + + +static void usage(FILE *fp, int exit_val) +{ + fprintf(fp, "usage: %s [options]\n", prgname); + fprintf(fp, + "\n" + " Valid options:\t\tDefault:\n" + " -d -delta <max_secs>\t7200 (2 hours)\n" + " -f -format <fmtstr>\t\t%%c\n" + " -h -help\n" + " -s -set\t\t\toff\n" + " -to -timeout <seconds>\t(none)\n" + " -v -vbi <vbidev>\t\t/dev/vbi\n" + " \t\t/dev/vbi0\n" + " \t\t/dev/video0\n" + " \t\t/dev/dvb/adapter0/demux0\n" + ); + exit(exit_val); +} + + +static int option(int argc, char **argv, int *ind, char **arg) +{ + static struct { char *nam, *altnam; int arg; } opts[] = { + { "-delta", "-d", 1 }, + { "-format", "-f", 1 }, + { "-help", "-h", 0 }, + { "-set", "-s", 0 }, + { "-timeout", "-to", 1 }, + { "-vbi", "-v", 1 }, + }; + int i; + + if (*ind >= argc) + return 0; + + *arg = argv[(*ind)++]; + for (i = 0; i < NELEM(opts); ++i) + if (streq(*arg, opts[i].nam) || streq(*arg, opts[i].altnam)) + { + if (opts[i].arg) + if (*ind < argc) + *arg = argv[(*ind)++]; + else + fatal("option %s requires an argument", *arg); + return i+1; + } + + if (**arg == '-') + { + fatal("%s: invalid option", *arg); + usage(stderr, 1); + } + + return -1; +} + + +int main(int argc, char **argv) +{ + char *vbi_name = NULL; + int timeout = 0; + struct vbi *vbi; + int opt, ind; + char *arg; + int ttpid = -1; + + setprgname(argv[0]); + ind = 1; + while (opt = option(argc, argv, &ind, &arg)) + switch (opt) + { + case 1: // -delta + max_diff = atoi(arg); + if (max_diff < 1) + fatal("-delta: illegal value '%s'", arg); + if (max_diff > 12*60*60) + { + max_diff = 12*60*60; + error("-delta: %d too big. Assuming %d", arg, max_diff); + } + break; + case 2: // -format + fmt = arg; + break; + case 3: // help + usage(stdout, 0); + break; + case 4: // -set + set_time = 1; + break; + case 5: // -timeout + timeout = atoi(arg); + if (timeout < 1 || timeout > 60*60) + fatal("-timeout: illegal value '%s'", arg); + break; + case 6: // -vbi + vbi_name = arg; + break; + case -1: + usage(stderr, 1); + break; + } + + fdset_init(fds); + + if (timeout) + { + signal(SIGALRM, SIG_DFL); // kill me + alarm(timeout); + } + vbi = vbi_open(vbi_name, 0, channel, outfile, sid, ttpid); // open device + if (not vbi) + fatal_ioerror(vbi_name); + vbi_add_handler(vbi, event, 0); // register event handler + + for (;;) + fdset_select(fds, -1); // call scheduler + + /* never reached */ + vbi_del_handler(vbi, event, 0); + vbi_close(vbi); + exit(0); +} diff --git a/util/alevt/alevt.1 b/util/alevt/alevt.1 new file mode 100644 index 0000000..68bff45 --- /dev/null +++ b/util/alevt/alevt.1 @@ -0,0 +1,60 @@ +.TH alevt 1 "February 07, 2010" +.SH NAME +alevt \- a teletext browser for analogue and DVB channels. +.SH SYNOPSIS +.B alevt +.RI [ options ] +.br +.SH DESCRIPTION +This manual page documents briefly the +.B alevt +commands. +.PP +\fBalevt\fP is a program to read teletext from analogue or DVB channels. +.SH OPTIONS +.TP +.B \-c <channel> +channel name (dvb only) +.TP +.B \-ch -child <ppp.ss> +child window +.TP +.B \-cs -charset <latin-1/2/koi8-r/iso8859-7> +character set +.TP +.B \-h -help +print this page +.TP +.B \-o <outfile> +path + file for all services (dvb only) +.TP +.B \-p -parent <ppp.ss> +parent window +.TP +.B \-s -sid <sid> +service id (dvb only) +.TP +.B \-t -ttpid <ttpid> +teletext pid (dvb only) +.TP +.B \-v -vbi <vbidev> +vbi device +.TP +Sequence: /dev/vbi; /dev/vbi0; /dev/video0; /dev/dvb/adapter0/demux0 +.TP +Order is important! Each page number opens a new window +with the previously given geometry, device, and display. +.TP +ppp.ss stands for a page number and an optional +subpage number (example: 123.4). +.TP +The -child option requires a parent window. So it must +be preceded by a parent or another child window. +.TP +.SH SEE ALSO +.BR alevt-cap (1), alevt-date (1). +.br +.SH AUTHOR +alevt was written by Edgar Toernig <froese@gmx.de>. +.PP +This manual page was written by Uwe Bugla <uwe.bugla@gmx.de>. diff --git a/util/alevt/alevt.desktop b/util/alevt/alevt.desktop new file mode 100644 index 0000000..c125bb9 --- /dev/null +++ b/util/alevt/alevt.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=alevt +Comment=Teletext Browser +Exec=alevt +Icon=alevt +Terminal=false +Type=Application +Categories=GNOME;GTK;AudioVideo;Video; diff --git a/util/alevt/bdf2xbm.c b/util/alevt/bdf2xbm.c new file mode 100644 index 0000000..74d238e --- /dev/null +++ b/util/alevt/bdf2xbm.c @@ -0,0 +1,212 @@ +/* + Simple program to convert a bdf-font to a bitmap. + The characters are arranged in a 32x8 matrix. + usage: bdf2xbm [identifier] <bdf >xbm + Copyright 1998,1999 by E. Toernig (froese@gmx.de) +*/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <ctype.h> +#include <stdarg.h> + +#define not ! +#define streq(a,b) (strcmp((a),(b)) == 0) + +int lineno; +char *word[64]; +int nword; + +char *font = "font%dx%d"; +int w, h, bpl; +unsigned char *bmap; + + +static void error(char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + fprintf(stderr, "bdf2xbm"); + if (lineno) + fprintf(stderr, ":%d", lineno); + fprintf(stderr, ": "); + vfprintf(stderr, fmt, args); + fputc('\n', stderr); + exit(1); +} + + +static int nextline() +{ + static char buf[256]; + char *p; + int i; + + do + { + nword = 0; + if (fgets(buf, sizeof(buf), stdin) == 0) + return nword; + lineno++; + + p = buf; + for (;;) + { + while (isspace(*p)) + p++; + if (*p == 0) + break; + word[nword++] = p; + while (*p && not isspace(*p)) + *p = toupper(*p), p++; + if (*p == 0) + break; + *p++ = 0; + } + } while (nword == 0); + + for (i = nword; i < 64; ++i) + word[i] = ""; + return nword; +} + + +static inline void setbit(int ch, int x, int y) +{ + + int yo = ch / 32 * h + y; + int xo = ch % 32 * w + x; + + bmap[yo * bpl + xo / 8] |= 1 << (xo % 8); +} + + +static void dobitmap(int ch, int x, int y) +{ + int i, j; + + for (i = 0; i < y; ++i) + { + nextline(); + if (nword > 1 || strlen(word[0]) != (x + 7) / 8 * 2) + error("bad BITMAP"); + for (j = 0; j < x; ++j) + { + int c = word[0][j / 4]; + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'F') + c -= 'A' - 10; + else + error("bad hexchar in BITMAP"); + if (c & (8 >> (j % 4))) + setbit(ch, j, i); + } + } +} + + +static void dochar() +{ + int ch = -1, x = -1, y = -1; + + while (nextline()) + { + if (streq(word[0], "ENDCHAR")) + return; + else if (streq(word[0], "ENCODING") && nword == 2) + { + ch = atoi(word[1]); + if (ch < 0 || ch > 255) + error("bad character code %d", ch); + } + else if (streq(word[0], "BBX") && nword == 5) + { + x = atoi(word[1]), y = atoi(word[2]); + if (x < 1 || x > 64 || y < 1 || y > 64) + error("bad BBX (%dx%d)", x, y); + } + else if (streq(word[0], "BITMAP")) + { + if (x < 0) + error("missing BBX"); + if (ch < 0) + error("missing ENDCODING"); + dobitmap(ch, x, y); + } + } + error("unexpected EOF (missing ENDCHAR)"); +} + + +static void dofile() +{ + lineno = 0; + w = h = 0; + bmap = 0; + + nextline(); + if (nword != 2 || not streq(word[0], "STARTFONT")) + error("not a bdf-file"); + + while (nextline()) + { + if (streq(word[0], "ENDFONT")) + return; + else if (streq(word[0], "FONTBOUNDINGBOX") && nword == 5) + { + if (bmap) + error("multiple FONTBOUNDINGBOXes!?!"); + w = atoi(word[1]), h = atoi(word[2]); + if (w < 1 || w > 64 || h < 1 || h > 64) + error("bad bounding box %dx%d\n", w, h); + bpl = (w*32+7)/8; // rounding is unnecessary + bmap = calloc(1, bpl * h*8); + if (bmap == 0) + error("out of memory"); + } + else if (streq(word[0], "STARTCHAR")) + { + if (not bmap) + error("no FONTBOUNDINGBOX"); + dochar(); + } + } + error("unexpected EOF (missing ENDFONT)"); +} + + +static void writexbm() +{ + char buf[256]; + int i, j; + unsigned char *p = bmap; + + if (not bmap) + return; + + sprintf(buf, font, w, h); + + printf("#define %s_width %d\n", buf, 32 * w); + printf("#define %s_height %d\n", buf, 8 * h); + printf("static unsigned char %s_bits[] = {\n", buf); + for (i = 0; i < 16 * h * w / 8; ++i) + { + for (j = 0; j < 16; ++j) + printf("0x%02x,", *p++); + printf("\n"); + } + printf("};\n"); +} + + +int main(int argc, char **argv) +{ + if (argc > 1) + font = argv[1]; + dofile(); + writexbm(); + exit(0); +} diff --git a/util/alevt/cache.c b/util/alevt/cache.c new file mode 100644 index 0000000..c747448 --- /dev/null +++ b/util/alevt/cache.c @@ -0,0 +1,229 @@ +#include <stdlib.h> +#include <string.h> +#include "misc.h" +#include "dllist.h" +#include "cache.h" +#include "help.h" + + +static inline int hash(int pgno) +{ + // very simple... + return pgno % HASH_SIZE; +} + + +static void do_erc(struct vt_page *ovtp, struct vt_page *nvtp) +{ + int l, c; + + if (nvtp->errors == 0 && ovtp->lines == nvtp->lines) + return; + + for (l = 0; l < H; ++l) + { + if (~nvtp->lines & (1 << l)) + memcpy(nvtp->data[l], ovtp->data[l], W); + else if (ovtp->lines & (1 << l)) + for (c = 0; c < W; ++c) + if (nvtp->data[l][c] == BAD_CHAR) + nvtp->data[l][c] = ovtp->data[l][c]; + } + nvtp->lines |= ovtp->lines; +} + + +static void cache_close(struct cache *ca) +{ + struct cache_page *cp; + int i; + + for (i = 0; i < HASH_SIZE; ++i) + while (not dl_empty(ca->hash + i)) + { + cp = PTR ca->hash[i].first; + dl_remove(cp->node); + free(cp); + } + free(ca); +} + + +static void cache_reset(struct cache *ca) +{ + struct cache_page *cp, *cpn; + int i; + + for (i = 0; i < HASH_SIZE; ++i) + for (cp = PTR ca->hash[i].first; cpn = PTR cp->node->next; cp = cpn) + if (cp->page->pgno / 256 != 9) // don't remove help pages + { + dl_remove(cp->node); + free(cp); + ca->npages--; + } + memset(ca->hi_subno, 0, sizeof(ca->hi_subno[0]) * 0x900); +} + +/* Get a page from the cache. + If subno is SUB_ANY, the newest subpage of that page is returned */ + + +static struct vt_page * cache_get(struct cache *ca, int pgno, int subno) +{ + struct cache_page *cp; + int h = hash(pgno); + + for (cp = PTR ca->hash[h].first; cp->node->next; cp = PTR cp->node->next) + if (cp->page->pgno == pgno) + if (subno == ANY_SUB || cp->page->subno == subno) + { + // found, move to front (make it 'new') + dl_insert_first(ca->hash + h, dl_remove(cp->node)); + return cp->page; + } + return 0; +} + +/* Put a page in the cache. + If it's already there, it is updated. */ + + +static struct vt_page * cache_put(struct cache *ca, struct vt_page *vtp) +{ + struct cache_page *cp; + int h = hash(vtp->pgno); + + for (cp = PTR ca->hash[h].first; cp->node->next; cp = PTR cp->node->next) + if (cp->page->pgno == vtp->pgno && cp->page->subno == vtp->subno) + break; + + if (cp->node->next) + { + // move to front. + dl_insert_first(ca->hash + h, dl_remove(cp->node)); + if (ca->erc) + do_erc(cp->page, vtp); + } + else + { + cp = malloc(sizeof(*cp)); + if (cp == 0) + return 0; + if (vtp->subno >= ca->hi_subno[vtp->pgno]) + ca->hi_subno[vtp->pgno] = vtp->subno + 1; + ca->npages++; + dl_insert_first(ca->hash + h, cp->node); + } + + *cp->page = *vtp; + return cp->page; +} + +/* Same as cache_get but doesn't make the found entry new */ + + +static struct vt_page * cache_lookup(struct cache *ca, int pgno, int subno) +{ + struct cache_page *cp; + int h = hash(pgno); + + for (cp = PTR ca->hash[h].first; cp->node->next; cp = PTR cp->node->next) + if (cp->page->pgno == pgno) + if (subno == ANY_SUB || cp->page->subno == subno) + return cp->page; + return 0; +} + + +static struct vt_page * cache_foreach_pg(struct cache *ca, int pgno, int subno, + int dir, int (*func)(), void *data) +{ + struct vt_page *vtp, *s_vtp = 0; + + if (ca->npages == 0) + return 0; + + if (vtp = cache_lookup(ca, pgno, subno)) + subno = vtp->subno; + else if (subno == ANY_SUB) + subno = dir < 0 ? 0 : 0xffff; + + for (;;) + { + subno += dir; + while (subno < 0 || subno >= ca->hi_subno[pgno]) + { + pgno += dir; + if (pgno < 0x100) + pgno = 0x9ff; + if (pgno > 0x9ff) + pgno = 0x100; + subno = dir < 0 ? ca->hi_subno[pgno] - 1 : 0; + } + if (vtp = cache_lookup(ca, pgno, subno)) + { + if (s_vtp == vtp) + return 0; + if (s_vtp == 0) + s_vtp = vtp; + if (func(data, vtp)) + return vtp; + } + } +} + + +static int cache_mode(struct cache *ca, int mode, int arg) +{ + int res = -1; + + switch (mode) + { + case CACHE_MODE_ERC: + res = ca->erc; + ca->erc = arg ? 1 : 0; + break; + } + return res; +} + + +static struct cache_ops cops = +{ + cache_close, + cache_get, + cache_put, + cache_reset, + cache_foreach_pg, + cache_mode, +}; + + +struct cache * cache_open(void) +{ + struct cache *ca; + struct vt_page *vtp; + int i; + + if (not(ca = malloc(sizeof(*ca)))) + goto fail1; + + for (i = 0; i < HASH_SIZE; ++i) + dl_init(ca->hash + i); + + memset(ca->hi_subno, 0, sizeof(ca->hi_subno)); + ca->erc = 1; + ca->npages = 0; + ca->op = &cops; + + for (vtp = help_pages; vtp < help_pages + nr_help_pages; vtp++) + cache_put(ca, vtp); + + return ca; + +fail2: + free(ca); +fail1: + return 0; +} diff --git a/util/alevt/cache.h b/util/alevt/cache.h new file mode 100644 index 0000000..934ef9a --- /dev/null +++ b/util/alevt/cache.h @@ -0,0 +1,41 @@ +#ifndef CACHE_H +#define CACHE_H + +#include "vt.h" +#include "misc.h" +#include "dllist.h" + +#define HASH_SIZE 113 + + +struct cache +{ + struct dl_head hash[HASH_SIZE]; + int erc; // error reduction circuit on + int npages; + u16 hi_subno[0x9ff + 1]; // 0:pg not in cache, 1-3f80:highest subno + 1 + struct cache_ops *op; +}; + + +struct cache_page +{ + struct dl_node node[1]; + struct vt_page page[1]; +}; + + +struct cache_ops +{ + void (*close)(struct cache *ca); + struct vt_page *(*get)(struct cache *ca, int pgno, int subno); + struct vt_page *(*put)(struct cache *ca, struct vt_page *vtp); + void (*reset)(struct cache *ca); + struct vt_page *(*foreach_pg)(struct cache *ca, int pgno, int subno, int dir, + int (*func)(), void *data); + int (*mode)(struct cache *ca, int mode, int arg); +}; + +struct cache *cache_open(void); +#define CACHE_MODE_ERC 1 +#endif diff --git a/util/alevt/dllist.h b/util/alevt/dllist.h new file mode 100644 index 0000000..f925506 --- /dev/null +++ b/util/alevt/dllist.h @@ -0,0 +1,55 @@ +#ifndef DLLIST_H +#define DLLIST_H + + +struct dl_node +{ + struct dl_node *next; + struct dl_node *prev; +}; + + +struct dl_head +{ + struct dl_node *first; + struct dl_node *null; + struct dl_node *last; +}; + + +static inline struct dl_head * dl_init(struct dl_head *h) +{ + h->first = (struct dl_node *)&h->null; + h->null = 0; + h->last = (struct dl_node *)&h->first; + return h; +} + + +static inline struct dl_node * dl_remove(struct dl_node *n) +{ + n->prev->next = n->next; + n->next->prev = n->prev; + return n; +} + + +static inline struct dl_node * + dl_insert_after(struct dl_node *p, struct dl_node *n) +{ + n->next = p->next; + n->prev = p; + p->next = n; + n->next->prev = n; + return n; +} + +#define dl_empty(h) ((h)->first->next == 0) +#define dl_insert_before(p, n) dl_insert_after((p)->prev, (n)) +#define dl_insert_first(h, n) ({ struct dl_node *_n = (n); \ + dl_insert_before((h)->first, _n); }) +#define dl_insert_last(h, n) ({ struct dl_node *_n = (n); \ + dl_insert_after((h)->last, _n); }) +#define dl_remove_first(h) dl_remove((h)->first) // mustn't be empty! +#define dl_remove_last(h) dl_remove((h)->last) // mustn't be empty! +#endif diff --git a/util/alevt/exp-gfx.c b/util/alevt/exp-gfx.c new file mode 100644 index 0000000..82ab218 --- /dev/null +++ b/util/alevt/exp-gfx.c @@ -0,0 +1,258 @@ +/* Copyright 1999 by Paul Ortyl <ortylp@from.pl> */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "lang.h" +#include "export.h" +#include "font.h" +#define WW (W*CW) /* pixel width of window */ +#define WH (H*CH) /* pixel hegiht of window */ + + +static inline void draw_char(unsigned char * colour_matrix, int fg, int bg, + int c, int dbl, int _x, int _y, int sep) +{ + int x,y; + unsigned char* src= (latin1==LATIN1 ? font1_bits : font2_bits); + int dest_x=_x*CW; + int dest_y=_y*CH; + + for(y=0;y<(CH<<dbl); y++) + { + for(x=0;x<CW; x++) + { + int bitnr, bit, maskbitnr, maskbit; + bitnr=(c/32*CH + (y>>dbl))*CW*32+ c%32*CW +x; + bit=(*(src+bitnr/8))&(1<<bitnr%8); + if (sep) + { + maskbitnr=(0xa0/32*CH + (y>>dbl))*CW*32+ 0xa0%32*CW +x; + maskbit=(*(src+maskbitnr/8))&(1<<maskbitnr%8); + *(colour_matrix+WW*(dest_y+y)+dest_x+x)= + (char)((bit && (!maskbit)) ? fg : bg); + } + else + *(colour_matrix+WW*(dest_y+y)+dest_x+x)= + (char)(bit ? fg : bg); + } + } + return; +} + + +static void prepare_colour_matrix(/*struct export *e,*/ + struct fmt_page *pg, + unsigned char *colour_matrix) +{ + int x, y; + for (y = 0; y < H; ++y) + { + for (x = 0; x < W; ++x) + { + if (pg->dbl & (1<<(y-1))) + { + if (pg->data[y-1][x].attr & EA_HDOUBLE) + draw_char(colour_matrix, pg->data[y][x].fg, + pg->data[y][x].bg, pg->data[y][x].ch, + (0), + x, y, + ((pg->data[y][x].attr & EA_SEPARATED) ? 1 : 0) + ); + } + else + { + draw_char(colour_matrix, pg->data[y][x].fg, + pg->data[y][x].bg, pg->data[y][x].ch, + ((pg->data[y][x].attr & EA_DOUBLE) ? 1 : 0), + x, y, + ((pg->data[y][x].attr & EA_SEPARATED) ? 1 : 0) + ); + } + } + } + return; +} + + +static int ppm_output(struct export *e, char *name, struct fmt_page *pg); + +struct export_module export_ppm = // exported module definition +{ + "ppm", // id + "ppm", // extension + 0, // options + 0, // size + 0, // open + 0, // close + 0, // option + ppm_output // output +}; + + +static int ppm_output(struct export *e, char *name, struct fmt_page *pg) +{ + FILE *fp; + long n; + static u8 rgb1[][3]={{0,0,0}, + {1,0,0}, + {0,1,0}, + {1,1,0}, + {0,0,1}, + {1,0,1}, + {0,1,1}, + {1,1,1}}; + unsigned char *colour_matrix; + + if (!(colour_matrix=malloc(WH*WW))) + { + export_error("cannot allocate memory"); + return 0; + } + + prepare_colour_matrix(/*e,*/ pg, (unsigned char *)colour_matrix); + if (not(fp = fopen(name, "w"))) + { + free(colour_matrix); + export_error("cannot create file"); + return -1; + } + fprintf(fp,"P6 %d %d 1\n", WW, WH); + + for(n=0;n<WH*WW;n++) + { + if (!fwrite(rgb1[(int) *(colour_matrix+n)], 3, 1, fp)) + { + export_error("error while writting to file"); + free(colour_matrix); + fclose(fp); + return -1; + } + } + free(colour_matrix); + fclose(fp); + return 0; +} + + +#ifdef WITH_PNG + +#include <png.h> +static int png_open(struct export *e); +static int png_option(struct export *e, int opt, char *arg); +static int png_output(struct export *e, char *name, struct fmt_page *pg); +static char *png_opts[] = // module options +{ + "compression=<0-9>", // set compression level + 0 +}; + +struct png_data // private data in struct export +{ + int compression; +}; + +struct export_module export_png = // exported module definition +{ + "png", // id + "png", // extension + png_opts, // options + sizeof(struct png_data), // size + png_open, // open + 0, // close + png_option, // option + png_output // output +}; + +#define D ((struct png_data *)e->data) + + +static int png_open(struct export *e) +{ + D->compression = Z_DEFAULT_COMPRESSION; + return 0; +} + + +static int png_option(struct export *e, int opt, char *arg) +{ + switch (opt) + { + case 1: // compression= + if (*arg >= '0' && *arg <= '9') + D->compression = *arg - '0'; + break; + } + return 0; +} + + +static int png_output(struct export *e, char *name, struct fmt_page *pg) +{ + FILE *fp; + int x; + png_structp png_ptr; + png_infop info_ptr; + png_byte *row_pointers[WH]; + static u8 rgb8[][3]={{ 0, 0, 0}, + {255, 0, 0}, + { 0,255, 0}, + {255,255, 0}, + { 0, 0,255}, + {255, 0,255}, + { 0,255,255}, + {255,255,255}}; + unsigned char *colour_matrix; + + if (!(colour_matrix=malloc(WH*WW))) + { + export_error("cannot allocate memory"); + return -1; + } + prepare_colour_matrix(/*e,*/ pg, (unsigned char *)colour_matrix); + if (not(fp = fopen(name, "w"))) + { + free(colour_matrix); + export_error("cannot create file"); + return -1; + } + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, + NULL, NULL, NULL); + if (!png_ptr) + { + free(colour_matrix); + fclose(fp); + export_error("libpng init error"); + return -1; + } + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) + { + png_destroy_write_struct(&png_ptr, + (png_infopp)NULL); + free(colour_matrix); + fclose(fp); + export_error("libpng init error"); + return -1; + } + png_init_io(png_ptr, fp); + png_set_compression_level(png_ptr, D->compression); + png_set_compression_mem_level(png_ptr, 9); + png_set_compression_window_bits(png_ptr, 15); + png_set_IHDR(png_ptr, info_ptr, WW, WH, + 8, PNG_COLOR_TYPE_PALETTE , PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + png_set_PLTE(png_ptr, info_ptr,(png_color*) rgb8 , 8); + png_write_info(png_ptr, info_ptr); + for(x=0; x<WH; x++) + { row_pointers[x]=colour_matrix+x*WW; } + png_write_image(png_ptr, row_pointers); + png_write_end(png_ptr, info_ptr); + png_destroy_write_struct(&png_ptr, &info_ptr); + free(colour_matrix); + fclose(fp); + return 0; +} + +#endif + diff --git a/util/alevt/exp-html.c b/util/alevt/exp-html.c new file mode 100644 index 0000000..6c9312a --- /dev/null +++ b/util/alevt/exp-html.c @@ -0,0 +1,299 @@ +/* Copyright 1999 by Paul Ortyl <ortylp@from.pl> */ + +#include <stdio.h> +#include <string.h> +#include "lang.h" +#include "export.h" + +static int html_open(struct export *e); +static int html_option(struct export *e, int opt, char *arg); +static int html_output(struct export *e, char *name, struct fmt_page *pg); +static char *html_opts[] = // module options +{ + "gfx-chr=<char>", // substitute <char> for gfx-symbols + "bare", // no headers + 0 +}; + +struct html_data // private data in struct export +{ + u8 gfx_chr; + u8 bare; +}; + + +struct export_module export_html = // exported module definition +{ + "html", // id + "html", // extension + html_opts, // options + sizeof(struct html_data), // size + html_open, // open + 0, // close + html_option, // option + html_output // output +}; + +#define D ((struct html_data *)e->data) + + +static int html_open(struct export *e) +{ + D->gfx_chr = '#'; + D->bare = 0; + //e->reveal=1; // the default should be the same for all formats. + return 0; +} + + +static int html_option(struct export *e, int opt, char *arg) +{ + switch (opt) + { + case 1: // gfx-chr= + D->gfx_chr = *arg ?: ' '; + break; + case 2: // bare (no headers) + D->bare=1; + break; + } + return 0; +} + +#define HTML_BLACK "#000000" +#define HTML_RED "#FF0000" +#define HTML_GREEN "#00FF00" +#define HTML_YELLOW "#FFFF00" +#define HTML_BLUE "#0000FF" +#define HTML_MAGENTA "#FF00FF" +#define HTML_CYAN "#00FFFF" +#define HTML_WHITE "#FFFFFF" + +#undef UNREADABLE_HTML //no '\n' +#define STRIPPED_HTML //only necessary fields in header + +static int html_output(struct export *e, char *name, struct fmt_page *pg) +{ + + const char* html_colours[]={ HTML_BLACK, + HTML_RED, + HTML_GREEN, + HTML_YELLOW, + HTML_BLUE, + HTML_MAGENTA, + HTML_CYAN, + HTML_WHITE}; + FILE *fp; + int x, y; + +#ifdef UNREADABLE_HTML +#define HTML_NL +#else +#define HTML_NL fputc('\n',fp); +#endif + + if (not(fp = fopen(name, "w"))) + { + export_error("cannot create file"); + return -1; + } + +if (!D->bare) + { +#ifndef STRIPPED_HTML + fputs("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">",fp); + HTML_NL +#endif + fputs("<html><head>",fp); + HTML_NL +#ifndef STRIPPED_HTML + fputs("<meta http-equiv=\"Content-Type\" content=\"text/html;",fp); + switch(latin1) { + case LATIN1: fprintf(fp,"charset=iso-8859-1\">"); break; + case LATIN2: fprintf(fp,"charset=iso-8859-2\">"); break; + case KOI8: fprintf(fp,"charset=koi8-r\">"); break; + case GREEK: fprintf(fp,"charset=iso-8859-7\">"); break; + } + HTML_NL + fputs("<meta name=\"GENERATOR\" content=\"alevt-cap\">",fp); + HTML_NL +#else + switch(latin1) { + case LATIN1: fprintf(fp,"<meta charset=iso-8859-1\">"); break; + case LATIN2: fprintf(fp,"<meta charset=iso-8859-2\">"); break; + case KOI8: fprintf(fp,"<meta charset=koi8-r\">"); break; + case GREEK: fprintf(fp,"<meta charset=iso-8859-7\">"); break; + } + HTML_NL +#endif + fputs("</head>",fp); + fputs("<body text=\"#FFFFFF\" bgcolor=\"#000000\">",fp); + HTML_NL + } //bare + + fputs("<tt><b>",fp); + HTML_NL + + // write tables in form of HTML format + for (y = 0; y < 25; ++y) + { + int last_nonblank=0; + int first_unprinted=0; + int last_space=1; + // previous char was + // is used for deciding to put semicolon or not + int nbsp=0; + + // for output filled with ' ' up to 40 chars + // set last_nonblank=39 + for (x = 0 ; x < 40; ++x) + { + if (pg->data[y][x].attr & EA_GRAPHIC) + {pg->data[y][x].ch= D->gfx_chr;} + + if (pg->data[y][x].ch!=' ') + { + last_nonblank=x; + } + } + + for (x = 0 ; x <= last_nonblank ; ++x) + { + if (pg->data[y][x].ch==' ') + { + // if single space between blinking/colour words + // then make the space blinking/colour too + if ((x)&&(x<39)) + { + if ((pg->data[y][x-1].ch!=' ') + &&(pg->data[y][x+1].ch!=' ') + &&(pg->data[y][x-1].attr & EA_BLINK) + &&(pg->data[y][x+1].attr & EA_BLINK)) + {pg->data[y][x].attr |= EA_BLINK;} + else + {pg->data[y][x].attr &= ~EA_BLINK;} + + if ((pg->data[y][x-1].ch!=' ') + &&(pg->data[y][x+1].ch!=' ') + &&(pg->data[y][x-1].fg==pg->data[y][x+1].fg)) + {pg->data[y][x].fg=pg->data[y][x-1].fg;} + else + pg->data[y][x].fg=7; + } + else + { + pg->data[y][x].attr &= ~EA_BLINK; + pg->data[y][x].fg=7; + } + } + else + { + // if foreground is black set the foreground to previous + // background colour to let it be visible + if (!pg->data[y][x].fg) + {pg->data[y][x].fg=pg->data[y][x].bg;} + } + //check if attributes changed, + //if yes then print chars and update first_unprinted + //if not then go to next char + if (x) + { + if ((( + (pg->data[y][x].attr & EA_BLINK) + == + (pg->data[y][x-1].attr & EA_BLINK) + ) + && + ( + pg->data[y][x].fg == pg->data[y][x-1].fg + )) + &&(x!=last_nonblank)) + + { continue; } + } + else continue; + + { + int z=first_unprinted; + for(;(pg->data[y][z].ch==' ') && (z<x);z++) + { + if (last_space) + { + fprintf(fp," "); + last_space=0; + nbsp=1; + } + else + { + fputc(' ',fp); + last_space=1; + nbsp=0; + } + } + + first_unprinted=z; + + if (z==x) continue; + + if (pg->data[y][first_unprinted].attr & EA_BLINK) + { + fprintf(fp,"<blink>"); + nbsp=0; + } + + if (pg->data[y][first_unprinted].fg!=7) + { + fprintf(fp,"<font color=\"%s\">", + html_colours[pg->data[y][first_unprinted].fg]); + nbsp=0; + } + for(;(z<x)||(z==last_nonblank);z++) + { + + if (pg->data[y][z].ch==' ') + { + for(;(pg->data[y][z].ch==' ') && (z<x);z++) + { + if (last_space) + { + fprintf(fp," "); + last_space=0; + nbsp=1; + } + else + { + fputc(' ',fp); + last_space=1; + nbsp=0; + } + } + z--; + } + else + { + //if previous nbsp --> put semicolon!!! + if (nbsp) fputc(';',fp); + fputc(pg->data[y][z].ch,fp); + last_space=0; + nbsp=0; + } + } + if (pg->data[y][first_unprinted].fg!=7) + { + fprintf(fp,"</font>"); + } + if (pg->data[y][first_unprinted].attr & EA_BLINK) + fprintf(fp,"</blink>"); + + first_unprinted=z; + } + } + fputs("<br>",fp); + HTML_NL + } + fputs("</b></tt>",fp); + if (!D->bare) + fputs("</body></html>",fp); + fclose(fp); + return 0; +} diff --git a/util/alevt/exp-txt.c b/util/alevt/exp-txt.c new file mode 100644 index 0000000..8009c17 --- /dev/null +++ b/util/alevt/exp-txt.c @@ -0,0 +1,226 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "os.h" +#include "export.h" + +static int txt_open(struct export *e); +static int txt_option(struct export *e, int opt, char *arg); +static int txt_output(struct export *e, char *name, struct fmt_page *pg); +static char *txt_opts[] = // module options +{ + "color", // generate ansi color codes (and attributes) + "gfx-chr=<char>", // substitute <char> for gfx-symbols + "fg=<0-7|none>", // assume term has <x> as foreground color + "bg=<0-7|none>", // assume term has <x> as background color + "lines=<1-25>", // output 24 or 25 lines + 0 +}; + + +struct txt_data // private data in struct export +{ + u8 color; + u8 gfx_chr; + u8 def_fg; + u8 def_bg; + int endline; + struct fmt_char curr[1]; + FILE *fp; +}; + + +struct export_module export_txt = // exported module definition +{ + "ascii", // id + "txt", // extension + txt_opts, // options + sizeof(struct txt_data), // data size + txt_open, // open + 0, // close + txt_option, // option + txt_output, // output +}; + + +struct export_module export_ansi = // exported module definition +{ + "ansi", // id + "txt", // extension + txt_opts, // options + sizeof(struct txt_data), // data size + txt_open, // open + 0, // close + txt_option, // option + txt_output, // output +}; + +#define D ((struct txt_data *)e->data) + + +char * my_stpcpy(char *dst, const char *src) +{ + while (*dst = *src++) + dst++; + return dst; +} + + +static int txt_open(struct export *e) +{ + D->gfx_chr = '#'; + D->def_fg = -1; + D->def_bg = -1; + D->endline = H; + if (e->mod == &export_ansi) + D->color = 1; + return 0; +} + + +static int txt_option(struct export *e, int opt, char *arg) +{ + switch (opt) + { + case 1: // color + D->color = 1; + break; + case 2: // gfx-chr= + D->gfx_chr = *arg ?: ' '; + break; + case 3: // fg= + D->def_fg = *arg - '0'; + break; + case 4: // bg= + D->def_bg = *arg - '0'; + break; + case 5: // lines= + D->endline = atoi(arg); + if (D->endline < 1 || D->endline > H) + { + export_error("lines: invalid number"); + return 1; + } + } + return 0; +} + + +static void put_attr(struct export *e, struct fmt_char *new) +{ + char buf[512]; + char *p = buf; + int fg, bg, attr; + int reset = 0; + + if (D->color) + { + fg = D->curr->fg ^ new->fg; + bg = D->curr->bg ^ new->bg; + attr = (D->curr->attr ^ new->attr) & (EA_BLINK | EA_DOUBLE); + + if (fg | bg | attr) + { + if (~new->attr & attr) // reset some attributes -> reset all. + reset = 1; + if (fg && new->fg == D->def_fg) // switch to def fg -> reset all + reset = 1; + if (bg && new->bg == D->def_bg) // switch to def bg -> reset all + reset = 1; + + p = my_stpcpy(buf, "\e["); + if (reset) + { + p = my_stpcpy(p, ";"); // "0;" but 0 isn't neccesary + attr = -1; // set all attributes + fg = new->fg ^ D->def_fg; // set fg if != default fg + bg = new->bg ^ D->def_bg; // set bg if != default bg + } + if (attr & new->attr & EA_BLINK) + p = my_stpcpy(p, "5;"); // blink + if (attr & new->attr & EA_DOUBLE) + p = my_stpcpy(p, "1;"); // bold + if (fg) + p += sprintf(p, "%d;", new->fg + 30); // fg-color + if (bg) + p += sprintf(p, "%d;", new->bg + 40); // bg-color + p[-1] = 'm'; // replace last ; + *D->curr = *new; + } + } + *p++ = new->ch; + *p = 0; + fputs(buf, D->fp); +} + + +static int txt_output(struct export *e, char *name, struct fmt_page *pg) +{ + struct fmt_char def_c[1]; + struct fmt_char l[W+2]; + #define L (l+1) + int x, y; + + D->fp = fopen(name, "w"); + if (not D->fp) + { + export_error("cannot create file"); + return -1; + } + + /* initialize default colors. These have to be restored at EOL. */ + def_c->ch = '\n'; + def_c->fg = D->def_fg; + def_c->bg = D->def_bg; + def_c->attr = E_DEF_ATTR; + *D->curr = *def_c; + L[-1] = L[W] = *def_c; + + for (y = 0; y < D->endline; y++) + if (~pg->hid & (1 << y)) // not hidden + { + // character conversion + for (x = 0; x < W; ++x) + { + struct fmt_char c = pg->data[y][x]; + + switch (c.ch) + { + case 0x00: case 0xa0: c.ch = ' '; break; + case 0x7f: c.ch = '*'; break; + case BAD_CHAR: c.ch = '?'; break; + default: + if (c.attr & EA_GRAPHIC) + c.ch = D->gfx_chr; + break; + } + L[x] = c; + } + + if (D->color) + { + // optimize color and attribute changes + // delay fg and attr changes as far as possible + for (x = 0; x < W; ++x) + if (L[x].ch == ' ') + { + L[x].fg = L[x-1].fg; + l[x].attr = L[x-1].attr; + } + + // move fg and attr changes to prev bg change point + for (x = W-1; x >= 0; x--) + if (L[x].ch == ' ' && L[x].bg == L[x+1].bg) + { + L[x].fg = L[x+1].fg; + L[x].attr = L[x+1].attr; + } + } + + // now emit the whole line (incl EOL) + for (x = 0; x < W+1; ++x) + put_attr(e, L + x); + } + fclose(D->fp); + return 0; +} diff --git a/util/alevt/export.c b/util/alevt/export.c new file mode 100644 index 0000000..1eb8ea9 --- /dev/null +++ b/util/alevt/export.c @@ -0,0 +1,364 @@ +#include <stdarg.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include "vt.h" +#include "misc.h" +#include "export.h" + +extern struct export_module export_txt; +extern struct export_module export_ansi; +extern struct export_module export_html; +extern struct export_module export_png; +extern struct export_module export_ppm; +struct export_module *modules[] = +{ + &export_txt, + &export_ansi, + &export_html, + &export_ppm, +#ifdef WITH_PNG + &export_png, +#endif + 0 +}; + + +static char *glbl_opts[] = +{ + "reveal", // show hidden text + "hide", // don't show hidden text (default) + 0 +}; + +static char errbuf[64]; + + +void export_error(char *str, ...) +{ + va_list args; + + va_start(args, str); + vsnprintf(errbuf, sizeof(errbuf)-1, str, args); +} + + +char * export_errstr(void) +{ + return errbuf; +} + + +static int find_opt(char **opts, char *opt, char *arg) +{ + int err = 0; + char buf[256]; + char **oo, *o, *a; + + if (oo = opts) + while (o = *oo++) + { + if (a = strchr(o, '=')) + { + a = buf + (a - o); + o = strcpy(buf, o); + *a++ = 0; + } + if (strcasecmp(o, opt) == 0) + { + if ((a != 0) == (arg != 0)) + return oo - opts; + err = -1; + } + } + return err; +} + + +struct export * export_open(char *fmt) +{ + struct export_module **eem, *em; + struct export *e; + char *opt, *optend, *optarg; + int opti; + + if (fmt = strdup(fmt)) + { + if (opt = strchr(fmt, ',')) + *opt++ = 0; + for (eem = modules; em = *eem; eem++) + if (strcasecmp(em->fmt_name, fmt) == 0) + break; + if (em) + { + if (e = malloc(sizeof(*e) + em->local_size)) + { + e->mod = em; + e->fmt_str = fmt; + e->reveal = 0; + memset(e + 1, 0, em->local_size); + if (not em->open || em->open(e) == 0) + { + for (; opt; opt = optend) + { + if (optend = strchr(opt, ',')) + *optend++ = 0; + if (not *opt) + continue; + if (optarg = strchr(opt, '=')) + *optarg++ = 0; + if ((opti = find_opt(glbl_opts, opt, optarg)) > 0) + { + if (opti == 1) // reveal + e->reveal = 1; + else if (opti == 2) // hide + e->reveal = 0; + } + else if (opti == 0 && + (opti = find_opt(em->options, opt, optarg)) > 0) + { + if (em->option(e, opti, optarg)) + break; + } + else + { + if (opti == 0) + export_error("%s: unknown option", opt); + else if (optarg) + export_error("%s: takes no arg", opt); + else + export_error("%s: missing arg", opt); + break; + } + } + if (opt == 0) + return e; + + if (em->close) + em->close(e); + } + free(e); + } + else + export_error("out of memory"); + } + else + export_error("unknown format: %s", fmt); + free(fmt); + } + else + export_error("out of memory"); + return 0; +} + + +void export_close(struct export *e) +{ + if (e->mod->close) + e->mod->close(e); + free(e->fmt_str); + free(e); +} + + +static char * hexnum(char *buf, unsigned int num) +{ + char *p = buf + 5; + + num &= 0xffff; + *--p = 0; + do + { + *--p = "0123456789abcdef"[num % 16]; + num /= 16; + } while (num); + return p; +} + + +static char * adjust(char *p, char *str, char fill, int width) +{ + int l = width - strlen(str); + + while (l-- > 0) + *p++ = fill; + while (*p = *str++) + p++; + return p; +} + + +char * export_mkname(struct export *e, char *fmt, struct vt_page *vtp, char *usr) +{ + char bbuf[1024]; + char *p = bbuf; + + while (*p = *fmt++) + if (*p++ == '%') + { + char buf[32], buf2[32]; + int width = 0; + + p--; + while (*fmt >= '0' && *fmt <= '9') + width = width*10 + *fmt++ - '0'; + + switch (*fmt++) + { + case '%': + p = adjust(p, "%", '%', width); + break; + case 'e': // extension + p = adjust(p, e->mod->extension, '.', width); + break; + case 'p': // pageno[.subno] + if (vtp->subno) + p = adjust(p,strcat(strcat(hexnum(buf, vtp->pgno), + "."), hexnum(buf2, vtp->subno)), ' ', width); + else + p = adjust(p, hexnum(buf, vtp->pgno), ' ', width); + break; + case 'S': // subno + p = adjust(p, hexnum(buf, vtp->subno), '0', width); + break; + case 'P': // pgno + p = adjust(p, hexnum(buf, vtp->pgno), '0', width); + break; + case 's': // user strin + p = adjust(p, usr, ' ', width); + break; + //TODO: add date, channel name, ... + } + } + p = strdup(bbuf); + if (not p) + export_error("out of memory"); + return p; +} + + +static void fmt_page(struct export *e, struct fmt_page *pg, struct vt_page *vtp) +{ + char buf[16]; + int x, y; + u8 *p = vtp->data[0]; + + pg->dbl = 0; + + sprintf(buf, "\2%x.%02x\7", vtp->pgno, vtp->subno & 0xff); + + for (y = 0; y < H; y++) + { + struct fmt_char c; + int last_ch = ' '; + int dbl = 0, hold = 0; + + c.fg = 7; + c.bg = 0; + c.attr = 0; + + for (x = 0; x < W; ++x) + { + c.ch = *p++; + if (y == 0 && x < 8) + c.ch = buf[x]; + switch (c.ch) + { + case 0x00 ... 0x07: /* alpha + fg color */ + c.fg = c.ch & 7; + c.attr &= ~(EA_GRAPHIC | EA_CONCEALED); + goto ctrl; + case 0x08: /* flash */ + c.attr |= EA_BLINK; + goto ctrl; + case 0x09: /* steady */ + c.attr &= ~EA_BLINK; + goto ctrl; + case 0x0a: /* end box */ + case 0x0b: /* start box */ + goto ctrl; + case 0x0c: /* normal height */ + c.attr &= EA_DOUBLE; + goto ctrl; + case 0x0d: /* double height */ + if (y < H-2) /* ignored on last 2 lines */ + { + c.attr |= EA_DOUBLE; + dbl = 1; + } + goto ctrl; + case 0x10 ... 0x17: /* gfx + fg color */ + c.fg = c.ch & 7; + c.attr |= EA_GRAPHIC; + c.attr &= ~EA_CONCEALED; + goto ctrl; + case 0x18: /* conceal */ + c.attr |= EA_CONCEALED; + goto ctrl; + case 0x19: /* contiguous gfx */ + c.attr &= ~EA_SEPARATED; + goto ctrl; + case 0x1a: /* separate gfx */ + c.attr |= EA_SEPARATED; + goto ctrl; + case 0x1c: /* black bg */ + c.bg = 0; + goto ctrl; + case 0x1d: /* new bg */ + c.bg = c.fg; + goto ctrl; + case 0x1e: /* hold gfx */ + hold = 1; + goto ctrl; + case 0x1f: /* release gfx */ + hold = 0; + goto ctrl; + + case 0x0e: /* SO */ + case 0x0f: /* SI */ + case 0x1b: /* ESC */ + c.ch = ' '; + break; + + ctrl: + c.ch = ' '; + if (hold && (c.attr & EA_GRAPHIC)) + c.ch = last_ch; + break; + } + if (c.attr & EA_GRAPHIC) + if ((c.ch & 0xa0) == 0x20) + { + last_ch = c.ch; + c.ch += (c.ch & 0x40) ? 32 : -32; + } + if (c.attr & EA_CONCEALED) + if (not e->reveal) + c.ch = ' '; + pg->data[y][x] = c; + } + if (dbl) + { + pg->dbl |= 1 << y; + for (x = 0; x < W; ++x) + { + if (~pg->data[y][x].attr & EA_DOUBLE) + pg->data[y][x].attr |= EA_HDOUBLE; + pg->data[y+1][x] = pg->data[y][x]; + pg->data[y+1][x].ch = ' '; + } + y++; + p += W; + } + } + pg->hid = pg->dbl << 1; +} + + +int export(struct export *e, struct vt_page *vtp, char *name) +{ + struct fmt_page pg[1]; + + fmt_page(e, pg, vtp); + return e->mod->output(e, name, pg); +} diff --git a/util/alevt/export.h b/util/alevt/export.h new file mode 100644 index 0000000..a08875c --- /dev/null +++ b/util/alevt/export.h @@ -0,0 +1,66 @@ +#ifndef EXPORT_H +#define EXPORT_H + +#include "vt.h" +#include "misc.h" + + +struct fmt_char +{ + u8 ch, fg, bg, attr; +}; + +#define EA_DOUBLE 1 // double height char +#define EA_HDOUBLE 2 // single height char in double height line +#define EA_BLINK 4 // blink +#define EA_CONCEALED 8 // concealed +#define EA_GRAPHIC 16 // graphic symbol +#define EA_SEPARATED 32 // use separated graphic symbol + +#define E_DEF_FG 7 +#define E_DEF_BG 0 +#define E_DEF_ATTR 0 + + +struct fmt_page +{ + struct vt_page *vtp; + u32 dbl, hid; + struct fmt_char data[H][W]; +}; + + +struct export +{ + struct export_module *mod; // module type + char *fmt_str; // saved option string (splitted) + // global options + int reveal; // reveal hidden chars + // local data for module's use. initialized to 0. + struct { int dummy; } data[0]; +}; + + +struct export_module +{ + char *fmt_name; // the format type name (ASCII/HTML/PNG/...) + char *extension; // the default file name extension + char **options; // module options + int local_size; + int (*open)(struct export *fmt); + void (*close)(struct export *fmt); + int (*option)(struct export *fmt, int opt, char *arg); + int (*output)(struct export *fmt, char *name, struct fmt_page *pg); +}; + + +extern struct export_module *modules[]; // list of modules (for help msgs) +void export_error(char *str, ...); // set error +char *export_errstr(void); // return last error +char *export_mkname(struct export *e, char *fmt, struct vt_page *vtp, char *usr); + + +struct export *export_open(char *fmt); +void export_close(struct export *e); +int export(struct export *e, struct vt_page *vtp, char *user_str); +#endif diff --git a/util/alevt/fdset.c b/util/alevt/fdset.c new file mode 100644 index 0000000..99edac4 --- /dev/null +++ b/util/alevt/fdset.c @@ -0,0 +1,97 @@ +#include <stdlib.h> +#include <unistd.h> +#include <sys/time.h> +#include "dllist.h" +#include "misc.h" +#include "fdset.h" + +struct fdset fds[1]; /* global fd list */ + + +int fdset_init(struct fdset *fds) +{ + dl_init(fds->list); + fds->del_count = 0; + return 0; +} + + +int fdset_add_fd(struct fdset *fds, int fd, void *handler, void *data) +{ + struct fdset_node *fn; + + if (fd < 0) + return -1; + if (handler == 0) + return -1; + + for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next) + if (fn->fd == fd) + return -1; + + if (not(fn = malloc(sizeof(*fn)))) + return -1; + fn->fd = fd; + fn->handler = handler; + fn->data = data; + dl_insert_last(fds->list, fn->node); + return 0; +} + + +int fdset_del_fd(struct fdset *fds, int fd) +{ + struct fdset_node *fn; + + for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next) + if (fn->fd == fd) + { + dl_remove(fn->node); + free(fn); + fds->del_count++; + return 0; + } + return -1; +} + + +int fdset_select(struct fdset *fds, int timeout) +{ + struct fdset_node *fn; + fd_set rfds[1]; + struct timeval tv[1], *tvp = 0; + int max_fd, x, del_count; + + FD_ZERO(rfds); + max_fd = 0; + for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next) + { + FD_SET(fn->fd, rfds); + if (fn->fd >= max_fd) + max_fd = fn->fd + 1; + } + + if (timeout >= 0) + { + tv->tv_sec = timeout/1000; + tv->tv_usec = timeout%1000*1000; + tvp = tv; + } + + x = select(max_fd, rfds, 0, 0, tvp); + if (x <= 0) + return x; + + /* A little bit complicated. A called handler may modify the fdset... */ +restart: + del_count = fds->del_count; + for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next) + if (FD_ISSET(fn->fd, rfds)) + { + FD_CLR(fn->fd, rfds); + fn->handler(fn->data, fn->fd); + if (fds->del_count != del_count) + goto restart; + } + return 1; +} diff --git a/util/alevt/fdset.h b/util/alevt/fdset.h new file mode 100644 index 0000000..4b786e6 --- /dev/null +++ b/util/alevt/fdset.h @@ -0,0 +1,28 @@ +#ifndef FDSET_H +#define FDSET_H + +#include "dllist.h" + + +struct fdset +{ + struct dl_head list[1]; + int del_count; +}; + + +struct fdset_node /*internal*/ +{ + struct dl_node node[1]; + int fd; + void (*handler)(void *data, int fd); + void *data; +}; + +extern struct fdset fds[1]; /* global fd list */ + +int fdset_init(struct fdset *fds); +int fdset_add_fd(struct fdset *fds, int fd, void *handler, void *data); +int fdset_del_fd(struct fdset *fds, int fd); +int fdset_select(struct fdset *fds, int timeout /*millisec*/); +#endif diff --git a/util/alevt/font.c b/util/alevt/font.c new file mode 100644 index 0000000..da0e448 --- /dev/null +++ b/util/alevt/font.c @@ -0,0 +1,5 @@ +#define static /* I want them global */ +#include "font1.xbm" +#include "font2.xbm" +#include "font3.xbm" +#include "font4.xbm" diff --git a/util/alevt/font.h b/util/alevt/font.h new file mode 100644 index 0000000..c17c4bc --- /dev/null +++ b/util/alevt/font.h @@ -0,0 +1,19 @@ +#ifndef FONT_H +#define FONT_H + +#include "fontsize.h" /* the #defines from font?.xbm */ + +#if font1_width != font2_width || font1_height != font2_height +#error different font sizes. +#endif + +extern unsigned char font1_bits[]; +extern unsigned char font2_bits[]; +extern unsigned char font3_bits[]; +extern unsigned char font4_bits[]; + +#define font_width font1_width +#define font_height font1_height +#define CW (font_width/32) /* pixel width of a character */ +#define CH (font_height/8) /* pixel height of a character */ +#endif diff --git a/util/alevt/hamm.c b/util/alevt/hamm.c new file mode 100644 index 0000000..c44a902 --- /dev/null +++ b/util/alevt/hamm.c @@ -0,0 +1,229 @@ +#include "vt.h" +#include "hamm.h" + +// table to decode hamm8/4 encoded bytes. +// the low 4 bits are the (corrected) data bits +// bit 8 is set if there was a single bit error +// bit 12 is set if there was an uncorrectable error + +// the idea: you may add up to 15 words and get the +// number of single bit errors in b8-b11 and the number +// of double errors in b12-b15 + + +static unsigned short hammtab[256] = +{ + 0x0101, 0x100f, 0x0001, 0x0101, 0x100f, 0x0100, 0x0101, 0x100f, + 0x100f, 0x0102, 0x0101, 0x100f, 0x010a, 0x100f, 0x100f, 0x0107, + 0x100f, 0x0100, 0x0101, 0x100f, 0x0100, 0x0000, 0x100f, 0x0100, + 0x0106, 0x100f, 0x100f, 0x010b, 0x100f, 0x0100, 0x0103, 0x100f, + 0x100f, 0x010c, 0x0101, 0x100f, 0x0104, 0x100f, 0x100f, 0x0107, + 0x0106, 0x100f, 0x100f, 0x0107, 0x100f, 0x0107, 0x0107, 0x0007, + 0x0106, 0x100f, 0x100f, 0x0105, 0x100f, 0x0100, 0x010d, 0x100f, + 0x0006, 0x0106, 0x0106, 0x100f, 0x0106, 0x100f, 0x100f, 0x0107, + 0x100f, 0x0102, 0x0101, 0x100f, 0x0104, 0x100f, 0x100f, 0x0109, + 0x0102, 0x0002, 0x100f, 0x0102, 0x100f, 0x0102, 0x0103, 0x100f, + 0x0108, 0x100f, 0x100f, 0x0105, 0x100f, 0x0100, 0x0103, 0x100f, + 0x100f, 0x0102, 0x0103, 0x100f, 0x0103, 0x100f, 0x0003, 0x0103, + 0x0104, 0x100f, 0x100f, 0x0105, 0x0004, 0x0104, 0x0104, 0x100f, + 0x100f, 0x0102, 0x010f, 0x100f, 0x0104, 0x100f, 0x100f, 0x0107, + 0x100f, 0x0105, 0x0105, 0x0005, 0x0104, 0x100f, 0x100f, 0x0105, + 0x0106, 0x100f, 0x100f, 0x0105, 0x100f, 0x010e, 0x0103, 0x100f, + 0x100f, 0x010c, 0x0101, 0x100f, 0x010a, 0x100f, 0x100f, 0x0109, + 0x010a, 0x100f, 0x100f, 0x010b, 0x000a, 0x010a, 0x010a, 0x100f, + 0x0108, 0x100f, 0x100f, 0x010b, 0x100f, 0x0100, 0x010d, 0x100f, + 0x100f, 0x010b, 0x010b, 0x000b, 0x010a, 0x100f, 0x100f, 0x010b, + 0x010c, 0x000c, 0x100f, 0x010c, 0x100f, 0x010c, 0x010d, 0x100f, + 0x100f, 0x010c, 0x010f, 0x100f, 0x010a, 0x100f, 0x100f, 0x0107, + 0x100f, 0x010c, 0x010d, 0x100f, 0x010d, 0x100f, 0x000d, 0x010d, + 0x0106, 0x100f, 0x100f, 0x010b, 0x100f, 0x010e, 0x010d, 0x100f, + 0x0108, 0x100f, 0x100f, 0x0109, 0x100f, 0x0109, 0x0109, 0x0009, + 0x100f, 0x0102, 0x010f, 0x100f, 0x010a, 0x100f, 0x100f, 0x0109, + 0x0008, 0x0108, 0x0108, 0x100f, 0x0108, 0x100f, 0x100f, 0x0109, + 0x0108, 0x100f, 0x100f, 0x010b, 0x100f, 0x010e, 0x0103, 0x100f, + 0x100f, 0x010c, 0x010f, 0x100f, 0x0104, 0x100f, 0x100f, 0x0109, + 0x010f, 0x100f, 0x000f, 0x010f, 0x100f, 0x010e, 0x010f, 0x100f, + 0x0108, 0x100f, 0x100f, 0x0105, 0x100f, 0x010e, 0x010d, 0x100f, + 0x100f, 0x010e, 0x010f, 0x100f, 0x010e, 0x000e, 0x100f, 0x010e, +}; + +#if 0 // this information is contained in hamm24par bit 5 +// simple parity table (sum of 1 bits modulo 2) + + +static char odd_parity[256] = +{ + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 +}; +#endif + +// this table generates the parity checks for hamm24/18 decoding. +// bit 0 is for test A, 1 for B, ... +// thanks to R. Gancarz for this fine table *g* + + +static char hamm24par[3][256] = +{ + { // parities of first byte + 0, 33, 34, 3, 35, 2, 1, 32, 36, 5, 6, 39, 7, 38, 37, 4, + 37, 4, 7, 38, 6, 39, 36, 5, 1, 32, 35, 2, 34, 3, 0, 33, + 38, 7, 4, 37, 5, 36, 39, 6, 2, 35, 32, 1, 33, 0, 3, 34, + 3, 34, 33, 0, 32, 1, 2, 35, 39, 6, 5, 36, 4, 37, 38, 7, + 39, 6, 5, 36, 4, 37, 38, 7, 3, 34, 33, 0, 32, 1, 2, 35, + 2, 35, 32, 1, 33, 0, 3, 34, 38, 7, 4, 37, 5, 36, 39, 6, + 1, 32, 35, 2, 34, 3, 0, 33, 37, 4, 7, 38, 6, 39, 36, 5, + 36, 5, 6, 39, 7, 38, 37, 4, 0, 33, 34, 3, 35, 2, 1, 32, + 40, 9, 10, 43, 11, 42, 41, 8, 12, 45, 46, 15, 47, 14, 13, 44, + 13, 44, 47, 14, 46, 15, 12, 45, 41, 8, 11, 42, 10, 43, 40, 9, + 14, 47, 44, 13, 45, 12, 15, 46, 42, 11, 8, 41, 9, 40, 43, 10, + 43, 10, 9, 40, 8, 41, 42, 11, 15, 46, 45, 12, 44, 13, 14, 47, + 15, 46, 45, 12, 44, 13, 14, 47, 43, 10, 9, 40, 8, 41, 42, 11, + 42, 11, 8, 41, 9, 40, 43, 10, 14, 47, 44, 13, 45, 12, 15, 46, + 41, 8, 11, 42, 10, 43, 40, 9, 13, 44, 47, 14, 46, 15, 12, 45, + 12, 45, 46, 15, 47, 14, 13, 44, 40, 9, 10, 43, 11, 42, 41, 8 + }, { // parities of second byte + 0, 41, 42, 3, 43, 2, 1, 40, 44, 5, 6, 47, 7, 46, 45, 4, + 45, 4, 7, 46, 6, 47, 44, 5, 1, 40, 43, 2, 42, 3, 0, 41, + 46, 7, 4, 45, 5, 44, 47, 6, 2, 43, 40, 1, 41, 0, 3, 42, + 3, 42, 41, 0, 40, 1, 2, 43, 47, 6, 5, 44, 4, 45, 46, 7, + 47, 6, 5, 44, 4, 45, 46, 7, 3, 42, 41, 0, 40, 1, 2, 43, + 2, 43, 40, 1, 41, 0, 3, 42, 46, 7, 4, 45, 5, 44, 47, 6, + 1, 40, 43, 2, 42, 3, 0, 41, 45, 4, 7, 46, 6, 47, 44, 5, + 44, 5, 6, 47, 7, 46, 45, 4, 0, 41, 42, 3, 43, 2, 1, 40, + 48, 25, 26, 51, 27, 50, 49, 24, 28, 53, 54, 31, 55, 30, 29, 52, + 29, 52, 55, 30, 54, 31, 28, 53, 49, 24, 27, 50, 26, 51, 48, 25, + 30, 55, 52, 29, 53, 28, 31, 54, 50, 27, 24, 49, 25, 48, 51, 26, + 51, 26, 25, 48, 24, 49, 50, 27, 31, 54, 53, 28, 52, 29, 30, 55, + 31, 54, 53, 28, 52, 29, 30, 55, 51, 26, 25, 48, 24, 49, 50, 27, + 50, 27, 24, 49, 25, 48, 51, 26, 30, 55, 52, 29, 53, 28, 31, 54, + 49, 24, 27, 50, 26, 51, 48, 25, 29, 52, 55, 30, 54, 31, 28, 53, + 28, 53, 54, 31, 55, 30, 29, 52, 48, 25, 26, 51, 27, 50, 49, 24 + }, { // parities of third byte + 63, 14, 13, 60, 12, 61, 62, 15, 11, 58, 57, 8, 56, 9, 10, 59, + 10, 59, 56, 9, 57, 8, 11, 58, 62, 15, 12, 61, 13, 60, 63, 14, + 9, 56, 59, 10, 58, 11, 8, 57, 61, 12, 15, 62, 14, 63, 60, 13, + 60, 13, 14, 63, 15, 62, 61, 12, 8, 57, 58, 11, 59, 10, 9, 56, + 8, 57, 58, 11, 59, 10, 9, 56, 60, 13, 14, 63, 15, 62, 61, 12, + 61, 12, 15, 62, 14, 63, 60, 13, 9, 56, 59, 10, 58, 11, 8, 57, + 62, 15, 12, 61, 13, 60, 63, 14, 10, 59, 56, 9, 57, 8, 11, 58, + 11, 58, 57, 8, 56, 9, 10, 59, 63, 14, 13, 60, 12, 61, 62, 15, + 31, 46, 45, 28, 44, 29, 30, 47, 43, 26, 25, 40, 24, 41, 42, 27, + 42, 27, 24, 41, 25, 40, 43, 26, 30, 47, 44, 29, 45, 28, 31, 46, + 41, 24, 27, 42, 26, 43, 40, 25, 29, 44, 47, 30, 46, 31, 28, 45, + 28, 45, 46, 31, 47, 30, 29, 44, 40, 25, 26, 43, 27, 42, 41, 24, + 40, 25, 26, 43, 27, 42, 41, 24, 28, 45, 46, 31, 47, 30, 29, 44, + 29, 44, 47, 30, 46, 31, 28, 45, 41, 24, 27, 42, 26, 43, 40, 25, + 30, 47, 44, 29, 45, 28, 31, 46, 42, 27, 24, 41, 25, 40, 43, 26, + 43, 26, 25, 40, 24, 41, 42, 27, 31, 46, 45, 28, 44, 29, 30, 47 + } +}; + +// table to extract the lower 4 bit from hamm24/18 encoded bytes + + +static char hamm24val[256] = +{ + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, + 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7, + 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9, + 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 11, 11, 11, 11, + 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, + 14, 14, 14, 14, 15, 15, 15, 15, 14, 14, 14, 14, 15, 15, 15, 15, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, + 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7, + 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9, + 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 11, 11, 11, 11, + 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, + 14, 14, 14, 14, 15, 15, 15, 15, 14, 14, 14, 14, 15, 15, 15, 15 +}; + +// mapping from parity checks made by table hamm24par to error +// results return by hamm24. +// (0 = no error, 0x0100 = single bit error, 0x1000 = double error) + + +static short hamm24err[64] = +{ + 0x0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, +}; + +// mapping from parity checks made by table hamm24par to faulty bit +// in the decoded 18 bit word. + + +static int hamm24cor[64] = +{ + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, + 0x00000, 0x00000, 0x00000, 0x00001, 0x00000, 0x00002, 0x00004, 0x00008, + 0x00000, 0x00010, 0x00020, 0x00040, 0x00080, 0x00100, 0x00200, 0x00400, + 0x00000, 0x00800, 0x01000, 0x02000, 0x04000, 0x08000, 0x10000, 0x20000, + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, +}; + + +int hamm8(u8 *p, int *err) +{ + int a = hammtab[p[0]]; + *err += a; + return a & 15; +} + + +int hamm16(u8 *p, int *err) +{ + int a = hammtab[p[0]]; + int b = hammtab[p[1]]; + *err += a; + *err += b; + return (a & 15) | (b & 15) * 16; +} + + +int hamm24(u8 *p, int *err) +{ + int e = hamm24par[0][p[0]] ^ hamm24par[1][p[1]] ^ hamm24par[2][p[2]]; + int x = hamm24val[p[0]] + p[1] % 128 * 16 + p[2] % 128 * 2048; + *err += hamm24err[e]; + return x ^ hamm24cor[e]; +} + + +int chk_parity(u8 *p, int n) +{ + int err; + for (err = 0; n--; p++) + if (hamm24par[0][*p] & 32) + *p &= 0x7f; + else + *p = BAD_CHAR, err++; + return err; +} diff --git a/util/alevt/hamm.h b/util/alevt/hamm.h new file mode 100644 index 0000000..3b8c8ad --- /dev/null +++ b/util/alevt/hamm.h @@ -0,0 +1,7 @@ +#ifndef HAMM_H +#define HAMM_H +int hamm8(u8 *p, int *err); +int hamm16(u8 *p, int *err); +int hamm24(u8 *p, int *err); +int chk_parity(u8 *p, int n); +#endif diff --git a/util/alevt/help.c b/util/alevt/help.c new file mode 100644 index 0000000..b867855 --- /dev/null +++ b/util/alevt/help.c @@ -0,0 +1,83 @@ +#include "vt.h" +#include "misc.h" + +#define VFILL " " +#define HELP_HEADER \ +"........\6AleVT Online Help System ", \ +" \22`p0`0 p `0pppp ", \ +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", \ +"\4\35\22\177,\177j5\177.! +t>! j5 \7"VFILL VERSION" \34", \ +" \22# #\42!\42# \42 \42! ", +#define FLOF_DATA \ + 1, { {0x100,ANY_SUB}, {0x200,ANY_SUB}, {0x300,ANY_SUB}, \ + {0x400,ANY_SUB}, {0x0ff,ANY_SUB}, {0x100,ANY_SUB} } + + +struct vt_page help_pages[] = +{ + { 0x900, 0, -1, 0, 0, (1<<26)-1, { +#include "vt900.out" + }, FLOF_DATA }, + + { 0x901, 1, -1, 0, 0, (1<<26)-1, { +#include "vt901.out" + }, FLOF_DATA }, + + { 0x902, 1, -1, 0, 0, (1<<26)-1, { +#include "vt902.out" + }, FLOF_DATA }, + + { 0x903, 1, -1, 0, 0, (1<<26)-1, { +#include "vt903.out" + }, FLOF_DATA }, + + { 0x904, 1, -1, 0, 0, (1<<26)-1, { +#include "vt904.out" + }, FLOF_DATA }, + + { 0x905, 2, -1, 0, 0, (1<<26)-1, { +#include "vt905.out" + }, FLOF_DATA }, + + { 0x906, 1, -1, 0, 0, (1<<26)-1, { +#include "vt906.out" + }, FLOF_DATA }, + + { 0x907, 2, -1, 0, 0, (1<<26)-1, { +#include "vt907.out" + }, FLOF_DATA }, + + { 0x908, 1, -1, 0, 0, (1<<26)-1, { +#include "vt908.out" + }, FLOF_DATA }, + + { 0x909, 0, -1, 0, 0, (1<<26)-1, { +#include "vt909.out" + }, FLOF_DATA }, + + { 0x910, 2, -1, 0, 0, (1<<26)-1, { +#include "vt910.out" + }, FLOF_DATA }, + + { 0x911, 1, -1, 0, 0, (1<<26)-1, { +#include "vt911.out" + }, FLOF_DATA }, + + { 0x912, 2, -1, 0, 0, (1<<26)-1, { +#include "vt912.out" + }, FLOF_DATA }, + + { 0x913, 1, -1, 0, 0, (1<<26)-1, { +#include "vt913.out" + }, FLOF_DATA }, + + { 0x914, 0, -1, 0, 0, (1<<26)-1, { +#include "vt914.out" + }, FLOF_DATA }, + + { 0x915, 0, -1, 0, 0, (1<<26)-1, { +#include "vt915.out" + }, FLOF_DATA }, +}; + +const int nr_help_pages = NELEM(help_pages); diff --git a/util/alevt/help.h b/util/alevt/help.h new file mode 100644 index 0000000..5df47fc --- /dev/null +++ b/util/alevt/help.h @@ -0,0 +1,8 @@ +#ifndef HELP_H +#define HELP_H + +#include "vt.h" + +extern struct vt_page help_pages[]; +extern const int nr_help_pages; +#endif diff --git a/util/alevt/icon.xbm b/util/alevt/icon.xbm new file mode 100644 index 0000000..27255a4 --- /dev/null +++ b/util/alevt/icon.xbm @@ -0,0 +1,17 @@ +#define icon_width 58 +#define icon_height 20 +static unsigned char icon_bits[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x03, 0x0f, 0x30, 0xfe, 0xff, 0xf8, 0x11, 0x00, 0x03, + 0x0f, 0x30, 0xfe, 0xff, 0xf8, 0x11, 0x00, 0x03, 0xc5, 0x23, 0xaa, 0xaa, + 0xa8, 0xf1, 0xf1, 0x03, 0xc6, 0x22, 0xfe, 0xd5, 0x58, 0xb1, 0xb1, 0x02, + 0x45, 0x23, 0x06, 0xaa, 0xa8, 0x51, 0x51, 0x01, 0xc6, 0x22, 0x06, 0xd6, + 0x58, 0xb1, 0xb1, 0x02, 0x45, 0x23, 0x62, 0xac, 0xa8, 0x51, 0x51, 0x01, + 0xc6, 0x22, 0x62, 0xd4, 0x58, 0xb1, 0xb1, 0x02, 0x45, 0x23, 0x62, 0xac, + 0xa8, 0x51, 0x51, 0x01, 0xc6, 0x23, 0x62, 0xd4, 0xf8, 0xb1, 0xb1, 0x02, + 0x05, 0x20, 0x02, 0xae, 0x61, 0x58, 0x51, 0x01, 0x06, 0x20, 0x02, 0x56, + 0x61, 0xa8, 0xb1, 0x02, 0xc5, 0x23, 0xe2, 0xab, 0x06, 0x56, 0x51, 0x01, + 0x46, 0x22, 0xe2, 0x57, 0x05, 0xaa, 0xb1, 0x02, 0xc7, 0x23, 0x06, 0xfe, + 0x9f, 0xff, 0xf1, 0x03, 0xc7, 0x23, 0x06, 0xfe, 0x9f, 0xff, 0xf1, 0x03, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x03, }; diff --git a/util/alevt/lang.c b/util/alevt/lang.c new file mode 100644 index 0000000..3a49307 --- /dev/null +++ b/util/alevt/lang.c @@ -0,0 +1,393 @@ +#include <string.h> +#include <ctype.h> +#include "misc.h" +#include "vt.h" +#include "lang.h" + +int latin1 = -1; + + +static u8 lang_char[256]; +static u8 lang_chars[1+8+8][16] = +{ + { 0, 0x23,0x24,0x40,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x7b,0x7c,0x7d,0x7e }, + + // for latin-1 font + // English (100%) + { 0, '�', '$', '@', '�', '�', '�', '�', '#', '�', '�', '�', '�', '�' }, + // German (100%) + { 0, '#', '$', '�', '�', '�', '�', '^', '_', '�', '�', '�', '�', '�' }, + // Swedish/Finnish/Hungarian (100%) + { 0, '#', '�', '�', '�', '�', '�', '�', '_', '�', '�', '�', '�', '�' }, + // Italian (100%) + { 0, '�', '$', '�', '�', '�', '�', '�', '#', '�', '�', '�', '�', '�' }, + // French (100%) + { 0, '�', '�', '�', '�', '�', '�', '�', '#', '�', '�', '�', '�', '�' }, + // Portuguese/Spanish (100%) + { 0, '�', '$', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�' }, + // Czech/Slovak (60%) + { 0, '#', 'u', 'c', 't', 'z', '�', '�', 'r', '�', '�', 'e', '�', 's' }, + // reserved (English mapping) + { 0, '�', '$', '@', '�', '�', '�', '�', '#', '�', '�', '�', '�', '�' }, + + // for latin-2 font + // Polish (100%) + { 0, '#', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�' }, + // German (100%) + { 0, '#', '$', '�', '�', '�', '�', '^', '_', '�', '�', '�', '�', '�' }, + // Estonian (100%) + { 0, '#', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�' }, + // Lettish/Lithuanian (90%) + { 0, '#', '$', '�', '�', '�', '�', '�', '�', '�', '�', 'u', '�', 'i' }, + // French (90%) + { 0, '�', 'i', 'a', '�', '�', 'u', '�', '#', 'e', '�', '�', 'u', '�' }, + // Serbian/Croation/Slovenian (100%) + { 0, '#', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�' }, + // Czech/Slovak (100%) + { 0, '#', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�', '�' }, + // Rumanian (95%) + { 0, '#', '�', '�', '�', '�', '�', '�', 'i', '�', '�', '�', '�', '�' }, +}; + +/* Yankable latin charset :-) + !"#$%&'()*+,-./0123456789:;<=>? + @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ + `abcdefghijklmnopqrstuvwxyz{|}~ + ������������������������������� + �������������������������������� + �������������������������������� +*/ + + +static struct mark { u8 *g0, *latin1, *latin2; } marks[16] = +{ + /* none */ { "#", + "�", + "$" }, + /* grave - ` */ { " aeiouAEIOU", + "`����������", + "`aeiouAEIOU" }, + /* acute - ' */ { " aceilnorsuyzACEILNORSUYZ", + "'�c��ln�rs��z�C��LN�RS��Z", + "'���������������������ݬ" }, + /* cirumflex - ^ */ { " aeiouAEIOU", + "^����������", + "^�e��u�E��U" }, + /* tilde - ~ */ { " anoANO", + "~������", + "~anoANO" }, + /* ??? - � */ { "", + "", + "" }, + /* breve - u */ { "aA", + "aA", + "��" }, + /* abovedot - � */ { "zZ", + "zZ", + "��" }, + /* diaeresis � */ { "aeiouAEIOU", + "����������", + "��i����I��" }, + /* ??? - . */ { "", + "", + "" }, + /* ringabove - � */ { " auAU", + "��u�U", + "�a�A�" }, + /* cedilla - � */ { "cstCST", + "�st�ST", + "��Ǫ�" }, + /* ??? - _ */ { " ", + "_", + "_" }, + /* dbl acute - " */ { " ouOU", + "\"ouOU", + "\"����" }, + /* ogonek - \, */ { "aeAE", + "aeAE", + "���" }, + /* caron - v */ { "cdelnrstzCDELNRSTZ", + "cdelnrstzCDELNRSTZ", + "����������̥�ة��" }, +}; + + +static u8 g2map_latin1[] = + /*0123456789abcdef*/ + " ���$�#��'\"� " + "����׵���'\"�����" + " `�^~ �.��_\" " + "_��� " + " �ЪH ILL� ��TNn" + "K�d�hiill� ��tn\x7f"; + + +static u8 g2map_latin2[] = + /*0123456789abcdef*/ + " icL$Y#��'\"< " + "� �u �'\"> " + " `�^~ ���.��_���" + "- RC " + " �aH iL�O opTNn" + "K �dhiil�o �ptn\x7f"; + + +void lang_init(void) +{ + int i; + + memset(lang_char, 0, sizeof(lang_char)); + for (i = 1; i <= 13; i++) + lang_char[lang_chars[0][i]] = i; +} + + +void conv2latin(u8 *p, int n, int lang) +{ + int c, gfx = 0, lat=0; + + if ((latin1 == KOI8) && lang==12) { /* russian */ + while (n--) { + c=*p; + + if(c==0x1b) lat = !lat; /* ESC switches languages inside page */ + + if ( is_koi(c)) { + if (not gfx || (c & 0xa0) != 0x20) { + if(!lat) conv2koi8(p); + } + } + else if ((c & 0xe8) == 0) + gfx = c & 0x10; + p++; + } + } +else if ((latin1 == GREEK) && lang==15) { /* Hellas */ + while (n--) { + c=*p; + + if(c==0x1b) lat = !lat; /* ESC switches languages inside page */ + + if ( is_greek(c)) { + if (not gfx || (c & 0xa0) != 0x20) { + if(!lat) conv2greek(p); + } + } + else if ((c & 0xe8) == 0) + gfx = c & 0x10; + p++; + } + } + + else { + while (n--) + { + if (lang_char[c = *p]) + { + if (not gfx || (c & 0xa0) != 0x20) + *p = lang_chars[lang + 1][lang_char[c]]; + } + else if ((c & 0xe8) == 0) + gfx = c & 0x10; + p++; + } + } +} + + +/* check for Greek chars - needs locale iso8859-7 set */ +int is_greek(int c) +{ + if( isalpha(c | 0x80)) return 1; + return 0; +} + + +/* check for russian chars - needs locale KOI8-R set */ +int is_koi(int c) +{ + if( isalpha(c | 0x80)) return 1; + if( c=='&' ) return 1; + return 0; +} + + +/* teletext to koi8-r conversion */ +void conv2koi8(u8 *p) +{ + u8 c; + static u8 l2koi[]={ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, + 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, + 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xFF, 0xFA, 0xFB, 0xFC, 0xFD, + 0xFE, 0xF9, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, + 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, + 0xDC, 0xDD, 0xDE, 0xDF + }; + + c= *p; + if ( (c >= 0x40) && (c <= 0x7f)) *p=l2koi[(c & 0x7f) - 0x40]; + if (c=='&') *p='�'; +} + + +/* teletext to iso8859-7 conversion */ +void conv2greek(u8 *p) +{ + u8 c; + static u8 l2greek[]={ +/* 1 @ 0x40->�*/0xc0, +/* 2 A 0x41->�*/0xc1, +/* 3 B 0x42->�*/0xc2, +/* 4 C 0x43->�*/0xc3, +/* 5 D 0x44->�*/0xc4, +/* 6 E 0x45->�*/0xc5, +/* 7 F 0x46->�*/0xc6, +/* 8 G 0x47->�*/0xc7, +/* 9 H 0x48->�*/0xc8, +/*10 I 0x49->�*/0xc9, +/*11 J 0x4a->�*/0xca, +/*12 K 0x4b->�*/0xcb, +/*13 L 0x4c->�*/0xcc, +/*14 M 0x4d->�*/0xcd, +/*15 N 0x4e->�*/0xce, +/*16 O 0x4f->�*/0xcf, +/*17 P 0x50->�*/0xd0, +/*18 Q 0x51->�*/0xd1, +/*19 R 0x52->?*/0x52, +/*20 S 0x53->�*/0xd3, +/*21 T 0x54->�*/0xd4, +/*22 U 0x55->�*/0xd5, +/*23 V 0x56->�*/0xd6, +/*24 W 0x57->�*/0xd7, +/*25 X 0x58->�*/0xd8, +/*26 Y 0x59->�*/0xd9, +/*27 Z 0x5a->?*/0x5a, +/*28 [ 0x5b->?*/0x5b, +/*!29 \ 0x5c->�*/0xdc, +/*!30 ] 0x5d->�*/0xdd, +/*!31 ^ 0x5e->�*/0xde, +/*!32 _ 0x5f->�*/0xdf, +/*33 ` 0x60->?*/0x60, +/*!34 a 0x61->�*/0xe1, +/*!35 b 0x62->�*/0xe2, +/*!36 c 0x63->�*/0xe3, +/*!37 d 0x64->�*/0xe4, +/*!38 e 0x65->�*/0xe5, +/*!39 f 0x66->�*/0xe6, +/*!40 g 0x67->�*/0xe7, +/*!41 h 0x68->�*/0xe8, +/*!42 i 0x69->�*/0xe9, +/*!43 j 0x6a->�*/0xea, +/*!44 k 0x6b->�*/0xeb, +/*!45 l 0x6c->�*/0xec, +/*!46 m 0x6d->�*/0xed, +/*!47 n 0x6e->�*/0xee, +/*!48 o 0x6f->�*/0xef, +/*!49 p 0x70->�*/0xf0, +/*!50 q 0x71->�*/0xf1, +/*!51 r 0x72->�*/0xf2, +/*!52 s 0x73->�*/0xf3, +/*!53 t 0x74->�*/0xf4, +/*!54 u 0x75->�*/0xf5, +/*!55 v 0x76->�*/0xf6, +/*!56 w 0x77->�*/0xf7, +/*!57 x 0x78->�*/0xf8, +/*!58 y 0x79->�*/0xf9, +/*59 z 0x7a->�(�� ����)*/0xc0, +/*60 { 0x7b->?*/0x7b, +/*!61 | 0x7c->�*/0xfc, +/*!62 } 0x7d->�*/0xfd, +/*!63 ~ 0x7e->�*/0xfe, +/*64 0x7f->?*/0x7f + }; + c= *p; + if ( (c >= 0x40) && (c <= 0x7f)) *p=l2greek[(c & 0x7f) - 0x40]; +} + + +void init_enhance(struct enhance *eh) +{ + eh->next_des = 0; +} + + +void add_enhance(struct enhance *eh, int dcode, u32 *t) +{ + + if (dcode == eh->next_des) + { + memcpy(eh->trip + dcode * 13, t, 13 * sizeof(*t)); + eh->next_des++; + } + else + eh->next_des = -1; +} + + +void enhance(struct enhance *eh, struct vt_page *vtp) +{ + int row = 0; + u32 *p, *e; + + if (eh->next_des < 1) + return; + + for (p = eh->trip, e = p + eh->next_des * 13; p < e; p++) + if (*p % 2048 != 2047) + { + int adr = *p % 64; + int mode = *p / 64 % 32; + int data = *p / 2048 % 128; + + if (adr < 40) + { + // col functions + switch (mode) + { + case 15: // char from G2 set + if (adr < W && row < H) + if (latin1==LATIN1) + vtp->data[row][adr] = g2map_latin1[data-32]; + else if (latin1==LATIN2) + vtp->data[row][adr] = g2map_latin2[data-32]; + break; + case 16 ... 31: // char from G0 set with diacritical mark + if (adr < W && row < H) + { + struct mark *mark = marks + (mode - 16); + u8 *x; + + if (x = strchr(mark->g0, data)) + if (latin1==LATIN1) + data = mark->latin1[x - mark->g0]; + else if (latin1==LATIN2) + data = mark->latin2[x - mark->g0]; + vtp->data[row][adr] = data; + } + break; + } + } + else + { + // row functions + if ((adr -= 40) == 0) + adr = 24; + + switch (mode) + { + case 1: // full row color + row = adr; + break; + case 4: // set active position + row = adr; + break; + case 7: // address row 0 (+ full row color) + if (adr == 23) + row = 0; + break; + } + } + } +} diff --git a/util/alevt/lang.h b/util/alevt/lang.h new file mode 100644 index 0000000..531f3b0 --- /dev/null +++ b/util/alevt/lang.h @@ -0,0 +1,28 @@ +#ifndef LANG_H +#define LANG_H + +#include "misc.h" +#include "vt.h" + +extern int latin1; + +#define LATIN1 1 +#define LATIN2 2 +#define KOI8 3 +#define GREEK 4 + + +struct enhance +{ + int next_des; // next expected designation code + u32 trip[13*16]; // tripplets +}; + +void lang_init(void); +void conv2latin(u8 *p, int n, int lang); +void conv2koi8(u8 *p); +void conv2greek(u8 *p); +void init_enhance(struct enhance *eh); +void add_enhance(struct enhance *eh, int dcode, u32 *data); +void enhance(struct enhance *eh, struct vt_page *vtp); +#endif diff --git a/util/alevt/main.c b/util/alevt/main.c new file mode 100644 index 0000000..31fe9c3 --- /dev/null +++ b/util/alevt/main.c @@ -0,0 +1,221 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <locale.h> +#include "vt.h" +#include "misc.h" +#include "fdset.h" +#include "xio.h" +#include "vbi.h" +#include "lang.h" +#include "cache.h" +#include "ui.h" + +static char *geometry; +static char *dpy_name; +static char *vbi_name = NULL; +static struct xio *xio; +static struct vbi *vbi; +static int erc = 1; +char *outfile = ""; +static char *channel; +static int ttpid = -1; +u_int16_t sid = 0; + + +static void usage(FILE *fp, int exitval) +{ + fprintf(fp, "\nUsage: %s [options]\n", prgname); + fprintf(fp, + "\n" + " Valid options:\t\tDefault:\n" + " -c <channel name>\t\t(none;dvb only)\n" + " -ch -child <ppp.ss>\t\t(none)\n" + " -cs -charset\t\tlatin-1\n" + " <latin-1/2/koi8-r/iso8859-7>\n" + " -h -help\n" + " -o <outfile>\t\t(none;dvb only)\n" + " -p -parent <ppp.ss>\t\t900\n" + " -s -sid <sid>\t\t(none;dvb only)\n" + " -t -ttpid <ttpid>\t\t(none;dvb only)\n" + " -v -vbi <vbidev>\t\t/dev/vbi\n" + " \t\t/dev/vbi0\n" + " \t\t/dev/video0\n" + " \t\t/dev/dvb/adapter0/demux0\n" + "\n" + " ppp.ss stands for a page number and an\n" + " optional subpage number (Example: 123.4).\n" + "\n" + " The -child option requires a parent\n" + " window. So it must be preceded by\n" + " a parent or another child window.\n" + ); + exit(exitval); +} + + +static int arg_pgno(char *p, int *subno) +{ + char *end; + int pgno; + + *subno = ANY_SUB; + if (*p) + { + pgno = strtol(p, &end, 16); + if ((*end == ':' || *end == '/' || *end == '.') && end[1]) + *subno = strtol(end + 1, &end, 16); + if (*end == 0) + if (pgno >= 0x100 && pgno <= 0x999) + if (*subno == ANY_SUB || (*subno >= 0x00 && *subno <= 0x3f7f)) + return pgno; + } + fatal("%s: invalid page number", p); +} + + +static struct vtwin * start(int argc, char **argv, struct vtwin *parent, + int pgno, int subno) +{ + static int valid_vbi_name = 1; + + if (!valid_vbi_name) + return parent; + + if (vbi == 0) + vbi = vbi_open(vbi_name, cache_open(), channel, outfile, sid, ttpid); + if (vbi == 0) + { + if (vbi_name) + error("cannot open device: %s", vbi_name); + valid_vbi_name = 0; + vbi = open_null_vbi(cache_open()); + } + if (vbi->cache) + vbi->cache->op->mode(vbi->cache, CACHE_MODE_ERC, erc); + + if (xio == 0) + xio = xio_open_dpy(dpy_name, argc, argv); + if (xio == 0) + fatal("cannot open display"); + + parent = vtwin_new(xio, vbi, geometry, parent, pgno, subno); + if (parent == 0) + fatal("cannot create window"); + + if (!valid_vbi_name) + { + if (vbi_name) + send_errmsg(vbi, "cannot open device: %s", vbi_name); + else + send_errmsg(vbi, "cannot open any device", vbi_name); + } + + return parent; +} + + +static int option(int argc, char **argv, int *ind, char **arg) +{ + static struct { char *nam, *altnam; int arg; } opts[] = { + { "-channel", "-c", 1 }, + { "-child", "-ch", 1 }, + { "-charset", "-cs", 1 }, + { "-help", "-h", 0 }, + { "-outfile", "-o", 1 }, + { "-parent", "-p", 1 }, + { "-sid", "-s", 1 }, + { "-ttpid", "-t", 1 }, + { "-vbi", "-v", 1 }, + }; + int i; + if (*ind >= argc) + return 0; + *arg = argv[(*ind)++]; + for (i = 0; i < NELEM(opts); ++i) + if (streq(*arg, opts[i].nam) || streq(*arg, opts[i].altnam)) + { + if (opts[i].arg) + if (*ind < argc) + *arg = argv[(*ind)++]; + else + fatal("option %s requires an argument", *arg); + return i+1; + } + if (**arg == '-') + { + fatal("%s: invalid option", *arg); + usage(stderr, 1); + } + return -1; +} + + +int main(int argc, char **argv) +{ + struct vtwin *parent = 0; + int pgno, subno; + int opt, ind; + char *arg; + sid = 0; + + setprgname(argv[0]); + fdset_init(fds); + + ind = 1; + while (opt = option(argc, argv, &ind, &arg)) + switch (opt) + { + + case 1: // channel + channel = arg; + break; + case 2: // child + if (parent == 0) + fatal("-child requires a parent window"); + pgno = arg_pgno(arg, &subno); + parent = start(argc, argv, parent, pgno, subno); + geometry = 0; + break; + case 3: // charset + if (streq(arg, "latin-1") || streq(arg, "1")) + latin1 = LATIN1; + else if (streq(arg, "latin-2") || streq(arg, "2")) + latin1 = LATIN2; + else if (streq(arg, "koi8-r") || streq(arg, "koi")) + latin1 = KOI8; + else if (streq(arg, "iso8859-7") || streq(arg, "el")) + latin1 = GREEK; + else + fatal("bad charset (not latin-1/2/koi8-r/iso8859-7)"); + break; + case 4: // help + usage(stdout, 0); + break; + case 5: // outfile + outfile = arg; + break; + case 6: // parent + case -1: // non-option arg + pgno = arg_pgno(arg, &subno); + parent = start(argc, argv, 0, pgno, subno); + geometry = 0; + break; + case 7: // sid + sid = strtoul(arg, NULL, 0); + break; + case 8: // ttpid + ttpid = strtoul(arg, NULL, 0); + break; + case 9: // vbi + vbi_name = arg; + vbi = 0; + parent = 0; + break; + } + + if (parent == 0) + start(argc, argv, 0, 0x900, ANY_SUB); + xio_event_loop(); + exit(0); +} diff --git a/util/alevt/misc.c b/util/alevt/misc.c new file mode 100644 index 0000000..32d0595 --- /dev/null +++ b/util/alevt/misc.c @@ -0,0 +1,66 @@ +#include <stdio.h> +#include <stdarg.h> +#include "misc.h" + +char *prgname = 0; + +extern char *strrchr(const char *, int); +NORETURN(exit(int)); + + +void setprgname(char *str) +{ + char *x = strrchr(str, '/'); + prgname = x ? x+1 : str; +} + + +static void print_prgname(void) +{ + if (prgname && *prgname) + fprintf(stderr, "%s: ", prgname); +} + + +void error(const char *str, ...) +{ + va_list args; + va_start(args, str); + print_prgname(); + vfprintf(stderr, str, args); + fputc('\n', stderr); +} + + +void ioerror(const char *str) +{ + print_prgname(); + perror(str); +} + + +void fatal(const char *str, ...) +{ + va_list args; + va_start(args, str); + print_prgname(); + vfprintf(stderr, str, args); + fputc('\n', stderr); + exit(2); +} + + +void fatal_ioerror(const char *str) +{ + print_prgname(); + perror(str); + exit(2); +} + + +void out_of_mem(int size) +{ + if (size > 0) + fatal("out of memory allocating %d bytes.", size); + fatal("out of memory."); +} diff --git a/util/alevt/misc.h b/util/alevt/misc.h new file mode 100644 index 0000000..00a71f8 --- /dev/null +++ b/util/alevt/misc.h @@ -0,0 +1,32 @@ +#ifndef MISC_H +#define MISC_H +#define PTR (void *) +#define NELEM(x) ((int)(sizeof(x)/sizeof(*(x)))) +#define NORETURN(x) void x __attribute__((__noreturn__)) +#define DEFINE(x) typeof(x) x +#define OFFSET_OF(type, elem) ((u8 *)&((type *)0)->elem - (u8 *)0) +#define BASE_OF(type, elem, p) ((type *)((u8 *)(p) - OFFSET_OF(type, elem))) + +#define not ! +#define streq(a, b) (strcmp((a), (b)) == 0) +#define min(a,b) ({ typeof(a) _a = a; typeof(b) _b = b; _a < _b ? _a : _b; }) +#define max(a,b) ({ typeof(a) _a = a; typeof(b) _b = b; _a > _b ? _a : _b; }) +#define bound(a,b,c) ({ typeof(a) _a = a; typeof(b) _b = b; typeof(c) _c = c; \ + _b < _a ? _a : _b > _c ? _c : _b; }) + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +typedef signed char s8; +typedef signed short s16; +typedef signed int s32; + +extern char *prgname; +void setprgname(char *argv_0); + +NORETURN(fatal(const char *str, ...)); +NORETURN(fatal_ioerror(const char *str)); +NORETURN(out_of_mem(int size)); +void error(const char *str, ...); +void ioerror(const char *str); +#endif diff --git a/util/alevt/os.h b/util/alevt/os.h new file mode 100644 index 0000000..50b7662 --- /dev/null +++ b/util/alevt/os.h @@ -0,0 +1,7 @@ +#ifndef OS_H +#define OS_H +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBsd__) \ + || defined(__bsdi__) +#define BSD +#endif +#endif diff --git a/util/alevt/search.c b/util/alevt/search.c new file mode 100644 index 0000000..082cefb --- /dev/null +++ b/util/alevt/search.c @@ -0,0 +1,127 @@ +#include <sys/types.h> // for freebsd +#include <stdlib.h> +#include "vt.h" +#include "misc.h" +#include "cache.h" +#include "search.h" + + +static void convert(u8 *p, u8 *buf, int *line) +{ + int x, y, c, ch, gfx, hid = 0; + + for (y = 1, p += 40; y < 25; ++y) + { + if (not hid) + { + gfx = 0; + for (x = 0; x < 40; ++x) + { + c = ' '; + switch (ch = *p++) + { + case 0x00 ... 0x07: + gfx = 0; + break; + case 0x10 ... 0x17: + gfx = 1; + break; + case 0x0c: + hid = 1; + break; + case 0x7f: + c = '*'; + break; + case 0x20 ... 0x7e: + if (gfx && ch != ' ' && (ch & 0xa0) == 0x20) + ch = '#'; + case 0xa0 ... 0xff: + c= ch; + } + *buf++ = c; + } + *buf++ = '\n'; + *line++ = y; + } + else + { + p += 40; + hid = 0; + } + } + *line = y; + *buf = 0; +} + + +static int search_pg(struct search *s, struct vt_page *vtp) +{ + regmatch_t m[1]; + u8 buf[H *(W+1) + 1]; + int line[H]; + + convert(PTR vtp->data, buf, line); + if (regexec(s->pattern, buf, 1, m, 0) == 0) + { + s->len = 0; + if (m->rm_so >= 0) + { + s->y = line[m->rm_so / (W+1)]; + s->x = m->rm_so % (W+1); + s->len = m->rm_eo - m->rm_so; + if (s->x + s->len > 40) + s->len = 40 - s->x; + } + return 1; + } + return 0; +} + + +struct search * search_start(struct cache *ca, u8 *pattern) +{ + struct search *s; + int f = 0; + + if (not(s = malloc(sizeof(*s)))) + goto fail1; + + if (pattern[0] == '!') + pattern++; + else + f = REG_ICASE; + + if (regcomp(s->pattern, pattern, f | REG_NEWLINE) != 0) + goto fail2; + + s->cache = ca; + return s; + +fail2: + free(s); +fail1: + return 0; +} + + +void search_end(struct search *s) +{ + regfree(s->pattern); + free(s); +} + + +int search_next(struct search *s, int *pgno, int *subno, int dir) +{ + struct vt_page *vtp = 0; + + if (s->cache) + vtp = s->cache->op->foreach_pg(s->cache, *pgno, *subno, dir, + search_pg, s); + if (vtp == 0) + return -1; + + *pgno = vtp->pgno; + *subno = vtp->subno ?: ANY_SUB; + return 0; +} diff --git a/util/alevt/search.h b/util/alevt/search.h new file mode 100644 index 0000000..c7e813a --- /dev/null +++ b/util/alevt/search.h @@ -0,0 +1,16 @@ +#ifndef SEARCH_H +#define SEARCH_H + +#include <regex.h> + +struct search +{ + struct cache *cache; + regex_t pattern[1]; + int x, y, len; // the position of the match +}; + +struct search *search_start(struct cache *ca, u8 *pattern); +void search_end(struct search *s); +int search_next(struct search *s, int *pgno, int *subno, int dir); +#endif diff --git a/util/alevt/ui.c b/util/alevt/ui.c new file mode 100644 index 0000000..70391c7 --- /dev/null +++ b/util/alevt/ui.c @@ -0,0 +1,721 @@ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <ctype.h> +#include <stdarg.h> +#include "vt.h" +#include "misc.h" +#include "xio.h" +#include "vbi.h" +#include "fdset.h" +#include "search.h" +#include "export.h" +#include "ui.h" + +static void vtwin_event(struct vtwin *w, struct vt_event *ev); +static void msg(struct vtwin *w, u8 *str, ...); +static void err(struct vtwin *w, u8 *str, ...); + +#define hist(w,o) ((w)->hist + (((w)->hist_top + (o)) & (N_HISTORY-1))) + + +static int inc_hex(int i, int bcd_mode) +{ + i++; + if (bcd_mode) + { + if ((i & 0x000f) > 0x0009) + i = (i + 0x0010) & 0x0ff0; + if ((i & 0x00f0) > 0x090) + i = (i + 0x0100) & 0x0f00; + if ((i & 0x0f00) > 0x0900) + i = (i + 0x1000) & 0xf000; + } + return i; +} + + +static int dec_hex(int i, int bcd_mode) +{ + i--; + if (bcd_mode) + { + if ((i & 0x000f) > 0x0009) + i = (i & 0xfff0) + 0x0009; + if ((i & 0x00f0) > 0x0090) + i = (i & 0xff00) + 0x0099; + if ((i & 0x0f00) > 0x0900) + i = (i & 0xf000) + 0x0999; + } + return i; +} + + +static void set_title(struct vtwin *w) +{ + char buf[32], buf2[32]; + + if (w->subno == ANY_SUB) + sprintf(buf, "%x", w->pgno); + else + sprintf(buf, "%x/%x", w->pgno, w->subno); + if (w->searching) + sprintf(buf2, "(%s)", buf); + else + sprintf(buf2, "%s", buf); + xio_title(w->xw, buf2); +} + + +static void query_page(struct vtwin *w, int pgno, int subno) +{ + w->pgno = pgno; + w->subno = subno; + w->searching = 1; + w->hold = 0; //subno != ANY_SUB; + xio_set_concealed(w->xw, w->revealed = 0); + + if (hist(w, 0)->pgno != pgno || + (hist(w,0)->subno == ANY_SUB && subno != ANY_SUB)) + w->hist_top++; + hist(w, 0)->pgno = pgno; + hist(w, 0)->subno = subno; + hist(w, 1)->pgno = 0; // end marker + + xio_cancel_selection(w->xw); + if (vbi_query_page(w->vbi, pgno, subno) == 0) + { + w->vtp = 0; + } + set_title(w); +} + + +static void new_or_query(struct vtwin *w, int pgno, int subno, int new_win) +{ + if (new_win) + { + if (w->child) + query_page(w->child, pgno, subno); + else + vtwin_new(w->xw->xio, w->vbi, 0, w, pgno, subno); + } + else + query_page(w, pgno, subno); +} + +static int _next_pgno(int *arg, struct vt_page *vtp) +{ + int pgno = vtp->pgno; + + if (arg[0] == pgno) // want different page + return 0; + if (arg[1]) // and not a hex page + for (; pgno; pgno >>=4) + if ((pgno & 15) > 9) + return 0; + return 1; +} + + +static int _next_subno(int *arg, struct vt_page *vtp) +{ + return vtp->pgno == arg[0]; // only subpages of this page +} + + +static void do_next_pgno(struct vtwin *w, int dir, int bcd_mode, int subs, + int new_win) +{ + struct vt_page *vtp; + struct vtwin *cw = (new_win && w->child) ? w->child : w; + int pgno = cw->pgno; + int subno = cw->subno; + + if (w->vbi->cache) + { + int arg[2]; + arg[0] = pgno; + arg[1] = bcd_mode; + if (vtp = w->vbi->cache->op->foreach_pg(w->vbi->cache, + pgno, subno, dir, subs ? _next_subno:_next_pgno, &arg)) + { + new_or_query(w, vtp->pgno, subs ? vtp->subno : ANY_SUB, new_win); + return; + } + } + err(w, "No page."); +} + +#define notdigit(x) (not isdigit((x))) + + +static int chk_screen_fromto(u8 *p, int x, int *n1, int *n2) +{ + p += x; + + if (x >= 0 && x+5 < 42) + if (notdigit(p[1]) || notdigit(p[0])) + if (isdigit(p[2])) + if (p[3] == '/' || p[3] == ':') + if (isdigit(p[4])) + if (notdigit(p[5]) || notdigit(p[6])) /* p[6] is save here */ + { + *n1 = p[2] % 16; + if (isdigit(p[1])) + *n1 += p[1] % 16 * 16; + *n2 = p[4] % 16; + if (isdigit(p[5])) + *n2 = *n2 * 16 + p[5] % 16; + return 1; + } + return 0; +} + + +static int chk_screen_pgno(u8 *p, int x, int *pgno, int *subno) +{ + p += x; + + if (x >= 0 && x+4 < 42) + if (notdigit(p[0]) && notdigit(p[4])) + if (isdigit(p[1]) && isdigit(p[2]) && isdigit(p[3])) + { + *pgno = p[1] % 16 * 256 + p[2] % 16 * 16 + p[3] % 16; + if (*pgno >= 0x100 && *pgno <= 0x999) + { + *subno = ANY_SUB; + if (x+6 < 42) + if (p[4] == '.' || p[4] == '/') + if (isdigit(p[5])) + if (notdigit(p[6]) || notdigit(p[7])) /* p[7] is save here */ + { + *subno = p[5] % 16; + if (isdigit(p[6])) + *subno = *subno * 16 + p[6] % 16; + } + // hackhackhack: + // pgno followed by start box gets subno 1 + if (x+4 < 42 && p[4] == 11) + *subno = 1; + return 1; + } + } + return 0; +} + + +static void do_screen_pgno(struct vtwin *w, int x, int y, int new_win) +{ + u8 buf[42]; + int n1, n2, i; + + if (x >= 0 && x < 40) + { + if (xio_get_line(w->xw, y, buf+1) == 0) + { + buf[0] = buf[41] = ' '; + x++; + + for (i = -6; i < 35; i++) + { + if (w->vtp == 0 || w->vtp->subno != 0) + if (chk_screen_fromto(buf, x+i, &n1, &n2)) + { + // subno cycling works wrong with children. + // so middle button cycles backwards... + if (w->subno != ANY_SUB) + n1 = w->subno; + n1 = new_win ? dec_hex(n1, 1) : inc_hex(n1, 1); + if (n1 < 1) + n1 = n2; + if (n1 > n2) + n1 = 1; + new_or_query(w, w->pgno, n1, 0); + return; + } + if (i >= -4) + if (chk_screen_pgno(buf, x+i, &n1, &n2)) + { + new_or_query(w, n1, n2, new_win); + return; + } + } + } + } + err(w, "No page."); +} + + +static void do_flof_pgno(struct vtwin *w, int button, int x, int new_win) +{ + struct vt_page *vtp = w->vtp; + int lk = 99, i, c; + + if (vtp && vtp->flof) + { + switch (button) + { + case 1 ... 3: + for (i = 0; i <= x && i < 40; ++i) + if ((c = vtp->data[24][i]) < 8) // fg-color code + lk = c; + lk = "x\0\1\2\3x\3x"[lk]; // color -> link# + break; + case KEY_F(1): lk = 0; break; + case KEY_F(2): lk = 1; break; + case KEY_F(3): lk = 2; break; + case KEY_F(4): lk = 3; break; + case KEY_F(5): lk = 5; break; + } + if (lk < 6 && (vtp->link[lk].pgno & 0xff) != 0xff) + { + new_or_query(w, vtp->link[lk].pgno, vtp->link[lk].subno, new_win); + return; + } + } + else + { + switch (button) + { + case 1 ... 3: lk = x / 8; break; + case KEY_F(1): lk = 0; break; + case KEY_F(2): lk = 1; break; + case KEY_F(3): lk = 2; break; + case KEY_F(4): lk = 3; break; + case KEY_F(5): lk = 4; break; + } + switch (lk) + { + case 0: new_or_query(w, 0x100, ANY_SUB, new_win); return; + case 1: do_next_pgno(w, -1, 1, 0, new_win); return; + case 2: new_or_query(w, 0x900, ANY_SUB, new_win); return; + case 3: do_next_pgno(w, 1, 1, 0, new_win); return; + case 4: new_or_query(w, 0x999, ANY_SUB, new_win); return; + } + } + err(w, "No page."); +} + + +static void do_hist_pgno(struct vtwin *w) +{ + if (hist(w, -1)->pgno) + { + w->hist_top--; + query_page(w, hist(w, 0)->pgno, hist(w, 0)->subno); + } + else + err(w, "Empty history."); +} + + +static void put_head_line(struct vtwin *w, u8 *p) +{ + char buf[40]; + + if (p == 0) + xio_get_line(w->xw, 0, buf); + else + memcpy(buf + 8, p + 8, 32); + + if (w->subno == ANY_SUB) + sprintf(buf, "\2%3x \5\xb7", w->pgno); + else + sprintf(buf, "\2S%02x \5\xb7", w->subno & 0xff); + + if (w->searching) + buf[0] = 1; + if (w->hold) + buf[4] = 'H'; + if (w->xw->concealed) + buf[6] = '*'; + buf[7] = 7; + + xio_put_line(w->xw, 0, buf); +} + + +static void put_menu_line(struct vtwin *w) +{ + if (w->status > 0) + xio_put_line(w->xw, 24, w->statusline); + else if (w->vtp && w->vtp->flof) + xio_put_line(w->xw, 24, w->vtp->data[24]); + else + xio_put_line(w->xw, 24, "\0 100 \4<< \6Help \4>>\0 999 "); +} + + +static void _msg(struct vtwin *w, u8 *str, va_list args) +{ + u8 buf[128]; + int i; + + i = vsprintf(buf, str, args); + if (i > W) + i = W; + memset(w->statusline, ' ', W); + memcpy(w->statusline + (W-i+1)/2, buf, i); + w->status = 6; + put_menu_line(w); +} + + +static void msg(struct vtwin *w, u8 *str, ...) +{ + va_list args; + + va_start(args, str); + _msg(w, str, args); + va_end(args); +} + + +static void err(struct vtwin *w, u8 *str, ...) +{ + va_list args; + + va_start(args, str); + _msg(w, str, args); + va_end(args); +} + + +static void next_search(struct vtwin *w, int rev) +{ + if (w->search) + { + int pgno = w->pgno; + int subno = w->subno; + int dir = rev ? -w->searchdir : w->searchdir; + + if (search_next(w->search, &pgno, &subno, dir) == 0) + { + query_page(w, pgno, subno); + if (not w->searching && w->search->len) + xio_set_selection(w->xw, w->search->x, w->search->y, + w->search->x + w->search->len - 1, w->search->y); + return; + } + else + err(w, "Pattern not found."); + } + else + err(w, "No search pattern."); +} + + +static void start_search(struct vtwin *w, u8 *string) +{ + if (not string) + return; + + if (*string) + { + if (w->search) + search_end(w->search); + w->search = search_start(w->vbi->cache, string); + if (w->search == 0) + { + err(w, "Bad search pattern."); + return; + } + } + next_search(w, 0); +} + + +static void start_save2(struct vtwin *w, u8 *name) +{ + if (name && *name) + if (export(w->export, w->vtp, name)) + err(w, export_errstr()); + + export_close(w->export); + w->export = 0; + put_menu_line(w); +} + + +struct vtwin * vtwin_new(struct xio *xio, struct vbi *vbi, char *geom, + struct vtwin *parent, int pgno, int subno) +{ + struct vtwin *w; + + if (not(w = malloc(sizeof(*w)))) + goto fail1; + + if (not (w->xw = xio_open_win(xio, geom))) + goto fail2; + w->vbi = vbi; + w->vtp = 0; + w->search = 0; + w->export = 0; + w->parent = parent; + w->child = 0; + if (parent && parent->child) + fatal("internal error: parent already has a child != 0"); + if (parent) + parent->child = w; + + w->hist_top = 1; + hist(w,0)->pgno = 0; + hist(w,1)->pgno = 0; + w->status = 0; + xio_set_handler(w->xw, vtwin_event, w); + vbi_add_handler(w->vbi, vtwin_event, w); + query_page(w, pgno, subno); + return w; + +fail2: + free(w); +fail1: + return 0; +} + + +static void vtwin_close(struct vtwin *w) +{ + if (w->parent) + w->parent->child = w->child; + if (w->child) + w->child->parent = w->parent; + + if (w->search) + search_end(w->search); + if (w->export) + export_close(w->export); + + vbi_del_handler(w->vbi, vtwin_event, w); + xio_close_win(w->xw, 1); + free(w); +} + + +static void vtwin_event(struct vtwin *w, struct vt_event *ev) +{ + struct xio_win *xw = w->xw; + int i; + + switch (ev->type) + { + case EV_CLOSE: + vtwin_close(w); + break; + + case EV_TIMER: + if (w->status > 0 && --w->status == 0) + put_menu_line(w); + break; + + case EV_KEY: + { + switch (ev->i1) + { + case '0' ... '9': + i = ev->i1 - '0'; + if (w->pgno >= 0x100) + { + if (i == 0) + break; + w->pgno = i; + } + else + { + w->pgno = w->pgno * 16 + i; + if (w->pgno >= 0x100) + query_page(w, w->pgno, ANY_SUB); + } + break; + case 'q': + case '\e': + vtwin_close(w); + break; + case 'h': + query_page(w, 0x900, ANY_SUB); + break; + case 'e': + if (w->vbi->cache) + { + i = w->vbi->cache->op->mode(w->vbi->cache, + CACHE_MODE_ERC, 0); + w->vbi->cache->op->mode(w->vbi->cache, + CACHE_MODE_ERC, !i); + msg(w, "Error reduction %sabled.", i ? "dis" : "en"); + } + break; + case 'o': + if (vtwin_new(xw->xio, w->vbi, 0, 0, w->pgno, w->subno) == 0) + err(w, "Unable to open new window."); + break; + case KEY_RIGHT: + do_next_pgno(w, 1, not ev->i2, 0, 0); + break; + case KEY_LEFT: + do_next_pgno(w, -1, not ev->i2, 0, 0); + break; + case KEY_UP: + do_next_pgno(w, -1, not ev->i2, 1, 0); + break; + case KEY_DOWN: + do_next_pgno(w, 1, not ev->i2, 1, 0); + break; + case '\b': + do_hist_pgno(w); + break; + case ' ': + w->hold = !w->hold; + break; + case 'c': + vbi_reset(w->vbi); + break; + case 'i': + if (w->vtp && w->vtp->flof && + (w->vtp->link[5].pgno & 0xff) != 0xff) + query_page(w, w->vtp->link[5].pgno, + w->vtp->link[5].subno); + else + query_page(w, 0x100, ANY_SUB); + break; + case 'r': + xio_set_concealed(xw, w->revealed = !w->revealed); + break; + case KEY_F(1) ... KEY_F(5): + do_flof_pgno(w, ev->i1, 0, ev->i2); + break; + case 'n': + next_search(w, 0); + break; + case 'N': + next_search(w, 1); + break; + default: + err(w, "Unused key."); + break; + } + break; + } + case EV_RESET: + { + if (w->search) + search_end(w->search); + w->search = 0; + + query_page(w, w->pgno, w->subno); + msg(w, "Cache cleared!"); + break; + } + case EV_MOUSE: + { + if (ev->i1 == 3) + do_hist_pgno(w); + else if (ev->i1 == 5) // wheel mouse + do_next_pgno(w, 1, not ev->i2, 0, 0); + else if (ev->i1 == 4) // wheel mouse + do_next_pgno(w, -1, not ev->i2, 0, 0); + else if (ev->i1 == 7) // dual wheel mouse + do_next_pgno(w, 1, not ev->i2, 1, 0); + else if (ev->i1 == 6) // dual wheel mouse + do_next_pgno(w, -1, not ev->i2, 1, 0); + else if (ev->i4 == 24) + do_flof_pgno(w, ev->i1, ev->i3, ev->i1 == 2); + else if (ev->i4 == 0 && ev->i3 < 5) + { + if (ev->i1 == 1) + w->hold = !w->hold; + else + vtwin_new(xw->xio, w->vbi, 0, 0, w->pgno, w->subno); + } + else if (ev->i4 == 0 && ev->i3 < 8) + { + if (ev->i1 == 2 && w->child) + w = w->child; + xio_set_concealed(w->xw, w->revealed = !w->revealed); + } + else + do_screen_pgno(w, ev->i3, ev->i4, ev->i1 == 2); + break; + } + case EV_PAGE: + { + struct vt_page *vtp = ev->p1; + + if (0) + if (vtp->errors) + printf("errors=%4d\n",vtp->errors); + if (w->searching || not(w->hold || ev->i1)) + if (vtp->pgno == w->pgno) + if (w->subno == ANY_SUB || vtp->subno == w->subno) + { + w->searching = 0; + w->vtp = vtp; + put_head_line(w, vtp->data[0]); + for (i = 1; i < 24; ++i) + xio_put_line(w->xw, i, vtp->data[i]); + put_menu_line(w); + set_title(w); + } + break; + } + case EV_HEADER: + { + u8 *p = ev->p1; + int hdr_mag = ev->i1 / 256; + int flags = ev->i3; + int mag = w->pgno; + if (mag >= 0x10) + mag = mag >> 4; + if (mag >= 0x10) + mag = mag >> 4; + if (flags & PG_OUTOFSEQ) + p = 0; + else + if (~flags & PG_MAGSERIAL) + if (mag != hdr_mag) + p = 0; + + put_head_line(w, p); + break; + } + case EV_XPACKET: + { +#if 0 /* VPS data (seems to be unused in .de */ + u8 *p = ev->p1; + + if (ev->i1 == 8 && ev->i2 == 30 && p[0]/2 == 1) + { + int i; + int pil, cni, pty, misc; + + for (i = 7; i < 20; ++i) + p[i] = hamm8(p+i, &ev->i3); + if (ev->i3 & 0xf000) /* uncorrectable errors */ + break; + cni = p[9] + p[15]/4*16 + p[16]%4*64 + p[10]%4*256 + + p[16]/4*1024 + p[17]*4096; + pty = p[18] + p[19]*16; + pil = p[10]/4 + p[11]*4 + p[12]*64 + p[13]*1024 + + p[14]*16384 + p[15]%4*262144; + misc = p[7] + p[8]*16; + err(w, "%02x %04x %05x %02x: %.20s", misc, cni, pil, pty, p+20); + } +#endif + break; + } + case EV_ERR: + { + char *errmsg = ev->p1; + if (errmsg != NULL && *errmsg != '\0') + { + err(w, errmsg); + w->status = 30; + ev->p1 = NULL; + free(errmsg); + } + break; + } + } +} diff --git a/util/alevt/ui.h b/util/alevt/ui.h new file mode 100644 index 0000000..9efc791 --- /dev/null +++ b/util/alevt/ui.h @@ -0,0 +1,35 @@ +#ifndef UI_H +#define UI_H + +#include "vt.h" +#include "xio.h" +#include "vbi.h" +#include "search.h" + +#define N_HISTORY (1 << 6) // number of history entries + +struct vtwin +{ + struct vtwin *parent, *child; + struct xio_win *xw; + struct vbi *vbi; + struct { + int pgno; + int subno; + } hist[N_HISTORY]; + int hist_top; + int searching; + int revealed; + int hold; + int pgno, subno; + struct vt_page *vtp; + struct search *search; + int searchdir; + int status; + u8 statusline[W+1]; + struct export *export; +}; + +extern struct vtwin *vtwin_new(struct xio *xio, struct vbi *vbi, char *geom, + struct vtwin *parent, int pgno, int subno); +#endif diff --git a/util/alevt/vbi.c b/util/alevt/vbi.c new file mode 100644 index 0000000..6a8a47e --- /dev/null +++ b/util/alevt/vbi.c @@ -0,0 +1,942 @@ +#define _GNU_SOURCE +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <stdio.h> +#include <errno.h> +#include <stdarg.h> +#include <sys/ioctl.h> +#include <sys/poll.h> +#include "os.h" +#include "vt.h" +#include "misc.h" +#include "vbi.h" +#include "fdset.h" +#include "hamm.h" +#include "lang.h" +#include <libzvbi.h> + + +static vbi_capture * pZvbiCapt; +static vbi_raw_decoder * pZvbiRawDec; +static vbi_sliced * pZvbiData; +static vbi_proxy_client * pProxy; + +#define ZVBI_BUFFER_COUNT 10 +#define ZVBI_TRACE 0 + + +static int vbi_dvb_open(struct vbi *vbi, const char *vbi_name, + const char *channel, char *outfile, u_int16_t sid, int ttpid); +static void dvb_handler(struct vbi *vbi, int fd); + +#define FAC (1<<16) // factor for fix-point arithmetic + +static u8 *rawbuf; // one common buffer for raw vbi data +static int rawbuf_size; // its current size +u_int16_t sid; +static char *vbi_names[] + = { "/dev/vbi", "/dev/vbi0", "/dev/video0", "/dev/dvb/adapter0/demux0", + NULL }; // default device names if none was given at the command line + + +static void out_of_sync(struct vbi *vbi) +{ + int i; // discard all in progress pages + for (i = 0; i < 8; ++i) + vbi->rpage[i].page->flags &= ~PG_ACTIVE; +} + + +// send an event to all clients +static void vbi_send(struct vbi *vbi, int type, int i1, int i2, int i3, void *p1) +{ + struct vt_event ev[1]; + struct vbi_client *cl, *cln; + ev->resource = vbi; + ev->type = type; + ev->i1 = i1; + ev->i2 = i2; + ev->i3 = i3; + ev->p1 = p1; + for (cl = PTR vbi->clients->first; cln = PTR cl->node->next; cl = cln) + cl->handler(cl->data, ev); +} + + +static void vbi_send_page(struct vbi *vbi, struct raw_page *rvtp, int page) +{ + struct vt_page *cvtp = 0; + + if (rvtp->page->flags & PG_ACTIVE) + { + if (rvtp->page->pgno % 256 != page) + { + rvtp->page->flags &= ~PG_ACTIVE; + enhance(rvtp->enh, rvtp->page); + if (vbi->cache) + cvtp = vbi->cache->op->put(vbi->cache, rvtp->page); + vbi_send(vbi, EV_PAGE, 0, 0, 0, cvtp ?: rvtp->page); + } + } +} + + +static void pll_add(struct vbi *vbi, int n, int err) +{ +} + + +// process one videotext packet +static int vt_line(struct vbi *vbi, u8 *p) +{ + struct vt_page *cvtp; + struct raw_page *rvtp; + int hdr, mag, mag8, pkt, i; + int err = 0; + + hdr = hamm16(p, &err); + if (err & 0xf000) + return -4; + mag = hdr & 7; + mag8 = mag?: 8; + pkt = (hdr >> 3) & 0x1f; + p += 2; + rvtp = vbi->rpage + mag; + cvtp = rvtp->page; + switch (pkt) + { + case 0: + { + int b1, b2, b3, b4; + b1 = hamm16(p, &err); // page number + b2 = hamm16(p+2, &err); // subpage number + flags + b3 = hamm16(p+4, &err); // subpage number + flags + b4 = hamm16(p+6, &err); // language code + more flags + if (vbi->ppage->page->flags & PG_MAGSERIAL) + vbi_send_page(vbi, vbi->ppage, b1); + vbi_send_page(vbi, rvtp, b1); + + if (err & 0xf000) + return 4; + + cvtp->errors = (err >> 8) + chk_parity(p + 8, 32);; + cvtp->pgno = mag8 * 256 + b1; + cvtp->subno = (b2 + b3 * 256) & 0x3f7f; + cvtp->lang = "\0\4\2\6\1\5\3\7"[b4 >> 5] + (latin1==LATIN1 ? 0 : 8); + cvtp->flags = b4 & 0x1f; + cvtp->flags |= b3 & 0xc0; + cvtp->flags |= (b2 & 0x80) >> 2; + cvtp->lines = 1; + cvtp->flof = 0; + vbi->ppage = rvtp; + pll_add(vbi, 1, cvtp->errors); + conv2latin(p + 8, 32, cvtp->lang); + vbi_send(vbi, EV_HEADER, cvtp->pgno, cvtp->subno, cvtp->flags, p); + + if (b1 == 0xff) + return 0; + cvtp->flags |= PG_ACTIVE; + init_enhance(rvtp->enh); + memcpy(cvtp->data[0]+0, p, 40); + memset(cvtp->data[0]+40, ' ', sizeof(cvtp->data)-40); + return 0; + } + + case 1 ... 24: + { + pll_add(vbi, 1, err = chk_parity(p, 40)); + + if (~cvtp->flags & PG_ACTIVE) + return 0; + + cvtp->errors += err; + cvtp->lines |= 1 << pkt; + conv2latin(p, 40, cvtp->lang); + memcpy(cvtp->data[pkt], p, 40); + return 0; + } + case 26: + { + int d, t[13]; + + if (~cvtp->flags & PG_ACTIVE) + return 0; + + d = hamm8(p, &err); + if (err & 0xf000) + return 4; + + for (i = 0; i < 13; ++i) + t[i] = hamm24(p + 1 + 3*i, &err); + if (err & 0xf000) + return 4; + + add_enhance(rvtp->enh, d, t); + return 0; + } + case 27: + { + int b1,b2,b3,x; + if (~cvtp->flags & PG_ACTIVE) + return 0; // -1 flushes all pages. We may never resync again + + b1 = hamm8(p, &err); + b2 = hamm8(p + 37, &err); + if (err & 0xf000) + return 4; + if (b1 != 0 || not(b2 & 8)) + return 0; + + for (i = 0; i < 6; ++i) + { + err = 0; + b1 = hamm16(p+1+6*i, &err); + b2 = hamm16(p+3+6*i, &err); + b3 = hamm16(p+5+6*i, &err); + if (err & 0xf000) + return 1; + x = (b2 >> 7) | ((b3 >> 5) & 0x06); + cvtp->link[i].pgno = ((mag ^ x) ?: 8) * 256 + b1; + cvtp->link[i].subno = (b2 + b3 * 256) & 0x3f7f; + } + cvtp->flof = 1; + return 0; + } + case 30: + { + if (mag8 != 8) + return 0; + p[0] = hamm8(p, &err); // designation code + p[1] = hamm16(p+1, &err); // initial page + p[3] = hamm16(p+3, &err); // initial subpage + mag + p[5] = hamm16(p+5, &err); // initial subpage + mag + if (err & 0xf000) + return 4; + err += chk_parity(p+20, 20); + conv2latin(p+20, 20, 0); + vbi_send(vbi, EV_XPACKET, mag8, pkt, err, p); + return 0; + } + default: + return 0; + } + return 0; +} + + +// called when new vbi data is waiting +static void vbi_handler(struct vbi *vbi, int fd) +{ + double timestamp; + struct timeval timeout; + int lineCount; + int line; + int res; + + timeout.tv_sec = 0; + timeout.tv_usec = 25000; + res = vbi_capture_read_sliced(pZvbiCapt, pZvbiData, &lineCount, ×tamp, + &timeout); + if (res > 0) + { + for (line=0; line < lineCount; line++) + { + if ((pZvbiData[line].id & VBI_SLICED_TELETEXT_B) != 0) + { + vt_line(vbi, pZvbiData[line].data); + } + } + } + else if (res < 0) + { + } +} + + +int vbi_add_handler(struct vbi *vbi, void *handler, void *data) +{ + struct vbi_client *cl; + + if (not(cl = malloc(sizeof(*cl)))) + return -1; + cl->handler = handler; + cl->data = data; + dl_insert_last(vbi->clients, cl->node); + return 0; +} + + +void vbi_del_handler(struct vbi *vbi, void *handler, void *data) +{ + struct vbi_client *cl; + + for (cl = PTR vbi->clients->first; cl->node->next; cl = PTR cl->node->next) + if (cl->handler == handler && cl->data == data) + { + dl_remove(cl->node); + break; + } + return; +} + + +struct vbi * vbi_open(char *vbi_name, struct cache *ca, + const char *channel, char *outfile, u_int16_t sid, int ttpid) +{ + static int inited = 0; + struct vbi *vbi; + char * pErrStr; + int services; + + if (vbi_name == NULL) + { + int i; + char *tried_devices = NULL; + char *old_tried_devices = NULL; + for (i = 0; vbi_names[i] != NULL; i++) + { + vbi_name = vbi_names[i]; + // collect device names for the error message below + if (old_tried_devices) + { + if (asprintf(&tried_devices, "%s, %s", old_tried_devices, vbi_name) < 0) + tried_devices = NULL; + free(old_tried_devices); + } + else if (asprintf(&tried_devices, "%s", vbi_name) < 0) + tried_devices = NULL; + if (tried_devices == NULL) + out_of_mem(-1); + old_tried_devices = tried_devices; + if (access(vbi_name, R_OK) != 0) + continue; + vbi = vbi_open(vbi_name, ca, channel, outfile, sid, ttpid); + if (vbi != NULL) + { + if (tried_devices != NULL) + free(tried_devices); + return vbi; + } + } + + error("could not open any of the standard devices (%s)", tried_devices); + free(tried_devices); + return NULL; + } + + if (not inited) + lang_init(); + inited = 1; + + if (not(vbi = malloc(sizeof(*vbi)))) + { + error("out of memory"); + goto fail1; + } + if (!vbi_dvb_open(vbi, vbi_name, channel, outfile, sid, ttpid)) { + vbi->cache = ca; + dl_init(vbi->clients); + out_of_sync(vbi); + vbi->ppage = vbi->rpage; + fdset_add_fd(fds, vbi->fd, dvb_handler, vbi); + return vbi; + } + + services = VBI_SLICED_TELETEXT_B; + pErrStr = NULL; + vbi->fd = -1; + + pProxy = vbi_proxy_client_create(vbi_name, "alevt", + VBI_PROXY_CLIENT_NO_STATUS_IND, &pErrStr, ZVBI_TRACE); + if (pProxy != NULL) + { + pZvbiCapt = vbi_capture_proxy_new(pProxy, ZVBI_BUFFER_COUNT, 0, + &services, 0, &pErrStr); + if (pZvbiCapt == NULL) + { + vbi_proxy_client_destroy(pProxy); + pProxy = NULL; + } + } + if (pZvbiCapt == NULL) + pZvbiCapt = vbi_capture_v4l2_new(vbi_name, ZVBI_BUFFER_COUNT, + &services, 0, &pErrStr, ZVBI_TRACE); + if (pZvbiCapt == NULL) + pZvbiCapt = vbi_capture_v4l_new(vbi_name, 0, &services, 0, &pErrStr, + ZVBI_TRACE); + + if (pZvbiCapt != NULL) + { + pZvbiRawDec = vbi_capture_parameters(pZvbiCapt); + if ((pZvbiRawDec != NULL) && ((services & VBI_SLICED_TELETEXT_B) != 0)) + { + pZvbiData = malloc((pZvbiRawDec->count[0] + pZvbiRawDec->count[1]) \ + * sizeof(*pZvbiData)); + + vbi->fd = vbi_capture_fd(pZvbiCapt); + } + else + vbi_capture_delete(pZvbiCapt); + } + + if (pErrStr != NULL) + { + fprintf(stderr, "libzvbi: %s\n", pErrStr); + free(pErrStr); + } + + if (vbi->fd == -1) + goto fail2; + vbi->cache = ca; + dl_init(vbi->clients); + out_of_sync(vbi); + vbi->ppage = vbi->rpage; + fdset_add_fd(fds, vbi->fd, vbi_handler, vbi); + return vbi; + +fail3: + close(vbi->fd); +fail2: + free(vbi); +fail1: + return 0; +} + + +void vbi_close(struct vbi *vbi) +{ + fdset_del_fd(fds, vbi->fd); + if (vbi->cache) + vbi->cache->op->close(vbi->cache); + + if (pZvbiData != NULL) + free(pZvbiData); + pZvbiData = NULL; + + if (pZvbiCapt != NULL) + { + vbi_capture_delete(pZvbiCapt); + pZvbiCapt = NULL; + } + if (pProxy != NULL) + { + vbi_proxy_client_destroy(pProxy); + pProxy = NULL; + } + free(vbi); +} + + +struct vt_page * vbi_query_page(struct vbi *vbi, int pgno, int subno) +{ + struct vt_page *vtp = 0; + if (vbi->cache) + vtp = vbi->cache->op->get(vbi->cache, pgno, subno); + if (vtp == 0) + { + return 0; + } + vbi_send(vbi, EV_PAGE, 1, 0, 0, vtp); + return vtp; +} + + +void vbi_reset(struct vbi *vbi) +{ + if (vbi->cache) + vbi->cache->op->reset(vbi->cache); + vbi_send(vbi, EV_RESET, 0, 0, 0, 0); +} + + +/* Starting from here: DVB API */ +#include <linux/dvb/dmx.h> +#include <linux/dvb/frontend.h> +#include <linux/dvb/video.h> + +static int dvb_get_table(int fd, u_int16_t pid, u_int8_t tblid, u_int8_t *buf, + size_t bufsz) +{ + struct dmx_sct_filter_params sctFilterParams; + struct pollfd pfd; + int r; + memset(&sctFilterParams, 0, sizeof(sctFilterParams)); + sctFilterParams.pid = pid; + sctFilterParams.timeout = 10000; + sctFilterParams.flags = DMX_ONESHOT | DMX_IMMEDIATE_START | DMX_CHECK_CRC; + sctFilterParams.filter.filter[0] = tblid; + sctFilterParams.filter.mask[0] = 0xff; + if (ioctl(fd, DMX_SET_FILTER, &sctFilterParams)) { + perror("DMX_SET_FILTER"); + return -1; + } + pfd.fd = fd; + pfd.events = POLLIN; + r = poll(&pfd, 1, 10000); + if (r < 0) { + perror("poll"); + goto out; + } + if (r > 0) { + r = read(fd, buf, bufsz); + if (r < 0) { + perror("read"); + goto out; + } + } + out: + ioctl(fd, DMX_STOP, 0); + return r; +} + +static const u_int8_t byterev8[256] = { + 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, + 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, + 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, + 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, + 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, + 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, + 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, + 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, + 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, + 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, + 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, + 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, + 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, + 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, + 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, + 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, + 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, + 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, + 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, + 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, + 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, + 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, + 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, + 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, + 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, + 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, + 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, + 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, + 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, + 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, + 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, + 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff +}; + +static void dvb_handle_pes_payload(struct vbi *vbi, const u_int8_t *buf, + unsigned int len) +{ + unsigned int p, i; + u_int8_t data[42]; + + if (buf[0] < 0x10 || buf[0] > 0x1f) + return; /* no EBU teletext data */ + for (p = 1; p < len; p += /*6 + 40*/ 2 + buf[p + 1]) { +#if 0 + printf("Txt Line:\n" + " data_unit_id 0x%02x\n" + " data_unit_length 0x%02x\n" + " reserved_for_future_use 0x%01x\n" + " field_parity 0x%01x\n" + " line_offset 0x%02x\n" + " framing_code 0x%02x\n" + " magazine_and_packet_addr 0x%04x\n" + " data_block 0x%02x 0x%02x 0x%02x 0x%02x\n", + buf[p], buf[p+1], + buf[p+2] >> 6, + (buf[p+2] >> 5) & 1, + buf[p+2] & 0x1f, + buf[p+3], + (buf[p+4] << 8) | buf[p+5], + buf[p+6], buf[p+7], buf[p+8], buf[p+9]); +#endif + for (i = 0; i < sizeof(data); i++) + data[i] = byterev8[buf[p+4+i]]; + /* note: we should probably check for missing lines and then + * call out_of_sync(vbi); and/or vbi_reset(vbi); */ + vt_line(vbi, data); + } +} + +static unsigned int rawptr; + +static void dvb_handler(struct vbi *vbi, int fd) +{ + /* PES packet start code prefix and stream_id == private_stream_1 */ + static const u_int8_t peshdr[4] = { 0x00, 0x00, 0x01, 0xbd }; + u_int8_t *bp; + int n; + unsigned int p, i, len; + u_int16_t rpid; + u_int32_t crc, crccomp; + + if (rawptr >= (unsigned int)rawbuf_size) + rawptr = 0; + n = read(vbi->fd, rawbuf + rawptr, rawbuf_size - rawptr); + if (n <= 0) + return; + rawptr += n; + if (rawptr < 6) + return; + if (memcmp(rawbuf, peshdr, sizeof(peshdr))) { + bp = memmem(rawbuf, rawptr, peshdr, sizeof(peshdr)); + if (!bp) + return; + rawptr -= (bp - rawbuf); + memmove(rawbuf, bp, rawptr); + if (rawptr < 6) + return; + } + len = (rawbuf[4] << 8) | rawbuf[5]; + if (len < 9) { + rawptr = 0; + return; + } + if (rawptr < len + 6) + return; + p = 9 + rawbuf[8]; +#if 0 + for (i = 0; i < len - p; i++) { + if (!(i & 15)) + printf("\n%04x:", i); + printf(" %02x", rawbuf[p + i]); + } + printf("\n"); +#endif + if (!dl_empty(vbi->clients)) + dvb_handle_pes_payload(vbi, rawbuf + p, len - p); + rawptr -= len; + if (rawptr) + memmove(rawbuf, rawbuf + len, rawptr); +} + + +static int vbi_dvb_open(struct vbi *vbi, const char *vbi_name, + const char *channel, char *outfile, u_int16_t sid, int ttpid) +{ + struct { + u_int16_t pmtpid; + u_int16_t ttpid; + u_int16_t service_id; + u_int8_t service_type; + char service_provider_name[64]; + char service_name[64]; + u_int8_t txtlang[3]; + u_int8_t txttype; + u_int8_t txtmagazine; + u_int8_t txtpage; + } progtbl[16], *progp; + u_int8_t tbl[4096]; + u_int8_t * ppname, * psname, pncode, sncode, pnlen, snlen; + int r; + FILE *ofd; + unsigned int i, j, k, l, progcnt = 0; + struct dmx_pes_filter_params filterpar; + + /* open DVB demux device */ + if (!vbi_name) + vbi_name = "/dev/dvb/adapter0/demux0"; + if ((vbi->fd = open(vbi_name, O_RDWR)) == -1) { + error("cannot open demux device %s", vbi_name); + return -1; + } + memset(progtbl, 0, sizeof(progtbl)); + if (ttpid >= 0x15 && ttpid < 0x1fff) { + vbi->ttpid = ttpid; + printf("Using command line specified teletext PID 0x%x\n", + vbi->ttpid); + goto ttpidfound; + } + /* parse PAT to enumerate services and to find the PMT PIDs */ + r = dvb_get_table(vbi->fd, 0, 0, tbl, sizeof(tbl)); + if (r == -1) + goto outerr; + if (!(tbl[5] & 1)) { + error("PAT not active (current_next_indicator == 0)"); + goto outerr; + } + if (tbl[6] != 0 || tbl[7] != 0) { + error("PAT has multiple sections"); + goto outerr; + } + if (r < 13) { + error("PAT too short\n"); + goto outerr; + } + r -= 13; + for (i = 0; i < (unsigned)r; i += 4) { + if (progcnt >= sizeof(progtbl)/sizeof(progtbl[0])) { + error("Program table overflow"); + goto outerr; + } + progtbl[progcnt].service_id = (tbl[8 + i] << 8) | tbl[9 + i]; + if (!progtbl[progcnt].service_id) /* this is the NIT pointer */ + continue; + progtbl[progcnt].pmtpid = ((tbl[10 + i] << 8) | tbl[11 + i]) + & 0x1fff; + progcnt++; + } + /* find the SDT to get the station names */ + r = dvb_get_table(vbi->fd, 0x11, 0x42, tbl, sizeof(tbl)); + if (r == -1) + goto outerr; + if (!(tbl[5] & 1)) { + error("SDT not active (current_next_indicator == 0)"); + goto outerr; + } + if (tbl[6] != 0 || tbl[7] != 0) { + error("SDT has multiple sections"); + goto outerr; + } + if (r < 12) { + error("SDT too short\n"); + goto outerr; + } + i = 11; + while (i < (unsigned)r - 1) { + k = (tbl[i] << 8) | tbl[i+1]; /* service ID */ + progp = NULL; + for (j = 0; j < progcnt; j++) + if (progtbl[j].service_id == k) { + progp = &progtbl[j]; + break; + } + j = i + 5; + i = j + (((tbl[i+3] << 8) | tbl[i+4]) & 0x0fff); + if (!progp) { + error("SDT: service_id 0x%x not in PAT\n", k); + continue; + } + while (j < i) { + switch (tbl[j]) { + case 0x48: // service descriptor + k = j + 4 + tbl[j + 3]; + progp->service_type = tbl[j+2]; + ppname = tbl+j+4 ; // points to 1st byte of provider_name + pncode = *ppname ; // 1st byte of provider_name + pnlen = tbl[j+3]; // length of provider_name + psname = tbl+k+1 ; // points to 1st byte of service_name + sncode = *psname ; // 1st byte of service_name + snlen = tbl[k] ; // length of service_name + if (pncode >= 0x20) { + pncode = 0 ; // default character set Latin alphabet fig.A.1 + } else { + ppname++ ; pnlen-- ; + // character code from table A.3 1st byte = ctrl-code + } + if (sncode >= 0x20) { + sncode = 0 ; // default character set Latin alphabet fig.A.1 + } else { + psname++ ; snlen-- ; + // character code from table A.3 ; 1st byte = ctrl-code + } + snprintf(progp->service_provider_name, + sizeof(progp->service_provider_name), "%.*s", pnlen, ppname); + snprintf(progp->service_name, + sizeof(progp->service_name), "%.*s", snlen, psname); break; + } + j += 2 + tbl[j + 1]; // next descriptor + } + } + /* parse PMT's to find Teletext Services */ + for (l = 0; l < progcnt; l++) { + progtbl[l].ttpid = 0x1fff; + if (progtbl[l].service_type != 0x01 || /* not digital TV */ + progtbl[l].pmtpid < 0x15 || /* PMT PID sanity check */ + progtbl[l].pmtpid >= 0x1fff) + continue; + r = dvb_get_table(vbi->fd, progtbl[l].pmtpid, 0x02, tbl, + sizeof(tbl)); + if (r == -1) + goto outerr; + if (!(tbl[5] & 1)) { error \ + ("PMT pid 0x%x not active (current_next_indicator == 0)", + progtbl[l].pmtpid); + goto outerr; + } + if (tbl[6] != 0 || tbl[7] != 0) { + error("PMT pid 0x%x has multiple sections", + progtbl[l].pmtpid); + goto outerr; + } + if (r < 13) { + error("PMT pid 0x%x too short\n", progtbl[l].pmtpid); + goto outerr; + } + i = 12 + (((tbl[10] << 8) | tbl[11]) & 0x0fff); + /* skip program info section */ + while (i <= (unsigned)r-6) { + j = i + 5; + i = j + (((tbl[i + 3] << 8) | tbl[i + 4]) & 0x0fff); + if (tbl[j - 5] != 0x06) + /* teletext streams have type 0x06 */ + continue; + k = ((tbl[j - 4] << 8) | tbl[j - 3]) & 0x1fff; + /* elementary PID - save until we know if it's teletext PID */ + while (j < i) { + switch (tbl[j]) { + case 0x56: /* EBU teletext descriptor */ + progtbl[l].txtlang[0] = tbl[j + 2]; + progtbl[l].txtlang[1] = tbl[j + 3]; + progtbl[l].txtlang[2] = tbl[j + 4]; + progtbl[l].txttype = tbl[j + 5] >> 3; + progtbl[l].txtmagazine = tbl[j + 5] & 7; + progtbl[l].txtpage = tbl[j + 6]; + progtbl[l].ttpid = k; + break; + } + j += 2 + tbl[j + 1]; + } + } + } + + printf \ + ("sid:pmtpid:ttpid:type:provider:name:language:texttype:magazine:page\n\n"); + for (i = 0; i < progcnt; i++) { + printf("%d:%d:%d:%d:%s:%s:lang=%.3s:type=%d:magazine=%1u:page=%3u\n", + progtbl[i].service_id, progtbl[i].pmtpid, progtbl[i].ttpid, + progtbl[i].service_type, progtbl[i].service_provider_name, + progtbl[i].service_name, progtbl[i].txtlang, progtbl[i].txttype, + progtbl[i].txtmagazine, progtbl[i].txtpage); + } + + if (*outfile) { + ofd = fopen(outfile,"w") ; + if (ofd == NULL) { error("cannot open outfile\n"); goto outerr ; } + for (i = 0; i < progcnt; i++) { + if (progtbl[i].ttpid == 0x1fff) continue ; // service without teletext + fprintf(ofd,"%d:%d:%s:%s:lang=%.3s\n", + progtbl[i].service_id, progtbl[i].ttpid, progtbl[i].service_provider_name, + progtbl[i].service_name, progtbl[i].txtlang); + } + fclose(ofd) ; + } + + progp = NULL; + + if (channel) { + j = strlen(channel); + for (i = 0; i < progcnt; i++) + if (!strncmp(progtbl[i].service_name, channel, j) + && progtbl[i].ttpid != 0x1fff) { progp = &progtbl[i]; + break ; + } + } + + if (channel && !progp) { + j = strlen(channel); + for (i = 0; i < progcnt; i++) + if (!strncasecmp(progtbl[i].service_name, channel, j) + && progtbl[i].ttpid != 0x1fff) { progp = &progtbl[i]; + break ; + } + } + + if (sid) { + for (i = 0; i < progcnt; i++) { + if ((progtbl[i].service_id == sid) && (progtbl[i].ttpid != 0x1fff)) { + progp = &progtbl[i]; break ; } + } + } + + if (!progp) { + for (i = 0; i < progcnt; i++) + if (progtbl[i].ttpid != 0x1fff) { + progp = &progtbl[i]; break ; + } + } + + printf("\nUsing: Service ID = %d ; PMT PID = %d ; TXT PID = %d ;\n" + "Service type = %d ; Provider Name = %s ; Service name = %s ;\n" + "language = %.3s ; Text type = %d ; Text Magazine = %1u ; Text page = %3u\n", + progp->service_id, progp->pmtpid, progp->ttpid, progp->service_type, + progp->service_provider_name, progp->service_name, progp->txtlang, + progp->txttype, progp->txtmagazine, progp->txtpage); + vbi->ttpid = progp->ttpid; + + ttpidfound: + rawbuf = malloc(rawbuf_size = 8192); + if (!rawbuf) + goto outerr; + rawptr = 0; +#if 0 + close(vbi->fd); + if ((vbi->fd = open(vbi_name, O_RDWR)) == -1) { + error("cannot open demux device %s", vbi_name); + return -1; + } +#endif + memset(&filterpar, 0, sizeof(filterpar)); + filterpar.pid = vbi->ttpid; + filterpar.input = DMX_IN_FRONTEND; + filterpar.output = DMX_OUT_TAP; + filterpar.pes_type = DMX_PES_OTHER; + filterpar.flags = DMX_IMMEDIATE_START; + if (ioctl(vbi->fd, DMX_SET_PES_FILTER, &filterpar) < 0) { + error("ioctl: DMX_SET_PES_FILTER %s (%u)", strerror(errno), errno); + goto outerr; + } + return 0; + + outerr: + close(vbi->fd); + vbi->fd = -1; + return -1; +} + + +struct vbi *open_null_vbi(struct cache *ca) +{ + static int inited = 0; + struct vbi *vbi; + + if (not inited) + lang_init(); + inited = 1; + + vbi = malloc(sizeof(*vbi)); + if (!vbi) + { + error("out of memory"); + goto fail1; + } + + vbi->fd = open("/dev/null", O_RDONLY); + if (vbi->fd == -1) + { + error("cannot open null device"); + goto fail2; + } + + vbi->ttpid = -1; + out_of_sync(vbi); + vbi->ppage = vbi->rpage; + fdset_add_fd(fds, vbi->fd, vbi_handler, vbi); + return vbi; + +fail3: + close(vbi->fd); +fail2: + free(vbi); +fail1: + return 0; +} + + +void send_errmsg(struct vbi *vbi, char *errmsg, ...) +{ + va_list args; + if (errmsg == NULL || *errmsg == '\0') + return; + va_start(args, errmsg); + char *buff = NULL; + if (vasprintf(&buff, errmsg, args) < 0) + buff = NULL; + va_end(args); + if(buff == NULL) + out_of_mem(-1); + vbi_send(vbi, EV_ERR, 0, 0, 0, buff); +} diff --git a/util/alevt/vbi.h b/util/alevt/vbi.h new file mode 100644 index 0000000..edb9dab --- /dev/null +++ b/util/alevt/vbi.h @@ -0,0 +1,47 @@ +#ifndef VBI_H +#define VBI_H + +#include "vt.h" +#include "dllist.h" +#include "cache.h" +#include "lang.h" + +#define PLL_ADJUST 4 + +struct raw_page +{ + struct vt_page page[1]; + struct enhance enh[1]; +}; + +struct vbi +{ + int fd; + struct cache *cache; + struct dl_head clients[1]; + // page assembly + struct raw_page rpage[8]; // one for each magazin + struct raw_page *ppage; // points to page of previous pkt0 + // DVB stuff + unsigned int ttpid; + u_int16_t sid; +}; + +struct vbi_client +{ + struct dl_node node[1]; + void (*handler)(void *data, struct vt_event *ev); + void *data; +}; + +struct vbi *vbi_open(char *vbi_dev_name, struct cache *ca, + const char *channel, char *outfile, u_int16_t sid, int ttpid); +void vbi_close(struct vbi *vbi); +void vbi_reset(struct vbi *vbi); +int vbi_add_handler(struct vbi *vbi, void *handler, void *data); +void vbi_del_handler(struct vbi *vbi, void *handler, void *data); +struct vt_page *vbi_query_page(struct vbi *vbi, int pgno, int subno); + +struct vbi *open_null_vbi(struct cache *ca); +void send_errmsg(struct vbi *vbi, char *errmsg, ...); +#endif diff --git a/util/alevt/vt.h b/util/alevt/vt.h new file mode 100644 index 0000000..75986e8 --- /dev/null +++ b/util/alevt/vt.h @@ -0,0 +1,62 @@ +#ifndef VT_H +#define VT_H + +#include "misc.h" + +#define W 40 +#define H 25 +#define BAD_CHAR 0xb8 // substitute for chars with bad parity + +struct vt_event +{ + int type; + void *resource; /* struct xio_win *, struct vbi *, ... */ + int i1, i2, i3, i4; + void *p1; +}; + +#define EV_CLOSE 1 +#define EV_KEY 2 // i1:KEY_xxx i2:shift-flag +#define EV_MOUSE 3 // i1:button i2:shift-flag i3:x i4:y +#define EV_SELECTION 4 // i1:len p1:data +#define EV_PAGE 5 // p1:vt_page i1:query-flag +#define EV_HEADER 6 // i1:pgno i2:subno i3:flags p1:data +#define EV_XPACKET 7 // i1:mag i2:pkt i3:errors p1:data +#define EV_RESET 8 // ./. +#define EV_TIMER 9 // ./. +#define EV_ERR 10 // p1: errmsg +#define KEY_F(i) (1000+i) +#define KEY_LEFT 2001 +#define KEY_RIGHT 2002 +#define KEY_UP 2003 +#define KEY_DOWN 2004 +#define KEY_PUP 2005 +#define KEY_PDOWN 2006 +#define KEY_DEL 2007 +#define KEY_INS 2008 + +struct vt_page +{ + int pgno, subno; // the wanted page number + int lang; // language code + int flags; // misc flags (see PG_xxx below) + int errors; // number of single bit errors in page + u32 lines; // 1 bit for each line received + u8 data[25][40]; // page contents + int flof; // page has FastText links + struct { + int pgno; + int subno; + } link[6]; // FastText links (FLOF) +}; + +#define PG_SUPPHEADER 0x01 // C7 row 0 is not to be displayed +#define PG_OUTOFSEQ 0x04 // C9 page out of numerical order +#define PG_NODISPLAY 0x08 // C10 rows 1-24 is not to be displayed +#define PG_MAGSERIAL 0x10 // C11 serial trans. (any pkt0 terminates page) +#define PG_ERASE 0x20 // C4 clear previously stored lines +#define PG_NEWSFLASH 0x40 // C5 box it and insert into normal video pict. +#define PG_SUBTITLE 0x80 // C6 box it and insert into normal video pict. +#define PG_ACTIVE 0x100 // currently fetching this page +#define ANY_SUB 0x3f7f // universal subpage number +#endif diff --git a/util/alevt/vt900.out b/util/alevt/vt900.out new file mode 100644 index 0000000..558ee67 --- /dev/null +++ b/util/alevt/vt900.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Contents: ", +"\6\15Contents: ", +"\24 #################################### ", +" ", +" \3\177\6Starting alevt . . . . . . 902 ", +" ", +" \3\177\6Copying/Warranty . . . . . 904 ", +" ", +" \3\177\6The Status Line . . . . . 905 ", +" ", +" \3\177\6Selecting Pages . . . . . 907 ", +" ", +" \3\177\6QuickClick Page . . . . . 915 ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" (Click to select a page) ", +" ", +"\4\35\7 Next 901 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt901.out b/util/alevt/vt901.out new file mode 100644 index 0000000..1bde77c --- /dev/null +++ b/util/alevt/vt901.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Contents: ", +"\6\15Contents: ", +"\24 #################################### ", +" ", +"\6 \3\177\6FastText Menu . . . . . . 909 ", +"\6 ", +"\6 \3\177\6Keyboard Commands . . . . 910 ", +"\6 ", +"\6 \3\177\6Starting alevt-cap . . . . 912 ", +"\6 ", +"\6 \3\177\6Starting alevt-date . . . 914 ", +"\6 ", +"\6 \3\177\6QuickClick Page . . . . . 915 ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" (Click to select a page) ", +" ", +"\4\35\7Back 900 Index 900 Next 902 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt902.out b/util/alevt/vt902.out new file mode 100644 index 0000000..665b41d --- /dev/null +++ b/util/alevt/vt902.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt: ", +"\6\15Starting alevt: ", +"\24 #################################### ", +"\6 $\7alevt\6[options] Default: ", +" ", +" -c\6<channel name> (none;dvb only) ", +" -ch -child\6<ppp.ss> (none) ", +" -cs -charset \6latin-1 ", +" \6<latin-1/2/koi8-r/ ", +" \6iso8859-7> ", +" -h -help ", +" ", +" ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 901 Index 900 Next 903 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt903.out b/util/alevt/vt903.out new file mode 100644 index 0000000..0df75c1 --- /dev/null +++ b/util/alevt/vt903.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt: ", +"\6\15Starting alevt: ", +"\24 #################################### ", +"\6 $\7alevt\6[options] Default: ", +" -o\6<outfile> (none;dvb only) ", +" -p -parent\6<ppp.ss> 900 ", +" -s -sid\6<sid> (none;dvb only) ", +" -t -ttpid\6<ttpid> (none;dvb only) ", +" -v -vbi\6<vbidev> /dev/vbi ", +" \6/dev/vbi0 ", +" \6/dev/video0 ", +" \6/dev/dvb/adapter0/demux0 ", +" ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 902 Index 900 Next 904 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt904.out b/util/alevt/vt904.out new file mode 100644 index 0000000..d13dcfd --- /dev/null +++ b/util/alevt/vt904.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Copying: ", +"\6\15Copying: ", +"\24 #################################### ", +"\6 2002-07 Edgar Toernig (froese@gmx.de) ", +"\6 All Rights Reserved. ", +"\6 ", +"\6 This program is free software; you ", +"\6 can redistribute it and/or modify it ", +"\6 under the terms of the GNU General ", +"\6 Public License Version 2 as published ", +"\6 by the Free Software Foundation. ", +"\6 ", +"\6 This program is distributed in the ", +"\6 hope that it will be useful, but ", +"\6\7without any warranty.\6See the GNU ", +"\6 General Public License for details. ", +" ", +"\4\35\7Back 903 Index 900 Next 905 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt905.out b/util/alevt/vt905.out new file mode 100644 index 0000000..b445ebb --- /dev/null +++ b/util/alevt/vt905.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Status Line: ", +"\6\15Status Line: ", +"\24 #################################### ", +"\6 The top line of each window is the ", +"\6 status line. On the left it shows ", +"\6 the current page number (CPN) and ", +"\6 some flags. The rest of the line ", +"\6 is the running header sent by the ", +"\6 TV station. ", +"\6 ", +"\6 If the CPN is red, the program is ", +"\6 searching for that page. If it's ", +"\6 green, it's the PN of the currently ", +"\6 displayed page. ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 904 Index 900 Next 906 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt906.out b/util/alevt/vt906.out new file mode 100644 index 0000000..156b481 --- /dev/null +++ b/util/alevt/vt906.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Status Line: \14\5\30 ", +"\6\15Status Line: \14\5\30 ", +"\24 #################################### ", +"\6 An\2H\6behind the CPN indicates that ", +"\6 the page is on hold. This inhibits ", +"\6 subpage cycling and page updates. A ", +"\6 click on the CPN toggles the\2H\6flag.", +" ", +"\6 A\5*\6indicates that the page ", +"\6 contains concealed text. Clicking on ", +"\6 the\5*\6reveals that text. ", +" ", +"\6 A CPN in the form\2Sxx\6is shown if a ", +"\6 specific subpage is selected. ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 905 Index 900 Next 907 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt907.out b/util/alevt/vt907.out new file mode 100644 index 0000000..6aeb4e6 --- /dev/null +++ b/util/alevt/vt907.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Selecting Pages: ", +"\6\15Selecting Pages: ", +"\24 #################################### ", +"\6 To select a specific page, you may ", +"\6 either enter the page number with ", +"\6 the keyboard or click with the\7left ", +"\6 mouse button on a page number ", +"\6 somewhere on the screen. ", +"\6 ", +"\6 Clicking with the\7middle\6button will ", +"\6 show the page in a child window. If ", +"\6 there is no child window, a new one ", +"\6 will be opened. ", +"\6 ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 906 Index 900 Next 908 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt908.out b/util/alevt/vt908.out new file mode 100644 index 0000000..851a9b5 --- /dev/null +++ b/util/alevt/vt908.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Selecting Pages: ", +"\6\15Selecting Pages: ", +"\24 #################################### ", +"\6 AleVT also recognizes something like ", +"\3 3/7\6as a valid page number. Clicking ", +"\6 with the\7left\6button will cycle to ", +"\6 the next subpage of the current page. ", +"\6 The\7middle\6buttons cycles backwards. ", +"\6 ", +"\6 For each window a history of ", +"\6 recently visited pages is kept. ", +"\6 Pressing the\7right\6mouse button will ", +"\6 take you back to the previous page. ", +"\6 ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 907 Index 900 Next 909 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt909.out b/util/alevt/vt909.out new file mode 100644 index 0000000..0b28450 --- /dev/null +++ b/util/alevt/vt909.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15FastText Menu: ", +"\6\15FastText Menu: ", +"\24 #################################### ", +"\6 The last line of each window shows ", +"\6 the FastText Menu (only if one is ", +"\6 transmitted for that page). ", +"\6 ", +"\6 It consists of up to four colored ", +"\6 labels. You may click on a label ", +"\6 or press one of the function keys ", +"\6 F1-F4 to go to the associated page. ", +"\6 ", +"\6 For the 5th (white) key present on ", +"\6 some remote controls press F5. ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 908 Index 900 Next 910 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt910.out b/util/alevt/vt910.out new file mode 100644 index 0000000..d3a2095 --- /dev/null +++ b/util/alevt/vt910.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Keyboard Commands: ", +"\6\15Keyboard Commands: ", +"\24 #################################### ", +" 0\6-\0079 \6Enter page number ", +" q\6or\7ESC \6Close window ", +" h \6Goto page 900 (help page) ", +" i \6Goto page 100 (index page) ", +" o \6Open a new window ", +" SPACE \6Hold page ", +" RIGHT \6Goto next page ", +" LEFT \6Goto previous page ", +" DOWN \6Goto next subpage ", +" UP \6Goto previous subpage ", +" BACKSPACE\6Previous page from history ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 909 Index 900 Next 911 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt911.out b/util/alevt/vt911.out new file mode 100644 index 0000000..49e6cc1 --- /dev/null +++ b/util/alevt/vt911.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \007 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Keyboard Commands: ", +"\6\15Keyboard Commands: ", +"\24 #################################### ", +" s \6Save page to file ", +" c \6Clear page cache ", +" r \6Reveal concealed text ", +" F1\6-\7F5 \6FastText keys ", +" /\6and\7? \6Search forward/backward ", +" n\6and\7N \6Search next/previous ", +" f\6and\7F \6Fine tune the decoder ", +" e \6Error reduction on/off ", +" b \6Error bell on/off ", +"\6 Holding the\7shift\6key while pressing ", +"\6 one of the\7cursor\6keys allows ", +"\6 selecting the 'hex' pages (Ex.: 1f1). ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +"\4\35\7Back 910 Index 900 Next 912 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt912.out b/util/alevt/vt912.out new file mode 100644 index 0000000..6fd7d12 --- /dev/null +++ b/util/alevt/vt912.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt-cap: ", +"\6\15Starting alevt-cap: ", +"\24 #################################### ", +"\6 $\7alevt-cap\6[options] Default: ", +" ", +" -cs -charset \6latin-1 ", +" \6<latin-1/2/koi8-r/ ", +" \6iso8859-7> ", +" -f -format \6ascii ", +" \6<fmt,options> ", +" -f help -format help ", +" -h -help ", +" -n -name \6<filename> ttext-%s.%e ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 911 Index 900 Next 913 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt913.out b/util/alevt/vt913.out new file mode 100644 index 0000000..e0f4878 --- /dev/null +++ b/util/alevt/vt913.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt-cap: ", +"\6\15Starting alevt-cap: ", +"\24 #################################### ", +"\6 $\7alevt-cap\6[options] Default: ", +" ", +" -s -sid\6<sid> (none;dvb only) ", +" -t -ttpid\6<ttpid> (none;dvb only) ", +" -to -timeout\6<secs> (none) ", +" -v -vbi\6<vbidev> /dev/vbi ", +" \6/dev/vbi0 ", +" \6/dev/video0 ", +" \6/dev/dvb/adapter0/demux0 ", +" ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 912 Index 900 Next 914 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt914.out b/util/alevt/vt914.out new file mode 100644 index 0000000..a55eed1 --- /dev/null +++ b/util/alevt/vt914.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt-date: ", +"\6\15Starting alevt-date: ", +"\24 #################################### ", +"\6 $\7alevt-date\6[options] Default: ", +" ", +" -d -delta\6<max_secs> 7200 (2 hours) ", +" -f -format\6<fmtstr> %c ", +" -h -help ", +" -s -set \6off ", +" -to -timeout\6<seconds>(none) ", +" -v -vbi\6<vbidev> /dev/vbi ", +" \6/dev/vbi0 ", +" \6/dev/video0 ", +" \6/dev/dvb/adapter0/demux0 ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 913 Index 900 Next 915 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt915.out b/util/alevt/vt915.out new file mode 100644 index 0000000..66041ac --- /dev/null +++ b/util/alevt/vt915.out @@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15QuickClick: ", +"\6\15QuickClick: ", +"\24 #################################### ", +"\6 100 200 300 400 500 600 700 800 ", +"\6 101 201 301 401 501 601 701 801 ", +"\6 110 210 310 410 510 610 710 810 ", +"\6 120\006220 320 420 520 620 720 820 ", +"\6 130 230 330 430 530 630 730 830 ", +"\6 140\006240 340 440 540 640 740 840 ", +"\6 150 250 350 450 550 650 750 850 ", +"\6 160\006260 360 460 560 660 760 860 ", +"\6 170 270 370 470 570 670 770 870 ", +"\6 180\006280 380 480 580 680 780 880 ", +"\6 190 290 390 490 590 690 790 890 ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7 Index 900 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vtxt-iso8859-7.bdf b/util/alevt/vtxt-iso8859-7.bdf new file mode 100644 index 0000000..7d62c95 --- /dev/null +++ b/util/alevt/vtxt-iso8859-7.bdf @@ -0,0 +1,5768 @@ +STARTFONT 2.1 +FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-1 +SIZE 1 75 75 +FONTBOUNDINGBOX 9 16 0 -4 +STARTPROPERTIES 10 +POINT_SIZE 1 +PIXEL_SIZE 16 +RESOLUTION_X 75 +RESOLUTION_Y 75 +FONT_ASCENT 12 +FONT_DESCENT 4 +AVERAGE_WIDTH 90 +SPACING "C" +_XMBDFED_INFO "Edited with xmbdfed 4.5." +FONT "vtxt" +ENDPROPERTIES +CHARS 250 +STARTCHAR char0 +ENCODING 0 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 1 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 2 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 3 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 4 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 5 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 6 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 7 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 8 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 9 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 10 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 11 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 12 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 13 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 14 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 15 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 16 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 17 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 18 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 19 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 20 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 21 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 22 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 23 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 24 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 25 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 26 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 27 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 28 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 29 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 30 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 31 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char32 +ENCODING 32 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char33 +ENCODING 33 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +3C00 +3C00 +1800 +1800 +1800 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char34 +ENCODING 34 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char35 +ENCODING 35 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +3600 +7F00 +3600 +3600 +3600 +7F00 +3600 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char36 +ENCODING 36 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +0C00 +3E00 +6300 +6100 +6000 +3E00 +0300 +0300 +4300 +6300 +3E00 +0C00 +0C00 +0000 +0000 +ENDCHAR +STARTCHAR char37 +ENCODING 37 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6100 +6300 +0600 +0C00 +1800 +3000 +6300 +4300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char38 +ENCODING 38 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3600 +1C00 +3B00 +6E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char39 +ENCODING 39 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +3000 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char40 +ENCODING 40 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +1800 +3000 +3000 +3000 +3000 +3000 +3000 +1800 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char41 +ENCODING 41 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3000 +1800 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +1800 +3000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char42 +ENCODING 42 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +3C00 +FF00 +3C00 +6600 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char43 +ENCODING 43 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char44 +ENCODING 44 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char45 +ENCODING 45 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char46 +ENCODING 46 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char47 +ENCODING 47 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0100 +0300 +0600 +0C00 +1800 +3000 +6000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char48 +ENCODING 48 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C300 +C300 +DB00 +DB00 +C300 +C300 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char49 +ENCODING 49 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3800 +7800 +1800 +1800 +1800 +1800 +1800 +1800 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char50 +ENCODING 50 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0600 +0C00 +1800 +3000 +6000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char51 +ENCODING 51 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0300 +1E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char52 +ENCODING 52 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0E00 +1E00 +3600 +6600 +7F00 +0600 +0600 +0600 +0F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char53 +ENCODING 53 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6000 +6000 +6000 +7E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char54 +ENCODING 54 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3000 +6000 +6000 +7E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char55 +ENCODING 55 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6300 +0300 +0300 +0600 +0C00 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char56 +ENCODING 56 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char57 +ENCODING 57 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3F00 +0300 +0300 +0300 +0600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char58 +ENCODING 58 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char59 +ENCODING 59 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char60 +ENCODING 60 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0600 +0C00 +1800 +3000 +6000 +3000 +1800 +0C00 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char61 +ENCODING 61 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char62 +ENCODING 62 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6000 +3000 +1800 +0C00 +0600 +0C00 +1800 +3000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char63 +ENCODING 63 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +0600 +0C00 +0C00 +0C00 +0000 +0C00 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char64 +ENCODING 64 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3E00 +6300 +6300 +6F00 +6F00 +6F00 +6E00 +6000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char65 +ENCODING 65 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char66 +ENCODING 66 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3300 +3300 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 67 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char68 +ENCODING 68 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char69 +ENCODING 69 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char70 +ENCODING 70 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char71 +ENCODING 71 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6F00 +6300 +6300 +3300 +1D00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char72 +ENCODING 72 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char73 +ENCODING 73 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char74 +ENCODING 74 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0F00 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char75 +ENCODING 75 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7300 +3300 +3300 +3600 +3C00 +3C00 +3600 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 76 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char77 +ENCODING 77 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +E700 +FF00 +FF00 +DB00 +C300 +C300 +C300 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 78 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char79 +ENCODING 79 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char80 +ENCODING 80 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char81 +ENCODING 81 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6B00 +6F00 +3E00 +0600 +0700 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 82 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 83 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 84 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char85 +ENCODING 85 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char86 +ENCODING 86 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char87 +ENCODING 87 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char88 +ENCODING 88 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +6600 +3C00 +1800 +1800 +3C00 +6600 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char89 +ENCODING 89 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 90 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char91 +ENCODING 91 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char92 +ENCODING 92 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4000 +6000 +7000 +3800 +1C00 +0E00 +0700 +0300 +0100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char93 +ENCODING 93 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char94 +ENCODING 94 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char95 +ENCODING 95 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char96 +ENCODING 96 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 97 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char98 +ENCODING 98 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3C00 +3600 +3300 +3300 +3300 +3300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 99 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 100 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char101 +ENCODING 101 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char102 +ENCODING 102 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char103 +ENCODING 103 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char104 +ENCODING 104 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3600 +3B00 +3300 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char105 +ENCODING 105 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char106 +ENCODING 106 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0600 +0000 +0E00 +0600 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char107 +ENCODING 107 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3300 +3600 +3C00 +3C00 +3600 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 108 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char109 +ENCODING 109 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +FF00 +DB00 +DB00 +DB00 +DB00 +DB00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char110 +ENCODING 110 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char111 +ENCODING 111 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char112 +ENCODING 112 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +0000 +ENDCHAR +STARTCHAR char113 +ENCODING 113 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +0600 +0600 +0000 +ENDCHAR +STARTCHAR char114 +ENCODING 114 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 115 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 116 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char117 +ENCODING 117 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char118 +ENCODING 118 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char119 +ENCODING 119 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char120 +ENCODING 120 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +6600 +3C00 +1800 +3C00 +6600 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char121 +ENCODING 121 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +0C00 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 122 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char123 +ENCODING 123 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1800 +1800 +1800 +7000 +1800 +1800 +1800 +1800 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char124 +ENCODING 124 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char125 +ENCODING 125 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +1800 +1800 +1800 +0E00 +1800 +1800 +1800 +1800 +7000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char126 +ENCODING 126 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char127 +ENCODING 127 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 128 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 129 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 130 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 131 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 132 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 133 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 134 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 135 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 136 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 137 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 138 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 139 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 140 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 141 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 142 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 143 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 144 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 145 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 146 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 147 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 148 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 149 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 150 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 151 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 152 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 153 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 154 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 155 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 156 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 157 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 158 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 159 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR U+00A0 NO-BREAK SPACE +ENCODING 160 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+02BD MODIFIER LETTER REVERSED COMMA +ENCODING 161 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +1000 +1000 +0800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+02BC MODIFIER LETTER APOSTROPHE +ENCODING 162 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +0800 +0800 +1000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A3 POUND SIGN +ENCODING 163 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1000 +1000 +1000 +7C00 +1000 +1000 +1000 +3E00 +6100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A6 BROKEN BAR +ENCODING 166 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +0800 +0800 +0800 +0000 +0000 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A7 SECTION SIGN +ENCODING 167 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +4200 +4000 +3C00 +4200 +4200 +3C00 +0200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A8 DIAERESIS +ENCODING 168 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A9 COPYRIGHT SIGN +ENCODING 169 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +4200 +9900 +A500 +A100 +A100 +A500 +9900 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +ENCODING 171 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +1200 +1200 +2400 +2400 +4800 +2400 +2400 +1200 +1200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00AC NOT SIGN +ENCODING 172 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7E00 +0200 +0200 +0200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00AD SOFT HYPHEN +ENCODING 173 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+2015 HORIZONTAL BAR +ENCODING 175 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B0 DEGREE SIGN +ENCODING 176 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +2800 +2800 +1000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B1 PLUS-MINUS SIGN +ENCODING 177 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +0800 +0800 +7F00 +0800 +0800 +0800 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B2 SUPERSCRIPT TWO +ENCODING 178 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +2200 +0200 +1C00 +2000 +2000 +3E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B3 SUPERSCRIPT THREE +ENCODING 179 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +2200 +0200 +1C00 +0200 +2200 +1C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0384 GREEK TONOS +ENCODING 180 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +1000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0385 GREEK DIALYTIKA TONOS +ENCODING 181 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +1000 +4400 +4400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS +ENCODING 182 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +1800 +2400 +2400 +4200 +4200 +7E00 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B7 MIDDLE DOT +ENCODING 183 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS +ENCODING 184 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +7E00 +4000 +4000 +4000 +7C00 +4000 +4000 +4000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0389 GREEK CAPITAL LETTER ETA WITH TONOS +ENCODING 185 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +4200 +4200 +4200 +4200 +7E00 +4200 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+038A GREEK CAPITAL LETTER IOTA WITH TONOS +ENCODING 186 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +3E00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +ENCODING 187 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4800 +4800 +2400 +2400 +1200 +2400 +2400 +4800 +4800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS +ENCODING 188 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00BD VULGAR FRACTION ONE HALF +ENCODING 189 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +2200 +6200 +2400 +2800 +2800 +1400 +1A00 +2200 +4400 +4E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS +ENCODING 190 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +4100 +4100 +2200 +2200 +1400 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS +ENCODING 191 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +3E00 +4100 +4100 +4100 +4100 +2200 +1400 +1400 +7700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +ENCODING 192 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1000 +5400 +4400 +0000 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0391 GREEK CAPITAL LETTER ALPHA +ENCODING 193 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +2400 +2400 +4200 +4200 +7E00 +4200 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0392 GREEK CAPITAL LETTER BETA +ENCODING 194 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +4200 +4200 +4200 +7C00 +4200 +4200 +4200 +4200 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0393 GREEK CAPITAL LETTER GAMMA +ENCODING 195 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0394 GREEK CAPITAL LETTER DELTA +ENCODING 196 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +0800 +1400 +1400 +2200 +2200 +2200 +4100 +4100 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0395 GREEK CAPITAL LETTER EPSILON +ENCODING 197 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +4000 +4000 +4000 +7C00 +4000 +4000 +4000 +4000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0396 GREEK CAPITAL LETTER ZETA +ENCODING 198 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +0200 +0200 +0400 +0800 +1000 +2000 +4000 +4000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0397 GREEK CAPITAL LETTER ETA +ENCODING 199 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +4200 +4200 +4200 +7E00 +4200 +4200 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0398 GREEK CAPITAL LETTER THETA +ENCODING 200 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +4200 +4200 +4200 +7E00 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0399 GREEK CAPITAL LETTER IOTA +ENCODING 201 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039A GREEK CAPITAL LETTER KAPPA +ENCODING 202 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +4400 +4800 +5000 +6000 +6000 +5000 +4800 +4400 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039B GREEK CAPITAL LETTER LAMDA +ENCODING 203 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +0800 +1400 +1400 +2200 +2200 +2200 +4100 +4100 +4100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039C GREEK CAPITAL LETTER MU +ENCODING 204 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +4200 +6600 +6600 +5A00 +5A00 +4200 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039D GREEK CAPITAL LETTER NU +ENCODING 205 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +6200 +6200 +5200 +5200 +4A00 +4A00 +4600 +4600 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039E GREEK CAPITAL LETTER XI +ENCODING 206 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +0000 +0000 +0000 +3C00 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039F GREEK CAPITAL LETTER OMICRON +ENCODING 207 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A0 GREEK CAPITAL LETTER PI +ENCODING 208 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A1 GREEK CAPITAL LETTER RHO +ENCODING 209 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +4200 +4200 +4200 +7C00 +4000 +4000 +4000 +4000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A3 GREEK CAPITAL LETTER SIGMA +ENCODING 211 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +4000 +2000 +1000 +0800 +0800 +1000 +2000 +4000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A4 GREEK CAPITAL LETTER TAU +ENCODING 212 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A5 GREEK CAPITAL LETTER UPSILON +ENCODING 213 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4100 +4100 +2200 +2200 +1400 +0800 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A6 GREEK CAPITAL LETTER PHI +ENCODING 214 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +0800 +3E00 +4900 +4900 +4900 +4900 +3E00 +0800 +1C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A7 GREEK CAPITAL LETTER CHI +ENCODING 215 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +4200 +2400 +2400 +1800 +1800 +2400 +2400 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A8 GREEK CAPITAL LETTER PSI +ENCODING 216 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4900 +4900 +4900 +4900 +4900 +3E00 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A9 GREEK CAPITAL LETTER OMEGA +ENCODING 217 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +4100 +4100 +4100 +4100 +4100 +2200 +1400 +1400 +7700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +ENCODING 218 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +3E00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +ENCODING 219 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +4100 +4100 +2200 +2200 +1400 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AC GREEK SMALL LETTER ALPHA WITH TONOS +ENCODING 220 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +3200 +4A00 +4400 +4400 +4400 +4400 +4A00 +3200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AD GREEK SMALL LETTER EPSILON WITH TONOS +ENCODING 221 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +3E00 +4000 +4000 +3C00 +4000 +4000 +4000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AE GREEK SMALL LETTER ETA WITH TONOS +ENCODING 222 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +5C00 +6200 +4200 +4200 +4200 +4200 +4200 +4200 +0200 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AF GREEK SMALL LETTER IOTA WITH TONOS +ENCODING 223 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +ENCODING 224 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +4400 +4400 +0000 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B1 GREEK SMALL LETTER ALPHA +ENCODING 225 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3200 +4A00 +4400 +4400 +4400 +4400 +4A00 +3200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B2 GREEK SMALL LETTER BETA +ENCODING 226 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +4400 +4400 +4400 +7C00 +4200 +4200 +4200 +6200 +5C00 +4000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B3 GREEK SMALL LETTER GAMMA +ENCODING 227 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3100 +4900 +0A00 +0400 +0800 +0800 +1000 +1000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B4 GREEK SMALL LETTER DELTA +ENCODING 228 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +2000 +2000 +2000 +1800 +2400 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B5 GREEK SMALL LETTER EPSILON +ENCODING 229 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3C00 +4200 +4000 +3C00 +4000 +4000 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B6 GREEK SMALL LETTER ZETA +ENCODING 230 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +2000 +2000 +1C00 +0800 +1000 +2000 +2000 +2000 +2000 +1C00 +0200 +1C00 +0000 +0000 +ENDCHAR +STARTCHAR U+03B7 GREEK SMALL LETTER ETA +ENCODING 231 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +5C00 +6200 +4200 +4200 +4200 +4200 +4200 +4200 +0200 +0200 +0000 +0000 +ENDCHAR +STARTCHAR U+03B8 GREEK SMALL LETTER THETA +ENCODING 232 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +2400 +2400 +4200 +7E00 +4200 +4200 +2400 +2400 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B9 GREEK SMALL LETTER IOTA +ENCODING 233 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BA GREEK SMALL LETTER KAPPA +ENCODING 234 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +2200 +2400 +2800 +3000 +3000 +2800 +2400 +2200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BB GREEK SMALL LETTER LAMDA +ENCODING 235 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +2000 +2000 +1000 +1000 +0800 +1800 +2400 +2400 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BC GREEK SMALL LETTER MU +ENCODING 236 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +4200 +4200 +4200 +4200 +6600 +6600 +5A00 +4200 +4000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BD GREEK SMALL LETTER NU +ENCODING 237 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +4200 +4200 +4200 +4400 +4400 +4800 +5000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BE GREEK SMALL LETTER XI +ENCODING 238 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4000 +4000 +3C00 +4000 +4000 +3C00 +4000 +4000 +3C00 +0200 +0200 +3C00 +0000 +0000 +ENDCHAR +STARTCHAR U+03BF GREEK SMALL LETTER OMICRON +ENCODING 239 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C0 GREEK SMALL LETTER PI +ENCODING 240 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +7E00 +2400 +2400 +2400 +2400 +2400 +2400 +2400 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C1 GREEK SMALL LETTER RHO +ENCODING 241 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +6200 +5C00 +4000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C2 GREEK SMALL LETTER FINAL SIGMA +ENCODING 242 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1E00 +2000 +4000 +4000 +4000 +2000 +1C00 +0200 +0200 +1C00 +0000 +0000 +ENDCHAR +STARTCHAR U+03C3 GREEK SMALL LETTER SIGMA +ENCODING 243 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3F00 +4800 +4400 +4400 +4400 +4400 +4400 +3800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C4 GREEK SMALL LETTER TAU +ENCODING 244 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +7E00 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C5 GREEK SMALL LETTER UPSILON +ENCODING 245 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C6 GREEK SMALL LETTER PHI +ENCODING 246 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3E00 +4900 +4900 +4900 +4900 +4900 +4900 +3E00 +0800 +0800 +0000 +0000 +ENDCHAR +STARTCHAR U+03C7 GREEK SMALL LETTER CHI +ENCODING 247 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +4200 +4200 +2400 +2400 +1800 +1800 +2400 +2400 +4200 +4200 +0000 +0000 +ENDCHAR +STARTCHAR U+03C8 GREEK SMALL LETTER PSI +ENCODING 248 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +4900 +4900 +4900 +4900 +4900 +3E00 +0800 +0800 +0000 +0000 +ENDCHAR +STARTCHAR U+03C9 GREEK SMALL LETTER OMEGA +ENCODING 249 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +2200 +4100 +4100 +4900 +4900 +4900 +4900 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA +ENCODING 250 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +0000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA +ENCODING 251 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +0000 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CC GREEK SMALL LETTER OMICRON WITH TONOS +ENCODING 252 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CD GREEK SMALL LETTER UPSILON WITH TONOS +ENCODING 253 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CE GREEK SMALL LETTER OMEGA WITH TONOS +ENCODING 254 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +0800 +0000 +0000 +2200 +4100 +4100 +4900 +4900 +4900 +4900 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +ENDFONT diff --git a/util/alevt/vtxt-koi8.bdf b/util/alevt/vtxt-koi8.bdf new file mode 100644 index 0000000..a7398b2 --- /dev/null +++ b/util/alevt/vtxt-koi8.bdf @@ -0,0 +1,5906 @@ +STARTFONT 2.1 +FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-1 +SIZE 1 75 75 +FONTBOUNDINGBOX 9 16 0 -4 +STARTPROPERTIES 10 +POINT_SIZE 1 +PIXEL_SIZE 16 +RESOLUTION_X 75 +RESOLUTION_Y 75 +FONT_ASCENT 12 +FONT_DESCENT 4 +AVERAGE_WIDTH 90 +SPACING "C" +_XMBDFED_INFO "Edited with xmbdfed 3.0." +FONT "vtxt" +ENDPROPERTIES +CHARS 256 +STARTCHAR char0 +ENCODING 0 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 1 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 2 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 3 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 4 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 5 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 6 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 7 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 8 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 9 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 10 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 11 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 12 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 13 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 14 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 15 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 16 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 17 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 18 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 19 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 20 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 21 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 22 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 23 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 24 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 25 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 26 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 27 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 28 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 29 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 30 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 31 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char32 +ENCODING 32 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char33 +ENCODING 33 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +3C00 +3C00 +1800 +1800 +1800 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char34 +ENCODING 34 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char35 +ENCODING 35 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +3600 +7F00 +3600 +3600 +3600 +7F00 +3600 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char36 +ENCODING 36 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +0C00 +3E00 +6300 +6100 +6000 +3E00 +0300 +0300 +4300 +6300 +3E00 +0C00 +0C00 +0000 +0000 +ENDCHAR +STARTCHAR char37 +ENCODING 37 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6100 +6300 +0600 +0C00 +1800 +3000 +6300 +4300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char38 +ENCODING 38 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3600 +1C00 +3B00 +6E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char39 +ENCODING 39 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +3000 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char40 +ENCODING 40 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +1800 +3000 +3000 +3000 +3000 +3000 +3000 +1800 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char41 +ENCODING 41 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3000 +1800 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +1800 +3000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char42 +ENCODING 42 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +3C00 +FF00 +3C00 +6600 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char43 +ENCODING 43 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char44 +ENCODING 44 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char45 +ENCODING 45 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char46 +ENCODING 46 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char47 +ENCODING 47 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0100 +0300 +0600 +0C00 +1800 +3000 +6000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char48 +ENCODING 48 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C300 +C300 +DB00 +DB00 +C300 +C300 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char49 +ENCODING 49 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3800 +7800 +1800 +1800 +1800 +1800 +1800 +1800 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char50 +ENCODING 50 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0600 +0C00 +1800 +3000 +6000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char51 +ENCODING 51 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0300 +1E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char52 +ENCODING 52 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0E00 +1E00 +3600 +6600 +7F00 +0600 +0600 +0600 +0F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char53 +ENCODING 53 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6000 +6000 +6000 +7E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char54 +ENCODING 54 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3000 +6000 +6000 +7E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char55 +ENCODING 55 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6300 +0300 +0300 +0600 +0C00 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char56 +ENCODING 56 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char57 +ENCODING 57 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3F00 +0300 +0300 +0300 +0600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char58 +ENCODING 58 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char59 +ENCODING 59 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char60 +ENCODING 60 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0600 +0C00 +1800 +3000 +6000 +3000 +1800 +0C00 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char61 +ENCODING 61 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char62 +ENCODING 62 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6000 +3000 +1800 +0C00 +0600 +0C00 +1800 +3000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char63 +ENCODING 63 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +0600 +0C00 +0C00 +0C00 +0000 +0C00 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char64 +ENCODING 64 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3E00 +6300 +6300 +6F00 +6F00 +6F00 +6E00 +6000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char65 +ENCODING 65 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char66 +ENCODING 66 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3300 +3300 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 67 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char68 +ENCODING 68 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char69 +ENCODING 69 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char70 +ENCODING 70 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char71 +ENCODING 71 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6F00 +6300 +6300 +3300 +1D00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char72 +ENCODING 72 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char73 +ENCODING 73 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char74 +ENCODING 74 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0F00 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char75 +ENCODING 75 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7300 +3300 +3300 +3600 +3C00 +3C00 +3600 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 76 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char77 +ENCODING 77 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +E700 +FF00 +FF00 +DB00 +C300 +C300 +C300 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 78 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char79 +ENCODING 79 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char80 +ENCODING 80 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char81 +ENCODING 81 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6B00 +6F00 +3E00 +0600 +0700 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 82 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 83 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 84 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char85 +ENCODING 85 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char86 +ENCODING 86 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char87 +ENCODING 87 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char88 +ENCODING 88 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +6600 +3C00 +1800 +1800 +3C00 +6600 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char89 +ENCODING 89 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 90 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char91 +ENCODING 91 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char92 +ENCODING 92 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4000 +6000 +7000 +3800 +1C00 +0E00 +0700 +0300 +0100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char93 +ENCODING 93 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char94 +ENCODING 94 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char95 +ENCODING 95 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char96 +ENCODING 96 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 97 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char98 +ENCODING 98 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3C00 +3600 +3300 +3300 +3300 +3300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 99 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 100 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char101 +ENCODING 101 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char102 +ENCODING 102 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char103 +ENCODING 103 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char104 +ENCODING 104 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3600 +3B00 +3300 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char105 +ENCODING 105 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char106 +ENCODING 106 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0600 +0000 +0E00 +0600 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char107 +ENCODING 107 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3300 +3600 +3C00 +3C00 +3600 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 108 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char109 +ENCODING 109 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +FF00 +DB00 +DB00 +DB00 +DB00 +DB00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char110 +ENCODING 110 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char111 +ENCODING 111 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char112 +ENCODING 112 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +7800 +0000 +ENDCHAR +STARTCHAR char113 +ENCODING 113 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +0600 +0F00 +0000 +ENDCHAR +STARTCHAR char114 +ENCODING 114 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 115 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 116 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char117 +ENCODING 117 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char118 +ENCODING 118 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char119 +ENCODING 119 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char120 +ENCODING 120 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +6600 +3C00 +1800 +3C00 +6600 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char121 +ENCODING 121 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 122 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char123 +ENCODING 123 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1800 +1800 +1800 +7000 +1800 +1800 +1800 +1800 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char124 +ENCODING 124 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char125 +ENCODING 125 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +1800 +1800 +1800 +0E00 +1800 +1800 +1800 +1800 +7000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char126 +ENCODING 126 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char127 +ENCODING 127 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 128 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 129 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 130 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 131 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 132 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 133 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 134 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 135 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 136 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 137 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 138 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 139 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 140 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 141 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 142 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 143 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 144 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 145 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 146 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 147 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 148 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 149 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 150 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 151 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 152 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 153 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 154 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 155 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 156 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 157 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 158 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 159 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char160 +ENCODING 160 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +ENDCHAR +STARTCHAR char161 +ENCODING 161 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +1800 +1800 +1800 +3C00 +3C00 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char162 +ENCODING 162 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +1800 +7E00 +C300 +C000 +C000 +C000 +C300 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char163 +ENCODING 163 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char164 +ENCODING 164 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4100 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +6300 +4100 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char165 +ENCODING 165 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +6600 +3C00 +1800 +FF00 +1800 +FF00 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char166 +ENCODING 166 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char167 +ENCODING 167 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3E00 +6300 +3000 +1C00 +3600 +6300 +6300 +3600 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char168 +ENCODING 168 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +7E00 +DB00 +FF00 +BD00 +C300 +E700 +FF00 +7E00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char169 +ENCODING 169 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +4100 +5D00 +5100 +5100 +5D00 +4100 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char170 +ENCODING 170 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +0C00 +3C00 +6400 +3C00 +0000 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 171 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +3000 +7F00 +7F00 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char172 +ENCODING 172 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +7E00 +5A00 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char173 +ENCODING 173 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char174 +ENCODING 174 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +4100 +5D00 +5500 +5900 +5500 +4100 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char175 +ENCODING 175 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char176 +ENCODING 176 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3600 +1C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char177 +ENCODING 177 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char178 +ENCODING 178 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +6C00 +1800 +3000 +6400 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char179 +ENCODING 179 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7C00 +0C00 +1800 +0C00 +6C00 +3800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char180 +ENCODING 180 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char181 +ENCODING 181 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +7E00 +6300 +6000 +C000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char182 +ENCODING 182 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +DB00 +DB00 +DB00 +7B00 +1B00 +1B00 +1B00 +1B00 +1B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char183 +ENCODING 183 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char184 +ENCODING 184 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0080 +0100 +0300 +0600 +0C00 +1C00 +3000 +7F00 +7700 +0E00 +1C00 +1800 +3000 +6000 +8000 +0000 +ENDCHAR +STARTCHAR char185 +ENCODING 185 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +7000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char186 +ENCODING 186 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +6C00 +4400 +6C00 +3800 +0000 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char187 +ENCODING 187 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0C00 +0600 +7F00 +7F00 +0600 +0C00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char188 +ENCODING 188 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6000 +6100 +6300 +6600 +0C00 +1800 +3300 +6700 +4B00 +1F00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char189 +ENCODING 189 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6000 +6100 +6300 +6600 +0C00 +1800 +3000 +6700 +4D80 +0300 +0600 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char190 +ENCODING 190 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7800 +1800 +3900 +1B00 +7600 +0C00 +1800 +3300 +6700 +4B00 +1F00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char191 +ENCODING 191 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +1800 +1800 +3000 +6000 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char238 +ENCODING 192 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +CE00 +DB00 +DB00 +FB00 +DB00 +DB00 +CE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char160 +ENCODING 193 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7800 +0C00 +7C00 +CC00 +CC00 +CC00 +7600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char161 +ENCODING 194 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0200 +0600 +3C00 +6000 +6000 +7C00 +6600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char230 +ENCODING 195 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +FE00 +0600 +0600 +0000 +0000 +ENDCHAR +STARTCHAR char164 +ENCODING 196 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1E00 +3600 +3600 +6600 +6600 +6600 +FF00 +C300 +C300 +0000 +0000 +ENDCHAR +STARTCHAR char165 +ENCODING 197 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7C00 +C600 +FE00 +C000 +C000 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char228 +ENCODING 198 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3C00 +1800 +7E00 +DB00 +DB00 +DB00 +DB00 +7E00 +1800 +1800 +3C00 +0000 +ENDCHAR +STARTCHAR char163 +ENCODING 199 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +3200 +3200 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char229 +ENCODING 200 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +6C00 +3800 +3800 +3800 +6C00 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char168 +ENCODING 201 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +CE00 +D600 +E600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char169 +ENCODING 202 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3800 +3800 +C600 +C600 +CE00 +D600 +E600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char170 +ENCODING 203 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +6C00 +7800 +7800 +6C00 +6600 +E600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 204 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1E00 +3600 +6600 +6600 +6600 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char172 +ENCODING 205 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +EE00 +FE00 +FE00 +D600 +D600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char173 +ENCODING 206 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +C600 +FE00 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char174 +ENCODING 207 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7C00 +C600 +C600 +C600 +C600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char175 +ENCODING 208 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FE00 +C600 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char239 +ENCODING 209 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +CC00 +CC00 +FC00 +6C00 +CC00 +CE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char224 +ENCODING 210 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +DC00 +6600 +6600 +6600 +6600 +6600 +7C00 +6000 +6000 +F000 +0000 +ENDCHAR +STARTCHAR char225 +ENCODING 211 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7C00 +C600 +C000 +C000 +C000 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char226 +ENCODING 212 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +5A00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char227 +ENCODING 213 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +C600 +C600 +C600 +7E00 +0600 +0600 +C600 +7C00 +0000 +ENDCHAR +STARTCHAR char166 +ENCODING 214 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +D600 +D600 +5400 +7C00 +5400 +D600 +D600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char162 +ENCODING 215 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FC00 +6600 +6600 +7C00 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char236 +ENCODING 216 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +6000 +6000 +7C00 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char235 +ENCODING 217 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +C600 +F600 +DE00 +DE00 +F600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char167 +ENCODING 218 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +6600 +0600 +0C00 +0600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char232 +ENCODING 219 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +D600 +D600 +D600 +D600 +D600 +D600 +FE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char237 +ENCODING 220 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +6600 +0600 +1E00 +0600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char233 +ENCODING 221 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +D600 +D600 +D600 +D600 +D600 +D600 +FE00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char231 +ENCODING 222 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +C600 +C600 +7E00 +0600 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char234 +ENCODING 223 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F800 +B000 +3000 +3E00 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char158 +ENCODING 224 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +CE00 +DB00 +DB00 +DB00 +FB00 +DB00 +DB00 +DB00 +DB00 +CE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char128 +ENCODING 225 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3600 +6600 +C600 +C600 +FE00 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char129 +ENCODING 226 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FE00 +6200 +6200 +6000 +7C00 +6600 +6600 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char150 +ENCODING 227 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +FE00 +0600 +0600 +0000 +0000 +ENDCHAR +STARTCHAR char132 +ENCODING 228 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +FF00 +C300 +8100 +0000 +0000 +ENDCHAR +STARTCHAR char133 +ENCODING 229 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FE00 +6600 +6200 +6800 +7800 +6800 +6000 +6200 +6600 +FE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char148 +ENCODING 230 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3C00 +1800 +7E00 +DB00 +DB00 +DB00 +DB00 +DB00 +7E00 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char131 +ENCODING 231 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FE00 +6200 +6200 +6000 +6000 +6000 +6000 +6000 +6000 +F000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char149 +ENCODING 232 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +6C00 +7C00 +3800 +3800 +7C00 +6C00 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char136 +ENCODING 233 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +CE00 +CE00 +D600 +E600 +E600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char137 +ENCODING 234 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3800 +3800 +C600 +C600 +CE00 +CE00 +D600 +E600 +E600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char138 +ENCODING 235 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +E600 +6600 +6C00 +6C00 +7800 +7800 +6C00 +6C00 +6600 +E600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char139 +ENCODING 236 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3600 +6600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char140 +ENCODING 237 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +EE00 +FE00 +FE00 +D600 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char141 +ENCODING 238 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +C600 +C600 +FE00 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char142 +ENCODING 239 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char143 +ENCODING 240 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FE00 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char159 +ENCODING 241 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3F00 +6600 +6600 +6600 +3E00 +3E00 +6600 +6600 +6600 +E700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char144 +ENCODING 242 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FC00 +6600 +6600 +6600 +7C00 +6000 +6000 +6000 +6000 +F000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char145 +ENCODING 243 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C200 +C000 +C000 +C000 +C000 +C200 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char146 +ENCODING 244 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +5A00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char147 +ENCODING 245 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +C600 +C600 +C600 +7E00 +0600 +0600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char134 +ENCODING 246 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +D600 +D600 +5400 +5400 +7C00 +7C00 +5400 +D600 +D600 +D600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char130 +ENCODING 247 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FC00 +6600 +6600 +6600 +7C00 +6600 +6600 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char156 +ENCODING 248 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +F000 +6000 +6000 +6000 +7C00 +6600 +6600 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char155 +ENCODING 249 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +F300 +DB00 +DB00 +DB00 +DB00 +F300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char135 +ENCODING 250 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +C600 +0600 +0600 +3C00 +0600 +0600 +0600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char152 +ENCODING 251 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char157 +ENCODING 252 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +C600 +0600 +2600 +3E00 +2600 +0600 +0600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char153 +ENCODING 253 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +FF00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char151 +ENCODING 254 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +C600 +C600 +C600 +7E00 +0600 +0600 +0600 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char154 +ENCODING 255 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +F800 +B000 +3000 +3000 +3C00 +3600 +3600 +3600 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +ENDFONT diff --git a/util/alevt/vtxt-latin-1.bdf b/util/alevt/vtxt-latin-1.bdf new file mode 100644 index 0000000..2f1a11b --- /dev/null +++ b/util/alevt/vtxt-latin-1.bdf @@ -0,0 +1,5906 @@ +STARTFONT 2.1 +FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-1 +SIZE 1 75 75 +FONTBOUNDINGBOX 9 16 0 -4 +STARTPROPERTIES 10 +POINT_SIZE 1 +PIXEL_SIZE 16 +RESOLUTION_X 75 +RESOLUTION_Y 75 +FONT_ASCENT 12 +FONT_DESCENT 4 +AVERAGE_WIDTH 90 +SPACING "C" +_XMBDFED_INFO "Edited with xmbdfed 2.4." +FONT "vtxt" +ENDPROPERTIES +CHARS 256 +STARTCHAR char0 +ENCODING 0 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 1 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 2 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 3 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 4 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 5 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 6 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 7 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 8 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 9 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 10 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 11 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 12 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 13 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 14 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 15 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 16 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 17 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 18 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 19 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 20 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 21 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 22 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 23 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 24 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 25 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 26 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 27 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 28 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 29 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 30 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 31 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char32 +ENCODING 32 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char33 +ENCODING 33 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +3C00 +3C00 +1800 +1800 +1800 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char34 +ENCODING 34 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char35 +ENCODING 35 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +3600 +7F00 +3600 +3600 +3600 +7F00 +3600 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char36 +ENCODING 36 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +0C00 +3E00 +6300 +6100 +6000 +3E00 +0300 +0300 +4300 +6300 +3E00 +0C00 +0C00 +0000 +0000 +ENDCHAR +STARTCHAR char37 +ENCODING 37 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6100 +6300 +0600 +0C00 +1800 +3000 +6300 +4300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char38 +ENCODING 38 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3600 +1C00 +3B00 +6E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char39 +ENCODING 39 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +3000 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char40 +ENCODING 40 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +1800 +3000 +3000 +3000 +3000 +3000 +3000 +1800 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char41 +ENCODING 41 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3000 +1800 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +1800 +3000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char42 +ENCODING 42 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +3C00 +FF00 +3C00 +6600 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char43 +ENCODING 43 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char44 +ENCODING 44 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char45 +ENCODING 45 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char46 +ENCODING 46 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char47 +ENCODING 47 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0100 +0300 +0600 +0C00 +1800 +3000 +6000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char48 +ENCODING 48 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C300 +C300 +DB00 +DB00 +C300 +C300 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char49 +ENCODING 49 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3800 +7800 +1800 +1800 +1800 +1800 +1800 +1800 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char50 +ENCODING 50 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0600 +0C00 +1800 +3000 +6000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char51 +ENCODING 51 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0300 +1E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char52 +ENCODING 52 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0E00 +1E00 +3600 +6600 +7F00 +0600 +0600 +0600 +0F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char53 +ENCODING 53 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6000 +6000 +6000 +7E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char54 +ENCODING 54 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3000 +6000 +6000 +7E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char55 +ENCODING 55 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6300 +0300 +0300 +0600 +0C00 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char56 +ENCODING 56 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char57 +ENCODING 57 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3F00 +0300 +0300 +0300 +0600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char58 +ENCODING 58 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char59 +ENCODING 59 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char60 +ENCODING 60 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0600 +0C00 +1800 +3000 +6000 +3000 +1800 +0C00 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char61 +ENCODING 61 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char62 +ENCODING 62 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6000 +3000 +1800 +0C00 +0600 +0C00 +1800 +3000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char63 +ENCODING 63 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +0600 +0C00 +0C00 +0C00 +0000 +0C00 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char64 +ENCODING 64 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3E00 +6300 +6300 +6F00 +6F00 +6F00 +6E00 +6000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char65 +ENCODING 65 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char66 +ENCODING 66 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3300 +3300 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 67 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char68 +ENCODING 68 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char69 +ENCODING 69 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char70 +ENCODING 70 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char71 +ENCODING 71 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6F00 +6300 +6300 +3300 +1D00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char72 +ENCODING 72 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char73 +ENCODING 73 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char74 +ENCODING 74 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0F00 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char75 +ENCODING 75 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7300 +3300 +3300 +3600 +3C00 +3C00 +3600 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 76 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char77 +ENCODING 77 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +E700 +FF00 +FF00 +DB00 +C300 +C300 +C300 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 78 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char79 +ENCODING 79 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char80 +ENCODING 80 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char81 +ENCODING 81 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6B00 +6F00 +3E00 +0600 +0700 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 82 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 83 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 84 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char85 +ENCODING 85 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char86 +ENCODING 86 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char87 +ENCODING 87 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char88 +ENCODING 88 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +6600 +3C00 +1800 +1800 +3C00 +6600 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char89 +ENCODING 89 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 90 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char91 +ENCODING 91 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char92 +ENCODING 92 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4000 +6000 +7000 +3800 +1C00 +0E00 +0700 +0300 +0100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char93 +ENCODING 93 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char94 +ENCODING 94 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char95 +ENCODING 95 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char96 +ENCODING 96 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 97 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char98 +ENCODING 98 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3C00 +3600 +3300 +3300 +3300 +3300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 99 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 100 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char101 +ENCODING 101 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char102 +ENCODING 102 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char103 +ENCODING 103 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char104 +ENCODING 104 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3600 +3B00 +3300 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char105 +ENCODING 105 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char106 +ENCODING 106 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0600 +0000 +0E00 +0600 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char107 +ENCODING 107 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3300 +3600 +3C00 +3C00 +3600 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 108 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char109 +ENCODING 109 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +FF00 +DB00 +DB00 +DB00 +DB00 +DB00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char110 +ENCODING 110 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char111 +ENCODING 111 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char112 +ENCODING 112 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +7800 +0000 +ENDCHAR +STARTCHAR char113 +ENCODING 113 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +0600 +0F00 +0000 +ENDCHAR +STARTCHAR char114 +ENCODING 114 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 115 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 116 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char117 +ENCODING 117 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char118 +ENCODING 118 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char119 +ENCODING 119 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char120 +ENCODING 120 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +6600 +3C00 +1800 +3C00 +6600 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char121 +ENCODING 121 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 122 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char123 +ENCODING 123 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1800 +1800 +1800 +7000 +1800 +1800 +1800 +1800 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char124 +ENCODING 124 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char125 +ENCODING 125 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +1800 +1800 +1800 +0E00 +1800 +1800 +1800 +1800 +7000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char126 +ENCODING 126 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char127 +ENCODING 127 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 128 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 129 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 130 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 131 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 132 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 133 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 134 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 135 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 136 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 137 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 138 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 139 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 140 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 141 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 142 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 143 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 144 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 145 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 146 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 147 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 148 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 149 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 150 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 151 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 152 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 153 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 154 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 155 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 156 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 157 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 158 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 159 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char160 +ENCODING 160 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +ENDCHAR +STARTCHAR char161 +ENCODING 161 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +1800 +1800 +1800 +3C00 +3C00 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char162 +ENCODING 162 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +1800 +7E00 +C300 +C000 +C000 +C000 +C300 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char163 +ENCODING 163 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char164 +ENCODING 164 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4100 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +6300 +4100 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char165 +ENCODING 165 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +6600 +3C00 +1800 +FF00 +1800 +FF00 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char166 +ENCODING 166 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char167 +ENCODING 167 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3E00 +6300 +3000 +1C00 +3600 +6300 +6300 +3600 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char168 +ENCODING 168 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +7E00 +DB00 +FF00 +BD00 +C300 +E700 +FF00 +7E00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char169 +ENCODING 169 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +4100 +5D00 +5100 +5100 +5D00 +4100 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char170 +ENCODING 170 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +0C00 +3C00 +6400 +3C00 +0000 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 171 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +3000 +7F00 +7F00 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char172 +ENCODING 172 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +7E00 +5A00 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char173 +ENCODING 173 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char174 +ENCODING 174 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +4100 +5D00 +5500 +5900 +5500 +4100 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char175 +ENCODING 175 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char176 +ENCODING 176 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3600 +1C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char177 +ENCODING 177 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char178 +ENCODING 178 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +6C00 +1800 +3000 +6400 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char179 +ENCODING 179 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7C00 +0C00 +1800 +0C00 +6C00 +3800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char180 +ENCODING 180 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char181 +ENCODING 181 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +7E00 +6300 +6000 +C000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char182 +ENCODING 182 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +DB00 +DB00 +DB00 +7B00 +1B00 +1B00 +1B00 +1B00 +1B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char183 +ENCODING 183 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char184 +ENCODING 184 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0080 +0100 +0300 +0600 +0C00 +1C00 +3000 +7F00 +7700 +0E00 +1C00 +1800 +3000 +6000 +8000 +0000 +ENDCHAR +STARTCHAR char185 +ENCODING 185 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +7000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char186 +ENCODING 186 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +6C00 +4400 +6C00 +3800 +0000 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char187 +ENCODING 187 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0C00 +0600 +7F00 +7F00 +0600 +0C00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char188 +ENCODING 188 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6000 +6100 +6300 +6600 +0C00 +1800 +3300 +6700 +4B00 +1F00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char189 +ENCODING 189 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6000 +6100 +6300 +6600 +0C00 +1800 +3000 +6700 +4D80 +0300 +0600 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char190 +ENCODING 190 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7800 +1800 +3900 +1B00 +7600 +0C00 +1800 +3300 +6700 +4B00 +1F00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char191 +ENCODING 191 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +1800 +1800 +3000 +6000 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char192 +ENCODING 192 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +0C00 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char193 +ENCODING 193 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char194 +ENCODING 194 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char195 +ENCODING 195 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3B00 +6E00 +0000 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char196 +ENCODING 196 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char197 +ENCODING 197 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +1400 +1C00 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char198 +ENCODING 198 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1F00 +3600 +6600 +6600 +7F00 +6600 +6600 +6600 +6600 +6700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char199 +ENCODING 199 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6100 +3300 +1E00 +0600 +0300 +3E00 +0000 +ENDCHAR +STARTCHAR char200 +ENCODING 200 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +0C00 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char201 +ENCODING 201 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char202 +ENCODING 202 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char203 +ENCODING 203 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char204 +ENCODING 204 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +1800 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char205 +ENCODING 205 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char206 +ENCODING 206 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3C00 +6600 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char207 +ENCODING 207 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char208 +ENCODING 208 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3600 +3300 +3300 +7B00 +7B00 +3300 +3300 +3600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char209 +ENCODING 209 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3B00 +6E00 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char210 +ENCODING 210 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +1800 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char211 +ENCODING 211 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char212 +ENCODING 212 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char213 +ENCODING 213 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3B00 +6E00 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char214 +ENCODING 214 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char215 +ENCODING 215 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6300 +3600 +1C00 +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char216 +ENCODING 216 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0100 +0300 +3E00 +6700 +6700 +6F00 +6B00 +6B00 +7B00 +7300 +7300 +3E00 +6000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR char217 +ENCODING 217 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +1800 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char218 +ENCODING 218 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char219 +ENCODING 219 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +1400 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char220 +ENCODING 220 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char221 +ENCODING 221 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char222 +ENCODING 222 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +7800 +3000 +3E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char223 +ENCODING 223 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +6300 +6700 +6E00 +6C00 +6600 +6300 +6B00 +6E00 +6000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR char224 +ENCODING 224 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +1800 +0C00 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char225 +ENCODING 225 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char226 +ENCODING 226 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char227 +ENCODING 227 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char228 +ENCODING 228 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char229 +ENCODING 229 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +1C00 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char230 +ENCODING 230 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +1B00 +7E00 +D800 +DC00 +7700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char231 +ENCODING 231 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0C00 +0600 +3C00 +0000 +ENDCHAR +STARTCHAR char232 +ENCODING 232 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +1800 +0C00 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char233 +ENCODING 233 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0600 +0C00 +1800 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char234 +ENCODING 234 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char235 +ENCODING 235 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char236 +ENCODING 236 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +3000 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char237 +ENCODING 237 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0600 +0C00 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char238 +ENCODING 238 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +3C00 +6600 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char239 +ENCODING 239 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 240 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0F00 +0600 +3E00 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char241 +ENCODING 241 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char242 +ENCODING 242 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +1800 +0C00 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char243 +ENCODING 243 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char244 +ENCODING 244 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char245 +ENCODING 245 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char246 +ENCODING 246 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char247 +ENCODING 247 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +7E00 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char248 +ENCODING 248 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0100 +0300 +3E00 +6700 +6F00 +6B00 +7B00 +7300 +3E00 +6000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR char249 +ENCODING 249 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +1800 +0C00 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char250 +ENCODING 250 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char251 +ENCODING 251 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +3C00 +6600 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char252 +ENCODING 252 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char253 +ENCODING 253 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char254 +ENCODING 254 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7800 +3000 +3E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +7800 +0000 +ENDCHAR +STARTCHAR char255 +ENCODING 255 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +ENDFONT diff --git a/util/alevt/vtxt-latin-2.bdf b/util/alevt/vtxt-latin-2.bdf new file mode 100644 index 0000000..6505c6e --- /dev/null +++ b/util/alevt/vtxt-latin-2.bdf @@ -0,0 +1,5906 @@ +STARTFONT 2.1 +FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-2 +SIZE 1 75 75 +FONTBOUNDINGBOX 9 16 0 -4 +STARTPROPERTIES 10 +POINT_SIZE 1 +PIXEL_SIZE 16 +RESOLUTION_X 75 +RESOLUTION_Y 75 +FONT_ASCENT 12 +FONT_DESCENT 4 +AVERAGE_WIDTH 90 +SPACING "C" +_XMBDFED_INFO "Edited with xmbdfed 3.3." +FONT "vtxt" +ENDPROPERTIES +CHARS 256 +STARTCHAR char0 +ENCODING 0 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 1 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 2 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 3 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 4 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 5 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 6 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 7 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 8 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 9 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 10 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 11 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 12 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 13 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 14 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 15 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 16 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 17 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 18 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 19 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 20 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 21 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 22 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 23 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 24 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 25 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 26 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 27 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 28 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 29 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 30 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 31 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char32 +ENCODING 32 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char33 +ENCODING 33 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +3C00 +3C00 +1800 +1800 +1800 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char34 +ENCODING 34 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char35 +ENCODING 35 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +3600 +7F00 +3600 +3600 +3600 +7F00 +3600 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char36 +ENCODING 36 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +0C00 +3E00 +6300 +6100 +6000 +3E00 +0300 +0300 +4300 +6300 +3E00 +0C00 +0C00 +0000 +0000 +ENDCHAR +STARTCHAR char37 +ENCODING 37 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6100 +6300 +0600 +0C00 +1800 +3000 +6300 +4300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char38 +ENCODING 38 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3600 +1C00 +3B00 +6E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char39 +ENCODING 39 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +3000 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char40 +ENCODING 40 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +1800 +3000 +3000 +3000 +3000 +3000 +3000 +1800 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char41 +ENCODING 41 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3000 +1800 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +1800 +3000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char42 +ENCODING 42 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +3C00 +FF00 +3C00 +6600 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char43 +ENCODING 43 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char44 +ENCODING 44 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char45 +ENCODING 45 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char46 +ENCODING 46 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char47 +ENCODING 47 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0100 +0300 +0600 +0C00 +1800 +3000 +6000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char48 +ENCODING 48 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C300 +C300 +DB00 +DB00 +C300 +C300 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char49 +ENCODING 49 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3800 +7800 +1800 +1800 +1800 +1800 +1800 +1800 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char50 +ENCODING 50 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0600 +0C00 +1800 +3000 +6000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char51 +ENCODING 51 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0300 +1E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char52 +ENCODING 52 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0E00 +1E00 +3600 +6600 +7F00 +0600 +0600 +0600 +0F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char53 +ENCODING 53 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6000 +6000 +6000 +7E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char54 +ENCODING 54 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3000 +6000 +6000 +7E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char55 +ENCODING 55 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6300 +0300 +0300 +0600 +0C00 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char56 +ENCODING 56 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char57 +ENCODING 57 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3F00 +0300 +0300 +0300 +0600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char58 +ENCODING 58 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char59 +ENCODING 59 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char60 +ENCODING 60 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0600 +0C00 +1800 +3000 +6000 +3000 +1800 +0C00 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char61 +ENCODING 61 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char62 +ENCODING 62 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6000 +3000 +1800 +0C00 +0600 +0C00 +1800 +3000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char63 +ENCODING 63 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +0600 +0C00 +0C00 +0C00 +0000 +0C00 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char64 +ENCODING 64 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3E00 +6300 +6300 +6F00 +6F00 +6F00 +6E00 +6000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char65 +ENCODING 65 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char66 +ENCODING 66 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3300 +3300 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 67 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char68 +ENCODING 68 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char69 +ENCODING 69 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char70 +ENCODING 70 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char71 +ENCODING 71 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6F00 +6300 +6300 +3300 +1D00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char72 +ENCODING 72 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char73 +ENCODING 73 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char74 +ENCODING 74 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0F00 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char75 +ENCODING 75 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7300 +3300 +3300 +3600 +3C00 +3C00 +3600 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 76 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char77 +ENCODING 77 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +E700 +FF00 +FF00 +DB00 +C300 +C300 +C300 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 78 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char79 +ENCODING 79 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char80 +ENCODING 80 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char81 +ENCODING 81 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6B00 +6F00 +3E00 +0600 +0700 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 82 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 83 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 84 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char85 +ENCODING 85 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char86 +ENCODING 86 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char87 +ENCODING 87 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char88 +ENCODING 88 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +6600 +3C00 +1800 +1800 +3C00 +6600 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char89 +ENCODING 89 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 90 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char91 +ENCODING 91 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char92 +ENCODING 92 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4000 +6000 +7000 +3800 +1C00 +0E00 +0700 +0300 +0100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char93 +ENCODING 93 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char94 +ENCODING 94 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char95 +ENCODING 95 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char96 +ENCODING 96 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 97 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char98 +ENCODING 98 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3C00 +3600 +3300 +3300 +3300 +3300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 99 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 100 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char101 +ENCODING 101 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char102 +ENCODING 102 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char103 +ENCODING 103 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char104 +ENCODING 104 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3600 +3B00 +3300 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char105 +ENCODING 105 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char106 +ENCODING 106 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0600 +0000 +0E00 +0600 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char107 +ENCODING 107 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3300 +3600 +3C00 +3C00 +3600 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 108 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char109 +ENCODING 109 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +FF00 +DB00 +DB00 +DB00 +DB00 +DB00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char110 +ENCODING 110 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char111 +ENCODING 111 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char112 +ENCODING 112 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +7800 +0000 +ENDCHAR +STARTCHAR char113 +ENCODING 113 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +0600 +0F00 +0000 +ENDCHAR +STARTCHAR char114 +ENCODING 114 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 115 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 116 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char117 +ENCODING 117 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char118 +ENCODING 118 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char119 +ENCODING 119 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char120 +ENCODING 120 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +6600 +3C00 +1800 +3C00 +6600 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char121 +ENCODING 121 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 122 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char123 +ENCODING 123 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1800 +1800 +1800 +7000 +1800 +1800 +1800 +1800 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char124 +ENCODING 124 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char125 +ENCODING 125 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +1800 +1800 +1800 +0E00 +1800 +1800 +1800 +1800 +7000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char126 +ENCODING 126 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char127 +ENCODING 127 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 128 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 129 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 130 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 131 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 132 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 133 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 134 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 135 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 136 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 137 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 138 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 139 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 140 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 141 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 142 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 143 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 144 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 145 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 146 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 147 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 148 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 149 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 150 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 151 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 152 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 153 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 154 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 155 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 156 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 157 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 158 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 159 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char160 +ENCODING 160 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +ENDCHAR +STARTCHAR char65 +ENCODING 161 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0600 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char162 +ENCODING 162 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +3C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 163 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3C00 +3800 +3000 +7000 +F100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char164 +ENCODING 164 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4100 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +6300 +4100 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 165 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7B00 +3300 +3600 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 166 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char167 +ENCODING 167 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3E00 +6300 +3000 +1C00 +3600 +6300 +6300 +3600 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char196 +ENCODING 168 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char169 +ENCODING 169 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 170 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0600 +0300 +3E00 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 171 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 172 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char173 +ENCODING 173 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char174 +ENCODING 174 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 175 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +7E00 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char176 +ENCODING 176 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3600 +1C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 177 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0600 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 178 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0C00 +1800 +0E00 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 179 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1E00 +1C00 +1800 +3800 +7800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char180 +ENCODING 180 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 181 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3980 +1980 +1B00 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 182 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 183 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char184 +ENCODING 184 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0080 +0100 +0300 +0600 +0C00 +1C00 +3000 +7F00 +7700 +0E00 +1C00 +1800 +3000 +6000 +8000 +0000 +ENDCHAR +STARTCHAR char185 +ENCODING 185 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +1C00 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 186 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0300 +1E00 +0000 +0000 +ENDCHAR +STARTCHAR char187 +ENCODING 187 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0180 +0980 +1B00 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 188 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char189 +ENCODING 189 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3300 +6600 +CC00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char190 +ENCODING 190 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6600 +3C00 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 191 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +0C00 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 192 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char193 +ENCODING 193 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0300 +0600 +0000 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char194 +ENCODING 194 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char195 +ENCODING 195 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +3E00 +0000 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char196 +ENCODING 196 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 197 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +7C00 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 198 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char199 +ENCODING 199 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6100 +3300 +1E00 +0600 +0300 +3E00 +0000 +ENDCHAR +STARTCHAR char200 +ENCODING 200 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3300 +1E00 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char201 +ENCODING 201 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char202 +ENCODING 202 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0C00 +0600 +0000 +0000 +ENDCHAR +STARTCHAR char203 +ENCODING 203 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char204 +ENCODING 204 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3300 +1E00 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char205 +ENCODING 205 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char206 +ENCODING 206 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3C00 +6600 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char207 +ENCODING 207 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char208 +ENCODING 208 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3600 +3300 +3300 +7B00 +7B00 +3300 +3300 +3600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 209 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char210 +ENCODING 210 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char211 +ENCODING 211 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char212 +ENCODING 212 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char213 +ENCODING 213 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3300 +6600 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char214 +ENCODING 214 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char215 +ENCODING 215 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6300 +3600 +1C00 +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char216 +ENCODING 216 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char217 +ENCODING 217 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1400 +6B00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char218 +ENCODING 218 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char219 +ENCODING 219 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1B00 +3600 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char220 +ENCODING 220 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char221 +ENCODING 221 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 222 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0600 +3C00 +0000 +0000 +ENDCHAR +STARTCHAR char223 +ENCODING 223 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +6300 +6700 +6E00 +6C00 +6600 +6300 +6B00 +6E00 +6000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR char224 +ENCODING 224 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0C00 +1800 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char225 +ENCODING 225 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char226 +ENCODING 226 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char227 +ENCODING 227 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +3C00 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char228 +ENCODING 228 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 229 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 230 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char231 +ENCODING 231 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0C00 +0600 +3C00 +0000 +ENDCHAR +STARTCHAR char232 +ENCODING 232 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6600 +3C00 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char233 +ENCODING 233 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0600 +0C00 +1800 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char234 +ENCODING 234 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +1800 +0E00 +0000 +0000 +ENDCHAR +STARTCHAR char235 +ENCODING 235 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char236 +ENCODING 236 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3300 +1E00 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char237 +ENCODING 237 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0600 +0C00 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char238 +ENCODING 238 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +3C00 +6600 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char239 +ENCODING 239 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6E00 +3600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 240 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0F00 +0600 +3E00 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char241 +ENCODING 241 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char242 +ENCODING 242 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3300 +1E00 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char243 +ENCODING 243 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char244 +ENCODING 244 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char245 +ENCODING 245 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3300 +6600 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char246 +ENCODING 246 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char247 +ENCODING 247 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +7E00 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char248 +ENCODING 248 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3300 +1E00 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char249 +ENCODING 249 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +2400 +2400 +1800 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char250 +ENCODING 250 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char251 +ENCODING 251 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3300 +6600 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char252 +ENCODING 252 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char253 +ENCODING 253 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 254 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0300 +1E00 +0000 +0000 +ENDCHAR +STARTCHAR char255 +ENCODING 255 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +ENDFONT diff --git a/util/alevt/xio.c b/util/alevt/xio.c new file mode 100644 index 0000000..4c0bca2 --- /dev/null +++ b/util/alevt/xio.c @@ -0,0 +1,1156 @@ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <signal.h> +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xatom.h> +#define XK_MISCELLANY +#define XK_LATIN1 +#include <X11/keysymdef.h> +#include <sys/time.h> +#include "vt.h" +#include "misc.h" +#include "dllist.h" +#include "xio.h" +#include "fdset.h" +#include "lang.h" +#include "icon.xbm" +#include "font.h" + +#define WW (W*CW) /* pixel width of window */ +#define WH (H*CH) /* pixel hegiht of window */ +#define NO_SEL 999 /* sel_y1 value if no selection */ +#define SEL_MIN_TIME 500 /* anything shorter is a click */ + +static struct dl_head dpys[1]; /* list of all displays */ +static void xio_timer(void *data, int fd); +static void handle_event(struct xio *xio, int fd); + + +static int timer_init(int argc, char **argv) +{ + int p[2], timer_pid, i; + + if (pipe(p) == -1) + return -1; + + signal(SIGPIPE, SIG_DFL); + timer_pid = fork(); + if (timer_pid == -1) + return -1; + if (timer_pid > 0) + { + fdset_add_fd(fds, p[0], xio_timer, 0); + close(p[1]); + return 0; + } + + close(p[0]); + for (i = 0; i < 32; ++i) + if (p[1] != i) + close(i); + memcpy(argv[0], "Timer", 6); + + for (;;) + { + usleep(300000); + write(p[1], "*", 1); + } +} + + +static int local_init(int argc, char **argv) +{ + static int inited = 0; + + if (inited) + return 0; + + if (timer_init(argc, argv) == -1) + return -1; + + dl_init(dpys); + + inited = 1; + return 0; +} + + +static int get_colors(struct xio *xio) +{ + int i; + XColor c; + + static short rgb[][3] = + { + { 0x0000,0x0000,0x0000 }, + { 0xffff,0x0000,0x0000 }, + { 0x0000,0xffff,0x0000 }, + { 0xffff,0xffff,0x0000 }, + { 0x0000,0x0000,0xffff }, + { 0xffff,0x0000,0xffff }, + { 0x0000,0xffff,0xffff }, + { 0xffff,0xffff,0xffff }, + { 0x7fff,0x7fff,0x7fff }, + { 0x7fff,0x0000,0x0000 }, + { 0x0000,0x7fff,0x0000 }, + { 0x7fff,0x7fff,0x0000 }, + { 0x0000,0x0000,0x7fff }, + { 0x7fff,0x0000,0x7fff }, + { 0x0000,0x7fff,0x7fff }, + { 0x3fff,0x3fff,0x3fff }, + }; + + for (i = 0; i < 16; ++i) + { + c.red = rgb[i][0]; + c.green = rgb[i][1]; + c.blue = rgb[i][2]; + if (XAllocColor(xio->dpy, xio->cmap, &c) == 0) + return -1; + xio->color[i] = c.pixel; + } + return 0; +} + + +static int get_fonts(struct xio *xio) +{ + GC gc; + int i; + unsigned char *font_bits; + switch(latin1) { + case LATIN1: font_bits=font1_bits; break; + case LATIN2: font_bits=font2_bits; break; + case KOI8: font_bits=font3_bits; break; + case GREEK: font_bits=font4_bits; break; + default: font_bits=font1_bits; break; + } + + xio->font[0] = XCreateBitmapFromData(xio->dpy, xio->root, + font_bits, font_width, font_height); + xio->font[1] = XCreatePixmap(xio->dpy, xio->root, + font_width, font_height*2, 1); + gc = XCreateGC(xio->dpy, xio->font[0], 0, 0); + for (i = 0; i < font_height; ++i) + { + XCopyArea(xio->dpy, xio->font[0], xio->font[1], gc, 0, i, + font_width, 1, 0, i*2); + XCopyArea(xio->dpy, xio->font[0], xio->font[1], gc, 0, i, + font_width, 1, 0, i*2+1); + } + XFreeGC(xio->dpy, gc); + return 0; +} + + +static void xlib_conn_watch(Display *dpy, void *fds, int fd, int open_flag, void *data) +{ + if (open_flag) + fdset_add_fd(fds, fd, XProcessInternalConnection, dpy); + else + fdset_del_fd(fds, fd); +} + + +struct xio * xio_open_dpy(char *dpy, int argc, char **argv) +{ + XClassHint classhint[1]; + struct xio *xio; + + if (local_init(argc, argv) == -1) + goto fail1; + + if (not(xio = malloc(sizeof(*xio)))) + goto fail1; + + if (not(xio->dpy = XOpenDisplay(dpy))) + goto fail2; + + xio->fd = ConnectionNumber(xio->dpy); + xio->argc = argc; + xio->argv = argv; + dl_init(xio->windows); + xio->screen = DefaultScreen(xio->dpy); + xio->depth = DefaultDepth(xio->dpy, xio->screen); + xio->width = DisplayWidth(xio->dpy, xio->screen); + xio->height = DisplayHeight(xio->dpy, xio->screen); + xio->root = DefaultRootWindow(xio->dpy); + xio->cmap = DefaultColormap(xio->dpy, xio->screen); + xio->xa_del_win = XInternAtom(xio->dpy, "WM_DELETE_WINDOW", False); + xio->xa_targets = XInternAtom(xio->dpy, "TARGETS", False); + xio->xa_timestamp = XInternAtom(xio->dpy, "TIMESTAMP", False); + xio->xa_multiple = XInternAtom(xio->dpy, "MULTIPLE", False); + xio->xa_text = XInternAtom(xio->dpy, "TEXT", False); + + if (get_colors(xio) == -1) + goto fail3; + + if (get_fonts(xio) == -1) + goto fail3; + + if (fdset_add_fd(fds, xio->fd, handle_event, xio) == -1) + goto fail3; + + XAddConnectionWatch(xio->dpy, PTR xlib_conn_watch, PTR fds); + + xio->icon = XCreateBitmapFromData(xio->dpy, xio->root, + icon_bits, icon_width, icon_height); + + xio->group_leader = XCreateSimpleWindow(xio->dpy, xio->root, + 0, 0, 1, 1, 0, 0, 0); + XSetCommand(xio->dpy, xio->group_leader, xio->argv, xio->argc); + classhint->res_name = "VTLeader"; + classhint->res_class = "AleVT"; + XSetClassHint(xio->dpy, xio->group_leader, classhint); + + dl_insert_first(dpys, xio->node); + return xio; + +fail4: + fdset_del_fd(fds, xio->fd); +fail3: + XCloseDisplay(xio->dpy); +fail2: + free(xio); +fail1: + return 0; +} + + +static void set_user_geometry(struct xio_win *xw, char *geom, XSizeHints *sh, int bwidth) +{ + static int gravs[] = { NorthWestGravity, NorthEastGravity, + SouthWestGravity, SouthEastGravity }; + int f, g = 0; + + f = XParseGeometry(geom, &sh->x, &sh->y, &sh->width, &sh->height); + + if (f & WidthValue) + sh->width = sh->base_width + sh->width * sh->width_inc; + if (f & HeightValue) + sh->height = sh->base_height + sh->height * sh->height_inc; + if (f & XNegative) + g+=1, sh->x = xw->xio->width + sh->x - sh->width - bwidth; + if (f & YNegative) + g+=2, sh->y = xw->xio->height + sh->y - sh->height - bwidth; + + sh->width = bound(sh->min_width, sh->width, sh->max_width); + sh->height = bound(sh->min_height, sh->height, sh->max_height); + + if (f & (WidthValue | HeightValue)) + sh->flags |= USSize; + if (f & (XValue | YValue)) + sh->flags |= USPosition | PWinGravity; + + sh->win_gravity = gravs[g]; +} + + +struct xio_win * xio_open_win(struct xio *xio, char *geom) +{ + struct xio_win *xw; + XSetWindowAttributes attr; + XGCValues gcval; + XSizeHints sizehint[1]; + XClassHint classhint[1]; + XWMHints wmhint[1]; + + if (not(xw = malloc(sizeof(*xw)))) + goto fail1; + + xw->xio = xio; + + sizehint->flags = PSize | PBaseSize | PMinSize | PMaxSize | PResizeInc; + sizehint->x = sizehint->y = 0; + sizehint->width_inc = CW; + sizehint->height_inc = CH; + sizehint->base_width = 0; + sizehint->base_height = 0; + sizehint->min_width = 11*CW; + sizehint->min_height = 1*CH; + sizehint->max_width = sizehint->width = WW + CW; + sizehint->max_height = sizehint->height = WH; + set_user_geometry(xw, geom, sizehint, 1); + + attr.background_pixel = xio->color[0]; + attr.event_mask = KeyPressMask | + ButtonPressMask|ButtonReleaseMask|Button1MotionMask | + ExposureMask; + xw->win = XCreateWindow(xio->dpy, xio->root, + sizehint->x, sizehint->y, sizehint->width, sizehint->height, 1, + CopyFromParent, CopyFromParent, CopyFromParent, + CWBackPixel|CWEventMask, &attr); + + classhint->res_name = "VTPage"; + classhint->res_class = "AleVT"; + + wmhint->flags = InputHint | StateHint | WindowGroupHint | IconPixmapHint; + wmhint->input = True; + wmhint->initial_state = NormalState; //IconicState; + wmhint->window_group = xio->group_leader; + wmhint->icon_pixmap = xio->icon; + + XSetWMProperties(xio->dpy, xw->win, 0,0, 0,0, sizehint, wmhint, classhint); + XSetWMProtocols(xio->dpy, xw->win, &xio->xa_del_win, 1); + + xw->title[0] = 0; + xio_title(xw, "AleVT"); // will be reset pretty soon + + gcval.graphics_exposures = False; + xw->gc = XCreateGC(xio->dpy, xw->win, GCGraphicsExposures, &gcval); + + xw->tstamp = CurrentTime; + xw->fg = xw->bg = -1; /* unknown colors */ + + xw->curs_x = xw->curs_y = 999; // no cursor + + xw->sel_y1 = NO_SEL; /* no selection area */ + xw->sel_start_t = 0; /* no selection-drag active */ + xw->sel_set_t = 0; /* not selection owner */ + xw->sel_pixmap = 0; /* no selection pixmap yet */ + + xio_clear_win(xw); + xw->blink_on = xw->reveal = 0; + + xw->handler = 0; + + XMapWindow(xio->dpy, xw->win); + dl_insert_first(xio->windows, xw->node); + return xw; + +fail2: + free(xw); +fail1: + return 0; +} + + +void xio_close_win(struct xio_win *xw, int dpy_too) +{ + struct xio *xio = xw->xio; + + XDestroyWindow(xio->dpy, xw->win); + dl_remove(xw->node); + free(xw); + + if (dpy_too && dl_empty(xio->windows)) + xio_close_dpy(xio); +} + + +void xio_close_dpy(struct xio *xio) +{ + while (not dl_empty(xio->windows)) + xio_close_win((struct xio_win *)xio->windows->first, 0); + + XDestroyWindow(xio->dpy, xio->group_leader); + XRemoveConnectionWatch(xio->dpy, PTR xlib_conn_watch, PTR fds); + fdset_del_fd(fds, xio->fd); + dl_remove(xio->node); + free(xio); +} + + +void xio_set_handler(struct xio_win *xw, void *handler, void *data) +{ + xw->handler = handler; + xw->data = data; +} + + +void xio_title(struct xio_win *xw, char *title) +{ + char buf[sizeof(xw->title) + 32]; + + if (strlen(title) >= sizeof(xw->title)) + return; //TODO: trimm... + if (strcmp(xw->title, title) == 0) + return; + + strcpy(xw->title, title); + sprintf(buf, "AleVT " VERSION " %s", xw->title); + XStoreName(xw->xio->dpy, xw->win, buf); + XSetIconName(xw->xio->dpy, xw->win, xw->title); +} + + +void xio_clear_win(struct xio_win *xw) +{ + memset(xw->ch, ' ', sizeof(xw->ch)); + xw->dheight = xw->blink = xw->concealed = 0; + xw->hidden = xw->lhidden = 0; + xw->modified = ALL_LINES; +} + + +void xio_put_line(struct xio_win *xw, int y, u8 *data) +{ + u8 *p = xw->ch + y*W; + u8 *ep = p + W; + lbits yb = 1 << y; + lbits x = xw->dheight; + + if (y < 0 || y >= H) + return; + + if (memcmp(data, p, ep - p) == 0) + return; + + xw->modified |= yb; + xw->blink &= ~yb; + xw->dheight &= ~yb; + xw->concealed &= ~yb; + + while (p < ep) + switch (*p++ = *data++) + { + case 0x08: + xw->blink |= yb; + break; + case 0x0d: + if (y < H-1) + xw->dheight |= yb; + break; + case 0x18: + xw->concealed |= yb; + break; + } + + if ((xw->dheight ^ x) & yb) // dheight has changed, recalc hidden + { + xw->hidden &= yb*2 - 1; + for (; yb & ALL_LINES/2; yb *= 2) + if (~xw->hidden & xw->dheight & yb) + xw->hidden |= yb*2; + } +} + + +void xio_put_str(struct xio_win *xw, int y, u8 *str) +{ + u8 buf[W]; + int l; + l = strlen(str); + if (l < W) + { + memcpy(buf, str, l); + memset(buf + l, ' ', W - l); + } + else + memcpy(buf, str, W); + xio_put_line(xw, y, buf); +} + + +static void dirty(struct xio_win *xw, int y1, int y2) // mark [y1,y2[ dirty +{ + if (y1 >= 0 && y1 < H && y1 < y2) + { + if (y2 > H) + y2 = H; + if (xw->hidden & (1 << y1)) + y1--; + while (y1 < y2) + xw->modified |= 1 << y1++; + } +} + + +int xio_get_line(struct xio_win *xw, int y, u8 *data) +{ + if (y < 0 || y >= H) + return -1; + if (xw->hidden & (1 << y)) + y--; + memcpy(data, xw->ch + y*W, 40); + return 0; +} + + +void xio_set_cursor(struct xio_win *xw, int x, int y) +{ + if (xw->curs_y >= 0 && xw->curs_y < H) + dirty(xw, xw->curs_y, xw->curs_y + 1); + if (x >= 0 && x < W && y >= 0 && y < H) + dirty(xw, y, y + 1); + else + x = y = 999; + xw->curs_x = x; + xw->curs_y = y; +} + + +static inline void draw_char(struct xio_win *xw, Window win, int fg, int bg, + int c, int dbl, int x, int y, int ry) +{ + struct xio *xio = xw->xio; + + if (fg != xw->fg) + XSetForeground(xio->dpy, xw->gc, xio->color[xw->fg = fg]); + if (bg != xw->bg) + XSetBackground(xio->dpy, xw->gc, xio->color[xw->bg = bg]); + + if (dbl) + { + XCopyPlane(xio->dpy, xio->font[1], win, xw->gc, + c%32*CW, c/32*CH*2, CW, CH*2, x*CW, y*CH, 1); + } + else + { + XCopyPlane(xio->dpy, xio->font[0], win, xw->gc, + c%32*CW, c/32*CH, CW, CH, x*CW, y*CH, 1); + if (xw->dheight & (1<<ry)) + XCopyPlane(xio->dpy, xio->font[0], win, xw->gc, + ' '%32*CW, ' '/32*CH, CW, CH, x*CW, y*CH+CH, 1); + } +} + +static void draw_cursor(struct xio_win *xw, int x, int y, int dbl) +{ + struct xio *xio = xw->xio; + + if (xw->blink_on) + XSetForeground(xio->dpy, xw->gc, xio->color[xw->fg = xw->bg ^ 8]); + XDrawRectangle(xio->dpy, xw->win, xw->gc, x * CW, y * CH, CW-1, + (dbl ? 2*CH : CH)-1); +} + + +void xio_update_win(struct xio_win *xw) +{ + u8 *p = xw->ch; + lbits yb, redraw; + int x, y, c; + + if (xw->modified == 0) + return; + + redraw = xw->modified; // all modified lines + redraw |= xw->lhidden; // all previously hidden lines + redraw &= ~xw->hidden; + + xw->lhidden = xw->hidden; + xw->modified = 0; + + if (redraw == 0) + return; + + for (yb = 1, y = 0; y < H; ++y, yb *= 2) + if (redraw & yb) + { + int fg = 7, bg = 0, _fg, _bg; + int dbl = 0, blk = 0, con = 0, gfx = 0, sep = 0, hld = 0; + int last_ch = ' '; + + for (x = 0; x < W; ++x) + { + switch (c = *p++) + { + case 0x00 ... 0x07: /* alpha + foreground color */ + fg = c & 7; + gfx = 0; + con = 0; + goto ctrl; + case 0x08: /* flash */ + blk = not xw->blink_on; + goto ctrl; + case 0x09: /* steady */ + blk = 0; + goto ctrl; + case 0x0a: /* end box */ + case 0x0b: /* start box */ + goto ctrl; + case 0x0c: /* normal height */ + dbl = 0; + goto ctrl; + case 0x0d: /* double height */ + dbl = y < H-1; + goto ctrl; + case 0x10 ... 0x17: /* graphics + foreground color */ + fg = c & 7; + gfx = 1; + con = 0; + goto ctrl; + case 0x18: /* conceal display */ + con = not xw->reveal; + goto ctrl; + case 0x19: /* contiguous graphics */ + sep = 0; + goto ctrl; + case 0x1a: /* separate graphics */ + sep = 1; + goto ctrl; + case 0x1c: /* black background */ + bg = 0; + goto ctrl; + case 0x1d: /* new background */ + bg = fg; + goto ctrl; + case 0x1e: /* hold graphics */ + hld = 1; + goto ctrl; + case 0x1f: /* release graphics */ + hld = 0; + goto ctrl; + + case 0x0e: /* SO (reserved, double width) */ + case 0x0f: /* SI (reserved, double size) */ + c= ' '; break; + case 0x1b: /* ESC (reserved) */ + c = ' '; + break; + + ctrl: + c = ' '; + if (hld && gfx) + c = last_ch; + break; + + case 0x80 ... 0x9f: /* these aren't used */ + c = BAD_CHAR; + break; + + default: /* mapped to selected font */ + break; + } + + if (gfx && (c & 0xa0) == 0x20) + { + last_ch = c; + c += (c & 0x40) ? 32 : -32; + } + + _fg = fg; + _bg = bg; + if (blk) + _fg |= 8; + if (y >= xw->sel_y1 && y < xw->sel_y2 && + x >= xw->sel_x1 && x < xw->sel_x2) + _bg |= 8; + if (con) + _fg = _bg; + + draw_char(xw, xw->win, _fg, _bg, c, dbl, x, y, y); + + if (y == xw->curs_y && x == xw->curs_x) + draw_cursor(xw, xw->curs_x, xw->curs_y, dbl); + + if (xw->sel_pixmap && (_bg & 8)) + draw_char(xw, xw->sel_pixmap, con ? bg : fg, bg, c, dbl, + x - xw->sel_x1, y - xw->sel_y1, y); + } + } + else + p += 40; +} + + +static void for_all_windows(void (*func)(struct xio_win *xw), struct xio_win *except) +{ + struct xio *xio, *vtn; + struct xio_win *xw, *vwn; + + for (xio = PTR dpys->first; vtn = PTR xio->node->next; xio = vtn) + for (xw = PTR xio->windows->first; vwn = PTR xw->node->next; xw = vwn) + if (xw != except) + func(xw); +} + + +int xio_set_concealed(struct xio_win *xw, int on) +{ + on = !!on; + if (xw->reveal == on) + return on; + + xw->reveal = on; + xw->modified |= xw->concealed; + return !on; +} + + +static void sel_set(struct xio_win *xw, int x1, int y1, int x2, int y2) +{ + int t; + + x1 = bound(0, x1, W-1); + y1 = bound(0, y1, H-1); + x2 = bound(0, x2, W-1); + y2 = bound(0, y2, H-1); + + if (x1 > x2) + t = x1, x1 = x2, x2 = t; + if (y1 > y2) + t = y1, y1 = y2, y2 = t; + + dirty(xw, xw->sel_y1, xw->sel_y2); + + if (xw->hidden & (1 << y1)) + y1--; + if (xw->hidden & (2 << y2)) + y2++; + + xw->sel_x1 = x1; + xw->sel_y1 = y1; + xw->sel_x2 = x2 + 1; + xw->sel_y2 = y2 + 1; + dirty(xw, xw->sel_y1, xw->sel_y2); +} + + +static void sel_abort(struct xio_win *xw) +{ + if (xw->sel_set_t) + XSetSelectionOwner(xw->xio->dpy, XA_PRIMARY, None, xw->sel_set_t); + if (xw->sel_y1 != NO_SEL) + dirty(xw, xw->sel_y1, xw->sel_y2); + xw->sel_y1 = NO_SEL; + xw->sel_set_t = 0; + xw->sel_start_t = 0; +} + + +static void sel_start(struct xio_win *xw, int x, int y, Time t) +{ + sel_abort(xw); + xw->sel_start_x = x; + xw->sel_start_y = y; + xw->sel_start_t = t; +} + + +static void sel_move(struct xio_win *xw, int x, int y, Time t) +{ + if (xw->sel_start_t == 0) + return; + if (xw->sel_y1 == NO_SEL) + if (t - xw->sel_start_t < SEL_MIN_TIME) + if (x == xw->sel_start_x) + if (y == xw->sel_start_y) + return; + sel_set(xw, xw->sel_start_x, xw->sel_start_y, x, y); +} + + +static int sel_end(struct xio_win *xw, int x, int y, Time t) +{ + sel_move(xw, x, y, t); + xw->sel_start_t = 0; + + if (xw->sel_y1 == NO_SEL) + return 0; + + for_all_windows(sel_abort, xw); + XSetSelectionOwner(xw->xio->dpy, XA_PRIMARY, xw->win, t); + if (XGetSelectionOwner(xw->xio->dpy, XA_PRIMARY) == xw->win) + xw->sel_set_t = t; + else + sel_abort(xw); + return 1; +} + + +static int sel_convert2ascii(struct xio_win *xw, u8 *buf) +{ + u8 *d = buf; + int x, y, nl = 0; + + for (y = xw->sel_y1; y < xw->sel_y2; y++) + { + u8 *s = xw->ch + y * W; + int gfx = 0, con = 0; + + if (~xw->hidden & (1 << y)) + { + for (x = 0; x < xw->sel_x2; ++x) + { + int ch, c = ' '; + switch (ch = *s++) + { + case 0x00 ... 0x07: + gfx = con = 0; + break; + case 0x10 ... 0x17: + gfx = 1, con = 0; + break; + case 0x18: + con = not xw->reveal; + break; + case 0xa0 ... 0xff: + case 0x20 ... 0x7f: + if (not con) + if (gfx && ch != ' ' && (ch & 0xa0) == 0x20) + c = '#'; + else if (ch == 0x7f) + c = '*'; + else + c = ch; + break; + } + if (x >= xw->sel_x1) + { + if (nl) + *d++ = '\n', nl = 0; + *d++ = c; + } + } + nl = 1; + } + } + *d = 0; // not necessary + return d - buf; +} + + +static Pixmap sel_convert2pixmap(struct xio_win *xw) +{ + struct xio *xio = xw->xio; + Pixmap pm; + + if (xw->sel_y1 == NO_SEL) + return None; + + pm = XCreatePixmap(xio->dpy, xio->root, (xw->sel_x2 - xw->sel_x1) * CW, + (xw->sel_y2 - xw->sel_y1) * CH, + xio->depth); + xw->sel_pixmap = pm; + dirty(xw, xw->sel_y1, xw->sel_y2); + xio_update_win(xw); + xw->sel_pixmap = 0; + + return pm; +} + + +static int sel_do_conv(struct xio_win *xw, Window w, Atom type, Atom prop) +{ + struct xio *xio = xw->xio; + + if (type == xio->xa_targets) + { + u32 atoms[6]; + + atoms[0] = XA_STRING; + atoms[1] = xio->xa_text; + atoms[2] = XA_PIXMAP; + atoms[3] = XA_COLORMAP; + atoms[4] = xio->xa_multiple; + atoms[5] = xio->xa_timestamp; + XChangeProperty(xio->dpy, w, prop, type, + 32, PropModeReplace, PTR atoms, NELEM(atoms)); + } + else if (type == xio->xa_timestamp) + { + u32 t = xw->sel_set_t; + + XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, PTR &t, 1); + } + else if (type == XA_COLORMAP) + { + u32 t = xio->cmap; + + XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, PTR &t, 1); + } + else if (type == XA_STRING || type == xio->xa_text) + { + u8 buf[H * (W+1)]; + int len; + + len = sel_convert2ascii(xw, buf); + + XChangeProperty(xio->dpy, w, prop, type, 8, PropModeReplace, buf, len); + } + else if (type == XA_PIXMAP || type == XA_DRAWABLE) + { + Pixmap pm; + + pm = sel_convert2pixmap(xw); + + XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, PTR &pm, 1); + } + else if (type == xio->xa_multiple) + { + u32 *atoms, ty, fo, i; + unsigned long n, b; + + if (prop != None) + { + if (Success == XGetWindowProperty(xio->dpy, w, prop, 0, 1024, 0, + AnyPropertyType, PTR &ty, PTR &fo, &n, &b, PTR &atoms)) + { + if (fo == 32 && n%2 == 0) + { + for (i = 0; i < n; i += 2) + if (sel_do_conv(xw, w, atoms[i], atoms[i+1]) == None) + atoms[i] = None; + } + XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, + PTR atoms, n); + XFree(atoms); + } + } + } + else + return None; + return prop; +} + + +static void sel_send(struct xio_win *xw, XSelectionRequestEvent *req) +{ + XSelectionEvent ev[1]; + + if (req->property == None) + req->property = req->target; + + ev->type = SelectionNotify; + ev->requestor = req->requestor; + ev->selection = req->selection; + ev->target = req->target; + ev->property = sel_do_conv(xw, req->requestor, req->target, req->property); + ev->time = req->time; + XSendEvent(xw->xio->dpy, req->requestor, False, 0, PTR ev); +} + + +static void sel_retrieve(struct xio_win *xw, Window w, Atom prop, int del) +{ + u8 *data; + u32 ty, fo; + unsigned long n, b; + struct xio *xio = xw->xio; + + if (prop == None) + return; + + if (Success == XGetWindowProperty(xio->dpy, w, prop, 0, 1024, del, + AnyPropertyType, PTR &ty, PTR &fo, &n, &b, PTR &data)) + { + if (fo == 8 && n != 0) + { + struct vt_event vtev[1]; + + vtev->resource = xw; + vtev->type = EV_SELECTION; + vtev->i1 = n; + vtev->p1 = data; + xw->handler(xw->data, vtev); + } + XFree(data); + } +} + + +void xio_cancel_selection(struct xio_win *xw) +{ + sel_abort(xw); +} + + +void xio_query_selection(struct xio_win *xw) +{ + struct xio *xio = xw->xio; + + if (XGetSelectionOwner(xio->dpy, XA_PRIMARY) == None) + sel_retrieve(xw, xio->root, XA_CUT_BUFFER0, False); + else + { + XDeleteProperty(xio->dpy, xw->win, XA_STRING); + XConvertSelection(xio->dpy, XA_PRIMARY, XA_STRING, + XA_STRING, xw->win, xw->tstamp); + } +} + + +void xio_set_selection(struct xio_win *xw, int x1, int y1, int x2, int y2) +{ + sel_start(xw, x1, y1, xw->tstamp - SEL_MIN_TIME); + sel_end(xw, x2, y2, xw->tstamp); +} + + +static void handle_event(struct xio *xio, int fd) +{ + struct xio_win *xw; + struct vt_event vtev[1]; + XEvent ev[1]; + + XNextEvent(xio->dpy, ev); + + for (xw = PTR xio->windows->first; xw->node->next; xw = PTR xw->node->next) + if (xw->win == ev->xany.window) + break; + if (xw->node->next == 0) + return; + + vtev->resource = xw; + + switch(ev->type) + { + case Expose: + { + int y1 = ev->xexpose.y / CH; + int y2 = (ev->xexpose.y + ev->xexpose.height + CH-1) / CH; + + dirty(xw, y1, y2); + break; + } + case ClientMessage: + { + vtev->type = EV_CLOSE; + if (ev->xclient.format == 32) + if ((Atom)ev->xclient.data.l[0] == xio->xa_del_win) + xw->handler(xw->data, vtev); + break; + } + case KeyPress: + { + unsigned char ch; + KeySym k; + + xw->tstamp = ev->xkey.time; + vtev->type = EV_KEY; + vtev->i1 = 0; + vtev->i2 = (ev->xkey.state & ShiftMask) != 0; + if (XLookupString(&ev->xkey, &ch, 1, &k, 0)) + vtev->i1 = ch; + else + switch (k) + { + case XK_Left: vtev->i1 = KEY_LEFT; break; + case XK_Right: vtev->i1 = KEY_RIGHT; break; + case XK_Up: vtev->i1 = KEY_UP; break; + case XK_Down: vtev->i1 = KEY_DOWN; break; + case XK_Prior: vtev->i1 = KEY_PUP; break; + case XK_Next: vtev->i1 = KEY_PDOWN; break; + case XK_Delete: vtev->i1 = KEY_DEL; break; + case XK_Insert: vtev->i1 = KEY_INS; break; + case XK_F1: vtev->i1 = KEY_F(1); break; + case XK_F2: vtev->i1 = KEY_F(2); break; + case XK_F3: vtev->i1 = KEY_F(3); break; + case XK_F4: vtev->i1 = KEY_F(4); break; + case XK_F5: vtev->i1 = KEY_F(5); break; + case XK_F6: vtev->i1 = KEY_F(6); break; + case XK_F7: vtev->i1 = KEY_F(7); break; + case XK_F8: vtev->i1 = KEY_F(8); break; + case XK_F9: vtev->i1 = KEY_F(9); break; + case XK_F10: vtev->i1 = KEY_F(10); break; + case XK_F11: vtev->i1 = KEY_F(11); break; + case XK_F12: vtev->i1 = KEY_F(12); break; + } + if (vtev->i1) + xw->handler(xw->data, vtev); + break; + } + case ButtonPress: + { + xw->tstamp = ev->xkey.time; + ev->xbutton.x /= CW; + ev->xbutton.y /= CH; + if (ev->xbutton.button == Button1) + sel_start(xw, ev->xbutton.x, ev->xbutton.y, ev->xbutton.time); + break; + } + case MotionNotify: + { + xw->tstamp = ev->xkey.time; + ev->xmotion.x /= CW; + ev->xmotion.y /= CH; + if (ev->xmotion.state & Button1Mask) + sel_move(xw, ev->xmotion.x, ev->xmotion.y, ev->xmotion.time); + break; + } + case ButtonRelease: + { + xw->tstamp = ev->xkey.time; + ev->xbutton.x /= CW; + ev->xbutton.y /= CH; + if (ev->xbutton.button == Button1) + if (sel_end(xw, ev->xbutton.x, ev->xbutton.y, ev->xbutton.time)) + break; + + vtev->type = EV_MOUSE; + vtev->i1 = ev->xbutton.button; + vtev->i2 = (ev->xbutton.state & ShiftMask) != 0; + vtev->i3 = ev->xbutton.x; + vtev->i4 = ev->xbutton.y; + if (vtev->i3 >= 0 && vtev->i3 < W && vtev->i4 >= 0 && vtev->i4 < H) + xw->handler(xw->data, vtev); + break; + } + case SelectionClear: + { + // may be our own Owner=None due to sel_start + if (xw->sel_set_t && ev->xselectionclear.time >= xw->sel_set_t) + { + xw->sel_set_t = 0; // no need to reset owner + sel_abort(xw); + } + break; + } + case SelectionRequest: + { + sel_send(xw, &ev->xselectionrequest); + break; + } + case SelectionNotify: + { + sel_retrieve(xw, ev->xselection.requestor, ev->xselection.property, True); + break; + } + default: + break; + } +} + + +static void switch_blink_state(struct xio_win *xw) +{ + xw->blink_on = !xw->blink_on; + xw->modified |= xw->blink; + dirty(xw, xw->curs_y, xw->curs_y + 1); +} + + +static void send_timer_event(struct xio_win *xw) +{ + struct vt_event vtev[1]; + vtev->type = EV_TIMER; + xw->handler(xw->data, vtev); +} + + +static void xio_timer(void *data, int fd) +{ + char buf[64]; + read(fd, buf, sizeof(buf)); + for_all_windows(switch_blink_state, 0); + for_all_windows(send_timer_event, 0); +} + + +void xio_event_loop(void) +{ + struct xio *xio, *vtn; + int f; + + while (not dl_empty(dpys)) + { + do + { + for_all_windows(xio_update_win, 0); + f = 0; + for (xio = PTR dpys->first; vtn = PTR xio->node->next; xio = vtn) + while (XPending(xio->dpy)) + { + handle_event(xio, xio->fd); + f++; + } + } while (f); + fdset_select(fds, -1); + } +} diff --git a/util/alevt/xio.h b/util/alevt/xio.h new file mode 100644 index 0000000..664b701 --- /dev/null +++ b/util/alevt/xio.h @@ -0,0 +1,80 @@ +#ifndef VTXIO_H +#define VTXIO_H + +#include <X11/Xlib.h> +#include "vt.h" +#include "dllist.h" + +typedef u32 lbits; +#define ALL_LINES ((1ul << H) - 1) + +/* one xio per display */ +struct xio +{ + struct dl_node node[1]; + int argc; + char **argv; + Display *dpy; /* display connection */ + int fd; /* the displays file descriptor */ + Atom xa_del_win; /* WM_DELETE_WINDOW atom */ + Atom xa_targets; /* TARGETS atom (selection) */ + Atom xa_timestamp; /* TIMESTAMP atom (selection) */ + Atom xa_text; /* TEXT atom (selection) */ + Atom xa_multiple; /* MULTIPLE atom (selection) */ + Window group_leader; /* unmapped window */ + int screen; /* DefaultScreen */ + int width, height; /* DisplayWidth/Height */ + int depth; /* DefaultDepth */ + Window root; /* DefaultRoot */ + Colormap cmap; + int color[16]; /* 8 normal, 8 dim intensity */ + Pixmap font[2]; /* normal, dbl-height */ + Pixmap icon; /* icon pixmap */ + struct dl_head windows[1]; /* all windows on this display */ +}; + +/* one vt_win per window */ +struct xio_win +{ + struct dl_node node[1]; + struct xio *xio; /* display */ + Window win; /* the drawing window */ + Time tstamp; /* timestamp of last user event */ + GC gc; /* it's graphics context */ + u8 ch[H*W]; /* the page contents */ + lbits modified, hidden, lhidden; /* states for each line */ + lbits dheight, blink, concealed; /* attributes for each line */ + int fg, bg; /* current foreground/background */ + int blink_on; /* blinking on */ + int reveal; /* reveal concealed text */ + void (*handler)(void *data, struct vt_event *ev); /* event-handler */ + void *data; /* data for the event-handler */ + int curs_x, curs_y; /* cursor position */ + u8 title[32]; /* the user title */ + // selection support + int sel_start_x, sel_start_y; + Time sel_start_t; + Time sel_set_t; /* time we got selection owner */ + int sel_x1, sel_y1, sel_x2, sel_y2; /* selected area */ + Pixmap sel_pixmap; /* for pixmap-selection requests */ +}; + +struct xio *xio_open_dpy(char *dpy, int argc, char **argv); +struct xio_win *xio_open_win(struct xio *xio, char *geom); +void xio_close_win(struct xio_win *xw, int dpy_too); +void xio_close_dpy(struct xio *xio); +void xio_set_handler(struct xio_win *xw, void *handler, void *data); +void xio_clear_win(struct xio_win *xw); +void xio_put_line(struct xio_win *xw, int line, u8 *data); +void xio_put_str(struct xio_win *xw, int line, u8 *c_str); +int xio_get_line(struct xio_win *xw, int line, u8 *data); +int xio_set_concealed(struct xio_win *xw, int on); +void xio_update_win(struct xio_win *xw); +void xio_fd_handler(int fd, void *handler, void *data); +void xio_cancel_selection(struct xio_win *xw); +void xio_query_selection(struct xio_win *xw); +void xio_set_selection(struct xio_win *xw, int x1, int y1, int x2, int y2); +void xio_set_cursor(struct xio_win *xw, int x, int y); +void xio_event_loop(void); +void xio_title(struct xio_win *xw, char *title); +#endif |