@@ -1,2 +1,2 @@ repo: d9fe7e17226f8e321aa80a015fc8d53f33b265d7 -node: 2d700fe04e4386a32e37f3a1291cacafd375aa60 +node: 7de0663facd92bbb9049aeeda3dcba9601228f30 @@ -35,7 +35,7 @@ libdir ?= $(prefix)/lib sharedir ?= $(prefix)/share ifneq ($(DESTDIR),) -DESTDIR = $(DESTDIR)/ +DESTDIR := $(DESTDIR)/ endif ifeq ($(V),1) diff --git a/README b/README index ad29647..0870a66 100644 --- a/ README+++ b/ README@@ -15,6 +15,8 @@ util/dvbnet - Control digital data network interfaces. util/dvbtraffic - Monitor traffic on a digital device. util/femon - Monitor the tuning on a digital TV device. util/zap - *Just* tunes a digital device - really intended for developers. +util/gotox - Simple Rotor control utility +util/alevt - Teletext capture and display utility Hardware Specific Utilities: util/av7110_loadkeys - Load remote keys into an av7110 based card @@ -36,5 +38,10 @@ For convenience, dvb-apps contains a copy of the DVB API include files as they are contained in the linuxtv-dvb-1.? release and the 2.6.x Linux kernel. +AleVT is not compiled by the main Makefile, because it depends on external +libraries which might not be available in your system (see util/alevt/README for +details). If you have the required libraries, to compile AleVT go to util/alevt/ +and type "make". + Johannes Stezenbach <js@convergence.de> Andrew de Quincey <adq_dvb@lidskialf.net> @@ -1,3 +1,9 @@ +linuxtv-dvb-apps (1.1.1+rev1355-1) unstable; urgency=low + + * New upstream release + + -- Mark Purcell <msp@debian.org> Thu, 25 Feb 2010 21:13:46 +1100 + linuxtv-dvb-apps (1.1.1+rev1273-1) unstable; urgency=low * New upstream release @@ -537,19 +537,12 @@ int dvbsec_diseqc_goto_rotator_bearing(struct dvbfe_handle *fe, } // generate the command - if (integer < -256) { - return -EINVAL; - } else if (integer < 0) { - integer = -integer; - data[3] = 0xf0; - } else if (integer < 256) { - data[3] = 0x00; - } else if (integer < 512) { - integer -= 256; - data[3] = 0x10; - } else { - return -EINVAL; + if (integer < 0.0) { + data[3] = 0xD0; // West is a negative angle value + } else if (integer >= 0.0) { + data[3] = 0xE0; // East is a positive angle value } + integer = abs(integer); data[3] |= ((integer / 16) & 0x0f); integer = integer % 16; data[4] |= ((integer & 0x0f) << 4) | fraction; @@ -3,6 +3,7 @@ .PHONY: all clean install all clean install: + $(MAKE) -C atsc_epg $@ $(MAKE) -C av7110_loadkeys $@ $(MAKE) -C dib3000-watch $@ $(MAKE) -C dst-utils $@ @@ -15,4 +16,5 @@ all clean install: $(MAKE) -C szap $@ $(MAKE) -C ttusb_dec_reset $@ $(MAKE) -C gnutv $@ + $(MAKE) -C gotox $@ $(MAKE) -C zap $@ diff --git a/util/alevt/COPYRIGHT b/util/alevt/COPYRIGHT new file mode 100644 index 0000000..17930ea --- /dev/null +++ b/ util/alevt/COPYRIGHT@@ -0,0 +1,297 @@ +This message applies to all files within the archive: + + Copyright (C) 1998,1999,2000 Edgar Toernig (froese@gmx.de) + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License Version 2 as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + +And here's the GNU GPL V2: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/util/alevt/ChangeLog b/util/alevt/ChangeLog new file mode 100644 index 0000000..896ddc3 --- /dev/null +++ b/ util/alevt/ChangeLog@@ -0,0 +1,535 @@ +Thu Feb 11 22:05:00 MET 2010 (1.7.0) + + - redesigned version: + - outfile, new starting methods, libzvbi implementation + - lots of bug fixes, all patches available in the Internet applied + - extensive code cleanup + +Mon Dec 3 03:11:07 MET 2007 (1.6.2) + + - compilation fixes for newer gcc + - makefile tweaks (man vs share/man, /usr/X11R6 vs /usr, etc) + - default device changed to /dev/vbi0 + - adapt to current v4l2 api + - some minor fixes collected during the past years + + This is a build-time update to conform to newer compilers and + system environments. If you have a running AleVT there's no + reason to update. The only real fix is in the html-exporter + which was producing broken html (missing double-quotes). + +Thu Jan 23 01:53:10 MET 2003 + + - Fixed a bug in contrib/cap-all.c (fdset_init before vbi_open) + - Expaned cap-all.c to show how to save in two formats simultaneously. + +Tue Aug 20 05:22:16 MEST 2002 (1.6.1) + + - Removed the bttv-warning from the help pages ;-) + +Mon Jul 23 18:34:32 MEST 2001 + + - Fixed bug in ui.c - found by <pawel@sakowski.eu.org>. + - When clicking on page numbers accept sub-page numbers too. + +Sat Dec 23 15:12:11 MET 2000 + + - Fixed 'double height last line' bug in export.c reported by + <Matthias.Kleinmann@urz.uni-heidelberg.de> + +Thu Oct 12 02:19:31 MEST 2000 + + - The fix was wrong. Removed it. + +Wed Oct 11 19:41:38 MEST 2000 (1.6.0) + + - Some documentation tweaks. + - Release. Made it 1.6 because of V4l2 API. + +Thu Sep 21 21:07:12 MEST 2000 + + - Removed old bttv-only decoder. Only the v4l2-based stays. + If the device does not support v4l2, default parameters + appropriate for the bttv-driver are taken. + - Subpage cycling (up/down and 2nd wheel) stays in the current + page. + +Sat Sep 16 23:52:12 MEST 2000 + + - Experimental v4l2 interface added. + - Finetune defaults to 1 now. Works best for me. Tell me + if you don't like it. + - Russian patch still not added :-/ + - Fixed the bug in xio.c that Ben Smithurst + <ben@scientia.demon.co.uk> found. + - Added the dual-wheel-mouse patch from Holger Fitzner. + +Tue May 30 03:09:24 MEST 2000 + + - As Matto Fransen <matto@matto.nl> reported: the ; after   + in exp-html is missing. fixed that. + +Tue May 9 20:21:52 MEST 2000 + + - Removed the -oldbttv/-newbttv options. If your driver has + a buffer size different from that in the current bttv you + either have to support the VBISIZE ioctl or change the source. + (Tried to implement an autodetect by non-blocking reads but + that confuses the driver that much that it no longers gives + reasonable data.) + - Added a compression option to the png export filter and + changed the default compression level to the lib's default. + The prev default of 9 was way to slow. + +Wed May 3 19:18:55 MEST 2000 + + - Added a smaller font. Made out of the neep9 font from + the really great jmk-fonts (http://www.pobox.com/~jmknoble). + +Sat Apr 29 02:36:41 MEST 2000 + + - Fixed SEGV in export.c:adjust. + - Fixed a possible buffer overrun in exp-txt.c + +Thu Nov 4 21:18:52 MET 1999 (1.5.1) + + - Added os.h. That way alevt compiles right out of the + box on all BSD systems (I hope *g*). + - Fixed the DST bug in alevt-date. + - Put vtwiz.pl in contrib, a perl/tk/set-tv script to + launch alevt written by Joern Borgert. + +Tue Oct 26 23:55:09 MEST 1999 (1.5.1-pre1) + + - Added timeout option to alevt-cap. + - Use install instead of cp in the Makefile. + - Added -I/usr/local/include and -L/usr/local/lib + in the Makefile. + - Changed #ifdef FREEBSD to #ifdef BSD. + - exchanged contrib/paul-export.patch with + paul.fmt_page.c (a replacement for export.c:fmt_page()) + and paul.fmt_page.patch (the same in form of a + patch file). + - Some doc corrections. + +Thu Oct 14 02:49:48 MEST 1999 + + - Added FREEBSD patches. + +Fri Oct 8 23:36:45 MEST 1999 (1.5.0) + + - Updated the documentation. + + So, what's new since 1.4.9 (nearly 4 months ago)? + Two major things: full latin-2 support and export + filters for alevt-cap and alevt itself. + + For the latin-2 support page enhancement packets + have to be decoded and some latin-1 pages may + benefit from that, too. Note: if you select + latin-2 everything is latin-2, even cut'n paste. + (new cmdline option -charset latin-1|2) + + The export filters allow saving pages in different + formats. At the moment there's ascii (with and with- + out color), html, png, and ppm. The png filter + requires libpng. If you don't have it (or don't want + png support) just remove the WITH_PNG from the + Makefile. To save the currently displayed page just + press 's'. See alevt-cap(1) for the format string. + + Preview: 1.5.1 will have the FreeBSD patches and + any bug fixes. (But not more *g*). + +Fri Oct 8 02:06:35 MEST 1999 (1.5.0-pre4) + + Finally I could get away from my Playstation and + work a little bit on alevt *g* + + - Tried to change alevt-date with freebsd patches from + Thomas Runge <runge@rostock.zgdv.de>. They do not + have the timezone and daylight variables. But I do + not have tm_gmtoff. So it's commented out for the + moment. + - Made font.[ch] so that only one copy of the fonts is + in the executable when including export modules + (exp-gfx.c uses them). Had to tweak the makefile. + - Added 's' for saving pages to files. Prompts for + a format string and a filename and saves the + currently displayed page. + (Formerly, 's' and 'S' were aliases for '/' and '?' + (searching)) + - Found a bug in export.c regarding double height lines. + - Added a patch to the contrib dir to pass the URL you + click on to netscape. + + The documentation updates are still missing. That's + the last thing to do for 1.5.0. But that's so boring... + +Fri Aug 20 21:28:18 MEST 1999 + + Back from holidays and time for alevt... + + - Added html, png, and ppm export modules from Paul. + - Fixed the return status for export_output. + - Tweaked the makefile for libpng support. + - Added the export howto to the contrib dir. + - Added Paul's fmt_page routine to contrib as a patch + to export.c + - Added "-format help" to list all output formats and + its options. + + Still to do: update man page of alevt-cap, add export + to alevt, add erc to alevt-cap. + + Oh, btw, alevt is running on FreeBSD with the bt848 + driver from Roger Hardiman <roger@cs.strath.ac.uk> *g*. + I wonder if it's possible to port his driver to linux. + Maybe it runs better then bttv... (I still get reports + with stuck xawtvs ...) + +Mon Jul 19 01:15:50 MEST 1999 (1.5.0-pre3) + + - Added export modules. It's gotten much to complex. + + A lot of things still to do: add other formats [Paul?], + add documentation, add format-help, add export to alevt, + add erc to alevt-cap, ... + +Mon Jul 12 00:09:03 MEST 1999 + + - Added an incomplete 20x24 font to the contrib dir. + +Tue Jun 29 00:46:03 MEST 1999 (1.5.0-pre2) + + - Added lanugage tables from Radoslaw. + - Added new latin-2 font from Radoslaw. + - Fixed a bug with hold graphics. There's still one bug + on CNN's page 100 (has to do with set-after behaviour of + color select in hold graphics mode). The last line of the + earth should be blue-blue-green not blue-green-green. + AleVT always uses set-at behaviour. Afaik, this combination + (hold + set-after) is the only way to see the difference + between set-at and set-after. Set-after will blow up the + code so I will leave it as it is. + - vbi now collects all pkt26 and enhances the page before + it is passed on. Seem's to work. + +Tue Jun 22 22:13:45 MEST 1999 (1.5.0-pre1) + + - Fixed hamm24. And, it should be fast now *g* + - Moved the language conversion parts to lang.c + - Added additional lang_chars for use with the latin-2 charset. + - Added -charset latin-1/2 option. + - Added pkt x/26 decoding. ... and noticed, that these packets + are sent between line 0 and 1. FUCK. Now I have to save + all x/26 until the page is complete. But not today... :-( + + Things are getting more and more uglier. The right thing + to do would be to make a big font with all possible chars + (including cyrillic, arabic, smoothed graphics, ...). + That would mean to make each char in vtp->data 16 bit. + And then add an attribute word for each char so that the + enhanced attributes work, too. Searching and cut & paste + would be more complicated... but the worst, the pages + will be much bigger (4 times larger). Really bad for + the cache and god knows for what else... + Is it worth all the trouble??? I don't need that! + +Tue Jun 15 01:25:40 MEST 1999 + + - Changed .specs file again. I previously changed alevt.spec + instead of alevt.spec.in :-( + +Mon Jun 14 23:45:48 MEST 1999 (1.4.9) + + - Made a very simple capture program (alevt-cap). Just collects + the given pages and writes them to disk in ASCII. + I will only accept bug reports/fixes, no enhancement requests + at the moment *g* + (I can't believe it; I even wrote a man page...) + - Changed the subpage delimiter on the command line from '/' to '.' + The old one ('/') is still accepted. (Reason: alevt-cap uses + the page number as part of the filename and a / is inconvenient. + And I already wanted to let you enter subpages with the keypad + and the '.' would be a nice key for that.) + - Tweaked the .specs file... (Btw, alevt-date and alevt-cap should + not be installed in the X11 tree.) + +Thu Jun 10 22:13:40 MEST 1999 + + - moved the hamming decoding and associated table to hamm.c + - played with pkt26 to support polish stations. not finished. + +Tue Jun 8 21:00:42 MEST 1999 + + - Added -[no]bell option. And the 'b' key. + - Replaced all xio_bell calls with appropriate status messages. + +Sat Jun 5 00:42:19 MEST 1999 (1.4.8) + + - Shit. Just after the release I found a bug. The header line + isn't updated as it should :-( (Just affects parallel mode + transmission, so no new version, yet.) + - Created mailing list. Either go to http://alevt.listbot.com/ + or write mail to alevt-subscribe@listbot.com. + - Added bttv-patch to the contrib dir for those who don't want + to wait for bttv-0.6.5. + +Fri Jun 4 17:19:41 MEST 1999 (1.4.7) + + - Added autodetection of VBIBUF_SIZE (only with newer bttv, 0.6.5). + - Forgot to close vbi_fd in vbi_close :-/ + - Made ERC on by default. If the page has no errors it + costs nothing and if it has you'll turn it on anyway. + - Changed parameters of EV_HEADER. + - Removed XAWTV_HACKS. + - Updated some docu. + - Modified the contrib samples to reflect previous API changes. + +Fri May 28 20:16:44 MEST 1999 + + - Added status messages. + - Added EV_TIMER event. + - Added channel change detection (only with newer bttv, 0.6.5). + Sends EV_RESET event. The XAWTV_HACKS can be removed *phww*. + Now the cache is automatically cleared if you switch to a + new channel. It even works with a SAT receiver connected to + Video-In. + +Thu May 27 23:54:32 MEST 1999 (1.4.6 unofficial) + + - Cache reset didn't reset npages and hi_subno. + - Added XAWTV_HACKS, that is: alevt scans for a window with + the _XAWTV_STATION property and registers for property changes. + Result: when switching channels in xawtv, the cache is cleared. + (This is just an ugly hack. Xawtv must already be running + when alevt is started. If you quit and restart xawtv, it no + longer works. There's no method to detect if the monitored + xawtv is really the one controlling our /dev/vbi, etc...) + Added on request of Paul Ortyl <ortylp@key.net.pl>. + - Added error reduction circuit. It's part of the cache. + Errors in a new page are replaced by characters/lines from + an already cached (older) page. May be toggled by pressing + 'e' (editor is now on 'E'). It's not enabled by default + because it takes some CPU time. Idea by Paul Ortyl. + - TODO: clean up. document new features. add status messages. + +Sun May 23 19:13:07 MEST 1999 (1.4.5) + + - New spec file from Karsten Hopp <karsten.hopp@delix.de> + - Changed it even further *g* + - Fixed a bug with graphics selection of double height lines. + - Documented the -oldbttv option in the man page. Now it's in + every page. This should finally halve the mails I get. + (For the other halve I have to write alevt-capture *g*) + +Sat May 8 02:41:21 MEST 1999 + + - Ehhh, changed u32 typedef from unsigned long to unsigned int. + Same for s32. The Alpha's longs are 64 bits. + Thanks to Sdruddin Rejeb <rejeb@dpmail.epfl.ch>. + (There's something strange with this in the X libs. They are + sometimes very lazy about ints and longs. Someone with an + Alpha should check the cut & paste, both, text and graphics + selections.) + +Thu Apr 29 22:38:37 MEST 1999 + + - Updated contrib/t1.c + - Added ':' as a subpage delimiter for clicking (2:7 is the same as 2/7) + +Mon Apr 19 19:40:09 MEST 1999 + + - Switched the scrolling direction of the wheel + +Mon Mar 29 01:23:06 MEST 1999 (1.4.4) + + - fixed DST bug in alevt-date + - added crude latin-2 support. 'make FONT=latin-2' should be enough. + (found the stuff on the website http://www.penguin.cz/~marvin/ of + Daniel Smolik <smolikdan@email.cz>. I don't know if he is the one + who made the font). + +Wed Mar 17 20:53:59 MET 1999 + + - added timeout to alevt-date + +Fri Feb 19 18:22:53 MET 1999 (1.4.3> + + - Makefile changes. + +Fri Jan 29 18:01:27 MET 1999 + + - fixed bug in dllist.h. dl_insert_first(h, dl_remove(n)) was only + working due to gcc implementation details. + +Mon Jan 25 18:33:42 MET 1999 (1.4.2) + + - fixed 'clear cache'. no longer removes the help pages. + - made next/prev key/button to skip missing pages. + - added support for wheeled mice. (I heard it's really cool *g*) + - problem with subpages > 0xff fixed. + +Thu Jan 21 17:31:46 MET 1999 (1.4.1) + + - added man pages from Thomas Schoepf <schoepf@usa.net>. + - added rpm-spec file from Mario Mikocevic <mozgy@times.hr>. + (looks a little bit odd, but I don't know very much about rpms) + - minor option fix in alevt-date (people are really using it!?!) + +Tue Jan 5 03:50:08 MET 1999 (1.4.0) + + - should be 1.3.10 but that gives problems with the help pages :-( + - fixed varargs for alpha + - default is now -newbttv (aka -fuckbttv). use -oldbttv for v<0.5.20. + +Sat Jan 2 21:40:54 MET 1999 + + - small patches to alevt-date (-vbi options and tzset fix) + - played with pkt8/30. what a mess. MTV is 25:13 ahead *g* + +Wed Dec 30 19:30:14 MET 1998 (1.3.9) + + - slightly modified the pll (may need further tuning) + +Wed Dec 30 05:27:26 MET 1998 (1.3.8) + + - added pll (-finetune auto). try -debug for status msgs. + +Tue Dec 29 05:15:53 MET 1998 (1.3.7) + + - added finetune option (see README) + - you may now type -newbttv instead of -fuckbttv *g* + +Mon Dec 28 19:36:32 MET 1998 (1.3.6) + + - Makefile: R5 -> R6 :-( + - vbi.c now works without cache.c + - added alevt-date (set system time from teletext) + - bug in option parsing (error reporting) + +Thu Dec 17 19:56:16 MET 1998 (1.3.5) + + - added -L/usr/X11R6/lib in Makefile + - put some blurb (in german) in contrib. + +Thu Dec 17 05:01:34 MET 1998 (1.3.4) + + - added class hints on (invisible) leader window to make docking + in wmaker easier. instant name for leader is "VTLeader" and for + the viewing windows "VTPage" + - made the icon a little bit smaller + +Mon Dec 14 23:05:41 MET 1998 (1.3.3) + + Release 1.3.3 + + - added spanish/portuguese charset decoding + - added similar looking glyphs for czech + - minor changes on the font + - middle click on current page number opens new parent window + - case dependant search if the pattern begins with a '!' + - line editing may be aborted with ^C + +Sun Dec 13 17:55:32 MET 1998 (1.3.2) + + - when there were multiple windows of the same page, cycling through + the subpages changed all windows. fixed. + - hilight the found text (make it the selection). + - slightly modified the hilight colors. + - default window size set to 41x25 (looks better). + - rewrote the editor. + +Sun Dec 13 07:03:10 MET 1998 (1.3.1) + + - fixed one command line option + - corrected bug in searching + +Sat Dec 12 20:27:03 MET 1998 (1.3.0) + + Release 1.3.0 + + - searching is now ready (still need a status line for error msgs). + - set SIGPIPE to SIG_DFL. some shells (KDE) set it to SIG_IGN and then + the timer task won't be killed on exit. + - updated the help pages. + - I'm frustrated! BTTV_VERSION doesn't work on /dev/vbi. So no + autodetection of driver version. Added -fuckbttv option instead. + +Fri Dec 11 19:36:03 MET 1998 (1.2.5) + + - reworked national charset (lang) handling. everthing now done in vbi.c. + the rest just deals with latin-1. + - first version of searching (functional, but dirty. needs more work.) + +Thu Dec 10 20:06:27 MET 1998 (1.2.4) + + - new file edline.c (line editor for the menu line. start for searching...) + - blinking cursor + - added an 48x48 icon from Ulf Rompe + - added pasting into the line editor (insert key). + - release ownership of XA_PRIMARY when deselecting selection. + +Tue Dec 8 21:26:26 MET 1998 (1.2.3) + + - new file ui.c (most user interface stuff from main.c) + - rewrote option parsing + - allow specification of child windows on command line. now + it's possible to regenerate the complete window layout by + the commandline (may be of some use for session management). + - some spelling fixes in the help pages from Mark Bryars + +Mon Dec 7 16:59:28 MET 1998 (1.2.2) + + - reworked hidden handling in xio.c + +Sun Dec 6 19:54:10 MET 1998 (1.2.1) + + - class name changed! from Alevt to AleVT. + - window/icon title shows current page number + - changed the icon to a 64 pixel width one. not nice but ... + - added a small mini icon for the title bar. is there a property I can set? + - pressing on the CPN puts the page on hold + - pressing on the violet * reveals concealed text + - added simple menu if no FastText menu is present + - allow subpages to be specified on the command line (eg 100/4) + +Sat Dec 5 20:59:51 MET 1998 (1.2.0) + + Release 1.2.0 + + - finished the help pages. + - added command line handling + - added user geometry handling in xio.c + +Sat Dec 5 02:28:16 MET 1998 (1.1.2) + + - allow magazin 9 (help system) + - start box char after a pagenumber selects subpage 1 (hack) + - added a crude page editor (just to create the help pages. not for users.) + - started with the online help system (sounds great, hehe) + +Tue Dec 1 20:19:53 MET 1998 (1.1.1) + + - added concept of parent and child windows. now, the middle mouse + button changes the contens of the child window. if there isn't + one, it is created. + - Middle mouse button on x/y (subpage cycling) selects the previous + subpage. (updating the child with subpages is hairy...) + +Sun Nov 29 23:34:18 MET 1998 (1.1.0) + + Release 1.1.0 + + - removed most of the recovery for single bad lines (does too much harm) + - changed handling of parallel mode transmission (untested. unused in .de) + - added selection (text & graphic!). try pasting into xpaint :-) + - added cache-clear function ('c') + - click on x/y selects the next subpage + - some minor tweaks + - added an icon bitmap. + +Wed Nov 24 23:33:34 MET 1998 (1.0.0) + + First Release 1.0.0 diff --git a/util/alevt/EXPORT.HOWTO b/util/alevt/EXPORT.HOWTO new file mode 100644 index 0000000..b9fba67 --- /dev/null +++ b/ util/alevt/EXPORT.HOWTO@@ -0,0 +1,84 @@ +HOW TO IMPLEMENT A NEW EXPORT MODULE: + +As an example look at exp-txt.c (it implements two modules which +are pretty similar). + +You have to create one exported structure (struct export_module). +This structure holds the following data: + +1. The name of the format (example: "ascii"). + +2. The default extension to use for building filenames ("txt"). + +3. A list of module options. It's a 0 terminated array of char +pointers, one for each option (similar to argv of main). +If an option string contains a '=', it is an option that +requires an argument. The part after the '=' is ignored at +the moment. Later, I want to add help messages that show +these options strings and then the part after the '=' becomes +useful. +If you do not have local options, set this field to 0. + +4. The number of bytes for local data in the export structure. +There you may store data collected during option parsing or +for whatever you want. +Don't use global variables for storing this data! With +alevt-cap you may give: + +alevt-cap -format ascii,color 100 -format ascii 100 + +to save the page in two different formats. Using global +vars would inhibit this. The data area in struct export +starts at the 'data' field. You have to cast it to the +appropriate type (see the D macro in exp-txt.c). +If you do not need local data, set this field to 0. + +5. An open function (or call it constructor). It is called +when your module is needed and it is passed a struct export +(the instance). This function may be used to initialize +the local data in the export struct. +If all goes well return 0. Else call export_error (see +below) and return -1. +If you do not need an open function, set this field to 0. + +6. A close function (or call it destructor). It is called +when your module is no longer needed. If you allocated +memory in the open func, this is the place to free it. +If you do not need a close function, set it to 0. + +7. An option function. It is called for each module option +the user has given. It is passed an option number (first +option in the option-array gives 1, ...) and a char pointer +to the argument for that option (0 if the option does not +need an arg). The argument pointer keeps valid until the +close function is called. +If all goes well, return 0. Else call export_error and +return -1. +If you gave an option list at point 3 you have to specify +this function. Else set it to 0. + +8. An output function. It is called to produce the output. +It is given the file name to use and a fmt_page pointer. +The fmt_page contains an interpreted image of the page. +There are no control chars in it. It uses the character +set defined by the two fonts. +These function may be called consecutive for multiple +pages. Don't expect one output for one open/close. +Return codes as above... (0: ok, -1: error). + +The export_error function: If one of your functions wants to +report an error, it has to use the export_error function. +It's a printf like function to set error messages. In alevt-cap +these messages are printed to stderr, in alevt they will be +shown in the status line (so don't make them too long). + +The last step is to add your export_module structure to the +list of modules in export.c (at the top). +Please, make sure that this structure is the only exported +symbol. All other things should be static. + +That's all. A structure describing your module and 4 functions +(open, close, option, output) to implement it. Shouldn't be too +complicated. + +Ciao, ET. diff --git a/util/alevt/Makefile b/util/alevt/Makefile new file mode 100644 index 0000000..2f7c8da --- /dev/null +++ b/ util/alevt/Makefile@@ -0,0 +1,130 @@ +VER=1.7.0 +OPT=-O -g -w +DEFS=-DWITH_PNG +DEFS+=-DUSE_LIBZVBI +FONT=vtxt +MAN_DIR=man +DESTDIR= +PREFIX=/usr +HOSTCC=$(CC) +CFLAGS=$(OPT) -DVERSION=\"$(VER)\" $(DEFS) -I$(USR_X11R6)/include +EXPOBJS=export.o exp-txt.o exp-html.o exp-gfx.o font.o +OBJS=main.o ui.o xio.o fdset.o vbi.o cache.o help.o search.o misc.o hamm.o lang.o $(EXPOBJS) +TOBJS=alevt-date.o vbi.o fdset.o misc.o hamm.o lang.o +COBJS=alevt-cap.o vbi.o fdset.o misc.o hamm.o lang.o $(EXPOBJS) + +ifneq ($(findstring WITH_PNG,$(DEFS)),) +EXPLIBS=-lpng -lz -lm +endif + +ifneq ($(findstring USE_LIBZVBI,$(DEFS)),) +ZVBILIB=-lzvbi -lpthread +EXPLIBS+=$(ZVBILIB) +endif + +all: alevt alevt-date alevt-cap alevt.1 alevt-date.1 alevt-cap.1 + +alevt: $(OBJS) + $(CC) $(OPT) $(OBJS) -o alevt -L$(PREFIX)/lib -L$(PREFIX)/lib64 -lX11 $(EXPLIBS) + +alevt-date: $(TOBJS) + $(CC) $(OPT) $(TOBJS) -o alevt-date $(ZVBILIB) + +alevt-cap: $(COBJS) + $(CC) $(OPT) $(COBJS) -o alevt-cap $(EXPLIBS) + +font.o: font1.xbm font2.xbm font3.xbm font4.xbm +fontsize.h: font1.xbm font2.xbm font3.xbm font4.xbm + fgrep -h "#define" font1.xbm font2.xbm font3.xbm font4.xbm >fontsize.h + +font1.xbm: bdf2xbm $(FONT)-latin-1.bdf + ./bdf2xbm font1 <$(FONT)-latin-1.bdf >font1.xbm + +font2.xbm: bdf2xbm $(FONT)-latin-2.bdf + ./bdf2xbm font2 <$(FONT)-latin-2.bdf >font2.xbm + +font3.xbm: bdf2xbm vtxt-koi8.bdf + ./bdf2xbm font3 <vtxt-koi8.bdf >font3.xbm + +font4.xbm: bdf2xbm vtxt-iso8859-7.bdf + ./bdf2xbm font4 <vtxt-iso8859-7.bdf >font4.xbm + +bdf2xbm: bdf2xbm.c + $(HOSTCC) bdf2xbm.c -o bdf2xbm + +clean: + rm -f *.o page*.txt a.out core bdf2xbm font?.xbm fontsize.h + rm -f alevt alevt-date alevt-cap + +rpm-install: all + install -m 0755 alevt ${RPM_BUILD_ROOT}$(USR_X11R6)/bin + install -m 0755 alevt-date ${RPM_BUILD_ROOT}$(USR_X11R6)/bin + install -m 0755 alevt-cap ${RPM_BUILD_ROOT}$(USR_X11R6)/bin + install -m 0644 alevt.1 ${RPM_BUILD_ROOT}$(USR_X11R6)/$(MAN)/man1 + install -m 0644 alevt-date.1 ${RPM_BUILD_ROOT}$(USR_X11R6)/$(MAN)/man1 + install -m 0644 alevt-cap.1 ${RPM_BUILD_ROOT}$(USR_X11R6)/$(MAN)/man1 + install -d 0755 $(RPM_BUILD_ROOT)$(USR_X11R6)/include/X11/pixmaps + install -m 0644 alevt.png $(RPM_BUILD_ROOT)$(USR_X11R6)/include/X11/pixmaps + +install: all + install -m 0755 alevt $(DESTDIR)$(PREFIX)/bin + install -m 0755 alevt-date $(DESTDIR)$(PREFIX)/bin + install -m 0755 alevt-cap $(DESTDIR)$(PREFIX)/bin + install -m 0644 alevt.1 $(DESTDIR)$(PREFIX)/share/man/man1 + install -m 0644 alevt-date.1 $(DESTDIR)$(PREFIX)/share/man/man1 + install -m 0644 alevt-cap.1 $(DESTDIR)$(PREFIX)/share/man/man1 + install -m 0644 alevt.png $(DESTDIR)$(PREFIX)/share/pixmaps + install -m 0644 alevt.desktop $(DESTDIR)$(PREFIX)/share/applications + +uninstall: clean + rm -f /usr/bin/alevt /usr/bin/alevt-cap /usr/bin/alevt-date \ + /usr/share/pixmaps/alevt.png /usr/share/applications/alevt.desktop \ + /usr/share/man/man1/alevt.1 /usr/share/man/man1/alevt-cap.1 \ + /usr/share/man/man1/alevt-date.1 + +depend: + makedepend -Y -- $(CFLAGS_none) -- *.c 2>/dev/null + +tar-html: alevt.1 alevt-date.1 alevt-cap.1 + for i in alevt.1 alevt-date.1 alevt-cap.1 ; do \ + j=`basename $$i .1` ; \ + j=`basename $$j .1x` ; \ + nroff -man $$i | { \ + echo "<HTML><HEAD><TITLE>AleVT</TITLE></HEAD><BODY>" ; \ + man2html -bare -uelem U -nodepage ; \ + echo "</B0DY></HTML>" ; \ + } | sed -e "s,</B> <B>, ,g" -e "s,</U> <U>, ,g" >~/exit/alevt/$$j.html ;\ + done + +tar: tar-html clean + sed s/VERSION/$(VER)/g <alevt.lsm.in >~/exit/alevt/alevt-$(VER).lsm + sed s/VERSION/$(VER)/g <alevt.spec.in >alevt.spec + cd .. ;\ + ln -s alevt alevt-$(VER) ;\ + tar vcfz ~/exit/alevt/alevt-$(VER).tar.gz alevt-$(VER)/* ;\ + rm alevt-$(VER) + cat <CHANGELOG >~/exit/alevt/changes + +# DO NOT DELETE + +alevt-cap.o: vt.h misc.h fdset.h dllist.h vbi.h cache.h lang.h export.h +alevt-date.o: os.h vt.h misc.h fdset.h dllist.h vbi.h cache.h lang.h +cache.o: misc.h dllist.h cache.h vt.h help.h +exp-gfx.o: lang.h misc.h vt.h export.h font.h fontsize.h +exp-html.o: lang.h misc.h vt.h export.h +exp-txt.o: os.h export.h vt.h misc.h +export.o: vt.h misc.h export.h +fdset.o: dllist.h misc.h fdset.h +font.o: font1.xbm font2.xbm font3.xbm font4.xbm +hamm.o: vt.h misc.h hamm.h +help.o: vt.h misc.h vt900.out vt901.out vt902.out vt903.out vt904.out vt905.out +help.o: vt906.out vt907.out vt908.out vt909.out vt910.out vt911.out vt912.out +lang.o: misc.h vt.h lang.h +main.o: vt.h misc.h fdset.h dllist.h xio.h vbi.h cache.h lang.h ui.h +main.o: search.h +misc.o: misc.h +search.o: vt.h misc.h cache.h dllist.h search.h +ui.o: vt.h misc.h xio.h dllist.h vbi.h cache.h lang.h fdset.h +ui.o: search.h export.h ui.h +vbi.o: os.h vt.h misc.h vbi.h dllist.h cache.h lang.h fdset.h hamm.h +xio.o: vt.h misc.h dllist.h xio.h fdset.h lang.h icon.xbm font.h fontsize.h diff --git a/util/alevt/README b/util/alevt/README new file mode 100644 index 0000000..83985f0 --- /dev/null +++ b/ util/alevt/README@@ -0,0 +1,72 @@ +Hi, + +this software is not just a program, it's moreover a legend. +It is THE protagonist of all videotext applications under Linux. + +During the past 10 years the video standards, the APIs, the kernel +have seen lots of changes. +But unfortunately this program has NOT seen much maintenance. +The results of that misfit appearance are: + +1. lots of forks flying around in the Internet +2. lots of patches flying around, some good, some disgusting, some out of time +3. lots of cruft which is completely outdated or obsolete for other reasons + +To handle all that in one big effort I decided to redesign the program +completely, enlarging its capabilities for DVB-S at the same time. + +So here are the changes: + +1. Erasure of old help pages and rename / reorganize / update the rest +-> redesign of the online help system / implying alevt-date and alevt-cap + +2. Erasure of old outdated integers, functions, parameters: + +- bell, big_buf, debug, display, editor, erc, fine_tune, newbttv, +- oldbttv + +3. Coding style cleanups (no superfluous comments, not more than + 80 characters per column, no uncommented code. + +4. No strange characters in the outfile, latin alphabet in purity instead. + +5. Alevt can be started in 4 modes now if you are running it in DVB mode: + +- by service id (sid) +- by teletext pid (ttpid) +- by channel name +- without parameter + +6. Starting it in DVB mode on the command line it presents you +a table with human readable values such as sid, teletext pid, +PMT (Program Map Table), provider name, service name, language, service type. +This makes it easier for you to start multiple teletext windows +in multiple console sessions manually. + +If working with a script and the option -o (outfile) you can +also start multiple teletext windows of all channels in a transponder. +I develop a GUI using TCL / TK 8.5 and Iwidgets 4.01 to do that and other +tasks graphically (i. e. by mouse click). + +7. If you install the program on the command line by typing "make & + make install" there is an uninstaller now to revert the installation: + "make uninstall". + +ENJOY IT! + +Uwe Bugla, February 11th, 2010. + +External dependencies + +AleVT needs some system libraries to be installed in your system. +They are zlib, libX11, libpng and libzvbi. + +Credits go to: +- Andreas Rottmann from debian.org for compiler fixes and + other kinds of investigation. +- Francesco Lavra for supplying a kernel patch to avoid kernel demux + incompatibilities with kernels >= 2.6.32 +- Andy Walls for helpful investigation in kernelspace +- Edgar Toernig for providing the source version 1.6.2 and doing all the + development for the basic versions +- Tom Zoerner for the implementation of libzvbi diff --git a/util/alevt/README.OLD b/util/alevt/README.OLD new file mode 100644 index 0000000..4fb0e41 --- /dev/null +++ b/ util/alevt/README.OLD@@ -0,0 +1,78 @@ +Hi, Menden, 21 Sep 2000 + + This program decodes and displays Videotext/Teletext from a + /dev/vbi device. + + +COMPILE & INSTALL: + + There's nothing to configure. A simple 'make' is all. + If you do not want png support remove the WITH_PNG in + the Makefile. Additionally, if you want a smaller font + uncomment the "FONT=neep9" line. + + It gives you 'alevt', 'alevt-date', and 'alevt-cap' and + their man pages 'alevt.1x', 'alevt-date.1', and 'alevt-cap.1'. + + You can install them where ever you want (i.e. /usr/local/bin). + The programs are self-contained and require no other files. + + NOTE: Be careful with 'make install'. It's just for me :-) + + +PROBLEMS: + + If you have a lot of decoding errors (lot of these lightning symbols) + you may try pressing the 'f' and 'F' key. This allows fine tuning of + the decoder circuit. There's also a -finetune command line option. + This should only be necessary on really bad signals. + + Maybe, I add autotuning later... + + UPDATE: added autotuning. It's the default. If you add -debug the + the actions of the pll are printed to stdout. + + To get the old (pre finetune) behaviour start it with -finetune 0. + + UPDATE: disabled autotuning *g* sometimes it's too jumpy... + + +ALEVT-DATE: + I added a little tool to set the system time from the videotext + time. The date is not interpreted (not even transmitted on some + channels). So it allows only adjustment of +/-12 hours. + The default allowed adjustment is limited to +/-2 hours (use + -delta to change). Without the -set option it just display + the date in the format of the date command. Look at strftime(3) + for possible control sequences you may use in the -format option. + + +HACKING: + + If you want to play with the font size, you may resize it with + xv (xv font1.xbm). Just make sure, that its width is a multiple of + 32 and its height a multiple of 8. A simple make will create + a version of AleTV with the new font. Warning: a make clean + will erase font1.xbm. The next make will recreate font.xbm from + vtxt.bdf. + + AleVT has a built in page editor. If you start it with -editor + you may press 'E' to invoke it. For the usage you have to consult + the sources. (It's very crude!) + + +TODO: (no specific order) + + - Error correction in alevt-cap + - Better language support. Internal 16-bit charset. + - Separated graphics. + - Rewrite the whole stuff. A networked teletext daemon and clients + that connect to it for display, capture, cgi, ... + + +NEWER VERSIONS: + + The primary site of AleVT is http://goron.de/~froese + +Have fun, +Edgar Toernig (froese@gmx.de) diff --git a/util/alevt/ReadmeGR b/util/alevt/ReadmeGR new file mode 100644 index 0000000..68d32c2 --- /dev/null +++ b/ util/alevt/ReadmeGR@@ -0,0 +1,28 @@ +29-9-2003 + +ÅëëçíéêÜ ãéá ôï ALEVT +Ç ðñïóèÞêç Åëëçíéêþí Ýãéíå ôñïðïðïéþíôáò ôï patch alevt-1.6.3.rus.diff ðïõ âñßóêåôå óôï öÜêåëï +contrib óôá sources ôïõ alevt-1.6.3 + +ÎåêéíÞóôå ôï ðñüãñáììá ìå ôçí ðáñÜìåôñï + +alevt -charset iso8859-7 + +ç + +alevt -charset el + +ÄïõëåéÝò ðïõ Ý÷ïõí íá ãßíïõí: +Êáëýôåñïò ó÷åäéáóìüò ôïõ font file vtxt-iso8859-7.bdf +ïé Áããëéêïß ÷áñáêôÞñåò ìïéÜæïõí óáí bold óå ó÷Ýóç ìå ôïõò Åëëçíéêïýò êáé õðÜñ÷ïõí +êÜðïéá ìéêñÜ ðñïâëçìáôÜêéá ìå ôïõò graphics (0x01 -0x1f) + +¸ëåã÷ïò ãéá ôï áí áðåéêïíßæïíôáé óùóôÜ üëïé ïé ÷áñáêôÞñåò + +¼ðïéïò èÝëåé íá âïçèÞóåé ðáñáêáëþ íá ìïõ óôåßëåé ôçò áëëáãÝò ôïõ óôï sl45sms@yahoo.gr +Áí êÜðïéïò êÜíåé åêôåôáìÝíåò áëëáãÝò ðïõ äåí áöïñïýí ôá ÅëëçíéêÜ èá ðñÝðåé íá ôéò óôåßëåé êáé +óôïí óõããñáöÝá ôïõ ðñïãñÜììáôïò + +ÍåüôåñÜ áñ÷åßá ôïõ ðáñüíôïò èá ìðïñåßôå íá âñßóêåôå óôï http://go.to/sl45sms/alevt/index.html + +ÓêáñâÝëçò Ðáíáãéþôçò diff --git a/util/alevt/TODO b/util/alevt/TODO new file mode 100644 index 0000000..4b56676 --- /dev/null +++ b/ util/alevt/TODO@@ -0,0 +1,12 @@ +Hi, these are issues that I unfortunately cannot resolve myself: + +1. graphical menu written in GKT2, to be used in general connection with + the outfile (-o) option. + +2. for usage without script and outfile option: + DVB monitoring demon helping the program to rewrite the PAT when the + external player software has chosen a channel which is part of a + new transponder. + At the moment alevt hangs when the transponder is changed. + +Uwe Bugla, February 11th, 2010. diff --git a/util/alevt/alevt-cap.1 b/util/alevt/alevt-cap.1 new file mode 100644 index 0000000..2af1879 --- /dev/null +++ b/ util/alevt/alevt-cap.1@@ -0,0 +1,53 @@ +.TH alevt-cap 1 "February 07, 2010" +.SH NAME +alevt-cap \- capture teletext windows. +.SH SYNOPSIS +.B alevt-cap +.RI [ options ] +.br +.SH DESCRIPTION +This manual page documents briefly the +.B alevt-cap +commands. +.PP +\fBalevt-cap\fP is a program to capture teletext pages. +.SH OPTIONS +.TP +.B \-cs -charset <latin-1/2/koi8-r/iso-8859-7> +character set +.TP +.B \-f -format <fmt[,options]> +format to save +.TP +.B \-f help -format help +lists available storage formats +.TP +.B \-h -help +print this page +.TP +.B \-n -name <filename> +page name to save +.B \-t -timeout <secs> +timeout +.TP +.B \-s -sid <sid> +service pid +.TP +.B \-t -ttpid <ttpid> +teletext pid +.TP +.B \-v -vbi <vbidev> +vbi device +.TP +Sequence: /dev/vbi; /dev/vbi0; /dev/video0; /dev/dvb/adapter0/demux0 +.TP +ppp.ss stands for a page number and an optional +subpage number (example: 123.4). +.TP +.SH SEE ALSO +.BR alevt-date (1) , alevt (1). +.br +.SH AUTHOR +alevt-cap was written by Edgar Toernig <froese@gmx.de>. +.PP +This manual page was written by Uwe Bugla <uwe.bugla@gmx.de>. diff --git a/util/alevt/alevt-cap.c b/util/alevt/alevt-cap.c new file mode 100644 index 0000000..9e0c3bd --- /dev/null +++ b/ util/alevt/alevt-cap.c@@ -0,0 +1,280 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <locale.h> +#include <signal.h> +#include <unistd.h> +#include "vt.h" +#include "misc.h" +#include "fdset.h" +#include "vbi.h" +#include "lang.h" +#include "dllist.h" +#include "export.h" + +static volatile int timed_out = 0; +static char *channel; +char *outfile = ""; +u_int16_t sid; + + +struct req +{ + struct dl_node node[1]; + char *name; // file name + char *pgno_str; // the pgno as given on the cmdline + int pgno, subno; // decoded pgno + struct export *export; // export data + struct vt_page vtp[1]; // the capture page data +}; + + +static void usage(FILE *fp, int exitval) +{ + fprintf(fp, "\nUsage: %s [options] ppp.ss...\n", prgname); + fprintf(fp, + "\n" + " Valid options:\t\tDefault:\n" + " -cs -charset\t\tlatin-1\n" + " <latin-1/2/koi8-r/iso8859-7>\n" + " -f -format <fmt,options>\tascii\n" + " -f help -format help\n" + " -h -help\n" + " -n -name <filename>\t\tttext-%%s.%%e\n" + " -s -sid <sid>\t\t(none;dvb only)\n" + " -to -timeout <secs>\t\t(none)\n" + " -t -ttpid <ttpid>\t\t(none;dvb only)\n" + " -v -vbi <vbidev>\t\t/dev/vbi\n" + " \t\t/dev/vbi0\n" + " \t\t/dev/video0\n" + " \t\t/dev/dvb/adapter0/demux0\n" + "\n" + " ppp.ss stands for a page number and an\n" + " optional subpage number (ie 123.4).\n" + ); + exit(exitval); +} + + +static void exp_help(FILE *fp) +{ + struct export_module **ep; + char **cp, c; + + fprintf(fp, + "\nSyntax: -format Name[,Options]\n" + "\n" + " Name\tExt.\tOptions\n" + " --------------------------------\n" + ); + for (ep = modules; *ep; ep++) + { + fprintf(fp, " %-7s\t.%-4s", (*ep)->fmt_name, (*ep)->extension); + for (c = '\t', cp = (*ep)->options; cp && *cp; cp++, c = ',') + fprintf(fp, "%c%s", c, *cp); + fprintf(fp, "\n"); + } + fprintf(fp, + "\n" + "Common options: reveal,hide\n" + "Example: -format ansi,reveal,bg=none\n" + "\n" + ); + exit(0); +} + + +static int arg_pgno(char *p, int *subno) +{ + char *end; + int pgno; + + *subno = ANY_SUB; + if (*p) + { + pgno = strtol(p, &end, 16); + if ((*end == ':' || *end == '/' || *end == '.') && end[1]) + *subno = strtol(end + 1, &end, 16); + if (*end == 0) + if (pgno >= 0x100 && pgno <= 0x899) + if (*subno == ANY_SUB || (*subno >= 0x00 && *subno <= 0x3f7f)) + return pgno; + } + fatal("%s: invalid page number", p); +} + + +static int option(int argc, char **argv, int *ind, char **arg) +{ + static struct { char *nam, *altnam; int arg; } opts[] = { + { "-charset", "-cs", 1 }, + { "-format", "-f", 1 }, + { "-help", "-h", 0 }, + { "-name", "-n", 1 }, + { "-sid", "-s", 1 }, + { "-timeout", "-to", 1 }, + { "-ttpid", "-t", 1 }, + { "-vbi", "-v", 1 }, + }; + int i; + + if (*ind >= argc) + return 0; + + *arg = argv[(*ind)++]; + for (i = 0; i < NELEM(opts); ++i) + if (streq(*arg, opts[i].nam) || streq(*arg, opts[i].altnam)) + { + if (opts[i].arg) + if (*ind < argc) + *arg = argv[(*ind)++]; + else + fatal("option %s requires an argument", *arg); + return i+1; + } + + if (**arg == '-') + { + fatal("%s: invalid option", *arg); + usage(stderr, 2); + } + + return -1; +} + + +static void event(struct dl_head *reqs, struct vt_event *ev) +{ + struct req *req, *nxt; + + switch (ev->type) + { + case EV_PAGE: // new page + { + struct vt_page *vtp = ev->p1; + + for (req = PTR reqs->first; nxt = PTR req->node->next; req = nxt) + if (req->pgno == vtp->pgno) + if (req->subno == ANY_SUB || req->subno == vtp->subno) + { + *req->vtp = *vtp; + dl_insert_last(reqs + 1, dl_remove(req->node)); + } + } + } +} + + +int main(int argc, char **argv) +{ + char *vbi_name = NULL; + int timeout = 0; + char *fname = "ttext-%s.%e"; + char *out_fmt = "ascii"; + struct export *fmt = 0; + int opt, ind; + char *arg; + struct vbi *vbi; + struct req *req; + struct dl_head reqs[2]; // simple linear lists of requests & captures + int ttpid = -1; + + setlocale (LC_CTYPE, ""); + setprgname(argv[0]); + + fdset_init(fds); + dl_init(reqs); // the requests + dl_init(reqs+1); // the captured pages + + ind = 1; + while (opt = option(argc, argv, &ind, &arg)) + switch (opt) + { + case 1: // charset + if (streq(arg, "latin-1") || streq(arg, "1")) + latin1 = 1; + else if (streq(arg, "latin-2") || streq(arg, "2")) + latin1 = 0; + else if (streq(arg, "koi8-r") || streq(arg, "koi")) + latin1 = KOI8; + else if (streq(arg, "iso8859-7") || streq(arg, "el")) + latin1 = GREEK; + else + fatal("bad charset (not latin-1/2/koi8-r/iso8859-7)"); + break; + case 2: // format + if (streq(arg, "help") || streq(arg, "?") || streq(arg, "list")) + exp_help(stdout); + out_fmt = arg; + fmt = 0; + break; + case 3: // help + usage(stdout, 0); + break; + case 4: // name + fname = arg; + break; + case 5: // timeout + timeout = strtol(arg, 0, 10); + if (timeout < 1 || timeout > 999999) + fatal("bad timeout value", timeout); + break; + case 6: // service id + sid = strtoul(arg, NULL, 0); + break; + case 7: // teletext pid + ttpid = strtoul(arg, NULL, 0); + break; + case 8: // vbi + vbi_name = arg; + break; + case -1: // non-option arg + if (not fmt) + fmt = export_open(out_fmt); + if (not fmt) + fatal("%s", export_errstr()); + if (not(req = malloc(sizeof(*req)))) + out_of_mem(sizeof(*req)); + req->name = fname; + req->pgno_str = arg; + req->pgno = arg_pgno(arg, &req->subno); + req->export = fmt; + dl_insert_last(reqs, req->node); + break; + } + + if (dl_empty(reqs)) + fatal("no pages requested"); + + // setup device + if (not(vbi = vbi_open(vbi_name, 0, channel, outfile, sid, ttpid))) + fatal("cannot open %s", vbi_name); + vbi_add_handler(vbi, event, reqs); // register event handler + + if (timeout) + alarm(timeout); + + // capture pages (moves requests from reqs[0] to reqs[1]) + while (not dl_empty(reqs) && not timed_out) + if (fdset_select(fds, 30000) == 0) // 30sec select time out + { + error("no signal."); + break; + } + + alarm(0); + vbi_del_handler(vbi, event, reqs); + vbi_close(vbi); + if (not dl_empty(reqs)) + error("capture aborted. Some pages are missing."); + + for (req = PTR reqs[1].first; req->node->next; req = PTR req->node->next) + { + fname = export_mkname(req->export, req->name, req->vtp, req->pgno_str); + if (not fname || export(req->export, req->vtp, fname)) + error("error saving page %s: %s", req->pgno_str, export_errstr()); + if (fname) + free(fname); + } + exit(dl_empty(reqs) ? 0 : 1); +} diff --git a/util/alevt/alevt-date.1 b/util/alevt/alevt-date.1 new file mode 100644 index 0000000..69d2f6f --- /dev/null +++ b/ util/alevt/alevt-date.1@@ -0,0 +1,41 @@ +.TH alevt-date 1 "February 07, 2010" +.SH NAME +alevt-date \- print out UTC date. +.SH SYNOPSIS +.B alevt-date +.RI [ options ] +.br +.SH DESCRIPTION +This manual page documents briefly the +.B alevt-date +commands. +.PP +\fBalevt-date\fP is a program to print the UTC date. +.SH OPTIONS +.TP +.B \-d -delta <max_secs> +maximum delta +.TP +.B \-f -format <fmtstr> +time format +.TP +.B \-h -help +print this page +.TP +.B \-s -set +set the system clock +.TP +.B \-t -timeout <seconds> +timeout +.TP +.B \-v -vbi <vbidev> +vbi device /dev/vbi; /dev/vbi0; /dev/video0; /dev/dvb/adapter0/demux0 +.TP +.br +.SH SEE ALSO +.BR alevt-cap (1) , alevt (1). +.br +.SH AUTHOR +alevt-date was written by Edgar Toernig <froese@gmx.de>. +.PP +This manual page was written by Uwe Bugla <uwe.bugla@gmx.de>. diff --git a/util/alevt/alevt-date.c b/util/alevt/alevt-date.c new file mode 100644 index 0000000..5496937 --- /dev/null +++ b/ util/alevt/alevt-date.c@@ -0,0 +1,225 @@ +#include <stdio.h> +#include <string.h> +#include <sys/time.h> +#include <time.h> +#include <stdlib.h> +#include <unistd.h> +#include <signal.h> +#include "os.h" +#include "vt.h" +#include "fdset.h" +#include "vbi.h" +#include "lang.h" +#include "misc.h" + +char *fmt = "%a %b %d %H:%M:%S %Z %Y"; +int max_diff = 2*60*60; // default: 2 hours +int set_time = 0; +char *outfile = ""; +static char *channel; +u_int16_t sid; + + +static void chk_time(int t) +{ + struct tm *tm; + time_t sys_t; + int dt; + char buf[256]; + + if (t < 0 || t > 235959 || t%100 > 59 || t/100%100 > 59) + return; + + sys_t = time(0); + tm = localtime(&sys_t); + + // Now convert to UTC seconds + t = t/100/100 * 60*60 + t/100%100 * 60 + t%100; +#ifdef BSD + t -= tm->tm_gmtoff; // dst already included... +#else + t += timezone; + if (tm->tm_isdst) + t -= 60*60; +#endif + + dt = t - sys_t % (24*60*60); + if (dt <= -12*60*60) + dt += 24*60*60; + + if (dt <= -max_diff || dt >= max_diff) + fatal("time diff too big (%2d:%02d:%02d)", dt/60/60, abs(dt)/60%60, abs(dt)%60); + + sys_t += dt; + + if (set_time) + { + struct timeval tv[1]; + + tv->tv_sec = sys_t; + tv->tv_usec = 500000; + if (settimeofday(tv, 0) == -1) + ioerror("settimeofday"); + } + if (*fmt) + { + tm = localtime(&sys_t); + if (strftime(buf, sizeof(buf), fmt, tm)) + puts(buf); + } + exit(0); +} + + +static void event(void *_, struct vt_event *ev) +{ + switch (ev->type) + { + /* vbi may generate EV_PAGE, EV_HEADER, EV_XPACKET */ + /* for event arguments see vt.h */ + + case EV_HEADER: // a new title line (for running headers) + { + static int last_t = -1; + u8 *s = ev->p1; + int i, t = 1; + + if (ev->i2 & PG_OUTOFSEQ) + break; + + for (i = 32; i < 40; ++i) + if (s[i] >= '0' && s[i] <= '9') + t = t * 10+ s[i] - '0'; + if (t >= 1000000 && t <= 1235959) + if (t == last_t || t - last_t == 1) + chk_time(t - 1000000); + last_t = t; + break; + } + } +} + + +static void usage(FILE *fp, int exit_val) +{ + fprintf(fp, "usage: %s [options]\n", prgname); + fprintf(fp, + "\n" + " Valid options:\t\tDefault:\n" + " -d -delta <max_secs>\t7200 (2 hours)\n" + " -f -format <fmtstr>\t\t%%c\n" + " -h -help\n" + " -s -set\t\t\toff\n" + " -to -timeout <seconds>\t(none)\n" + " -v -vbi <vbidev>\t\t/dev/vbi\n" + " \t\t/dev/vbi0\n" + " \t\t/dev/video0\n" + " \t\t/dev/dvb/adapter0/demux0\n" + ); + exit(exit_val); +} + + +static int option(int argc, char **argv, int *ind, char **arg) +{ + static struct { char *nam, *altnam; int arg; } opts[] = { + { "-delta", "-d", 1 }, + { "-format", "-f", 1 }, + { "-help", "-h", 0 }, + { "-set", "-s", 0 }, + { "-timeout", "-to", 1 }, + { "-vbi", "-v", 1 }, + }; + int i; + + if (*ind >= argc) + return 0; + + *arg = argv[(*ind)++]; + for (i = 0; i < NELEM(opts); ++i) + if (streq(*arg, opts[i].nam) || streq(*arg, opts[i].altnam)) + { + if (opts[i].arg) + if (*ind < argc) + *arg = argv[(*ind)++]; + else + fatal("option %s requires an argument", *arg); + return i+1; + } + + if (**arg == '-') + { + fatal("%s: invalid option", *arg); + usage(stderr, 1); + } + + return -1; +} + + +int main(int argc, char **argv) +{ + char *vbi_name = NULL; + int timeout = 0; + struct vbi *vbi; + int opt, ind; + char *arg; + int ttpid = -1; + + setprgname(argv[0]); + ind = 1; + while (opt = option(argc, argv, &ind, &arg)) + switch (opt) + { + case 1: // -delta + max_diff = atoi(arg); + if (max_diff < 1) + fatal("-delta: illegal value '%s'", arg); + if (max_diff > 12*60*60) + { + max_diff = 12*60*60; + error("-delta: %d too big. Assuming %d", arg, max_diff); + } + break; + case 2: // -format + fmt = arg; + break; + case 3: // help + usage(stdout, 0); + break; + case 4: // -set + set_time = 1; + break; + case 5: // -timeout + timeout = atoi(arg); + if (timeout < 1 || timeout > 60*60) + fatal("-timeout: illegal value '%s'", arg); + break; + case 6: // -vbi + vbi_name = arg; + break; + case -1: + usage(stderr, 1); + break; + } + + fdset_init(fds); + + if (timeout) + { + signal(SIGALRM, SIG_DFL); // kill me + alarm(timeout); + } + vbi = vbi_open(vbi_name, 0, channel, outfile, sid, ttpid); // open device + if (not vbi) + fatal_ioerror(vbi_name); + vbi_add_handler(vbi, event, 0); // register event handler + + for (;;) + fdset_select(fds, -1); // call scheduler + + /* never reached */ + vbi_del_handler(vbi, event, 0); + vbi_close(vbi); + exit(0); +} diff --git a/util/alevt/alevt.1 b/util/alevt/alevt.1 new file mode 100644 index 0000000..68bff45 --- /dev/null +++ b/ util/alevt/alevt.1@@ -0,0 +1,60 @@ +.TH alevt 1 "February 07, 2010" +.SH NAME +alevt \- a teletext browser for analogue and DVB channels. +.SH SYNOPSIS +.B alevt +.RI [ options ] +.br +.SH DESCRIPTION +This manual page documents briefly the +.B alevt +commands. +.PP +\fBalevt\fP is a program to read teletext from analogue or DVB channels. +.SH OPTIONS +.TP +.B \-c <channel> +channel name (dvb only) +.TP +.B \-ch -child <ppp.ss> +child window +.TP +.B \-cs -charset <latin-1/2/koi8-r/iso8859-7> +character set +.TP +.B \-h -help +print this page +.TP +.B \-o <outfile> +path + file for all services (dvb only) +.TP +.B \-p -parent <ppp.ss> +parent window +.TP +.B \-s -sid <sid> +service id (dvb only) +.TP +.B \-t -ttpid <ttpid> +teletext pid (dvb only) +.TP +.B \-v -vbi <vbidev> +vbi device +.TP +Sequence: /dev/vbi; /dev/vbi0; /dev/video0; /dev/dvb/adapter0/demux0 +.TP +Order is important! Each page number opens a new window +with the previously given geometry, device, and display. +.TP +ppp.ss stands for a page number and an optional +subpage number (example: 123.4). +.TP +The -child option requires a parent window. So it must +be preceded by a parent or another child window. +.TP +.SH SEE ALSO +.BR alevt-cap (1), alevt-date (1). +.br +.SH AUTHOR +alevt was written by Edgar Toernig <froese@gmx.de>. +.PP +This manual page was written by Uwe Bugla <uwe.bugla@gmx.de>. diff --git a/util/alevt/alevt.desktop b/util/alevt/alevt.desktop new file mode 100644 index 0000000..c125bb9 --- /dev/null +++ b/ util/alevt/alevt.desktop@@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=alevt +Comment=Teletext Browser +Exec=alevt +Icon=alevt +Terminal=false +Type=Application +Categories=GNOME;GTK;AudioVideo;Video; diff --git a/util/alevt/bdf2xbm.c b/util/alevt/bdf2xbm.c new file mode 100644 index 0000000..74d238e --- /dev/null +++ b/ util/alevt/bdf2xbm.c@@ -0,0 +1,212 @@ +/* + Simple program to convert a bdf-font to a bitmap. + The characters are arranged in a 32x8 matrix. + usage: bdf2xbm [identifier] <bdf >xbm + Copyright 1998,1999 by E. Toernig (froese@gmx.de) +*/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <ctype.h> +#include <stdarg.h> + +#define not ! +#define streq(a,b) (strcmp((a),(b)) == 0) + +int lineno; +char *word[64]; +int nword; + +char *font = "font%dx%d"; +int w, h, bpl; +unsigned char *bmap; + + +static void error(char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + fprintf(stderr, "bdf2xbm"); + if (lineno) + fprintf(stderr, ":%d", lineno); + fprintf(stderr, ": "); + vfprintf(stderr, fmt, args); + fputc('\n', stderr); + exit(1); +} + + +static int nextline() +{ + static char buf[256]; + char *p; + int i; + + do + { + nword = 0; + if (fgets(buf, sizeof(buf), stdin) == 0) + return nword; + lineno++; + + p = buf; + for (;;) + { + while (isspace(*p)) + p++; + if (*p == 0) + break; + word[nword++] = p; + while (*p && not isspace(*p)) + *p = toupper(*p), p++; + if (*p == 0) + break; + *p++ = 0; + } + } while (nword == 0); + + for (i = nword; i < 64; ++i) + word[i] = ""; + return nword; +} + + +static inline void setbit(int ch, int x, int y) +{ + + int yo = ch / 32 * h + y; + int xo = ch % 32 * w + x; + + bmap[yo * bpl + xo / 8] |= 1 << (xo % 8); +} + + +static void dobitmap(int ch, int x, int y) +{ + int i, j; + + for (i = 0; i < y; ++i) + { + nextline(); + if (nword > 1 || strlen(word[0]) != (x + 7) / 8 * 2) + error("bad BITMAP"); + for (j = 0; j < x; ++j) + { + int c = word[0][j / 4]; + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'F') + c -= 'A' - 10; + else + error("bad hexchar in BITMAP"); + if (c & (8 >> (j % 4))) + setbit(ch, j, i); + } + } +} + + +static void dochar() +{ + int ch = -1, x = -1, y = -1; + + while (nextline()) + { + if (streq(word[0], "ENDCHAR")) + return; + else if (streq(word[0], "ENCODING") && nword == 2) + { + ch = atoi(word[1]); + if (ch < 0 || ch > 255) + error("bad character code %d", ch); + } + else if (streq(word[0], "BBX") && nword == 5) + { + x = atoi(word[1]), y = atoi(word[2]); + if (x < 1 || x > 64 || y < 1 || y > 64) + error("bad BBX (%dx%d)", x, y); + } + else if (streq(word[0], "BITMAP")) + { + if (x < 0) + error("missing BBX"); + if (ch < 0) + error("missing ENDCODING"); + dobitmap(ch, x, y); + } + } + error("unexpected EOF (missing ENDCHAR)"); +} + + +static void dofile() +{ + lineno = 0; + w = h = 0; + bmap = 0; + + nextline(); + if (nword != 2 || not streq(word[0], "STARTFONT")) + error("not a bdf-file"); + + while (nextline()) + { + if (streq(word[0], "ENDFONT")) + return; + else if (streq(word[0], "FONTBOUNDINGBOX") && nword == 5) + { + if (bmap) + error("multiple FONTBOUNDINGBOXes!?!"); + w = atoi(word[1]), h = atoi(word[2]); + if (w < 1 || w > 64 || h < 1 || h > 64) + error("bad bounding box %dx%d\n", w, h); + bpl = (w*32+7)/8; // rounding is unnecessary + bmap = calloc(1, bpl * h*8); + if (bmap == 0) + error("out of memory"); + } + else if (streq(word[0], "STARTCHAR")) + { + if (not bmap) + error("no FONTBOUNDINGBOX"); + dochar(); + } + } + error("unexpected EOF (missing ENDFONT)"); +} + + +static void writexbm() +{ + char buf[256]; + int i, j; + unsigned char *p = bmap; + + if (not bmap) + return; + + sprintf(buf, font, w, h); + + printf("#define %s_width %d\n", buf, 32 * w); + printf("#define %s_height %d\n", buf, 8 * h); + printf("static unsigned char %s_bits[] = {\n", buf); + for (i = 0; i < 16 * h * w / 8; ++i) + { + for (j = 0; j < 16; ++j) + printf("0x%02x,", *p++); + printf("\n"); + } + printf("};\n"); +} + + +int main(int argc, char **argv) +{ + if (argc > 1) + font = argv[1]; + dofile(); + writexbm(); + exit(0); +} diff --git a/util/alevt/cache.c b/util/alevt/cache.c new file mode 100644 index 0000000..c747448 --- /dev/null +++ b/ util/alevt/cache.c@@ -0,0 +1,229 @@ +#include <stdlib.h> +#include <string.h> +#include "misc.h" +#include "dllist.h" +#include "cache.h" +#include "help.h" + + +static inline int hash(int pgno) +{ + // very simple... + return pgno % HASH_SIZE; +} + + +static void do_erc(struct vt_page *ovtp, struct vt_page *nvtp) +{ + int l, c; + + if (nvtp->errors == 0 && ovtp->lines == nvtp->lines) + return; + + for (l = 0; l < H; ++l) + { + if (~nvtp->lines & (1 << l)) + memcpy(nvtp->data[l], ovtp->data[l], W); + else if (ovtp->lines & (1 << l)) + for (c = 0; c < W; ++c) + if (nvtp->data[l][c] == BAD_CHAR) + nvtp->data[l][c] = ovtp->data[l][c]; + } + nvtp->lines |= ovtp->lines; +} + + +static void cache_close(struct cache *ca) +{ + struct cache_page *cp; + int i; + + for (i = 0; i < HASH_SIZE; ++i) + while (not dl_empty(ca->hash + i)) + { + cp = PTR ca->hash[i].first; + dl_remove(cp->node); + free(cp); + } + free(ca); +} + + +static void cache_reset(struct cache *ca) +{ + struct cache_page *cp, *cpn; + int i; + + for (i = 0; i < HASH_SIZE; ++i) + for (cp = PTR ca->hash[i].first; cpn = PTR cp->node->next; cp = cpn) + if (cp->page->pgno / 256 != 9) // don't remove help pages + { + dl_remove(cp->node); + free(cp); + ca->npages--; + } + memset(ca->hi_subno, 0, sizeof(ca->hi_subno[0]) * 0x900); +} + +/* Get a page from the cache. + If subno is SUB_ANY, the newest subpage of that page is returned */ + + +static struct vt_page * cache_get(struct cache *ca, int pgno, int subno) +{ + struct cache_page *cp; + int h = hash(pgno); + + for (cp = PTR ca->hash[h].first; cp->node->next; cp = PTR cp->node->next) + if (cp->page->pgno == pgno) + if (subno == ANY_SUB || cp->page->subno == subno) + { + // found, move to front (make it 'new') + dl_insert_first(ca->hash + h, dl_remove(cp->node)); + return cp->page; + } + return 0; +} + +/* Put a page in the cache. + If it's already there, it is updated. */ + + +static struct vt_page * cache_put(struct cache *ca, struct vt_page *vtp) +{ + struct cache_page *cp; + int h = hash(vtp->pgno); + + for (cp = PTR ca->hash[h].first; cp->node->next; cp = PTR cp->node->next) + if (cp->page->pgno == vtp->pgno && cp->page->subno == vtp->subno) + break; + + if (cp->node->next) + { + // move to front. + dl_insert_first(ca->hash + h, dl_remove(cp->node)); + if (ca->erc) + do_erc(cp->page, vtp); + } + else + { + cp = malloc(sizeof(*cp)); + if (cp == 0) + return 0; + if (vtp->subno >= ca->hi_subno[vtp->pgno]) + ca->hi_subno[vtp->pgno] = vtp->subno + 1; + ca->npages++; + dl_insert_first(ca->hash + h, cp->node); + } + + *cp->page = *vtp; + return cp->page; +} + +/* Same as cache_get but doesn't make the found entry new */ + + +static struct vt_page * cache_lookup(struct cache *ca, int pgno, int subno) +{ + struct cache_page *cp; + int h = hash(pgno); + + for (cp = PTR ca->hash[h].first; cp->node->next; cp = PTR cp->node->next) + if (cp->page->pgno == pgno) + if (subno == ANY_SUB || cp->page->subno == subno) + return cp->page; + return 0; +} + + +static struct vt_page * cache_foreach_pg(struct cache *ca, int pgno, int subno, + int dir, int (*func)(), void *data) +{ + struct vt_page *vtp, *s_vtp = 0; + + if (ca->npages == 0) + return 0; + + if (vtp = cache_lookup(ca, pgno, subno)) + subno = vtp->subno; + else if (subno == ANY_SUB) + subno = dir < 0 ? 0 : 0xffff; + + for (;;) + { + subno += dir; + while (subno < 0 || subno >= ca->hi_subno[pgno]) + { + pgno += dir; + if (pgno < 0x100) + pgno = 0x9ff; + if (pgno > 0x9ff) + pgno = 0x100; + subno = dir < 0 ? ca->hi_subno[pgno] - 1 : 0; + } + if (vtp = cache_lookup(ca, pgno, subno)) + { + if (s_vtp == vtp) + return 0; + if (s_vtp == 0) + s_vtp = vtp; + if (func(data, vtp)) + return vtp; + } + } +} + + +static int cache_mode(struct cache *ca, int mode, int arg) +{ + int res = -1; + + switch (mode) + { + case CACHE_MODE_ERC: + res = ca->erc; + ca->erc = arg ? 1 : 0; + break; + } + return res; +} + + +static struct cache_ops cops = +{ + cache_close, + cache_get, + cache_put, + cache_reset, + cache_foreach_pg, + cache_mode, +}; + + +struct cache * cache_open(void) +{ + struct cache *ca; + struct vt_page *vtp; + int i; + + if (not(ca = malloc(sizeof(*ca)))) + goto fail1; + + for (i = 0; i < HASH_SIZE; ++i) + dl_init(ca->hash + i); + + memset(ca->hi_subno, 0, sizeof(ca->hi_subno)); + ca->erc = 1; + ca->npages = 0; + ca->op = &cops; + + for (vtp = help_pages; vtp < help_pages + nr_help_pages; vtp++) + cache_put(ca, vtp); + + return ca; + +fail2: + free(ca); +fail1: + return 0; +} diff --git a/util/alevt/cache.h b/util/alevt/cache.h new file mode 100644 index 0000000..934ef9a --- /dev/null +++ b/ util/alevt/cache.h@@ -0,0 +1,41 @@ +#ifndef CACHE_H +#define CACHE_H + +#include "vt.h" +#include "misc.h" +#include "dllist.h" + +#define HASH_SIZE 113 + + +struct cache +{ + struct dl_head hash[HASH_SIZE]; + int erc; // error reduction circuit on + int npages; + u16 hi_subno[0x9ff + 1]; // 0:pg not in cache, 1-3f80:highest subno + 1 + struct cache_ops *op; +}; + + +struct cache_page +{ + struct dl_node node[1]; + struct vt_page page[1]; +}; + + +struct cache_ops +{ + void (*close)(struct cache *ca); + struct vt_page *(*get)(struct cache *ca, int pgno, int subno); + struct vt_page *(*put)(struct cache *ca, struct vt_page *vtp); + void (*reset)(struct cache *ca); + struct vt_page *(*foreach_pg)(struct cache *ca, int pgno, int subno, int dir, + int (*func)(), void *data); + int (*mode)(struct cache *ca, int mode, int arg); +}; + +struct cache *cache_open(void); +#define CACHE_MODE_ERC 1 +#endif diff --git a/util/alevt/dllist.h b/util/alevt/dllist.h new file mode 100644 index 0000000..f925506 --- /dev/null +++ b/ util/alevt/dllist.h@@ -0,0 +1,55 @@ +#ifndef DLLIST_H +#define DLLIST_H + + +struct dl_node +{ + struct dl_node *next; + struct dl_node *prev; +}; + + +struct dl_head +{ + struct dl_node *first; + struct dl_node *null; + struct dl_node *last; +}; + + +static inline struct dl_head * dl_init(struct dl_head *h) +{ + h->first = (struct dl_node *)&h->null; + h->null = 0; + h->last = (struct dl_node *)&h->first; + return h; +} + + +static inline struct dl_node * dl_remove(struct dl_node *n) +{ + n->prev->next = n->next; + n->next->prev = n->prev; + return n; +} + + +static inline struct dl_node * + dl_insert_after(struct dl_node *p, struct dl_node *n) +{ + n->next = p->next; + n->prev = p; + p->next = n; + n->next->prev = n; + return n; +} + +#define dl_empty(h) ((h)->first->next == 0) +#define dl_insert_before(p, n) dl_insert_after((p)->prev, (n)) +#define dl_insert_first(h, n) ({ struct dl_node *_n = (n); \ + dl_insert_before((h)->first, _n); }) +#define dl_insert_last(h, n) ({ struct dl_node *_n = (n); \ + dl_insert_after((h)->last, _n); }) +#define dl_remove_first(h) dl_remove((h)->first) // mustn't be empty! +#define dl_remove_last(h) dl_remove((h)->last) // mustn't be empty! +#endif diff --git a/util/alevt/exp-gfx.c b/util/alevt/exp-gfx.c new file mode 100644 index 0000000..82ab218 --- /dev/null +++ b/ util/alevt/exp-gfx.c@@ -0,0 +1,258 @@ +/* Copyright 1999 by Paul Ortyl <ortylp@from.pl> */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "lang.h" +#include "export.h" +#include "font.h" +#define WW (W*CW) /* pixel width of window */ +#define WH (H*CH) /* pixel hegiht of window */ + + +static inline void draw_char(unsigned char * colour_matrix, int fg, int bg, + int c, int dbl, int _x, int _y, int sep) +{ + int x,y; + unsigned char* src= (latin1==LATIN1 ? font1_bits : font2_bits); + int dest_x=_x*CW; + int dest_y=_y*CH; + + for(y=0;y<(CH<<dbl); y++) + { + for(x=0;x<CW; x++) + { + int bitnr, bit, maskbitnr, maskbit; + bitnr=(c/32*CH + (y>>dbl))*CW*32+ c%32*CW +x; + bit=(*(src+bitnr/8))&(1<<bitnr%8); + if (sep) + { + maskbitnr=(0xa0/32*CH + (y>>dbl))*CW*32+ 0xa0%32*CW +x; + maskbit=(*(src+maskbitnr/8))&(1<<maskbitnr%8); + *(colour_matrix+WW*(dest_y+y)+dest_x+x)= + (char)((bit && (!maskbit)) ? fg : bg); + } + else + *(colour_matrix+WW*(dest_y+y)+dest_x+x)= + (char)(bit ? fg : bg); + } + } + return; +} + + +static void prepare_colour_matrix(/*struct export *e,*/ + struct fmt_page *pg, + unsigned char *colour_matrix) +{ + int x, y; + for (y = 0; y < H; ++y) + { + for (x = 0; x < W; ++x) + { + if (pg->dbl & (1<<(y-1))) + { + if (pg->data[y-1][x].attr & EA_HDOUBLE) + draw_char(colour_matrix, pg->data[y][x].fg, + pg->data[y][x].bg, pg->data[y][x].ch, + (0), + x, y, + ((pg->data[y][x].attr & EA_SEPARATED) ? 1 : 0) + ); + } + else + { + draw_char(colour_matrix, pg->data[y][x].fg, + pg->data[y][x].bg, pg->data[y][x].ch, + ((pg->data[y][x].attr & EA_DOUBLE) ? 1 : 0), + x, y, + ((pg->data[y][x].attr & EA_SEPARATED) ? 1 : 0) + ); + } + } + } + return; +} + + +static int ppm_output(struct export *e, char *name, struct fmt_page *pg); + +struct export_module export_ppm = // exported module definition +{ + "ppm", // id + "ppm", // extension + 0, // options + 0, // size + 0, // open + 0, // close + 0, // option + ppm_output // output +}; + + +static int ppm_output(struct export *e, char *name, struct fmt_page *pg) +{ + FILE *fp; + long n; + static u8 rgb1[][3]={{0,0,0}, + {1,0,0}, + {0,1,0}, + {1,1,0}, + {0,0,1}, + {1,0,1}, + {0,1,1}, + {1,1,1}}; + unsigned char *colour_matrix; + + if (!(colour_matrix=malloc(WH*WW))) + { + export_error("cannot allocate memory"); + return 0; + } + + prepare_colour_matrix(/*e,*/ pg, (unsigned char *)colour_matrix); + if (not(fp = fopen(name, "w"))) + { + free(colour_matrix); + export_error("cannot create file"); + return -1; + } + fprintf(fp,"P6 %d %d 1\n", WW, WH); + + for(n=0;n<WH*WW;n++) + { + if (!fwrite(rgb1[(int) *(colour_matrix+n)], 3, 1, fp)) + { + export_error("error while writting to file"); + free(colour_matrix); + fclose(fp); + return -1; + } + } + free(colour_matrix); + fclose(fp); + return 0; +} + + +#ifdef WITH_PNG + +#include <png.h> +static int png_open(struct export *e); +static int png_option(struct export *e, int opt, char *arg); +static int png_output(struct export *e, char *name, struct fmt_page *pg); +static char *png_opts[] = // module options +{ + "compression=<0-9>", // set compression level + 0 +}; + +struct png_data // private data in struct export +{ + int compression; +}; + +struct export_module export_png = // exported module definition +{ + "png", // id + "png", // extension + png_opts, // options + sizeof(struct png_data), // size + png_open, // open + 0, // close + png_option, // option + png_output // output +}; + +#define D ((struct png_data *)e->data) + + +static int png_open(struct export *e) +{ + D->compression = Z_DEFAULT_COMPRESSION; + return 0; +} + + +static int png_option(struct export *e, int opt, char *arg) +{ + switch (opt) + { + case 1: // compression= + if (*arg >= '0' && *arg <= '9') + D->compression = *arg - '0'; + break; + } + return 0; +} + + +static int png_output(struct export *e, char *name, struct fmt_page *pg) +{ + FILE *fp; + int x; + png_structp png_ptr; + png_infop info_ptr; + png_byte *row_pointers[WH]; + static u8 rgb8[][3]={{ 0, 0, 0}, + {255, 0, 0}, + { 0,255, 0}, + {255,255, 0}, + { 0, 0,255}, + {255, 0,255}, + { 0,255,255}, + {255,255,255}}; + unsigned char *colour_matrix; + + if (!(colour_matrix=malloc(WH*WW))) + { + export_error("cannot allocate memory"); + return -1; + } + prepare_colour_matrix(/*e,*/ pg, (unsigned char *)colour_matrix); + if (not(fp = fopen(name, "w"))) + { + free(colour_matrix); + export_error("cannot create file"); + return -1; + } + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, + NULL, NULL, NULL); + if (!png_ptr) + { + free(colour_matrix); + fclose(fp); + export_error("libpng init error"); + return -1; + } + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) + { + png_destroy_write_struct(&png_ptr, + (png_infopp)NULL); + free(colour_matrix); + fclose(fp); + export_error("libpng init error"); + return -1; + } + png_init_io(png_ptr, fp); + png_set_compression_level(png_ptr, D->compression); + png_set_compression_mem_level(png_ptr, 9); + png_set_compression_window_bits(png_ptr, 15); + png_set_IHDR(png_ptr, info_ptr, WW, WH, + 8, PNG_COLOR_TYPE_PALETTE , PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + png_set_PLTE(png_ptr, info_ptr,(png_color*) rgb8 , 8); + png_write_info(png_ptr, info_ptr); + for(x=0; x<WH; x++) + { row_pointers[x]=colour_matrix+x*WW; } + png_write_image(png_ptr, row_pointers); + png_write_end(png_ptr, info_ptr); + png_destroy_write_struct(&png_ptr, &info_ptr); + free(colour_matrix); + fclose(fp); + return 0; +} + +#endif + diff --git a/util/alevt/exp-html.c b/util/alevt/exp-html.c new file mode 100644 index 0000000..6c9312a --- /dev/null +++ b/ util/alevt/exp-html.c@@ -0,0 +1,299 @@ +/* Copyright 1999 by Paul Ortyl <ortylp@from.pl> */ + +#include <stdio.h> +#include <string.h> +#include "lang.h" +#include "export.h" + +static int html_open(struct export *e); +static int html_option(struct export *e, int opt, char *arg); +static int html_output(struct export *e, char *name, struct fmt_page *pg); +static char *html_opts[] = // module options +{ + "gfx-chr=<char>", // substitute <char> for gfx-symbols + "bare", // no headers + 0 +}; + +struct html_data // private data in struct export +{ + u8 gfx_chr; + u8 bare; +}; + + +struct export_module export_html = // exported module definition +{ + "html", // id + "html", // extension + html_opts, // options + sizeof(struct html_data), // size + html_open, // open + 0, // close + html_option, // option + html_output // output +}; + +#define D ((struct html_data *)e->data) + + +static int html_open(struct export *e) +{ + D->gfx_chr = '#'; + D->bare = 0; + //e->reveal=1; // the default should be the same for all formats. + return 0; +} + + +static int html_option(struct export *e, int opt, char *arg) +{ + switch (opt) + { + case 1: // gfx-chr= + D->gfx_chr = *arg ?: ' '; + break; + case 2: // bare (no headers) + D->bare=1; + break; + } + return 0; +} + +#define HTML_BLACK "#000000" +#define HTML_RED "#FF0000" +#define HTML_GREEN "#00FF00" +#define HTML_YELLOW "#FFFF00" +#define HTML_BLUE "#0000FF" +#define HTML_MAGENTA "#FF00FF" +#define HTML_CYAN "#00FFFF" +#define HTML_WHITE "#FFFFFF" + +#undef UNREADABLE_HTML //no '\n' +#define STRIPPED_HTML //only necessary fields in header + +static int html_output(struct export *e, char *name, struct fmt_page *pg) +{ + + const char* html_colours[]={ HTML_BLACK, + HTML_RED, + HTML_GREEN, + HTML_YELLOW, + HTML_BLUE, + HTML_MAGENTA, + HTML_CYAN, + HTML_WHITE}; + FILE *fp; + int x, y; + +#ifdef UNREADABLE_HTML +#define HTML_NL +#else +#define HTML_NL fputc('\n',fp); +#endif + + if (not(fp = fopen(name, "w"))) + { + export_error("cannot create file"); + return -1; + } + +if (!D->bare) + { +#ifndef STRIPPED_HTML + fputs("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">",fp); + HTML_NL +#endif + fputs("<html><head>",fp); + HTML_NL +#ifndef STRIPPED_HTML + fputs("<meta http-equiv=\"Content-Type\" content=\"text/html;",fp); + switch(latin1) { + case LATIN1: fprintf(fp,"charset=iso-8859-1\">"); break; + case LATIN2: fprintf(fp,"charset=iso-8859-2\">"); break; + case KOI8: fprintf(fp,"charset=koi8-r\">"); break; + case GREEK: fprintf(fp,"charset=iso-8859-7\">"); break; + } + HTML_NL + fputs("<meta name=\"GENERATOR\" content=\"alevt-cap\">",fp); + HTML_NL +#else + switch(latin1) { + case LATIN1: fprintf(fp,"<meta charset=iso-8859-1\">"); break; + case LATIN2: fprintf(fp,"<meta charset=iso-8859-2\">"); break; + case KOI8: fprintf(fp,"<meta charset=koi8-r\">"); break; + case GREEK: fprintf(fp,"<meta charset=iso-8859-7\">"); break; + } + HTML_NL +#endif + fputs("</head>",fp); + fputs("<body text=\"#FFFFFF\" bgcolor=\"#000000\">",fp); + HTML_NL + } //bare + + fputs("<tt><b>",fp); + HTML_NL + + // write tables in form of HTML format + for (y = 0; y < 25; ++y) + { + int last_nonblank=0; + int first_unprinted=0; + int last_space=1; + // previous char was + // is used for deciding to put semicolon or not + int nbsp=0; + + // for output filled with ' ' up to 40 chars + // set last_nonblank=39 + for (x = 0 ; x < 40; ++x) + { + if (pg->data[y][x].attr & EA_GRAPHIC) + {pg->data[y][x].ch= D->gfx_chr;} + + if (pg->data[y][x].ch!=' ') + { + last_nonblank=x; + } + } + + for (x = 0 ; x <= last_nonblank ; ++x) + { + if (pg->data[y][x].ch==' ') + { + // if single space between blinking/colour words + // then make the space blinking/colour too + if ((x)&&(x<39)) + { + if ((pg->data[y][x-1].ch!=' ') + &&(pg->data[y][x+1].ch!=' ') + &&(pg->data[y][x-1].attr & EA_BLINK) + &&(pg->data[y][x+1].attr & EA_BLINK)) + {pg->data[y][x].attr |= EA_BLINK;} + else + {pg->data[y][x].attr &= ~EA_BLINK;} + + if ((pg->data[y][x-1].ch!=' ') + &&(pg->data[y][x+1].ch!=' ') + &&(pg->data[y][x-1].fg==pg->data[y][x+1].fg)) + {pg->data[y][x].fg=pg->data[y][x-1].fg;} + else + pg->data[y][x].fg=7; + } + else + { + pg->data[y][x].attr &= ~EA_BLINK; + pg->data[y][x].fg=7; + } + } + else + { + // if foreground is black set the foreground to previous + // background colour to let it be visible + if (!pg->data[y][x].fg) + {pg->data[y][x].fg=pg->data[y][x].bg;} + } + //check if attributes changed, + //if yes then print chars and update first_unprinted + //if not then go to next char + if (x) + { + if ((( + (pg->data[y][x].attr & EA_BLINK) + == + (pg->data[y][x-1].attr & EA_BLINK) + ) + && + ( + pg->data[y][x].fg == pg->data[y][x-1].fg + )) + &&(x!=last_nonblank)) + + { continue; } + } + else continue; + + { + int z=first_unprinted; + for(;(pg->data[y][z].ch==' ') && (z<x);z++) + { + if (last_space) + { + fprintf(fp," "); + last_space=0; + nbsp=1; + } + else + { + fputc(' ',fp); + last_space=1; + nbsp=0; + } + } + + first_unprinted=z; + + if (z==x) continue; + + if (pg->data[y][first_unprinted].attr & EA_BLINK) + { + fprintf(fp,"<blink>"); + nbsp=0; + } + + if (pg->data[y][first_unprinted].fg!=7) + { + fprintf(fp,"<font color=\"%s\">", + html_colours[pg->data[y][first_unprinted].fg]); + nbsp=0; + } + for(;(z<x)||(z==last_nonblank);z++) + { + + if (pg->data[y][z].ch==' ') + { + for(;(pg->data[y][z].ch==' ') && (z<x);z++) + { + if (last_space) + { + fprintf(fp," "); + last_space=0; + nbsp=1; + } + else + { + fputc(' ',fp); + last_space=1; + nbsp=0; + } + } + z--; + } + else + { + //if previous nbsp --> put semicolon!!! + if (nbsp) fputc(';',fp); + fputc(pg->data[y][z].ch,fp); + last_space=0; + nbsp=0; + } + } + if (pg->data[y][first_unprinted].fg!=7) + { + fprintf(fp,"</font>"); + } + if (pg->data[y][first_unprinted].attr & EA_BLINK) + fprintf(fp,"</blink>"); + + first_unprinted=z; + } + } + fputs("<br>",fp); + HTML_NL + } + fputs("</b></tt>",fp); + if (!D->bare) + fputs("</body></html>",fp); + fclose(fp); + return 0; +} diff --git a/util/alevt/exp-txt.c b/util/alevt/exp-txt.c new file mode 100644 index 0000000..8009c17 --- /dev/null +++ b/ util/alevt/exp-txt.c@@ -0,0 +1,226 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "os.h" +#include "export.h" + +static int txt_open(struct export *e); +static int txt_option(struct export *e, int opt, char *arg); +static int txt_output(struct export *e, char *name, struct fmt_page *pg); +static char *txt_opts[] = // module options +{ + "color", // generate ansi color codes (and attributes) + "gfx-chr=<char>", // substitute <char> for gfx-symbols + "fg=<0-7|none>", // assume term has <x> as foreground color + "bg=<0-7|none>", // assume term has <x> as background color + "lines=<1-25>", // output 24 or 25 lines + 0 +}; + + +struct txt_data // private data in struct export +{ + u8 color; + u8 gfx_chr; + u8 def_fg; + u8 def_bg; + int endline; + struct fmt_char curr[1]; + FILE *fp; +}; + + +struct export_module export_txt = // exported module definition +{ + "ascii", // id + "txt", // extension + txt_opts, // options + sizeof(struct txt_data), // data size + txt_open, // open + 0, // close + txt_option, // option + txt_output, // output +}; + + +struct export_module export_ansi = // exported module definition +{ + "ansi", // id + "txt", // extension + txt_opts, // options + sizeof(struct txt_data), // data size + txt_open, // open + 0, // close + txt_option, // option + txt_output, // output +}; + +#define D ((struct txt_data *)e->data) + + +char * my_stpcpy(char *dst, const char *src) +{ + while (*dst = *src++) + dst++; + return dst; +} + + +static int txt_open(struct export *e) +{ + D->gfx_chr = '#'; + D->def_fg = -1; + D->def_bg = -1; + D->endline = H; + if (e->mod == &export_ansi) + D->color = 1; + return 0; +} + + +static int txt_option(struct export *e, int opt, char *arg) +{ + switch (opt) + { + case 1: // color + D->color = 1; + break; + case 2: // gfx-chr= + D->gfx_chr = *arg ?: ' '; + break; + case 3: // fg= + D->def_fg = *arg - '0'; + break; + case 4: // bg= + D->def_bg = *arg - '0'; + break; + case 5: // lines= + D->endline = atoi(arg); + if (D->endline < 1 || D->endline > H) + { + export_error("lines: invalid number"); + return 1; + } + } + return 0; +} + + +static void put_attr(struct export *e, struct fmt_char *new) +{ + char buf[512]; + char *p = buf; + int fg, bg, attr; + int reset = 0; + + if (D->color) + { + fg = D->curr->fg ^ new->fg; + bg = D->curr->bg ^ new->bg; + attr = (D->curr->attr ^ new->attr) & (EA_BLINK | EA_DOUBLE); + + if (fg | bg | attr) + { + if (~new->attr & attr) // reset some attributes -> reset all. + reset = 1; + if (fg && new->fg == D->def_fg) // switch to def fg -> reset all + reset = 1; + if (bg && new->bg == D->def_bg) // switch to def bg -> reset all + reset = 1; + + p = my_stpcpy(buf, "\e["); + if (reset) + { + p = my_stpcpy(p, ";"); // "0;" but 0 isn't neccesary + attr = -1; // set all attributes + fg = new->fg ^ D->def_fg; // set fg if != default fg + bg = new->bg ^ D->def_bg; // set bg if != default bg + } + if (attr & new->attr & EA_BLINK) + p = my_stpcpy(p, "5;"); // blink + if (attr & new->attr & EA_DOUBLE) + p = my_stpcpy(p, "1;"); // bold + if (fg) + p += sprintf(p, "%d;", new->fg + 30); // fg-color + if (bg) + p += sprintf(p, "%d;", new->bg + 40); // bg-color + p[-1] = 'm'; // replace last ; + *D->curr = *new; + } + } + *p++ = new->ch; + *p = 0; + fputs(buf, D->fp); +} + + +static int txt_output(struct export *e, char *name, struct fmt_page *pg) +{ + struct fmt_char def_c[1]; + struct fmt_char l[W+2]; + #define L (l+1) + int x, y; + + D->fp = fopen(name, "w"); + if (not D->fp) + { + export_error("cannot create file"); + return -1; + } + + /* initialize default colors. These have to be restored at EOL. */ + def_c->ch = '\n'; + def_c->fg = D->def_fg; + def_c->bg = D->def_bg; + def_c->attr = E_DEF_ATTR; + *D->curr = *def_c; + L[-1] = L[W] = *def_c; + + for (y = 0; y < D->endline; y++) + if (~pg->hid & (1 << y)) // not hidden + { + // character conversion + for (x = 0; x < W; ++x) + { + struct fmt_char c = pg->data[y][x]; + + switch (c.ch) + { + case 0x00: case 0xa0: c.ch = ' '; break; + case 0x7f: c.ch = '*'; break; + case BAD_CHAR: c.ch = '?'; break; + default: + if (c.attr & EA_GRAPHIC) + c.ch = D->gfx_chr; + break; + } + L[x] = c; + } + + if (D->color) + { + // optimize color and attribute changes + // delay fg and attr changes as far as possible + for (x = 0; x < W; ++x) + if (L[x].ch == ' ') + { + L[x].fg = L[x-1].fg; + l[x].attr = L[x-1].attr; + } + + // move fg and attr changes to prev bg change point + for (x = W-1; x >= 0; x--) + if (L[x].ch == ' ' && L[x].bg == L[x+1].bg) + { + L[x].fg = L[x+1].fg; + L[x].attr = L[x+1].attr; + } + } + + // now emit the whole line (incl EOL) + for (x = 0; x < W+1; ++x) + put_attr(e, L + x); + } + fclose(D->fp); + return 0; +} diff --git a/util/alevt/export.c b/util/alevt/export.c new file mode 100644 index 0000000..1eb8ea9 --- /dev/null +++ b/ util/alevt/export.c@@ -0,0 +1,364 @@ +#include <stdarg.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include "vt.h" +#include "misc.h" +#include "export.h" + +extern struct export_module export_txt; +extern struct export_module export_ansi; +extern struct export_module export_html; +extern struct export_module export_png; +extern struct export_module export_ppm; +struct export_module *modules[] = +{ + &export_txt, + &export_ansi, + &export_html, + &export_ppm, +#ifdef WITH_PNG + &export_png, +#endif + 0 +}; + + +static char *glbl_opts[] = +{ + "reveal", // show hidden text + "hide", // don't show hidden text (default) + 0 +}; + +static char errbuf[64]; + + +void export_error(char *str, ...) +{ + va_list args; + + va_start(args, str); + vsnprintf(errbuf, sizeof(errbuf)-1, str, args); +} + + +char * export_errstr(void) +{ + return errbuf; +} + + +static int find_opt(char **opts, char *opt, char *arg) +{ + int err = 0; + char buf[256]; + char **oo, *o, *a; + + if (oo = opts) + while (o = *oo++) + { + if (a = strchr(o, '=')) + { + a = buf + (a - o); + o = strcpy(buf, o); + *a++ = 0; + } + if (strcasecmp(o, opt) == 0) + { + if ((a != 0) == (arg != 0)) + return oo - opts; + err = -1; + } + } + return err; +} + + +struct export * export_open(char *fmt) +{ + struct export_module **eem, *em; + struct export *e; + char *opt, *optend, *optarg; + int opti; + + if (fmt = strdup(fmt)) + { + if (opt = strchr(fmt, ',')) + *opt++ = 0; + for (eem = modules; em = *eem; eem++) + if (strcasecmp(em->fmt_name, fmt) == 0) + break; + if (em) + { + if (e = malloc(sizeof(*e) + em->local_size)) + { + e->mod = em; + e->fmt_str = fmt; + e->reveal = 0; + memset(e + 1, 0, em->local_size); + if (not em->open || em->open(e) == 0) + { + for (; opt; opt = optend) + { + if (optend = strchr(opt, ',')) + *optend++ = 0; + if (not *opt) + continue; + if (optarg = strchr(opt, '=')) + *optarg++ = 0; + if ((opti = find_opt(glbl_opts, opt, optarg)) > 0) + { + if (opti == 1) // reveal + e->reveal = 1; + else if (opti == 2) // hide + e->reveal = 0; + } + else if (opti == 0 && + (opti = find_opt(em->options, opt, optarg)) > 0) + { + if (em->option(e, opti, optarg)) + break; + } + else + { + if (opti == 0) + export_error("%s: unknown option", opt); + else if (optarg) + export_error("%s: takes no arg", opt); + else + export_error("%s: missing arg", opt); + break; + } + } + if (opt == 0) + return e; + + if (em->close) + em->close(e); + } + free(e); + } + else + export_error("out of memory"); + } + else + export_error("unknown format: %s", fmt); + free(fmt); + } + else + export_error("out of memory"); + return 0; +} + + +void export_close(struct export *e) +{ + if (e->mod->close) + e->mod->close(e); + free(e->fmt_str); + free(e); +} + + +static char * hexnum(char *buf, unsigned int num) +{ + char *p = buf + 5; + + num &= 0xffff; + *--p = 0; + do + { + *--p = "0123456789abcdef"[num % 16]; + num /= 16; + } while (num); + return p; +} + + +static char * adjust(char *p, char *str, char fill, int width) +{ + int l = width - strlen(str); + + while (l-- > 0) + *p++ = fill; + while (*p = *str++) + p++; + return p; +} + + +char * export_mkname(struct export *e, char *fmt, struct vt_page *vtp, char *usr) +{ + char bbuf[1024]; + char *p = bbuf; + + while (*p = *fmt++) + if (*p++ == '%') + { + char buf[32], buf2[32]; + int width = 0; + + p--; + while (*fmt >= '0' && *fmt <= '9') + width = width*10 + *fmt++ - '0'; + + switch (*fmt++) + { + case '%': + p = adjust(p, "%", '%', width); + break; + case 'e': // extension + p = adjust(p, e->mod->extension, '.', width); + break; + case 'p': // pageno[.subno] + if (vtp->subno) + p = adjust(p,strcat(strcat(hexnum(buf, vtp->pgno), + "."), hexnum(buf2, vtp->subno)), ' ', width); + else + p = adjust(p, hexnum(buf, vtp->pgno), ' ', width); + break; + case 'S': // subno + p = adjust(p, hexnum(buf, vtp->subno), '0', width); + break; + case 'P': // pgno + p = adjust(p, hexnum(buf, vtp->pgno), '0', width); + break; + case 's': // user strin + p = adjust(p, usr, ' ', width); + break; + //TODO: add date, channel name, ... + } + } + p = strdup(bbuf); + if (not p) + export_error("out of memory"); + return p; +} + + +static void fmt_page(struct export *e, struct fmt_page *pg, struct vt_page *vtp) +{ + char buf[16]; + int x, y; + u8 *p = vtp->data[0]; + + pg->dbl = 0; + + sprintf(buf, "\2%x.%02x\7", vtp->pgno, vtp->subno & 0xff); + + for (y = 0; y < H; y++) + { + struct fmt_char c; + int last_ch = ' '; + int dbl = 0, hold = 0; + + c.fg = 7; + c.bg = 0; + c.attr = 0; + + for (x = 0; x < W; ++x) + { + c.ch = *p++; + if (y == 0 && x < 8) + c.ch = buf[x]; + switch (c.ch) + { + case 0x00 ... 0x07: /* alpha + fg color */ + c.fg = c.ch & 7; + c.attr &= ~(EA_GRAPHIC | EA_CONCEALED); + goto ctrl; + case 0x08: /* flash */ + c.attr |= EA_BLINK; + goto ctrl; + case 0x09: /* steady */ + c.attr &= ~EA_BLINK; + goto ctrl; + case 0x0a: /* end box */ + case 0x0b: /* start box */ + goto ctrl; + case 0x0c: /* normal height */ + c.attr &= EA_DOUBLE; + goto ctrl; + case 0x0d: /* double height */ + if (y < H-2) /* ignored on last 2 lines */ + { + c.attr |= EA_DOUBLE; + dbl = 1; + } + goto ctrl; + case 0x10 ... 0x17: /* gfx + fg color */ + c.fg = c.ch & 7; + c.attr |= EA_GRAPHIC; + c.attr &= ~EA_CONCEALED; + goto ctrl; + case 0x18: /* conceal */ + c.attr |= EA_CONCEALED; + goto ctrl; + case 0x19: /* contiguous gfx */ + c.attr &= ~EA_SEPARATED; + goto ctrl; + case 0x1a: /* separate gfx */ + c.attr |= EA_SEPARATED; + goto ctrl; + case 0x1c: /* black bg */ + c.bg = 0; + goto ctrl; + case 0x1d: /* new bg */ + c.bg = c.fg; + goto ctrl; + case 0x1e: /* hold gfx */ + hold = 1; + goto ctrl; + case 0x1f: /* release gfx */ + hold = 0; + goto ctrl; + + case 0x0e: /* SO */ + case 0x0f: /* SI */ + case 0x1b: /* ESC */ + c.ch = ' '; + break; + + ctrl: + c.ch = ' '; + if (hold && (c.attr & EA_GRAPHIC)) + c.ch = last_ch; + break; + } + if (c.attr & EA_GRAPHIC) + if ((c.ch & 0xa0) == 0x20) + { + last_ch = c.ch; + c.ch += (c.ch & 0x40) ? 32 : -32; + } + if (c.attr & EA_CONCEALED) + if (not e->reveal) + c.ch = ' '; + pg->data[y][x] = c; + } + if (dbl) + { + pg->dbl |= 1 << y; + for (x = 0; x < W; ++x) + { + if (~pg->data[y][x].attr & EA_DOUBLE) + pg->data[y][x].attr |= EA_HDOUBLE; + pg->data[y+1][x] = pg->data[y][x]; + pg->data[y+1][x].ch = ' '; + } + y++; + p += W; + } + } + pg->hid = pg->dbl << 1; +} + + +int export(struct export *e, struct vt_page *vtp, char *name) +{ + struct fmt_page pg[1]; + + fmt_page(e, pg, vtp); + return e->mod->output(e, name, pg); +} diff --git a/util/alevt/export.h b/util/alevt/export.h new file mode 100644 index 0000000..a08875c --- /dev/null +++ b/ util/alevt/export.h@@ -0,0 +1,66 @@ +#ifndef EXPORT_H +#define EXPORT_H + +#include "vt.h" +#include "misc.h" + + +struct fmt_char +{ + u8 ch, fg, bg, attr; +}; + +#define EA_DOUBLE 1 // double height char +#define EA_HDOUBLE 2 // single height char in double height line +#define EA_BLINK 4 // blink +#define EA_CONCEALED 8 // concealed +#define EA_GRAPHIC 16 // graphic symbol +#define EA_SEPARATED 32 // use separated graphic symbol + +#define E_DEF_FG 7 +#define E_DEF_BG 0 +#define E_DEF_ATTR 0 + + +struct fmt_page +{ + struct vt_page *vtp; + u32 dbl, hid; + struct fmt_char data[H][W]; +}; + + +struct export +{ + struct export_module *mod; // module type + char *fmt_str; // saved option string (splitted) + // global options + int reveal; // reveal hidden chars + // local data for module's use. initialized to 0. + struct { int dummy; } data[0]; +}; + + +struct export_module +{ + char *fmt_name; // the format type name (ASCII/HTML/PNG/...) + char *extension; // the default file name extension + char **options; // module options + int local_size; + int (*open)(struct export *fmt); + void (*close)(struct export *fmt); + int (*option)(struct export *fmt, int opt, char *arg); + int (*output)(struct export *fmt, char *name, struct fmt_page *pg); +}; + + +extern struct export_module *modules[]; // list of modules (for help msgs) +void export_error(char *str, ...); // set error +char *export_errstr(void); // return last error +char *export_mkname(struct export *e, char *fmt, struct vt_page *vtp, char *usr); + + +struct export *export_open(char *fmt); +void export_close(struct export *e); +int export(struct export *e, struct vt_page *vtp, char *user_str); +#endif diff --git a/util/alevt/fdset.c b/util/alevt/fdset.c new file mode 100644 index 0000000..99edac4 --- /dev/null +++ b/ util/alevt/fdset.c@@ -0,0 +1,97 @@ +#include <stdlib.h> +#include <unistd.h> +#include <sys/time.h> +#include "dllist.h" +#include "misc.h" +#include "fdset.h" + +struct fdset fds[1]; /* global fd list */ + + +int fdset_init(struct fdset *fds) +{ + dl_init(fds->list); + fds->del_count = 0; + return 0; +} + + +int fdset_add_fd(struct fdset *fds, int fd, void *handler, void *data) +{ + struct fdset_node *fn; + + if (fd < 0) + return -1; + if (handler == 0) + return -1; + + for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next) + if (fn->fd == fd) + return -1; + + if (not(fn = malloc(sizeof(*fn)))) + return -1; + fn->fd = fd; + fn->handler = handler; + fn->data = data; + dl_insert_last(fds->list, fn->node); + return 0; +} + + +int fdset_del_fd(struct fdset *fds, int fd) +{ + struct fdset_node *fn; + + for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next) + if (fn->fd == fd) + { + dl_remove(fn->node); + free(fn); + fds->del_count++; + return 0; + } + return -1; +} + + +int fdset_select(struct fdset *fds, int timeout) +{ + struct fdset_node *fn; + fd_set rfds[1]; + struct timeval tv[1], *tvp = 0; + int max_fd, x, del_count; + + FD_ZERO(rfds); + max_fd = 0; + for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next) + { + FD_SET(fn->fd, rfds); + if (fn->fd >= max_fd) + max_fd = fn->fd + 1; + } + + if (timeout >= 0) + { + tv->tv_sec = timeout/1000; + tv->tv_usec = timeout%1000*1000; + tvp = tv; + } + + x = select(max_fd, rfds, 0, 0, tvp); + if (x <= 0) + return x; + + /* A little bit complicated. A called handler may modify the fdset... */ +restart: + del_count = fds->del_count; + for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next) + if (FD_ISSET(fn->fd, rfds)) + { + FD_CLR(fn->fd, rfds); + fn->handler(fn->data, fn->fd); + if (fds->del_count != del_count) + goto restart; + } + return 1; +} diff --git a/util/alevt/fdset.h b/util/alevt/fdset.h new file mode 100644 index 0000000..4b786e6 --- /dev/null +++ b/ util/alevt/fdset.h@@ -0,0 +1,28 @@ +#ifndef FDSET_H +#define FDSET_H + +#include "dllist.h" + + +struct fdset +{ + struct dl_head list[1]; + int del_count; +}; + + +struct fdset_node /*internal*/ +{ + struct dl_node node[1]; + int fd; + void (*handler)(void *data, int fd); + void *data; +}; + +extern struct fdset fds[1]; /* global fd list */ + +int fdset_init(struct fdset *fds); +int fdset_add_fd(struct fdset *fds, int fd, void *handler, void *data); +int fdset_del_fd(struct fdset *fds, int fd); +int fdset_select(struct fdset *fds, int timeout /*millisec*/); +#endif diff --git a/util/alevt/font.c b/util/alevt/font.c new file mode 100644 index 0000000..da0e448 --- /dev/null +++ b/ util/alevt/font.c@@ -0,0 +1,5 @@ +#define static /* I want them global */ +#include "font1.xbm" +#include "font2.xbm" +#include "font3.xbm" +#include "font4.xbm" diff --git a/util/alevt/font.h b/util/alevt/font.h new file mode 100644 index 0000000..c17c4bc --- /dev/null +++ b/ util/alevt/font.h@@ -0,0 +1,19 @@ +#ifndef FONT_H +#define FONT_H + +#include "fontsize.h" /* the #defines from font?.xbm */ + +#if font1_width != font2_width || font1_height != font2_height +#error different font sizes. +#endif + +extern unsigned char font1_bits[]; +extern unsigned char font2_bits[]; +extern unsigned char font3_bits[]; +extern unsigned char font4_bits[]; + +#define font_width font1_width +#define font_height font1_height +#define CW (font_width/32) /* pixel width of a character */ +#define CH (font_height/8) /* pixel height of a character */ +#endif diff --git a/util/alevt/hamm.c b/util/alevt/hamm.c new file mode 100644 index 0000000..c44a902 --- /dev/null +++ b/ util/alevt/hamm.c@@ -0,0 +1,229 @@ +#include "vt.h" +#include "hamm.h" + +// table to decode hamm8/4 encoded bytes. +// the low 4 bits are the (corrected) data bits +// bit 8 is set if there was a single bit error +// bit 12 is set if there was an uncorrectable error + +// the idea: you may add up to 15 words and get the +// number of single bit errors in b8-b11 and the number +// of double errors in b12-b15 + + +static unsigned short hammtab[256] = +{ + 0x0101, 0x100f, 0x0001, 0x0101, 0x100f, 0x0100, 0x0101, 0x100f, + 0x100f, 0x0102, 0x0101, 0x100f, 0x010a, 0x100f, 0x100f, 0x0107, + 0x100f, 0x0100, 0x0101, 0x100f, 0x0100, 0x0000, 0x100f, 0x0100, + 0x0106, 0x100f, 0x100f, 0x010b, 0x100f, 0x0100, 0x0103, 0x100f, + 0x100f, 0x010c, 0x0101, 0x100f, 0x0104, 0x100f, 0x100f, 0x0107, + 0x0106, 0x100f, 0x100f, 0x0107, 0x100f, 0x0107, 0x0107, 0x0007, + 0x0106, 0x100f, 0x100f, 0x0105, 0x100f, 0x0100, 0x010d, 0x100f, + 0x0006, 0x0106, 0x0106, 0x100f, 0x0106, 0x100f, 0x100f, 0x0107, + 0x100f, 0x0102, 0x0101, 0x100f, 0x0104, 0x100f, 0x100f, 0x0109, + 0x0102, 0x0002, 0x100f, 0x0102, 0x100f, 0x0102, 0x0103, 0x100f, + 0x0108, 0x100f, 0x100f, 0x0105, 0x100f, 0x0100, 0x0103, 0x100f, + 0x100f, 0x0102, 0x0103, 0x100f, 0x0103, 0x100f, 0x0003, 0x0103, + 0x0104, 0x100f, 0x100f, 0x0105, 0x0004, 0x0104, 0x0104, 0x100f, + 0x100f, 0x0102, 0x010f, 0x100f, 0x0104, 0x100f, 0x100f, 0x0107, + 0x100f, 0x0105, 0x0105, 0x0005, 0x0104, 0x100f, 0x100f, 0x0105, + 0x0106, 0x100f, 0x100f, 0x0105, 0x100f, 0x010e, 0x0103, 0x100f, + 0x100f, 0x010c, 0x0101, 0x100f, 0x010a, 0x100f, 0x100f, 0x0109, + 0x010a, 0x100f, 0x100f, 0x010b, 0x000a, 0x010a, 0x010a, 0x100f, + 0x0108, 0x100f, 0x100f, 0x010b, 0x100f, 0x0100, 0x010d, 0x100f, + 0x100f, 0x010b, 0x010b, 0x000b, 0x010a, 0x100f, 0x100f, 0x010b, + 0x010c, 0x000c, 0x100f, 0x010c, 0x100f, 0x010c, 0x010d, 0x100f, + 0x100f, 0x010c, 0x010f, 0x100f, 0x010a, 0x100f, 0x100f, 0x0107, + 0x100f, 0x010c, 0x010d, 0x100f, 0x010d, 0x100f, 0x000d, 0x010d, + 0x0106, 0x100f, 0x100f, 0x010b, 0x100f, 0x010e, 0x010d, 0x100f, + 0x0108, 0x100f, 0x100f, 0x0109, 0x100f, 0x0109, 0x0109, 0x0009, + 0x100f, 0x0102, 0x010f, 0x100f, 0x010a, 0x100f, 0x100f, 0x0109, + 0x0008, 0x0108, 0x0108, 0x100f, 0x0108, 0x100f, 0x100f, 0x0109, + 0x0108, 0x100f, 0x100f, 0x010b, 0x100f, 0x010e, 0x0103, 0x100f, + 0x100f, 0x010c, 0x010f, 0x100f, 0x0104, 0x100f, 0x100f, 0x0109, + 0x010f, 0x100f, 0x000f, 0x010f, 0x100f, 0x010e, 0x010f, 0x100f, + 0x0108, 0x100f, 0x100f, 0x0105, 0x100f, 0x010e, 0x010d, 0x100f, + 0x100f, 0x010e, 0x010f, 0x100f, 0x010e, 0x000e, 0x100f, 0x010e, +}; + +#if 0 // this information is contained in hamm24par bit 5 +// simple parity table (sum of 1 bits modulo 2) + + +static char odd_parity[256] = +{ + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 +}; +#endif + +// this table generates the parity checks for hamm24/18 decoding. +// bit 0 is for test A, 1 for B, ... +// thanks to R. Gancarz for this fine table *g* + + +static char hamm24par[3][256] = +{ + { // parities of first byte + 0, 33, 34, 3, 35, 2, 1, 32, 36, 5, 6, 39, 7, 38, 37, 4, + 37, 4, 7, 38, 6, 39, 36, 5, 1, 32, 35, 2, 34, 3, 0, 33, + 38, 7, 4, 37, 5, 36, 39, 6, 2, 35, 32, 1, 33, 0, 3, 34, + 3, 34, 33, 0, 32, 1, 2, 35, 39, 6, 5, 36, 4, 37, 38, 7, + 39, 6, 5, 36, 4, 37, 38, 7, 3, 34, 33, 0, 32, 1, 2, 35, + 2, 35, 32, 1, 33, 0, 3, 34, 38, 7, 4, 37, 5, 36, 39, 6, + 1, 32, 35, 2, 34, 3, 0, 33, 37, 4, 7, 38, 6, 39, 36, 5, + 36, 5, 6, 39, 7, 38, 37, 4, 0, 33, 34, 3, 35, 2, 1, 32, + 40, 9, 10, 43, 11, 42, 41, 8, 12, 45, 46, 15, 47, 14, 13, 44, + 13, 44, 47, 14, 46, 15, 12, 45, 41, 8, 11, 42, 10, 43, 40, 9, + 14, 47, 44, 13, 45, 12, 15, 46, 42, 11, 8, 41, 9, 40, 43, 10, + 43, 10, 9, 40, 8, 41, 42, 11, 15, 46, 45, 12, 44, 13, 14, 47, + 15, 46, 45, 12, 44, 13, 14, 47, 43, 10, 9, 40, 8, 41, 42, 11, + 42, 11, 8, 41, 9, 40, 43, 10, 14, 47, 44, 13, 45, 12, 15, 46, + 41, 8, 11, 42, 10, 43, 40, 9, 13, 44, 47, 14, 46, 15, 12, 45, + 12, 45, 46, 15, 47, 14, 13, 44, 40, 9, 10, 43, 11, 42, 41, 8 + }, { // parities of second byte + 0, 41, 42, 3, 43, 2, 1, 40, 44, 5, 6, 47, 7, 46, 45, 4, + 45, 4, 7, 46, 6, 47, 44, 5, 1, 40, 43, 2, 42, 3, 0, 41, + 46, 7, 4, 45, 5, 44, 47, 6, 2, 43, 40, 1, 41, 0, 3, 42, + 3, 42, 41, 0, 40, 1, 2, 43, 47, 6, 5, 44, 4, 45, 46, 7, + 47, 6, 5, 44, 4, 45, 46, 7, 3, 42, 41, 0, 40, 1, 2, 43, + 2, 43, 40, 1, 41, 0, 3, 42, 46, 7, 4, 45, 5, 44, 47, 6, + 1, 40, 43, 2, 42, 3, 0, 41, 45, 4, 7, 46, 6, 47, 44, 5, + 44, 5, 6, 47, 7, 46, 45, 4, 0, 41, 42, 3, 43, 2, 1, 40, + 48, 25, 26, 51, 27, 50, 49, 24, 28, 53, 54, 31, 55, 30, 29, 52, + 29, 52, 55, 30, 54, 31, 28, 53, 49, 24, 27, 50, 26, 51, 48, 25, + 30, 55, 52, 29, 53, 28, 31, 54, 50, 27, 24, 49, 25, 48, 51, 26, + 51, 26, 25, 48, 24, 49, 50, 27, 31, 54, 53, 28, 52, 29, 30, 55, + 31, 54, 53, 28, 52, 29, 30, 55, 51, 26, 25, 48, 24, 49, 50, 27, + 50, 27, 24, 49, 25, 48, 51, 26, 30, 55, 52, 29, 53, 28, 31, 54, + 49, 24, 27, 50, 26, 51, 48, 25, 29, 52, 55, 30, 54, 31, 28, 53, + 28, 53, 54, 31, 55, 30, 29, 52, 48, 25, 26, 51, 27, 50, 49, 24 + }, { // parities of third byte + 63, 14, 13, 60, 12, 61, 62, 15, 11, 58, 57, 8, 56, 9, 10, 59, + 10, 59, 56, 9, 57, 8, 11, 58, 62, 15, 12, 61, 13, 60, 63, 14, + 9, 56, 59, 10, 58, 11, 8, 57, 61, 12, 15, 62, 14, 63, 60, 13, + 60, 13, 14, 63, 15, 62, 61, 12, 8, 57, 58, 11, 59, 10, 9, 56, + 8, 57, 58, 11, 59, 10, 9, 56, 60, 13, 14, 63, 15, 62, 61, 12, + 61, 12, 15, 62, 14, 63, 60, 13, 9, 56, 59, 10, 58, 11, 8, 57, + 62, 15, 12, 61, 13, 60, 63, 14, 10, 59, 56, 9, 57, 8, 11, 58, + 11, 58, 57, 8, 56, 9, 10, 59, 63, 14, 13, 60, 12, 61, 62, 15, + 31, 46, 45, 28, 44, 29, 30, 47, 43, 26, 25, 40, 24, 41, 42, 27, + 42, 27, 24, 41, 25, 40, 43, 26, 30, 47, 44, 29, 45, 28, 31, 46, + 41, 24, 27, 42, 26, 43, 40, 25, 29, 44, 47, 30, 46, 31, 28, 45, + 28, 45, 46, 31, 47, 30, 29, 44, 40, 25, 26, 43, 27, 42, 41, 24, + 40, 25, 26, 43, 27, 42, 41, 24, 28, 45, 46, 31, 47, 30, 29, 44, + 29, 44, 47, 30, 46, 31, 28, 45, 41, 24, 27, 42, 26, 43, 40, 25, + 30, 47, 44, 29, 45, 28, 31, 46, 42, 27, 24, 41, 25, 40, 43, 26, + 43, 26, 25, 40, 24, 41, 42, 27, 31, 46, 45, 28, 44, 29, 30, 47 + } +}; + +// table to extract the lower 4 bit from hamm24/18 encoded bytes + + +static char hamm24val[256] = +{ + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, + 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7, + 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9, + 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 11, 11, 11, 11, + 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, + 14, 14, 14, 14, 15, 15, 15, 15, 14, 14, 14, 14, 15, 15, 15, 15, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, + 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7, + 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9, + 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 11, 11, 11, 11, + 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, + 14, 14, 14, 14, 15, 15, 15, 15, 14, 14, 14, 14, 15, 15, 15, 15 +}; + +// mapping from parity checks made by table hamm24par to error +// results return by hamm24. +// (0 = no error, 0x0100 = single bit error, 0x1000 = double error) + + +static short hamm24err[64] = +{ + 0x0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, +}; + +// mapping from parity checks made by table hamm24par to faulty bit +// in the decoded 18 bit word. + + +static int hamm24cor[64] = +{ + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, + 0x00000, 0x00000, 0x00000, 0x00001, 0x00000, 0x00002, 0x00004, 0x00008, + 0x00000, 0x00010, 0x00020, 0x00040, 0x00080, 0x00100, 0x00200, 0x00400, + 0x00000, 0x00800, 0x01000, 0x02000, 0x04000, 0x08000, 0x10000, 0x20000, + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, +}; + + +int hamm8(u8 *p, int *err) +{ + int a = hammtab[p[0]]; + *err += a; + return a & 15; +} + + +int hamm16(u8 *p, int *err) +{ + int a = hammtab[p[0]]; + int b = hammtab[p[1]]; + *err += a; + *err += b; + return (a & 15) | (b & 15) * 16; +} + + +int hamm24(u8 *p, int *err) +{ + int e = hamm24par[0][p[0]] ^ hamm24par[1][p[1]] ^ hamm24par[2][p[2]]; + int x = hamm24val[p[0]] + p[1] % 128 * 16 + p[2] % 128 * 2048; + *err += hamm24err[e]; + return x ^ hamm24cor[e]; +} + + +int chk_parity(u8 *p, int n) +{ + int err; + for (err = 0; n--; p++) + if (hamm24par[0][*p] & 32) + *p &= 0x7f; + else + *p = BAD_CHAR, err++; + return err; +} diff --git a/util/alevt/hamm.h b/util/alevt/hamm.h new file mode 100644 index 0000000..3b8c8ad --- /dev/null +++ b/ util/alevt/hamm.h@@ -0,0 +1,7 @@ +#ifndef HAMM_H +#define HAMM_H +int hamm8(u8 *p, int *err); +int hamm16(u8 *p, int *err); +int hamm24(u8 *p, int *err); +int chk_parity(u8 *p, int n); +#endif diff --git a/util/alevt/help.c b/util/alevt/help.c new file mode 100644 index 0000000..b867855 --- /dev/null +++ b/ util/alevt/help.c@@ -0,0 +1,83 @@ +#include "vt.h" +#include "misc.h" + +#define VFILL " " +#define HELP_HEADER \ +"........\6AleVT Online Help System ", \ +" \22`p0`0 p `0pppp ", \ +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", \ +"\4\35\22\177,\177j5\177.! +t>! j5 \7"VFILL VERSION" \34", \ +" \22# #\42!\42# \42 \42! ", +#define FLOF_DATA \ + 1, { {0x100,ANY_SUB}, {0x200,ANY_SUB}, {0x300,ANY_SUB}, \ + {0x400,ANY_SUB}, {0x0ff,ANY_SUB}, {0x100,ANY_SUB} } + + +struct vt_page help_pages[] = +{ + { 0x900, 0, -1, 0, 0, (1<<26)-1, { +#include "vt900.out" + }, FLOF_DATA }, + + { 0x901, 1, -1, 0, 0, (1<<26)-1, { +#include "vt901.out" + }, FLOF_DATA }, + + { 0x902, 1, -1, 0, 0, (1<<26)-1, { +#include "vt902.out" + }, FLOF_DATA }, + + { 0x903, 1, -1, 0, 0, (1<<26)-1, { +#include "vt903.out" + }, FLOF_DATA }, + + { 0x904, 1, -1, 0, 0, (1<<26)-1, { +#include "vt904.out" + }, FLOF_DATA }, + + { 0x905, 2, -1, 0, 0, (1<<26)-1, { +#include "vt905.out" + }, FLOF_DATA }, + + { 0x906, 1, -1, 0, 0, (1<<26)-1, { +#include "vt906.out" + }, FLOF_DATA }, + + { 0x907, 2, -1, 0, 0, (1<<26)-1, { +#include "vt907.out" + }, FLOF_DATA }, + + { 0x908, 1, -1, 0, 0, (1<<26)-1, { +#include "vt908.out" + }, FLOF_DATA }, + + { 0x909, 0, -1, 0, 0, (1<<26)-1, { +#include "vt909.out" + }, FLOF_DATA }, + + { 0x910, 2, -1, 0, 0, (1<<26)-1, { +#include "vt910.out" + }, FLOF_DATA }, + + { 0x911, 1, -1, 0, 0, (1<<26)-1, { +#include "vt911.out" + }, FLOF_DATA }, + + { 0x912, 2, -1, 0, 0, (1<<26)-1, { +#include "vt912.out" + }, FLOF_DATA }, + + { 0x913, 1, -1, 0, 0, (1<<26)-1, { +#include "vt913.out" + }, FLOF_DATA }, + + { 0x914, 0, -1, 0, 0, (1<<26)-1, { +#include "vt914.out" + }, FLOF_DATA }, + + { 0x915, 0, -1, 0, 0, (1<<26)-1, { +#include "vt915.out" + }, FLOF_DATA }, +}; + +const int nr_help_pages = NELEM(help_pages); diff --git a/util/alevt/help.h b/util/alevt/help.h new file mode 100644 index 0000000..5df47fc --- /dev/null +++ b/ util/alevt/help.h@@ -0,0 +1,8 @@ +#ifndef HELP_H +#define HELP_H + +#include "vt.h" + +extern struct vt_page help_pages[]; +extern const int nr_help_pages; +#endif diff --git a/util/alevt/icon.xbm b/util/alevt/icon.xbm new file mode 100644 index 0000000..27255a4 --- /dev/null +++ b/ util/alevt/icon.xbm@@ -0,0 +1,17 @@ +#define icon_width 58 +#define icon_height 20 +static unsigned char icon_bits[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x03, 0x0f, 0x30, 0xfe, 0xff, 0xf8, 0x11, 0x00, 0x03, + 0x0f, 0x30, 0xfe, 0xff, 0xf8, 0x11, 0x00, 0x03, 0xc5, 0x23, 0xaa, 0xaa, + 0xa8, 0xf1, 0xf1, 0x03, 0xc6, 0x22, 0xfe, 0xd5, 0x58, 0xb1, 0xb1, 0x02, + 0x45, 0x23, 0x06, 0xaa, 0xa8, 0x51, 0x51, 0x01, 0xc6, 0x22, 0x06, 0xd6, + 0x58, 0xb1, 0xb1, 0x02, 0x45, 0x23, 0x62, 0xac, 0xa8, 0x51, 0x51, 0x01, + 0xc6, 0x22, 0x62, 0xd4, 0x58, 0xb1, 0xb1, 0x02, 0x45, 0x23, 0x62, 0xac, + 0xa8, 0x51, 0x51, 0x01, 0xc6, 0x23, 0x62, 0xd4, 0xf8, 0xb1, 0xb1, 0x02, + 0x05, 0x20, 0x02, 0xae, 0x61, 0x58, 0x51, 0x01, 0x06, 0x20, 0x02, 0x56, + 0x61, 0xa8, 0xb1, 0x02, 0xc5, 0x23, 0xe2, 0xab, 0x06, 0x56, 0x51, 0x01, + 0x46, 0x22, 0xe2, 0x57, 0x05, 0xaa, 0xb1, 0x02, 0xc7, 0x23, 0x06, 0xfe, + 0x9f, 0xff, 0xf1, 0x03, 0xc7, 0x23, 0x06, 0xfe, 0x9f, 0xff, 0xf1, 0x03, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x03, }; diff --git a/util/alevt/lang.c b/util/alevt/lang.c new file mode 100644 index 0000000..3a49307 --- /dev/null +++ b/ util/alevt/lang.c@@ -0,0 +1,393 @@ +#include <string.h> +#include <ctype.h> +#include "misc.h" +#include "vt.h" +#include "lang.h" + +int latin1 = -1; + + +static u8 lang_char[256]; +static u8 lang_chars[1+8+8][16] = +{ + { 0, 0x23,0x24,0x40,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x7b,0x7c,0x7d,0x7e }, + + // for latin-1 font + // English (100%) + { 0, '£', '$', '@', '«', '½', '»', '¬', '#', '', '¼', '¦', '¾', '÷' }, + // German (100%) + { 0, '#', '$', '§', 'Ä', 'Ö', 'Ü', '^', '_', '°', 'ä', 'ö', 'ü', 'ß' }, + // Swedish/Finnish/Hungarian (100%) + { 0, '#', '¤', 'É', 'Ä', 'Ö', 'Å', 'Ü', '_', 'é', 'ä', 'ö', 'å', 'ü' }, + // Italian (100%) + { 0, '£', '$', 'é', '°', 'ç', '»', '¬', '#', 'ù', 'à', 'ò', 'è', 'ì' }, + // French (100%) + { 0, 'é', 'ï', 'à', 'ë', 'ê', 'ù', 'î', '#', 'è', 'â', 'ô', 'û', 'ç' }, + // Portuguese/Spanish (100%) + { 0, 'ç', '$', '¡', 'á', 'é', 'í', 'ó', 'ú', '¿', 'ü', 'ñ', 'è', 'à' }, + // Czech/Slovak (60%) + { 0, '#', 'u', 'c', 't', 'z', 'ý', 'í', 'r', 'é', 'á', 'e', 'ú', 's' }, + // reserved (English mapping) + { 0, '£', '$', '@', '«', '½', '»', '¬', '#', '', '¼', '¦', '¾', '÷' }, + + // for latin-2 font + // Polish (100%) + { 0, '#', 'ñ', '±', '¯', '¦', '£', 'æ', 'ó', 'ê', '¿', '¶', '³', '¼' }, + // German (100%) + { 0, '#', '$', '§', 'Ä', 'Ö', 'Ü', '^', '_', '°', 'ä', 'ö', 'ü', 'ß' }, + // Estonian (100%) + { 0, '#', 'õ', '©', 'Ä', 'Ö', '®', 'Ü', 'Õ', '¹', 'ä', 'ö', '¾', 'ü' }, + // Lettish/Lithuanian (90%) + { 0, '#', '$', '©', 'ë', 'ê', '®', 'è', 'ü', '¹', '±', 'u', '¾', 'i' }, + // French (90%) + { 0, 'é', 'i', 'a', 'ë', 'ì', 'u', 'î', '#', 'e', 'â', 'ô', 'u', 'ç' }, + // Serbian/Croation/Slovenian (100%) + { 0, '#', 'Ë', 'È', 'Æ', '®', 'Ð', '©', 'ë', 'è', 'æ', '®', 'ð', '¹' }, + // Czech/Slovak (100%) + { 0, '#', 'ù', 'è', '»', '¾', 'ý', 'í', 'ø', 'é', 'á', 'ì', 'ú', '¹' }, + // Rumanian (95%) + { 0, '#', '¢', 'Þ', 'Â', 'ª', 'Ã', 'Î', 'i', 'þ', 'â', 'º', 'ã', 'î' }, +}; + +/* Yankable latin charset :-) + !"#$%&'()*+,-./0123456789:;<=>? + @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ + `abcdefghijklmnopqrstuvwxyz{|}~ + ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ + ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß + àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ +*/ + + +static struct mark { u8 *g0, *latin1, *latin2; } marks[16] = +{ + /* none */ { "#", + "¤", + "$" }, + /* grave - ` */ { " aeiouAEIOU", + "`àèìòùÀÈÌÒÙ", + "`aeiouAEIOU" }, + /* acute - ' */ { " aceilnorsuyzACEILNORSUYZ", + "'ácéílnórsúýzÁCÉÍLNÓRSÚÝZ", + "'áæéíåñóà¶úý¼ÁÆÉÍÅÑÓÀ¦Úݬ" }, + /* cirumflex - ^ */ { " aeiouAEIOU", + "^âêîôûÂÊÎÔÛ", + "^âeîôuÂEÎÔU" }, + /* tilde - ~ */ { " anoANO", + "~ãñõÃÑÕ", + "~anoANO" }, + /* ??? - ¯ */ { "", + "", + "" }, + /* breve - u */ { "aA", + "aA", + "ãÃ" }, + /* abovedot - · */ { "zZ", + "zZ", + "¿¯" }, + /* diaeresis ¨ */ { "aeiouAEIOU", + "äëïöüÄËÏÖÜ", + "äëiöüÄËIÖÜ" }, + /* ??? - . */ { "", + "", + "" }, + /* ringabove - ° */ { " auAU", + "°åuÅU", + "°aùAÙ" }, + /* cedilla - ¸ */ { "cstCST", + "çstÇST", + "çºþǪÞ" }, + /* ??? - _ */ { " ", + "_", + "_" }, + /* dbl acute - " */ { " ouOU", + "\"ouOU", + "\"õûÕÛ" }, + /* ogonek - \, */ { "aeAE", + "aeAE", + "±ê¡Ê" }, + /* caron - v */ { "cdelnrstzCDELNRSTZ", + "cdelnrstzCDELNRSTZ", + "èïìµòø¹»¾ÈÏÌ¥ÒØ©«®" }, +}; + + +static u8 g2map_latin1[] = + /*0123456789abcdef*/ + " ¡¢£$¥#§¤'\"« " + "°±²³×µ¶·÷'\"»¼½¾¿" + " `´^~ ¨.°¸_\" " + "_¹®© " + " ÆЪH ILLØ ºÞTNn" + "Kædðhiillø ßþtn\x7f"; + + +static u8 g2map_latin2[] = + /*0123456789abcdef*/ + " icL$Y#§¤'\"< " + "° ×u ÷'\"> " + " `´^~ ¢ÿ¨.°¸_½²·" + "- RC " + " ÐaH iL£O opTNn" + "K ðdhiil³o ßptn\x7f"; + + +void lang_init(void) +{ + int i; + + memset(lang_char, 0, sizeof(lang_char)); + for (i = 1; i <= 13; i++) + lang_char[lang_chars[0][i]] = i; +} + + +void conv2latin(u8 *p, int n, int lang) +{ + int c, gfx = 0, lat=0; + + if ((latin1 == KOI8) && lang==12) { /* russian */ + while (n--) { + c=*p; + + if(c==0x1b) lat = !lat; /* ESC switches languages inside page */ + + if ( is_koi(c)) { + if (not gfx || (c & 0xa0) != 0x20) { + if(!lat) conv2koi8(p); + } + } + else if ((c & 0xe8) == 0) + gfx = c & 0x10; + p++; + } + } +else if ((latin1 == GREEK) && lang==15) { /* Hellas */ + while (n--) { + c=*p; + + if(c==0x1b) lat = !lat; /* ESC switches languages inside page */ + + if ( is_greek(c)) { + if (not gfx || (c & 0xa0) != 0x20) { + if(!lat) conv2greek(p); + } + } + else if ((c & 0xe8) == 0) + gfx = c & 0x10; + p++; + } + } + + else { + while (n--) + { + if (lang_char[c = *p]) + { + if (not gfx || (c & 0xa0) != 0x20) + *p = lang_chars[lang + 1][lang_char[c]]; + } + else if ((c & 0xe8) == 0) + gfx = c & 0x10; + p++; + } + } +} + + +/* check for Greek chars - needs locale iso8859-7 set */ +int is_greek(int c) +{ + if( isalpha(c | 0x80)) return 1; + return 0; +} + + +/* check for russian chars - needs locale KOI8-R set */ +int is_koi(int c) +{ + if( isalpha(c | 0x80)) return 1; + if( c=='&' ) return 1; + return 0; +} + + +/* teletext to koi8-r conversion */ +void conv2koi8(u8 *p) +{ + u8 c; + static u8 l2koi[]={ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, + 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, + 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xFF, 0xFA, 0xFB, 0xFC, 0xFD, + 0xFE, 0xF9, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, + 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, + 0xDC, 0xDD, 0xDE, 0xDF + }; + + c= *p; + if ( (c >= 0x40) && (c <= 0x7f)) *p=l2koi[(c & 0x7f) - 0x40]; + if (c=='&') *p='Ù'; +} + + +/* teletext to iso8859-7 conversion */ +void conv2greek(u8 *p) +{ + u8 c; + static u8 l2greek[]={ +/* 1 @ 0x40->ú*/0xc0, +/* 2 A 0x41->Á*/0xc1, +/* 3 B 0x42->Â*/0xc2, +/* 4 C 0x43->Ã*/0xc3, +/* 5 D 0x44->Ä*/0xc4, +/* 6 E 0x45->Å*/0xc5, +/* 7 F 0x46->Æ*/0xc6, +/* 8 G 0x47->Ç*/0xc7, +/* 9 H 0x48->È*/0xc8, +/*10 I 0x49->É*/0xc9, +/*11 J 0x4a->Ê*/0xca, +/*12 K 0x4b->Ë*/0xcb, +/*13 L 0x4c->Ì*/0xcc, +/*14 M 0x4d->Í*/0xcd, +/*15 N 0x4e->Î*/0xce, +/*16 O 0x4f->Ï*/0xcf, +/*17 P 0x50->Ð*/0xd0, +/*18 Q 0x51->Ñ*/0xd1, +/*19 R 0x52->?*/0x52, +/*20 S 0x53->Ó*/0xd3, +/*21 T 0x54->Ô*/0xd4, +/*22 U 0x55->Õ*/0xd5, +/*23 V 0x56->Ö*/0xd6, +/*24 W 0x57->÷*/0xd7, +/*25 X 0x58->Ø*/0xd8, +/*26 Y 0x59->Ù*/0xd9, +/*27 Z 0x5a->?*/0x5a, +/*28 [ 0x5b->?*/0x5b, +/*!29 \ 0x5c->Ü*/0xdc, +/*!30 ] 0x5d->Ý*/0xdd, +/*!31 ^ 0x5e->Þ*/0xde, +/*!32 _ 0x5f->ß*/0xdf, +/*33 ` 0x60->?*/0x60, +/*!34 a 0x61->á*/0xe1, +/*!35 b 0x62->â*/0xe2, +/*!36 c 0x63->ã*/0xe3, +/*!37 d 0x64->ä*/0xe4, +/*!38 e 0x65->å*/0xe5, +/*!39 f 0x66->æ*/0xe6, +/*!40 g 0x67->ç*/0xe7, +/*!41 h 0x68->è*/0xe8, +/*!42 i 0x69->é*/0xe9, +/*!43 j 0x6a->ê*/0xea, +/*!44 k 0x6b->ë*/0xeb, +/*!45 l 0x6c->ì*/0xec, +/*!46 m 0x6d->í*/0xed, +/*!47 n 0x6e->î*/0xee, +/*!48 o 0x6f->ï*/0xef, +/*!49 p 0x70->ð*/0xf0, +/*!50 q 0x71->ñ*/0xf1, +/*!51 r 0x72->ò*/0xf2, +/*!52 s 0x73->ó*/0xf3, +/*!53 t 0x74->ô*/0xf4, +/*!54 u 0x75->õ*/0xf5, +/*!55 v 0x76->ö*/0xf6, +/*!56 w 0x77->÷*/0xf7, +/*!57 x 0x78->ø*/0xf8, +/*!58 y 0x79->ù*/0xf9, +/*59 z 0x7a->ú(ìå ôüíï)*/0xc0, +/*60 { 0x7b->?*/0x7b, +/*!61 | 0x7c->ü*/0xfc, +/*!62 } 0x7d->ý*/0xfd, +/*!63 ~ 0x7e->þ*/0xfe, +/*64 0x7f->?*/0x7f + }; + c= *p; + if ( (c >= 0x40) && (c <= 0x7f)) *p=l2greek[(c & 0x7f) - 0x40]; +} + + +void init_enhance(struct enhance *eh) +{ + eh->next_des = 0; +} + + +void add_enhance(struct enhance *eh, int dcode, u32 *t) +{ + + if (dcode == eh->next_des) + { + memcpy(eh->trip + dcode * 13, t, 13 * sizeof(*t)); + eh->next_des++; + } + else + eh->next_des = -1; +} + + +void enhance(struct enhance *eh, struct vt_page *vtp) +{ + int row = 0; + u32 *p, *e; + + if (eh->next_des < 1) + return; + + for (p = eh->trip, e = p + eh->next_des * 13; p < e; p++) + if (*p % 2048 != 2047) + { + int adr = *p % 64; + int mode = *p / 64 % 32; + int data = *p / 2048 % 128; + + if (adr < 40) + { + // col functions + switch (mode) + { + case 15: // char from G2 set + if (adr < W && row < H) + if (latin1==LATIN1) + vtp->data[row][adr] = g2map_latin1[data-32]; + else if (latin1==LATIN2) + vtp->data[row][adr] = g2map_latin2[data-32]; + break; + case 16 ... 31: // char from G0 set with diacritical mark + if (adr < W && row < H) + { + struct mark *mark = marks + (mode - 16); + u8 *x; + + if (x = strchr(mark->g0, data)) + if (latin1==LATIN1) + data = mark->latin1[x - mark->g0]; + else if (latin1==LATIN2) + data = mark->latin2[x - mark->g0]; + vtp->data[row][adr] = data; + } + break; + } + } + else + { + // row functions + if ((adr -= 40) == 0) + adr = 24; + + switch (mode) + { + case 1: // full row color + row = adr; + break; + case 4: // set active position + row = adr; + break; + case 7: // address row 0 (+ full row color) + if (adr == 23) + row = 0; + break; + } + } + } +} diff --git a/util/alevt/lang.h b/util/alevt/lang.h new file mode 100644 index 0000000..531f3b0 --- /dev/null +++ b/ util/alevt/lang.h@@ -0,0 +1,28 @@ +#ifndef LANG_H +#define LANG_H + +#include "misc.h" +#include "vt.h" + +extern int latin1; + +#define LATIN1 1 +#define LATIN2 2 +#define KOI8 3 +#define GREEK 4 + + +struct enhance +{ + int next_des; // next expected designation code + u32 trip[13*16]; // tripplets +}; + +void lang_init(void); +void conv2latin(u8 *p, int n, int lang); +void conv2koi8(u8 *p); +void conv2greek(u8 *p); +void init_enhance(struct enhance *eh); +void add_enhance(struct enhance *eh, int dcode, u32 *data); +void enhance(struct enhance *eh, struct vt_page *vtp); +#endif diff --git a/util/alevt/main.c b/util/alevt/main.c new file mode 100644 index 0000000..31fe9c3 --- /dev/null +++ b/ util/alevt/main.c@@ -0,0 +1,221 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <locale.h> +#include "vt.h" +#include "misc.h" +#include "fdset.h" +#include "xio.h" +#include "vbi.h" +#include "lang.h" +#include "cache.h" +#include "ui.h" + +static char *geometry; +static char *dpy_name; +static char *vbi_name = NULL; +static struct xio *xio; +static struct vbi *vbi; +static int erc = 1; +char *outfile = ""; +static char *channel; +static int ttpid = -1; +u_int16_t sid = 0; + + +static void usage(FILE *fp, int exitval) +{ + fprintf(fp, "\nUsage: %s [options]\n", prgname); + fprintf(fp, + "\n" + " Valid options:\t\tDefault:\n" + " -c <channel name>\t\t(none;dvb only)\n" + " -ch -child <ppp.ss>\t\t(none)\n" + " -cs -charset\t\tlatin-1\n" + " <latin-1/2/koi8-r/iso8859-7>\n" + " -h -help\n" + " -o <outfile>\t\t(none;dvb only)\n" + " -p -parent <ppp.ss>\t\t900\n" + " -s -sid <sid>\t\t(none;dvb only)\n" + " -t -ttpid <ttpid>\t\t(none;dvb only)\n" + " -v -vbi <vbidev>\t\t/dev/vbi\n" + " \t\t/dev/vbi0\n" + " \t\t/dev/video0\n" + " \t\t/dev/dvb/adapter0/demux0\n" + "\n" + " ppp.ss stands for a page number and an\n" + " optional subpage number (Example: 123.4).\n" + "\n" + " The -child option requires a parent\n" + " window. So it must be preceded by\n" + " a parent or another child window.\n" + ); + exit(exitval); +} + + +static int arg_pgno(char *p, int *subno) +{ + char *end; + int pgno; + + *subno = ANY_SUB; + if (*p) + { + pgno = strtol(p, &end, 16); + if ((*end == ':' || *end == '/' || *end == '.') && end[1]) + *subno = strtol(end + 1, &end, 16); + if (*end == 0) + if (pgno >= 0x100 && pgno <= 0x999) + if (*subno == ANY_SUB || (*subno >= 0x00 && *subno <= 0x3f7f)) + return pgno; + } + fatal("%s: invalid page number", p); +} + + +static struct vtwin * start(int argc, char **argv, struct vtwin *parent, + int pgno, int subno) +{ + static int valid_vbi_name = 1; + + if (!valid_vbi_name) + return parent; + + if (vbi == 0) + vbi = vbi_open(vbi_name, cache_open(), channel, outfile, sid, ttpid); + if (vbi == 0) + { + if (vbi_name) + error("cannot open device: %s", vbi_name); + valid_vbi_name = 0; + vbi = open_null_vbi(cache_open()); + } + if (vbi->cache) + vbi->cache->op->mode(vbi->cache, CACHE_MODE_ERC, erc); + + if (xio == 0) + xio = xio_open_dpy(dpy_name, argc, argv); + if (xio == 0) + fatal("cannot open display"); + + parent = vtwin_new(xio, vbi, geometry, parent, pgno, subno); + if (parent == 0) + fatal("cannot create window"); + + if (!valid_vbi_name) + { + if (vbi_name) + send_errmsg(vbi, "cannot open device: %s", vbi_name); + else + send_errmsg(vbi, "cannot open any device", vbi_name); + } + + return parent; +} + + +static int option(int argc, char **argv, int *ind, char **arg) +{ + static struct { char *nam, *altnam; int arg; } opts[] = { + { "-channel", "-c", 1 }, + { "-child", "-ch", 1 }, + { "-charset", "-cs", 1 }, + { "-help", "-h", 0 }, + { "-outfile", "-o", 1 }, + { "-parent", "-p", 1 }, + { "-sid", "-s", 1 }, + { "-ttpid", "-t", 1 }, + { "-vbi", "-v", 1 }, + }; + int i; + if (*ind >= argc) + return 0; + *arg = argv[(*ind)++]; + for (i = 0; i < NELEM(opts); ++i) + if (streq(*arg, opts[i].nam) || streq(*arg, opts[i].altnam)) + { + if (opts[i].arg) + if (*ind < argc) + *arg = argv[(*ind)++]; + else + fatal("option %s requires an argument", *arg); + return i+1; + } + if (**arg == '-') + { + fatal("%s: invalid option", *arg); + usage(stderr, 1); + } + return -1; +} + + +int main(int argc, char **argv) +{ + struct vtwin *parent = 0; + int pgno, subno; + int opt, ind; + char *arg; + sid = 0; + + setprgname(argv[0]); + fdset_init(fds); + + ind = 1; + while (opt = option(argc, argv, &ind, &arg)) + switch (opt) + { + + case 1: // channel + channel = arg; + break; + case 2: // child + if (parent == 0) + fatal("-child requires a parent window"); + pgno = arg_pgno(arg, &subno); + parent = start(argc, argv, parent, pgno, subno); + geometry = 0; + break; + case 3: // charset + if (streq(arg, "latin-1") || streq(arg, "1")) + latin1 = LATIN1; + else if (streq(arg, "latin-2") || streq(arg, "2")) + latin1 = LATIN2; + else if (streq(arg, "koi8-r") || streq(arg, "koi")) + latin1 = KOI8; + else if (streq(arg, "iso8859-7") || streq(arg, "el")) + latin1 = GREEK; + else + fatal("bad charset (not latin-1/2/koi8-r/iso8859-7)"); + break; + case 4: // help + usage(stdout, 0); + break; + case 5: // outfile + outfile = arg; + break; + case 6: // parent + case -1: // non-option arg + pgno = arg_pgno(arg, &subno); + parent = start(argc, argv, 0, pgno, subno); + geometry = 0; + break; + case 7: // sid + sid = strtoul(arg, NULL, 0); + break; + case 8: // ttpid + ttpid = strtoul(arg, NULL, 0); + break; + case 9: // vbi + vbi_name = arg; + vbi = 0; + parent = 0; + break; + } + + if (parent == 0) + start(argc, argv, 0, 0x900, ANY_SUB); + xio_event_loop(); + exit(0); +} diff --git a/util/alevt/misc.c b/util/alevt/misc.c new file mode 100644 index 0000000..32d0595 --- /dev/null +++ b/ util/alevt/misc.c@@ -0,0 +1,66 @@ +#include <stdio.h> +#include <stdarg.h> +#include "misc.h" + +char *prgname = 0; + +extern char *strrchr(const char *, int); +NORETURN(exit(int)); + + +void setprgname(char *str) +{ + char *x = strrchr(str, '/'); + prgname = x ? x+1 : str; +} + + +static void print_prgname(void) +{ + if (prgname && *prgname) + fprintf(stderr, "%s: ", prgname); +} + + +void error(const char *str, ...) +{ + va_list args; + va_start(args, str); + print_prgname(); + vfprintf(stderr, str, args); + fputc('\n', stderr); +} + + +void ioerror(const char *str) +{ + print_prgname(); + perror(str); +} + + +void fatal(const char *str, ...) +{ + va_list args; + va_start(args, str); + print_prgname(); + vfprintf(stderr, str, args); + fputc('\n', stderr); + exit(2); +} + + +void fatal_ioerror(const char *str) +{ + print_prgname(); + perror(str); + exit(2); +} + + +void out_of_mem(int size) +{ + if (size > 0) + fatal("out of memory allocating %d bytes.", size); + fatal("out of memory."); +} diff --git a/util/alevt/misc.h b/util/alevt/misc.h new file mode 100644 index 0000000..00a71f8 --- /dev/null +++ b/ util/alevt/misc.h@@ -0,0 +1,32 @@ +#ifndef MISC_H +#define MISC_H +#define PTR (void *) +#define NELEM(x) ((int)(sizeof(x)/sizeof(*(x)))) +#define NORETURN(x) void x __attribute__((__noreturn__)) +#define DEFINE(x) typeof(x) x +#define OFFSET_OF(type, elem) ((u8 *)&((type *)0)->elem - (u8 *)0) +#define BASE_OF(type, elem, p) ((type *)((u8 *)(p) - OFFSET_OF(type, elem))) + +#define not ! +#define streq(a, b) (strcmp((a), (b)) == 0) +#define min(a,b) ({ typeof(a) _a = a; typeof(b) _b = b; _a < _b ? _a : _b; }) +#define max(a,b) ({ typeof(a) _a = a; typeof(b) _b = b; _a > _b ? _a : _b; }) +#define bound(a,b,c) ({ typeof(a) _a = a; typeof(b) _b = b; typeof(c) _c = c; \ + _b < _a ? _a : _b > _c ? _c : _b; }) + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +typedef signed char s8; +typedef signed short s16; +typedef signed int s32; + +extern char *prgname; +void setprgname(char *argv_0); + +NORETURN(fatal(const char *str, ...)); +NORETURN(fatal_ioerror(const char *str)); +NORETURN(out_of_mem(int size)); +void error(const char *str, ...); +void ioerror(const char *str); +#endif diff --git a/util/alevt/os.h b/util/alevt/os.h new file mode 100644 index 0000000..50b7662 --- /dev/null +++ b/ util/alevt/os.h@@ -0,0 +1,7 @@ +#ifndef OS_H +#define OS_H +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBsd__) \ + || defined(__bsdi__) +#define BSD +#endif +#endif diff --git a/util/alevt/search.c b/util/alevt/search.c new file mode 100644 index 0000000..082cefb --- /dev/null +++ b/ util/alevt/search.c@@ -0,0 +1,127 @@ +#include <sys/types.h> // for freebsd +#include <stdlib.h> +#include "vt.h" +#include "misc.h" +#include "cache.h" +#include "search.h" + + +static void convert(u8 *p, u8 *buf, int *line) +{ + int x, y, c, ch, gfx, hid = 0; + + for (y = 1, p += 40; y < 25; ++y) + { + if (not hid) + { + gfx = 0; + for (x = 0; x < 40; ++x) + { + c = ' '; + switch (ch = *p++) + { + case 0x00 ... 0x07: + gfx = 0; + break; + case 0x10 ... 0x17: + gfx = 1; + break; + case 0x0c: + hid = 1; + break; + case 0x7f: + c = '*'; + break; + case 0x20 ... 0x7e: + if (gfx && ch != ' ' && (ch & 0xa0) == 0x20) + ch = '#'; + case 0xa0 ... 0xff: + c= ch; + } + *buf++ = c; + } + *buf++ = '\n'; + *line++ = y; + } + else + { + p += 40; + hid = 0; + } + } + *line = y; + *buf = 0; +} + + +static int search_pg(struct search *s, struct vt_page *vtp) +{ + regmatch_t m[1]; + u8 buf[H *(W+1) + 1]; + int line[H]; + + convert(PTR vtp->data, buf, line); + if (regexec(s->pattern, buf, 1, m, 0) == 0) + { + s->len = 0; + if (m->rm_so >= 0) + { + s->y = line[m->rm_so / (W+1)]; + s->x = m->rm_so % (W+1); + s->len = m->rm_eo - m->rm_so; + if (s->x + s->len > 40) + s->len = 40 - s->x; + } + return 1; + } + return 0; +} + + +struct search * search_start(struct cache *ca, u8 *pattern) +{ + struct search *s; + int f = 0; + + if (not(s = malloc(sizeof(*s)))) + goto fail1; + + if (pattern[0] == '!') + pattern++; + else + f = REG_ICASE; + + if (regcomp(s->pattern, pattern, f | REG_NEWLINE) != 0) + goto fail2; + + s->cache = ca; + return s; + +fail2: + free(s); +fail1: + return 0; +} + + +void search_end(struct search *s) +{ + regfree(s->pattern); + free(s); +} + + +int search_next(struct search *s, int *pgno, int *subno, int dir) +{ + struct vt_page *vtp = 0; + + if (s->cache) + vtp = s->cache->op->foreach_pg(s->cache, *pgno, *subno, dir, + search_pg, s); + if (vtp == 0) + return -1; + + *pgno = vtp->pgno; + *subno = vtp->subno ?: ANY_SUB; + return 0; +} diff --git a/util/alevt/search.h b/util/alevt/search.h new file mode 100644 index 0000000..c7e813a --- /dev/null +++ b/ util/alevt/search.h@@ -0,0 +1,16 @@ +#ifndef SEARCH_H +#define SEARCH_H + +#include <regex.h> + +struct search +{ + struct cache *cache; + regex_t pattern[1]; + int x, y, len; // the position of the match +}; + +struct search *search_start(struct cache *ca, u8 *pattern); +void search_end(struct search *s); +int search_next(struct search *s, int *pgno, int *subno, int dir); +#endif diff --git a/util/alevt/ui.c b/util/alevt/ui.c new file mode 100644 index 0000000..70391c7 --- /dev/null +++ b/ util/alevt/ui.c@@ -0,0 +1,721 @@ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <ctype.h> +#include <stdarg.h> +#include "vt.h" +#include "misc.h" +#include "xio.h" +#include "vbi.h" +#include "fdset.h" +#include "search.h" +#include "export.h" +#include "ui.h" + +static void vtwin_event(struct vtwin *w, struct vt_event *ev); +static void msg(struct vtwin *w, u8 *str, ...); +static void err(struct vtwin *w, u8 *str, ...); + +#define hist(w,o) ((w)->hist + (((w)->hist_top + (o)) & (N_HISTORY-1))) + + +static int inc_hex(int i, int bcd_mode) +{ + i++; + if (bcd_mode) + { + if ((i & 0x000f) > 0x0009) + i = (i + 0x0010) & 0x0ff0; + if ((i & 0x00f0) > 0x090) + i = (i + 0x0100) & 0x0f00; + if ((i & 0x0f00) > 0x0900) + i = (i + 0x1000) & 0xf000; + } + return i; +} + + +static int dec_hex(int i, int bcd_mode) +{ + i--; + if (bcd_mode) + { + if ((i & 0x000f) > 0x0009) + i = (i & 0xfff0) + 0x0009; + if ((i & 0x00f0) > 0x0090) + i = (i & 0xff00) + 0x0099; + if ((i & 0x0f00) > 0x0900) + i = (i & 0xf000) + 0x0999; + } + return i; +} + + +static void set_title(struct vtwin *w) +{ + char buf[32], buf2[32]; + + if (w->subno == ANY_SUB) + sprintf(buf, "%x", w->pgno); + else + sprintf(buf, "%x/%x", w->pgno, w->subno); + if (w->searching) + sprintf(buf2, "(%s)", buf); + else + sprintf(buf2, "%s", buf); + xio_title(w->xw, buf2); +} + + +static void query_page(struct vtwin *w, int pgno, int subno) +{ + w->pgno = pgno; + w->subno = subno; + w->searching = 1; + w->hold = 0; //subno != ANY_SUB; + xio_set_concealed(w->xw, w->revealed = 0); + + if (hist(w, 0)->pgno != pgno || + (hist(w,0)->subno == ANY_SUB && subno != ANY_SUB)) + w->hist_top++; + hist(w, 0)->pgno = pgno; + hist(w, 0)->subno = subno; + hist(w, 1)->pgno = 0; // end marker + + xio_cancel_selection(w->xw); + if (vbi_query_page(w->vbi, pgno, subno) == 0) + { + w->vtp = 0; + } + set_title(w); +} + + +static void new_or_query(struct vtwin *w, int pgno, int subno, int new_win) +{ + if (new_win) + { + if (w->child) + query_page(w->child, pgno, subno); + else + vtwin_new(w->xw->xio, w->vbi, 0, w, pgno, subno); + } + else + query_page(w, pgno, subno); +} + +static int _next_pgno(int *arg, struct vt_page *vtp) +{ + int pgno = vtp->pgno; + + if (arg[0] == pgno) // want different page + return 0; + if (arg[1]) // and not a hex page + for (; pgno; pgno >>=4) + if ((pgno & 15) > 9) + return 0; + return 1; +} + + +static int _next_subno(int *arg, struct vt_page *vtp) +{ + return vtp->pgno == arg[0]; // only subpages of this page +} + + +static void do_next_pgno(struct vtwin *w, int dir, int bcd_mode, int subs, + int new_win) +{ + struct vt_page *vtp; + struct vtwin *cw = (new_win && w->child) ? w->child : w; + int pgno = cw->pgno; + int subno = cw->subno; + + if (w->vbi->cache) + { + int arg[2]; + arg[0] = pgno; + arg[1] = bcd_mode; + if (vtp = w->vbi->cache->op->foreach_pg(w->vbi->cache, + pgno, subno, dir, subs ? _next_subno:_next_pgno, &arg)) + { + new_or_query(w, vtp->pgno, subs ? vtp->subno : ANY_SUB, new_win); + return; + } + } + err(w, "No page."); +} + +#define notdigit(x) (not isdigit((x))) + + +static int chk_screen_fromto(u8 *p, int x, int *n1, int *n2) +{ + p += x; + + if (x >= 0 && x+5 < 42) + if (notdigit(p[1]) || notdigit(p[0])) + if (isdigit(p[2])) + if (p[3] == '/' || p[3] == ':') + if (isdigit(p[4])) + if (notdigit(p[5]) || notdigit(p[6])) /* p[6] is save here */ + { + *n1 = p[2] % 16; + if (isdigit(p[1])) + *n1 += p[1] % 16 * 16; + *n2 = p[4] % 16; + if (isdigit(p[5])) + *n2 = *n2 * 16 + p[5] % 16; + return 1; + } + return 0; +} + + +static int chk_screen_pgno(u8 *p, int x, int *pgno, int *subno) +{ + p += x; + + if (x >= 0 && x+4 < 42) + if (notdigit(p[0]) && notdigit(p[4])) + if (isdigit(p[1]) && isdigit(p[2]) && isdigit(p[3])) + { + *pgno = p[1] % 16 * 256 + p[2] % 16 * 16 + p[3] % 16; + if (*pgno >= 0x100 && *pgno <= 0x999) + { + *subno = ANY_SUB; + if (x+6 < 42) + if (p[4] == '.' || p[4] == '/') + if (isdigit(p[5])) + if (notdigit(p[6]) || notdigit(p[7])) /* p[7] is save here */ + { + *subno = p[5] % 16; + if (isdigit(p[6])) + *subno = *subno * 16 + p[6] % 16; + } + // hackhackhack: + // pgno followed by start box gets subno 1 + if (x+4 < 42 && p[4] == 11) + *subno = 1; + return 1; + } + } + return 0; +} + + +static void do_screen_pgno(struct vtwin *w, int x, int y, int new_win) +{ + u8 buf[42]; + int n1, n2, i; + + if (x >= 0 && x < 40) + { + if (xio_get_line(w->xw, y, buf+1) == 0) + { + buf[0] = buf[41] = ' '; + x++; + + for (i = -6; i < 35; i++) + { + if (w->vtp == 0 || w->vtp->subno != 0) + if (chk_screen_fromto(buf, x+i, &n1, &n2)) + { + // subno cycling works wrong with children. + // so middle button cycles backwards... + if (w->subno != ANY_SUB) + n1 = w->subno; + n1 = new_win ? dec_hex(n1, 1) : inc_hex(n1, 1); + if (n1 < 1) + n1 = n2; + if (n1 > n2) + n1 = 1; + new_or_query(w, w->pgno, n1, 0); + return; + } + if (i >= -4) + if (chk_screen_pgno(buf, x+i, &n1, &n2)) + { + new_or_query(w, n1, n2, new_win); + return; + } + } + } + } + err(w, "No page."); +} + + +static void do_flof_pgno(struct vtwin *w, int button, int x, int new_win) +{ + struct vt_page *vtp = w->vtp; + int lk = 99, i, c; + + if (vtp && vtp->flof) + { + switch (button) + { + case 1 ... 3: + for (i = 0; i <= x && i < 40; ++i) + if ((c = vtp->data[24][i]) < 8) // fg-color code + lk = c; + lk = "x\0\1\2\3x\3x"[lk]; // color -> link# + break; + case KEY_F(1): lk = 0; break; + case KEY_F(2): lk = 1; break; + case KEY_F(3): lk = 2; break; + case KEY_F(4): lk = 3; break; + case KEY_F(5): lk = 5; break; + } + if (lk < 6 && (vtp->link[lk].pgno & 0xff) != 0xff) + { + new_or_query(w, vtp->link[lk].pgno, vtp->link[lk].subno, new_win); + return; + } + } + else + { + switch (button) + { + case 1 ... 3: lk = x / 8; break; + case KEY_F(1): lk = 0; break; + case KEY_F(2): lk = 1; break; + case KEY_F(3): lk = 2; break; + case KEY_F(4): lk = 3; break; + case KEY_F(5): lk = 4; break; + } + switch (lk) + { + case 0: new_or_query(w, 0x100, ANY_SUB, new_win); return; + case 1: do_next_pgno(w, -1, 1, 0, new_win); return; + case 2: new_or_query(w, 0x900, ANY_SUB, new_win); return; + case 3: do_next_pgno(w, 1, 1, 0, new_win); return; + case 4: new_or_query(w, 0x999, ANY_SUB, new_win); return; + } + } + err(w, "No page."); +} + + +static void do_hist_pgno(struct vtwin *w) +{ + if (hist(w, -1)->pgno) + { + w->hist_top--; + query_page(w, hist(w, 0)->pgno, hist(w, 0)->subno); + } + else + err(w, "Empty history."); +} + + +static void put_head_line(struct vtwin *w, u8 *p) +{ + char buf[40]; + + if (p == 0) + xio_get_line(w->xw, 0, buf); + else + memcpy(buf + 8, p + 8, 32); + + if (w->subno == ANY_SUB) + sprintf(buf, "\2%3x \5\xb7", w->pgno); + else + sprintf(buf, "\2S%02x \5\xb7", w->subno & 0xff); + + if (w->searching) + buf[0] = 1; + if (w->hold) + buf[4] = 'H'; + if (w->xw->concealed) + buf[6] = '*'; + buf[7] = 7; + + xio_put_line(w->xw, 0, buf); +} + + +static void put_menu_line(struct vtwin *w) +{ + if (w->status > 0) + xio_put_line(w->xw, 24, w->statusline); + else if (w->vtp && w->vtp->flof) + xio_put_line(w->xw, 24, w->vtp->data[24]); + else + xio_put_line(w->xw, 24, "\0 100 \4<< \6Help \4>>\0 999 "); +} + + +static void _msg(struct vtwin *w, u8 *str, va_list args) +{ + u8 buf[128]; + int i; + + i = vsprintf(buf, str, args); + if (i > W) + i = W; + memset(w->statusline, ' ', W); + memcpy(w->statusline + (W-i+1)/2, buf, i); + w->status = 6; + put_menu_line(w); +} + + +static void msg(struct vtwin *w, u8 *str, ...) +{ + va_list args; + + va_start(args, str); + _msg(w, str, args); + va_end(args); +} + + +static void err(struct vtwin *w, u8 *str, ...) +{ + va_list args; + + va_start(args, str); + _msg(w, str, args); + va_end(args); +} + + +static void next_search(struct vtwin *w, int rev) +{ + if (w->search) + { + int pgno = w->pgno; + int subno = w->subno; + int dir = rev ? -w->searchdir : w->searchdir; + + if (search_next(w->search, &pgno, &subno, dir) == 0) + { + query_page(w, pgno, subno); + if (not w->searching && w->search->len) + xio_set_selection(w->xw, w->search->x, w->search->y, + w->search->x + w->search->len - 1, w->search->y); + return; + } + else + err(w, "Pattern not found."); + } + else + err(w, "No search pattern."); +} + + +static void start_search(struct vtwin *w, u8 *string) +{ + if (not string) + return; + + if (*string) + { + if (w->search) + search_end(w->search); + w->search = search_start(w->vbi->cache, string); + if (w->search == 0) + { + err(w, "Bad search pattern."); + return; + } + } + next_search(w, 0); +} + + +static void start_save2(struct vtwin *w, u8 *name) +{ + if (name && *name) + if (export(w->export, w->vtp, name)) + err(w, export_errstr()); + + export_close(w->export); + w->export = 0; + put_menu_line(w); +} + + +struct vtwin * vtwin_new(struct xio *xio, struct vbi *vbi, char *geom, + struct vtwin *parent, int pgno, int subno) +{ + struct vtwin *w; + + if (not(w = malloc(sizeof(*w)))) + goto fail1; + + if (not (w->xw = xio_open_win(xio, geom))) + goto fail2; + w->vbi = vbi; + w->vtp = 0; + w->search = 0; + w->export = 0; + w->parent = parent; + w->child = 0; + if (parent && parent->child) + fatal("internal error: parent already has a child != 0"); + if (parent) + parent->child = w; + + w->hist_top = 1; + hist(w,0)->pgno = 0; + hist(w,1)->pgno = 0; + w->status = 0; + xio_set_handler(w->xw, vtwin_event, w); + vbi_add_handler(w->vbi, vtwin_event, w); + query_page(w, pgno, subno); + return w; + +fail2: + free(w); +fail1: + return 0; +} + + +static void vtwin_close(struct vtwin *w) +{ + if (w->parent) + w->parent->child = w->child; + if (w->child) + w->child->parent = w->parent; + + if (w->search) + search_end(w->search); + if (w->export) + export_close(w->export); + + vbi_del_handler(w->vbi, vtwin_event, w); + xio_close_win(w->xw, 1); + free(w); +} + + +static void vtwin_event(struct vtwin *w, struct vt_event *ev) +{ + struct xio_win *xw = w->xw; + int i; + + switch (ev->type) + { + case EV_CLOSE: + vtwin_close(w); + break; + + case EV_TIMER: + if (w->status > 0 && --w->status == 0) + put_menu_line(w); + break; + + case EV_KEY: + { + switch (ev->i1) + { + case '0' ... '9': + i = ev->i1 - '0'; + if (w->pgno >= 0x100) + { + if (i == 0) + break; + w->pgno = i; + } + else + { + w->pgno = w->pgno * 16 + i; + if (w->pgno >= 0x100) + query_page(w, w->pgno, ANY_SUB); + } + break; + case 'q': + case '\e': + vtwin_close(w); + break; + case 'h': + query_page(w, 0x900, ANY_SUB); + break; + case 'e': + if (w->vbi->cache) + { + i = w->vbi->cache->op->mode(w->vbi->cache, + CACHE_MODE_ERC, 0); + w->vbi->cache->op->mode(w->vbi->cache, + CACHE_MODE_ERC, !i); + msg(w, "Error reduction %sabled.", i ? "dis" : "en"); + } + break; + case 'o': + if (vtwin_new(xw->xio, w->vbi, 0, 0, w->pgno, w->subno) == 0) + err(w, "Unable to open new window."); + break; + case KEY_RIGHT: + do_next_pgno(w, 1, not ev->i2, 0, 0); + break; + case KEY_LEFT: + do_next_pgno(w, -1, not ev->i2, 0, 0); + break; + case KEY_UP: + do_next_pgno(w, -1, not ev->i2, 1, 0); + break; + case KEY_DOWN: + do_next_pgno(w, 1, not ev->i2, 1, 0); + break; + case '\b': + do_hist_pgno(w); + break; + case ' ': + w->hold = !w->hold; + break; + case 'c': + vbi_reset(w->vbi); + break; + case 'i': + if (w->vtp && w->vtp->flof && + (w->vtp->link[5].pgno & 0xff) != 0xff) + query_page(w, w->vtp->link[5].pgno, + w->vtp->link[5].subno); + else + query_page(w, 0x100, ANY_SUB); + break; + case 'r': + xio_set_concealed(xw, w->revealed = !w->revealed); + break; + case KEY_F(1) ... KEY_F(5): + do_flof_pgno(w, ev->i1, 0, ev->i2); + break; + case 'n': + next_search(w, 0); + break; + case 'N': + next_search(w, 1); + break; + default: + err(w, "Unused key."); + break; + } + break; + } + case EV_RESET: + { + if (w->search) + search_end(w->search); + w->search = 0; + + query_page(w, w->pgno, w->subno); + msg(w, "Cache cleared!"); + break; + } + case EV_MOUSE: + { + if (ev->i1 == 3) + do_hist_pgno(w); + else if (ev->i1 == 5) // wheel mouse + do_next_pgno(w, 1, not ev->i2, 0, 0); + else if (ev->i1 == 4) // wheel mouse + do_next_pgno(w, -1, not ev->i2, 0, 0); + else if (ev->i1 == 7) // dual wheel mouse + do_next_pgno(w, 1, not ev->i2, 1, 0); + else if (ev->i1 == 6) // dual wheel mouse + do_next_pgno(w, -1, not ev->i2, 1, 0); + else if (ev->i4 == 24) + do_flof_pgno(w, ev->i1, ev->i3, ev->i1 == 2); + else if (ev->i4 == 0 && ev->i3 < 5) + { + if (ev->i1 == 1) + w->hold = !w->hold; + else + vtwin_new(xw->xio, w->vbi, 0, 0, w->pgno, w->subno); + } + else if (ev->i4 == 0 && ev->i3 < 8) + { + if (ev->i1 == 2 && w->child) + w = w->child; + xio_set_concealed(w->xw, w->revealed = !w->revealed); + } + else + do_screen_pgno(w, ev->i3, ev->i4, ev->i1 == 2); + break; + } + case EV_PAGE: + { + struct vt_page *vtp = ev->p1; + + if (0) + if (vtp->errors) + printf("errors=%4d\n",vtp->errors); + if (w->searching || not(w->hold || ev->i1)) + if (vtp->pgno == w->pgno) + if (w->subno == ANY_SUB || vtp->subno == w->subno) + { + w->searching = 0; + w->vtp = vtp; + put_head_line(w, vtp->data[0]); + for (i = 1; i < 24; ++i) + xio_put_line(w->xw, i, vtp->data[i]); + put_menu_line(w); + set_title(w); + } + break; + } + case EV_HEADER: + { + u8 *p = ev->p1; + int hdr_mag = ev->i1 / 256; + int flags = ev->i3; + int mag = w->pgno; + if (mag >= 0x10) + mag = mag >> 4; + if (mag >= 0x10) + mag = mag >> 4; + if (flags & PG_OUTOFSEQ) + p = 0; + else + if (~flags & PG_MAGSERIAL) + if (mag != hdr_mag) + p = 0; + + put_head_line(w, p); + break; + } + case EV_XPACKET: + { +#if 0 /* VPS data (seems to be unused in .de */ + u8 *p = ev->p1; + + if (ev->i1 == 8 && ev->i2 == 30 && p[0]/2 == 1) + { + int i; + int pil, cni, pty, misc; + + for (i = 7; i < 20; ++i) + p[i] = hamm8(p+i, &ev->i3); + if (ev->i3 & 0xf000) /* uncorrectable errors */ + break; + cni = p[9] + p[15]/4*16 + p[16]%4*64 + p[10]%4*256 + + p[16]/4*1024 + p[17]*4096; + pty = p[18] + p[19]*16; + pil = p[10]/4 + p[11]*4 + p[12]*64 + p[13]*1024 + + p[14]*16384 + p[15]%4*262144; + misc = p[7] + p[8]*16; + err(w, "%02x %04x %05x %02x: %.20s", misc, cni, pil, pty, p+20); + } +#endif + break; + } + case EV_ERR: + { + char *errmsg = ev->p1; + if (errmsg != NULL && *errmsg != '\0') + { + err(w, errmsg); + w->status = 30; + ev->p1 = NULL; + free(errmsg); + } + break; + } + } +} diff --git a/util/alevt/ui.h b/util/alevt/ui.h new file mode 100644 index 0000000..9efc791 --- /dev/null +++ b/ util/alevt/ui.h@@ -0,0 +1,35 @@ +#ifndef UI_H +#define UI_H + +#include "vt.h" +#include "xio.h" +#include "vbi.h" +#include "search.h" + +#define N_HISTORY (1 << 6) // number of history entries + +struct vtwin +{ + struct vtwin *parent, *child; + struct xio_win *xw; + struct vbi *vbi; + struct { + int pgno; + int subno; + } hist[N_HISTORY]; + int hist_top; + int searching; + int revealed; + int hold; + int pgno, subno; + struct vt_page *vtp; + struct search *search; + int searchdir; + int status; + u8 statusline[W+1]; + struct export *export; +}; + +extern struct vtwin *vtwin_new(struct xio *xio, struct vbi *vbi, char *geom, + struct vtwin *parent, int pgno, int subno); +#endif diff --git a/util/alevt/vbi.c b/util/alevt/vbi.c new file mode 100644 index 0000000..6a8a47e --- /dev/null +++ b/ util/alevt/vbi.c@@ -0,0 +1,942 @@ +#define _GNU_SOURCE +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <stdio.h> +#include <errno.h> +#include <stdarg.h> +#include <sys/ioctl.h> +#include <sys/poll.h> +#include "os.h" +#include "vt.h" +#include "misc.h" +#include "vbi.h" +#include "fdset.h" +#include "hamm.h" +#include "lang.h" +#include <libzvbi.h> + + +static vbi_capture * pZvbiCapt; +static vbi_raw_decoder * pZvbiRawDec; +static vbi_sliced * pZvbiData; +static vbi_proxy_client * pProxy; + +#define ZVBI_BUFFER_COUNT 10 +#define ZVBI_TRACE 0 + + +static int vbi_dvb_open(struct vbi *vbi, const char *vbi_name, + const char *channel, char *outfile, u_int16_t sid, int ttpid); +static void dvb_handler(struct vbi *vbi, int fd); + +#define FAC (1<<16) // factor for fix-point arithmetic + +static u8 *rawbuf; // one common buffer for raw vbi data +static int rawbuf_size; // its current size +u_int16_t sid; +static char *vbi_names[] + = { "/dev/vbi", "/dev/vbi0", "/dev/video0", "/dev/dvb/adapter0/demux0", + NULL }; // default device names if none was given at the command line + + +static void out_of_sync(struct vbi *vbi) +{ + int i; // discard all in progress pages + for (i = 0; i < 8; ++i) + vbi->rpage[i].page->flags &= ~PG_ACTIVE; +} + + +// send an event to all clients +static void vbi_send(struct vbi *vbi, int type, int i1, int i2, int i3, void *p1) +{ + struct vt_event ev[1]; + struct vbi_client *cl, *cln; + ev->resource = vbi; + ev->type = type; + ev->i1 = i1; + ev->i2 = i2; + ev->i3 = i3; + ev->p1 = p1; + for (cl = PTR vbi->clients->first; cln = PTR cl->node->next; cl = cln) + cl->handler(cl->data, ev); +} + + +static void vbi_send_page(struct vbi *vbi, struct raw_page *rvtp, int page) +{ + struct vt_page *cvtp = 0; + + if (rvtp->page->flags & PG_ACTIVE) + { + if (rvtp->page->pgno % 256 != page) + { + rvtp->page->flags &= ~PG_ACTIVE; + enhance(rvtp->enh, rvtp->page); + if (vbi->cache) + cvtp = vbi->cache->op->put(vbi->cache, rvtp->page); + vbi_send(vbi, EV_PAGE, 0, 0, 0, cvtp ?: rvtp->page); + } + } +} + + +static void pll_add(struct vbi *vbi, int n, int err) +{ +} + + +// process one videotext packet +static int vt_line(struct vbi *vbi, u8 *p) +{ + struct vt_page *cvtp; + struct raw_page *rvtp; + int hdr, mag, mag8, pkt, i; + int err = 0; + + hdr = hamm16(p, &err); + if (err & 0xf000) + return -4; + mag = hdr & 7; + mag8 = mag?: 8; + pkt = (hdr >> 3) & 0x1f; + p += 2; + rvtp = vbi->rpage + mag; + cvtp = rvtp->page; + switch (pkt) + { + case 0: + { + int b1, b2, b3, b4; + b1 = hamm16(p, &err); // page number + b2 = hamm16(p+2, &err); // subpage number + flags + b3 = hamm16(p+4, &err); // subpage number + flags + b4 = hamm16(p+6, &err); // language code + more flags + if (vbi->ppage->page->flags & PG_MAGSERIAL) + vbi_send_page(vbi, vbi->ppage, b1); + vbi_send_page(vbi, rvtp, b1); + + if (err & 0xf000) + return 4; + + cvtp->errors = (err >> 8) + chk_parity(p + 8, 32);; + cvtp->pgno = mag8 * 256 + b1; + cvtp->subno = (b2 + b3 * 256) & 0x3f7f; + cvtp->lang = "\0\4\2\6\1\5\3\7"[b4 >> 5] + (latin1==LATIN1 ? 0 : 8); + cvtp->flags = b4 & 0x1f; + cvtp->flags |= b3 & 0xc0; + cvtp->flags |= (b2 & 0x80) >> 2; + cvtp->lines = 1; + cvtp->flof = 0; + vbi->ppage = rvtp; + pll_add(vbi, 1, cvtp->errors); + conv2latin(p + 8, 32, cvtp->lang); + vbi_send(vbi, EV_HEADER, cvtp->pgno, cvtp->subno, cvtp->flags, p); + + if (b1 == 0xff) + return 0; + cvtp->flags |= PG_ACTIVE; + init_enhance(rvtp->enh); + memcpy(cvtp->data[0]+0, p, 40); + memset(cvtp->data[0]+40, ' ', sizeof(cvtp->data)-40); + return 0; + } + + case 1 ... 24: + { + pll_add(vbi, 1, err = chk_parity(p, 40)); + + if (~cvtp->flags & PG_ACTIVE) + return 0; + + cvtp->errors += err; + cvtp->lines |= 1 << pkt; + conv2latin(p, 40, cvtp->lang); + memcpy(cvtp->data[pkt], p, 40); + return 0; + } + case 26: + { + int d, t[13]; + + if (~cvtp->flags & PG_ACTIVE) + return 0; + + d = hamm8(p, &err); + if (err & 0xf000) + return 4; + + for (i = 0; i < 13; ++i) + t[i] = hamm24(p + 1 + 3*i, &err); + if (err & 0xf000) + return 4; + + add_enhance(rvtp->enh, d, t); + return 0; + } + case 27: + { + int b1,b2,b3,x; + if (~cvtp->flags & PG_ACTIVE) + return 0; // -1 flushes all pages. We may never resync again + + b1 = hamm8(p, &err); + b2 = hamm8(p + 37, &err); + if (err & 0xf000) + return 4; + if (b1 != 0 || not(b2 & 8)) + return 0; + + for (i = 0; i < 6; ++i) + { + err = 0; + b1 = hamm16(p+1+6*i, &err); + b2 = hamm16(p+3+6*i, &err); + b3 = hamm16(p+5+6*i, &err); + if (err & 0xf000) + return 1; + x = (b2 >> 7) | ((b3 >> 5) & 0x06); + cvtp->link[i].pgno = ((mag ^ x) ?: 8) * 256 + b1; + cvtp->link[i].subno = (b2 + b3 * 256) & 0x3f7f; + } + cvtp->flof = 1; + return 0; + } + case 30: + { + if (mag8 != 8) + return 0; + p[0] = hamm8(p, &err); // designation code + p[1] = hamm16(p+1, &err); // initial page + p[3] = hamm16(p+3, &err); // initial subpage + mag + p[5] = hamm16(p+5, &err); // initial subpage + mag + if (err & 0xf000) + return 4; + err += chk_parity(p+20, 20); + conv2latin(p+20, 20, 0); + vbi_send(vbi, EV_XPACKET, mag8, pkt, err, p); + return 0; + } + default: + return 0; + } + return 0; +} + + +// called when new vbi data is waiting +static void vbi_handler(struct vbi *vbi, int fd) +{ + double timestamp; + struct timeval timeout; + int lineCount; + int line; + int res; + + timeout.tv_sec = 0; + timeout.tv_usec = 25000; + res = vbi_capture_read_sliced(pZvbiCapt, pZvbiData, &lineCount, ×tamp, + &timeout); + if (res > 0) + { + for (line=0; line < lineCount; line++) + { + if ((pZvbiData[line].id & VBI_SLICED_TELETEXT_B) != 0) + { + vt_line(vbi, pZvbiData[line].data); + } + } + } + else if (res < 0) + { + } +} + + +int vbi_add_handler(struct vbi *vbi, void *handler, void *data) +{ + struct vbi_client *cl; + + if (not(cl = malloc(sizeof(*cl)))) + return -1; + cl->handler = handler; + cl->data = data; + dl_insert_last(vbi->clients, cl->node); + return 0; +} + + +void vbi_del_handler(struct vbi *vbi, void *handler, void *data) +{ + struct vbi_client *cl; + + for (cl = PTR vbi->clients->first; cl->node->next; cl = PTR cl->node->next) + if (cl->handler == handler && cl->data == data) + { + dl_remove(cl->node); + break; + } + return; +} + + +struct vbi * vbi_open(char *vbi_name, struct cache *ca, + const char *channel, char *outfile, u_int16_t sid, int ttpid) +{ + static int inited = 0; + struct vbi *vbi; + char * pErrStr; + int services; + + if (vbi_name == NULL) + { + int i; + char *tried_devices = NULL; + char *old_tried_devices = NULL; + for (i = 0; vbi_names[i] != NULL; i++) + { + vbi_name = vbi_names[i]; + // collect device names for the error message below + if (old_tried_devices) + { + if (asprintf(&tried_devices, "%s, %s", old_tried_devices, vbi_name) < 0) + tried_devices = NULL; + free(old_tried_devices); + } + else if (asprintf(&tried_devices, "%s", vbi_name) < 0) + tried_devices = NULL; + if (tried_devices == NULL) + out_of_mem(-1); + old_tried_devices = tried_devices; + if (access(vbi_name, R_OK) != 0) + continue; + vbi = vbi_open(vbi_name, ca, channel, outfile, sid, ttpid); + if (vbi != NULL) + { + if (tried_devices != NULL) + free(tried_devices); + return vbi; + } + } + + error("could not open any of the standard devices (%s)", tried_devices); + free(tried_devices); + return NULL; + } + + if (not inited) + lang_init(); + inited = 1; + + if (not(vbi = malloc(sizeof(*vbi)))) + { + error("out of memory"); + goto fail1; + } + if (!vbi_dvb_open(vbi, vbi_name, channel, outfile, sid, ttpid)) { + vbi->cache = ca; + dl_init(vbi->clients); + out_of_sync(vbi); + vbi->ppage = vbi->rpage; + fdset_add_fd(fds, vbi->fd, dvb_handler, vbi); + return vbi; + } + + services = VBI_SLICED_TELETEXT_B; + pErrStr = NULL; + vbi->fd = -1; + + pProxy = vbi_proxy_client_create(vbi_name, "alevt", + VBI_PROXY_CLIENT_NO_STATUS_IND, &pErrStr, ZVBI_TRACE); + if (pProxy != NULL) + { + pZvbiCapt = vbi_capture_proxy_new(pProxy, ZVBI_BUFFER_COUNT, 0, + &services, 0, &pErrStr); + if (pZvbiCapt == NULL) + { + vbi_proxy_client_destroy(pProxy); + pProxy = NULL; + } + } + if (pZvbiCapt == NULL) + pZvbiCapt = vbi_capture_v4l2_new(vbi_name, ZVBI_BUFFER_COUNT, + &services, 0, &pErrStr, ZVBI_TRACE); + if (pZvbiCapt == NULL) + pZvbiCapt = vbi_capture_v4l_new(vbi_name, 0, &services, 0, &pErrStr, + ZVBI_TRACE); + + if (pZvbiCapt != NULL) + { + pZvbiRawDec = vbi_capture_parameters(pZvbiCapt); + if ((pZvbiRawDec != NULL) && ((services & VBI_SLICED_TELETEXT_B) != 0)) + { + pZvbiData = malloc((pZvbiRawDec->count[0] + pZvbiRawDec->count[1]) \ + * sizeof(*pZvbiData)); + + vbi->fd = vbi_capture_fd(pZvbiCapt); + } + else + vbi_capture_delete(pZvbiCapt); + } + + if (pErrStr != NULL) + { + fprintf(stderr, "libzvbi: %s\n", pErrStr); + free(pErrStr); + } + + if (vbi->fd == -1) + goto fail2; + vbi->cache = ca; + dl_init(vbi->clients); + out_of_sync(vbi); + vbi->ppage = vbi->rpage; + fdset_add_fd(fds, vbi->fd, vbi_handler, vbi); + return vbi; + +fail3: + close(vbi->fd); +fail2: + free(vbi); +fail1: + return 0; +} + + +void vbi_close(struct vbi *vbi) +{ + fdset_del_fd(fds, vbi->fd); + if (vbi->cache) + vbi->cache->op->close(vbi->cache); + + if (pZvbiData != NULL) + free(pZvbiData); + pZvbiData = NULL; + + if (pZvbiCapt != NULL) + { + vbi_capture_delete(pZvbiCapt); + pZvbiCapt = NULL; + } + if (pProxy != NULL) + { + vbi_proxy_client_destroy(pProxy); + pProxy = NULL; + } + free(vbi); +} + + +struct vt_page * vbi_query_page(struct vbi *vbi, int pgno, int subno) +{ + struct vt_page *vtp = 0; + if (vbi->cache) + vtp = vbi->cache->op->get(vbi->cache, pgno, subno); + if (vtp == 0) + { + return 0; + } + vbi_send(vbi, EV_PAGE, 1, 0, 0, vtp); + return vtp; +} + + +void vbi_reset(struct vbi *vbi) +{ + if (vbi->cache) + vbi->cache->op->reset(vbi->cache); + vbi_send(vbi, EV_RESET, 0, 0, 0, 0); +} + + +/* Starting from here: DVB API */ +#include <linux/dvb/dmx.h> +#include <linux/dvb/frontend.h> +#include <linux/dvb/video.h> + +static int dvb_get_table(int fd, u_int16_t pid, u_int8_t tblid, u_int8_t *buf, + size_t bufsz) +{ + struct dmx_sct_filter_params sctFilterParams; + struct pollfd pfd; + int r; + memset(&sctFilterParams, 0, sizeof(sctFilterParams)); + sctFilterParams.pid = pid; + sctFilterParams.timeout = 10000; + sctFilterParams.flags = DMX_ONESHOT | DMX_IMMEDIATE_START | DMX_CHECK_CRC; + sctFilterParams.filter.filter[0] = tblid; + sctFilterParams.filter.mask[0] = 0xff; + if (ioctl(fd, DMX_SET_FILTER, &sctFilterParams)) { + perror("DMX_SET_FILTER"); + return -1; + } + pfd.fd = fd; + pfd.events = POLLIN; + r = poll(&pfd, 1, 10000); + if (r < 0) { + perror("poll"); + goto out; + } + if (r > 0) { + r = read(fd, buf, bufsz); + if (r < 0) { + perror("read"); + goto out; + } + } + out: + ioctl(fd, DMX_STOP, 0); + return r; +} + +static const u_int8_t byterev8[256] = { + 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, + 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, + 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, + 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, + 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, + 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, + 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, + 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, + 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, + 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, + 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, + 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, + 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, + 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, + 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, + 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, + 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, + 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, + 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, + 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, + 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, + 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, + 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, + 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, + 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, + 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, + 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, + 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, + 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, + 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, + 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, + 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff +}; + +static void dvb_handle_pes_payload(struct vbi *vbi, const u_int8_t *buf, + unsigned int len) +{ + unsigned int p, i; + u_int8_t data[42]; + + if (buf[0] < 0x10 || buf[0] > 0x1f) + return; /* no EBU teletext data */ + for (p = 1; p < len; p += /*6 + 40*/ 2 + buf[p + 1]) { +#if 0 + printf("Txt Line:\n" + " data_unit_id 0x%02x\n" + " data_unit_length 0x%02x\n" + " reserved_for_future_use 0x%01x\n" + " field_parity 0x%01x\n" + " line_offset 0x%02x\n" + " framing_code 0x%02x\n" + " magazine_and_packet_addr 0x%04x\n" + " data_block 0x%02x 0x%02x 0x%02x 0x%02x\n", + buf[p], buf[p+1], + buf[p+2] >> 6, + (buf[p+2] >> 5) & 1, + buf[p+2] & 0x1f, + buf[p+3], + (buf[p+4] << 8) | buf[p+5], + buf[p+6], buf[p+7], buf[p+8], buf[p+9]); +#endif + for (i = 0; i < sizeof(data); i++) + data[i] = byterev8[buf[p+4+i]]; + /* note: we should probably check for missing lines and then + * call out_of_sync(vbi); and/or vbi_reset(vbi); */ + vt_line(vbi, data); + } +} + +static unsigned int rawptr; + +static void dvb_handler(struct vbi *vbi, int fd) +{ + /* PES packet start code prefix and stream_id == private_stream_1 */ + static const u_int8_t peshdr[4] = { 0x00, 0x00, 0x01, 0xbd }; + u_int8_t *bp; + int n; + unsigned int p, i, len; + u_int16_t rpid; + u_int32_t crc, crccomp; + + if (rawptr >= (unsigned int)rawbuf_size) + rawptr = 0; + n = read(vbi->fd, rawbuf + rawptr, rawbuf_size - rawptr); + if (n <= 0) + return; + rawptr += n; + if (rawptr < 6) + return; + if (memcmp(rawbuf, peshdr, sizeof(peshdr))) { + bp = memmem(rawbuf, rawptr, peshdr, sizeof(peshdr)); + if (!bp) + return; + rawptr -= (bp - rawbuf); + memmove(rawbuf, bp, rawptr); + if (rawptr < 6) + return; + } + len = (rawbuf[4] << 8) | rawbuf[5]; + if (len < 9) { + rawptr = 0; + return; + } + if (rawptr < len + 6) + return; + p = 9 + rawbuf[8]; +#if 0 + for (i = 0; i < len - p; i++) { + if (!(i & 15)) + printf("\n%04x:", i); + printf(" %02x", rawbuf[p + i]); + } + printf("\n"); +#endif + if (!dl_empty(vbi->clients)) + dvb_handle_pes_payload(vbi, rawbuf + p, len - p); + rawptr -= len; + if (rawptr) + memmove(rawbuf, rawbuf + len, rawptr); +} + + +static int vbi_dvb_open(struct vbi *vbi, const char *vbi_name, + const char *channel, char *outfile, u_int16_t sid, int ttpid) +{ + struct { + u_int16_t pmtpid; + u_int16_t ttpid; + u_int16_t service_id; + u_int8_t service_type; + char service_provider_name[64]; + char service_name[64]; + u_int8_t txtlang[3]; + u_int8_t txttype; + u_int8_t txtmagazine; + u_int8_t txtpage; + } progtbl[16], *progp; + u_int8_t tbl[4096]; + u_int8_t * ppname, * psname, pncode, sncode, pnlen, snlen; + int r; + FILE *ofd; + unsigned int i, j, k, l, progcnt = 0; + struct dmx_pes_filter_params filterpar; + + /* open DVB demux device */ + if (!vbi_name) + vbi_name = "/dev/dvb/adapter0/demux0"; + if ((vbi->fd = open(vbi_name, O_RDWR)) == -1) { + error("cannot open demux device %s", vbi_name); + return -1; + } + memset(progtbl, 0, sizeof(progtbl)); + if (ttpid >= 0x15 && ttpid < 0x1fff) { + vbi->ttpid = ttpid; + printf("Using command line specified teletext PID 0x%x\n", + vbi->ttpid); + goto ttpidfound; + } + /* parse PAT to enumerate services and to find the PMT PIDs */ + r = dvb_get_table(vbi->fd, 0, 0, tbl, sizeof(tbl)); + if (r == -1) + goto outerr; + if (!(tbl[5] & 1)) { + error("PAT not active (current_next_indicator == 0)"); + goto outerr; + } + if (tbl[6] != 0 || tbl[7] != 0) { + error("PAT has multiple sections"); + goto outerr; + } + if (r < 13) { + error("PAT too short\n"); + goto outerr; + } + r -= 13; + for (i = 0; i < (unsigned)r; i += 4) { + if (progcnt >= sizeof(progtbl)/sizeof(progtbl[0])) { + error("Program table overflow"); + goto outerr; + } + progtbl[progcnt].service_id = (tbl[8 + i] << 8) | tbl[9 + i]; + if (!progtbl[progcnt].service_id) /* this is the NIT pointer */ + continue; + progtbl[progcnt].pmtpid = ((tbl[10 + i] << 8) | tbl[11 + i]) + & 0x1fff; + progcnt++; + } + /* find the SDT to get the station names */ + r = dvb_get_table(vbi->fd, 0x11, 0x42, tbl, sizeof(tbl)); + if (r == -1) + goto outerr; + if (!(tbl[5] & 1)) { + error("SDT not active (current_next_indicator == 0)"); + goto outerr; + } + if (tbl[6] != 0 || tbl[7] != 0) { + error("SDT has multiple sections"); + goto outerr; + } + if (r < 12) { + error("SDT too short\n"); + goto outerr; + } + i = 11; + while (i < (unsigned)r - 1) { + k = (tbl[i] << 8) | tbl[i+1]; /* service ID */ + progp = NULL; + for (j = 0; j < progcnt; j++) + if (progtbl[j].service_id == k) { + progp = &progtbl[j]; + break; + } + j = i + 5; + i = j + (((tbl[i+3] << 8) | tbl[i+4]) & 0x0fff); + if (!progp) { + error("SDT: service_id 0x%x not in PAT\n", k); + continue; + } + while (j < i) { + switch (tbl[j]) { + case 0x48: // service descriptor + k = j + 4 + tbl[j + 3]; + progp->service_type = tbl[j+2]; + ppname = tbl+j+4 ; // points to 1st byte of provider_name + pncode = *ppname ; // 1st byte of provider_name + pnlen = tbl[j+3]; // length of provider_name + psname = tbl+k+1 ; // points to 1st byte of service_name + sncode = *psname ; // 1st byte of service_name + snlen = tbl[k] ; // length of service_name + if (pncode >= 0x20) { + pncode = 0 ; // default character set Latin alphabet fig.A.1 + } else { + ppname++ ; pnlen-- ; + // character code from table A.3 1st byte = ctrl-code + } + if (sncode >= 0x20) { + sncode = 0 ; // default character set Latin alphabet fig.A.1 + } else { + psname++ ; snlen-- ; + // character code from table A.3 ; 1st byte = ctrl-code + } + snprintf(progp->service_provider_name, + sizeof(progp->service_provider_name), "%.*s", pnlen, ppname); + snprintf(progp->service_name, + sizeof(progp->service_name), "%.*s", snlen, psname); break; + } + j += 2 + tbl[j + 1]; // next descriptor + } + } + /* parse PMT's to find Teletext Services */ + for (l = 0; l < progcnt; l++) { + progtbl[l].ttpid = 0x1fff; + if (progtbl[l].service_type != 0x01 || /* not digital TV */ + progtbl[l].pmtpid < 0x15 || /* PMT PID sanity check */ + progtbl[l].pmtpid >= 0x1fff) + continue; + r = dvb_get_table(vbi->fd, progtbl[l].pmtpid, 0x02, tbl, + sizeof(tbl)); + if (r == -1) + goto outerr; + if (!(tbl[5] & 1)) { error \ + ("PMT pid 0x%x not active (current_next_indicator == 0)", + progtbl[l].pmtpid); + goto outerr; + } + if (tbl[6] != 0 || tbl[7] != 0) { + error("PMT pid 0x%x has multiple sections", + progtbl[l].pmtpid); + goto outerr; + } + if (r < 13) { + error("PMT pid 0x%x too short\n", progtbl[l].pmtpid); + goto outerr; + } + i = 12 + (((tbl[10] << 8) | tbl[11]) & 0x0fff); + /* skip program info section */ + while (i <= (unsigned)r-6) { + j = i + 5; + i = j + (((tbl[i + 3] << 8) | tbl[i + 4]) & 0x0fff); + if (tbl[j - 5] != 0x06) + /* teletext streams have type 0x06 */ + continue; + k = ((tbl[j - 4] << 8) | tbl[j - 3]) & 0x1fff; + /* elementary PID - save until we know if it's teletext PID */ + while (j < i) { + switch (tbl[j]) { + case 0x56: /* EBU teletext descriptor */ + progtbl[l].txtlang[0] = tbl[j + 2]; + progtbl[l].txtlang[1] = tbl[j + 3]; + progtbl[l].txtlang[2] = tbl[j + 4]; + progtbl[l].txttype = tbl[j + 5] >> 3; + progtbl[l].txtmagazine = tbl[j + 5] & 7; + progtbl[l].txtpage = tbl[j + 6]; + progtbl[l].ttpid = k; + break; + } + j += 2 + tbl[j + 1]; + } + } + } + + printf \ + ("sid:pmtpid:ttpid:type:provider:name:language:texttype:magazine:page\n\n"); + for (i = 0; i < progcnt; i++) { + printf("%d:%d:%d:%d:%s:%s:lang=%.3s:type=%d:magazine=%1u:page=%3u\n", + progtbl[i].service_id, progtbl[i].pmtpid, progtbl[i].ttpid, + progtbl[i].service_type, progtbl[i].service_provider_name, + progtbl[i].service_name, progtbl[i].txtlang, progtbl[i].txttype, + progtbl[i].txtmagazine, progtbl[i].txtpage); + } + + if (*outfile) { + ofd = fopen(outfile,"w") ; + if (ofd == NULL) { error("cannot open outfile\n"); goto outerr ; } + for (i = 0; i < progcnt; i++) { + if (progtbl[i].ttpid == 0x1fff) continue ; // service without teletext + fprintf(ofd,"%d:%d:%s:%s:lang=%.3s\n", + progtbl[i].service_id, progtbl[i].ttpid, progtbl[i].service_provider_name, + progtbl[i].service_name, progtbl[i].txtlang); + } + fclose(ofd) ; + } + + progp = NULL; + + if (channel) { + j = strlen(channel); + for (i = 0; i < progcnt; i++) + if (!strncmp(progtbl[i].service_name, channel, j) + && progtbl[i].ttpid != 0x1fff) { progp = &progtbl[i]; + break ; + } + } + + if (channel && !progp) { + j = strlen(channel); + for (i = 0; i < progcnt; i++) + if (!strncasecmp(progtbl[i].service_name, channel, j) + && progtbl[i].ttpid != 0x1fff) { progp = &progtbl[i]; + break ; + } + } + + if (sid) { + for (i = 0; i < progcnt; i++) { + if ((progtbl[i].service_id == sid) && (progtbl[i].ttpid != 0x1fff)) { + progp = &progtbl[i]; break ; } + } + } + + if (!progp) { + for (i = 0; i < progcnt; i++) + if (progtbl[i].ttpid != 0x1fff) { + progp = &progtbl[i]; break ; + } + } + + printf("\nUsing: Service ID = %d ; PMT PID = %d ; TXT PID = %d ;\n" + "Service type = %d ; Provider Name = %s ; Service name = %s ;\n" + "language = %.3s ; Text type = %d ; Text Magazine = %1u ; Text page = %3u\n", + progp->service_id, progp->pmtpid, progp->ttpid, progp->service_type, + progp->service_provider_name, progp->service_name, progp->txtlang, + progp->txttype, progp->txtmagazine, progp->txtpage); + vbi->ttpid = progp->ttpid; + + ttpidfound: + rawbuf = malloc(rawbuf_size = 8192); + if (!rawbuf) + goto outerr; + rawptr = 0; +#if 0 + close(vbi->fd); + if ((vbi->fd = open(vbi_name, O_RDWR)) == -1) { + error("cannot open demux device %s", vbi_name); + return -1; + } +#endif + memset(&filterpar, 0, sizeof(filterpar)); + filterpar.pid = vbi->ttpid; + filterpar.input = DMX_IN_FRONTEND; + filterpar.output = DMX_OUT_TAP; + filterpar.pes_type = DMX_PES_OTHER; + filterpar.flags = DMX_IMMEDIATE_START; + if (ioctl(vbi->fd, DMX_SET_PES_FILTER, &filterpar) < 0) { + error("ioctl: DMX_SET_PES_FILTER %s (%u)", strerror(errno), errno); + goto outerr; + } + return 0; + + outerr: + close(vbi->fd); + vbi->fd = -1; + return -1; +} + + +struct vbi *open_null_vbi(struct cache *ca) +{ + static int inited = 0; + struct vbi *vbi; + + if (not inited) + lang_init(); + inited = 1; + + vbi = malloc(sizeof(*vbi)); + if (!vbi) + { + error("out of memory"); + goto fail1; + } + + vbi->fd = open("/dev/null", O_RDONLY); + if (vbi->fd == -1) + { + error("cannot open null device"); + goto fail2; + } + + vbi->ttpid = -1; + out_of_sync(vbi); + vbi->ppage = vbi->rpage; + fdset_add_fd(fds, vbi->fd, vbi_handler, vbi); + return vbi; + +fail3: + close(vbi->fd); +fail2: + free(vbi); +fail1: + return 0; +} + + +void send_errmsg(struct vbi *vbi, char *errmsg, ...) +{ + va_list args; + if (errmsg == NULL || *errmsg == '\0') + return; + va_start(args, errmsg); + char *buff = NULL; + if (vasprintf(&buff, errmsg, args) < 0) + buff = NULL; + va_end(args); + if(buff == NULL) + out_of_mem(-1); + vbi_send(vbi, EV_ERR, 0, 0, 0, buff); +} diff --git a/util/alevt/vbi.h b/util/alevt/vbi.h new file mode 100644 index 0000000..edb9dab --- /dev/null +++ b/ util/alevt/vbi.h@@ -0,0 +1,47 @@ +#ifndef VBI_H +#define VBI_H + +#include "vt.h" +#include "dllist.h" +#include "cache.h" +#include "lang.h" + +#define PLL_ADJUST 4 + +struct raw_page +{ + struct vt_page page[1]; + struct enhance enh[1]; +}; + +struct vbi +{ + int fd; + struct cache *cache; + struct dl_head clients[1]; + // page assembly + struct raw_page rpage[8]; // one for each magazin + struct raw_page *ppage; // points to page of previous pkt0 + // DVB stuff + unsigned int ttpid; + u_int16_t sid; +}; + +struct vbi_client +{ + struct dl_node node[1]; + void (*handler)(void *data, struct vt_event *ev); + void *data; +}; + +struct vbi *vbi_open(char *vbi_dev_name, struct cache *ca, + const char *channel, char *outfile, u_int16_t sid, int ttpid); +void vbi_close(struct vbi *vbi); +void vbi_reset(struct vbi *vbi); +int vbi_add_handler(struct vbi *vbi, void *handler, void *data); +void vbi_del_handler(struct vbi *vbi, void *handler, void *data); +struct vt_page *vbi_query_page(struct vbi *vbi, int pgno, int subno); + +struct vbi *open_null_vbi(struct cache *ca); +void send_errmsg(struct vbi *vbi, char *errmsg, ...); +#endif diff --git a/util/alevt/vt.h b/util/alevt/vt.h new file mode 100644 index 0000000..75986e8 --- /dev/null +++ b/ util/alevt/vt.h@@ -0,0 +1,62 @@ +#ifndef VT_H +#define VT_H + +#include "misc.h" + +#define W 40 +#define H 25 +#define BAD_CHAR 0xb8 // substitute for chars with bad parity + +struct vt_event +{ + int type; + void *resource; /* struct xio_win *, struct vbi *, ... */ + int i1, i2, i3, i4; + void *p1; +}; + +#define EV_CLOSE 1 +#define EV_KEY 2 // i1:KEY_xxx i2:shift-flag +#define EV_MOUSE 3 // i1:button i2:shift-flag i3:x i4:y +#define EV_SELECTION 4 // i1:len p1:data +#define EV_PAGE 5 // p1:vt_page i1:query-flag +#define EV_HEADER 6 // i1:pgno i2:subno i3:flags p1:data +#define EV_XPACKET 7 // i1:mag i2:pkt i3:errors p1:data +#define EV_RESET 8 // ./. +#define EV_TIMER 9 // ./. +#define EV_ERR 10 // p1: errmsg +#define KEY_F(i) (1000+i) +#define KEY_LEFT 2001 +#define KEY_RIGHT 2002 +#define KEY_UP 2003 +#define KEY_DOWN 2004 +#define KEY_PUP 2005 +#define KEY_PDOWN 2006 +#define KEY_DEL 2007 +#define KEY_INS 2008 + +struct vt_page +{ + int pgno, subno; // the wanted page number + int lang; // language code + int flags; // misc flags (see PG_xxx below) + int errors; // number of single bit errors in page + u32 lines; // 1 bit for each line received + u8 data[25][40]; // page contents + int flof; // page has FastText links + struct { + int pgno; + int subno; + } link[6]; // FastText links (FLOF) +}; + +#define PG_SUPPHEADER 0x01 // C7 row 0 is not to be displayed +#define PG_OUTOFSEQ 0x04 // C9 page out of numerical order +#define PG_NODISPLAY 0x08 // C10 rows 1-24 is not to be displayed +#define PG_MAGSERIAL 0x10 // C11 serial trans. (any pkt0 terminates page) +#define PG_ERASE 0x20 // C4 clear previously stored lines +#define PG_NEWSFLASH 0x40 // C5 box it and insert into normal video pict. +#define PG_SUBTITLE 0x80 // C6 box it and insert into normal video pict. +#define PG_ACTIVE 0x100 // currently fetching this page +#define ANY_SUB 0x3f7f // universal subpage number +#endif diff --git a/util/alevt/vt900.out b/util/alevt/vt900.out new file mode 100644 index 0000000..558ee67 --- /dev/null +++ b/ util/alevt/vt900.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Contents: ", +"\6\15Contents: ", +"\24 #################################### ", +" ", +" \3\177\6Starting alevt . . . . . . 902 ", +" ", +" \3\177\6Copying/Warranty . . . . . 904 ", +" ", +" \3\177\6The Status Line . . . . . 905 ", +" ", +" \3\177\6Selecting Pages . . . . . 907 ", +" ", +" \3\177\6QuickClick Page . . . . . 915 ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" (Click to select a page) ", +" ", +"\4\35\7 Next 901 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt901.out b/util/alevt/vt901.out new file mode 100644 index 0000000..1bde77c --- /dev/null +++ b/ util/alevt/vt901.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Contents: ", +"\6\15Contents: ", +"\24 #################################### ", +" ", +"\6 \3\177\6FastText Menu . . . . . . 909 ", +"\6 ", +"\6 \3\177\6Keyboard Commands . . . . 910 ", +"\6 ", +"\6 \3\177\6Starting alevt-cap . . . . 912 ", +"\6 ", +"\6 \3\177\6Starting alevt-date . . . 914 ", +"\6 ", +"\6 \3\177\6QuickClick Page . . . . . 915 ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" (Click to select a page) ", +" ", +"\4\35\7Back 900 Index 900 Next 902 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt902.out b/util/alevt/vt902.out new file mode 100644 index 0000000..665b41d --- /dev/null +++ b/ util/alevt/vt902.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt: ", +"\6\15Starting alevt: ", +"\24 #################################### ", +"\6 $\7alevt\6[options] Default: ", +" ", +" -c\6<channel name> (none;dvb only) ", +" -ch -child\6<ppp.ss> (none) ", +" -cs -charset \6latin-1 ", +" \6<latin-1/2/koi8-r/ ", +" \6iso8859-7> ", +" -h -help ", +" ", +" ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 901 Index 900 Next 903 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt903.out b/util/alevt/vt903.out new file mode 100644 index 0000000..0df75c1 --- /dev/null +++ b/ util/alevt/vt903.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt: ", +"\6\15Starting alevt: ", +"\24 #################################### ", +"\6 $\7alevt\6[options] Default: ", +" -o\6<outfile> (none;dvb only) ", +" -p -parent\6<ppp.ss> 900 ", +" -s -sid\6<sid> (none;dvb only) ", +" -t -ttpid\6<ttpid> (none;dvb only) ", +" -v -vbi\6<vbidev> /dev/vbi ", +" \6/dev/vbi0 ", +" \6/dev/video0 ", +" \6/dev/dvb/adapter0/demux0 ", +" ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 902 Index 900 Next 904 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt904.out b/util/alevt/vt904.out new file mode 100644 index 0000000..d13dcfd --- /dev/null +++ b/ util/alevt/vt904.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Copying: ", +"\6\15Copying: ", +"\24 #################################### ", +"\6 2002-07 Edgar Toernig (froese@gmx.de) ", +"\6 All Rights Reserved. ", +"\6 ", +"\6 This program is free software; you ", +"\6 can redistribute it and/or modify it ", +"\6 under the terms of the GNU General ", +"\6 Public License Version 2 as published ", +"\6 by the Free Software Foundation. ", +"\6 ", +"\6 This program is distributed in the ", +"\6 hope that it will be useful, but ", +"\6\7without any warranty.\6See the GNU ", +"\6 General Public License for details. ", +" ", +"\4\35\7Back 903 Index 900 Next 905 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt905.out b/util/alevt/vt905.out new file mode 100644 index 0000000..b445ebb --- /dev/null +++ b/ util/alevt/vt905.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Status Line: ", +"\6\15Status Line: ", +"\24 #################################### ", +"\6 The top line of each window is the ", +"\6 status line. On the left it shows ", +"\6 the current page number (CPN) and ", +"\6 some flags. The rest of the line ", +"\6 is the running header sent by the ", +"\6 TV station. ", +"\6 ", +"\6 If the CPN is red, the program is ", +"\6 searching for that page. If it's ", +"\6 green, it's the PN of the currently ", +"\6 displayed page. ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 904 Index 900 Next 906 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt906.out b/util/alevt/vt906.out new file mode 100644 index 0000000..156b481 --- /dev/null +++ b/ util/alevt/vt906.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Status Line: \14\5\30 ", +"\6\15Status Line: \14\5\30 ", +"\24 #################################### ", +"\6 An\2H\6behind the CPN indicates that ", +"\6 the page is on hold. This inhibits ", +"\6 subpage cycling and page updates. A ", +"\6 click on the CPN toggles the\2H\6flag.", +" ", +"\6 A\5*\6indicates that the page ", +"\6 contains concealed text. Clicking on ", +"\6 the\5*\6reveals that text. ", +" ", +"\6 A CPN in the form\2Sxx\6is shown if a ", +"\6 specific subpage is selected. ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 905 Index 900 Next 907 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt907.out b/util/alevt/vt907.out new file mode 100644 index 0000000..6aeb4e6 --- /dev/null +++ b/ util/alevt/vt907.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Selecting Pages: ", +"\6\15Selecting Pages: ", +"\24 #################################### ", +"\6 To select a specific page, you may ", +"\6 either enter the page number with ", +"\6 the keyboard or click with the\7left ", +"\6 mouse button on a page number ", +"\6 somewhere on the screen. ", +"\6 ", +"\6 Clicking with the\7middle\6button will ", +"\6 show the page in a child window. If ", +"\6 there is no child window, a new one ", +"\6 will be opened. ", +"\6 ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 906 Index 900 Next 908 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt908.out b/util/alevt/vt908.out new file mode 100644 index 0000000..851a9b5 --- /dev/null +++ b/ util/alevt/vt908.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Selecting Pages: ", +"\6\15Selecting Pages: ", +"\24 #################################### ", +"\6 AleVT also recognizes something like ", +"\3 3/7\6as a valid page number. Clicking ", +"\6 with the\7left\6button will cycle to ", +"\6 the next subpage of the current page. ", +"\6 The\7middle\6buttons cycles backwards. ", +"\6 ", +"\6 For each window a history of ", +"\6 recently visited pages is kept. ", +"\6 Pressing the\7right\6mouse button will ", +"\6 take you back to the previous page. ", +"\6 ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 907 Index 900 Next 909 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt909.out b/util/alevt/vt909.out new file mode 100644 index 0000000..0b28450 --- /dev/null +++ b/ util/alevt/vt909.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15FastText Menu: ", +"\6\15FastText Menu: ", +"\24 #################################### ", +"\6 The last line of each window shows ", +"\6 the FastText Menu (only if one is ", +"\6 transmitted for that page). ", +"\6 ", +"\6 It consists of up to four colored ", +"\6 labels. You may click on a label ", +"\6 or press one of the function keys ", +"\6 F1-F4 to go to the associated page. ", +"\6 ", +"\6 For the 5th (white) key present on ", +"\6 some remote controls press F5. ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 908 Index 900 Next 910 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt910.out b/util/alevt/vt910.out new file mode 100644 index 0000000..d3a2095 --- /dev/null +++ b/ util/alevt/vt910.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Keyboard Commands: ", +"\6\15Keyboard Commands: ", +"\24 #################################### ", +" 0\6-\0079 \6Enter page number ", +" q\6or\7ESC \6Close window ", +" h \6Goto page 900 (help page) ", +" i \6Goto page 100 (index page) ", +" o \6Open a new window ", +" SPACE \6Hold page ", +" RIGHT \6Goto next page ", +" LEFT \6Goto previous page ", +" DOWN \6Goto next subpage ", +" UP \6Goto previous subpage ", +" BACKSPACE\6Previous page from history ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 909 Index 900 Next 911 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt911.out b/util/alevt/vt911.out new file mode 100644 index 0000000..49e6cc1 --- /dev/null +++ b/ util/alevt/vt911.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \007 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Keyboard Commands: ", +"\6\15Keyboard Commands: ", +"\24 #################################### ", +" s \6Save page to file ", +" c \6Clear page cache ", +" r \6Reveal concealed text ", +" F1\6-\7F5 \6FastText keys ", +" /\6and\7? \6Search forward/backward ", +" n\6and\7N \6Search next/previous ", +" f\6and\7F \6Fine tune the decoder ", +" e \6Error reduction on/off ", +" b \6Error bell on/off ", +"\6 Holding the\7shift\6key while pressing ", +"\6 one of the\7cursor\6keys allows ", +"\6 selecting the 'hex' pages (Ex.: 1f1). ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +"\4\35\7Back 910 Index 900 Next 912 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt912.out b/util/alevt/vt912.out new file mode 100644 index 0000000..6fd7d12 --- /dev/null +++ b/ util/alevt/vt912.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt-cap: ", +"\6\15Starting alevt-cap: ", +"\24 #################################### ", +"\6 $\7alevt-cap\6[options] Default: ", +" ", +" -cs -charset \6latin-1 ", +" \6<latin-1/2/koi8-r/ ", +" \6iso8859-7> ", +" -f -format \6ascii ", +" \6<fmt,options> ", +" -f help -format help ", +" -h -help ", +" -n -name \6<filename> ttext-%s.%e ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 911 Index 900 Next 913 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt913.out b/util/alevt/vt913.out new file mode 100644 index 0000000..e0f4878 --- /dev/null +++ b/ util/alevt/vt913.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt-cap: ", +"\6\15Starting alevt-cap: ", +"\24 #################################### ", +"\6 $\7alevt-cap\6[options] Default: ", +" ", +" -s -sid\6<sid> (none;dvb only) ", +" -t -ttpid\6<ttpid> (none;dvb only) ", +" -to -timeout\6<secs> (none) ", +" -v -vbi\6<vbidev> /dev/vbi ", +" \6/dev/vbi0 ", +" \6/dev/video0 ", +" \6/dev/dvb/adapter0/demux0 ", +" ", +" ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 912 Index 900 Next 914 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt914.out b/util/alevt/vt914.out new file mode 100644 index 0000000..a55eed1 --- /dev/null +++ b/ util/alevt/vt914.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15Starting alevt-date: ", +"\6\15Starting alevt-date: ", +"\24 #################################### ", +"\6 $\7alevt-date\6[options] Default: ", +" ", +" -d -delta\6<max_secs> 7200 (2 hours) ", +" -f -format\6<fmtstr> %c ", +" -h -help ", +" -s -set \6off ", +" -to -timeout\6<seconds>(none) ", +" -v -vbi\6<vbidev> /dev/vbi ", +" \6/dev/vbi0 ", +" \6/dev/video0 ", +" \6/dev/dvb/adapter0/demux0 ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7Back 913 Index 900 Next 915 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vt915.out b/util/alevt/vt915.out new file mode 100644 index 0000000..66041ac --- /dev/null +++ b/ util/alevt/vt915.out@@ -0,0 +1,29 @@ +#ifndef HELP_HEADER +" \6AleVT Online Help System ", +" \22`p0`0 p `0pppp ", +"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34", +"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34", +" \22# #\42!\42# \42 \42! ", +#else +HELP_HEADER +#endif +" ", +"\6\15QuickClick: ", +"\6\15QuickClick: ", +"\24 #################################### ", +"\6 100 200 300 400 500 600 700 800 ", +"\6 101 201 301 401 501 601 701 801 ", +"\6 110 210 310 410 510 610 710 810 ", +"\6 120\006220 320 420 520 620 720 820 ", +"\6 130 230 330 430 530 630 730 830 ", +"\6 140\006240 340 440 540 640 740 840 ", +"\6 150 250 350 450 550 650 750 850 ", +"\6 160\006260 360 460 560 660 760 860 ", +"\6 170 270 370 470 570 670 770 870 ", +"\6 180\006280 380 480 580 680 780 880 ", +"\6 190 290 390 490 590 690 790 890 ", +"\24 pppppppppppppppppppppppppppppppppppp ", +" ", +" ", +"\4\35\7 Index 900 \34", +"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34", diff --git a/util/alevt/vtxt-iso8859-7.bdf b/util/alevt/vtxt-iso8859-7.bdf new file mode 100644 index 0000000..7d62c95 --- /dev/null +++ b/ util/alevt/vtxt-iso8859-7.bdf@@ -0,0 +1,5768 @@ +STARTFONT 2.1 +FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-1 +SIZE 1 75 75 +FONTBOUNDINGBOX 9 16 0 -4 +STARTPROPERTIES 10 +POINT_SIZE 1 +PIXEL_SIZE 16 +RESOLUTION_X 75 +RESOLUTION_Y 75 +FONT_ASCENT 12 +FONT_DESCENT 4 +AVERAGE_WIDTH 90 +SPACING "C" +_XMBDFED_INFO "Edited with xmbdfed 4.5." +FONT "vtxt" +ENDPROPERTIES +CHARS 250 +STARTCHAR char0 +ENCODING 0 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 1 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 2 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 3 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 4 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 5 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 6 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 7 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 8 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 9 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 10 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 11 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 12 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 13 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 14 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 15 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 16 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 17 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 18 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 19 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 20 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 21 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 22 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 23 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 24 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 25 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 26 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 27 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 28 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 29 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 30 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 31 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +0000 +0000 +ENDCHAR +STARTCHAR char32 +ENCODING 32 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char33 +ENCODING 33 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +3C00 +3C00 +1800 +1800 +1800 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char34 +ENCODING 34 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char35 +ENCODING 35 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +3600 +7F00 +3600 +3600 +3600 +7F00 +3600 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char36 +ENCODING 36 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +0C00 +3E00 +6300 +6100 +6000 +3E00 +0300 +0300 +4300 +6300 +3E00 +0C00 +0C00 +0000 +0000 +ENDCHAR +STARTCHAR char37 +ENCODING 37 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6100 +6300 +0600 +0C00 +1800 +3000 +6300 +4300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char38 +ENCODING 38 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3600 +1C00 +3B00 +6E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char39 +ENCODING 39 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +3000 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char40 +ENCODING 40 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +1800 +3000 +3000 +3000 +3000 +3000 +3000 +1800 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char41 +ENCODING 41 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3000 +1800 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +1800 +3000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char42 +ENCODING 42 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +3C00 +FF00 +3C00 +6600 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char43 +ENCODING 43 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char44 +ENCODING 44 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char45 +ENCODING 45 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char46 +ENCODING 46 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char47 +ENCODING 47 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0100 +0300 +0600 +0C00 +1800 +3000 +6000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char48 +ENCODING 48 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C300 +C300 +DB00 +DB00 +C300 +C300 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char49 +ENCODING 49 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3800 +7800 +1800 +1800 +1800 +1800 +1800 +1800 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char50 +ENCODING 50 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0600 +0C00 +1800 +3000 +6000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char51 +ENCODING 51 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0300 +1E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char52 +ENCODING 52 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0E00 +1E00 +3600 +6600 +7F00 +0600 +0600 +0600 +0F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char53 +ENCODING 53 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6000 +6000 +6000 +7E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char54 +ENCODING 54 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3000 +6000 +6000 +7E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char55 +ENCODING 55 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6300 +0300 +0300 +0600 +0C00 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char56 +ENCODING 56 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char57 +ENCODING 57 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3F00 +0300 +0300 +0300 +0600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char58 +ENCODING 58 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char59 +ENCODING 59 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char60 +ENCODING 60 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0600 +0C00 +1800 +3000 +6000 +3000 +1800 +0C00 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char61 +ENCODING 61 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char62 +ENCODING 62 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6000 +3000 +1800 +0C00 +0600 +0C00 +1800 +3000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char63 +ENCODING 63 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +0600 +0C00 +0C00 +0C00 +0000 +0C00 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char64 +ENCODING 64 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3E00 +6300 +6300 +6F00 +6F00 +6F00 +6E00 +6000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char65 +ENCODING 65 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char66 +ENCODING 66 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3300 +3300 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 67 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char68 +ENCODING 68 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char69 +ENCODING 69 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char70 +ENCODING 70 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char71 +ENCODING 71 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6F00 +6300 +6300 +3300 +1D00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char72 +ENCODING 72 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char73 +ENCODING 73 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char74 +ENCODING 74 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0F00 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char75 +ENCODING 75 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7300 +3300 +3300 +3600 +3C00 +3C00 +3600 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 76 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char77 +ENCODING 77 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +E700 +FF00 +FF00 +DB00 +C300 +C300 +C300 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 78 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char79 +ENCODING 79 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char80 +ENCODING 80 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char81 +ENCODING 81 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6B00 +6F00 +3E00 +0600 +0700 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 82 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 83 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 84 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char85 +ENCODING 85 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char86 +ENCODING 86 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char87 +ENCODING 87 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char88 +ENCODING 88 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +6600 +3C00 +1800 +1800 +3C00 +6600 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char89 +ENCODING 89 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 90 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char91 +ENCODING 91 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char92 +ENCODING 92 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4000 +6000 +7000 +3800 +1C00 +0E00 +0700 +0300 +0100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char93 +ENCODING 93 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char94 +ENCODING 94 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char95 +ENCODING 95 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char96 +ENCODING 96 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 97 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char98 +ENCODING 98 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3C00 +3600 +3300 +3300 +3300 +3300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 99 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 100 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char101 +ENCODING 101 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char102 +ENCODING 102 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char103 +ENCODING 103 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char104 +ENCODING 104 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3600 +3B00 +3300 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char105 +ENCODING 105 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char106 +ENCODING 106 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0600 +0000 +0E00 +0600 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char107 +ENCODING 107 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3300 +3600 +3C00 +3C00 +3600 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 108 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char109 +ENCODING 109 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +FF00 +DB00 +DB00 +DB00 +DB00 +DB00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char110 +ENCODING 110 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char111 +ENCODING 111 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char112 +ENCODING 112 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +0000 +ENDCHAR +STARTCHAR char113 +ENCODING 113 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +0600 +0600 +0000 +ENDCHAR +STARTCHAR char114 +ENCODING 114 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 115 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 116 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char117 +ENCODING 117 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char118 +ENCODING 118 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char119 +ENCODING 119 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char120 +ENCODING 120 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +6600 +3C00 +1800 +3C00 +6600 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char121 +ENCODING 121 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +0C00 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 122 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char123 +ENCODING 123 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1800 +1800 +1800 +7000 +1800 +1800 +1800 +1800 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char124 +ENCODING 124 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char125 +ENCODING 125 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +1800 +1800 +1800 +0E00 +1800 +1800 +1800 +1800 +7000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char126 +ENCODING 126 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char127 +ENCODING 127 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 128 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 129 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 130 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 131 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 132 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 133 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 134 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 135 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 136 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 137 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 138 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 139 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 140 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 141 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 142 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 143 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 144 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 145 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 146 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 147 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 148 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 149 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 150 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 151 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 152 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 153 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 154 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 155 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 156 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 157 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 158 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 159 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR U+00A0 NO-BREAK SPACE +ENCODING 160 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+02BD MODIFIER LETTER REVERSED COMMA +ENCODING 161 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +1000 +1000 +0800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+02BC MODIFIER LETTER APOSTROPHE +ENCODING 162 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +0800 +0800 +1000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A3 POUND SIGN +ENCODING 163 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1000 +1000 +1000 +7C00 +1000 +1000 +1000 +3E00 +6100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A6 BROKEN BAR +ENCODING 166 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +0800 +0800 +0800 +0000 +0000 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A7 SECTION SIGN +ENCODING 167 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +4200 +4000 +3C00 +4200 +4200 +3C00 +0200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A8 DIAERESIS +ENCODING 168 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00A9 COPYRIGHT SIGN +ENCODING 169 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +4200 +9900 +A500 +A100 +A100 +A500 +9900 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +ENCODING 171 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +1200 +1200 +2400 +2400 +4800 +2400 +2400 +1200 +1200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00AC NOT SIGN +ENCODING 172 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7E00 +0200 +0200 +0200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00AD SOFT HYPHEN +ENCODING 173 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+2015 HORIZONTAL BAR +ENCODING 175 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B0 DEGREE SIGN +ENCODING 176 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +2800 +2800 +1000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B1 PLUS-MINUS SIGN +ENCODING 177 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +0800 +0800 +7F00 +0800 +0800 +0800 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B2 SUPERSCRIPT TWO +ENCODING 178 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +2200 +0200 +1C00 +2000 +2000 +3E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B3 SUPERSCRIPT THREE +ENCODING 179 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +2200 +0200 +1C00 +0200 +2200 +1C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0384 GREEK TONOS +ENCODING 180 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +1000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0385 GREEK DIALYTIKA TONOS +ENCODING 181 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +1000 +4400 +4400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS +ENCODING 182 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +1800 +2400 +2400 +4200 +4200 +7E00 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00B7 MIDDLE DOT +ENCODING 183 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS +ENCODING 184 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +7E00 +4000 +4000 +4000 +7C00 +4000 +4000 +4000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0389 GREEK CAPITAL LETTER ETA WITH TONOS +ENCODING 185 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +4200 +4200 +4200 +4200 +7E00 +4200 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+038A GREEK CAPITAL LETTER IOTA WITH TONOS +ENCODING 186 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +3E00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +ENCODING 187 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4800 +4800 +2400 +2400 +1200 +2400 +2400 +4800 +4800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS +ENCODING 188 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+00BD VULGAR FRACTION ONE HALF +ENCODING 189 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +2200 +6200 +2400 +2800 +2800 +1400 +1A00 +2200 +4400 +4E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS +ENCODING 190 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +4100 +4100 +2200 +2200 +1400 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS +ENCODING 191 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +4000 +4000 +0000 +3E00 +4100 +4100 +4100 +4100 +2200 +1400 +1400 +7700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +ENCODING 192 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1000 +5400 +4400 +0000 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0391 GREEK CAPITAL LETTER ALPHA +ENCODING 193 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +2400 +2400 +4200 +4200 +7E00 +4200 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0392 GREEK CAPITAL LETTER BETA +ENCODING 194 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +4200 +4200 +4200 +7C00 +4200 +4200 +4200 +4200 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0393 GREEK CAPITAL LETTER GAMMA +ENCODING 195 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0394 GREEK CAPITAL LETTER DELTA +ENCODING 196 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +0800 +1400 +1400 +2200 +2200 +2200 +4100 +4100 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0395 GREEK CAPITAL LETTER EPSILON +ENCODING 197 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +4000 +4000 +4000 +7C00 +4000 +4000 +4000 +4000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0396 GREEK CAPITAL LETTER ZETA +ENCODING 198 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +0200 +0200 +0400 +0800 +1000 +2000 +4000 +4000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0397 GREEK CAPITAL LETTER ETA +ENCODING 199 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +4200 +4200 +4200 +7E00 +4200 +4200 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0398 GREEK CAPITAL LETTER THETA +ENCODING 200 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +4200 +4200 +4200 +7E00 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+0399 GREEK CAPITAL LETTER IOTA +ENCODING 201 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039A GREEK CAPITAL LETTER KAPPA +ENCODING 202 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +4400 +4800 +5000 +6000 +6000 +5000 +4800 +4400 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039B GREEK CAPITAL LETTER LAMDA +ENCODING 203 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +0800 +1400 +1400 +2200 +2200 +2200 +4100 +4100 +4100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039C GREEK CAPITAL LETTER MU +ENCODING 204 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +4200 +6600 +6600 +5A00 +5A00 +4200 +4200 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039D GREEK CAPITAL LETTER NU +ENCODING 205 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +6200 +6200 +5200 +5200 +4A00 +4A00 +4600 +4600 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039E GREEK CAPITAL LETTER XI +ENCODING 206 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +0000 +0000 +0000 +3C00 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+039F GREEK CAPITAL LETTER OMICRON +ENCODING 207 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A0 GREEK CAPITAL LETTER PI +ENCODING 208 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A1 GREEK CAPITAL LETTER RHO +ENCODING 209 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +4200 +4200 +4200 +7C00 +4000 +4000 +4000 +4000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A3 GREEK CAPITAL LETTER SIGMA +ENCODING 211 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +4000 +2000 +1000 +0800 +0800 +1000 +2000 +4000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A4 GREEK CAPITAL LETTER TAU +ENCODING 212 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A5 GREEK CAPITAL LETTER UPSILON +ENCODING 213 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4100 +4100 +2200 +2200 +1400 +0800 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A6 GREEK CAPITAL LETTER PHI +ENCODING 214 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +0800 +3E00 +4900 +4900 +4900 +4900 +3E00 +0800 +1C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A7 GREEK CAPITAL LETTER CHI +ENCODING 215 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4200 +4200 +2400 +2400 +1800 +1800 +2400 +2400 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A8 GREEK CAPITAL LETTER PSI +ENCODING 216 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4900 +4900 +4900 +4900 +4900 +3E00 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03A9 GREEK CAPITAL LETTER OMEGA +ENCODING 217 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +4100 +4100 +4100 +4100 +4100 +2200 +1400 +1400 +7700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +ENCODING 218 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +3E00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +ENCODING 219 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +4100 +4100 +2200 +2200 +1400 +0800 +0800 +0800 +0800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AC GREEK SMALL LETTER ALPHA WITH TONOS +ENCODING 220 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +3200 +4A00 +4400 +4400 +4400 +4400 +4A00 +3200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AD GREEK SMALL LETTER EPSILON WITH TONOS +ENCODING 221 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +3E00 +4000 +4000 +3C00 +4000 +4000 +4000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AE GREEK SMALL LETTER ETA WITH TONOS +ENCODING 222 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +5C00 +6200 +4200 +4200 +4200 +4200 +4200 +4200 +0200 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03AF GREEK SMALL LETTER IOTA WITH TONOS +ENCODING 223 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +ENCODING 224 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +4400 +4400 +0000 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B1 GREEK SMALL LETTER ALPHA +ENCODING 225 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3200 +4A00 +4400 +4400 +4400 +4400 +4A00 +3200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B2 GREEK SMALL LETTER BETA +ENCODING 226 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +4400 +4400 +4400 +7C00 +4200 +4200 +4200 +6200 +5C00 +4000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B3 GREEK SMALL LETTER GAMMA +ENCODING 227 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3100 +4900 +0A00 +0400 +0800 +0800 +1000 +1000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B4 GREEK SMALL LETTER DELTA +ENCODING 228 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +2000 +2000 +2000 +1800 +2400 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B5 GREEK SMALL LETTER EPSILON +ENCODING 229 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3C00 +4200 +4000 +3C00 +4000 +4000 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B6 GREEK SMALL LETTER ZETA +ENCODING 230 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +2000 +2000 +1C00 +0800 +1000 +2000 +2000 +2000 +2000 +1C00 +0200 +1C00 +0000 +0000 +ENDCHAR +STARTCHAR U+03B7 GREEK SMALL LETTER ETA +ENCODING 231 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +5C00 +6200 +4200 +4200 +4200 +4200 +4200 +4200 +0200 +0200 +0000 +0000 +ENDCHAR +STARTCHAR U+03B8 GREEK SMALL LETTER THETA +ENCODING 232 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +2400 +2400 +4200 +7E00 +4200 +4200 +2400 +2400 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03B9 GREEK SMALL LETTER IOTA +ENCODING 233 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BA GREEK SMALL LETTER KAPPA +ENCODING 234 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +2200 +2400 +2800 +3000 +3000 +2800 +2400 +2200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BB GREEK SMALL LETTER LAMDA +ENCODING 235 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +2000 +2000 +1000 +1000 +0800 +1800 +2400 +2400 +4200 +4200 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BC GREEK SMALL LETTER MU +ENCODING 236 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +4200 +4200 +4200 +4200 +6600 +6600 +5A00 +4200 +4000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BD GREEK SMALL LETTER NU +ENCODING 237 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +4200 +4200 +4200 +4400 +4400 +4800 +5000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03BE GREEK SMALL LETTER XI +ENCODING 238 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +4000 +4000 +3C00 +4000 +4000 +3C00 +4000 +4000 +3C00 +0200 +0200 +3C00 +0000 +0000 +ENDCHAR +STARTCHAR U+03BF GREEK SMALL LETTER OMICRON +ENCODING 239 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C0 GREEK SMALL LETTER PI +ENCODING 240 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +7E00 +2400 +2400 +2400 +2400 +2400 +2400 +2400 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C1 GREEK SMALL LETTER RHO +ENCODING 241 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +6200 +5C00 +4000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C2 GREEK SMALL LETTER FINAL SIGMA +ENCODING 242 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1E00 +2000 +4000 +4000 +4000 +2000 +1C00 +0200 +0200 +1C00 +0000 +0000 +ENDCHAR +STARTCHAR U+03C3 GREEK SMALL LETTER SIGMA +ENCODING 243 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3F00 +4800 +4400 +4400 +4400 +4400 +4400 +3800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C4 GREEK SMALL LETTER TAU +ENCODING 244 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +7E00 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C5 GREEK SMALL LETTER UPSILON +ENCODING 245 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03C6 GREEK SMALL LETTER PHI +ENCODING 246 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3E00 +4900 +4900 +4900 +4900 +4900 +4900 +3E00 +0800 +0800 +0000 +0000 +ENDCHAR +STARTCHAR U+03C7 GREEK SMALL LETTER CHI +ENCODING 247 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +4200 +4200 +2400 +2400 +1800 +1800 +2400 +2400 +4200 +4200 +0000 +0000 +ENDCHAR +STARTCHAR U+03C8 GREEK SMALL LETTER PSI +ENCODING 248 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +4900 +4900 +4900 +4900 +4900 +3E00 +0800 +0800 +0000 +0000 +ENDCHAR +STARTCHAR U+03C9 GREEK SMALL LETTER OMEGA +ENCODING 249 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +2200 +4100 +4100 +4900 +4900 +4900 +4900 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA +ENCODING 250 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +0000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA +ENCODING 251 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +2400 +2400 +0000 +0000 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CC GREEK SMALL LETTER OMICRON WITH TONOS +ENCODING 252 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +3C00 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CD GREEK SMALL LETTER UPSILON WITH TONOS +ENCODING 253 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1000 +1000 +0000 +0000 +4200 +4200 +4200 +4200 +4200 +4200 +4200 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR U+03CE GREEK SMALL LETTER OMEGA WITH TONOS +ENCODING 254 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +0800 +0000 +0000 +2200 +4100 +4100 +4900 +4900 +4900 +4900 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +ENDFONT diff --git a/util/alevt/vtxt-koi8.bdf b/util/alevt/vtxt-koi8.bdf new file mode 100644 index 0000000..a7398b2 --- /dev/null +++ b/ util/alevt/vtxt-koi8.bdf@@ -0,0 +1,5906 @@ +STARTFONT 2.1 +FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-1 +SIZE 1 75 75 +FONTBOUNDINGBOX 9 16 0 -4 +STARTPROPERTIES 10 +POINT_SIZE 1 +PIXEL_SIZE 16 +RESOLUTION_X 75 +RESOLUTION_Y 75 +FONT_ASCENT 12 +FONT_DESCENT 4 +AVERAGE_WIDTH 90 +SPACING "C" +_XMBDFED_INFO "Edited with xmbdfed 3.0." +FONT "vtxt" +ENDPROPERTIES +CHARS 256 +STARTCHAR char0 +ENCODING 0 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 1 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 2 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 3 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 4 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 5 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 6 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 7 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 8 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 9 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 10 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 11 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 12 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 13 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 14 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 15 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 16 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 17 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 18 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 19 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 20 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 21 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 22 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 23 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 24 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 25 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 26 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 27 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 28 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 29 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 30 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 31 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char32 +ENCODING 32 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char33 +ENCODING 33 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +3C00 +3C00 +1800 +1800 +1800 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char34 +ENCODING 34 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char35 +ENCODING 35 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +3600 +7F00 +3600 +3600 +3600 +7F00 +3600 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char36 +ENCODING 36 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +0C00 +3E00 +6300 +6100 +6000 +3E00 +0300 +0300 +4300 +6300 +3E00 +0C00 +0C00 +0000 +0000 +ENDCHAR +STARTCHAR char37 +ENCODING 37 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6100 +6300 +0600 +0C00 +1800 +3000 +6300 +4300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char38 +ENCODING 38 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3600 +1C00 +3B00 +6E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char39 +ENCODING 39 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +3000 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char40 +ENCODING 40 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +1800 +3000 +3000 +3000 +3000 +3000 +3000 +1800 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char41 +ENCODING 41 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3000 +1800 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +1800 +3000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char42 +ENCODING 42 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +3C00 +FF00 +3C00 +6600 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char43 +ENCODING 43 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char44 +ENCODING 44 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char45 +ENCODING 45 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char46 +ENCODING 46 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char47 +ENCODING 47 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0100 +0300 +0600 +0C00 +1800 +3000 +6000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char48 +ENCODING 48 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C300 +C300 +DB00 +DB00 +C300 +C300 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char49 +ENCODING 49 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3800 +7800 +1800 +1800 +1800 +1800 +1800 +1800 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char50 +ENCODING 50 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0600 +0C00 +1800 +3000 +6000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char51 +ENCODING 51 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0300 +1E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char52 +ENCODING 52 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0E00 +1E00 +3600 +6600 +7F00 +0600 +0600 +0600 +0F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char53 +ENCODING 53 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6000 +6000 +6000 +7E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char54 +ENCODING 54 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3000 +6000 +6000 +7E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char55 +ENCODING 55 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6300 +0300 +0300 +0600 +0C00 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char56 +ENCODING 56 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char57 +ENCODING 57 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3F00 +0300 +0300 +0300 +0600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char58 +ENCODING 58 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char59 +ENCODING 59 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char60 +ENCODING 60 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0600 +0C00 +1800 +3000 +6000 +3000 +1800 +0C00 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char61 +ENCODING 61 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char62 +ENCODING 62 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6000 +3000 +1800 +0C00 +0600 +0C00 +1800 +3000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char63 +ENCODING 63 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +0600 +0C00 +0C00 +0C00 +0000 +0C00 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char64 +ENCODING 64 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3E00 +6300 +6300 +6F00 +6F00 +6F00 +6E00 +6000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char65 +ENCODING 65 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char66 +ENCODING 66 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3300 +3300 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 67 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char68 +ENCODING 68 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char69 +ENCODING 69 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char70 +ENCODING 70 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char71 +ENCODING 71 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6F00 +6300 +6300 +3300 +1D00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char72 +ENCODING 72 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char73 +ENCODING 73 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char74 +ENCODING 74 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0F00 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char75 +ENCODING 75 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7300 +3300 +3300 +3600 +3C00 +3C00 +3600 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 76 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char77 +ENCODING 77 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +E700 +FF00 +FF00 +DB00 +C300 +C300 +C300 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 78 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char79 +ENCODING 79 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char80 +ENCODING 80 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char81 +ENCODING 81 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6B00 +6F00 +3E00 +0600 +0700 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 82 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 83 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 84 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char85 +ENCODING 85 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char86 +ENCODING 86 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char87 +ENCODING 87 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char88 +ENCODING 88 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +6600 +3C00 +1800 +1800 +3C00 +6600 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char89 +ENCODING 89 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 90 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char91 +ENCODING 91 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char92 +ENCODING 92 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4000 +6000 +7000 +3800 +1C00 +0E00 +0700 +0300 +0100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char93 +ENCODING 93 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char94 +ENCODING 94 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char95 +ENCODING 95 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char96 +ENCODING 96 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 97 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char98 +ENCODING 98 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3C00 +3600 +3300 +3300 +3300 +3300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 99 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 100 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char101 +ENCODING 101 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char102 +ENCODING 102 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char103 +ENCODING 103 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char104 +ENCODING 104 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3600 +3B00 +3300 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char105 +ENCODING 105 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char106 +ENCODING 106 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0600 +0000 +0E00 +0600 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char107 +ENCODING 107 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3300 +3600 +3C00 +3C00 +3600 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 108 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char109 +ENCODING 109 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +FF00 +DB00 +DB00 +DB00 +DB00 +DB00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char110 +ENCODING 110 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char111 +ENCODING 111 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char112 +ENCODING 112 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +7800 +0000 +ENDCHAR +STARTCHAR char113 +ENCODING 113 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +0600 +0F00 +0000 +ENDCHAR +STARTCHAR char114 +ENCODING 114 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 115 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 116 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char117 +ENCODING 117 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char118 +ENCODING 118 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char119 +ENCODING 119 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char120 +ENCODING 120 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +6600 +3C00 +1800 +3C00 +6600 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char121 +ENCODING 121 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 122 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char123 +ENCODING 123 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1800 +1800 +1800 +7000 +1800 +1800 +1800 +1800 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char124 +ENCODING 124 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char125 +ENCODING 125 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +1800 +1800 +1800 +0E00 +1800 +1800 +1800 +1800 +7000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char126 +ENCODING 126 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char127 +ENCODING 127 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 128 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 129 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 130 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 131 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 132 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 133 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 134 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 135 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 136 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 137 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 138 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 139 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 140 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 141 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 142 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 143 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 144 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 145 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 146 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 147 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 148 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 149 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 150 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 151 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 152 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 153 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 154 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 155 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 156 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 157 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 158 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 159 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char160 +ENCODING 160 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +ENDCHAR +STARTCHAR char161 +ENCODING 161 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +1800 +1800 +1800 +3C00 +3C00 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char162 +ENCODING 162 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +1800 +7E00 +C300 +C000 +C000 +C000 +C300 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char163 +ENCODING 163 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char164 +ENCODING 164 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4100 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +6300 +4100 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char165 +ENCODING 165 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +6600 +3C00 +1800 +FF00 +1800 +FF00 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char166 +ENCODING 166 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char167 +ENCODING 167 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3E00 +6300 +3000 +1C00 +3600 +6300 +6300 +3600 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char168 +ENCODING 168 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +7E00 +DB00 +FF00 +BD00 +C300 +E700 +FF00 +7E00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char169 +ENCODING 169 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +4100 +5D00 +5100 +5100 +5D00 +4100 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char170 +ENCODING 170 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +0C00 +3C00 +6400 +3C00 +0000 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 171 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +3000 +7F00 +7F00 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char172 +ENCODING 172 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +7E00 +5A00 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char173 +ENCODING 173 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char174 +ENCODING 174 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +4100 +5D00 +5500 +5900 +5500 +4100 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char175 +ENCODING 175 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char176 +ENCODING 176 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3600 +1C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char177 +ENCODING 177 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char178 +ENCODING 178 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +6C00 +1800 +3000 +6400 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char179 +ENCODING 179 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7C00 +0C00 +1800 +0C00 +6C00 +3800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char180 +ENCODING 180 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char181 +ENCODING 181 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +7E00 +6300 +6000 +C000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char182 +ENCODING 182 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +DB00 +DB00 +DB00 +7B00 +1B00 +1B00 +1B00 +1B00 +1B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char183 +ENCODING 183 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char184 +ENCODING 184 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0080 +0100 +0300 +0600 +0C00 +1C00 +3000 +7F00 +7700 +0E00 +1C00 +1800 +3000 +6000 +8000 +0000 +ENDCHAR +STARTCHAR char185 +ENCODING 185 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +7000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char186 +ENCODING 186 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +6C00 +4400 +6C00 +3800 +0000 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char187 +ENCODING 187 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0C00 +0600 +7F00 +7F00 +0600 +0C00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char188 +ENCODING 188 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6000 +6100 +6300 +6600 +0C00 +1800 +3300 +6700 +4B00 +1F00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char189 +ENCODING 189 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6000 +6100 +6300 +6600 +0C00 +1800 +3000 +6700 +4D80 +0300 +0600 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char190 +ENCODING 190 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7800 +1800 +3900 +1B00 +7600 +0C00 +1800 +3300 +6700 +4B00 +1F00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char191 +ENCODING 191 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +1800 +1800 +3000 +6000 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char238 +ENCODING 192 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +CE00 +DB00 +DB00 +FB00 +DB00 +DB00 +CE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char160 +ENCODING 193 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7800 +0C00 +7C00 +CC00 +CC00 +CC00 +7600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char161 +ENCODING 194 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0200 +0600 +3C00 +6000 +6000 +7C00 +6600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char230 +ENCODING 195 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +FE00 +0600 +0600 +0000 +0000 +ENDCHAR +STARTCHAR char164 +ENCODING 196 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1E00 +3600 +3600 +6600 +6600 +6600 +FF00 +C300 +C300 +0000 +0000 +ENDCHAR +STARTCHAR char165 +ENCODING 197 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7C00 +C600 +FE00 +C000 +C000 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char228 +ENCODING 198 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +3C00 +1800 +7E00 +DB00 +DB00 +DB00 +DB00 +7E00 +1800 +1800 +3C00 +0000 +ENDCHAR +STARTCHAR char163 +ENCODING 199 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +3200 +3200 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char229 +ENCODING 200 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +6C00 +3800 +3800 +3800 +6C00 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char168 +ENCODING 201 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +CE00 +D600 +E600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char169 +ENCODING 202 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3800 +3800 +C600 +C600 +CE00 +D600 +E600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char170 +ENCODING 203 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +6C00 +7800 +7800 +6C00 +6600 +E600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 204 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1E00 +3600 +6600 +6600 +6600 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char172 +ENCODING 205 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +EE00 +FE00 +FE00 +D600 +D600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char173 +ENCODING 206 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +C600 +FE00 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char174 +ENCODING 207 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7C00 +C600 +C600 +C600 +C600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char175 +ENCODING 208 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FE00 +C600 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char239 +ENCODING 209 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +CC00 +CC00 +FC00 +6C00 +CC00 +CE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char224 +ENCODING 210 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +DC00 +6600 +6600 +6600 +6600 +6600 +7C00 +6000 +6000 +F000 +0000 +ENDCHAR +STARTCHAR char225 +ENCODING 211 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7C00 +C600 +C000 +C000 +C000 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char226 +ENCODING 212 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +5A00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char227 +ENCODING 213 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +C600 +C600 +C600 +7E00 +0600 +0600 +C600 +7C00 +0000 +ENDCHAR +STARTCHAR char166 +ENCODING 214 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +D600 +D600 +5400 +7C00 +5400 +D600 +D600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char162 +ENCODING 215 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FC00 +6600 +6600 +7C00 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char236 +ENCODING 216 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +6000 +6000 +7C00 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char235 +ENCODING 217 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +C600 +F600 +DE00 +DE00 +F600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char167 +ENCODING 218 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +6600 +0600 +0C00 +0600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char232 +ENCODING 219 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +D600 +D600 +D600 +D600 +D600 +D600 +FE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char237 +ENCODING 220 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +6600 +0600 +1E00 +0600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char233 +ENCODING 221 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +D600 +D600 +D600 +D600 +D600 +D600 +FE00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char231 +ENCODING 222 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C600 +C600 +C600 +C600 +7E00 +0600 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char234 +ENCODING 223 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F800 +B000 +3000 +3E00 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char158 +ENCODING 224 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +CE00 +DB00 +DB00 +DB00 +FB00 +DB00 +DB00 +DB00 +DB00 +CE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char128 +ENCODING 225 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3600 +6600 +C600 +C600 +FE00 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char129 +ENCODING 226 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FE00 +6200 +6200 +6000 +7C00 +6600 +6600 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char150 +ENCODING 227 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +CC00 +FE00 +0600 +0600 +0000 +0000 +ENDCHAR +STARTCHAR char132 +ENCODING 228 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +FF00 +C300 +8100 +0000 +0000 +ENDCHAR +STARTCHAR char133 +ENCODING 229 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FE00 +6600 +6200 +6800 +7800 +6800 +6000 +6200 +6600 +FE00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char148 +ENCODING 230 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3C00 +1800 +7E00 +DB00 +DB00 +DB00 +DB00 +DB00 +7E00 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char131 +ENCODING 231 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FE00 +6200 +6200 +6000 +6000 +6000 +6000 +6000 +6000 +F000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char149 +ENCODING 232 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +6C00 +7C00 +3800 +3800 +7C00 +6C00 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char136 +ENCODING 233 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +CE00 +CE00 +D600 +E600 +E600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char137 +ENCODING 234 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3800 +3800 +C600 +C600 +CE00 +CE00 +D600 +E600 +E600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char138 +ENCODING 235 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +E600 +6600 +6C00 +6C00 +7800 +7800 +6C00 +6C00 +6600 +E600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char139 +ENCODING 236 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3600 +6600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char140 +ENCODING 237 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +EE00 +FE00 +FE00 +D600 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char141 +ENCODING 238 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +C600 +C600 +FE00 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char142 +ENCODING 239 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char143 +ENCODING 240 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FE00 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char159 +ENCODING 241 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3F00 +6600 +6600 +6600 +3E00 +3E00 +6600 +6600 +6600 +E700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char144 +ENCODING 242 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FC00 +6600 +6600 +6600 +7C00 +6000 +6000 +6000 +6000 +F000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char145 +ENCODING 243 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C200 +C000 +C000 +C000 +C000 +C200 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char146 +ENCODING 244 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +5A00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char147 +ENCODING 245 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +C600 +C600 +C600 +7E00 +0600 +0600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char134 +ENCODING 246 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +D600 +D600 +5400 +5400 +7C00 +7C00 +5400 +D600 +D600 +D600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char130 +ENCODING 247 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FC00 +6600 +6600 +6600 +7C00 +6600 +6600 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char156 +ENCODING 248 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +F000 +6000 +6000 +6000 +7C00 +6600 +6600 +6600 +6600 +FC00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char155 +ENCODING 249 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +F300 +DB00 +DB00 +DB00 +DB00 +F300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char135 +ENCODING 250 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +C600 +0600 +0600 +3C00 +0600 +0600 +0600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char152 +ENCODING 251 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char157 +ENCODING 252 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +C600 +0600 +2600 +3E00 +2600 +0600 +0600 +C600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char153 +ENCODING 253 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +DB00 +FF00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char151 +ENCODING 254 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C600 +C600 +C600 +C600 +C600 +7E00 +0600 +0600 +0600 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char154 +ENCODING 255 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +F800 +B000 +3000 +3000 +3C00 +3600 +3600 +3600 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +ENDFONT diff --git a/util/alevt/vtxt-latin-1.bdf b/util/alevt/vtxt-latin-1.bdf new file mode 100644 index 0000000..2f1a11b --- /dev/null +++ b/ util/alevt/vtxt-latin-1.bdf@@ -0,0 +1,5906 @@ +STARTFONT 2.1 +FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-1 +SIZE 1 75 75 +FONTBOUNDINGBOX 9 16 0 -4 +STARTPROPERTIES 10 +POINT_SIZE 1 +PIXEL_SIZE 16 +RESOLUTION_X 75 +RESOLUTION_Y 75 +FONT_ASCENT 12 +FONT_DESCENT 4 +AVERAGE_WIDTH 90 +SPACING "C" +_XMBDFED_INFO "Edited with xmbdfed 2.4." +FONT "vtxt" +ENDPROPERTIES +CHARS 256 +STARTCHAR char0 +ENCODING 0 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 1 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 2 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 3 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 4 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 5 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 6 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 7 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 8 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 9 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 10 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 11 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 12 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 13 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 14 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 15 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 16 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 17 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 18 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 19 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 20 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 21 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 22 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 23 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 24 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 25 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 26 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 27 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 28 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 29 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 30 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 31 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char32 +ENCODING 32 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char33 +ENCODING 33 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +3C00 +3C00 +1800 +1800 +1800 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char34 +ENCODING 34 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char35 +ENCODING 35 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +3600 +7F00 +3600 +3600 +3600 +7F00 +3600 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char36 +ENCODING 36 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +0C00 +3E00 +6300 +6100 +6000 +3E00 +0300 +0300 +4300 +6300 +3E00 +0C00 +0C00 +0000 +0000 +ENDCHAR +STARTCHAR char37 +ENCODING 37 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6100 +6300 +0600 +0C00 +1800 +3000 +6300 +4300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char38 +ENCODING 38 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3600 +1C00 +3B00 +6E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char39 +ENCODING 39 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +3000 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char40 +ENCODING 40 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +1800 +3000 +3000 +3000 +3000 +3000 +3000 +1800 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char41 +ENCODING 41 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3000 +1800 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +1800 +3000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char42 +ENCODING 42 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +3C00 +FF00 +3C00 +6600 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char43 +ENCODING 43 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char44 +ENCODING 44 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char45 +ENCODING 45 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char46 +ENCODING 46 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char47 +ENCODING 47 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0100 +0300 +0600 +0C00 +1800 +3000 +6000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char48 +ENCODING 48 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C300 +C300 +DB00 +DB00 +C300 +C300 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char49 +ENCODING 49 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3800 +7800 +1800 +1800 +1800 +1800 +1800 +1800 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char50 +ENCODING 50 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0600 +0C00 +1800 +3000 +6000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char51 +ENCODING 51 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0300 +1E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char52 +ENCODING 52 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0E00 +1E00 +3600 +6600 +7F00 +0600 +0600 +0600 +0F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char53 +ENCODING 53 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6000 +6000 +6000 +7E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char54 +ENCODING 54 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3000 +6000 +6000 +7E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char55 +ENCODING 55 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6300 +0300 +0300 +0600 +0C00 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char56 +ENCODING 56 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char57 +ENCODING 57 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3F00 +0300 +0300 +0300 +0600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char58 +ENCODING 58 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char59 +ENCODING 59 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char60 +ENCODING 60 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0600 +0C00 +1800 +3000 +6000 +3000 +1800 +0C00 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char61 +ENCODING 61 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char62 +ENCODING 62 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6000 +3000 +1800 +0C00 +0600 +0C00 +1800 +3000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char63 +ENCODING 63 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +0600 +0C00 +0C00 +0C00 +0000 +0C00 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char64 +ENCODING 64 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3E00 +6300 +6300 +6F00 +6F00 +6F00 +6E00 +6000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char65 +ENCODING 65 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char66 +ENCODING 66 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3300 +3300 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 67 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char68 +ENCODING 68 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char69 +ENCODING 69 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char70 +ENCODING 70 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char71 +ENCODING 71 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6F00 +6300 +6300 +3300 +1D00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char72 +ENCODING 72 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char73 +ENCODING 73 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char74 +ENCODING 74 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0F00 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char75 +ENCODING 75 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7300 +3300 +3300 +3600 +3C00 +3C00 +3600 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 76 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char77 +ENCODING 77 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +E700 +FF00 +FF00 +DB00 +C300 +C300 +C300 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 78 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char79 +ENCODING 79 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char80 +ENCODING 80 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char81 +ENCODING 81 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6B00 +6F00 +3E00 +0600 +0700 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 82 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 83 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 84 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char85 +ENCODING 85 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char86 +ENCODING 86 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char87 +ENCODING 87 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char88 +ENCODING 88 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +6600 +3C00 +1800 +1800 +3C00 +6600 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char89 +ENCODING 89 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 90 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char91 +ENCODING 91 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char92 +ENCODING 92 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4000 +6000 +7000 +3800 +1C00 +0E00 +0700 +0300 +0100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char93 +ENCODING 93 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char94 +ENCODING 94 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char95 +ENCODING 95 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char96 +ENCODING 96 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 97 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char98 +ENCODING 98 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3C00 +3600 +3300 +3300 +3300 +3300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 99 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 100 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char101 +ENCODING 101 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char102 +ENCODING 102 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char103 +ENCODING 103 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char104 +ENCODING 104 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3600 +3B00 +3300 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char105 +ENCODING 105 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char106 +ENCODING 106 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0600 +0000 +0E00 +0600 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char107 +ENCODING 107 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3300 +3600 +3C00 +3C00 +3600 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 108 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char109 +ENCODING 109 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +FF00 +DB00 +DB00 +DB00 +DB00 +DB00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char110 +ENCODING 110 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char111 +ENCODING 111 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char112 +ENCODING 112 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +7800 +0000 +ENDCHAR +STARTCHAR char113 +ENCODING 113 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +0600 +0F00 +0000 +ENDCHAR +STARTCHAR char114 +ENCODING 114 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 115 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 116 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char117 +ENCODING 117 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char118 +ENCODING 118 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char119 +ENCODING 119 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char120 +ENCODING 120 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +6600 +3C00 +1800 +3C00 +6600 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char121 +ENCODING 121 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 122 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char123 +ENCODING 123 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1800 +1800 +1800 +7000 +1800 +1800 +1800 +1800 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char124 +ENCODING 124 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char125 +ENCODING 125 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +1800 +1800 +1800 +0E00 +1800 +1800 +1800 +1800 +7000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char126 +ENCODING 126 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char127 +ENCODING 127 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 128 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 129 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 130 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 131 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 132 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 133 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 134 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 135 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 136 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 137 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 138 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 139 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 140 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 141 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 142 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 143 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 144 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 145 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 146 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 147 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 148 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 149 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 150 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 151 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 152 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 153 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 154 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 155 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 156 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 157 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 158 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 159 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char160 +ENCODING 160 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +ENDCHAR +STARTCHAR char161 +ENCODING 161 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +1800 +1800 +1800 +3C00 +3C00 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char162 +ENCODING 162 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +1800 +7E00 +C300 +C000 +C000 +C000 +C300 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char163 +ENCODING 163 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char164 +ENCODING 164 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4100 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +6300 +4100 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char165 +ENCODING 165 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +6600 +3C00 +1800 +FF00 +1800 +FF00 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char166 +ENCODING 166 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char167 +ENCODING 167 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3E00 +6300 +3000 +1C00 +3600 +6300 +6300 +3600 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char168 +ENCODING 168 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +7E00 +DB00 +FF00 +BD00 +C300 +E700 +FF00 +7E00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char169 +ENCODING 169 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +4100 +5D00 +5100 +5100 +5D00 +4100 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char170 +ENCODING 170 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +0C00 +3C00 +6400 +3C00 +0000 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 171 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +3000 +7F00 +7F00 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char172 +ENCODING 172 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +7E00 +5A00 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char173 +ENCODING 173 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char174 +ENCODING 174 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +4100 +5D00 +5500 +5900 +5500 +4100 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char175 +ENCODING 175 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char176 +ENCODING 176 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3600 +1C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char177 +ENCODING 177 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char178 +ENCODING 178 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +6C00 +1800 +3000 +6400 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char179 +ENCODING 179 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7C00 +0C00 +1800 +0C00 +6C00 +3800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char180 +ENCODING 180 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char181 +ENCODING 181 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +7E00 +6300 +6000 +C000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char182 +ENCODING 182 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +DB00 +DB00 +DB00 +7B00 +1B00 +1B00 +1B00 +1B00 +1B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char183 +ENCODING 183 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char184 +ENCODING 184 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0080 +0100 +0300 +0600 +0C00 +1C00 +3000 +7F00 +7700 +0E00 +1C00 +1800 +3000 +6000 +8000 +0000 +ENDCHAR +STARTCHAR char185 +ENCODING 185 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +7000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char186 +ENCODING 186 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3800 +6C00 +4400 +6C00 +3800 +0000 +7C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char187 +ENCODING 187 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0C00 +0600 +7F00 +7F00 +0600 +0C00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char188 +ENCODING 188 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6000 +6100 +6300 +6600 +0C00 +1800 +3300 +6700 +4B00 +1F00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char189 +ENCODING 189 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6000 +6100 +6300 +6600 +0C00 +1800 +3000 +6700 +4D80 +0300 +0600 +0F80 +0000 +0000 +ENDCHAR +STARTCHAR char190 +ENCODING 190 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +7800 +1800 +3900 +1B00 +7600 +0C00 +1800 +3300 +6700 +4B00 +1F00 +0300 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char191 +ENCODING 191 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +1800 +1800 +3000 +6000 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char192 +ENCODING 192 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +0C00 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char193 +ENCODING 193 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char194 +ENCODING 194 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char195 +ENCODING 195 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3B00 +6E00 +0000 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char196 +ENCODING 196 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char197 +ENCODING 197 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +1400 +1C00 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char198 +ENCODING 198 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1F00 +3600 +6600 +6600 +7F00 +6600 +6600 +6600 +6600 +6700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char199 +ENCODING 199 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6100 +3300 +1E00 +0600 +0300 +3E00 +0000 +ENDCHAR +STARTCHAR char200 +ENCODING 200 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +0C00 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char201 +ENCODING 201 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char202 +ENCODING 202 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char203 +ENCODING 203 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char204 +ENCODING 204 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +1800 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char205 +ENCODING 205 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char206 +ENCODING 206 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3C00 +6600 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char207 +ENCODING 207 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char208 +ENCODING 208 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3600 +3300 +3300 +7B00 +7B00 +3300 +3300 +3600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char209 +ENCODING 209 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3B00 +6E00 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char210 +ENCODING 210 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +1800 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char211 +ENCODING 211 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char212 +ENCODING 212 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char213 +ENCODING 213 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3B00 +6E00 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char214 +ENCODING 214 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char215 +ENCODING 215 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6300 +3600 +1C00 +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char216 +ENCODING 216 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0100 +0300 +3E00 +6700 +6700 +6F00 +6B00 +6B00 +7B00 +7300 +7300 +3E00 +6000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR char217 +ENCODING 217 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +1800 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char218 +ENCODING 218 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char219 +ENCODING 219 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +1400 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char220 +ENCODING 220 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char221 +ENCODING 221 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char222 +ENCODING 222 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +7800 +3000 +3E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char223 +ENCODING 223 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +6300 +6700 +6E00 +6C00 +6600 +6300 +6B00 +6E00 +6000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR char224 +ENCODING 224 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +1800 +0C00 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char225 +ENCODING 225 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char226 +ENCODING 226 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char227 +ENCODING 227 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char228 +ENCODING 228 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char229 +ENCODING 229 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +1C00 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char230 +ENCODING 230 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +1B00 +7E00 +D800 +DC00 +7700 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char231 +ENCODING 231 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0C00 +0600 +3C00 +0000 +ENDCHAR +STARTCHAR char232 +ENCODING 232 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +1800 +0C00 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char233 +ENCODING 233 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0600 +0C00 +1800 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char234 +ENCODING 234 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char235 +ENCODING 235 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char236 +ENCODING 236 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +3000 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char237 +ENCODING 237 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0600 +0C00 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char238 +ENCODING 238 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +3C00 +6600 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char239 +ENCODING 239 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 240 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0F00 +0600 +3E00 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char241 +ENCODING 241 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char242 +ENCODING 242 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +1800 +0C00 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char243 +ENCODING 243 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char244 +ENCODING 244 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char245 +ENCODING 245 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char246 +ENCODING 246 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char247 +ENCODING 247 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +7E00 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char248 +ENCODING 248 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0100 +0300 +3E00 +6700 +6F00 +6B00 +7B00 +7300 +3E00 +6000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR char249 +ENCODING 249 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +1800 +0C00 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char250 +ENCODING 250 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char251 +ENCODING 251 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +3C00 +6600 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char252 +ENCODING 252 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char253 +ENCODING 253 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char254 +ENCODING 254 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7800 +3000 +3E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +7800 +0000 +ENDCHAR +STARTCHAR char255 +ENCODING 255 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +ENDFONT diff --git a/util/alevt/vtxt-latin-2.bdf b/util/alevt/vtxt-latin-2.bdf new file mode 100644 index 0000000..6505c6e --- /dev/null +++ b/ util/alevt/vtxt-latin-2.bdf@@ -0,0 +1,5906 @@ +STARTFONT 2.1 +FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-2 +SIZE 1 75 75 +FONTBOUNDINGBOX 9 16 0 -4 +STARTPROPERTIES 10 +POINT_SIZE 1 +PIXEL_SIZE 16 +RESOLUTION_X 75 +RESOLUTION_Y 75 +FONT_ASCENT 12 +FONT_DESCENT 4 +AVERAGE_WIDTH 90 +SPACING "C" +_XMBDFED_INFO "Edited with xmbdfed 3.3." +FONT "vtxt" +ENDPROPERTIES +CHARS 256 +STARTCHAR char0 +ENCODING 0 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 1 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 2 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 3 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 4 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 5 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 6 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 7 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 8 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 9 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 10 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 11 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 12 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 13 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char2 +ENCODING 14 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char1 +ENCODING 15 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 16 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 17 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 18 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 19 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 20 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 21 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 22 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 23 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 24 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 25 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 26 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 27 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char0 +ENCODING 28 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 29 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char2 +ENCODING 30 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char1 +ENCODING 31 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +ENDCHAR +STARTCHAR char32 +ENCODING 32 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char33 +ENCODING 33 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3C00 +3C00 +3C00 +1800 +1800 +1800 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char34 +ENCODING 34 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +6600 +6600 +2400 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char35 +ENCODING 35 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +3600 +7F00 +3600 +3600 +3600 +7F00 +3600 +3600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char36 +ENCODING 36 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +0C00 +3E00 +6300 +6100 +6000 +3E00 +0300 +0300 +4300 +6300 +3E00 +0C00 +0C00 +0000 +0000 +ENDCHAR +STARTCHAR char37 +ENCODING 37 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6100 +6300 +0600 +0C00 +1800 +3000 +6300 +4300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char38 +ENCODING 38 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3600 +1C00 +3B00 +6E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char39 +ENCODING 39 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3000 +3000 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char40 +ENCODING 40 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +1800 +3000 +3000 +3000 +3000 +3000 +3000 +1800 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char41 +ENCODING 41 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3000 +1800 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +1800 +3000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char42 +ENCODING 42 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +3C00 +FF00 +3C00 +6600 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char43 +ENCODING 43 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +1800 +1800 +7E00 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char44 +ENCODING 44 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char45 +ENCODING 45 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +7F00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char46 +ENCODING 46 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char47 +ENCODING 47 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0100 +0300 +0600 +0C00 +1800 +3000 +6000 +4000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char48 +ENCODING 48 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +6600 +C300 +C300 +DB00 +DB00 +C300 +C300 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char49 +ENCODING 49 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +3800 +7800 +1800 +1800 +1800 +1800 +1800 +1800 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char50 +ENCODING 50 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0600 +0C00 +1800 +3000 +6000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char51 +ENCODING 51 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +0300 +0300 +1E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char52 +ENCODING 52 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0E00 +1E00 +3600 +6600 +7F00 +0600 +0600 +0600 +0F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char53 +ENCODING 53 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6000 +6000 +6000 +7E00 +0300 +0300 +0300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char54 +ENCODING 54 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3000 +6000 +6000 +7E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char55 +ENCODING 55 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +6300 +0300 +0300 +0600 +0C00 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char56 +ENCODING 56 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char57 +ENCODING 57 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +3F00 +0300 +0300 +0300 +0600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char58 +ENCODING 58 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char59 +ENCODING 59 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +0000 +0000 +1800 +1800 +1800 +3000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char60 +ENCODING 60 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0600 +0C00 +1800 +3000 +6000 +3000 +1800 +0C00 +0600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char61 +ENCODING 61 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7E00 +0000 +0000 +7E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char62 +ENCODING 62 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6000 +3000 +1800 +0C00 +0600 +0C00 +1800 +3000 +6000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char63 +ENCODING 63 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +0600 +0C00 +0C00 +0C00 +0000 +0C00 +0C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char64 +ENCODING 64 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3E00 +6300 +6300 +6F00 +6F00 +6F00 +6E00 +6000 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char65 +ENCODING 65 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char66 +ENCODING 66 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3300 +3300 +3300 +3300 +7E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 67 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char68 +ENCODING 68 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char69 +ENCODING 69 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char70 +ENCODING 70 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char71 +ENCODING 71 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6F00 +6300 +6300 +3300 +1D00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char72 +ENCODING 72 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char73 +ENCODING 73 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char74 +ENCODING 74 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0F00 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +6600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char75 +ENCODING 75 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7300 +3300 +3300 +3600 +3C00 +3C00 +3600 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 76 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char77 +ENCODING 77 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +E700 +FF00 +FF00 +DB00 +C300 +C300 +C300 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 78 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char79 +ENCODING 79 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char80 +ENCODING 80 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char81 +ENCODING 81 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6B00 +6F00 +3E00 +0600 +0700 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 82 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 83 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 84 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char85 +ENCODING 85 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char86 +ENCODING 86 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char87 +ENCODING 87 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char88 +ENCODING 88 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +6600 +3C00 +1800 +1800 +3C00 +6600 +C300 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char89 +ENCODING 89 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 90 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char91 +ENCODING 91 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char92 +ENCODING 92 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4000 +6000 +7000 +3800 +1C00 +0E00 +0700 +0300 +0100 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char93 +ENCODING 93 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char94 +ENCODING 94 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char95 +ENCODING 95 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +ENDCHAR +STARTCHAR char96 +ENCODING 96 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3000 +3000 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 97 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char98 +ENCODING 98 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3C00 +3600 +3300 +3300 +3300 +3300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 99 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 100 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char101 +ENCODING 101 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char102 +ENCODING 102 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +3200 +3000 +7800 +3000 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char103 +ENCODING 103 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char104 +ENCODING 104 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3600 +3B00 +3300 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char105 +ENCODING 105 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char106 +ENCODING 106 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0600 +0000 +0E00 +0600 +0600 +0600 +0600 +0600 +0600 +6600 +6600 +3C00 +0000 +ENDCHAR +STARTCHAR char107 +ENCODING 107 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +3000 +3000 +3300 +3600 +3C00 +3C00 +3600 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 108 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char109 +ENCODING 109 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +E600 +FF00 +DB00 +DB00 +DB00 +DB00 +DB00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char110 +ENCODING 110 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char111 +ENCODING 111 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char112 +ENCODING 112 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3E00 +3000 +3000 +7800 +0000 +ENDCHAR +STARTCHAR char113 +ENCODING 113 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3B00 +6600 +6600 +6600 +6600 +6600 +3E00 +0600 +0600 +0F00 +0000 +ENDCHAR +STARTCHAR char114 +ENCODING 114 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 115 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 116 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char117 +ENCODING 117 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char118 +ENCODING 118 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +C300 +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char119 +ENCODING 119 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +C300 +C300 +DB00 +DB00 +FF00 +6600 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char120 +ENCODING 120 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +C300 +6600 +3C00 +1800 +3C00 +6600 +C300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char121 +ENCODING 121 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 122 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char123 +ENCODING 123 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +1800 +1800 +1800 +7000 +1800 +1800 +1800 +1800 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char124 +ENCODING 124 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char125 +ENCODING 125 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7000 +1800 +1800 +1800 +0E00 +1800 +1800 +1800 +1800 +7000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char126 +ENCODING 126 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3B00 +6E00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char127 +ENCODING 127 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +7F00 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char0 +ENCODING 128 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 129 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 130 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 131 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 132 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 133 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 134 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 135 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 136 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 137 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 138 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 139 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 140 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 141 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char2 +ENCODING 142 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char1 +ENCODING 143 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR char0 +ENCODING 144 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 145 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 146 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 147 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 148 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 149 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 150 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 151 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +F000 +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 152 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 153 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 154 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 155 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +0F80 +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char0 +ENCODING 156 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 157 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +F000 +F000 +F000 +F000 +F000 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char2 +ENCODING 158 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0F80 +0F80 +0F80 +0F80 +0F80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char1 +ENCODING 159 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +FF80 +ENDCHAR +STARTCHAR char160 +ENCODING 160 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +FF80 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +0880 +FF80 +0880 +0880 +0880 +0880 +ENDCHAR +STARTCHAR char65 +ENCODING 161 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0600 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char162 +ENCODING 162 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6600 +3C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 163 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7800 +3000 +3000 +3C00 +3800 +3000 +7000 +F100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char164 +ENCODING 164 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +4100 +6300 +3E00 +6300 +6300 +6300 +6300 +3E00 +6300 +4100 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 165 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7B00 +3300 +3600 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 166 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char167 +ENCODING 167 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3E00 +6300 +3000 +1C00 +3600 +6300 +6300 +3600 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char196 +ENCODING 168 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6300 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char169 +ENCODING 169 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char83 +ENCODING 170 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3E00 +6300 +6300 +3000 +1C00 +0600 +0300 +6300 +6300 +3E00 +0600 +0300 +3E00 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 171 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 172 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char173 +ENCODING 173 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FF80 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char174 +ENCODING 174 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +FF00 +C300 +8600 +0C00 +1800 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char90 +ENCODING 175 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +C300 +8600 +0C00 +7E00 +3000 +6000 +C100 +C300 +FF00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char176 +ENCODING 176 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1C00 +3600 +3600 +1C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 177 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0600 +0300 +0000 +0000 +ENDCHAR +STARTCHAR char97 +ENCODING 178 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0C00 +1800 +0E00 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 179 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3800 +1800 +1E00 +1C00 +1800 +3800 +7800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char180 +ENCODING 180 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +6000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 181 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3980 +1980 +1B00 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 182 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char171 +ENCODING 183 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +1800 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char184 +ENCODING 184 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0080 +0100 +0300 +0600 +0C00 +1C00 +3000 +7F00 +7700 +0E00 +1C00 +1800 +3000 +6000 +8000 +0000 +ENDCHAR +STARTCHAR char185 +ENCODING 185 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3600 +1C00 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char115 +ENCODING 186 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +3000 +1C00 +0600 +6300 +3E00 +0300 +1E00 +0000 +0000 +ENDCHAR +STARTCHAR char187 +ENCODING 187 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0180 +0980 +1B00 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 188 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char189 +ENCODING 189 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +3300 +6600 +CC00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char190 +ENCODING 190 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6600 +3C00 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char122 +ENCODING 191 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0C00 +0C00 +0000 +7F00 +6600 +0C00 +1800 +3000 +6300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char82 +ENCODING 192 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char193 +ENCODING 193 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0300 +0600 +0000 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char194 +ENCODING 194 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char195 +ENCODING 195 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +3E00 +0000 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char196 +ENCODING 196 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +0800 +1C00 +3600 +6300 +6300 +7F00 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char76 +ENCODING 197 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +7C00 +3000 +3000 +3000 +3000 +3000 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char67 +ENCODING 198 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char199 +ENCODING 199 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +1E00 +3300 +6100 +6000 +6000 +6000 +6100 +3300 +1E00 +0600 +0300 +3E00 +0000 +ENDCHAR +STARTCHAR char200 +ENCODING 200 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3300 +1E00 +1E00 +3300 +6100 +6000 +6000 +6000 +6000 +6100 +3300 +1E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char201 +ENCODING 201 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char202 +ENCODING 202 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0C00 +0600 +0000 +0000 +ENDCHAR +STARTCHAR char203 +ENCODING 203 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char204 +ENCODING 204 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3300 +1E00 +7F00 +3300 +3100 +3400 +3C00 +3400 +3000 +3100 +3300 +7F00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char205 +ENCODING 205 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char206 +ENCODING 206 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3C00 +6600 +0000 +3C00 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char207 +ENCODING 207 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +7C00 +3600 +3300 +3300 +3300 +3300 +3300 +3300 +3600 +7C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char208 +ENCODING 208 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3C00 +3600 +3300 +3300 +7B00 +7B00 +3300 +3300 +3600 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char78 +ENCODING 209 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char210 +ENCODING 210 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +6300 +7300 +7B00 +7F00 +6F00 +6700 +6300 +6300 +6300 +6300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char211 +ENCODING 211 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char212 +ENCODING 212 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1C00 +3600 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char213 +ENCODING 213 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +3300 +6600 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char214 +ENCODING 214 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char215 +ENCODING 215 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +6300 +3600 +1C00 +0800 +1C00 +3600 +6300 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char216 +ENCODING 216 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6600 +3C00 +7E00 +3300 +3300 +3300 +3E00 +3600 +3300 +3300 +3300 +7300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char217 +ENCODING 217 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0800 +1400 +6B00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char218 +ENCODING 218 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char219 +ENCODING 219 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1B00 +3600 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char220 +ENCODING 220 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +6300 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char221 +ENCODING 221 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +1800 +3000 +C300 +C300 +C300 +6600 +3C00 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char84 +ENCODING 222 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +FF00 +DB00 +9900 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0600 +3C00 +0000 +0000 +ENDCHAR +STARTCHAR char223 +ENCODING 223 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +1C00 +3600 +6300 +6700 +6E00 +6C00 +6600 +6300 +6B00 +6E00 +6000 +4000 +0000 +0000 +ENDCHAR +STARTCHAR char224 +ENCODING 224 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0C00 +1800 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char225 +ENCODING 225 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char226 +ENCODING 226 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char227 +ENCODING 227 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +3C00 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char228 +ENCODING 228 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +3C00 +0600 +3E00 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char108 +ENCODING 229 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0C00 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char99 +ENCODING 230 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char231 +ENCODING 231 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0C00 +0600 +3C00 +0000 +ENDCHAR +STARTCHAR char232 +ENCODING 232 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +6600 +3C00 +3E00 +6300 +6000 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char233 +ENCODING 233 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0600 +0C00 +1800 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char234 +ENCODING 234 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +1800 +0E00 +0000 +0000 +ENDCHAR +STARTCHAR char235 +ENCODING 235 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char236 +ENCODING 236 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3300 +1E00 +3E00 +6300 +7F00 +6000 +6000 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char237 +ENCODING 237 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0600 +0C00 +1800 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char238 +ENCODING 238 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +3C00 +6600 +0000 +3800 +1800 +1800 +1800 +1800 +1800 +3C00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char239 +ENCODING 239 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +6000 +6E00 +3600 +0600 +1E00 +3600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char100 +ENCODING 240 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0E00 +0600 +0F00 +0600 +3E00 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char241 +ENCODING 241 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char242 +ENCODING 242 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3300 +1E00 +6E00 +3300 +3300 +3300 +3300 +3300 +3300 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char243 +ENCODING 243 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0600 +0C00 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char244 +ENCODING 244 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0800 +1C00 +3600 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char245 +ENCODING 245 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3300 +6600 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char246 +ENCODING 246 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6300 +0000 +0000 +3E00 +6300 +6300 +6300 +6300 +6300 +3E00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char247 +ENCODING 247 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +0000 +1800 +1800 +0000 +7E00 +0000 +1800 +1800 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char248 +ENCODING 248 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0000 +3300 +1E00 +6E00 +3B00 +3300 +3000 +3000 +3000 +7800 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char249 +ENCODING 249 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +1800 +2400 +2400 +1800 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char250 +ENCODING 250 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char251 +ENCODING 251 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +3300 +6600 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char252 +ENCODING 252 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +6600 +0000 +0000 +6600 +6600 +6600 +6600 +6600 +6600 +3B00 +0000 +0000 +0000 +0000 +ENDCHAR +STARTCHAR char253 +ENCODING 253 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +1800 +3000 +0000 +6300 +6300 +6300 +6300 +6300 +6300 +3F00 +0300 +0600 +7C00 +0000 +ENDCHAR +STARTCHAR char116 +ENCODING 254 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0000 +0800 +1800 +1800 +7E00 +1800 +1800 +1800 +1800 +1B00 +0E00 +0300 +1E00 +0000 +0000 +ENDCHAR +STARTCHAR char255 +ENCODING 255 +SWIDTH 8640 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0000 +0C00 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +ENDCHAR +ENDFONT diff --git a/util/alevt/xio.c b/util/alevt/xio.c new file mode 100644 index 0000000..4c0bca2 --- /dev/null +++ b/ util/alevt/xio.c@@ -0,0 +1,1156 @@ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <signal.h> +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xatom.h> +#define XK_MISCELLANY +#define XK_LATIN1 +#include <X11/keysymdef.h> +#include <sys/time.h> +#include "vt.h" +#include "misc.h" +#include "dllist.h" +#include "xio.h" +#include "fdset.h" +#include "lang.h" +#include "icon.xbm" +#include "font.h" + +#define WW (W*CW) /* pixel width of window */ +#define WH (H*CH) /* pixel hegiht of window */ +#define NO_SEL 999 /* sel_y1 value if no selection */ +#define SEL_MIN_TIME 500 /* anything shorter is a click */ + +static struct dl_head dpys[1]; /* list of all displays */ +static void xio_timer(void *data, int fd); +static void handle_event(struct xio *xio, int fd); + + +static int timer_init(int argc, char **argv) +{ + int p[2], timer_pid, i; + + if (pipe(p) == -1) + return -1; + + signal(SIGPIPE, SIG_DFL); + timer_pid = fork(); + if (timer_pid == -1) + return -1; + if (timer_pid > 0) + { + fdset_add_fd(fds, p[0], xio_timer, 0); + close(p[1]); + return 0; + } + + close(p[0]); + for (i = 0; i < 32; ++i) + if (p[1] != i) + close(i); + memcpy(argv[0], "Timer", 6); + + for (;;) + { + usleep(300000); + write(p[1], "*", 1); + } +} + + +static int local_init(int argc, char **argv) +{ + static int inited = 0; + + if (inited) + return 0; + + if (timer_init(argc, argv) == -1) + return -1; + + dl_init(dpys); + + inited = 1; + return 0; +} + + +static int get_colors(struct xio *xio) +{ + int i; + XColor c; + + static short rgb[][3] = + { + { 0x0000,0x0000,0x0000 }, + { 0xffff,0x0000,0x0000 }, + { 0x0000,0xffff,0x0000 }, + { 0xffff,0xffff,0x0000 }, + { 0x0000,0x0000,0xffff }, + { 0xffff,0x0000,0xffff }, + { 0x0000,0xffff,0xffff }, + { 0xffff,0xffff,0xffff }, + { 0x7fff,0x7fff,0x7fff }, + { 0x7fff,0x0000,0x0000 }, + { 0x0000,0x7fff,0x0000 }, + { 0x7fff,0x7fff,0x0000 }, + { 0x0000,0x0000,0x7fff }, + { 0x7fff,0x0000,0x7fff }, + { 0x0000,0x7fff,0x7fff }, + { 0x3fff,0x3fff,0x3fff }, + }; + + for (i = 0; i < 16; ++i) + { + c.red = rgb[i][0]; + c.green = rgb[i][1]; + c.blue = rgb[i][2]; + if (XAllocColor(xio->dpy, xio->cmap, &c) == 0) + return -1; + xio->color[i] = c.pixel; + } + return 0; +} + + +static int get_fonts(struct xio *xio) +{ + GC gc; + int i; + unsigned char *font_bits; + switch(latin1) { + case LATIN1: font_bits=font1_bits; break; + case LATIN2: font_bits=font2_bits; break; + case KOI8: font_bits=font3_bits; break; + case GREEK: font_bits=font4_bits; break; + default: font_bits=font1_bits; break; + } + + xio->font[0] = XCreateBitmapFromData(xio->dpy, xio->root, + font_bits, font_width, font_height); + xio->font[1] = XCreatePixmap(xio->dpy, xio->root, + font_width, font_height*2, 1); + gc = XCreateGC(xio->dpy, xio->font[0], 0, 0); + for (i = 0; i < font_height; ++i) + { + XCopyArea(xio->dpy, xio->font[0], xio->font[1], gc, 0, i, + font_width, 1, 0, i*2); + XCopyArea(xio->dpy, xio->font[0], xio->font[1], gc, 0, i, + font_width, 1, 0, i*2+1); + } + XFreeGC(xio->dpy, gc); + return 0; +} + + +static void xlib_conn_watch(Display *dpy, void *fds, int fd, int open_flag, void *data) +{ + if (open_flag) + fdset_add_fd(fds, fd, XProcessInternalConnection, dpy); + else + fdset_del_fd(fds, fd); +} + + +struct xio * xio_open_dpy(char *dpy, int argc, char **argv) +{ + XClassHint classhint[1]; + struct xio *xio; + + if (local_init(argc, argv) == -1) + goto fail1; + + if (not(xio = malloc(sizeof(*xio)))) + goto fail1; + + if (not(xio->dpy = XOpenDisplay(dpy))) + goto fail2; + + xio->fd = ConnectionNumber(xio->dpy); + xio->argc = argc; + xio->argv = argv; + dl_init(xio->windows); + xio->screen = DefaultScreen(xio->dpy); + xio->depth = DefaultDepth(xio->dpy, xio->screen); + xio->width = DisplayWidth(xio->dpy, xio->screen); + xio->height = DisplayHeight(xio->dpy, xio->screen); + xio->root = DefaultRootWindow(xio->dpy); + xio->cmap = DefaultColormap(xio->dpy, xio->screen); + xio->xa_del_win = XInternAtom(xio->dpy, "WM_DELETE_WINDOW", False); + xio->xa_targets = XInternAtom(xio->dpy, "TARGETS", False); + xio->xa_timestamp = XInternAtom(xio->dpy, "TIMESTAMP", False); + xio->xa_multiple = XInternAtom(xio->dpy, "MULTIPLE", False); + xio->xa_text = XInternAtom(xio->dpy, "TEXT", False); + + if (get_colors(xio) == -1) + goto fail3; + + if (get_fonts(xio) == -1) + goto fail3; + + if (fdset_add_fd(fds, xio->fd, handle_event, xio) == -1) + goto fail3; + + XAddConnectionWatch(xio->dpy, PTR xlib_conn_watch, PTR fds); + + xio->icon = XCreateBitmapFromData(xio->dpy, xio->root, + icon_bits, icon_width, icon_height); + + xio->group_leader = XCreateSimpleWindow(xio->dpy, xio->root, + 0, 0, 1, 1, 0, 0, 0); + XSetCommand(xio->dpy, xio->group_leader, xio->argv, xio->argc); + classhint->res_name = "VTLeader"; + classhint->res_class = "AleVT"; + XSetClassHint(xio->dpy, xio->group_leader, classhint); + + dl_insert_first(dpys, xio->node); + return xio; + +fail4: + fdset_del_fd(fds, xio->fd); +fail3: + XCloseDisplay(xio->dpy); +fail2: + free(xio); +fail1: + return 0; +} + + +static void set_user_geometry(struct xio_win *xw, char *geom, XSizeHints *sh, int bwidth) +{ + static int gravs[] = { NorthWestGravity, NorthEastGravity, + SouthWestGravity, SouthEastGravity }; + int f, g = 0; + + f = XParseGeometry(geom, &sh->x, &sh->y, &sh->width, &sh->height); + + if (f & WidthValue) + sh->width = sh->base_width + sh->width * sh->width_inc; + if (f & HeightValue) + sh->height = sh->base_height + sh->height * sh->height_inc; + if (f & XNegative) + g+=1, sh->x = xw->xio->width + sh->x - sh->width - bwidth; + if (f & YNegative) + g+=2, sh->y = xw->xio->height + sh->y - sh->height - bwidth; + + sh->width = bound(sh->min_width, sh->width, sh->max_width); + sh->height = bound(sh->min_height, sh->height, sh->max_height); + + if (f & (WidthValue | HeightValue)) + sh->flags |= USSize; + if (f & (XValue | YValue)) + sh->flags |= USPosition | PWinGravity; + + sh->win_gravity = gravs[g]; +} + + +struct xio_win * xio_open_win(struct xio *xio, char *geom) +{ + struct xio_win *xw; + XSetWindowAttributes attr; + XGCValues gcval; + XSizeHints sizehint[1]; + XClassHint classhint[1]; + XWMHints wmhint[1]; + + if (not(xw = malloc(sizeof(*xw)))) + goto fail1; + + xw->xio = xio; + + sizehint->flags = PSize | PBaseSize | PMinSize | PMaxSize | PResizeInc; + sizehint->x = sizehint->y = 0; + sizehint->width_inc = CW; + sizehint->height_inc = CH; + sizehint->base_width = 0; + sizehint->base_height = 0; + sizehint->min_width = 11*CW; + sizehint->min_height = 1*CH; + sizehint->max_width = sizehint->width = WW + CW; + sizehint->max_height = sizehint->height = WH; + set_user_geometry(xw, geom, sizehint, 1); + + attr.background_pixel = xio->color[0]; + attr.event_mask = KeyPressMask | + ButtonPressMask|ButtonReleaseMask|Button1MotionMask | + ExposureMask; + xw->win = XCreateWindow(xio->dpy, xio->root, + sizehint->x, sizehint->y, sizehint->width, sizehint->height, 1, + CopyFromParent, CopyFromParent, CopyFromParent, + CWBackPixel|CWEventMask, &attr); + + classhint->res_name = "VTPage"; + classhint->res_class = "AleVT"; + + wmhint->flags = InputHint | StateHint | WindowGroupHint | IconPixmapHint; + wmhint->input = True; + wmhint->initial_state = NormalState; //IconicState; + wmhint->window_group = xio->group_leader; + wmhint->icon_pixmap = xio->icon; + + XSetWMProperties(xio->dpy, xw->win, 0,0, 0,0, sizehint, wmhint, classhint); + XSetWMProtocols(xio->dpy, xw->win, &xio->xa_del_win, 1); + + xw->title[0] = 0; + xio_title(xw, "AleVT"); // will be reset pretty soon + + gcval.graphics_exposures = False; + xw->gc = XCreateGC(xio->dpy, xw->win, GCGraphicsExposures, &gcval); + + xw->tstamp = CurrentTime; + xw->fg = xw->bg = -1; /* unknown colors */ + + xw->curs_x = xw->curs_y = 999; // no cursor + + xw->sel_y1 = NO_SEL; /* no selection area */ + xw->sel_start_t = 0; /* no selection-drag active */ + xw->sel_set_t = 0; /* not selection owner */ + xw->sel_pixmap = 0; /* no selection pixmap yet */ + + xio_clear_win(xw); + xw->blink_on = xw->reveal = 0; + + xw->handler = 0; + + XMapWindow(xio->dpy, xw->win); + dl_insert_first(xio->windows, xw->node); + return xw; + +fail2: + free(xw); +fail1: + return 0; +} + + +void xio_close_win(struct xio_win *xw, int dpy_too) +{ + struct xio *xio = xw->xio; + + XDestroyWindow(xio->dpy, xw->win); + dl_remove(xw->node); + free(xw); + + if (dpy_too && dl_empty(xio->windows)) + xio_close_dpy(xio); +} + + +void xio_close_dpy(struct xio *xio) +{ + while (not dl_empty(xio->windows)) + xio_close_win((struct xio_win *)xio->windows->first, 0); + + XDestroyWindow(xio->dpy, xio->group_leader); + XRemoveConnectionWatch(xio->dpy, PTR xlib_conn_watch, PTR fds); + fdset_del_fd(fds, xio->fd); + dl_remove(xio->node); + free(xio); +} + + +void xio_set_handler(struct xio_win *xw, void *handler, void *data) +{ + xw->handler = handler; + xw->data = data; +} + + +void xio_title(struct xio_win *xw, char *title) +{ + char buf[sizeof(xw->title) + 32]; + + if (strlen(title) >= sizeof(xw->title)) + return; //TODO: trimm... + if (strcmp(xw->title, title) == 0) + return; + + strcpy(xw->title, title); + sprintf(buf, "AleVT " VERSION " %s", xw->title); + XStoreName(xw->xio->dpy, xw->win, buf); + XSetIconName(xw->xio->dpy, xw->win, xw->title); +} + + +void xio_clear_win(struct xio_win *xw) +{ + memset(xw->ch, ' ', sizeof(xw->ch)); + xw->dheight = xw->blink = xw->concealed = 0; + xw->hidden = xw->lhidden = 0; + xw->modified = ALL_LINES; +} + + +void xio_put_line(struct xio_win *xw, int y, u8 *data) +{ + u8 *p = xw->ch + y*W; + u8 *ep = p + W; + lbits yb = 1 << y; + lbits x = xw->dheight; + + if (y < 0 || y >= H) + return; + + if (memcmp(data, p, ep - p) == 0) + return; + + xw->modified |= yb; + xw->blink &= ~yb; + xw->dheight &= ~yb; + xw->concealed &= ~yb; + + while (p < ep) + switch (*p++ = *data++) + { + case 0x08: + xw->blink |= yb; + break; + case 0x0d: + if (y < H-1) + xw->dheight |= yb; + break; + case 0x18: + xw->concealed |= yb; + break; + } + + if ((xw->dheight ^ x) & yb) // dheight has changed, recalc hidden + { + xw->hidden &= yb*2 - 1; + for (; yb & ALL_LINES/2; yb *= 2) + if (~xw->hidden & xw->dheight & yb) + xw->hidden |= yb*2; + } +} + + +void xio_put_str(struct xio_win *xw, int y, u8 *str) +{ + u8 buf[W]; + int l; + l = strlen(str); + if (l < W) + { + memcpy(buf, str, l); + memset(buf + l, ' ', W - l); + } + else + memcpy(buf, str, W); + xio_put_line(xw, y, buf); +} + + +static void dirty(struct xio_win *xw, int y1, int y2) // mark [y1,y2[ dirty +{ + if (y1 >= 0 && y1 < H && y1 < y2) + { + if (y2 > H) + y2 = H; + if (xw->hidden & (1 << y1)) + y1--; + while (y1 < y2) + xw->modified |= 1 << y1++; + } +} + + +int xio_get_line(struct xio_win *xw, int y, u8 *data) +{ + if (y < 0 || y >= H) + return -1; + if (xw->hidden & (1 << y)) + y--; + memcpy(data, xw->ch + y*W, 40); + return 0; +} + + +void xio_set_cursor(struct xio_win *xw, int x, int y) +{ + if (xw->curs_y >= 0 && xw->curs_y < H) + dirty(xw, xw->curs_y, xw->curs_y + 1); + if (x >= 0 && x < W && y >= 0 && y < H) + dirty(xw, y, y + 1); + else + x = y = 999; + xw->curs_x = x; + xw->curs_y = y; +} + + +static inline void draw_char(struct xio_win *xw, Window win, int fg, int bg, + int c, int dbl, int x, int y, int ry) +{ + struct xio *xio = xw->xio; + + if (fg != xw->fg) + XSetForeground(xio->dpy, xw->gc, xio->color[xw->fg = fg]); + if (bg != xw->bg) + XSetBackground(xio->dpy, xw->gc, xio->color[xw->bg = bg]); + + if (dbl) + { + XCopyPlane(xio->dpy, xio->font[1], win, xw->gc, + c%32*CW, c/32*CH*2, CW, CH*2, x*CW, y*CH, 1); + } + else + { + XCopyPlane(xio->dpy, xio->font[0], win, xw->gc, + c%32*CW, c/32*CH, CW, CH, x*CW, y*CH, 1); + if (xw->dheight & (1<<ry)) + XCopyPlane(xio->dpy, xio->font[0], win, xw->gc, + ' '%32*CW, ' '/32*CH, CW, CH, x*CW, y*CH+CH, 1); + } +} + +static void draw_cursor(struct xio_win *xw, int x, int y, int dbl) +{ + struct xio *xio = xw->xio; + + if (xw->blink_on) + XSetForeground(xio->dpy, xw->gc, xio->color[xw->fg = xw->bg ^ 8]); + XDrawRectangle(xio->dpy, xw->win, xw->gc, x * CW, y * CH, CW-1, + (dbl ? 2*CH : CH)-1); +} + + +void xio_update_win(struct xio_win *xw) +{ + u8 *p = xw->ch; + lbits yb, redraw; + int x, y, c; + + if (xw->modified == 0) + return; + + redraw = xw->modified; // all modified lines + redraw |= xw->lhidden; // all previously hidden lines + redraw &= ~xw->hidden; + + xw->lhidden = xw->hidden; + xw->modified = 0; + + if (redraw == 0) + return; + + for (yb = 1, y = 0; y < H; ++y, yb *= 2) + if (redraw & yb) + { + int fg = 7, bg = 0, _fg, _bg; + int dbl = 0, blk = 0, con = 0, gfx = 0, sep = 0, hld = 0; + int last_ch = ' '; + + for (x = 0; x < W; ++x) + { + switch (c = *p++) + { + case 0x00 ... 0x07: /* alpha + foreground color */ + fg = c & 7; + gfx = 0; + con = 0; + goto ctrl; + case 0x08: /* flash */ + blk = not xw->blink_on; + goto ctrl; + case 0x09: /* steady */ + blk = 0; + goto ctrl; + case 0x0a: /* end box */ + case 0x0b: /* start box */ + goto ctrl; + case 0x0c: /* normal height */ + dbl = 0; + goto ctrl; + case 0x0d: /* double height */ + dbl = y < H-1; + goto ctrl; + case 0x10 ... 0x17: /* graphics + foreground color */ + fg = c & 7; + gfx = 1; + con = 0; + goto ctrl; + case 0x18: /* conceal display */ + con = not xw->reveal; + goto ctrl; + case 0x19: /* contiguous graphics */ + sep = 0; + goto ctrl; + case 0x1a: /* separate graphics */ + sep = 1; + goto ctrl; + case 0x1c: /* black background */ + bg = 0; + goto ctrl; + case 0x1d: /* new background */ + bg = fg; + goto ctrl; + case 0x1e: /* hold graphics */ + hld = 1; + goto ctrl; + case 0x1f: /* release graphics */ + hld = 0; + goto ctrl; + + case 0x0e: /* SO (reserved, double width) */ + case 0x0f: /* SI (reserved, double size) */ + c= ' '; break; + case 0x1b: /* ESC (reserved) */ + c = ' '; + break; + + ctrl: + c = ' '; + if (hld && gfx) + c = last_ch; + break; + + case 0x80 ... 0x9f: /* these aren't used */ + c = BAD_CHAR; + break; + + default: /* mapped to selected font */ + break; + } + + if (gfx && (c & 0xa0) == 0x20) + { + last_ch = c; + c += (c & 0x40) ? 32 : -32; + } + + _fg = fg; + _bg = bg; + if (blk) + _fg |= 8; + if (y >= xw->sel_y1 && y < xw->sel_y2 && + x >= xw->sel_x1 && x < xw->sel_x2) + _bg |= 8; + if (con) + _fg = _bg; + + draw_char(xw, xw->win, _fg, _bg, c, dbl, x, y, y); + + if (y == xw->curs_y && x == xw->curs_x) + draw_cursor(xw, xw->curs_x, xw->curs_y, dbl); + + if (xw->sel_pixmap && (_bg & 8)) + draw_char(xw, xw->sel_pixmap, con ? bg : fg, bg, c, dbl, + x - xw->sel_x1, y - xw->sel_y1, y); + } + } + else + p += 40; +} + + +static void for_all_windows(void (*func)(struct xio_win *xw), struct xio_win *except) +{ + struct xio *xio, *vtn; + struct xio_win *xw, *vwn; + + for (xio = PTR dpys->first; vtn = PTR xio->node->next; xio = vtn) + for (xw = PTR xio->windows->first; vwn = PTR xw->node->next; xw = vwn) + if (xw != except) + func(xw); +} + + +int xio_set_concealed(struct xio_win *xw, int on) +{ + on = !!on; + if (xw->reveal == on) + return on; + + xw->reveal = on; + xw->modified |= xw->concealed; + return !on; +} + + +static void sel_set(struct xio_win *xw, int x1, int y1, int x2, int y2) +{ + int t; + + x1 = bound(0, x1, W-1); + y1 = bound(0, y1, H-1); + x2 = bound(0, x2, W-1); + y2 = bound(0, y2, H-1); + + if (x1 > x2) + t = x1, x1 = x2, x2 = t; + if (y1 > y2) + t = y1, y1 = y2, y2 = t; + + dirty(xw, xw->sel_y1, xw->sel_y2); + + if (xw->hidden & (1 << y1)) + y1--; + if (xw->hidden & (2 << y2)) + y2++; + + xw->sel_x1 = x1; + xw->sel_y1 = y1; + xw->sel_x2 = x2 + 1; + xw->sel_y2 = y2 + 1; + dirty(xw, xw->sel_y1, xw->sel_y2); +} + + +static void sel_abort(struct xio_win *xw) +{ + if (xw->sel_set_t) + XSetSelectionOwner(xw->xio->dpy, XA_PRIMARY, None, xw->sel_set_t); + if (xw->sel_y1 != NO_SEL) + dirty(xw, xw->sel_y1, xw->sel_y2); + xw->sel_y1 = NO_SEL; + xw->sel_set_t = 0; + xw->sel_start_t = 0; +} + + +static void sel_start(struct xio_win *xw, int x, int y, Time t) +{ + sel_abort(xw); + xw->sel_start_x = x; + xw->sel_start_y = y; + xw->sel_start_t = t; +} + + +static void sel_move(struct xio_win *xw, int x, int y, Time t) +{ + if (xw->sel_start_t == 0) + return; + if (xw->sel_y1 == NO_SEL) + if (t - xw->sel_start_t < SEL_MIN_TIME) + if (x == xw->sel_start_x) + if (y == xw->sel_start_y) + return; + sel_set(xw, xw->sel_start_x, xw->sel_start_y, x, y); +} + + +static int sel_end(struct xio_win *xw, int x, int y, Time t) +{ + sel_move(xw, x, y, t); + xw->sel_start_t = 0; + + if (xw->sel_y1 == NO_SEL) + return 0; + + for_all_windows(sel_abort, xw); + XSetSelectionOwner(xw->xio->dpy, XA_PRIMARY, xw->win, t); + if (XGetSelectionOwner(xw->xio->dpy, XA_PRIMARY) == xw->win) + xw->sel_set_t = t; + else + sel_abort(xw); + return 1; +} + + +static int sel_convert2ascii(struct xio_win *xw, u8 *buf) +{ + u8 *d = buf; + int x, y, nl = 0; + + for (y = xw->sel_y1; y < xw->sel_y2; y++) + { + u8 *s = xw->ch + y * W; + int gfx = 0, con = 0; + + if (~xw->hidden & (1 << y)) + { + for (x = 0; x < xw->sel_x2; ++x) + { + int ch, c = ' '; + switch (ch = *s++) + { + case 0x00 ... 0x07: + gfx = con = 0; + break; + case 0x10 ... 0x17: + gfx = 1, con = 0; + break; + case 0x18: + con = not xw->reveal; + break; + case 0xa0 ... 0xff: + case 0x20 ... 0x7f: + if (not con) + if (gfx && ch != ' ' && (ch & 0xa0) == 0x20) + c = '#'; + else if (ch == 0x7f) + c = '*'; + else + c = ch; + break; + } + if (x >= xw->sel_x1) + { + if (nl) + *d++ = '\n', nl = 0; + *d++ = c; + } + } + nl = 1; + } + } + *d = 0; // not necessary + return d - buf; +} + + +static Pixmap sel_convert2pixmap(struct xio_win *xw) +{ + struct xio *xio = xw->xio; + Pixmap pm; + + if (xw->sel_y1 == NO_SEL) + return None; + + pm = XCreatePixmap(xio->dpy, xio->root, (xw->sel_x2 - xw->sel_x1) * CW, + (xw->sel_y2 - xw->sel_y1) * CH, + xio->depth); + xw->sel_pixmap = pm; + dirty(xw, xw->sel_y1, xw->sel_y2); + xio_update_win(xw); + xw->sel_pixmap = 0; + + return pm; +} + + +static int sel_do_conv(struct xio_win *xw, Window w, Atom type, Atom prop) +{ + struct xio *xio = xw->xio; + + if (type == xio->xa_targets) + { + u32 atoms[6]; + + atoms[0] = XA_STRING; + atoms[1] = xio->xa_text; + atoms[2] = XA_PIXMAP; + atoms[3] = XA_COLORMAP; + atoms[4] = xio->xa_multiple; + atoms[5] = xio->xa_timestamp; + XChangeProperty(xio->dpy, w, prop, type, + 32, PropModeReplace, PTR atoms, NELEM(atoms)); + } + else if (type == xio->xa_timestamp) + { + u32 t = xw->sel_set_t; + + XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, PTR &t, 1); + } + else if (type == XA_COLORMAP) + { + u32 t = xio->cmap; + + XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, PTR &t, 1); + } + else if (type == XA_STRING || type == xio->xa_text) + { + u8 buf[H * (W+1)]; + int len; + + len = sel_convert2ascii(xw, buf); + + XChangeProperty(xio->dpy, w, prop, type, 8, PropModeReplace, buf, len); + } + else if (type == XA_PIXMAP || type == XA_DRAWABLE) + { + Pixmap pm; + + pm = sel_convert2pixmap(xw); + + XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, PTR &pm, 1); + } + else if (type == xio->xa_multiple) + { + u32 *atoms, ty, fo, i; + unsigned long n, b; + + if (prop != None) + { + if (Success == XGetWindowProperty(xio->dpy, w, prop, 0, 1024, 0, + AnyPropertyType, PTR &ty, PTR &fo, &n, &b, PTR &atoms)) + { + if (fo == 32 && n%2 == 0) + { + for (i = 0; i < n; i += 2) + if (sel_do_conv(xw, w, atoms[i], atoms[i+1]) == None) + atoms[i] = None; + } + XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, + PTR atoms, n); + XFree(atoms); + } + } + } + else + return None; + return prop; +} + + +static void sel_send(struct xio_win *xw, XSelectionRequestEvent *req) +{ + XSelectionEvent ev[1]; + + if (req->property == None) + req->property = req->target; + + ev->type = SelectionNotify; + ev->requestor = req->requestor; + ev->selection = req->selection; + ev->target = req->target; + ev->property = sel_do_conv(xw, req->requestor, req->target, req->property); + ev->time = req->time; + XSendEvent(xw->xio->dpy, req->requestor, False, 0, PTR ev); +} + + +static void sel_retrieve(struct xio_win *xw, Window w, Atom prop, int del) +{ + u8 *data; + u32 ty, fo; + unsigned long n, b; + struct xio *xio = xw->xio; + + if (prop == None) + return; + + if (Success == XGetWindowProperty(xio->dpy, w, prop, 0, 1024, del, + AnyPropertyType, PTR &ty, PTR &fo, &n, &b, PTR &data)) + { + if (fo == 8 && n != 0) + { + struct vt_event vtev[1]; + + vtev->resource = xw; + vtev->type = EV_SELECTION; + vtev->i1 = n; + vtev->p1 = data; + xw->handler(xw->data, vtev); + } + XFree(data); + } +} + + +void xio_cancel_selection(struct xio_win *xw) +{ + sel_abort(xw); +} + + +void xio_query_selection(struct xio_win *xw) +{ + struct xio *xio = xw->xio; + + if (XGetSelectionOwner(xio->dpy, XA_PRIMARY) == None) + sel_retrieve(xw, xio->root, XA_CUT_BUFFER0, False); + else + { + XDeleteProperty(xio->dpy, xw->win, XA_STRING); + XConvertSelection(xio->dpy, XA_PRIMARY, XA_STRING, + XA_STRING, xw->win, xw->tstamp); + } +} + + +void xio_set_selection(struct xio_win *xw, int x1, int y1, int x2, int y2) +{ + sel_start(xw, x1, y1, xw->tstamp - SEL_MIN_TIME); + sel_end(xw, x2, y2, xw->tstamp); +} + + +static void handle_event(struct xio *xio, int fd) +{ + struct xio_win *xw; + struct vt_event vtev[1]; + XEvent ev[1]; + + XNextEvent(xio->dpy, ev); + + for (xw = PTR xio->windows->first; xw->node->next; xw = PTR xw->node->next) + if (xw->win == ev->xany.window) + break; + if (xw->node->next == 0) + return; + + vtev->resource = xw; + + switch(ev->type) + { + case Expose: + { + int y1 = ev->xexpose.y / CH; + int y2 = (ev->xexpose.y + ev->xexpose.height + CH-1) / CH; + + dirty(xw, y1, y2); + break; + } + case ClientMessage: + { + vtev->type = EV_CLOSE; + if (ev->xclient.format == 32) + if ((Atom)ev->xclient.data.l[0] == xio->xa_del_win) + xw->handler(xw->data, vtev); + break; + } + case KeyPress: + { + unsigned char ch; + KeySym k; + + xw->tstamp = ev->xkey.time; + vtev->type = EV_KEY; + vtev->i1 = 0; + vtev->i2 = (ev->xkey.state & ShiftMask) != 0; + if (XLookupString(&ev->xkey, &ch, 1, &k, 0)) + vtev->i1 = ch; + else + switch (k) + { + case XK_Left: vtev->i1 = KEY_LEFT; break; + case XK_Right: vtev->i1 = KEY_RIGHT; break; + case XK_Up: vtev->i1 = KEY_UP; break; + case XK_Down: vtev->i1 = KEY_DOWN; break; + case XK_Prior: vtev->i1 = KEY_PUP; break; + case XK_Next: vtev->i1 = KEY_PDOWN; break; + case XK_Delete: vtev->i1 = KEY_DEL; break; + case XK_Insert: vtev->i1 = KEY_INS; break; + case XK_F1: vtev->i1 = KEY_F(1); break; + case XK_F2: vtev->i1 = KEY_F(2); break; + case XK_F3: vtev->i1 = KEY_F(3); break; + case XK_F4: vtev->i1 = KEY_F(4); break; + case XK_F5: vtev->i1 = KEY_F(5); break; + case XK_F6: vtev->i1 = KEY_F(6); break; + case XK_F7: vtev->i1 = KEY_F(7); break; + case XK_F8: vtev->i1 = KEY_F(8); break; + case XK_F9: vtev->i1 = KEY_F(9); break; + case XK_F10: vtev->i1 = KEY_F(10); break; + case XK_F11: vtev->i1 = KEY_F(11); break; + case XK_F12: vtev->i1 = KEY_F(12); break; + } + if (vtev->i1) + xw->handler(xw->data, vtev); + break; + } + case ButtonPress: + { + xw->tstamp = ev->xkey.time; + ev->xbutton.x /= CW; + ev->xbutton.y /= CH; + if (ev->xbutton.button == Button1) + sel_start(xw, ev->xbutton.x, ev->xbutton.y, ev->xbutton.time); + break; + } + case MotionNotify: + { + xw->tstamp = ev->xkey.time; + ev->xmotion.x /= CW; + ev->xmotion.y /= CH; + if (ev->xmotion.state & Button1Mask) + sel_move(xw, ev->xmotion.x, ev->xmotion.y, ev->xmotion.time); + break; + } + case ButtonRelease: + { + xw->tstamp = ev->xkey.time; + ev->xbutton.x /= CW; + ev->xbutton.y /= CH; + if (ev->xbutton.button == Button1) + if (sel_end(xw, ev->xbutton.x, ev->xbutton.y, ev->xbutton.time)) + break; + + vtev->type = EV_MOUSE; + vtev->i1 = ev->xbutton.button; + vtev->i2 = (ev->xbutton.state & ShiftMask) != 0; + vtev->i3 = ev->xbutton.x; + vtev->i4 = ev->xbutton.y; + if (vtev->i3 >= 0 && vtev->i3 < W && vtev->i4 >= 0 && vtev->i4 < H) + xw->handler(xw->data, vtev); + break; + } + case SelectionClear: + { + // may be our own Owner=None due to sel_start + if (xw->sel_set_t && ev->xselectionclear.time >= xw->sel_set_t) + { + xw->sel_set_t = 0; // no need to reset owner + sel_abort(xw); + } + break; + } + case SelectionRequest: + { + sel_send(xw, &ev->xselectionrequest); + break; + } + case SelectionNotify: + { + sel_retrieve(xw, ev->xselection.requestor, ev->xselection.property, True); + break; + } + default: + break; + } +} + + +static void switch_blink_state(struct xio_win *xw) +{ + xw->blink_on = !xw->blink_on; + xw->modified |= xw->blink; + dirty(xw, xw->curs_y, xw->curs_y + 1); +} + + +static void send_timer_event(struct xio_win *xw) +{ + struct vt_event vtev[1]; + vtev->type = EV_TIMER; + xw->handler(xw->data, vtev); +} + + +static void xio_timer(void *data, int fd) +{ + char buf[64]; + read(fd, buf, sizeof(buf)); + for_all_windows(switch_blink_state, 0); + for_all_windows(send_timer_event, 0); +} + + +void xio_event_loop(void) +{ + struct xio *xio, *vtn; + int f; + + while (not dl_empty(dpys)) + { + do + { + for_all_windows(xio_update_win, 0); + f = 0; + for (xio = PTR dpys->first; vtn = PTR xio->node->next; xio = vtn) + while (XPending(xio->dpy)) + { + handle_event(xio, xio->fd); + f++; + } + } while (f); + fdset_select(fds, -1); + } +} diff --git a/util/alevt/xio.h b/util/alevt/xio.h new file mode 100644 index 0000000..664b701 --- /dev/null +++ b/ util/alevt/xio.h@@ -0,0 +1,80 @@ +#ifndef VTXIO_H +#define VTXIO_H + +#include <X11/Xlib.h> +#include "vt.h" +#include "dllist.h" + +typedef u32 lbits; +#define ALL_LINES ((1ul << H) - 1) + +/* one xio per display */ +struct xio +{ + struct dl_node node[1]; + int argc; + char **argv; + Display *dpy; /* display connection */ + int fd; /* the displays file descriptor */ + Atom xa_del_win; /* WM_DELETE_WINDOW atom */ + Atom xa_targets; /* TARGETS atom (selection) */ + Atom xa_timestamp; /* TIMESTAMP atom (selection) */ + Atom xa_text; /* TEXT atom (selection) */ + Atom xa_multiple; /* MULTIPLE atom (selection) */ + Window group_leader; /* unmapped window */ + int screen; /* DefaultScreen */ + int width, height; /* DisplayWidth/Height */ + int depth; /* DefaultDepth */ + Window root; /* DefaultRoot */ + Colormap cmap; + int color[16]; /* 8 normal, 8 dim intensity */ + Pixmap font[2]; /* normal, dbl-height */ + Pixmap icon; /* icon pixmap */ + struct dl_head windows[1]; /* all windows on this display */ +}; + +/* one vt_win per window */ +struct xio_win +{ + struct dl_node node[1]; + struct xio *xio; /* display */ + Window win; /* the drawing window */ + Time tstamp; /* timestamp of last user event */ + GC gc; /* it's graphics context */ + u8 ch[H*W]; /* the page contents */ + lbits modified, hidden, lhidden; /* states for each line */ + lbits dheight, blink, concealed; /* attributes for each line */ + int fg, bg; /* current foreground/background */ + int blink_on; /* blinking on */ + int reveal; /* reveal concealed text */ + void (*handler)(void *data, struct vt_event *ev); /* event-handler */ + void *data; /* data for the event-handler */ + int curs_x, curs_y; /* cursor position */ + u8 title[32]; /* the user title */ + // selection support + int sel_start_x, sel_start_y; + Time sel_start_t; + Time sel_set_t; /* time we got selection owner */ + int sel_x1, sel_y1, sel_x2, sel_y2; /* selected area */ + Pixmap sel_pixmap; /* for pixmap-selection requests */ +}; + +struct xio *xio_open_dpy(char *dpy, int argc, char **argv); +struct xio_win *xio_open_win(struct xio *xio, char *geom); +void xio_close_win(struct xio_win *xw, int dpy_too); +void xio_close_dpy(struct xio *xio); +void xio_set_handler(struct xio_win *xw, void *handler, void *data); +void xio_clear_win(struct xio_win *xw); +void xio_put_line(struct xio_win *xw, int line, u8 *data); +void xio_put_str(struct xio_win *xw, int line, u8 *c_str); +int xio_get_line(struct xio_win *xw, int line, u8 *data); +int xio_set_concealed(struct xio_win *xw, int on); +void xio_update_win(struct xio_win *xw); +void xio_fd_handler(int fd, void *handler, void *data); +void xio_cancel_selection(struct xio_win *xw); +void xio_query_selection(struct xio_win *xw); +void xio_set_selection(struct xio_win *xw, int x1, int y1, int x2, int y2); +void xio_set_cursor(struct xio_win *xw, int x, int y); +void xio_event_loop(void); +void xio_title(struct xio_win *xw, char *title); +#endif diff --git a/util/atsc_epg/Makefile b/util/atsc_epg/Makefile new file mode 100644 index 0000000..747e2b8 --- /dev/null +++ b/ util/atsc_epg/Makefile@@ -0,0 +1,16 @@ +# Makefile for linuxtv.org dvb-apps/util/atsc_epg + +binaries = atsc_epg + +inst_bin = $(binaries) + +CPPFLAGS += -I../../lib -std=c99 -D_POSIX_SOURCE +#LDFLAGS += -static -L../../lib/libdvbapi -L../../lib/libucsi +LDFLAGS += -L../../lib/libdvbapi -L../../lib/libucsi +LDLIBS += -ldvbapi -lucsi + +.PHONY: all + +all: $(binaries) + +include ../../Make.rules diff --git a/util/atsc_epg/README b/util/atsc_epg/README new file mode 100644 index 0000000..6a82453 --- /dev/null +++ b/ util/atsc_epg/README@@ -0,0 +1,12 @@ +Hi there, + +atsc_epg is a small utility for obtaining information such as programs, EPG +(electronic program guide) from an ATSC channel. + +Pulling the detailed information, i.e., option '-t', may take fairly long +time, or never ending, which is a bug of the PSIP generator. Ctrl+C can be +used to abort and the received parts will be printed. + +Enjoy, +Yufei + diff --git a/util/atsc_epg/atsc_epg.c b/util/atsc_epg/atsc_epg.c new file mode 100644 index 0000000..55e266d --- /dev/null +++ b/ util/atsc_epg/atsc_epg.c@@ -0,0 +1,1249 @@ +/* + * atsc_epg utility + * + * Copyright (C) 2009 Yufei Yuan <yfyuan@gmail.com> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <time.h> +#include <signal.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <sys/poll.h> +#include <errno.h> +#include <getopt.h> +#include <stdarg.h> +#include <libdvbapi/dvbfe.h> +#include <libdvbapi/dvbdemux.h> +#include <libucsi/dvb/section.h> +#include <libucsi/atsc/section.h> +#include <libucsi/atsc/types.h> + +#define TIMEOUT 60 +#define RRT_TIMEOUT 60 +#define MAX_NUM_EVENT_TABLES 128 +#define TITLE_BUFFER_LEN 4096 +#define MESSAGE_BUFFER_LEN (16 * 1024) +#define MAX_NUM_CHANNELS 16 +#define MAX_NUM_EVENTS_PER_CHANNEL (4 * 24 * 7) + +static int atsc_scan_table(int dmxfd, uint16_t pid, enum atsc_section_tag tag, + void **table_section); + +static const char *program; +static int adapter = 0; +static int period = 12; /* hours */ +static int frequency; +static int enable_ett = 0; +static int ctrl_c = 0; +static const char *modulation = NULL; +static char separator[80]; +void (*old_handler)(int); + +struct atsc_string_buffer { + int buf_len; + int buf_pos; + char *string; +}; + +struct atsc_event_info { + uint16_t id; + struct tm start; + struct tm end; + int title_pos; + int title_len; + int msg_pos; + int msg_len; +}; + +struct atsc_eit_section_info { + uint8_t section_num; + uint8_t num_events; + uint8_t num_etms; + uint8_t num_received_etms; + struct atsc_event_info **events; +}; + +struct atsc_eit_info { + int num_eit_sections; + struct atsc_eit_section_info *section; +}; + +struct atsc_channel_info { + uint8_t num_eits; + uint8_t service_type; + char short_name[8]; + uint16_t major_num; + uint16_t minor_num; + uint16_t tsid; + uint16_t prog_num; + uint16_t src_id; + struct atsc_eit_info *eit; + struct atsc_event_info *last_event; + int event_info_index; + struct atsc_event_info e[MAX_NUM_EVENTS_PER_CHANNEL]; + struct atsc_string_buffer title_buf; + struct atsc_string_buffer msg_buf; +}; + +struct atsc_virtual_channels_info { + int num_channels; + uint16_t eit_pid[MAX_NUM_EVENT_TABLES]; + uint16_t ett_pid[MAX_NUM_EVENT_TABLES]; + struct atsc_channel_info ch[MAX_NUM_CHANNELS]; +} guide; + +struct mgt_table_name { + uint16_t range; + const char *string; +}; + +struct mgt_table_name mgt_tab_name_array[] = { + {0x0000, "terrestrial VCT with current_next_indictor=1"}, + {0x0001, "terrestrial VCT with current_next_indictor=0"}, + {0x0002, "cable VCT with current_next_indictor=1"}, + {0x0003, "cable VCT with current_next_indictor=0"}, + {0x0004, "channel ETT"}, + {0x0005, "DCCSCT"}, + {0x00FF, "reserved for future ATSC use"}, + {0x017F, "EIT"}, + {0x01FF, "reserved for future ATSC use"}, + {0x027F, "event ETT"}, + {0x02FF, "reserved for future ATSC use"}, /* FIXME */ + {0x03FF, "RRT with rating region"}, + {0x0FFF, "user private"}, + {0x13FF, "reserved for future ATSC use"}, + {0x14FF, "DCCT with dcc_id"}, + {0xFFFF, "reserved for future ATSC use"} +}; + +const char *channel_modulation_mode[] = { + "", + "analog", + "SCTE mode 1", + "SCTE mode 2", + "ATSC 8VSB", + "ATSC 16VSB" +}; + +const char *channel_service_type[] = { + "", + "analog TV", + "ATSC digital TV", + "ATSC audio", + "ATSC data-only" +}; + +void *(*table_callback[16])(struct atsc_section_psip *) = +{ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, + (void *(*)(struct atsc_section_psip *))atsc_mgt_section_codec, + (void *(*)(struct atsc_section_psip *))atsc_tvct_section_codec, + (void *(*)(struct atsc_section_psip *))atsc_cvct_section_codec, + (void *(*)(struct atsc_section_psip *))atsc_rrt_section_codec, + (void *(*)(struct atsc_section_psip *))atsc_eit_section_codec, + (void *(*)(struct atsc_section_psip *))atsc_ett_section_codec, + (void *(*)(struct atsc_section_psip *))atsc_stt_section_codec, + NULL, NULL +}; + +static void int_handler(int sig_num) +{ + if(SIGINT != sig_num) { + return; + } + ctrl_c = 1; +} + +/* shamelessly stolen from dvbsnoop, but almost not modified */ +static uint32_t get_bits(const uint8_t *buf, int startbit, int bitlen) +{ + const uint8_t *b; + uint32_t mask,tmp_long; + int bitHigh,i; + + b = &buf[startbit / 8]; + startbit %= 8; + + bitHigh = 8; + tmp_long = b[0]; + for (i = 0; i < ((bitlen-1) >> 3); i++) { + tmp_long <<= 8; + tmp_long |= b[i+1]; + bitHigh += 8; + } + + startbit = bitHigh - startbit - bitlen; + tmp_long = tmp_long >> startbit; + mask = (1ULL << bitlen) - 1; + return tmp_long & mask; +} + +static void usage(void) +{ + fprintf(stderr, "usage: %s [-a <n>] -f <frequency> [-p <period>]" + " [-m <modulation>] [-t] [-h]\n", program); +} + +static void help(void) +{ + fprintf(stderr, + "\nhelp:\n" + "%s [-a <n>] -f <frequency> [-p <period>] [-m <modulation>] [-t] [-h]\n" + " -a: adapter index to use, (default 0)\n" + " -f: tuning frequency\n" + " -p: period in hours, (default 12)\n" + " -m: modulation ATSC vsb_8|vsb_16 (default vsb_8)\n" + " -t: enable ETT to receive program details, if available\n" + " -h: display this message\n", program); +} + +static int close_frontend(struct dvbfe_handle *fe) +{ + if(NULL == fe) { + fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__); + } + + dvbfe_close(fe); + + return 0; +} + +static int open_frontend(struct dvbfe_handle **fe) +{ + struct dvbfe_info fe_info; + + if(NULL == (*fe = dvbfe_open(adapter, 0, 0))) { + fprintf(stderr, "%s(): error calling dvbfe_open()\n", + __FUNCTION__); + return -1; + } + dvbfe_get_info(*fe, 0, &fe_info, DVBFE_INFO_QUERYTYPE_IMMEDIATE, 0); + if(DVBFE_TYPE_ATSC != fe_info.type) { + fprintf(stderr, "%s(): only ATSC frontend supported currently\n", + __FUNCTION__); + return -1; + } + fe_info.feparams.frequency = frequency; + fe_info.feparams.inversion = DVBFE_INVERSION_AUTO; + fe_info.feparams.u.atsc.modulation = DVBFE_ATSC_MOD_VSB_8; + fprintf(stdout, "tuning to %d Hz, please wait...\n", frequency); + if(dvbfe_set(*fe, &fe_info.feparams, TIMEOUT * 1000)) { + fprintf(stderr, "%s(): cannot lock to %d Hz in %d seconds\n", + __FUNCTION__, frequency, TIMEOUT); + return -1; + } + fprintf(stdout, "tuner locked.\n"); + + return 0; +} + +#if ENABLE_RRT +/* this is untested as since this part of the library is broken */ +static int parse_rrt(int dmxfd) +{ + const enum atsc_section_tag tag = stag_atsc_rating_region; + struct atsc_rrt_section *rrt; + struct atsc_text *region_name; + struct atsc_text_string *atsc_str; + int i, j, ret; + + i = 0; + fprintf(stdout, "waiting for RRT: "); + fflush(stdout); + while(i < RRT_TIMEOUT) { + ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&rrt); + if(0 > ret) { + fprintf(stderr, "%s(): error calling atsc_scan_table()\n", + __FUNCTION__); + return -1; + } + if(0 == ret) { + if(RRT_TIMEOUT > i) { + fprintf(stdout, "."); + fflush(stdout); + } else { + fprintf(stdout, "\nno RRT in %d seconds\n", + RRT_TIMEOUT); + return 0; + } + i += TIMEOUT; + } else { + fprintf(stdout, "\n"); + fflush(stdout); + break; + } + } + + region_name = atsc_rrt_section_rating_region_name_text(rrt); + atsc_text_strings_for_each(region_name, atsc_str, i) { + struct atsc_text_string_segment *seg; + + atsc_text_string_segments_for_each(atsc_str, seg, j) { + const char *c; + int k; + if(seg->mode < 0x3E) { + fprintf(stderr, "%s(): text mode of 0x%02X " + "not supported yet\n", + __FUNCTION__, seg->mode); + return -1; + } + c = (const char *)atsc_text_string_segment_bytes(seg); + for(k = 0; k < seg->number_bytes; k++) { + fprintf(stdout, "%c", c[k]); + } + } + } + + return 0; +} +#endif + +static int parse_stt(int dmxfd) +{ + const enum atsc_section_tag tag = stag_atsc_system_time; + const struct atsc_stt_section *stt; + time_t rx_time; + time_t sys_time; + int ret; + + ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&stt); + if(0 > ret) { + fprintf(stderr, "%s(): error calling atsc_scan_table()\n", + __FUNCTION__); + return -1; + } + if(0 == ret) { + fprintf(stdout, "no STT in %d seconds\n", TIMEOUT); + return 0; + } + + rx_time = atsctime_to_unixtime(stt->system_time); + time(&sys_time); + fprintf(stdout, "system time: %s", ctime(&sys_time)); + fprintf(stdout, "TS STT time: %s", ctime(&rx_time)); + + return 0; +} + +static int parse_tvct(int dmxfd) +{ + int num_sections; + uint32_t section_pattern; + const enum atsc_section_tag tag = stag_atsc_terrestrial_virtual_channel; + struct atsc_tvct_section *tvct; + struct atsc_tvct_channel *ch; + struct atsc_channel_info *curr_info; + int i, k, ret; + + section_pattern = 0; + num_sections = -1; + + do { + ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&tvct); + if(0 > ret) { + fprintf(stderr, "%s(): error calling atsc_scan_table()\n", + __FUNCTION__); + return -1; + } + if(0 == ret) { + fprintf(stdout, "no TVCT in %d seconds\n", TIMEOUT); + return 0; + } + + if(-1 == num_sections) { + num_sections = 1 + tvct->head.ext_head.last_section_number; + if(32 < num_sections) { + fprintf(stderr, "%s(): no support yet for " + "tables having more than 32 sections\n", + __FUNCTION__); + return -1; + } + } else { + if(num_sections != + 1 + tvct->head.ext_head.last_section_number) { + fprintf(stderr, + "%s(): last section number does not match\n", + __FUNCTION__); + return -1; + } + } + if(section_pattern & (1 << tvct->head.ext_head.section_number)) { + continue; + } + section_pattern |= 1 << tvct->head.ext_head.section_number; + + if(MAX_NUM_CHANNELS < guide.num_channels + + tvct->num_channels_in_section) { + fprintf(stderr, "%s(): no support for more than %d " + "virtual channels in a pyhsical channel\n", + __FUNCTION__, MAX_NUM_CHANNELS); + return -1; + } + curr_info = &guide.ch[guide.num_channels]; + guide.num_channels += tvct->num_channels_in_section; + + atsc_tvct_section_channels_for_each(tvct, ch, i) { + /* initialize the curr_info structure */ + /* each EIT covers 3 hours */ + curr_info->num_eits = (period / 3) + !!(period % 3); + while (curr_info->num_eits && + (0xFFFF == guide.eit_pid[curr_info->num_eits - 1])) { + curr_info->num_eits -= 1; + } + if(curr_info->eit) { + fprintf(stderr, "%s(): non-NULL pointer detected " + "during initialization", __FUNCTION__); + return -1; + } + if(NULL == (curr_info->eit = calloc(curr_info->num_eits, + sizeof(struct atsc_eit_info)))) { + fprintf(stderr, "%s(): error calling calloc()\n", + __FUNCTION__); + return -1; + } + if(NULL == (curr_info->title_buf.string = calloc(TITLE_BUFFER_LEN, + sizeof(char)))) { + fprintf(stderr, "%s(): error calling calloc()\n", + __FUNCTION__); + return -1; + } + curr_info->title_buf.buf_len = TITLE_BUFFER_LEN; + curr_info->title_buf.buf_pos = 0; + + if(NULL == (curr_info->msg_buf.string = calloc(MESSAGE_BUFFER_LEN, + sizeof(char)))) { + fprintf(stderr, "%s(): error calling calloc()\n", + __FUNCTION__); + return -1; + } + curr_info->msg_buf.buf_len = MESSAGE_BUFFER_LEN; + curr_info->msg_buf.buf_pos = 0; + + for(k = 0; k < 7; k++) { + curr_info->short_name[k] = + get_bits((const uint8_t *)ch->short_name, + k * 16, 16); + } + curr_info->service_type = ch->service_type; + curr_info->major_num = ch->major_channel_number; + curr_info->minor_num = ch->minor_channel_number; + curr_info->tsid = ch->channel_TSID; + curr_info->prog_num = ch->program_number; + curr_info->src_id = ch->source_id; + curr_info++; + } + } while(section_pattern != (uint32_t)((1 << num_sections) - 1)); + + return 0; +} + +static int match_event(struct atsc_eit_info *eit, uint16_t event_id, + struct atsc_event_info **event, uint8_t *curr_index) +{ + int j, k; + struct atsc_eit_section_info *section; + + if(NULL == eit || NULL == event || NULL == curr_index) { + fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__); + return -1; + } + + for(j = 0; j < eit->num_eit_sections; j++) { + section = &eit->section[j]; + + for(k = 0; k < section->num_events; k++) { + if(section->events[k] && section->events[k]->id == + event_id) { + *event = section->events[k]; + break; + } + } + if(*event) { + *curr_index = j; + break; + } + } + + return 0; +} + +static int parse_message(struct atsc_channel_info *channel, + struct atsc_ett_section *ett, struct atsc_event_info *event) +{ + int i, j; + struct atsc_text *text; + struct atsc_text_string *str; + + if(NULL == ett || NULL == event || NULL == channel) { + fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__); + return -1; + } + + text = atsc_ett_section_extended_text_message(ett); + atsc_text_strings_for_each(text, str, i) { + struct atsc_text_string_segment *seg; + + atsc_text_string_segments_for_each(str, seg, j) { + event->msg_pos = channel->msg_buf.buf_pos; + if(0 > atsc_text_segment_decode(seg, + (uint8_t **)&channel->msg_buf.string, + (size_t *)&channel->msg_buf.buf_len, + (size_t *)&channel->msg_buf.buf_pos)) { + fprintf(stderr, "%s(): error calling " + "atsc_text_segment_decode()\n", + __FUNCTION__); + return -1; + } + event->msg_len = 1 + channel->msg_buf.buf_pos - + event->msg_pos; + } + } + + return 0; +} + +static int parse_ett(int dmxfd, int index, uint16_t pid) +{ + uint8_t curr_index; + uint32_t section_pattern; + const enum atsc_section_tag tag = stag_atsc_extended_text; + struct atsc_eit_info *eit; + struct atsc_ett_section *ett; + struct atsc_channel_info *channel; + struct atsc_event_info *event; + struct atsc_eit_section_info *section; + uint16_t source_id, event_id; + int c, ret; + + if(0xFFFF == guide.ett_pid[index]) { + return 0; + } + + for(c = 0; c < guide.num_channels; c++) { + channel = &guide.ch[c]; + eit = &channel->eit[index]; + + section_pattern = 0; + while(section_pattern != + (uint32_t)((1 << eit->num_eit_sections) - 1)) { + if(ctrl_c) { + return 0; + } + ret = atsc_scan_table(dmxfd, pid, tag, (void **)&ett); + fprintf(stdout, "."); + fflush(stdout); + if(0 > ret) { + fprintf(stderr, "%s(): error calling " + "atsc_scan_table()\n", __FUNCTION__); + return -1; + } + if(0 == ret) { + fprintf(stdout, "no ETT %d in %d seconds\n", + index, TIMEOUT); + return 0; + } + + source_id = ett->ETM_source_id; + event_id = ett->ETM_sub_id; + if(source_id != channel->src_id) { + continue; + } + + event = NULL; + if(match_event(eit, event_id, &event, &curr_index)) { + fprintf(stderr, "%s(): error calling " + "match_event()\n", __FUNCTION__); + return -1; + } + if(NULL == event) { + continue; + } + if(section_pattern & (1 << curr_index)) { + /* the section has been filled, so skip, + * not consider version yet + */ + continue; + } + if(event->msg_len) { + /* the message has been filled */ + continue; + } + + if(parse_message(channel, ett, event)) { + fprintf(stderr, "%s(): error calling " + "parse_message()\n", __FUNCTION__); + return -1; + } + section = &eit->section[curr_index]; + if(++section->num_received_etms == section->num_etms) { + section_pattern |= 1 << curr_index; + } + } + } + + return 0; +} + +static int parse_events(struct atsc_channel_info *curr_info, + struct atsc_eit_section *eit, struct atsc_eit_section_info *section) +{ + int i, j, k; + struct atsc_eit_event *e; + time_t start_time, end_time; + + if(NULL == curr_info || NULL == eit) { + fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__); + return -1; + } + + atsc_eit_section_events_for_each(eit, e, i) { + struct atsc_text *title; + struct atsc_text_string *str; + struct atsc_event_info *e_info = + &curr_info->e[curr_info->event_info_index]; + + if(0 == i && curr_info->last_event) { + if(e->event_id == curr_info->last_event->id) { + section->events[i] = NULL; + /* skip if it's the same event spanning + * over sections + */ + continue; + } + } + curr_info->event_info_index += 1; + section->events[i] = e_info; + e_info->id = e->event_id; + start_time = atsctime_to_unixtime(e->start_time); + end_time = start_time + e->length_in_seconds; + localtime_r(&start_time, &e_info->start); + localtime_r(&end_time, &e_info->end); + if(0 != e->ETM_location && 3 != e->ETM_location) { + /* FIXME assume 1 and 2 is interchangable as of now */ + section->num_etms++; + } + + title = atsc_eit_event_name_title_text(e); + atsc_text_strings_for_each(title, str, j) { + struct atsc_text_string_segment *seg; + + atsc_text_string_segments_for_each(str, seg, k) { + e_info->title_pos = curr_info->title_buf.buf_pos; + if(0 > atsc_text_segment_decode(seg, + (uint8_t **)&curr_info->title_buf.string, + (size_t *)&curr_info->title_buf.buf_len, + (size_t *)&curr_info->title_buf.buf_pos)) { + fprintf(stderr, "%s(): error calling " + "atsc_text_segment_decode()\n", + __FUNCTION__); + return -1; + } + e_info->title_len = curr_info->title_buf.buf_pos - + e_info->title_pos + 1; + } + } + } + + return 0; +} + +static int parse_eit(int dmxfd, int index, uint16_t pid) +{ + int num_sections; + uint8_t section_num; + uint8_t curr_channel_index; + uint32_t section_pattern; + const enum atsc_section_tag tag = stag_atsc_event_information; + struct atsc_eit_section *eit; + struct atsc_channel_info *curr_info; + struct atsc_eit_info *eit_info; + struct atsc_eit_section_info *section; + uint16_t source_id; + uint32_t eit_instance_pattern = 0; + int i, k, ret; + + while(eit_instance_pattern != + (uint32_t)((1 << guide.num_channels) - 1)) { + source_id = 0xFFFF; + section_pattern = 0; + num_sections = -1; + + do { + ret = atsc_scan_table(dmxfd, pid, tag, (void **)&eit); + fprintf(stdout, "."); + fflush(stdout); + if(0 > ret) { + fprintf(stderr, "%s(): error calling " + "atsc_scan_table()\n", __FUNCTION__); + return -1; + } + if(0 == ret) { + fprintf(stdout, "no EIT %d in %d seconds\n", + index, TIMEOUT); + return 0; + } + + if(0xFFFF == source_id) { + source_id = atsc_eit_section_source_id(eit); + for(k = 0; k < guide.num_channels; k++) { + if(source_id == guide.ch[k].src_id) { + curr_info = &guide.ch[k]; + curr_channel_index = k; + if(0 == index) { + curr_info->last_event = NULL; + } + break; + } + } + if(k == guide.num_channels) { + fprintf(stderr, "%s(): cannot find source_id " + "0x%04X in the EIT\n", + __FUNCTION__, source_id); + return -1; + } + } else { + if(source_id != + atsc_eit_section_source_id(eit)) { + continue; + } + } + if(eit_instance_pattern & (1 << curr_channel_index)) { + /* we have received this instance, + * so quit quick + */ + break; + } + + if(-1 == num_sections) { + num_sections = 1 + + eit->head.ext_head.last_section_number; + if(32 < num_sections) { + fprintf(stderr, + "%s(): no support yet for " + "tables having more than " + "32 sections\n", __FUNCTION__); + return -1; + } + } else { + if(num_sections != 1 + + eit->head.ext_head.last_section_number) { + fprintf(stderr, + "%s(): last section number " + "does not match\n", + __FUNCTION__); + return -1; + } + } + if(section_pattern & + (1 << eit->head.ext_head.section_number)) { + continue; + } + section_pattern |= 1 << eit->head.ext_head.section_number; + + eit_info = &curr_info->eit[index]; + if(NULL == (eit_info->section = + realloc(eit_info->section, + (eit_info->num_eit_sections + 1) * + sizeof(struct atsc_eit_section_info)))) { + fprintf(stderr, + "%s(): error calling realloc()\n", + __FUNCTION__); + return -1; + } + section_num = eit->head.ext_head.section_number; + if(0 == eit_info->num_eit_sections) { + eit_info->num_eit_sections = 1; + section = eit_info->section; + } else { + /* have to sort it into section order + * (temporal order) + */ + for(i = 0; i < eit_info->num_eit_sections; i++) { + if(eit_info->section[i].section_num > + section_num) { + break; + } + } + memmove(&eit_info->section[i + 1], + &eit_info->section[i], + (eit_info->num_eit_sections - i) * + sizeof(struct atsc_eit_section_info)); + section = &eit_info->section[i - 1]; + section = &eit_info->section[i]; + eit_info->num_eit_sections += 1; + } + + section->section_num = section_num; + section->num_events = eit->num_events_in_section; + section->num_etms = 0; + section->num_received_etms = 0; + if(NULL == (section->events = calloc(section->num_events, + sizeof(struct atsc_event_info *)))) { + fprintf(stderr, "%s(): error calling calloc()\n", + __FUNCTION__); + return -1; + } + if(parse_events(curr_info, eit, section)) { + fprintf(stderr, "%s(): error calling " + "parse_events()\n", __FUNCTION__); + return -1; + } + } while(section_pattern != (uint32_t)((1 << num_sections) - 1)); + eit_instance_pattern |= 1 << curr_channel_index; + } + + for(i = 0; i < guide.num_channels; i++) { + struct atsc_channel_info *channel = &guide.ch[i]; + struct atsc_eit_info *ei = &channel->eit[index]; + struct atsc_eit_section_info *s; + + if(0 == ei->num_eit_sections) { + channel->last_event = NULL; + continue; + } + s = &ei->section[ei->num_eit_sections - 1]; + /* BUG: it's incorrect when last section has no event */ + if(0 == s->num_events) { + channel->last_event = NULL; + continue; + } + channel->last_event = s->events[s->num_events - 1]; + } + + return 0; +} + +static int parse_mgt(int dmxfd) +{ + const enum atsc_section_tag tag = stag_atsc_master_guide; + struct atsc_mgt_section *mgt; + struct atsc_mgt_table *t; + int i, j, ret; + + ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&mgt); + if(0 > ret) { + fprintf(stderr, "%s(): error calling atsc_scan_table()\n", + __FUNCTION__); + return -1; + } + if(0 == ret) { + fprintf(stdout, "no MGT in %d seconds\n", TIMEOUT); + return 0; + } + + fprintf(stdout, "MGT table:\n"); + atsc_mgt_section_tables_for_each(mgt, t, i) { + struct mgt_table_name table; + + for(j = 0; j < (int)(sizeof(mgt_tab_name_array) / + sizeof(struct mgt_table_name)); j++) { + if(t->table_type > mgt_tab_name_array[j].range) { + continue; + } + table = mgt_tab_name_array[j]; + if(0 == j || mgt_tab_name_array[j - 1].range + 1 == + mgt_tab_name_array[j].range) { + j = -1; + } else { + j = t->table_type - mgt_tab_name_array[j - 1].range - 1; + if(0x017F == table.range) { + guide.eit_pid[j] = t->table_type_PID; + } else if (0x027F == table.range) { + guide.ett_pid[j] = t->table_type_PID; + } + } + break; + } + + fprintf(stdout, " %2d: type = 0x%04X, PID = 0x%04X, %s", i, + t->table_type, t->table_type_PID, table.string); + if(-1 != j) { + fprintf(stdout, " %d", j); + } + fprintf(stdout, "\n"); + } + + return 0; +} + +static int cleanup_guide(void) +{ + int i, j, k; + + for(i = 0; i < guide.num_channels; i++) { + struct atsc_channel_info *channel = &guide.ch[i]; + + if(channel->title_buf.string) { + free(channel->title_buf.string); + } + if(channel->msg_buf.string) { + free(channel->msg_buf.string); + } + for(j = 0; j < channel->num_eits; j++) { + struct atsc_eit_info *eit = &channel->eit[j]; + + for(k = 0; k < eit->num_eit_sections; k++) { + struct atsc_eit_section_info *section = + &eit->section[k]; + if(section->num_events) { + free(section->events); + } + } + if(k) { + free(eit->section); + } + } + if(j) { + free(channel->eit); + } + } + + return 0; +} + +static int print_events(struct atsc_channel_info *channel, + struct atsc_eit_section_info *section) +{ + int m; + char line[256]; + + if(NULL == section) { + fprintf(stderr, "%s(): NULL pointer detected", __FUNCTION__); + return -1; + } + for(m = 0; m < section->num_events; m++) { + struct atsc_event_info *event = + section->events[m]; + + if(NULL == event) { + continue; + } + fprintf(stdout, "|%02d:%02d--%02d:%02d| ", + event->start.tm_hour, event->start.tm_min, + event->end.tm_hour, event->end.tm_min); + snprintf(line, event->title_len, "%s", + &channel->title_buf.string[event->title_pos]); + line[event->title_len] = '\0'; + fprintf(stdout, "%s\n", line); + if(event->msg_len) { + int len = event->msg_len; + int pos = event->msg_pos; + size_t part; + + do { + part = len > 255 ? 255 : len; + snprintf(line, part, "%s", + &channel->msg_buf.string[pos]); + line[part] = '\0'; + fprintf(stdout, "%s", line); + len -= part; + pos += part; + } while(0 < len); + fprintf(stdout, "\n"); + } + } + return 0; +} + +static int print_guide(void) +{ + int i, j, k; + + fprintf(stdout, "%s\n", separator); + for(i = 0; i < guide.num_channels; i++) { + struct atsc_channel_info *channel = &guide.ch[i]; + + fprintf(stdout, "%d.%d %s\n", channel->major_num, + channel->minor_num, channel->short_name); + for(j = 0; j < channel->num_eits; j++) { + struct atsc_eit_info *eit = &channel->eit[j]; + + for(k = 0; k < eit->num_eit_sections; k++) { + struct atsc_eit_section_info *section = + &eit->section[k]; + if(print_events(channel, section)) { + fprintf(stderr, "%s(): error calling " + "print_events()\n", __FUNCTION__); + return -1; + } + } + } + fprintf(stdout, "%s\n", separator); + } + + return 0; +} + +static int open_demux(int *dmxfd) +{ + if((*dmxfd = dvbdemux_open_demux(adapter, 0, 0)) < 0) { + fprintf(stderr, "%s(): error calling dvbdemux_open_demux()\n", + __FUNCTION__); + return -1; + } + return 0; +} + +static int close_demux(int dmxfd) +{ + if(dvbdemux_stop(dmxfd)) { + fprintf(stderr, "%s(): error calling dvbdemux_stop()\n", + __FUNCTION__); + return -1; + } + return 0; +} + +/* used other utilities as template and generalized here */ +static int atsc_scan_table(int dmxfd, uint16_t pid, enum atsc_section_tag tag, + void **table_section) +{ + uint8_t filter[18]; + uint8_t mask[18]; + unsigned char sibuf[4096]; + int size; + int ret; + struct pollfd pollfd; + struct section *section; + struct section_ext *section_ext; + struct atsc_section_psip *psip; + + /* create a section filter for the table */ + memset(filter, 0, sizeof(filter)); + memset(mask, 0, sizeof(mask)); + filter[0] = tag; + mask[0] = 0xFF; + if(dvbdemux_set_section_filter(dmxfd, pid, filter, mask, 1, 1)) { + fprintf(stderr, "%s(): error calling atsc_scan_table()\n", + __FUNCTION__); + return -1; + } + + /* poll for data */ + pollfd.fd = dmxfd; + pollfd.events = POLLIN | POLLERR |POLLPRI; + if((ret = poll(&pollfd, 1, TIMEOUT * 1000)) < 0) { + if(ctrl_c) { + return 0; + } + fprintf(stderr, "%s(): error calling poll()\n", __FUNCTION__); + return -1; + } + + if(0 == ret) { + return 0; + } + + /* read it */ + if((size = read(dmxfd, sibuf, sizeof(sibuf))) < 0) { + fprintf(stderr, "%s(): error calling read()\n", __FUNCTION__); + return -1; + } + + /* parse section */ + section = section_codec(sibuf, size); + if(NULL == section) { + fprintf(stderr, "%s(): error calling section_codec()\n", + __FUNCTION__); + return -1; + } + + section_ext = section_ext_decode(section, 0); + if(NULL == section_ext) { + fprintf(stderr, "%s(): error calling section_ext_decode()\n", + __FUNCTION__); + return -1; + } + + psip = atsc_section_psip_decode(section_ext); + if(NULL == psip) { + fprintf(stderr, + "%s(): error calling atsc_section_psip_decode()\n", + __FUNCTION__); + return -1; + } + + *table_section = table_callback[tag & 0x0F](psip); + if(NULL == *table_section) { + fprintf(stderr, "%s(): error decode table section\n", + __FUNCTION__); + return -1; + } + + return 1; +} + +int main(int argc, char *argv[]) +{ + int i, dmxfd; + struct dvbfe_handle *fe; + + program = argv[0]; + + if(1 == argc) { + usage(); + exit(-1); + } + + for( ; ; ) { + char c; + + if(-1 == (c = getopt(argc, argv, "a:f:p:m:th"))) { + break; + } + + switch(c) { + case 'a': + adapter = strtoll(optarg, NULL, 0); + break; + + case 'f': + frequency = strtol(optarg, NULL, 0); + break; + + case 'p': + period = strtol(optarg, NULL, 0); + /* each table covers 3 hours */ + if((3 * MAX_NUM_EVENT_TABLES) < period) { + period = 3 * MAX_NUM_EVENT_TABLES; + } + break; + + case 'm': + /* just stub, so far ATSC only has VSB_8 */ + modulation = optarg; + break; + + case 't': + enable_ett = 1; + break; + + case 'h': + help(); + exit(0); + + default: + usage(); + exit(-1); + } + } + + memset(separator, '-', sizeof(separator)); + separator[79] = '\0'; + memset(&guide, 0, sizeof(struct atsc_virtual_channels_info)); + memset(guide.eit_pid, 0xFF, MAX_NUM_EVENT_TABLES * sizeof(uint16_t)); + memset(guide.ett_pid, 0xFF, MAX_NUM_EVENT_TABLES * sizeof(uint16_t)); + + if(open_frontend(&fe)) { + fprintf(stderr, "%s(): error calling open_frontend()\n", + __FUNCTION__); + return -1; + } + + if(open_demux(&dmxfd)) { + fprintf(stderr, "%s(): error calling open_demux()\n", + __FUNCTION__); + return -1; + } + + if(parse_stt(dmxfd)) { + fprintf(stderr, "%s(): error calling parse_stt()\n", + __FUNCTION__); + return -1; + } + + if(parse_mgt(dmxfd)) { + fprintf(stderr, "%s(): error calling parse_mgt()\n", + __FUNCTION__); + return -1; + } + + if(parse_tvct(dmxfd)) { + fprintf(stderr, "%s(): error calling parse_tvct()\n", + __FUNCTION__); + return -1; + } + +#ifdef ENABLE_RRT + if(parse_rrt(dmxfd)) { + fprintf(stderr, "%s(): error calling parse_rrt()\n", + __FUNCTION__); + return -1; + } +#endif + + fprintf(stdout, "receiving EIT "); + for(i = 0; i < guide.ch[0].num_eits; i++) { + if(parse_eit(dmxfd, i, guide.eit_pid[i])) { + fprintf(stderr, "%s(): error calling parse_eit()\n", + __FUNCTION__); + return -1; + } + } + fprintf(stdout, "\n"); + + old_handler = signal(SIGINT, int_handler); + if(enable_ett) { + fprintf(stdout, "receiving ETT "); + for(i = 0; i < guide.ch[0].num_eits; i++) { + if(0xFFFF != guide.ett_pid[i]) { + if(parse_ett(dmxfd, i, guide.ett_pid[i])) { + fprintf(stderr, "%s(): error calling " + "parse_eit()\n", __FUNCTION__); + return -1; + } + } + if(ctrl_c) { + break; + } + } + fprintf(stdout, "\n"); + } + signal(SIGINT, old_handler); + + if(print_guide()) { + fprintf(stderr, "%s(): error calling print_guide()\n", + __FUNCTION__); + return -1; + } + + if(cleanup_guide()) { + fprintf(stderr, "%s(): error calling cleanup_guide()\n", + __FUNCTION__); + return -1; + } + + if(close_demux(dmxfd)) { + fprintf(stderr, "%s(): error calling close_demux()\n", + __FUNCTION__); + return -1; + } + + if(close_frontend(fe)) { + fprintf(stderr, "%s(): error calling close_demux()\n", + __FUNCTION__); + return -1; + } + + return 0; +} @@ -42,14 +42,21 @@ static char *usage_str = "\nusage: femon [options]\n" " -H : human readable output\n" + " -A : Acoustical mode. A sound indicates the signal quality.\n" + " -r : If 'Acoustical mode' is active it tells the application\n" + " is called remotely via ssh. The sound is heard on the 'real'\n" + " machine but. The user has to be root.\n" " -a number : use given adapter (default 0)\n" " -f number : use given frontend (default 0)\n" " -c number : samples to take (default 0 = infinite)\n\n"; +int sleep_time=1000000; +int acoustical_mode=0; +int remote=0; static void usage(void) { - fprintf(stderr, usage_str); + fprintf(stderr, "%s", usage_str); exit(1); } @@ -59,6 +66,27 @@ int check_frontend (struct dvbfe_handle *fe, int human_readable, unsigned int co { struct dvbfe_info fe_info; unsigned int samples = 0; + FILE *ttyFile=NULL; + + // We dont write the "beep"-codes to stdout but to /dev/tty1. + // This is neccessary for Thin-Client-Systems or Streaming-Boxes + // where the computer does not have a monitor and femon is called via ssh. + if(acoustical_mode) + { + if(remote) + { + ttyFile=fopen("/dev/tty1","w"); + if(!ttyFile) + { + fprintf(stderr, "Could not open /dev/tty1. No access rights?\n"); + exit(-1); + } + } + else + { + ttyFile=stdout; + } + } do { if (dvbfe_get_info(fe, FE_STATUS_PARAMS, &fe_info, DVBFE_INFO_QUERYTYPE_IMMEDIATE, 0) != FE_STATUS_PARAMS) { @@ -94,12 +122,24 @@ int check_frontend (struct dvbfe_handle *fe, int human_readable, unsigned int co if (fe_info.lock) printf("FE_HAS_LOCK"); + // create beep if acoustical_mode enabled + if(acoustical_mode) + { + int signal=(fe_info.signal_strength * 100) / 0xffff; + fprintf( ttyFile, "\033[10;%d]\a", 500+(signal*2)); + // printf("Variable : %d\n", signal); + fflush(ttyFile); + } + printf("\n"); fflush(stdout); - usleep(1000000); + usleep(sleep_time); samples++; } while ((!count) || (count-samples)); - + + if(ttyFile) + fclose(ttyFile); + return 0; } @@ -148,7 +188,7 @@ int main(int argc, char *argv[]) int human_readable = 0; int opt; - while ((opt = getopt(argc, argv, "Ha:f:c:")) != -1) { + while ((opt = getopt(argc, argv, "rAHa:f:c:")) != -1) { switch (opt) { default: @@ -166,6 +206,15 @@ int main(int argc, char *argv[]) case 'H': human_readable = 1; break; + case 'A': + // Acoustical mode: we have to reduce the delay between + // checks in order to hear nice sound + sleep_time=5000; + acoustical_mode=1; + break; + case 'r': + remote=1; + break; } } diff --git a/util/gotox/Makefile b/util/gotox/Makefile new file mode 100644 index 0000000..673586a --- /dev/null +++ b/ util/gotox/Makefile@@ -0,0 +1,17 @@ +# Makefile for linuxtv.org dvb-apps/util/gotox + +binaries = gotox + +inst_bin = $(binaries) + +CPPFLAGS += -I../../lib +LDFLAGS += -L../../lib/libdvbapi +LDFLAGS += -L../../lib/libdvbsec +LDLIBS += -ldvbapi +LDLIBS += -ldvbsec + +.PHONY: all + +all: $(binaries) + +include ../../Make.rules diff --git a/util/gotox/gotox.c b/util/gotox/gotox.c new file mode 100644 index 0000000..6616133 --- /dev/null +++ b/ util/gotox/gotox.c@@ -0,0 +1,145 @@ +/* + * Copyright (C) 2006 by Michel Verbraak <michel@verbraak.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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 + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <libdvbapi/dvbfe.h> +#include <libdvbsec/dvbsec_api.h> + +static char *usage_str = + "\nusage: gotox [options] -d <angle>\n" + " Goto the specified angle. Positive value for East rotation\n" + " Negative value for West rotation on Northern Hemisphere.\n" + " -d degrees : Angle to turn to in degrees (default 0)\n" + " -a number : use given adapter (default 0)\n" + " -f number : use given frontend (default 0)\n" + " -t seconds : leave power on to rotor for at least specified seconds of time (default 30)\n\n"; + +int main(int argc, char *argv[]) +{ + struct dvbfe_handle *fe; + unsigned int adapter = 0, frontend = 0; + double angle = 0; + int opt; + unsigned int sleepcount = 30; + static char *weststr = "west"; + static char *eaststr = "east"; + + while ((opt = getopt(argc, argv, "ha:f:t:d:")) != -1) { + + switch (opt){ + case '?': + case 'h': + default: + fprintf(stderr, "%s", usage_str); + return EXIT_SUCCESS; + + case 'a': + adapter = strtoul(optarg, NULL, 0); + break; + + case 'f': + frontend = strtoul(optarg, NULL, 0); + break; + + case 't': + sleepcount = strtoul(optarg, NULL, 0); + break; + + case 'd': + angle = strtod(optarg, NULL); + break; + } + } + + printf("Will try to rotate %s to %.2f degrees.\n", (angle < 0.0) ? weststr : eaststr, angle ); + + fe = dvbfe_open(adapter, frontend, 0); + if (fe == NULL) { + fprintf(stderr, "Could not open frontend %d on adapter %d.\n", frontend, adapter); + exit(1); + } + + if (dvbfe_set_voltage(fe, DVBFE_SEC_VOLTAGE_OFF) != 0) { + fprintf(stderr, "Could not turn off power.\n"); + dvbfe_close(fe); + return 1; + } + else + printf("Power OFF.\n"); + + sleep(1); + + if (dvbfe_set_voltage(fe, DVBFE_SEC_VOLTAGE_18) != 0) { + fprintf(stderr, "Could not turn on power.\n"); + dvbfe_close(fe); + return 1; + } + else + printf("Power on to 18V.\n"); + + sleep(1); + + if (abs(angle) == 0.0) { + + if (dvbsec_diseqc_goto_satpos_preset(fe, DISEQC_ADDRESS_POLAR_AZIMUTH_POSITIONER, 0) != 0) { + fprintf(stderr, "Could not goto 0.\n"); + dvbfe_close(fe); + return 2; + } else { + printf("Going to home base 0 degrees.\n"); + } + } else { + + if (dvbsec_diseqc_goto_rotator_bearing(fe, DISEQC_ADDRESS_POLAR_AZIMUTH_POSITIONER, angle) != 0) { + fprintf(stderr, "Could not rotate.\n"); + dvbfe_close(fe); + return 2; + } + } + + while (sleepcount != 0) { + printf("%d: Rotating to %.2f.\r", sleepcount, angle); + fflush(NULL); + sleepcount--; + sleep(1); + } + + printf("\nRotated.\n"); + + if (dvbfe_set_voltage(fe, DVBFE_SEC_VOLTAGE_OFF) != 0) { + fprintf(stderr, "Could not turn off power.\n"); + dvbfe_close(fe); + return 1; + } + else + printf("Power OFF.\n"); + + sleep(1); + + dvbfe_close(fe); + + return EXIT_SUCCESS; +} diff --git a/util/scan/dvb-c/at-Kabel-Braunau b/util/scan/dvb-c/at-Kabel-Braunau new file mode 100644 index 0000000..1d93567 --- /dev/null +++ b/ util/scan/dvb-c/at-Kabel-Braunau@@ -0,0 +1,26 @@ +# Kabel Braunau +# freq sr fec mod +C 386000000 6900000 NONE QAM64 +C 394000000 6875000 NONE QAM64 +C 402000000 6875000 NONE QAM64 +C 410000000 6875000 NONE QAM64 +C 418000000 6875000 NONE QAM64 +C 426000000 6875000 NONE QAM64 +C 434000000 6875000 NONE QAM64 +C 458000000 6875000 NONE QAM64 +C 466000000 6900000 NONE QAM64 +C 474000000 6900000 NONE QAM64 +C 482000000 6111000 NONE QAM64 +C 490000000 6111000 NONE QAM64 +C 498000000 6875000 NONE QAM64 +C 506000000 6111000 NONE QAM64 +C 514000000 6111000 NONE QAM64 +C 522000000 6428000 NONE QAM128 +C 530000000 6428000 NONE QAM128 +C 546000000 6875000 NONE QAM64 +C 554000000 6875000 NONE QAM64 +C 562000000 6875000 NONE QAM64 +C 570000000 6111000 NONE QAM64 +C 578000000 6900000 NONE QAM256 +C 586000000 6900000 NONE QAM256 +C 594000000 6875000 NONE QAM64 diff --git a/util/scan/dvb-c/at-Kabelsignal b/util/scan/dvb-c/at-Kabelsignal new file mode 100644 index 0000000..4f7ec11 --- /dev/null +++ b/ util/scan/dvb-c/at-Kabelsignal@@ -0,0 +1,38 @@ +# kabelsignal +# freq sr fec mod +C 314000000 6900000 NONE QAM256 +C 322000000 6900000 NONE QAM256 +C 330000000 6900000 NONE QAM256 +C 338000000 6900000 NONE QAM256 +C 346000000 6900000 NONE QAM256 +C 354000000 6900000 NONE QAM256 +C 362000000 6900000 NONE QAM256 +C 370000000 6900000 NONE QAM256 +C 378000000 6900000 NONE QAM256 +C 386000000 6900000 NONE QAM256 +C 394000000 6900000 NONE QAM256 +C 402000000 6900000 NONE QAM256 +C 410000000 6900000 NONE QAM256 +C 418000000 6900000 NONE QAM256 +C 426000000 6900000 NONE QAM256 +C 434000000 6900000 NONE QAM256 +C 442000000 6900000 NONE QAM256 +C 450000000 6900000 NONE QAM256 +C 666000000 6900000 NONE QAM256 +C 674000000 6900000 NONE QAM256 +C 682000000 6900000 NONE QAM256 +C 690000000 6900000 NONE QAM256 +C 698000000 6900000 NONE QAM256 +C 706000000 6900000 NONE QAM256 +C 714000000 6900000 NONE QAM256 +C 722000000 6900000 NONE QAM256 +C 730000000 6900000 NONE QAM256 +C 738000000 6900000 NONE QAM256 +C 746000000 6900000 NONE QAM256 +C 762000000 6900000 NONE QAM256 +C 770000000 6900000 NONE QAM256 +C 778000000 6900000 NONE QAM256 +C 786000000 6900000 NONE QAM256 +C 794000000 6900000 NONE QAM256 +C 802000000 6900000 NONE QAM256 +C 810000000 6900000 NONE QAM256 @@ -1,18 +1,26 @@ # Kabel St. Florian bei Linz/AT KarrerNet # 2009-01-10 # freq sr fec mod -C 418000000 6900000 NONE QAM64 -C 426000000 6900000 NONE QAM64 -C 434000000 6900000 NONE QAM64 C 442000000 6900000 NONE QAM64 -C 450000000 6900000 NONE QAM64 C 458000000 6900000 NONE QAM64 C 466000000 6900000 NONE QAM64 C 474000000 6900000 NONE QAM64 C 482000000 6900000 NONE QAM64 +C 490000000 6900000 NONE QAM64 +C 498000000 6900000 NONE QAM64 +C 506000000 6900000 NONE QAM64 +C 514000000 6900000 NONE QAM64 C 522000000 6900000 NONE QAM64 C 530000000 6900000 NONE QAM64 C 538000000 6900000 NONE QAM64 +C 546000000 6900000 NONE QAM64 +C 554000000 6900000 NONE QAM64 +C 562000000 6900000 NONE QAM64 +C 570000000 6900000 NONE QAM64 C 578000000 6900000 NONE QAM64 -C 402000000 6900000 NONE QAM256 +C 586000000 6900000 NONE QAM64 +C 610000000 6900000 NONE QAM64 +C 386000000 6900000 NONE QAM256 +C 394000000 6900000 NONE QAM256 C 410000000 6900000 NONE QAM256 +C 434000000 6900000 NONE QAM256 diff --git a/util/scan/dvb-c/hu-Digikabel b/util/scan/dvb-c/hu-Digikabel new file mode 100644 index 0000000..c885bff --- /dev/null +++ b/ util/scan/dvb-c/hu-Digikabel@@ -0,0 +1,24 @@ +# Digikabel, Hungary
+# For the following cities:
+# Budapest, Dorog, Hatvan, Kiskunhalas, Debrecen, Szekesfehervar, Pecs,
+# Veszprem, Dunaujvaros, Miskolc, Gyongyos, Tatabanya, Varpalota, Nagykanizsa,
+# Salgotarjan, Batonyterenye, Szolnok, Szentistvan, Nyiregyhaza, Gyor,
+# Szazhalombatta, Bekescsaba, Bekes, Eger, Komlo, Oroszlany
+# In some of the cities not all the frequencies are available.
+# freq sr fec mod
+C 354000000 6900000 NONE QAM256
+C 362000000 6900000 NONE QAM256
+C 370000000 6900000 NONE QAM256
+C 378000000 6900000 NONE QAM256
+C 386000000 6900000 NONE QAM256
+C 394000000 6900000 NONE QAM256
+C 402000000 6900000 NONE QAM256
+C 410000000 6900000 NONE QAM256
+C 770000000 6900000 NONE QAM256
+C 778000000 6900000 NONE QAM256
+C 786000000 6900000 NONE QAM256
+C 794000000 6900000 NONE QAM256
+C 834000000 6900000 NONE QAM256
+C 842000000 6900000 NONE QAM256
+C 850000000 6900000 NONE QAM256
+C 858000000 6900000 NONE QAM256
diff --git a/util/scan/dvb-c/nl-Casema b/util/scan/dvb-c/nl-Casema deleted file mode 100644 index 5c42d85..0000000 --- a/ util/scan/dvb-c/nl-Casema+++ /dev/null @@ -1,3 +0,0 @@ -# Casema Netherlands -# freq sr fec mod -C 372000000 6875000 NONE QAM64 diff --git a/util/scan/dvb-c/nl-Ziggo b/util/scan/dvb-c/nl-Ziggo new file mode 100644 index 0000000..037cca1 --- /dev/null +++ b/ util/scan/dvb-c/nl-Ziggo@@ -0,0 +1,14 @@ +# Initial Tuning file for nl-Ziggo +# This file only lists the main +# frequencies. You still need to do +# a network scan to find other +# transponders. +# +# based on: +# http://blob.ziggo.nl/dynamic/NL_HOME/PDF-UPLOAD/Gebruikers-Handleiding-DigitaleTV.pdf +# Chapter 4 +# +C 372000000 6875000 NONE QAM64 # Main Frequency Ziggo/Casema +C 514000000 6875000 NONE QAM64 # Main Frequency Ziggo/Multikabel +C 356000000 6875000 NONE QAM64 # Main Frequency Ziggo/@Home Zuid +C 369000000 6875000 NONE QAM64 # Main Frequency Ziggo/@Home Noord diff --git a/util/scan/dvb-c/nl-Ziggo-Zwolle b/util/scan/dvb-c/nl-Ziggo-Zwolle new file mode 100644 index 0000000..e47b4ac --- /dev/null +++ b/ util/scan/dvb-c/nl-Ziggo-Zwolle@@ -0,0 +1,26 @@ +C 313000000 6875000 NONE QAM64 # TS 1 +C 361000000 6875000 NONE QAM64 # TS 2 +C 353000000 6875000 NONE QAM64 # TS 3 +C 345000000 6875000 NONE QAM64 # TS 4 +C 818000000 6875000 NONE QAM64 # TS 5 +C 329000000 6875000 NONE QAM64 # TS 6 +C 810000000 6875000 NONE QAM64 # TS 7 +C 305000000 6875000 NONE QAM64 # TS 8 +C 762000000 6875000 NONE QAM64 # TS 9 +C 618000000 6875000 NONE QAM64 # TS 10 +C 610000000 6875000 NONE QAM64 # TS 11 +C 337000000 6875000 NONE QAM64 # TS 12 +C 321000000 6875000 NONE QAM64 # TS 13 +C 385000000 6875000 NONE QAM64 # TS 14 +C 393000000 6875000 NONE QAM64 # TS 15 +C 401000000 6875000 NONE QAM64 # TS 16 +C 369000000 6875000 NONE QAM64 # TS 18 (main TS) +C 297000000 6875000 NONE QAM64 # TS 19 +C 377000000 6875000 NONE QAM64 # TS 22 +C 754000000 6875000 NONE QAM64 # TS 23 +C 642000000 6875000 NONE QAM64 # TS 24 +C 650000000 6875000 NONE QAM64 # TS 25 +C 794000000 6875000 NONE QAM64 # TS 26 +C 409000000 6875000 NONE QAM64 # TS 27 +C 425000000 6875000 NONE QAM64 # TS 206 +C 417000000 6875000 NONE QAM64 # TS 207 @@ -1,3 +1,25 @@ # com hem # freq sr fec mod +C 289500000 6875000 NONE QAM64 +C 298000000 6875000 NONE QAM64 +C 306000000 6875000 NONE QAM64 +C 314000000 6875000 NONE QAM64 +C 322000000 6875000 NONE QAM64 +C 338000000 6875000 NONE QAM64 +C 346000000 6875000 NONE QAM64 +C 354000000 6875000 NONE QAM64 C 362000000 6875000 NONE QAM64 +C 370000000 6875000 NONE QAM64 +C 378000000 6875000 NONE QAM64 +C 386000000 6875000 NONE QAM64 +C 394000000 6875000 NONE QAM64 +C 402000000 6875000 NONE QAM64 +C 418000000 6875000 NONE QAM64 +C 434000000 6875000 NONE QAM64 +C 442000000 6875000 NONE QAM64 +C 450000000 6875000 NONE QAM64 +C 458000000 6875000 NONE QAM64 +C 714000000 6875000 NONE QAM64 +C 722000000 6875000 NONE QAM64 +C 738000000 6875000 NONE QAM64 +C 786000000 6875000 NONE QAM64 diff --git a/util/scan/dvb-s/Agila2_C-146.0E b/util/scan/dvb-s/Agila2_C-146.0E new file mode 100644 index 0000000..ac30747 --- /dev/null +++ b/ util/scan/dvb-s/Agila2_C-146.0E@@ -0,0 +1,60 @@ +# Agila 2 @ 146.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# Viva Prime Channel +S 3725000 H 2345000 3/4 + +# Zoe Philippines +S 3774000 V 3300000 3/4 + +# Da Ai TV indonesia +S 3791000 H 3100000 3/4 + +# Trinity Broadcasting Multiplex +S 3791000 V 10091000 5/6 + +# Bayon TV +S 3796000 H 3360000 3/4 + +# White Springs TV +S 3846000 H 6110000 3/4 + +# TCT World +S 3854000 H 2603000 5/6 + +# CCTN +S 3873000 V 2532000 3/4 + +# NBN Philippines +S 3875000 H 3000000 3/4 + +# Al Masriyah +S 3880000 H 2000000 3/4 + +# Viva Entertainment Multiplex +S 3887000 H 6716000 3/4 + +# IBC13 +S 3896000 H 3000000 3/4 + +# CTN Cambodia Multiplex +S 3979000 V 9628000 3/4 + +# Divya TV +S 3990000 V 13330000 3/4 + +# Familyland TV Network +S 4164000 V 3735000 7/8 + +# MTV Philippines +S 4171000 V 3213000 3/4 + +# The Old Path TV +S 4183000 V 2170000 3/4 + +# UNTV +S 4188000 V 2170000 3/4 @@ -1,70 +1,48 @@ # Amos 6 @ 4W # freq pol sr fec - -S 11419000 H 2604000 AUTO -S 11347000 H 2800000 AUTO -S 11423000 H 2894000 AUTO -S 11338000 H 2960000 AUTO -S 11133000 H 2963000 AUTO -S 11631000 H 3200000 AUTO -S 11132000 V 3254000 AUTO -S 11154000 V 3255000 AUTO -S 11319000 H 3333000 AUTO -S 11426000 H 3333000 AUTO -S 11575000 H 3333000 AUTO -S 11638000 H 3333000 AUTO -S 11323000 H 3350000 AUTO -S 11328000 H 3350000 AUTO -S 11350000 H 3350000 AUTO -S 11359000 H 3350000 AUTO -S 11332000 H 3500000 AUTO -S 11128000 V 3700000 AUTO -S 11343000 H 3700000 AUTO -S 11626000 H 4000000 AUTO -S 11443000 H 4164000 AUTO -S 11644000 V 4340000 AUTO -S 11432000 V 4500000 AUTO -S 10993000 H 4850000 AUTO -S 11191000 H 6111000 AUTO -S 11183000 H 6428000 AUTO -S 10986000 H 6666000 AUTO -S 11144000 H 6666000 AUTO -S 11151000 H 6666000 AUTO -S 11161000 H 6666000 AUTO -S 11172000 H 6666000 AUTO -S 11209000 H 6666000 AUTO -S 11219000 H 6666000 AUTO -S 11413000 H 6666000 AUTO -S 11673000 H 6900000 AUTO -S 11435000 H 7480000 AUTO -S 11546000 H 8050000 AUTO -S 11177000 V 8520000 AUTO -S 11585000 H 8888000 AUTO -S 11235000 H 10000000 AUTO -S 11144000 V 11110000 AUTO -S 11652000 V 11111000 AUTO -S 11560000 H 13400000 AUTO -S 11690000 H 15000000 AUTO -S 11652000 H 16100000 AUTO -S 11303000 H 19540000 AUTO -S 11390000 H 24000000 AUTO -S 10762000 H 26000000 AUTO -S 10720000 V 27500000 AUTO -S 10723000 H 27500000 AUTO -S 10758000 V 27500000 AUTO -S 10803000 V 27500000 AUTO -S 10805000 H 27500000 AUTO -S 10841000 V 27500000 AUTO -S 10842000 H 27500000 AUTO -S 10889000 H 27500000 AUTO -S 10889000 V 27500000 AUTO -S 10924000 H 27500000 AUTO -S 10924000 V 27500000 AUTO -S 10972000 V 27500000 AUTO -S 11008000 V 27500000 AUTO -S 11260000 H 27500000 AUTO -S 11474000 V 27500000 AUTO -S 11510000 V 27500000 AUTO -S 11558000 V 27500000 AUTO -S 11592000 V 27500000 AUTO -S 11677000 V 27500000 AUTO +S 10722000 H 27500000 3/4 +S 10722000 V 27500000 3/4 +S 10722000 V 30000000 2/3 +S 10758000 V 27500000 3/4 +S 10758000 V 30000000 2/3 +S 10759000 H 30000000 3/4 +S 10806000 H 27500000 5/6 +S 10806000 V 27500000 3/4 +S 10842000 H 27500000 7/8 +S 10842000 V 27500000 3/4 +S 10842000 V 30000000 2/3 +S 10890000 H 27500000 7/8 +S 10890000 V 27500000 3/4 +S 10925000 H 27500000 7/8 +S 10925000 V 27500000 3/4 +S 10972000 V 27500000 3/4 +S 11008000 V 27500000 3/4 +S 11015000 H 2295000 3/4 +S 11123000 H 1850000 7/8 +S 11167000 H 12500000 5/6 +S 11179000 H 6666000 3/4 +S 11260000 H 27500000 3/4 +S 11304000 H 19540000 3/4 +S 11319000 H 2750000 3/4 +S 11329000 H 3333000 3/4 +S 11333000 H 3500000 3/4 +S 11347000 H 3350000 3/4 +S 11384000 H 19000000 5/6 +S 11411000 H 7925000 5/6 +S 11429000 H 5925000 3/4 +S 11435000 H 2089000 3/4 +S 11474000 V 27500000 3/4 +S 11510000 V 30000000 2/3 +S 11558000 V 27500000 3/4 +S 11559000 H 13400000 7/8 +S 11572000 H 8888000 3/4 +S 11592000 H 21350000 3/4 +S 11593000 V 27500000 3/4 +S 11625000 V 3000000 3/4 +S 11630000 H 2963000 3/4 +S 11630000 V 3000000 3/4 +S 11637000 V 1480000 3/4 +S 11647000 H 9167000 3/4 +S 11647000 V 8518000 3/4 +S 11654000 H 2000000 5/6 +S 11658000 V 8520000 5/6 diff --git a/util/scan/dvb-s/Apstar6_C-134.0E b/util/scan/dvb-s/Apstar6_C-134.0E new file mode 100644 index 0000000..6a8a1f1 --- /dev/null +++ b/ util/scan/dvb-s/Apstar6_C-134.0E@@ -0,0 +1,15 @@ +# Apstar 6 @ 134.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# New Entertainment +S 3766000 H 4285000 3/4 + +# Test +S 3840000 H 27500000 3/4 + +# TV Nusantara +S 3905000 H 3250000 3/4 diff --git a/util/scan/dvb-s/AsiaSat2_C-100.5E b/util/scan/dvb-s/AsiaSat2_C-100.5E new file mode 100644 index 0000000..1cc8035 --- /dev/null +++ b/ util/scan/dvb-s/AsiaSat2_C-100.5E@@ -0,0 +1,51 @@ +# AsiaSat 2 100.5E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# Iris Sat Multiplex +S 3660000 V 27500000 3/4 + +# APTN Direct +S 3706000 H 4167000 5/6 + +# APTN Global Video Wire (MPEG-4 S/2) +S 3732000 H 8889000 2/3 + +# BYU TV +S 3767000 V 6527000 1/2 + +# AJK TV +S 3778000 V 3333000 3/4 + +# RTB International Brunei +S 3786000 H 6000000 7/8 + +# Shamshad TV +S 3790000 V 2444000 3/4 + +# FTV HD (MPEG-4 S/2) +S 3794000 H 4640000 3/4 + +# Arabsat ASBU Bouquet Multiplex +S 3820000 V 27500000 3/4 + +# Star TV Multiplex (MPEG-4 S/2) +S 3840000 H 30000000 3/4 + +# E Network Multiplex +S 3880000 H 27500000 3/4 + +# SatLink Multiplex +S 3960000 H 27500000 3/4 + +# Star TV Multiplex +S 3980000 V 28100000 3/4 + +# SatLink European Bouquet (MPEG-2 & MPEG-4 S2) +S 4000000 H 28125000 3/4 + +# Macau Satellite TV Multiplex +S 4148000 V 11852000 3/4 @@ -1,122 +1,102 @@ # AsiaSat 3S 105.5E C-BAND -# Generated by Xingbo Wang -# Apr 2, 2005 +# Generated by Pietro Casoar +# 1st March 2009 -# MPEG-2 QPSK +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) # freq pol sr fec -# [encrypted] ZEE English, ZEE TV International, ZEE Movies, MX, ZEE TV SE Asia, ZEE TV Asia, Trendz -S 3700000 V 27500000 3/4 +# China Entertainment TV & Maharishi Veda Vision +S 3680000 H 26670000 3/4 + +# MediaCorp Channel News Asia +S 3706000 H 6000000 3/4 # BTV World S 3725000 V 4450000 3/4 -# SAB TV -S 3743000 V 3300000 3/4 - -# AAJ TV -S 3750000 V 2820000 3/4 - -# Arirang TV -S 3755150 V 4417900 7/8 - -# [encrypted] STAR Plus India, STAR Movies India, STAR News India, National Geographic India, STAR Gold, STAR Movies (Middle East) -# STAR Utsav -S 3780000 V 28100000 3/4 +# Galaxy TVB +S 3729000 H 13650000 3/4 -# Chinese Provincial TV: Guangxi, Shanxi, Anhui, Jiangsu, Heilongjiang -S 3806000 V 4420000 3/4 -S 3813000 V 4420000 3/4 -S 3820000 V 4420000 3/4 -S 3827000 V 4420000 3/4 -S 3834000 V 4420000 3/4 +# Zee Network +S 3733000 V 6500000 3/4 -# [encrypted] ESPN Taiwan, STAR Sports Taiwan, ESPN Asia, STAR Sports South East Asia, STAR Sports India, ESPN India, ESPN Philippines -S 3860000 V 27500000 3/4 +# Madani Channel +S 3739000 V 2815000 3/4 -# Dragon TV -S 3886000 V 4800000 3/4 +# Fashion TV +S 3746000 V 2625000 3/4 -# Shandong TV -S 3895000 V 6813000 3/4 +# Aaj News +S 3750000 V 2821000 3/4 -# CCTV-1(comprehensive), China National Radio Channel 1 -S 3904000 V 4420000 7/8 +# Arirang Arab +S 3755000 V 4418000 7/8 -# Jilin Provincial TV -S 3914500 V 4420000 3/4 +# Globecast multiplex +S 3760000 H 26000000 7/8 -# [encrypted] A1, History, STAR Movies SEA/China, STAR World India, STAR Plus Pakistan, Channel[V] India, STAR Chinese Movies, CNBC India, STAR One, STAR Vijay -S 3980000 V 28100000 3/4 +# Star TV Multiplex +S 3780000 V 28100000 3/4 -# Sahara One, Sahara Samay National, Sahara Samay Mumbai, Sahara Samay Uttar Pradesh, Sahara Samay Bihar, Sahara Samay Madhya Pradesh -S 4020000 V 27250000 3/4 +# Airwaves Media Multiplex +S 3786000 H 5700000 3/4 -# Tianjin TV -S 4046000 V 5950000 3/4 +# Zee Network Multiplex +S 3820000 V 27500000 3/4 -# PTV-1, PTV World, PTV Channel 3, AVT Khyber -S 4091000 V 13333000 3/4 +# Star TV Multiplex +S 3840000 H 26850000 7/8 -# PTV National -S 4106000 V 3333300 3/4 +# Star TV Multiplex +S 3860000 V 27500000 3/4 -# Indus News -S 4115750 V 3333000 3/4 +# B4U INDIA - MPEG-4 S/2 Multiplex +S 3880000 H 27500000 3/4 -# [encrypted] ZEE Biz, ZEE News, ZEE Cinema, ZEE Music, Alpha TV Punjabi, Alpha TV Gujarati, Alpha TV Bangla, Alpha TV Marathi, Smile TV -S 4140000 V 27500000 3/4 +# Star TV Multiplex +S 3940000 V 28100000 3/4 -# Chinese Provincial TV: Henan, Fujian, Jiangxi, Liaoning -S 4166000 V 4420000 3/4 -S 4180000 V 4420000 3/4 -S 4187000 V 4420000 3/4 -S 4194000 V 4420000 3/4 +# Tuner International Multiplex +S 3960000 H 28100000 3/4 -# CETV -S 3680000 H 26670000 3/4 +# Star TV Multiplex +S 3980000 V 28100000 3/4 -# Channel NewsAsia -S 3706000 H 6000000 3/4 +# Star TV Multiplex +S 4000000 H 26850000 7/8 -# Asia Plus -S 3715500 H 7000000 3/4 +# Sahara Samay Multiplex +S 4020000 V 27250000 3/4 -# TVB 8, CETV -S 3729000 H 13650000 3/4 +# VOA Voice Of America Multiplex +S 4040000 H 20400000 1/2 -# Network of the World, Bloomberg TV Asia, Indus Vision, Indus Music, Muslim TV Ahmadiyya, Living Asia Channel -# [encrypted] Filmazia -S 3760000 H 26000000 7/8 +# Globecast Multiplex +S 4071000 H 14240000 3/4 -# [encrypted] Fox News, Sky News, STAR Movies Int'l Taiwan, National Geographic Taiwan, STAR Chinese Channel, STAR Movies mandarin, Channel[V] Taiwan -S 3840000 H 26850000 7/8 +# PTV Multiplex +S 4091000 V 13333000 3/4 -# STAR Sports Asia -# [encrypted] ESPN China, STAR Sports Hong Kong, ESPN Hong Kong -S 3920000 H 26750000 7/8 +# Sun TV +S 4095000 H 5554000 3/4 -# [encrypted] CNN International Asia, CNN Newsource, Cartoon Network Asia, Cartoon Network Taiwan, Cartoon Network Philippines, Cartoon Network Australia/New Zealand, TCM Australia, Boomerang -S 3960000 H 27500000 3/4 +# PTV Global USA +S 4102000 V 2894000 3/4 -# [encrypted] Phoenix Movies, star World Asia, Star Movies Int'l, Channel[V] International, National Geographic Regional -# Phoenix Chinese Channel, Phoenix Info News Channel, Xiong Kong Int'l, Xing Kong Regional, Channel[V](Greater China) -S 4000000 H 26850000 7/8 +# PTV Global UK & Europe +S 4106000 V 2894000 3/4 -# Chinese Provincial TV: Hubei, Sichuan -S 4034600 H 4420000 3/4 -S 4051000 H 4420000 3/4 +# Galaxy TVB Multiplex +S 4111000 H 13650000 3/4 -# Chinese Provincial TV: Qinghai, Hunan -S 4067000 H 4420000 3/4 -S 4082000 H 4420000 3/4 +# PTV Multiplex +S 4114000 V 7000000 3/4 -# Sun TV -S 4094000 H 5555000 3/4 +# Eye TV Multiplex +S 4129000 H 13600000 3/4 -# MATV, Horizon Channel -# [encrypted] Tian Ying Movies Channel, TVB Xing He Channel -S 4111000 H 13650000 3/4 +# Zee Network Multiplex +S 4140000 V 27500000 3/4 -# CCTV Channel 4 (International), Channel 9 (English language), CCTV E&F -S 4129000 H 13240000 3/4 +# Geo TV Network Multiplex +S 4180000 V 26666000 3/4 diff --git a/util/scan/dvb-s/Asiasat4_C-122.2E b/util/scan/dvb-s/Asiasat4_C-122.2E new file mode 100644 index 0000000..60a9730 --- /dev/null +++ b/ util/scan/dvb-s/Asiasat4_C-122.2E@@ -0,0 +1,27 @@ +# Asiasat 4 @ 122.2E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# SITI Digital Network Multiplex +S 3760000 H 27500000 3/4 + +# SITI Digital Network Multiplex +S 3820000 V 27500000 3/4 + +# Henan Radio Multiplex +S 3856000 H 2170000 3/4 + +# SITI Digital Network Multiplex +S 3880000 H 27500000 3/4 + +# SITI Digital network Multiplex +S 3920000 H 27500000 3/4 + +# SITI Digital network Multiplex +S 3960000 H 27500000 3/4 + +# SITI Digital network Multiplex +S 4180000 V 27500000 3/4 diff --git a/util/scan/dvb-s/Astra-23.5E b/util/scan/dvb-s/Astra-23.5E new file mode 100644 index 0000000..6e45dbf --- /dev/null +++ b/ util/scan/dvb-s/Astra-23.5E@@ -0,0 +1,66 @@ +# Astra 23.5E +# freq pol sr fec +S 10758000 V 22000000 7/8 +S 10788000 V 22000000 5/6 +S 10802000 H 22000000 5/6 +S 10842000 V 13333000 5/6 +S 10862000 H 22000000 5/6 +# Astra2Connect +# S2 10891250 H 22000000 3/4 AUTO 8PSK +S 11475000 V 27500000 3/4 +S 11515000 H 27500000 3/4 +S2 11515000 V 28500000 9/10 AUTO QPSK +S2 11555000 H 28500000 9/10 AUTO QPSK +S2 11555000 V 28500000 9/10 AUTO QPSK +S2 11592000 V 28500000 9/10 AUTO QPSK +S2 11595000 H 28500000 9/10 AUTO QPSK +S2 11635000 H 28500000 9/10 AUTO QPSK +S2 11635000 V 28500000 9/10 AUTO QPSK +S 11675000 H 27500000 3/4 +S2 11675000 V 28500000 9/10 AUTO QPSK +S2 11719000 H 27500000 9/10 AUTO QPSK +S 11739000 V 27500000 3/4 +# Astra2Connect +# S2 11758000 H 27500000 5/6 AUTO 8PSK +S2 11778000 V 27500000 9/10 AUTO QPSK +S 11798000 H 27500000 3/4 +S2 11817000 V 27500000 9/10 AUTO QPSK +S 11836000 H 29900000 3/4 +S2 11856000 V 27500000 5/6 AUTO QPSK +S 11875000 H 27500000 3/4 +S 11914000 H 27500000 3/4 +# Astra2Connect +# S2 11954000 H 27500000 3/4 AUTO 8PSK +S 11992000 H 27500000 3/4 +S 12012000 V 27500000 3/4 +S2 12032000 H 27500000 9/10 AUTO QPSK +S 12070000 H 27500000 3/4 +S2 12109000 H 27500000 9/10 AUTO QPSK +# Astra2Connect +# S2 12148000 H 27500000 3/4 AUTO 8PSK +S 12168000 V 27500000 3/4 +# Astra2Connect +# S2 12226000 H 27500000 3/5 AUTO 8PSK +# Astra2Connect +# S2 12304000 H 27500000 5/6 AUTO 8PSK +# Astra2Connect +# S2 12344000 H 28200000 5/6 AUTO 8PSK +# Astra2Connect +# S2 12382000 H 27500000 3/4 AUTO 8PSK +S 12525000 H 27500000 3/4 +S 12525000 V 27500000 3/4 +S 12565000 H 27500000 2/3 +S 12565000 V 27500000 3/4 +S2 12605000 H 28500000 9/10 AUTO QPSK +S2 12605000 V 28500000 9/10 AUTO QPSK +S 12630000 V 6000000 3/4 +S 12631000 H 6666000 7/8 +S 12636000 V 2277000 5/6 +S 12641000 H 2220000 7/8 +S 12644000 H 2170000 3/4 +S 12649000 H 5600000 5/6 +S 12661000 H 2170000 5/6 +S 12685000 V 27500000 3/4 +S 12696000 H 3255000 1/2 +S 12711000 H 6111000 AUTO +S 12725000 V 27500000 3/4 @@ -1,20 +1,30 @@ # Atlantic Bird 1 @ 12.5W # freq pol sr fec - -S 11682000 H 05632000 AUTO -S 11673000 H 06111000 AUTO -S 11664000 H 06111000 AUTO -S 11655000 H 06666000 AUTO -S 11690000 H 05700000 AUTO -S 11596000 V 27500000 AUTO -S 11618000 H 02324000 AUTO -S 11590000 H 06111000 AUTO -S 11597000 H 03184000 AUTO -S 11629000 H 06507000 AUTO -S 11622000 H 03255000 AUTO -S 11585000 H 05632000 AUTO -S 11643000 H 02398000 AUTO -S 11647000 H 03990000 AUTO -S 11647000 V 03990000 AUTO -S 11693000 V 04800000 AUTO -S 11644000 V 04800000 AUTO +S 11099000 H 2000000 5/6 +S 11132000 H 3255000 3/4 +S 11136000 V 3700000 5/6 +S 11174000 H 15190000 3/4 +S 11179000 V 22400000 2/3 +S 11188000 H 5722000 5/6 +S 11332000 H 6428000 2/3 +S 11337000 H 1923000 7/8 +S 11340000 H 2279000 5/6 +S 11355000 H 11781000 7/8 +S 11408000 V 27500000 3/4 +S 11428000 H 30000000 5/6 +S 11595000 V 27500000 5/6 +S 11622000 H 3255000 AUTO +S 11643000 H 2398000 AUTO +S 11645000 V 4790000 AUTO +S 11651000 V 3688000 AUTO +S 12515000 H 17455000 3/4 +S 12535000 V 2000000 3/4 +S 12545000 H 17455000 3/4 +S 12594000 H 2170000 3/4 +S 12597000 H 1730000 3/4 +S 12604000 H 1481000 3/4 +S 12655000 H 4285000 3/4 +S 12659000 H 2141000 3/4 +S 12662000 V 3928000 3/4 +S 12720000 V 1808000 3/4 +S 12743000 V 3214000 3/4 diff --git a/util/scan/dvb-s/Atlantic-Bird-3-5.0W b/util/scan/dvb-s/Atlantic-Bird-3-5.0W new file mode 100644 index 0000000..4e7f007 --- /dev/null +++ b/ util/scan/dvb-s/Atlantic-Bird-3-5.0W@@ -0,0 +1,4 @@ +# Atlantic Bird 3 @ 5.0W +# freq pol sr fec +S 11096000 V 29950000 7/8 +S 11591000 V 20000000 2/3 diff --git a/util/scan/dvb-s/Chinastar1_C-87.5E b/util/scan/dvb-s/Chinastar1_C-87.5E new file mode 100644 index 0000000..0c03cfc --- /dev/null +++ b/ util/scan/dvb-s/Chinastar1_C-87.5E@@ -0,0 +1,15 @@ +# ChinaStar 1 @ 87.5E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# Myawady TV +S 3734000 H 5925000 3/4 + +# Zam TV Tests +S 4076000 H 2532000 3/4 + +# Test Card +S 4081000 H 4687000 3/4 diff --git a/util/scan/dvb-s/Insat2E_C-83.0E b/util/scan/dvb-s/Insat2E_C-83.0E new file mode 100644 index 0000000..8e76b8e --- /dev/null +++ b/ util/scan/dvb-s/Insat2E_C-83.0E@@ -0,0 +1,93 @@ +# Insat 2E @ 83.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# NE TV Multiplex +S 3521000 V 8640000 3/4 + +# NE TV Multiplex +S 3537000 V 10800000 3/4 + +# TV 9 Telugu +S 3550000 V 3255000 3/4 + +# S1 Channel +S 3559000 V 3366000 3/4 + +# TV 9 Kannada +S 3581000 V 3255000 3/4 + +# Jaya TV +S 3593000 V 8680000 3/4 + +# Tata Communications Multiplex +S 3593000 V 9629000 3/4 + +# Asianet Multiplex +S 3643000 V 19531000 3/4 + +# Amrita TV Middle East +S 3678000 V 5926000 3/4 + +# Mahaa TV +S 3689000 V 2893000 3/4 + +# Tata Communications Multiplex +S 3696000 V 6111000 3/4 + +# CNBC India +S 3760000 V 6500000 3/4 + +# Raj TV Network Multiplex +S 3774000 V 13021000 3/4 + +# UTVi TV +S 3794000 V 3500000 3/5 + +# PTC Multiplex (MPEG-4 S/2) +S 3815000 V 6000000 3/4 + +# Tata Communications Multiplex +S 3845000 V 26043000 3/4 + +# Indiavision +S 3914000 V 3000000 3/4 + +# Yes Indiavision +S 3919000 V 3000000 3/4 + +# Manorama News International +S 3923000 V 3000000 3/4 + +# Tata Communications Multiplex +S 3934000 V 13021000 3/4 + +# Raj Musix kanada +S 3961000 V 6656000 3/4 + +# TV 9 Multiplex +S 3974000 V 13333000 3/4 + +# Asianet Multiplex +S 4010000 V 19531000 3/4 + +# Tata Communications Multiplex +S 4031000 V 7440000 7/8 + +# RRSat Multiplex +S 4042000 V 7420000 7/8 + +# Tata Communications Multiplex +S 4050000 V 5084000 7/8 + +# DD national +S 4070000 V 5000000 3/4 + +# Indiasign Mulitplex +S 4091000 V 9230000 7/8 + +# News Live (MPEG-4 S/2) +S 4100000 V 4700000 3/4 diff --git a/util/scan/dvb-s/Insat3A_C-93.5E b/util/scan/dvb-s/Insat3A_C-93.5E new file mode 100644 index 0000000..b4430df --- /dev/null +++ b/ util/scan/dvb-s/Insat3A_C-93.5E@@ -0,0 +1,66 @@ +# Insat 3A @ 93.5E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# DD Bangla +S 3732000 V 6250000 3/4 + +# DD Punjab +S 3740000 V 6250000 3/4 + +# DD Gujarati +S 3750000 V 6250000 3/4 + +# DD Chandana +S 3759000 V 6250000 3/4 + +# DD Oriya +S 3772000 V 6250000 3/4 + +# DD kashir +S 3782000 V 6250000 3/4 + +# DD Sahyadri +S 3791000 V 8600000 3/4 + +# DD Malayalam +S 3812000 V 6250000 3/4 + +# DD Saptagiri +S 3820000 V 6250000 3/4 + +# DD podhigai +S 3831000 V 8600000 3/4 + +# DD Himachal Pradesh +S 3932000 V 6250000 3/4 + +# DD Jaipur +S 3940000 V 6250000 3/4 + +# Madhya Pradesh +S 3950000 V 6250000 3/4 + +# DD Uttar Pradesh +S 3958000 V 6250000 3/4 + +# DD North East +S 4092000 V 6250000 3/4 + +# DD Mizoram +S 4101000 V 6250000 3/4 + +# DD Tripura +S 4109000 V 4250000 3/4 + +# RTA Afghanistan +S 4132000 V 4000000 3/4 + +# RTA Afghanistan Nangarhar +S 4136000 V 2000000 3/4 + +# Ariana TV Network Multiplex +S 4141000 V 5150000 3/4 diff --git a/util/scan/dvb-s/Insat4A_C-83.0E b/util/scan/dvb-s/Insat4A_C-83.0E new file mode 100644 index 0000000..fa27210 --- /dev/null +++ b/ util/scan/dvb-s/Insat4A_C-83.0E@@ -0,0 +1,93 @@ +# Insat 4A @ 83.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# NSTPL Multiplex +S 3725000 H 26665000 3/4 + +# Indiasign multiplex +S 3756000 H 13333000 3/4 + +# Star TV Multiplex +S 3777000 H 10900000 3/4 + +# Essel Shyam Multiplex +S 3805000 H 28500000 7/8 + +# Tarang TV Multiplex (MPEG-4 S/2) +S 3841000 H 6920000 3/4 + +# CTVN AKD Plus +S 3853000 H 3265000 3/4 + +# Kasthuri TV +S 3857000 H 3462000 3/4 + +# Kamyab TV +S 3874000 H 3403000 3/4 + +# Vanitha TV +S 3892000 H 3300000 3/4 + +# Essel Shayam Multiplex +S 3898000 H 6800000 3/4 + +# Channel 10 India +S 3910000 H 3600000 7/8 + +# Essel Shyam +S 3923000 H 13000000 3/4 + +# DY 365 +S 3949000 H 3225000 3/4 + +# Multiplex +S 3958000 H 9500000 7/8 + +# Zee News Uttar Pradesh +S 3976000 H 3200000 3/4 + +# ETV Network Multiplex +S 4004000 H 22220000 5/6 + +# Essel Shyam +S 4040000 H 7500000 7/8 + +# Lamhas Multiplex +S 4054000 H 13230000 3/4 + +# Network 18 Multiplex +S 4072000 H 6500000 3/4 + +# IBN Lokmat +S 4078000 H 3250000 3/4 + +# Live India +S 4087000 H 3300000 3/4 + +# Mi Marathi +S 4091000 H 3000000 3/4 + +# BBS TV +S 4100000 H 4750000 3/4 + +# Manorama News +S 4115000 H 5555000 3/4 + +# BAG Films +S 4134000 H 10600000 3/4 + +# Zee Network Multiplex +S 4151000 H 6500000 3/4 + +# Zee Network Multiplex +S 4161000 H 6500000 3/4 + +# Lok Sabha TV +S 4170000 H 6500000 3/4 + +# Kolkata TV +S 4180000 H 3233000 3/4 diff --git a/util/scan/dvb-s/Insat4B_C-93.5E b/util/scan/dvb-s/Insat4B_C-93.5E new file mode 100644 index 0000000..5431ae0 --- /dev/null +++ b/ util/scan/dvb-s/Insat4B_C-93.5E@@ -0,0 +1,51 @@ +# Insat 4B @ 93.5E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# Doordarshan Multiplex +S 3725000 H 27500000 3/4 + +# DD Dehradun +S 3750000 H 4250000 3/4 + +# DD Raipur +S 3762000 H 4250000 3/4 + +# DD Ranchi +S 3768000 H 4250000 3/4 + +# DD Jammu +S 3774000 H 4250000 3/4 + +# DD Hissar +S 3802000 H 4250000 3/4 + +# DD Chandigarh +S 3808000 H 4250000 3/4 + +# DD Port Blair +S 3822000 H 4250000 3/4 + +# DD Bihar +S 3832000 H 6250000 3/4 + +# DD North East +S 3841000 H 6250000 3/4 + +# Sun network +S 3885000 H 28000000 3/4 + +# Doordarshan Multiplex +S 3925000 H 27500000 3/4 + +# Sakshi TV +S 3950000 H 4440000 3/4 + +# Tata Communications Multiplex +S 4005000 H 25422000 7/8 + +# Sun Network +S 4045000 H 28000000 3/4 @@ -1,5 +1,20 @@ # Intelsat 1002 @ 1.0W # freq pol sr fec - S 4175000 V 28000000 AUTO S 4180000 H 21050000 AUTO +S 11093000 H 19191000 7/8 +S 11166000 V 1450000 7/8 +S 11182000 V 3100000 7/8 +S 11606000 H 13356000 7/8 +S 12527000 H 27500000 3/4 +S 12563000 H 27500000 3/4 +S 12563000 V 27500000 3/4 +S 12607000 H 27500000 3/4 +S 12607000 V 27500000 3/4 +S 12643000 H 27500000 3/4 +S 12643000 V 27500000 3/4 +S 12687000 H 27500000 3/4 +S 12687000 V 27500000 3/4 +S 12718000 V 18400000 3/4 +S 12723000 H 27500000 3/4 +S 12735000 V 8800000 5/6 diff --git a/util/scan/dvb-s/Intelsat8_C-166.0E b/util/scan/dvb-s/Intelsat8_C-166.0E new file mode 100644 index 0000000..6c671cc --- /dev/null +++ b/ util/scan/dvb-s/Intelsat8_C-166.0E@@ -0,0 +1,39 @@ +# Intelsat 8 @ 166.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# Viacom Multiplex +S 3740000 H 27500000 2/3 + +# South Korean Multiplex +S 3790000 V 6510000 3/4 + +# Arirang World +S 3815000 V 4400000 3/4 + +# Australian network Multiplex +S 3829000 H 13238000 3/4 + +# TVBS multiplex +S 3833000 V 17500000 3/4 + +# NBC Universal +S 3900000 H 27500000 3/4 + +# Intelsat multiplex +S 3940000 H 27690000 7/8 + +# China Radio multiplex +S 3959000 V 3428000 3/4 + +# NHK World network Multiplex +S 4060000 H 16180000 1/2 + +# Philippines Network TV Multiplex +S 4122000 V 5554000 3/4 + +# TAS Multiplex +S 4130000 V 5800000 3/4 diff --git a/util/scan/dvb-s/JCSat3A_C-128.0E b/util/scan/dvb-s/JCSat3A_C-128.0E new file mode 100644 index 0000000..71f68d1 --- /dev/null +++ b/ util/scan/dvb-s/JCSat3A_C-128.0E@@ -0,0 +1,18 @@ +# JCSAT 3A @ 128.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# TAS Multiplex +S 3960000 V 30000000 5/6 + +# TAS Multiplex +S 4000000 V 30000000 5/6 + +# Miraclenet +S 4055000 V 3332000 3/4 + +# TAS Multiplex +S 4120000 V 30000000 5/6 diff --git a/util/scan/dvb-s/Measat3_C-91.5E b/util/scan/dvb-s/Measat3_C-91.5E new file mode 100644 index 0000000..2753ac0 --- /dev/null +++ b/ util/scan/dvb-s/Measat3_C-91.5E@@ -0,0 +1,54 @@ +# Measat 3 @ 91.5E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# Shop TV +S 3629000 V 2200000 3/4 + +# Aora TV Mulitplex +S 3644000 H 22320000 3/4 + +# Solar Entertainment +S 3645000 V 19510000 3/4 + +# National Geographic music +S 3718000 V 1700000 7/8 + +# DZRH TV Multiplex +S 3721000 V 2170000 3/4 + +# Ascent Media (MPEG-4 S/2) +S 3751000 V 13330000 2/3 + +# Globecast Multiplex (MPEG-4 S/2) +S 3769000 V 14000000 3/4 + +# HTV Multiplex +S 3796000 V 7030000 3/4 + +# Sky International +S 3814000 V 6666000 3/4 + +# Un-named Mulitplex +S 3865000 V 3835000 3/4 + +# RTM Multiplex +S 3877000 V 12525000 7/8 + +# RTM Sarawak Feeds +S 3887000 V 3984000 3/4 + +# Globecast Multiplex +S 3920000 V 28000000 7/8 + +# Ginx TV +S 4113000 V 2960000 3/4 + +# YR Asia TV +S 4117000 V 2963000 3/4 + +# All Sports Network (MPEG-4 S/2) +S 4134000 V 7200000 3/4 @@ -1,36 +1,41 @@ # Nilesat 101/102 & Atlantic Bird @ 7W # freq pol sr fec -S 10758000 V 27500000 AUTO -S 10796000 V 27500000 AUTO -S 10853000 H 27500000 AUTO -S 10873000 V 27500000 AUTO -S 10892000 H 27500000 AUTO -S 10911000 V 27500000 AUTO -S 10930000 H 27500000 AUTO -S 11747000 V 27500000 AUTO -S 11766000 H 27500000 AUTO -S 11785000 V 27500000 AUTO -S 11804000 H 27500000 AUTO -S 11823000 V 27500000 AUTO -S 11843000 H 27500000 AUTO -S 11862000 V 27500000 AUTO -S 11881000 H 27500000 AUTO -S 11900000 V 27500000 AUTO -S 11919000 H 27500000 AUTO -S 11938000 V 27500000 AUTO -S 11958000 H 27500000 AUTO -S 11977000 V 27500000 AUTO -S 11996000 H 27500000 AUTO -S 12015000 V 27500000 AUTO -S 12034000 H 27500000 AUTO -S 12054000 V 27500000 AUTO -S 12073000 H 27500000 AUTO -S 12130000 V 27500000 AUTO -S 12149000 H 27500000 AUTO -S 12207000 V 27500000 AUTO -S 12226000 H 27500000 AUTO -S 12284000 V 27500000 AUTO -S 12303000 H 27500000 AUTO -S 12341000 V 27500000 AUTO -S 12360000 H 27500000 AUTO -S 12399000 H 27500000 AUTO +S 10719000 V 27500000 3/4 +S 10723000 H 27500000 3/4 +S 10758000 V 27500000 3/4 +S 10775000 H 27500000 3/4 +S 10796000 V 27500000 3/4 +S 10892000 H 27500000 3/4 +S 10911000 V 27500000 3/4 +S 10930000 H 27500000 3/4 +S 11317000 V 27500000 3/4 +S 11747000 V 27500000 3/4 +S 11766000 H 27500000 3/4 +S 11785000 V 27500000 3/4 +S 11804000 H 27500000 3/4 +S 11823000 V 27500000 3/4 +S 11843000 H 27500000 3/4 +S 11862000 V 27500000 3/4 +S 11881000 H 27500000 3/4 +S 11900000 V 27500000 3/4 +S 11919000 H 27500000 3/4 +S 11938000 V 27500000 3/4 +S 11958000 H 27500000 3/4 +S 11977000 V 27600000 5/6 +S 11996000 H 27500000 3/4 +S 12015000 V 27500000 3/4 +S 12034000 H 27500000 3/4 +S 12054000 V 27500000 3/4 +S 12073000 H 27500000 3/4 +S 12130000 V 27500000 3/4 +S 12149000 H 27500000 3/4 +S 12207000 V 27500000 3/4 +S 12226000 H 27500000 3/4 +S 12284000 V 27500000 3/4 +S 12303000 H 27500000 3/4 +S 12341000 V 27500000 3/4 +S 12360000 H 27500000 3/4 +S 12380000 V 27500000 3/4 +S 12399000 H 27500000 3/4 +S 12418000 V 27500000 3/4 +S 12476000 H 27500000 3/4 diff --git a/util/scan/dvb-s/PalapaC2_C-113.0E b/util/scan/dvb-s/PalapaC2_C-113.0E new file mode 100644 index 0000000..d9b0fc8 --- /dev/null +++ b/ util/scan/dvb-s/PalapaC2_C-113.0E@@ -0,0 +1,39 @@ +# Palapa C2 @ 113.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# SCTV Jawa Timur +S 3745000 H 3125000 3/4 + +# SCTV +S 3758000 H 4470000 3/4 + +# TVRI Nasional +S 3765000 H 5555000 3/4 + +# RCTI +S 3774000 H 6520000 3/4 + +# KBS World Indonesia +S 3836000 V 2097000 3/4 + +# Bali TV +S 3926000 H 4208000 3/4 + +# TV One Indonesia +S 4054000 H 5632000 3/4 + +# ANTV Indonesia +S 4055000 V 6510000 3/4 + +# Indosiar +S 4074000 V 6500000 3/4 + +# Satelindo Multiplex +S 4080000 H 28125000 3/4 + +# TPI Indonesia +S 4184000 V 6700000 3/4 diff --git a/util/scan/dvb-s/ST1_C-80.0E b/util/scan/dvb-s/ST1_C-80.0E new file mode 100644 index 0000000..92d5b80 --- /dev/null +++ b/ util/scan/dvb-s/ST1_C-80.0E@@ -0,0 +1,27 @@ +# ST1 @ 88.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# GTV Multiplex +S 3469000 V 30000000 3/4 + +# ABTV Multiplex +S 3521000 H 8332000 5/6 + +# Videoland Multiplex +S 3550000 V 30000000 3/4 + +# GTV Multiplex +S 3595000 H 30000000 3/4 + +# Videoland multiplex +S 3632000 V 30000000 3/4 + +# Chungwa Telecom +S 3671000 H 9256000 3/4 + +# NTD TV Asia-Pacific +S 3689000 H 3000000 3/4 @@ -1,5 +1,62 @@ # Sirius 5.0E # freq pol sr fec +S 11215000 V 6666000 1/2 +S 11227000 H 23145000 3/4 +S 11247000 V 23145000 3/4 +S 11420000 H 23145000 3/4 +S 11727000 H 27500000 5/6 +S 11747000 V 27500000 3/4 +S 11766000 H 27500000 3/4 +S 11785000 V 27500000 3/4 +S 11804000 H 27500000 3/4 S 11823000 V 27500000 3/4 +S 11843000 H 27500000 3/4 +S 11862000 V 27500000 3/4 +S 11881000 H 27500000 3/4 +S 11900000 V 27500000 3/4 +S 11919000 H 27500000 3/4 +S 11938000 V 27500000 3/4 +S 11958000 H 27500000 3/4 S 11977000 V 27500000 3/4 +S 11996000 H 27500000 3/4 +S 12015000 V 27500000 5/6 +S 12034000 H 27500000 3/4 S 12054000 V 27500000 3/4 +S 12073000 H 27500000 3/4 +S 12092000 V 27500000 3/4 +S 12111000 H 27500000 5/6 +S 12130000 V 27500000 3/4 +S 12149000 H 27500000 3/4 +S 12169000 V 27500000 3/4 +S 12188000 H 27500000 7/8 +S 12207000 V 27500000 3/4 +S 12226000 H 25540000 7/8 +S 12245000 V 27500000 3/4 +S 12265000 H 27500000 3/4 +S 12284000 V 27500000 3/4 +S 12303000 H 25547000 7/8 +S 12322000 V 27500000 3/4 +S 12341000 H 27500000 3/4 +S 12360000 V 27500000 7/8 +S 12379000 H 27500000 3/4 +S 12399000 V 27500000 2/3 +S 12418000 H 27500000 3/4 +S 12437000 V 27500000 2/3 +S 12456000 H 27500000 3/4 +S 12476000 V 27500000 3/4 +S 12608000 H 27500000 3/4 +S 12637000 H 14465000 3/4 +S 12668000 V 6666000 1/2 +S 12672000 H 3300000 3/4 +S 12674000 V 10000000 3/4 +S 12678000 V 13333000 5/6 +S 12680000 H 9404000 3/4 +S 12685000 V 4444000 3/4 +S 12690000 H 3330000 3/4 +S 12693000 V 3333000 5/6 +S 12701000 H 6111000 3/4 +S 12715000 H 3330000 3/4 +S 12718000 V 23500000 3/4 +S 12724000 H 1772000 3/4 +S 12728000 V 19720000 3/4 +S 12737000 V 6150000 3/4 @@ -1,4 +1,17 @@ # Telecom2 8.0W # freq pol sr fec -S 11635000 H 6800000 5/6 -S 12687000 V 1879000 3/4 +S 10972000 V 27500000 3/4 +S 10974000 H 27500000 3/4 +S 11010000 H 27500000 3/4 +S 11011000 V 27500000 3/4 +S 11042000 H 7860000 3/4 +S 11053000 H 2850000 3/4 +S 11064000 H 12667000 3/4 +S 11387000 H 24740000 5/6 +S 11428000 H 27500000 3/4 +S 11500000 H 3460000 AUTO +S 11554000 V 27500000 3/4 +S 11595000 V 27500000 3/4 +S 12545000 H 3038000 3/4 +S 12566000 V 27500000 3/4 +S 12649000 V 27500000 3/4 diff --git a/util/scan/dvb-s/Telkom1_C-108.0E b/util/scan/dvb-s/Telkom1_C-108.0E new file mode 100644 index 0000000..f60c246 --- /dev/null +++ b/ util/scan/dvb-s/Telkom1_C-108.0E@@ -0,0 +1,48 @@ +# Telkom 1 @ 108.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# Telkom Vision Multiplex +S 3580000 H 28000000 3/4 + +# Telkom Vision Multiplex +S 3620000 H 28000000 3/4 + +# Telkom Vision Multiplex +S 3640000 V 28000000 3/4 + +# TV Timor Leste +S 3776000 H 4285000 3/4 + +# TV Edukasi 1 +S 3785000 H 4000000 3/4 + +# TVRI Kalbar +S 3793000 H 3000000 3/4 + +# TVRI Papua +S 3797000 H 3900000 3/4 + +# TV Edukasi 2 +S 3807000 H 4000000 3/4 + +# Trans 7 +S 3990000 H 6000000 3/4 + +# TVRI Aceh +S 4015000 H 6000000 3/4 + +# RCTI Jawa Timur +S 4025000 H 3000000 3/4 + +# Trans TV +S 4084000 H 6000000 3/4 + +# Papua TV +S 4092000 H 3570000 3/4 + +# JTV +S 4097000 H 3125000 3/4 diff --git a/util/scan/dvb-s/Telstar-12-15.0W b/util/scan/dvb-s/Telstar-12-15.0W deleted file mode 100644 index fb902ab..0000000 --- a/ util/scan/dvb-s/Telstar-12-15.0W+++ /dev/null @@ -1,32 +0,0 @@ -# Telstar 12 @ 15.0W -# freq pol sr fec - -S 12180000 H 03255000 AUTO -S 11895000 V 05000000 AUTO -S 11974000 V 03400000 AUTO -S 12185000 H 04214000 AUTO -S 12081000 H 03935000 AUTO -S 12050000 V 03198000 AUTO -S 11756000 H 06666000 AUTO -S 12093000 V 02000000 AUTO -S 11916000 H 06111000 AUTO -S 11707000 H 03198000 AUTO -S 11718000 V 05632000 AUTO -S 11740000 V 03255000 AUTO -S 12000000 H 06666000 AUTO -S 12116000 H 02062000 AUTO -S 12111000 H 02062000 AUTO -S 12175000 H 03504000 AUTO -S 12167000 H 03502000 AUTO -S 12129000 V 02000000 AUTO -S 12110000 V 06620000 AUTO -S 11724000 H 13225000 AUTO -S 11984000 H 13570000 AUTO -S 12125000 H 03800000 AUTO -S 11713000 V 09626000 AUTO -S 11804000 V 07595000 AUTO -S 11965000 H 14714000 AUTO -S 12039000 V 05632000 AUTO -S 12082000 V 06396000 AUTO -S 12087000 V 03198000 AUTO -S 12097000 V 03198000 AUTO diff --git a/util/scan/dvb-s/Telstar10_C-76.5E b/util/scan/dvb-s/Telstar10_C-76.5E new file mode 100644 index 0000000..36b0431 --- /dev/null +++ b/ util/scan/dvb-s/Telstar10_C-76.5E@@ -0,0 +1,63 @@ +# Telstar 10 @ 76.5E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# Racing International +S 3646000 H 5064000 3/4 + +# Image Channel +S 3655000 H 3214000 3/4 + +# Globe Cast Asia multiplex +S 3680000 H 27500000 3/4 + +# UBI World TV Multiplex +S 3760000 H 28066000 2/3 + +# UBI World TV Multiplex +S 3780000 V 28066000 2/3 + +# Ekushey TV +S 3787000 H 4600000 2/3 + +# Diganta TV +S 3793000 H 4340000 3/4 + +# RRSat Global Network Multiplex +S 3840000 H 27500000 3/4 + +# Channel 1 +S 4003000 H 4080000 3/4 + +# Boishakhi TV +S 4009000 H 4300000 3/4 + +# TV Maldives +S 4030000 V 6312000 1/2 + +# Channel I +S 4034000 H 4300000 3/4 + +# Bangla Vision +S 4049000 H 3600000 3/4 + +# Kantipur TV +S 4056000 H 3214000 3/4 + +# BBC World Service Multiplex +S 4073000 H 13020000 1/2 + +# MNC Indonesia +S 4105000 H 3125000 3/4 + +# NDTV Arabia +S 4137000 H 2893000 3/4 + +# Islamic TV +S 4146000 H 3600000 3/4 + +# Bangladesh Multiplex +S 4173000 H 7400000 3/4 @@ -1,4 +1,26 @@ # Telstar 12 15.0W # freq pol sr fec -S 12041000 H 3256000 2/3 -S 12520000 V 8700000 1/2 +S 10988000 H 2893000 3/4 +S 10992000 H 2893000 3/4 +S 11060000 H 19279000 3/4 +S 11123000 V 19279000 3/4 +S 11124000 H 18386000 3/4 +S 11150000 H 18386000 3/4 +S 11150000 V 19279000 3/4 +S 11531000 H 3198000 7/8 +S 11566000 H 4284000 3/4 +S 11677000 V 2200000 1/2 +S 11709000 V 3195000 AUTO +S 11806000 V 7596000 3/4 +S 11963000 H 14714000 3/4 +S 12082000 H 3935000 3/4 +S 12117000 H 4772000 AUTO +S 12159000 H 7777000 2/3 +S 12166000 H 3503000 3/4 +S 12173000 H 3503000 3/4 +S 12524000 V 26470000 3/4 +S 12547000 H 11900000 2/3 +S 12589000 V 4503000 1/2 +S 12608000 H 19279000 2/3 +S 12615000 V 11939000 2/3 +S 12645000 H 3255000 3/4 diff --git a/util/scan/dvb-s/Telstar18_C-138.0E b/util/scan/dvb-s/Telstar18_C-138.0E new file mode 100644 index 0000000..6bd70c6 --- /dev/null +++ b/ util/scan/dvb-s/Telstar18_C-138.0E@@ -0,0 +1,18 @@ +# Telstar 18 @ 138.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# I-Sky-Net Multiplex +S 3599000 V 30000000 3/4 + +# I-Sky-Net Multiplex +S 3660000 V 30000000 3/4 + +# LNTV Laos +S 3704000 V 3034000 3/4 + +# BBC World Service Multiplex +S 4124000 V 3255000 1/2 diff --git a/util/scan/dvb-s/Thaicom1A_C-120.0E b/util/scan/dvb-s/Thaicom1A_C-120.0E new file mode 100644 index 0000000..1a9d11f --- /dev/null +++ b/ util/scan/dvb-s/Thaicom1A_C-120.0E@@ -0,0 +1,24 @@ +# Thaicom 1A @ 120.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# TV3 Cambodia +S 3725000 V 3255000 3/4 + +# Panyapiwat +S 3745000 V 2850000 5/6 + +# CTN Cambodia Multiplex +S 3854000 V 9628000 3/4 + +# Kasikorn TV +S 3881000 V 2000000 3/4 + +# Bayon TV +S 3916000 V 3359000 3/4 + +# Radio Thailand Multiplex +S 4135000 V 1808000 3/4 diff --git a/util/scan/dvb-s/Thaicom2_C-78.5E b/util/scan/dvb-s/Thaicom2_C-78.5E new file mode 100644 index 0000000..4e1fbcd --- /dev/null +++ b/ util/scan/dvb-s/Thaicom2_C-78.5E@@ -0,0 +1,33 @@ +# Thaicom 2 @ 78.5E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# BBTV Channel 7 +S 3764000 H 5900000 3/4 + +# SBT TV +S 3803000 H 1445000 7/8 + +# MCOT Multiplex +S 3888000 H 15625000 3/4 + +# Royal Thai Army TV 5 +S 3905000 H 6250000 3/4 + +# Thai TV Color Channel 3 +S 3967000 H 4551000 3/4 + +# RU TV 1 +S 4003000 H 1085000 3/4 + +# Ten TV & Rich Channel +S 4016000 H 2305000 7/8 + +# NBT TV +S 4106000 H 4688000 3/4 + +# Thai PBS +S 4145000 H 4815000 3/4 diff --git a/util/scan/dvb-s/Thaicom5_C-78.5E b/util/scan/dvb-s/Thaicom5_C-78.5E new file mode 100644 index 0000000..902ddac --- /dev/null +++ b/ util/scan/dvb-s/Thaicom5_C-78.5E@@ -0,0 +1,69 @@ +# Thaicom 5 @ 78.5E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# ETC India Multiplex +S 3421000 V 6667000 3/4 + +# Europe Media Port Multiplex +S 3431000 H 13333000 3/4 + +# Nepal TV Multiplex +S 3432000 V 6667000 3/4 + +# CTV9 +S 3448000 V 2222000 3/4 + +# RRSat Global Network (MPEG-4 S/2) +S 3450000 H 13333000 3/4 + +# Avenues TV +S 3454000 V 3333000 3/4 + +# PSI Channel +S 3460000 V 1538000 3/4 + +# Sagarmatha TV +S 3489000 V 3333000 3/4 + +# Dhi TV +S 3502000 V 4444000 2/3 + +# Korean Central TV +S 3504000 H 3367000 2/3 + +# Gang Cartoon Channel +S 3505000 V 1852000 3/4 + +# Lao Star Channel +S 3521000 V 2917000 3/4 + +# Thaicom Multiplex +S 3545000 V 30000000 5/6 + +# RRSat Global Network +S 3551000 H 13333000 3/4 + +# VTV Maldives +S 3562000 H 4444000 1/2 + +# MRTV Multiplex +S 3574000 H 7492000 2/3 + +# Thaicom Multiplex +S 3585000 V 26667000 3/4 + +# Thaicom Multiplex +S 3600000 H 26667000 3/4 + +# MRTV Multiplex +S 3617000 V 12500000 3/4 + +# RRSat Global Network Multiplex +S 3640000 H 28066000 3/4 + +# TVK Cambodia +S 3664000 H 3704000 3/4 @@ -1,8 +1,36 @@ # Thor 1.0W # freq pol sr fec +S 11216000 V 24500000 7/8 +S 11229000 H 24500000 7/8 S 11247000 V 24500000 7/8 +S 11261000 H 24500000 7/8 +S 11278000 V 24500000 7/8 S 11293000 H 24500000 7/8 +S 11309000 V 24500000 7/8 S 11325000 H 24500000 7/8 -S 12054000 H 28000000 7/8 +S 11325000 V 24500000 7/8 +S 11325000 V 24500000 7/8 +S 11341000 V 24500000 7/8 +S 11357000 H 24500000 7/8 +S 11372000 V 24500000 7/8 +S 11389000 H 24500000 7/8 +S 11403000 V 24500000 7/8 +S 11421000 H 24500000 7/8 +S 11434000 V 24500000 7/8 +S 11747000 H 28000000 5/6 +S 11785000 H 28000000 5/6 +S 11823000 H 28000000 7/8 +S 11938000 H 25000000 3/4 +S 12015000 H 30000000 3/4 +S 12130000 H 30000000 3/4 +S 12149000 V 28000000 5/6 S 12169000 H 28000000 7/8 -S 12226000 V 28000000 7/8 +S 12188000 V 25000000 3/4 +S 12226000 V 28000000 3/4 +S 12245000 H 28000000 5/6 +S 12303000 V 28000000 5/6 +S 12322000 H 27800000 3/4 +S 12399000 H 28000000 7/8 +S 12418000 V 28000000 7/8 +S 12456000 V 28000000 3/4 +S 12476000 H 28000000 5/6 diff --git a/util/scan/dvb-s/Vinasat1_C-132.0E b/util/scan/dvb-s/Vinasat1_C-132.0E new file mode 100644 index 0000000..4d611de --- /dev/null +++ b/ util/scan/dvb-s/Vinasat1_C-132.0E@@ -0,0 +1,12 @@ +# VINASAT 1 @ 132.0E C-BAND +# Generated by Pietro Casoar +# 1st March 2009 + +# MPEG-2 & MPEG-4 QPSK (DVBS/S2) +# freq pol sr fec + +# VTV Multiplex (VTV 1, VTV 2, VTV 3, VTV 4, VTV6) +S 3413000 V 9766000 3/4 + +# VOV TV (Voice of VietNam) +S 3529000 V 2500000 2/3 diff --git a/util/scan/dvb-t/au-AdelaideFoothills b/util/scan/dvb-t/au-AdelaideFoothills new file mode 100644 index 0000000..466a354 --- /dev/null +++ b/ util/scan/dvb-t/au-AdelaideFoothills@@ -0,0 +1,12 @@ +# Australia / Adelaide / Grenfell Street +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# ABC +T 781625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# Seven +T 711500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# Nine +T 795500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# Ten +T 732500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# SBS +T 760500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/au-Bendigo b/util/scan/dvb-t/au-Bendigo new file mode 100644 index 0000000..a5df229 --- /dev/null +++ b/ util/scan/dvb-t/au-Bendigo@@ -0,0 +1,41 @@ +# Australia / Bendigo (Mt Alexandria transmitters) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# ABC +T 669500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 620500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 572500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE + +# Seven +T 690500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 655500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 555250000 7MHz 3/4 NONE QAM64 8k 1/16 NONE + +# Nine +T 576250000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 592500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE + +# Ten +T 618250000 7MHz 3/4 NONE QAM64 8k 1/16 NONE + +# SBS +T 529500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE +T 634500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE +T 534250000 7MHz 2/3 NONE QAM64 8k 1/8 NONE + +# UNK1 +T 676500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# UNK2 +T 571500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE + +T 536625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 585625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 564500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 543500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 536500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 529500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 205500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 564500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 536625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 690500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 711500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +T 550500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE diff --git a/util/scan/dvb-t/au-Devonport b/util/scan/dvb-t/au-Devonport new file mode 100644 index 0000000..4985f09 --- /dev/null +++ b/ util/scan/dvb-t/au-Devonport@@ -0,0 +1,19 @@ +# Australia / Tasmania / Devonport +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# +# Brett S Hallett October 2009 , may not be complete !! +# +# ABC VHF 57 +T 730250000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# ABC Digital 45 +T 648500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# SBS VHF 54 +T 709250000 7MHz 2/3 NONE QAM64 8k 1/8 NONE +# SBS Digital 39 +T 606500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE +# SCTV +T 613498000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# WIN +T 627498000 7MHz 3/4 NONE QAM64 8k 1/8 NONE +# TDT +T 585498000 7MHz 2/3 NONE QAM64 8k 1/8 NONE @@ -0,0 +1,12 @@ +# Australia / QLD / Fraser Coast - Bundaberg / Mt Goonaneman +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# ABC VHF9A +T 205625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# SBS UHF28 +T 529500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE +# Seven VHF7 +T 184625000 7MHz 2/3 NONE QAM64 8k 1/16 NONE +# WIN Wide Bay VHF10 +T 212500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# Southern Cross Ten VHF9 +T 198525000 7MHz 3/4 NONE QAM64 8k 1/16 NONE diff --git a/util/scan/dvb-t/au-Goulburn-Rocky_Hill b/util/scan/dvb-t/au-Goulburn-Rocky_Hill new file mode 100644 index 0000000..bff0dbe --- /dev/null +++ b/ util/scan/dvb-t/au-Goulburn-Rocky_Hill@@ -0,0 +1,19 @@ +# Australia / Goulburn / Rocky Hill +# +# Scanned 17/10/2009 - Alex Ferrara (alex@receptiveit.com.au) + +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# ABC - netid (4112) tid (547) offset (+125Khz) +T 725625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE + +# SBS - netid (12802) tid (848) offset (+125Khz) +T 746625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE + +# WIN - netid (12915) tid (12922) offset (+125Khz) +T 767625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE + +# Prime - netid (12929) tid (2462) offset (+125Khz) +T 788625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE + +# TEN - netid (12812) tid (2055) offset (0Khz) +T 809500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE @@ -0,0 +1,16 @@ +# Australia / Hervey Bay / Ghost Hill +# +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# +# ABC UHF56 +T 725500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# Seven UHF59 +T 746500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# Nine UHF62 +T 767625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# Ten UHF68 +T 809500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +# SBS UHF28 +T 529500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE +# SBS UHF34 +T 704500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE @@ -9,4 +9,4 @@ T 191625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE # Network TEN T 219500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE # SBS -T 536500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE +T 536625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE @@ -3,7 +3,7 @@ # SBS36 SBS *** T 585625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE # TNQ47 10 *** -T 662625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE +T 662625000 7MHz 3/4 NONE QAM64 8k 1/8 NONE # ABQ62 ABC *** T 767625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE # STQ65 7 *** diff --git a/util/scan/dvb-t/au-Sutherland b/util/scan/dvb-t/au-Sutherland new file mode 100644 index 0000000..6c21a73 --- /dev/null +++ b/ util/scan/dvb-t/au-Sutherland@@ -0,0 +1,20 @@ +# Australia / Sutherland +# +# Australia modulation params: +# - http://www.dba.org.au/index.asp?sectionID=120 +# +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# +# North (Broadcast Site Escarpment Road BROKERS NOSE) +# - http://www.dba.org.au/index.asp?query=true§ionID=22&recLocation=Wollongong+%2D+North +# +#Channel 7 stations +T 177500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +#Channel 9 bundle +# T 191500000 7MHz AUTO AUTO AUTO AUTO AUTO AUTO +#One and Channel 10 +T 219500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +#Aunty +T 226500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE +#SBS +T 571500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE @@ -1,5 +1,5 @@ # Brussels - Belgium (Transmitters of the RTBF and the VRT) # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 754000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # RTBF -T 746000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # BE-TV -T 482000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # VRT +T 754000000 8MHz 1/2 NONE QAM64 8k 1/4 NONE # RTBF +T 746000000 8MHz 1/2 NONE QAM64 8k 1/4 NONE # BE-TV +T 482000000 8MHz 1/2 NONE QAM64 8k 1/4 NONE # VRT diff --git a/util/scan/dvb-t/cz-All b/util/scan/dvb-t/cz-All new file mode 100644 index 0000000..7c6d601 --- /dev/null +++ b/ util/scan/dvb-t/cz-All@@ -0,0 +1,41 @@ +# Czech Republic, whole country +# Created from http://www.digizone.cz/texty/mapy-pokryti-multiplex-1-ceska-televize/ +# and http://www.digizone.cz/texty/mapy-pokryti-multiplex-2-radiokomunikace/ +# and http://www.digizone.cz/texty/mapy-pokryti-multiplex-3-czech-digital-group/ +# and http://www.digizone.cz/texty/mapy-pokryti-multiplex-4-telefonica-o2/ +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +T 482000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 506000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 538000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 546000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 562000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 570000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 578000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 586000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 594000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 602000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 618000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 626000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 634000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 642000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 650000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 658000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 666000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 674000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 690000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 698000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 706000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 714000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 722000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 730000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 738000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 746000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 770000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 778000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 786000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 794000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 802000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 810000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 818000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 826000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/cz-Brno b/util/scan/dvb-t/cz-Brno deleted file mode 100644 index b82e108..0000000 --- a/ util/scan/dvb-t/cz-Brno+++ /dev/null @@ -1,10 +0,0 @@ -# DVB-T Brno (Brno, Czech Republic) -# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -# MUX 1 Ceska televize -T 506000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE -# MUX 2 Ceske radiokomunikace -T 626000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE -# MUX 3 Czech Digital Group -T 778000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE -# MUX 4 Telefonica O2 -T 818000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/cz-Domazlice b/util/scan/dvb-t/cz-Domazlice deleted file mode 100644 index c20f70a..0000000 --- a/ util/scan/dvb-t/cz-Domazlice+++ /dev/null @@ -1,3 +0,0 @@ -# DVB-T Domažlice (Domažlice, Czech Republic) -# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 610000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/cz-Klet b/util/scan/dvb-t/cz-Klet deleted file mode 100644 index 880db35..0000000 --- a/ util/scan/dvb-t/cz-Klet+++ /dev/null @@ -1,4 +0,0 @@ -# DVB-T Ceske Budejovice (Klet, Czech Republic) -# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -# CRa - Ceske radiokomunikace, TX Klet -T 698000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/cz-Ostrava b/util/scan/dvb-t/cz-Ostrava deleted file mode 100644 index d2ea69f..0000000 --- a/ util/scan/dvb-t/cz-Ostrava+++ /dev/null @@ -1,3 +0,0 @@ -# DVB-T Ostrava (Ostrava, Czech Republic) -# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 618000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/cz-Plzen b/util/scan/dvb-t/cz-Plzen deleted file mode 100644 index 0b916af..0000000 --- a/ util/scan/dvb-t/cz-Plzen+++ /dev/null @@ -1,8 +0,0 @@ -# DVB-T Plzen (Pilsen, Czech Republic) -# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -# MUX 1 Ceska televize -T 578000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE -# MUX 2 Ceske Radiokomunikace -T 690000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE -# MUX 3 Czech Digital Group -T 722000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/cz-Praha b/util/scan/dvb-t/cz-Praha deleted file mode 100644 index 0d6721f..0000000 --- a/ util/scan/dvb-t/cz-Praha+++ /dev/null @@ -1,7 +0,0 @@ -# DVB-T Praha (Prague, Czech Republic) -# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 634000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE -T 674000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE -T 730000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE -T 778000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE -T 818000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE @@ -1,20 +1,19 @@ # DVB-T Baden-Württemberg # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 474000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH21: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 514000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH26: Das Erste, arte, Phoenix, EinsPlus -T 522000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH27: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 618000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH39: SWR-BW, BR, hr, WDR T 626000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH40: SWR-BW, BR, hr, WDR T 634000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH41: SWR-BW, BR, hr, WDR T 650000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH43: Das Erste, arte, Phoenix, EinsPlus +T 666000000 8MHz 3/4 NONE QAM16 8k 1/8 NONE # CH45: RTL, RTL II, Super RTL, VOX, RTL Crime, Passion [Sendenorm: MPEG-4] T 698000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH49: SWR-BW, BR, hr, WDR -T 706000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH50: Das Erste, arte, Phoenix, EinsPlus - # CH50: SWR-BW, BR, hr, WDR +T 706000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH50: SWR-BW, BR, hr, WDR T 722000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH52: Das Erste, arte, Phoenix, EinsPlus -T 730000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH53: Das Erste, arte, Phoenix, EinsPlus - # CH53: SWR-BW, BR, hr, WDR T 738000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH54: Das Erste, arte, Phoenix, EinsPlus +T 778000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH59: Das Erste, arte, Phoenix, EinsPlus T 786000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH60: Das Erste, arte, Phoenix, EinsPlus @@ -1,26 +1,26 @@ # DVB-T Bayern # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 184500000 7MHz 3/4 NONE QAM16 8k 1/4 NONE # CH06: Das Erste, arte, Phoenix, EinsPlus T 191500000 7MHz 3/4 NONE QAM16 8k 1/4 NONE # CH07: Das Erste, arte, Phoenix, EinsPlus T 212500000 7MHz 3/4 NONE QAM16 8k 1/4 NONE # CH10: Das Erste, arte, Phoenix, EinsPlus -T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 506000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH25: BR, BRalpha, SWR, Das Erste - # CH25: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal + # CH25: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 522000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH27: BR, BRalpha, SWR, Das Erste T 530000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH28: BR, BRalpha, SWR, Das Erste - # CH28: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal + # CH28: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 538000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH29: Das Erste, arte, Phoenix, EinsPlus T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: Das Erste, arte, Phoenix, EinsPlus -T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 578000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH34: RTL, RTL II, Super RTL, VOX - # CH34: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 586000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH35: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal + # CH34: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 586000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH35: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH36: Das Erste, arte, Phoenix, EinsPlus +T 618000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH39: BR, BRalpha, SWR, Das Erste T 626000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH40: BR, BRalpha, hr, mdr # CH40: Das Erste, arte, Phoenix, EinsPlus -T 642000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH42: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 658000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH44: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 642000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH42: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 658000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH44: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 666000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH45: BR, BRalpha, hr, mdr # CH45: Das Erste, arte, Phoenix, EinsPlus T 674000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH46: BR, BRalpha, SWR, Das Erste @@ -28,13 +28,13 @@ T 674000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH46: BR, BRalpha, SWR, Das Erste T 682000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH47: BR, BRalpha, hr, mdr # CH47: Das Erste, arte, Phoenix, EinsPlus T 690000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH48: Pro7, Sat.1, Kabel1, N24 +T 698000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH49: Das Erste, arte, Phoenix, EinsPlus T 722000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH52: Pro7, Sat.1, Kabel1, N24 T 730000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH53: BR, BRalpha, SWR, Das Erste - # CH53: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 738000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH54: http://www.digitalfernsehen.de/news/news_769785.html + # CH53: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 738000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH54: Das Erste, arte, Phoenix, EinsPlus T 746000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH55: Das Erste, arte, Phoenix, EinsPlus T 754000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH56: BR, BRalpha, SWR, Das Erste -T 770000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH58: Das Erste, arte, Phoenix, EinsPlus -T 786000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH60: Tele 5, Eurosport, MonA, Franken Fernsehen +T 786000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH60: Tele 5, Eurosport, MonaTV, Franken TV T 834000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH66: RTL, RTL II, Super RTL, VOX - # CH66: Tele 5, Eurosport, HSE 24, münchen.tv + # CH66: Tele 5, Eurosport, HSE 24, München.TV @@ -1,11 +1,12 @@ # DVB-T Berlin # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 177500000 7MHz 3/4 NONE QAM16 8k 1/8 NONE # CH05: HSE 24/MONA, FAB, WDR, SWR +T 177500000 7MHz 3/4 NONE QAM16 8k 1/8 NONE # CH05: Tele 5, HSE 24 / MonaTV(+ DMAX / Bibel.TV), WDR, SWR (BW / RP) T 191500000 7MHz 2/3 NONE QAM16 8k 1/8 NONE # CH07: MDR, NDR, arte T 506000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH25: RTL, RTL II, Super RTL, VOX T 522000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH27: Das Erste, RBB, Phoenix, EinsExtra -T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 618000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH39: Das Vierte, Bibel.TV, QVC, TVP Polonia (ab Januar 2010) T 658000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH44: Pro7, Sat.1, Kabel1, N24 T 754000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH56: Eurosport, TV.B, DSF, Neun live -T 778000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH59: n-tv, EuroNews, + 26 Radioprogramme +T 778000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH59: n-tv, EuroNews / Channel 21 Shop, + 14 Radioprogramme @@ -1,7 +1,7 @@ # DVB-T Brandenburg # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH36: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH36: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 730000000 8MHz 3/4 NONE QAM16 8k 1/4 NONE # CH53: Das Erste, RBB, Phoenix, EinsExtra T 762000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH57: MDR, NDR, arte @@ -3,7 +3,7 @@ # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: Das Erste (RB), RB TV (NDR NDS), arte, Phoenix T 538000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH29: NDR NDS, WDR/NDR SH, MDR/NDR MVP, HR/NDR HH -T 562000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH32: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 562000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH32: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 642000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH42: RTL, RTL II, Super RTL, VOX -T 666000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH45: Tele 5, Neun live, Eurosport, MONA/DMAX +T 666000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH45: Tele 5, Neun live, Eurosport, MonaTV/ DMAX T 698000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH49: Pro7, Sat.1, Kabel1, N24 @@ -1,16 +1,10 @@ # DVB-T Hamburg # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 490000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH23: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 530000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH28: NDR SH, WDR/NDR NDS, MDR/NDR MVP, BR/NDR HH T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: Pro7, Sat.1, Kabel1, N24 -T 546000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH30: Pro7, Sat.1, Kabel1, N24 T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: Das Erste, arte, Phoenix, EinsExtra -T 570000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH33: Das Erste, arte, Phoenix, EinsExtra T 626000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH40: RTL, RTL II, Super RTL, VOX -T 626000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH40: RTL, RTL II, Super RTL, VOX -T 674000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH46: Neun live, HH1, BibelTV, Eurosport -T 674000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH46: Neun live, HH1, BibelTV, Eurosport +T 674000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH46: Neun live, HH1, Bibel.TV, Eurosport T 738000000 8MHz 1/2 NONE QAM64 8k 1/8 NONE # CH54: NDR HH, WDR/NDR NDS, MDR/NDR MVP, BR/NDR SH -T 738000000 8MHz 3/4 NONE QAM16 8k 1/8 NONE # CH54: NDR HH, WDR/NDR NDS, MDR/NDR MVP, BR/NDR SH @@ -2,18 +2,18 @@ # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy T 198500000 7MHz 2/3 NONE QAM16 8k 1/4 NONE # CH08: Phoenix, BR, SWR-RP -T 474000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH21: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 474000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH21: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 498000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH24: Phoenix, BR, SWR-RP, WDR -T 506000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH25: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 506000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH25: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 562000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH32: Das Erste, hr, EinsExtra/arte T 578000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH34: RTL, RTL II, Super RTL, VOX T 602000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH37: Das Erste, hr, EinsExtra/arte T 618000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH39: Phoenix, BR, SWR-RP, mdr -T 642000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH42: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 642000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH42: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 650000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH43: Das Erste, hr, EinsExtra/arte -T 722000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH52: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 722000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH52: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 730000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH53: BR, hr, SWR-BW, WDR T 738000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH54: Pro7, Sat.1, Kabel1, N24 T 746000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH55: Phoenix, NDR, mdr, WDR -T 818000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH64: Tele5, Eurosport, rheinmaintv +T 818000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH64: Tele5, Eurosport, rheinmaintv, Bibel.TV @@ -2,11 +2,11 @@ # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: Das Erste, NDR MVP, RBB, MDR/NDR SH -T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 514000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH26: Das Erste, NDR MVP, RBB, MDR/NDR SH T 538000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH29: Das Erste, NDR MVP, RBB, MDR/NDR SH T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH36: Das Erste, NDR MVP, RBB, MDR/NDR SH -T 626000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH40: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 674000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH46: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 714000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH51: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 738000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH54: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 602000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH37: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 626000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH40: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 674000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH46: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 738000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH54: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal @@ -5,21 +5,22 @@ T 474000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH21: NDR NDS, WDR/NDR SH, MDR/NDR T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: Das Erste (RB), RB TV (NDR NDS), arte, Phoenix # CH22: Das Erste, arte, Phoenix, EinsExtra # CH22: NDR NDS, WDR/NDR SH, MDR/NDR MVP, HR/NDR HH -T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 498000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH24: RTL, RTL II, Super RTL, VOX - # CH24: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 522000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH27: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 530000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH28: Tele 5, NICK/Comedy Central, Eurosport, MONA/DMAX +T 514000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH26: Das Erste, arte, Phoenix, EinsExtra +T 522000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH27: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 530000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH28: Tele 5, NICK / Comedy Central, Eurosport, MONA/DMAX T 538000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH29: NDR NDS, WDR/NDR SH, MDR/NDR MVP, HR/NDR HH -T 562000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH32: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 554000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH31: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 562000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH32: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: Das Erste, arte, Phoenix, EinsExtra -T 586000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH35: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 586000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH35: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH36: NDR NDS, WDR/NDR SH, MDR/NDR MVP, HR/NDR HH T 602000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH37: NDR NDS, WDR/NDR SH, MDR/NDR MVP, HR/NDR HH -T 610000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH38: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 610000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH38: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 634000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH41: Das Erste, arte, Phoenix, EinsExtra T 642000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH42: RTL, RTL II, Super RTL, VOX - # CH42: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal + # CH42: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 650000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH43: Das Erste, arte, Phoenix, EinsExtra # CH43: NDR NDS, WDR/NDR SH, MDR/NDR MVP, HR/NDR HH T 658000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH44: Pro7, Sat.1, Kabel1, N24 @@ -29,12 +30,10 @@ T 682000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH47: Das Erste, arte, Phoenix, Ei T 690000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH48: Das Erste, arte, Phoenix, EinsExtra T 698000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH49: Pro7, Sat.1, Kabel1, N24 T 706000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH50: Das Erste, arte, Phoenix, EinsExtra -T 714000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH51: NDR NDS, WDR/NDR SH, MDR/NDR MVP, HR/NDR HH T 746000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH55: Das Erste, arte, Phoenix, EinsExtra T 754000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH56: NDR NDS, WDR/NDR SH, MDR/NDR MVP, HR/NDR HH T 770000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH58: NDR NDS, WDR/NDR SH, MDR/NDR MVP, HR/NDR HH T 778000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH59: Das Erste, arte, Phoenix, EinsExtra - # CH59: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 786000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH60: Tele 5, Comedy Central, Eurosport, MONA/DMAX - # CH60: Tele 5, NICK/Comedy Central, Eurosport, MONA/DMAX + # CH59: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 786000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH60: Tele 5, NICK / Comedy Central, Eurosport, MONA/DMAX T 826000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH65: Das Erste, arte, Phoenix, EinsExtra @@ -5,13 +5,13 @@ T 474000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH21: Das Erste, arte, Phoenix, Ei T 482000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH22: WDR-Wuppertal, NDR/WDR-Düsseldorf, MDR, SWR T 506000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH25: WDR-Dortmund, NDR/WDR-Essen, MDR, SWR T 514000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH26: Das Erste, arte, Phoenix, EinsFestival - # CH26: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal + # CH26: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 522000000 8MHz 1/2 NONE QAM64 8k 1/4 NONE # CH27: WDR-Siegen, NDR, MDR, SWR T 538000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH29: RTL, RTL II, Super RTL, VOX -T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 554000000 8MHz 1/2 NONE QAM64 8k 1/4 NONE # CH31: WDR-Bielefeld, NDR/WDR-Siegen, MDR, SWR -T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 586000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH35: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 586000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH35: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH36: CNN, Eurosport, Tele5, VIVA T 602000000 8MHz 1/2 NONE QAM64 8k 1/4 NONE # CH37: WDR-Aachen, NDR/WDR-Köln, MDR, SWR T 666000000 8MHz 1/2 NONE QAM64 8k 1/4 NONE # CH45: WDR-Münster, NDR/WDR-Dortmund, MDR, SWR @@ -23,5 +23,5 @@ T 722000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH52: CNN, Eurosport, Tele5, VIVA T 730000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH53: Pro7, Sat.1, Kabel1, N24 T 746000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH55: Pro7, Sat.1, Kabel1, N24 T 762000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE # CH57: WDR-Essen, NDR/WDR-Dortmund, MDR, SWR -T 778000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH59: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 778000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH59: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 786000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH60: Das Erste, arte, Phoenix, EinsFestival @@ -1,8 +1,8 @@ # DVB-T Rheinland-Pfalz # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 530000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH28: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 530000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH28: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: SWR-RP, BR, hr, WDR T 658000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH44: SWR-RP, BR, hr, WDR T 674000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH46: Das Erste, arte, Phoenix, EinsPlus @@ -1,7 +1,7 @@ # DVB-T Saarland # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 642000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH42: Das Erste, SR Fernsehen, arte, Phoenix T 658000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH44: SWR-RP, BR, hr, WDR -T 698000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH49: SaarTV, Tele 5, QVC, BibelTV +T 698000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH49: Tele 5, QVC, Bibel.TV, freie Kapazität @@ -2,11 +2,12 @@ # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy T 205500000 7MHz 2/3 NONE QAM64 8k 1/16 NONE # CH09: MDR-SN, rbb, BR, WDR -T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 498000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH24: Das Erste, arte, Phoenix, EinsFestival T 506000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH25: Das Erste, arte, Phoenix, EinsFestival T 522000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH27: MDR-SN, rbb, BR, WDR +T 530000000 8MHz 3/4 NONE QAM16 8k 1/8 NONE # CH28: RTL, RTL II, Super RTL, VOX, RTL Crime, Passion [Sendenorm: MPEG-4] T 538000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH29: MDR-SN, rbb, BR, WDR T 562000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH32: MDR-SN, rbb, BR, WDR -T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH36: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH36: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 618000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH39: Das Erste, arte, Phoenix, EinsFestival @@ -1,11 +1,12 @@ # DVB-T Sachsen-Anhalt # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 498000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH24: Das Erste, arte, Phoenix, EinsFestival +T 530000000 8MHz 3/4 NONE QAM16 8k 1/8 NONE # CH28: RTL, RTL II, Super RTL, VOX, RTL Crime, Passion [Sendenorm: MPEG-4] T 538000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH29: Das Erste, arte, Phoenix, EinsFestival -T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 554000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH31: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 554000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH31: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 578000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH34: MDR-ST, rbb, NDR, WDR T 586000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH35: MDR-ST, rbb, NDR, WDR T 610000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH38: MDR-ST, rbb, NDR, WDR @@ -1,18 +1,18 @@ # DVB-T Schleswig-Holstein # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 474000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH21: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal -T 514000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH26: NDR SH, WDR/NDR NDS, MDR/NDR MVP, BR/NDR HH +T 474000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH21: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH23: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal +T 498000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH24: NDR SH, WDR/NDR NDS, MDR/NDR MVP, BR/NDR HH +T 514000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH26: Das Erste, arte, Phoenix, EinsExtra T 530000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH28: NDR SH, WDR/NDR NDS, MDR/NDR MVP, BR/NDR HH T 546000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH30: Pro7, Sat.1, Kabel1, N24 -T 554000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH31: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 554000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH31: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 570000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH33: Das Erste, arte, Phoenix, EinsExtra T 586000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH35: Pro7, Sat.1, Kabel1, N24 T 618000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH39: NDR SH, WDR/NDR NDS, MDR/NDR MVP, BR/NDR HH T 626000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH40: RTL, RTL II, Super RTL, VOX T 666000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH45: RTL, RTL II, Super RTL, VOX T 682000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH47: Das Erste, arte, Phoenix, EinsExtra -T 762000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH57: Neun live, Tele 5, Eurosport, MONA/DMAX -T 778000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH59: Neun live, Tele 5, Eurosport, MONA/DMAX -T 786000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH60: Das Erste, arte, Phoenix, EinsExtra +T 762000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH57: Neun live, Tele 5, Eurosport, Bibel.TV +T 778000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH59: Neun live, Tele 5, Eurosport, Bibel.TV @@ -2,9 +2,9 @@ # Created from http://www.ueberallfernsehen.de/data/senderliste.pdf # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy T 474000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH21: Das Erste, arte, Phoenix, EinsFestival -T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 482000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH22: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 506000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH25: Das Erste, arte, Phoenix, EinsFestival T 522000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH27: MDR-TH, rbb, hr, BR T 690000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH48: MDR-TH, rbb, hr, BR -T 706000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH50: ZDF, 3sat, KiKa / ZDFdokukanal, ZDFinfokanal +T 706000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # CH50: ZDF, 3sat, KiKa / ZDFneo, ZDFinfokanal T 730000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # CH53: Das Erste, arte, Phoenix, EinsFestival @@ -1,8 +1,10 @@ -# Spain, Albacete +# Spain, Albacete - Update 2009/12/20 (Freud) # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 778000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 59: La Primera, La 2, Canal 24H, Clan/TVE 50, RNE1, RNE Clásica, RNE 3 -T 810000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 63: CLMTV -T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 66: Veo, Veo 2, Net TV, Teledeporte -T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 67: Cuatro, CNN+, 40 Latino, La Sexta 1 -T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 68: Telecinco, Telecinco Sport, Telecinco Estrellas, Fly Music -T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 69: Antena 3, Antena Neox, Antena Nova, La Sexta 2 +T 618000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 39: La Regional, AB TeVe/TVCM, CRN, La Tribuna TV +T 682000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 47: CNC, Vision6, ABTeVe +T 778000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 59: La 1, La 2, 24H, Clan, RNE1, RNE Clásica, RNE 3 +T 810000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 63: CMT, CMT2, RCM +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 66: Veo7, Sony TV en Veo, Tienda en Veo, IntereconomÃa, Teledeporte, Radio IntereconomÃa, Radio Marca, esRadio, Vaughan Radio +T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 67: Cuatro, CNN+, 40 Latino, Canal Club, La Sexta, SER, 40 Principales, Cadena Dial +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 68: Telecinco, La Siete, FDF, CincoShop, Disney Channel, Punto Radio +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 69: Antena 3, Antena.Neox, Antena.Nova, Gol Televisión, Onda Cero, Europa FM, Onda MelodÃa @@ -1,5 +1,6 @@ # DVB-T Alfabia, Mallorca, Balearic Islands, Spain. # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +T 602000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # TVM, Canal4, OnaMallorca Radio T 810000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # C.63: 24h, 50 aniv., ClanTV, La 2, TVE1; RNE 1, RNE 3, RNE C; Digitext, EPG, Lanzadera. T 826000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # C.65: IB3, Aprenda Ingles TV T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # C.66: NetTV, Teledeporte, VeoTV1, VeoTV2. diff --git a/util/scan/dvb-t/es-BaixoMinho b/util/scan/dvb-t/es-BaixoMinho new file mode 100644 index 0000000..6f6fde4 --- /dev/null +++ b/ util/scan/dvb-t/es-BaixoMinho@@ -0,0 +1,16 @@ +# file automatically generated by w_scan +# (http://wirbel.htpc-forum.de/w_scan/index2.html) +#! <w_scan> 20090528 1 0 OFDM ES </w_scan> +#------------------------------------------------------------------------------ +# location and provider: Baixo Minho, Pontevedra (Spain) +# date (yyyy-mm-dd) : 2009-07-11 +# provided by (opt) : neonmann@gmail.com +# +# T[2] <freq> <bw> <fec_hi> <fec_lo> <mod> <tm> <guard> <hi> [# comment] +#------------------------------------------------------------------------------ +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # SFN +T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # SFN +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 770000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # RAR Pontevedra +T 810000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # RGE GALICIA @@ -1,10 +1,12 @@ # DVB-T Collserola (Barcelona) # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 514000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c26: BTV -T 570000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c33: CityTV -T 794000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c61: TV3, K3/33, 3/24, 300 +T 514000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c26: BTV, TV Badalona, TV L'Hospitalet, TV del Besòs, COM Rà dio, Rà dio Ciutat Badalona, Rà dio L'Hospitalet +T 570000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c33: 8TV, Barça TV, EDC3, 105TV, RAC 1, RAC 105 +T 650000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c43: TV3HD, 3/24, Canal 9, IB3, Catalunya Música, iCat FM +T 690000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c48: Urbe TV, Canal Català , 25 TV, Localia, Ona FM, Onda Rambla, Sensació Rà dio +T 794000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c61: TV3, 33, 3/24, K3/300, Catalunya Rà dio, Catalunya Informació T 818000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c64: TVE1, TVE2, TVE 24H, Clan/TVE 50 Años, RNE1, RNEC, RNE3 -T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c66: Veo TV, Veo2, Net TV, Teledeporte -T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c67: Cuatro, CNN+, 40 Latino, La Sexta1 -T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c68: Telecino, T5 Sport, T5 Estrellas, Fly Music -T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c69: Antena 3, Antena.Neox, Antena.Nova, La Sexta2 +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c66: Veo7, Sony TV en Veo, Tienda en Veo, IntereconomÃa, Teledeporte, Radio IntereconomÃa, Radio Marca +T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c67: Cuatro, CNN+, 40 Latino, La Sexta, Ser, 40 Principales, Cadena Dial +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c68: Telecino, La Siete, FDF, CincoShop, Disney Channel, Punto Radio +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE #c69: Antena 3, Antena.Neox, Antena.Nova, Hogar 10, Onda Cero, Europa FM, Onda MelodÃa diff --git a/util/scan/dvb-t/es-Granada b/util/scan/dvb-t/es-Granada new file mode 100644 index 0000000..05847f1 --- /dev/null +++ b/ util/scan/dvb-t/es-Granada@@ -0,0 +1,8 @@ +# Spain, Granada +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +T 762000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 770000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/es-Huesca b/util/scan/dvb-t/es-Huesca new file mode 100644 index 0000000..8079b83 --- /dev/null +++ b/ util/scan/dvb-t/es-Huesca@@ -0,0 +1,8 @@ +# DVB-T Huesca (Aragón) [Spain] [es-Huesca] +# Generated by Vicente Hernando Ara <bizenton@gmail.com> +T 762000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # Canal 57: ARAGON TV, ARAGON RADIO, ARAGON HD +T 794000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 61: La 1, La 2, 24h, Clan, RNE1, RNEC, RNE3 +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 66: Teledeporte, Canal Ingenieria, VEO7, SONY TV en VEO, Tienda en VEO, GUIDE PLUS+, Intereconomia, Radio Intereconomia, RADIO MARCA +T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 67: laSexta, CUATRO, CNN+, 40 LATINO, PROMO, SER, 40 PRINCIPALES, CADENA DIAL +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 68: Telecinco, FDF, Telecinco 2, Disney Channel, Cincoshop +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 69: ANTENA 3, ANTENA.NEOX, ANTENA.NOVA, ONDA CERO, EUROPA FM, ONDA MELODÃA, HOGAR 10 diff --git a/util/scan/dvb-t/es-Muros-Noia b/util/scan/dvb-t/es-Muros-Noia new file mode 100644 index 0000000..a02c31d --- /dev/null +++ b/ util/scan/dvb-t/es-Muros-Noia@@ -0,0 +1,9 @@ +# DVB-T Muros and Noia +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +T 522000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 27: Local Ribeira +T 794000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 61: RAR A Corunha +T 810000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 63: RGE Galicia +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 66: SFN 1 +T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 67: SFN 2 +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 68: SFN 3 +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 69: SFN 4 diff --git a/util/scan/dvb-t/es-Pamplona b/util/scan/dvb-t/es-Pamplona new file mode 100644 index 0000000..4644b2d --- /dev/null +++ b/ util/scan/dvb-t/es-Pamplona@@ -0,0 +1,9 @@ +# DVB-T Pamplona +# T freq bw fec_hi fec_lo mod transm-mode guard-interval hierarchy +T 610000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 778000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 802000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE @@ -0,0 +1,9 @@ +# DVB-T Santiago de Compostela +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +T 490000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 23: Local Santiago +T 626000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 40: RAR Santiago +T 810000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 63: RGE Galicia +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 66: SFN 1 +T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 67: SFN 2 +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 68: SFN 3 +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 69: SFN 4 diff --git a/util/scan/dvb-t/es-Vitoria-Gasteiz b/util/scan/dvb-t/es-Vitoria-Gasteiz new file mode 100644 index 0000000..5d97413 --- /dev/null +++ b/ util/scan/dvb-t/es-Vitoria-Gasteiz@@ -0,0 +1,8 @@ +# Channel names in use at 2009/07/12, in Channel 66 [fffe] is a scrambled channel. +# In the generated *channels.conf file could be necesary to change IntereconomÃa, Radio IntereconomÃa, ONDA MELODÃA to Intereconomia, Radio Intereconomia, ONDA MELODIA for Totem to work well. +T 770000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 58: ETB1, ETB2, ETB3, ETBSAT, Euskadi Irratia, Gaztea, EiTB Irratia, Radio Euskadi, Radio Vitoria +T 810000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 63: La 1, La 2, 24h, Clan, RNE1, RNEC, RNE3 +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 66: Teledeporte, Canal Ingenieria, VEO7, SONY TV en VEO, Tienda en VEO, GUIDE PLUS+, IntereconomÃa, Radio IntereconomÃa, [fffe], RADIO MARCA +T 842000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 67: laSexta, CUATRO, CNN+, 40 LATINO, CANAL CLUB, SER, 40 PRINCIPALES, CADENA DIAL +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 68: Telecinco, FDF, LaSiete, Disney Channel, Cincoshop +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # Canal 69: ANTENA 3, ANTENA.NEOX, ANTENA.NOVA, ONDA CERO, EUROPA FM, ONDA MELODÃA, HOGAR 10 diff --git a/util/scan/dvb-t/fi-Smedsbole b/util/scan/dvb-t/fi-Smedsbole new file mode 100644 index 0000000..fa9bc03 --- /dev/null +++ b/ util/scan/dvb-t/fi-Smedsbole@@ -0,0 +1,13 @@ +#------------------------------------------------------------------------------ +# file automatically generated by w_scan +# (http://wirbel.htpc-forum.de/w_scan/index2.html) +#! <w_scan> 20090808 2 0 OFDM FI </w_scan> +#------------------------------------------------------------------------------ +# location and provider: Ã…land Smedsböle/Sund +# date (yyyy-mm-dd) : 2009-12-23 +# provided by (opt) : k.hampf@gmail.com +# +# T[2] <freq> <bw> <fec_hi> <fec_lo> <mod> <tm> <guard> <hi> [# comment] +#------------------------------------------------------------------------------ +T 506000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE # Ã…land Network +T 586000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE # Ã…land Network @@ -12,14 +12,14 @@ # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy #### Laval - MontRochard #### #R1 -T 778000000 8MHz AUTO NONE QAM64 8k AUTO NONE +T 778166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE #R2 -T 610000000 8MHz AUTO NONE QAM64 8k AUTO NONE +T 610166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE #R3 -T 754000000 8MHz AUTO NONE QAM64 8k AUTO NONE +T 754166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE #R4 -T 794000000 8MHz AUTO NONE QAM64 8k AUTO NONE +T 794166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE #R5 -T 602000000 8MHz AUTO NONE QAM64 8k AUTO NONE +T 602166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE #R6 -T 802000000 8MHz AUTO NONE QAM64 8k AUTO NONE +T 802166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE diff --git a/util/scan/dvb-t/fr-Rochefort-sur-mer b/util/scan/dvb-t/fr-Rochefort-sur-mer new file mode 100644 index 0000000..c32bc0d --- /dev/null +++ b/ util/scan/dvb-t/fr-Rochefort-sur-mer@@ -0,0 +1,14 @@ +# TNT à Rochefort (17) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy + +#multiplex 6 ( TF1 LCI Eurosport TF6 NRJ12 TMC ) +T 498166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE + +#multiplex 4 ( M6 W9 NT1 Paris Première ARTE HD ) +T 738166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE + +#multiplex 1 ( France 2 France 3 France 5 ARTE LCP Chaîne locale ou France Ô ) +T 602166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE + +#multiplex 2 ( Direct 8 France 4 BFM TV Virgin 17 Gulli i>Télé ) +T 778167000 8MHz 2/3 NONE QAM64 8k 1/32 NONE diff --git a/util/scan/dvb-t/hr-All b/util/scan/dvb-t/hr-All new file mode 100644 index 0000000..9a7223c --- /dev/null +++ b/ util/scan/dvb-t/hr-All@@ -0,0 +1,24 @@ +# Croatia, whole country +# Created from http://www.hrt.hr/index.php?id=173&tx_ttnews[cat]=102&tx_ttnews[tt_news]=56725&tx_ttnews[backPid]=185&cHash=bdf5a53e91 +# and http://213.147.101.105/DVBT_MUXA_MUXB_Popis_odasiljackih_lokacija.html +# and http://www.hrt.hr/index.php?id=173&tx_ttnews[cat]=102&tx_ttnews[tt_news]=7456&tx_ttnews[backPid]=185&cHash=d02ef00f9b +# and http://www.oiv.hr/default.asp?ru=129&gl=200907100000002&sid=&jezik=0 +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +T 490000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 530000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 546000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 570000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 570000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 594000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 618000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 642000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 650000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 658000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 666000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 682000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 690000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 714000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 730000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 738000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE +T 754000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 778000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/hr-Zagreb b/util/scan/dvb-t/hr-Zagreb deleted file mode 100644 index b385c87..0000000 --- a/ util/scan/dvb-t/hr-Zagreb+++ /dev/null @@ -1,3 +0,0 @@ -# DVB-T Hamburg -# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 522000000 8MHz 3/4 NONE AUTO 8k 1/32 NONE # CH27: diff --git a/util/scan/dvb-t/hu-Budapest b/util/scan/dvb-t/hu-Budapest new file mode 100644 index 0000000..a697fda --- /dev/null +++ b/ util/scan/dvb-t/hu-Budapest@@ -0,0 +1,8 @@ +# Hungary / Budapest +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-55: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 746000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-62: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 802000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Debrecen b/util/scan/dvb-t/hu-Debrecen new file mode 100644 index 0000000..29898d3 --- /dev/null +++ b/ util/scan/dvb-t/hu-Debrecen@@ -0,0 +1,8 @@ +# Hungary / Debrecen +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-46: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 714000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-62: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 802000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Gyor b/util/scan/dvb-t/hu-Gyor new file mode 100644 index 0000000..9650df5 --- /dev/null +++ b/ util/scan/dvb-t/hu-Gyor@@ -0,0 +1,8 @@ +# Hungary / Gyor +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-42: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 642000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-61: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 794000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Kabhegy b/util/scan/dvb-t/hu-Kabhegy new file mode 100644 index 0000000..7dfcecf --- /dev/null +++ b/ util/scan/dvb-t/hu-Kabhegy@@ -0,0 +1,8 @@ +# Hungary / Kabhegy +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# C.multiplex UHF-61: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 794000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# A2.multiplex UHF-64: +# MTV-1 HD Sopron, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 818000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Kekes b/util/scan/dvb-t/hu-Kekes new file mode 100644 index 0000000..76807df --- /dev/null +++ b/ util/scan/dvb-t/hu-Kekes@@ -0,0 +1,8 @@ +# Hungary / Kekes +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-44: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 658000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-69: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 858000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Kiskoros b/util/scan/dvb-t/hu-Kiskoros new file mode 100644 index 0000000..edf3d90 --- /dev/null +++ b/ util/scan/dvb-t/hu-Kiskoros@@ -0,0 +1,8 @@ +# Hungary / Kiskoros +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-45: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 666000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-68: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 850000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Nagykanizsa-Ujudvar b/util/scan/dvb-t/hu-Nagykanizsa-Ujudvar new file mode 100644 index 0000000..35f23d9 --- /dev/null +++ b/ util/scan/dvb-t/hu-Nagykanizsa-Ujudvar@@ -0,0 +1,8 @@ +# Hungary / Nagykanizsa / Ujudvar +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-24: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 498000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-65: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 826000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Pecs b/util/scan/dvb-t/hu-Pecs new file mode 100644 index 0000000..caf7643 --- /dev/null +++ b/ util/scan/dvb-t/hu-Pecs@@ -0,0 +1,8 @@ +# Hungary / Pecs +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-52: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 722000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-67: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 842000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Szeged b/util/scan/dvb-t/hu-Szeged new file mode 100644 index 0000000..23f1c05 --- /dev/null +++ b/ util/scan/dvb-t/hu-Szeged@@ -0,0 +1,8 @@ +# Hungary / Szeged +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-60: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 786000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-65: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 826000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Szentes b/util/scan/dvb-t/hu-Szentes new file mode 100644 index 0000000..41b9225 --- /dev/null +++ b/ util/scan/dvb-t/hu-Szentes@@ -0,0 +1,8 @@ +# Hungary / Szentes +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A3.multiplex UHF-60: +# MTV-1 HD Szeged, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 786000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-65: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 826000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Tokaj b/util/scan/dvb-t/hu-Tokaj new file mode 100644 index 0000000..6ef172a --- /dev/null +++ b/ util/scan/dvb-t/hu-Tokaj@@ -0,0 +1,8 @@ +# Hungary / Tokaj +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-68: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 850000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-63: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 810000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Uzd b/util/scan/dvb-t/hu-Uzd new file mode 100644 index 0000000..c2d270e --- /dev/null +++ b/ util/scan/dvb-t/hu-Uzd@@ -0,0 +1,8 @@ +# Hungary / Uzd +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-52: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 722000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-67: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 842000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/hu-Vasvar-Hegyhatsal b/util/scan/dvb-t/hu-Vasvar-Hegyhatsal new file mode 100644 index 0000000..4190e4d --- /dev/null +++ b/ util/scan/dvb-t/hu-Vasvar-Hegyhatsal@@ -0,0 +1,8 @@ +# Hungary / Vasvar / Hegyhatsal +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# A1.multiplex UHF-58: +# MTV-1 HD Budapest, MTV-2 HD, ATV (Hungary), Hir TV, MR-1 Kossuth R, MR-2 Petofi R, MR-3 Bartok R, Katolikus R +T 770000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE +# C.multiplex UHF-68: +# Duna TV HD, Duna-II. Autonomia, RTL Klub, TV-2 (Hungary), Euronews +T 850000000 8MHz 3/4 NONE QAM64 8k 1/8 NONE diff --git a/util/scan/dvb-t/it-Montevergine b/util/scan/dvb-t/it-Montevergine new file mode 100644 index 0000000..0d7c30d --- /dev/null +++ b/ util/scan/dvb-t/it-Montevergine@@ -0,0 +1,18 @@ +# DVB-T Montevergine (Avellino) 83100 +# 12/12/2009 by Antonio Galasso anto1714@libero.it +# (ricordati di mettere il lettore in posizione stop orima di iniziare la scansione dei canali) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +# C-MUX +T 177500000 7MHz 2/3 NONE QAM64 8k 1/32 NONE +T 482000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 498000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 514000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 522000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 530000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 546000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 554000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 594000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 642000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 682000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 690000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE +T 698000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/lt-All b/util/scan/dvb-t/lt-All new file mode 100644 index 0000000..daf2da2 --- /dev/null +++ b/ util/scan/dvb-t/lt-All@@ -0,0 +1,39 @@ +# Lithuania, whole country +# Created from http://www.skaitmenine.lt/lt/skaitmenine_tv_lietuvoje/antzemine_dvb_t.html +# Created by baruse@gmail.com + +# LRTC I tinklas +T 482000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 22 +T 514000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 26 +T 618000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 39 +T 658000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 44 +T 682000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 47 +T 762000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 57 +T 770000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 58 +T 786000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 60 +T 794000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 61 + +# LRTC II tinklas +T 570000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 33 +T 610000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 38 +T 690000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 48 +T 738000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 54 +T 802000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 62 +T 810000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 63 +T 818000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 64 + +# TEO LT I tinklas +T 594000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 36 +T 706000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 50 +T 778000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 59 +T 826000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 65 + +# TEO LT II tinklas +T 474000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 21 +T 546000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 30 +T 730000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 53 +#T 786000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 60 + +# Vilniui bonusas +T 602000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 37 +#T 730000000 8MHz AUTO NONE QAM64 8k 1/16 NONE # kanalas 53 diff --git a/util/scan/dvb-t/ro-Bucharest b/util/scan/dvb-t/ro-Bucharest new file mode 100644 index 0000000..fac0ca9 --- /dev/null +++ b/ util/scan/dvb-t/ro-Bucharest@@ -0,0 +1,5 @@ +# Romania / Bucharest +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +T 546000000 8MHz 2/3 NONE QAM16 8k 1/16 NONE +T 738000000 8MHz 2/3 NONE QAM64 8k 1/16 NONE # SRTV +T 778000000 8MHz 2/3 NONE QAM64 8k 1/16 NONE # SNR DVB-T @@ -4,3 +4,4 @@ T 490000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE T 474000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE T 578000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE T 506000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 642000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE @@ -4,3 +4,4 @@ T 490000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE T 514000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE T 778000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE T 650000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +T 698000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE @@ -1,4 +1,5 @@ # DVB-T Banska Bystrica (Banska Bystrica, Slovak Republic) # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 778000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +# on channel 65 +T 826000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/sk-Bardejov b/util/scan/dvb-t/sk-Bardejov new file mode 100644 index 0000000..95daa9e --- /dev/null +++ b/ util/scan/dvb-t/sk-Bardejov@@ -0,0 +1,5 @@ +# DVB-T Bardejov (Bardejov, Slovak Republic) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy + +# on channel 62 +T 802000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE @@ -1,4 +1,5 @@ # DVB-T Bratislava (Bratislava, Slovak Republic) # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 834000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +# on channel 66 +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE @@ -1,4 +1,5 @@ # DVB-T Kosice (Kosice, Slovak Republic) # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 658000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE +# on channel 64 +T 818000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/sk-Michalovce b/util/scan/dvb-t/sk-Michalovce new file mode 100644 index 0000000..f91b298 --- /dev/null +++ b/ util/scan/dvb-t/sk-Michalovce@@ -0,0 +1,5 @@ +# DVB-T Michalovce (Michalovce, Slovak Republic) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy + +# on channel 64 +T 818000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/sk-Namestovo b/util/scan/dvb-t/sk-Namestovo new file mode 100644 index 0000000..da916ee --- /dev/null +++ b/ util/scan/dvb-t/sk-Namestovo@@ -0,0 +1,5 @@ +# DVB-T Namestovo (Namestovo, Slovak Republic) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy + +# on channel 68 +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/sk-Poprad b/util/scan/dvb-t/sk-Poprad new file mode 100644 index 0000000..74040ff --- /dev/null +++ b/ util/scan/dvb-t/sk-Poprad@@ -0,0 +1,5 @@ +# DVB-T Poprad (Poprad, Slovak Republic) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy + +# on channel 66 +T 834000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/sk-RimavskaSobota b/util/scan/dvb-t/sk-RimavskaSobota new file mode 100644 index 0000000..6dfe7af --- /dev/null +++ b/ util/scan/dvb-t/sk-RimavskaSobota@@ -0,0 +1,5 @@ +# DVB-T Rimavska Sobota (Rimavska Sobota, Slovak Republic) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy + +# on channel 61 +T 794000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/sk-Trencin b/util/scan/dvb-t/sk-Trencin new file mode 100644 index 0000000..9a0d7c1 --- /dev/null +++ b/ util/scan/dvb-t/sk-Trencin@@ -0,0 +1,5 @@ +# DVB-T Trencin (Trencin, Slovak Republic) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy + +# on channel 69 +T 858000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/sk-VelkyKrtis b/util/scan/dvb-t/sk-VelkyKrtis new file mode 100644 index 0000000..90d186a --- /dev/null +++ b/ util/scan/dvb-t/sk-VelkyKrtis@@ -0,0 +1,5 @@ +# DVB-T Velky Krtis (Velky Krtis, Slovak Republic) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy + +# on channel 65 +T 826000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE diff --git a/util/scan/dvb-t/sk-Zilina b/util/scan/dvb-t/sk-Zilina new file mode 100644 index 0000000..b1629b2 --- /dev/null +++ b/ util/scan/dvb-t/sk-Zilina@@ -0,0 +1,5 @@ +# DVB-T Zilina (Zilina, Slovak Republic) +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy + +# on channel 68 +T 850000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE @@ -2,9 +2,12 @@ # Auto-generated from http://www.dtg.org.uk/retailer/dtt_channels.html # and http://www.ofcom.org.uk/static/reception_advice/index.asp.html # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 618000000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 642167000 8MHz 2/3 NONE QAM64 2k 1/32 NONE -T 666167000 8MHz 2/3 NONE QAM64 2k 1/32 NONE -T 697833000 8MHz 3/4 NONE QAM16 2k 1/32 NONE +T 474167000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 497833000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 506167000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 521833000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 634167000 8MHz 2/3 NONE QAM64 8k 1/32 NONE T 650167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 705833000 8MHz 3/4 NONE QAM16 2k 1/32 NONE +T 658167000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 690000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 714000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE @@ -1,10 +1,9 @@ # UK, Stockland Hill -# Auto-generated from http://www.dtg.org.uk/retailer/dtt_channels.html -# and http://www.ofcom.org.uk/static/reception_advice/index.asp.html +# http://www.ukfree.tv/txdetail.php?a=ST222014 # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 481833000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 529833000 8MHz 2/3 NONE QAM64 2k 1/32 NONE -T 505833000 8MHz 2/3 NONE QAM64 2k 1/32 NONE -T 561833000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 546167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 578167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE +T 514167000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # PSB1 +T 490167000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # PSB2 +#T 538167000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # PSB3 (DVB-T2) +T 505833000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # COM4 +T 481833000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # COM5 +T 529833000 8MHz 2/3 NONE QAM64 8k 1/32 NONE # COM6 @@ -2,9 +2,12 @@ # Auto-generated from http://www.dtg.org.uk/retailer/dtt_channels.html # and http://www.ofcom.org.uk/static/reception_advice/index.asp.html # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 546167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 578167000 8MHz 2/3 NONE QAM64 2k 1/32 NONE -T 490167000 8MHz 2/3 NONE QAM64 2k 1/32 NONE -T 514167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 538167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 570167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE +T 490000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 506000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 514000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 530000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 538000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 546000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 730000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 762000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 786000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE @@ -1,13 +1,9 @@ # UK, Winter Hill -# Auto-generated from http://www.dtg.org.uk/retailer/dtt_channels.html -# and http://www.ofcom.org.uk/static/reception_advice/index.asp.html +# Populated by J. Hornsby from a scan of active multiplexes +# UK, Winter Hill B Ceased broadcasting on 02 December 2009 # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy -T 754167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 834167000 8MHz 2/3 NONE QAM64 2k 1/32 NONE -T 850167000 8MHz 2/3 NONE QAM64 2k 1/32 NONE -T 842167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 786167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 810167000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -# UK, Winter Hill B -T 650000000 8MHz 3/4 NONE QAM16 2k 1/32 NONE -T 626000000 8MHz 3/4 NONE QAM16 2k 1/32 NONE +T 746000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 770000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 778000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 794000000 8MHz 2/3 NONE QAM64 8k 1/32 NONE +T 801833000 8MHz 2/3 NONE QAM64 8k 1/32 NONE diff --git a/util/scan/dvb-t/vn-Hanoi b/util/scan/dvb-t/vn-Hanoi new file mode 100644 index 0000000..451a07f --- /dev/null +++ b/ util/scan/dvb-t/vn-Hanoi@@ -0,0 +1,5 @@ +# Hanoi - Vietnam - DVB-T by VTC +# contributed by Pham Thanh Nam <phamthanhnam.ptn@gmail.com> +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +T 514000000 8MHz 3/4 NONE QAM64 2k 1/32 NONE +T 578000000 8MHz 3/4 NONE QAM64 2k 1/32 NONE diff --git a/util/scan/dvb-t/vn-Thaibinh b/util/scan/dvb-t/vn-Thaibinh new file mode 100644 index 0000000..85f8098 --- /dev/null +++ b/ util/scan/dvb-t/vn-Thaibinh@@ -0,0 +1,5 @@ +# Thaibinh - Vietnam - DVB-T by VTC +# contributed by Pham Thanh Nam <phamthanhnam.ptn@gmail.com> +# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy +T 626000000 8MHz 3/4 NONE QAM64 2k 1/32 NONE +T 634000000 8MHz 3/4 NONE QAM64 2k 1/32 NONE @@ -236,6 +236,17 @@ static struct transponder *find_transponder(uint32_t frequency) static void copy_transponder(struct transponder *d, struct transponder *s) { + struct list_head *pos; + struct service *service; + + if (d->transport_stream_id != s->transport_stream_id) { + /* propagate change to any already allocated services */ + list_for_each(pos, &d->services) { + service = list_entry(pos, struct service, list); + service->transport_stream_id = s->transport_stream_id; + } + } + d->network_id = s->network_id; d->original_network_id = s->original_network_id; d->transport_stream_id = s->transport_stream_id; @@ -1,6 +1,6 @@ # Makefile for linuxtv.org dvb-apps/util/szap -objects = lnb.o +objects = lnb.o util.o binaries = azap \ czap \ @@ -13,6 +13,8 @@ #include <linux/dvb/frontend.h> #include <linux/dvb/dmx.h> +#include "util.h" + static char FRONTEND_DEV [80]; static char DEMUX_DEV [80]; @@ -209,31 +211,6 @@ int parse(const char *fname, const char *channel, static -int set_pesfilter (int fd, int pid, dmx_pes_type_t type, int dvr) -{ - struct dmx_pes_filter_params pesfilter; - - if (pid <= 0 || pid >= 0x1fff) - return 0; - - pesfilter.pid = pid; - pesfilter.input = DMX_IN_FRONTEND; - pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER; - pesfilter.pes_type = type; - pesfilter.flags = DMX_IMMEDIATE_START; - - if (ioctl(fd, DMX_SET_PES_FILTER, &pesfilter) < 0) { - PERROR ("ioctl(DMX_SET_PES_FILTER) for %s PID failed", - type == DMX_PES_AUDIO ? "Audio" : - type == DMX_PES_VIDEO ? "Video" : "??"); - return -1; - } - - return 0; -} - - -static int setup_frontend (int fe_fd, struct dvb_frontend_parameters *frontend) { struct dvb_frontend_info fe_info; @@ -13,6 +13,8 @@ #include <linux/dvb/frontend.h> #include <linux/dvb/dmx.h> +#include "util.h" + static char FRONTEND_DEV [80]; static char DEMUX_DEV [80]; @@ -118,7 +120,7 @@ char *find_channel(FILE *f, int list_channels, int *chan_no, const char *channel int parse(const char *fname, int list_channels, int chan_no, const char *channel, - struct dvb_frontend_parameters *frontend, int *vpid, int *apid) + struct dvb_frontend_parameters *frontend, int *vpid, int *apid, int *sid) { FILE *f; char *chan; @@ -141,10 +143,10 @@ int parse(const char *fname, int list_channels, int chan_no, const char *channel } printf("%3d %s", chan_no, chan); - if ((sscanf(chan, "%a[^:]:%d:%a[^:]:%d:%a[^:]:%a[^:]:%d:%d\n", + if ((sscanf(chan, "%m[^:]:%d:%m[^:]:%d:%m[^:]:%m[^:]:%d:%d:%d\n", &name, &frontend->frequency, &inv, &frontend->u.qam.symbol_rate, - &fec, &mod, vpid, apid) != 8) + &fec, &mod, vpid, apid, sid) != 9) || !name || !inv || !fec | !mod) { ERROR("cannot parse service data"); return -3; @@ -165,10 +167,10 @@ int parse(const char *fname, int list_channels, int chan_no, const char *channel ERROR("modulation field syntax '%s'", mod); return -6; } - printf("%3d %s: f %d, s %d, i %d, fec %d, qam %d, v %#x, a %#x\n", + printf("%3d %s: f %d, s %d, i %d, fec %d, qam %d, v %#x, a %#x, s %#x \n", chan_no, name, frontend->frequency, frontend->u.qam.symbol_rate, frontend->inversion, frontend->u.qam.fec_inner, - frontend->u.qam.modulation, *vpid, *apid); + frontend->u.qam.modulation, *vpid, *apid, *sid); free(name); free(inv); free(fec); @@ -178,31 +180,6 @@ int parse(const char *fname, int list_channels, int chan_no, const char *channel } - -static -int set_pesfilter (int fd, int pid, dmx_pes_type_t type, int dvr) -{ - struct dmx_pes_filter_params pesfilter; - - if (pid <= 0 || pid >= 0x1fff) - return 0; - - pesfilter.pid = pid; - pesfilter.input = DMX_IN_FRONTEND; - pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER; - pesfilter.pes_type = type; - pesfilter.flags = DMX_IMMEDIATE_START; - - if (ioctl(fd, DMX_SET_PES_FILTER, &pesfilter) < 0) { - PERROR ("ioctl(DMX_SET_PES_FILTER) for %s PID failed", - type == DMX_PES_AUDIO ? "Audio" : - type == DMX_PES_VIDEO ? "Video" : "??"); - return -1; - } - - return 0; -} - static int setup_frontend(int fe_fd, struct dvb_frontend_parameters *frontend) { @@ -264,9 +241,20 @@ int check_frontend (int fe_fd, int human_readable) } -static const char *usage = "\nusage: %s [-a adapter_num] [-f frontend_id] [-d demux_id] [-c conf_file] [ -H ] {<channel name>| -n channel_num} [-x]\n" - " or: %s [-c conf_file] -l\n\n"; - +static const char *usage = + "\nusage: %s [options] -l\n" + " list known channels\n" + " %s [options] {-n channel-number|channel_name}\n" + " zap to channel via number or full name (case insensitive)\n" + " -a number : use given adapter (default 0)\n" + " -f number : use given frontend (default 0)\n" + " -d number : use given demux (default 0)\n" + " -c file : read channels list from 'file'\n" + " -x : exit after tuning\n" + " -H : human readable output\n" + " -r : set up /dev/dvb/adapterX/dvr0 for TS recording\n" + " -p : add pat and pmt to TS recording (implies -r)\n" +; int main(int argc, char **argv) { @@ -275,12 +263,12 @@ int main(int argc, char **argv) char *confname = NULL; char *channel = NULL; int adapter = 0, frontend = 0, demux = 0, dvr = 0; - int vpid, apid; - int frontend_fd, video_fd, audio_fd; + int vpid, apid, sid, pmtpid = 0; + int frontend_fd, video_fd, audio_fd, pat_fd, pmt_fd; int opt, list_channels = 0, chan_no = 0; - int human_readable = 0; + int human_readable = 0, rec_psi = 0; - while ((opt = getopt(argc, argv, "Hln:hrn:a:f:d:c:x")) != -1) { + while ((opt = getopt(argc, argv, "Hln:hrn:a:f:d:c:x:p")) != -1) { switch (opt) { case 'a': adapter = strtoul(optarg, NULL, 0); @@ -300,6 +288,9 @@ int main(int argc, char **argv) case 'n': chan_no = strtoul(optarg, NULL, 0); break; + case 'p': + rec_psi = 1; + break; case 'x': exit_after_tuning = 1; break; @@ -352,7 +343,7 @@ int main(int argc, char **argv) memset(&frontend_param, 0, sizeof(struct dvb_frontend_parameters)); - if (parse(confname, list_channels, chan_no, channel, &frontend_param, &vpid, &apid)) + if (parse(confname, list_channels, chan_no, channel, &frontend_param, &vpid, &apid, &sid)) return -1; if (list_channels) return 0; @@ -365,6 +356,28 @@ int main(int argc, char **argv) if (setup_frontend(frontend_fd, &frontend_param) < 0) return -1; + if (rec_psi) { + pmtpid = get_pmt_pid(DEMUX_DEV, sid); + if (pmtpid <= 0) { + fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid); + return -1; + } + + if ((pat_fd = open(DEMUX_DEV, O_RDWR)) < 0) { + perror("opening pat demux failed"); + return -1; + } + if (set_pesfilter(pat_fd, 0, DMX_PES_OTHER, dvr) < 0) + return -1; + + if ((pmt_fd = open(DEMUX_DEV, O_RDWR)) < 0) { + perror("opening pmt demux failed"); + return -1; + } + if (set_pesfilter(pmt_fd, pmtpid, DMX_PES_OTHER, dvr) < 0) + return -1; + } + if ((video_fd = open(DEMUX_DEV, O_RDWR)) < 0) { PERROR("failed opening '%s'", DEMUX_DEV); return -1; @@ -383,6 +396,8 @@ int main(int argc, char **argv) check_frontend (frontend_fd, human_readable); + close (pat_fd); + close (pmt_fd); close (audio_fd); close (video_fd); close (frontend_fd); @@ -48,6 +48,7 @@ #include <linux/dvb/dmx.h> #include <linux/dvb/audio.h> #include "lnb.h" +#include "util.h" #ifndef TRUE #define TRUE (1==1) @@ -92,94 +93,6 @@ static char *usage_str = " -p : add pat and pmt to TS recording (implies -r)\n" " or -n numbers for zapping\n"; -static int set_demux(int dmxfd, int pid, int pes_type, int dvr) -{ - struct dmx_pes_filter_params pesfilter; - - if (pid < 0 || pid >= 0x1fff) /* ignore this pid to allow radio services */ - return TRUE; - - if (dvr) { - int buffersize = 64 * 1024; - if (ioctl(dmxfd, DMX_SET_BUFFER_SIZE, buffersize) == -1) - perror("DMX_SET_BUFFER_SIZE failed"); - } - - pesfilter.pid = pid; - pesfilter.input = DMX_IN_FRONTEND; - pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER; - pesfilter.pes_type = pes_type; - pesfilter.flags = DMX_IMMEDIATE_START; - - if (ioctl(dmxfd, DMX_SET_PES_FILTER, &pesfilter) == -1) { - fprintf(stderr, "DMX_SET_PES_FILTER failed " - "(PID = 0x%04x): %d %m\n", pid, errno); - return FALSE; - } - - return TRUE; -} - -int get_pmt_pid(char *dmxdev, int sid) -{ - int patfd, count; - int pmt_pid = 0; - int patread = 0; - int section_length; - unsigned char buft[4096]; - unsigned char *buf = buft; - struct dmx_sct_filter_params f; - - memset(&f, 0, sizeof(f)); - f.pid = 0; - f.filter.filter[0] = 0x00; - f.filter.mask[0] = 0xff; - f.timeout = 0; - f.flags = DMX_IMMEDIATE_START | DMX_CHECK_CRC; - - if ((patfd = open(dmxdev, O_RDWR)) < 0) { - perror("openening pat demux failed"); - return -1; - } - - if (ioctl(patfd, DMX_SET_FILTER, &f) == -1) { - perror("ioctl DMX_SET_FILTER failed"); - close(patfd); - return -1; - } - - while (!patread){ - if (((count = read(patfd, buf, sizeof(buft))) < 0) && errno == EOVERFLOW) - count = read(patfd, buf, sizeof(buft)); - if (count < 0) { - perror("read_sections: read error"); - close(patfd); - return -1; - } - - section_length = ((buf[1] & 0x0f) << 8) | buf[2]; - if (count != section_length + 3) - continue; - - buf += 8; - section_length -= 8; - - patread = 1; /* assumes one section contains the whole pat */ - while (section_length > 0) { - int service_id = (buf[0] << 8) | buf[1]; - if (service_id == sid) { - pmt_pid = ((buf[2] & 0x1f) << 8) | buf[3]; - section_length = 0; - } - buf += 4; - section_length -= 4; - } - } - - close(patfd); - return pmt_pid; -} - struct diseqc_cmd { struct dvb_diseqc_master_cmd cmd; uint32_t wait; @@ -390,10 +303,10 @@ int zap_to(unsigned int adapter, unsigned int frontend, unsigned int demux, if (diseqc(fefd, sat_no, pol, hiband)) if (do_tune(fefd, ifreq, sr)) - if (set_demux(dmxfdv, vpid, DMX_PES_VIDEO, dvr)) + if (set_pesfilter(dmxfdv, vpid, DMX_PES_VIDEO, dvr)) if (audiofd >= 0) (void)ioctl(audiofd, AUDIO_SET_BYPASS_MODE, bypass); - if (set_demux(dmxfda, apid, DMX_PES_AUDIO, dvr)) { + if (set_pesfilter(dmxfda, apid, DMX_PES_AUDIO, dvr)) { if (rec_psi) { pmtpid = get_pmt_pid(dmxdev, sid); if (pmtpid < 0) { @@ -403,8 +316,8 @@ int zap_to(unsigned int adapter, unsigned int frontend, unsigned int demux, fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid); result = FALSE; } - if (set_demux(patfd, 0, DMX_PES_OTHER, dvr)) - if (set_demux(pmtfd, pmtpid, DMX_PES_OTHER, dvr)) + if (set_pesfilter(patfd, 0, DMX_PES_OTHER, dvr)) + if (set_pesfilter(pmtfd, pmtpid, DMX_PES_OTHER, dvr)) result = TRUE; } else { result = TRUE; @@ -35,6 +35,8 @@ #include <linux/dvb/frontend.h> #include <linux/dvb/dmx.h> +#include "util.h" + static char FRONTEND_DEV [80]; static char DEMUX_DEV [80]; static char DVR_DEV [80]; @@ -269,7 +271,8 @@ static int check_fec(fe_code_rate_t *fec) int parse(const char *fname, const char *channel, - struct dvb_frontend_parameters *frontend, int *vpid, int *apid) + struct dvb_frontend_parameters *frontend, int *vpid, int *apid, + int *sid) { int fd; int err; @@ -343,7 +346,11 @@ int parse(const char *fname, const char *channel, if ((err = try_parse_int(fd, apid, "Audio PID"))) return -13; - + + if ((err = try_parse_int(fd, sid, "Service ID"))) + return -14; + + close(fd); return 0; @@ -351,31 +358,6 @@ int parse(const char *fname, const char *channel, static -int set_pesfilter (int fd, int pid, dmx_pes_type_t type, int dvr) -{ - struct dmx_pes_filter_params pesfilter; - - if (pid <= 0 || pid >= 0x1fff) - return 0; - - pesfilter.pid = pid; - pesfilter.input = DMX_IN_FRONTEND; - pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER; - pesfilter.pes_type = type; - pesfilter.flags = DMX_IMMEDIATE_START; - - if (ioctl(fd, DMX_SET_PES_FILTER, &pesfilter) < 0) { - PERROR ("ioctl(DMX_SET_PES_FILTER) for %s PID failed", - type == DMX_PES_AUDIO ? "Audio" : - type == DMX_PES_VIDEO ? "Video" : "??"); - return -1; - } - - return 0; -} - - -static int setup_frontend (int fe_fd, struct dvb_frontend_parameters *frontend) { struct dvb_frontend_info fe_info; @@ -503,6 +485,7 @@ static char *usage = " -c file : read channels list from 'file'\n" " -x : exit after tuning\n" " -r : set up /dev/dvb/adapterX/dvr0 for TS recording\n" + " -p : add pat and pmt to TS recording (implies -r)\n" " -s : only print summary\n" " -S : run silently (no output)\n" " -H : human readable output\n" @@ -519,15 +502,16 @@ int main(int argc, char **argv) char *confname = NULL; char *channel = NULL; int adapter = 0, frontend = 0, demux = 0, dvr = 0; - int vpid, apid; + int vpid, apid, sid, pmtpid = 0; + int pat_fd, pmt_fd; int frontend_fd, audio_fd = 0, video_fd = 0, dvr_fd, file_fd; int opt; int record = 0; int frontend_only = 0; char *filename = NULL; - int human_readable = 0; + int human_readable = 0, rec_psi = 0; - while ((opt = getopt(argc, argv, "H?hrxRsFSn:a:f:d:c:t:o:")) != -1) { + while ((opt = getopt(argc, argv, "H?hrpxRsFSn:a:f:d:c:t:o:")) != -1) { switch (opt) { case 'a': adapter = strtoul(optarg, NULL, 0); @@ -548,6 +532,9 @@ int main(int argc, char **argv) case 'r': dvr = 1; break; + case 'p': + rec_psi = 1; + break; case 'x': exit_after_tuning = 1; break; @@ -610,7 +597,7 @@ int main(int argc, char **argv) memset(&frontend_param, 0, sizeof(struct dvb_frontend_parameters)); - if (parse (confname, channel, &frontend_param, &vpid, &apid)) + if (parse (confname, channel, &frontend_param, &vpid, &apid, &sid)) return -1; if ((frontend_fd = open(FRONTEND_DEV, O_RDWR)) < 0) { @@ -624,6 +611,28 @@ int main(int argc, char **argv) if (frontend_only) goto just_the_frontend_dude; + if (rec_psi) { + pmtpid = get_pmt_pid(DEMUX_DEV, sid); + if (pmtpid <= 0) { + fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid); + return -1; + } + + if ((pat_fd = open(DEMUX_DEV, O_RDWR)) < 0) { + perror("opening pat demux failed"); + return -1; + } + if (set_pesfilter(pat_fd, 0, DMX_PES_OTHER, dvr) < 0) + return -1; + + if ((pmt_fd = open(DEMUX_DEV, O_RDWR)) < 0) { + perror("opening pmt demux failed"); + return -1; + } + if (set_pesfilter(pmt_fd, pmtpid, DMX_PES_OTHER, dvr) < 0) + return -1; + } + if ((video_fd = open(DEMUX_DEV, O_RDWR)) < 0) { PERROR("failed opening '%s'", DEMUX_DEV); return -1; @@ -689,6 +698,8 @@ just_the_frontend_dude: check_frontend (frontend_fd, human_readable); } + close (pat_fd); + close (pmt_fd); close (audio_fd); close (video_fd); close (frontend_fd); diff --git a/util/szap/util.c b/util/szap/util.c new file mode 100644 index 0000000..301d666 --- /dev/null +++ b/ util/szap/util.c@@ -0,0 +1,126 @@ +/* + * util functions for various ?zap implementations + * + * Copyright (C) 2001 Johannes Stezenbach (js@convergence.de) + * for convergence integrated media + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <string.h> +#include <unistd.h> +#include <stdio.h> +#include <errno.h> + +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> + +#include <linux/dvb/frontend.h> +#include <linux/dvb/dmx.h> + + +int set_pesfilter(int dmxfd, int pid, int pes_type, int dvr) +{ + struct dmx_pes_filter_params pesfilter; + + /* ignore this pid to allow radio services */ + if (pid < 0 || + pid >= 0x1fff || + (pid == 0 && pes_type != DMX_PES_OTHER)) + return 0; + + if (dvr) { + int buffersize = 64 * 1024; + if (ioctl(dmxfd, DMX_SET_BUFFER_SIZE, buffersize) == -1) + perror("DMX_SET_BUFFER_SIZE failed"); + } + + pesfilter.pid = pid; + pesfilter.input = DMX_IN_FRONTEND; + pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER; + pesfilter.pes_type = pes_type; + pesfilter.flags = DMX_IMMEDIATE_START; + + if (ioctl(dmxfd, DMX_SET_PES_FILTER, &pesfilter) == -1) { + fprintf(stderr, "DMX_SET_PES_FILTER failed " + "(PID = 0x%04x): %d %m\n", pid, errno); + return -1; + } + + return 0; +} + + +int get_pmt_pid(char *dmxdev, int sid) +{ + int patfd, count; + int pmt_pid = 0; + int patread = 0; + int section_length; + unsigned char buft[4096]; + unsigned char *buf = buft; + struct dmx_sct_filter_params f; + + memset(&f, 0, sizeof(f)); + f.pid = 0; + f.filter.filter[0] = 0x00; + f.filter.mask[0] = 0xff; + f.timeout = 0; + f.flags = DMX_IMMEDIATE_START | DMX_CHECK_CRC; + + if ((patfd = open(dmxdev, O_RDWR)) < 0) { + perror("openening pat demux failed"); + return -1; + } + + if (ioctl(patfd, DMX_SET_FILTER, &f) == -1) { + perror("ioctl DMX_SET_FILTER failed"); + close(patfd); + return -1; + } + + while (!patread){ + if (((count = read(patfd, buf, sizeof(buft))) < 0) && errno == EOVERFLOW) + count = read(patfd, buf, sizeof(buft)); + if (count < 0) { + perror("read_sections: read error"); + close(patfd); + return -1; + } + + section_length = ((buf[1] & 0x0f) << 8) | buf[2]; + if (count != section_length + 3) + continue; + + buf += 8; + section_length -= 8; + + patread = 1; /* assumes one section contains the whole pat */ + while (section_length > 0) { + int service_id = (buf[0] << 8) | buf[1]; + if (service_id == sid) { + pmt_pid = ((buf[2] & 0x1f) << 8) | buf[3]; + section_length = 0; + } + buf += 4; + section_length -= 4; + } + } + + close(patfd); + return pmt_pid; +} diff --git a/util/szap/util.h b/util/szap/util.h new file mode 100644 index 0000000..f4b7f12 --- /dev/null +++ b/ util/szap/util.h@@ -0,0 +1,24 @@ +/* + * util functions for various ?zap implementations + * + * Copyright (C) 2001 Johannes Stezenbach (js@convergence.de) + * for convergence integrated media + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +int set_pesfilter(int dmxfd, int pid, int pes_type, int dvr); + +int get_pmt_pid(char *dmxdev, int sid); |