diff options
Diffstat (limited to 'util')
206 files changed, 35918 insertions, 623 deletions
diff --git a/util/Makefile b/util/Makefile index c7a83db..db9e63d 100644 --- a/util/Makefile +++ b/util/Makefile @@ -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; +} diff --git a/util/femon/femon.c b/util/femon/femon.c index 46d239d..a50fe17 100644 --- a/util/femon/femon.c +++ b/util/femon/femon.c @@ -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 diff --git a/util/scan/dvb-c/at-KarrerNet b/util/scan/dvb-c/at-KarrerNet index 27e143a..a00c6a2 100644 --- a/util/scan/dvb-c/at-KarrerNet +++ b/util/scan/dvb-c/at-KarrerNet @@ -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 diff --git a/util/scan/dvb-c/se-comhem b/util/scan/dvb-c/se-comhem index 16bd7dd..7452c7f 100644 --- a/util/scan/dvb-c/se-comhem +++ b/util/scan/dvb-c/se-comhem @@ -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 diff --git a/util/scan/dvb-s/Amos-4w b/util/scan/dvb-s/Amos-4w index 3a80591..d10c48a 100644 --- a/util/scan/dvb-s/Amos-4w +++ b/util/scan/dvb-s/Amos-4w @@ -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 diff --git a/util/scan/dvb-s/AsiaSat3S_C-105.5E b/util/scan/dvb-s/AsiaSat3S_C-105.5E index 8e98a5d..4d09ef5 100644 --- a/util/scan/dvb-s/AsiaSat3S_C-105.5E +++ b/util/scan/dvb-s/AsiaSat3S_C-105.5E @@ -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 diff --git a/util/scan/dvb-s/Atlantic-Bird-1-12.5W b/util/scan/dvb-s/Atlantic-Bird-1-12.5W index 5c38433..6735d70 100644 --- a/util/scan/dvb-s/Atlantic-Bird-1-12.5W +++ b/util/scan/dvb-s/Atlantic-Bird-1-12.5W @@ -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 diff --git a/util/scan/dvb-s/Intelsat-1002-1.0W b/util/scan/dvb-s/Intelsat-1002-1.0W index 09d82ca..0142ded 100644 --- a/util/scan/dvb-s/Intelsat-1002-1.0W +++ b/util/scan/dvb-s/Intelsat-1002-1.0W @@ -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 diff --git a/util/scan/dvb-s/Nilesat101+102-7.0W b/util/scan/dvb-s/Nilesat101+102-7.0W index 64c1921..8ef176f 100644 --- a/util/scan/dvb-s/Nilesat101+102-7.0W +++ b/util/scan/dvb-s/Nilesat101+102-7.0W @@ -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 diff --git a/util/scan/dvb-s/Sirius-5.0E b/util/scan/dvb-s/Sirius-5.0E index ec4e4ea..949d0e2 100644 --- a/util/scan/dvb-s/Sirius-5.0E +++ b/util/scan/dvb-s/Sirius-5.0E @@ -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 diff --git a/util/scan/dvb-s/Telecom2-8.0W b/util/scan/dvb-s/Telecom2-8.0W index 91678b4..5f48631 100644 --- a/util/scan/dvb-s/Telecom2-8.0W +++ b/util/scan/dvb-s/Telecom2-8.0W @@ -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 diff --git a/util/scan/dvb-s/Telstar12-15.0W b/util/scan/dvb-s/Telstar12-15.0W index 529b91f..db14a6e 100644 --- a/util/scan/dvb-s/Telstar12-15.0W +++ b/util/scan/dvb-s/Telstar12-15.0W @@ -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 diff --git a/util/scan/dvb-s/Thor-1.0W b/util/scan/dvb-s/Thor-1.0W index 1f8f1d2..99e98d4 100644 --- a/util/scan/dvb-s/Thor-1.0W +++ b/util/scan/dvb-s/Thor-1.0W @@ -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 diff --git a/util/scan/dvb-t/au-FraserCoast-Bundaberg b/util/scan/dvb-t/au-FraserCoast-Bundaberg new file mode 100644 index 0000000..562fc34 --- /dev/null +++ b/util/scan/dvb-t/au-FraserCoast-Bundaberg @@ -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 diff --git a/util/scan/dvb-t/au-Hervey_Bay-Ghost_Hill b/util/scan/dvb-t/au-Hervey_Bay-Ghost_Hill new file mode 100644 index 0000000..04dee51 --- /dev/null +++ b/util/scan/dvb-t/au-Hervey_Bay-Ghost_Hill @@ -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 diff --git a/util/scan/dvb-t/au-Perth b/util/scan/dvb-t/au-Perth index 1d6778d..48c046f 100644 --- a/util/scan/dvb-t/au-Perth +++ b/util/scan/dvb-t/au-Perth @@ -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 diff --git a/util/scan/dvb-t/au-SunshineCoast b/util/scan/dvb-t/au-SunshineCoast index 9fb17ef..c376678 100644 --- a/util/scan/dvb-t/au-SunshineCoast +++ b/util/scan/dvb-t/au-SunshineCoast @@ -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 diff --git a/util/scan/dvb-t/be-Brussels b/util/scan/dvb-t/be-Brussels index f81b83b..6998b48 100644 --- a/util/scan/dvb-t/be-Brussels +++ b/util/scan/dvb-t/be-Brussels @@ -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 diff --git a/util/scan/dvb-t/de-Baden-Wuerttemberg b/util/scan/dvb-t/de-Baden-Wuerttemberg index 3e5bec2..4dff1fd 100644 --- a/util/scan/dvb-t/de-Baden-Wuerttemberg +++ b/util/scan/dvb-t/de-Baden-Wuerttemberg @@ -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 diff --git a/util/scan/dvb-t/de-Bayern b/util/scan/dvb-t/de-Bayern index 50229fd..07ceeb0 100644 --- a/util/scan/dvb-t/de-Bayern +++ b/util/scan/dvb-t/de-Bayern @@ -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 diff --git a/util/scan/dvb-t/de-Berlin b/util/scan/dvb-t/de-Berlin index 86f875b..5b040c7 100644 --- a/util/scan/dvb-t/de-Berlin +++ b/util/scan/dvb-t/de-Berlin @@ -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 diff --git a/util/scan/dvb-t/de-Brandenburg b/util/scan/dvb-t/de-Brandenburg index 3949267..9fc6ebe 100644 --- a/util/scan/dvb-t/de-Brandenburg +++ b/util/scan/dvb-t/de-Brandenburg @@ -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 diff --git a/util/scan/dvb-t/de-Bremen b/util/scan/dvb-t/de-Bremen index 7540bbf..9a79038 100644 --- a/util/scan/dvb-t/de-Bremen +++ b/util/scan/dvb-t/de-Bremen @@ -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 diff --git a/util/scan/dvb-t/de-Hamburg b/util/scan/dvb-t/de-Hamburg index 4588748..f746043 100644 --- a/util/scan/dvb-t/de-Hamburg +++ b/util/scan/dvb-t/de-Hamburg @@ -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 diff --git a/util/scan/dvb-t/de-Hessen b/util/scan/dvb-t/de-Hessen index 7aa5d02..e4ad39c 100644 --- a/util/scan/dvb-t/de-Hessen +++ b/util/scan/dvb-t/de-Hessen @@ -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 diff --git a/util/scan/dvb-t/de-Mecklenburg-Vorpommern b/util/scan/dvb-t/de-Mecklenburg-Vorpommern index d1b0800..24e90ea 100644 --- a/util/scan/dvb-t/de-Mecklenburg-Vorpommern +++ b/util/scan/dvb-t/de-Mecklenburg-Vorpommern @@ -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 diff --git a/util/scan/dvb-t/de-Niedersachsen b/util/scan/dvb-t/de-Niedersachsen index 7066933..636c1ec 100644 --- a/util/scan/dvb-t/de-Niedersachsen +++ b/util/scan/dvb-t/de-Niedersachsen @@ -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 diff --git a/util/scan/dvb-t/de-Nordrhein-Westfalen b/util/scan/dvb-t/de-Nordrhein-Westfalen index 4541df7..ec768a3 100644 --- a/util/scan/dvb-t/de-Nordrhein-Westfalen +++ b/util/scan/dvb-t/de-Nordrhein-Westfalen @@ -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 diff --git a/util/scan/dvb-t/de-Rheinland-Pfalz b/util/scan/dvb-t/de-Rheinland-Pfalz index bf57d4d..a7d1d98 100644 --- a/util/scan/dvb-t/de-Rheinland-Pfalz +++ b/util/scan/dvb-t/de-Rheinland-Pfalz @@ -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 diff --git a/util/scan/dvb-t/de-Saarland b/util/scan/dvb-t/de-Saarland index 330075b..049ae71 100644 --- a/util/scan/dvb-t/de-Saarland +++ b/util/scan/dvb-t/de-Saarland @@ -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 diff --git a/util/scan/dvb-t/de-Sachsen b/util/scan/dvb-t/de-Sachsen index 42e01eb..b3fcffd 100644 --- a/util/scan/dvb-t/de-Sachsen +++ b/util/scan/dvb-t/de-Sachsen @@ -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 diff --git a/util/scan/dvb-t/de-Sachsen-Anhalt b/util/scan/dvb-t/de-Sachsen-Anhalt index ee59498..d8582f2 100644 --- a/util/scan/dvb-t/de-Sachsen-Anhalt +++ b/util/scan/dvb-t/de-Sachsen-Anhalt @@ -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 diff --git a/util/scan/dvb-t/de-Schleswig-Holstein b/util/scan/dvb-t/de-Schleswig-Holstein index 7b544d6..18728e1 100644 --- a/util/scan/dvb-t/de-Schleswig-Holstein +++ b/util/scan/dvb-t/de-Schleswig-Holstein @@ -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 diff --git a/util/scan/dvb-t/de-Thueringen b/util/scan/dvb-t/de-Thueringen index c159ea4..94bbf2c 100644 --- a/util/scan/dvb-t/de-Thueringen +++ b/util/scan/dvb-t/de-Thueringen @@ -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 diff --git a/util/scan/dvb-t/es-Albacete b/util/scan/dvb-t/es-Albacete index 419156b..26b1e92 100644 --- a/util/scan/dvb-t/es-Albacete +++ b/util/scan/dvb-t/es-Albacete @@ -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 diff --git a/util/scan/dvb-t/es-Alfabia b/util/scan/dvb-t/es-Alfabia index dc2956c..a7e1a5a 100644 --- a/util/scan/dvb-t/es-Alfabia +++ b/util/scan/dvb-t/es-Alfabia @@ -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 diff --git a/util/scan/dvb-t/es-Collserola b/util/scan/dvb-t/es-Collserola index bec8c8b..395bd16 100644 --- a/util/scan/dvb-t/es-Collserola +++ b/util/scan/dvb-t/es-Collserola @@ -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 diff --git a/util/scan/dvb-t/es-Santiago_de_Compostela b/util/scan/dvb-t/es-Santiago_de_Compostela new file mode 100644 index 0000000..cf63e64 --- /dev/null +++ b/util/scan/dvb-t/es-Santiago_de_Compostela @@ -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 diff --git a/util/scan/dvb-t/fr-Laval b/util/scan/dvb-t/fr-Laval index 61c0aa0..d97f04c 100644 --- a/util/scan/dvb-t/fr-Laval +++ b/util/scan/dvb-t/fr-Laval @@ -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 diff --git a/util/scan/dvb-t/se-Ornskoldsvik_As b/util/scan/dvb-t/se-Ornskoldsvik_As index e793d70..8fa6edb 100644 --- a/util/scan/dvb-t/se-Ornskoldsvik_As +++ b/util/scan/dvb-t/se-Ornskoldsvik_As @@ -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 diff --git a/util/scan/dvb-t/se-Skelleftea b/util/scan/dvb-t/se-Skelleftea index 818beda..d831d9e 100644 --- a/util/scan/dvb-t/se-Skelleftea +++ b/util/scan/dvb-t/se-Skelleftea @@ -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 diff --git a/util/scan/dvb-t/sk-BanskaBystrica b/util/scan/dvb-t/sk-BanskaBystrica index 48d3170..80d73a2 100644 --- a/util/scan/dvb-t/sk-BanskaBystrica +++ b/util/scan/dvb-t/sk-BanskaBystrica @@ -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 diff --git a/util/scan/dvb-t/sk-Bratislava b/util/scan/dvb-t/sk-Bratislava index 4924be4..57683a4 100644 --- a/util/scan/dvb-t/sk-Bratislava +++ b/util/scan/dvb-t/sk-Bratislava @@ -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 diff --git a/util/scan/dvb-t/sk-Kosice b/util/scan/dvb-t/sk-Kosice index 46f7a7e..9046f28 100644 --- a/util/scan/dvb-t/sk-Kosice +++ b/util/scan/dvb-t/sk-Kosice @@ -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 diff --git a/util/scan/dvb-t/uk-Redruth b/util/scan/dvb-t/uk-Redruth index e8285a5..8f15fa0 100644 --- a/util/scan/dvb-t/uk-Redruth +++ b/util/scan/dvb-t/uk-Redruth @@ -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 diff --git a/util/scan/dvb-t/uk-StocklandHill b/util/scan/dvb-t/uk-StocklandHill index c0d3c3e..f89a86d 100644 --- a/util/scan/dvb-t/uk-StocklandHill +++ b/util/scan/dvb-t/uk-StocklandHill @@ -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 diff --git a/util/scan/dvb-t/uk-Storeton b/util/scan/dvb-t/uk-Storeton index 1ca0841..8580aaa 100644 --- a/util/scan/dvb-t/uk-Storeton +++ b/util/scan/dvb-t/uk-Storeton @@ -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 diff --git a/util/scan/dvb-t/uk-WinterHill b/util/scan/dvb-t/uk-WinterHill index 3ea6abd..635f227 100644 --- a/util/scan/dvb-t/uk-WinterHill +++ b/util/scan/dvb-t/uk-WinterHill @@ -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 diff --git a/util/scan/scan.c b/util/scan/scan.c index 1b7a3e5..3058bdb 100644 --- a/util/scan/scan.c +++ b/util/scan/scan.c @@ -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; diff --git a/util/szap/Makefile b/util/szap/Makefile index b341c74..48d7149 100644 --- a/util/szap/Makefile +++ b/util/szap/Makefile @@ -1,6 +1,6 @@  # Makefile for linuxtv.org dvb-apps/util/szap -objects  = lnb.o +objects  = lnb.o util.o  binaries = azap  \             czap  \ diff --git a/util/szap/azap.c b/util/szap/azap.c index 5bd7f33..93addf8 100644 --- a/util/szap/azap.c +++ b/util/szap/azap.c @@ -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; diff --git a/util/szap/czap.c b/util/szap/czap.c index 469df56..e04ed4b 100644 --- a/util/szap/czap.c +++ b/util/szap/czap.c @@ -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); diff --git a/util/szap/szap.c b/util/szap/szap.c index ed1aa51..78da3a6 100644 --- a/util/szap/szap.c +++ b/util/szap/szap.c @@ -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; diff --git a/util/szap/tzap.c b/util/szap/tzap.c index cd87bfa..b24bc2c 100644 --- a/util/szap/tzap.c +++ b/util/szap/tzap.c @@ -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);  | 
