diff options
765 files changed, 7270 insertions, 0 deletions
@@ -0,0 +1,281 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 + @@ -0,0 +1,455 @@ +VDR Plugin 'graphlcd' Revision History +------------------------------------- + +2007-02-25: Version 0.1.5 +- added some missing includes +- do LCD initialisation in display thread instead of during plugin initialisation to fix some issues with direct port accesses (thanks to TomJoad from vdr-portal.de) + + +2007-02-04: Version 0.1.4 +- support APIVERSION introduced with vdr 1.3.47 +- test if ChannelNumber is 0 in cGraphLCDState::SetChannel +- Added french translations (thanks to Pierre Briec) +- use cPlugin::MainThreadHook method to do periodic querying of replay status. So, patching vdr is no longer needed. +- fixed volume handling for vdr 1.4.2 and up +- now use cFont::WrapText instead of local one +- got rid of global lcd and display objects, they are local variables of the plugin class now. +- display thread should be proper canceled now +- logonames.alias for VDR 1.3 and up is the default now +- increased lineheight in some bitmap fonts to look good with new WrapText function +- extra space between menu lines when lineheight is greater than totalheight +- replaced uint64 with uint64_t +- replaced unsigned long long with uint64_t + + +2006-01-15: Version 0.1.3 +- Don't replace newlines with spaces in text items any longer. +- Rewritten cGraphLCDDisplay::WrapText(). It is much faster now. +- Increased time to wait for display task to start (thanks to Andreas + Brachold). +- Explicitly set the current channel to prevent a crash if no channel logo was + set (thanks to Andreas Brachold). +- Added support for VDR version 1.3.38 and up (thanks to Andreas Brachold). +- Added logos for cable and terrestrial channels and modified some of the old + (thanks to Stefan Hußfeldt). + + +2005-09-17: Version 0.1.2 +- split off drivers to GraphLCD base package (libglcddrivers) +- split off graphics and font handling to GraphLCD base package + (libglcdgraphics) +- split off tools to GraphLCD base package +- adopted the plugin's code to use the new driver and graphics API +- removed low level driver settings from the plugin's setup page. They + are now located in the driver lirbrary's configuration file. +- display class: grouped current state values into some structures +- using a mutex for exclusive access on current state values +- moved current vdr state structures to new class cGraphLCDState based + on old cGraphLCDStatus class. +- completely rewritten logo list implementation +- further code revising +- added channel IDs for logonames.alias.1.3 for the DVB-T channels in Berlin + and probably other areas in Germany (thanks to Andreas Brachold) +- now compiles with gcc 2.95 and 3.x +- added missing #includes +- made the plugin more thread-safe by making the global state variable + a member of the display class and correcting the initialization order. +- added possibility to switch on backlight at user activity and switch it off + at user inactivity (thanks to Andreas Brachold). Can be enabled or disabled + in setup menu. +- added additional space between progress bar and logo on small LCDs (thanks + to Andreas Brachold). +- added loopmode display in mp3 replay mode (thanks to Wolfgang Fritz). +- replaced usleep with cCondWait::SleepMs() for vdr version 1.3.14 or greater +- adapted to changes in vdr 1.3.18 +- now using verdana fonts converted by genfont as default for large displays. +- moved plugin initialisation to cPluginGraphLCD::Initialize and added a wait + for the start of the display thread to cPluginGraphLCD::Start to don't miss + first channel switch (thanks to wofritz from vdrportal.de) +- added rumanian translations (thanks to Lucian Muresan) +- Added support for Freetype2 fonts based on the patch by Lucian Muresan. +-- the fonts used by the plugin are no longer specified through symbolic + links to the font files but in a config file named fonts.conf that is + located in the graphlcd config directory (where logonames.alias is) +-- the entries in the fonts.conf file are defined in a URL like way, a prefix + gives the type of the font and a absolute or relative path gives the + font file, plus the size in case of freetype2 +-- I provided several sample fonts.conf files as a replacement for the old + symbolic links +- Fixed length of timebar in case event lasts longer. +- Added a patch for VDR 1.3.29 and up that adds a new method Tick() to the + cStatus class. This method is called from vdr's main task every second. The + patch should apply to older versions too, maybe small changes are needed. +- Now querying the replay state in the cStatus::Tick() method if available. +- Now loading config file in cPluginGraphLCD::Initialize and not in + ProcessArgs. So it is possible to view the help page without specifying + config file and display. +- Rearranged includes to prevent an compiler error regardings the swap + function. +- Added a check for EIT scanner activity in cGraphLCDState::ChannelSwitch + function to prevent showing channel logos during replay. +- Added a check for file extension in replay type identification (thanks to + Andreas Brachold). +- Added channel logos for Radio Eins (thanks to Andreas Brachold). + + + +2004-09-26: Version 0.1.1 +- fixed vdr 1.2 service id compile error +- fixed t6963 driver: added range check in Set8Pixels, now all sizes should + work +- new driver: gu256x64-3900, should support other sizes too (thanks to + Ralf Müller) +- Added, replaced and removed some channel logos (thanks to Marco Birkholz) +- Now using a channels unique channel ID (without Source, VDR-1.3) or service + ID (VDR 1.2) instead of channel names to identify the channel logo. +-- During this I have renamed almost all channel logos so it is needed to + replace your old /<vdr config directory>/plugins/graphlcd/ completely. +-- There are now two logonames.alias files, one for vdr 1.2 and the other one + for vdr 1.3, you maybe have to recreate the link, p. e. + "ln -sf logonames.alias.1.3 logonames.alias" if you have a vdr 1.3 version. +- added finnish translations (thanks to Rolf Ahrenberg) +- fixed sed1520 driver: removed a unnecessary ReverseBits (thanks to Andreas + 'randy' Weinberger) +- modified gu140x32f driver +-- added possibility to choose type of wiring in setup menu (thanks to + Andreas Brachold) +- modified sed1330_2 driver +-- added support for several different types of wiring the lcd to the parallel + port, this is selectable in setup menu +-- added support for 6800 and 8080 mode for all wirings, selectable in setup + menu +- removed sed1130 driver and replaced it with sed1330_2 +- updated serdisplib support (thanks to Wolfgang Astleitner) +-- look in README.serdisplib for details +- fixed 100 percent CPU usage during volume changes if volume display is + disabled (thanks to Christoph Haubrich, Andreas Brachold) +- fixed cGraphLCDDisplay::WrapText (thanks to Lars Altenhain) +- fixed "special" ownership of logonames.alias files (thanks to Django from + vdrportal.de) + + + +2004-05-22: Version 0.1.0 +- modified hd61830 driver: +-- fixed bug in partly update +-- modified write method +- replaced sed1330 driver with roland praml's original patch +- modified sed1330 driver: +-- renamed control line names to reflect the controller's + specification a bit more +-- modified WriteCmd and WriteData +- modified sed1330_2 driver (thanks to Heinz Gressenberger and Roland Praml) +-- renamed control line names to reflect the controller's + specification a bit more +-- modified WriteCmd and WriteData +-- added possibility to change oscillator frequency through setup menu +-- added experimental support for 8080 operation mode (undef MODE6800 in + sed1330_2.c to test it) +-- commented out sleep calls, probably not needed any longer (please test this) +- added framebuffer device driver (thanks to Stephan Skrodzki) +-- README tells you how to use it +- added serdisplib driver (thanks to Wolfgang Astleitner) +-- README.serdisplib tells you how to use it +- fixed a bug in serdisplib driver that caused some flickering + (thanks to Wolfgang Astleitner) +- new GU256x64-372 driver (thanks to Andreas 'randy' Weinberger) +- fixed an error in T6963 driver's partial refresh when using auto mode +- new image driver that writes an image sequence in pbm format to /tmp +- made round rectangle type 4 looking rounder (thanks to Andreas + 'randy' Weinberger) +- text item display (programme information) now also contains title + and subtitle +- added up/down scrolling to text item display +-- fixed a bug with long texts in text items (thanks to Andreas Brachold) +- fixed cGraphLCDSetup::CopyFrom: copy of ShowMenu was wrong +- fixed cGraphLCDSetup::CopyFrom: missing ModifiyReplayString +- simplified the display of the replay string +-- more than two lines are possible if they fit on screen +- modified uSleep and nSleep when using wait method 0: now tests if + value is greater than 0 before sleeping at least one microsecond +- added scroller widget, a single scrolling text line +-- extended Text, Char and CharProp of cGraphLCDLib to support this +-- using it for program information (present title and subtitle) +-- scroll speed (time interval and pixel increment) configurable in + setup menu +- fixed DisplayProgramm for small LCD's, no overlapping program + information texts with logo or symbols (thanks to Andreas Brachold) +- fixed german translation of month march (thanks to Andreas Brachold) +- added new, replaced some and deleted some old channel logos + (thanks to Hannes Stein for collecting, sorting and renaming the logos + from Holly, Hulk, Lola, C. Born, himself and providing a new + logonames.alias) +- added a lot of splash screens for 140x32, 128x64 and 240x128 LCD's + (thanks to Hannes Stein) +- included DisplayReplay Patch from Andreas Brachold +-- scrolling ReplayMessage +-- display of a replay-dependent logo (selectable in setup menu, replay + type identification has to be enabled for this) +-- improved display of time bar and indexes according to display size +-- just showing minutes and seconds for replays shorter than one hour +-- simplified DisplayProgramm +- further code revising and cleaning: +-- using STL string instead of char array strings for font and graphlib + functions +- some compilation fixes (thanks to Tobias Grimm) +- the Makefiles now have a proper install target (thanks to Tobias Grimm) +- fixed some memory leaks in logolist.c and some of the drivers + (thanks to Andreas Brachold) +- showpic: now does a clean exit after "kill" (thanks to Andreas Brachold) +- showpic: new command line parameter -t (timing) to select low level wait + method (thanks to Christian Gmeiner) +- fixed possible overlapping of replay string and progress bar with logo + (thanks to Andreas Brachold) +- support for animated logos (thanks to Andreas Brachold) +-- extended plugin, convpic and showpic to support this +-- convpic now can read and write animations in tuxbox-aniplay-format +-- included some new animated replay logos +- now using usleep() instead of low level sleep functions from drivers/fct.h + in display.c (this reduces cpu load when gettimeofday wait method is used) +- new setup parameter "Identify replay type" that makes replay logos possible + without forced modifying of the replay's text +- revised README a little bit + + + +2004-03-06: Version 0.0.9 +- reworked driver interface: + - all drivers in one library + - static and dynamic linking of drivers possible (look for STATIC_DRIVERS + in Makefile) + - moved low level parallel port code to the new class cParallelPort + - cleaned up driver's code + - adopted plugin and showpic to this new interface +- gu140x32f updates (thanks to Andreas Brachold) + - brightness control through setup works now + - timing setup works now +- fixed cGraphLCDSetup::CopyFrom (thanks to Andreas Brachold) +- removed memory leak in GraphLCDSetup (thanks to Andreas Brachold) +- now using driver ID instead of driver name for driver creation + (thanks to Andreas Brachold) +- setup menu: only show entries that are relevant for current driver + (thanks to Andreas Brachold) +- added replay string modification, selectable in setup menu + (thanks to Andreas Brachold) +- showpic: now clearing LCD buffer before displaying image, fixes error + when displaying image sequences (thanks to Andreas Brachold) +- showpic: no double GraphLCDSetup any longer, wait settings now used + (thanks to Andreas Brachold for reporting this one) +- fixed segfault when font is not correctly loaded (Thanks to Andreas + Brachold) +- code revising and cleaning (not completed): + - extracted setup menu code from graphlcd.c to menu.c/menu.h + - extracted status monitor code from graphlcd.c to status.c/.h + - extracted logo code from graphlib.c/.h to logo.c/.h and + logolist.c/.h and using list and vector containers from STL for + storing the data + - showpic and plugin now share the same logo source code + - general: using new/delete instead of malloc/free (not completely yet) + - using STL's vector and string for storing menu entries + - general: using STL string instead of char array strings + - sleep functions from fct.c/.h and other are now part of driver library + (no double files) + - string functions from fct.c/.h are now in strfct.c/.h +- added new wait method using gettimeofday for kernel 2.6 users (thanks to + Henning 'fawkes') +- new default wait method: nanosleep_rr (same as in 0.0.7) +- updated ks0108 and sed1520 driver (thanks to Andreas Weinberger) + - drawing errors fixed + - code cleanups, adopted to new coding style + - ks0108: support for displays greater than 128x64 +- removed double ReverseBits from ks0108, sed1330 and sed1520 drivers +- new alternative sed1330 driver, supports more sizes, choose with "sed1330_2" + (modified original driver, thanks by to Heinz Gressenberger) + - please test it, maybe we can join these two +- improved volume display (thanks to Andreas Weinberger) + - now disappears correctly after approx. one second + - if muted, a symbol will be shown in symbol area and volume bar + - slightly modified display, bar has variable height now +- added RoundRectangle Method to graphic library + - both colors are possible now + - adopted display code to use this new function +- new logos for medium displays (thanks to Hannsens) +- fixed displaying wrong channel, logo, programme when a recording on primary + device starts (thanks to burki for reporting this one) + + + +2004-02-25: Version 0.0.8 +- added support for parport device +- added support for VDR version 1.3 (tested with 1.3.4) +- added display of free devices, selectable in setup menu + (thanks to Thomas Keil) +- inverted and round color buttons +- driver reset after certain setup changes +- choose the size of logos in setup (no, auto, medium, large) +- new 'compressed' mode for symbols (show only enabled symbols) +- Volume controls +- use of iopl() instead ioperm() (allows ports > 0x3ff) +- delayed update of the display in menu +- removed useless 'Good-Bye picture'. + You have to call showpic in shutdown script instead. +- display name of recording without subdirectories +- new SED1520 driver (thanks to Andreas 'randy' Weinberger). +- alias list for program names (logonames.alias) +- new SED1330 driver (thanks to Roland Praml). +- increased performance by using Set8Pixels() instead of SetPixel() + in Char() and CharProp() +- increased speed in menus (you might apply an included patch against + vdr to improve the speed even more...) +- added a cache for logos to reduce harddisk operations. +- a value of 0 for Refresh disables the complete refresh of the LCD +- added a setup option to disable the output to the LCD completely +- fixed bug displaying long SVDRP Messages (that couldn't be splitted + to more lines of text, because they didn't have any spaces) +- fixed bug with Rec icon. If multiple recordings were active and + one recordings has stopped, the Rec icon has been cleared although + the others recordings were still active. (thanks to Steffen Schoewitz + for reporting and fixing it) +- select alternative wiring for T6963 (WIRING_WINDOWS) + with setup parameter (plugin) and commandline parameter (showpic) +- improved timing of T6963 driver (thanks to Good) +- further improved timing of T6963 driver +- T6963 status check selectable in setup menu +- added auto mode support for T6963, selectable in setup menu +- added font select 8x8 support for T6963, selectable in setup menu + (thanks to Andreas 'randy' Weinberger) +- changed way of T6963 control line setting (thanks to Andreas 'randy' + Weinberger) +- changed clipping method (thanks to Andreas Brachold) +- new Noritake GU140x32f driver (thanks to Andreas Brachold). +- new classification of LCD sizes: + tiny: 0..48 + small: 49..61 + medium: 62..127 + large: 128.. +- more logos (contributed by Carsten Born and Andreas Brachold) + +- plugin development and hosting is taken over by Andreas Regel + + + +2003-06-30: Version 0.0.7 +- the file format of the logos and the pictures have been replaced + with a new format: *.GLCD +- 'Good-Bye picture' +- added some tools: + convpic: a tool to convert *.BMP + *.TIFF images to *.GLCD format. + (TIFF: uncompressed, RGB-encoded, 2-color + BMP : uncompressed, RGB-encoded, 2-color, WindowsBMP format) + showpic: a tool to show an image on the LCD. + The image must be in *.GLCD format. (use convpic to convert) + crtfont: a tool to create fonts. + (see appropriate README files for more info) +- included 'sources' for logos and fonts +- fixed problem, if logo was bigger than LCD size. +- macros in one line +- added external triggered symbols +- setup parameters are explained in the README +- the usage of different fonts are explained in the README +- now Set8Pixels() is used in Char() and CharProp() + (increases performance) +- replaced strncpy with own fct strncopy. + + + +2003-06-05: Version 0.0.6 +- fixed segfault on exit of mp3 plugin. +- added a timebar to show the progress + of the current program. +- added color buttons +- possibility to disable Date/Time bar in menus +- don't switch back to replay screen when the menu is + active and the next mp3 is going to be played. +- update values of setup entries + (for this, a patch for vdr-1.2.0 is required. + Patch vdr with vdr-1.2.0-setup_menu_patch.diff in patches subdirectory. + Attention: this patch has NOT been tested with other plugins!) +- fixed cursor position when a setup item has been changed. +- better calculation of Tabs +- use symlinks for fonts. This allows to replace the fonts easily: + small displays ( vertical size < 64 ): + f_s_l.fnt : large font + f_s_n.fnt : normal font + f_s_s.fnt : small font + f_s_sym.fnt: symbols + medium displays ( vertical size 64..127 ): + f_m_l.fnt : large font + f_m_n.fnt : normal font + f_m_s.fnt : small font + f_m_sym.fnt: symbols + large displays ( vertical size >= 128 ): + f_l_l.fnt : large font + f_l_n.fnt : normal font + f_l_s.fnt : small font + f_l_sym.fnt: symbols +- alternative font for 128x64 (ln -s f8n_alt.fnt f_m_n.fnt) + + + +2003-05-23: Version 0.0.5 +- fixed display if second card does epg scan + (thanks to Andreas 'randy' Weinberger) +- fixed position of the symbols on small lcds + (thanks to Andreas 'randy' Weinberger) +- possibility to en-/disable display of menus per setup +- fixed problem in the T6963 driver when the LCDs horizontal size + was not a multiple of 6 + (thanks to Andreas 'powARman' Regel) +- alternative wiring for T6963 (used by some Windows programs) + If You have this wiring, You must compile with: + eg: GRAPHLCD_DRIVER=T6963 GRAPHLCD_WIRING=WINDOWS make plugins + (thanks to Andreas 'powARman' Regel) +- allow to enter the port in hex (eg: vdr -P"graphlcd -p 0x278" ) + (thanks to Sascha Volkenandt) +- creates graphlcd.man in .../PLUGINS/man directory +- small changes for vdr-1.1.32 +- show different Recording Symbols to show which card is recording + currently. +- added output of Messages +- added output of Summaries + + + +2003-05-08: Version 0.0.4 +- display of menus (requires vdr >= 1.1.30) +- 'round' edges + + + +2003-04-25: Version 0.0.3 +- new KS0108 driver (thanks to Andreas 'randy' Weinberger). + You have to specify the driver during compile: + eg: make plugins GRAPHLCD_DRIVER=KS0108 +- uses different fonts & logos for smaller displays +- changed layout for 128x64 displays +- changed format of font files (=> new crtfont-0.1.2) +- removed swab(). SwabByte() uses table instead of calculating + + + +2003-04-16: Version 0.0.2 +- new T6963 driver (thanks to Andreas 'powARman' Regel). + You have to specify the driver during compile: + eg: GRAPHLCD_DRIVER=T6963 make plugins +- support for smaller displays. +- now it's customizable in the setup menu, what parts should + be displayed. The currently available parts are: + - Date/Time bar + - Channel bar + - Logo + - Symbols + - Program information +- fonts with special characters like french accents. +- port + size of LCD are customizable. + (allocate LCD buffer dynamically) +- 2 lines for long titles (in Recording mode) +- Clear OSDProgramme, if no EPG data is available. +- refresh display, when title has changed. +- do not abort, if logo file could not be read successfully. + + + +2003-01-08: Version 0.0.1 + +- Initial revision. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..60bc621 --- /dev/null +++ b/Makefile @@ -0,0 +1,105 @@ +# +# Makefile for a Video Disk Recorder plugin +# +# $Id$ + +# The official name of this plugin. +# This name will be used in the '-P...' option of VDR to load the plugin. +# By default the main source file also carries this name. +# +PLUGIN = graphlcd + +### The version number of this plugin (taken from the main source file): + +VERSION = $(shell grep 'static const char \*VERSION *=' plugin.c | awk '{ print $$6 }' | sed -e 's/[";]//g') + +### The C++ compiler and options: + +CXX ?= g++ +CXXFLAGS ?= -g -Wall -Woverloaded-virtual + +### The directory environment: + +DVBDIR = ../../../../DVB +VDRDIR = ../../.. +LIBDIR = ../../lib +TMPDIR = /tmp + +export INSTALLPREFIX = /usr/local +export INSTALLDOCDIR = $(INSTALLPREFIX)/share/doc + +### Allow user defined options to overwrite defaults: + +-include $(VDRDIR)/Make.config + +### The version number of VDR (taken from VDR's "config.h"): + +VDRVERSION = $(shell grep 'define VDRVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g') +APIVERSION = $(shell grep 'define APIVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g') +ifeq ($(strip $(APIVERSION)),) + APIVERSION = $(VDRVERSION) +endif + + +### The name of the distribution archive: + +ARCHIVE = $(PLUGIN)-$(VERSION) +PACKAGE = vdr-$(ARCHIVE) + + +### Includes and Defines (add further entries here): + +INCLUDES += -I$(VDRDIR)/include -I$(DVBDIR)/include -I$(INSTALLPREFIX)/include + +DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"' +DEFINES += -D_GNU_SOURCE + + +### The object files (add further files here): + +OBJS = display.o i18n.o layout.o logo.o logolist.o menu.o plugin.o setup.o state.o strfct.o widgets.o + + +### Implicit rules: + +%.o: %.c + $(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $< + + +# Dependencies: + +MAKEDEP = g++ -MM -MG +DEPFILE = .dependencies +$(DEPFILE): Makefile + @$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@ + +-include $(DEPFILE) + + +### Targets: + +all: libvdr-$(PLUGIN).so +.PHONY: all + + +libvdr-$(PLUGIN).so: $(OBJS) + $(CXX) $(CXXFLAGS) -L$(INSTALLPREFIX)/lib -shared $(OBJS) -lglcddrivers -lglcdgraphics -lstdc++ -o $@ + @cp $@ $(LIBDIR)/$@.$(APIVERSION) + +dist: clean + @-rm -rf $(TMPDIR)/$(ARCHIVE) + @mkdir $(TMPDIR)/$(ARCHIVE) + @cp -a * $(TMPDIR)/$(ARCHIVE) + @tar czf $(PACKAGE).tgz --exclude .svn --exclude *.cbp --exclude *.layout -C $(TMPDIR) $(ARCHIVE) + @-rm -rf $(TMPDIR)/$(ARCHIVE) + @echo Distribution package created as $(PACKAGE).tgz + +clean: + @-rm -f *.o $(DEPFILE) *.so *.tgz core* *~ + +install: all + @install -d $(INSTALLDOCDIR)/$(PLUGIN) + @install -m 644 README $(INSTALLDOCDIR)/$(PLUGIN) + +uninstall: + @rm -rf $(INSTALLDOCDIR)/$(PLUGIN) @@ -0,0 +1,231 @@ +This is a "plugin" for the Video Disk Recorder (VDR). + +Written by Carsten Siebholz (c.siebholz AT t-online.de> +From 0.0.8 on maintained by Andreas 'powARman' Regel (andreas.regel AT powarman.de) + +Project's homepage: http://graphlcd.berlios.de/ + before 0.0.8: http://c.siebholz.bei.t-online.de/ + +See the file COPYING for license information. + + +Description: +------------ +graphlcd is a plugin for the Video Disc Recorder and shows information +about the current state of VDR on displays supported by the GraphLCD +driver library. + + +Installation and Configuration: +------------------------------- +1. Install and configure the GraphLCD base package. + +2. Unpack the tarball to .../VDR/PLUGINS/src directory + +3. Compile the plugin + + make plugins (from VDR's source directory) + or + make all (from the plugin's source directory) + +4. Copy the 'graphlcd' subdirecory to <VDRconfigDir>/plugins/ + Afterwards, the structure should look like this: + + VDR config directory (eg: /video) + | + +- plugins + | | + | +- graphlcd (contains logonames.alias) + | | | + | | +-- fonts (contains *.fnt files) + | | | + . . +-- logos (contains *.glcd files) + . . + +5. If you are using VDR 1.3 or higher, you will have to recreate the + link to logonames.alias: + + ln -sf logonames.alias.13 logonames.alias + +6. Start VDR with the plugin. + You have to specify your the path and name of the driver library's + configuration file and the name of your display in the config file + on the command line. + Possible options are: + -c CONFIG, --config=CONFIG file name and path of the configuration file + -d DISPLAY, --display=DISPLAY name of the display + + -c: Sets the file path and name of the driver library's config file. + If this parameter is not given the default '/etc/graphlcd.conf' + will be used. + -d: Sets the name of the section in the config file that specifies + the display used for the plugin's output. If this parameter is + not given, the first section will be used. + + Examples: + vdr -P 'graphlcd -c /video/graphlcd.conf -d ks0108' + vdr -P 'graphlcd -c /etc/graphlcd.conf' + + +Channel Logos +------------- +To be able to see logos for the channels, you can create a *.glcd file +in the 'logos' directory. This file can be created with the convpic +tool from the GraphLCD base package. The size of the image must be +64x48 (for the *_l.glcd files) or 40x29 (for the *_m.glcd files). +Normally, the plugin looks for a file with the name +<ChannelID>_<Size>.glcd, where <ChannelID> is the ID of the channel +like used by VDR itself and <Size> is a character depending of the +size of the logo. (l for large size logos and m for medium size logos). +To keep an overview over the logos it instead would be better to name +them <ChannelName>_<Size>.glcd and use the file logonames.alias for the +relation between channel ID and channel name. + +example: ZDF_l.glcd + + +Setup Parameters: +----------------- +Plugin active: + This is something like a 'main switch' for the plugin. If it's set to NO, + the output to the LCD will be suspended. + (Possible values: 'no', 'yes') + +Show Date/Time: + Enables/disables the date/time bar. + (Possible values: 'no', 'yes', 'not in menu') + +Show Channel: + Enables/disables the channel bar. + (Possible values: 'no', 'yes') + +Show Logo: + Enables/disables the channel logo. + (Possible values: 'no', 'auto', 'medium', 'large') + +Show Symbols: + Enables/disables the symbols for teletext, dolby digital, 2-channel audio, + encryption and recordings. + (Possible values: 'no', 'yes', 'compressed') + +Show ET Symbols: + Enables/disables external triggered symbols. + graphlcd is able to show some symbols, that can be switched on and off by + external progams (like vbox). Therefore it reads a file + (/tmp/graphlcd_symbols). The format of this file is very simple: It might + have one or more lines. Each line triggers one symbol. The format of each + line is [ASCII-Char][0|1]. + example: + V1 + X0 + This example enables the symbol 'V' and disables the symbol 'X'. To get an + idea, why the symbols are represented by those ASCII-Characters, look into + sym*.fon and sym*.bmp (in ./tools/crtfont/fonts/ directory): You will see, + that the symbols are nothing more than a special font and each symbol + stands for a character. + (Possible values: 'no', 'yes') + +Show Program: + Enables/disables the time, title and subtitle of the current program. + (Possible values: 'no', 'yes') + +Show Timebar: + Enables/disables the timebar (under the start and end time of the current + program). + (Possible values: 'no', 'yes') + +Show Menu: + Enables/disables the menu. + (Possible values: 'no', 'yes') + +Show Messages: + Enables/disables displaying messages. + (Possible values: 'no', 'yes') + +Show Color Buttons: + Enables/disables the 4 colered buttons. + (Possible values: 'no', 'yes') + +Show Volume: + Enables/disables the volume bar. + (Possible values: 'no', 'yes') + +Show free cards: + enables/disables the display of the free cards as empty rectangles with one + icon for each card. + (Possible values: 'no', 'yes') + +Identify replay type: + Based on the replay's name the plugins tries to identify the type of replay, + e.g. if it is a VDR, DVD or MP3 replay. + (Possible values: 'no', 'yes') + +Modify replay string: + Enables/disables replay string modification (Identify replay type has to + be enabled for this). Based on the replay type graphlcd tries to 'improve' + the replay name string, e.g. extracts and capitalizes DVD titles. + (Possible values: 'no', 'yes') + +Show Logo on Replay: + Enables/disables the replay-dependent logo (Identify replay type has to + be enabled for this). + (Possible values: 'no', 'auto', 'medium', 'large') + +Scroll text lines: + Enables/disables the scrolling of text lines if they don't fit on screen. + (used by program information and replay text) + (Possible values: 'never', 'once', 'always') + +Scroll speed: + Sets the scroll speed in pixels per update. + (Possible values: 1 <= x <= 10) + +Scroll time interval: + Sets the time between scroller updates in milliseconds. + (Possible values: 100 <= x <= 2000) + + +Changing Fonts: +--------------- +It's very easy to change the fonts that are used by graphlcd. +The plugin uses 4 fonts: +- a large font, that is used for + the title of the current program and for + the title of the recording (during replay). +- a normal font, that is used for + the date/time bar, + the channel bar, + the starttime, endtime and the subtitle of the current program, + the times in the replay screen, + the title and the items in the menus, + the popup-messages and for + the text items like the content of a recording. +- a small font, that is only used for the text of the 4 colored buttons. +- a symbol font, that contains the symbols. + +Because smaller displays should use smaller fonts, the displays will be +classified in 3 categories. Each category should have all 4 fonts. +The name of the font files depend on the category and on the font: + small displays ( vertical size < 64 ): + f_s_l.fnt : large font + f_s_n.fnt : normal font + f_s_s.fnt : small font + f_s_sym.fnt: symbols + medium displays ( vertical size 64..127 ): + f_m_l.fnt : large font + f_m_n.fnt : normal font + f_m_s.fnt : small font + f_m_sym.fnt: symbols + large displays ( vertical size >= 128 ): + f_l_l.fnt : large font + f_l_n.fnt : normal font + f_l_s.fnt : small font + f_l_sym.fnt: symbols + +To change the fonts you only have to change the related symbolic link to +another font file. +If you use another already existing font or if you want to create a new +one by yourself does not matter. If you want to create a new one or if +you want to modify an existing font, look into /tools/crtfont in the +GraphLCD base package and read the README. + diff --git a/compat.h b/compat.h new file mode 100644 index 0000000..4041ed4 --- /dev/null +++ b/compat.h @@ -0,0 +1,18 @@ +#ifndef _GRAPHLCD_COMPAT_H_ +#define _GRAPHLCD_COMPAT_H_ + + +#if VDRVERSNUM < 10318 +#define TimeMs time_ms +#else +#define TimeMs cTimeMs::Now +#endif + +#if VDRVERSNUM >= 10318 +#define Apid1() Apid(0) +#define Apid2() Apid(1) +#define Dpid1() Dpid(0) +#define Dpid2() Dpid(1) +#endif + +#endif diff --git a/display.c b/display.c new file mode 100644 index 0000000..f82d317 --- /dev/null +++ b/display.c @@ -0,0 +1,1953 @@ +/* + * GraphLCD plugin for the Video Disk Recorder + * + * display.c - display class + * + * This file is released under the GNU General Public License. Refer + * to the COPYING file distributed with this package. + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online.de> + * (c) 2004 Andreas Regel <andreas.regel AT powarman.de> + */ + +#include <ctype.h> +#include <unistd.h> +#include <sys/io.h> +#include <sys/time.h> + +#include <algorithm> + +#include <glcddrivers/config.h> +#include <glcddrivers/drivers.h> + +#include "display.h" +#include "global.h" +#include "i18n.h" +#include "setup.h" +#include "state.h" +#include "strfct.h" + +#include <vdr/tools.h> +#include <vdr/menu.h> + +#include "compat.h" + +#define MAXLINES_MSG 4 +#define MAXLINES_TEXT 16 +#define FILENAME_EXTERNAL_TRIGGERED_SYMBOLS "/tmp/graphlcd_symbols" + +// tiny: 0..48 +#define MINY_T 0 +#define MAXY_T 48 + +// small: 49..61 +#define MINY_S (MAXY_T+1) +#define MAXY_S 61 + +// medium: 62..127 +#define MINY_M (MAXY_S+1) +#define MAXY_M 127 + +// large: 128.. +#define MINY_L (MAXY_M+1) +#define MAXY_L 9999 + + + +int FRAME_SPACE_X; +int FRAME_SPACE_XB; +int FRAME_SPACE_Y; +int FRAME_SPACE_YB; +int TEXT_OFFSET_X; +int TEXT_OFFSET_Y_TIME; +int TEXT_OFFSET_Y_CHANNEL; +int TEXT_OFFSET_Y_TITLE; +int SYMBOL_SPACE; +int TIMEBAR_HEIGHT; + + + +cGraphLCDDisplay::cGraphLCDDisplay() +: cThread("glcd_display"), + update(false), + active(false), + mLcd(NULL), + bitmap(NULL), + GraphLCDState(NULL) +{ + cfgDir = ""; + fontDir = ""; + logoDir = ""; + + CurrTime = time(NULL); + LastTime = CurrTime-58; + CurrTimeval.tv_sec = 0; + CurrTimeval.tv_usec = 0; + timerclear(&UpdateAt); + LastTimeCheckSym = CurrTime; + + State = Normal; + LastState = Normal; + + menuTop = 0; + menuCount = 0; + tabCount = 0; + for (int i = 0; i < kMaxTabCount; i++) + tab[i] = 0; + tabMax[0] = 0; + tabMax[1] = 66; + tabMax[2] = 100; + tabMax[3] = 100; + tabMax[4] = 100; + tabMax[5] = 100; + tabMax[6] = 100; + tabMax[7] = 100; + tabMax[8] = 100; + tabMax[9] = 100; + + showVolume = false; + + logo = NULL; + logoList = NULL; + + strcpy (szETSymbols, ""); + + nCurrentBrightness = -1; + LastTimeBrightness = 0; + bBrightnessActive = true; +} + +cGraphLCDDisplay::~cGraphLCDDisplay() +{ + active = false; + Cancel(3); + + delete GraphLCDState; + delete bitmap; + delete logoList; +} + +int cGraphLCDDisplay::Init(GLCD::cDriver * Lcd, const char * CfgDir) +{ + if (!Lcd || !CfgDir) + return 2; + mLcd = Lcd; + cfgDir = CfgDir; + fontDir = cfgDir + "/fonts"; + logoDir = cfgDir + "/logos"; + + logoList = new cGraphLCDLogoList(logoDir.c_str(), cfgDir.c_str()); + if (!logoList) + { + esyslog("graphlcd plugin: ERROR out of memory\n"); + return 1; + } + + std::string fontListFile = cfgDir + "/fonts.conf"; + if (fontList.Load(fontListFile) == false) + { + esyslog("graphlcd plugin: ERROR: Could not load %s!\n", fontListFile.c_str()); + return 1; + } + + Start(); + return 0; +} + +void cGraphLCDDisplay::Tick(void) +{ + if (GraphLCDState) + GraphLCDState->Tick(); +} + +void cGraphLCDDisplay::Action(void) +{ + if (mLcd->Init() != 0) + { + esyslog("graphlcd plugin: ERROR: Failed initializing display\n"); + return; + } + + bitmap = new GLCD::cBitmap(mLcd->Width(), mLcd->Height()); + if (!bitmap) + { + esyslog("graphlcd plugin: ERROR creating drawing bitmap\n"); + return; + } + + largeFont = fontList.GetFont("Large Font"); + if (largeFont == NULL) + { + esyslog("graphlcd plugin: ERROR: No \"Large Font\" specified!\n"); + return; + } + normalFont = fontList.GetFont("Normal Font"); + if (normalFont == NULL) + { + esyslog("graphlcd plugin: ERROR: No \"Normal Font\" specified!\n"); + return; + } + smallFont = fontList.GetFont("Small Font"); + if (smallFont == NULL) + { + esyslog("graphlcd plugin: ERROR: No \"Small Font\" specified!\n"); + return; + } + symbols = fontList.GetFont("Symbol Font"); + if (symbols == NULL) + { + esyslog("graphlcd plugin: ERROR: No \"Symbol Font\" specified!\n"); + return; + } + + if (bitmap->Width() < 240) + { + FRAME_SPACE_X = 0; + FRAME_SPACE_XB = 1; + TEXT_OFFSET_X = 2; + } + else + { + FRAME_SPACE_X = 2; + FRAME_SPACE_XB = 2; + TEXT_OFFSET_X = 4; + } + + if (bitmap->Height() <= MAXY_T) + { + // very small display + FRAME_SPACE_Y = 0; + FRAME_SPACE_YB = 1; + TEXT_OFFSET_Y_TIME = 1; + TEXT_OFFSET_Y_CHANNEL = 1; + TEXT_OFFSET_Y_TITLE = 1; + SYMBOL_SPACE = 1; + TIMEBAR_HEIGHT = 3; + } + else if (bitmap->Height() <= MAXY_S) + { + // small display + FRAME_SPACE_Y = 0; + FRAME_SPACE_YB = 1; + TEXT_OFFSET_Y_TIME = 1; + TEXT_OFFSET_Y_CHANNEL = 3; + TEXT_OFFSET_Y_TITLE = 1; + SYMBOL_SPACE = 1; + TIMEBAR_HEIGHT = 3; + } + else if (bitmap->Height() <= MAXY_M) + { + // medium display + FRAME_SPACE_Y = 0; + FRAME_SPACE_YB = 1; + TEXT_OFFSET_Y_TIME = 1; + TEXT_OFFSET_Y_CHANNEL = 3; + TEXT_OFFSET_Y_TITLE = 3; + SYMBOL_SPACE = 1; + TIMEBAR_HEIGHT = 3; + } + else + { + // large display + FRAME_SPACE_Y = 2; + FRAME_SPACE_YB = 2; + TEXT_OFFSET_Y_TIME = 2; + TEXT_OFFSET_Y_CHANNEL = 5; + TEXT_OFFSET_Y_TITLE = 5; + SYMBOL_SPACE = 2; + TIMEBAR_HEIGHT = 5; + } + + GraphLCDState = new cGraphLCDState(this); + if (!GraphLCDState) + return; + + mLcd->Refresh(true); + active = true; + update = true; + while (active) + { + if (GraphLCDSetup.PluginActive) + { + CurrTime = time(NULL); + + if (timerisset(&UpdateAt)) + { + // timed Update enabled + if (gettimeofday(&CurrTimeval, NULL) == 0) + { + // get current time + if (CurrTimeval.tv_sec > UpdateAt.tv_sec) + { + timerclear(&UpdateAt); + update = true; + } + else if (CurrTimeval.tv_sec == UpdateAt.tv_sec && + CurrTimeval.tv_usec > UpdateAt.tv_usec) + { + timerclear(&UpdateAt); + update = true; + } + } + } + if (GraphLCDSetup.ShowVolume && !update && showVolume) + { + if (TimeMs() - GraphLCDState->GetVolumeState().lastChange > 2000) + { + update = true; + showVolume = false; + } + } + + SetBrightness(); + + switch (State) + { + case Normal: + // check and update external triggered symbols + if (GraphLCDSetup.ShowETSymbols) + { + if (CurrTime != LastTimeCheckSym) + { + update |= CheckAndUpdateSymbols(); + LastTimeCheckSym = CurrTime; + } + } + + { + std::vector<cScroller>::iterator it; + for (it = scroller.begin(); it != scroller.end(); it++) + { + if (it->NeedsUpdate()) + update = true; + } + } + + // update Display if animated Logo is present, and an update is necessary + if (!update && IsLogoActive() && logo->Count() > 1 && + (TimeMs() - logo->LastChange() >= logo->Delay())) + { + update = true; + } + + // update Display every minute or due to an update + if (CurrTime/60 != LastTime/60 || update) + { + timerclear(&UpdateAt); + update = false; + + bitmap->Clear(); + DisplayTime(); + DisplayLogo(); + DisplayChannel(); + DisplaySymbols(); + DisplayProgramme(); + DisplayVolume(); + DisplayMessage(); + mLcd->SetScreen(bitmap->Data(), bitmap->Width(), bitmap->Height(), bitmap->LineSize()); + mLcd->Refresh(false); + LastTime = CurrTime; + } + else + { +#if VDRVERSNUM < 10314 + usleep(100000); +#else + cCondWait::SleepMs(100); +#endif + } + break; + + case Replay: + { + tReplayState replay = GraphLCDState->GetReplayState(); + if (replay.control) + { + { + update = false; + std::vector<cScroller>::iterator it; + for (it = scroller.begin(); it != scroller.end(); it++) + { + if (it->NeedsUpdate()) + update = true; + } + } + // update Display if animated Logo is present, and an update is necessary + if (!update && IsLogoActive() && logo->Count() > 1 && + TimeMs() - logo->LastChange() >= logo->Delay()) + { + update = true; + } + + // update Display every second or due to an update + if (CurrTime != LastTime || update) + { + // but only, if something has changed + if (replay.total / FRAMESPERSEC != replay.totalLast / FRAMESPERSEC || + replay.current / FRAMESPERSEC != replay.currentLast / FRAMESPERSEC || + CurrTime/60 != LastTime/60 || + update) + { + timerclear(&UpdateAt); + update = false; + bitmap->Clear(); + DisplayTime(); + DisplayLogo(); + DisplayReplay(replay); + //DisplaySymbols(); + DisplayVolume(); + DisplayMessage(); + mLcd->SetScreen(bitmap->Data(), bitmap->Width(), bitmap->Height(), bitmap->LineSize()); + mLcd->Refresh(false); + LastTime = CurrTime; + } + else + { +#if VDRVERSNUM < 10314 + usleep(100000); +#else + cCondWait::SleepMs(100); +#endif + } + } + else + { +#if VDRVERSNUM < 10314 + usleep(100000); +#else + cCondWait::SleepMs(100); +#endif + } + } + else + { + State = Normal; + Update(); + } + } + break; + + case Menu: + if (GraphLCDSetup.ShowMenu) + { + // update Display every minute or due to an update + if (CurrTime/60 != LastTime/60 || update) + { + timerclear(&UpdateAt); + update = false; + + bitmap->Clear(); + DisplayTime(); + DisplayMenu(); + DisplayTextItem(); + DisplayVolume(); + DisplayMessage(); + DisplayColorButtons(); + mLcd->SetScreen(bitmap->Data(), bitmap->Width(), bitmap->Height(), bitmap->LineSize()); + mLcd->Refresh(false); + LastTime = CurrTime; + } + else + { +#if VDRVERSNUM < 10314 + usleep(100000); +#else + cCondWait::SleepMs(100); +#endif + } + } + else + { + //GraphLCDState.OsdClear(); + + State = LastState; + // activate delayed Update +#if VDRVERSNUM < 10314 + usleep(100000); +#else + cCondWait::SleepMs(100); +#endif + } + break; + + default: + break; + } + } + else + { +#if VDRVERSNUM < 10314 + usleep(100000); +#else + cCondWait::SleepMs(100); +#endif + } + } +} + +void cGraphLCDDisplay::SetChannel(int ChannelNumber) +{ + if (ChannelNumber == 0) + return; + + mutex.Lock(); + cChannel * ch = Channels.GetByNumber(ChannelNumber); + if (GraphLCDSetup.ShowLogo) + { + ePicType picType; + + switch (GraphLCDSetup.ShowLogo) + { + case 1: // auto + if (bitmap->Height() <= MAXY_M) + picType = ptLogoMedium; + else + picType = ptLogoLarge; + break; + case 2: // medium + picType = ptLogoMedium; + break; + case 3: // large + picType = ptLogoLarge; + break; + default: // should not happen at the moment !! + picType = ptLogoSmall; + break; + } +#if VDRVERSNUM >= 10300 + char strTmp[64]; + strcpy(strTmp, (const char *) ch->GetChannelID().ToString()); + char * strId = strstr(strTmp, "-") + 1; + logo = logoList->GetLogo(strId, picType); +#else + char strId[16]; + sprintf(strId, "%d", ch->Sid()); + logo = logoList->GetLogo(strId, picType); +#endif + if (logo) + logo->First(TimeMs()); + } + else + { + logo = NULL; + } + bBrightnessActive = true; + Update(); + mutex.Unlock(); +} + +void cGraphLCDDisplay::SetClear() +{ + mutex.Lock(); + + textItemLines.clear(); + textItemTop = 0; + tabCount = 0; + for (int i = 0; i < kMaxTabCount; i++) + tab[i] = 0; + + mutex.Unlock(); + + if (State == Menu) + { + State = LastState; + // activate delayed Update + UpdateIn(100000); + } + else + { + Update(); + } +} + +void cGraphLCDDisplay::SetOsdTitle() +{ + UpdateIn(0); // stop delayed Update + mutex.Lock(); + if (State != Menu) + { + menuTop = 0; + LastState = State; + State = Menu; + } + mutex.Unlock(); + // activate delayed Update + UpdateIn(100000); +} + +void cGraphLCDDisplay::SetOsdItem(const char * Text) +{ + int iAT, t; + std::string str; + std::string::size_type pos1, pos2; + + mutex.Lock(); + + UpdateIn(0); // stop delayed Update + str = Text; + pos1 = 0; + pos2 = str.find('\t'); + iAT = 0; + while (pos1 < str.length() && pos2 != std::string::npos) + { + iAT++; + t = std::min(normalFont->Width(str.substr(pos1), pos2 - pos1), (tabMax[iAT] * bitmap->Width()) / 100); + tab[iAT] = std::max(tab[iAT], t); + tabCount = std::max(tabCount, iAT); + pos1 = pos2 + 1; + pos2 = str.find('\t', pos1); + } + mutex.Unlock(); +} + +void cGraphLCDDisplay::SetOsdCurrentItem() +{ + UpdateIn(100000); //XXX +} + +void cGraphLCDDisplay::Replaying(bool starting, eReplayMode replayMode) +{ + if (starting) + { + if (State != Menu) + { + State = Replay; + } + else + { + LastState = Replay; + } + if (GraphLCDSetup.ReplayLogo) + { + ePicType picType; + + switch (GraphLCDSetup.ReplayLogo) + { + case 1: // auto + if (bitmap->Height() <= MAXY_M) + picType = ptLogoMedium; + else + picType = ptLogoLarge; + break; + case 2: // medium + picType = ptLogoMedium; + break; + case 3: // large + picType = ptLogoLarge; + break; + default: // should not happen at the moment !! + picType = ptLogoSmall; + break; + } + switch (replayMode) + { + default: + case eReplayNormal : + logo = logoList->GetLogo("REPLAY-VDR", picType);break; + case eReplayMusic : + logo = logoList->GetLogo("REPLAY-MUSIC", picType);break; + case eReplayDVD : + logo = logoList->GetLogo("REPLAY-DVD", picType);break; + case eReplayFile : + logo = logoList->GetLogo("REPLAY-FILE", picType);break; + case eReplayImage : + logo = logoList->GetLogo("REPLAY-IMAGE", picType);break; + case eReplayAudioCD: + logo = logoList->GetLogo("REPLAY-AUDIOCD", picType);break; + } + if (logo) + logo->First(TimeMs()); + } + else + { + logo = NULL; + } + } + else + { + if (State != Menu) + { + State = Normal; + } + else + { + LastState = Normal; + } + } + bBrightnessActive = true; + Update(); +} + +void cGraphLCDDisplay::SetOsdTextItem(const char * Text, bool Scroll) +{ + static const char * lastText = NULL; + tOsdState osd; + + osd = GraphLCDState->GetOsdState(); + mutex.Lock(); + if (Text) + { + if (osd.textItem.length() == 0) + lastText = NULL; + int maxTextLen = bitmap->Width() - 2 * FRAME_SPACE_X - 2 * TEXT_OFFSET_X; + normalFont->WrapText(maxTextLen, 0, osd.textItem, textItemLines); + textItemLines.push_back(""); + if (lastText != Text) + { + lastText = Text; + textItemTop = 0; + } + } + else + { + if (Scroll) + { + if (textItemTop > 0) + textItemTop--; + } + else + { + if (textItemTop < (int) textItemLines.size() - 2) + textItemTop++; + } + } + mutex.Unlock(); + UpdateIn(100000); +} + +void cGraphLCDDisplay::Update() +{ + update = true; +} + +void cGraphLCDDisplay::DisplayTime() +{ + static char buffer[32]; + static char month[5]; + int FrameWidth, TextLen, yPos; + struct tm tm_r; + + if (GraphLCDSetup.ShowDateTime == 1 || + (GraphLCDSetup.ShowDateTime == 2 && State != Menu)) + { + FrameWidth = std::max(bitmap->Width() - 2 * FRAME_SPACE_X, 1); + if (State == Normal || State == Replay) + { + if (IsLogoActive()) // Logo enabled & available + { + FrameWidth = std::max(FrameWidth - FRAME_SPACE_XB - logo->Width() - 2, (unsigned int) 1); + } + if (bitmap->Height() <= MAXY_M) + { + // tiny, small & medium display + if (IsSymbolsActive()) // Symbols enabled + { + FrameWidth = std::max(FrameWidth - FRAME_SPACE_XB - symbols->TotalWidth(), 1); + } + } + } + yPos = FRAME_SPACE_Y; + + // draw Rectangle + bitmap->DrawRoundRectangle(FRAME_SPACE_X, yPos, + FRAME_SPACE_X + FrameWidth - 1, + yPos + normalFont->TotalHeight() + 2 * TEXT_OFFSET_Y_TIME - 1, + GLCD::clrBlack, true, (TEXT_OFFSET_Y_TIME >= 2) ? 4 : 1); + + if (CurrTime == 0) + time(&CurrTime); + tm * tm = localtime_r(&CurrTime, &tm_r); + + strncpy(month, (char *)(tr("JanFebMarAprMayJunJulAugSepOctNovDec") + 3 * tm->tm_mon), 3); + month[3] = 0; + snprintf(buffer, sizeof(buffer), "%s %2d.%s %d:%02d", (const char *) WeekDayName(tm->tm_wday), tm->tm_mday, month, tm->tm_hour, tm->tm_min); + TextLen = normalFont->Width(buffer); + + if (TextLen > std::max(FrameWidth - 2 * TEXT_OFFSET_X, 1)) + { + snprintf(buffer, sizeof(buffer), "%d.%s %d:%02d", tm->tm_mday, month, tm->tm_hour, tm->tm_min); + TextLen = normalFont->Width(buffer); + } + + if (TextLen > std::max(FrameWidth - 2 * TEXT_OFFSET_X, 1)) + { + snprintf(buffer, sizeof(buffer), "%d.%d. %d:%02d", tm->tm_mday, tm->tm_mon+1, tm->tm_hour, tm->tm_min); + TextLen = normalFont->Width(buffer); + } + + if (TextLen > std::max(FrameWidth - 2 * TEXT_OFFSET_X, 1)) + { + snprintf(buffer, sizeof(buffer), "%d:%02d", tm->tm_hour, tm->tm_min); + TextLen = normalFont->Width(buffer); + } + + if (TextLen < std::max(FrameWidth - 2 * TEXT_OFFSET_X, 1)) + { + bitmap->DrawText(FRAME_SPACE_X + FrameWidth - TextLen - TEXT_OFFSET_X, + yPos + TEXT_OFFSET_Y_TIME, + FRAME_SPACE_X + FrameWidth - 1, + buffer, normalFont, GLCD::clrWhite); + } + else + { + bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X, + yPos + TEXT_OFFSET_Y_TIME, + FRAME_SPACE_X + FrameWidth - 1, + buffer, normalFont, GLCD::clrWhite); + } + } +} + +void cGraphLCDDisplay::DisplayChannel() +{ + int FrameWidth, yPos; + tChannelState channel; + + channel = GraphLCDState->GetChannelState(); + if (GraphLCDSetup.ShowChannel) + { + FrameWidth = std::max(bitmap->Width() - 2 * FRAME_SPACE_X, 1); + if (State == Normal) + { + if (IsLogoActive()) // Logo enabled & available + { + FrameWidth = std::max(FrameWidth - FRAME_SPACE_XB - logo->Width() - 2, (unsigned int) 1); + } + if (bitmap->Height() <= MAXY_M) + { + // tiny, small & medium display + if (IsSymbolsActive()) // Symbols enabled + { + FrameWidth = std::max(FrameWidth - FRAME_SPACE_XB - symbols->TotalWidth(), 1); + } + } + } + + if (GraphLCDSetup.ShowDateTime == 1 || + (GraphLCDSetup.ShowDateTime == 2 && State != Menu)) + { + yPos = FRAME_SPACE_Y + normalFont->TotalHeight() + 2 * TEXT_OFFSET_Y_TIME + FRAME_SPACE_YB; + + if (bitmap->Height() >= MINY_L) + { + // align bottom border with logo + if (IsLogoActive()) // Logo enabled & available + { + yPos += std::max((unsigned int) 0, FRAME_SPACE_Y + logo->Height() + 2 - yPos - + (normalFont->TotalHeight() + 2 * TEXT_OFFSET_Y_CHANNEL)); + } + } + } + else + { + yPos = FRAME_SPACE_Y; + } + + // draw Rectangle + bitmap->DrawRoundRectangle(FRAME_SPACE_X, yPos, + FRAME_SPACE_X + FrameWidth - 1, + yPos + normalFont->TotalHeight() + 2 * TEXT_OFFSET_Y_CHANNEL - 1, + GLCD::clrBlack, true, (TEXT_OFFSET_Y_CHANNEL >= 4) ? 4 : 1); + + if (channel.strTmp.length() > 0) + { + bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X, + yPos + TEXT_OFFSET_Y_CHANNEL, + FRAME_SPACE_X + FrameWidth - 1, + channel.strTmp, normalFont, GLCD::clrWhite); + } + else if (channel.str.length() > 0) + { + bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X, + yPos + TEXT_OFFSET_Y_CHANNEL, + FRAME_SPACE_X + FrameWidth - 1, + channel.str, normalFont, GLCD::clrWhite); + } + } +} + +bool cGraphLCDDisplay::IsLogoActive() const +{ + if ((State==Normal && GraphLCDSetup.ShowLogo) || + (State==Replay && GraphLCDSetup.IdentifyReplayType && GraphLCDSetup.ReplayLogo)) + { + return logo != NULL; + } + return false; +} + +void cGraphLCDDisplay::DisplayLogo() +{ + int x; + int y; + + if (IsLogoActive()) + { + if (logo->Count() > 1) + { + uint64_t t = TimeMs(); + if (t - logo->LastChange() >= logo->Delay()) + { + if (!logo->Next(t)) + logo->First(t); + } + } + + x = std::max(bitmap->Width() - FRAME_SPACE_X - logo->Width() - 2, (unsigned int) 0); + y = FRAME_SPACE_Y; + + bitmap->DrawRoundRectangle(x, y, x + logo->Width() + 1, y + logo->Height() + 1, GLCD::clrBlack, false, 1); + bitmap->DrawBitmap(x + 1, y + 1, *logo->GetBitmap(), GLCD::clrBlack); + } +} + +bool cGraphLCDDisplay::IsSymbolsActive() const +{ + return GraphLCDSetup.ShowSymbols; +} + +void cGraphLCDDisplay::DisplaySymbols() +{ + int yPos = 0; + int xPos = 0; + int i; + tChannelState channel; + tVolumeState volume; + tCardState card[MAXDEVICES]; + + channel = GraphLCDState->GetChannelState(); + for (i = 0; i < MAXDEVICES; i++) + card[i] = GraphLCDState->GetCardState(i); + volume = GraphLCDState->GetVolumeState(); + + if (IsSymbolsActive()) + { + cChannel * ch = Channels.GetByNumber(channel.number); + if (ch) + { + if (bitmap->Height() <= MAXY_M) // medium display + { + yPos = FRAME_SPACE_Y; + xPos = bitmap->Width() - FRAME_SPACE_X - symbols->TotalWidth(); + + if (IsLogoActive()) + { + xPos -= FRAME_SPACE_XB + logo->Width() + 2; + } + + if (GraphLCDSetup.ShowSymbols == 1) // normal/fixed symbols + { + // new layout: + // displays rec symbols for every card and + // 2chan + dolby have their own symbols + // user triggered symbols + + int yPos2 = 0; + + // blank or 2chan or mute + if (volume.value == 0) + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'M', symbols); + yPos += symbols->Height('S') + SYMBOL_SPACE; + } + else if (ch->Apid2()) + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'A', symbols); + yPos += symbols->Height('A') + SYMBOL_SPACE; + } + else + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ' ', symbols); + yPos += symbols->Height(' ') + SYMBOL_SPACE; + } + + // blank or dolby + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ch->Dpid1() ? 'D' : ' ', symbols); + yPos += symbols->Height(ch->Dpid1() ? 'D' : ' ') + SYMBOL_SPACE; + + // blank or teletext + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ch->Tpid() ? 'T' : ' ', symbols); + yPos += symbols->Height(ch->Tpid() ? 'T' : ' ') + SYMBOL_SPACE; + + // blank or crypt + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ch->Ca() ? 'C' : ' ', symbols); + yPos += symbols->Height(ch->Tpid() ? 'C' : ' ') + SYMBOL_SPACE; + + // show REC symbols at the right border below the logo + yPos2 = yPos; + yPos = FRAME_SPACE_Y; + if (GraphLCDSetup.ShowDateTime == 1 || + (GraphLCDSetup.ShowDateTime == 2 && State != Menu)) + { + yPos += normalFont->TotalAscent() + 2 * TEXT_OFFSET_Y_TIME + FRAME_SPACE_YB; + } + if (GraphLCDSetup.ShowChannel) + { + yPos += normalFont->TotalAscent() + 2 * TEXT_OFFSET_Y_CHANNEL + FRAME_SPACE_YB; + } + if (IsLogoActive()) + { + yPos = std::max((unsigned int) yPos, FRAME_SPACE_Y + logo->Height() + 2 + FRAME_SPACE_YB); + } + + yPos = std::max(yPos, yPos2); + xPos = bitmap->Width() - FRAME_SPACE_X + SYMBOL_SPACE; + for (i = LCDMAXCARDS - 1; i >= 0; i--) + { + if (card[i].recordingCount > 0) + { + xPos -= symbols->Width(49 + i) + SYMBOL_SPACE; + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 49 + i, symbols); + } + } + + // show external triggered symbols + if (GraphLCDSetup.ShowETSymbols && strlen(szETSymbols) > 0) + { + for (i = strlen(szETSymbols) - 1; i >= 0; i--) + { + xPos -= symbols->Width(szETSymbols[i]) + SYMBOL_SPACE; + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, szETSymbols[i], symbols); + } + } + } + else // compressed symbols + { + // old layout: + // displays only 1 rec symbol and + // a combined 2chan + dolby symbol + + // blank or teletext + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ch->Tpid() ? 'T' : ' ', symbols); + yPos += symbols->Height(ch->Tpid() ? 'T' : ' ') + SYMBOL_SPACE; + + // blank or crypt + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ch->Ca() ? 'C' : ' ', symbols); + yPos += symbols->Height(ch->Tpid() ? 'C' : ' ') + SYMBOL_SPACE; + + // blank, 2chan, dolby or combined symbol + if (volume.value == 0) + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'M', symbols); + yPos += symbols->Height('S') + SYMBOL_SPACE; + } + else if (ch->Apid2() && ch->Dpid1()) + { + // if Apid2 and Dpid1 are set then use combined symbol + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'B', symbols); + yPos += symbols->Height('B') + SYMBOL_SPACE; + } + else if (ch->Apid2()) + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'A', symbols); + yPos += symbols->Height('A') + SYMBOL_SPACE; + } + else if (ch->Dpid1()) + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'D', symbols); + yPos += symbols->Height('D') + SYMBOL_SPACE; + } + else + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ' ', symbols); + yPos += symbols->Height(' ') + SYMBOL_SPACE; + } + + // blank or rec + if (cRecordControls::Active()) + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, '1', symbols); + } + else + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ' ', symbols); + } + } + } + else // large display + { + yPos = FRAME_SPACE_Y; + if (GraphLCDSetup.ShowDateTime == 1 || + (GraphLCDSetup.ShowDateTime == 2 && State != Menu)) + { + yPos += normalFont->TotalHeight() + 2 * TEXT_OFFSET_Y_TIME + FRAME_SPACE_YB; + } + if (GraphLCDSetup.ShowChannel) + { + yPos += normalFont->TotalHeight() + 2 * TEXT_OFFSET_Y_CHANNEL + FRAME_SPACE_YB; + } + if (IsLogoActive()) + { + yPos = std::max((unsigned int) yPos, FRAME_SPACE_Y + logo->Height() + 2 + FRAME_SPACE_YB); + } + + xPos = bitmap->Width() - FRAME_SPACE_X - symbols->Width(' '); + + if (GraphLCDSetup.ShowSymbols == 1) // normal/fixed symbols + { + // blank or teletext + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ch->Tpid() ? 'T' : ' ', symbols); + xPos -= symbols->Width(ch->Tpid() ? 'T' : ' ') + SYMBOL_SPACE; + + // blank or dolby + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ch->Dpid1() ? 'D' : ' ', symbols); + xPos -= symbols->Width(ch->Dpid1() ? 'D' : ' ') + SYMBOL_SPACE; + + if (bitmap->Height() > MAXY_M) // with 128 pixel width only 3 symbols... + { + // blank or crypt + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ch->Ca()? 'C' : ' ', symbols); + xPos -= symbols->Width(ch->Ca() ? 'C' : ' ') + SYMBOL_SPACE; + } + + // blank or 2chan or mute + if (volume.value == 0) + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'M', symbols); + xPos -= symbols->Width('S') + SYMBOL_SPACE; + } + else if (ch->Apid2()) + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'A', symbols); + xPos -= symbols->Width('A') + SYMBOL_SPACE; + } + else + { + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ' ', symbols); + xPos -= symbols->Width(' ') + SYMBOL_SPACE; + } + } + else // compressed symbols + { + // crypt + if (ch->Ca()) + { + xPos -= symbols->Width('C') + SYMBOL_SPACE; + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'C', symbols); + } + + // teletext + if (ch->Tpid()) + { + xPos -= symbols->Width('T') + SYMBOL_SPACE; + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'T', symbols); + } + + // dolby + if (ch->Dpid1()) + { + xPos -= symbols->Width('D') + SYMBOL_SPACE; + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'D', symbols); + } + + // 2chan + if (ch->Apid2()) + { + xPos -= symbols->Width('A') + SYMBOL_SPACE; + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'A', symbols); + } + + // mute + if (volume.value == 0) + { + xPos -= symbols->Width('S') + SYMBOL_SPACE; + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 'M', symbols); + } + } + + // show REC symbols at the right border of the 'next line' + xPos = bitmap->Width() - FRAME_SPACE_X + SYMBOL_SPACE; + yPos += symbols->TotalHeight() + FRAME_SPACE_YB; + for (i = cDevice::NumDevices() - 1; i >= 0; i--) + { + // Just display present devices + xPos -= symbols->Width(49 + i) + SYMBOL_SPACE; + if (card[i].recordingCount > 0) + { + // Show a recording Symbol + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, 49 + i, symbols); + } + else + { + if (GraphLCDSetup.ShowNotRecording == 1) + { + // Do we want an empty frame around not recording card's icons? + // Show an empty frame instead of the recording symbol + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ' ', symbols); + } + } + } + + // show external triggered symbols + if (GraphLCDSetup.ShowETSymbols && strlen(szETSymbols) > 0) + { + for (i = strlen(szETSymbols) - 1; i >= 0; i--) + { + xPos -= symbols->Width(szETSymbols[i]) + SYMBOL_SPACE; + bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, szETSymbols[i], symbols); + } + } + } + } + } +} + +void cGraphLCDDisplay::DisplayProgramme() +{ + struct tm tm_r; + char buffer[25]; + std::string str; + bool showTimeBar = false; + int timeBarWidth = 0; + int timeBarValue = 0; + tEventState event; + + event = GraphLCDState->GetEventState(); + if (GraphLCDSetup.ShowProgram) + { + strftime(buffer, sizeof(buffer), "%R", localtime_r(&event.presentTime, &tm_r)); + if (event.followingTime && event.followingTime != event.presentTime) + { + str = buffer; + if ((bitmap->Width() >= MINY_L || !IsSymbolsActive())) + { + str += " - "; + } + else + { + str += "-"; + } + strftime(buffer, sizeof(buffer), "%R", localtime_r(&event.followingTime, &tm_r)); + str += buffer; + showTimeBar = true; + timeBarWidth = normalFont->Width(str) - 1; + timeBarValue = (time(NULL) - event.presentTime) * timeBarWidth / (event.followingTime - event.presentTime); + if (timeBarValue > timeBarWidth) + timeBarValue = timeBarWidth; + if (timeBarValue < 0) + timeBarValue = 0; + } + else + { + str = buffer; + } + + if (!event.presentTime) + { + std::vector<cScroller>::iterator it; + for (it = scroller.begin(); it != scroller.end(); it++) + { + it->Reset(); + } + } + + if (event.presentTime) + { + if (scroller.size() < 1 || + event.presentTitle != scroller[0].Text() || + (scroller.size() > 1 && event.presentSubtitle != scroller[1].Text())) + { + if (bitmap->Height() <= MAXY_S) + { + scroller.resize(1); + + int nTopY = bitmap->Height() - (TEXT_OFFSET_Y_TITLE - 1) - largeFont->TotalHeight(); + int nMaxX = std::max(1, bitmap->Width() - 1 - (2 * FRAME_SPACE_X)); + // Logo enabled & available, and text with Logo is overlapped + if (IsLogoActive() && nTopY < (int) logo->Height()) + { + nMaxX -= FRAME_SPACE_XB; + nMaxX -= logo->Width(); + nMaxX = std::max(nMaxX-2,1);//Frame around Logo + } + // If symbols used, and text with symbols is overlapped + if (IsSymbolsActive()) + { + nMaxX -= FRAME_SPACE_XB; + nMaxX -= symbols->TotalWidth(); + nMaxX = std::max(nMaxX,1); + } + + scroller[0].Init(FRAME_SPACE_X + TEXT_OFFSET_X, + nTopY, + nMaxX, + largeFont, event.presentTitle); + } + else + { + scroller.resize(2); + + scroller[0].Init(FRAME_SPACE_X + TEXT_OFFSET_X, + bitmap->Height() - 2 * (TEXT_OFFSET_Y_TITLE - 1) - largeFont->TotalHeight() - normalFont->TotalHeight(), + bitmap->Width() - 1, + largeFont, event.presentTitle); + scroller[1].Init(FRAME_SPACE_X + TEXT_OFFSET_X, + bitmap->Height() - (TEXT_OFFSET_Y_TITLE-1) - normalFont->TotalHeight(), + bitmap->Width() - 1, + normalFont, event.presentSubtitle); + } + } + if (bitmap->Height() <= MAXY_S) + { + // tiny and small LCDs + bitmap->DrawText(FRAME_SPACE_X, + bitmap->Height() - 2 * (TEXT_OFFSET_Y_TITLE - 1) - largeFont->TotalHeight() - normalFont->TotalHeight(), + bitmap->Width() - 1, + str, normalFont); + } + else + { + // medium and large LCDs + bitmap->DrawText(FRAME_SPACE_X, + bitmap->Height() - 3 * (TEXT_OFFSET_Y_TITLE - 1) - largeFont->TotalHeight() - 2 * normalFont->TotalHeight() - (showTimeBar && GraphLCDSetup.ShowTimebar ? TIMEBAR_HEIGHT + 1 : 0), + bitmap->Width() - 1, + str, normalFont); + if (showTimeBar && GraphLCDSetup.ShowTimebar) + { + bitmap->DrawRectangle(FRAME_SPACE_X, + bitmap->Height() - 3 * (TEXT_OFFSET_Y_TITLE - 1) - largeFont->TotalHeight() - normalFont->TotalHeight() - TIMEBAR_HEIGHT - 1, + FRAME_SPACE_X + timeBarWidth, + bitmap->Height() - 3 * (TEXT_OFFSET_Y_TITLE - 1) - largeFont->TotalHeight() - normalFont->TotalHeight() - 2, + GLCD::clrBlack, false); + bitmap->DrawRectangle(FRAME_SPACE_X, + bitmap->Height() - 3 * (TEXT_OFFSET_Y_TITLE - 1) - largeFont->TotalHeight() - normalFont->TotalHeight() - TIMEBAR_HEIGHT - 1, + FRAME_SPACE_X + timeBarValue, + bitmap->Height() - 3 * (TEXT_OFFSET_Y_TITLE - 1) - largeFont->TotalHeight() - normalFont->TotalHeight() - 2, + GLCD::clrBlack, true); + } + } + // Draw Programmtext + { + std::vector<cScroller>::iterator it; + for (it = scroller.begin(); it != scroller.end(); it++) + { + it->Draw(bitmap); + } + } + } + } +} + +bool cGraphLCDDisplay::IndexIsGreaterAsOneHour(int Index) const +{ + int h = (Index / FRAMESPERSEC) / 3600; + return h > 0; +} + +const char * cGraphLCDDisplay::IndexToMS(int Index) const +{ + static char buffer[16]; + int s = (Index / FRAMESPERSEC); + int m = s / 60; + s %= 60; + snprintf(buffer, sizeof(buffer), "%02d:%02d", m, s); + return buffer; +} + +bool cGraphLCDDisplay::IsScrollerTextChanged(const std::vector<cScroller> & scrollers, const std::vector <std::string> & lines) const +{ + if (lines.size() == 0) + return true; //Different size found + if (scrollers.size() == 0) + return true; //Different size found + + std::vector<cScroller>::const_iterator i = scrollers.begin(); + std::vector<cScroller>::const_iterator e = scrollers.end(); + std::vector<std::string>::const_iterator li = lines.begin(); + std::vector<std::string>::const_iterator le = lines.end(); + + for (; e != i && le != li; ++li,++i) + { + if (i->Text() != (*li)) + return true; //Different text found + } + return false; //Text seem equal +} + +void cGraphLCDDisplay::DisplayReplay(tReplayState & replay) +{ + int nMaxX, nProgressbarHeight, nTopY; + int nWidthPreMsg = 0, nWidthCurrent = 0, nWidthTotal = 0,nWidthOffset = 0; + std::string szPreMsg,szCurrent,szTotal; + + if (bitmap->Height() >= MINY_L) + nProgressbarHeight = 15; + else if (bitmap->Height() >= MINY_M) + nProgressbarHeight = 9; + else if (bitmap->Height() >= MINY_S) + nProgressbarHeight = 5; + else + nProgressbarHeight = 3; + + if (IsLogoActive()) + nTopY = FRAME_SPACE_Y + logo->Height() + 2; + else if (GraphLCDSetup.ShowDateTime) + nTopY = FRAME_SPACE_Y + normalFont->TotalAscent() + 2 * TEXT_OFFSET_Y_TIME + FRAME_SPACE_YB; + else + nTopY = FRAME_SPACE_Y; + if (replay.name.length() > 0) + { + int lineHeight, maxLines; + std::vector <std::string> lines; + + nMaxX = std::max(1, bitmap->Width() - (2 * FRAME_SPACE_X) - 2 * TEXT_OFFSET_X); + lineHeight = FRAME_SPACE_Y + largeFont->TotalHeight(); + maxLines = std::max(0, (bitmap->Height() - normalFont->TotalHeight() - FRAME_SPACE_Y - nProgressbarHeight - 2 - nTopY) / lineHeight); + + if (maxLines == 0) + { + if (IsLogoActive()) + { + // draw replayname next to logo + nMaxX = std::max((unsigned int) 1, nMaxX - FRAME_SPACE_X - logo->Width() - 2); + if (GraphLCDSetup.ShowDateTime) + nTopY = FRAME_SPACE_Y + normalFont->TotalAscent() + 2 * TEXT_OFFSET_Y_TIME + FRAME_SPACE_YB; + else + nTopY = FRAME_SPACE_Y; + maxLines = (bitmap->Height() - normalFont->TotalHeight() - FRAME_SPACE_Y - nProgressbarHeight - 2 - nTopY) / lineHeight; + } + if (maxLines <= 1) + { + // use singleline mode + lines.push_back(replay.name); + } + else + largeFont->WrapText(nMaxX, maxLines * lineHeight, replay.name, lines); + } + else if (maxLines == 1) //singleline mode + lines.push_back(replay.name); + else + { + largeFont->WrapText(nMaxX, maxLines * lineHeight, replay.name, lines); + } + + if (scroller.size() != lines.size() || + IsScrollerTextChanged(scroller,lines)) // if any text is changed + { + // Same size for Scroller and Textbuffer + scroller.resize(lines.size()); + + std::vector<cScroller>::iterator i = scroller.begin(); + std::vector<cScroller>::const_iterator e = scroller.end(); + std::vector<std::string>::const_iterator li = lines.begin(); + std::vector<std::string>::const_iterator le = lines.end(); + + for (int n = lines.size(); e != i && le != li; ++li,++i,--n) + { + nTopY = bitmap->Height() - normalFont->TotalHeight() - FRAME_SPACE_Y - nProgressbarHeight - n * lineHeight - 2; + i->Init(FRAME_SPACE_X + TEXT_OFFSET_X, nTopY, nMaxX + FRAME_SPACE_X + TEXT_OFFSET_X, largeFont, *li); + } + } + } + + // Draw Replaytext + { + std::vector<cScroller>::iterator it; + for (it = scroller.begin(); it != scroller.end(); it++) + { + it->Draw(bitmap); + } + } + + // Draw Progressbar with current and total replay time + nTopY = bitmap->Height() - normalFont->TotalHeight() - FRAME_SPACE_Y - nProgressbarHeight - 2; + nMaxX = std::max(1, bitmap->Width() - 1 - 2 * FRAME_SPACE_X); + // Logo enabled & available, and text with Logo is overlapped + if (IsLogoActive() && nTopY < (int) logo->Height()) + { + nMaxX -= max(1,FRAME_SPACE_X); // Free line between Logo and progressbar + nMaxX -= logo->Width(); + nMaxX = std::max(nMaxX - 2, 1); //Frame around Logo + } + + bitmap->DrawRectangle(FRAME_SPACE_X, + nTopY, + FRAME_SPACE_X + nMaxX, + nTopY + nProgressbarHeight, + GLCD::clrBlack, false); + + if (1 < replay.total && 1 < replay.current) // Don't show full progressbar for endless streams + { + bitmap->DrawRectangle(FRAME_SPACE_X, + nTopY, + FRAME_SPACE_X + (std::min(replay.total, replay.current) * nMaxX / replay.total), + nTopY + nProgressbarHeight, + GLCD::clrBlack, true); + } + + // Draw Strings with current and total replay time + nTopY = bitmap->Height() - normalFont->TotalHeight() - FRAME_SPACE_Y; + // use same width like Progressbar +// if (!IsLogoActive() || nTopY > logo->Height()) +// nMaxX = max(1, bitmap->Width() - 1 - (2 * FRAME_SPACE_X)); + + switch (replay.mode) + { + case eReplayDVD: + szPreMsg = tr("DVD"); break; + case eReplayMusic: + szPreMsg = tr("Music"); break; + case eReplayFile: + szPreMsg = tr("File"); break; + case eReplayImage: + szPreMsg = tr("Image"); break; + case eReplayAudioCD: + szPreMsg = tr("CD"); break; + default: + szPreMsg = tr("Replay"); break; + } + + if (bitmap->Width() >= MINY_M) + { + szPreMsg += " : "; + szPreMsg += replay.loopmode; + } + else + szPreMsg += ":"; + + if (replay.mode == eReplayImage) // Image-Plugin hasn't Frames per Seconds + { + char buffer[8]; + snprintf(buffer, sizeof(buffer), "%d", replay.current); + szCurrent = buffer; + snprintf(buffer, sizeof(buffer), "%d", replay.total); + szTotal = buffer; + } + else + { + if ((replay.total > 1 && IndexIsGreaterAsOneHour(replay.total)) || + IndexIsGreaterAsOneHour(replay.current)) // Check if any index bigger as one hour + { + szCurrent = (const char *) IndexToHMSF(replay.current); + if (replay.total > 1) // Don't draw totaltime for endless streams + szTotal = (const char *) IndexToHMSF(replay.total); + } + else + { + // Show only minutes and seconds on short replays + szCurrent = (const char *) IndexToMS(replay.current); + if (replay.total > 1) // Don't draw totaltime for endless streams + szTotal = (const char *) IndexToMS(replay.total); + } + } + // Get width of drawable strings + nWidthPreMsg = normalFont->Width(szPreMsg); + nWidthCurrent = normalFont->Width(szCurrent); + if (szTotal.length()) // Don't draw empty string + nWidthTotal = normalFont->Width(szTotal); + + // Draw depends on display width, any placeable informations + if (nWidthTotal && nWidthPreMsg && (nWidthPreMsg + nWidthCurrent + nWidthTotal + 5 < nMaxX)) + { + // Show prefix and all position + nWidthOffset = bitmap->DrawText(FRAME_SPACE_X, nTopY, nMaxX, szPreMsg, normalFont); + bitmap->DrawText(FRAME_SPACE_X + nWidthOffset + 1, nTopY, nMaxX, szCurrent, normalFont); + bitmap->DrawText(nMaxX - nWidthTotal, nTopY, nMaxX, szTotal, normalFont); + } + else if (nWidthTotal && (nWidthCurrent + nWidthTotal + 5 < nMaxX)) + { + // Show current and total position + bitmap->DrawText(FRAME_SPACE_X, nTopY, nMaxX, szCurrent, normalFont); + bitmap->DrawText(nMaxX - nWidthTotal, nTopY, nMaxX, szTotal, normalFont); + } + else if (!nWidthTotal && nWidthPreMsg && (nWidthPreMsg + nWidthCurrent + 1 < nMaxX)) + { + // Show prefix and current position + nWidthOffset = bitmap->DrawText(FRAME_SPACE_X, nTopY, nMaxX, szPreMsg, normalFont); + bitmap->DrawText(FRAME_SPACE_X + nWidthOffset + 1, nTopY, nMaxX, szCurrent, normalFont); + } + else + { + // Show only current position + bitmap->DrawText(FRAME_SPACE_X, nTopY, nMaxX, szCurrent, normalFont); + } +} + +void cGraphLCDDisplay::DisplayMenu(void) +{ + char buffer2[255]; + char * pszTmp1; + char * pszTmp2; + int iAT, t; + int FrameWidth, yPos, iEntryHeight; + int extra = 0; + tOsdState osd; + + osd = GraphLCDState->GetOsdState(); + + mutex.Lock(); + + FrameWidth = std::max(bitmap->Width() - 2 * FRAME_SPACE_X, 1); + + if (GraphLCDSetup.ShowDateTime == 1 || + (GraphLCDSetup.ShowDateTime == 2 && State != Menu)) + { + yPos = FRAME_SPACE_Y + normalFont->TotalAscent() + 2 * TEXT_OFFSET_Y_TIME + FRAME_SPACE_YB; + } + else + { + yPos = FRAME_SPACE_Y; + } + + // draw Menu Title + if (osd.title.length() > 0) + { + bitmap->DrawRoundRectangle(FRAME_SPACE_X, + yPos, + FRAME_SPACE_X + FrameWidth - 1, + yPos + normalFont->TotalHeight() + 2 * TEXT_OFFSET_Y_TIME - 1, + GLCD::clrBlack, true, TEXT_OFFSET_Y_CHANNEL >= 4 ? 4 : 1); + bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X, + yPos + TEXT_OFFSET_Y_TIME, + FRAME_SPACE_X + FrameWidth - 1, + osd.title, normalFont, GLCD::clrWhite); + } + + if (!(textItemLines.size() > 0)) + { + // draw Menu Entries + if (normalFont->TotalHeight() <= normalFont->LineHeight()) + extra = 1; + iEntryHeight = normalFont->TotalHeight() + 2 * extra; + yPos = yPos + normalFont->TotalHeight() + 2 * TEXT_OFFSET_Y_TIME + FRAME_SPACE_YB; + if (GraphLCDSetup.ShowColorButtons && + (osd.colorButton[0].length() > 0 || osd.colorButton[1].length() > 0 || + osd.colorButton[2].length() > 0 || osd.colorButton[3].length() > 0)) + { + menuCount = (bitmap->Height() - yPos - smallFont->TotalHeight() - 4 - FRAME_SPACE_Y / 3) / iEntryHeight; + } + else + { + menuCount = (bitmap->Height() - yPos) / iEntryHeight; + } + + if (osd.currentItemIndex < menuTop) + menuTop = osd.currentItemIndex; + if (osd.currentItemIndex > menuTop + menuCount - 1) + menuTop = std::max(0, osd.currentItemIndex + 1 - menuCount); + + bitmap->DrawRectangle(0, yPos, bitmap->Width() - 1, bitmap->Height() - 1, GLCD::clrWhite, true); + + for (int i = menuTop; i < std::min((int) osd.items.size(), menuTop + menuCount); i++) + { + if (i == osd.currentItemIndex) + { + bitmap->DrawRoundRectangle(FRAME_SPACE_X, yPos + (i - menuTop) * iEntryHeight, + bitmap->Width() - 1 - FRAME_SPACE_X, + yPos + (i - menuTop + 1) * iEntryHeight - 1, + GLCD::clrBlack, true, TEXT_OFFSET_Y_CHANNEL >= 4 ? 3 : 1); + } + strncopy(buffer2, osd.items[i].c_str(), sizeof(buffer2)); + pszTmp1 = buffer2; + pszTmp2 = strchr(pszTmp1, '\t'); + iAT = 0; t = 0; + + while (pszTmp1 && pszTmp2) + { + *pszTmp2 = '\0'; + bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X + t, + yPos + (i - menuTop) * iEntryHeight + extra, + std::min(FRAME_SPACE_X + TEXT_OFFSET_X + t + tab[iAT + 1], bitmap->Width() - 1 - FRAME_SPACE_X), + pszTmp1, normalFont, (i == osd.currentItemIndex) ? GLCD::clrWhite : GLCD::clrBlack); + pszTmp1 = pszTmp2+1; + pszTmp2 = strchr(pszTmp1, '\t'); + t = t + tab[iAT + 1] + TEXT_OFFSET_X; + iAT++; + } + + bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X + t, + yPos + (i - menuTop) * iEntryHeight + extra, + bitmap->Width() - 1 - FRAME_SPACE_X, + pszTmp1, normalFont, (i == osd.currentItemIndex) ? GLCD::clrWhite : GLCD::clrBlack); + } + } + mutex.Unlock(); +} + +void cGraphLCDDisplay::DisplayMessage() +{ + std::vector <std::string> lines; + int lineCount; + int maxTextLen, recW, recH; + int entryHeight; + tOsdState osd; + + osd = GraphLCDState->GetOsdState(); + if (GraphLCDSetup.ShowMessages && osd.message.length() > 0) + { + maxTextLen = bitmap->Width() - 2 * FRAME_SPACE_X - 2 * FRAME_SPACE_XB - 2 * TEXT_OFFSET_X - 10; + entryHeight = 2 * (normalFont->TotalHeight() - normalFont->TotalAscent()) + normalFont->TotalAscent(); + normalFont->WrapText(maxTextLen, MAXLINES_MSG * entryHeight, osd.message, lines, &recW); + lineCount = lines.size(); + + // display text + recH = lineCount * entryHeight + 2 * TEXT_OFFSET_Y_CHANNEL + 2 * FRAME_SPACE_YB; + recW = recW + 2 * TEXT_OFFSET_X + 2 * FRAME_SPACE_XB + 2 * FRAME_SPACE_X; + recW += (recW % 2); + + bitmap->DrawRectangle((bitmap->Width() - recW) / 2, + (bitmap->Height() - recH) / 2, + bitmap->Width() - 1 - (bitmap->Width() - recW) / 2, + bitmap->Height() - 1 - (bitmap->Height() - recH) / 2, + GLCD::clrWhite, true); + recH = recH - 2 * FRAME_SPACE_YB; + recW = recW - 2 * FRAME_SPACE_XB; + bitmap->DrawRectangle((bitmap->Width() - recW) / 2, + (bitmap->Height() - recH) / 2, + bitmap->Width() - 1 - (bitmap->Width() - recW) / 2, + bitmap->Height() - 1 - (bitmap->Height() - recH) / 2, + GLCD::clrBlack, false); + recH = recH - 2 * TEXT_OFFSET_Y_CHANNEL; + recW = recW - 2 * TEXT_OFFSET_X; + for (int i = 0; i < lineCount; i++) + { + bitmap->DrawText((bitmap->Width() - normalFont->Width(lines[i])) / 2, + (bitmap->Height() - recH) / 2 + i * entryHeight + (normalFont->TotalHeight() - normalFont->TotalAscent()), + bitmap->Width() - (bitmap->Width() - recW) / 2, + lines[i], normalFont); + } + } +} + +void cGraphLCDDisplay::DisplayTextItem() +{ + int lineCount; + int iEntryHeight, iLineAnz; + int yPos; + tOsdState osd; + + osd = GraphLCDState->GetOsdState(); + + mutex.Lock(); + if (textItemLines.size() > 0) + { + lineCount = textItemLines.size(); + + if (GraphLCDSetup.ShowDateTime == 1 || + (GraphLCDSetup.ShowDateTime == 2 && State != Menu)) + { + yPos = FRAME_SPACE_Y + normalFont->TotalAscent() + 2 * TEXT_OFFSET_Y_TIME + FRAME_SPACE_YB; + } + else + { + yPos = FRAME_SPACE_Y; + } + + // draw Text + iEntryHeight = normalFont->LineHeight(); + yPos = yPos + normalFont->TotalAscent() + 2 * TEXT_OFFSET_Y_CHANNEL + FRAME_SPACE_YB; + if (GraphLCDSetup.ShowColorButtons && + (osd.colorButton[0].length() > 0 || osd.colorButton[1].length() > 0 || + osd.colorButton[2].length() > 0 || osd.colorButton[3].length() > 0)) + { + iLineAnz = (bitmap->Height() - yPos - smallFont->TotalHeight() - 4 - FRAME_SPACE_Y / 3) / iEntryHeight; + } + else + { + iLineAnz = (bitmap->Height() - yPos) / iEntryHeight; + } + + int startLine = textItemTop; + for (int i = 0; i < std::min(lineCount, iLineAnz); i++) + { + if (i + startLine < lineCount) + bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X, + yPos + i * iEntryHeight, + bitmap->Width() - 1 - FRAME_SPACE_X, + textItemLines[i + startLine], normalFont); + } + } + mutex.Unlock(); +} + +void cGraphLCDDisplay::DisplayColorButtons() +{ + int i, buttonWidth, textLen; + int extra = 0; + tOsdState osd; + + osd = GraphLCDState->GetOsdState(); + + if (GraphLCDSetup.ShowColorButtons) + { + buttonWidth = (bitmap->Width() / 4) - (FRAME_SPACE_X ? 2 * FRAME_SPACE_X : 1); + if (smallFont->TotalHeight() == smallFont->TotalAscent()) + extra = 1; + + for (i = 0; i < 4; i++) + { + if (osd.colorButton[i].length() > 0) + { + bitmap->DrawRoundRectangle(i * (bitmap->Width() / 4) + FRAME_SPACE_X, + bitmap->Height() - smallFont->TotalHeight() - 2 * extra - FRAME_SPACE_Y / 3, + i * (bitmap->Width() / 4) + FRAME_SPACE_X + buttonWidth - 1, + bitmap->Height() - 1 - FRAME_SPACE_Y / 3, + GLCD::clrBlack, true, std::max(1, (smallFont->TotalHeight() + 4) / 5)); + textLen = smallFont->Width(osd.colorButton[i]); + if (textLen <= buttonWidth - 2) + { + bitmap->DrawText(i * (bitmap->Width() / 4) + (bitmap->Width() / 8) - (textLen + 1) / 2, + bitmap->Height() - smallFont->TotalHeight() - extra - FRAME_SPACE_Y / 3, + i * (bitmap->Width() / 4) + FRAME_SPACE_X + buttonWidth - 1, + osd.colorButton[i], smallFont, GLCD::clrWhite); + } + else + { + bitmap->DrawText(i * (bitmap->Width() / 4) + FRAME_SPACE_X + 1, + bitmap->Height() - smallFont->TotalHeight() - extra - FRAME_SPACE_Y / 3, + i * (bitmap->Width() / 4) + FRAME_SPACE_X + buttonWidth - 1, + osd.colorButton[i], smallFont, GLCD::clrWhite); + } + } + } + } +} + +void cGraphLCDDisplay::DisplayVolume() +{ + int RecW, RecH; + tVolumeState volume; + + volume = GraphLCDState->GetVolumeState(); + + if (GraphLCDSetup.ShowVolume) + { + if (volume.lastChange > 0) + { + if (TimeMs() - volume.lastChange < 2000) + { + RecH = (bitmap->Height() / 5) + 2 * FRAME_SPACE_YB + 4 * FRAME_SPACE_YB; + RecW = bitmap->Width() / 2; + bitmap->DrawRoundRectangle((bitmap->Width() - RecW) / 2, // draw frame + (bitmap->Height() - RecH) / 2, + bitmap->Width() - (bitmap->Width() - RecW) / 2 - 1, + bitmap->Height() - (bitmap->Height() - RecH) / 2 - 1, + GLCD::clrWhite, true, 1); + RecH = RecH - 2 * FRAME_SPACE_YB; + RecW = RecW - 2 * FRAME_SPACE_XB; + bitmap->DrawRoundRectangle((bitmap->Width() - RecW) / 2, // draw box + (bitmap->Height() - RecH) / 2, + bitmap->Width() - 1 - (bitmap->Width() - RecW) / 2, + bitmap->Height() - 1 - (bitmap->Height() - RecH) / 2, + GLCD::clrBlack, false, 1); + RecH = RecH - 2; + RecW = RecW - 2; + if (volume.value > 0) + bitmap->DrawRectangle((bitmap->Width() - RecW) / 2, // draw bar + (bitmap->Height() - RecH) / 2, + (bitmap->Width() - RecW) / 2 + (volume.value * RecW) / 255, + bitmap->Height() - 1 - (bitmap->Height() - RecH) / 2, + GLCD::clrBlack, true); + if (volume.value == 0) + { + // display big mute symbol + bitmap->DrawCharacter(bitmap->Width() / 2 - symbols->Width('5'), + bitmap->Height() / 2 - symbols->Height('5'), + bitmap->Width() - 1, '5', symbols); + bitmap->DrawCharacter(bitmap->Width() / 2, + bitmap->Height() / 2 - symbols->Height('6'), + bitmap->Width() - 1, '6', symbols); + bitmap->DrawCharacter(bitmap->Width() / 2 - symbols->Width('7'), + bitmap->Height() / 2, + bitmap->Width() - 1, '7', symbols); + bitmap->DrawCharacter(bitmap->Width() / 2, + bitmap->Height() / 2, + bitmap->Width() - 1, '8', symbols); + } + showVolume = true; + } + } + } +} + +void cGraphLCDDisplay::UpdateIn(long usec) +{ + if (usec == 0) + { + timerclear(&UpdateAt); + } + else + { + if (gettimeofday(&CurrTimeval, NULL) == 0) + { + // get current time + UpdateAt.tv_sec = CurrTimeval.tv_sec; + UpdateAt.tv_usec = CurrTimeval.tv_usec + usec; + while (UpdateAt.tv_usec >= 1000000) + { + // take care of an overflow + UpdateAt.tv_sec++; + UpdateAt.tv_usec -= 1000000; + } + } + } +} + + +bool cGraphLCDDisplay::CheckAndUpdateSymbols() +{ + bool bRet = false; + static struct stat filestat; + FILE* InFile = NULL; + static char szLine[8]; + + if (stat(FILENAME_EXTERNAL_TRIGGERED_SYMBOLS, &filestat)==0) { + if (LastTimeModSym != filestat.st_mtime) { + InFile = fopen(FILENAME_EXTERNAL_TRIGGERED_SYMBOLS, "r"); + if (InFile) { + strcpy(szETSymbols, ""); + while (!feof(InFile) && (strlen(szETSymbols)+1<sizeof(szLine))) { + strcpy(szLine, ""); + fgets(szLine, sizeof(szLine), InFile); + compactspace(szLine); + if ((strlen(szLine)==2) && (szLine[1]=='1')) { + strcat(szETSymbols, "."); + szETSymbols[strlen(szETSymbols)-1] = szLine[0]; + } + } + fclose(InFile); + LastTimeModSym = filestat.st_mtime; + bRet = true; + } + } + } else { + if ((errno == ENOENT) && (strlen(szETSymbols)>0)) { + strcpy(szETSymbols, ""); + bRet = true; + } + } + return bRet; +} + +void cGraphLCDDisplay::SetBrightness() +{ + mutex.Lock(); + bool bActive = bBrightnessActive + || (State == Menu) + || (GraphLCDSetup.ShowVolume && showVolume) + || (GraphLCDSetup.ShowMessages && GraphLCDState->GetOsdState().message.length() > 0) + || (GraphLCDSetup.BrightnessDelay == 900); + if (bActive) + { + LastTimeBrightness = TimeMs(); + bBrightnessActive = false; + } + if ((bActive ? GraphLCDSetup.BrightnessActive : GraphLCDSetup.BrightnessIdle) != nCurrentBrightness) + { + if (bActive) + { + mLcd->SetBrightness(GraphLCDSetup.BrightnessActive); + nCurrentBrightness = GraphLCDSetup.BrightnessActive; + } + else + { + if (GraphLCDSetup.BrightnessDelay < 1 + || ((TimeMs() - LastTimeBrightness) > (uint64_t) (GraphLCDSetup.BrightnessDelay*1000))) + { + mLcd->SetBrightness(GraphLCDSetup.BrightnessIdle); + nCurrentBrightness = GraphLCDSetup.BrightnessIdle; + } + } + } + mutex.Unlock(); +} diff --git a/display.h b/display.h new file mode 100644 index 0000000..f5395fa --- /dev/null +++ b/display.h @@ -0,0 +1,152 @@ +/* + * GraphLCD plugin for the Video Disk Recorder + * + * display.h - display class + * + * This file is released under the GNU General Public License. Refer + * to the COPYING file distributed with this package. + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online.de> + * (c) 2004 Andreas Regel <andreas.regel AT powarman.de> + */ + +#ifndef GRAPHLCD_DISPLAY_H +#define GRAPHLCD_DISPLAY_H + +#include <stdint.h> + +#include <string> +#include <vector> + +#include <glcdgraphics/bitmap.h> +#include <glcdgraphics/font.h> + +#include "global.h" +#include "layout.h" +#include "logolist.h" +#include "setup.h" +#include "state.h" +#include "widgets.h" + +#include <vdr/thread.h> +#include <vdr/player.h> + + +#define LCDMAXCARDS 4 +static const int kMaxTabCount = 10; + +enum ThreadState +{ + Normal, + Replay, + Menu +}; + +// Display update Thread +class cGraphLCDDisplay : public cThread +{ +public: + cGraphLCDDisplay(void); + ~cGraphLCDDisplay(void); + + int Init(GLCD::cDriver * Lcd, const char * CfgDir); + void Tick(void); + + void SetChannel(int ChannelNumber); + void SetClear(); + void SetOsdTitle(); + void SetOsdItem(const char * Text); + void SetOsdCurrentItem(); + void Recording(const cDevice * Device , const char * Name); + void Replaying(bool starting, eReplayMode replayMode); + //void SetStatusMessage(const char * Msg); + void SetOsdTextItem(const char * Text, bool Scroll); + //void SetColorButtons(const char * Red, const char * Green, const char * Yellow, const char * Blue); + void SetVolume(int Volume, bool Absolute); + + void Update(); + +protected: + virtual void Action(); + +private: + bool update; + bool active; + GLCD::cDriver * mLcd; + + cFontList fontList; + GLCD::cBitmap * bitmap; + const GLCD::cFont * largeFont; + const GLCD::cFont * normalFont; + const GLCD::cFont * smallFont; + const GLCD::cFont * symbols; + std::string cfgDir; + std::string fontDir; + std::string logoDir; + + ThreadState State; + ThreadState LastState; + + cMutex mutex; + cGraphLCDState * GraphLCDState; + + int menuTop; + int menuCount; + int tabCount; + int tab[kMaxTabCount]; + int tabMax[kMaxTabCount]; + + std::vector <std::string> textItemLines; + int textItemTop; + int textItemVisibleLines; + + bool showVolume; + + time_t CurrTime; + time_t LastTime; + time_t LastTimeCheckSym; + time_t LastTimeModSym; + struct timeval CurrTimeval; + struct timeval UpdateAt; + + std::vector<cScroller> scroller; + + cGraphLCDLogoList * logoList; + cGraphLCDLogo * logo; + + char szETSymbols[32]; + + void DisplayChannel(); + void DisplayTime(); + void DisplayLogo(); + void DisplaySymbols(); + void DisplayProgramme(); + void DisplayReplay(tReplayState & replay); + void DisplayMenu(); + void DisplayMessage(); + void DisplayTextItem(); + void DisplayColorButtons(); + void DisplayVolume(); + + void UpdateIn(long usec); + bool CheckAndUpdateSymbols(); + + /** Check if replay index bigger as one hour */ + bool IndexIsGreaterAsOneHour(int Index) const; + /** Translate replay index to string with minute and second MM:SS */ + const char *IndexToMS(int Index) const; + /** Compare Scroller with new Textbuffer*/ + bool IsScrollerTextChanged(const std::vector<cScroller> & scroller, const std::vector <std::string> & lines) const; + /** Returns true if Logo loaded and active*/ + bool IsLogoActive() const; + /** Returns true if Symbols loaded and active*/ + bool IsSymbolsActive() const; + + /** Set Brightness depends user activity */ + void SetBrightness(); + uint64_t LastTimeBrightness; + int nCurrentBrightness; + bool bBrightnessActive; +}; + +#endif diff --git a/global.h b/global.h new file mode 100644 index 0000000..a810180 --- /dev/null +++ b/global.h @@ -0,0 +1,33 @@ +/* + * GraphLCD plugin for the Video Disk Recorder + * + * global.h - global definitions + * + * This file is released under the GNU General Public License. Refer + * to the COPYING file distributed with this package. + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online.de> + * (c) 2004 Andreas Regel <andreas.regel AT powarman.de> + */ + +#ifndef _GRAPHLCD_GLOBAL_H_ +#define _GRAPHLCD_GLOBAL_H_ + + +#include <stdlib.h> + +#include <glcddrivers/driver.h> + + +#define PLUGIN_NAME "graphlcd" +#define SPACEWIDTH 2 + +#define FREENULL(p) (free (p), p = NULL) + +template<class T> inline void clip(T & value, T min, T max) +{ + if (value < min) value = min; + if (value > max) value = max; +} + +#endif diff --git a/graphlcd/fonts.conf b/graphlcd/fonts.conf new file mode 120000 index 0000000..0df1c43 --- /dev/null +++ b/graphlcd/fonts.conf @@ -0,0 +1 @@ +fonts.conf.large
\ No newline at end of file diff --git a/graphlcd/fonts.conf.large b/graphlcd/fonts.conf.large new file mode 100644 index 0000000..e976638 --- /dev/null +++ b/graphlcd/fonts.conf.large @@ -0,0 +1,4 @@ +Large Font = fnt:verdana-018.fnt +Normal Font = fnt:verdanab-013.fnt +Small Font = fnt:verdanab-009.fnt +Symbol Font = fnt:sym11.fnt diff --git a/graphlcd/fonts.conf.medium b/graphlcd/fonts.conf.medium new file mode 100644 index 0000000..3ffe9c8 --- /dev/null +++ b/graphlcd/fonts.conf.medium @@ -0,0 +1,4 @@ +Large Font = fnt:f12bn.fnt +Normal Font = fnt:f8n.fnt +Small Font = fnt:f5n.fnt +Symbol Font = fnt:sym7.fnt diff --git a/graphlcd/fonts.conf.small b/graphlcd/fonts.conf.small new file mode 100644 index 0000000..3ffe9c8 --- /dev/null +++ b/graphlcd/fonts.conf.small @@ -0,0 +1,4 @@ +Large Font = fnt:f12bn.fnt +Normal Font = fnt:f8n.fnt +Small Font = fnt:f5n.fnt +Symbol Font = fnt:sym7.fnt diff --git a/graphlcd/fonts.conf.tiny b/graphlcd/fonts.conf.tiny new file mode 100644 index 0000000..e289421 --- /dev/null +++ b/graphlcd/fonts.conf.tiny @@ -0,0 +1,4 @@ +Large Font = fnt:f8b.fnt +Normal Font = fnt:f8n.fnt +Small Font = fnt:f5n.fnt +Symbol Font = fnt:sym7.fnt diff --git a/graphlcd/fonts.conf.ttf b/graphlcd/fonts.conf.ttf new file mode 100644 index 0000000..b53dc5e --- /dev/null +++ b/graphlcd/fonts.conf.ttf @@ -0,0 +1,4 @@ +Large Font = ft2:verdana.ttf:18 +Normal Font = ft2:verdanab.ttf:13 +Small Font = ft2:verdanab.ttf:9 +Symbol Font = fnt:sym11.fnt diff --git a/graphlcd/fonts/Vera.ttf b/graphlcd/fonts/Vera.ttf Binary files differnew file mode 100644 index 0000000..58cd6b5 --- /dev/null +++ b/graphlcd/fonts/Vera.ttf diff --git a/graphlcd/fonts/VeraBd.ttf b/graphlcd/fonts/VeraBd.ttf Binary files differnew file mode 100644 index 0000000..51d6111 --- /dev/null +++ b/graphlcd/fonts/VeraBd.ttf diff --git a/graphlcd/fonts/f12b.fnt b/graphlcd/fonts/f12b.fnt Binary files differnew file mode 100644 index 0000000..ca2776d --- /dev/null +++ b/graphlcd/fonts/f12b.fnt diff --git a/graphlcd/fonts/f12bn.fnt b/graphlcd/fonts/f12bn.fnt Binary files differnew file mode 100644 index 0000000..bf7f41e --- /dev/null +++ b/graphlcd/fonts/f12bn.fnt diff --git a/graphlcd/fonts/f17b.fnt b/graphlcd/fonts/f17b.fnt Binary files differnew file mode 100644 index 0000000..a025765 --- /dev/null +++ b/graphlcd/fonts/f17b.fnt diff --git a/graphlcd/fonts/f17bn.fnt b/graphlcd/fonts/f17bn.fnt Binary files differnew file mode 100644 index 0000000..2dd06b8 --- /dev/null +++ b/graphlcd/fonts/f17bn.fnt diff --git a/graphlcd/fonts/f5n.fnt b/graphlcd/fonts/f5n.fnt Binary files differnew file mode 100644 index 0000000..9e8814b --- /dev/null +++ b/graphlcd/fonts/f5n.fnt diff --git a/graphlcd/fonts/f8b.fnt b/graphlcd/fonts/f8b.fnt Binary files differnew file mode 100644 index 0000000..ea6cc08 --- /dev/null +++ b/graphlcd/fonts/f8b.fnt diff --git a/graphlcd/fonts/f8n.fnt b/graphlcd/fonts/f8n.fnt Binary files differnew file mode 100644 index 0000000..fdd0362 --- /dev/null +++ b/graphlcd/fonts/f8n.fnt diff --git a/graphlcd/fonts/sym11.fnt b/graphlcd/fonts/sym11.fnt Binary files differnew file mode 100644 index 0000000..bcbc2ad --- /dev/null +++ b/graphlcd/fonts/sym11.fnt diff --git a/graphlcd/fonts/sym7.fnt b/graphlcd/fonts/sym7.fnt Binary files differnew file mode 100644 index 0000000..a18904e --- /dev/null +++ b/graphlcd/fonts/sym7.fnt diff --git a/graphlcd/fonts/verdana-018.fnt b/graphlcd/fonts/verdana-018.fnt Binary files differnew file mode 100644 index 0000000..2dd06b8 --- /dev/null +++ b/graphlcd/fonts/verdana-018.fnt diff --git a/graphlcd/fonts/verdanab-009.fnt b/graphlcd/fonts/verdanab-009.fnt Binary files differnew file mode 100644 index 0000000..b7b011d --- /dev/null +++ b/graphlcd/fonts/verdanab-009.fnt diff --git a/graphlcd/fonts/verdanab-013.fnt b/graphlcd/fonts/verdanab-013.fnt Binary files differnew file mode 100644 index 0000000..3d82b98 --- /dev/null +++ b/graphlcd/fonts/verdanab-013.fnt diff --git a/graphlcd/logonames.alias b/graphlcd/logonames.alias new file mode 120000 index 0000000..b47422c --- /dev/null +++ b/graphlcd/logonames.alias @@ -0,0 +1 @@ +logonames.alias.1.3
\ No newline at end of file diff --git a/graphlcd/logonames.alias.1.2 b/graphlcd/logonames.alias.1.2 new file mode 100644 index 0000000..a73e53a --- /dev/null +++ b/graphlcd/logonames.alias.1.2 @@ -0,0 +1,301 @@ +8:PREMIERE START
+9:PREMIERE4
+10:PREMIERE1
+11:PREMIERE2
+12:ANIMAL PLANET
+13:PLANET
+14:DISCOVERY CHANNEL
+15:CLASSICA
+16:PREMIERE SERIE
+17:PREMIERE SPORT1
+18:PREMIERE DIREKT PORTAL
+19:JUNIOR
+20:PREMIERE7
+21:BEATE-UHSE.TV
+22:HEIMATKANAL
+23:PREMIERE KRIMI
+27:PREMIERE SPORT2
+28:FOX KIDS
+29:REMIERE5
+32:SONNENKLAR TV
+34:DISNEY CHANNEL
+40:HSE24
+41:PREMIERE6
+42:13TH STREET
+43:PREMIERE3
+46:SAT1
+47:N24
+48:SAT1 SCHWEIZ
+51:TELE 5
+53:PREMIERE AUSTRIA
+54:LASTMINUTE
+160:ROCK ANTENNE
+161:ERF RADIO
+169:SUNSHINE LIVE
+170:ANTENNE BAYERN
+208:PREMIERE DIREKT 2
+209:PREMIERE DIREKT 3
+210:PREMIERE DIREKT 3
+211:PREMIERE DIREKT 3
+212:PREMIERE DIREKT 3
+240:PREMIERE DIREKT 1
+241:PREMIERE DIREKT 1
+242:PREMIERE DIREKT 1
+243:PREMIERE DIREKT 2
+244:PREMIERE DIREKT 2
+245:PREMIERE DIREKT 2
+513:PREMIERE EROTIK
+514:ONTV
+515:MGM
+516:PREMIERE NOSTALGIE
+518:GOLDSTAR TV
+769:TV TRAVEL SHOP
+772:TV BERLIN
+775:FRANKEN SAT
+778:PREMIERE EROTIK 1
+779:PREMIERE EROTIK 2
+897:NEUN LIVE
+898:PRO SIEBEN
+899:KABEL 1
+900:DSF
+2004:RTL4
+2005:RTL5
+2020:ANIMAL PLANET
+2025:EUROSPORT
+2030:BBC PRIME
+2035:HALLMARK
+2051:RTL RADIO
+3982:RTBF SAT
+3994:RTL TELE LETZEBURG
+4009:X-ZONE
+4011:NED1
+4012:NED2
+4013:NED3
+4020:YAM FM
+4030:RTL FM
+5004:NET5
+5005:SBS6
+5015:TMF
+5025:BVN
+5050:YORIN FM
+5055:KINK FM
+5070:SKY RADIO NL
+5072:RADIO 538
+5085:RADIO 10 GOLD
+5095:VERONICA RADIO
+7268:OTTO SHOP
+8004:EURONEWS
+8151:EUROSPORT
+8156:LCI
+8353:KTO
+8355:MATCH TV
+8501:FRANCE5
+8505:BLOOMBERG TV
+8506:LCP
+8529:RIRE ET CHANSONS
+8536:NRJ
+8537:EUROPE 2
+8544:VIBRATION
+8545:CONTACT FM
+8548:CHERIE FM
+8549:ALOUETTE
+8550:VOLTAGE
+8552:ADO FM
+8553:RSR COULEUR 3
+8559:MEDIA TROPICAL
+8612:CANAL CLUB
+8613:BEUR TV
+8801:FRANCE2
+8802:FRANCE3
+8906:DISNEY CHANNEL
+8907:PLAYHOUSE DISNEY
+8910:MOTORS TV
+9011:ALGERIE
+9012:TV5 EUROPE
+9014:ESC1-EGYPT
+9015:RAI 1
+9017:RTP INT
+9018:TV7
+9019:ARTE
+9021:AL JAZEERA
+9030:2M MAROC
+9301:FESTIVAL
+9302:HISTOIRE
+9307:LIVE 1
+10001:TVE INT
+10002:RTM-MAROC
+10010:EUROSPORT
+10020:DW-TV
+10030:CNBC EUROPE
+12003:RTL TELEVISION
+12020:RTL 2
+12040:SUPER RTL
+12060:VOX
+12080:RTL SHOP
+12085:RTL AUSTRIA
+12100:QVC GERMANY
+12120:VIVA PLUS
+12160:BLOOMBERG TV
+12199:LIBERTY TV
+12200:CNBC EUROPE
+12240:TV5 EUROPE
+12280:LIBERTY TV
+12301:TV6
+12320:WISHLINE
+12340:BBC WORLD
+12341:CFN RFC
+12600:BAHN TV
+12601:K-TV
+12602:XXP
+12614:RHEIN MAIN TV
+12650:RADIO MARIA
+12660:HITRADIO FFH
+12661:PLANET RADIO
+12662:HARMONY FM
+12730:N-TV
+12732:VIVA
+12750:HOERZU DIGITAL
+13001:ORF 1
+13002:ORF 2
+13003:ORF 2 WIEN
+13004:ORF 2 NIEDEROESTERREICH
+13005:ORF 2 BURGENLAND
+13006:ORF 2 OBEROESTERREICH
+13007:ORF 2 SALZBURG
+13008:ORF 2 TIROL
+13009:ORF 2 VORARLBERG
+13010:ORF 2 STEIERMARK
+13011:ORF 2 KAERNTEN
+13012:ATVPLUS
+13013:TW1
+13021:OESTERREICH 1
+13033:OESTERREICH 3
+13034:FM4
+17020:AB MOTEURS
+17021:AB1
+17022:ANIMAUX
+17024:ZIK
+17027:BBC WORLD
+17028:RFM-TV
+17029:FASHION TV
+17030:ACTION
+17032:CINE BOX
+20001:PRO SIEBEN SCHWEIZ
+20002:PRO SIEBEN AUSTRIA
+20003:KABEL 1 SCHWEIZ
+20004:KABEL 1 AUSTRIA
+20005:SAT1 AUSTRIA
+20312:ANIMAL PLANET
+20316:FOX KIDS
+20319:HALLMARK
+20321:EUROSPORT
+20322:MTV CENTRAL
+20323:HALLMARK
+20328:BBC PRIME
+28006:ZDF
+28007:3SAT
+28008:KIKA
+28009:EUROSPORT
+28011:ZDF INFOKANAL
+28012:DEUTSCHKANDRADIO BERLIN
+28013:DEUTSCHLANDFUNK KOELN
+28014:ZDF DOKUKANAL
+28015:EURONEWS
+28016:ZDF THEATERKANAL
+28017:OESTERREICH 1
+28106:DAS ERSTE
+28107:BAYERISCHES FERNSEHEN
+28108:HESSEN FERNSEHEN
+28109:ARTE
+28110:SR FERNSEHEN SW
+28111:WDR
+28112:BR-ALPHA
+28113:SUEDWEST FS BW
+28114:PHOENIX
+28120:BAYERN4 KLASSIK
+28121:B5 AKTUELL
+28122:HR SKYLINE
+28123:HR2
+28124:HR KLASSIK
+28125:YOU FM
+28126:BAYERN1
+28127:NDR INFO
+28128:NORDWEST RADIO
+28129:SR 1
+28201:EINS EXTRA
+28202:EINS FESTIVAL
+28203:EINS MUXX
+28204:MDR FERNSEHEN
+28205:RBB BRANDENBURG
+28206:RBB BERLIN
+28207:NDR KULTUR
+28208:MDR FIGARO
+28209:FRITZ
+28210:JUMP
+28211:MDR INFO
+28212:SPUTNIK
+28213:RADIO MULTIKULTI
+28214:SWR2
+28215:WDR3
+28216:WDR5
+28224:NDR FERNSEHEN MV
+28225:NDR FERNSEHEN HH
+28226:NDR FERNSEHEN NDS
+28227:NDR FERNSEHEN SH
+28228:MDR FERNSEHEN S
+28229:MDR FERNSEHEN SA
+28230:MDR FERNSEHEN TH
+28231:SUEDWEST FS RP
+28305:WDR
+28306:WDR
+28307:WDR
+28308:WDR
+28309:WDR
+28310:WDR
+28311:WDR
+28312:WDR
+28521:CARTOON NETWORK
+28522:CNN INT
+28640:MTV 2 POP CHANNEL
+28652:MTV F
+28653:MTV CENTRAL
+28654:MTV HITS
+28655:MTV BASE
+28656:VH1
+28657:VH1 CLASSIC
+28658:NICKELODEON
+28659:MTV 2
+28664:MTV HITS
+28665:MTV BASE
+28666:VH1
+28669:MTV 2
+28800:RTL AUSTRIA
+28805:VOX AUSTRIA
+28810:RTL 2 AUSTRIA
+28815:SUPER RTL AUSTRIA
+29801:FOX KIDS
+29802:DISNEY CHANNEL
+29803:PLAYHOUSE DISNEY
+29955:FOX
+29956:AXN
+29963:CADENA DIAL
+30051:REALMADRID TV
+30201:TVC INT
+30210:CNN+
+30222:TV GALICIA
+30400:CANAL+
+30403:DISNEY CHANNEL
+30405:40 TV
+30500:CARTOON NETWORK
+30503:EUROSPORT
+30602:CANAL+ ...30
+30603:PLAYBOY
+30611:FOX NEWS
+31210:BTV
+31230:TV6
+61900:BIBEL TV
+61911:TRW AM
+61912:RADIO MARIA
+61920:TANGO TV
+61963:RAZE TV
+61980:FREE-X TV
diff --git a/graphlcd/logonames.alias.1.3 b/graphlcd/logonames.alias.1.3 new file mode 100644 index 0000000..c9e219f --- /dev/null +++ b/graphlcd/logonames.alias.1.3 @@ -0,0 +1,383 @@ +1-1008-29801:FOX KIDS
+1-1008-29802:DISNEY CHANNEL
+1-1008-29803:PLAYHOUSE DISNEY
+1-1024-9011:ALGERIE
+1-1024-9012:TV5 EUROPE
+1-1024-9014:ESC1-EGYPT
+1-1024-9015:RAI 1
+1-1024-9017:RTP INT
+1-1024-9018:TV7
+1-1024-9019:ARTE
+1-1024-9021:AL JAZEERA
+1-1024-9030:2M MAROC
+1-1026-10001:TVE INT
+1-1026-10002:RTM-MAROC
+1-1026-10010:EUROSPORT
+1-1026-10020:DW-TV
+1-1026-10030:CNBC EUROPE
+1-1032-30201:TVC INT
+1-1032-30210:CNN+
+1-1032-30222:TV GALICIA
+1-1038-30400:CANAL+
+1-1038-30403:DISNEY CHANNEL
+1-1038-30405:40 TV
+1-1042-30051:REALMADRID TV
+1-1046-30500:CARTOON NETWORK
+1-1046-30503:EUROSPORT
+1-1056-29955:FOX
+1-1056-29956:AXN
+1-1056-29963:CADENA DIAL
+1-1057-61900:BIBEL TV
+1-1057-61911:TRW AM
+1-1057-61912:RADIO MARIA
+1-1057-61920:TANGO TV
+1-1057-61963:RAZE TV
+1-1057-61980:FREE-X TV
+1-1060-30602:CANAL+ ...30
+1-1060-30603:PLAYBOY
+1-1060-30611:FOX NEWS
+1-1066-28652:MTV F
+1-1066-28653:MTV CENTRAL
+1-1066-28654:MTV HITS
+1-1066-28655:MTV BASE
+1-1066-28656:VH1
+1-1066-28657:VH1 CLASSIC
+1-1066-28658:NICKELODEON
+1-1066-28659:MTV 2
+1-1066-28664:MTV HITS
+1-1066-28665:MTV BASE
+1-1066-28666:VH1
+1-1066-28669:MTV 2
+1-1068-28521:CARTOON NETWORK
+1-1068-28522:CNN INT
+1-1070-8004:EURONEWS
+1-1073-28201:EINS EXTRA
+1-1073-28202:EINS FESTIVAL
+1-1073-28203:EINS MUXX
+1-1073-28204:MDR FERNSEHEN
+1-1073-28205:RBB BRANDENBURG
+1-1073-28206:RBB BERLIN
+1-1073-28207:NDR KULTUR
+1-1073-28208:MDR FIGARO
+1-1073-28209:FRITZ
+1-1073-28210:JUMP
+1-1073-28211:MDR INFO
+1-1073-28212:SPUTNIK
+1-1073-28213:RADIO MULTIKULTI
+1-1073-28214:SWR2
+1-1073-28215:WDR3
+1-1073-28216:WDR5
+1-1073-28224:NDR FERNSEHEN MV
+1-1073-28225:NDR FERNSEHEN HH
+1-1073-28226:NDR FERNSEHEN NDS
+1-1073-28227:NDR FERNSEHEN SH
+1-1073-28228:MDR FERNSEHEN S
+1-1073-28229:MDR FERNSEHEN SA
+1-1073-28230:MDR FERNSEHEN TH
+1-1073-28231:SUEDWEST FS RP
+1-1074-8353:KTO
+1-1074-8355:MATCH TV
+1-1076-8151:EUROSPORT
+1-1076-8156:LCI
+1-1079-28006:ZDF
+1-1079-28007:3SAT
+1-1079-28008:KIKA
+1-1079-28009:EUROSPORT
+1-1079-28011:ZDF INFOKANAL
+1-1079-28012:DEUTSCHKANDRADIO BERLIN
+1-1079-28013:DEUTSCHLANDFUNK KOELN
+1-1079-28014:ZDF DOKUKANAL
+1-1079-28015:EURONEWS
+1-1079-28016:ZDF THEATERKANAL
+1-1079-28017:OESTERREICH 1
+1-1080-8801:FRANCE2
+1-1080-8802:FRANCE3
+1-1082-20001:PRO SIEBEN SCHWEIZ
+1-1082-20002:PRO SIEBEN AUSTRIA
+1-1082-20003:KABEL 1 SCHWEIZ
+1-1082-20004:KABEL 1 AUSTRIA
+1-1082-20005:SAT1 AUSTRIA
+1-1089-12003:RTL TELEVISION
+1-1089-12020:RTL 2
+1-1089-12040:SUPER RTL
+1-1089-12060:VOX
+1-1089-12080:RTL SHOP
+1-1089-12085:RTL AUSTRIA
+1-1090-8501:FRANCE5
+1-1090-8505:BLOOMBERG TV
+1-1090-8506:LCP
+1-1090-8529:RIRE ET CHANSONS
+1-1090-8536:NRJ
+1-1090-8537:EUROPE 2
+1-1090-8544:VIBRATION
+1-1090-8545:CONTACT FM
+1-1090-8548:CHERIE FM
+1-1090-8549:ALOUETTE
+1-1090-8550:VOLTAGE
+1-1090-8552:ADO FM
+1-1090-8553:RSR COULEUR 3
+1-1090-8559:MEDIA TROPICAL
+1-1091-28640:MTV 2 POP CHANNEL
+1-1091-28800:RTL AUSTRIA
+1-1091-28805:VOX AUSTRIA
+1-1091-28810:RTL 2 AUSTRIA
+1-1091-28815:SUPER RTL AUSTRIA
+1-1091-31210:BTV
+1-1091-31230:TV6
+1-1094-17020:AB MOTEURS
+1-1094-12021:AB1
+1-1094-17022:ANIMAUX
+1-1094-17024:ZIK
+1-1094-17027:BBC WORLD
+1-1094-17028:RFM-TV
+1-1094-17029:FASHION TV
+1-1094-17030:ACTION
+1-1094-17032:CINE BOX
+1-1096-8612:CANAL CLUB
+1-1096-8613:BEUR TV
+1-1099-20312:ANIMAL PLANET
+1-1099-20316:FOX KIDS
+1-1099-20319:HALLMARK
+1-1101-28106:DAS ERSTE
+1-1101-28107:BAYERISCHES FERNSEHEN
+1-1101-28108:HESSEN FERNSEHEN
+1-1101-28109:ARTE
+1-1101-28110:SR FERNSEHEN SW
+1-1101-28111:WDR
+1-1101-28112:BR-ALPHA
+1-1101-28113:SUEDWEST FS BW
+1-1101-28114:PHOENIX
+1-1101-28120:BAYERN4 KLASSIK
+1-1101-28121:B5 AKTUELL
+1-1101-28122:HR SKYLINE
+1-1101-28123:HR2
+1-1101-28124:HR KLASSIK
+1-1101-28125:YOU FM
+1-1101-28126:BAYERN1
+1-1101-28127:NDR INFO
+1-1101-28128:NORDWEST RADIO
+1-1101-28129:SR 1
+1-1108-3994:RTL TELE LETZEBURG
+1-1108-12100:QVC GERMANY
+1-1108-12120:VIVA PLUS
+1-1108-12160:BLOOMBERG TV
+1-1110-9301:FESTIVAL
+1-1110-9302:HISTOIRE
+1-1110-9307:LIVE 1
+1-1111-7268:OTTO SHOP
+1-1112-3982:RTBF SAT
+1-1112-12199:LIBERTY TV
+1-1112-12200:CNBC EUROPE
+1-1112-12240:TV5 EUROPE
+1-1112-12280:LIBERTY TV
+1-1112-12301:TV6
+1-1112-12320:WISHLINE
+1-1112-12340:BBC WORLD
+1-1112-12341:CFN RFC
+1-1113-12600:BAHN TV
+1-1113-12601:K-TV
+1-1113-12602:XXP
+1-1113-12614:RHEIN MAIN TV
+1-1113-12650:RADIO MARIA
+1-1113-12660:HITRADIO FFH
+1-1113-12661:PLANET RADIO
+1-1113-12662:HARMONY FM
+1-1114-8906:DISNEY CHANNEL
+1-1114-8907:PLAYHOUSE DISNEY
+1-1114-8910:MOTORS TV
+1-1116-12730:N-TV
+1-1116-12732:VIVA
+1-1116-12750:HOERZU DIGITAL
+1-1117-13001:ORF 1
+1-1117-13002:ORF 2
+1-1117-13003:ORF 2 WIEN
+1-1117-13004:ORF 2 NIEDEROESTERREICH
+1-1117-13005:ORF 2 BURGENLAND
+1-1117-13006:ORF 2 OBEROESTERREICH
+1-1117-13007:ORF 2 SALZBURG
+1-1117-13008:ORF 2 TIROL
+1-1117-13009:ORF 2 VORARLBERG
+1-1117-13010:ORF 2 STEIERMARK
+1-1117-13011:ORF 2 KAERNTEN
+1-1117-13012:ATVPLUS
+1-1117-13013:TW1
+1-1117-13021:OESTERREICH 1
+1-1117-13033:OESTERREICH 3
+1-1117-13034:FM4
+1-1201-28305:WDR
+1-1201-28306:WDR
+1-1201-28307:WDR
+1-1201-28308:WDR
+1-1201-28309:WDR
+1-1201-28310:WDR
+1-1201-28311:WDR
+1-1201-28312:WDR
+1-1279-20321:EUROSPORT
+1-1279-20322:MTV CENTRAL
+1-1279-20323:HALLMARK
+1-1279-20328:BBC PRIME
+53-1097-2004:RTL4
+53-1097-2005:RTL5
+53-1097-2020:ANIMAL PLANET
+53-1097-2025:EUROSPORT
+53-1097-2030:BBC PRIME
+53-1097-2035:HALLMARK
+53-1097-2051:RTL RADIO
+53-1105-4009:X-ZONE
+53-1105-4011:NED1
+53-1105-4012:NED2
+53-1105-4013:NED3
+53-1105-4020:YAM FM
+53-1105-4030:RTL FM
+53-1109-5004:NET5
+53-1109-5005:SBS6
+53-1109-5015:TMF
+53-1109-5025:BVN
+53-1109-5050:YORIN FM
+53-1109-5055:KINK FM
+53-1109-5070:SKY RADIO NL
+53-1109-5072:RADIO 538
+53-1109-5085:RADIO 10 GOLD
+53-1109-5095:VERONICA RADIO
+133-1-15:CLASSICA
+133-1-21:BEATE-UHSE.TV
+133-1-22:HEIMATKANAL
+133-1-212:PREMIERE DIREKT 3
+133-1-518:GOLDSTAR TV
+133-1-778:PREMIERE EROTIK 1
+133-1-779:PREMIERE EROTIK 2
+133-2-8:PREMIERE START
+133-2-9:PREMIERE4
+133-2-10:PREMIERE1
+133-2-11:PREMIERE2
+133-2-20:PREMIERE7
+133-2-29:REMIERE5
+133-2-41:PREMIERE6
+133-2-43:PREMIERE3
+133-3-17:PREMIERE SPORT1
+133-3-240:PREMIERE DIREKT 1
+133-3-241:PREMIERE DIREKT 1
+133-3-242:PREMIERE DIREKT 1
+133-3-243:PREMIERE DIREKT 2
+133-3-244:PREMIERE DIREKT 2
+133-3-245:PREMIERE DIREKT 2
+133-4-16:PREMIERE SERIE
+133-4-18:PREMIERE DIREKT PORTAL
+133-4-23:PREMIERE KRIMI
+133-4-27:PREMIERE SPORT2
+133-4-208:PREMIERE DIREKT 2
+133-4-209:PREMIERE DIREKT 3
+133-4-210:PREMIERE DIREKT 3
+133-4-513:PREMIERE EROTIK
+133-4-516:PREMIERE NOSTALGIE
+133-7-48:SAT1 SCHWEIZ
+133-7-53:PREMIERE AUSTRIA
+133-7-54:LASTMINUTE
+133-7-160:ROCK ANTENNE
+133-7-161:ERF RADIO
+133-7-169:SUNSHINE LIVE
+133-7-170:ANTENNE BAYERN
+133-7-514:ONTV
+133-7-769:TV TRAVEL SHOP
+133-7-772:TV BERLIN
+133-7-775:FRANKEN SAT
+133-17-12:ANIMAL PLANET
+133-17-13:PLANET
+133-17-14:DISCOVERY CHANNEL
+133-17-19:JUNIOR
+133-17-28:FOX KIDS
+133-17-34:DISNEY CHANNEL
+133-17-42:13TH STREET
+133-17-211:PREMIERE DIREKT 3
+133-17-515:MGM
+133-33-32:SONNENKLAR TV
+133-33-40:HSE24
+133-33-46:SAT1
+133-33-47:N24
+133-33-51:TELE 5
+133-33-897:NEUN LIVE
+133-33-898:PRO SIEBEN
+133-33-899:KABEL 1
+133-33-900:DSF
+8468-258-11:RBB BRANDENBURG
+8468-258-12:RBB BERLIN
+8468-258-13:PHOENIX
+8468-258-14:DAS ERSTE
+8468-514-514:ZDF
+8468-514-515:ZDF INFO-3SAT
+8468-514-517:ZDF DOKU-KIKA
+8468-769-16394:KABEL 1
+8468-769-16398:N24
+8468-769-16403:PRO SIEBEN
+8468-769-16408:SAT1
+8468-771-16624:PRO SIEBEN
+8468-773-16405:RTL TELEVISION
+8468-773-16406:RTL 2
+8468-773-16411:SUPER RTL
+8468-773-16418:VOX
+8468-774-16392:DSF
+8468-774-16401:NEUN LIVE
+8468-774-16417:VIVA PLUS
+8468-774-16420:EUROSPORT
+8468-2561-128:DAS ERSTE
+8468-2561-2:ARTE
+8468-2561-3:PHOENIX
+8468-2561-4:EXTRA 1
+8468-2818-16405:RTL TELEVISION
+8468-2818-16406:RTL 2
+8468-2818-16411:SUPER RTL
+8468-2818-16418:VOX
+8468-3074-16394:KABEL 1
+8468-3074-16398:N24
+8468-3074-16403:PRO SIEBEN
+8468-3074-16408:SAT1
+8468-514-514:ZDF
+8468-514-515:ZDF INFO-3SAT
+8468-514-517:ZDF DOKU-KIKA
+8468-5633-100:MDR FERNSEHEN
+8468-5633-131:NDR FERNSEHEN SH
+8468-5633-262:WDR
+8468-5633-34:BAYERISCHES FERNSEHEN
+8468-5889-16401:NEUN LIVE
+8468-5889-16413:TELE 5
+8468-5889-16420:EUROSPORT
+61441-10000-50110:1-2-3 TV
+61441-10000-53001:BBC WORLD
+61441-10000-53002:TELE 5
+61441-10000-53004:BLOOMBERG TV
+61441-10000-53005:MTV
+61441-10000-53006:NICK
+61441-10000-53007:TV 5
+61441-10002-50106:SCIFI
+61441-10002-50702:SAILING CHANNEL
+61441-10002-50703:MTV DANCE
+61441-10002-50704:MTV HITS
+61441-10002-50705:K-TV
+61441-10002-50706:GAMES TV
+61441-10002-50707:PLAYBOY TV
+61441-10002-50708:NATIONAL GEOGRAPHIC
+61441-10002-50709:DISNEY PLAYHOUSE
+61441-10002-50710:DISNEY TOON +1
+61441-10002-53401:SPIEGEL TV XXP
+61441-10003-50102:MOTORS TV
+61441-10003-50103:TRACE TV
+61441-10003-50105:PLANET
+61441-10003-50108:KINOWELT
+61441-10003-50109:WETTER FERNSEHEN
+61441-10003-50111:GUTE LAUNE TV
+61441-10003-53301:HISTORY CHANNEL
+61441-10003-53302:TV GUSTO
+61441-10004-53403:BIBEL TV
+61441-10004-53406:BBC PRIME
+61441-10004-53409:EXTREME SPORTS
+61441-10005-50101:FASHION TV
+61441-10005-50104:E ENTERTAINMENT
+61441-10005-50107:13TH STREET
+61441-10005-50301:ESPN CLASSIC SPORT
+61441-10005-50302:VH1 CLASSIC
+61441-10005-50303:WEIN TV
+61441-10005-50304:AXN
+61441-10005-50305:SILVERLINE
+61441-10005-50306:NASN
+61441-10005-50307:DISNEY TOON
+
diff --git a/graphlcd/logos/1-2-3 TV_l.glcd b/graphlcd/logos/1-2-3 TV_l.glcd Binary files differnew file mode 100644 index 0000000..ddb538f --- /dev/null +++ b/graphlcd/logos/1-2-3 TV_l.glcd diff --git a/graphlcd/logos/123SAT_l.glcd b/graphlcd/logos/123SAT_l.glcd Binary files differnew file mode 100644 index 0000000..84ed40f --- /dev/null +++ b/graphlcd/logos/123SAT_l.glcd diff --git a/graphlcd/logos/13TH STREET_l.glcd b/graphlcd/logos/13TH STREET_l.glcd Binary files differnew file mode 100644 index 0000000..6c1186e --- /dev/null +++ b/graphlcd/logos/13TH STREET_l.glcd diff --git a/graphlcd/logos/13TH STREET_m.glcd b/graphlcd/logos/13TH STREET_m.glcd Binary files differnew file mode 100644 index 0000000..99967b7 --- /dev/null +++ b/graphlcd/logos/13TH STREET_m.glcd diff --git a/graphlcd/logos/2M MAROC_m.glcd b/graphlcd/logos/2M MAROC_m.glcd Binary files differnew file mode 100644 index 0000000..07b58c7 --- /dev/null +++ b/graphlcd/logos/2M MAROC_m.glcd diff --git a/graphlcd/logos/3NET_l.glcd b/graphlcd/logos/3NET_l.glcd Binary files differnew file mode 100644 index 0000000..373524f --- /dev/null +++ b/graphlcd/logos/3NET_l.glcd diff --git a/graphlcd/logos/3NET_m.glcd b/graphlcd/logos/3NET_m.glcd Binary files differnew file mode 100644 index 0000000..c3c3d15 --- /dev/null +++ b/graphlcd/logos/3NET_m.glcd diff --git a/graphlcd/logos/3SAT_l.glcd b/graphlcd/logos/3SAT_l.glcd Binary files differnew file mode 100644 index 0000000..2e6a090 --- /dev/null +++ b/graphlcd/logos/3SAT_l.glcd diff --git a/graphlcd/logos/3SAT_m.glcd b/graphlcd/logos/3SAT_m.glcd Binary files differnew file mode 100644 index 0000000..0e36114 --- /dev/null +++ b/graphlcd/logos/3SAT_m.glcd diff --git a/graphlcd/logos/40 TV_m.glcd b/graphlcd/logos/40 TV_m.glcd Binary files differnew file mode 100644 index 0000000..d5b2b32 --- /dev/null +++ b/graphlcd/logos/40 TV_m.glcd diff --git a/graphlcd/logos/AB MOTEURS_l.glcd b/graphlcd/logos/AB MOTEURS_l.glcd Binary files differnew file mode 100644 index 0000000..30cd306 --- /dev/null +++ b/graphlcd/logos/AB MOTEURS_l.glcd diff --git a/graphlcd/logos/AB MOTEURS_m.glcd b/graphlcd/logos/AB MOTEURS_m.glcd Binary files differnew file mode 100644 index 0000000..295a143 --- /dev/null +++ b/graphlcd/logos/AB MOTEURS_m.glcd diff --git a/graphlcd/logos/AB1_l.glcd b/graphlcd/logos/AB1_l.glcd Binary files differnew file mode 100644 index 0000000..5512b78 --- /dev/null +++ b/graphlcd/logos/AB1_l.glcd diff --git a/graphlcd/logos/AB1_m.glcd b/graphlcd/logos/AB1_m.glcd Binary files differnew file mode 100644 index 0000000..8dbea74 --- /dev/null +++ b/graphlcd/logos/AB1_m.glcd diff --git a/graphlcd/logos/ACTION_m.glcd b/graphlcd/logos/ACTION_m.glcd Binary files differnew file mode 100644 index 0000000..202f153 --- /dev/null +++ b/graphlcd/logos/ACTION_m.glcd diff --git a/graphlcd/logos/ADO FM_l.glcd b/graphlcd/logos/ADO FM_l.glcd Binary files differnew file mode 100644 index 0000000..de4b32c --- /dev/null +++ b/graphlcd/logos/ADO FM_l.glcd diff --git a/graphlcd/logos/ADO FM_m.glcd b/graphlcd/logos/ADO FM_m.glcd Binary files differnew file mode 100644 index 0000000..8c0b06c --- /dev/null +++ b/graphlcd/logos/ADO FM_m.glcd diff --git a/graphlcd/logos/AL JAZEERA_l.glcd b/graphlcd/logos/AL JAZEERA_l.glcd Binary files differnew file mode 100644 index 0000000..76ba7c8 --- /dev/null +++ b/graphlcd/logos/AL JAZEERA_l.glcd diff --git a/graphlcd/logos/AL JAZEERA_m.glcd b/graphlcd/logos/AL JAZEERA_m.glcd Binary files differnew file mode 100644 index 0000000..54132b6 --- /dev/null +++ b/graphlcd/logos/AL JAZEERA_m.glcd diff --git a/graphlcd/logos/ALGERIE_l.glcd b/graphlcd/logos/ALGERIE_l.glcd Binary files differnew file mode 100644 index 0000000..941578e --- /dev/null +++ b/graphlcd/logos/ALGERIE_l.glcd diff --git a/graphlcd/logos/ALGERIE_m.glcd b/graphlcd/logos/ALGERIE_m.glcd Binary files differnew file mode 100644 index 0000000..387c98f --- /dev/null +++ b/graphlcd/logos/ALGERIE_m.glcd diff --git a/graphlcd/logos/ALOUETTE_l.glcd b/graphlcd/logos/ALOUETTE_l.glcd Binary files differnew file mode 100644 index 0000000..03f5cc4 --- /dev/null +++ b/graphlcd/logos/ALOUETTE_l.glcd diff --git a/graphlcd/logos/ALOUETTE_m.glcd b/graphlcd/logos/ALOUETTE_m.glcd Binary files differnew file mode 100644 index 0000000..e1b8c38 --- /dev/null +++ b/graphlcd/logos/ALOUETTE_m.glcd diff --git a/graphlcd/logos/ANIMAL PLANET_l.glcd b/graphlcd/logos/ANIMAL PLANET_l.glcd Binary files differnew file mode 100644 index 0000000..bf7bf4b --- /dev/null +++ b/graphlcd/logos/ANIMAL PLANET_l.glcd diff --git a/graphlcd/logos/ANIMAL PLANET_m.glcd b/graphlcd/logos/ANIMAL PLANET_m.glcd Binary files differnew file mode 100644 index 0000000..7c5cf8f --- /dev/null +++ b/graphlcd/logos/ANIMAL PLANET_m.glcd diff --git a/graphlcd/logos/ANIMAUX_l.glcd b/graphlcd/logos/ANIMAUX_l.glcd Binary files differnew file mode 100644 index 0000000..da5b6a5 --- /dev/null +++ b/graphlcd/logos/ANIMAUX_l.glcd diff --git a/graphlcd/logos/ANTENNE BAYERN_l.glcd b/graphlcd/logos/ANTENNE BAYERN_l.glcd Binary files differnew file mode 100644 index 0000000..b38bfaf --- /dev/null +++ b/graphlcd/logos/ANTENNE BAYERN_l.glcd diff --git a/graphlcd/logos/ANTENNE BAYERN_m.glcd b/graphlcd/logos/ANTENNE BAYERN_m.glcd Binary files differnew file mode 100644 index 0000000..2bca2b4 --- /dev/null +++ b/graphlcd/logos/ANTENNE BAYERN_m.glcd diff --git a/graphlcd/logos/ANTENNE BAYERN_v2_m.glcd b/graphlcd/logos/ANTENNE BAYERN_v2_m.glcd Binary files differnew file mode 100644 index 0000000..9ca0433 --- /dev/null +++ b/graphlcd/logos/ANTENNE BAYERN_v2_m.glcd diff --git a/graphlcd/logos/ARTE_l.glcd b/graphlcd/logos/ARTE_l.glcd Binary files differnew file mode 100644 index 0000000..c2f575e --- /dev/null +++ b/graphlcd/logos/ARTE_l.glcd diff --git a/graphlcd/logos/ARTE_m.glcd b/graphlcd/logos/ARTE_m.glcd Binary files differnew file mode 100644 index 0000000..ca150b1 --- /dev/null +++ b/graphlcd/logos/ARTE_m.glcd diff --git a/graphlcd/logos/ATVPLUS_l.glcd b/graphlcd/logos/ATVPLUS_l.glcd Binary files differnew file mode 100644 index 0000000..6751fc1 --- /dev/null +++ b/graphlcd/logos/ATVPLUS_l.glcd diff --git a/graphlcd/logos/ATVPLUS_m.glcd b/graphlcd/logos/ATVPLUS_m.glcd Binary files differnew file mode 100644 index 0000000..a5bc829 --- /dev/null +++ b/graphlcd/logos/ATVPLUS_m.glcd diff --git a/graphlcd/logos/AXN_l.glcd b/graphlcd/logos/AXN_l.glcd Binary files differnew file mode 100644 index 0000000..8eb1880 --- /dev/null +++ b/graphlcd/logos/AXN_l.glcd diff --git a/graphlcd/logos/AXN_m.glcd b/graphlcd/logos/AXN_m.glcd Binary files differnew file mode 100644 index 0000000..ddfd81a --- /dev/null +++ b/graphlcd/logos/AXN_m.glcd diff --git a/graphlcd/logos/B5 AKTUELL_l.glcd b/graphlcd/logos/B5 AKTUELL_l.glcd Binary files differnew file mode 100644 index 0000000..95830b7 --- /dev/null +++ b/graphlcd/logos/B5 AKTUELL_l.glcd diff --git a/graphlcd/logos/B5 AKTUELL_m.glcd b/graphlcd/logos/B5 AKTUELL_m.glcd Binary files differnew file mode 100644 index 0000000..6c8a481 --- /dev/null +++ b/graphlcd/logos/B5 AKTUELL_m.glcd diff --git a/graphlcd/logos/B5 AKTUELL_v2_m.glcd b/graphlcd/logos/B5 AKTUELL_v2_m.glcd Binary files differnew file mode 100644 index 0000000..554903a --- /dev/null +++ b/graphlcd/logos/B5 AKTUELL_v2_m.glcd diff --git a/graphlcd/logos/BAHN TV_l.glcd b/graphlcd/logos/BAHN TV_l.glcd Binary files differnew file mode 100644 index 0000000..bf92d26 --- /dev/null +++ b/graphlcd/logos/BAHN TV_l.glcd diff --git a/graphlcd/logos/BAHN TV_m.glcd b/graphlcd/logos/BAHN TV_m.glcd Binary files differnew file mode 100644 index 0000000..cef8da8 --- /dev/null +++ b/graphlcd/logos/BAHN TV_m.glcd diff --git a/graphlcd/logos/BAHN TV_v2_m.glcd b/graphlcd/logos/BAHN TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..fea2765 --- /dev/null +++ b/graphlcd/logos/BAHN TV_v2_m.glcd diff --git a/graphlcd/logos/BAYERISCHES FERNSEHEN_l.glcd b/graphlcd/logos/BAYERISCHES FERNSEHEN_l.glcd Binary files differnew file mode 100644 index 0000000..c0b93e6 --- /dev/null +++ b/graphlcd/logos/BAYERISCHES FERNSEHEN_l.glcd diff --git a/graphlcd/logos/BAYERISCHES FERNSEHEN_m.glcd b/graphlcd/logos/BAYERISCHES FERNSEHEN_m.glcd Binary files differnew file mode 100644 index 0000000..a224e95 --- /dev/null +++ b/graphlcd/logos/BAYERISCHES FERNSEHEN_m.glcd diff --git a/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_l.glcd b/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_l.glcd Binary files differnew file mode 100644 index 0000000..ad7d919 --- /dev/null +++ b/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_l.glcd diff --git a/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_m.glcd b/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_m.glcd Binary files differnew file mode 100644 index 0000000..9b6b4f2 --- /dev/null +++ b/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_m.glcd diff --git a/graphlcd/logos/BAYERN1_l.glcd b/graphlcd/logos/BAYERN1_l.glcd Binary files differnew file mode 100644 index 0000000..e308876 --- /dev/null +++ b/graphlcd/logos/BAYERN1_l.glcd diff --git a/graphlcd/logos/BAYERN1_m.glcd b/graphlcd/logos/BAYERN1_m.glcd Binary files differnew file mode 100644 index 0000000..e3bf771 --- /dev/null +++ b/graphlcd/logos/BAYERN1_m.glcd diff --git a/graphlcd/logos/BAYERN4 KLASSIK_l.glcd b/graphlcd/logos/BAYERN4 KLASSIK_l.glcd Binary files differnew file mode 100644 index 0000000..72670c2 --- /dev/null +++ b/graphlcd/logos/BAYERN4 KLASSIK_l.glcd diff --git a/graphlcd/logos/BAYERN4 KLASSIK_m.glcd b/graphlcd/logos/BAYERN4 KLASSIK_m.glcd Binary files differnew file mode 100644 index 0000000..d6d720d --- /dev/null +++ b/graphlcd/logos/BAYERN4 KLASSIK_m.glcd diff --git a/graphlcd/logos/BBC PRIME_l.glcd b/graphlcd/logos/BBC PRIME_l.glcd Binary files differnew file mode 100644 index 0000000..c53afba --- /dev/null +++ b/graphlcd/logos/BBC PRIME_l.glcd diff --git a/graphlcd/logos/BBC PRIME_m.glcd b/graphlcd/logos/BBC PRIME_m.glcd Binary files differnew file mode 100644 index 0000000..0ea7b4d --- /dev/null +++ b/graphlcd/logos/BBC PRIME_m.glcd diff --git a/graphlcd/logos/BBC WORLD_l.glcd b/graphlcd/logos/BBC WORLD_l.glcd Binary files differnew file mode 100644 index 0000000..8c4c191 --- /dev/null +++ b/graphlcd/logos/BBC WORLD_l.glcd diff --git a/graphlcd/logos/BBC WORLD_m.glcd b/graphlcd/logos/BBC WORLD_m.glcd Binary files differnew file mode 100644 index 0000000..71b132f --- /dev/null +++ b/graphlcd/logos/BBC WORLD_m.glcd diff --git a/graphlcd/logos/BBC WORLD_v2_l.glcd b/graphlcd/logos/BBC WORLD_v2_l.glcd Binary files differnew file mode 100644 index 0000000..ccf90a2 --- /dev/null +++ b/graphlcd/logos/BBC WORLD_v2_l.glcd diff --git a/graphlcd/logos/BBC WORLD_v2_m.glcd b/graphlcd/logos/BBC WORLD_v2_m.glcd Binary files differnew file mode 100644 index 0000000..7c52215 --- /dev/null +++ b/graphlcd/logos/BBC WORLD_v2_m.glcd diff --git a/graphlcd/logos/BEATE-UHSE.TV_l.glcd b/graphlcd/logos/BEATE-UHSE.TV_l.glcd Binary files differnew file mode 100644 index 0000000..0040c04 --- /dev/null +++ b/graphlcd/logos/BEATE-UHSE.TV_l.glcd diff --git a/graphlcd/logos/BEATE-UHSE.TV_m.glcd b/graphlcd/logos/BEATE-UHSE.TV_m.glcd Binary files differnew file mode 100644 index 0000000..40a8589 --- /dev/null +++ b/graphlcd/logos/BEATE-UHSE.TV_m.glcd diff --git a/graphlcd/logos/BEATE-UHSE.TV_v2_l.glcd b/graphlcd/logos/BEATE-UHSE.TV_v2_l.glcd Binary files differnew file mode 100644 index 0000000..7981193 --- /dev/null +++ b/graphlcd/logos/BEATE-UHSE.TV_v2_l.glcd diff --git a/graphlcd/logos/BEUR TV_l.glcd b/graphlcd/logos/BEUR TV_l.glcd Binary files differnew file mode 100644 index 0000000..314a4b0 --- /dev/null +++ b/graphlcd/logos/BEUR TV_l.glcd diff --git a/graphlcd/logos/BEUR TV_m.glcd b/graphlcd/logos/BEUR TV_m.glcd Binary files differnew file mode 100644 index 0000000..3caa32d --- /dev/null +++ b/graphlcd/logos/BEUR TV_m.glcd diff --git a/graphlcd/logos/BEUR TV_v2_m.glcd b/graphlcd/logos/BEUR TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..07f548e --- /dev/null +++ b/graphlcd/logos/BEUR TV_v2_m.glcd diff --git a/graphlcd/logos/BIBEL TV_l.glcd b/graphlcd/logos/BIBEL TV_l.glcd Binary files differnew file mode 100644 index 0000000..3b62042 --- /dev/null +++ b/graphlcd/logos/BIBEL TV_l.glcd diff --git a/graphlcd/logos/BIBEL TV_m.glcd b/graphlcd/logos/BIBEL TV_m.glcd Binary files differnew file mode 100644 index 0000000..30967af --- /dev/null +++ b/graphlcd/logos/BIBEL TV_m.glcd diff --git a/graphlcd/logos/BIBEL TV_v2_m.glcd b/graphlcd/logos/BIBEL TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..c9d9045 --- /dev/null +++ b/graphlcd/logos/BIBEL TV_v2_m.glcd diff --git a/graphlcd/logos/BLOOMBERG TV_l.glcd b/graphlcd/logos/BLOOMBERG TV_l.glcd Binary files differnew file mode 100644 index 0000000..f693de2 --- /dev/null +++ b/graphlcd/logos/BLOOMBERG TV_l.glcd diff --git a/graphlcd/logos/BLOOMBERG TV_m.glcd b/graphlcd/logos/BLOOMBERG TV_m.glcd Binary files differnew file mode 100644 index 0000000..22dc275 --- /dev/null +++ b/graphlcd/logos/BLOOMBERG TV_m.glcd diff --git a/graphlcd/logos/BR-ALPHA_l.glcd b/graphlcd/logos/BR-ALPHA_l.glcd Binary files differnew file mode 100644 index 0000000..89f455a --- /dev/null +++ b/graphlcd/logos/BR-ALPHA_l.glcd diff --git a/graphlcd/logos/BR-ALPHA_m.glcd b/graphlcd/logos/BR-ALPHA_m.glcd Binary files differnew file mode 100644 index 0000000..9b48f64 --- /dev/null +++ b/graphlcd/logos/BR-ALPHA_m.glcd diff --git a/graphlcd/logos/BR-ALPHA_v2_l.glcd b/graphlcd/logos/BR-ALPHA_v2_l.glcd Binary files differnew file mode 100644 index 0000000..bcb323b --- /dev/null +++ b/graphlcd/logos/BR-ALPHA_v2_l.glcd diff --git a/graphlcd/logos/BR-ALPHA_v2_m.glcd b/graphlcd/logos/BR-ALPHA_v2_m.glcd Binary files differnew file mode 100644 index 0000000..9c1fa3d --- /dev/null +++ b/graphlcd/logos/BR-ALPHA_v2_m.glcd diff --git a/graphlcd/logos/BR-ALPHA_v3_m.glcd b/graphlcd/logos/BR-ALPHA_v3_m.glcd Binary files differnew file mode 100644 index 0000000..6de0d94 --- /dev/null +++ b/graphlcd/logos/BR-ALPHA_v3_m.glcd diff --git a/graphlcd/logos/BTV4_l.glcd b/graphlcd/logos/BTV4_l.glcd Binary files differnew file mode 100644 index 0000000..e82ca00 --- /dev/null +++ b/graphlcd/logos/BTV4_l.glcd diff --git a/graphlcd/logos/BTV4_m.glcd b/graphlcd/logos/BTV4_m.glcd Binary files differnew file mode 100644 index 0000000..4d5e9da --- /dev/null +++ b/graphlcd/logos/BTV4_m.glcd diff --git a/graphlcd/logos/BTV4_v2_l.glcd b/graphlcd/logos/BTV4_v2_l.glcd Binary files differnew file mode 100644 index 0000000..c059759 --- /dev/null +++ b/graphlcd/logos/BTV4_v2_l.glcd diff --git a/graphlcd/logos/BTV_l.glcd b/graphlcd/logos/BTV_l.glcd Binary files differnew file mode 100644 index 0000000..ffdf278 --- /dev/null +++ b/graphlcd/logos/BTV_l.glcd diff --git a/graphlcd/logos/BTV_m.glcd b/graphlcd/logos/BTV_m.glcd Binary files differnew file mode 100644 index 0000000..f270770 --- /dev/null +++ b/graphlcd/logos/BTV_m.glcd diff --git a/graphlcd/logos/BVN_l.glcd b/graphlcd/logos/BVN_l.glcd Binary files differnew file mode 100644 index 0000000..c8df29a --- /dev/null +++ b/graphlcd/logos/BVN_l.glcd diff --git a/graphlcd/logos/BVN_m.glcd b/graphlcd/logos/BVN_m.glcd Binary files differnew file mode 100644 index 0000000..132502b --- /dev/null +++ b/graphlcd/logos/BVN_m.glcd diff --git a/graphlcd/logos/BVN_v2_m.glcd b/graphlcd/logos/BVN_v2_m.glcd Binary files differnew file mode 100644 index 0000000..014673e --- /dev/null +++ b/graphlcd/logos/BVN_v2_m.glcd diff --git a/graphlcd/logos/CADENA DIAL_l.glcd b/graphlcd/logos/CADENA DIAL_l.glcd Binary files differnew file mode 100644 index 0000000..7cf6255 --- /dev/null +++ b/graphlcd/logos/CADENA DIAL_l.glcd diff --git a/graphlcd/logos/CADENA DIAL_m.glcd b/graphlcd/logos/CADENA DIAL_m.glcd Binary files differnew file mode 100644 index 0000000..b2ec34a --- /dev/null +++ b/graphlcd/logos/CADENA DIAL_m.glcd diff --git a/graphlcd/logos/CANAL 24 HORAS_l.glcd b/graphlcd/logos/CANAL 24 HORAS_l.glcd Binary files differnew file mode 100644 index 0000000..d725461 --- /dev/null +++ b/graphlcd/logos/CANAL 24 HORAS_l.glcd diff --git a/graphlcd/logos/CANAL 24 HORAS_m.glcd b/graphlcd/logos/CANAL 24 HORAS_m.glcd Binary files differnew file mode 100644 index 0000000..a71b55e --- /dev/null +++ b/graphlcd/logos/CANAL 24 HORAS_m.glcd diff --git a/graphlcd/logos/CANAL CANARIAS_l.glcd b/graphlcd/logos/CANAL CANARIAS_l.glcd Binary files differnew file mode 100644 index 0000000..2c0f53d --- /dev/null +++ b/graphlcd/logos/CANAL CANARIAS_l.glcd diff --git a/graphlcd/logos/CANAL CANARIAS_m.glcd b/graphlcd/logos/CANAL CANARIAS_m.glcd Binary files differnew file mode 100644 index 0000000..5870208 --- /dev/null +++ b/graphlcd/logos/CANAL CANARIAS_m.glcd diff --git a/graphlcd/logos/CANAL CANARIAS_v2_m.glcd b/graphlcd/logos/CANAL CANARIAS_v2_m.glcd Binary files differnew file mode 100644 index 0000000..f6b64c8 --- /dev/null +++ b/graphlcd/logos/CANAL CANARIAS_v2_m.glcd diff --git a/graphlcd/logos/CANAL CLUB_l.glcd b/graphlcd/logos/CANAL CLUB_l.glcd Binary files differnew file mode 100644 index 0000000..069af7c --- /dev/null +++ b/graphlcd/logos/CANAL CLUB_l.glcd diff --git a/graphlcd/logos/CANAL CLUB_m.glcd b/graphlcd/logos/CANAL CLUB_m.glcd Binary files differnew file mode 100644 index 0000000..ba74083 --- /dev/null +++ b/graphlcd/logos/CANAL CLUB_m.glcd diff --git a/graphlcd/logos/CANAL CLUB_v2_m.glcd b/graphlcd/logos/CANAL CLUB_v2_m.glcd Binary files differnew file mode 100644 index 0000000..8bafd90 --- /dev/null +++ b/graphlcd/logos/CANAL CLUB_v2_m.glcd diff --git a/graphlcd/logos/CANAL+ ...30_m.glcd b/graphlcd/logos/CANAL+ ...30_m.glcd Binary files differnew file mode 100644 index 0000000..eeb7d70 --- /dev/null +++ b/graphlcd/logos/CANAL+ ...30_m.glcd diff --git a/graphlcd/logos/CANAL+_m.glcd b/graphlcd/logos/CANAL+_m.glcd Binary files differnew file mode 100644 index 0000000..8e87caf --- /dev/null +++ b/graphlcd/logos/CANAL+_m.glcd diff --git a/graphlcd/logos/CARTOON NETWORK_l.glcd b/graphlcd/logos/CARTOON NETWORK_l.glcd Binary files differnew file mode 100644 index 0000000..1d315e0 --- /dev/null +++ b/graphlcd/logos/CARTOON NETWORK_l.glcd diff --git a/graphlcd/logos/CARTOON NETWORK_m.glcd b/graphlcd/logos/CARTOON NETWORK_m.glcd Binary files differnew file mode 100644 index 0000000..c5b7b30 --- /dev/null +++ b/graphlcd/logos/CARTOON NETWORK_m.glcd diff --git a/graphlcd/logos/CFN RFC_l.glcd b/graphlcd/logos/CFN RFC_l.glcd Binary files differnew file mode 100644 index 0000000..87d510e --- /dev/null +++ b/graphlcd/logos/CFN RFC_l.glcd diff --git a/graphlcd/logos/CFN RFC_m.glcd b/graphlcd/logos/CFN RFC_m.glcd Binary files differnew file mode 100644 index 0000000..94ed328 --- /dev/null +++ b/graphlcd/logos/CFN RFC_m.glcd diff --git a/graphlcd/logos/CHERIE FM_l.glcd b/graphlcd/logos/CHERIE FM_l.glcd Binary files differnew file mode 100644 index 0000000..d227f27 --- /dev/null +++ b/graphlcd/logos/CHERIE FM_l.glcd diff --git a/graphlcd/logos/CHERIE FM_m.glcd b/graphlcd/logos/CHERIE FM_m.glcd Binary files differnew file mode 100644 index 0000000..fc14a17 --- /dev/null +++ b/graphlcd/logos/CHERIE FM_m.glcd diff --git a/graphlcd/logos/CHRONOS_l.glcd b/graphlcd/logos/CHRONOS_l.glcd Binary files differnew file mode 100644 index 0000000..67d8418 --- /dev/null +++ b/graphlcd/logos/CHRONOS_l.glcd diff --git a/graphlcd/logos/CHRONOS_m.glcd b/graphlcd/logos/CHRONOS_m.glcd Binary files differnew file mode 100644 index 0000000..ec0fe09 --- /dev/null +++ b/graphlcd/logos/CHRONOS_m.glcd diff --git a/graphlcd/logos/CINE BOX_m.glcd b/graphlcd/logos/CINE BOX_m.glcd Binary files differnew file mode 100644 index 0000000..442f234 --- /dev/null +++ b/graphlcd/logos/CINE BOX_m.glcd diff --git a/graphlcd/logos/CLASSICA_l.glcd b/graphlcd/logos/CLASSICA_l.glcd Binary files differnew file mode 100644 index 0000000..f241e7b --- /dev/null +++ b/graphlcd/logos/CLASSICA_l.glcd diff --git a/graphlcd/logos/CLASSICA_m.glcd b/graphlcd/logos/CLASSICA_m.glcd Binary files differnew file mode 100644 index 0000000..e2f174f --- /dev/null +++ b/graphlcd/logos/CLASSICA_m.glcd diff --git a/graphlcd/logos/CLUB TELEACHAT_l.glcd b/graphlcd/logos/CLUB TELEACHAT_l.glcd Binary files differnew file mode 100644 index 0000000..50a260d --- /dev/null +++ b/graphlcd/logos/CLUB TELEACHAT_l.glcd diff --git a/graphlcd/logos/CLUB TELEACHAT_m.glcd b/graphlcd/logos/CLUB TELEACHAT_m.glcd Binary files differnew file mode 100644 index 0000000..a1ec468 --- /dev/null +++ b/graphlcd/logos/CLUB TELEACHAT_m.glcd diff --git a/graphlcd/logos/CLUB TELEACHAT_v2_m.glcd b/graphlcd/logos/CLUB TELEACHAT_v2_m.glcd Binary files differnew file mode 100644 index 0000000..e129033 --- /dev/null +++ b/graphlcd/logos/CLUB TELEACHAT_v2_m.glcd diff --git a/graphlcd/logos/CNBC EUROPE_l.glcd b/graphlcd/logos/CNBC EUROPE_l.glcd Binary files differnew file mode 100644 index 0000000..f9ec19f --- /dev/null +++ b/graphlcd/logos/CNBC EUROPE_l.glcd diff --git a/graphlcd/logos/CNBC EUROPE_m.glcd b/graphlcd/logos/CNBC EUROPE_m.glcd Binary files differnew file mode 100644 index 0000000..3245855 --- /dev/null +++ b/graphlcd/logos/CNBC EUROPE_m.glcd diff --git a/graphlcd/logos/CNBC_l.glcd b/graphlcd/logos/CNBC_l.glcd Binary files differnew file mode 100644 index 0000000..14a2d09 --- /dev/null +++ b/graphlcd/logos/CNBC_l.glcd diff --git a/graphlcd/logos/CNBC_m.glcd b/graphlcd/logos/CNBC_m.glcd Binary files differnew file mode 100644 index 0000000..bf88ac7 --- /dev/null +++ b/graphlcd/logos/CNBC_m.glcd diff --git a/graphlcd/logos/CNN INT_l.glcd b/graphlcd/logos/CNN INT_l.glcd Binary files differnew file mode 100644 index 0000000..9c9dde6 --- /dev/null +++ b/graphlcd/logos/CNN INT_l.glcd diff --git a/graphlcd/logos/CNN INT_m.glcd b/graphlcd/logos/CNN INT_m.glcd Binary files differnew file mode 100644 index 0000000..823483a --- /dev/null +++ b/graphlcd/logos/CNN INT_m.glcd diff --git a/graphlcd/logos/CNN+_m.glcd b/graphlcd/logos/CNN+_m.glcd Binary files differnew file mode 100644 index 0000000..fe93af9 --- /dev/null +++ b/graphlcd/logos/CNN+_m.glcd diff --git a/graphlcd/logos/CONTACT FM_l.glcd b/graphlcd/logos/CONTACT FM_l.glcd Binary files differnew file mode 100644 index 0000000..39edf44 --- /dev/null +++ b/graphlcd/logos/CONTACT FM_l.glcd diff --git a/graphlcd/logos/CONTACT FM_m.glcd b/graphlcd/logos/CONTACT FM_m.glcd Binary files differnew file mode 100644 index 0000000..e67d16a --- /dev/null +++ b/graphlcd/logos/CONTACT FM_m.glcd diff --git a/graphlcd/logos/DAS ERSTE_l.glcd b/graphlcd/logos/DAS ERSTE_l.glcd Binary files differnew file mode 100644 index 0000000..dd38c2f --- /dev/null +++ b/graphlcd/logos/DAS ERSTE_l.glcd diff --git a/graphlcd/logos/DAS ERSTE_m.glcd b/graphlcd/logos/DAS ERSTE_m.glcd Binary files differnew file mode 100644 index 0000000..95b8549 --- /dev/null +++ b/graphlcd/logos/DAS ERSTE_m.glcd diff --git a/graphlcd/logos/DAS ERSTE_v2_l.glcd b/graphlcd/logos/DAS ERSTE_v2_l.glcd Binary files differnew file mode 100644 index 0000000..3fb4ed8 --- /dev/null +++ b/graphlcd/logos/DAS ERSTE_v2_l.glcd diff --git a/graphlcd/logos/DAS VIERTE_l.glcd b/graphlcd/logos/DAS VIERTE_l.glcd Binary files differnew file mode 100644 index 0000000..250b7ac --- /dev/null +++ b/graphlcd/logos/DAS VIERTE_l.glcd diff --git a/graphlcd/logos/DEUTSCHLANDFUNK KOELN_l.glcd b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_l.glcd Binary files differnew file mode 100644 index 0000000..068eb5d --- /dev/null +++ b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_l.glcd diff --git a/graphlcd/logos/DEUTSCHLANDFUNK KOELN_m.glcd b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_m.glcd Binary files differnew file mode 100644 index 0000000..cfcde86 --- /dev/null +++ b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_m.glcd diff --git a/graphlcd/logos/DEUTSCHLANDFUNK KOELN_v2_m.glcd b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_v2_m.glcd Binary files differnew file mode 100644 index 0000000..7907ad2 --- /dev/null +++ b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_v2_m.glcd diff --git a/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_l.glcd b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_l.glcd Binary files differnew file mode 100644 index 0000000..2a8e007 --- /dev/null +++ b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_l.glcd diff --git a/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_m.glcd b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_m.glcd Binary files differnew file mode 100644 index 0000000..bd35774 --- /dev/null +++ b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_m.glcd diff --git a/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_v2_m.glcd b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_v2_m.glcd Binary files differnew file mode 100644 index 0000000..19947a2 --- /dev/null +++ b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_v2_m.glcd diff --git a/graphlcd/logos/DISCOVERY CHANNEL_l.glcd b/graphlcd/logos/DISCOVERY CHANNEL_l.glcd Binary files differnew file mode 100644 index 0000000..1871981 --- /dev/null +++ b/graphlcd/logos/DISCOVERY CHANNEL_l.glcd diff --git a/graphlcd/logos/DISCOVERY CHANNEL_m.glcd b/graphlcd/logos/DISCOVERY CHANNEL_m.glcd Binary files differnew file mode 100644 index 0000000..fa9b349 --- /dev/null +++ b/graphlcd/logos/DISCOVERY CHANNEL_m.glcd diff --git a/graphlcd/logos/DISCOVERY CHANNEL_v2_l.glcd b/graphlcd/logos/DISCOVERY CHANNEL_v2_l.glcd Binary files differnew file mode 100644 index 0000000..cb9518d --- /dev/null +++ b/graphlcd/logos/DISCOVERY CHANNEL_v2_l.glcd diff --git a/graphlcd/logos/DISNEY CHANNEL_l.glcd b/graphlcd/logos/DISNEY CHANNEL_l.glcd Binary files differnew file mode 100644 index 0000000..ed63bcf --- /dev/null +++ b/graphlcd/logos/DISNEY CHANNEL_l.glcd diff --git a/graphlcd/logos/DISNEY CHANNEL_m.glcd b/graphlcd/logos/DISNEY CHANNEL_m.glcd Binary files differnew file mode 100644 index 0000000..1e8267e --- /dev/null +++ b/graphlcd/logos/DISNEY CHANNEL_m.glcd diff --git a/graphlcd/logos/DISNEY CHANNEL_v2_l.glcd b/graphlcd/logos/DISNEY CHANNEL_v2_l.glcd Binary files differnew file mode 100644 index 0000000..cbc7820 --- /dev/null +++ b/graphlcd/logos/DISNEY CHANNEL_v2_l.glcd diff --git a/graphlcd/logos/DISNEY PLAYHOUSE_l.glcd b/graphlcd/logos/DISNEY PLAYHOUSE_l.glcd Binary files differnew file mode 100644 index 0000000..778ad44 --- /dev/null +++ b/graphlcd/logos/DISNEY PLAYHOUSE_l.glcd diff --git a/graphlcd/logos/DISNEY TOON +1_l.glcd b/graphlcd/logos/DISNEY TOON +1_l.glcd Binary files differnew file mode 100644 index 0000000..5b1c984 --- /dev/null +++ b/graphlcd/logos/DISNEY TOON +1_l.glcd diff --git a/graphlcd/logos/DISNEY TOON_l.glcd b/graphlcd/logos/DISNEY TOON_l.glcd Binary files differnew file mode 100644 index 0000000..910501c --- /dev/null +++ b/graphlcd/logos/DISNEY TOON_l.glcd diff --git a/graphlcd/logos/DSF_l.glcd b/graphlcd/logos/DSF_l.glcd Binary files differnew file mode 100644 index 0000000..3848a34 --- /dev/null +++ b/graphlcd/logos/DSF_l.glcd diff --git a/graphlcd/logos/DSF_m.glcd b/graphlcd/logos/DSF_m.glcd Binary files differnew file mode 100644 index 0000000..4a2c1e8 --- /dev/null +++ b/graphlcd/logos/DSF_m.glcd diff --git a/graphlcd/logos/DW-TV_l.glcd b/graphlcd/logos/DW-TV_l.glcd Binary files differnew file mode 100644 index 0000000..5d2c3ef --- /dev/null +++ b/graphlcd/logos/DW-TV_l.glcd diff --git a/graphlcd/logos/DW-TV_m.glcd b/graphlcd/logos/DW-TV_m.glcd Binary files differnew file mode 100644 index 0000000..6eb1153 --- /dev/null +++ b/graphlcd/logos/DW-TV_m.glcd diff --git a/graphlcd/logos/E ENTERTAINMENT_l.glcd b/graphlcd/logos/E ENTERTAINMENT_l.glcd Binary files differnew file mode 100644 index 0000000..d7cb2ff --- /dev/null +++ b/graphlcd/logos/E ENTERTAINMENT_l.glcd diff --git a/graphlcd/logos/EINS EXTRA_l.glcd b/graphlcd/logos/EINS EXTRA_l.glcd Binary files differnew file mode 100644 index 0000000..5d27520 --- /dev/null +++ b/graphlcd/logos/EINS EXTRA_l.glcd diff --git a/graphlcd/logos/EINS EXTRA_m.glcd b/graphlcd/logos/EINS EXTRA_m.glcd Binary files differnew file mode 100644 index 0000000..c56e446 --- /dev/null +++ b/graphlcd/logos/EINS EXTRA_m.glcd diff --git a/graphlcd/logos/EINS EXTRA_v2_l.glcd b/graphlcd/logos/EINS EXTRA_v2_l.glcd Binary files differnew file mode 100644 index 0000000..0c6c5f5 --- /dev/null +++ b/graphlcd/logos/EINS EXTRA_v2_l.glcd diff --git a/graphlcd/logos/EINS EXTRA_v3_l.glcd b/graphlcd/logos/EINS EXTRA_v3_l.glcd Binary files differnew file mode 100644 index 0000000..8d28095 --- /dev/null +++ b/graphlcd/logos/EINS EXTRA_v3_l.glcd diff --git a/graphlcd/logos/EINS FESTIVAL_l.glcd b/graphlcd/logos/EINS FESTIVAL_l.glcd Binary files differnew file mode 100644 index 0000000..57377a8 --- /dev/null +++ b/graphlcd/logos/EINS FESTIVAL_l.glcd diff --git a/graphlcd/logos/EINS FESTIVAL_m.glcd b/graphlcd/logos/EINS FESTIVAL_m.glcd Binary files differnew file mode 100644 index 0000000..ccec283 --- /dev/null +++ b/graphlcd/logos/EINS FESTIVAL_m.glcd diff --git a/graphlcd/logos/EINS FESTIVAL_v2_l.glcd b/graphlcd/logos/EINS FESTIVAL_v2_l.glcd Binary files differnew file mode 100644 index 0000000..c9b7fd4 --- /dev/null +++ b/graphlcd/logos/EINS FESTIVAL_v2_l.glcd diff --git a/graphlcd/logos/EINS MUXX_l.glcd b/graphlcd/logos/EINS MUXX_l.glcd Binary files differnew file mode 100644 index 0000000..5ff62b5 --- /dev/null +++ b/graphlcd/logos/EINS MUXX_l.glcd diff --git a/graphlcd/logos/EINS MUXX_m.glcd b/graphlcd/logos/EINS MUXX_m.glcd Binary files differnew file mode 100644 index 0000000..8e4beca --- /dev/null +++ b/graphlcd/logos/EINS MUXX_m.glcd diff --git a/graphlcd/logos/EINS MUXX_v2_l.glcd b/graphlcd/logos/EINS MUXX_v2_l.glcd Binary files differnew file mode 100644 index 0000000..4669887 --- /dev/null +++ b/graphlcd/logos/EINS MUXX_v2_l.glcd diff --git a/graphlcd/logos/ERF RADIO_l.glcd b/graphlcd/logos/ERF RADIO_l.glcd Binary files differnew file mode 100644 index 0000000..ca71505 --- /dev/null +++ b/graphlcd/logos/ERF RADIO_l.glcd diff --git a/graphlcd/logos/ERF RADIO_m.glcd b/graphlcd/logos/ERF RADIO_m.glcd Binary files differnew file mode 100644 index 0000000..5b76db4 --- /dev/null +++ b/graphlcd/logos/ERF RADIO_m.glcd diff --git a/graphlcd/logos/ESC1-EGYPT_l.glcd b/graphlcd/logos/ESC1-EGYPT_l.glcd Binary files differnew file mode 100644 index 0000000..2a3a7c9 --- /dev/null +++ b/graphlcd/logos/ESC1-EGYPT_l.glcd diff --git a/graphlcd/logos/ESPN CLASSIC SPORT_l.glcd b/graphlcd/logos/ESPN CLASSIC SPORT_l.glcd Binary files differnew file mode 100644 index 0000000..6c44801 --- /dev/null +++ b/graphlcd/logos/ESPN CLASSIC SPORT_l.glcd diff --git a/graphlcd/logos/ETB SAT_l.glcd b/graphlcd/logos/ETB SAT_l.glcd Binary files differnew file mode 100644 index 0000000..e100d18 --- /dev/null +++ b/graphlcd/logos/ETB SAT_l.glcd diff --git a/graphlcd/logos/ETB SAT_m.glcd b/graphlcd/logos/ETB SAT_m.glcd Binary files differnew file mode 100644 index 0000000..5fc3657 --- /dev/null +++ b/graphlcd/logos/ETB SAT_m.glcd diff --git a/graphlcd/logos/EURONEWS_l.glcd b/graphlcd/logos/EURONEWS_l.glcd Binary files differnew file mode 100644 index 0000000..ef51c05 --- /dev/null +++ b/graphlcd/logos/EURONEWS_l.glcd diff --git a/graphlcd/logos/EURONEWS_m.glcd b/graphlcd/logos/EURONEWS_m.glcd Binary files differnew file mode 100644 index 0000000..85367d1 --- /dev/null +++ b/graphlcd/logos/EURONEWS_m.glcd diff --git a/graphlcd/logos/EUROPE 2_l.glcd b/graphlcd/logos/EUROPE 2_l.glcd Binary files differnew file mode 100644 index 0000000..3020976 --- /dev/null +++ b/graphlcd/logos/EUROPE 2_l.glcd diff --git a/graphlcd/logos/EUROPE 2_m.glcd b/graphlcd/logos/EUROPE 2_m.glcd Binary files differnew file mode 100644 index 0000000..688bea3 --- /dev/null +++ b/graphlcd/logos/EUROPE 2_m.glcd diff --git a/graphlcd/logos/EUROSPORT_l.glcd b/graphlcd/logos/EUROSPORT_l.glcd Binary files differnew file mode 100644 index 0000000..3a929f0 --- /dev/null +++ b/graphlcd/logos/EUROSPORT_l.glcd diff --git a/graphlcd/logos/EUROSPORT_m.glcd b/graphlcd/logos/EUROSPORT_m.glcd Binary files differnew file mode 100644 index 0000000..c41f51d --- /dev/null +++ b/graphlcd/logos/EUROSPORT_m.glcd diff --git a/graphlcd/logos/EXTRA 1_l.glcd b/graphlcd/logos/EXTRA 1_l.glcd Binary files differnew file mode 100644 index 0000000..694c965 --- /dev/null +++ b/graphlcd/logos/EXTRA 1_l.glcd diff --git a/graphlcd/logos/EXTREME SPORTS_l.glcd b/graphlcd/logos/EXTREME SPORTS_l.glcd Binary files differnew file mode 100644 index 0000000..4d43a09 --- /dev/null +++ b/graphlcd/logos/EXTREME SPORTS_l.glcd diff --git a/graphlcd/logos/FAB_l.glcd b/graphlcd/logos/FAB_l.glcd Binary files differnew file mode 100644 index 0000000..a048767 --- /dev/null +++ b/graphlcd/logos/FAB_l.glcd diff --git a/graphlcd/logos/FAB_m.glcd b/graphlcd/logos/FAB_m.glcd Binary files differnew file mode 100644 index 0000000..3d290ed --- /dev/null +++ b/graphlcd/logos/FAB_m.glcd diff --git a/graphlcd/logos/FAB_v2_m.glcd b/graphlcd/logos/FAB_v2_m.glcd Binary files differnew file mode 100644 index 0000000..f964628 --- /dev/null +++ b/graphlcd/logos/FAB_v2_m.glcd diff --git a/graphlcd/logos/FASHION TV_l.glcd b/graphlcd/logos/FASHION TV_l.glcd Binary files differnew file mode 100644 index 0000000..bc8e4ec --- /dev/null +++ b/graphlcd/logos/FASHION TV_l.glcd diff --git a/graphlcd/logos/FASHION TV_m.glcd b/graphlcd/logos/FASHION TV_m.glcd Binary files differnew file mode 100644 index 0000000..897fd5f --- /dev/null +++ b/graphlcd/logos/FASHION TV_m.glcd diff --git a/graphlcd/logos/FASHION TV_v2_m.glcd b/graphlcd/logos/FASHION TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..7c89848 --- /dev/null +++ b/graphlcd/logos/FASHION TV_v2_m.glcd diff --git a/graphlcd/logos/FESTIVAL 1_l.glcd b/graphlcd/logos/FESTIVAL 1_l.glcd Binary files differnew file mode 100644 index 0000000..d3e1b46 --- /dev/null +++ b/graphlcd/logos/FESTIVAL 1_l.glcd diff --git a/graphlcd/logos/FESTIVAL_m.glcd b/graphlcd/logos/FESTIVAL_m.glcd Binary files differnew file mode 100644 index 0000000..25fcea3 --- /dev/null +++ b/graphlcd/logos/FESTIVAL_m.glcd diff --git a/graphlcd/logos/FM4_l.glcd b/graphlcd/logos/FM4_l.glcd Binary files differnew file mode 100644 index 0000000..af43c43 --- /dev/null +++ b/graphlcd/logos/FM4_l.glcd diff --git a/graphlcd/logos/FM4_m.glcd b/graphlcd/logos/FM4_m.glcd Binary files differnew file mode 100644 index 0000000..80b9664 --- /dev/null +++ b/graphlcd/logos/FM4_m.glcd diff --git a/graphlcd/logos/FOX KIDS_l.glcd b/graphlcd/logos/FOX KIDS_l.glcd Binary files differnew file mode 100644 index 0000000..faac38a --- /dev/null +++ b/graphlcd/logos/FOX KIDS_l.glcd diff --git a/graphlcd/logos/FOX KIDS_m.glcd b/graphlcd/logos/FOX KIDS_m.glcd Binary files differnew file mode 100644 index 0000000..6a681a1 --- /dev/null +++ b/graphlcd/logos/FOX KIDS_m.glcd diff --git a/graphlcd/logos/FOX KIDS_v2_l.glcd b/graphlcd/logos/FOX KIDS_v2_l.glcd Binary files differnew file mode 100644 index 0000000..008f6c6 --- /dev/null +++ b/graphlcd/logos/FOX KIDS_v2_l.glcd diff --git a/graphlcd/logos/FOX KIDS_v2_m.glcd b/graphlcd/logos/FOX KIDS_v2_m.glcd Binary files differnew file mode 100644 index 0000000..09ad0b2 --- /dev/null +++ b/graphlcd/logos/FOX KIDS_v2_m.glcd diff --git a/graphlcd/logos/FOX NEWS_m.glcd b/graphlcd/logos/FOX NEWS_m.glcd Binary files differnew file mode 100644 index 0000000..82d60f9 --- /dev/null +++ b/graphlcd/logos/FOX NEWS_m.glcd diff --git a/graphlcd/logos/FOX_m.glcd b/graphlcd/logos/FOX_m.glcd Binary files differnew file mode 100644 index 0000000..73b376b --- /dev/null +++ b/graphlcd/logos/FOX_m.glcd diff --git a/graphlcd/logos/FRANCE2_l.glcd b/graphlcd/logos/FRANCE2_l.glcd Binary files differnew file mode 100644 index 0000000..a01db87 --- /dev/null +++ b/graphlcd/logos/FRANCE2_l.glcd diff --git a/graphlcd/logos/FRANCE2_m.glcd b/graphlcd/logos/FRANCE2_m.glcd Binary files differnew file mode 100644 index 0000000..8658df7 --- /dev/null +++ b/graphlcd/logos/FRANCE2_m.glcd diff --git a/graphlcd/logos/FRANCE3_l.glcd b/graphlcd/logos/FRANCE3_l.glcd Binary files differnew file mode 100644 index 0000000..fbea5ba --- /dev/null +++ b/graphlcd/logos/FRANCE3_l.glcd diff --git a/graphlcd/logos/FRANCE3_m.glcd b/graphlcd/logos/FRANCE3_m.glcd Binary files differnew file mode 100644 index 0000000..421e4e3 --- /dev/null +++ b/graphlcd/logos/FRANCE3_m.glcd diff --git a/graphlcd/logos/FRANCE5_l.glcd b/graphlcd/logos/FRANCE5_l.glcd Binary files differnew file mode 100644 index 0000000..bc3132a --- /dev/null +++ b/graphlcd/logos/FRANCE5_l.glcd diff --git a/graphlcd/logos/FRANCE5_m.glcd b/graphlcd/logos/FRANCE5_m.glcd Binary files differnew file mode 100644 index 0000000..03cdbd3 --- /dev/null +++ b/graphlcd/logos/FRANCE5_m.glcd diff --git a/graphlcd/logos/FRANKEN SAT_l.glcd b/graphlcd/logos/FRANKEN SAT_l.glcd Binary files differnew file mode 100644 index 0000000..9def4ca --- /dev/null +++ b/graphlcd/logos/FRANKEN SAT_l.glcd diff --git a/graphlcd/logos/FRANKEN SAT_m.glcd b/graphlcd/logos/FRANKEN SAT_m.glcd Binary files differnew file mode 100644 index 0000000..4e0be7e --- /dev/null +++ b/graphlcd/logos/FRANKEN SAT_m.glcd diff --git a/graphlcd/logos/FREE-X TV_l.glcd b/graphlcd/logos/FREE-X TV_l.glcd Binary files differnew file mode 100644 index 0000000..d84a6d9 --- /dev/null +++ b/graphlcd/logos/FREE-X TV_l.glcd diff --git a/graphlcd/logos/FREE-X TV_m.glcd b/graphlcd/logos/FREE-X TV_m.glcd Binary files differnew file mode 100644 index 0000000..c98bdc5 --- /dev/null +++ b/graphlcd/logos/FREE-X TV_m.glcd diff --git a/graphlcd/logos/FRITZ_l.glcd b/graphlcd/logos/FRITZ_l.glcd Binary files differnew file mode 100644 index 0000000..e84e499 --- /dev/null +++ b/graphlcd/logos/FRITZ_l.glcd diff --git a/graphlcd/logos/FRITZ_m.glcd b/graphlcd/logos/FRITZ_m.glcd Binary files differnew file mode 100644 index 0000000..894fda0 --- /dev/null +++ b/graphlcd/logos/FRITZ_m.glcd diff --git a/graphlcd/logos/GAMES TV_l.glcd b/graphlcd/logos/GAMES TV_l.glcd Binary files differnew file mode 100644 index 0000000..b6c862e --- /dev/null +++ b/graphlcd/logos/GAMES TV_l.glcd diff --git a/graphlcd/logos/GOLDSTAR TV_l.glcd b/graphlcd/logos/GOLDSTAR TV_l.glcd Binary files differnew file mode 100644 index 0000000..75f6b4b --- /dev/null +++ b/graphlcd/logos/GOLDSTAR TV_l.glcd diff --git a/graphlcd/logos/GOLDSTAR TV_m.glcd b/graphlcd/logos/GOLDSTAR TV_m.glcd Binary files differnew file mode 100644 index 0000000..82b0f94 --- /dev/null +++ b/graphlcd/logos/GOLDSTAR TV_m.glcd diff --git a/graphlcd/logos/GOLDSTAR TV_v2_l.glcd b/graphlcd/logos/GOLDSTAR TV_v2_l.glcd Binary files differnew file mode 100644 index 0000000..0bc73d4 --- /dev/null +++ b/graphlcd/logos/GOLDSTAR TV_v2_l.glcd diff --git a/graphlcd/logos/GOLDSTAR TV_v2_m.glcd b/graphlcd/logos/GOLDSTAR TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..bdc8533 --- /dev/null +++ b/graphlcd/logos/GOLDSTAR TV_v2_m.glcd diff --git a/graphlcd/logos/GUTE LAUNE TV_l.glcd b/graphlcd/logos/GUTE LAUNE TV_l.glcd Binary files differnew file mode 100644 index 0000000..afdc9d8 --- /dev/null +++ b/graphlcd/logos/GUTE LAUNE TV_l.glcd diff --git a/graphlcd/logos/HALLMARK_l.glcd b/graphlcd/logos/HALLMARK_l.glcd Binary files differnew file mode 100644 index 0000000..820f67c --- /dev/null +++ b/graphlcd/logos/HALLMARK_l.glcd diff --git a/graphlcd/logos/HARMONY FM_l.glcd b/graphlcd/logos/HARMONY FM_l.glcd Binary files differnew file mode 100644 index 0000000..c7c061e --- /dev/null +++ b/graphlcd/logos/HARMONY FM_l.glcd diff --git a/graphlcd/logos/HARMONY FM_m.glcd b/graphlcd/logos/HARMONY FM_m.glcd Binary files differnew file mode 100644 index 0000000..8829b03 --- /dev/null +++ b/graphlcd/logos/HARMONY FM_m.glcd diff --git a/graphlcd/logos/HARMONY FM_v2_m.glcd b/graphlcd/logos/HARMONY FM_v2_m.glcd Binary files differnew file mode 100644 index 0000000..c32ec0f --- /dev/null +++ b/graphlcd/logos/HARMONY FM_v2_m.glcd diff --git a/graphlcd/logos/HEIMATKANAL_l.glcd b/graphlcd/logos/HEIMATKANAL_l.glcd Binary files differnew file mode 100644 index 0000000..8c0161f --- /dev/null +++ b/graphlcd/logos/HEIMATKANAL_l.glcd diff --git a/graphlcd/logos/HEIMATKANAL_m.glcd b/graphlcd/logos/HEIMATKANAL_m.glcd Binary files differnew file mode 100644 index 0000000..f1224e4 --- /dev/null +++ b/graphlcd/logos/HEIMATKANAL_m.glcd diff --git a/graphlcd/logos/HEIMATKANAL_v2_l.glcd b/graphlcd/logos/HEIMATKANAL_v2_l.glcd Binary files differnew file mode 100644 index 0000000..643d68a --- /dev/null +++ b/graphlcd/logos/HEIMATKANAL_v2_l.glcd diff --git a/graphlcd/logos/HESSEN FERNSEHEN_l.glcd b/graphlcd/logos/HESSEN FERNSEHEN_l.glcd Binary files differnew file mode 100644 index 0000000..c2df34e --- /dev/null +++ b/graphlcd/logos/HESSEN FERNSEHEN_l.glcd diff --git a/graphlcd/logos/HESSEN FERNSEHEN_m.glcd b/graphlcd/logos/HESSEN FERNSEHEN_m.glcd Binary files differnew file mode 100644 index 0000000..24ed6bc --- /dev/null +++ b/graphlcd/logos/HESSEN FERNSEHEN_m.glcd diff --git a/graphlcd/logos/HESSEN FERNSEHEN_v2_l.glcd b/graphlcd/logos/HESSEN FERNSEHEN_v2_l.glcd Binary files differnew file mode 100644 index 0000000..afb1d56 --- /dev/null +++ b/graphlcd/logos/HESSEN FERNSEHEN_v2_l.glcd diff --git a/graphlcd/logos/HISTOIRE_m.glcd b/graphlcd/logos/HISTOIRE_m.glcd Binary files differnew file mode 100644 index 0000000..7343fc8 --- /dev/null +++ b/graphlcd/logos/HISTOIRE_m.glcd diff --git a/graphlcd/logos/HISTORY CHANNEL_l.glcd b/graphlcd/logos/HISTORY CHANNEL_l.glcd Binary files differnew file mode 100644 index 0000000..e175a6a --- /dev/null +++ b/graphlcd/logos/HISTORY CHANNEL_l.glcd diff --git a/graphlcd/logos/HIT CHANNEL 1025_l.glcd b/graphlcd/logos/HIT CHANNEL 1025_l.glcd Binary files differnew file mode 100644 index 0000000..278358a --- /dev/null +++ b/graphlcd/logos/HIT CHANNEL 1025_l.glcd diff --git a/graphlcd/logos/HIT CHANNEL 1025_m.glcd b/graphlcd/logos/HIT CHANNEL 1025_m.glcd Binary files differnew file mode 100644 index 0000000..da73db3 --- /dev/null +++ b/graphlcd/logos/HIT CHANNEL 1025_m.glcd diff --git a/graphlcd/logos/HITRADIO FFH_l.glcd b/graphlcd/logos/HITRADIO FFH_l.glcd Binary files differnew file mode 100644 index 0000000..b5fd57e --- /dev/null +++ b/graphlcd/logos/HITRADIO FFH_l.glcd diff --git a/graphlcd/logos/HITRADIO FFH_m.glcd b/graphlcd/logos/HITRADIO FFH_m.glcd Binary files differnew file mode 100644 index 0000000..3701543 --- /dev/null +++ b/graphlcd/logos/HITRADIO FFH_m.glcd diff --git a/graphlcd/logos/HOERZU DIGITAL_l.glcd b/graphlcd/logos/HOERZU DIGITAL_l.glcd Binary files differnew file mode 100644 index 0000000..703c47b --- /dev/null +++ b/graphlcd/logos/HOERZU DIGITAL_l.glcd diff --git a/graphlcd/logos/HOERZU DIGITAL_m.glcd b/graphlcd/logos/HOERZU DIGITAL_m.glcd Binary files differnew file mode 100644 index 0000000..fefd209 --- /dev/null +++ b/graphlcd/logos/HOERZU DIGITAL_m.glcd diff --git a/graphlcd/logos/HOLLYWOOD CINEMA_l.glcd b/graphlcd/logos/HOLLYWOOD CINEMA_l.glcd Binary files differnew file mode 100644 index 0000000..c7ce748 --- /dev/null +++ b/graphlcd/logos/HOLLYWOOD CINEMA_l.glcd diff --git a/graphlcd/logos/HOLLYWOOD CINEMA_m.glcd b/graphlcd/logos/HOLLYWOOD CINEMA_m.glcd Binary files differnew file mode 100644 index 0000000..bd9f7bd --- /dev/null +++ b/graphlcd/logos/HOLLYWOOD CINEMA_m.glcd diff --git a/graphlcd/logos/HR CHRONOS_l.glcd b/graphlcd/logos/HR CHRONOS_l.glcd Binary files differnew file mode 100644 index 0000000..67d8418 --- /dev/null +++ b/graphlcd/logos/HR CHRONOS_l.glcd diff --git a/graphlcd/logos/HR KLASSIK_l.glcd b/graphlcd/logos/HR KLASSIK_l.glcd Binary files differnew file mode 100644 index 0000000..8e992a9 --- /dev/null +++ b/graphlcd/logos/HR KLASSIK_l.glcd diff --git a/graphlcd/logos/HR KLASSIK_m.glcd b/graphlcd/logos/HR KLASSIK_m.glcd Binary files differnew file mode 100644 index 0000000..4712db5 --- /dev/null +++ b/graphlcd/logos/HR KLASSIK_m.glcd diff --git a/graphlcd/logos/HR KLASSIK_v2_m.glcd b/graphlcd/logos/HR KLASSIK_v2_m.glcd Binary files differnew file mode 100644 index 0000000..36e403c --- /dev/null +++ b/graphlcd/logos/HR KLASSIK_v2_m.glcd diff --git a/graphlcd/logos/HR SKYLINE_l.glcd b/graphlcd/logos/HR SKYLINE_l.glcd Binary files differnew file mode 100644 index 0000000..593a856 --- /dev/null +++ b/graphlcd/logos/HR SKYLINE_l.glcd diff --git a/graphlcd/logos/HR SKYLINE_m.glcd b/graphlcd/logos/HR SKYLINE_m.glcd Binary files differnew file mode 100644 index 0000000..96bb038 --- /dev/null +++ b/graphlcd/logos/HR SKYLINE_m.glcd diff --git a/graphlcd/logos/HR SKYLINE_v2_m.glcd b/graphlcd/logos/HR SKYLINE_v2_m.glcd Binary files differnew file mode 100644 index 0000000..1661dfc --- /dev/null +++ b/graphlcd/logos/HR SKYLINE_v2_m.glcd diff --git a/graphlcd/logos/HR1_l.glcd b/graphlcd/logos/HR1_l.glcd Binary files differnew file mode 100644 index 0000000..952f1b7 --- /dev/null +++ b/graphlcd/logos/HR1_l.glcd diff --git a/graphlcd/logos/HR1_m.glcd b/graphlcd/logos/HR1_m.glcd Binary files differnew file mode 100644 index 0000000..6ef4da1 --- /dev/null +++ b/graphlcd/logos/HR1_m.glcd diff --git a/graphlcd/logos/HR2_l.glcd b/graphlcd/logos/HR2_l.glcd Binary files differnew file mode 100644 index 0000000..54b049d --- /dev/null +++ b/graphlcd/logos/HR2_l.glcd diff --git a/graphlcd/logos/HR2_m.glcd b/graphlcd/logos/HR2_m.glcd Binary files differnew file mode 100644 index 0000000..11cf851 --- /dev/null +++ b/graphlcd/logos/HR2_m.glcd diff --git a/graphlcd/logos/HSE24_l.glcd b/graphlcd/logos/HSE24_l.glcd Binary files differnew file mode 100644 index 0000000..4a50bd1 --- /dev/null +++ b/graphlcd/logos/HSE24_l.glcd diff --git a/graphlcd/logos/HSE24_m.glcd b/graphlcd/logos/HSE24_m.glcd Binary files differnew file mode 100644 index 0000000..00371d0 --- /dev/null +++ b/graphlcd/logos/HSE24_m.glcd diff --git a/graphlcd/logos/HSE24_v2_m.glcd b/graphlcd/logos/HSE24_v2_m.glcd Binary files differnew file mode 100644 index 0000000..374a9cb --- /dev/null +++ b/graphlcd/logos/HSE24_v2_m.glcd diff --git a/graphlcd/logos/HUNDERT6 RADIO_l.glcd b/graphlcd/logos/HUNDERT6 RADIO_l.glcd Binary files differnew file mode 100644 index 0000000..67d3792 --- /dev/null +++ b/graphlcd/logos/HUNDERT6 RADIO_l.glcd diff --git a/graphlcd/logos/HUNDERT6 RADIO_m.glcd b/graphlcd/logos/HUNDERT6 RADIO_m.glcd Binary files differnew file mode 100644 index 0000000..af348fc --- /dev/null +++ b/graphlcd/logos/HUNDERT6 RADIO_m.glcd diff --git a/graphlcd/logos/JUMP_l.glcd b/graphlcd/logos/JUMP_l.glcd Binary files differnew file mode 100644 index 0000000..981cb59 --- /dev/null +++ b/graphlcd/logos/JUMP_l.glcd diff --git a/graphlcd/logos/JUMP_m.glcd b/graphlcd/logos/JUMP_m.glcd Binary files differnew file mode 100644 index 0000000..2bf8ed7 --- /dev/null +++ b/graphlcd/logos/JUMP_m.glcd diff --git a/graphlcd/logos/JUNIOR_l.glcd b/graphlcd/logos/JUNIOR_l.glcd Binary files differnew file mode 100644 index 0000000..8981830 --- /dev/null +++ b/graphlcd/logos/JUNIOR_l.glcd diff --git a/graphlcd/logos/JUNIOR_m.glcd b/graphlcd/logos/JUNIOR_m.glcd Binary files differnew file mode 100644 index 0000000..9fd377b --- /dev/null +++ b/graphlcd/logos/JUNIOR_m.glcd diff --git a/graphlcd/logos/JUNIOR_v2_l.glcd b/graphlcd/logos/JUNIOR_v2_l.glcd Binary files differnew file mode 100644 index 0000000..26c3666 --- /dev/null +++ b/graphlcd/logos/JUNIOR_v2_l.glcd diff --git a/graphlcd/logos/K TOON_l.glcd b/graphlcd/logos/K TOON_l.glcd Binary files differnew file mode 100644 index 0000000..936273a --- /dev/null +++ b/graphlcd/logos/K TOON_l.glcd diff --git a/graphlcd/logos/K TOON_m.glcd b/graphlcd/logos/K TOON_m.glcd Binary files differnew file mode 100644 index 0000000..be284ee --- /dev/null +++ b/graphlcd/logos/K TOON_m.glcd diff --git a/graphlcd/logos/K TOON_v2_m.glcd b/graphlcd/logos/K TOON_v2_m.glcd Binary files differnew file mode 100644 index 0000000..d2c3a4c --- /dev/null +++ b/graphlcd/logos/K TOON_v2_m.glcd diff --git a/graphlcd/logos/K-TV_l.glcd b/graphlcd/logos/K-TV_l.glcd Binary files differnew file mode 100644 index 0000000..b22e83c --- /dev/null +++ b/graphlcd/logos/K-TV_l.glcd diff --git a/graphlcd/logos/K-TV_m.glcd b/graphlcd/logos/K-TV_m.glcd Binary files differnew file mode 100644 index 0000000..42a98f0 --- /dev/null +++ b/graphlcd/logos/K-TV_m.glcd diff --git a/graphlcd/logos/K-TV_v2_m.glcd b/graphlcd/logos/K-TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..9e07882 --- /dev/null +++ b/graphlcd/logos/K-TV_v2_m.glcd diff --git a/graphlcd/logos/KABEL 1 AUSTRIA_l.glcd b/graphlcd/logos/KABEL 1 AUSTRIA_l.glcd Binary files differnew file mode 100644 index 0000000..628df5e --- /dev/null +++ b/graphlcd/logos/KABEL 1 AUSTRIA_l.glcd diff --git a/graphlcd/logos/KABEL 1 AUSTRIA_m.glcd b/graphlcd/logos/KABEL 1 AUSTRIA_m.glcd Binary files differnew file mode 100644 index 0000000..b57f2bd --- /dev/null +++ b/graphlcd/logos/KABEL 1 AUSTRIA_m.glcd diff --git a/graphlcd/logos/KABEL 1 SCHWEIZ_l.glcd b/graphlcd/logos/KABEL 1 SCHWEIZ_l.glcd Binary files differnew file mode 100644 index 0000000..063c594 --- /dev/null +++ b/graphlcd/logos/KABEL 1 SCHWEIZ_l.glcd diff --git a/graphlcd/logos/KABEL 1 SCHWEIZ_m.glcd b/graphlcd/logos/KABEL 1 SCHWEIZ_m.glcd Binary files differnew file mode 100644 index 0000000..97ad2c7 --- /dev/null +++ b/graphlcd/logos/KABEL 1 SCHWEIZ_m.glcd diff --git a/graphlcd/logos/KABEL 1_l.glcd b/graphlcd/logos/KABEL 1_l.glcd Binary files differnew file mode 100644 index 0000000..2413092 --- /dev/null +++ b/graphlcd/logos/KABEL 1_l.glcd diff --git a/graphlcd/logos/KABEL 1_m.glcd b/graphlcd/logos/KABEL 1_m.glcd Binary files differnew file mode 100644 index 0000000..5be531b --- /dev/null +++ b/graphlcd/logos/KABEL 1_m.glcd diff --git a/graphlcd/logos/KIKA_l.glcd b/graphlcd/logos/KIKA_l.glcd Binary files differnew file mode 100644 index 0000000..4cba709 --- /dev/null +++ b/graphlcd/logos/KIKA_l.glcd diff --git a/graphlcd/logos/KIKA_m.glcd b/graphlcd/logos/KIKA_m.glcd Binary files differnew file mode 100644 index 0000000..96f71c9 --- /dev/null +++ b/graphlcd/logos/KIKA_m.glcd diff --git a/graphlcd/logos/KINK FM_l.glcd b/graphlcd/logos/KINK FM_l.glcd Binary files differnew file mode 100644 index 0000000..d1b9e99 --- /dev/null +++ b/graphlcd/logos/KINK FM_l.glcd diff --git a/graphlcd/logos/KINK FM_m.glcd b/graphlcd/logos/KINK FM_m.glcd Binary files differnew file mode 100644 index 0000000..f9ddd52 --- /dev/null +++ b/graphlcd/logos/KINK FM_m.glcd diff --git a/graphlcd/logos/KINOWELT_l.glcd b/graphlcd/logos/KINOWELT_l.glcd Binary files differnew file mode 100644 index 0000000..e0f4f33 --- /dev/null +++ b/graphlcd/logos/KINOWELT_l.glcd diff --git a/graphlcd/logos/KRIMICO_l.glcd b/graphlcd/logos/KRIMICO_l.glcd Binary files differnew file mode 100644 index 0000000..20d6a99 --- /dev/null +++ b/graphlcd/logos/KRIMICO_l.glcd diff --git a/graphlcd/logos/KRIMICO_m.glcd b/graphlcd/logos/KRIMICO_m.glcd Binary files differnew file mode 100644 index 0000000..cdff586 --- /dev/null +++ b/graphlcd/logos/KRIMICO_m.glcd diff --git a/graphlcd/logos/KTO_l.glcd b/graphlcd/logos/KTO_l.glcd Binary files differnew file mode 100644 index 0000000..a6c3170 --- /dev/null +++ b/graphlcd/logos/KTO_l.glcd diff --git a/graphlcd/logos/KTO_m.glcd b/graphlcd/logos/KTO_m.glcd Binary files differnew file mode 100644 index 0000000..4222646 --- /dev/null +++ b/graphlcd/logos/KTO_m.glcd diff --git a/graphlcd/logos/L1MBURG_l.glcd b/graphlcd/logos/L1MBURG_l.glcd Binary files differnew file mode 100644 index 0000000..0e50e3a --- /dev/null +++ b/graphlcd/logos/L1MBURG_l.glcd diff --git a/graphlcd/logos/L1MBURG_m.glcd b/graphlcd/logos/L1MBURG_m.glcd Binary files differnew file mode 100644 index 0000000..984a117 --- /dev/null +++ b/graphlcd/logos/L1MBURG_m.glcd diff --git a/graphlcd/logos/LASTMINUTE_l.glcd b/graphlcd/logos/LASTMINUTE_l.glcd Binary files differnew file mode 100644 index 0000000..252d343 --- /dev/null +++ b/graphlcd/logos/LASTMINUTE_l.glcd diff --git a/graphlcd/logos/LASTMINUTE_m.glcd b/graphlcd/logos/LASTMINUTE_m.glcd Binary files differnew file mode 100644 index 0000000..cefd1fa --- /dev/null +++ b/graphlcd/logos/LASTMINUTE_m.glcd diff --git a/graphlcd/logos/LASTMINUTE_v2_m.glcd b/graphlcd/logos/LASTMINUTE_v2_m.glcd Binary files differnew file mode 100644 index 0000000..60bbb84 --- /dev/null +++ b/graphlcd/logos/LASTMINUTE_v2_m.glcd diff --git a/graphlcd/logos/LCI_m.glcd b/graphlcd/logos/LCI_m.glcd Binary files differnew file mode 100644 index 0000000..69c0db2 --- /dev/null +++ b/graphlcd/logos/LCI_m.glcd diff --git a/graphlcd/logos/LCP_l.glcd b/graphlcd/logos/LCP_l.glcd Binary files differnew file mode 100644 index 0000000..a216ea8 --- /dev/null +++ b/graphlcd/logos/LCP_l.glcd diff --git a/graphlcd/logos/LIBERTY TV_l.glcd b/graphlcd/logos/LIBERTY TV_l.glcd Binary files differnew file mode 100644 index 0000000..c905a56 --- /dev/null +++ b/graphlcd/logos/LIBERTY TV_l.glcd diff --git a/graphlcd/logos/LIBERTY TV_m.glcd b/graphlcd/logos/LIBERTY TV_m.glcd Binary files differnew file mode 100644 index 0000000..e4ea29d --- /dev/null +++ b/graphlcd/logos/LIBERTY TV_m.glcd diff --git a/graphlcd/logos/LIBERTY TV_v2_m.glcd b/graphlcd/logos/LIBERTY TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..6eafbc9 --- /dev/null +++ b/graphlcd/logos/LIBERTY TV_v2_m.glcd diff --git a/graphlcd/logos/LIVE 1_m.glcd b/graphlcd/logos/LIVE 1_m.glcd Binary files differnew file mode 100644 index 0000000..39ad718 --- /dev/null +++ b/graphlcd/logos/LIVE 1_m.glcd diff --git a/graphlcd/logos/MATCH TV_m.glcd b/graphlcd/logos/MATCH TV_m.glcd Binary files differnew file mode 100644 index 0000000..c2e9462 --- /dev/null +++ b/graphlcd/logos/MATCH TV_m.glcd diff --git a/graphlcd/logos/MAXIMA FM_l.glcd b/graphlcd/logos/MAXIMA FM_l.glcd Binary files differnew file mode 100644 index 0000000..42cf233 --- /dev/null +++ b/graphlcd/logos/MAXIMA FM_l.glcd diff --git a/graphlcd/logos/MAXIMA FM_m.glcd b/graphlcd/logos/MAXIMA FM_m.glcd Binary files differnew file mode 100644 index 0000000..16753a3 --- /dev/null +++ b/graphlcd/logos/MAXIMA FM_m.glcd diff --git a/graphlcd/logos/MDR FERNSEHEN SA_l.glcd b/graphlcd/logos/MDR FERNSEHEN SA_l.glcd Binary files differnew file mode 100644 index 0000000..3f684e2 --- /dev/null +++ b/graphlcd/logos/MDR FERNSEHEN SA_l.glcd diff --git a/graphlcd/logos/MDR FERNSEHEN SA_m.glcd b/graphlcd/logos/MDR FERNSEHEN SA_m.glcd Binary files differnew file mode 100644 index 0000000..80635a9 --- /dev/null +++ b/graphlcd/logos/MDR FERNSEHEN SA_m.glcd diff --git a/graphlcd/logos/MDR FERNSEHEN S_l.glcd b/graphlcd/logos/MDR FERNSEHEN S_l.glcd Binary files differnew file mode 100644 index 0000000..5742792 --- /dev/null +++ b/graphlcd/logos/MDR FERNSEHEN S_l.glcd diff --git a/graphlcd/logos/MDR FERNSEHEN S_m.glcd b/graphlcd/logos/MDR FERNSEHEN S_m.glcd Binary files differnew file mode 100644 index 0000000..a4779f4 --- /dev/null +++ b/graphlcd/logos/MDR FERNSEHEN S_m.glcd diff --git a/graphlcd/logos/MDR FERNSEHEN TH_l.glcd b/graphlcd/logos/MDR FERNSEHEN TH_l.glcd Binary files differnew file mode 100644 index 0000000..10fee6b --- /dev/null +++ b/graphlcd/logos/MDR FERNSEHEN TH_l.glcd diff --git a/graphlcd/logos/MDR FERNSEHEN TH_m.glcd b/graphlcd/logos/MDR FERNSEHEN TH_m.glcd Binary files differnew file mode 100644 index 0000000..7fef753 --- /dev/null +++ b/graphlcd/logos/MDR FERNSEHEN TH_m.glcd diff --git a/graphlcd/logos/MDR FERNSEHEN_l.glcd b/graphlcd/logos/MDR FERNSEHEN_l.glcd Binary files differnew file mode 100644 index 0000000..b13f745 --- /dev/null +++ b/graphlcd/logos/MDR FERNSEHEN_l.glcd diff --git a/graphlcd/logos/MDR FERNSEHEN_m.glcd b/graphlcd/logos/MDR FERNSEHEN_m.glcd Binary files differnew file mode 100644 index 0000000..6c173bd --- /dev/null +++ b/graphlcd/logos/MDR FERNSEHEN_m.glcd diff --git a/graphlcd/logos/MDR FIGARO_l.glcd b/graphlcd/logos/MDR FIGARO_l.glcd Binary files differnew file mode 100644 index 0000000..33fce31 --- /dev/null +++ b/graphlcd/logos/MDR FIGARO_l.glcd diff --git a/graphlcd/logos/MDR FIGARO_m.glcd b/graphlcd/logos/MDR FIGARO_m.glcd Binary files differnew file mode 100644 index 0000000..870aa21 --- /dev/null +++ b/graphlcd/logos/MDR FIGARO_m.glcd diff --git a/graphlcd/logos/MDR FIGARO_v2_m.glcd b/graphlcd/logos/MDR FIGARO_v2_m.glcd Binary files differnew file mode 100644 index 0000000..9421c8d --- /dev/null +++ b/graphlcd/logos/MDR FIGARO_v2_m.glcd diff --git a/graphlcd/logos/MDR INFO_l.glcd b/graphlcd/logos/MDR INFO_l.glcd Binary files differnew file mode 100644 index 0000000..7bd47b2 --- /dev/null +++ b/graphlcd/logos/MDR INFO_l.glcd diff --git a/graphlcd/logos/MDR INFO_m.glcd b/graphlcd/logos/MDR INFO_m.glcd Binary files differnew file mode 100644 index 0000000..8d5158a --- /dev/null +++ b/graphlcd/logos/MDR INFO_m.glcd diff --git a/graphlcd/logos/MEDIA TROPICAL_l.glcd b/graphlcd/logos/MEDIA TROPICAL_l.glcd Binary files differnew file mode 100644 index 0000000..a8f0761 --- /dev/null +++ b/graphlcd/logos/MEDIA TROPICAL_l.glcd diff --git a/graphlcd/logos/MEDIA TROPICAL_m.glcd b/graphlcd/logos/MEDIA TROPICAL_m.glcd Binary files differnew file mode 100644 index 0000000..33ae45e --- /dev/null +++ b/graphlcd/logos/MEDIA TROPICAL_m.glcd diff --git a/graphlcd/logos/MGM_l.glcd b/graphlcd/logos/MGM_l.glcd Binary files differnew file mode 100644 index 0000000..671a722 --- /dev/null +++ b/graphlcd/logos/MGM_l.glcd diff --git a/graphlcd/logos/MGM_m.glcd b/graphlcd/logos/MGM_m.glcd Binary files differnew file mode 100644 index 0000000..3a7aee8 --- /dev/null +++ b/graphlcd/logos/MGM_m.glcd diff --git a/graphlcd/logos/MOTORS TV_l.glcd b/graphlcd/logos/MOTORS TV_l.glcd Binary files differnew file mode 100644 index 0000000..bfb4ca8 --- /dev/null +++ b/graphlcd/logos/MOTORS TV_l.glcd diff --git a/graphlcd/logos/MOTORS TV_m.glcd b/graphlcd/logos/MOTORS TV_m.glcd Binary files differnew file mode 100644 index 0000000..de02e3e --- /dev/null +++ b/graphlcd/logos/MOTORS TV_m.glcd diff --git a/graphlcd/logos/MOTORS TV_v2_m.glcd b/graphlcd/logos/MOTORS TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..34e196c --- /dev/null +++ b/graphlcd/logos/MOTORS TV_v2_m.glcd diff --git a/graphlcd/logos/MTV 2 POP CHANNEL_l.glcd b/graphlcd/logos/MTV 2 POP CHANNEL_l.glcd Binary files differnew file mode 100644 index 0000000..118119d --- /dev/null +++ b/graphlcd/logos/MTV 2 POP CHANNEL_l.glcd diff --git a/graphlcd/logos/MTV 2 POP CHANNEL_m.glcd b/graphlcd/logos/MTV 2 POP CHANNEL_m.glcd Binary files differnew file mode 100644 index 0000000..f262291 --- /dev/null +++ b/graphlcd/logos/MTV 2 POP CHANNEL_m.glcd diff --git a/graphlcd/logos/MTV 2_l.glcd b/graphlcd/logos/MTV 2_l.glcd Binary files differnew file mode 100644 index 0000000..22cebd0 --- /dev/null +++ b/graphlcd/logos/MTV 2_l.glcd diff --git a/graphlcd/logos/MTV BASE_l.glcd b/graphlcd/logos/MTV BASE_l.glcd Binary files differnew file mode 100644 index 0000000..c486eb5 --- /dev/null +++ b/graphlcd/logos/MTV BASE_l.glcd diff --git a/graphlcd/logos/MTV BASE_m.glcd b/graphlcd/logos/MTV BASE_m.glcd Binary files differnew file mode 100644 index 0000000..f2f3ce4 --- /dev/null +++ b/graphlcd/logos/MTV BASE_m.glcd diff --git a/graphlcd/logos/MTV CENTRAL_l.glcd b/graphlcd/logos/MTV CENTRAL_l.glcd Binary files differnew file mode 100644 index 0000000..3fb8e3f --- /dev/null +++ b/graphlcd/logos/MTV CENTRAL_l.glcd diff --git a/graphlcd/logos/MTV CENTRAL_m.glcd b/graphlcd/logos/MTV CENTRAL_m.glcd Binary files differnew file mode 100644 index 0000000..f2de32b --- /dev/null +++ b/graphlcd/logos/MTV CENTRAL_m.glcd diff --git a/graphlcd/logos/MTV CENTRAL_v2_m.glcd b/graphlcd/logos/MTV CENTRAL_v2_m.glcd Binary files differnew file mode 100644 index 0000000..6f5fa72 --- /dev/null +++ b/graphlcd/logos/MTV CENTRAL_v2_m.glcd diff --git a/graphlcd/logos/MTV DANCE_l.glcd b/graphlcd/logos/MTV DANCE_l.glcd Binary files differnew file mode 100644 index 0000000..be83922 --- /dev/null +++ b/graphlcd/logos/MTV DANCE_l.glcd diff --git a/graphlcd/logos/MTV F_l.glcd b/graphlcd/logos/MTV F_l.glcd Binary files differnew file mode 100644 index 0000000..f140bf6 --- /dev/null +++ b/graphlcd/logos/MTV F_l.glcd diff --git a/graphlcd/logos/MTV HITS_l.glcd b/graphlcd/logos/MTV HITS_l.glcd Binary files differnew file mode 100644 index 0000000..c15ec4d --- /dev/null +++ b/graphlcd/logos/MTV HITS_l.glcd diff --git a/graphlcd/logos/MTV HITS_m.glcd b/graphlcd/logos/MTV HITS_m.glcd Binary files differnew file mode 100644 index 0000000..bdc6a67 --- /dev/null +++ b/graphlcd/logos/MTV HITS_m.glcd diff --git a/graphlcd/logos/MTV_l.glcd b/graphlcd/logos/MTV_l.glcd Binary files differnew file mode 100644 index 0000000..487d888 --- /dev/null +++ b/graphlcd/logos/MTV_l.glcd diff --git a/graphlcd/logos/MULTIVISION_m.glcd b/graphlcd/logos/MULTIVISION_m.glcd Binary files differnew file mode 100644 index 0000000..33a286a --- /dev/null +++ b/graphlcd/logos/MULTIVISION_m.glcd diff --git a/graphlcd/logos/N-TV_l.glcd b/graphlcd/logos/N-TV_l.glcd Binary files differnew file mode 100644 index 0000000..1183167 --- /dev/null +++ b/graphlcd/logos/N-TV_l.glcd diff --git a/graphlcd/logos/N-TV_m.glcd b/graphlcd/logos/N-TV_m.glcd Binary files differnew file mode 100644 index 0000000..872793f --- /dev/null +++ b/graphlcd/logos/N-TV_m.glcd diff --git a/graphlcd/logos/N-TV_v2_m.glcd b/graphlcd/logos/N-TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..e063715 --- /dev/null +++ b/graphlcd/logos/N-TV_v2_m.glcd diff --git a/graphlcd/logos/N24_l.glcd b/graphlcd/logos/N24_l.glcd Binary files differnew file mode 100644 index 0000000..0fd10c9 --- /dev/null +++ b/graphlcd/logos/N24_l.glcd diff --git a/graphlcd/logos/N24_m.glcd b/graphlcd/logos/N24_m.glcd Binary files differnew file mode 100644 index 0000000..c5f839e --- /dev/null +++ b/graphlcd/logos/N24_m.glcd diff --git a/graphlcd/logos/N24_v2_l.glcd b/graphlcd/logos/N24_v2_l.glcd Binary files differnew file mode 100644 index 0000000..c556010 --- /dev/null +++ b/graphlcd/logos/N24_v2_l.glcd diff --git a/graphlcd/logos/NASN_l.glcd b/graphlcd/logos/NASN_l.glcd Binary files differnew file mode 100644 index 0000000..cdba969 --- /dev/null +++ b/graphlcd/logos/NASN_l.glcd diff --git a/graphlcd/logos/NATIONAL GEOGRAPHIC_l.glcd b/graphlcd/logos/NATIONAL GEOGRAPHIC_l.glcd Binary files differnew file mode 100644 index 0000000..c90abe7 --- /dev/null +++ b/graphlcd/logos/NATIONAL GEOGRAPHIC_l.glcd diff --git a/graphlcd/logos/NBC_l.glcd b/graphlcd/logos/NBC_l.glcd Binary files differnew file mode 100644 index 0000000..cba7b8e --- /dev/null +++ b/graphlcd/logos/NBC_l.glcd diff --git a/graphlcd/logos/NBC_m.glcd b/graphlcd/logos/NBC_m.glcd Binary files differnew file mode 100644 index 0000000..f0a5e68 --- /dev/null +++ b/graphlcd/logos/NBC_m.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN HH_l.glcd b/graphlcd/logos/NDR FERNSEHEN HH_l.glcd Binary files differnew file mode 100644 index 0000000..5d93658 --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN HH_l.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN HH_m.glcd b/graphlcd/logos/NDR FERNSEHEN HH_m.glcd Binary files differnew file mode 100644 index 0000000..7784e4b --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN HH_m.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN MV_l.glcd b/graphlcd/logos/NDR FERNSEHEN MV_l.glcd Binary files differnew file mode 100644 index 0000000..b0b82fe --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN MV_l.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN MV_m.glcd b/graphlcd/logos/NDR FERNSEHEN MV_m.glcd Binary files differnew file mode 100644 index 0000000..7e0a763 --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN MV_m.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN NDS_l.glcd b/graphlcd/logos/NDR FERNSEHEN NDS_l.glcd Binary files differnew file mode 100644 index 0000000..1960b76 --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN NDS_l.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN NDS_m.glcd b/graphlcd/logos/NDR FERNSEHEN NDS_m.glcd Binary files differnew file mode 100644 index 0000000..77db508 --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN NDS_m.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN SH_l.glcd b/graphlcd/logos/NDR FERNSEHEN SH_l.glcd Binary files differnew file mode 100644 index 0000000..d834fa4 --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN SH_l.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN SH_m.glcd b/graphlcd/logos/NDR FERNSEHEN SH_m.glcd Binary files differnew file mode 100644 index 0000000..e1e30b8 --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN SH_m.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN_l.glcd b/graphlcd/logos/NDR FERNSEHEN_l.glcd Binary files differnew file mode 100644 index 0000000..999ad4d --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN_l.glcd diff --git a/graphlcd/logos/NDR FERNSEHEN_m.glcd b/graphlcd/logos/NDR FERNSEHEN_m.glcd Binary files differnew file mode 100644 index 0000000..aeb6eb8 --- /dev/null +++ b/graphlcd/logos/NDR FERNSEHEN_m.glcd diff --git a/graphlcd/logos/NDR INFO_l.glcd b/graphlcd/logos/NDR INFO_l.glcd Binary files differnew file mode 100644 index 0000000..33998e7 --- /dev/null +++ b/graphlcd/logos/NDR INFO_l.glcd diff --git a/graphlcd/logos/NDR INFO_m.glcd b/graphlcd/logos/NDR INFO_m.glcd Binary files differnew file mode 100644 index 0000000..f903c2d --- /dev/null +++ b/graphlcd/logos/NDR INFO_m.glcd diff --git a/graphlcd/logos/NDR KULTUR_l.glcd b/graphlcd/logos/NDR KULTUR_l.glcd Binary files differnew file mode 100644 index 0000000..c3f54ef --- /dev/null +++ b/graphlcd/logos/NDR KULTUR_l.glcd diff --git a/graphlcd/logos/NDR KULTUR_m.glcd b/graphlcd/logos/NDR KULTUR_m.glcd Binary files differnew file mode 100644 index 0000000..25530cf --- /dev/null +++ b/graphlcd/logos/NDR KULTUR_m.glcd diff --git a/graphlcd/logos/NED1_l.glcd b/graphlcd/logos/NED1_l.glcd Binary files differnew file mode 100644 index 0000000..cc646c9 --- /dev/null +++ b/graphlcd/logos/NED1_l.glcd diff --git a/graphlcd/logos/NED1_m.glcd b/graphlcd/logos/NED1_m.glcd Binary files differnew file mode 100644 index 0000000..5d3c4f7 --- /dev/null +++ b/graphlcd/logos/NED1_m.glcd diff --git a/graphlcd/logos/NED2_l.glcd b/graphlcd/logos/NED2_l.glcd Binary files differnew file mode 100644 index 0000000..cc4b26b --- /dev/null +++ b/graphlcd/logos/NED2_l.glcd diff --git a/graphlcd/logos/NED2_m.glcd b/graphlcd/logos/NED2_m.glcd Binary files differnew file mode 100644 index 0000000..d125a6b --- /dev/null +++ b/graphlcd/logos/NED2_m.glcd diff --git a/graphlcd/logos/NED3_l.glcd b/graphlcd/logos/NED3_l.glcd Binary files differnew file mode 100644 index 0000000..83a391f --- /dev/null +++ b/graphlcd/logos/NED3_l.glcd diff --git a/graphlcd/logos/NED3_m.glcd b/graphlcd/logos/NED3_m.glcd Binary files differnew file mode 100644 index 0000000..35b3235 --- /dev/null +++ b/graphlcd/logos/NED3_m.glcd diff --git a/graphlcd/logos/NET5_l.glcd b/graphlcd/logos/NET5_l.glcd Binary files differnew file mode 100644 index 0000000..373524f --- /dev/null +++ b/graphlcd/logos/NET5_l.glcd diff --git a/graphlcd/logos/NET5_m.glcd b/graphlcd/logos/NET5_m.glcd Binary files differnew file mode 100644 index 0000000..e3a7db3 --- /dev/null +++ b/graphlcd/logos/NET5_m.glcd diff --git a/graphlcd/logos/NEUN LIVE_l.glcd b/graphlcd/logos/NEUN LIVE_l.glcd Binary files differnew file mode 100644 index 0000000..42f21c1 --- /dev/null +++ b/graphlcd/logos/NEUN LIVE_l.glcd diff --git a/graphlcd/logos/NEUN LIVE_m.glcd b/graphlcd/logos/NEUN LIVE_m.glcd Binary files differnew file mode 100644 index 0000000..b871163 --- /dev/null +++ b/graphlcd/logos/NEUN LIVE_m.glcd diff --git a/graphlcd/logos/NEUN LIVE_v2_m.glcd b/graphlcd/logos/NEUN LIVE_v2_m.glcd Binary files differnew file mode 100644 index 0000000..f0d6e86 --- /dev/null +++ b/graphlcd/logos/NEUN LIVE_v2_m.glcd diff --git a/graphlcd/logos/NICKELODEON_l.glcd b/graphlcd/logos/NICKELODEON_l.glcd Binary files differnew file mode 100644 index 0000000..f2fdc89 --- /dev/null +++ b/graphlcd/logos/NICKELODEON_l.glcd diff --git a/graphlcd/logos/NICKELODEON_m.glcd b/graphlcd/logos/NICKELODEON_m.glcd Binary files differnew file mode 100644 index 0000000..8253643 --- /dev/null +++ b/graphlcd/logos/NICKELODEON_m.glcd diff --git a/graphlcd/logos/NICK_l.glcd b/graphlcd/logos/NICK_l.glcd Binary files differnew file mode 100644 index 0000000..cf6dbda --- /dev/null +++ b/graphlcd/logos/NICK_l.glcd diff --git a/graphlcd/logos/NORDWEST RADIO_l.glcd b/graphlcd/logos/NORDWEST RADIO_l.glcd Binary files differnew file mode 100644 index 0000000..c48ee07 --- /dev/null +++ b/graphlcd/logos/NORDWEST RADIO_l.glcd diff --git a/graphlcd/logos/NORDWEST RADIO_m.glcd b/graphlcd/logos/NORDWEST RADIO_m.glcd Binary files differnew file mode 100644 index 0000000..895000f --- /dev/null +++ b/graphlcd/logos/NORDWEST RADIO_m.glcd diff --git a/graphlcd/logos/NORDWEST RADIO_v2_m.glcd b/graphlcd/logos/NORDWEST RADIO_v2_m.glcd Binary files differnew file mode 100644 index 0000000..4c7a50e --- /dev/null +++ b/graphlcd/logos/NORDWEST RADIO_v2_m.glcd diff --git a/graphlcd/logos/NRJ_l.glcd b/graphlcd/logos/NRJ_l.glcd Binary files differnew file mode 100644 index 0000000..7df7c0a --- /dev/null +++ b/graphlcd/logos/NRJ_l.glcd diff --git a/graphlcd/logos/NRJ_m.glcd b/graphlcd/logos/NRJ_m.glcd Binary files differnew file mode 100644 index 0000000..5424d41 --- /dev/null +++ b/graphlcd/logos/NRJ_m.glcd diff --git a/graphlcd/logos/OESTERREICH 1_l.glcd b/graphlcd/logos/OESTERREICH 1_l.glcd Binary files differnew file mode 100644 index 0000000..4d35400 --- /dev/null +++ b/graphlcd/logos/OESTERREICH 1_l.glcd diff --git a/graphlcd/logos/OESTERREICH 1_m.glcd b/graphlcd/logos/OESTERREICH 1_m.glcd Binary files differnew file mode 100644 index 0000000..6c8a132 --- /dev/null +++ b/graphlcd/logos/OESTERREICH 1_m.glcd diff --git a/graphlcd/logos/OESTERREICH 3_l.glcd b/graphlcd/logos/OESTERREICH 3_l.glcd Binary files differnew file mode 100644 index 0000000..59d4519 --- /dev/null +++ b/graphlcd/logos/OESTERREICH 3_l.glcd diff --git a/graphlcd/logos/OESTERREICH 3_m.glcd b/graphlcd/logos/OESTERREICH 3_m.glcd Binary files differnew file mode 100644 index 0000000..22e7b3a --- /dev/null +++ b/graphlcd/logos/OESTERREICH 3_m.glcd diff --git a/graphlcd/logos/ONTV_l.glcd b/graphlcd/logos/ONTV_l.glcd Binary files differnew file mode 100644 index 0000000..3d30545 --- /dev/null +++ b/graphlcd/logos/ONTV_l.glcd diff --git a/graphlcd/logos/ONTV_m.glcd b/graphlcd/logos/ONTV_m.glcd Binary files differnew file mode 100644 index 0000000..dd1dd72 --- /dev/null +++ b/graphlcd/logos/ONTV_m.glcd diff --git a/graphlcd/logos/ONTV_v2_m.glcd b/graphlcd/logos/ONTV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..c7f75b6 --- /dev/null +++ b/graphlcd/logos/ONTV_v2_m.glcd diff --git a/graphlcd/logos/ONYX TV_l.glcd b/graphlcd/logos/ONYX TV_l.glcd Binary files differnew file mode 100644 index 0000000..928a766 --- /dev/null +++ b/graphlcd/logos/ONYX TV_l.glcd diff --git a/graphlcd/logos/ONYX TV_m.glcd b/graphlcd/logos/ONYX TV_m.glcd Binary files differnew file mode 100644 index 0000000..10f3bdb --- /dev/null +++ b/graphlcd/logos/ONYX TV_m.glcd diff --git a/graphlcd/logos/ORF 1_l.glcd b/graphlcd/logos/ORF 1_l.glcd Binary files differnew file mode 100644 index 0000000..457b7db --- /dev/null +++ b/graphlcd/logos/ORF 1_l.glcd diff --git a/graphlcd/logos/ORF 1_m.glcd b/graphlcd/logos/ORF 1_m.glcd Binary files differnew file mode 100644 index 0000000..48346ac --- /dev/null +++ b/graphlcd/logos/ORF 1_m.glcd diff --git a/graphlcd/logos/ORF 2 BURGENLAND_l.glcd b/graphlcd/logos/ORF 2 BURGENLAND_l.glcd Binary files differnew file mode 100644 index 0000000..3c76598 --- /dev/null +++ b/graphlcd/logos/ORF 2 BURGENLAND_l.glcd diff --git a/graphlcd/logos/ORF 2 BURGENLAND_m.glcd b/graphlcd/logos/ORF 2 BURGENLAND_m.glcd Binary files differnew file mode 100644 index 0000000..cdaeb84 --- /dev/null +++ b/graphlcd/logos/ORF 2 BURGENLAND_m.glcd diff --git a/graphlcd/logos/ORF 2 KAERNTEN_l.glcd b/graphlcd/logos/ORF 2 KAERNTEN_l.glcd Binary files differnew file mode 100644 index 0000000..17e701b --- /dev/null +++ b/graphlcd/logos/ORF 2 KAERNTEN_l.glcd diff --git a/graphlcd/logos/ORF 2 KAERNTEN_m.glcd b/graphlcd/logos/ORF 2 KAERNTEN_m.glcd Binary files differnew file mode 100644 index 0000000..2ce5f2a --- /dev/null +++ b/graphlcd/logos/ORF 2 KAERNTEN_m.glcd diff --git a/graphlcd/logos/ORF 2 NIEDEROESTERREICH_l.glcd b/graphlcd/logos/ORF 2 NIEDEROESTERREICH_l.glcd Binary files differnew file mode 100644 index 0000000..5e3e6c6 --- /dev/null +++ b/graphlcd/logos/ORF 2 NIEDEROESTERREICH_l.glcd diff --git a/graphlcd/logos/ORF 2 NIEDEROESTERREICH_m.glcd b/graphlcd/logos/ORF 2 NIEDEROESTERREICH_m.glcd Binary files differnew file mode 100644 index 0000000..ffc2413 --- /dev/null +++ b/graphlcd/logos/ORF 2 NIEDEROESTERREICH_m.glcd diff --git a/graphlcd/logos/ORF 2 OBEROESTERREICH_l.glcd b/graphlcd/logos/ORF 2 OBEROESTERREICH_l.glcd Binary files differnew file mode 100644 index 0000000..feed851 --- /dev/null +++ b/graphlcd/logos/ORF 2 OBEROESTERREICH_l.glcd diff --git a/graphlcd/logos/ORF 2 OBEROESTERREICH_m.glcd b/graphlcd/logos/ORF 2 OBEROESTERREICH_m.glcd Binary files differnew file mode 100644 index 0000000..2435717 --- /dev/null +++ b/graphlcd/logos/ORF 2 OBEROESTERREICH_m.glcd diff --git a/graphlcd/logos/ORF 2 SALZBURG_l.glcd b/graphlcd/logos/ORF 2 SALZBURG_l.glcd Binary files differnew file mode 100644 index 0000000..929c0f2 --- /dev/null +++ b/graphlcd/logos/ORF 2 SALZBURG_l.glcd diff --git a/graphlcd/logos/ORF 2 SALZBURG_m.glcd b/graphlcd/logos/ORF 2 SALZBURG_m.glcd Binary files differnew file mode 100644 index 0000000..74b04ad --- /dev/null +++ b/graphlcd/logos/ORF 2 SALZBURG_m.glcd diff --git a/graphlcd/logos/ORF 2 STEIERMARK_l.glcd b/graphlcd/logos/ORF 2 STEIERMARK_l.glcd Binary files differnew file mode 100644 index 0000000..43bb361 --- /dev/null +++ b/graphlcd/logos/ORF 2 STEIERMARK_l.glcd diff --git a/graphlcd/logos/ORF 2 STEIERMARK_m.glcd b/graphlcd/logos/ORF 2 STEIERMARK_m.glcd Binary files differnew file mode 100644 index 0000000..2f76745 --- /dev/null +++ b/graphlcd/logos/ORF 2 STEIERMARK_m.glcd diff --git a/graphlcd/logos/ORF 2 TIROL_l.glcd b/graphlcd/logos/ORF 2 TIROL_l.glcd Binary files differnew file mode 100644 index 0000000..60589aa --- /dev/null +++ b/graphlcd/logos/ORF 2 TIROL_l.glcd diff --git a/graphlcd/logos/ORF 2 TIROL_m.glcd b/graphlcd/logos/ORF 2 TIROL_m.glcd Binary files differnew file mode 100644 index 0000000..afae7e3 --- /dev/null +++ b/graphlcd/logos/ORF 2 TIROL_m.glcd diff --git a/graphlcd/logos/ORF 2 VORARLBERG_l.glcd b/graphlcd/logos/ORF 2 VORARLBERG_l.glcd Binary files differnew file mode 100644 index 0000000..f79b383 --- /dev/null +++ b/graphlcd/logos/ORF 2 VORARLBERG_l.glcd diff --git a/graphlcd/logos/ORF 2 VORARLBERG_m.glcd b/graphlcd/logos/ORF 2 VORARLBERG_m.glcd Binary files differnew file mode 100644 index 0000000..72c984d --- /dev/null +++ b/graphlcd/logos/ORF 2 VORARLBERG_m.glcd diff --git a/graphlcd/logos/ORF 2 WIEN_l.glcd b/graphlcd/logos/ORF 2 WIEN_l.glcd Binary files differnew file mode 100644 index 0000000..ec61614 --- /dev/null +++ b/graphlcd/logos/ORF 2 WIEN_l.glcd diff --git a/graphlcd/logos/ORF 2 WIEN_m.glcd b/graphlcd/logos/ORF 2 WIEN_m.glcd Binary files differnew file mode 100644 index 0000000..cf4c07e --- /dev/null +++ b/graphlcd/logos/ORF 2 WIEN_m.glcd diff --git a/graphlcd/logos/ORF 2_l.glcd b/graphlcd/logos/ORF 2_l.glcd Binary files differnew file mode 100644 index 0000000..6fbe451 --- /dev/null +++ b/graphlcd/logos/ORF 2_l.glcd diff --git a/graphlcd/logos/ORF 2_m.glcd b/graphlcd/logos/ORF 2_m.glcd Binary files differnew file mode 100644 index 0000000..a28cb0d --- /dev/null +++ b/graphlcd/logos/ORF 2_m.glcd diff --git a/graphlcd/logos/ORF2 RADIO_l.glcd b/graphlcd/logos/ORF2 RADIO_l.glcd Binary files differnew file mode 100644 index 0000000..65d086e --- /dev/null +++ b/graphlcd/logos/ORF2 RADIO_l.glcd diff --git a/graphlcd/logos/ORF2 RADIO_m.glcd b/graphlcd/logos/ORF2 RADIO_m.glcd Binary files differnew file mode 100644 index 0000000..b42e7d5 --- /dev/null +++ b/graphlcd/logos/ORF2 RADIO_m.glcd diff --git a/graphlcd/logos/OTTO SHOP_l.glcd b/graphlcd/logos/OTTO SHOP_l.glcd Binary files differnew file mode 100644 index 0000000..d915a35 --- /dev/null +++ b/graphlcd/logos/OTTO SHOP_l.glcd diff --git a/graphlcd/logos/OTTO SHOP_m.glcd b/graphlcd/logos/OTTO SHOP_m.glcd Binary files differnew file mode 100644 index 0000000..a4d832b --- /dev/null +++ b/graphlcd/logos/OTTO SHOP_m.glcd diff --git a/graphlcd/logos/PHOENIX_l.glcd b/graphlcd/logos/PHOENIX_l.glcd Binary files differnew file mode 100644 index 0000000..15fe77a --- /dev/null +++ b/graphlcd/logos/PHOENIX_l.glcd diff --git a/graphlcd/logos/PHOENIX_m.glcd b/graphlcd/logos/PHOENIX_m.glcd Binary files differnew file mode 100644 index 0000000..ee8c873 --- /dev/null +++ b/graphlcd/logos/PHOENIX_m.glcd diff --git a/graphlcd/logos/PHOENIX_v2_l.glcd b/graphlcd/logos/PHOENIX_v2_l.glcd Binary files differnew file mode 100644 index 0000000..91298f0 --- /dev/null +++ b/graphlcd/logos/PHOENIX_v2_l.glcd diff --git a/graphlcd/logos/PHOENIX_v2_m.glcd b/graphlcd/logos/PHOENIX_v2_m.glcd Binary files differnew file mode 100644 index 0000000..df84f07 --- /dev/null +++ b/graphlcd/logos/PHOENIX_v2_m.glcd diff --git a/graphlcd/logos/PLANET RADIO_l.glcd b/graphlcd/logos/PLANET RADIO_l.glcd Binary files differnew file mode 100644 index 0000000..a7d211b --- /dev/null +++ b/graphlcd/logos/PLANET RADIO_l.glcd diff --git a/graphlcd/logos/PLANET RADIO_m.glcd b/graphlcd/logos/PLANET RADIO_m.glcd Binary files differnew file mode 100644 index 0000000..3328bd5 --- /dev/null +++ b/graphlcd/logos/PLANET RADIO_m.glcd diff --git a/graphlcd/logos/PLANET_l.glcd b/graphlcd/logos/PLANET_l.glcd Binary files differnew file mode 100644 index 0000000..b75675c --- /dev/null +++ b/graphlcd/logos/PLANET_l.glcd diff --git a/graphlcd/logos/PLANET_m.glcd b/graphlcd/logos/PLANET_m.glcd Binary files differnew file mode 100644 index 0000000..610bb82 --- /dev/null +++ b/graphlcd/logos/PLANET_m.glcd diff --git a/graphlcd/logos/PLAYBOY TV_l.glcd b/graphlcd/logos/PLAYBOY TV_l.glcd Binary files differnew file mode 100644 index 0000000..184f5ff --- /dev/null +++ b/graphlcd/logos/PLAYBOY TV_l.glcd diff --git a/graphlcd/logos/PLAYBOY_m.glcd b/graphlcd/logos/PLAYBOY_m.glcd Binary files differnew file mode 100644 index 0000000..6b26e08 --- /dev/null +++ b/graphlcd/logos/PLAYBOY_m.glcd diff --git a/graphlcd/logos/PLAYHOUSE DISNEY_m.glcd b/graphlcd/logos/PLAYHOUSE DISNEY_m.glcd Binary files differnew file mode 100644 index 0000000..f39bdf4 --- /dev/null +++ b/graphlcd/logos/PLAYHOUSE DISNEY_m.glcd diff --git a/graphlcd/logos/PLUS 1_l.glcd b/graphlcd/logos/PLUS 1_l.glcd Binary files differnew file mode 100644 index 0000000..2f90c49 --- /dev/null +++ b/graphlcd/logos/PLUS 1_l.glcd diff --git a/graphlcd/logos/PREMIERE AUSTRIA_l.glcd b/graphlcd/logos/PREMIERE AUSTRIA_l.glcd Binary files differnew file mode 100644 index 0000000..fec540c --- /dev/null +++ b/graphlcd/logos/PREMIERE AUSTRIA_l.glcd diff --git a/graphlcd/logos/PREMIERE AUSTRIA_m.glcd b/graphlcd/logos/PREMIERE AUSTRIA_m.glcd Binary files differnew file mode 100644 index 0000000..695e4be --- /dev/null +++ b/graphlcd/logos/PREMIERE AUSTRIA_m.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT PORTAL_l.glcd b/graphlcd/logos/PREMIERE DIREKT PORTAL_l.glcd Binary files differnew file mode 100644 index 0000000..3451743 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT PORTAL_l.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT PORTAL_m.glcd b/graphlcd/logos/PREMIERE DIREKT PORTAL_m.glcd Binary files differnew file mode 100644 index 0000000..f37c6f0 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT PORTAL_m.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT1_l.glcd b/graphlcd/logos/PREMIERE DIREKT1_l.glcd Binary files differnew file mode 100644 index 0000000..3dcbf95 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT1_l.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT1_m.glcd b/graphlcd/logos/PREMIERE DIREKT1_m.glcd Binary files differnew file mode 100644 index 0000000..867542e --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT1_m.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT1_v2_l.glcd b/graphlcd/logos/PREMIERE DIREKT1_v2_l.glcd Binary files differnew file mode 100644 index 0000000..174bcd6 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT1_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT2_l.glcd b/graphlcd/logos/PREMIERE DIREKT2_l.glcd Binary files differnew file mode 100644 index 0000000..47634fa --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT2_l.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT2_m.glcd b/graphlcd/logos/PREMIERE DIREKT2_m.glcd Binary files differnew file mode 100644 index 0000000..06458ff --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT2_m.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT2_v2_l.glcd b/graphlcd/logos/PREMIERE DIREKT2_v2_l.glcd Binary files differnew file mode 100644 index 0000000..4541045 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT2_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT3_l.glcd b/graphlcd/logos/PREMIERE DIREKT3_l.glcd Binary files differnew file mode 100644 index 0000000..561baac --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT3_l.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT3_m.glcd b/graphlcd/logos/PREMIERE DIREKT3_m.glcd Binary files differnew file mode 100644 index 0000000..bf95d30 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT3_m.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT3_v2_l.glcd b/graphlcd/logos/PREMIERE DIREKT3_v2_l.glcd Binary files differnew file mode 100644 index 0000000..5956684 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT3_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT4_l.glcd b/graphlcd/logos/PREMIERE DIREKT4_l.glcd Binary files differnew file mode 100644 index 0000000..be12a52 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT4_l.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT4_m.glcd b/graphlcd/logos/PREMIERE DIREKT4_m.glcd Binary files differnew file mode 100644 index 0000000..8bd5202 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT4_m.glcd diff --git a/graphlcd/logos/PREMIERE DIREKT4_v2_l.glcd b/graphlcd/logos/PREMIERE DIREKT4_v2_l.glcd Binary files differnew file mode 100644 index 0000000..e1fb8b1 --- /dev/null +++ b/graphlcd/logos/PREMIERE DIREKT4_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 1_l.glcd b/graphlcd/logos/PREMIERE EROTIK 1_l.glcd Binary files differnew file mode 100644 index 0000000..d0ba7a2 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 1_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 1_m.glcd b/graphlcd/logos/PREMIERE EROTIK 1_m.glcd Binary files differnew file mode 100644 index 0000000..d74ba3e --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 1_m.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 1_v2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 1_v2_l.glcd Binary files differnew file mode 100644 index 0000000..9d36610 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 1_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 2_l.glcd Binary files differnew file mode 100644 index 0000000..72654b1 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 2_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 2_m.glcd b/graphlcd/logos/PREMIERE EROTIK 2_m.glcd Binary files differnew file mode 100644 index 0000000..e54786c --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 2_m.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 2_v2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 2_v2_l.glcd Binary files differnew file mode 100644 index 0000000..d78779e --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 2_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 3_l.glcd b/graphlcd/logos/PREMIERE EROTIK 3_l.glcd Binary files differnew file mode 100644 index 0000000..65fa3da --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 3_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 3_m.glcd b/graphlcd/logos/PREMIERE EROTIK 3_m.glcd Binary files differnew file mode 100644 index 0000000..2287287 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 3_m.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 3_v2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 3_v2_l.glcd Binary files differnew file mode 100644 index 0000000..48fc074 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 3_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 4_l.glcd b/graphlcd/logos/PREMIERE EROTIK 4_l.glcd Binary files differnew file mode 100644 index 0000000..87d3375 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 4_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 4_m.glcd b/graphlcd/logos/PREMIERE EROTIK 4_m.glcd Binary files differnew file mode 100644 index 0000000..b312a53 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 4_m.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK 4_v2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 4_v2_l.glcd Binary files differnew file mode 100644 index 0000000..4242389 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK 4_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK_l.glcd b/graphlcd/logos/PREMIERE EROTIK_l.glcd Binary files differnew file mode 100644 index 0000000..d6ab077 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK_l.glcd diff --git a/graphlcd/logos/PREMIERE EROTIK_m.glcd b/graphlcd/logos/PREMIERE EROTIK_m.glcd Binary files differnew file mode 100644 index 0000000..c57aa32 --- /dev/null +++ b/graphlcd/logos/PREMIERE EROTIK_m.glcd diff --git a/graphlcd/logos/PREMIERE KRIMI_l.glcd b/graphlcd/logos/PREMIERE KRIMI_l.glcd Binary files differnew file mode 100644 index 0000000..46ea4f2 --- /dev/null +++ b/graphlcd/logos/PREMIERE KRIMI_l.glcd diff --git a/graphlcd/logos/PREMIERE KRIMI_m.glcd b/graphlcd/logos/PREMIERE KRIMI_m.glcd Binary files differnew file mode 100644 index 0000000..60e809f --- /dev/null +++ b/graphlcd/logos/PREMIERE KRIMI_m.glcd diff --git a/graphlcd/logos/PREMIERE NOSTALGIE_l.glcd b/graphlcd/logos/PREMIERE NOSTALGIE_l.glcd Binary files differnew file mode 100644 index 0000000..2fe949f --- /dev/null +++ b/graphlcd/logos/PREMIERE NOSTALGIE_l.glcd diff --git a/graphlcd/logos/PREMIERE NOSTALGIE_m.glcd b/graphlcd/logos/PREMIERE NOSTALGIE_m.glcd Binary files differnew file mode 100644 index 0000000..2d69c17 --- /dev/null +++ b/graphlcd/logos/PREMIERE NOSTALGIE_m.glcd diff --git a/graphlcd/logos/PREMIERE NOSTALGIE_v2_l.glcd b/graphlcd/logos/PREMIERE NOSTALGIE_v2_l.glcd Binary files differnew file mode 100644 index 0000000..0c0fa92 --- /dev/null +++ b/graphlcd/logos/PREMIERE NOSTALGIE_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE SERIE_l.glcd b/graphlcd/logos/PREMIERE SERIE_l.glcd Binary files differnew file mode 100644 index 0000000..22d4b46 --- /dev/null +++ b/graphlcd/logos/PREMIERE SERIE_l.glcd diff --git a/graphlcd/logos/PREMIERE SERIE_m.glcd b/graphlcd/logos/PREMIERE SERIE_m.glcd Binary files differnew file mode 100644 index 0000000..12d0903 --- /dev/null +++ b/graphlcd/logos/PREMIERE SERIE_m.glcd diff --git a/graphlcd/logos/PREMIERE SERIE_v2_l.glcd b/graphlcd/logos/PREMIERE SERIE_v2_l.glcd Binary files differnew file mode 100644 index 0000000..0ebb263 --- /dev/null +++ b/graphlcd/logos/PREMIERE SERIE_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE SPORT1_l.glcd b/graphlcd/logos/PREMIERE SPORT1_l.glcd Binary files differnew file mode 100644 index 0000000..c6547c2 --- /dev/null +++ b/graphlcd/logos/PREMIERE SPORT1_l.glcd diff --git a/graphlcd/logos/PREMIERE SPORT1_m.glcd b/graphlcd/logos/PREMIERE SPORT1_m.glcd Binary files differnew file mode 100644 index 0000000..df7c5c8 --- /dev/null +++ b/graphlcd/logos/PREMIERE SPORT1_m.glcd diff --git a/graphlcd/logos/PREMIERE SPORT1_v2_l.glcd b/graphlcd/logos/PREMIERE SPORT1_v2_l.glcd Binary files differnew file mode 100644 index 0000000..4012c0f --- /dev/null +++ b/graphlcd/logos/PREMIERE SPORT1_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE SPORT2_l.glcd b/graphlcd/logos/PREMIERE SPORT2_l.glcd Binary files differnew file mode 100644 index 0000000..c99afc7 --- /dev/null +++ b/graphlcd/logos/PREMIERE SPORT2_l.glcd diff --git a/graphlcd/logos/PREMIERE SPORT2_m.glcd b/graphlcd/logos/PREMIERE SPORT2_m.glcd Binary files differnew file mode 100644 index 0000000..10088bd --- /dev/null +++ b/graphlcd/logos/PREMIERE SPORT2_m.glcd diff --git a/graphlcd/logos/PREMIERE SPORT2_v2_l.glcd b/graphlcd/logos/PREMIERE SPORT2_v2_l.glcd Binary files differnew file mode 100644 index 0000000..308a08d --- /dev/null +++ b/graphlcd/logos/PREMIERE SPORT2_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE START_l.glcd b/graphlcd/logos/PREMIERE START_l.glcd Binary files differnew file mode 100644 index 0000000..a4d4dd2 --- /dev/null +++ b/graphlcd/logos/PREMIERE START_l.glcd diff --git a/graphlcd/logos/PREMIERE START_m.glcd b/graphlcd/logos/PREMIERE START_m.glcd Binary files differnew file mode 100644 index 0000000..fc0a473 --- /dev/null +++ b/graphlcd/logos/PREMIERE START_m.glcd diff --git a/graphlcd/logos/PREMIERE START_v2_l.glcd b/graphlcd/logos/PREMIERE START_v2_l.glcd Binary files differnew file mode 100644 index 0000000..dba4dda --- /dev/null +++ b/graphlcd/logos/PREMIERE START_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE1_l.glcd b/graphlcd/logos/PREMIERE1_l.glcd Binary files differnew file mode 100644 index 0000000..d96b181 --- /dev/null +++ b/graphlcd/logos/PREMIERE1_l.glcd diff --git a/graphlcd/logos/PREMIERE1_m.glcd b/graphlcd/logos/PREMIERE1_m.glcd Binary files differnew file mode 100644 index 0000000..dfaaad9 --- /dev/null +++ b/graphlcd/logos/PREMIERE1_m.glcd diff --git a/graphlcd/logos/PREMIERE1_v2_l.glcd b/graphlcd/logos/PREMIERE1_v2_l.glcd Binary files differnew file mode 100644 index 0000000..5ff3581 --- /dev/null +++ b/graphlcd/logos/PREMIERE1_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE2_l.glcd b/graphlcd/logos/PREMIERE2_l.glcd Binary files differnew file mode 100644 index 0000000..3633669 --- /dev/null +++ b/graphlcd/logos/PREMIERE2_l.glcd diff --git a/graphlcd/logos/PREMIERE2_m.glcd b/graphlcd/logos/PREMIERE2_m.glcd Binary files differnew file mode 100644 index 0000000..e54d94d --- /dev/null +++ b/graphlcd/logos/PREMIERE2_m.glcd diff --git a/graphlcd/logos/PREMIERE2_v2_l.glcd b/graphlcd/logos/PREMIERE2_v2_l.glcd Binary files differnew file mode 100644 index 0000000..0426fd9 --- /dev/null +++ b/graphlcd/logos/PREMIERE2_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE3_l.glcd b/graphlcd/logos/PREMIERE3_l.glcd Binary files differnew file mode 100644 index 0000000..ed3c2bf --- /dev/null +++ b/graphlcd/logos/PREMIERE3_l.glcd diff --git a/graphlcd/logos/PREMIERE3_m.glcd b/graphlcd/logos/PREMIERE3_m.glcd Binary files differnew file mode 100644 index 0000000..40895d4 --- /dev/null +++ b/graphlcd/logos/PREMIERE3_m.glcd diff --git a/graphlcd/logos/PREMIERE3_v2_l.glcd b/graphlcd/logos/PREMIERE3_v2_l.glcd Binary files differnew file mode 100644 index 0000000..11ae7da --- /dev/null +++ b/graphlcd/logos/PREMIERE3_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE4_l.glcd b/graphlcd/logos/PREMIERE4_l.glcd Binary files differnew file mode 100644 index 0000000..04ad87b --- /dev/null +++ b/graphlcd/logos/PREMIERE4_l.glcd diff --git a/graphlcd/logos/PREMIERE4_m.glcd b/graphlcd/logos/PREMIERE4_m.glcd Binary files differnew file mode 100644 index 0000000..92acc8b --- /dev/null +++ b/graphlcd/logos/PREMIERE4_m.glcd diff --git a/graphlcd/logos/PREMIERE4_v2_l.glcd b/graphlcd/logos/PREMIERE4_v2_l.glcd Binary files differnew file mode 100644 index 0000000..5ed2de1 --- /dev/null +++ b/graphlcd/logos/PREMIERE4_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE5_l.glcd b/graphlcd/logos/PREMIERE5_l.glcd Binary files differnew file mode 100644 index 0000000..8e124a9 --- /dev/null +++ b/graphlcd/logos/PREMIERE5_l.glcd diff --git a/graphlcd/logos/PREMIERE5_m.glcd b/graphlcd/logos/PREMIERE5_m.glcd Binary files differnew file mode 100644 index 0000000..10da971 --- /dev/null +++ b/graphlcd/logos/PREMIERE5_m.glcd diff --git a/graphlcd/logos/PREMIERE5_v2_l.glcd b/graphlcd/logos/PREMIERE5_v2_l.glcd Binary files differnew file mode 100644 index 0000000..b33f00a --- /dev/null +++ b/graphlcd/logos/PREMIERE5_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE6_l.glcd b/graphlcd/logos/PREMIERE6_l.glcd Binary files differnew file mode 100644 index 0000000..e003ee7 --- /dev/null +++ b/graphlcd/logos/PREMIERE6_l.glcd diff --git a/graphlcd/logos/PREMIERE6_m.glcd b/graphlcd/logos/PREMIERE6_m.glcd Binary files differnew file mode 100644 index 0000000..81c04cb --- /dev/null +++ b/graphlcd/logos/PREMIERE6_m.glcd diff --git a/graphlcd/logos/PREMIERE6_v2_l.glcd b/graphlcd/logos/PREMIERE6_v2_l.glcd Binary files differnew file mode 100644 index 0000000..ed0dfdd --- /dev/null +++ b/graphlcd/logos/PREMIERE6_v2_l.glcd diff --git a/graphlcd/logos/PREMIERE7_l.glcd b/graphlcd/logos/PREMIERE7_l.glcd Binary files differnew file mode 100644 index 0000000..24e672d --- /dev/null +++ b/graphlcd/logos/PREMIERE7_l.glcd diff --git a/graphlcd/logos/PREMIERE7_m.glcd b/graphlcd/logos/PREMIERE7_m.glcd Binary files differnew file mode 100644 index 0000000..d7b41ce --- /dev/null +++ b/graphlcd/logos/PREMIERE7_m.glcd diff --git a/graphlcd/logos/PREMIERE7_v2_l.glcd b/graphlcd/logos/PREMIERE7_v2_l.glcd Binary files differnew file mode 100644 index 0000000..be4259c --- /dev/null +++ b/graphlcd/logos/PREMIERE7_v2_l.glcd diff --git a/graphlcd/logos/PRO SIEBEN AUSTRIA_l.glcd b/graphlcd/logos/PRO SIEBEN AUSTRIA_l.glcd Binary files differnew file mode 100644 index 0000000..5978029 --- /dev/null +++ b/graphlcd/logos/PRO SIEBEN AUSTRIA_l.glcd diff --git a/graphlcd/logos/PRO SIEBEN AUSTRIA_m.glcd b/graphlcd/logos/PRO SIEBEN AUSTRIA_m.glcd Binary files differnew file mode 100644 index 0000000..2662f32 --- /dev/null +++ b/graphlcd/logos/PRO SIEBEN AUSTRIA_m.glcd diff --git a/graphlcd/logos/PRO SIEBEN SCHWEIZ_l.glcd b/graphlcd/logos/PRO SIEBEN SCHWEIZ_l.glcd Binary files differnew file mode 100644 index 0000000..86fe673 --- /dev/null +++ b/graphlcd/logos/PRO SIEBEN SCHWEIZ_l.glcd diff --git a/graphlcd/logos/PRO SIEBEN SCHWEIZ_m.glcd b/graphlcd/logos/PRO SIEBEN SCHWEIZ_m.glcd Binary files differnew file mode 100644 index 0000000..84dab91 --- /dev/null +++ b/graphlcd/logos/PRO SIEBEN SCHWEIZ_m.glcd diff --git a/graphlcd/logos/PRO SIEBEN_l.glcd b/graphlcd/logos/PRO SIEBEN_l.glcd Binary files differnew file mode 100644 index 0000000..742bca5 --- /dev/null +++ b/graphlcd/logos/PRO SIEBEN_l.glcd diff --git a/graphlcd/logos/PRO SIEBEN_m.glcd b/graphlcd/logos/PRO SIEBEN_m.glcd Binary files differnew file mode 100644 index 0000000..8793dfe --- /dev/null +++ b/graphlcd/logos/PRO SIEBEN_m.glcd diff --git a/graphlcd/logos/PRO SIEBEN_v2_l.glcd b/graphlcd/logos/PRO SIEBEN_v2_l.glcd Binary files differnew file mode 100644 index 0000000..730d452 --- /dev/null +++ b/graphlcd/logos/PRO SIEBEN_v2_l.glcd diff --git a/graphlcd/logos/PULS_l.glcd b/graphlcd/logos/PULS_l.glcd Binary files differnew file mode 100644 index 0000000..1179844 --- /dev/null +++ b/graphlcd/logos/PULS_l.glcd diff --git a/graphlcd/logos/PULS_m.glcd b/graphlcd/logos/PULS_m.glcd Binary files differnew file mode 100644 index 0000000..16379cd --- /dev/null +++ b/graphlcd/logos/PULS_m.glcd diff --git a/graphlcd/logos/QVC GERMANY_l.glcd b/graphlcd/logos/QVC GERMANY_l.glcd Binary files differnew file mode 100644 index 0000000..414b626 --- /dev/null +++ b/graphlcd/logos/QVC GERMANY_l.glcd diff --git a/graphlcd/logos/QVC GERMANY_m.glcd b/graphlcd/logos/QVC GERMANY_m.glcd Binary files differnew file mode 100644 index 0000000..0f12f0b --- /dev/null +++ b/graphlcd/logos/QVC GERMANY_m.glcd diff --git a/graphlcd/logos/RADIO 10 GOLD_l.glcd b/graphlcd/logos/RADIO 10 GOLD_l.glcd Binary files differnew file mode 100644 index 0000000..ac5f5a4 --- /dev/null +++ b/graphlcd/logos/RADIO 10 GOLD_l.glcd diff --git a/graphlcd/logos/RADIO 10 GOLD_m.glcd b/graphlcd/logos/RADIO 10 GOLD_m.glcd Binary files differnew file mode 100644 index 0000000..727d3e1 --- /dev/null +++ b/graphlcd/logos/RADIO 10 GOLD_m.glcd diff --git a/graphlcd/logos/RADIO 538_l.glcd b/graphlcd/logos/RADIO 538_l.glcd Binary files differnew file mode 100644 index 0000000..73bc2e5 --- /dev/null +++ b/graphlcd/logos/RADIO 538_l.glcd diff --git a/graphlcd/logos/RADIO 538_m.glcd b/graphlcd/logos/RADIO 538_m.glcd Binary files differnew file mode 100644 index 0000000..0d4480c --- /dev/null +++ b/graphlcd/logos/RADIO 538_m.glcd diff --git a/graphlcd/logos/RADIO MARIA_l.glcd b/graphlcd/logos/RADIO MARIA_l.glcd Binary files differnew file mode 100644 index 0000000..2d126a9 --- /dev/null +++ b/graphlcd/logos/RADIO MARIA_l.glcd diff --git a/graphlcd/logos/RADIO MARIA_m.glcd b/graphlcd/logos/RADIO MARIA_m.glcd Binary files differnew file mode 100644 index 0000000..bea7de8 --- /dev/null +++ b/graphlcd/logos/RADIO MARIA_m.glcd diff --git a/graphlcd/logos/RADIO MARIA_v2_m.glcd b/graphlcd/logos/RADIO MARIA_v2_m.glcd Binary files differnew file mode 100644 index 0000000..ada6d4f --- /dev/null +++ b/graphlcd/logos/RADIO MARIA_v2_m.glcd diff --git a/graphlcd/logos/RADIO MULTIKULTI_l.glcd b/graphlcd/logos/RADIO MULTIKULTI_l.glcd Binary files differnew file mode 100644 index 0000000..a8b4810 --- /dev/null +++ b/graphlcd/logos/RADIO MULTIKULTI_l.glcd diff --git a/graphlcd/logos/RADIO MULTIKULTI_m.glcd b/graphlcd/logos/RADIO MULTIKULTI_m.glcd Binary files differnew file mode 100644 index 0000000..108ba5e --- /dev/null +++ b/graphlcd/logos/RADIO MULTIKULTI_m.glcd diff --git a/graphlcd/logos/RADIO MULTIKULTI_v2_m.glcd b/graphlcd/logos/RADIO MULTIKULTI_v2_m.glcd Binary files differnew file mode 100644 index 0000000..472042f --- /dev/null +++ b/graphlcd/logos/RADIO MULTIKULTI_v2_m.glcd diff --git a/graphlcd/logos/RADIOEINS_l.glcd b/graphlcd/logos/RADIOEINS_l.glcd Binary files differnew file mode 100644 index 0000000..5c64eb1 --- /dev/null +++ b/graphlcd/logos/RADIOEINS_l.glcd diff --git a/graphlcd/logos/RADIOEINS_m.glcd b/graphlcd/logos/RADIOEINS_m.glcd Binary files differnew file mode 100644 index 0000000..6178251 --- /dev/null +++ b/graphlcd/logos/RADIOEINS_m.glcd diff --git a/graphlcd/logos/RAI 1_l.glcd b/graphlcd/logos/RAI 1_l.glcd Binary files differnew file mode 100644 index 0000000..c51b809 --- /dev/null +++ b/graphlcd/logos/RAI 1_l.glcd diff --git a/graphlcd/logos/RAI 1_m.glcd b/graphlcd/logos/RAI 1_m.glcd Binary files differnew file mode 100644 index 0000000..0f8541f --- /dev/null +++ b/graphlcd/logos/RAI 1_m.glcd diff --git a/graphlcd/logos/RAI 1_v2_m.glcd b/graphlcd/logos/RAI 1_v2_m.glcd Binary files differnew file mode 100644 index 0000000..4f408da --- /dev/null +++ b/graphlcd/logos/RAI 1_v2_m.glcd diff --git a/graphlcd/logos/RAI 2_l.glcd b/graphlcd/logos/RAI 2_l.glcd Binary files differnew file mode 100644 index 0000000..a1b5ae6 --- /dev/null +++ b/graphlcd/logos/RAI 2_l.glcd diff --git a/graphlcd/logos/RAI 2_m.glcd b/graphlcd/logos/RAI 2_m.glcd Binary files differnew file mode 100644 index 0000000..a82f388 --- /dev/null +++ b/graphlcd/logos/RAI 2_m.glcd diff --git a/graphlcd/logos/RAI 2_v2_m.glcd b/graphlcd/logos/RAI 2_v2_m.glcd Binary files differnew file mode 100644 index 0000000..57565ea --- /dev/null +++ b/graphlcd/logos/RAI 2_v2_m.glcd diff --git a/graphlcd/logos/RAI 3_l.glcd b/graphlcd/logos/RAI 3_l.glcd Binary files differnew file mode 100644 index 0000000..f28bbb6 --- /dev/null +++ b/graphlcd/logos/RAI 3_l.glcd diff --git a/graphlcd/logos/RAI 3_m.glcd b/graphlcd/logos/RAI 3_m.glcd Binary files differnew file mode 100644 index 0000000..98d981d --- /dev/null +++ b/graphlcd/logos/RAI 3_m.glcd diff --git a/graphlcd/logos/RAI 3_v2_m.glcd b/graphlcd/logos/RAI 3_v2_m.glcd Binary files differnew file mode 100644 index 0000000..525be2b --- /dev/null +++ b/graphlcd/logos/RAI 3_v2_m.glcd diff --git a/graphlcd/logos/RAZE TV_l.glcd b/graphlcd/logos/RAZE TV_l.glcd Binary files differnew file mode 100644 index 0000000..9848ef7 --- /dev/null +++ b/graphlcd/logos/RAZE TV_l.glcd diff --git a/graphlcd/logos/RAZE TV_m.glcd b/graphlcd/logos/RAZE TV_m.glcd Binary files differnew file mode 100644 index 0000000..87ebafb --- /dev/null +++ b/graphlcd/logos/RAZE TV_m.glcd diff --git a/graphlcd/logos/RAZE TV_v2_m.glcd b/graphlcd/logos/RAZE TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..514d35f --- /dev/null +++ b/graphlcd/logos/RAZE TV_v2_m.glcd diff --git a/graphlcd/logos/RBB BERLIN_l.glcd b/graphlcd/logos/RBB BERLIN_l.glcd Binary files differnew file mode 100644 index 0000000..6b14c51 --- /dev/null +++ b/graphlcd/logos/RBB BERLIN_l.glcd diff --git a/graphlcd/logos/RBB BERLIN_m.glcd b/graphlcd/logos/RBB BERLIN_m.glcd Binary files differnew file mode 100644 index 0000000..521ea31 --- /dev/null +++ b/graphlcd/logos/RBB BERLIN_m.glcd diff --git a/graphlcd/logos/RBB BRANDENBURG_l.glcd b/graphlcd/logos/RBB BRANDENBURG_l.glcd Binary files differnew file mode 100644 index 0000000..7b30016 --- /dev/null +++ b/graphlcd/logos/RBB BRANDENBURG_l.glcd diff --git a/graphlcd/logos/RBB BRANDENBURG_m.glcd b/graphlcd/logos/RBB BRANDENBURG_m.glcd Binary files differnew file mode 100644 index 0000000..98fe110 --- /dev/null +++ b/graphlcd/logos/RBB BRANDENBURG_m.glcd diff --git a/graphlcd/logos/REALMADRID_l.glcd b/graphlcd/logos/REALMADRID_l.glcd Binary files differnew file mode 100644 index 0000000..1b57228 --- /dev/null +++ b/graphlcd/logos/REALMADRID_l.glcd diff --git a/graphlcd/logos/REALMADRID_m.glcd b/graphlcd/logos/REALMADRID_m.glcd Binary files differnew file mode 100644 index 0000000..40c4d80 --- /dev/null +++ b/graphlcd/logos/REALMADRID_m.glcd diff --git a/graphlcd/logos/REPLAY-CD-v2_l.glcd b/graphlcd/logos/REPLAY-CD-v2_l.glcd Binary files differnew file mode 100644 index 0000000..2e8453f --- /dev/null +++ b/graphlcd/logos/REPLAY-CD-v2_l.glcd diff --git a/graphlcd/logos/REPLAY-CD-v2_m.glcd b/graphlcd/logos/REPLAY-CD-v2_m.glcd Binary files differnew file mode 100644 index 0000000..fb7d75a --- /dev/null +++ b/graphlcd/logos/REPLAY-CD-v2_m.glcd diff --git a/graphlcd/logos/REPLAY-CD_l.glcd b/graphlcd/logos/REPLAY-CD_l.glcd Binary files differnew file mode 100644 index 0000000..95ef265 --- /dev/null +++ b/graphlcd/logos/REPLAY-CD_l.glcd diff --git a/graphlcd/logos/REPLAY-CD_m.glcd b/graphlcd/logos/REPLAY-CD_m.glcd Binary files differnew file mode 100644 index 0000000..2bd4022 --- /dev/null +++ b/graphlcd/logos/REPLAY-CD_m.glcd diff --git a/graphlcd/logos/REPLAY-DVD-v2_l.glcd b/graphlcd/logos/REPLAY-DVD-v2_l.glcd Binary files differnew file mode 100644 index 0000000..5b7af21 --- /dev/null +++ b/graphlcd/logos/REPLAY-DVD-v2_l.glcd diff --git a/graphlcd/logos/REPLAY-DVD_l.glcd b/graphlcd/logos/REPLAY-DVD_l.glcd Binary files differnew file mode 100644 index 0000000..af19b0f --- /dev/null +++ b/graphlcd/logos/REPLAY-DVD_l.glcd diff --git a/graphlcd/logos/REPLAY-DVD_m.glcd b/graphlcd/logos/REPLAY-DVD_m.glcd Binary files differnew file mode 100644 index 0000000..6d43fa8 --- /dev/null +++ b/graphlcd/logos/REPLAY-DVD_m.glcd diff --git a/graphlcd/logos/REPLAY-FILE_l.glcd b/graphlcd/logos/REPLAY-FILE_l.glcd Binary files differnew file mode 100644 index 0000000..cf60fc4 --- /dev/null +++ b/graphlcd/logos/REPLAY-FILE_l.glcd diff --git a/graphlcd/logos/REPLAY-FILE_m.glcd b/graphlcd/logos/REPLAY-FILE_m.glcd Binary files differnew file mode 100644 index 0000000..3a397c1 --- /dev/null +++ b/graphlcd/logos/REPLAY-FILE_m.glcd diff --git a/graphlcd/logos/REPLAY-IMAGE_l.glcd b/graphlcd/logos/REPLAY-IMAGE_l.glcd Binary files differnew file mode 100644 index 0000000..6f9ddd1 --- /dev/null +++ b/graphlcd/logos/REPLAY-IMAGE_l.glcd diff --git a/graphlcd/logos/REPLAY-IMAGE_m.glcd b/graphlcd/logos/REPLAY-IMAGE_m.glcd Binary files differnew file mode 100644 index 0000000..3f240e5 --- /dev/null +++ b/graphlcd/logos/REPLAY-IMAGE_m.glcd diff --git a/graphlcd/logos/REPLAY-MUSIC_l.glcd b/graphlcd/logos/REPLAY-MUSIC_l.glcd Binary files differnew file mode 100644 index 0000000..f1b2266 --- /dev/null +++ b/graphlcd/logos/REPLAY-MUSIC_l.glcd diff --git a/graphlcd/logos/REPLAY-MUSIC_m.glcd b/graphlcd/logos/REPLAY-MUSIC_m.glcd Binary files differnew file mode 100644 index 0000000..1ea4d01 --- /dev/null +++ b/graphlcd/logos/REPLAY-MUSIC_m.glcd diff --git a/graphlcd/logos/REPLAY-VDR_l.glcd b/graphlcd/logos/REPLAY-VDR_l.glcd Binary files differnew file mode 100644 index 0000000..d879417 --- /dev/null +++ b/graphlcd/logos/REPLAY-VDR_l.glcd diff --git a/graphlcd/logos/REPLAY-VDR_m.glcd b/graphlcd/logos/REPLAY-VDR_m.glcd Binary files differnew file mode 100644 index 0000000..7d3a947 --- /dev/null +++ b/graphlcd/logos/REPLAY-VDR_m.glcd diff --git a/graphlcd/logos/RFM-TV_m.glcd b/graphlcd/logos/RFM-TV_m.glcd Binary files differnew file mode 100644 index 0000000..eb731f7 --- /dev/null +++ b/graphlcd/logos/RFM-TV_m.glcd diff --git a/graphlcd/logos/RHEIN MAIN TV_l.glcd b/graphlcd/logos/RHEIN MAIN TV_l.glcd Binary files differnew file mode 100644 index 0000000..d539d6b --- /dev/null +++ b/graphlcd/logos/RHEIN MAIN TV_l.glcd diff --git a/graphlcd/logos/RHEIN MAIN TV_m.glcd b/graphlcd/logos/RHEIN MAIN TV_m.glcd Binary files differnew file mode 100644 index 0000000..b1ddd98 --- /dev/null +++ b/graphlcd/logos/RHEIN MAIN TV_m.glcd diff --git a/graphlcd/logos/RHEIN MAIN TV_v2_m.glcd b/graphlcd/logos/RHEIN MAIN TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..121942f --- /dev/null +++ b/graphlcd/logos/RHEIN MAIN TV_v2_m.glcd diff --git a/graphlcd/logos/RIRE ET CHANSONS_l.glcd b/graphlcd/logos/RIRE ET CHANSONS_l.glcd Binary files differnew file mode 100644 index 0000000..47a0168 --- /dev/null +++ b/graphlcd/logos/RIRE ET CHANSONS_l.glcd diff --git a/graphlcd/logos/RIRE ET CHANSONS_m.glcd b/graphlcd/logos/RIRE ET CHANSONS_m.glcd Binary files differnew file mode 100644 index 0000000..149cbd8 --- /dev/null +++ b/graphlcd/logos/RIRE ET CHANSONS_m.glcd diff --git a/graphlcd/logos/ROCK ANTENNE_l.glcd b/graphlcd/logos/ROCK ANTENNE_l.glcd Binary files differnew file mode 100644 index 0000000..1a7f249 --- /dev/null +++ b/graphlcd/logos/ROCK ANTENNE_l.glcd diff --git a/graphlcd/logos/ROCK ANTENNE_m.glcd b/graphlcd/logos/ROCK ANTENNE_m.glcd Binary files differnew file mode 100644 index 0000000..5ef1b5d --- /dev/null +++ b/graphlcd/logos/ROCK ANTENNE_m.glcd diff --git a/graphlcd/logos/ROCK ANTENNE_v2_m.glcd b/graphlcd/logos/ROCK ANTENNE_v2_m.glcd Binary files differnew file mode 100644 index 0000000..c1a67d7 --- /dev/null +++ b/graphlcd/logos/ROCK ANTENNE_v2_m.glcd diff --git a/graphlcd/logos/RSR COULEUR 3_l.glcd b/graphlcd/logos/RSR COULEUR 3_l.glcd Binary files differnew file mode 100644 index 0000000..7179318 --- /dev/null +++ b/graphlcd/logos/RSR COULEUR 3_l.glcd diff --git a/graphlcd/logos/RSR COULEUR 3_m.glcd b/graphlcd/logos/RSR COULEUR 3_m.glcd Binary files differnew file mode 100644 index 0000000..bcd4494 --- /dev/null +++ b/graphlcd/logos/RSR COULEUR 3_m.glcd diff --git a/graphlcd/logos/RTBF SAT_l.glcd b/graphlcd/logos/RTBF SAT_l.glcd Binary files differnew file mode 100644 index 0000000..3e3bab1 --- /dev/null +++ b/graphlcd/logos/RTBF SAT_l.glcd diff --git a/graphlcd/logos/RTBF SAT_m.glcd b/graphlcd/logos/RTBF SAT_m.glcd Binary files differnew file mode 100644 index 0000000..f84b460 --- /dev/null +++ b/graphlcd/logos/RTBF SAT_m.glcd diff --git a/graphlcd/logos/RTL 2 AUSTRIA_l.glcd b/graphlcd/logos/RTL 2 AUSTRIA_l.glcd Binary files differnew file mode 100644 index 0000000..a054c59 --- /dev/null +++ b/graphlcd/logos/RTL 2 AUSTRIA_l.glcd diff --git a/graphlcd/logos/RTL 2 AUSTRIA_m.glcd b/graphlcd/logos/RTL 2 AUSTRIA_m.glcd Binary files differnew file mode 100644 index 0000000..13f12a1 --- /dev/null +++ b/graphlcd/logos/RTL 2 AUSTRIA_m.glcd diff --git a/graphlcd/logos/RTL 2_l.glcd b/graphlcd/logos/RTL 2_l.glcd Binary files differnew file mode 100644 index 0000000..a054c59 --- /dev/null +++ b/graphlcd/logos/RTL 2_l.glcd diff --git a/graphlcd/logos/RTL 2_m.glcd b/graphlcd/logos/RTL 2_m.glcd Binary files differnew file mode 100644 index 0000000..13f12a1 --- /dev/null +++ b/graphlcd/logos/RTL 2_m.glcd diff --git a/graphlcd/logos/RTL AUSTRIA_l.glcd b/graphlcd/logos/RTL AUSTRIA_l.glcd Binary files differnew file mode 100644 index 0000000..5c54cfe --- /dev/null +++ b/graphlcd/logos/RTL AUSTRIA_l.glcd diff --git a/graphlcd/logos/RTL AUSTRIA_m.glcd b/graphlcd/logos/RTL AUSTRIA_m.glcd Binary files differnew file mode 100644 index 0000000..8c51123 --- /dev/null +++ b/graphlcd/logos/RTL AUSTRIA_m.glcd diff --git a/graphlcd/logos/RTL AUSTRIA_v2_m.glcd b/graphlcd/logos/RTL AUSTRIA_v2_m.glcd Binary files differnew file mode 100644 index 0000000..25ee6ea --- /dev/null +++ b/graphlcd/logos/RTL AUSTRIA_v2_m.glcd diff --git a/graphlcd/logos/RTL FM_l.glcd b/graphlcd/logos/RTL FM_l.glcd Binary files differnew file mode 100644 index 0000000..a483538 --- /dev/null +++ b/graphlcd/logos/RTL FM_l.glcd diff --git a/graphlcd/logos/RTL FM_m.glcd b/graphlcd/logos/RTL FM_m.glcd Binary files differnew file mode 100644 index 0000000..f480738 --- /dev/null +++ b/graphlcd/logos/RTL FM_m.glcd diff --git a/graphlcd/logos/RTL RADIO_l.glcd b/graphlcd/logos/RTL RADIO_l.glcd Binary files differnew file mode 100644 index 0000000..d72fc78 --- /dev/null +++ b/graphlcd/logos/RTL RADIO_l.glcd diff --git a/graphlcd/logos/RTL RADIO_m.glcd b/graphlcd/logos/RTL RADIO_m.glcd Binary files differnew file mode 100644 index 0000000..865126e --- /dev/null +++ b/graphlcd/logos/RTL RADIO_m.glcd diff --git a/graphlcd/logos/RTL SHOP_l.glcd b/graphlcd/logos/RTL SHOP_l.glcd Binary files differnew file mode 100644 index 0000000..18241d6 --- /dev/null +++ b/graphlcd/logos/RTL SHOP_l.glcd diff --git a/graphlcd/logos/RTL SHOP_m.glcd b/graphlcd/logos/RTL SHOP_m.glcd Binary files differnew file mode 100644 index 0000000..0fd8fcc --- /dev/null +++ b/graphlcd/logos/RTL SHOP_m.glcd diff --git a/graphlcd/logos/RTL SHOP_v2_m.glcd b/graphlcd/logos/RTL SHOP_v2_m.glcd Binary files differnew file mode 100644 index 0000000..1a3c945 --- /dev/null +++ b/graphlcd/logos/RTL SHOP_v2_m.glcd diff --git a/graphlcd/logos/RTL TELE LETZEBURG_l.glcd b/graphlcd/logos/RTL TELE LETZEBURG_l.glcd Binary files differnew file mode 100644 index 0000000..3381dfb --- /dev/null +++ b/graphlcd/logos/RTL TELE LETZEBURG_l.glcd diff --git a/graphlcd/logos/RTL TELE LETZEBURG_m.glcd b/graphlcd/logos/RTL TELE LETZEBURG_m.glcd Binary files differnew file mode 100644 index 0000000..4b4b4dc --- /dev/null +++ b/graphlcd/logos/RTL TELE LETZEBURG_m.glcd diff --git a/graphlcd/logos/RTL TELE LETZEBURG_v2_l.glcd b/graphlcd/logos/RTL TELE LETZEBURG_v2_l.glcd Binary files differnew file mode 100644 index 0000000..9a29b21 --- /dev/null +++ b/graphlcd/logos/RTL TELE LETZEBURG_v2_l.glcd diff --git a/graphlcd/logos/RTL TELEVISION_l.glcd b/graphlcd/logos/RTL TELEVISION_l.glcd Binary files differnew file mode 100644 index 0000000..5c54cfe --- /dev/null +++ b/graphlcd/logos/RTL TELEVISION_l.glcd diff --git a/graphlcd/logos/RTL TELEVISION_m.glcd b/graphlcd/logos/RTL TELEVISION_m.glcd Binary files differnew file mode 100644 index 0000000..9b13aa2 --- /dev/null +++ b/graphlcd/logos/RTL TELEVISION_m.glcd diff --git a/graphlcd/logos/RTL4_l.glcd b/graphlcd/logos/RTL4_l.glcd Binary files differnew file mode 100644 index 0000000..b84524f --- /dev/null +++ b/graphlcd/logos/RTL4_l.glcd diff --git a/graphlcd/logos/RTL4_m.glcd b/graphlcd/logos/RTL4_m.glcd Binary files differnew file mode 100644 index 0000000..81c34b5 --- /dev/null +++ b/graphlcd/logos/RTL4_m.glcd diff --git a/graphlcd/logos/RTL5_l.glcd b/graphlcd/logos/RTL5_l.glcd Binary files differnew file mode 100644 index 0000000..ab42540 --- /dev/null +++ b/graphlcd/logos/RTL5_l.glcd diff --git a/graphlcd/logos/RTL5_m.glcd b/graphlcd/logos/RTL5_m.glcd Binary files differnew file mode 100644 index 0000000..351a26a --- /dev/null +++ b/graphlcd/logos/RTL5_m.glcd diff --git a/graphlcd/logos/RTM-MAROC_l.glcd b/graphlcd/logos/RTM-MAROC_l.glcd Binary files differnew file mode 100644 index 0000000..ff303d1 --- /dev/null +++ b/graphlcd/logos/RTM-MAROC_l.glcd diff --git a/graphlcd/logos/RTP INT_l.glcd b/graphlcd/logos/RTP INT_l.glcd Binary files differnew file mode 100644 index 0000000..51695de --- /dev/null +++ b/graphlcd/logos/RTP INT_l.glcd diff --git a/graphlcd/logos/RTP INT_m.glcd b/graphlcd/logos/RTP INT_m.glcd Binary files differnew file mode 100644 index 0000000..4b7263b --- /dev/null +++ b/graphlcd/logos/RTP INT_m.glcd diff --git a/graphlcd/logos/SAILING CHANNEL_l.glcd b/graphlcd/logos/SAILING CHANNEL_l.glcd Binary files differnew file mode 100644 index 0000000..20f8b7e --- /dev/null +++ b/graphlcd/logos/SAILING CHANNEL_l.glcd diff --git a/graphlcd/logos/SAT1 AUSTRIA_l.glcd b/graphlcd/logos/SAT1 AUSTRIA_l.glcd Binary files differnew file mode 100644 index 0000000..041b996 --- /dev/null +++ b/graphlcd/logos/SAT1 AUSTRIA_l.glcd diff --git a/graphlcd/logos/SAT1 AUSTRIA_m.glcd b/graphlcd/logos/SAT1 AUSTRIA_m.glcd Binary files differnew file mode 100644 index 0000000..2882006 --- /dev/null +++ b/graphlcd/logos/SAT1 AUSTRIA_m.glcd diff --git a/graphlcd/logos/SAT1 AUSTRIA_v2_m.glcd b/graphlcd/logos/SAT1 AUSTRIA_v2_m.glcd Binary files differnew file mode 100644 index 0000000..fea6fb2 --- /dev/null +++ b/graphlcd/logos/SAT1 AUSTRIA_v2_m.glcd diff --git a/graphlcd/logos/SAT1 SCHWEIZ_l.glcd b/graphlcd/logos/SAT1 SCHWEIZ_l.glcd Binary files differnew file mode 100644 index 0000000..6c7469d --- /dev/null +++ b/graphlcd/logos/SAT1 SCHWEIZ_l.glcd diff --git a/graphlcd/logos/SAT1 SCHWEIZ_m.glcd b/graphlcd/logos/SAT1 SCHWEIZ_m.glcd Binary files differnew file mode 100644 index 0000000..d3a5dec --- /dev/null +++ b/graphlcd/logos/SAT1 SCHWEIZ_m.glcd diff --git a/graphlcd/logos/SAT1_l.glcd b/graphlcd/logos/SAT1_l.glcd Binary files differnew file mode 100644 index 0000000..bfcead0 --- /dev/null +++ b/graphlcd/logos/SAT1_l.glcd diff --git a/graphlcd/logos/SAT1_m.glcd b/graphlcd/logos/SAT1_m.glcd Binary files differnew file mode 100644 index 0000000..f57e0ff --- /dev/null +++ b/graphlcd/logos/SAT1_m.glcd diff --git a/graphlcd/logos/SBS6_l.glcd b/graphlcd/logos/SBS6_l.glcd Binary files differnew file mode 100644 index 0000000..d2893da --- /dev/null +++ b/graphlcd/logos/SBS6_l.glcd diff --git a/graphlcd/logos/SBS6_m.glcd b/graphlcd/logos/SBS6_m.glcd Binary files differnew file mode 100644 index 0000000..8b10d0f --- /dev/null +++ b/graphlcd/logos/SBS6_m.glcd diff --git a/graphlcd/logos/SILVERLINE_l.glcd b/graphlcd/logos/SILVERLINE_l.glcd Binary files differnew file mode 100644 index 0000000..9536a08 --- /dev/null +++ b/graphlcd/logos/SILVERLINE_l.glcd diff --git a/graphlcd/logos/SKY RADIO NL_l.glcd b/graphlcd/logos/SKY RADIO NL_l.glcd Binary files differnew file mode 100644 index 0000000..5bf1fef --- /dev/null +++ b/graphlcd/logos/SKY RADIO NL_l.glcd diff --git a/graphlcd/logos/SKY RADIO NL_m.glcd b/graphlcd/logos/SKY RADIO NL_m.glcd Binary files differnew file mode 100644 index 0000000..d55eac7 --- /dev/null +++ b/graphlcd/logos/SKY RADIO NL_m.glcd diff --git a/graphlcd/logos/SONNENKLAR TV_l.glcd b/graphlcd/logos/SONNENKLAR TV_l.glcd Binary files differnew file mode 100644 index 0000000..31491c9 --- /dev/null +++ b/graphlcd/logos/SONNENKLAR TV_l.glcd diff --git a/graphlcd/logos/SONNENKLAR TV_m.glcd b/graphlcd/logos/SONNENKLAR TV_m.glcd Binary files differnew file mode 100644 index 0000000..c0d3943 --- /dev/null +++ b/graphlcd/logos/SONNENKLAR TV_m.glcd diff --git a/graphlcd/logos/SONNENKLAR TV_v2_m.glcd b/graphlcd/logos/SONNENKLAR TV_v2_m.glcd Binary files differnew file mode 100644 index 0000000..588c83a --- /dev/null +++ b/graphlcd/logos/SONNENKLAR TV_v2_m.glcd diff --git a/graphlcd/logos/SPIEGEL TV XXP_l.glcd b/graphlcd/logos/SPIEGEL TV XXP_l.glcd Binary files differnew file mode 100644 index 0000000..0b937d6 --- /dev/null +++ b/graphlcd/logos/SPIEGEL TV XXP_l.glcd diff --git a/graphlcd/logos/SPUTNIK_l.glcd b/graphlcd/logos/SPUTNIK_l.glcd Binary files differnew file mode 100644 index 0000000..08467e4 --- /dev/null +++ b/graphlcd/logos/SPUTNIK_l.glcd diff --git a/graphlcd/logos/SPUTNIK_m.glcd b/graphlcd/logos/SPUTNIK_m.glcd Binary files differnew file mode 100644 index 0000000..4e40b73 --- /dev/null +++ b/graphlcd/logos/SPUTNIK_m.glcd diff --git a/graphlcd/logos/SPUTNIK_v2_l.glcd b/graphlcd/logos/SPUTNIK_v2_l.glcd Binary files differnew file mode 100644 index 0000000..c785171 --- /dev/null +++ b/graphlcd/logos/SPUTNIK_v2_l.glcd diff --git a/graphlcd/logos/SPUTNIK_v2_m.glcd b/graphlcd/logos/SPUTNIK_v2_m.glcd Binary files differnew file mode 100644 index 0000000..2f45511 --- /dev/null +++ b/graphlcd/logos/SPUTNIK_v2_m.glcd diff --git a/graphlcd/logos/SR 1_l.glcd b/graphlcd/logos/SR 1_l.glcd Binary files differnew file mode 100644 index 0000000..92ec5cc --- /dev/null +++ b/graphlcd/logos/SR 1_l.glcd diff --git a/graphlcd/logos/SR 1_m.glcd b/graphlcd/logos/SR 1_m.glcd Binary files differnew file mode 100644 index 0000000..b852f51 --- /dev/null +++ b/graphlcd/logos/SR 1_m.glcd diff --git a/graphlcd/logos/SR FERNSEHEN SW_l.glcd b/graphlcd/logos/SR FERNSEHEN SW_l.glcd Binary files differnew file mode 100644 index 0000000..a543eda --- /dev/null +++ b/graphlcd/logos/SR FERNSEHEN SW_l.glcd diff --git a/graphlcd/logos/SR FERNSEHEN SW_m.glcd b/graphlcd/logos/SR FERNSEHEN SW_m.glcd Binary files differnew file mode 100644 index 0000000..a320e1d --- /dev/null +++ b/graphlcd/logos/SR FERNSEHEN SW_m.glcd diff --git a/graphlcd/logos/SR FERNSEHEN SW_v2_m.glcd b/graphlcd/logos/SR FERNSEHEN SW_v2_m.glcd Binary files differnew file mode 100644 index 0000000..942a6a7 --- /dev/null +++ b/graphlcd/logos/SR FERNSEHEN SW_v2_m.glcd diff --git a/graphlcd/logos/STUDIO UNIVERSAL_l.glcd b/graphlcd/logos/STUDIO UNIVERSAL_l.glcd Binary files differnew file mode 100644 index 0000000..83bf5e9 --- /dev/null +++ b/graphlcd/logos/STUDIO UNIVERSAL_l.glcd diff --git a/graphlcd/logos/STUDIO UNIVERSAL_m.glcd b/graphlcd/logos/STUDIO UNIVERSAL_m.glcd Binary files differnew file mode 100644 index 0000000..5161ac6 --- /dev/null +++ b/graphlcd/logos/STUDIO UNIVERSAL_m.glcd diff --git a/graphlcd/logos/SUEDWEST FS BW_l.glcd b/graphlcd/logos/SUEDWEST FS BW_l.glcd Binary files differnew file mode 100644 index 0000000..db4a379 --- /dev/null +++ b/graphlcd/logos/SUEDWEST FS BW_l.glcd diff --git a/graphlcd/logos/SUEDWEST FS BW_m.glcd b/graphlcd/logos/SUEDWEST FS BW_m.glcd Binary files differnew file mode 100644 index 0000000..aad0a8b --- /dev/null +++ b/graphlcd/logos/SUEDWEST FS BW_m.glcd diff --git a/graphlcd/logos/SUEDWEST FS BW_v2_l.glcd b/graphlcd/logos/SUEDWEST FS BW_v2_l.glcd Binary files differnew file mode 100644 index 0000000..8ba6648 --- /dev/null +++ b/graphlcd/logos/SUEDWEST FS BW_v2_l.glcd diff --git a/graphlcd/logos/SUEDWEST FS RP_l.glcd b/graphlcd/logos/SUEDWEST FS RP_l.glcd Binary files differnew file mode 100644 index 0000000..59529d2 --- /dev/null +++ b/graphlcd/logos/SUEDWEST FS RP_l.glcd diff --git a/graphlcd/logos/SUEDWEST FS RP_m.glcd b/graphlcd/logos/SUEDWEST FS RP_m.glcd Binary files differnew file mode 100644 index 0000000..ef6109d --- /dev/null +++ b/graphlcd/logos/SUEDWEST FS RP_m.glcd diff --git a/graphlcd/logos/SUEDWEST FS RP_v2_l.glcd b/graphlcd/logos/SUEDWEST FS RP_v2_l.glcd Binary files differnew file mode 100644 index 0000000..6a2302a --- /dev/null +++ b/graphlcd/logos/SUEDWEST FS RP_v2_l.glcd diff --git a/graphlcd/logos/SUNSHINE LIVE_l.glcd b/graphlcd/logos/SUNSHINE LIVE_l.glcd Binary files differnew file mode 100644 index 0000000..fd152b0 --- /dev/null +++ b/graphlcd/logos/SUNSHINE LIVE_l.glcd diff --git a/graphlcd/logos/SUNSHINE LIVE_m.glcd b/graphlcd/logos/SUNSHINE LIVE_m.glcd Binary files differnew file mode 100644 index 0000000..39d0871 --- /dev/null +++ b/graphlcd/logos/SUNSHINE LIVE_m.glcd diff --git a/graphlcd/logos/SUNSHINE LIVE_v2_m.glcd b/graphlcd/logos/SUNSHINE LIVE_v2_m.glcd Binary files differnew file mode 100644 index 0000000..a8a92f4 --- /dev/null +++ b/graphlcd/logos/SUNSHINE LIVE_v2_m.glcd diff --git a/graphlcd/logos/SUPER RTL AUSTRIA_l.glcd b/graphlcd/logos/SUPER RTL AUSTRIA_l.glcd Binary files differnew file mode 100644 index 0000000..fbb8a0f --- /dev/null +++ b/graphlcd/logos/SUPER RTL AUSTRIA_l.glcd diff --git a/graphlcd/logos/SUPER RTL AUSTRIA_m.glcd b/graphlcd/logos/SUPER RTL AUSTRIA_m.glcd Binary files differnew file mode 100644 index 0000000..5caba7c --- /dev/null +++ b/graphlcd/logos/SUPER RTL AUSTRIA_m.glcd diff --git a/graphlcd/logos/SUPER RTL_l.glcd b/graphlcd/logos/SUPER RTL_l.glcd Binary files differnew file mode 100644 index 0000000..fbb8a0f --- /dev/null +++ b/graphlcd/logos/SUPER RTL_l.glcd diff --git a/graphlcd/logos/SUPER RTL_m.glcd b/graphlcd/logos/SUPER RTL_m.glcd Binary files differnew file mode 100644 index 0000000..24fb28b --- /dev/null +++ b/graphlcd/logos/SUPER RTL_m.glcd diff --git a/graphlcd/logos/SUPER RTL_v2_l.glcd b/graphlcd/logos/SUPER RTL_v2_l.glcd Binary files differnew file mode 100644 index 0000000..2e08d09 --- /dev/null +++ b/graphlcd/logos/SUPER RTL_v2_l.glcd diff --git a/graphlcd/logos/SWR2_l.glcd b/graphlcd/logos/SWR2_l.glcd Binary files differnew file mode 100644 index 0000000..2925575 --- /dev/null +++ b/graphlcd/logos/SWR2_l.glcd diff --git a/graphlcd/logos/SWR2_m.glcd b/graphlcd/logos/SWR2_m.glcd Binary files differnew file mode 100644 index 0000000..c874f4c --- /dev/null +++ b/graphlcd/logos/SWR2_m.glcd diff --git a/graphlcd/logos/SWR2_v2_m.glcd b/graphlcd/logos/SWR2_v2_m.glcd Binary files differnew file mode 100644 index 0000000..224d21d --- /dev/null +++ b/graphlcd/logos/SWR2_v2_m.glcd diff --git a/graphlcd/logos/Sat1 SCHWEIZ_v2_m.glcd b/graphlcd/logos/Sat1 SCHWEIZ_v2_m.glcd Binary files differnew file mode 100644 index 0000000..a01a9e0 --- /dev/null +++ b/graphlcd/logos/Sat1 SCHWEIZ_v2_m.glcd diff --git a/graphlcd/logos/TANGO TV_l.glcd b/graphlcd/logos/TANGO TV_l.glcd Binary files differnew file mode 100644 index 0000000..e90433a --- /dev/null +++ b/graphlcd/logos/TANGO TV_l.glcd diff --git a/graphlcd/logos/TANGO TV_m.glcd b/graphlcd/logos/TANGO TV_m.glcd Binary files differnew file mode 100644 index 0000000..402945a --- /dev/null +++ b/graphlcd/logos/TANGO TV_m.glcd diff --git a/graphlcd/logos/TELE 5_l.glcd b/graphlcd/logos/TELE 5_l.glcd Binary files differnew file mode 100644 index 0000000..2ecac47 --- /dev/null +++ b/graphlcd/logos/TELE 5_l.glcd diff --git a/graphlcd/logos/TELE 5_m.glcd b/graphlcd/logos/TELE 5_m.glcd Binary files differnew file mode 100644 index 0000000..0409527 --- /dev/null +++ b/graphlcd/logos/TELE 5_m.glcd diff --git a/graphlcd/logos/TELE 5_v2_m.glcd b/graphlcd/logos/TELE 5_v2_m.glcd Binary files differnew file mode 100644 index 0000000..cdbb250 --- /dev/null +++ b/graphlcd/logos/TELE 5_v2_m.glcd diff --git a/graphlcd/logos/TMF_l.glcd b/graphlcd/logos/TMF_l.glcd Binary files differnew file mode 100644 index 0000000..5f32063 --- /dev/null +++ b/graphlcd/logos/TMF_l.glcd diff --git a/graphlcd/logos/TMF_m.glcd b/graphlcd/logos/TMF_m.glcd Binary files differnew file mode 100644 index 0000000..70b2d0e --- /dev/null +++ b/graphlcd/logos/TMF_m.glcd diff --git a/graphlcd/logos/TRACE TV_l.glcd b/graphlcd/logos/TRACE TV_l.glcd Binary files differnew file mode 100644 index 0000000..c9bfb2a --- /dev/null +++ b/graphlcd/logos/TRACE TV_l.glcd diff --git a/graphlcd/logos/TRW AM_l.glcd b/graphlcd/logos/TRW AM_l.glcd Binary files differnew file mode 100644 index 0000000..ffdfad5 --- /dev/null +++ b/graphlcd/logos/TRW AM_l.glcd diff --git a/graphlcd/logos/TRW AM_m.glcd b/graphlcd/logos/TRW AM_m.glcd Binary files differnew file mode 100644 index 0000000..c2b8d15 --- /dev/null +++ b/graphlcd/logos/TRW AM_m.glcd diff --git a/graphlcd/logos/TV 5_l.glcd b/graphlcd/logos/TV 5_l.glcd Binary files differnew file mode 100644 index 0000000..ee181f5 --- /dev/null +++ b/graphlcd/logos/TV 5_l.glcd diff --git a/graphlcd/logos/TV BERLIN_l.glcd b/graphlcd/logos/TV BERLIN_l.glcd Binary files differnew file mode 100644 index 0000000..32de271 --- /dev/null +++ b/graphlcd/logos/TV BERLIN_l.glcd diff --git a/graphlcd/logos/TV BERLIN_m.glcd b/graphlcd/logos/TV BERLIN_m.glcd Binary files differnew file mode 100644 index 0000000..84c5d07 --- /dev/null +++ b/graphlcd/logos/TV BERLIN_m.glcd diff --git a/graphlcd/logos/TV BERLIN_v2_l.glcd b/graphlcd/logos/TV BERLIN_v2_l.glcd Binary files differnew file mode 100644 index 0000000..5b0839f --- /dev/null +++ b/graphlcd/logos/TV BERLIN_v2_l.glcd diff --git a/graphlcd/logos/TV BERLIN_v2_m.glcd b/graphlcd/logos/TV BERLIN_v2_m.glcd Binary files differnew file mode 100644 index 0000000..a26a9db --- /dev/null +++ b/graphlcd/logos/TV BERLIN_v2_m.glcd diff --git a/graphlcd/logos/TV BERLIN_v3_m.glcd b/graphlcd/logos/TV BERLIN_v3_m.glcd Binary files differnew file mode 100644 index 0000000..779b35e --- /dev/null +++ b/graphlcd/logos/TV BERLIN_v3_m.glcd diff --git a/graphlcd/logos/TV GALICIA_m.glcd b/graphlcd/logos/TV GALICIA_m.glcd Binary files differnew file mode 100644 index 0000000..2f8c65a --- /dev/null +++ b/graphlcd/logos/TV GALICIA_m.glcd diff --git a/graphlcd/logos/TV GUSTO_l.glcd b/graphlcd/logos/TV GUSTO_l.glcd Binary files differnew file mode 100644 index 0000000..d344f37 --- /dev/null +++ b/graphlcd/logos/TV GUSTO_l.glcd diff --git a/graphlcd/logos/TV TRAVEL SHOP_l.glcd b/graphlcd/logos/TV TRAVEL SHOP_l.glcd Binary files differnew file mode 100644 index 0000000..ba4fd8a --- /dev/null +++ b/graphlcd/logos/TV TRAVEL SHOP_l.glcd diff --git a/graphlcd/logos/TV TRAVEL SHOP_m.glcd b/graphlcd/logos/TV TRAVEL SHOP_m.glcd Binary files differnew file mode 100644 index 0000000..e143ea2 --- /dev/null +++ b/graphlcd/logos/TV TRAVEL SHOP_m.glcd diff --git a/graphlcd/logos/TV TRAVEL SHOP_v2_m.glcd b/graphlcd/logos/TV TRAVEL SHOP_v2_m.glcd Binary files differnew file mode 100644 index 0000000..c38eab2 --- /dev/null +++ b/graphlcd/logos/TV TRAVEL SHOP_v2_m.glcd diff --git a/graphlcd/logos/TV5 EUROPE_l.glcd b/graphlcd/logos/TV5 EUROPE_l.glcd Binary files differnew file mode 100644 index 0000000..55d1905 --- /dev/null +++ b/graphlcd/logos/TV5 EUROPE_l.glcd diff --git a/graphlcd/logos/TV5 EUROPE_m.glcd b/graphlcd/logos/TV5 EUROPE_m.glcd Binary files differnew file mode 100644 index 0000000..11a32ae --- /dev/null +++ b/graphlcd/logos/TV5 EUROPE_m.glcd diff --git a/graphlcd/logos/TV6_l.glcd b/graphlcd/logos/TV6_l.glcd Binary files differnew file mode 100644 index 0000000..ff202ab --- /dev/null +++ b/graphlcd/logos/TV6_l.glcd diff --git a/graphlcd/logos/TV6_m.glcd b/graphlcd/logos/TV6_m.glcd Binary files differnew file mode 100644 index 0000000..bc14ec3 --- /dev/null +++ b/graphlcd/logos/TV6_m.glcd diff --git a/graphlcd/logos/TV7_l.glcd b/graphlcd/logos/TV7_l.glcd Binary files differnew file mode 100644 index 0000000..30c8d92 --- /dev/null +++ b/graphlcd/logos/TV7_l.glcd diff --git a/graphlcd/logos/TVC INT_l.glcd b/graphlcd/logos/TVC INT_l.glcd Binary files differnew file mode 100644 index 0000000..c809267 --- /dev/null +++ b/graphlcd/logos/TVC INT_l.glcd diff --git a/graphlcd/logos/TVC INT_m.glcd b/graphlcd/logos/TVC INT_m.glcd Binary files differnew file mode 100644 index 0000000..c528d62 --- /dev/null +++ b/graphlcd/logos/TVC INT_m.glcd diff --git a/graphlcd/logos/TVE INT_l.glcd b/graphlcd/logos/TVE INT_l.glcd Binary files differnew file mode 100644 index 0000000..f8056bc --- /dev/null +++ b/graphlcd/logos/TVE INT_l.glcd diff --git a/graphlcd/logos/TVE INT_m.glcd b/graphlcd/logos/TVE INT_m.glcd Binary files differnew file mode 100644 index 0000000..a38ddbd --- /dev/null +++ b/graphlcd/logos/TVE INT_m.glcd diff --git a/graphlcd/logos/TW1_l.glcd b/graphlcd/logos/TW1_l.glcd Binary files differnew file mode 100644 index 0000000..5928b5f --- /dev/null +++ b/graphlcd/logos/TW1_l.glcd diff --git a/graphlcd/logos/TW1_m.glcd b/graphlcd/logos/TW1_m.glcd Binary files differnew file mode 100644 index 0000000..fabea79 --- /dev/null +++ b/graphlcd/logos/TW1_m.glcd diff --git a/graphlcd/logos/TW1_v2_m.glcd b/graphlcd/logos/TW1_v2_m.glcd Binary files differnew file mode 100644 index 0000000..ac93a8c --- /dev/null +++ b/graphlcd/logos/TW1_v2_m.glcd diff --git a/graphlcd/logos/V8_l.glcd b/graphlcd/logos/V8_l.glcd Binary files differnew file mode 100644 index 0000000..6cadbf8 --- /dev/null +++ b/graphlcd/logos/V8_l.glcd diff --git a/graphlcd/logos/V8_m.glcd b/graphlcd/logos/V8_m.glcd Binary files differnew file mode 100644 index 0000000..c51daf9 --- /dev/null +++ b/graphlcd/logos/V8_m.glcd diff --git a/graphlcd/logos/VERONICA RADIO_l.glcd b/graphlcd/logos/VERONICA RADIO_l.glcd Binary files differnew file mode 100644 index 0000000..a34e1fa --- /dev/null +++ b/graphlcd/logos/VERONICA RADIO_l.glcd diff --git a/graphlcd/logos/VERONICA RADIO_m.glcd b/graphlcd/logos/VERONICA RADIO_m.glcd Binary files differnew file mode 100644 index 0000000..01767c2 --- /dev/null +++ b/graphlcd/logos/VERONICA RADIO_m.glcd diff --git a/graphlcd/logos/VH1 CLASSIC_l.glcd b/graphlcd/logos/VH1 CLASSIC_l.glcd Binary files differnew file mode 100644 index 0000000..63cb4a9 --- /dev/null +++ b/graphlcd/logos/VH1 CLASSIC_l.glcd diff --git a/graphlcd/logos/VH1 CLASSIC_m.glcd b/graphlcd/logos/VH1 CLASSIC_m.glcd Binary files differnew file mode 100644 index 0000000..c2ca403 --- /dev/null +++ b/graphlcd/logos/VH1 CLASSIC_m.glcd diff --git a/graphlcd/logos/VH1_l.glcd b/graphlcd/logos/VH1_l.glcd Binary files differnew file mode 100644 index 0000000..b48d07c --- /dev/null +++ b/graphlcd/logos/VH1_l.glcd diff --git a/graphlcd/logos/VH1_m.glcd b/graphlcd/logos/VH1_m.glcd Binary files differnew file mode 100644 index 0000000..a092a41 --- /dev/null +++ b/graphlcd/logos/VH1_m.glcd diff --git a/graphlcd/logos/VIBRATION_l.glcd b/graphlcd/logos/VIBRATION_l.glcd Binary files differnew file mode 100644 index 0000000..ddba5c6 --- /dev/null +++ b/graphlcd/logos/VIBRATION_l.glcd diff --git a/graphlcd/logos/VIBRATION_m.glcd b/graphlcd/logos/VIBRATION_m.glcd Binary files differnew file mode 100644 index 0000000..7118bc7 --- /dev/null +++ b/graphlcd/logos/VIBRATION_m.glcd diff --git a/graphlcd/logos/VIVA PLUS_l.glcd b/graphlcd/logos/VIVA PLUS_l.glcd Binary files differnew file mode 100644 index 0000000..8e9d4d0 --- /dev/null +++ b/graphlcd/logos/VIVA PLUS_l.glcd diff --git a/graphlcd/logos/VIVA PLUS_m.glcd b/graphlcd/logos/VIVA PLUS_m.glcd Binary files differnew file mode 100644 index 0000000..fc087da --- /dev/null +++ b/graphlcd/logos/VIVA PLUS_m.glcd diff --git a/graphlcd/logos/VIVA PLUS_v2_m.glcd b/graphlcd/logos/VIVA PLUS_v2_m.glcd Binary files differnew file mode 100644 index 0000000..c823d68 --- /dev/null +++ b/graphlcd/logos/VIVA PLUS_v2_m.glcd diff --git a/graphlcd/logos/VIVA_l.glcd b/graphlcd/logos/VIVA_l.glcd Binary files differnew file mode 100644 index 0000000..b0ebf2c --- /dev/null +++ b/graphlcd/logos/VIVA_l.glcd diff --git a/graphlcd/logos/VIVA_m.glcd b/graphlcd/logos/VIVA_m.glcd Binary files differnew file mode 100644 index 0000000..2cd6258 --- /dev/null +++ b/graphlcd/logos/VIVA_m.glcd diff --git a/graphlcd/logos/VOLTAGE_l.glcd b/graphlcd/logos/VOLTAGE_l.glcd Binary files differnew file mode 100644 index 0000000..f5e5ea8 --- /dev/null +++ b/graphlcd/logos/VOLTAGE_l.glcd diff --git a/graphlcd/logos/VOLTAGE_m.glcd b/graphlcd/logos/VOLTAGE_m.glcd Binary files differnew file mode 100644 index 0000000..8e45857 --- /dev/null +++ b/graphlcd/logos/VOLTAGE_m.glcd diff --git a/graphlcd/logos/VOX AUSTRIA_l.glcd b/graphlcd/logos/VOX AUSTRIA_l.glcd Binary files differnew file mode 100644 index 0000000..6a884a5 --- /dev/null +++ b/graphlcd/logos/VOX AUSTRIA_l.glcd diff --git a/graphlcd/logos/VOX AUSTRIA_m.glcd b/graphlcd/logos/VOX AUSTRIA_m.glcd Binary files differnew file mode 100644 index 0000000..11049d8 --- /dev/null +++ b/graphlcd/logos/VOX AUSTRIA_m.glcd diff --git a/graphlcd/logos/VOX_l.glcd b/graphlcd/logos/VOX_l.glcd Binary files differnew file mode 100644 index 0000000..6a884a5 --- /dev/null +++ b/graphlcd/logos/VOX_l.glcd diff --git a/graphlcd/logos/VOX_m.glcd b/graphlcd/logos/VOX_m.glcd Binary files differnew file mode 100644 index 0000000..1202e85 --- /dev/null +++ b/graphlcd/logos/VOX_m.glcd diff --git a/graphlcd/logos/VOX_v2_m.glcd b/graphlcd/logos/VOX_v2_m.glcd Binary files differnew file mode 100644 index 0000000..f2a3bd2 --- /dev/null +++ b/graphlcd/logos/VOX_v2_m.glcd diff --git a/graphlcd/logos/WDR3_l.glcd b/graphlcd/logos/WDR3_l.glcd Binary files differnew file mode 100644 index 0000000..12264fb --- /dev/null +++ b/graphlcd/logos/WDR3_l.glcd diff --git a/graphlcd/logos/WDR3_m.glcd b/graphlcd/logos/WDR3_m.glcd Binary files differnew file mode 100644 index 0000000..dcc883a --- /dev/null +++ b/graphlcd/logos/WDR3_m.glcd diff --git a/graphlcd/logos/WDR5_l.glcd b/graphlcd/logos/WDR5_l.glcd Binary files differnew file mode 100644 index 0000000..f38cde9 --- /dev/null +++ b/graphlcd/logos/WDR5_l.glcd diff --git a/graphlcd/logos/WDR5_m.glcd b/graphlcd/logos/WDR5_m.glcd Binary files differnew file mode 100644 index 0000000..7a2f3c8 --- /dev/null +++ b/graphlcd/logos/WDR5_m.glcd diff --git a/graphlcd/logos/WDR_l.glcd b/graphlcd/logos/WDR_l.glcd Binary files differnew file mode 100644 index 0000000..b44031c --- /dev/null +++ b/graphlcd/logos/WDR_l.glcd diff --git a/graphlcd/logos/WDR_m.glcd b/graphlcd/logos/WDR_m.glcd Binary files differnew file mode 100644 index 0000000..7bad7c0 --- /dev/null +++ b/graphlcd/logos/WDR_m.glcd diff --git a/graphlcd/logos/WDR_v2_l.glcd b/graphlcd/logos/WDR_v2_l.glcd Binary files differnew file mode 100644 index 0000000..f1af02a --- /dev/null +++ b/graphlcd/logos/WDR_v2_l.glcd diff --git a/graphlcd/logos/WDR_v2_m.glcd b/graphlcd/logos/WDR_v2_m.glcd Binary files differnew file mode 100644 index 0000000..0dd0d82 --- /dev/null +++ b/graphlcd/logos/WDR_v2_m.glcd diff --git a/graphlcd/logos/WDR_v3_m.glcd b/graphlcd/logos/WDR_v3_m.glcd Binary files differnew file mode 100644 index 0000000..0f04d43 --- /dev/null +++ b/graphlcd/logos/WDR_v3_m.glcd diff --git a/graphlcd/logos/WEIN TV_l.glcd b/graphlcd/logos/WEIN TV_l.glcd Binary files differnew file mode 100644 index 0000000..b537280 --- /dev/null +++ b/graphlcd/logos/WEIN TV_l.glcd diff --git a/graphlcd/logos/WETTER FERNSEHEN_l.glcd b/graphlcd/logos/WETTER FERNSEHEN_l.glcd Binary files differnew file mode 100644 index 0000000..0095d81 --- /dev/null +++ b/graphlcd/logos/WETTER FERNSEHEN_l.glcd diff --git a/graphlcd/logos/WISHLINE_l.glcd b/graphlcd/logos/WISHLINE_l.glcd Binary files differnew file mode 100644 index 0000000..d9d6b5c --- /dev/null +++ b/graphlcd/logos/WISHLINE_l.glcd diff --git a/graphlcd/logos/WISHLINE_m.glcd b/graphlcd/logos/WISHLINE_m.glcd Binary files differnew file mode 100644 index 0000000..2d281a8 --- /dev/null +++ b/graphlcd/logos/WISHLINE_m.glcd diff --git a/graphlcd/logos/X-ZONE_l.glcd b/graphlcd/logos/X-ZONE_l.glcd Binary files differnew file mode 100644 index 0000000..43c1866 --- /dev/null +++ b/graphlcd/logos/X-ZONE_l.glcd diff --git a/graphlcd/logos/X-ZONE_m.glcd b/graphlcd/logos/X-ZONE_m.glcd Binary files differnew file mode 100644 index 0000000..e8ff623 --- /dev/null +++ b/graphlcd/logos/X-ZONE_m.glcd diff --git a/graphlcd/logos/XXL_l.glcd b/graphlcd/logos/XXL_l.glcd Binary files differnew file mode 100644 index 0000000..3232a51 --- /dev/null +++ b/graphlcd/logos/XXL_l.glcd diff --git a/graphlcd/logos/XXL_m.glcd b/graphlcd/logos/XXL_m.glcd Binary files differnew file mode 100644 index 0000000..04d1224 --- /dev/null +++ b/graphlcd/logos/XXL_m.glcd diff --git a/graphlcd/logos/XXP_l.glcd b/graphlcd/logos/XXP_l.glcd Binary files differnew file mode 100644 index 0000000..70d2d28 --- /dev/null +++ b/graphlcd/logos/XXP_l.glcd diff --git a/graphlcd/logos/XXP_m.glcd b/graphlcd/logos/XXP_m.glcd Binary files differnew file mode 100644 index 0000000..84eb572 --- /dev/null +++ b/graphlcd/logos/XXP_m.glcd diff --git a/graphlcd/logos/XXP_v2_m.glcd b/graphlcd/logos/XXP_v2_m.glcd Binary files differnew file mode 100644 index 0000000..55b0897 --- /dev/null +++ b/graphlcd/logos/XXP_v2_m.glcd diff --git a/graphlcd/logos/YAM FM_l.glcd b/graphlcd/logos/YAM FM_l.glcd Binary files differnew file mode 100644 index 0000000..e6206b7 --- /dev/null +++ b/graphlcd/logos/YAM FM_l.glcd diff --git a/graphlcd/logos/YAM FM_m.glcd b/graphlcd/logos/YAM FM_m.glcd Binary files differnew file mode 100644 index 0000000..f059f03 --- /dev/null +++ b/graphlcd/logos/YAM FM_m.glcd diff --git a/graphlcd/logos/YORIN FM_l.glcd b/graphlcd/logos/YORIN FM_l.glcd Binary files differnew file mode 100644 index 0000000..5d1d13e --- /dev/null +++ b/graphlcd/logos/YORIN FM_l.glcd diff --git a/graphlcd/logos/YORIN FM_m.glcd b/graphlcd/logos/YORIN FM_m.glcd Binary files differnew file mode 100644 index 0000000..66d2eee --- /dev/null +++ b/graphlcd/logos/YORIN FM_m.glcd diff --git a/graphlcd/logos/YOU FM_l.glcd b/graphlcd/logos/YOU FM_l.glcd Binary files differnew file mode 100644 index 0000000..a038514 --- /dev/null +++ b/graphlcd/logos/YOU FM_l.glcd diff --git a/graphlcd/logos/YOU FM_m.glcd b/graphlcd/logos/YOU FM_m.glcd Binary files differnew file mode 100644 index 0000000..e99fd9c --- /dev/null +++ b/graphlcd/logos/YOU FM_m.glcd diff --git a/graphlcd/logos/ZDF DOKU-KIKA_l.glcd b/graphlcd/logos/ZDF DOKU-KIKA_l.glcd Binary files differnew file mode 100644 index 0000000..e542a01 --- /dev/null +++ b/graphlcd/logos/ZDF DOKU-KIKA_l.glcd diff --git a/graphlcd/logos/ZDF DOKU-KIKA_m.glcd b/graphlcd/logos/ZDF DOKU-KIKA_m.glcd Binary files differnew file mode 100644 index 0000000..552d2f9 --- /dev/null +++ b/graphlcd/logos/ZDF DOKU-KIKA_m.glcd diff --git a/graphlcd/logos/ZDF DOKUKANAL_l.glcd b/graphlcd/logos/ZDF DOKUKANAL_l.glcd Binary files differnew file mode 100644 index 0000000..2ccd76e --- /dev/null +++ b/graphlcd/logos/ZDF DOKUKANAL_l.glcd diff --git a/graphlcd/logos/ZDF DOKUKANAL_m.glcd b/graphlcd/logos/ZDF DOKUKANAL_m.glcd Binary files differnew file mode 100644 index 0000000..d822d2d --- /dev/null +++ b/graphlcd/logos/ZDF DOKUKANAL_m.glcd diff --git a/graphlcd/logos/ZDF DOKUKANAL_v2_l.glcd b/graphlcd/logos/ZDF DOKUKANAL_v2_l.glcd Binary files differnew file mode 100644 index 0000000..b3f0dda --- /dev/null +++ b/graphlcd/logos/ZDF DOKUKANAL_v2_l.glcd diff --git a/graphlcd/logos/ZDF DOKUKANAL_v2_m.glcd b/graphlcd/logos/ZDF DOKUKANAL_v2_m.glcd Binary files differnew file mode 100644 index 0000000..93dac7b --- /dev/null +++ b/graphlcd/logos/ZDF DOKUKANAL_v2_m.glcd diff --git a/graphlcd/logos/ZDF INFO-3SAT_l.glcd b/graphlcd/logos/ZDF INFO-3SAT_l.glcd Binary files differnew file mode 100644 index 0000000..1bb5c30 --- /dev/null +++ b/graphlcd/logos/ZDF INFO-3SAT_l.glcd diff --git a/graphlcd/logos/ZDF INFO-3SAT_m.glcd b/graphlcd/logos/ZDF INFO-3SAT_m.glcd Binary files differnew file mode 100644 index 0000000..fce44d8 --- /dev/null +++ b/graphlcd/logos/ZDF INFO-3SAT_m.glcd diff --git a/graphlcd/logos/ZDF INFOKANAL_l.glcd b/graphlcd/logos/ZDF INFOKANAL_l.glcd Binary files differnew file mode 100644 index 0000000..7ba43e8 --- /dev/null +++ b/graphlcd/logos/ZDF INFOKANAL_l.glcd diff --git a/graphlcd/logos/ZDF INFOKANAL_m.glcd b/graphlcd/logos/ZDF INFOKANAL_m.glcd Binary files differnew file mode 100644 index 0000000..58ebe28 --- /dev/null +++ b/graphlcd/logos/ZDF INFOKANAL_m.glcd diff --git a/graphlcd/logos/ZDF INFOKANAL_v2_l.glcd b/graphlcd/logos/ZDF INFOKANAL_v2_l.glcd Binary files differnew file mode 100644 index 0000000..5f515b9 --- /dev/null +++ b/graphlcd/logos/ZDF INFOKANAL_v2_l.glcd diff --git a/graphlcd/logos/ZDF INFOKANAL_v2_m.glcd b/graphlcd/logos/ZDF INFOKANAL_v2_m.glcd Binary files differnew file mode 100644 index 0000000..1a35629 --- /dev/null +++ b/graphlcd/logos/ZDF INFOKANAL_v2_m.glcd diff --git a/graphlcd/logos/ZDF THEATERKANAL_l.glcd b/graphlcd/logos/ZDF THEATERKANAL_l.glcd Binary files differnew file mode 100644 index 0000000..30caeee --- /dev/null +++ b/graphlcd/logos/ZDF THEATERKANAL_l.glcd diff --git a/graphlcd/logos/ZDF THEATERKANAL_v2_l.glcd b/graphlcd/logos/ZDF THEATERKANAL_v2_l.glcd Binary files differnew file mode 100644 index 0000000..8e0cd92 --- /dev/null +++ b/graphlcd/logos/ZDF THEATERKANAL_v2_l.glcd diff --git a/graphlcd/logos/ZDF THEATERKANAL_v2_m.glcd b/graphlcd/logos/ZDF THEATERKANAL_v2_m.glcd Binary files differnew file mode 100644 index 0000000..646e9a4 --- /dev/null +++ b/graphlcd/logos/ZDF THEATERKANAL_v2_m.glcd diff --git a/graphlcd/logos/ZDF_THEATERKANAL_m.glcd b/graphlcd/logos/ZDF_THEATERKANAL_m.glcd Binary files differnew file mode 100644 index 0000000..8363a6c --- /dev/null +++ b/graphlcd/logos/ZDF_THEATERKANAL_m.glcd diff --git a/graphlcd/logos/ZDF_l.glcd b/graphlcd/logos/ZDF_l.glcd Binary files differnew file mode 100644 index 0000000..4529df6 --- /dev/null +++ b/graphlcd/logos/ZDF_l.glcd diff --git a/graphlcd/logos/ZDF_m.glcd b/graphlcd/logos/ZDF_m.glcd Binary files differnew file mode 100644 index 0000000..bc57463 --- /dev/null +++ b/graphlcd/logos/ZDF_m.glcd diff --git a/graphlcd/logos/ZIK_l.glcd b/graphlcd/logos/ZIK_l.glcd Binary files differnew file mode 100644 index 0000000..98315b7 --- /dev/null +++ b/graphlcd/logos/ZIK_l.glcd diff --git a/graphlcd/logos/ZIK_m.glcd b/graphlcd/logos/ZIK_m.glcd Binary files differnew file mode 100644 index 0000000..3def476 --- /dev/null +++ b/graphlcd/logos/ZIK_m.glcd diff --git a/graphlcd/logos/animated/REPLAY-CD_l.glcd b/graphlcd/logos/animated/REPLAY-CD_l.glcd Binary files differnew file mode 100644 index 0000000..9c09643 --- /dev/null +++ b/graphlcd/logos/animated/REPLAY-CD_l.glcd diff --git a/graphlcd/logos/animated/REPLAY-DVD_l.glcd b/graphlcd/logos/animated/REPLAY-DVD_l.glcd Binary files differnew file mode 100644 index 0000000..0385097 --- /dev/null +++ b/graphlcd/logos/animated/REPLAY-DVD_l.glcd diff --git a/graphlcd/logos/animated/REPLAY-FILE_l.glcd b/graphlcd/logos/animated/REPLAY-FILE_l.glcd Binary files differnew file mode 100644 index 0000000..fd2e9d6 --- /dev/null +++ b/graphlcd/logos/animated/REPLAY-FILE_l.glcd diff --git a/graphlcd/logos/animated/REPLAY-IMAGE_l.glcd b/graphlcd/logos/animated/REPLAY-IMAGE_l.glcd Binary files differnew file mode 100644 index 0000000..f5b5270 --- /dev/null +++ b/graphlcd/logos/animated/REPLAY-IMAGE_l.glcd diff --git a/graphlcd/logos/animated/REPLAY-MUSIC_l.glcd b/graphlcd/logos/animated/REPLAY-MUSIC_l.glcd Binary files differnew file mode 100644 index 0000000..8013bb3 --- /dev/null +++ b/graphlcd/logos/animated/REPLAY-MUSIC_l.glcd diff --git a/graphlcd/logos/animated/REPLAY-VDR_l.glcd b/graphlcd/logos/animated/REPLAY-VDR_l.glcd Binary files differnew file mode 100644 index 0000000..5144e13 --- /dev/null +++ b/graphlcd/logos/animated/REPLAY-VDR_l.glcd diff --git a/graphlcd/logos/animated/REPLAY-VDR_m.glcd b/graphlcd/logos/animated/REPLAY-VDR_m.glcd Binary files differnew file mode 100644 index 0000000..4e81191 --- /dev/null +++ b/graphlcd/logos/animated/REPLAY-VDR_m.glcd diff --git a/graphlcd/logos/animated/REPLAY-VDR_v2_l.glcd b/graphlcd/logos/animated/REPLAY-VDR_v2_l.glcd Binary files differnew file mode 100644 index 0000000..07c7f03 --- /dev/null +++ b/graphlcd/logos/animated/REPLAY-VDR_v2_l.glcd diff --git a/graphlcd/logos/animated/SAT1_l.glcd b/graphlcd/logos/animated/SAT1_l.glcd Binary files differnew file mode 100644 index 0000000..32b1cf6 --- /dev/null +++ b/graphlcd/logos/animated/SAT1_l.glcd @@ -0,0 +1,970 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * i18n.c - Internationalization + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#include "i18n.h" + + +const tI18nPhrase Phrases[] = +{ + { + "Output to graphic LCD",// English + "Ausgabe auf einem Grafik-LCD",// Deutsch + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Affichage sur un écran LCD",// Français + "",// TODO Norsk + "Ohjaa graafista LCD-näyttöä",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Ecran grafic LCD/VFD",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Plugin active", + "Plugin aktiv", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Plugin actif", + "",// TODO Norsk + "Laajennos aktiivinen",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Plugin activat",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "JanFebMarAprMayJunJulAugSepOctNovDec", + "JanFebMärAprMaiJunJulAugSepOktNovDez", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "JanFevMarAvrMaiJunJuiAouSepOctNovDec", + "",// TODO Norsk + "TamHelMaaHuhTouKesHeiEloSyyLokMarJou",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "IanFebMarAprMaiIunIulAugSepOctNoiDec",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Date/Time", + "Zeige Datum/Uhrzeit", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher Date/Heure", + "",// TODO Norsk + "Näytä päivämäärä/kello",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã Data/Ora",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "not in menu", + "nicht im Menu", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "pas dans le menu" + "",// TODO Norsk + "ei valikossa",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "nu în meniu",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Channel", + "Zeige Kanal", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher le nom de la Chaine", + "",// TODO Norsk + "Näytä kanava",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã canalul",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Logo", + "Zeige Logo", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher le Logo", + "",// TODO Norsk + "Näytä logo",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã logo",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Logo on Replay", + "Zeige Logo bei Wiedergabe", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher le Logo en lecture", + "",// TODO Norsk + "Näytä logo toistotilassa",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã logo în timpul redãrii",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Symbols", + "Zeige Symbole", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher les Symboles", + "",// TODO Norsk + "Näytä symbolit",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã simboluri",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show ET Symbols", + "Zeige ET Symbole", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher les Symboles ET", + "",// TODO Norsk + "Näytä ET-symbolit",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã simboluri externe",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Program", + "Zeige Programm", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher les programmes", + "",// TODO Norsk + "Näytä ohjelma",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã programul",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Timebar", + "Zeige Zeitbalken", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher la barre de progression", + "",// TODO Norsk + "Näytä aikajana",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã linia timp",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Menu", + "Zeige Menüs", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher le menu", + "",// TODO Norsk + "Näytä valikko",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã meniuri",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Messages", + "Zeige Nachrichten", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher les messages", + "",// TODO Norsk + "Näytä viestit",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã mesaje",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Color Buttons", + "Zeige farbige Tasten", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher les boutons couleurs", + "",// TODO Norsk + "Näytä väripainikkeet",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã butoanele colorate",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show Volume", + "Zeige Lautstärke", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher le Volume", + "",// TODO Norsk + "Näytä äänenvoimakkuus",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã volumul",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "compressed", + "komprimiert", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Compressé", + "",// TODO Norsk + "pakattu",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "comprimat",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "auto", + "auto", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "auto", + "",// TODO Norsk + "automaattinen",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "auto",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "medium", + "mittel", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "moyen", + "",// TODO Norsk + "keskikokoinen",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "mediu",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "large", + "groß", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "grand", + "",// TODO Norsk + "suuri",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "mare",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Show free Cards", + "Zeige freie Karten", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Afficher les cartes disponibles", + "",// TODO Norsk + "Näytä vapaat vastaanottimet",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Aratã receptoare libere",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Replay", + "Spiele", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Lecture", + "",// TODO Norsk + "Toistotila",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Redare",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "DVD", + "DVD", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "DVD", + "",// TODO Norsk + "DVD",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "DVD",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Music", + "Musik", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Musique", + "",// TODO Norsk + "Musiikki",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Muzicã",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "File", + "Datei", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Fichier:", + "",// TODO Norsk + "Tiedostot",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Fiºier",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Image", + "Bild", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Image", + "",// TODO Norsk + "Kuvat",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Imagine",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "CD", + "CD", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "CD", + "",// TODO Norsk + "CD",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "CD",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Unknown title", + "Unbekannter Titel", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Titre inconnu", + "",// TODO Norsk + "Tuntematon nimi",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Titlu necunoscut",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Identify replay type", + "Wiedergabetyp erkennen", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Identifier le type de lecture", + "",// TODO Norsk + "Tunnista toistotilan tyyppi",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Identificarea tipului redãrii",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Modify replay string", + "Wiedergabetext verändern", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Modifier la chaine de lecture", + "",// TODO Norsk + "Muokkaa toistotilan merkkijonoa",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Modifica textul redãrii",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Scroll text lines", + "Textzeilen scrollen", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Faire défiler le texte", + "",// TODO Norsk + "Vieritä tekstirivejä",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Deruleazã liniile text",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Scroll speed", + "Scrollgeschwindigkeit", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Vitesse de défilement", + "",// TODO Norsk + "Vieritysnopeus",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Viteza derulãrii",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Scroll time interval", + "Zeitabstand beim Scrollen", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Intervalle de défilement", + "",// TODO Norsk + "Vierityksen päivitysväli",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Interval derulare",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "never", + "niemals", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "jamais", + "",// TODO Norsk + "ei koskaan",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "niciodatã",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "once", + "einmal", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "une fois", + "",// TODO Norsk + "kerran",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "odatã",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "always", + "ständig", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "toujours", + "",// TODO Norsk + "aina",// Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "întotdeauna",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Brightness on user activity", + "Helligkeit bei Nutzeraktivität", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Luminosité en utilisation", + "",// TODO Norsk + "",// TODO Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Luminozitate la utilizare",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Brightness on user inactivity", + "Helligkeit bei Nutzerinaktivität", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Luminosité en non-utilisation", + "",// TODO Norsk + "",// TODO Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Luminozitate la inactivitate",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { + "Brightness delay [s]", + "Verzögerung der Helligkeit [s]", + "",// TODO Slovenski + "",// TODO Italiano + "",// TODO Nederlands + "",// TODO Português + "Delai de Luminosité [s]", + "",// TODO Norsk + "",// TODO Suomi + "",// TODO Polski + "",// TODO Español + "",// TODO Ellinika + "",// TODO Svenska + "Limita luminozitate",// Românã + "",// TODO Magyar + "",// TODO Català +#if VDRVERSNUM > 10302 + "",// TODO Russian +# if VDRVERSNUM > 10307 + "",// TODO Croatian +# endif +#endif + }, + { NULL } +}; @@ -0,0 +1,20 @@ +/* + * GraphLCD plugin for the Video Disk Recorder + * + * i18n.h - Internationalization + * + * This file is released under the GNU General Public License. Refer + * to the COPYING file distributed with this package. + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online.de> + * (c) 2004 Andreas Regel <andreas.regel AT powarman.de> + */ + +#ifndef _GRAPHLCD_I18N_H_ +#define _GRAPHLCD_I18N_H_ + +#include <vdr/i18n.h> + +extern const tI18nPhrase Phrases[]; + +#endif diff --git a/layout.c b/layout.c new file mode 100644 index 0000000..1928bcb --- /dev/null +++ b/layout.c @@ -0,0 +1,166 @@ +/* + * GraphLCD plugin for Video Disc Recorder + * + * layout.c - layout classes + * + * This file is released under the GNU General Public License. Refer + * to the COPYING file distributed with this package. + * + * (c) 2005 Andreas Regel <andreas.regel AT powarman.de> + */ + +#include <syslog.h> + +#include <fstream> + +#include "global.h" +#include "layout.h" +#include "strfct.h" + +#include <vdr/config.h> +#include <vdr/i18n.h> +#include <vdr/plugin.h> + + +cFontElement::cFontElement(const std::string & fontName) +: name(fontName), + type(0), + file(""), + size(0) +{ +} + +bool cFontElement::Load(const std::string & url) +{ + if (url.find("fnt:") == 0) + { + type = ftFNT; + if (url[4] == '/') + file = url.substr(4); + else + { + file = cPlugin::ConfigDirectory(PLUGIN_NAME); + file += "/fonts/"; + file += url.substr(4); + } + size = 0; + return font.LoadFNT(file); + } + else if (url.find("ft2:") == 0) + { + type = ftFT2; + std::string::size_type pos = url.find(":", 4); + if (pos == std::string::npos) + { + syslog(LOG_ERR, "cFontElement::Load(): No font size specified in %s\n", url.c_str()); + return false; + } + std::string tmp = url.substr(pos + 1); + size = atoi(tmp.c_str()); + if (url[4] == '/') + file = url.substr(4, pos - 4); + else + { + file = cPlugin::ConfigDirectory(PLUGIN_NAME); + file += "/fonts/"; + file += url.substr(4, pos - 4); + } + return font.LoadFT2(file, I18nCharSets()[Setup.OSDLanguage], size); + } + else + { + syslog(LOG_ERR, "cFontElement::Load(): Unknown font type in %s\n", url.c_str()); + return false; + } +} + + +cFontList::cFontList() +{ +} + +cFontList::~cFontList() +{ + std::list <cFontElement *>::iterator it; + cFontElement * elem; + + for (it = fonts.begin(); it != fonts.end(); it++) + { + elem = *it; + delete elem; + } + fonts.clear(); +} + +bool cFontList::Load(const std::string & fileName) +{ + std::fstream file; + char readLine[1000]; + std::string line; + +#if (__GNUC__ < 3) + file.open(fileName.c_str(), std::ios::in); +#else + file.open(fileName.c_str(), std::ios_base::in); +#endif + if (!file.is_open()) + return false; + + while (!file.eof()) + { + file.getline(readLine, 1000); + line = trim(readLine); + if (line.length() == 0) + continue; + if (line[0] == '#') + continue; + Parse(line); + } + + file.close(); + return true; +} + +bool cFontList::Parse(const std::string & line) +{ + std::string::size_type pos; + std::string fontName; + std::string fontUrl; + cFontElement * elem; + + pos = line.find("="); + if (pos == std::string::npos) + return false; + fontName = trim(line.substr(0, pos)); + fontUrl = trim(line.substr(pos + 1)); + //printf("%s = %s\n", fontName.c_str(), fontUrl.c_str()); + + elem = new cFontElement(fontName); + if (elem->Load(fontUrl)) + { + fonts.push_back(elem); + return true; + } + else + { + delete elem; + return false; + } +} + +const GLCD::cFont * cFontList::GetFont(const std::string & name) const +{ + std::list <cFontElement *>::const_iterator it; + cFontElement * elem; + + for (it = fonts.begin(); it != fonts.end(); it++) + { + elem = *it; + if (elem->Name() == name) + { + return elem->Font(); + } + } + return NULL; +} + diff --git a/layout.h b/layout.h new file mode 100644 index 0000000..95269a8 --- /dev/null +++ b/layout.h @@ -0,0 +1,54 @@ +/* + * GraphLCD plugin for Video Disc Recorder + * + * layout.h - layout classes + * + * This file is released under the GNU General Public License. Refer + * to the COPYING file distributed with this package. + * + * (c) 2005 Andreas Regel <andreas.regel AT powarman.de> + */ + +#include <list> +#include <string> + +#include <glcdgraphics/font.h> + +typedef enum +{ + ftFNT, + ftFT2 +} eFontTypes; + +class cFontElement +{ +private: + std::string name; + int type; + std::string file; + int size; + GLCD::cFont font; +public: + cFontElement(const std::string & fontName); + bool Load(const std::string & url); + + const std::string & Name() const { return name; } + int Type() const { return type; } + const std::string & File() const { return file; } + int Size() const { return size; } + const GLCD::cFont * Font() const { return &font; } +}; + + +class cFontList +{ +private: + std::list <cFontElement *> fonts; +public: + cFontList(); + ~cFontList(); + bool Load(const std::string & fileName); + bool Parse(const std::string & line); + + const GLCD::cFont * GetFont(const std::string & name) const; +}; @@ -0,0 +1,35 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * logo.c - logo class + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#include "logo.h" + +cGraphLCDLogo::cGraphLCDLogo(const std::string & id) +: GLCD::cImage(), + id(id) +{ +} + @@ -0,0 +1,44 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * logo.h - logo class + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#ifndef _GRAPHLCD_LOGO_H_ +#define _GRAPHLCD_LOGO_H_ + +#include <string> + +#include <glcdgraphics/image.h> + +class cGraphLCDLogo : public GLCD::cImage +{ +private: + std::string id; +public: + cGraphLCDLogo(const std::string & id); + const std::string & ID() const { return id; } +}; + +#endif diff --git a/logolist.c b/logolist.c new file mode 100644 index 0000000..2491f7f --- /dev/null +++ b/logolist.c @@ -0,0 +1,175 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * logolist.c - logo list class + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#include <fstream> + +#include <glcdgraphics/bitmap.h> +#include <glcdgraphics/image.h> +#include <glcdgraphics/glcd.h> + +#include "logolist.h" +#include "strfct.h" + +#include <vdr/tools.h> + +const char * kGLCDFileExtension = ".glcd"; +const char * kAliasFileName = "logonames.alias"; + +cGraphLCDLogoList::cGraphLCDLogoList(const std::string & logodir, const std::string & cfgdir) +{ + std::fstream file; + char readLine[1000]; + std::string line; + std::string aliasFileName; + std::string::size_type pos; + tAliasListElement * newAlias; + + logoDir = logodir; + aliasFileName = AddDirectory(cfgdir.c_str(), kAliasFileName); + +#if (__GNUC__ < 3) + file.open(aliasFileName.c_str(), std::ios::in); +#else + file.open(aliasFileName.c_str(), std::ios_base::in); +#endif + if (!file.is_open()) + return; + + while (!file.eof()) + { + file.getline(readLine, 1000); + line = trim(readLine); + if (line.length() == 0) + continue; + if (line[0] == '#') + continue; + pos = line.find(":"); + if (pos == std::string::npos) + continue; + newAlias = new tAliasListElement; + if (newAlias) + { + newAlias->channelID = trim(line.substr(0, pos)); + newAlias->fileName = trim(line.substr(pos + 1)); + aliasList.push_back(newAlias); + } + } + file.close(); +/* + std::list <tAliasListElement *>::iterator it; + for (it = aliasList.begin(); it != aliasList.end(); it++) + { + newAlias = *it; + printf(">>>>>> AliasList: >%s< : >%s<\n", newAlias->channelID.c_str(), newAlias->fileName.c_str()); + } +*/ +} + +cGraphLCDLogoList::~cGraphLCDLogoList() +{ + std::list <tAliasListElement *>::iterator itAlias; + std::list <cGraphLCDLogo *>::iterator itLogo; + + for (itAlias = aliasList.begin(); itAlias != aliasList.end(); itAlias++) + { + delete *itAlias; + } + aliasList.empty(); + + for (itLogo = logoList.begin(); itLogo != logoList.end(); itLogo++) + { + delete *itLogo; + } + logoList.empty(); +} + +std::string cGraphLCDLogoList::CreateFullFileName(const std::string & baseName, ePicType type) +{ + std::string tmp; + + tmp = AddDirectory(logoDir.c_str(), baseName.c_str()); + + switch (type) + { + case ptPictureFixed: // do not attach anything + break; + case ptLogoSmall: + tmp += "_s"; + break; + case ptLogoMedium: + tmp += "_m"; + break; + case ptLogoLarge: + tmp += "_l"; + break; + } + tmp += kGLCDFileExtension; + + return tmp; +} + +cGraphLCDLogo * cGraphLCDLogoList::GetLogo(const std::string & chID, ePicType type) +{ + std::list <cGraphLCDLogo *>::iterator itLogo; + std::list <tAliasListElement *>::iterator itAlias; + std::string logoFileName = ""; + cGraphLCDLogo * newLogo; + GLCD::cGLCDFile glcd; + + for (itLogo = logoList.begin(); itLogo != logoList.end(); itLogo++) + { + if ((*itLogo)->ID() == chID) + { + return *itLogo; + } + } + + for (itAlias = aliasList.begin(); itAlias != aliasList.end(); itAlias++) + { + if ((*itAlias)->channelID == chID) + { + logoFileName = CreateFullFileName((*itAlias)->fileName, type); + break; + } + } + if (itAlias == aliasList.end()) + logoFileName = CreateFullFileName(chID, type); + + // try to load logo + newLogo = new cGraphLCDLogo(chID); + if (glcd.Load(*newLogo, logoFileName)) + { + logoList.push_back(newLogo); + return newLogo; + } + else + { + delete newLogo; + return NULL; + } + return NULL; +} diff --git a/logolist.h b/logolist.h new file mode 100644 index 0000000..47044c4 --- /dev/null +++ b/logolist.h @@ -0,0 +1,65 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * logolist.h - logo list class + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#ifndef _GRAPHLCD_LOGOLIST_H_ +#define _GRAPHLCD_LOGOLIST_H_ + +#include <list> + +#include "logo.h" + +enum ePicType +{ + ptPictureFixed, + ptLogoSmall, + ptLogoMedium, + ptLogoLarge +}; + +class cGraphLCDLogoList +{ +private: + struct tAliasListElement + { + std::string channelID; + std::string fileName; + }; + + std::string logoDir; + std::list <cGraphLCDLogo *> logoList; + std::list <tAliasListElement *> aliasList; + + std::string CreateFullFileName(const std::string & baseName, ePicType type); + +public: + cGraphLCDLogoList(const std::string & logodir, const std::string & cfgdir); + ~cGraphLCDLogoList(); + + cGraphLCDLogo * GetLogo(const std::string & chID, ePicType type); +}; + +#endif @@ -0,0 +1,104 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * menu.c - setup menu class + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#include "menu.h" + + +cGraphLCDMenuSetup::cGraphLCDMenuSetup() +{ + static const char * showDateTimeValues[3]; + showDateTimeValues[0] = tr("no"); + showDateTimeValues[1] = tr("yes"); + showDateTimeValues[2] = tr("not in menu"); + static const char * showSymbolsValues[3]; + showSymbolsValues[0] = tr("no"); + showSymbolsValues[1] = tr("yes"); + showSymbolsValues[2] = tr("compressed"); + static const char * showLogoValues[4]; + showLogoValues[0] = tr("no"); + showLogoValues[1] = tr("auto"); + showLogoValues[2] = tr("medium"); + showLogoValues[3] = tr("large"); + static const char * scrollModeValues[3]; + scrollModeValues[0] = tr("never"); + scrollModeValues[1] = tr("once"); + scrollModeValues[2] = tr("always"); + + newGraphLCDSetup = GraphLCDSetup; + + Add(new cMenuEditBoolItem(tr("Plugin active"), &newGraphLCDSetup.PluginActive)); + Add(new cMenuEditStraItem(tr("Show Date/Time"), &newGraphLCDSetup.ShowDateTime, 3, showDateTimeValues)); + Add(new cMenuEditBoolItem(tr("Show Channel"), &newGraphLCDSetup.ShowChannel)); + Add(new cMenuEditStraItem(tr("Show Logo"), &newGraphLCDSetup.ShowLogo, 4, showLogoValues)); + Add(new cMenuEditStraItem(tr("Show Symbols"), &newGraphLCDSetup.ShowSymbols, 3, showSymbolsValues)); + Add(new cMenuEditBoolItem(tr("Show ET Symbols"), &newGraphLCDSetup.ShowETSymbols)); + Add(new cMenuEditBoolItem(tr("Show Program"), &newGraphLCDSetup.ShowProgram)); + Add(new cMenuEditBoolItem(tr("Show Timebar"), &newGraphLCDSetup.ShowTimebar)); + Add(new cMenuEditBoolItem(tr("Show Menu"), &newGraphLCDSetup.ShowMenu)); + Add(new cMenuEditBoolItem(tr("Show Messages"), &newGraphLCDSetup.ShowMessages)); + Add(new cMenuEditBoolItem(tr("Show Color Buttons"), &newGraphLCDSetup.ShowColorButtons)); + Add(new cMenuEditBoolItem(tr("Show Volume"), &newGraphLCDSetup.ShowVolume)); + Add(new cMenuEditBoolItem(tr("Show free Cards"), &newGraphLCDSetup.ShowNotRecording)); + Add(new cMenuEditBoolItem(tr("Identify replay type"), &newGraphLCDSetup.IdentifyReplayType)); + if (newGraphLCDSetup.IdentifyReplayType) + { + Add(new cMenuEditBoolItem(tr("Modify replay string"), &newGraphLCDSetup.ModifyReplayString)); + Add(new cMenuEditStraItem(tr("Show Logo on Replay"), &newGraphLCDSetup.ReplayLogo, 4, showLogoValues)); + } + Add(new cMenuEditStraItem(tr("Scroll text lines"), &newGraphLCDSetup.ScrollMode, 3, scrollModeValues)); + Add(new cMenuEditIntItem(tr("Scroll speed"), &newGraphLCDSetup.ScrollSpeed, 1, 10)); + Add(new cMenuEditIntItem(tr("Scroll time interval"), &newGraphLCDSetup.ScrollTime, 100, 2000)); + Add(new cMenuEditIntItem(tr("Brightness on user activity"), &newGraphLCDSetup.BrightnessActive, 0, 100)); + Add(new cMenuEditIntItem(tr("Brightness on user inactivity"), &newGraphLCDSetup.BrightnessIdle, 0, 100)); + Add(new cMenuEditIntItem(tr("Brightness delay [s]"), &newGraphLCDSetup.BrightnessDelay, 0, 600)); +} + +void cGraphLCDMenuSetup::Store() +{ + SetupStore("PluginActive", GraphLCDSetup.PluginActive = newGraphLCDSetup.PluginActive); + SetupStore("ShowDateTime",GraphLCDSetup.ShowDateTime = newGraphLCDSetup.ShowDateTime); + SetupStore("ShowChannel", GraphLCDSetup.ShowChannel = newGraphLCDSetup.ShowChannel); + SetupStore("ShowLogo", GraphLCDSetup.ShowLogo = newGraphLCDSetup.ShowLogo); + SetupStore("ShowSymbols", GraphLCDSetup.ShowSymbols = newGraphLCDSetup.ShowSymbols); + SetupStore("ShowETSymbols",GraphLCDSetup.ShowETSymbols = newGraphLCDSetup.ShowETSymbols); + SetupStore("ShowProgram", GraphLCDSetup.ShowProgram = newGraphLCDSetup.ShowProgram); + SetupStore("ShowTimebar", GraphLCDSetup.ShowTimebar = newGraphLCDSetup.ShowTimebar); + SetupStore("ShowMenu", GraphLCDSetup.ShowMenu = newGraphLCDSetup.ShowMenu); + SetupStore("ShowMessages",GraphLCDSetup.ShowMessages = newGraphLCDSetup.ShowMessages); + SetupStore("ShowColorButtons",GraphLCDSetup.ShowColorButtons = newGraphLCDSetup.ShowColorButtons); + SetupStore("ShowVolume", GraphLCDSetup.ShowVolume = newGraphLCDSetup.ShowVolume); + SetupStore("ShowNotRecording", GraphLCDSetup.ShowNotRecording = newGraphLCDSetup.ShowNotRecording); + SetupStore("IdentifyReplayType", GraphLCDSetup.IdentifyReplayType = newGraphLCDSetup.IdentifyReplayType); + SetupStore("ReplayLogo", GraphLCDSetup.ReplayLogo = newGraphLCDSetup.ReplayLogo); + SetupStore("ModifyReplayString", GraphLCDSetup.ModifyReplayString = newGraphLCDSetup.ModifyReplayString); + SetupStore("ScrollMode", GraphLCDSetup.ScrollMode = newGraphLCDSetup.ScrollMode); + SetupStore("ScrollSpeed", GraphLCDSetup.ScrollSpeed = newGraphLCDSetup.ScrollSpeed); + SetupStore("ScrollTime", GraphLCDSetup.ScrollTime = newGraphLCDSetup.ScrollTime); + SetupStore("BrightnessActive", GraphLCDSetup.BrightnessActive = newGraphLCDSetup.BrightnessActive); + SetupStore("BrightnessIdle", GraphLCDSetup.BrightnessIdle = newGraphLCDSetup.BrightnessIdle); + SetupStore("BrightnessDelay", GraphLCDSetup.BrightnessDelay = newGraphLCDSetup.BrightnessDelay); +} @@ -0,0 +1,46 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * menu.h - setup menu class + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#ifndef _GRAPHLCD_MENU_H_ +#define _GRAPHLCD_MENU_H_ + +#include "setup.h" + +#include <vdr/plugin.h> + + +class cGraphLCDMenuSetup : public cMenuSetupPage +{ +private: + cGraphLCDSetup newGraphLCDSetup; +protected: + virtual void Store(); +public: + cGraphLCDMenuSetup(); +}; + +#endif diff --git a/plugin.c b/plugin.c new file mode 100644 index 0000000..293f6c9 --- /dev/null +++ b/plugin.c @@ -0,0 +1,246 @@ +/* + * GraphLCD plugin for the Video Disk Recorder + * + * plugin.c - main plugin class + * + * This file is released under the GNU General Public License. Refer + * to the COPYING file distributed with this package. + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online.de> + * (c) 2004 Andreas Regel <andreas.regel AT powarman.de> + */ + +#include <getopt.h> + +#include <glcddrivers/config.h> +#include <glcddrivers/drivers.h> + +#include "display.h" +#include "global.h" +#include "i18n.h" +#include "menu.h" + +#include <vdr/plugin.h> + + +static const char *VERSION = "0.1.5"; +static const char *DESCRIPTION = "Output to graphic LCD"; +static const char *MAINMENUENTRY = NULL; + +static const char * kDefaultConfigFile = "/etc/graphlcd.conf"; + + +class cPluginGraphLCD : public cPlugin +{ +private: + // Add any member variables or functions you may need here. + std::string mConfigName; + std::string mDisplayName; + GLCD::cDriver * mLcd; + cGraphLCDDisplay * mDisplay; + +public: + cPluginGraphLCD(); + virtual ~cPluginGraphLCD(); + virtual const char * Version() { return VERSION; } + virtual const char * Description() { return tr(DESCRIPTION); } + virtual const char * CommandLineHelp(); + virtual bool ProcessArgs(int argc, char * argv[]); + virtual bool Initialize(); + virtual bool Start(); + virtual void Housekeeping(); + virtual void MainThreadHook(void); + virtual const char * MainMenuEntry() { return MAINMENUENTRY; } + virtual cOsdObject * MainMenuAction(); + virtual cMenuSetupPage * SetupMenu(); + virtual bool SetupParse(const char * Name, const char * Value); +}; + +cPluginGraphLCD::cPluginGraphLCD() +: mConfigName(""), + mDisplayName("") +{ + mLcd = NULL; +} + +cPluginGraphLCD::~cPluginGraphLCD() +{ + delete mDisplay; + if (mLcd) + mLcd->DeInit(); + delete mLcd; +} + +const char * cPluginGraphLCD::CommandLineHelp() +{ + return " -c CFG, --config=CFG use CFG as driver config file\n" + " -d DISP, --display=DISP use display DISP for output\n"; +} + +bool cPluginGraphLCD::ProcessArgs(int argc, char * argv[]) +{ + static struct option long_options[] = + { + {"config", required_argument, NULL, 'c'}, + {"display", required_argument, NULL, 'd'}, + {NULL} + }; + + int c; + int option_index = 0; + while ((c = getopt_long(argc, argv, "c:d:", long_options, &option_index)) != -1) + { + switch (c) + { + case 'c': + mConfigName = optarg; + break; + + case 'd': + mDisplayName = optarg; + break; + + default: + return false; + } + } + + return true; +} + +bool cPluginGraphLCD::Initialize() +{ + unsigned int displayNumber = 0; + const char * cfgDir; + + RegisterI18n(Phrases); + + if (mConfigName.length() == 0) + { + mConfigName = kDefaultConfigFile; + isyslog("graphlcd plugin: No config file specified, using default (%s).\n", mConfigName.c_str()); + } + if (GLCD::Config.Load(mConfigName) == false) + { + esyslog("graphlcd plugin: Error loading config file!\n"); + return false; + } + if (GLCD::Config.driverConfigs.size() > 0) + { + if (mDisplayName.length() > 0) + { + for (displayNumber = 0; displayNumber < GLCD::Config.driverConfigs.size(); displayNumber++) + { + if (GLCD::Config.driverConfigs[displayNumber].name == mDisplayName) + break; + } + if (displayNumber == GLCD::Config.driverConfigs.size()) + { + esyslog("graphlcd plugin: ERROR: Specified display %s not found in config file!\n", mDisplayName.c_str()); + return false; + } + } + else + { + isyslog("graphlcd plugin: WARNING: No display specified, using first one (%s).\n", GLCD::Config.driverConfigs[0].name.c_str()); + displayNumber = 0; + mDisplayName = GLCD::Config.driverConfigs[0].name; + } + } + else + { + esyslog("graphlcd plugin: ERROR: No displays specified in config file!\n"); + return false; + } + + mLcd = GLCD::CreateDriver(GLCD::Config.driverConfigs[displayNumber].id, &GLCD::Config.driverConfigs[displayNumber]); + if (!mLcd) + { + esyslog("graphlcd plugin: ERROR: Failed creating display object %s\n", mDisplayName.c_str()); + return false; + } + + cfgDir = ConfigDirectory(PLUGIN_NAME); + if (!cfgDir) + return false; + + mDisplay = new cGraphLCDDisplay(); + if (!mDisplay) + return false; + if (mDisplay->Init(mLcd, cfgDir) != 0) + return false; + + return true; +} + +bool cPluginGraphLCD::Start() +{ + int count; + + dsyslog("graphlcd plugin: waiting for display thread to get ready"); + for (count = 0; count < 1200; count++) + { + if (mDisplay->Active()) + { + dsyslog ("graphlcd plugin: display thread ready"); + return true; + } +#if VDRVERSNUM < 10314 + usleep(100000); +#else + cCondWait::SleepMs(100); +#endif + } + dsyslog ("graphlcd plugin: timeout while waiting for display thread"); + return false; +} + +void cPluginGraphLCD::Housekeeping() +{ +} + +void cPluginGraphLCD::MainThreadHook() +{ + if (mDisplay) + mDisplay->Tick(); +} + +cOsdObject * cPluginGraphLCD::MainMenuAction() +{ + return NULL; +} + +cMenuSetupPage * cPluginGraphLCD::SetupMenu() +{ + return new cGraphLCDMenuSetup(); +} + +bool cPluginGraphLCD::SetupParse(const char * Name, const char * Value) +{ + if (!strcasecmp(Name, "PluginActive")) GraphLCDSetup.PluginActive = atoi(Value); + else if (!strcasecmp(Name, "ShowDateTime")) GraphLCDSetup.ShowDateTime = atoi(Value); + else if (!strcasecmp(Name, "ShowChannel")) GraphLCDSetup.ShowChannel = atoi(Value); + else if (!strcasecmp(Name, "ShowLogo")) GraphLCDSetup.ShowLogo = atoi(Value); + else if (!strcasecmp(Name, "ShowSymbols")) GraphLCDSetup.ShowSymbols = atoi(Value); + else if (!strcasecmp(Name, "ShowETSymbols")) GraphLCDSetup.ShowETSymbols = atoi(Value); + else if (!strcasecmp(Name, "ShowProgram")) GraphLCDSetup.ShowProgram = atoi(Value); + else if (!strcasecmp(Name, "ShowTimebar")) GraphLCDSetup.ShowTimebar = atoi(Value); + else if (!strcasecmp(Name, "ShowMenu")) GraphLCDSetup.ShowMenu = atoi(Value); + else if (!strcasecmp(Name, "ShowMessages")) GraphLCDSetup.ShowMessages = atoi(Value); + else if (!strcasecmp(Name, "ShowColorButtons")) GraphLCDSetup.ShowColorButtons = atoi(Value); + else if (!strcasecmp(Name, "ShowVolume")) GraphLCDSetup.ShowVolume = atoi(Value); + else if (!strcasecmp(Name, "ShowNotRecording")) GraphLCDSetup.ShowNotRecording = atoi(Value); + else if (!strcasecmp(Name, "IdentifyReplayType")) GraphLCDSetup.IdentifyReplayType = atoi(Value); + else if (!strcasecmp(Name, "ModifyReplayString")) GraphLCDSetup.ModifyReplayString = atoi(Value); + else if (!strcasecmp(Name, "ReplayLogo")) GraphLCDSetup.ReplayLogo = atoi(Value); + else if (!strcasecmp(Name, "ScrollMode")) GraphLCDSetup.ScrollMode = atoi(Value); + else if (!strcasecmp(Name, "ScrollSpeed")) GraphLCDSetup.ScrollSpeed = atoi(Value); + else if (!strcasecmp(Name, "ScrollTime")) GraphLCDSetup.ScrollTime = atoi(Value); + else if (!strcasecmp(Name, "BrightnessActive")) GraphLCDSetup.BrightnessActive = atoi(Value); + else if (!strcasecmp(Name, "BrightnessIdle")) GraphLCDSetup.BrightnessIdle = atoi(Value); + else if (!strcasecmp(Name, "BrightnessDelay")) GraphLCDSetup.BrightnessDelay = atoi(Value); + else return false; + return true; +} + +VDRPLUGINCREATOR(cPluginGraphLCD); // Don't touch this! @@ -0,0 +1,93 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * setup.c - Setup + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#include "setup.h" + + +cGraphLCDSetup GraphLCDSetup; + +cGraphLCDSetup::cGraphLCDSetup(void) +: PluginActive(1), + ShowDateTime(1), + ShowChannel(1), + ShowLogo(1), + ShowSymbols(1), + ShowETSymbols(0), + ShowProgram(1), + ShowTimebar(1), + ShowMenu(1), + ShowMessages(1), + ShowColorButtons(1), + ShowVolume(1), + ShowNotRecording(0), + IdentifyReplayType(1), + ModifyReplayString(1), + ReplayLogo(1), + ScrollMode(0), + ScrollSpeed(2), + ScrollTime(500), + BrightnessActive(100), + BrightnessIdle(100), + BrightnessDelay(30) +{ +} + +cGraphLCDSetup::~cGraphLCDSetup(void) +{ +} + +cGraphLCDSetup & cGraphLCDSetup::operator=(const cGraphLCDSetup & setup) +{ + CopyFrom(&setup); + return *this; +} + +void cGraphLCDSetup::CopyFrom(const cGraphLCDSetup * source) +{ + PluginActive = source->PluginActive; + ShowDateTime = source->ShowDateTime; + ShowChannel = source->ShowChannel; + ShowLogo = source->ShowLogo; + ShowSymbols = source->ShowSymbols; + ShowETSymbols = source->ShowETSymbols; + ShowProgram = source->ShowProgram; + ShowTimebar = source->ShowTimebar; + ShowMenu = source->ShowMenu; + ShowMessages = source->ShowMessages; + ShowColorButtons = source->ShowColorButtons; + ShowVolume = source->ShowVolume; + ShowNotRecording = source->ShowNotRecording; + IdentifyReplayType = source->IdentifyReplayType; + ModifyReplayString = source->ModifyReplayString; + ReplayLogo = source->ReplayLogo; + ScrollMode = source->ScrollMode; + ScrollSpeed = source->ScrollSpeed; + ScrollTime = source->ScrollTime; + BrightnessActive = source->BrightnessActive; + BrightnessIdle = source->BrightnessIdle; + BrightnessDelay = source->BrightnessDelay; +} @@ -0,0 +1,67 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * setup.h - Setup + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#ifndef _GRAPHLCD_SETUP_H_ +#define _GRAPHLCD_SETUP_H_ + + +class cGraphLCDSetup +{ +public: + int PluginActive; + int ShowDateTime; + int ShowChannel; + int ShowLogo; + int ShowSymbols; + int ShowETSymbols; + int ShowProgram; + int ShowTimebar; + int ShowMenu; + int ShowMessages; + int ShowColorButtons; + int ShowVolume; + int ShowNotRecording; // Empty frame around not recording card's empty icons? + int IdentifyReplayType; + int ModifyReplayString; + int ReplayLogo; + int ScrollMode; + int ScrollSpeed; + int ScrollTime; + int BrightnessActive; + int BrightnessIdle; + int BrightnessDelay; + +public: + cGraphLCDSetup(void); + virtual ~cGraphLCDSetup(void); + cGraphLCDSetup & operator= (const cGraphLCDSetup & setup); + void CopyFrom(const cGraphLCDSetup * source); +}; + +extern cGraphLCDSetup GraphLCDSetup; + +#endif @@ -0,0 +1,830 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * status.c - status monitor class + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +#include <ctype.h> + +#include <algorithm> + +#include "display.h" +#include "state.h" +#include "strfct.h" + +#include <vdr/eitscan.h> +#include <vdr/i18n.h> + +#include "compat.h" + +cGraphLCDState::cGraphLCDState(cGraphLCDDisplay * Display) +: mDisplay(Display), + first(true), + tickUsed(false) +{ + channel.number = 0; + channel.str = ""; + channel.strTmp = ""; + + event.presentTime = 0; + event.presentTitle = ""; + event.presentSubtitle = ""; + event.followingTime = 0; + event.followingTitle = ""; + event.followingSubtitle = ""; + + replay.name = ""; + replay.loopmode = ""; + replay.control = NULL; + replay.mode = eReplayNormal; + replay.current = 0; + replay.currentLast = FRAMESPERSEC; + replay.total = 0; + replay.totalLast = 1; + + for (int i = 0; i < MAXDEVICES; i++) + { + card[i].recordingCount = 0; + card[i].recordingName = ""; + } + + osd.currentItem = ""; + osd.title = ""; + for (int i = 0; i < 4; i++) + osd.colorButton[i] = ""; + osd.message = ""; + osd.textItem = ""; + osd.currentItemIndex = 0; + + volume.value = -1; + volume.lastChange = 0; + + SetChannel(cDevice::CurrentChannel()); +} + +cGraphLCDState::~cGraphLCDState() +{ +} + +void cGraphLCDState::ChannelSwitch(const cDevice * Device, int ChannelNumber) +{ + //printf("graphlcd plugin: cGraphLCDState::ChannelSwitch %d %d\n", Device->CardIndex(), ChannelNumber); + if (GraphLCDSetup.PluginActive) + { + if (ChannelNumber > 0 && Device->IsPrimaryDevice() && !EITScanner.UsesDevice(Device)) + { + if (ChannelNumber == cDevice::CurrentChannel()) + { + SetChannel(ChannelNumber); + } + } + } +} + +#if VDRVERSNUM < 10338 +void cGraphLCDState::Recording(const cDevice * Device, const char * Name) +#else +void cGraphLCDState::Recording(const cDevice * Device, const char * Name, const char *FileName, bool On) +#endif +{ + //printf("graphlcd plugin: cGraphLCDState::Recording %d %s\n", Device->CardIndex(), Name); + if (GraphLCDSetup.PluginActive) + { + mutex.Lock(); +#if VDRVERSNUM < 10338 + if (Name) +#else + if (On) +#endif + { + card[Device->DeviceNumber()].recordingCount++; +#if VDRVERSNUM < 10338 + card[Device->DeviceNumber()].recordingName = Name; +#else + card[Device->DeviceNumber()].recordingName = Name ? Name : ""; +#endif + } + else + { + if (card[Device->DeviceNumber()].recordingCount > 0) + card[Device->DeviceNumber()].recordingCount--; + card[Device->DeviceNumber()].recordingName = ""; + } + mutex.Unlock(); + + mDisplay->Update(); + } +} + +#if VDRVERSNUM < 10338 +void cGraphLCDState::Replaying(const cControl * Control, const char * Name) +#else +void cGraphLCDState::Replaying(const cControl * Control, const char * Name, const char *FileName, bool On) +#endif +{ + //printf("graphlcd plugin: cGraphLCDState::Replaying %s\n", Name); + if (GraphLCDSetup.PluginActive) + { +#if VDRVERSNUM < 10338 + if (Name) +#else + if (On) +#endif + { + mutex.Lock(); + replay.control = (cControl *) Control; + replay.mode = eReplayNormal; + replay.name = ""; + replay.loopmode = ""; +#if VDRVERSNUM < 10338 + if (!isempty(Name)) +#else + if (Name && !isempty(Name)) +#endif + { + if (GraphLCDSetup.IdentifyReplayType) + { + int slen = strlen(Name); + bool bFound = false; + /////////////////////////////////////////////////////////////////////// + //Looking for mp3-Plugin Replay : [LS] (444/666) title + // + if (slen > 6 && + *(Name+0)=='[' && + *(Name+3)==']' && + *(Name+5)=='(') + { + unsigned int i; + for (i=6; *(Name + i) != '\0'; ++i) //search for [xx] (xxxx) title + { + if (*(Name+i)==' ' && *(Name+i-1)==')') + { + bFound = true; + break; + } + } + if (bFound) //found MP3-Plugin replaymessage + { + unsigned int j; + // get loopmode + replay.loopmode = Name; + replay.loopmode = replay.loopmode.substr (0, 5); + if (replay.loopmode[2] == '.') + replay.loopmode.erase (2, 1); + if (replay.loopmode[1] == '.') + replay.loopmode.erase (1, 1); + if (replay.loopmode[1] == ']') + replay.loopmode = ""; + //printf ("loopmode=<%s>\n", replay.loopmode.c_str ()); + for (j=0;*(Name+i+j) != '\0';++j) //trim name + { + if (*(Name+i+j)!=' ') + break; + } + + if (strlen(Name+i+j) > 0) + { //if name isn't empty, then copy + replay.name = Name + i + j; + } + else + { //if Name empty, set fallback title + replay.name = tr("Unknown title"); + } + replay.mode = eReplayMusic; + } + } + /////////////////////////////////////////////////////////////////////// + //Looking for DVD-Plugin Replay : 1/8 4/28, de 2/5 ac3, no 0/7, 16:9, VOLUMENAME + //cDvdPlayerControl::GerDisplayHeaderLine + // titleinfo, audiolang, spulang, aspect, title + if (!bFound) + { + if (slen>7) + { + unsigned int i,n; + for (n=0,i=0;*(Name+i) != '\0';++i) + { //search volumelabel after 4*", " => xxx, xxx, xxx, xxx, title + if (*(Name+i)==' ' && *(Name+i-1)==',') + { + if (++n == 4) + { + bFound = true; + break; + } + } + } + if (bFound) //found DVD replaymessage + { + unsigned int j;bool b; + for (j=0;*(Name+i+j) != '\0';++j) //trim name + { + if (*(Name+i+j)!=' ') + break; + } + + if (strlen(Name+i+j) > 0) + { // if name isn't empty, then copy + replay.name = Name + i + j; + // replace all '_' with ' ' + replace(replay.name.begin(), replay.name.end(), '_', ' '); + for (j = 0, b = true; j < replay.name.length(); ++j) + { + // KAPITALIZE -> Kaptialize + if (replay.name[j] == ' ') + b = true; + else if (b) + b = false; + else replay.name[j] = tolower(replay.name[j]); + } + } + else + { //if Name empty, set fallback title + replay.name = tr("Unknown title"); + } + replay.mode = eReplayDVD; + } + } + } + if (!bFound) + { + int i; + for (i=slen-1;i>0;--i) + { //Reversesearch last Subtitle + // - filename contains '~' => subdirectory + // or filename contains '/' => subdirectory + switch (*(Name+i)) + { + case '/': + { + // look for file extentsion like .xxx or .xxxx + if (slen>5 && ((*(Name+slen-4) == '.') || (*(Name+slen-5) == '.'))) + { + replay.mode = eReplayFile; + } + else + { + break; + } + } + case '~': + { + replay.name = Name + i + 1; + bFound = true; + i = 0; + } + default: + break; + } + } + } + + if (0 == strncmp(Name,"[image] ",8)) + { + if (replay.mode != eReplayFile) //if'nt already Name stripped-down as filename + replay.name = Name + 8; + replay.mode = eReplayImage; + bFound = true; + } + else if (0 == strncmp(Name,"[audiocd] ",10)) + { + replay.name = Name + 10; + replay.mode = eReplayAudioCD; + bFound = true; + } + if (!bFound || !GraphLCDSetup.ModifyReplayString) + { + replay.name = Name; + } + } + else + { + replay.name = Name; + } + } + replay.currentLast = FRAMESPERSEC; + replay.totalLast = 1; + mutex.Unlock(); + } + else + { + mutex.Lock(); + replay.control = NULL; + mutex.Unlock(); + SetChannel(channel.number); + } +#if VDRVERSNUM < 10338 + mDisplay->Replaying(Name ? true : false, replay.mode); +#else + mDisplay->Replaying(On, replay.mode); +#endif + } +} + +void cGraphLCDState::SetVolume(int Volume, bool Absolute) +{ + //printf("graphlcd plugin: cGraphLCDState::SetVolume %d %d\n", Volume, Absolute); + if (GraphLCDSetup.PluginActive) + { + mutex.Lock(); + +#if VDRVERSNUM < 10402 + volume.value = Volume; +#else + if (!Absolute) + { + volume.value += Volume; + } + else + { + volume.value = Volume; + } +#endif + if (!first) + { + volume.lastChange = cTimeMs::Now(); + mutex.Unlock(); + mDisplay->Update(); + } + else + { + // first time + first = false; + mutex.Unlock(); + } + } +} + +void cGraphLCDState::Tick() +{ + //printf("graphlcd plugin: cGraphLCDState::Tick\n"); + if (GraphLCDSetup.PluginActive) + { + mutex.Lock(); + + tickUsed = true; + + if (replay.control) + { + if (replay.control->GetIndex(replay.current, replay.total, false)) + { + replay.total = (replay.total == 0) ? 1 : replay.total; + } + else + { + replay.control = NULL; + } + } + + mutex.Unlock(); + } +} + +void cGraphLCDState::OsdClear() +{ + //printf("graphlcd plugin: cGraphLCDState::OsdClear\n"); + if (GraphLCDSetup.PluginActive) + { + mutex.Lock(); + + channel.strTmp = ""; + + osd.title = ""; + osd.items.clear(); + for (int i = 0; i < 4; i++) + osd.colorButton[i] = ""; + osd.message = ""; + osd.textItem = ""; + + mutex.Unlock(); + mDisplay->SetClear(); + } +} + +void cGraphLCDState::OsdTitle(const char * Title) +{ + //printf("graphlcd plugin: cGraphLCDState::OsdTitle '%s'\n", Title); + if (GraphLCDSetup.PluginActive) + { + mutex.Lock(); + + osd.message = ""; + osd.title = ""; + if (Title) + { + osd.title = Title; + // remove the time + std::string::size_type pos = osd.title.find('\t'); + if (pos != std::string::npos) + osd.title.resize(pos); + osd.title = compactspace(osd.title); + } + + mutex.Unlock(); + mDisplay->SetOsdTitle(); + } +} + +void cGraphLCDState::OsdStatusMessage(const char * Message) +{ + //printf("graphlcd plugin: cGraphLCDState::OsdStatusMessage '%s'\n", Message); + if (GraphLCDSetup.PluginActive) + { + if (GraphLCDSetup.ShowMessages) + { + mutex.Lock(); + + if (Message) + osd.message = compactspace(Message); + else + osd.message = ""; + + mutex.Unlock(); + mDisplay->Update(); + } + } +} + +void cGraphLCDState::OsdHelpKeys(const char * Red, const char * Green, const char * Yellow, const char * Blue) +{ + //printf("graphlcd plugin: cGraphLCDState::OsdHelpKeys %s - %s - %s - %s\n", Red, Green, Yellow, Blue); + if (GraphLCDSetup.PluginActive) + { + if (GraphLCDSetup.ShowColorButtons) + { + mutex.Lock(); + + for (int i = 0; i < 4; i++) + osd.colorButton[i] = ""; + + if (Red) + osd.colorButton[0] = compactspace(Red); + if (Green) + osd.colorButton[1] = compactspace(Green); + if (Yellow) + osd.colorButton[2] = compactspace(Yellow); + if (Blue) + osd.colorButton[3] = compactspace(Blue); + + mutex.Unlock(); + } + } +} + +void cGraphLCDState::OsdItem(const char * Text, int Index) +{ + //printf("graphlcd plugin: cGraphLCDState::OsdItem %s, %d\n", Text, Index); + if (GraphLCDSetup.PluginActive) + { + if (GraphLCDSetup.ShowMenu) + { + mutex.Lock(); + + osd.message = ""; + + if (Text) + osd.items.push_back(Text); + + mutex.Unlock(); + if (Text) + mDisplay->SetOsdItem(Text); + } + } +} + +void cGraphLCDState::OsdCurrentItem(const char * Text) +{ + //printf("graphlcd plugin: cGraphLCDState::OsdCurrentItem %s\n", Text); + if (GraphLCDSetup.PluginActive) + { + if (GraphLCDSetup.ShowMenu) + { + int tabs; + std::string::size_type pos; + + mutex.Lock(); + + osd.message = ""; + osd.currentItem = ""; + if (Text) + { + osd.currentItem = Text; + + // count nr of tabs in text + tabs = 0; + for (unsigned int i = 0; i < osd.currentItem.length(); i++) + { + if (osd.currentItem[i] == '\t') + tabs++; + } + if (tabs == 1) + { + // only one tab => prob. Setup Menu + pos = osd.currentItem.find('\t'); + osd.currentItemIndex = 0; + if (pos != std::string::npos) + { + for (unsigned int i = 0; i < osd.items.size(); i++) + { + if (osd.items[i].find(osd.currentItem.c_str(), 0, pos) == 0) + { + osd.currentItemIndex = i; + osd.items[i] = osd.currentItem; + break; + } + } + } + } + else + { + osd.currentItemIndex = 0; + for (unsigned int i = 0; i < osd.items.size(); i++) + { + if (osd.items[i].compare(osd.currentItem) == 0) + { + osd.currentItemIndex = i; + break; + } + } + } + } + mutex.Unlock(); + if (Text) + mDisplay->SetOsdCurrentItem(); + } + } +} + +void cGraphLCDState::OsdTextItem(const char * Text, bool Scroll) +{ + //printf("graphlcd plugin: cGraphLCDState::OsdTextItem %s %d\n", Text, Scroll); + if (GraphLCDSetup.PluginActive) + { + mutex.Lock(); + if (Text) + { + osd.textItem = trim(Text); +#if 0 + // replace '\n' with ' ' + for (unsigned int i = 0; i < osd.textItem.length(); i++) + if (osd.textItem[i] == '\n' && (i + 1) < osd.textItem.length() && osd.textItem[i + 1] != '\n') + osd.textItem[i] = ' '; +#endif + } + mutex.Unlock(); + mDisplay->SetOsdTextItem(Text, Scroll); + } +} + + +void cGraphLCDState::OsdChannel(const char * Text) +{ + //printf("graphlcd plugin: cGraphLCDState::OsdChannel %s\n", Text); + if (GraphLCDSetup.PluginActive) + { + mutex.Lock(); + if (Text) + { + channel.strTmp = Text; + channel.strTmp = compactspace(channel.strTmp); + } + else + { + channel.strTmp = ""; + } + mutex.Unlock(); + + if (Text) + mDisplay->Update(); + } +} + +void cGraphLCDState::OsdProgramme(time_t PresentTime, const char * PresentTitle, const char * PresentSubtitle, time_t FollowingTime, const char * FollowingTitle, const char * FollowingSubtitle) +{ + //printf("graphlcd plugin: cGraphLCDState::OsdProgramme PT : %s\n", PresentTitle); + //printf("graphlcd plugin: cGraphLCDState::OsdProgramme PST: %s\n", PresentSubtitle); + //printf("graphlcd plugin: cGraphLCDState::OsdProgramme FT : %s\n", FollowingTitle); + //printf("graphlcd plugin: cGraphLCDState::OsdProgramme FST: %s\n", FollowingSubtitle); + if (GraphLCDSetup.PluginActive) + { + mutex.Lock(); + event.presentTime = PresentTime; + event.presentTitle = ""; + if (!isempty(PresentTitle)) + event.presentTitle = PresentTitle; + event.presentSubtitle = ""; + if (!isempty(PresentSubtitle)) + event.presentSubtitle = PresentSubtitle; + + event.followingTime = FollowingTime; + event.followingTitle = ""; + if (!isempty(FollowingTitle)) + event.followingTitle = FollowingTitle; + event.followingSubtitle = ""; + if (!isempty(FollowingSubtitle)) + event.followingSubtitle = FollowingSubtitle; + mutex.Unlock(); + mDisplay->Update(); + } +} + +void cGraphLCDState::SetChannel(int ChannelNumber) +{ + char tmp[16]; + + if (ChannelNumber == 0) + return; + + mutex.Lock(); + + channel.number = ChannelNumber; + cChannel * ch = Channels.GetByNumber(channel.number); + channel.id = ch->GetChannelID(); + sprintf(tmp, "%d ", channel.number); + channel.str = tmp; + channel.str += ch->Name(); + event.presentTime = 0; + event.followingTime = 0; + + mutex.Unlock(); + + mDisplay->SetChannel(ChannelNumber); +} + +void cGraphLCDState::GetProgramme() +{ + mutex.Lock(); +#if VDRVERSNUM < 10300 + const cEventInfo * present = NULL, * following = NULL; + cMutexLock mutexLock; + const cSchedules * schedules = cSIProcessor::Schedules(mutexLock); + if (channel.id.Valid()) + { + if (schedules) + { + const cSchedule * schedule = schedules->GetSchedule(channel.id); + if (schedule) + { + if ((present = schedule->GetPresentEvent()) != NULL) + { + event.presentTime = present->GetTime(); + event.presentTitle = ""; + if (!isempty(present->GetTitle())) + event.presentTitle = present->GetTitle(); + event.presentSubtitle = ""; + if (!isempty(present->GetSubtitle())) + event.presentSubtitle = present->GetSubtitle(); + } + if ((following = schedule->GetFollowingEvent()) != NULL) + { + event.followingTime = following->GetTime(); + event.followingTitle = ""; + if (!isempty(following->GetTitle())) + event.followingTitle = following->GetTitle(); + event.followingSubtitle = ""; + if (!isempty(following->GetSubtitle())) + event.followingSubtitle = following->GetSubtitle(); + } + } + } + } +#else + const cEvent * present = NULL, * following = NULL; + cSchedulesLock schedulesLock; + const cSchedules * schedules = cSchedules::Schedules(schedulesLock); + if (channel.id.Valid()) + { + if (schedules) + { + const cSchedule * schedule = schedules->GetSchedule(channel.id); + if (schedule) + { + if ((present = schedule->GetPresentEvent()) != NULL) + { + event.presentTime = present->StartTime(); + event.presentTitle = ""; + if (!isempty(present->Title())) + event.presentTitle = present->Title(); + event.presentSubtitle = ""; + if (!isempty(present->ShortText())) + event.presentSubtitle = present->ShortText(); + } + if ((following = schedule->GetFollowingEvent()) != NULL) + { + event.followingTime = following->StartTime(); + event.followingTitle = ""; + if (!isempty(following->Title())) + event.followingTitle = following->Title(); + event.followingSubtitle = ""; + if (!isempty(following->ShortText())) + event.followingSubtitle = following->ShortText(); + } + } + } + } +#endif + mutex.Unlock(); +} + +tChannelState cGraphLCDState::GetChannelState() +{ + tChannelState ret; + + mutex.Lock(); + ret = channel; + mutex.Unlock(); + + return ret; +} + +tEventState cGraphLCDState::GetEventState() +{ + tEventState ret; + + GetProgramme(); + mutex.Lock(); + ret = event; + mutex.Unlock(); + + return ret; +} + +tReplayState cGraphLCDState::GetReplayState() +{ + tReplayState ret; + + mutex.Lock(); + + if (tickUsed) + { + if (replay.control) + { + ret = replay; + replay.currentLast = replay.current; + replay.totalLast = replay.total; + } + else + { + ret = replay; + } + } + else + { + if (replay.control) + { + if (replay.control->GetIndex(replay.current, replay.total, false)) + { + replay.total = (replay.total == 0) ? 1 : replay.total; + ret = replay; + replay.currentLast = replay.current; + replay.totalLast = replay.total; + } + else + { + replay.control = NULL; + ret = replay; + } + } + else + { + ret = replay; + } + } + mutex.Unlock(); + + return ret; +} + +tCardState cGraphLCDState::GetCardState(int number) +{ + tCardState ret; + + mutex.Lock(); + ret = card[number]; + mutex.Unlock(); + + return ret; +} + +tOsdState cGraphLCDState::GetOsdState() +{ + tOsdState ret; + + mutex.Lock(); + ret = osd; + mutex.Unlock(); + + return ret; +} + +tVolumeState cGraphLCDState::GetVolumeState() +{ + tVolumeState ret; + + mutex.Lock(); + ret = volume; + mutex.Unlock(); + + return ret; +} @@ -0,0 +1,134 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * state.h - status monitor class + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + **/ + +#ifndef _GRAPHLCD_STATE_H_ +#define _GRAPHLCD_STATE_H_ + +#include <stdint.h> +#include <string.h> + +#include <vdr/status.h> + + +struct tChannelState +{ + tChannelID id; + int number; + std::string str; + std::string strTmp; +}; + +struct tEventState +{ + time_t presentTime; + std::string presentTitle; + std::string presentSubtitle; + time_t followingTime; + std::string followingTitle; + std::string followingSubtitle; +}; + +enum eReplayMode +{ + eReplayNormal, + eReplayMusic, + eReplayDVD, + eReplayFile, + eReplayImage, + eReplayAudioCD +}; + +struct tReplayState +{ + std::string name; + std::string loopmode; + cControl * control; + eReplayMode mode; + int current; + int currentLast; + int total; + int totalLast; +}; + +struct tCardState +{ + int recordingCount; + std::string recordingName; +}; + +struct tOsdState +{ + std::string currentItem; + std::vector <std::string> items; + std::string title; + std::string colorButton[4]; + std::string textItem; + std::string message; + int currentItemIndex; +}; + +struct tVolumeState +{ + int value; + uint64_t lastChange; +}; + +class cGraphLCDDisplay; + +class cGraphLCDState : public cStatus +{ +private: + cGraphLCDDisplay * mDisplay; + bool first; + bool tickUsed; + + cMutex mutex; + + tChannelState channel; + tEventState event; + tReplayState replay; + tCardState card[MAXDEVICES]; + tOsdState osd; + tVolumeState volume; + + void SetChannel(int ChannelNumber); + void GetProgramme(); +protected: + virtual void ChannelSwitch(const cDevice *Device, int ChannelNumber); +#if VDRVERSNUM < 10338 + virtual void Recording(const cDevice *Device, const char *Name); + virtual void Replaying(const cControl *Control, const char *Name); +#else + virtual void Recording(const cDevice *Device, const char *Name, const char *FileName, bool On); + virtual void Replaying(const cControl *Control, const char *Name, const char *FileName, bool On); +#endif + virtual void SetVolume(int Volume, bool Absolute); + virtual void OsdClear(); + virtual void OsdTitle(const char *Title); + virtual void OsdStatusMessage(const char *Message); + virtual void OsdHelpKeys(const char *Red, const char *Green, const char *Yellow, const char *Blue); + virtual void OsdItem(const char *Text, int Index); + virtual void OsdCurrentItem(const char *Text); + virtual void OsdTextItem(const char *Text, bool Scroll); + virtual void OsdChannel(const char *Text); + virtual void OsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle); + +public: + cGraphLCDState(cGraphLCDDisplay * Display); + virtual ~cGraphLCDState(); + + void Tick(); + tChannelState GetChannelState(); + tEventState GetEventState(); + tReplayState GetReplayState(); + tCardState GetCardState(int number); + tOsdState GetOsdState(); + tVolumeState GetVolumeState(); +}; + +#endif diff --git a/strfct.c b/strfct.c new file mode 100644 index 0000000..fd49086 --- /dev/null +++ b/strfct.c @@ -0,0 +1,91 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * strfct.c - various string functions + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + * (c) 2004 Andreas Regel <andreas.regel AT powarman de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#include <string.h> +#include <ctype.h> + +#include "strfct.h" + + +char * strncopy(char * dest , const char * src , size_t n) +{ + strncpy(dest, src, n); + if (strlen(src) >= n) + { + *(dest + n - 1) = 0; + } + return dest; +} + + +std::string trim(const std::string & s) +{ + std::string::size_type start, end; + + start = 0; + while (start < s.length()) + { + if (!isspace(s[start])) + break; + start++; + } + end = s.length() - 1; + while (end >= 0) + { + if (!isspace(s[end])) + break; + end--; + } + return s.substr(start, end - start + 1); +} + +std::string compactspace(const std::string & s) +{ + std::string str = ""; + std::string tmp; + unsigned int pos = 0; + unsigned int cnt = 0; + tmp = trim(s); + while (pos < tmp.length()) + { + if (!isspace(tmp[pos])) + { + str += tmp[pos]; + cnt = 0; + } + else if (cnt == 0) + { + str += tmp[pos]; + cnt++; + } + else + cnt++; + pos++; + } + return str; +} diff --git a/strfct.h b/strfct.h new file mode 100644 index 0000000..aae2e3c --- /dev/null +++ b/strfct.h @@ -0,0 +1,40 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * strfct.h - various string functions + * + * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de> + * (c) 2004 Andreas Regel <andreas.regel AT powarman de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#ifndef _GRAPHLCD_FCT_H_ +#define _GRAPHLCD_FCT_H_ + +#include <string> + + +char * strncopy(char * dest , const char * src , size_t n); +std::string trim(const std::string & s); +std::string compactspace(const std::string & s); + +#endif + diff --git a/widgets.c b/widgets.c new file mode 100644 index 0000000..68193d5 --- /dev/null +++ b/widgets.c @@ -0,0 +1,95 @@ +#include "setup.h" +#include "widgets.h" + +#include <vdr/config.h> +#include <vdr/tools.h> + +#include "compat.h" + + +cScroller::cScroller() +{ + Reset(); +} + +void cScroller::Reset() +{ + x = 0; + y = 0; + xmax = 0; + font = NULL; + text = ""; + active = false; + update = false; + position = 0; + increment = 0; + lastUpdate = 0; +} + +bool cScroller::NeedsUpdate() +{ + if (active && + TimeMs() - lastUpdate > (uint64_t) GraphLCDSetup.ScrollTime) + { + update = true; + return true; + } + return false; +} + +void cScroller::Init(int X, int Y, int Xmax, const GLCD::cFont * Font, const std::string & Text) +{ + x = X; + y = Y; + xmax = Xmax; + font = Font; + text = Text; + increment = GraphLCDSetup.ScrollSpeed; + position = 0; + if (GraphLCDSetup.ScrollMode != 0 && + font->Width(text) > xmax - x + 1) + active = true; + else + active = false; + update = false; + lastUpdate = TimeMs() + 2000; +} + +void cScroller::Draw(GLCD::cBitmap * bitmap) +{ + if (!active) + { + bitmap->DrawText(x, y, xmax, text, font); + } + else + { + if (update) + { + if (increment > 0) + { + if (font->Width(text) - position + font->TotalWidth() * 5 < increment) + { + increment = 0; + position = 0; + } + } + else + { + if (GraphLCDSetup.ScrollMode == 2) + { + increment = GraphLCDSetup.ScrollSpeed; + } + else + { + active = false; + } + } + position += increment; + lastUpdate = TimeMs(); + update = false; + } + bitmap->DrawText(x, y, xmax, text, font, GLCD::clrBlack, true, position); + if (font->Width(text) - position <= xmax - x + 10 + font->TotalWidth() * 5) + bitmap->DrawText(x + font->Width(text) - position + font->TotalWidth() * 5, y, xmax, text, font); + } +} diff --git a/widgets.h b/widgets.h new file mode 100644 index 0000000..d6fd3a4 --- /dev/null +++ b/widgets.h @@ -0,0 +1,61 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * widgets.h - display widgets + * + * (c) 2004 Andreas Regel <andreas.regel AT powarman de> + **/ + +/*************************************************************************** + * * + * 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 * + * * + ***************************************************************************/ + +#ifndef _GRAPHLCD_WIDGETS_H_ +#define _GRAPHLCD_WIDGETS_H_ + +#include <stdint.h> + +#include <string> + +#include <glcdgraphics/bitmap.h> +#include <glcdgraphics/font.h> + +class cScroller +{ +private: + int x; + int y; + int xmax; + const GLCD::cFont * font; + std::string text; + bool active; + bool update; + int position; + int increment; + uint64_t lastUpdate; +public: + cScroller(); + const std::string & Text() const { return text; } + bool NeedsUpdate(); + void Reset(); + void Init(int x, int y, int xmax, const GLCD::cFont * font, const std::string & text); + void Draw(GLCD::cBitmap * bitmap); +}; + +#endif + |