alevt-1.6.2/CHANGELOG100660 0 0 46211 10724725431 12173 0ustar rootrootMon 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 . - 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 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 found. - Added the dual-wheel-mouse patch from Holger Fitzner. Tue May 30 03:09:24 MEST 2000 - As Matto Fransen 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 . 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 *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 . - 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 - 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 . (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 . 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 . - added rpm-spec file from Mario Mikocevic . (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 alevt-1.6.2/COPYRIGHT100660 0 0 36603 7106062161 12232 0ustar rootrootThis 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 alevt-1.6.2/Makefile100660 0 0 11046 10724710772 12421 0ustar rootrootVER=1.6.2 OPT=-O2 -s -w #OPT=-O -g DEFS=-DWITH_PNG FONT=vtxt USR_X11R6=/usr/X11R6 #USR_X11R6=/usr MAN_DIR=man #MAN_DIR=share/man HOSTCC=$(CC) # a smaller and thinner font #FONT=neep9 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 edline.o search.o edit.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 all: alevt alevt-date alevt-cap alevt.1x alevt-date.1 alevt-cap.1 alevt: $(OBJS) $(CC) $(OPT) $(OBJS) -o alevt -L$(USR_X11R6)/lib -L$(USR_X11R6)/lib64 -lX11 $(EXPLIBS) alevt-date: $(TOBJS) $(CC) $(OPT) $(TOBJS) -o alevt-date alevt-cap: $(COBJS) $(CC) $(OPT) $(COBJS) -o alevt-cap $(EXPLIBS) font.o: font1.xbm font2.xbm fontsize.h: font1.xbm font2.xbm fgrep -h "#define" font1.xbm font2.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 bdf2xbm: bdf2xbm.c $(HOSTCC) bdf2xbm.c -o bdf2xbm alevt.1x: alevt.1x.in sed s/VERSION/$(VER)/g alevt.1x alevt-date.1: alevt-date.1.in sed s/VERSION/$(VER)/g alevt-date.1 alevt-cap.1: alevt-cap.1.in sed s/VERSION/$(VER)/g alevt-cap.1 clean: rm -f *.o page*.txt a.out core bdf2xbm font?.xbm fontsize.h Makefile.bak rm -f alevt alevt-date alevt-cap rm -f alevt.1x alevt-date.1 alevt-cap.1 rm -f contrib/a.out ttext-*.* rm -f alevt.html 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.1x ${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 contrib/mini-alevt.xpm $(RPM_BUILD_ROOT)$(USR_X11R6)/include/X11/pixmaps # anything below this line is just for me! install: all install -m 0755 alevt /usr/local/bin install -m 0755 alevt-date /usr/local/bin install -m 0755 alevt-cap /usr/local/bin install -m 0644 alevt.1x /usr/local/man/man1 install -m 0644 alevt-date.1 /usr/local/man/man1 install -m 0644 alevt-cap.1 /usr/local/man/man1 install -m 0644 contrib/mini-alevt.xpm /usr/include/X11/pixmaps depend: makedepend -Y -- $(CFLAGS_none) -- *.c 2>/dev/null tar-html: alevt.1x alevt-date.1 alevt-cap.1 for i in alevt.1x alevt-date.1 alevt-cap.1 ; do \ j=`basename $$i .1` ; \ j=`basename $$j .1x` ; \ nroff -man $$i | { \ echo "AleVT" ; \ man2html -bare -uelem U -nodepage ; \ echo "" ; \ } | sed -e "s, , ,g" -e "s, , ,g" >~/exit/alevt/$$j.html ;\ done tar: tar-html clean sed s/VERSION/$(VER)/g ~/exit/alevt/alevt-$(VER).lsm sed s/VERSION/$(VER)/g alevt.spec cd .. ;\ ln -s alevt alevt-$(VER) ;\ tar vcfz ~/exit/alevt/alevt-$(VER).tar.gz alevt-$(VER)/* ;\ rm alevt-$(VER) cat ~/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 edit.o: vt.h misc.h xio.h dllist.h vbi.h cache.h lang.h edit.h edline.h edline.o: vt.h misc.h xio.h dllist.h edline.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 hamm.o: vt.h misc.h hamm.h help.o: vt.h misc.h vt900.out vt901-02.out vt901-01.out vt902.out vt903.out help.o: vt910.out vt911-02.out vt911-01.out vt912-02.out vt912-01.out help.o: vt913.out vt914-02.out vt914-01.out vt915.out vt999.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 edline.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 edit.h edline.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 alevt-1.6.2/README100660 0 0 5173 10724706331 11621 0ustar rootrootHi, 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) alevt-1.6.2/alevt-cap.1.in100660 0 0 7350 10724716307 13307 0ustar rootroot.na .TH ALEVT-CAP 1 "VERSION" LINUX "Teletext capture" .SH NAME alevt-cap \- simple capture of teletext pages .SH SYNOPSIS .B alevt-cap .RI [ options ] .IR ppp [ .ss ] .I \.\.\. .SH "DESCRIPTION" .B alevt-cap is a simple program to capture teletext pages and write them to disk. You just give it a list of pages to fetch and it will save them. Nothing fancy like time-outs, page ranges, or channel name detection is supported. Though, it supports different file formats - at the moment ascii, ansi (ascii with color escape sequences), html, png, and ppm. .SH OPTIONS A summary of options is included below. .TP .BI \-name \ filename Gives the filename under which the pages should be saved. It may contain a couple of %-sequences (see below). (default: ttext-%s.%e) .TP .BI \-format \ format-specifier Sets the file format used to save pages (see below). (default: ascii) .TP .BI \-format \ list\||help Lists all known file formats and their options. .TP .BI \-vbi \ device Use the given device name (default: /dev/vbi0). .TP .BI \-finetune \ \-4..4\||auto Specify the fine tuning for the decoder. For the right value play with .BR alevt . Default: 1. .TP .BI \-timeout \ seconds If the pages cannot be captured in .IR seconds , the program terminates with exit status 1 after saving the already captured pages. The default is to wait forever. .TP .BI \-charset \ latin-1\||latin-2 Selects the character set to use. Characters not present in the selected set are replaced by similar looking symbols. (default: latin-1) .TP .B \-\-help Show summary of options. .TP .B \-\-version Show version of program. .PP Every non-option argument is taken as a page number. Subpages may be given in the form .IB ppp . ss where .I ppp is the page number and .I ss is the subpage number. If no subpage is specified, the first transmitted subpage of that page is taken. The page is saved with the prior given format and name. .SS Filenames The filename may contain %-sequences. The following sequences are defined: .RS .TP .B %% a single % sign. .TP .B %e the default extension of the selected output format. .TP .B %p the page number and an optional subpage number. .TP .B %P the page number. .TP .B %S the subpage number. .TP .B %s the page number as given on the command line. .RE .PP Between the % sign and the letter you can give a field width to which the replacement string should be padded. .SS Format specifiers The output format and associated options are given by the format specifier. It is made up of one or more comma separated words. The first word selects the output format and the others are options for that format. There are common options valid for all output formats and format specific (private) ones. Some options have the form of an assignment. The order of the options is free. Only the format name itself must be the first word. An example: .TP .B ansi,reveal,bg=none The .B ansi is the format and .BR reveal , and .BR bg=none are options. .PP At the moment there are only two common options: .BR reveal , and .BR hide . They control whether the hidden characters present in a page should be shown in the output or not. The default is .BR hide . .PP The special format string .B list (or .BR help ) will give you a list of all supported output formats and their options. .PP (The .B ansi format is an alias for .BR ascii,color .) .SH DIAGNOSTICS If the program timed out and some pages are missing the exit status is 1. On fatal errors the exit status is 2. .SH NOTE Before starting this program, you have to set the TV channel with another program like .B xawtv of .BR set-tv . .SH FILES .I /dev/vbi* .SH SEE ALSO .BR alevt (1x), .BR alevt-date (1), .SH BUGS If you give a page number that is never transmitted the program will not terminate. .PP Bug reports to . alevt-1.6.2/alevt-cap.c100660 0 0 15742 10724717106 13006 0ustar rootroot#include #include #include #include #include #include "vt.h" #include "misc.h" #include "fdset.h" #include "vbi.h" #include "lang.h" #include "dllist.h" #include "export.h" int debug = 0; static volatile int timed_out = 0; 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" " --help\n" " --version\n" " -vbi \t\t/dev/vbi0\n" " -finetune <-4..4|auto>\t0\n" //" -oldbttv\t\t\t(for bttv <0.5.20)\n" " -charset latin-1/2\t\tlatin-1\n" " -timeout \t\tnone\n" " -name \t\tttext-%%s.%%e\n" " -format \tascii\n" " -format help\n" "\n" " ppp[.ss] stands for a page number and an\n" " optional subpage number (ie 123.4). If\n" " the subpage number is omitted the first\n" " transmitted subpage is captured.\n" "\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" "\n" "Example: -format ansi,reveal,bg=none\n" "\n" ); exit(0); } static void sig_handler(int sig) { if (debug) write(2, "*BREAK*\r\n", 9); timed_out = 1; } 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[] = { { "--help", "-h", 0 }, { "--version", "-v", 0 }, { "-copyright", "-©", 0 }, { "-debug", "--debug", 0 }, { "-vbi", "-dev", 1 }, { "-newbttv", "-new", 0 }, { "-oldbttv", "-old", 0 }, { "-finetune", "-f", 1 }, { "-charset", "-latin", 1 }, { "-format", "-fmt", 1 }, { "-name", "-o", 1 }, { "-timeout", "-t", 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) { if (debug) printf("captured page %x.%02x\n", vtp->pgno, vtp->subno); *req->vtp = *vtp; dl_insert_last(reqs + 1, dl_remove(req->node)); // the same page may be there in different formats. // so, don't break. //break; } } } } int main(int argc, char **argv) { char *vbi_name = "/dev/vbi0"; int fine_tune = 1; // auto = 999; int newbttv = -1; 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 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: // help usage(stdout, 0); break; case 2: // version printf("AleVT Version "VERSION"\n"); exit(0); case 3: // copyright printf("Copyright 2000 by E. Toernig, froese@gmx.de\n"); exit(0); case 4: // debug debug++; break; case 5: // vbi vbi_name = arg; break; case 6: // newbttv newbttv = 1; break; case 7: // oldbttv newbttv = 0; break; case 8: // finetune if (streq(arg, "auto")) fine_tune = 999; else fine_tune = strtol(arg, 0, 10); break; case 9: // charset if (streq(arg, "latin-1") || streq(arg, "1")) latin1 = 1; else if (streq(arg, "latin-2") || streq(arg, "2")) latin1 = 0; else fatal("bad charset (not latin-1/2)"); break; case 10: // format if (streq(arg, "help") || streq(arg, "?") || streq(arg, "list")) exp_help(stdout); out_fmt = arg; fmt = 0; break; case 11: // name fname = arg; break; case 12: // timeout timeout = strtol(arg, 0, 10); if (timeout < 1 || timeout > 999999) fatal("bad timeout value", timeout); 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, fine_tune, newbttv))) fatal("cannot open %s", vbi_name); vbi_add_handler(vbi, event, reqs); // register event handler signal(SIGUSR1, sig_handler); signal(SIGALRM, sig_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); } alevt-1.6.2/alevt-date.1.in100660 0 0 3616 10724706603 13460 0ustar rootroot.na .TH ALEVT-DATE 1 "VERSION" LINUX "Teletext time" .SH NAME alevt-date \- display/set time received via Teletext .SH SYNOPSIS .B alevt-date .RI [ options ] .SH "DESCRIPTION" .B alevt-date displays the time received from a Teletext source. It can be used to set the system time. The date is not interpreted (not even transmitted on most 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 displays the date in the format of the .BR date (1) command. .SH OPTIONS A summary of options is included below. .TP 18 .B \-set Set system time from time received via Teletext. .TP .BI \-delta \ seconds Maximum allowed adjustment made to the system time. The default is 7200 seconds (2 hours) and the maximum that may be given is 12 hours. .TP .BI \-format \ string Format string to used to print the time. Look at .BR strftime (3) for possible control sequences. .TP .BI \-vbi \ device Use the given device name (default: /dev/vbi0). .TP .BI \-timeout \ seconds If the time can't be detected in .IR seconds , the program is terminated with a SIGALRM. .TP .B \-\-help Show summary of options. .TP .B \-\-version Show version of program. .PP Before starting this program, you have to set the TV channel with another program like .B xawtv of .BR set-tv . .PP Note: This program does .B not set the battery backed up clock of your computer. .I clock -w will do this. .SH FILES .I /dev/vbi* .SH SEE ALSO .BR alevt (1x), .BR alevt-cap (1), .BR strftime (3), .BR date (1), .BR clock (8). .SH BUGS This program is just a toy. The time transmitted by the TV stations is more than inaccurate. Some are within a few seconds of your local time reference but others are more then 15 minutes off. You've been warned. (And don't assume the pkt8/30 time is better. It's even worse.) .PP No bug reports to *g*. alevt-1.6.2/alevt-date.c100660 0 0 11154 10724675705 13161 0ustar rootroot#include #include #include #include /* to keep glibc 2.2 quiet */ #include #include #include #include "os.h" #include "vt.h" #include "fdset.h" #include "vbi.h" #include "lang.h" #include "misc.h" int debug = 0; char *fmt = "%a %b %d %H:%M:%S %Z %Y"; int max_diff = 2*60*60; // default: 2 hours int set_time = 0; 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); /* if (last_t != t) printf("%06d\n", 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:\tDefault:\n" " --help\n" " --version\n" " -vbi \n" //" -oldbttv\n" " -set\t\toff\n" " -delta \t7200 (2 hours)\n" " -format \t%%c\n" " -timeout \tnone\n" ); exit(exit_val); } static int option(int argc, char **argv, int *ind, char **arg) { static struct { char *nam, *altnam; int arg; } opts[] = { { "-set", "-s", 0 }, { "-delta", "-d", 1 }, { "-format", "-f", 1 }, { "-vbi", "-dev", 1 }, { "-timeout", "-t", 1 }, { "--version", "-v", 0 }, { "--help", "-h", 0 }, { "-newbttv", "-new", 0 }, { "-oldbttv", "-old", 0 }, }; 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 = "/dev/vbi0"; int timeout = 0; int big_buf = -1; struct vbi *vbi; int opt, ind; char *arg; setprgname(argv[0]); ind = 1; while (opt = option(argc, argv, &ind, &arg)) switch (opt) { case 1: // -set set_time = 1; break; case 2: // -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 3: // -fmt fmt = arg; break; case 4: // -vbi vbi_name = arg; break; case 5: // -timeout timeout = atoi(arg); if (timeout < 1 || timeout > 60*60) fatal("-timeout: illegal value '%s'", arg); break; case 6: // -version printf("AleVT-Date Version "VERSION"\n"); exit(0); case 7: // help usage(stdout, 0); break; case 8: // newbttv big_buf = 1; break; case 9: // oldbttv big_buf = 0; 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, 1, big_buf); // 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); } alevt-1.6.2/alevt.1x.in100660 0 0 6247 10724714614 12741 0ustar rootroot.na .TH ALEVT 1x "VERSION" LINUX "Teletext decoder" .SH NAME alevt \- X11 Teletext browser .SH SYNOPSIS .B alevt .RI [ options ] .SH "DESCRIPTION" .B alevt is an X11 program for browsing and searching Teletext pages received by a compatible decoder (at the moment, bttv). .SH OPTIONS A summary of command line options is included below. The X11 user interface is described in the built-in manual. .TP 4 .BI \-display \ display Where to display the windows. Default: $DISPLAY. .TP .BI \-geometry \ geometry Specifies the size and position of the windows. Default: 40x25. .TP .BI \-vbi \ device Use the given device name. Default: /dev/vbi0. .TP .BI \-finetune \ \-4..4\||auto Try some fine tuning if you have a lot of decoding errors (these lightning symbols). This allows fine tuning of the decoder circuit. The pre finetune behaviour was -finetune 0. Default: 1. .TP .BI [\-parent] \ ppp[.ss] Open a new window with the page number given by .I ppp and an optional subpage index given by .IR ss . The .B \-parent keyword is just for completeness and not normally used. The page number alone is sufficient. Default: 900. .TP .BI \-child \ ppp[.ss] Open a new child window with the page number given by .I ppp and an optional subpage index given by .IR ss . About the concept of parent and child windows see the built-in manual. .TP .\" .B \-oldbttv .\" Give this option if you are using the bttv driver from the 2.2 kernel .\" or a very old one (<0.5.20) from the .\" .B xawtv .\" package. .\" .TP .BR \-erc / \-noerc Enables/disables the error reduction code which substitutes errors on a page by data from a previously received one. Enabled by default. .TP .BR \-bell / \-nobell Enables/disables the error bell. Normally enabled. .TP .BI \-charset \ latin-1\||latin-2 Selects the character set to use. Characters not present in the selected set are replaced by similar looking symbols. (default: latin-1) .TP .B \-\-help Show summary of options. .TP .B \-\-version Show version of program. .PP The order of options is important! Each page number opens a new window with the previously given geometry, device, and display. For example, to open two windows on the local display and one on display foo:0 you would start it with: .IP .I alevt 100 300 \-display foo:0 100 .PP Or, one window from /dev/vbi0 and one from /dev/vbi1 (untested *g*): .IP .I alevt \-vbi /dev/vbi0 100 \-vbi /dev/vbi1 100 .PP The .B \-child options requires a parent window. So, it must be preceded by a parent or another child window. .PP When saving pages .B alevt asks for a format string. Look at .BR alevt-cap (1). The chapter .B Format Specifiers gives an explanation. .PP .B alevt has no support to set or change the TV channel. This should be done with another (not supplied) program like .B xawtv or .B set-tv from the .B xawtv package. Maybe in the future there will be a more sophisticated method in bttv to switch channels etc with a dedicated tuner application. But, at the moment, you have to live with it... .SH FILES .I /dev/vbi* .SH "SEE ALSO" .BR alevt-date (1), .BR alevt-cap (1), .BR X (3x), .BR xawtv (1x), and the built-in manual. .SH BUGS There are no known bugs. If you find one, please report it to . alevt-1.6.2/alevt.lsm.in100660 0 0 727 10724712342 13155 0ustar rootrootBegin3 Title: AleVT Version: VERSION Entered-date: 03Dez07 Description: Teletext decoder/browser for bttv. Keywords: videotext teletext bttv v4l x11 fasttext Author: froese@gmx.de (Edgar Toernig) Primary-site: goron.de ~froese/alevt 133k alevt-VERSION.tar.gz Alternate-site: metalab.unc.edu pub/Linux/apps/video 133k alevt-VERSION.tar.gz Platforms: X11, bttv-driver, gcc Copying-policy: GPLv2 End alevt-1.6.2/alevt.spec100660 0 0 3062 10724730113 12716 0ustar rootroot%define Name alevt %define Version 1.6.2 %define Release 3 %define DocVersion 1.6.2 %define Prefix /usr %define ExecPrefix /usr/X11R6 %define LocaleDir /usr/share/locale Summary: Videotext/Teletext Summary(de): Videotext/Teletext Name: %{Name} Version: %{Version} Release: %{Release}%{LibC} Copyright: GPL Group: X11/Utilities Source: http://goron.de/~froese/%{Name}/%{Name}-%{Version}.tar.gz BuildRoot: /tmp/%{Name}-%{Version}-root URL: http://goron.de/~froese #Packager: Mario Mikocevic (Mozgy) %changelog * Mon Jun 14 1999 Karsten Hopp - removed old patch from specfile - removed LibC-Macro - added '-oldbttv' to the package description. * Sun May 23 1999 Karsten Hopp - several minor patches of Marios spec-file: german descriptions buildroot (patched Makefile) some changed install-paths %description Teletext decoder and browser for the bttv driver. %description -l de X11 Videotextdecoder für den bttv Treiber. %prep %setup %build make %install mkdir -p $RPM_BUILD_ROOT/%{ExecPrefix}/{bin,man/man1} make rpm-install gzip -9qnf README CHANGELOG COPYRIGHT $RPM_BUILD_ROOT/%{ExecPrefix}/man/man1/* %files %attr(- ,root,root) %doc README.gz CHANGELOG.gz COPYRIGHT.gz %attr(0755,root,root) %{ExecPrefix}/bin/alevt %attr(0755,root,root) %{ExecPrefix}/bin/alevt-date %attr(0755,root,root) %{ExecPrefix}/bin/alevt-cap %attr(0644,root,root) %doc %{ExecPrefix}/man/man1/alevt.1x.gz %attr(0644,root,root) %doc %{ExecPrefix}/man/man1/alevt-date.1.gz %attr(0644,root,root) %doc %{ExecPrefix}/man/man1/alevt-cap.1.gz alevt-1.6.2/alevt.spec.in100660 0 0 3066 7530336320 13312 0ustar rootroot%define Name alevt %define Version VERSION %define Release 3 %define DocVersion VERSION %define Prefix /usr %define ExecPrefix /usr/X11R6 %define LocaleDir /usr/share/locale Summary: Videotext/Teletext Summary(de): Videotext/Teletext Name: %{Name} Version: %{Version} Release: %{Release}%{LibC} Copyright: GPL Group: X11/Utilities Source: http://goron.de/~froese/%{Name}/%{Name}-%{Version}.tar.gz BuildRoot: /tmp/%{Name}-%{Version}-root URL: http://goron.de/~froese #Packager: Mario Mikocevic (Mozgy) %changelog * Mon Jun 14 1999 Karsten Hopp - removed old patch from specfile - removed LibC-Macro - added '-oldbttv' to the package description. * Sun May 23 1999 Karsten Hopp - several minor patches of Marios spec-file: german descriptions buildroot (patched Makefile) some changed install-paths %description Teletext decoder and browser for the bttv driver. %description -l de X11 Videotextdecoder für den bttv Treiber. %prep %setup %build make %install mkdir -p $RPM_BUILD_ROOT/%{ExecPrefix}/{bin,man/man1} make rpm-install gzip -9qnf README CHANGELOG COPYRIGHT $RPM_BUILD_ROOT/%{ExecPrefix}/man/man1/* %files %attr(- ,root,root) %doc README.gz CHANGELOG.gz COPYRIGHT.gz %attr(0755,root,root) %{ExecPrefix}/bin/alevt %attr(0755,root,root) %{ExecPrefix}/bin/alevt-date %attr(0755,root,root) %{ExecPrefix}/bin/alevt-cap %attr(0644,root,root) %doc %{ExecPrefix}/man/man1/alevt.1x.gz %attr(0644,root,root) %doc %{ExecPrefix}/man/man1/alevt-date.1.gz %attr(0644,root,root) %doc %{ExecPrefix}/man/man1/alevt-cap.1.gz alevt-1.6.2/bdf2xbm.c100660 0 0 7507 10724663303 12435 0ustar rootroot/* Simple program to convert a bdf-font to a bitmap. The characters are arranged in a 32x8 matrix. usage: bdf2xbm [identifier] xbm Copyright 1998,1999 by E. Toernig (froese@gmx.de) */ #include #include #include #include #include #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"); // fprintf(stderr, "%dx%d font\n", w, h); } 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) { //printf(" "); 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); } alevt-1.6.2/cache.c100660 0 0 11511 10724717162 12165 0ustar rootroot#include #include #include "misc.h" #include "dllist.h" #include "cache.h" #include "help.h" /* There are some subtleties in this cache. - Simple hash is used. - All subpages of a page are in the same hash chain. - The newest subpage is at the front. Hmm... maybe a tree would be better... */ //static struct cache_ops cops; 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; } ///////////////////////////////// // this is for browsing the cache ///////////////////////////////// /* 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; } alevt-1.6.2/cache.h100660 0 0 1557 6723345167 12151 0ustar rootroot#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 alevt-1.6.2/contrib/ 40770 0 0 0 7736123556 12270 5ustar rootrootalevt-1.6.2/contrib/icon48x48.xpm100660 0 0 6733 6634016172 14564 0ustar rootroot/* XPM */ static char *noname[] = { /* width height ncolors chars_per_pixel */ "48 48 62 1", /* colors */ " c #000000", ". c #4E4E5D", "X c #007B41", "o c #403F45", "O c #07E41C", "+ c #020408", "@ c #000006", "# c #665C6A", "$ c #201818", "% c #37373F", "& c #8E8A9E", "* c #242425", "= c #02250A", "- c #2C2830", "; c #201C24", ": c #0A0C0B", "> c #18181C", ", c #1D232E", "< c #101014", "1 c #0C0C10", "2 c #08080C", "3 c #020206", "4 c #1C1E26", "5 c #060917", "6 c #060E0D", "7 c #191823", "8 c #11161E", "9 c #000CE1", "0 c #0000F8", "q c #05090B", "w c #CED2EE", "e c #000370", "r c #00C729", "t c #00586C", "y c #009E47", "u c #6A6C7B", "i c #1B1C20", "p c #282830", "a c #050807", "s c #1F3227", "d c #202028", "f c #1C1C24", "g c #181C20", "h c #181820", "j c #14141C", "k c #0E1816", "l c #101418", "z c #47474E", "x c #101018", "c c #16256D", "v c #575764", "b c #0006F3", "n c #131317", "m c #1D397A", "M c #041508", "N c #282828", "B c #0A1B11", "V c #202020", "C c #505059", "Z c #181818", "A c #101010", "S c #0000FF", /* pixels */ " ", "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwN", "wAAxZZZZVVVVVdddddddddddddddddVVVVVZZZZZxxAAA2Z ", "wAxxZZZVVddddddddNNNNNNNNdddddddVVVVVZZZxxxxAAZ ", "wxxZVVVVdddddNNNNNNNNNNNNNNNdddddVVVVVVZZxxxxAZ ", "wxZZ&uu&&&uu#vCoooo%o%%ooooooozCv#uu&&&&&&&wxAZ ", "wZVV @@255xhh44,,,pppp-----pppp,,,44hhx552AaxxZ ", "wVVd @a2AAAxZhhVVddddddddddddddVVhhZxAAA2a@aZxZ ", "wVdd a2AA>iii4dddddddddfffffiih>jn<>hiiffffffffffffffffihh>>jn<>hifffffffffffffffffiihh>>>jnxhiiffffffffffffffffgghhhhh>>jnn<1aVZZ ", "wNp- xZ>hhiifffffffffffffffffgghhhhhhh>>nniiiffffff4ffffffffffffgggggggghhh>Zn:dVZ ", "w--- >iifffffff4ffff44444ffffgffffffffiiiin:fVZ ", "w--% >ifffdffgff4ffff44444fffggggff4ffffhin:fdZ ", "w--% i>>>>>jjjj>ghh7777ff4ggg>ggggggg>>>>nn:fdZ ", "w-%% 33a:MMAABkklxx888h>gkkkkkBBBBBBBM:a+33*dZ ", "w%%o M=MMMMMMq255555B==M6M=========Ma 3*dZ ", "w%%o@@++=XXX===X=55555558XsB5=X=sXXXXXXXB55+*NZ ", "w%ozeeecrrtyrXyrteeeeeeetyXcetrXmttyrXtmeeeedNZ ", "w%oz0009Oy9tOyyrt9999999mry99trt999yrt9bb000pNZ ", "wozzSSS9Oy9tOyyOt9mtt9bb9rr9btOtb09yOmbSSSS0pNZ ", "wozzSSS9Oy9tOyyOtmryrtbS9rr9btOtbSbyO90SSSS0pNZ ", "wzzCSSS9OrtyOyyOtyOyrybS9yr99yrt0SbyO9SSSSS0pNZ ", "wzC.SSS9OOOOOyyrtyOOr9909mrytry90SbyO90SSSSSpNZ ", "wzC.0009OymXryyrtyrXtm999etyrXm9999yOmb000SSpNZ ", "wzC.++5=rX=XyXXX==XXX,eee88=X=85555Xr=55++@@ppZ ", "wC.v3 M==M==========B5555qM=M++@@a==M ppZ ", "wCvv3 aMMMMMMMMMaq++++aaa3 ppZ ", "wCvv3 @33aaaaM666666A61155161:22a++a+++333@+ppZ ", "wCvv+:12aaaaa:1nn1pNZ ", "w.v#3A<11::11<>>jnnnxx<1::pNZ ", "wCv#@2A1111hhhhhhhhhhhhhhhhh>jnn<<1122pNZ ", "wCv# a2111hgifffffffffffffiihh>jn #include "vt.h" #include "fdset.h" #include "vbi.h" #include "misc.h" int debug = 0; static void event(int *quitflag, struct vt_event *ev) { switch (ev->type) { /* vbi may generate EV_PAGE, EV_HEADER, EV_XPACKET */ /* for event arguments see vt.h */ case EV_PAGE: // a complete new page { static int npages = 0; struct vt_page *vtp = ev->p1; printf("Got page %x/%x\n", vtp->pgno, vtp->subno); if (++npages >= 16) *quitflag = 1; // quit after 16 pages break; } case EV_HEADER: // a new title line (for running headers) case EV_XPACKET: // an extended packet break; } } int main(int argc, char **argv) { int big_buf = -1; // 0 for -oldbttv, 1 for -newbttv struct vbi *vbi; int quit = 0; fdset_init(fds); vbi = vbi_open("/dev/vbi", 0, 99, big_buf); // open device vbi_add_handler(vbi, event, &quit); // register event handler // this one isn't really neccessary (in /dev/vbi case!). // will always return 0 (nothing in cache yet). // Note the hex 0x100! vbi_query_page(vbi, 0x100, ANY_SUB); while (not quit) fdset_select(fds, -1); // call scheduler vbi_del_handler(vbi, event, &quit); vbi_close(vbi); exit(0); } alevt-1.6.2/contrib/mail100660 0 0 10205 6636307142 13242 0ustar rootrootFor the german challenged: This is an email I sent someone explaining some concepts of AleVT. Don't use the quoted C sources. They wont work. Look at t1.c instead. Da die Mail so lang geworden ist und einige Konzepte von AleVT erlaeutert die auch fuer andere interessant sein koennten, pack ich es einfach mal mit ins Archiv. Das dazugehoerige Programm ist in t1.c ------------------------------------------------------------------------------- Date: Thu, 17 Dec 1998 23:33:49 +0100 From: Edgar Toernig To: egon@pr-kaapke2.do.eunet.de Subject: Re: alevt Hi, >... > Einzelne Seiten tuen es auch. Ich bastele gerade daran. > > Ich habe folgendes "miniprogramm (vtx-get) geschrieben": > -----------------------8<------------------------------- > void main() { > struct vbi *vbi; > struct vt_page *vtp; > fdset_init(fds); // Warum brauche ich das? > vbi = vbi_open("/dev/vbi"); > while( vbi_query_page(vbi, 100, ANY_SUB) == -1 ) { > // wie komme ich jetzt an die Seiten ran ???? > } > vtp = cache_get(vbi->cache, 100, ANY_SUB); > printf("Page: %i \n",vtp->pgno); > // jetzt die Seite rausschreiben (nach stdout) [kein Problem denke ich] > vbi_close(vbi); > exit(0); > } > -----------------------8<------------------------------- > Es laeuft nicht :-) D.h. es liest keine Seiten. Kannst Du mir vieleicht einen > Tipp geben ? Ganz so einfach ist es nicht *g*. Ein paar Erlaeuterungen voraus: AleVT kann gleichzeitig mehrere /dev/vbi bedienen, Fenster auf mehreren X-Servern oeffnen usw. Das bedeutet, das Programm muss auf Ereignisse von mehreren Quellen reagieren. Weiterhin sind fast alle Ereignisse asynchron. Aus diesem Grunde gibt es eine zentrale Stelle, die auf ein neues Ereignis wartet und dann entsprechende callback Funktionen aufruft. Die zentrale Stelle ist in fdset.c. Mit fdset_add_fd() kann man Ereignis generierende file descriptoren (fd) registrieren lassen. fdset_select() ist die zentrale Routine, die auf Ereignisse auf den bisher registrierten fd wartet und dann die dazugehoerigen callback Funktionen aufruft. Beispiel vbi.c: vbi_open() oeffnet das /dev/vbi und macht nen paar Initialisierungen. Wenn soweit alles ok ist, folgt dann der Aufruf von fdset_add_fd(fds, vbi->fd, vbi_handler, vbi). Das Bedeutet, dass immer, wenn sich auf vbi->fd was tut, vbi_handler() aufgerufen werden soll. Dieser holt dann die Daten von /dev/vbi (via read()) und dekodiert sie via vbi_line(). vbi_line macht dann alles moegliche und verschickt dann, je nachdem was in der Zeile drin war, events an die durch vbi_add_handler() registrierten Module. Hoert sich alles sehr kompliziert an, hat aber seinen Sinn *g* Zu vbi_query_page(): Ich hatte bei dem Design von AleVT immer im Kopf, dass sowohl unterschiedliche Anzeige als auch Input Geraete implementiert werden koennen/sollen. So sollte der High-Level (ui.c) nichts ueber das Konzept des VideoText liefernden SubSystems wissen. So liefern z.B. Karten mit Hardware VideoText Decodern nicht laufend Seiten, sondern diese muessen angefordert werden und kommen dann irgendwann spaeter (aehnlich wie beim normalen Fernseher). Oder die Daten kommen per Broadcast uebers Netzwerk. Weiterhin ist dem High-Level auch nichts von dem Page-Cache bekannt (mit einer aergerlichen Ausnahme beim Suchen). vbi_query_page teilt deswegen dem VT-subsystem nur mit, dass man gerne die Seite x haben moechte. Das Resultat ist, dass irgendwann der eventhandler (vtwin_event) mit einem entsprechenden EV_PAGE event aufgerufen wird. In der Implementation von vbi_query_page sieht das so aus, dass kurz in den Cache geschaut wird ob die Seite drin ist. Ist das der Fall, wird sofort (von vbi_query_page aus) ein EV_PAGE verschickt. (Dass vbi_query_page evtl eine Referenz auf den Cache zurueckliefert, sollte ignoriert werden.) Ist die angefragte Seite nicht im Cache, brauch ich im Falle des /dev/vbi nichts zu machen, da sowieso alle Seiten Empfangen und per Broadcast an alle Clients verschickt werden. Puh, hab ich geschwafelt *g*. Ich hab dir mal ein kleines Beispiel angehaengt. Hmm, vielleicht sollte ich diese Mail noch gleich mit ins contrib-dir packen. Viel Spass beim Hacken, ET. alevt-1.6.2/contrib/pkt-8-30.c100770 0 0 5777 7607643472 13740 0ustar rootroot#/* gcc pkt-8-30.c -I.. ../vbi.o ../misc.o ../fdset.o ../hamm.o ../lang.o -DVERSION=\"0.0.1\" exec ./a.out #*/ #include #include #include #include "vt.h" #include "fdset.h" #include "vbi.h" #include "misc.h" int debug = 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_XPACKET: // misc paket { if (ev->i1 == 8 && ev->i2 == 30) // broadcast service packet { u8 *p = ev->p1; printf("designation: %x\n", p[0]); printf("initial page: %02x\n", p[1]); printf("initial subpage: %04x\n", p[5]*256 + p[3]); if (p[0]/2 == 0) { printf("network code: %04x\n", p[7]*256 + p[8]); printf("time offset: %c%d.%d\n", (p[9]&0x40)?'-':'+', p[9]/4%16, (p[9]&2)?5:0); printf("mod julian date: %05x\n", p[10]%16*65536+p[11]*256+p[12] - 0x11111); printf("universal time: %06x\n", p[13]*65536+p[14]*256+p[15] - 0x111111); printf("info: %.20s\n", p+20); } else { // programme identification data (VCRs & Co) } printf("\n"); } } } } static void usage(FILE *fp, int exit_val) { fprintf(fp, "usage: %s [options]\n", prgname); fprintf(fp, "\n" " Valid options:\tDefault:\n" " --help\n" " --version\n" " -vbi \n" ); exit(exit_val); } static int option(int argc, char **argv, int *ind, char **arg) { static struct { char *nam, *altnam; int arg; } opts[] = { { "-vbi", "-dev", 1 }, { "--version", "-v", 0 }, { "--help", "-h", 0 }, { "-newbttv", "-fuckbttv", 0 }, { "-oldbttv", "-old", 0 }, }; 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; } void main(int argc, char **argv) { int big_buf = -1; char *vbi_name = "/dev/vbi"; struct vbi *vbi; int opt, ind; char *arg; setprgname(argv[0]); ind = 1; while (opt = option(argc, argv, &ind, &arg)) switch (opt) { case 1: // -vbi vbi_name = arg; break; case 2: // -version printf("AleVT-Date Version "VERSION"\n"); exit(0); case 3: // help usage(stdout, 0); break; case 4: //newbttv big_buf = 1; break; case 5: // oldbttv big_buf = 0; break; case -1: usage(stderr, 1); } fdset_init(fds); vbi = vbi_open(vbi_name, 0, 99, big_buf); // 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); } alevt-1.6.2/contrib/patch-bttv-0.6.4100660 0 0 7564 6726242630 15035 0ustar rootrootdiff -ru -x *.o driver-orig/bttv.c driver/bttv.c --- driver-orig/bttv.c Mon May 3 01:01:05 1999 +++ driver/bttv.c Wed Jun 2 00:39:18 1999 @@ -74,6 +74,15 @@ #define ioremap vremap #define iounmap vfree #endif +#if LINUX_VERSION_CODE < 0x02017f +static void schedule_timeout(int j) +{ + current->state = TASK_INTERRUPTIBLE; + current->timeout = jiffies + j; + schedule(); +} +#endif + #ifdef V4L2 #include "videodev2.h" @@ -673,6 +682,19 @@ } +static void reset_vbi_seq(struct bttv *btv) +{ + if (btv->vbibuf) + (*(u32 *)(btv->vbibuf + VBIBUF_SIZE - 4)) = 0; +} + +static void increment_vbi_seq(struct bttv *btv) +{ + if (btv->vbibuf) + (*(u32 *)(btv->vbibuf + VBIBUF_SIZE - 4))++; +} + + /* If Bt848a or Bt849, use PLL for PAL/SECAM and crystal for NTSC*/ /* Frequency = (F_input / PLL_X) * PLL_I.PLL_F/PLL_C @@ -791,6 +813,7 @@ AUDIO_EXTERN : AUDIO_TUNER); btaor(tvcards[btv->type].muxsel[input]>>4, ~tvcards[btv->type].gpiomask2, BT848_GPIO_DATA); + reset_vbi_seq(btv); } @@ -907,6 +930,8 @@ *(pe++)=FIX_BE(virt_to_bus(btv->risc_jmp+10)); DEBUG(printk(KERN_DEBUG "po: 0x%08x\n",(int)po)); DEBUG(printk(KERN_DEBUG "pe: 0x%08x\n",(int)pe)); + + reset_vbi_seq(btv); } int fmtbppx2[16] = { @@ -1665,6 +1690,7 @@ i2c_control_device(&(btv->i2c), I2C_DRIVERID_TUNER, TUNER_SET_RADIOFREQ,&fixme); } else { + reset_vbi_seq(btv); i2c_control_device(&(btv->i2c), I2C_DRIVERID_TUNER, TUNER_SET_TVFREQ,&fixme); } @@ -2728,6 +2754,7 @@ btv->vbip=VBIBUF_SIZE; btv->cap|=0x0c; bt848_set_risc_jmps(btv); + reset_vbi_seq(btv); MOD_INC_USE_COUNT; return 0; @@ -2746,6 +2773,13 @@ static int vbi_ioctl(struct video_device *dev, unsigned int cmd, void *arg) { + switch (cmd) + { + case BTTV_VERSION: + return BTTV_VERSION_CODE; + case BTTV_VBISIZE: + return VBIBUF_SIZE; + } return -EINVAL; } @@ -2855,6 +2889,8 @@ case VIDIOCSAUDIO: bttv_ioctl((struct video_device *)btv,cmd,arg); break; + case BTTV_VERSION: + return BTTV_VERSION_CODE; default: return -ENOIOCTLCMD; } @@ -3886,8 +3922,7 @@ if (stat&(1<<28)) { btv->vbip=0; - /* inc vbi frame count for detecting drops */ - (*(u32 *)&(btv->vbibuf[VBIBUF_SIZE - 4]))++; + increment_vbi_seq(btv); wake_up_interruptible(&btv->vbiq); } @@ -3961,6 +3996,7 @@ } if (astat&BT848_INT_HLOCK) { + reset_vbi_seq(btv); if ((dstat&BT848_DSTATUS_HLOC) || (btv->radio)) audio(btv, AUDIO_ON); else @@ -4142,7 +4178,9 @@ int result; unsigned char bus, devfn; struct bttv *btv; +#if defined(__powerpc__) u_int32_t cmd; +#endif bttv_num=0; diff -ru -x *.o driver-orig/bttv.h driver/bttv.h --- driver-orig/bttv.h Mon May 3 00:32:49 1999 +++ driver/bttv.h Tue Jun 1 22:20:48 1999 @@ -229,6 +229,7 @@ #define BTTV_BURST_OFF _IOR('v' , BASE_VIDIOCPRIVATE+5, int) #define BTTV_VERSION _IOR('v' , BASE_VIDIOCPRIVATE+6, int) #define BTTV_PICNR _IOR('v' , BASE_VIDIOCPRIVATE+7, int) +#define BTTV_VBISIZE _IOR('v' , BASE_VIDIOCPRIVATE+8, int) #define BTTV_UNKNOWN 0x00 diff -ru -x *.o driver-orig/msp3400.c driver/msp3400.c --- driver-orig/msp3400.c Fri Apr 16 08:25:45 1999 +++ driver/msp3400.c Tue Jun 1 22:36:24 1999 @@ -112,7 +112,7 @@ #endif #if LINUX_VERSION_CODE < 0x02017f -void schedule_timeout(int j) +static void schedule_timeout(int j) { current->timeout = jiffies + j; schedule(); diff -ru -x *.o driver-orig/tuner.c driver/tuner.c --- driver-orig/tuner.c Sat May 1 01:29:08 1999 +++ driver/tuner.c Tue Jun 1 22:36:49 1999 @@ -23,12 +23,15 @@ #endif #if LINUX_VERSION_CODE < 0x02017f -void schedule_timeout(int j) +static void schedule_timeout(int j) { current->state = TASK_INTERRUPTIBLE; current->timeout = jiffies + j; schedule(); } +#endif +#ifndef EXPORT_NO_SYMBOLS +#define EXPORT_NO_SYMBOLS #endif struct tuner alevt-1.6.2/contrib/url-netscape.patch100660 0 0 4730 6777234702 16015 0ustar rootrootMessage-ID: <19990906223940.A24779@sk.stg.sdm.de> Date: Mon, 6 Sep 1999 22:39:40 +0200 From: Sebastian Korff To: EdgarToernig Subject: alevt Hallo Edgar, Ich habe alevt-1.4.5 installiert. Beim Rumklicken im Videotext bin ich auf die Idee gekommen, alevt mit dem Browser zu verbinden, sodass man im Videotext auf eine URL klicken kann und diese dann im Browser geoeffnet wird. Entstanden ist dabei der nachstehende Patch. Dies ist ein Quick-and-Dirty-Hack !!! Sogar der Browser steht fest im Code! Ich dachte nur, ich schicke Dir das hier als kleine Anregung fuer zukuenftige Erweiterungen. Oder haeltst Du von dieser Idee nichts? Gruss, Sebastian --------8<-------------------8<------------------8<------------------- --- alevt-1.4.5/ui.c Thu Apr 29 22:42:03 1999 +++ ui.c Sat Sep 4 08:30:51 1999 @@ -181,6 +181,37 @@ } static int +chk_screen_www(u8 *p, int x, int *pgno, int *subno) +{ + int i,n=0; + p += x; + + for ( i = 0; p[i]; i++ ) + { + if ( (p[i] == '.') && (p[i-1] != '.') ) + n++; + else if ( isalnum( p[i] ) || ( p[i] == '/' ) || ( p[i] == ':' ) ) + ; + else if ( ( isspace(p[i]) || (!isgraph(p[i])) ) && ( n >= 2 ) ) + { + char buf [200]; + p[i] = 0; + sprintf( buf , + "netscape -remote \"openUrl(%s%s)\"" , + strstr(p,"://") ? "" : "http://" , + p + ); + system ( buf ); + return 1; + } + else + return 0; + } + return 0; +} + + +static int chk_screen_pgno(u8 *p, int x, int *pgno, int *subno) { p += x; @@ -236,10 +267,16 @@ return; } if (i >= -4) - if (chk_screen_pgno(buf, x+i, &n1, &n2)) { - new_or_query(w, n1, n2, new_win); - return; + if (chk_screen_pgno(buf, x+i, &n1, &n2)) + { + new_or_query(w, n1, n2, new_win); + return; + } + if (chk_screen_www(buf, x+i, &n1, &n2)) + { + return; + } } } } alevt-1.6.2/contrib/vtxt20x24-latin-1.bdf.gz100660 0 0 6355 6742212545 16434 0ustar rootroot‹e‰7vtxt20x24-latin-1.bdfå]oÛȆïõ+„Ü+˜3ŸœK›w ìÚFìmÓÞiâ`$»ÅÖm÷çW²äèÆdÉá!9ÌNË’^Í×sæë½½;{sW]_Ý­åkZ=ýc½y÷ùá?›Ç‡Ï>n¾<|øôï/›?6¿ýþÇ—wŸ7)6´qfÿ÷ýÆ‹ÍÇß{ü×?Þúøéý†V·—ß®¥^;³ûûôšç׿\]\^ýp~ýv-Åþgb½Q«Ûý›ß¼¹¾Ù¾¹»ÜÞ®ýêæúòêîþéhusùvûÓá«7ÛÛëŸ~¹»¼¾º»]xü·ç÷¹?»-·; þðèb{x¨VgÙ¾9ûa{ÿ×Ë‹»w½9+whýª|µºûóùEµ½¸¿¼ª®×¯¶>=>|Xÿ÷Óã¯ë?¿üãÃÇÝõZ½~µÚ^]œ>íªüñìÍíZ{б¸~ÿë»?Äîyåõ^îZ¬nïHVˆÝ£‹ãûïÿ}~|ç—w?ŸÝ¬ÄÓŸôÃî«Ø ®I§“tê-½ªÊý+÷iH—'é2¢ÔUU‰˜‚tu’®"J½Ú+éÒ®OÒõdm}ê†ò²ts’n&këiH·'év²¶ž†tw’î&këiH/NÒ‹ ÇõiG†—¥û“t?Ḟ‚tœ#1áÈž„x:šplOB< É G÷i¨A<@© Ç÷$ÄÖ‘žp„OB<€™ Çø$ÄÚ‘M>{mf âîÈ%Ÿ¿3‹¼£"ù žY<ùäsx^ñOŠä³xfñ@x’’Ïã™Åã¤L>“g„'Uò¹<³x <©“Ïæ™ÅáI“|>Ï,OÚäóyfñ@xÒ%ŸÏ3‹“Eòù<³x <é“ÏçyÅ+ <%’Ïç™Åá)J>Ÿg„§df«ñ f³øŠ%tÍÞâð3áUªìæ*y ýSP¢|ú¡ÞIêðõüLQ~ »§¾ÉØ’ÂSÌ„§ªB[…­=³:¬ÕA Ïr«çêp¨½Åá)?]o¯J síÃÂÓÜsxÇZüreŽ µo2|‡Þâð41Wûî»{ˆ«? âðô„„×Òækƒ[[Ï1´Úái5!Þ¶ô­ÃY×Á­“xÜ|§Àöqhƒx ^{,¸9/8BÒrBº¶Ï"úœuùxñ±P3–>Kå¯5¨SÍh’W ½´~`fO/?fÂ;sj¥wþnpÛÇë…õ¬U˹¨ÚÔFä5á%$ê9Ýh“ 7ß’uóÊ~u\Òa½ž^,ØO×bHp£ ¼YÌE}õ®¯ê9Í[F^CщDäOÖó‡V”&ó¶’CÙÉ¥•~ç5þ&ùH}ô]Q_šä#õÑlw©TªÂpœÎé@i[ˆ¨üH}dRiû]×ö·}¤¾q]/ÆÈøê×ô–ÔGsÍó YÃ4Ý_P‘ ü> Ÿýå#õ‘O²ô[8oà:>¡ùÉù¨7±¶–pí¦µà÷"ä#õIZzÛï;Û#‹³4¨oº[u-0H涪Kh‚ARg'©Ošìä#õI›|¤>éÆ<Œ8qè&©O (ý8†&ùH}Ò/À«žU>b ð«ç•Ô§hžõ¼ò‘ú”\€o=¯üÀÚV-À»žW>RŸÒ ð¯ç•Ô§Ì<ìyå#õ)»{^ùH}Ê-ÀËžW>RŸ*àfÏ+©OùøÙ³ÊG“ ÒbŽö¼ò‘ú4-ÀÓžW>RŸ– pµç•Ô§Õ|íyå#õ-À-#ökk’ԧͼíyå#õi»w{^ùH}Ú-ÀßžW>RŸ.àpÏ+©OûxܳÊGã 2b.÷¼ò‘ú -ÀçžW>RŸ‘ pºç•ÔgÔ¼îyå#õ½·{^ùH}Æ,ÀïžW>RŸ± p¼ç•ÔgÜ<ïyå#õ™b®÷¼ò‘úŒ_€ï=«|4Ó v7 w”ñ.©!´Ó ›ÛM-„†devò‘úlvûúÐTƒ¬žëv®霷sÚjÍn_kÍn_Zk··F‹i`tåguO#4× [dWúH}Öç& 6ȉìä#õ¹ ©O¡ÄPÛ›ü¬ö{ƒå#õ9nê+1„§ù˲„>3:ô—Ôç²£>4Ú —Ýi´Ú —õ¡Ù wÛhƒ™Î.öSÊGês.»ÒGêsÙQZnËŽúÐtƒŠì¨m7¨Èn®7¨Èn®­7¨ÈŽúÐ|ƒ†¹oا@‡I7Wì¦&Üv¨*žÆý-\ËBÁ-ën—äl¿ñl³ÿEx¼ŽÍ½ô*‡¤;ÉGê+²£>4à "»¹>´à bRê+ƒ Nᛳ¸*xJø{å#õÙQÚpP‘õ¡ù쨭8(;/B3Ê΃Ўƒ²óã 4ä ŸÝ\ZrÏŽúДƒb\9Z/ ‹sÑŠuÚŽ‘ÔãËÑ}r3IùH}>;êCkò¹QŸDo)Dvò åÇP_³Ü7­V´ØÀU¥Ó™ŠKôæBfWú å«ìäk”¯³“oP¾ÉN¾Eù6;ùå:×׆Ç39³Hôæ¢È®ô=ÊÏŽúЛCRvÔ‡Þ’(;ùH}”õ¡7‡¤ì¨½9dŒ7Gûpe731DoIÙQzsHÊŽúЛC’ËN>ReG}èÍ!);êCoãÍÑÒóÑ×3÷üèÍ!evÔ‡ÞRfG}èÍ!¹½9êçøŽgY_ªËêhÂÙŽSÃ/Ìw“ÔÇíÍQ÷Ï-F´³˜ÏKôæìÞÍk©ÈGêãöæh[þLD>RŸÌŽúЛCŽëÍ‘dé#õI?×Q¦¹ä£7‡TÙÍõ¡7‡T‰úð†K»-ÐÛleÖ$©Û›#rÜïîµ;˜ùÑ›C*•ĸ?¥|¤>¥“÷§”Ô§Lß”ò‘ú¸½9ú´ýy–8Ñ›C*7_ÛŸI>RŸ*ækû3ÉGêSÙÍõ¡7‡ÔÙQzsHMÜ•_•§šÌ‡“¢õÞ=nâ3B>RŸN’úÆœéEo©“¤¾Qå#õé$©oTùH}:»^ôæÚ¦½£–>RŸÎn®½9¤În…½9¤ö3 |C–8Íõ¡7‡4b¦o>ùH}†føæ“Ô7®7G’ò‘úLvûúЛCšìNs 7‡4ß?õíbu}u·ú-ÔëLqÿalevt-1.6.2/contrib/howto-export100660 0 0 6566 6757324126 15003 0ustar rootrootHOW 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. alevt-1.6.2/contrib/paul.fmt_page.c100660 0 0 13177 7005421235 15265 0ustar rootrootstatic void fmt_page(struct export *e, struct fmt_page *pg, struct vt_page *vtp) { char buf[16]; int x, y; u8 c, *p = vtp->data[0]; pg->dbl = 0; sprintf(buf, "\2%3x.%02x\7", vtp->pgno, vtp->subno & 0xff); strncpy(p,buf,8); for (y = 0; y < H; y++) { /* two variables for each attribute * new_attr -- information got from the latest char * here_attr -- value of the attribute for this xy position * So, if the attribute char is "Set-At" * then * { * here_attr=new_attr=attribute(latest_char); * ... processing ... (use here_attr !!!) * here_attr=new_attr; // <-- unneeded, * // but doesn't break the code * } * else // Set-After * { * new_attr=attribute(latest_char); * ... processing ... (use here_attr !!!) * here_attr=new_attr; * } * Attributes persist until changed by another attribute * or end of row */ u8 held_mosaic_char=' '; u8 dbl=0; /* set to 1 for double height page * (is used at the end of row processing) */ u8 new_gfx=0, here_gfx=0; // Start-of-row default condition u8 new_bg=0, here_bg=0; // Start-of-row default condition u8 new_fg=7, here_fg=7; // Start-of-row default condition u8 new_bln=0, here_bln=0; // Start-of-row default condition u8 new_dbl=0, here_dbl=0; // Start-of-row default condition u8 new_con=0, here_con=0; // Start-of-row default condition u8 here_sep=0; /* Start-of-row default condition * set/reset by 0x19,0x1a chars * Both (0x19,0x1a) are Set-At * so anyway (here_sep==new_sep) all the time */ u8 new_hld=0, here_hld=0; //hold attribute: u8 held_sep=0; for (x = 0; x < W; ++x) { pg->data[y][x].ch=' '; // case 0x00 ... 0x1f switch (c=*p++) { case 0x00 ... 0x07: //Alpha Colour Codes (foreground) //Set-After new_gfx=0; new_fg=c; // in this case (c == (c & 0x07)) new_con=0; break; case 0x08: //Flash //Set-After new_bln=EA_BLINK; break; case 0x09: //Steady //Set-At new_bln=here_bln=0; break; case 0x0a: //End Box //Set-After //!!! not processed break; case 0x0b: //Start Box (used with End Box to mark visible // part of page on transparent ones // eg. newsflash or subtitle ) //Set-After //!!! not processed break; case 0x0c: //Normal Size //Set-At new_dbl=here_dbl=0; break; case 0x0d: //Double Height //Set-After dbl=1; new_dbl=EA_DOUBLE; break; case 0x0e: //Double Width (for Presentation Level 2.5 and 3.5) //Set-After //!!! not processed break; case 0x0f: //Double Size (for Presentation Level 2.5 and 3.5) //Set-After //!!! not processed break; case 0x10 ... 0x17: //Mosaic Colour Codes //Set-After new_gfx=EA_GRAPHIC; new_fg= c & 0x07; new_con=0; break; case 0x18: //Conceal //Set-At here_con=new_con=EA_CONCEALED; break; case 0x19: //Contiguous Mosaic Graphics //Set-At here_sep=0; break; case 0x1a: //Separated Mosaic Graphics //Set-At here_sep=EA_SEPARATED; break; case 0x1b: //ESC (or Switch) //Set-After //!!! not processed break; case 0x1c: //Black Background //Set-At here_bg=new_bg=0; break; case 0x1d: //New Background //Set-At here_bg=new_bg=here_fg; break; case 0x1e: //Hold Mosaics //Set-At here_hld=new_hld=1; break; case 0x1f: //Release Mosaics //Set-After new_hld=0; break; // start of "... processing ..." default: //noncontrol characters pg->data[y][x].ch=c; /* **************************** */ /* special treating of sep * when in Hold-Mosaics mode * see the specs for details... */ if (c & (1<<5)) //why "6" bit set is (1<<5) ???????? { held_mosaic_char=c; held_sep=here_sep; } if (here_hld) //when in "hold" set 'here_sep' here: pg->data[y][x].attr|=here_sep; /* **************************** */ } //end of switch if (here_hld) c=held_mosaic_char; if ((here_gfx) && ((c & 0xa0) == 0x20)) pg->data[y][x].ch= c + ((c & 0x40) ? 32 : -32); if ((here_con) && (not e->reveal)) pg->data[y][x].ch=' '; pg->data[y][x].fg=here_fg; pg->data[y][x].bg=here_bg; if (here_hld) // special treating again... pg->data[y][x].attr=(here_dbl|here_gfx| here_bln|here_con); else // when not in "hold" set 'here_sep' here pg->data[y][x].attr=(here_dbl|here_gfx| here_bln|here_con|here_sep); // end of "... processing ..." here_gfx=new_gfx; here_fg=new_fg; here_bg=new_bg; here_bln=new_bln; here_dbl=new_dbl; here_con=new_con; here_hld=new_hld; } 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+=40; } } } alevt-1.6.2/contrib/paul.fmt_page.patch100660 0 0 20263 7005421042 16130 0ustar rootroot--- alevt-1.5.0.orig/export.c Fri Oct 8 01:52:41 1999 +++ alevt-1.5.0/export.c Fri Oct 15 09:11:20 1999 @@ -240,120 +240,220 @@ return p; } - static void fmt_page(struct export *e, struct fmt_page *pg, struct vt_page *vtp) { char buf[16]; int x, y; u8 c, *p = vtp->data[0]; - pg->dbl = 0; - - sprintf(buf, "\2%x.%02x\7", vtp->pgno, vtp->subno & 0xff); - + sprintf(buf, "\2%3x.%02x\7", vtp->pgno, vtp->subno & 0xff); + strncpy(p,buf,8); 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; + /* two variables for each attribute + * new_attr -- information got from the latest char + * here_attr -- value of the attribute for this xy position + * So, if the attribute char is "Set-At" + * then + * { + * here_attr=new_attr=attribute(latest_char); + * ... processing ... (use here_attr !!!) + * here_attr=new_attr; // <-- unneeded, + * // but doesn't break the code + * } + * else // Set-After + * { + * new_attr=attribute(latest_char); + * ... processing ... (use here_attr !!!) + * here_attr=new_attr; + * } + * Attributes persist until changed by another attribute + * or end of row + */ + u8 held_mosaic_char=' '; + u8 dbl=0; /* set to 1 for double height page + * (is used at the end of row processing) */ + + u8 new_gfx=0, here_gfx=0; // Start-of-row default condition + u8 new_bg=0, here_bg=0; // Start-of-row default condition + u8 new_fg=7, here_fg=7; // Start-of-row default condition + u8 new_bln=0, here_bln=0; // Start-of-row default condition + u8 new_dbl=0, here_dbl=0; // Start-of-row default condition + u8 new_con=0, here_con=0; // Start-of-row default condition + u8 here_sep=0; /* Start-of-row default condition + * set/reset by 0x19,0x1a chars + * Both (0x19,0x1a) are Set-At + * so anyway (here_sep==new_sep) all the time + */ + u8 new_hld=0, here_hld=0; + + //hold attribute: + u8 held_sep=0; - for (x = 0; x < W; ++x) + for (x = 0; x < W; ++x) { - c.ch = *p++; - if (y == 0 && x < 8) - c.ch = buf[x]; - switch (c.ch) + pg->data[y][x].ch=' '; // case 0x00 ... 0x1f + switch (c=*p++) { - case 0x00 ... 0x07: /* alpha + fg color */ - c.fg = c.ch & 7; - c.attr &= ~(EA_GRAPHIC | EA_SEPARATED | 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 */ - 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 bf */ - 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) + case 0x00 ... 0x07: + //Alpha Colour Codes (foreground) + //Set-After + new_gfx=0; + new_fg=c; // in this case (c == (c & 0x07)) + new_con=0; + break; + case 0x08: + //Flash + //Set-After + new_bln=EA_BLINK; + break; + case 0x09: + //Steady + //Set-At + new_bln=here_bln=0; + break; + case 0x0a: + //End Box + //Set-After + //!!! not processed + break; + case 0x0b: + //Start Box (used with End Box to mark visible + // part of page on transparent ones + // eg. newsflash or subtitle ) + //Set-After + //!!! not processed + break; + case 0x0c: + //Normal Size + //Set-At + new_dbl=here_dbl=0; + break; + case 0x0d: + //Double Height + //Set-After + dbl=1; + new_dbl=EA_DOUBLE; + break; + case 0x0e: + //Double Width (for Presentation Level 2.5 and 3.5) + //Set-After + //!!! not processed + break; + case 0x0f: + //Double Size (for Presentation Level 2.5 and 3.5) + //Set-After + //!!! not processed + break; + case 0x10 ... 0x17: + //Mosaic Colour Codes + //Set-After + new_gfx=EA_GRAPHIC; + new_fg= c & 0x07; + new_con=0; + break; + case 0x18: + //Conceal + //Set-At + here_con=new_con=EA_CONCEALED; + break; + case 0x19: + //Contiguous Mosaic Graphics + //Set-At + here_sep=0; + break; + case 0x1a: + //Separated Mosaic Graphics + //Set-At + here_sep=EA_SEPARATED; + break; + case 0x1b: + //ESC (or Switch) + //Set-After + //!!! not processed + break; + case 0x1c: + //Black Background + //Set-At + here_bg=new_bg=0; + break; + case 0x1d: + //New Background + //Set-At + here_bg=new_bg=here_fg; + break; + case 0x1e: + //Hold Mosaics + //Set-At + here_hld=new_hld=1; + break; + case 0x1f: + //Release Mosaics + //Set-After + new_hld=0; + break; + + // start of "... processing ..." + + default: //noncontrol characters + pg->data[y][x].ch=c; + /* **************************** */ + /* special treating of sep + * when in Hold-Mosaics mode + * see the specs for details... + */ + if (c & (1<<5)) //why "6" bit set is (1<<5) ???????? { - last_ch = c.ch; - c.ch += (c.ch & 0x40) ? 32 : -32; + held_mosaic_char=c; + held_sep=here_sep; } - 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; + if (here_hld) //when in "hold" set 'here_sep' here: + pg->data[y][x].attr|=here_sep; + /* **************************** */ + } //end of switch + + if (here_hld) c=held_mosaic_char; + + if ((here_gfx) && ((c & 0xa0) == 0x20)) + pg->data[y][x].ch= c + ((c & 0x40) ? 32 : -32); + + if ((here_con) && (not e->reveal)) + pg->data[y][x].ch=' '; + + pg->data[y][x].fg=here_fg; + pg->data[y][x].bg=here_bg; + + if (here_hld) // special treating again... + pg->data[y][x].attr=(here_dbl|here_gfx| + here_bln|here_con); + else // when not in "hold" set 'here_sep' here + pg->data[y][x].attr=(here_dbl|here_gfx| + here_bln|here_con|here_sep); + + // end of "... processing ..." + here_gfx=new_gfx; + here_fg=new_fg; + here_bg=new_bg; + here_bln=new_bln; + here_dbl=new_dbl; + here_con=new_con; + here_hld=new_hld; } + 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+=40; + } } - pg->hid = pg->dbl << 1; + } int alevt-1.6.2/contrib/vtwiz.pl100660 0 0 15421 7006423160 14111 0ustar rootroot#!/usr/local/bin/perl -w # # vtwiz, (c) 1999, j. borgert, borgert@theo-physik.uni-kiel.de # # purpose: ------------------------------------------ # # GUI for alevt by E. Toernig # # alevt itself is not capable of switching stations # so I wrote this script that greps ~./xawtv for # valid station names, uses set-tv to set one # selected via a listbox and fires up aletv with it. # # with aletv running, selecting another (different) # station leads to an explicit kill (ouch...) and # restart of alevt with the new one... so inventing # channel switching to alevt... # # you could also put in a page number by an entry # which is selected at startup... # # alevt is handled its own methods once it runs. # see alevt's documentation (page 900 or 'h' key) # for usage. # # # what you need: ------------------------------------ # - alevt (used for coding: 1.4.9) # - Tk (used for coding: 800.014, # but 400something should also work...) # - Proc::Simple (used for coding: 1.12) # (try CPAN www.cpan.org for the former two.) # - xawtv/set-tv (used for coding: 2.35) # - have xawtv up running and performed station scan # ( ~./xawtv has to exists) # - have set-tv working # (should if xawtv works) # - an by the way: have perl running (who has not?) # (used for coding: 5.005_03) # # # to do: # - add xawtv start up method # - prevent alevt from running when any other v4l app is running # - add options (default pages, mark stations that do have no VT) # - add capture like access to pages (by alevt-cap) # - ... # - suggestions? c above for e-mail # # --------------------------------------------------- # # have fun... # #------------- packages ----------------------------------------------- use Tk; use Proc::Simple; #------------- inits --------------------------------------------------- my $page = 100; my $alevt_commandline = "alevt"; my $alevt = Proc::Simple->new( ); #-------------- read'in stations --------------------------------------- # # get users homedir from environment # $homedir = $ENV{HOME}; open( XAWFILE, "$homedir/.xawtv" ) or die "Cannot open ~/.xawtv\n"; my @stations; LINE: while( ) { next LINE unless /\[(.+)\]/; # only take station names # (in square brakets brakes) push @stations, $1; } close XAWFILE; #----------------------------------- the GUI ---------------------------- my $top = MainWindow->new( -title => 'vtwiz' ); # # listbox to hold the stations # my $listbox = $top->ScrlListbox( -label => 'vtwiz, (c) 1999, j. borgert', -selectmode => 'single', -exportselection => 0 ); $listbox->pack( -side => 'top', -expand => 'yes', -fill => 'both' ); # # put station names into the listbox # for (@stations) { $listbox->insert( 'end', $_ ); } # # select the first entry (0) as default... # $listbox->selectionSet( 0 ); # # buttons ('fire up' and 'quit') # my $buttonframe = $top->Frame( ); my $firebutton = $buttonframe->Button( -text => 'Start alevt', -command => \&fire, -relief => 'groove' ); $firebutton->pack( -side => 'left' ); my $quitbutton = $buttonframe->Button( -text => 'Quit', -command => \&godown, -relief => 'groove' ); $quitbutton->pack( -side => 'right' ); $buttonframe->pack( -side => 'bottom', -expand => 'yes', -fill => 'x', -padx => 5, -pady => 5 ); # # page number entry. # change default page number at the top in # the 'inits' section. # my $pageframe = $top->Frame( ); my $pagelabel = $pageframe->Label( -text => 'page to start up with:', -justify => 'right' ); my $pageentry = $pageframe->Entry( -textvariable => \$page, -width => 3 ); $pagelabel->pack( -side => 'left', -expand => 'yes', -fill => 'x' ); $pageentry->pack( -side => 'left', -expand => 'no' ); $pageframe->pack( -side => 'bottom', -expand => 'yes', -fill => 'x', -padx => 5, -pady => 5 ); # # look after alevt and change button text if not running # $top->repeat( 1000, \&look_after_alevt ); # # what do u think? # MainLoop; #---------------------- subs ------------------------------------ # # sub to manage set-tv and alevt execution # sub fire { # # check for legal page numbers # which is defined bu the grace of the # script to be a three digit number # if( $page !~ /\d\d\d/ ) { mmsg( "illegal page number\n" ); return 0; } # # get the station... # my $station = $listbox->Getselected( ); mmsg( "no station selected yet" ) unless defined $station; if( defined $station ) { # # kill alevt if alredy running -> 'Change station' # if( $alevt->poll( ) ) { $alevt->kill( ) or die "Not been able to kill (bummer...)\n"; } # # perform set-tv action... # (not using Proc::Simple here to prevent # the set-tv messages from showing in the shell # or elsewhere... works well for just a little # v4l debug info still displayed... # heck, make an icon to fire vtwiz up # and u will not see it.) # my $commandline = "set-tv '$station' |"; my $output; open( SETTV, $commandline ) or die "Cannot run programm: $!"; while( ) { $output .= $_; } close( SETTV ); # output of set-tv is now in $output... # might be used for future status line or such thingys # # start up aletv by Proc::Simple (fork...) # $commandline = "$alevt_commandline $page"; unless( $alevt->poll( ) ) { $alevt->start( $commandline ) or die "Cannot start alevt\n"; $firebutton->configure( -text => 'Change station' ); } else { # should not happen... killed above... # but aren't we all a bit paranoid mmsg( "alevt is already running, nerd!" ); } } # # if anything went wrong turn the button to 'up' # unless( $alevt->poll( ) ) { $firebutton->configure( -text => 'Start alevt' ); } return 1; } # # kill alevt when I am killed... # (would live on otherwise... cause it has been # forked...) # sub godown { if( $alevt->poll( ) ) { $alevt->kill( ) or die "Not been able to kill (bummer...)\n"; } exit 0; } # # mmsg( message[, title] ); # creates new toplevel with title # for display of message # sub mmsg { my $msg = shift; my $tit = shift; $tit = 'error' unless defined $tit; my $toplevel = $top->Toplevel( -title => "$tit" ); $toplevel->Message( -text => "$msg", -width => '10c' )->pack( ); $toplevel->Button( -text => 'Ok', -command => sub { $toplevel->destroy( ) } )->pack( ); return 1; } # # called by repeat every 1000ms. # looks if alevt is still up (polling...) # if not turn button to 'up' again. # sub look_after_alevt { unless( $alevt->poll( ) ) { $firebutton->configure( -text => 'Start alevt' ); } return 1; } alevt-1.6.2/contrib/cap-all.c100770 0 0 1672 7613635477 14057 0ustar rootroot# #/* A minimal program that writes all pages it gets to disk. # gcc cap-all.c -I.. -DVERSION=\"0.0.1\" \ ../vbi.o ../misc.o ../fdset.o ../hamm.o ../lang.o \ ../export.c ../exp-txt.o ../exp-html.o ../exp-gfx.c ../font.o exit 0 #*/ #include "vt.h" #include "fdset.h" #include "vbi.h" #include "export.h" int debug = 0; static void event(void *fmt, struct vt_event *ev) { if (ev->type == EV_PAGE) { struct vt_page *vtp = ev->p1; char *name = export_mkname(fmt, "ttext-%p.%e", vtp, ""); export(fmt, vtp, name); free(name); } } int main(int argc, char **argv) { struct vbi *vbi; struct export *fmt1; struct export *fmt2; fdset_init(fds); vbi = vbi_open("/dev/vbi", 0, 1, -1); fmt1 = export_open("ascii"); fmt2 = export_open("html"); if (!fmt1 || !fmt2 || !vbi) exit(1); vbi_add_handler(vbi, event, fmt1); vbi_add_handler(vbi, event, fmt2); for (;;) fdset_select(fds, -1); } alevt-1.6.2/contrib/alevt-1.6.1.rus.diff.gz100660 0 0 17322 7530457221 16237 0ustar rootroot‹‘^b=alevt-1.6.1.rus.diffä]yWã8¶ÿ>…:=SË»CQÓ¥šž*à3]ó€“c‡øT¶I ^W}Ð÷mÞ•ä$r¼xÁo™®#lYËOWW÷wµDÓ³û}T=_Ì9´žœ*®©5\›ÌìÇÃÏæW«o-þË*r¿Z­†gÙ»YXèdñˆD JkuE‚gAÜ/—Ëåñ9°TWŒº‚YŽ_EUѨ`•Éýúë¾[DלÖÑ_Š‹Ó߯Kûh%ˆ¸¸¼)­âQu²N±­/—ŸÎNIúýj2vj“:"qíùaDŸDòÄ>Îíÿ´jƒ{ýÇ™5EÕ*ü܃VŒ­BPBôa]Ò~9¢Jú$Ѳ˯TÎ'ÝÆ*‹Ú_'®£‡^_$)þRl_œß”ªCÓ±ÇÐUò­.¿Ó,è}@2V8-nY¶U¶X¶¸Y¶¸.›I¿Ìd$yË~ržê׉­ÓRË¥Jè½'+OZbu“®J«uW:U½@Õù:žè”û²ß A+µƒ{ìÑ{ï§àÑäM³÷‡ÕC]aŒ0 ©.d„¾1µ‘ocdiuY^,Ù¨h¨LC2®œ…¦³ÉãÌ!Çšì±éXsôÍvÈz¶4wLg1G™}øŽææ“=~dùÌáÌ2{/*v3;5­y ¡øŠi.†²çÈ™ o&՟̬'kVÛGµ›Ëýjíô ÝU»s6·t‡\ºûþÝÕ€ýò«Ià‰ômu¶®­¡ÕuæÉav)^Èõ/æàj,£çhÝ ÷ä ûÖïÁ׎=¶"KDHå-2H4Tô&ã+y"™»&4 uÒ`F¦C’l¶i` §þýÍEz´òµÑWÃÏÖ™ÅGŒ>–€·Ë¢P$wô…Øe7SäèSEb”iH§vzfïÁÑ!<Œ'äqµÆæÃКöì9} FËšÍ&3D€;'B_E“öþ›ZëyZ}ì?oÚUlpG¯>Óûl¾ Dz·.é¡ÝìÍÚÉ"&LCjøÕšÂÿ“òú\y9Ú¯"´ãi±Qu€æ³î1*ºãöoÌë<ØÐÌ[é –‘Y?ÜœGá"éÝì<wžx#_Ž;/ß\C‰Ðk}0pFÀN`Ñá½À¾S™ÒѦ!×E½. áÝÀå §:Œ+X¶ƒ¿¢°¢œßn>êœ"TÕƒž¡ë›«³ËËV³C¾,ÛÚŸ.œy±ð~d9&8δ c?ß CPñêÍËÔº+ .{…Žõì`G…JZ¢ÝK š@ûÅþ´RpGݱ=ŸTu]1ªíÝ>*ëÇÐIb‰õ/p¸gÝûµÊSfà¨=e=\®“òKGÈ5Ǿüâ+ùÅðü„S‚s3óóÇFˆš1Èòcë¼uursqå‘ðÊË¡R£2ÞèRÆoËr×ÐXá™Ë?¤š{!¤”úÂ[ÆÖ=ò³5†A¾Ù3Ä [ <Âаwü³¨à±Ï¾íµg6÷HG‚P'D ƒÙ0 ߸wÓ¿âÞJĽ•™{Ë&ÍtjcwÑá:ƒ X7`¦zNÌ!:8äœÖÂjŠ[ØŒYlÙ+±Ø×„2ð7d!”Á¦Päº Fe-ƒøÝˉà>L÷€®Ç^úàhâöþ("¸JSM#­ËYwùÐùf÷œÁ«‹>o|XöãÀq°—(ÙÍñã†Â±¨`Ù²o{׋1ú}1DXGdF%Õe=X¶núWN& §øæS07æN](Ã;K*Œìy·6ðh¸’ÞŠ¢h}²R1T ³•õèÓÄîí+ù$RKU\èè`Z¡<>fH Ôû ¦‘Ät+\w’á¬ÇëX8b“(â©/mä1›M”лw´Øãc,‚i$£k¶˜ÏmsL†-òÛ€,2ÇÕ*o;¦+ãµük÷‹Ýãcá?”HÅ€à'øsD m]7\; Ž0©pAîÜÙ•ˆU}\2²ç°|Ån‰«ßýFœUÒV˜Z»0kžM¡„~‚¦?‹‚79ÃG•˜”‰5-NKG\š\Õ?àq=ksK·@b :ÌÍH"&gö G$Ë´\fEþ€ðYC´”?™9æ¤É" žÎ¡ˆP:dðÝv¡Èƒé=™IBWïm×VÐB!“¶ƒ)Ô±ªq~KQáû[Æ=ú{À-b@Ab€X*&G" ¨(@@º_Éüq¥hª¢±eõ@9Ø,ŸhgõŠN8ˆb½võ€ª8´÷O¦ÓD?Ìát`¶ïP¿.€žÌ,gF -Ó€^þòî´ñÅ}!ˆ1ð˜êÌßRm™‘=ac‚ÔòZ…è8]â^GÝ¥ãÁ b†$éíýñŸDC„çŒL1 EJ4”i¨ÐP¥¡FC†F…å>¡o§4lаIà Û$lÓÚ´†6­¡-±ÜmZG›ÖѦu´imZG›å¦5´i mZC»éæ¦u´ 6h ZGƒÖÑ ­hд†­¡¡±Ü ZGƒå¦u4h ZGƒ¶¢AkhPMZC³ÜMZG“ÖѤu4iMZG“¶¢IkhÒ𴆿©››ÖѤu4iͶë=ÑQêÚ5Ä6j~@¯>±# ÔZÂë{òªõAϦǬkÝ‘ È$í½§¦~4ý/ÿõË ˆüGu‰‚†é²Ö+<˜½^ÇÌq×*ºËiî+:°ŒzÝIϪ …$¢‡ÒCyU1ýHƪ5¨~ƒ^w`NÈYž‘5êN_Šä+pÝlËq$YANþÀ3Ù‹˜ô‹PürõL+ÀUDøÃÏþ\.|±e"¥Ž]gb6¡"Ë$ µvfo†Þ£?ˆ@g“oðø[‰,h­l˜ë¬“u«¸å¤˜.´íí=ÁœîCÏtÌ[(çþʽSô(ŽÌi‡e¸%_«’=²¬Î/ÊÜ‹¿|qÛòE®|’cµdÆ CEµZ IxS&µotõ¾g›Ý™ æœÙ‘9ûê®A¨T̪¼óžkcž©_Ɖ‡˜`Бî`V$T?<Âè!ØJL´{›rÝ *)’ä„YQ®$ŸA¹—e»âÜ[Ér/ZÁeŠ›e.[,wÁÒüxÕ£ø½ÀA„G9ØûΗù$>Ÿ¼}>™Ï§òù–« ”ä Ûh2³Ü¼U77ÑhjõÔÔhHÓ€ù±óùäãuëêìäu^ ign{’Žd¬ uî zÀ¥e§¤œ'ã¦a.@÷•ƒ7È]êîÐÍÁ94¬OèÃÓì2¨ÖW(|×"ñÏa‚#‰¥£#OÎéãxB«G [$*`™ Jo'MT„¾*ÁÓ„%:o‘úZÿÈ5Ò,5]8£*ÜÉwâz‡ï”;éN+Ü‚èšr…¬WÜT´G®íÞ½n«kYuÍ1évºÆÐúüý˜´Š|ï !ßIÛß±E‚@\ž ¶\”ñÊ ò÷Jù˜lÞzË%çh¹½¦_¥–©Öè€ þøZ2«ºS°îÚã…‚î+ˆæX¥Z/UÄÖbòÇÕ¢åVëŠáÑb¼˜ƒÛgÒ…r#kìÀ4d•`©«LM[ÿì|¹UYÙË%¤êÈêÙ‹QuVÓþ*8 U\Õò¯[5v„Üs»ow«PÊõÙ´´¦À?VæéÅ?ΛgçO/¾ ƒL$ðèÜÚ/¯..[W7g­k„¡m—gç7V¼}i}rßÔýòUëúâÓ?nÎ.Î;_há\Ä¿VµuN®-hÝ÷f‹E@•'ÿl]|luþ8kÞü† ¨ðô ¡B|¶Î—ϧÍv«Ù9;o_ B«g“9u žG ]x‘jB­àŠª@D/­óæºûåÆo'W×Ä,¹M$ï”[’´qADHÕ …®Êymº Èóé©GR§g7ŸO.÷Ë݃Î.„†°›¸1‡ÇÁݦ¥‡…™á9Üb,y·u!"| yK±äMñ……™áæõ[N_¿Û[„‰å­¤¯ß™áæõ[M_¿ßDÞZúún^¿õ ìw´µÙbìn!o#ûn^¿± cœÏ 8¯áXÌÀ„GÜ”$.e`óîÑq9#þ&W2°âY÷踚­lÛH\ËÇÜ£ãz>Žxr‰ùxâ±€ó:. ù¸â‰%.â||ñÄ:.Šù8ãÉ%.åã'×q9w<¹Ä•|üñä:®æã'—¸–?ž\Çõ|üñä7òñÇë¸$äã'–¸„óñÇc—<"ÿ­‹K\JŠë$”›!‹çC>=³=r™Gž€Õ7×èxü<ÃúÃ]‘óª&æP6ú$ɆÅK±g*Ï¡jbÅB~: Äë”8ržCÕĪñk¹Ò¡ºÎµ+ržCU#_ÑEŤ*s{F2·"ÊÉ<ÖlNã9TÞ9jq¼\ÍsÈg¬ç>Ûâêy3ržCµÄfñ¢ía,«¨ñªIé¬a}·0–®ñª%çаÙ=ìÅBÎs¨–|b÷<»Ò>›©ÅÒžCµäºõQr«Ès¨–˜CÙ:gK[ﭰпêwEÎs¨¦§c[Xïk§œUa¡–¦má9T3²šûG‡±¼\Ýó³!!c_QH‘CužCuü†2?]k‘+sf9µm‘óª‹Ë<ćŒeužCõ æ¡·RêJ5%=ç9TOÌ¡¼ 4ŒLÙ_ç9TW²ò¸²°-<‡êj:L´MÈ{,±V¡užCu-[äüÞ"Ó+ÞïÚ9Ï¡ºž&r¿Ty­öï™îŠœçPÝH_æaøPƒçPCHǶ0Ìzä*b¯S¶ãøŠ†çÇ·89ÑV^.Æ’9Ï¡FJk¹2¿+'¬÷Ó]>jq,/qgvDÎs¨‘ÒÊžrÜ»+v¯b-«_¨©Ì=°‡Wq×0d¶Êޱ‡W±ñØÃVÛwÅ.zo£²Âî—²½}gì^3àÕ­ö”Ú›§×µ-|`Ñëb¼ªñZò{ïX'3°èáUQJg#àW]Bä/2bÙHÑëɯ4Âzüpgì^•tæMa’ ý­]¬‹ E¯ŠÉÃÝõÍÜ¢‡WÅ”x•½íÃîÕsÚ1ˆ¼¬g›k³¸Ý(3äËžÅõFo#ó,î7Ê ¹Gϳ¸ßh«û®“Ë\Êéfôäz.çt7zr™+9ÝŽž\ÏÕœîGO.s-§ғ빞ÓéÉenätGzb=—…œ.IO,sçtKzb=—Åœ®IO.s)§{ғ빜ÓEé‘íÚJæJN7¥ÇAîÕs5§«Ò“Ë\Ëé®ô8Ƚz®çtYzr™9Ý–žXÏ!§ëÒË\Á9Ý—žXÏ1§ Ó“Ë\ÊéÆôäz.çtezr™+9Ý™ž\ÏÕœ.MO.s-§[ӓ빞ӵéÉenätoz,äª÷ÿÉHˆ]ЃÃè¯Û¤ Åî‘{ò;Ž¢oG¾Y}×=Ï%G8É-Gþ³î>ºà ¥Ýî¯ ÅîÙMrÏQÌSÈño®Áž‹ŽpZ7Éx·;ëÜÛÈñŽØ=û£Éï: ;¹ÀÎ[øŸéŒg4ÉmGÛœÑÙ&Ü»g4É}Gaçºü7Mñ7Ãosê+»çÜ‘šÒÍ»lìñ§sN›Á·P¸¿zuž×såVS½¯=…¢V06ƒÇó®Ø=—á$·Iÿ]ÜÕö4ráÏäWøÛI`í}M-wf÷„ZA¥ãC¥ªªY`UŽœ’ÍmÕÿÞdÈÌšÝxýrE'³—¬—'“ñÌxl?“ÔÏFA]¦íŒR±ã"ÔŸº/íP?ýÖˆùUsæ#èõ….‡ïõw¾ìÀŽüjì»Í–êÕñnÄŽüª9ûQãX «v´½¶0V‘_5á?Òã©7’;ò«& HMuIbG~5Ž]ñ¶G¼zq$"A¢&,H¾GòÆ@ß²ïÀŽüª R,U×âÓø‰}숉ê1!©ó¼ZÆŽüjbÕ¯¶Çº±t˜wÅŽëï2;,Žò¹)ÁF[ÛÎrG~5qìW»V†ÙùU]F¤¤­Â—b±ì’mà4IT°#¿j‰ä7ƒT8Å£)wäWMX‘ }‚·­£ÝøÑ"ÑÄÁ9ÈöðF»¨w`G~Õ„Iæ Žü†þ–i0vFfïWÁŽüª 7RìÀ~žÔG¸* EäHÔ„ VµñG[«;“û—Xwœ–kÜÌ=*.HGVTy*§’¼.×Ë¥bqàWcS É¥6Ö:†×F&óUV¯ëªÆðÖ³„\Kg°Üœ?å|w›¥ ¼ òï#+«?¦‰Er·q_/ÿî‚+i£ãÑV¾hýFŸ=ž1lg¬îP‚kqÚÆŠ ÏÄUø4ðz“ ¾¤M–šÕסŒÏŠ3cf/I«Q=¦„m4ª³Lvê û¦šmy6à»Fk̳äW¡dÝaGkÌ_R t&µ#à­ÒÈxí€y[ûÞu…¯ÃÚóBWúž¦[ûžÍ97ÑaUè¡Ìõ=@ØûÕ¦V˯âµæ¹Øù›îÆ®%wæcé̯¢¨ä‡7¯kÍ›Ð9wæ‚/éœ+äU¥x?SÁŽtÆ_ÒwÏj!ì̕δ¯²êÍ›Ð9wæ‚/i‡…‘fL\™O#ÂrwàW¡ ÁÚ“¸†ïíuc.ø’2Þ02áœOo®å¹:ÙÑž3ÐÄŽíLü]b¡'é¶ÍôtÕÄ/qIykóü Ö÷‘Û±ÚÔfzùH$w|I²ÜijIî(vÁ—ÔAîÝrØÌGó&|Iê^©³ÜQ,ÆøÕ¬òú`N&µRÉ’¢¢ÊÌœ/‰7俲V¶P½ü;ÃØCKõ Á8T™íéÍùp^Ìœ/I ‹hòïZ~µ:k°›×á:­^þû&sÆ$õlLSþ=¡Êر}YÒ™è Ì…% .c»ÖX ÐXõ üªz¶]ιëíÃÆ¾É§®Æj{›ií'1gN‚6/ë’03ózæ]ÏF⹇ïÛÄ.<Žœ·N-ÙwGê±'µgÛbÇcÕØ¯¦ÐþñÖÌ»qþçôÌ”Úc«ùÈŠ`íè{S¶Ý2vl#«cU9 ÓÄŽbd§*:ï¨-zù÷ÅæLJêÙvs¹‡h¬æuݲ6†ö¦ÚKi¬%w4ç ŒýjÆU3ìb” ,ÕvÛXGÖs÷¶ïä8*>€=°S•VåL“y}ŽÅAèÊFªgÛ;øU¬ïÆ~UζÜ{Sæ]/ÿŽö‹± vý¾ü$x;õÇa<qûÙR¨GúÕõÈ?=²þùÈÉý퉸.žJRœôúëëåÓ¢¸ʧÕ×AïfOå7E¹Ø¼-ÚÅ·¢¼}Øœ”Å=X=²zuýs;Yääç÷×—tL^;Ÿ®¯¨x¹™ç“?OÞêÂê]X[—Ÿ®.’z¿¡Ã4¿›,KHÿöˆÊJ¼ÃÖwýæýNNɯ|uS™(ÊÏ“/Ù|öù|RNö«›¦_þˆÛç³Y9è ÷Ö?ëg ‘Éö¯B|´—{«›+lߊiù0×yqÿP¬€‰{^ÁZî­a§û/Åó ûÛ˜«nÕŸixô!úòüûÛíS?òú7BoõoÕe­‰õéG4=ìñ©«ïÒ{öòñÞÞñ!ùtEöçù"Ÿͧ2-osR¡9 ‡ÇõNw›NotZçUŸ¾èSõ;%ïÈ»×/?Þˆ§¥Ÿøöq/uoý‰×}«ÿlæ?-“RUÃÿ@Õ³ªŠÿÄÝcòè ÷' èz6Ëjšç䡆ñI ëìDAQrâŸíí=ÙßÙÝ„­À•ó.á`ù9<;<8úòÓÝ' ‹|³¶vö·áøðàþ»óÍþqï9É´ §Xi£Õ±#LسƒðÙáã£Ýíãm8²_mînïøC²÷ëÝêXEÓÔõbX ÕïWÛ»;ûŸ¡4 ?;|µuØ{ú´OñùÉ><ën>ÝÆ ••T±jX¶é@„ñË'^EÌ:?=x±·½óè9×öÑ˃û°ßƒ­Çûx—õ‡~ÑÛûúxûðà9½Üþ|§wôôÕs®*Yà¬ÁcDûC;ðÉÖÖÞÎîÁcxÙ;ìíz¸ýžìl~A6ŽzûPhÕKp„Ô¼|tô„[uðâ¹ËøÁ×Ïa··/žmr­ü¡ÝM$›¿³{¸I=ôÙÞ“§½ãÍÝ^_¸bíj­ˆtÔ.º•¢vµrÚù·{Û[/±²«Ñ|ïÙ6šÙüÅöåýîèx^íaÍñ¿AIøïÐ0Ê~ù©"z>;xòå§GxÿŒŠõö¾!ð)²‚}õ˜Ê?y½½½ÞÖ#Áõ¾]'ì†}yè¶Z‘Šå}²Ü&T½»¹bÛ»ÇÛǽ§ö·âÔ/Ÿocu¿:8<øzÐgú~ûeyxôLTêxçyß>2ç¡Q$úźÍWz\dm ½i;à†ýrûöî&ô_n?–Ez‡¯ö©µØ¤g‡ÛÑÿ¨ÍÞ UÇig£ÑJ+â´¢²eQv0Œ?%³©: ö¯ßìö?{´‡|üº·ßÛÚù©9-ž …ÇH­92ôG_yÇ–Ñ2çJOOU¡'³1ï$5ž¡¹‡¯4÷8UÚV ²Žia ÆYÆ{5§ f·æ†W§cƒF߃m¬cdrFÝÂ(·X§c™% 2ÓŽ,áKÌhŒNF88-¸gÔ8l›ë¦ñCdé¶_‰\½+ýa¾2Yyð@æþÐk‹àÍüŠå‡;fÝ,:6׌$Œ"×åÐ~Ç6±^y¶¡Ùr°Ý¦m6šDXÊf Ø2,0=«E `×µºaA½ÕºKs“½ÑÀÀ`cc²©Y·zÁ³9NqBw_ç2Åoé/£ò™¬ÏÆTOgÑ š”’ì*oÉ.ÙN©ÖŠTsc., Àz«ˆfÇKÖ*M£>vš5ÔÀ XK¨qÊ:u5!•þ±«St°[>†i¼ÌŒ ¥úZÝ‘ÞÚËúêŒ/¥Nkcè§äºMØÐ*S‘ŽI÷]ßµ)ùde¦#* ùµüÒnχaj*èÚ2¶…Õo˜ê¬/««ôF¼+—ðíf:NoçvÄ“˜å…ôxÚMŸ}>*Ì®¢Á,h3™uÓ›2°1æÇ¤­JŸ ƒ0ü¡à Eê ¦OÞŠÄ9©qÒÓôþ­ëéÉÊúSèI}fÝKݵÅùù÷û­Ä%¿.˜·¦ ØcîøР”c(ª‰ôÐ GE£ýʱ4š,`ˆºKw¤¦h`{45K®Á¨a8Td¼U³Þ>Ù¶wOBäOÔà×vÌä=çŸ2ÚEÑž9Ûh÷ÏdÕLVÏxŽö¤NS_ÉQ#W1øb^‡(Þ4[të‡ù¦Q¨›v´T³ù†C§iY˜“S ³7‰Úz}L.ZúNþƒý¾þûÍn[©”»c‘¿z{Bÿõ¹¢þ$éÉ Âø. E˜˜m 9÷)ÒÑc7¼1ãW:MŠæ¦–Ó`[ÅYÈ‘ÿ®ØcX+Ô°gľˆÎ4®O½qeéúÍÓUÈš”0¯ug׺ÓùŽ‚³kÓù÷däx]ÏP*èÑ5žÜ7âý¹;ÇCgäXVŸ0#kM$!úÕõþÌøÞÒ7ÖnÞ µŒymî,-^¿}{~nÞ¸ ”ÛÇL]j˜ŽÁ©±‚am}ve*ÌâpP–6ÚæÊ¯Ûñ_8f׉Rg¦Âåv;YHs9Pn‡§ä`Åá¨ðxü^ie*7¸†]§E¯ãйe±*ßÑ¥B¢rœE¿gO7 ‘þà ÈØ~B^¼>Yž¦>oiu&Kò,÷Ã)ñ‡cèÑS”n`W\›¿9¿xeéÖâHõÓ:&»hÌ#ĬëêTO(ÿλo‚™7ìÄ ZÞ¨+Guœ£C'Tâ,Ýú–ÙÄð3Þ½”°º½æ`x'ú|Áe\4z,«Æ²1}Bª£T_}¹Í‹¿Z¢Óp—pXqªl@¥Þ*u˜Ž%ðSý=ã©qThhy¢q‰â¿§DknZõdk«§X=?‰ÕñèœÈÆRž$òNyFnëúqùFst¦šÑ–WgN)£÷Ë„&–‰¡L|`kбôbí^­äT}¢>|?ö¾jÖ*UG§õJÝhVÆæOy÷Šxw®^å­UW±Ú׎“k'N¬bqdWÆV¬EgÀѵéT£f#Õ¿ÆÜzà*!Äöâ š›C®ý´TœÍ®·j%?…íuCg “†év˜³•¦ø!œcq¬&¤ÌÝäÚî$¦¤sßÑKZŸ1{V¬á‚pñ"kÕt Õ4Ž­Žm׌& ^Öx¯J{£¦¢ ÇòÙéö BñX+г³jW+É"š¾€?3¤nþN^θ SÚ¢]ù²BûAlÉÕĵ„š½†Á7P ™”ï(5§ÖáJ+PÄå¹Ú5Ô \ÀÆvuu´¸¨Õ$(x¥€hg†Ê<ìßãÝ`9+U›ÈR¥Ò’•ÊZÅ;—ÓíPH¨#Eøÿ@Àiž'†©NHªßÃÕaÿ©™®X¦y÷εÐúÝ’WVr_ÌšCü à>}µ*Óš¡YY£p·\DÓíUÚÁQä;[Ce}ÎÀmL·ÑFߢ½L·muy¨«l}˜œÂx²‚…Ÿxa*аç‹wùÛ×5b_ä! @Ó4Kèb×jðA…²ä3ú~À›|_„ ò£Þ®X½X…´Š~b™Ng;C>PÕÒÙH=Ü`âYŠ@Êâx5hà¿q%¨ Ž‹w.¾«r«çàJžV-´ô9»,.ük-÷8‡1ƒC±[\˜¦¡è&»"ÿA¤NE—Wg±ŒOíÎcìÅ«ÆW¯1¾Æùšàk’¯)¾¦ùš é+üt•¯y¾Îñuž¯ t]` la-,Ä„ôÛX` lcm,°!ÍØÂ[X˜“Òlc!C×<Ûȳ<ÛÈs+òl!Ïòl!ŸÒy¶‘Òl#Ï6òl#ϭȳ…<×cŽ-ÌiBzŽm̱9¶1Ç6æØÆ·bŽ-̱…9¶0wUJ³9¶1Ç6æd®=A‹fñƒ ºUކp\å(—è1UF7›nÏŠž•ãAôc*»:¢Dx—ç·ï°·ûÚ`äMv71½ý Õ:þ³ËýŸu99±Oè2ìN .³+)¹ßOGÕnQ 3¬Ã‚5%÷ Ú€cp•`]Éý=ú€ã'8¦äþᘀ0Gp\Éý”Ḁ“0OpBÉýŒá„€S°@pRÉý#ÃI§áÁ)%÷s†SÎÀ{§•Ü?1œfXSqˆpFÉý3Ãkð}‚ %÷ † ëð>Á%÷/ ƒ•Ü¿2\p> ¸¤ä~ÉpIÀ ¸I°©ä~Ű)à$Ü"¸¬äþá²€Spáòýk‚K‚o- A0òýï ¾µ ,Œ|¿KpBð­«p‡`äû7\Zð­k°D0òý ¾1ËÿÁÈ÷2,øÖcð!ÁÈ÷1,øÖãðC‚‘ï— ¾õ|D0òýß ¾õ$üˆ`äû· ¾õü%Á†[oÁ7.Ÿ– .¸°àû®VGÂ7Y‹ üBL…U‘ñGŒ—$®Á_Ž”ʸ)qÖGÎ3.8Åà¯NªÒlR•Åã`ޤ÷75‰' @8²þãºÄ“˜!Ž´o1“x J„#ïŸ3—xL‘ømÆÏ@™pdþ Æóâ*TGêŸ0ž’¸U‘û/OK\‡áHþã‰ÇàÇ„#û»ŒÃ]‘þ=Æ%ýñÔ GúŸ2.é'¡A8ҿϸ¤?ž‚&áHÿÿ0.é§¡E8ÒÀxYâhÓ´…ü?#¼,ùO¨ð1áÈÿ!ã’ÿ„áÈÿsÆ%ÿ l‘ÿ#Æ%ÿ‰8„#ÿÇŒKþqèŽü¿`\òŸHÀ:áÈÿWŒKþI¸G¸ëúeÉ"]‘ÿÿe\òŸHÃáÈÿïü'2ð‚‘þßè0Í«ýƒàPlMª¸ôÂ÷î(HÉnHjœY¦°^±:Ù IŽÝð5ã²’1ø±¾a\tC2Žñž’W}™Sô™o“|ˆ)Ã3ý ŒVnÐWå5³Y5šE3 ?xËG˜6«A±ïÒø¤¦—ÛxBÖ(•N{¥b G:tp˜O;¼ ò÷Á/iÙbV•\Óµ’i-Âf£ØÞÐ[Ǫµq9$$pÄ‰× ãÞÓiÕV9€êÝOãjœÎ Çiy`Øç»ï~Õ_jYˆFåN–ÕjÀ5–T†~FÉ‚KR‘W«uoߣÃÕ¾þrNîQÓGä1ÌýÀÄ_Ñ}¾u§­äJ†c,£žÕeÔ»Š«²ŠÞ0ÚkB`™Þ*1»ÅµÀÛê¡¡‡“úõ³êׇô“Dÿ«õIˆD"ÓÆ9Qy‰ÅvJ5£hÕ01êÐ0¬»ò{^’iN©}š}2íœîò¦à=´E)V­)PrL§¨nAA­oœWßDRI%I¢F¡J2ÙEwuK:}}.}§é­S×é¶È›wD™‡¯ÝάžÜw¬ž²Y=×·zÑL6žÌê1ïÏô4È“aL¼Fv™Å"‘Frwrå—Tm ÑA ´T‡Øà™·´ N1`4`øÝÍÞ¶”‘€OÚÐÖ¤->¢#J‡|ZQ(Û¢Tqm°=NáIì¥ð¡z¤¯W ¿~§tF¬¬`|?‚/¸fú6_MÝJ¼iää2sšS5ŒZsl\@ÞN%ÞË©i×' cÛý(­z©à8ë+Ί ­&z€Kj$ÑÕàJsJ…—›­UÓ*RáG:ñ*CçSNR† ¹Oú犨¬{ˆN+{â Òˆ¨¬ËHµnY%Ó¢’µF»e9FÓ¹0o«b?·ÙiLkD¢Õ6›6¦ÖMó†üf©uOD~qŒÓ\¯µ:v}ƒD¸S“:¹dLŽ9wè¶ÚyoIî4òl2mXŽ“À…Î{NOS¸ é1-¬%ä$äq2+Í'³$±^G³$Ÿ'biSb‚?Z7~MDÃó¹S<Ü4 ÿù(ÞÙŽâéÜá%³Ð©P ¾¡ýïS"èz¡6@ñŽŸüê\áÓKrò™)-çªé'9ˆe)¯†– ´Cz.š–S;…¡!Žs¹nTlW.6,?»\|X.9,ç~0âÙÅ-Ë”²Š”&çÂV+¹6YÀ¾r\›Ü¾¶öÁ•kwæ¯_¹ÁÉ]³ÍfiÊ‘`Òa(hA·«=JZ˜™É2"EUùÌ™šž Šœ¾ñÉBÀ;Èå Äú«wQæºZo¤ÃÓƒ33#’íJ³Å‰b§Ðq B“£eO.À¾ ñ\0È‹±X9Už‘Óƒ(Í{f1ˆ«+ñ}%¹¢­$Vb+©©e¤«–XE%ƒƒ3*d±¶3rÖxsCÇà\UÃu]3KÝΟÊ^¯ÌR«è}QðžÚ~Q|w¡èîÁež;ô¸{&Ä«WB³tòsT/¶f½\ºí»ŽK€[jÙ¡Äq}1`¦ßB¹¤,2xT´–è—|ýá¿SÔR¼üÅéEîáÌ~nfÇÆüÔà“,8 fÓÁeU¿€ë«ÂMç?\ûèö•üûóKav£05'LMÆ»~ÇF£âˆ¦ðõì÷J0ÆZÂÐÉ zZ°;ù7K#AêäŸ2z‡ÁåÎõ7mjF`h`È¿nK¤’âïÛî,]Y\¢?þ†ŒïÄþ¡º«mŽÛFÒŸ­_Áò—Ý=ñBôÖÞy†Ã‘§,kt’œuruår,9Q­_R¶œÍÝÕý÷ã é°{@P$nR®ŽÄyÑÓÍf?И}S™½¿¾ºùò~öiöa·žxV¥336ÓÙöß›YžÖ›«ÇÍÛ›7³ê[.Ö?”•×é¬úWçbóât¹>=^l^&ùvVYgó×ÏÎ7gåù庼HX¥ëÙf}zùªþŠê·õËò¤ùM=8//6'/.×›ÓW/w_.|ÿû_{5¿(ÊJƛߗe}¡ú“óïÊóùqùêïëååÓ$¯þàEåY´ä~Q啯^>_,WåòÕútµIî—W7ÛaÔ.µûí}eèêYå¾÷SÝßÞŠê—òtÙªqô x:?¿¨XÚ¨¸ý}ÇÒéö­ÅfkŠdûbÂ(™n]6 ¶?/ÈR‹õåóùÙуííŒ)+E¶`÷q3€›ùà^í¾Ý%£áæ7÷²÷ʤ=òö^öÞásÉh¸¡Ëðþ½ ÉöÎÂûw4ÜпUxÿ>ˆ½uxÿކú·‰¿û£Í€gw€½óñ;nèß,ÀapÆ"DðXÀ¡‡3!„÷?¸,."ÄðXÀ‘ËAü Ï"DñXÀ‘«iÒð~Bbq=Mîù¸™&§[<Ÿ&÷}œ§Ó¤âd‹s6M.NöqΧIÆéÓdãt—Ó¤ãt‹gÓäãtWÓäãt‹ëiòqº›iòqºÅóiòq²‹tš|œlqÁ¦Éǽ€ drþª‹ ‘ *rf¶Rû²¾%|?¼2¹„È ä©Ô¾ä2®Í3ˆ< ã-BµR¯ö¯¸®E® r?úÜùC-E¹³ùnÕ„b;™¶×ëÕµ”¢}gó*øž!È5D®C>¡ ò­jQ5ÏBÚ¾Zk1Öæ"'(+ö} ¹²Øá,»ŸˆúÕ±Èsˆ<÷G.,©âFE‰¦èƒOËúe äC%£"ïÀÓ+¡Žc‘C•8´ñä¢Î½ÚŸ•¢z äP)Â#‡,©Ë¡¼99äP)—·Øù€‰r¨Ìâ"¯y3Tl*^¼%d\r¨ Ê¡)ŒïâД^6‡*É ãF!Z¹\´^‡‘g,rÈ¡2”Ÿ×‘Ät?‰¶¬cÎHääЌ̡0Wâ'õ;ûŸ\r´˜‚E@¾“ÌÊrS;ˉrhFçÐÚÂe‹V€œ°±­²¤—Í!‡fd­±©t_ê6‡šÉ@ù¹¹ÝÒ9äÐ, ds˶ösêª G94S!ŸPÛªam94Óѯºý<õg¢ rh´Ûï Ãs]rÈ¡Y> r¯,WAU¡&A{y³cÄçS)RC ŸåÚ9I–29Z’hz‡m÷b,rÈ¡J„-mGý­ð®Z(È¡*Ð8´#6®,YZUÇ‘È!‡*ú8Ôì×è ~Ȱ¶‹r¨"shýô aI×uá=²PC™C@«Ð’µïd^È!‡*2‡jXˤj?59äP•‡ÉTµU%˜3’ " lî5šÓCuz@ä@jŸ,W£Eæ,²Ÿ[±¥ñó¥rÈ¡šÌ¡®ˆ×½¢¢†ªE˜J3ã¤W~®!‡j:‡ºF÷@vÌy!‡ªéãPGÜC³ÒVÌÔ^Þ9TÓ9tð =*BÕd­ëœ¥nçVji×Bm99äPmÂÄ–úîëˆ*µÔ!c äPÇû÷K¯,× mCiä\1 È¡r¨a´ù¢õ¢ÆæuäÔC‘C5<²Í9¤WT4CM„q¨•ÒÆªür¨!s(Œy•ý äP“ÅʸbÄÈ¡F…a¢!f,^Uh9Ôè¸ÈáÜbíW0ï‹r¨1!‘ÛV…^mÏ™ŽE9ÔäámîÂO~BsÈ¡y&¶Ô˜Mo±`í;W>¹bŽ6ß²0c¢AY.”^6‡šªåJ8+—¶óé •€åXÛ09äÐ<Ð84)ýl94÷ãPG4òZèrhžM¿ŠÛÞaçB94÷âÐŽõ‡‡XžCÍux› %Š«[sÈ¡9½–ëˆxwTw}2®rhžG°9ÌØí*º?r–¢Ï)}F´Ü¯iÙë\ù KÑVܔŵ{Ç ŠÝq t:ßã­°T ìÖç6kçû}¦Ü¯›Bvub—»Œe€G;gé„—Ý3„= ³vr“ˆ5šf©BØU •tª/ò ©²ò°ë>3 ªîé3a§¯Ô5›aiްGàÕRíW•\r,v†x•¥v_”Cg©GcÇ­Š"ójÐÚcˆWc´+dwGÝýìˆWÙ¿¯ÚQÖ‰ñ*“Ñìy5P>ï²,®¿Ûµv’¿#^ кÈܽ? Éàޱد2k‡šŠ0ö`ˆWY„6 ѪìŒ!^eù!°»ªíc±sÜ.…ݶ²]oñ*À«ƒæ”VÝ; îÀŽx•GàU ½Â±ßÛkeãˆW¹SãèØÕ•öîÈðŠ‘ñ*½¥3þr4vÄ«< 3nrYÖ¹×Ϋ‘!G¼Êé;b@7€Ø¹9âUˆWëgo¸ ÐkÔL4cÐÛLpH[ÀÝ¢!G‘=F{£ÃØ?†Ž¥ ´Ò…ñV›)ÍþøÎ±JƒÚ7Jä ’¦{·äHª(¼Y]&O¿¯«!"7ö.ƒ=9/KÛ¯¼x¥æ9nZyŽ_°äìäÅÅìùúôÅ…­ŠO‘ÍR!z.4٩“‹gU:Yœ¯Ï.“Ë¿o*^S¯éåà¹m®¤­eø»"°*O+?CÊä!•©æðJ@e„‘Éö9y–\nN7ˆôýºäØÙá!H_˜¬Q£Ê_N¾¿\?›w(ÄÂ($e+ã)¤…ŠùÙzŽ¿Ž\NΞΓ¿¯+Ô¶‚^œ)­S ˜Åï0׬)^‘>œ¹ÐÉóõrY%2ËÍ%Ò"eŽ=sdÈm2Ý·©<»XŸT©™ãFÉ07ª¹龬j×Ks‡Š—N?̨gûX¿úø¡0ónõÖ·~*Œ~ 7™¡R”>ÏÙ"Ù …F"L u¬õhÁ5f°ÇÒøÜÅ¢û.nž¯‹s÷shÝÈ¢Ï!mé5\,“ï^œW¿­Îçu±asZ&Oç'+¤y„[ç Þ˜øÖ7oÞ¾³áC¯ØRvß¶½áÓ¯÷PG|a­ä0Í’ájC¬\žY»Œ_‹"W€jÚ*7÷s'µöP0O/žÏO:Âg›‘ÍO—ºúu>–Yù ÓÂGWÖ“•!­D:6 ó¢Àœwkµ¨()%Ãôûî`ôÞª½n•èVêx¾7—Aï“äJÆȱZÉn­–åÉÞ½ Z?‡AFʆ@P½cl§UÖ›E#½t¬»åJš ©sîÄý°ÿ`™0J¡¦ÜŸâ”ÒÎñÒ‰œ‡ø¥ÿ~Ð1Œ»|еâô†M®\±_+ás÷Ð)¨«ðð‘ŒÿxFäŽñÚ³ùÙÖŠr@06ɬ^`ãH\tku2¾ÄZ‰iâºd>Z9FeÏ_ •dÈH[ dóV†ŠËn•N±JY•r¤ÒK%Ç ìå©è€gƒC¯.—J«ÞrÒKÇŠèákbžvëu†o• sFŒ†È±*9†TçO7H§<òØ#d–>wŒ=.ÖÇhìÁ齞`6Ëí•UŽôÏ롚;Æ—sûè= œ“CäH²Þҋ̼žõ&/½#³§(R°@§½Â|NæÝæˆÌ+ø9ÅžNYÈtU¬ÍÝ…™±:9•û!Èäëº+ö½¡û^ÞSñDZ:=ÖUà Zæœß9Oô{¡éhéÜ!æŠÄ|1 ß­fF̓”äçEWźgfsòZäµ0‡—9oß9V½e—z½3Òœ³  Z%6áH²üÜ´ìTðÒy÷xHå²¢“ Iô]+ ]Ê­ú§SlíDHíXÜ ”EçdQw|éœ/â~-¹ú×ïD¯-˜3Ò ‚®­Œ^¼K§½¹" ƒ—é†îÇ5U’¢oìæRIt©´?SÄyÐŽ™õ ˆuþ•Î÷Kö©ºŽÎ¥“ìÒižˆÓ{~Ùk.¹5êqÊz˜ i´Ç¦s¤3‚VªK«½9".È3èæÝåîz§cý©K%í`h¤QІœž´Ì‡jdº4²æ‡è­Å\ÃK{~ÈšŽu¼Ü•j •‚®ÇŒ_Ì»T²æ†DÐN*ÜZ*{dsxC½wÑ¥“53$² ª%­{,:‡`x^(lû2W°ç‹` žBtºð¬Ð‘’}ó•cïPç Ï ròÐ?Ft]±[ æ¤ÎUÇŒˆ—<„a*<¶?ZMD0ô˱ u™öfƒ$;ô-"Œ.ŠÎÓj}:?±g„dÐ}õY`Ü1«e'x#Ó¼¢sÜdë4ƒ¨û©KÓ;¼•ír¬ÿuŽ›öæ¸ÂvbÓeÔœ¨Èzj.H«ì„*ðuŽšöæ·dТ~ëŽù”ušöf·d´‚2ÓåÒ¨sд7·%£uqòî$bofKæáÇhfË¥“òy’æðC ýúŹò‚È£Âb1¼êŒ”d!•Œ‹žüÖ1w‰ê.+¶‚A'GbßÁÒ\\êN§¶c^ð8Sý°Úœ^]ݼ}›ÌN¿|J^¿»þõvÆ©GìÑÇO7?}ûëío·³|¼1~¼z _ƯÍf³;>|å:¥¬ú—¤üqšVÿ¥_ÿKšÜöÁ÷¹W½CÌÒ|ÆMÂÌc®‹ }ÃöLœ'O’Yú°ú=ÌòT%Ož4·q«iÂU!c÷Ó¬þ3·×ï®o¯«?òþúêæËûÙ§Ù‡ŸÞ¿~7›15c3mÿ½™åéìíÇ·Ÿ¹~sóöæÍlxÖ?” Kt–l[ol¿s±í÷TÝ÷ÅÝÖÝ_?;ßœ•ç—ëò"Ù~¸ÛìùªþŠê·õËò¤ù­ÊˆÎË‹ÍÉ‹íÂW/w_.|ÿû_{5¿(ÊJ‘íz®Ýï˲¾PýÉùwåùü¸|ÕøÚ– ÎæÅÖ%ï÷¼zù|±\•ËWëÓÕ&¹_^ÝÜ^_%ÿ¼¹ý9ùí}eèêñ(}t¿1Õýí]¸¿s—V£[º¨|\õ5ü£´X³ÚÜMt`‰nØXOt\ ÕÞb¢ÃJ¨‡òȉŽ*¡Ú;›è ª«‰Ž)¡Ú[OtH Õ¿ÍDG”PíOt@ Õ¿=OFz‰a²‰Ž'¡«6Ñé$d‹‹‰'!û¸œèl²Å³‰Ž&!û¸šèd’^9Äâz¢ƒI|€#7KB¶x>ѱ$>ÀS´m¢SI¨çl¢CI¨>ÎùDg’-.&:’„ìãr¢IÈÏ&:„ìãj¢óHÈ×GBöq3Ñi$d‹çFBõñgÄâ1Ž8Ž\ “ó?P]|»Â¸E¨sZ=eÇAöƒÛºKˆœ@žpj-¹Œkó "´ð§ž¬e½‰^q]‹\Aä~ôY´K šÃKD{„‰‚;E+¥hßÙ¼Zt/Ip!×yÐ…< ò­jQ1°]-ÆÚÜ@ä¶ Ah®,v8Ëî'¢~u,ò"',Ë–Tq£¢DÓ@ôÁ§åý²‰‡…rÈ¡ô¥ºxz%Ôq,rÈ¡2‡6ž\´'^Ô?+EõÈ¡2B uȒ͂ՑíÔ]È!‡òˆc;#‘C•‘ÏGÑ«±r¨O¨†ªéêÝÙ1Oä…r(ý¬kíˆ{hVÚŠ™ÚË[ ‡j:‡ž!¢GEÈ¡ôÓ¬ë:g©Û¹•ZÚµP[ŽE9T›0±¥¾ûz¢J-uÈØ9Tç±ÆþýÒ+Ë5hÛP9WLr¨jØm¾h½¨±y9õPäC lsGé äPa*`ó$µ_Å¥ø9äPCæPó<*ûÈ¡&‹•qň-C ÃDC$ÌX¼ªÐr¨Ñq‘ùÅÚ¯`Þ59äPcB"·­ ½Úž3‹r(ý¼å!^è Í!‡æi˜ØRc6½UÄ‚µï\ùäŠ9Ú|ËÂŒ‰e¹PzÙrh¨–+á¬h—ÞðQ X^€µ #‘CÍCÓ‘ÒÏæCsB“» y-t94Ϧ_Åmï°s!‡êwüpÇúÃC¬?Ï!‡æ:¼ÍÈEÈÕ­9äЧ;"ÞÕ]ŸŒ+‡šçl3v»Šîœ¥hç3ýDà´Ü¯iÙë\ù KÑVܔŵ{Ç ŠÝq t:ßã­°T ìÖç6kçû}¦Ü¯›Bvub—»Œe€G;gé„—Ý3„= ³vr“ˆ5šf©BØU •tª/ò ©²ò°ë>3 ªîé3a7a2:Èü Ks„=¯–j¿ªä’c±3Ä«,°û¢:K=;nU™WƒÖ¾C¼£]Ñ »—}LëÄŽx•ý ðª½þ؉ñ*“Ñìy5P>ï²,®¿Ûµv’¿#^ кÈܽ? Éàޱد2k‡šŠ0ö`ˆWY„6 ѪìŒ!^eù!°»ªíc±sÜ.…ݶ²]oñ*À«ƒæ”Vû«×õ€˜#^åxUC¯pì÷öZ™Á8âU.ÂÔ8:vu¥½;2¼b$G¼JoiÄŒ¿ñ*ý\X—}Ó^†Ò^ 9âÕÀ‚n±;ssÄ«¡z­Ÿ½á2@¯Q3ÑŒAo³ž!mct7ІEöícóý¢!G~£¿Ñ ~×t›‹‰:£Óý\NÔnól¢îèt?WõG§Û\OÔ!îçf¢ét›çõH'û¹L'j’N¶¹duI'û¹äµI§Û\LÔ'îçr¢Fé½z ²y6Q§täØÏÕD­Òé6×õJ÷AŽýÜLÔ,nó|¢néd?ÏÒ‰Ú¥“mž±‰ú¥“ý<ã5L§Û\LÔ1îçr¢–ét›gõL§û¹š¨i:Ýæz¢®ét?7µM§Û<Ÿ¨oºr…O2Jý±§¦[ö¿:ä=NìÈîôGýÝÑû;«sAMŽ¥Ë‘½ö¢™GO-)Æõ¯ubGó£”>Gž«ý;×0Ô舅êt$Ù¸žuM7r6;š¥÷:r­\¨×[Ø?“|ÍRº Y£3DŽÀŽæG)ýŽ\ëºìNS°3üU_NìhÝ‘ Ôy·~öàêœÅ²» E³ëÝk=/jyÄTÐ~ õ³—íPg Èe÷ó<;jzÄ(]„Ùߨä¾Mû;JÆŽ d±ú© kÀðÝoNìˆWé ë×¾œÍýW¾Üñªq«¥~çx;±#^¥w?r>«ÙNæíÏžUÄ«”þG~}êIvG¼Jé€ä:—$"vÄ«ZÇê ÛŸñú周 £tAªã»²W0JÿÈ~vÄ«”>HÚ:y¤þ¹ÖF˜ðØQ#$æ× ixŸ×Àدš ¼ÚŸëjk?p1;>—‡éâh;€±^9ÚîˆWMd^{2ÌØ¯úvD2}'|V.¦Á*YGO3;âUJO$áÚ9`§Ý¯Rº"Áø.ewt ›¿£¶HÌDØ'{g£5¼êîÔw`G¼JéŒd÷ V±c@´egìîýC°#^¥ôF=Ø—fÿ Ú¿„¡æHŒÒ žj#ò6jëhvÏñë‘ëÀö7„±G‡ ²<ÂŒjQZû©,Ö-üj©Øg"ðª9e# Kj¯}axî §ŒWùþ¹èÔ˜¢w/aáå3ØîöŸÅÝrU:ú*Œ¨¿çfVaÿWØ»­~õ÷½’W­}Ñü÷xÎqœ ºB Î貯+‚=ÒOÏ7Åè—ÔT©ùþ<y¯8ç0'àú%ÙϪÚÏ)¡TÀ£FÇHƒ°³XØY{ŽjûlÀWIs< īвñ°£¹£_R |Fƒ³`«R‘çx*ãÆ÷±3|#æxšÅò÷²lãû xÎ’â3aW‘ŸUÈPt—{d^uI/^Ås<±ò·¼»—ݹÀ12¯¢¬Ô‡›ë^ã&´ÏÇè—´,ÔU­|5;ò™ý’¿§AóH…°óX>Ó?Ëê7nBûÜyŒ~IwDkÄT î§¡°Ý#ð*ä  Ì=Õ?ÃWIkÝxŒ~I«ÂñdÂ1ŸßXÛ]ÅÚÙÑ_3ðÄŽãŒ>HNPûIÙÊ•ŸÏàgÕÄêK¬”U·¦×g°¿çqŸU—\ùÕ#‘ÝcôK²íÎÊ@vG9pŒ~I#ì>®†Í7Åè—4œ•FÛåb<¯®v¬¿€5™2ÈI– ªÌéý’ GýkÕÛ-Ô¯þÎ1ö,Ðù„à92Úóóẽ_RNq Ôß½xu·×`§Ÿ;SøH¿ú;æ&zǤáÕWýݰÁØq|ÏùŒ>kaäe`÷zV%zVW‡WÛíš»ß:lÌM‚ÅzVûåÊk=Dq†Þ9 Æ<æ%aeXû•w¿‰ÇB„Ä^3Ž]·.ÅwœGúuO꯶GÄŽŸU2¯–0þ½•wrý×ôè”ús‚ õÈ]€]‡ñwWµ=0v#MÐgupæ‰å"s*z1Ò[üêïåôNJëít»gèY•ôsÝV}Ú]g/•ÚËîhÌ'ɼº*†VØä¨.&íÖDG§í«„Ç®ŸÀ.ÜJ;dOý|‰r™ÅŠ‘Ã«í#xû;™Wíj;¬¹»*ï~õw´^ŒKùY ;ÖÆþNæÕ•#’DÁŽãLë|Ú•èÿ­¼zÏ㹃, ™ÀgžêYÍP>“‘yµ|í´»Wïù ÅHz‡%Ûîä<¬ÝQ.–‰Ií>r y†ò÷Lš›õ÷]O(€Ì«Õvû~ºùéÛßn>>z/×WŽf³™ãÍ÷ª¼JÌÒ|ÆMÂÌãT=ÎòGé×ÿ’Æ<°¿}2œ¥Sn}òÉ“dƸ~Ȫ »ÿ›äÉ“£ä’íÇEòÓ›¿Ö?ß|¸Mnþzô`ûó—Ÿo~úp}µ»IÉ7o?~¸}õãÍíçæåZ~þçÍ훟ÿüîõíÍö—ê+wW·ÿ½yýù:9™_®OÙãä÷ÿmû«¿'ùñÓõëüµë#|ÿ#¼ï#Ï6k³ÿ±÷{»wŸ—å³ý·JÇw_]¿}ýåÝíôÿw”Ô¬nÊìß¶ïúÏô¿’¿%/‹êM·×‹›Û÷¯Y}úø~ùúöõŸwoºúå¿ÖoÿôñãíãٽíÛ神ü{Òþµ¤Q[áë{woÞaûçÍÕíÏ럾¾ùéçÛ¿lUÞ½çwð{Þ»‡ìg7¿UØ»1ï>¶û3ޝþ†?LØ×ïÿéMû­ÇÅþ76F{˜¤Õ¿ê#[§U,}¨’Š™‡zç²GI­õîf¦¿¥×ïÝûö›äb“üùÓõçëO¿^_=L®>~ùñÝu²Có—ä›o÷?ô¶ùкãCŸoþçz÷™õgvŸû[ò§äO¿ßpümìÇúÛÊ‹¢ýº¯õÞVãígw¿4ŸÿM¬ÁÀalevt-1.6.2/dllist.h100660 0 0 2271 6654364430 12370 0ustar rootroot#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 /* DLLIST_H */ alevt-1.6.2/edit.c100660 0 0 17102 6653142170 12026 0ustar rootroot#include #include #include #include "vt.h" #include "misc.h" #include "xio.h" #include "vbi.h" #include "edit.h" static void edwin_event(struct edwin *w, struct vt_event *ev); static void cursor(struct edwin *w, int x, int y) { u8 buf0[40]; u8 buf1[40]; u8 buf2[32]; if (w->edline) return; if (x < 0 || x >= W || y < 0 || y >= H) return; if (y == 0 && x < 8) return; xio_get_line(w->xw, 0, buf0); xio_get_line(w->xw, y, buf1); sprintf(buf2, "%2d\3%02x \7 ", y, buf1[x]); buf2[6] = "CI"[w->mode]; memcpy(buf0, buf2, 8); xio_put_line(w->xw, 0, buf0); xio_set_cursor(w->xw, w->x = x, w->y = y); } static void adv_cursor(struct edwin *w) { if (w->x < W-1) cursor(w, w->x+1, w->y); else if (w->y < H-1) cursor(w, 0, w->y+1); else cursor(w, 8, 0); } static void set_char(struct edwin *w, int c) { u8 buf[40]; xio_get_line(w->xw, w->y, buf); buf[w->x] = c; xio_put_line(w->xw, w->y, buf); } static int get_char(struct edwin *w) { u8 buf[40]; xio_get_line(w->xw, w->y, buf); return buf[w->x]; } static void set_gfx(struct edwin *w, int i) { int c = get_char(w); if ((c & 0xa0) != 0x20) c = 0x20; switch (i) { case 1: c ^= 0x10; break; case 2: c ^= 0x40; break; case 4: c ^= 0x04; break; case 5: c ^= 0x08; break; case 7: c ^= 0x01; break; case 8: c ^= 0x02; break; case 0: c = 0x20; break; case 9: c = 0x7f; break; case 3: c ^= 0x5f; break; case 6: c ^= 0x5f; break; } set_char(w, c); } static void set_mode(struct edwin *w, int on, int off) { u8 buf[40]; int x, c; xio_get_line(w->xw, w->y, buf); for (c = x = 0; x <= w->x; ++x) if (buf[x] == on || buf[x] == off) c = buf[x]; if (c == on) set_char(w, off); else set_char(w, on); } static void del_char(struct edwin *w) { u8 buf[40]; int x; xio_get_line(w->xw, w->y, buf); for (x = w->x; x < W-1; ++x) buf[x] = buf[x+1]; buf[x] = ' '; xio_put_line(w->xw, w->y, buf); } static void ins_char(struct edwin *w, int c) { u8 buf[40]; int x, t; xio_get_line(w->xw, w->y, buf); for (x = w->x; x < W; ++x) t = buf[x], buf[x] = c, c = t; xio_put_line(w->xw, w->y, buf); } static void del_line(struct edwin *w) { u8 buf[40]; int y; for (y = w->y; y < H-1; ++y) { xio_get_line(w->xw, y+1, buf); xio_put_line(w->xw, y, buf); } } static void ins_line(struct edwin *w) { u8 buf[40]; u8 buf2[40]; int y; memset(buf2, ' ', sizeof(buf2)); for (y = w->y; y < H; ++y) { xio_get_line(w->xw, y, buf); xio_put_line(w->xw, y, buf2); memcpy(buf2, buf, sizeof(buf2)); } } static void do_save(struct edwin *w, u8 *name) { u8 buf[40]; int x, y; FILE *fp; w->edline = 0; xio_put_line(w->xw, 24, w->tmpbuf); cursor(w, w->x, w->y); if (name == 0 || *name == 0) return; fp = fopen(name, "w"); if (fp == 0) { ioerror(name); return; } for (y = 0; y < 25; ++y) { xio_get_line(w->xw, y, buf); if (y == 0) memset(buf, ' ', 8); if (y == 0) fprintf(fp, "#ifndef HELP_HEADER\n"); if (y == 5) fprintf(fp, "#else\nHELP_HEADER\n#endif\n"); fprintf(fp, "\""); for (x = 0; x < 40; ++x) if ((buf[x] & 0x7f) < 0x20 || buf[x] == 0x7f || buf[x] == '"') { if (x == 39 || buf[x+1] < '0' || buf[x+1] > '9') fprintf(fp, "\\%o", buf[x]); else fprintf(fp, "\\%03o", buf[x]); } else fprintf(fp, "%c", buf[x]); fprintf(fp, "\",\n"); } fclose(fp); error("%s dumped", name); } static void save(struct edwin *w) { u8 name[64]; if (w->subno == ANY_SUB) sprintf(name, "vt%03x.out", w->pgno); else sprintf(name, "vt%03x-%02x.out", w->pgno, w->subno & 0xff); xio_get_line(w->xw, 24, w->tmpbuf); w->edline = edline_new(w->xw, "Save as:\2", name, do_save, w); } struct edwin * edwin_new(struct xio *xio, struct vbi *vbi, int pgno, int subno) { struct edwin *w; struct vt_page *vtp; u8 buf[64]; int i; if (not(w = malloc(sizeof(*w)))) goto fail1; if (not(w->xw = xio_open_win(xio, 0))) goto fail2; w->pgno = pgno; w->subno = subno; vtp = vbi_query_page(vbi, pgno, subno); if (vtp) for (i = 0; i < 25; ++i) xio_put_line(w->xw, i, vtp->data[i]); else xio_clear_win(w->xw); w->mode = 1; w->edline = 0; if (w->subno == ANY_SUB) sprintf(buf, "Editor %03x", w->pgno); else sprintf(buf, "Editor %03x/%x", w->pgno, w->subno); xio_title(w->xw, buf); xio_set_concealed(w->xw, w->reveal = 1); xio_set_handler(w->xw, edwin_event, w); cursor(w, W/2, H/2); return w; fail2: free(w); fail1: return 0; } static void edwin_close(struct edwin *w) { if (w->edline) edline_abort(w->edline); xio_close_win(w->xw, 1); free(w); } static int ins_key(struct edwin *w, int key, int shift) { switch (key) { case '\17': /* ^O for the bullet */ key = 0x7f; // fall through case 0x20 ... 0x7e: case 0xa0 ... 0xff: set_char(w, key); adv_cursor(w); return 1; case '\t': w->mode = 0; return 2; } return 0; } static int cmd_key(struct edwin *w, int key, int shift) { switch (key) { case '\e': case 'q': edwin_close(w); return 1; case '\r': case '\n': w->x = W; adv_cursor(w); return 1; case '\t': w->mode = 1; return 2; case KEY_F(1): save(w); return 1; case KEY_INS: if (shift) ins_line(w); else ins_char(w, ' '); return 2; case '\b': if (shift || w->x == 0) return 0; w->x--; //fall through case 0x7f: case KEY_DEL: if (shift) del_line(w); else del_char(w); return 2; case KEY_LEFT: cursor(w, w->x - 1, w->y); return 1; case KEY_RIGHT: cursor(w, w->x + 1, w->y); return 1; case KEY_UP: cursor(w, w->x, w->y - 1); return 1; case KEY_DOWN: cursor(w, w->x, w->y + 1); return 1; case 'k': /*black*/ set_char(w, 0x00); return 2; case 'K': set_char(w, 0x10); return 2; case 'r': /*red*/ set_char(w, 0x01); return 2; case 'R': set_char(w, 0x11); return 2; case 'g': /*green*/ set_char(w, 0x02); return 2; case 'G': set_char(w, 0x12); return 2; case 'y': /*yellow*/ set_char(w, 0x03); return 2; case 'Y': set_char(w, 0x13); return 2; case 'b': /*blue*/ set_char(w, 0x04); return 2; case 'B': set_char(w, 0x14); return 2; case 'v': /*violet*/ set_char(w, 0x05); return 2; case 'V': set_char(w, 0x15); return 2; case 'c': /*cyan*/ set_char(w, 0x06); return 2; case 'C': set_char(w, 0x16); return 2; case 'w': /*white*/ set_char(w, 0x07); return 2; case 'W': set_char(w, 0x17); return 2; case 's': /*new bg*/ set_char(w, 0x1d); return 2; case 'S': /*blk bg*/ set_char(w, 0x1c); return 2; case 'e': /*concealed*/ set_char(w, 0x18); return 2; case 'E': xio_set_concealed(w->xw, w->reveal ^= 1); return 1; case '0' ... '9': set_gfx(w, key - '0'); return 2; case 'f': /*flash*/ set_mode(w, 0x08, 0x09); return 2; case 'd': /*dbl*/ set_mode(w, 0x0d, 0x0c); return 2; case 'h': /*hold gfx*/ set_mode(w, 0x1e, 0x1f); return 2; case 'x': /*box*/ set_mode(w, 0x0b, 0x0a); return 2; case ' ': set_char(w, key); return 2; } return 0; } static void edwin_event(struct edwin *w, struct vt_event *ev) { int i; switch (ev->type) { case EV_CLOSE: edwin_close(w); break; case EV_KEY: i = 0; if (w->mode == 1) i = ins_key(w, ev->i1, ev->i2); if (not i) i |= cmd_key(w, ev->i1, ev->i2); if (i & 2) cursor(w, w->x, w->y); if (i == 0) xio_bell(w->xw); break; case EV_MOUSE: cursor(w, ev->i3, ev->i4); break; } } alevt-1.6.2/edit.h100660 0 0 625 6635016277 12005 0ustar rootroot#ifndef EDIT_H #define EDIT_H #include "vt.h" #include "xio.h" #include "edline.h" struct edwin { struct xio_win *xw; int pgno, subno; int x, y; // cursor pos int reveal; int mode; // insert mode struct edline *edline; u8 tmpbuf[40]; // to hold the bottom line while edline active }; struct edwin *edwin_new(struct xio *xio, struct vbi *vbi, int pgno, int subno); #endif alevt-1.6.2/edline.c100660 0 0 5162 10724702363 12344 0ustar rootroot#include #include #include "vt.h" #include "misc.h" #include "xio.h" #include "edline.h" static void do_exit(struct edline *el, u8 *buf) { xio_set_cursor(el->xw, 999, 999); xio_set_handler(el->xw, el->old_handler, el->old_data); el->exit_func(el->exit_data, buf); free(el); } static void redraw(struct edline *el) { u8 buf[40]; u8 *p; int l; p = el->buf; l = el->len; if (l > 39 - el->plen) { l = 39 - el->plen; p = el->buf + el->len - l; } memset(buf, ' ', sizeof(buf)); memcpy(buf, el->prompt, el->plen); memcpy(buf + el->plen, p, l); xio_set_cursor(el->xw, el->plen + l, 24); xio_put_line(el->xw, 24, buf); } static void ev_handler(struct edline *el, struct vt_event *ev) { switch (ev->type) { case EV_KEY: switch (ev->i1) { case '\e': case '\3': do_exit(el, 0); return; case '\r': case '\n': el->buf[el->len] = 0; do_exit(el, el->buf); return; case KEY_INS: xio_query_selection(el->xw); return; case KEY_LEFT: case '\b': if (el->len) { el->len--; redraw(el); } else do_exit(el, 0); return; case 0x20 ... 0x7e: case 0xa0 ... 0xff: if (el->len < (int)sizeof(el->buf)-1) { el->buf[el->len++] = ev->i1; redraw(el); return; } break; } xio_bell(el->xw); return; case EV_SELECTION: { u8 *p = ev->p1; int n = ev->i1; while (n-- && el->len < (int)sizeof(el->buf)-1) { if (*p >= 0x20 && *p <= 0x7e || *p >= 0xa0 && *p <= 0xff) el->buf[el->len++] = *p; p++; } redraw(el); return; } case EV_MOUSE: if (ev->i4 == 24) { if (ev->i1 == 2) xio_query_selection(el->xw); else xio_bell(el->xw); return; } break; } el->old_handler(el->old_data, ev); } struct edline * edline_new(struct xio_win *xw, u8 *prompt, u8 *str, void *exit_func, void *data) { struct edline *el; int plen, slen; if ((plen = strlen(prompt)) > 20) goto fail1; if ((slen = strlen(str)) > (int)sizeof(el->buf) - 1) goto fail1; if (not(el = malloc(sizeof(*el)))) goto fail1; el->xw = xw; el->prompt = prompt; el->exit_func = exit_func; el->exit_data = data; el->old_handler = xw->handler; //TODO: func to retrieve curr handler el->old_data = xw->data; xio_set_handler(el->xw, ev_handler, el); el->plen = plen; el->len = slen; strcpy(el->buf, str); redraw(el); return el; fail2: free(el); fail1: return 0; } void edline_abort(struct edline *el) { do_exit(el, 0); } alevt-1.6.2/edline.h100660 0 0 1017 6777222003 12325 0ustar rootroot#ifndef EDLINE_H #define EDLINE_H #include "misc.h" #include "xio.h" #define EDLEN 128 struct edline { struct xio_win *xw; u8 *prompt; void (*exit_func)(); void *exit_data; void (*old_handler)(); void *old_data; u8 buf[EDLEN]; int plen; // prompt len int len; // current len (excl prompt) int offs; // current scroll offset }; struct edline *edline_new(struct xio_win *xw, u8 *prompt, u8 *preset, void *exit_func, void *data); void edline_abort(struct edline *el); #endif alevt-1.6.2/exp-gfx.c100660 0 0 14231 10724670106 12476 0ustar rootroot/* Copyright 1999 by Paul Ortyl */ #include #include #include #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 */ /////////////////////////////////////////////////////// // COMMON ROUTINES FOR PPM AND PNG 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 ? font1_bits : font2_bits); int dest_x=_x*CW; int dest_y=_y*CH; for(y=0;y<(CH<>dbl))*CW*32+ c%32*CW +x; bit=(*(src+bitnr/8))&(1<>dbl))*CW*32+ 0xa0%32*CW +x; maskbit=(*(src+maskbitnr/8))&(1<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; } /////////////////////////////////////////////////////// // STUFF FOR PPM OUTPUT 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 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) { //e->reveal=1; // the default should be the same in all formats 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 */ #include #include #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=", // substitute 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("",fp); HTML_NL #endif fputs("",fp); HTML_NL #ifndef STRIPPED_HTML fputs("",(latin1 ? 1 : 2)); HTML_NL fputs("",fp); HTML_NL #else fprintf(fp,"",(latin1 ? 1 : 2)); HTML_NL #endif fputs("",fp); fputs("",fp); HTML_NL } //bare fputs("",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; // last_space=0; for(;(pg->data[y][z].ch==' ') && (zdata[y][first_unprinted].attr & EA_BLINK) { fprintf(fp,""); nbsp=0; } if (pg->data[y][first_unprinted].fg!=7) { fprintf(fp,"", html_colours[pg->data[y][first_unprinted].fg]); nbsp=0; } for(;(zdata[y][z].ch==' ') { for(;(pg->data[y][z].ch==' ') && (z 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,""); } if (pg->data[y][first_unprinted].attr & EA_BLINK) fprintf(fp,""); first_unprinted=z; } } fputs("
",fp); HTML_NL } fputs("
",fp); if (!D->bare) fputs("",fp); fclose(fp); return 0; } ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// alevt-1.6.2/exp-txt.c100660 0 0 12244 10724667424 12544 0ustar rootroot#include #include #include #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=", // substitute for gfx-symbols "fg=<0-7|none>", // assume term has as foreground color "bg=<0-7|none>", // assume term has 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) /* glibc bastards :-( */ { 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 0x9f: c.ch = ' '; c.bg = c.fg; break; case 0x15: case 0x8a: c.ch = '|'; break; case 0x03: case 0x0c: case 0x90: c.ch = '-'; break; case 0x04: case 0x08: */ case 0x7f: c.ch = '*'; break; case BAD_CHAR: c.ch = '?'; break; default: if (c.attr & EA_GRAPHIC) c.ch = D->gfx_chr; //c.bg = c.fg, c.ch = ' '; 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; } alevt-1.6.2/export.c100660 0 0 15415 10724667374 12463 0ustar rootroot#include #include #include #include #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); } alevt-1.6.2/export.h100660 0 0 3146 6757321533 12421 0ustar rootroot#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 alevt-1.6.2/fdset.c100660 0 0 3546 10724717215 12217 0ustar rootroot#include #include #include #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; } alevt-1.6.2/fdset.h100660 0 0 1022 6633276151 12172 0ustar rootroot#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 alevt-1.6.2/font.c100660 0 0 122 6777216220 12006 0ustar rootroot#define static /* I want them global */ #include "font1.xbm" #include "font2.xbm" alevt-1.6.2/font.h100660 0 0 724 6777216602 12027 0ustar rootroot#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[]; #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 alevt-1.6.2/hamm.c100660 0 0 24126 7010365045 12023 0ustar rootroot#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; } alevt-1.6.2/hamm.h100660 0 0 233 6732241754 11773 0ustar rootroot#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 alevt-1.6.2/help.c100660 0 0 3517 10724703416 12036 0ustar rootroot#include "vt.h" #include "misc.h" //#define VFILL "" #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, 2, -1, 0, 0, (1<<26)-1, { #include "vt901-02.out" }, FLOF_DATA }, { 0x901, 1, -1, 0, 0, (1<<26)-1, { #include "vt901-01.out" }, FLOF_DATA }, #if 0 { 0x902, 0, -1, 0, 0, (1<<26)-1, { #include "vt902.out" }, FLOF_DATA }, #endif { 0x903, 0, -1, 0, 0, (1<<26)-1, { #include "vt903.out" }, FLOF_DATA }, { 0x910, 0, -1, 0, 0, (1<<26)-1, { #include "vt910.out" }, FLOF_DATA }, { 0x911, 2, -1, 0, 0, (1<<26)-1, { #include "vt911-02.out" }, FLOF_DATA }, { 0x911, 1, -1, 0, 0, (1<<26)-1, { #include "vt911-01.out" }, FLOF_DATA }, { 0x912, 2, -1, 0, 0, (1<<26)-1, { #include "vt912-02.out" }, FLOF_DATA }, { 0x912, 1, -1, 0, 0, (1<<26)-1, { #include "vt912-01.out" }, FLOF_DATA }, { 0x913, 0, -1, 0, 0, (1<<26)-1, { #include "vt913.out" }, FLOF_DATA }, { 0x914, 2, -1, 0, 0, (1<<26)-1, { #include "vt914-02.out" }, FLOF_DATA }, { 0x914, 1, -1, 0, 0, (1<<26)-1, { #include "vt914-01.out" }, FLOF_DATA }, { 0x915, 0, -1, 0, 0, (1<<26)-1, { #include "vt915.out" }, FLOF_DATA }, { 0x999, 0, -1, 0, 0, (1<<26)-1, { #include "vt999.out" }, FLOF_DATA }, }; const int nr_help_pages = NELEM(help_pages); alevt-1.6.2/help.h100660 0 0 174 10724703407 12017 0ustar rootroot#ifndef HELP_H #define HELP_H #include "vt.h" extern struct vt_page help_pages[]; extern const int nr_help_pages; #endif alevt-1.6.2/icon-old.xbm100660 0 0 2061 6636105003 13122 0ustar rootroot#define icon_width 64 #define icon_height 20 static unsigned char icon_bits[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x78, 0xf8, 0xff, 0x87, 0x1f, 0x06, 0x80, 0x07, 0x78, 0xf8, 0xff, 0x87, 0x1f, 0x06, 0x80, 0xe1, 0x61, 0xa8, 0xaa, 0x86, 0x1a, 0x7a, 0xf8, 0x61, 0x61, 0xd8, 0x5f, 0x85, 0x15, 0x56, 0x58, 0xa1, 0x61, 0x68, 0xa0, 0x86, 0x1a, 0x6a, 0xa8, 0x61, 0x61, 0x78, 0x60, 0x85, 0x15, 0x56, 0x58, 0xa1, 0x61, 0x18, 0x86, 0x86, 0x1a, 0x6a, 0xa8, 0x61, 0x61, 0x18, 0x86, 0x85, 0x15, 0x56, 0x58, 0xa1, 0x61, 0x18, 0x86, 0x86, 0x1a, 0x6a, 0xa8, 0xe1, 0x61, 0x18, 0x86, 0x85, 0x1f, 0x56, 0x58, 0x01, 0x60, 0x18, 0xe0, 0x1a, 0x86, 0x6b, 0xa8, 0x01, 0x60, 0x18, 0x60, 0x15, 0x86, 0x55, 0x58, 0xe1, 0x61, 0x18, 0xbe, 0x6a, 0xe0, 0x6a, 0xa8, 0x21, 0x61, 0x18, 0x7e, 0x55, 0x60, 0x55, 0x58, 0xe1, 0x61, 0x78, 0xe0, 0xff, 0xf9, 0x7f, 0xf8, 0xe1, 0x61, 0x78, 0xe0, 0xff, 0xf9, 0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, }; alevt-1.6.2/icon.xbm100660 0 0 2061 6723550036 12355 0ustar rootroot#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, }; alevt-1.6.2/lang.c100660 0 0 13333 6744370604 12032 0ustar rootroot#include #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; 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++; } } 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; //printf("%2x,%d,%d ", mode, adr, data); if (adr < 40) { // col functions switch (mode) { case 15: // char from G2 set if (adr < W && row < H) if (latin1) vtp->data[row][adr] = g2map_latin1[data-32]; else 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) data = mark->latin1[x - mark->g0]; else 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; } } } //printf("\n"); } alevt-1.6.2/lang.h100660 0 0 656 10156451150 12007 0ustar rootroot#ifndef LANG_H #define LANG_H #include "misc.h" #include "vt.h" extern int latin1; 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 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 /*LANG_H*/ alevt-1.6.2/main.c100660 0 0 12557 10724675731 12066 0ustar rootroot#include #include #include #include "vt.h" #include "misc.h" #include "fdset.h" #include "xio.h" #include "vbi.h" #include "lang.h" #include "cache.h" #include "ui.h" int debug = 0; /* current args for next start() */ static char *geometry; static char *dpy_name; static char *vbi_name = "/dev/vbi0"; static struct xio *xio; static struct vbi *vbi; static int fine_tune = 1; // auto = 999; static int erc = 1; static int newbttv = -1; static void usage(FILE *fp, int exitval) { fprintf(fp, "\nUsage: %s [options]\n", prgname); fprintf(fp, "\n" " Valid options:\t\tDefault:\n" " --help\n" " --version\n" " -vbi \t\t/dev/vbi0\n" " -display \t\t$DISPLAY\n" " -geometry \t\t41x25\n" " -finetune <-4..4|auto>\t0\n" " -child ppp[.ss]\n" " [-parent] ppp[.ss]\t\t900\n" //" -oldbttv\t\t(for bttv <0.5.20)\n" " -[no]erc\t\t\tenabled\n" " -[no]bell\t\t\tenabled\n" " -charset latin-1/2\t\tlatin-1\n" "\n" " Order is important! Each page number\n" " opens a new window with the previously\n" " given geometry, device, and display.\n" "\n" " ppp[.ss] stands for a page number and an\n" " optional subpage number (ie 123.4). If\n" " the subpage number is omitted the first\n" " transmitted subpage is shown.\n" "\n" " The -child option requires a parent\n" " window. So, it must be preceeded 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) { if (vbi == 0) vbi = vbi_open(vbi_name, cache_open(), fine_tune, newbttv); if (vbi == 0) fatal("cannot open %s", vbi_name); 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"); return parent; } static int option(int argc, char **argv, int *ind, char **arg) { static struct { char *nam, *altnam; int arg; } opts[] = { { "-vbi", "-dev", 1 }, { "-display", "-d", 1 }, { "-geometry", "-g", 1 }, { "-child", "-c", 1 }, { "-editor", "-ed", 0 }, { "-parent", "-p", 1 }, { "--version", "-v", 0 }, { "--help", "-h", 0 }, { "-newbttv", "-new", 0 }, { "-oldbttv", "-old", 0 }, { "-finetune", "-f", 1 }, { "-debug", "--debug", 0 }, { "-copyright", "-©", 0 }, { "-erc", "-e", 0 }, { "-noerc", "-ne", 0 }, { "-bell", "-b", 0 }, { "-nobell", "-nb", 0 }, { "-charset", "-latin", 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; setprgname(argv[0]); fdset_init(fds); ind = 1; while (opt = option(argc, argv, &ind, &arg)) switch (opt) { case 1: // vbi vbi_name = arg; vbi = 0; parent = 0; break; case 2: // display dpy_name = arg; xio = 0; parent = 0; break; case 3: // geometry geometry = arg; break; case 4: // 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 5: // editor enab_editor = 1; break; case 7: // version printf("AleVT Version "VERSION"\n"); exit(0); case 13: // copyright printf("Copyright 2000 by E. Toernig, froese@gmx.de\n"); exit(0); case 8: // help usage(stdout, 0); break; case 9: // newbttv newbttv = 1; break; case 10: // oldbttv newbttv = 0; break; case 11: // finetune if (streq(arg, "auto")) fine_tune = 999; else fine_tune = strtol(arg, 0, 10); break; case 14: // erc erc = 1; break; case 15: // noerc erc = 0; break; case 16: // bell bell = 1; break; case 17: // nobell bell = 0; break; case 18: // charset if (streq(arg, "latin-1") || streq(arg, "1")) latin1 = 1; else if (streq(arg, "latin-2") || streq(arg, "2")) latin1 = 0; else fatal("bad charset (not latin-1/2)"); break; case 12: // debug debug++; break; case 6: // parent case -1: // non-option arg pgno = arg_pgno(arg, &subno); parent = start(argc, argv, 0, pgno, subno); geometry = 0; break; } if (parent == 0) start(argc, argv, 0, 0x900, ANY_SUB); xio_event_loop(); exit(0); } alevt-1.6.2/misc.c100660 0 0 1775 6743165404 12032 0ustar rootroot#include #include #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); // fputc('\n', stderr); } 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); // fputc('\n', stderr); exit(2); } void out_of_mem(int size) { if (size > 0) fatal("out of memory allocating %d bytes.", size); fatal("out of memory."); } alevt-1.6.2/misc.h100660 0 0 2306 10724717130 12037 0ustar rootroot#ifndef MISC_H #define MISC_H ////////////////////////// // generic macros/typedefs ////////////////////////// #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; //////////////////////// // prototypes for misc.c //////////////////////// 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 alevt-1.6.2/neep9-latin-1.bdf100660 0 0 103403 7104056627 13720 0ustar rootrootSTARTFONT 2.1 FONT -alevt-teletext-medium-r-normal--11-1-75-75-c-60-fontspecific-1 SIZE 1 75 75 FONTBOUNDINGBOX 6 11 0 -2 STARTPROPERTIES 10 POINT_SIZE 1 PIXEL_SIZE 11 RESOLUTION_X 75 RESOLUTION_Y 75 FONT_ASCENT 11 FONT_DESCENT 2 AVERAGE_WIDTH 60 SPACING "C" _XMBDFED_INFO "Edited with xmbdfed 2.4." FONT "vtxt" ENDPROPERTIES CHARS 256 STARTCHAR char0 ENCODING 0 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR char1 ENCODING 1 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 00 00 00 00 00 00 00 ENDCHAR STARTCHAR char2 ENCODING 2 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 00 00 00 00 00 00 00 ENDCHAR STARTCHAR char3 ENCODING 3 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 00 00 00 00 00 00 00 ENDCHAR STARTCHAR char4 ENCODING 4 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 E0 E0 E0 E0 00 00 00 ENDCHAR STARTCHAR char5 ENCODING 5 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 E0 E0 E0 E0 00 00 00 ENDCHAR STARTCHAR char6 ENCODING 6 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C E0 E0 E0 E0 00 00 00 ENDCHAR STARTCHAR char7 ENCODING 7 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC E0 E0 E0 E0 00 00 00 ENDCHAR STARTCHAR char8 ENCODING 8 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 1C 1C 1C 1C 00 00 00 ENDCHAR STARTCHAR char9 ENCODING 9 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 1C 1C 1C 1C 00 00 00 ENDCHAR STARTCHAR char10 ENCODING 10 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 1C 1C 1C 1C 00 00 00 ENDCHAR STARTCHAR char11 ENCODING 11 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 1C 1C 1C 1C 00 00 00 ENDCHAR STARTCHAR char12 ENCODING 12 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 FC FC FC FC 00 00 00 ENDCHAR STARTCHAR char13 ENCODING 13 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 FC FC FC FC 00 00 00 ENDCHAR STARTCHAR char14 ENCODING 14 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C FC FC FC FC 00 00 00 ENDCHAR STARTCHAR char15 ENCODING 15 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC FC FC FC FC 00 00 00 ENDCHAR STARTCHAR char16 ENCODING 16 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 E0 E0 E0 ENDCHAR STARTCHAR char17 ENCODING 17 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 00 00 00 00 E0 E0 E0 ENDCHAR STARTCHAR char18 ENCODING 18 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 00 00 00 00 E0 E0 E0 ENDCHAR STARTCHAR char19 ENCODING 19 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 00 00 00 00 E0 E0 E0 ENDCHAR STARTCHAR char20 ENCODING 20 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 E0 E0 E0 E0 E0 E0 E0 ENDCHAR STARTCHAR char21 ENCODING 21 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 ENDCHAR STARTCHAR char22 ENCODING 22 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C E0 E0 E0 E0 E0 E0 E0 ENDCHAR STARTCHAR char23 ENCODING 23 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC E0 E0 E0 E0 E0 E0 E0 ENDCHAR STARTCHAR char24 ENCODING 24 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 1C 1C 1C 1C E0 E0 E0 ENDCHAR STARTCHAR char25 ENCODING 25 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 1C 1C 1C 1C E0 E0 E0 ENDCHAR STARTCHAR char26 ENCODING 26 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 1C 1C 1C 1C E0 E0 E0 ENDCHAR STARTCHAR char27 ENCODING 27 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 1C 1C 1C 1C E0 E0 E0 ENDCHAR STARTCHAR char28 ENCODING 28 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 FC FC FC FC E0 E0 E0 ENDCHAR STARTCHAR char29 ENCODING 29 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 FC FC FC FC E0 E0 E0 ENDCHAR STARTCHAR char30 ENCODING 30 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C FC FC FC FC E0 E0 E0 ENDCHAR STARTCHAR char31 ENCODING 31 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC FC FC FC FC E0 E0 E0 ENDCHAR STARTCHAR U+0020 space ENCODING 32 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0021 exclamation mark ENCODING 33 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 20 20 20 20 00 20 00 00 ENDCHAR STARTCHAR U+0022 quotation mark ENCODING 34 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 50 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0023 number sign ENCODING 35 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 50 50 F8 50 F8 50 50 00 00 ENDCHAR STARTCHAR U+0024 dollar sign ENCODING 36 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 78 A0 70 28 F0 20 00 00 ENDCHAR STARTCHAR U+0025 percent sign ENCODING 37 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 48 A8 50 20 50 A8 90 00 00 ENDCHAR STARTCHAR U+0026 ampersand ENCODING 38 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 60 90 A0 40 A8 90 68 00 00 ENDCHAR STARTCHAR U+0027 apostrophe ENCODING 39 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 20 40 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0028 left parenthesis ENCODING 40 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 10 20 40 40 40 40 40 20 10 00 ENDCHAR STARTCHAR U+0029 right parenthesis ENCODING 41 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 40 20 10 10 10 10 10 20 40 00 ENDCHAR STARTCHAR U+002a asterisk ENCODING 42 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 50 70 D8 70 50 00 00 00 ENDCHAR STARTCHAR U+002b plus sign ENCODING 43 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 20 20 F8 20 20 00 00 00 ENDCHAR STARTCHAR U+002c comma ENCODING 44 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 30 20 40 00 ENDCHAR STARTCHAR U+002d hyphen-minus ENCODING 45 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 78 00 00 00 00 00 ENDCHAR STARTCHAR U+002e period ENCODING 46 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 20 70 20 00 ENDCHAR STARTCHAR U+002f forward slash ENCODING 47 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 08 08 10 10 20 20 40 40 80 00 ENDCHAR STARTCHAR U+0030 digit zero ENCODING 48 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 50 88 A8 88 50 20 00 00 ENDCHAR STARTCHAR U+0031 digit one ENCODING 49 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 60 A0 20 20 20 20 00 00 ENDCHAR STARTCHAR U+0032 digit two ENCODING 50 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 08 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+0033 digit three ENCODING 51 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 08 10 30 08 88 70 00 00 ENDCHAR STARTCHAR U+0034 digit four ENCODING 52 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 30 50 50 90 F8 10 10 00 00 ENDCHAR STARTCHAR U+0035 digit five ENCODING 53 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 80 F0 88 08 88 70 00 00 ENDCHAR STARTCHAR U+0036 digit six ENCODING 54 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 F0 88 88 70 00 00 ENDCHAR STARTCHAR U+0037 digit seven ENCODING 55 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 08 10 10 20 20 40 00 00 ENDCHAR STARTCHAR U+0038 digit eight ENCODING 56 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 70 88 88 70 00 00 ENDCHAR STARTCHAR U+0039 digit nine ENCODING 57 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 78 08 88 70 00 00 ENDCHAR STARTCHAR U+003a colon ENCODING 58 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 20 70 20 00 20 70 20 00 ENDCHAR STARTCHAR U+003b semicolon ENCODING 59 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 20 70 20 00 30 20 40 00 ENDCHAR STARTCHAR U+003c less-than sign ENCODING 60 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 08 10 20 40 20 10 08 00 00 ENDCHAR STARTCHAR U+003d equals sign ENCODING 61 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 78 00 78 00 00 00 00 ENDCHAR STARTCHAR U+003e greater-than sign ENCODING 62 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 40 20 10 08 10 20 40 00 00 ENDCHAR STARTCHAR U+003f question mark ENCODING 63 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 08 10 20 20 00 20 00 00 ENDCHAR STARTCHAR U+0040 at sign ENCODING 64 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 30 48 98 A8 98 40 30 00 00 ENDCHAR STARTCHAR U+0041 latin capital letter A ENCODING 65 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 F8 88 88 88 00 00 ENDCHAR STARTCHAR U+0042 latin capital letter B ENCODING 66 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 E0 90 90 F0 88 88 F0 00 00 ENDCHAR STARTCHAR U+0043 latin capital letter C ENCODING 67 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 80 80 88 70 00 00 ENDCHAR STARTCHAR U+0044 latin capital letter D ENCODING 68 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 E0 90 88 88 88 90 E0 00 00 ENDCHAR STARTCHAR U+0045 latin capital letter E ENCODING 69 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 80 80 F0 80 80 F8 00 00 ENDCHAR STARTCHAR U+0046 latin capital letter F ENCODING 70 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 80 80 F0 80 80 80 00 00 ENDCHAR STARTCHAR U+0047 latin capital letter G ENCODING 71 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 98 88 88 70 00 00 ENDCHAR STARTCHAR U+0048 latin capital letter H ENCODING 72 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 F8 88 88 88 00 00 ENDCHAR STARTCHAR U+0049 latin capital letter I ENCODING 73 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 20 20 20 20 20 70 00 00 ENDCHAR STARTCHAR U+004a latin capital letter J ENCODING 74 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 38 08 08 08 08 88 70 00 00 ENDCHAR STARTCHAR U+004b latin capital letter K ENCODING 75 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 90 A0 C0 A0 90 88 00 00 ENDCHAR STARTCHAR U+004c latin capital letter L ENCODING 76 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 80 80 80 80 F8 00 00 ENDCHAR STARTCHAR U+004d latin capital letter M ENCODING 77 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 D8 A8 A8 88 88 88 00 00 ENDCHAR STARTCHAR U+004e latin capital letter N ENCODING 78 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 C8 C8 A8 98 98 88 00 00 ENDCHAR STARTCHAR U+004f latin capital letter O ENCODING 79 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+0050 latin capital letter P ENCODING 80 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F0 88 88 F0 80 80 80 00 00 ENDCHAR STARTCHAR U+0051 latin capital letter Q ENCODING 81 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 88 88 A8 70 18 00 ENDCHAR STARTCHAR U+0052 latin capital letter R ENCODING 82 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F0 88 88 F0 A0 90 88 00 00 ENDCHAR STARTCHAR U+0053 latin capital letter S ENCODING 83 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 70 08 88 70 00 00 ENDCHAR STARTCHAR U+0054 latin capital letter T ENCODING 84 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 20 20 20 20 20 20 00 00 ENDCHAR STARTCHAR U+0055 latin capital letter U ENCODING 85 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+0056 latin capital letter V ENCODING 86 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 50 50 20 20 00 00 ENDCHAR STARTCHAR U+0057 latin capital letter W ENCODING 87 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 A8 A8 D8 88 00 00 ENDCHAR STARTCHAR U+0058 latin capital letter X ENCODING 88 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 50 20 50 88 88 00 00 ENDCHAR STARTCHAR U+0059 latin capital letter Y ENCODING 89 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 70 20 20 20 00 00 ENDCHAR STARTCHAR U+005a latin capital letter Z ENCODING 90 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 08 10 20 40 80 F8 00 00 ENDCHAR STARTCHAR U+005b left square bracket ENCODING 91 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 70 40 40 40 40 40 40 40 70 00 ENDCHAR STARTCHAR U+005c backslash ENCODING 92 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 80 40 40 20 20 10 10 08 08 00 ENDCHAR STARTCHAR U+005d right square bracket ENCODING 93 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 70 10 10 10 10 10 10 10 70 00 ENDCHAR STARTCHAR U+005e circumflex ENCODING 94 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 50 88 00 00 00 00 00 00 ENDCHAR STARTCHAR U+005f underscore ENCODING 95 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 00 F8 00 ENDCHAR STARTCHAR U+0060 grave accent ENCODING 96 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 60 20 10 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0061 latin small letter a ENCODING 97 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+0062 latin small letter b ENCODING 98 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 B0 C8 88 C8 B0 00 00 ENDCHAR STARTCHAR U+0063 latin small letter c ENCODING 99 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 88 80 88 70 00 00 ENDCHAR STARTCHAR U+0064 latin small letter d ENCODING 100 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 08 08 68 98 88 98 68 00 00 ENDCHAR STARTCHAR U+0065 latin small letter e ENCODING 101 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 88 F8 80 78 00 00 ENDCHAR STARTCHAR U+0066 latin small letter f ENCODING 102 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 30 48 40 F0 40 40 40 00 00 ENDCHAR STARTCHAR U+0067 latin small letter g ENCODING 103 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 68 98 88 98 68 08 70 ENDCHAR STARTCHAR U+0068 latin small letter h ENCODING 104 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 B0 C8 88 88 88 00 00 ENDCHAR STARTCHAR U+0069 latin small letter i ENCODING 105 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 00 60 20 20 20 20 00 00 ENDCHAR STARTCHAR U+006a latin small letter j ENCODING 106 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 10 00 30 10 10 10 10 90 60 ENDCHAR STARTCHAR U+006b latin small letter k ENCODING 107 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 90 A0 E0 90 88 00 00 ENDCHAR STARTCHAR U+006c latin small letter l ENCODING 108 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 40 40 40 40 40 40 30 00 00 ENDCHAR STARTCHAR U+006d latin small letter m ENCODING 109 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 D0 A8 A8 A8 88 00 00 ENDCHAR STARTCHAR U+006e latin small letter n ENCODING 110 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 B0 C8 88 88 88 00 00 ENDCHAR STARTCHAR U+006f latin small letter o ENCODING 111 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+0070 latin small letter p ENCODING 112 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 B0 C8 88 C8 B0 80 80 ENDCHAR STARTCHAR U+0071 latin small letter q ENCODING 113 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 68 98 88 98 68 08 08 ENDCHAR STARTCHAR U+0072 latin small letter r ENCODING 114 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 B0 C8 80 80 80 00 00 ENDCHAR STARTCHAR U+0073 latin small letter s ENCODING 115 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 78 80 70 08 F0 00 00 ENDCHAR STARTCHAR U+0074 latin small letter t ENCODING 116 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 40 40 F0 40 40 48 30 00 00 ENDCHAR STARTCHAR U+0075 latin small letter u ENCODING 117 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+0076 latin small letter v ENCODING 118 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 88 50 50 20 00 00 ENDCHAR STARTCHAR U+0077 latin small letter w ENCODING 119 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 A8 A8 A8 50 00 00 ENDCHAR STARTCHAR U+0078 latin small letter x ENCODING 120 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 50 20 50 88 00 00 ENDCHAR STARTCHAR U+0079 latin small letter y ENCODING 121 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 88 88 98 68 08 70 ENDCHAR STARTCHAR U+007a latin small letter z ENCODING 122 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 F8 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+007b left curly brace ENCODING 123 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 18 20 20 20 C0 20 20 20 18 00 ENDCHAR STARTCHAR U+007c vertical bar ENCODING 124 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 20 20 20 20 20 20 20 20 20 00 ENDCHAR STARTCHAR U+007d right curly brace ENCODING 125 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 C0 20 20 20 18 20 20 20 C0 00 ENDCHAR STARTCHAR U+007e tilde ENCODING 126 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 48 A8 90 00 00 00 00 00 00 ENDCHAR STARTCHAR char127 ENCODING 127 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 78 78 78 78 78 00 00 00 ENDCHAR STARTCHAR char128 ENCODING 128 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 1C 1C 1C ENDCHAR STARTCHAR char129 ENCODING 129 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 00 00 00 00 1C 1C 1C ENDCHAR STARTCHAR char130 ENCODING 130 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 00 00 00 00 1C 1C 1C ENDCHAR STARTCHAR char131 ENCODING 131 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 00 00 00 00 1C 1C 1C ENDCHAR STARTCHAR char132 ENCODING 132 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 E0 E0 E0 E0 1C 1C 1C ENDCHAR STARTCHAR char133 ENCODING 133 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 E0 E0 E0 E0 1C 1C 1C ENDCHAR STARTCHAR char134 ENCODING 134 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C E0 E0 E0 E0 1C 1C 1C ENDCHAR STARTCHAR char135 ENCODING 135 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC E0 E0 E0 E0 1C 1C 1C ENDCHAR STARTCHAR char136 ENCODING 136 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 1C 1C 1C 1C 1C 1C 1C ENDCHAR STARTCHAR char137 ENCODING 137 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 1C 1C 1C 1C 1C 1C 1C ENDCHAR STARTCHAR char138 ENCODING 138 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C ENDCHAR STARTCHAR char139 ENCODING 139 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 1C 1C 1C 1C 1C 1C 1C ENDCHAR STARTCHAR char140 ENCODING 140 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 FC FC FC FC 1C 1C 1C ENDCHAR STARTCHAR char141 ENCODING 141 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 FC FC FC FC 1C 1C 1C ENDCHAR STARTCHAR char142 ENCODING 142 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C FC FC FC FC 1C 1C 1C ENDCHAR STARTCHAR char143 ENCODING 143 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC FC FC FC FC 1C 1C 1C ENDCHAR STARTCHAR char144 ENCODING 144 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 FC FC FC ENDCHAR STARTCHAR char145 ENCODING 145 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 00 00 00 00 FC FC FC ENDCHAR STARTCHAR char146 ENCODING 146 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 00 00 00 00 FC FC FC ENDCHAR STARTCHAR char147 ENCODING 147 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 00 00 00 00 FC FC FC ENDCHAR STARTCHAR char148 ENCODING 148 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 E0 E0 E0 E0 FC FC FC ENDCHAR STARTCHAR char149 ENCODING 149 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 E0 E0 E0 E0 FC FC FC ENDCHAR STARTCHAR char150 ENCODING 150 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C E0 E0 E0 E0 FC FC FC ENDCHAR STARTCHAR char151 ENCODING 151 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC E0 E0 E0 E0 FC FC FC ENDCHAR STARTCHAR char152 ENCODING 152 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 1C 1C 1C 1C FC FC FC ENDCHAR STARTCHAR char153 ENCODING 153 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 1C 1C 1C 1C FC FC FC ENDCHAR STARTCHAR char154 ENCODING 154 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 1C 1C 1C 1C FC FC FC ENDCHAR STARTCHAR char155 ENCODING 155 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 1C 1C 1C 1C FC FC FC ENDCHAR STARTCHAR char156 ENCODING 156 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 FC FC FC FC FC FC FC ENDCHAR STARTCHAR char157 ENCODING 157 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 FC FC FC FC FC FC FC ENDCHAR STARTCHAR char158 ENCODING 158 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C FC FC FC FC FC FC FC ENDCHAR STARTCHAR char159 ENCODING 159 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC FC FC FC FC FC FC FC ENDCHAR STARTCHAR U+00a0 seperated gfx mask ENCODING 160 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC 24 24 24 FC 24 24 24 FC 24 24 ENDCHAR STARTCHAR U+00a1 inverted exclamation mark ENCODING 161 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 20 00 20 20 20 20 20 ENDCHAR STARTCHAR U+00a2 cent sign ENCODING 162 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 20 70 A8 A0 A8 70 20 00 ENDCHAR STARTCHAR U+00a3 pound sign ENCODING 163 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 30 48 40 E0 40 40 F8 00 00 ENDCHAR STARTCHAR U+00a4 currency sign ENCODING 164 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 88 70 88 88 70 88 00 00 ENDCHAR STARTCHAR U+00a5 yen sign ENCODING 165 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 50 F8 20 F8 20 20 00 00 ENDCHAR STARTCHAR U+00a6 broken bar ENCODING 166 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 20 20 00 20 20 20 00 00 ENDCHAR STARTCHAR U+00a7 section sign ENCODING 167 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 38 40 30 48 48 30 08 70 00 00 ENDCHAR STARTCHAR U+00a8 smiley ENCODING 168 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 78 FC B4 FC B4 CC 78 00 00 00 ENDCHAR STARTCHAR U+00a9 copyright sign ENCODING 169 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 78 84 94 A4 A4 94 84 78 00 00 ENDCHAR STARTCHAR U+00aa feminine ordinal indicator ENCODING 170 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 08 38 48 38 00 78 00 00 00 ENDCHAR STARTCHAR U+00ab left-pointing double angle quotation mark ENCODING 171 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 28 50 A0 50 28 00 00 00 ENDCHAR STARTCHAR U+00ac not sign ENCODING 172 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 F8 08 08 00 00 00 ENDCHAR STARTCHAR U+00ad soft hyphen ENCODING 173 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 70 00 00 00 00 00 ENDCHAR STARTCHAR U+00ae registered sign ENCODING 174 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 78 84 B4 A4 A4 A4 84 78 00 00 ENDCHAR STARTCHAR U+00af macron ENCODING 175 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+00b0 degree sign ENCODING 176 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 48 30 00 00 00 00 00 00 ENDCHAR STARTCHAR U+00b1 plus-minus sign ENCODING 177 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 20 F8 20 20 00 F8 00 00 ENDCHAR STARTCHAR U+00b2 superscript two ENCODING 178 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 60 90 20 40 F0 00 00 00 00 00 ENDCHAR STARTCHAR U+00b3 superscript three ENCODING 179 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 F0 20 10 90 60 00 00 00 00 00 ENDCHAR STARTCHAR U+00b4 acute accent ENCODING 180 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+00b5 micro sign ENCODING 181 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 90 90 90 E8 80 80 00 ENDCHAR STARTCHAR U+00b6 pilcrow sign ENCODING 182 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 78 A8 A8 68 28 28 28 00 00 ENDCHAR STARTCHAR U+00b7 middle dot ENCODING 183 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 20 70 20 00 00 00 00 ENDCHAR STARTCHAR U+00b8 error sign ENCODING 184 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 0C 18 30 60 FC 18 30 60 C0 00 00 ENDCHAR STARTCHAR U+00b9 superscript one ENCODING 185 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 20 60 20 20 20 00 00 00 00 00 ENDCHAR STARTCHAR U+00ba masculine ordinal indicator ENCODING 186 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 48 48 30 00 78 00 00 00 ENDCHAR STARTCHAR U+00bb right-pointing double angle quotation mark ENCODING 187 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 A0 50 28 50 A0 00 00 00 ENDCHAR STARTCHAR U+00bc vulgar fraction one quarter ENCODING 188 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 40 C0 40 40 48 18 28 78 08 00 00 ENDCHAR STARTCHAR U+00bd vulgar fraction one half ENCODING 189 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 40 C0 40 40 70 48 10 20 78 00 00 ENDCHAR STARTCHAR U+00be vulgar fraction three quarters ENCODING 190 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 F0 20 10 90 68 18 28 78 08 00 ENDCHAR STARTCHAR U+00bf inverted question mark ENCODING 191 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 10 00 10 10 20 40 38 ENDCHAR STARTCHAR U+00c0 latin capital letter A with grave ENCODING 192 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 60 10 00 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+00c1 latin capital letter A with acute ENCODING 193 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+00c2 latin capital letter A with circumflex ENCODING 194 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 48 00 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+00c3 latin capital letter A with tilde ENCODING 195 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 64 98 00 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+00c4 latin capital letter A with diaresis ENCODING 196 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 50 50 00 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+00c5 latin capital letter A with ring above ENCODING 197 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 20 50 20 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+00c6 latin capital ligature AE ENCODING 198 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 78 90 90 F8 90 90 98 00 00 ENDCHAR STARTCHAR U+00c7 latin capital letter C with cedilla ENCODING 199 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 80 80 88 70 10 60 ENDCHAR STARTCHAR U+00c8 latin capital letter E with grave ENCODING 200 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 60 10 00 F8 80 F0 80 80 F8 00 00 ENDCHAR STARTCHAR U+00c9 latin capital letter E with acute ENCODING 201 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 F8 80 F0 80 80 F8 00 00 ENDCHAR STARTCHAR U+00ca latin capital letter E with circumflex ENCODING 202 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 48 00 F8 80 F0 80 80 F8 00 00 ENDCHAR STARTCHAR U+00cb latin capital letter E with diaresis ENCODING 203 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 50 50 00 F8 80 F0 80 80 F8 00 00 ENDCHAR STARTCHAR U+00cc latin capital letter I with grave ENCODING 204 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 60 10 00 70 20 20 20 20 70 00 00 ENDCHAR STARTCHAR U+00cd latin capital letter I with acute ENCODING 205 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 70 20 20 20 20 70 00 00 ENDCHAR STARTCHAR U+00ce latin capital letter I with circumflex ENCODING 206 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 48 00 70 20 20 20 20 70 00 00 ENDCHAR STARTCHAR U+00cf latin capital letter I with diaresis ENCODING 207 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 50 50 00 70 20 20 20 20 70 00 00 ENDCHAR STARTCHAR U+00d0 latin capital letter Eth ENCODING 208 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 48 44 E4 44 48 70 00 00 ENDCHAR STARTCHAR U+00d1 latin capital letter N with tilde ENCODING 209 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 64 98 00 88 C8 A8 98 88 88 00 00 ENDCHAR STARTCHAR U+00d2 latin capital letter O with grave ENCODING 210 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 60 10 00 70 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00d3 latin capital letter O with acute ENCODING 211 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 70 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00d4 latin capital letter O with circumflex ENCODING 212 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 48 00 70 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00d5 latin capital letter O with tilde ENCODING 213 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 64 98 00 70 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00d6 latin capital letter O with diaresis ENCODING 214 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 50 50 00 70 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00d7 multiplication sign ENCODING 215 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 48 30 30 48 00 00 ENDCHAR STARTCHAR U+00d8 latin capital letter O with stroke ENCODING 216 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 08 70 98 A8 A8 A8 C8 70 80 00 ENDCHAR STARTCHAR U+00d9 latin capital letter U with grave ENCODING 217 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 60 10 00 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00da latin capital letter U with acute ENCODING 218 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00db latin capital letter U with circumflex ENCODING 219 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 48 00 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00dc latin capital letter U with diaresis ENCODING 220 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 50 50 00 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00dd latin capital letter Y with acute ENCODING 221 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 88 88 70 20 20 20 00 00 ENDCHAR STARTCHAR U+00de latin capital letter Thorn ENCODING 222 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 F0 88 F0 80 80 00 00 ENDCHAR STARTCHAR U+00df latin small letter sharp s ENCODING 223 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 60 90 A0 90 88 88 B0 80 00 ENDCHAR STARTCHAR U+00e0 latin small letter a with grave ENCODING 224 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 60 10 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+00e1 latin small letter a with acute ENCODING 225 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+00e2 latin small letter a with circumflex ENCODING 226 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+00e3 latin small letter a with tilde ENCODING 227 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 64 98 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+00e4 latin small letter a with diaresis ENCODING 228 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+00e5 latin small letter a with ring above ENCODING 229 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 20 50 20 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+00e6 latin small ligature ae ENCODING 230 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 D0 28 78 A0 58 00 00 ENDCHAR STARTCHAR U+00e7 latin small letter c with cedilla ENCODING 231 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 88 80 88 70 10 60 ENDCHAR STARTCHAR U+00e8 latin small letter e with grave ENCODING 232 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 60 10 00 70 88 F8 80 78 00 00 ENDCHAR STARTCHAR U+00e9 latin small letter e with acute ENCODING 233 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 70 88 F8 80 78 00 00 ENDCHAR STARTCHAR U+00ea latin small letter e with circumflex ENCODING 234 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 00 70 88 F8 80 78 00 00 ENDCHAR STARTCHAR U+00eb latin small letter e with diaresis ENCODING 235 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 70 88 F8 80 78 00 00 ENDCHAR STARTCHAR U+00ec latin small letter i with grave ENCODING 236 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 C0 20 00 60 20 20 20 20 00 00 ENDCHAR STARTCHAR U+00ed latin small letter i with acute ENCODING 237 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 60 20 20 20 20 00 00 ENDCHAR STARTCHAR U+00ee latin small letter i with circumflex ENCODING 238 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 00 60 20 20 20 20 00 00 ENDCHAR STARTCHAR U+00ef latin small letter i with diaresis ENCODING 239 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 60 20 20 20 20 00 00 ENDCHAR STARTCHAR U+00f0 latin small letter eth ENCODING 240 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 A0 40 A0 10 70 88 88 70 00 00 ENDCHAR STARTCHAR U+00f1 latin small letter n with tilde ENCODING 241 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 64 98 00 B0 C8 88 88 88 00 00 ENDCHAR STARTCHAR U+00f2 latin small letter o with grave ENCODING 242 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 60 10 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00f3 latin small letter o with acute ENCODING 243 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00f4 latin small letter o with circumflex ENCODING 244 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00f5 latin small letter o with tilde ENCODING 245 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 64 98 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00f6 latin small letter o with diaresis ENCODING 246 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00f7 division sign ENCODING 247 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 20 00 F8 00 20 20 00 00 ENDCHAR STARTCHAR U+00f8 latin small letter o with stroke ENCODING 248 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 78 98 A8 C8 F0 00 00 ENDCHAR STARTCHAR U+00f9 latin small letter u with grave ENCODING 249 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 60 10 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+00fa latin small letter u with acute ENCODING 250 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+00fb latin small letter u with circumflex ENCODING 251 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+00fc latin small letter u with diaresis ENCODING 252 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+00fd latin small letter y with acute ENCODING 253 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 88 88 88 98 68 08 70 ENDCHAR STARTCHAR U+00fe latin small letter thorn ENCODING 254 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 B0 C8 88 C8 B0 80 80 ENDCHAR STARTCHAR U+00ff latin small letter y with diaresis ENCODING 255 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 88 88 88 98 68 08 70 ENDCHAR ENDFONT alevt-1.6.2/neep9-latin-2.bdf100660 0 0 104036 7104056627 13724 0ustar rootrootSTARTFONT 2.1 FONT -alevt-teletext-medium-r-normal--11-1-75-75-c-60-fontspecific-2 SIZE 1 75 75 FONTBOUNDINGBOX 6 11 0 -2 STARTPROPERTIES 10 POINT_SIZE 1 PIXEL_SIZE 11 RESOLUTION_X 75 RESOLUTION_Y 75 FONT_ASCENT 11 FONT_DESCENT 2 AVERAGE_WIDTH 60 SPACING "C" _XMBDFED_INFO "Edited with xmbdfed 2.4." FONT "vtxt" ENDPROPERTIES CHARS 256 STARTCHAR char0 ENCODING 0 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR char1 ENCODING 1 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 00 00 00 00 00 00 00 ENDCHAR STARTCHAR char2 ENCODING 2 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 00 00 00 00 00 00 00 ENDCHAR STARTCHAR char3 ENCODING 3 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 00 00 00 00 00 00 00 ENDCHAR STARTCHAR char4 ENCODING 4 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 E0 E0 E0 E0 00 00 00 ENDCHAR STARTCHAR char5 ENCODING 5 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 E0 E0 E0 E0 00 00 00 ENDCHAR STARTCHAR char6 ENCODING 6 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C E0 E0 E0 E0 00 00 00 ENDCHAR STARTCHAR char7 ENCODING 7 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC E0 E0 E0 E0 00 00 00 ENDCHAR STARTCHAR char8 ENCODING 8 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 1C 1C 1C 1C 00 00 00 ENDCHAR STARTCHAR char9 ENCODING 9 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 1C 1C 1C 1C 00 00 00 ENDCHAR STARTCHAR char10 ENCODING 10 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 1C 1C 1C 1C 00 00 00 ENDCHAR STARTCHAR char11 ENCODING 11 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 1C 1C 1C 1C 00 00 00 ENDCHAR STARTCHAR char12 ENCODING 12 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 FC FC FC FC 00 00 00 ENDCHAR STARTCHAR char13 ENCODING 13 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 FC FC FC FC 00 00 00 ENDCHAR STARTCHAR char14 ENCODING 14 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C FC FC FC FC 00 00 00 ENDCHAR STARTCHAR char15 ENCODING 15 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC FC FC FC FC 00 00 00 ENDCHAR STARTCHAR char16 ENCODING 16 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 E0 E0 E0 ENDCHAR STARTCHAR char17 ENCODING 17 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 00 00 00 00 E0 E0 E0 ENDCHAR STARTCHAR char18 ENCODING 18 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 00 00 00 00 E0 E0 E0 ENDCHAR STARTCHAR char19 ENCODING 19 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 00 00 00 00 E0 E0 E0 ENDCHAR STARTCHAR char20 ENCODING 20 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 E0 E0 E0 E0 E0 E0 E0 ENDCHAR STARTCHAR char21 ENCODING 21 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 ENDCHAR STARTCHAR char22 ENCODING 22 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C E0 E0 E0 E0 E0 E0 E0 ENDCHAR STARTCHAR char23 ENCODING 23 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC E0 E0 E0 E0 E0 E0 E0 ENDCHAR STARTCHAR char24 ENCODING 24 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 1C 1C 1C 1C E0 E0 E0 ENDCHAR STARTCHAR char25 ENCODING 25 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 1C 1C 1C 1C E0 E0 E0 ENDCHAR STARTCHAR char26 ENCODING 26 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 1C 1C 1C 1C E0 E0 E0 ENDCHAR STARTCHAR char27 ENCODING 27 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 1C 1C 1C 1C E0 E0 E0 ENDCHAR STARTCHAR char28 ENCODING 28 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 FC FC FC FC E0 E0 E0 ENDCHAR STARTCHAR char29 ENCODING 29 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 FC FC FC FC E0 E0 E0 ENDCHAR STARTCHAR char30 ENCODING 30 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C FC FC FC FC E0 E0 E0 ENDCHAR STARTCHAR char31 ENCODING 31 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC FC FC FC FC E0 E0 E0 ENDCHAR STARTCHAR U+0020 space ENCODING 32 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0021 exclamation mark ENCODING 33 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 20 20 20 20 00 20 00 00 ENDCHAR STARTCHAR U+0022 quotation mark ENCODING 34 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 50 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0023 number sign ENCODING 35 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 50 50 F8 50 F8 50 50 00 00 ENDCHAR STARTCHAR U+0024 dollar sign ENCODING 36 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 78 A0 70 28 F0 20 00 00 ENDCHAR STARTCHAR U+0025 percent sign ENCODING 37 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 48 A8 50 20 50 A8 90 00 00 ENDCHAR STARTCHAR U+0026 ampersand ENCODING 38 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 60 90 A0 40 A8 90 68 00 00 ENDCHAR STARTCHAR U+0027 apostrophe ENCODING 39 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 20 40 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0028 left parenthesis ENCODING 40 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 10 20 40 40 40 40 40 20 10 00 ENDCHAR STARTCHAR U+0029 right parenthesis ENCODING 41 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 40 20 10 10 10 10 10 20 40 00 ENDCHAR STARTCHAR U+002a asterisk ENCODING 42 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 50 70 D8 70 50 00 00 00 ENDCHAR STARTCHAR U+002b plus sign ENCODING 43 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 20 20 F8 20 20 00 00 00 ENDCHAR STARTCHAR U+002c comma ENCODING 44 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 30 20 40 00 ENDCHAR STARTCHAR U+002d hyphen-minus ENCODING 45 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 78 00 00 00 00 00 ENDCHAR STARTCHAR U+002e period ENCODING 46 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 20 70 20 00 ENDCHAR STARTCHAR U+002f forward slash ENCODING 47 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 08 08 10 10 20 20 40 40 80 00 ENDCHAR STARTCHAR U+0030 digit zero ENCODING 48 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 50 88 A8 88 50 20 00 00 ENDCHAR STARTCHAR U+0031 digit one ENCODING 49 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 60 A0 20 20 20 20 00 00 ENDCHAR STARTCHAR U+0032 digit two ENCODING 50 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 08 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+0033 digit three ENCODING 51 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 08 10 30 08 88 70 00 00 ENDCHAR STARTCHAR U+0034 digit four ENCODING 52 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 30 50 50 90 F8 10 10 00 00 ENDCHAR STARTCHAR U+0035 digit five ENCODING 53 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 80 F0 88 08 88 70 00 00 ENDCHAR STARTCHAR U+0036 digit six ENCODING 54 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 F0 88 88 70 00 00 ENDCHAR STARTCHAR U+0037 digit seven ENCODING 55 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 08 10 10 20 20 40 00 00 ENDCHAR STARTCHAR U+0038 digit eight ENCODING 56 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 70 88 88 70 00 00 ENDCHAR STARTCHAR U+0039 digit nine ENCODING 57 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 78 08 88 70 00 00 ENDCHAR STARTCHAR U+003a colon ENCODING 58 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 20 70 20 00 20 70 20 00 ENDCHAR STARTCHAR U+003b semicolon ENCODING 59 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 20 70 20 00 30 20 40 00 ENDCHAR STARTCHAR U+003c less-than sign ENCODING 60 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 08 10 20 40 20 10 08 00 00 ENDCHAR STARTCHAR U+003d equals sign ENCODING 61 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 78 00 78 00 00 00 00 ENDCHAR STARTCHAR U+003e greater-than sign ENCODING 62 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 40 20 10 08 10 20 40 00 00 ENDCHAR STARTCHAR U+003f question mark ENCODING 63 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 08 10 20 20 00 20 00 00 ENDCHAR STARTCHAR U+0040 at sign ENCODING 64 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 30 48 98 A8 98 40 30 00 00 ENDCHAR STARTCHAR U+0041 latin capital letter A ENCODING 65 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 F8 88 88 88 00 00 ENDCHAR STARTCHAR U+0042 latin capital letter B ENCODING 66 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 E0 90 90 F0 88 88 F0 00 00 ENDCHAR STARTCHAR U+0043 latin capital letter C ENCODING 67 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 80 80 88 70 00 00 ENDCHAR STARTCHAR U+0044 latin capital letter D ENCODING 68 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 E0 90 88 88 88 90 E0 00 00 ENDCHAR STARTCHAR U+0045 latin capital letter E ENCODING 69 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 80 80 F0 80 80 F8 00 00 ENDCHAR STARTCHAR U+0046 latin capital letter F ENCODING 70 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 80 80 F0 80 80 80 00 00 ENDCHAR STARTCHAR U+0047 latin capital letter G ENCODING 71 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 98 88 88 70 00 00 ENDCHAR STARTCHAR U+0048 latin capital letter H ENCODING 72 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 F8 88 88 88 00 00 ENDCHAR STARTCHAR U+0049 latin capital letter I ENCODING 73 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 20 20 20 20 20 70 00 00 ENDCHAR STARTCHAR U+004a latin capital letter J ENCODING 74 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 38 08 08 08 08 88 70 00 00 ENDCHAR STARTCHAR U+004b latin capital letter K ENCODING 75 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 90 A0 C0 A0 90 88 00 00 ENDCHAR STARTCHAR U+004c latin capital letter L ENCODING 76 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 80 80 80 80 F8 00 00 ENDCHAR STARTCHAR U+004d latin capital letter M ENCODING 77 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 D8 A8 A8 88 88 88 00 00 ENDCHAR STARTCHAR U+004e latin capital letter N ENCODING 78 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 C8 C8 A8 98 98 88 00 00 ENDCHAR STARTCHAR U+004f latin capital letter O ENCODING 79 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+0050 latin capital letter P ENCODING 80 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F0 88 88 F0 80 80 80 00 00 ENDCHAR STARTCHAR U+0051 latin capital letter Q ENCODING 81 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 88 88 A8 70 18 00 ENDCHAR STARTCHAR U+0052 latin capital letter R ENCODING 82 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F0 88 88 F0 A0 90 88 00 00 ENDCHAR STARTCHAR U+0053 latin capital letter S ENCODING 83 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 70 08 88 70 00 00 ENDCHAR STARTCHAR U+0054 latin capital letter T ENCODING 84 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 20 20 20 20 20 20 00 00 ENDCHAR STARTCHAR U+0055 latin capital letter U ENCODING 85 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+0056 latin capital letter V ENCODING 86 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 50 50 20 20 00 00 ENDCHAR STARTCHAR U+0057 latin capital letter W ENCODING 87 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 A8 A8 D8 88 00 00 ENDCHAR STARTCHAR U+0058 latin capital letter X ENCODING 88 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 50 20 50 88 88 00 00 ENDCHAR STARTCHAR U+0059 latin capital letter Y ENCODING 89 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 88 88 88 70 20 20 20 00 00 ENDCHAR STARTCHAR U+005a latin capital letter Z ENCODING 90 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 08 10 20 40 80 F8 00 00 ENDCHAR STARTCHAR U+005b left square bracket ENCODING 91 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 70 40 40 40 40 40 40 40 70 00 ENDCHAR STARTCHAR U+005c backslash ENCODING 92 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 80 40 40 20 20 10 10 08 08 00 ENDCHAR STARTCHAR U+005d right square bracket ENCODING 93 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 70 10 10 10 10 10 10 10 70 00 ENDCHAR STARTCHAR U+005e circumflex ENCODING 94 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 50 88 00 00 00 00 00 00 ENDCHAR STARTCHAR U+005f underscore ENCODING 95 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 00 F8 00 ENDCHAR STARTCHAR U+0060 grave accent ENCODING 96 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 60 20 10 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0061 latin small letter a ENCODING 97 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+0062 latin small letter b ENCODING 98 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 B0 C8 88 C8 B0 00 00 ENDCHAR STARTCHAR U+0063 latin small letter c ENCODING 99 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 88 80 88 70 00 00 ENDCHAR STARTCHAR U+0064 latin small letter d ENCODING 100 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 08 08 68 98 88 98 68 00 00 ENDCHAR STARTCHAR U+0065 latin small letter e ENCODING 101 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 88 F8 80 78 00 00 ENDCHAR STARTCHAR U+0066 latin small letter f ENCODING 102 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 30 48 40 F0 40 40 40 00 00 ENDCHAR STARTCHAR U+0067 latin small letter g ENCODING 103 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 68 98 88 98 68 08 70 ENDCHAR STARTCHAR U+0068 latin small letter h ENCODING 104 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 B0 C8 88 88 88 00 00 ENDCHAR STARTCHAR U+0069 latin small letter i ENCODING 105 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 00 60 20 20 20 20 00 00 ENDCHAR STARTCHAR U+006a latin small letter j ENCODING 106 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 10 00 30 10 10 10 10 90 60 ENDCHAR STARTCHAR U+006b latin small letter k ENCODING 107 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 80 80 90 A0 E0 90 88 00 00 ENDCHAR STARTCHAR U+006c latin small letter l ENCODING 108 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 40 40 40 40 40 40 30 00 00 ENDCHAR STARTCHAR U+006d latin small letter m ENCODING 109 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 D0 A8 A8 A8 88 00 00 ENDCHAR STARTCHAR U+006e latin small letter n ENCODING 110 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 B0 C8 88 88 88 00 00 ENDCHAR STARTCHAR U+006f latin small letter o ENCODING 111 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+0070 latin small letter p ENCODING 112 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 B0 C8 88 C8 B0 80 80 ENDCHAR STARTCHAR U+0071 latin small letter q ENCODING 113 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 68 98 88 98 68 08 08 ENDCHAR STARTCHAR U+0072 latin small letter r ENCODING 114 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 B0 C8 80 80 80 00 00 ENDCHAR STARTCHAR U+0073 latin small letter s ENCODING 115 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 78 80 70 08 F0 00 00 ENDCHAR STARTCHAR U+0074 latin small letter t ENCODING 116 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 40 40 F0 40 40 48 30 00 00 ENDCHAR STARTCHAR U+0075 latin small letter u ENCODING 117 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+0076 latin small letter v ENCODING 118 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 88 50 50 20 00 00 ENDCHAR STARTCHAR U+0077 latin small letter w ENCODING 119 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 A8 A8 A8 50 00 00 ENDCHAR STARTCHAR U+0078 latin small letter x ENCODING 120 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 50 20 50 88 00 00 ENDCHAR STARTCHAR U+0079 latin small letter y ENCODING 121 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 88 88 88 98 68 08 70 ENDCHAR STARTCHAR U+007a latin small letter z ENCODING 122 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 F8 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+007b left curly brace ENCODING 123 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 18 20 20 20 C0 20 20 20 18 00 ENDCHAR STARTCHAR U+007c vertical bar ENCODING 124 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 20 20 20 20 20 20 20 20 20 00 ENDCHAR STARTCHAR U+007d right curly brace ENCODING 125 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 C0 20 20 20 18 20 20 20 C0 00 ENDCHAR STARTCHAR U+007e tilde ENCODING 126 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 48 A8 90 00 00 00 00 00 00 ENDCHAR STARTCHAR char127 ENCODING 127 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 78 78 78 78 78 00 00 00 ENDCHAR STARTCHAR char128 ENCODING 128 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 1C 1C 1C ENDCHAR STARTCHAR char129 ENCODING 129 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 00 00 00 00 1C 1C 1C ENDCHAR STARTCHAR char130 ENCODING 130 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 00 00 00 00 1C 1C 1C ENDCHAR STARTCHAR char131 ENCODING 131 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 00 00 00 00 1C 1C 1C ENDCHAR STARTCHAR char132 ENCODING 132 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 E0 E0 E0 E0 1C 1C 1C ENDCHAR STARTCHAR char133 ENCODING 133 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 E0 E0 E0 E0 1C 1C 1C ENDCHAR STARTCHAR char134 ENCODING 134 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C E0 E0 E0 E0 1C 1C 1C ENDCHAR STARTCHAR char135 ENCODING 135 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC E0 E0 E0 E0 1C 1C 1C ENDCHAR STARTCHAR char136 ENCODING 136 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 1C 1C 1C 1C 1C 1C 1C ENDCHAR STARTCHAR char137 ENCODING 137 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 1C 1C 1C 1C 1C 1C 1C ENDCHAR STARTCHAR char138 ENCODING 138 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C ENDCHAR STARTCHAR char139 ENCODING 139 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 1C 1C 1C 1C 1C 1C 1C ENDCHAR STARTCHAR char140 ENCODING 140 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 FC FC FC FC 1C 1C 1C ENDCHAR STARTCHAR char141 ENCODING 141 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 FC FC FC FC 1C 1C 1C ENDCHAR STARTCHAR char142 ENCODING 142 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C FC FC FC FC 1C 1C 1C ENDCHAR STARTCHAR char143 ENCODING 143 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC FC FC FC FC 1C 1C 1C ENDCHAR STARTCHAR char144 ENCODING 144 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 FC FC FC ENDCHAR STARTCHAR char145 ENCODING 145 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 00 00 00 00 FC FC FC ENDCHAR STARTCHAR char146 ENCODING 146 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 00 00 00 00 FC FC FC ENDCHAR STARTCHAR char147 ENCODING 147 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 00 00 00 00 FC FC FC ENDCHAR STARTCHAR char148 ENCODING 148 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 E0 E0 E0 E0 FC FC FC ENDCHAR STARTCHAR char149 ENCODING 149 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 E0 E0 E0 E0 FC FC FC ENDCHAR STARTCHAR char150 ENCODING 150 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C E0 E0 E0 E0 FC FC FC ENDCHAR STARTCHAR char151 ENCODING 151 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC E0 E0 E0 E0 FC FC FC ENDCHAR STARTCHAR char152 ENCODING 152 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 1C 1C 1C 1C FC FC FC ENDCHAR STARTCHAR char153 ENCODING 153 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 1C 1C 1C 1C FC FC FC ENDCHAR STARTCHAR char154 ENCODING 154 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C 1C 1C 1C 1C FC FC FC ENDCHAR STARTCHAR char155 ENCODING 155 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC 1C 1C 1C 1C FC FC FC ENDCHAR STARTCHAR char156 ENCODING 156 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 FC FC FC FC FC FC FC ENDCHAR STARTCHAR char157 ENCODING 157 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP E0 E0 E0 E0 FC FC FC FC FC FC FC ENDCHAR STARTCHAR char158 ENCODING 158 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 1C 1C 1C 1C FC FC FC FC FC FC FC ENDCHAR STARTCHAR char159 ENCODING 159 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC FC FC FC FC FC FC FC FC FC FC ENDCHAR STARTCHAR U+00a0 seperated gfx mask ENCODING 160 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP FC 24 24 24 FC 24 24 24 FC 24 24 ENDCHAR STARTCHAR U+0104 latin captial letter A with ogonek ENCODING 161 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 88 F8 88 88 88 10 0C ENDCHAR STARTCHAR U+02d8 breve ENCODING 162 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 88 70 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0141 latin capital letter L with stroke ENCODING 163 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 40 50 60 C0 40 40 7C 00 00 ENDCHAR STARTCHAR U+00a4 currency sign ENCODING 164 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 88 70 88 88 70 88 00 00 ENDCHAR STARTCHAR U+013d latin capital letter L with caron ENCODING 165 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 90 60 00 80 80 80 80 80 F8 00 00 ENDCHAR STARTCHAR U+015a latin capital letter S with acute ENCODING 166 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 70 88 60 10 88 70 00 00 ENDCHAR STARTCHAR U+00a7 section sign ENCODING 167 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 38 40 30 48 48 30 08 70 00 00 ENDCHAR STARTCHAR U+00a8 diaresis ENCODING 168 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0160 latin capital letter S with caron ENCODING 169 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 30 00 70 88 60 10 88 70 00 00 ENDCHAR STARTCHAR U+015e latin capital letter S with cedilla ENCODING 170 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 70 08 88 70 10 60 ENDCHAR STARTCHAR U+0164 latin capital letter T with caron ENCODING 171 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 30 00 F8 20 20 20 20 20 00 00 ENDCHAR STARTCHAR U+0179 latin capital letter Z with acute ENCODING 172 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 F8 08 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+00ad soft hyphen ENCODING 173 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 70 00 00 00 00 00 ENDCHAR STARTCHAR U+017d latin capital letter Z with caron ENCODING 174 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 30 00 F8 08 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+017b latin capital letter Z with dot above ENCODING 175 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 20 20 00 F8 08 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+00b0 degree sign ENCODING 176 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 48 30 00 00 00 00 00 00 ENDCHAR STARTCHAR U+0105 latin small letter a with ogonek ENCODING 177 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 08 78 88 78 10 0C ENDCHAR STARTCHAR U+02db ogonek ENCODING 178 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 00 00 00 10 20 18 ENDCHAR STARTCHAR U+0142 latin small letter l with stroke ENCODING 179 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 40 50 60 C0 40 40 30 00 00 ENDCHAR STARTCHAR U+00b4 acute accent ENCODING 180 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+013e latin small letter l with caron ENCODING 181 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 90 60 00 40 40 40 40 40 30 00 00 ENDCHAR STARTCHAR U+015b latin small letter s with acute ENCODING 182 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 78 80 70 08 F0 00 00 ENDCHAR STARTCHAR U+02c7 caron ENCODING 183 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 30 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+00b8 cedilla ENCODING 184 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 0C 18 30 60 FC 18 30 60 C0 00 00 ENDCHAR STARTCHAR U+0161 latin small letter s with caron ENCODING 185 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 30 00 78 80 70 08 F0 00 00 ENDCHAR STARTCHAR U+015f latin small letter s with cedilla ENCODING 186 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 78 80 70 08 F0 10 60 ENDCHAR STARTCHAR U+0165 latin small letter t with caron ENCODING 187 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 90 60 00 40 F0 40 40 48 30 00 00 ENDCHAR STARTCHAR U+017a latin small letter z with acute ENCODING 188 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 F8 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+02dd double acute accent ENCODING 189 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 90 00 00 00 00 00 00 00 00 ENDCHAR STARTCHAR U+017e latin small letter z with caron ENCODING 190 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 30 00 F8 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+017c latin small letter z with dot above ENCODING 191 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 20 20 00 F8 10 20 40 F8 00 00 ENDCHAR STARTCHAR U+0154 latin capital letter R with acute ENCODING 192 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 F0 88 88 F0 90 88 00 00 ENDCHAR STARTCHAR U+00c1 latin capital letter A with acute ENCODING 193 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+00c2 latin capital letter A with circumflex ENCODING 194 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 48 00 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+0102 latin capital letter A with breve ENCODING 195 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 88 70 00 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+00c4 latin capital letter A with diaresis ENCODING 196 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 50 50 00 70 88 88 F8 88 88 00 00 ENDCHAR STARTCHAR U+0139 latin capital letter L with acute ENCODING 197 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 60 80 00 80 80 80 80 80 F8 00 00 ENDCHAR STARTCHAR U+0106 latin capital letter C with acute ENCODING 198 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 70 88 80 80 88 70 00 00 ENDCHAR STARTCHAR U+00c7 latin capital letter C with cedilla ENCODING 199 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 88 80 80 80 88 70 10 60 ENDCHAR STARTCHAR U+010c latin capital letter C with caron ENCODING 200 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 30 00 70 88 80 80 88 70 00 00 ENDCHAR STARTCHAR U+00c9 latin capital letter E with acute ENCODING 201 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 F8 80 F0 80 80 F8 00 00 ENDCHAR STARTCHAR U+0118 latin capital letter E with ogonek ENCODING 202 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 80 80 F0 80 80 F8 20 18 ENDCHAR STARTCHAR U+00cb latin capital letter E with diaresis ENCODING 203 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 50 50 00 F8 80 F0 80 80 F8 00 00 ENDCHAR STARTCHAR U+011a latin capital letter E with caron ENCODING 204 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 30 00 F8 80 F0 80 80 F8 00 00 ENDCHAR STARTCHAR U+00cd latin capital letter I with acute ENCODING 205 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 70 20 20 20 20 70 00 00 ENDCHAR STARTCHAR U+00ce latin capital letter I with circumflex ENCODING 206 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 48 00 70 20 20 20 20 70 00 00 ENDCHAR STARTCHAR U+010e latin capital letter D with caron ENCODING 207 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 30 00 E0 90 88 88 90 E0 00 00 ENDCHAR STARTCHAR U+0110 latin capital letter D with stroke ENCODING 208 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 70 48 44 E4 44 48 70 00 00 ENDCHAR STARTCHAR U+0143 latin capital letter N with acute ENCODING 209 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 88 C8 A8 98 88 88 00 00 ENDCHAR STARTCHAR U+0147 latin capital letter N with caron ENCODING 210 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 30 00 88 C8 A8 98 88 88 00 00 ENDCHAR STARTCHAR U+00d3 latin capital letter O with acute ENCODING 211 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 70 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00d4 latin capital letter O with circumflex ENCODING 212 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 48 00 70 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+0150 latin capital letter O with double acute ENCODING 213 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 90 00 70 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00d6 latin capital letter O with diaresis ENCODING 214 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 50 50 00 70 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00d7 multiplication sign ENCODING 215 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 00 48 30 30 48 00 00 ENDCHAR STARTCHAR U+0158 latin capital letter R with caron ENCODING 216 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 30 00 F0 88 88 F0 90 88 00 00 ENDCHAR STARTCHAR U+016e latin capital letter U with ring above ENCODING 217 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 20 50 20 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00da latin capital letter U with acute ENCODING 218 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+0170 latin capital letter U with double acute ENCODING 219 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 48 90 00 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00dc latin capital letter U with diaresis ENCODING 220 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 50 50 00 88 88 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00dd latin capital letter Y with acute ENCODING 221 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 88 88 70 20 20 20 00 00 ENDCHAR STARTCHAR U+0162 latin capital letter T with cedilla ENCODING 222 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 F8 20 20 20 20 20 20 10 60 ENDCHAR STARTCHAR U+00df latin small letter sharp s ENCODING 223 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 60 90 A0 90 88 88 B0 80 00 ENDCHAR STARTCHAR U+0155 latin small letter r with acute ENCODING 224 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 B0 C8 80 80 80 00 00 ENDCHAR STARTCHAR U+00e1 latin small letter a with acute ENCODING 225 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+00e2 latin small letter a with circumflex ENCODING 226 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+0103 latin small letter a with breve ENCODING 227 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 88 70 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+00e4 latin small letter a with diaresis ENCODING 228 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 70 08 78 88 78 00 00 ENDCHAR STARTCHAR U+013a latin small letter l with acute ENCODING 229 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 30 40 00 40 40 40 40 40 30 00 00 ENDCHAR STARTCHAR U+0107 latin small letter c with acute ENCODING 230 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 70 88 80 88 70 00 00 ENDCHAR STARTCHAR U+00e7 latin small letter c with cedilla ENCODING 231 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 88 80 88 70 10 60 ENDCHAR STARTCHAR U+010d latin small letter c with caron ENCODING 232 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 30 00 70 88 80 88 70 00 00 ENDCHAR STARTCHAR U+00e9 latin small letter e with acute ENCODING 233 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 70 88 F8 80 78 00 00 ENDCHAR STARTCHAR U+0119 latin small letter e with ogonek ENCODING 234 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 00 00 70 88 F8 80 78 20 18 ENDCHAR STARTCHAR U+00eb latin small letter e with diaresis ENCODING 235 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 70 88 F8 80 78 00 00 ENDCHAR STARTCHAR U+011b latin small letter e with caron ENCODING 236 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 30 00 70 88 F8 80 78 00 00 ENDCHAR STARTCHAR U+00ed latin small letter i with acute ENCODING 237 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 60 20 20 20 20 00 00 ENDCHAR STARTCHAR U+00ee latin small letter i with circumflex ENCODING 238 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 00 60 20 20 20 20 00 00 ENDCHAR STARTCHAR U+010f latin small letter d with caron ENCODING 239 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 90 60 08 08 68 98 88 98 68 00 00 ENDCHAR STARTCHAR U+0111 latin small letter d with stroke ENCODING 240 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 1C 08 68 98 88 98 68 00 00 ENDCHAR STARTCHAR U+0144 latin small letter n with acute ENCODING 241 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 B0 C8 88 88 88 00 00 ENDCHAR STARTCHAR U+0148 latin small letter n with caron ENCODING 242 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 30 00 B0 C8 88 88 88 00 00 ENDCHAR STARTCHAR U+00f3 latin small letter o with acute ENCODING 243 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00f4 latin small letter o with circumflex ENCODING 244 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 48 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+0151 latin small letter o with double acute ENCODING 245 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 90 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00f6 latin small letter o with diaresis ENCODING 246 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 70 88 88 88 70 00 00 ENDCHAR STARTCHAR U+00f7 division sign ENCODING 247 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 20 20 00 F8 00 20 20 00 00 ENDCHAR STARTCHAR U+0159 latin small letter r with caron ENCODING 248 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 30 00 B0 C8 80 80 80 00 00 ENDCHAR STARTCHAR U+016f latin small letter u with ring above ENCODING 249 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 20 50 20 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+00fa latin small letter u with acute ENCODING 250 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+0171 latin small letter u with double acute ENCODING 251 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 48 90 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+00fc latin small letter u with diaresis ENCODING 252 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 50 50 00 88 88 88 98 68 00 00 ENDCHAR STARTCHAR U+00fd latin small letter y with acute ENCODING 253 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 30 40 00 88 88 88 98 68 08 70 ENDCHAR STARTCHAR U+0163 latin small letter t with cedilla ENCODING 254 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 00 40 40 F0 40 40 48 30 10 60 ENDCHAR STARTCHAR U+02d9 dot above ENCODING 255 SWIDTH 5760 0 DWIDTH 6 0 BBX 6 11 0 -2 BITMAP 00 20 20 00 00 00 00 00 00 00 00 ENDCHAR ENDFONT alevt-1.6.2/os.h100660 0 0 247 7106056505 11471 0ustar rootroot#ifndef OS_H #define OS_H #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBsd__) \ || defined(__bsdi__) #define BSD #endif #endif /* OS_H */ alevt-1.6.2/search.c100660 0 0 3730 10724717303 12350 0ustar rootroot#include // for freebsd #include #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; } alevt-1.6.2/search.h100660 0 0 527 6634774735 12337 0ustar rootroot#ifndef SEARCH_H #define SEARCH_H #include 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 alevt-1.6.2/ui.c100660 0 0 41054 10724667634 11554 0ustar rootroot#include #include #include #include #include #include #include #include "vt.h" #include "misc.h" #include "xio.h" #include "vbi.h" #include "fdset.h" #include "edit.h" #include "edline.h" #include "search.h" #include "export.h" #include "ui.h" int enab_editor = 0; static char save_format[EDLEN] = "ascii"; // just to remember prev format // forward references 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) { //printf("query %03x/%04x\n",pgno,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; //xio_clear_win(w->xw); } 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; } } //TODO: implement old behaviour (just inc/dec pgno/subno) 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->edline) return; 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->statusline[0] = 3; w->status = 6; // 2 seconds. 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); xio_bell(w->xw); } 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) { w->edline = 0; put_menu_line(w); 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) { w->edline = 0; 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); } static void start_save1(struct vtwin *w, u8 *format) { char *name; w->edline = 0; if (format && *format) { strcpy(save_format, format); // remember for next time if (w->export = export_open(format)) { if (name = export_mkname(w->export, "ttext-%p.%e", w->vtp, 0)) { w->edline = edline_new(w->xw, "Name:\2", name, start_save2, w); free(name); return; } free(name); export_close(w->export); w->export = 0; } err(w, export_errstr()); } 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->edline = 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->edline) edline_abort(w->edline); 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) // || i == 9) 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 (enab_editor) edwin_new(xw->xio, w->vbi, w->pgno, w->subno); else err(w, "Unused key."); break; case 'b': bell = !bell; msg(w, "Error bell %sabled.", bell ? "en" : "dis"); 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 '/': if (w->edline) { err(w, "internal: w->edline != 0"); break;} w->searchdir = 1; w->edline = edline_new(xw, "/", "", start_search, w); break; case '?': if (w->edline) { err(w, "internal: w->edline != 0"); break;} w->searchdir = -1; w->edline = edline_new(xw, "?", "", start_search, w); break; case 's': if (w->edline) { err(w, "internal: w->edline != 0"); break;} w->edline = edline_new(xw, "Format:\2", save_format, start_save1, w); break; case 'n': next_search(w, 0); break; case 'N': next_search(w, 1); break; case 'f': case 'F': vbi_pll_reset(w->vbi, w->vbi->pll_adj + (ev->i1 == 'f' ? 1 : -1)); if (w->vbi->pll_fixed) msg(w, "Finetune fixed at %d.", w->vbi->pll_adj); else msg(w, "Finetune auto adjusting."); 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; //printf("%d %02x %.40s\n",hdr_mag,flags,p); 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; } } } alevt-1.6.2/ui.h100660 0 0 1356 6777224715 11524 0ustar rootroot#ifndef UI_H #define UI_H #include "vt.h" #include "xio.h" #include "vbi.h" #include "edline.h" #include "search.h" extern int enab_editor; #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 edline *edline; 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 alevt-1.6.2/vbi.c100660 0 0 34072 10724724750 11712 0ustar rootroot#include #include #include #include #include #include #include "os.h" #include "vt.h" #include "misc.h" #include "vbi.h" #include "fdset.h" #include "hamm.h" #include "lang.h" #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 /***** bttv api *****/ #define BASE_VIDIOCPRIVATE 192 #define BTTV_VBISIZE _IOR('v' , BASE_VIDIOCPRIVATE+8, int) /***** v4l2 vbi-api *****/ #define V4L2_PIX_FMT_GREY 0x59455247 #define V4L2_BUF_TYPE_VBI_CAPTURE 0x00000004 #define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format) struct v4l2_vbi_format { u32 sampling_rate; /* in 1 Hz */ u32 offset; /* sampling starts # samples after rising hs */ u32 samples_per_line; u32 sample_format; /* V4L2_VBI_SF_* */ s32 start[2]; u32 count[2]; u32 flags; /* V4L2_VBI_* */ u32 reserved2; /* must be zero */ }; struct v4l2_format { u32 type; /* V4L2_BUF_TYPE_* */ union { void *alignment_dummy; struct v4l2_vbi_format vbi; /* VBI data */ u8 raw_data[200]; /* user-defined */ } fmt; }; /***** end of api definitions *****/ 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); } } } // fine tune pll // this routines tries to adjust the sampling point of the decoder. // it collects parity and hamming errors and moves the sampling point // a 10th of a bitlength left or right. #define PLL_SAMPLES 4 // number of err vals to collect #define PLL_ERROR 4 // if this err val is crossed, readjust //#define PLL_ADJUST 4 // max/min adjust (10th of bitlength) static void pll_add(struct vbi *vbi, int n, int err) { if (vbi->pll_fixed) return; if (err > PLL_ERROR*2/3) // limit burst errors err = PLL_ERROR*2/3; vbi->pll_err += err; vbi->pll_cnt += n; if (vbi->pll_cnt < PLL_SAMPLES) return; if (vbi->pll_err > PLL_ERROR) { if (vbi->pll_err > vbi->pll_lerr) vbi->pll_dir = -vbi->pll_dir; vbi->pll_lerr = vbi->pll_err; vbi->pll_adj += vbi->pll_dir; if (vbi->pll_adj < -PLL_ADJUST || vbi->pll_adj > PLL_ADJUST) { vbi->pll_adj = 0; vbi->pll_dir = -1; vbi->pll_lerr = 0; } if (debug) printf("pll_adj = %2d\n", vbi->pll_adj); } vbi->pll_cnt = 0; vbi->pll_err = 0; } void vbi_pll_reset(struct vbi *vbi, int fine_tune) { vbi->pll_fixed = fine_tune >= -PLL_ADJUST && fine_tune <= PLL_ADJUST; vbi->pll_err = 0; vbi->pll_lerr = 0; vbi->pll_cnt = 0; vbi->pll_dir = -1; vbi->pll_adj = 0; if (vbi->pll_fixed) vbi->pll_adj = fine_tune; if (debug) if (vbi->pll_fixed) printf("pll_reset (fixed@%d)\n", vbi->pll_adj); else printf("pll_reset (auto)\n"); } // 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 ? 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; //printf("enhance on %x/%x\n", cvtp->pgno, cvtp->subno); add_enhance(rvtp->enh, d, t); return 0; } case 27: { // FLOF data (FastText) 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: // unused at the moment... //vbi_send(vbi, EV_XPACKET, mag8, pkt, err, p); return 0; } return 0; } // process one raw vbi line static int vbi_line(struct vbi *vbi, u8 *p) { u8 data[43], min, max; int dt[256], hi[6], lo[6]; int i, n, sync, thr; int bpb = vbi->bpb; /* remove DC. edge-detector */ for (i = vbi->soc; i < vbi->eoc; ++i) dt[i] = p[i+bpb/FAC] - p[i]; // amplifies the edges best. /* set barrier */ for (i = vbi->eoc; i < vbi->eoc+16; i += 2) dt[i] = 100, dt[i+1] = -100; /* find 6 rising and falling edges */ for (i = vbi->soc, n = 0; n < 6; ++n) { while (dt[i] < 32) i++; hi[n] = i; while (dt[i] > -32) i++; lo[n] = i; } if (i >= vbi->eoc) return -1; // not enough periods found i = hi[5] - hi[1]; // length of 4 periods (8 bits) if (i < vbi->bp8bl || i > vbi->bp8bh) return -1; // bad frequency /* AGC and sync-reference */ min = 255, max = 0, sync = 0; for (i = hi[4]; i < hi[5]; ++i) if (p[i] > max) max = p[i], sync = i; for (i = lo[4]; i < lo[5]; ++i) if (p[i] < min) min = p[i]; thr = (min + max) / 2; p += sync; /* search start-byte 11100100 */ for (i = 4*bpb + vbi->pll_adj*bpb/10; i < 16*bpb; i += bpb) if (p[i/FAC] > thr && p[(i+bpb)/FAC] > thr) // two ones is enough... { /* got it... */ memset(data, 0, sizeof(data)); for (n = 0; n < 43*8; ++n, i += bpb) if (p[i/FAC] > thr) data[n/8] |= 1 << (n%8); if (data[0] != 0x27) // really 11100100? (rev order!) return -1; if (i = vt_line(vbi, data+1)) if (i < 0) pll_add(vbi, 2, -i); else pll_add(vbi, 1, i); return 0; } return -1; } // called when new vbi data is waiting static void vbi_handler(struct vbi *vbi, int fd) { int n, i; u32 seq; n = read(vbi->fd, rawbuf, vbi->bufsize); if (dl_empty(vbi->clients)) return; if (n != vbi->bufsize) return; seq = *(u32 *)&rawbuf[n - 4]; if (vbi->seq+1 != seq) { out_of_sync(vbi); if (seq < 3 && vbi->seq >= 3) vbi_reset(vbi); } vbi->seq = seq; if (seq > 1) // the first may contain data from prev channel for (i = 0; i+vbi->bpl <= n; i += vbi->bpl) vbi_line(vbi, rawbuf + i); } 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; } static int set_decode_parms(struct vbi *vbi, struct v4l2_vbi_format *p) { double fs; // sampling rate double bpb; // bytes per bit int soc, eoc; // start/end of clock run-in int bpl; // bytes per line if (p->sample_format != V4L2_PIX_FMT_GREY) { error("v4l2: unsupported vbi data format 0x%08lx", p->sample_format); return -1; } // some constants from the standard: // horizontal frequency fh = 15625Hz // teletext bitrate ft = 444*fh = 6937500Hz // teletext identification sequence 10101010 10101010 11100100 // 13th bit of seq rel to falling hsync 12us -1us +0.4us // I search for the clock run-in (10101010 10101010) from 12us-1us-12.5/ft // (earliest first bit) to 12us+0.4us+3.5/ft (latest last bit) // earlist first bit tf = 12us-1us-12.5/ft = 9.2us // latest last bit tl = 12us+0.4us+3.5/ft = 12.9us // total number of used bits n = (2+1+2+40)*8 = 360 bpl = p->samples_per_line; fs = p->sampling_rate; bpb = fs/6937500.0; soc = (int)(9.2e-6*fs) - (int)p->offset; eoc = (int)(12.9e-6*fs) - (int)p->offset; if (soc < 0) soc = 0; if (eoc > bpl - (int)(43*8*bpb)) eoc = bpl - (int)(43*8*bpb); if (eoc - soc < (int)(16*bpb)) { // line too short or offset too large or wrong sample_rate error("v4l2: broken vbi format specification"); return -1; } if (eoc > 240) { // the vbi_line routine can hold max 240 values in its work buffer error("v4l2: unable to handle these sampling parameters"); return -1; } vbi->bpb = bpb * FAC + 0.5; vbi->soc = soc; vbi->eoc = eoc; vbi->bp8bl = 0.97 * 8*bpb; // -3% tolerance vbi->bp8bh = 1.03 * 8*bpb; // +3% tolerance vbi->bpl = bpl; vbi->bufsize = bpl * (p->count[0] + p->count[1]); return 0; } static int setup_dev(struct vbi *vbi) { struct v4l2_format v4l2_format[1]; struct v4l2_vbi_format *vbifmt = &v4l2_format->fmt.vbi; v4l2_format->type = V4L2_BUF_TYPE_VBI_CAPTURE; if (ioctl(vbi->fd, VIDIOC_G_FMT, v4l2_format) == -1 || v4l2_format->type != V4L2_BUF_TYPE_VBI_CAPTURE) { // not a v4l2 device. assume bttv and create a standard fmt-struct. int size; vbifmt->sample_format = V4L2_PIX_FMT_GREY; vbifmt->sampling_rate = 35468950; vbifmt->samples_per_line = 2048; vbifmt->offset = 244; if ((size = ioctl(vbi->fd, BTTV_VBISIZE, 0)) == -1) { // BSD or older bttv driver. vbifmt->count[0] = 16; vbifmt->count[1] = 16; } else if (size % 2048) { error("broken bttv driver (bad buffer size)"); return -1; } else { size /= 2048; vbifmt->count[0] = size/2; vbifmt->count[1] = size - size/2; } } if (set_decode_parms(vbi, vbifmt) == -1) return -1; if (vbi->bpl < 1 || vbi->bufsize < vbi->bpl || vbi->bufsize % vbi->bpl != 0) { error("strange size of vbi buffer (%d/%d)", vbi->bufsize, vbi->bpl); return -1; } // grow buffer if necessary if (rawbuf_size < vbi->bufsize) { if (rawbuf) free(rawbuf); if (not(rawbuf = malloc(rawbuf_size = vbi->bufsize))) out_of_mem(rawbuf_size); // old buffer already freed. abort. } return 0; } struct vbi * vbi_open(char *vbi_name, struct cache *ca, int fine_tune, int big_buf) { static int inited = 0; struct vbi *vbi; if (not inited) lang_init(); inited = 1; if (not(vbi = malloc(sizeof(*vbi)))) { error("out of memory"); goto fail1; } if ((vbi->fd = open(vbi_name, O_RDONLY)) == -1) { ioerror(vbi_name); goto fail2; } if (big_buf != -1) error("-oldbttv/-newbttv is obsolete. option ignored."); if (setup_dev(vbi) == -1) goto fail3; vbi->cache = ca; dl_init(vbi->clients); vbi->seq = 0; out_of_sync(vbi); vbi->ppage = vbi->rpage; vbi_pll_reset(vbi, fine_tune); 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); close(vbi->fd); 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) { // EV_PAGE will come later... 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); } alevt-1.6.2/vbi.h100660 0 0 2616 7162453755 11664 0ustar rootroot#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]; // raw buffer management int bufsize; // nr of bytes sent by this device int bpl; // bytes per line u32 seq; // page assembly struct raw_page rpage[8]; // one for each magazin struct raw_page *ppage; // points to page of previous pkt0 // phase correction int pll_fixed; // 0 = auto, 1..2*PLL_ADJUST+1 = fixed int pll_adj; int pll_dir; int pll_cnt; int pll_err, pll_lerr; // v4l2 decoder data int bpb; // bytes per bit * 2^16 int bp8bl, bp8bh; // bytes per 8-bit low/high int soc, eoc; // start/end of clock run-in }; 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, int fine_tune, int big_buf); 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); void vbi_pll_reset(struct vbi *vbi, int fine_tune); #endif alevt-1.6.2/vt.h100660 0 0 3646 6733751357 11543 0ustar rootroot#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 extern int debug; 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 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_UPDATE 0x02 // C8 row 1-28 has modified (editors flag) #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. // my flags #define PG_ACTIVE 0x100 // currently fetching this page #define ANY_SUB 0x3f7f // universal subpage number #endif alevt-1.6.2/vt900.out100660 0 0 2472 7530334656 12343 0ustar rootroot#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.4.6 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \5\30Visit http://goron.de/~froese ", "\6\15Contents: ", "\6\15Contents: ", "\24 #################################### ", " ", " \3\177\6Starting AleVT . . . . . . 901\13 ", " ", " \3\177\6Using AleVT . . . . . . . 910 ", " ", //" \3\177\6Warning . . . . . . . . . 902\10« ", //" ", " \3\177\6Copying/Warranty . . . . . 903 ", " ", " \3\177\6QuickClick Page . . . . . 999 ", " ", " ", " ", "\24 pppppppppppppppppppppppppppppppppppp ", " (Click to select a page) ", " ", "\4\35\7© 2002 E. Toernig froese@gmx.de \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt901-01.out100660 0 0 2336 10724703555 12576 0ustar rootroot#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.5.1 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \0031/2 ", "\6\15Starting AleVT: ", "\6\15Starting AleVT: ", "\24 #################################### ", "\6 $\7alevt\6[options] ", "\6 Default: ", " -vbi\6 \2/dev/vbi0 ", " -display\6 \2$DISPLAY ", " -geometry\6 \00241x25 ", " -finetune\6<-4..4 | auto> \2auto ", " -child\6 ", " [-parent]\6 \002900 ", " -charset\6 \2latin-1 ", " -[no]erc \2enabled ", " -[no]bell \2enabled ", "\24 pppppppppppppppppppppppppppppppppppp ", " (Click on\0031/2\7for next page) ", " ", "\4\35\7Back 900 Index 900 Next 903\13 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt901-02.out100660 0 0 2317 7530334033 12546 0ustar rootroot#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.2.3 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \0032/2 ", "\6\15Starting AleVT: ", "\6\15Starting AleVT: ", "\24 #################################### ", "\6 Order is important! Each page number ", "\6 opens a window with the previously ", "\6 given geometry, device and display. ", " ", " ppp[.ss]\6stand for a page number and ", "\6 an optional subpage number. If the ", "\6 subpage number is omitted the first ", "\6 transmitted subpage is shown. ", " ", "\6 The\7-child\6option requires a parent ", "\6 window. So it must be preceeded by ", "\6 a parent or another child window. ", "\24 pppppppppppppppppppppppppppppppppppp ", " ", "\4\35\7Back 900 Index 900 Next 903\13 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt902.out100660 0 0 2311 7530334713 12327 0ustar rootroot#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.4.6 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " ", "\6\15Warning: ", "\6\15Warning: ", "\24 #################################### ", "\6 The bttv-driver (v0.5.22) is buggy. ", "\6 Don't try to run AleVT together with ", "\6 anything that grabs video data from ", "\6 /dev/video. The grabber will stop ", "\6 running and some time later the ", "\6 kernel will crash due to an out of ", "\6 memory condition. ", "\6 ", "\6 It seems to work with programs that ", "\6 just use video overlay. Xawtv in ", "\6 overlay mode works just fine. ", "\24 pppppppppppppppppppppppppppppppppppp ", " ", " ", "\4\35\7Back 901 Index 900 Next 903 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt903.out100660 0 0 2313 7530334455 12335 0ustar rootroot#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.3.2 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " ", "\6\15Copying/Warranty: ", "\6\15Copying/Warranty: ", "\24 #################################### ", "\6 © 2002 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 901 Index 900 Next 910 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt910.out100660 0 0 2352 7530334731 12333 0ustar rootroot#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.3.2 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " ", "\6\15Using AleVT: ", "\6\15Using AleVT: ", "\24 #################################### ", " ", "\6 \3\177\6The Status Line . . . . . 911\13 ", "\6 ", "\6 \3\177\6Selecting Pages . . . . . 912\13 ", "\6 ", "\6 \3\177\6FastText Menu . . . . . . 913 ", "\6 ", "\6 \3\177\6Keyboard Commands . . . . 914\13 ", "\6 ", "\6 \3\177\6Cut & Paste . . . . . . . 915 ", " ", "\24 pppppppppppppppppppppppppppppppppppp ", " ", " ", "\4\35\7Back 903\13 Index 900 Next 911\13 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt911-01.out100660 0 0 2324 7530334757 12561 0ustar rootroot#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.2.1 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \0031/2 ", "\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 ", " (Click on\0031/2\7for next page) ", " ", "\4\35\7Back 910\13 Index 900 Next 912\13 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt911-02.out100660 0 0 2342 7530334765 12561 0ustar rootroot#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.2.5 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \0032/2 ", "\6\15Status Line: \14\5\30Test ", "\6\15Status Line: \14\5\30Test ", "\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 con- ", "\6 tains 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 910\13 Index 900 Next 912\13 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt911-03.out100660 0 0 2325 7530334774 12563 0ustar rootroot#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.1.2 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \0033/3 ", "\6\15Status Line: ", "\6\15Status Line: ", "\24 #################################### ", "\6 An\7H\6behind the CPN indicates that ", "\6 the page is on hold. This inhibits ", "\6 subpage cycling and page updates. ", "\6 ", "\6 A\5*\6indicates that the page con- ", "\6 tains concealed text. ", "\6 ", "\6 A CPN in the form\2Sxx\6is shown if ", "\6 a specific subpage is selected. ", " ", "\6 ", "\24 pppppppppppppppppppppppppppppppppppp ", " ", " ", "\4\35\7Back 910\13 Index 900 Next 912\13 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt912-01.out100660 0 0 2325 6632307733 12557 0ustar rootroot#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.1.2 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \0031/2 ", "\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 some- ", "\6 where 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 ", " (Click on\0031/2\7for next page) ", " ", "\4\35\7Back 911\13 Index 900 Next 913 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt912-02.out100660 0 0 2325 6632307742 12560 0ustar rootroot#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.1.2 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \0032/2 ", "\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 recent- ", "\6 ly visited pages is kept. Pressing ", "\6 the\7right\6mouse button will take you ", "\6 back to the previous page. ", "\6 ", "\24 pppppppppppppppppppppppppppppppppppp ", " ", " ", "\4\35\7Back 911\13 Index 900 Next 913 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt913.out100660 0 0 2315 6632310064 12330 0ustar rootroot#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.1.2 \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 912\13 Index 900 Next 914\13 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt914-01.out100660 0 0 2326 6634576260 12567 0ustar rootroot#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.2.5 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \0031/2 ", "\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 ", " (Click on\0031/2\7for next page) ", " ", "\4\35\7Back 913 Index 900 Next 915 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt914-02.out100660 0 0 2357 6777231715 12575 0ustar rootroot#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 \0071.5.0-pre4 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " \0032/2 ", "\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 \1\177\2\177\3\177\6\177\7\177 ", " /\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 selec- ", "\6 ting the 'hex' pages (ie 1f1). ", "\24 pppppppppppppppppppppppppppppppppppp ", " ", "\4\35\7Back 913 Index 900 Next 915 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt915.out100660 0 0 2315 7530335454 12342 0ustar rootroot#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.1.2 \34", " \22# #\42!\42# \42 \42! ", #else HELP_HEADER #endif " ", "\6\15Cut & Paste: ", "\6\15Cut & Paste: ", "\24 #################################### ", "\6 AleVT supports the X11 selection ", "\6 protocol for text and graphics. ", "\6 ", "\6 You may mark a rectangular area of ", "\6 a window with the\7left\6mouse button ", "\6 and paste that area into another ", "\6 application like xterm, xpaint, or ", "\6 xmag. Unfortunately, gimp doesn't ", "\6 support pasting from external appli- ", "\6 cations. ", "\6 ", "\24 pppppppppppppppppppppppppppppppppppp ", " ", " ", "\4\35\7Back 914\13 Index 900 Next 999 \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vt999.out100660 0 0 2331 7530334274 12353 0ustar rootroot#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.1.2 \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 \13 ", "\6 130 230 330 430 530 630 730 830 ", "\6 140\006240 340 440 540 640 740 840 \13 ", "\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\7Back 915 Index 900 Next --- \34", "\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", alevt-1.6.2/vtxt-latin-1.bdf100660 0 0 122446 6677535570 13732 0ustar rootrootSTARTFONT 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 alevt-1.6.2/vtxt-latin-2.bdf100660 0 0 122427 6777220302 13713 0ustar rootrootSTARTFONT 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 alevt-1.6.2/xio.c100660 0 0 63677 10724717634 11751 0ustar rootroot#include #include #include #include #include #include #include #include #include #define XK_MISCELLANY #define XK_LATIN1 #include #include #include "vt.h" #include "misc.h" #include "dllist.h" #include "xio.h" #include "fdset.h" #include "lang.h" #include "icon.xbm" #include "font.h" int bell = -1; #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); // some 'shells' (KDE) set this to SIG_IGN :( 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; xio->font[0] = XCreateBitmapFromData(xio->dpy, xio->root, latin1 ? font1_bits : font2_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 /* XStoreName(xio->dpy, xw->win, "AleVT " VERSION); XSetIconName(xio->dpy, xw->win, "AleVT"); */ 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<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->fg == xw->bg) // XSetForeground(xio->dpy, xw->gc, xio->color[xw->fg ^= 8]); 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) */ 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; } //////////////////// // selection support //////////////////// 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); //prop = XA_STRING; } 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); //prop = XA_PIXMAP; } 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; // old client 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) { /* if (xw->sel_set_t) XSetSelectionOwner(xw->xio->dpy, XA_PRIMARY, None, xw->sel_set_t); */ 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); } ///////////////// // event handling ///////////////// 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); /* if (fdset_select(fds, 500) == 0) for_all_windows(switch_blink_state, 0); */ } } void xio_bell(struct xio_win *xw) { if (bell) XBell(xw->xio->dpy, 0); } alevt-1.6.2/xio.h100660 0 0 6022 7155744004 11666 0ustar rootroot#ifndef VTXIO_H #define VTXIO_H #include #include "vt.h" #include "dllist.h" typedef u32 lbits; #define ALL_LINES ((1ul << H) - 1) extern int bell; /* 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_bell(struct xio_win *xw); 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