summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYING281
-rw-r--r--HISTORY455
-rw-r--r--Makefile105
-rw-r--r--README231
-rw-r--r--compat.h18
-rw-r--r--display.c1953
-rw-r--r--display.h152
-rw-r--r--global.h33
l---------graphlcd/fonts.conf1
-rw-r--r--graphlcd/fonts.conf.large4
-rw-r--r--graphlcd/fonts.conf.medium4
-rw-r--r--graphlcd/fonts.conf.small4
-rw-r--r--graphlcd/fonts.conf.tiny4
-rw-r--r--graphlcd/fonts.conf.ttf4
-rw-r--r--graphlcd/fonts/Vera.ttfbin0 -> 65932 bytes
-rw-r--r--graphlcd/fonts/VeraBd.ttfbin0 -> 58716 bytes
-rw-r--r--graphlcd/fonts/f12b.fntbin0 -> 2576 bytes
-rw-r--r--graphlcd/fonts/f12bn.fntbin0 -> 2576 bytes
-rw-r--r--graphlcd/fonts/f17b.fntbin0 -> 3801 bytes
-rw-r--r--graphlcd/fonts/f17bn.fntbin0 -> 8968 bytes
-rw-r--r--graphlcd/fonts/f5n.fntbin0 -> 1456 bytes
-rw-r--r--graphlcd/fonts/f8b.fntbin0 -> 1936 bytes
-rw-r--r--graphlcd/fonts/f8n.fntbin0 -> 1936 bytes
-rw-r--r--graphlcd/fonts/sym11.fntbin0 -> 484 bytes
-rw-r--r--graphlcd/fonts/sym7.fntbin0 -> 340 bytes
-rw-r--r--graphlcd/fonts/verdana-018.fntbin0 -> 8968 bytes
-rw-r--r--graphlcd/fonts/verdanab-009.fntbin0 -> 3216 bytes
-rw-r--r--graphlcd/fonts/verdanab-013.fntbin0 -> 6441 bytes
l---------graphlcd/logonames.alias1
-rw-r--r--graphlcd/logonames.alias.1.2301
-rw-r--r--graphlcd/logonames.alias.1.3383
-rw-r--r--graphlcd/logos/1-2-3 TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/123SAT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/13TH STREET_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/13TH STREET_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/2M MAROC_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/3NET_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/3NET_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/3SAT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/3SAT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/40 TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/AB MOTEURS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/AB MOTEURS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/AB1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/AB1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ACTION_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ADO FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ADO FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/AL JAZEERA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/AL JAZEERA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ALGERIE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ALGERIE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ALOUETTE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ALOUETTE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ANIMAL PLANET_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ANIMAL PLANET_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ANIMAUX_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ANTENNE BAYERN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ANTENNE BAYERN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ANTENNE BAYERN_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ARTE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ARTE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ATVPLUS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ATVPLUS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/AXN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/AXN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/B5 AKTUELL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/B5 AKTUELL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/B5 AKTUELL_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BAHN TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BAHN TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BAHN TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BAYERISCHES FERNSEHEN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BAYERISCHES FERNSEHEN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BAYERISCHES FERNSEHEN_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BAYERISCHES FERNSEHEN_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BAYERN1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BAYERN1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BAYERN4 KLASSIK_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BAYERN4 KLASSIK_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BBC PRIME_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BBC PRIME_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BBC WORLD_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BBC WORLD_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BBC WORLD_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BBC WORLD_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BEATE-UHSE.TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BEATE-UHSE.TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BEATE-UHSE.TV_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BEUR TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BEUR TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BEUR TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BIBEL TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BIBEL TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BIBEL TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BLOOMBERG TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BLOOMBERG TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BR-ALPHA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BR-ALPHA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BR-ALPHA_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BR-ALPHA_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BR-ALPHA_v3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BTV4_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BTV4_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BTV4_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BTV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BTV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BVN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/BVN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/BVN_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CADENA DIAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CADENA DIAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CANAL 24 HORAS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CANAL 24 HORAS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CANAL CANARIAS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CANAL CANARIAS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CANAL CANARIAS_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CANAL CLUB_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CANAL CLUB_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CANAL CLUB_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CANAL+ ...30_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CANAL+_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CARTOON NETWORK_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CARTOON NETWORK_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CFN RFC_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CFN RFC_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CHERIE FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CHERIE FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CHRONOS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CHRONOS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CINE BOX_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CLASSICA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CLASSICA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CLUB TELEACHAT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CLUB TELEACHAT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CLUB TELEACHAT_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CNBC EUROPE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CNBC EUROPE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CNBC_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CNBC_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CNN INT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CNN INT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CNN+_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/CONTACT FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/CONTACT FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/DAS ERSTE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DAS ERSTE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/DAS ERSTE_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DAS VIERTE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DEUTSCHLANDFUNK KOELN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DEUTSCHLANDFUNK KOELN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/DEUTSCHLANDFUNK KOELN_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/DEUTSCHLANDRADIO BERLIN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DEUTSCHLANDRADIO BERLIN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/DEUTSCHLANDRADIO BERLIN_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/DISCOVERY CHANNEL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DISCOVERY CHANNEL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/DISCOVERY CHANNEL_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DISNEY CHANNEL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DISNEY CHANNEL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/DISNEY CHANNEL_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DISNEY PLAYHOUSE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DISNEY TOON +1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DISNEY TOON_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DSF_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DSF_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/DW-TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/DW-TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/E ENTERTAINMENT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EINS EXTRA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EINS EXTRA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/EINS EXTRA_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EINS EXTRA_v3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EINS FESTIVAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EINS FESTIVAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/EINS FESTIVAL_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EINS MUXX_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EINS MUXX_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/EINS MUXX_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ERF RADIO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ERF RADIO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ESC1-EGYPT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ESPN CLASSIC SPORT_l.glcdbin0 -> 432 bytes
-rw-r--r--graphlcd/logos/ETB SAT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ETB SAT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/EURONEWS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EURONEWS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/EUROPE 2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EUROPE 2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/EUROSPORT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EUROSPORT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/EXTRA 1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/EXTREME SPORTS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FAB_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FAB_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FAB_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FASHION TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FASHION TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FASHION TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FESTIVAL 1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FESTIVAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FM4_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FM4_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FOX KIDS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FOX KIDS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FOX KIDS_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FOX KIDS_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FOX NEWS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FOX_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FRANCE2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FRANCE2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FRANCE3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FRANCE3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FRANCE5_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FRANCE5_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FRANKEN SAT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FRANKEN SAT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FREE-X TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FREE-X TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/FRITZ_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/FRITZ_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/GAMES TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/GOLDSTAR TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/GOLDSTAR TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/GOLDSTAR TV_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/GOLDSTAR TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/GUTE LAUNE TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HALLMARK_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HARMONY FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HARMONY FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HARMONY FM_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HEIMATKANAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HEIMATKANAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HEIMATKANAL_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HESSEN FERNSEHEN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HESSEN FERNSEHEN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HESSEN FERNSEHEN_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HISTOIRE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HISTORY CHANNEL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HIT CHANNEL 1025_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HIT CHANNEL 1025_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HITRADIO FFH_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HITRADIO FFH_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HOERZU DIGITAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HOERZU DIGITAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HOLLYWOOD CINEMA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HOLLYWOOD CINEMA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HR CHRONOS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HR KLASSIK_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HR KLASSIK_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HR KLASSIK_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HR SKYLINE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HR SKYLINE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HR SKYLINE_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HR1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HR1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HR2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HR2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HSE24_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HSE24_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/HSE24_v2_m.glcdbin0 -> 123 bytes
-rw-r--r--graphlcd/logos/HUNDERT6 RADIO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/HUNDERT6 RADIO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/JUMP_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/JUMP_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/JUNIOR_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/JUNIOR_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/JUNIOR_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/K TOON_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/K TOON_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/K TOON_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/K-TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/K-TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/K-TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/KABEL 1 AUSTRIA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/KABEL 1 AUSTRIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/KABEL 1 SCHWEIZ_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/KABEL 1 SCHWEIZ_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/KABEL 1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/KABEL 1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/KIKA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/KIKA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/KINK FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/KINK FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/KINOWELT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/KRIMICO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/KRIMICO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/KTO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/KTO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/L1MBURG_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/L1MBURG_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/LASTMINUTE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/LASTMINUTE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/LASTMINUTE_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/LCI_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/LCP_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/LIBERTY TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/LIBERTY TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/LIBERTY TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/LIVE 1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MATCH TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MAXIMA FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MAXIMA FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MDR FERNSEHEN SA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MDR FERNSEHEN SA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MDR FERNSEHEN S_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MDR FERNSEHEN S_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MDR FERNSEHEN TH_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MDR FERNSEHEN TH_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MDR FERNSEHEN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MDR FERNSEHEN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MDR FIGARO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MDR FIGARO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MDR FIGARO_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MDR INFO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MDR INFO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MEDIA TROPICAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MEDIA TROPICAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MGM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MGM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MOTORS TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MOTORS TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MOTORS TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MTV 2 POP CHANNEL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MTV 2 POP CHANNEL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MTV 2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MTV BASE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MTV BASE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MTV CENTRAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MTV CENTRAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MTV CENTRAL_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MTV DANCE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MTV F_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MTV HITS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MTV HITS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/MTV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/MULTIVISION_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/N-TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/N-TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/N-TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/N24_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/N24_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/N24_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NASN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NATIONAL GEOGRAPHIC_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NBC_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NBC_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN HH_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN HH_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN MV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN MV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN NDS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN NDS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN SH_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN SH_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NDR FERNSEHEN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NDR INFO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NDR INFO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NDR KULTUR_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NDR KULTUR_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NED1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NED1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NED2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NED2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NED3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NED3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NET5_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NET5_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NEUN LIVE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NEUN LIVE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NEUN LIVE_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NICKELODEON_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NICKELODEON_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NICK_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NORDWEST RADIO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NORDWEST RADIO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NORDWEST RADIO_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/NRJ_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/NRJ_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/OESTERREICH 1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/OESTERREICH 1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/OESTERREICH 3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/OESTERREICH 3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ONTV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ONTV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ONTV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ONYX TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ONYX TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2 BURGENLAND_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2 BURGENLAND_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2 KAERNTEN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2 KAERNTEN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2 NIEDEROESTERREICH_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2 NIEDEROESTERREICH_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2 OBEROESTERREICH_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2 OBEROESTERREICH_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2 SALZBURG_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2 SALZBURG_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2 STEIERMARK_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2 STEIERMARK_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2 TIROL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2 TIROL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2 VORARLBERG_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2 VORARLBERG_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2 WIEN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2 WIEN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF 2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF 2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ORF2 RADIO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ORF2 RADIO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/OTTO SHOP_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/OTTO SHOP_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PHOENIX_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PHOENIX_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PHOENIX_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PHOENIX_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PLANET RADIO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PLANET RADIO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PLANET_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PLANET_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PLAYBOY TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PLAYBOY_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PLAYHOUSE DISNEY_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PLUS 1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE AUSTRIA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE AUSTRIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT PORTAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT PORTAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT1_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT2_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT3_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT4_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT4_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE DIREKT4_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 1_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 2_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 3_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 4_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 4_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK 4_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE EROTIK_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE KRIMI_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE KRIMI_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE NOSTALGIE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE NOSTALGIE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE NOSTALGIE_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE SERIE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE SERIE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE SERIE_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE SPORT1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE SPORT1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE SPORT1_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE SPORT2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE SPORT2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE SPORT2_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE START_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE START_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE START_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE1_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE2_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE3_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE4_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE4_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE4_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE5_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE5_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE5_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE6_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE6_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE6_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE7_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PREMIERE7_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PREMIERE7_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PRO SIEBEN AUSTRIA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PRO SIEBEN AUSTRIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PRO SIEBEN SCHWEIZ_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PRO SIEBEN SCHWEIZ_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PRO SIEBEN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PRO SIEBEN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/PRO SIEBEN_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PULS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/PULS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/QVC GERMANY_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/QVC GERMANY_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RADIO 10 GOLD_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RADIO 10 GOLD_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RADIO 538_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RADIO 538_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RADIO MARIA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RADIO MARIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RADIO MARIA_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RADIO MULTIKULTI_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RADIO MULTIKULTI_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RADIO MULTIKULTI_v2_m.glcdbin0 -> 128 bytes
-rw-r--r--graphlcd/logos/RADIOEINS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RADIOEINS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RAI 1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RAI 1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RAI 1_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RAI 2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RAI 2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RAI 2_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RAI 3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RAI 3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RAI 3_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RAZE TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RAZE TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RAZE TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RBB BERLIN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RBB BERLIN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RBB BRANDENBURG_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RBB BRANDENBURG_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/REALMADRID_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/REALMADRID_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/REPLAY-CD-v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/REPLAY-CD-v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/REPLAY-CD_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/REPLAY-CD_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/REPLAY-DVD-v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/REPLAY-DVD_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/REPLAY-DVD_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/REPLAY-FILE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/REPLAY-FILE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/REPLAY-IMAGE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/REPLAY-IMAGE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/REPLAY-MUSIC_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/REPLAY-MUSIC_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/REPLAY-VDR_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/REPLAY-VDR_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RFM-TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RHEIN MAIN TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RHEIN MAIN TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RHEIN MAIN TV_v2_m.glcdbin0 -> 158 bytes
-rw-r--r--graphlcd/logos/RIRE ET CHANSONS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RIRE ET CHANSONS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ROCK ANTENNE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ROCK ANTENNE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ROCK ANTENNE_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RSR COULEUR 3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RSR COULEUR 3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTBF SAT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTBF SAT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL 2 AUSTRIA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL 2 AUSTRIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL 2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL 2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL AUSTRIA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL AUSTRIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL AUSTRIA_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL RADIO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL RADIO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL SHOP_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL SHOP_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL SHOP_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL TELE LETZEBURG_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL TELE LETZEBURG_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL TELE LETZEBURG_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL TELEVISION_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL TELEVISION_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL4_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL4_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTL5_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTL5_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/RTM-MAROC_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTP INT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/RTP INT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SAILING CHANNEL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SAT1 AUSTRIA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SAT1 AUSTRIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SAT1 AUSTRIA_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SAT1 SCHWEIZ_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SAT1 SCHWEIZ_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SAT1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SAT1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SBS6_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SBS6_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SILVERLINE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SKY RADIO NL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SKY RADIO NL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SONNENKLAR TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SONNENKLAR TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SONNENKLAR TV_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SPIEGEL TV XXP_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SPUTNIK_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SPUTNIK_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SPUTNIK_v2_l.glcdbin0 -> 352 bytes
-rw-r--r--graphlcd/logos/SPUTNIK_v2_m.glcdbin0 -> 123 bytes
-rw-r--r--graphlcd/logos/SR 1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SR 1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SR FERNSEHEN SW_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SR FERNSEHEN SW_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SR FERNSEHEN SW_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/STUDIO UNIVERSAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/STUDIO UNIVERSAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SUEDWEST FS BW_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SUEDWEST FS BW_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SUEDWEST FS BW_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SUEDWEST FS RP_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SUEDWEST FS RP_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SUEDWEST FS RP_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SUNSHINE LIVE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SUNSHINE LIVE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SUNSHINE LIVE_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SUPER RTL AUSTRIA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SUPER RTL AUSTRIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SUPER RTL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SUPER RTL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SUPER RTL_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SWR2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/SWR2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/SWR2_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/Sat1 SCHWEIZ_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TANGO TV_l.glcdbin0 -> 352 bytes
-rw-r--r--graphlcd/logos/TANGO TV_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TELE 5_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TELE 5_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TELE 5_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TMF_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TMF_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TRACE TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TRW AM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TRW AM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TV 5_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TV BERLIN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TV BERLIN_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TV BERLIN_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TV BERLIN_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TV BERLIN_v3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TV GALICIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TV GUSTO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TV TRAVEL SHOP_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TV TRAVEL SHOP_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TV TRAVEL SHOP_v2_m.glcdbin0 -> 164 bytes
-rw-r--r--graphlcd/logos/TV5 EUROPE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TV5 EUROPE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TV6_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TV6_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TV7_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TVC INT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TVC INT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TVE INT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TVE INT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TW1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/TW1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/TW1_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/V8_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/V8_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VERONICA RADIO_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/VERONICA RADIO_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VH1 CLASSIC_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/VH1 CLASSIC_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VH1_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/VH1_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VIBRATION_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/VIBRATION_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VIVA PLUS_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/VIVA PLUS_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VIVA PLUS_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VIVA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/VIVA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VOLTAGE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/VOLTAGE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VOX AUSTRIA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/VOX AUSTRIA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VOX_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/VOX_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/VOX_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/WDR3_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/WDR3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/WDR5_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/WDR5_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/WDR_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/WDR_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/WDR_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/WDR_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/WDR_v3_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/WEIN TV_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/WETTER FERNSEHEN_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/WISHLINE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/WISHLINE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/X-ZONE_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/X-ZONE_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/XXL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/XXL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/XXP_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/XXP_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/XXP_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/YAM FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/YAM FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/YORIN FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/YORIN FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/YOU FM_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/YOU FM_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZDF DOKU-KIKA_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZDF DOKU-KIKA_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZDF DOKUKANAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZDF DOKUKANAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZDF DOKUKANAL_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZDF DOKUKANAL_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZDF INFO-3SAT_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZDF INFO-3SAT_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZDF INFOKANAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZDF INFOKANAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZDF INFOKANAL_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZDF INFOKANAL_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZDF THEATERKANAL_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZDF THEATERKANAL_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZDF THEATERKANAL_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZDF_THEATERKANAL_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZDF_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZDF_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/ZIK_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/ZIK_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/animated/REPLAY-CD_l.glcdbin0 -> 782 bytes
-rw-r--r--graphlcd/logos/animated/REPLAY-DVD_l.glcdbin0 -> 782 bytes
-rw-r--r--graphlcd/logos/animated/REPLAY-FILE_l.glcdbin0 -> 782 bytes
-rw-r--r--graphlcd/logos/animated/REPLAY-IMAGE_l.glcdbin0 -> 782 bytes
-rw-r--r--graphlcd/logos/animated/REPLAY-MUSIC_l.glcdbin0 -> 782 bytes
-rw-r--r--graphlcd/logos/animated/REPLAY-VDR_l.glcdbin0 -> 12302 bytes
-rw-r--r--graphlcd/logos/animated/REPLAY-VDR_m.glcdbin0 -> 4654 bytes
-rw-r--r--graphlcd/logos/animated/REPLAY-VDR_v2_l.glcdbin0 -> 782 bytes
-rw-r--r--graphlcd/logos/animated/SAT1_l.glcdbin0 -> 1550 bytes
-rw-r--r--i18n.c970
-rw-r--r--i18n.h20
-rw-r--r--layout.c166
-rw-r--r--layout.h54
-rw-r--r--logo.c35
-rw-r--r--logo.h44
-rw-r--r--logolist.c175
-rw-r--r--logolist.h65
-rw-r--r--menu.c104
-rw-r--r--menu.h46
-rw-r--r--plugin.c246
-rw-r--r--setup.c93
-rw-r--r--setup.h67
-rw-r--r--state.c830
-rw-r--r--state.h134
-rw-r--r--strfct.c91
-rw-r--r--strfct.h40
-rw-r--r--widgets.c95
-rw-r--r--widgets.h61
765 files changed, 7270 insertions, 0 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..5d18622
--- /dev/null
+++ b/COPYING
@@ -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
+
diff --git a/HISTORY b/HISTORY
new file mode 100644
index 0000000..374a166
--- /dev/null
+++ b/HISTORY
@@ -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)
diff --git a/README b/README
new file mode 100644
index 0000000..94df948
--- /dev/null
+++ b/README
@@ -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
new file mode 100644
index 0000000..58cd6b5
--- /dev/null
+++ b/graphlcd/fonts/Vera.ttf
Binary files differ
diff --git a/graphlcd/fonts/VeraBd.ttf b/graphlcd/fonts/VeraBd.ttf
new file mode 100644
index 0000000..51d6111
--- /dev/null
+++ b/graphlcd/fonts/VeraBd.ttf
Binary files differ
diff --git a/graphlcd/fonts/f12b.fnt b/graphlcd/fonts/f12b.fnt
new file mode 100644
index 0000000..ca2776d
--- /dev/null
+++ b/graphlcd/fonts/f12b.fnt
Binary files differ
diff --git a/graphlcd/fonts/f12bn.fnt b/graphlcd/fonts/f12bn.fnt
new file mode 100644
index 0000000..bf7f41e
--- /dev/null
+++ b/graphlcd/fonts/f12bn.fnt
Binary files differ
diff --git a/graphlcd/fonts/f17b.fnt b/graphlcd/fonts/f17b.fnt
new file mode 100644
index 0000000..a025765
--- /dev/null
+++ b/graphlcd/fonts/f17b.fnt
Binary files differ
diff --git a/graphlcd/fonts/f17bn.fnt b/graphlcd/fonts/f17bn.fnt
new file mode 100644
index 0000000..2dd06b8
--- /dev/null
+++ b/graphlcd/fonts/f17bn.fnt
Binary files differ
diff --git a/graphlcd/fonts/f5n.fnt b/graphlcd/fonts/f5n.fnt
new file mode 100644
index 0000000..9e8814b
--- /dev/null
+++ b/graphlcd/fonts/f5n.fnt
Binary files differ
diff --git a/graphlcd/fonts/f8b.fnt b/graphlcd/fonts/f8b.fnt
new file mode 100644
index 0000000..ea6cc08
--- /dev/null
+++ b/graphlcd/fonts/f8b.fnt
Binary files differ
diff --git a/graphlcd/fonts/f8n.fnt b/graphlcd/fonts/f8n.fnt
new file mode 100644
index 0000000..fdd0362
--- /dev/null
+++ b/graphlcd/fonts/f8n.fnt
Binary files differ
diff --git a/graphlcd/fonts/sym11.fnt b/graphlcd/fonts/sym11.fnt
new file mode 100644
index 0000000..bcbc2ad
--- /dev/null
+++ b/graphlcd/fonts/sym11.fnt
Binary files differ
diff --git a/graphlcd/fonts/sym7.fnt b/graphlcd/fonts/sym7.fnt
new file mode 100644
index 0000000..a18904e
--- /dev/null
+++ b/graphlcd/fonts/sym7.fnt
Binary files differ
diff --git a/graphlcd/fonts/verdana-018.fnt b/graphlcd/fonts/verdana-018.fnt
new file mode 100644
index 0000000..2dd06b8
--- /dev/null
+++ b/graphlcd/fonts/verdana-018.fnt
Binary files differ
diff --git a/graphlcd/fonts/verdanab-009.fnt b/graphlcd/fonts/verdanab-009.fnt
new file mode 100644
index 0000000..b7b011d
--- /dev/null
+++ b/graphlcd/fonts/verdanab-009.fnt
Binary files differ
diff --git a/graphlcd/fonts/verdanab-013.fnt b/graphlcd/fonts/verdanab-013.fnt
new file mode 100644
index 0000000..3d82b98
--- /dev/null
+++ b/graphlcd/fonts/verdanab-013.fnt
Binary files differ
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
new file mode 100644
index 0000000..ddb538f
--- /dev/null
+++ b/graphlcd/logos/1-2-3 TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/123SAT_l.glcd b/graphlcd/logos/123SAT_l.glcd
new file mode 100644
index 0000000..84ed40f
--- /dev/null
+++ b/graphlcd/logos/123SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/13TH STREET_l.glcd b/graphlcd/logos/13TH STREET_l.glcd
new file mode 100644
index 0000000..6c1186e
--- /dev/null
+++ b/graphlcd/logos/13TH STREET_l.glcd
Binary files differ
diff --git a/graphlcd/logos/13TH STREET_m.glcd b/graphlcd/logos/13TH STREET_m.glcd
new file mode 100644
index 0000000..99967b7
--- /dev/null
+++ b/graphlcd/logos/13TH STREET_m.glcd
Binary files differ
diff --git a/graphlcd/logos/2M MAROC_m.glcd b/graphlcd/logos/2M MAROC_m.glcd
new file mode 100644
index 0000000..07b58c7
--- /dev/null
+++ b/graphlcd/logos/2M MAROC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/3NET_l.glcd b/graphlcd/logos/3NET_l.glcd
new file mode 100644
index 0000000..373524f
--- /dev/null
+++ b/graphlcd/logos/3NET_l.glcd
Binary files differ
diff --git a/graphlcd/logos/3NET_m.glcd b/graphlcd/logos/3NET_m.glcd
new file mode 100644
index 0000000..c3c3d15
--- /dev/null
+++ b/graphlcd/logos/3NET_m.glcd
Binary files differ
diff --git a/graphlcd/logos/3SAT_l.glcd b/graphlcd/logos/3SAT_l.glcd
new file mode 100644
index 0000000..2e6a090
--- /dev/null
+++ b/graphlcd/logos/3SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/3SAT_m.glcd b/graphlcd/logos/3SAT_m.glcd
new file mode 100644
index 0000000..0e36114
--- /dev/null
+++ b/graphlcd/logos/3SAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/40 TV_m.glcd b/graphlcd/logos/40 TV_m.glcd
new file mode 100644
index 0000000..d5b2b32
--- /dev/null
+++ b/graphlcd/logos/40 TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/AB MOTEURS_l.glcd b/graphlcd/logos/AB MOTEURS_l.glcd
new file mode 100644
index 0000000..30cd306
--- /dev/null
+++ b/graphlcd/logos/AB MOTEURS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/AB MOTEURS_m.glcd b/graphlcd/logos/AB MOTEURS_m.glcd
new file mode 100644
index 0000000..295a143
--- /dev/null
+++ b/graphlcd/logos/AB MOTEURS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/AB1_l.glcd b/graphlcd/logos/AB1_l.glcd
new file mode 100644
index 0000000..5512b78
--- /dev/null
+++ b/graphlcd/logos/AB1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/AB1_m.glcd b/graphlcd/logos/AB1_m.glcd
new file mode 100644
index 0000000..8dbea74
--- /dev/null
+++ b/graphlcd/logos/AB1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ACTION_m.glcd b/graphlcd/logos/ACTION_m.glcd
new file mode 100644
index 0000000..202f153
--- /dev/null
+++ b/graphlcd/logos/ACTION_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ADO FM_l.glcd b/graphlcd/logos/ADO FM_l.glcd
new file mode 100644
index 0000000..de4b32c
--- /dev/null
+++ b/graphlcd/logos/ADO FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ADO FM_m.glcd b/graphlcd/logos/ADO FM_m.glcd
new file mode 100644
index 0000000..8c0b06c
--- /dev/null
+++ b/graphlcd/logos/ADO FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/AL JAZEERA_l.glcd b/graphlcd/logos/AL JAZEERA_l.glcd
new file mode 100644
index 0000000..76ba7c8
--- /dev/null
+++ b/graphlcd/logos/AL JAZEERA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/AL JAZEERA_m.glcd b/graphlcd/logos/AL JAZEERA_m.glcd
new file mode 100644
index 0000000..54132b6
--- /dev/null
+++ b/graphlcd/logos/AL JAZEERA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ALGERIE_l.glcd b/graphlcd/logos/ALGERIE_l.glcd
new file mode 100644
index 0000000..941578e
--- /dev/null
+++ b/graphlcd/logos/ALGERIE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ALGERIE_m.glcd b/graphlcd/logos/ALGERIE_m.glcd
new file mode 100644
index 0000000..387c98f
--- /dev/null
+++ b/graphlcd/logos/ALGERIE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ALOUETTE_l.glcd b/graphlcd/logos/ALOUETTE_l.glcd
new file mode 100644
index 0000000..03f5cc4
--- /dev/null
+++ b/graphlcd/logos/ALOUETTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ALOUETTE_m.glcd b/graphlcd/logos/ALOUETTE_m.glcd
new file mode 100644
index 0000000..e1b8c38
--- /dev/null
+++ b/graphlcd/logos/ALOUETTE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIMAL PLANET_l.glcd b/graphlcd/logos/ANIMAL PLANET_l.glcd
new file mode 100644
index 0000000..bf7bf4b
--- /dev/null
+++ b/graphlcd/logos/ANIMAL PLANET_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIMAL PLANET_m.glcd b/graphlcd/logos/ANIMAL PLANET_m.glcd
new file mode 100644
index 0000000..7c5cf8f
--- /dev/null
+++ b/graphlcd/logos/ANIMAL PLANET_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIMAUX_l.glcd b/graphlcd/logos/ANIMAUX_l.glcd
new file mode 100644
index 0000000..da5b6a5
--- /dev/null
+++ b/graphlcd/logos/ANIMAUX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANTENNE BAYERN_l.glcd b/graphlcd/logos/ANTENNE BAYERN_l.glcd
new file mode 100644
index 0000000..b38bfaf
--- /dev/null
+++ b/graphlcd/logos/ANTENNE BAYERN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANTENNE BAYERN_m.glcd b/graphlcd/logos/ANTENNE BAYERN_m.glcd
new file mode 100644
index 0000000..2bca2b4
--- /dev/null
+++ b/graphlcd/logos/ANTENNE BAYERN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANTENNE BAYERN_v2_m.glcd b/graphlcd/logos/ANTENNE BAYERN_v2_m.glcd
new file mode 100644
index 0000000..9ca0433
--- /dev/null
+++ b/graphlcd/logos/ANTENNE BAYERN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ARTE_l.glcd b/graphlcd/logos/ARTE_l.glcd
new file mode 100644
index 0000000..c2f575e
--- /dev/null
+++ b/graphlcd/logos/ARTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ARTE_m.glcd b/graphlcd/logos/ARTE_m.glcd
new file mode 100644
index 0000000..ca150b1
--- /dev/null
+++ b/graphlcd/logos/ARTE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ATVPLUS_l.glcd b/graphlcd/logos/ATVPLUS_l.glcd
new file mode 100644
index 0000000..6751fc1
--- /dev/null
+++ b/graphlcd/logos/ATVPLUS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ATVPLUS_m.glcd b/graphlcd/logos/ATVPLUS_m.glcd
new file mode 100644
index 0000000..a5bc829
--- /dev/null
+++ b/graphlcd/logos/ATVPLUS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/AXN_l.glcd b/graphlcd/logos/AXN_l.glcd
new file mode 100644
index 0000000..8eb1880
--- /dev/null
+++ b/graphlcd/logos/AXN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/AXN_m.glcd b/graphlcd/logos/AXN_m.glcd
new file mode 100644
index 0000000..ddfd81a
--- /dev/null
+++ b/graphlcd/logos/AXN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/B5 AKTUELL_l.glcd b/graphlcd/logos/B5 AKTUELL_l.glcd
new file mode 100644
index 0000000..95830b7
--- /dev/null
+++ b/graphlcd/logos/B5 AKTUELL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/B5 AKTUELL_m.glcd b/graphlcd/logos/B5 AKTUELL_m.glcd
new file mode 100644
index 0000000..6c8a481
--- /dev/null
+++ b/graphlcd/logos/B5 AKTUELL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/B5 AKTUELL_v2_m.glcd b/graphlcd/logos/B5 AKTUELL_v2_m.glcd
new file mode 100644
index 0000000..554903a
--- /dev/null
+++ b/graphlcd/logos/B5 AKTUELL_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAHN TV_l.glcd b/graphlcd/logos/BAHN TV_l.glcd
new file mode 100644
index 0000000..bf92d26
--- /dev/null
+++ b/graphlcd/logos/BAHN TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAHN TV_m.glcd b/graphlcd/logos/BAHN TV_m.glcd
new file mode 100644
index 0000000..cef8da8
--- /dev/null
+++ b/graphlcd/logos/BAHN TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAHN TV_v2_m.glcd b/graphlcd/logos/BAHN TV_v2_m.glcd
new file mode 100644
index 0000000..fea2765
--- /dev/null
+++ b/graphlcd/logos/BAHN TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERISCHES FERNSEHEN_l.glcd b/graphlcd/logos/BAYERISCHES FERNSEHEN_l.glcd
new file mode 100644
index 0000000..c0b93e6
--- /dev/null
+++ b/graphlcd/logos/BAYERISCHES FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERISCHES FERNSEHEN_m.glcd b/graphlcd/logos/BAYERISCHES FERNSEHEN_m.glcd
new file mode 100644
index 0000000..a224e95
--- /dev/null
+++ b/graphlcd/logos/BAYERISCHES FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_l.glcd b/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_l.glcd
new file mode 100644
index 0000000..ad7d919
--- /dev/null
+++ b/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_m.glcd b/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_m.glcd
new file mode 100644
index 0000000..9b6b4f2
--- /dev/null
+++ b/graphlcd/logos/BAYERISCHES FERNSEHEN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN1_l.glcd b/graphlcd/logos/BAYERN1_l.glcd
new file mode 100644
index 0000000..e308876
--- /dev/null
+++ b/graphlcd/logos/BAYERN1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN1_m.glcd b/graphlcd/logos/BAYERN1_m.glcd
new file mode 100644
index 0000000..e3bf771
--- /dev/null
+++ b/graphlcd/logos/BAYERN1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN4 KLASSIK_l.glcd b/graphlcd/logos/BAYERN4 KLASSIK_l.glcd
new file mode 100644
index 0000000..72670c2
--- /dev/null
+++ b/graphlcd/logos/BAYERN4 KLASSIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN4 KLASSIK_m.glcd b/graphlcd/logos/BAYERN4 KLASSIK_m.glcd
new file mode 100644
index 0000000..d6d720d
--- /dev/null
+++ b/graphlcd/logos/BAYERN4 KLASSIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC PRIME_l.glcd b/graphlcd/logos/BBC PRIME_l.glcd
new file mode 100644
index 0000000..c53afba
--- /dev/null
+++ b/graphlcd/logos/BBC PRIME_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC PRIME_m.glcd b/graphlcd/logos/BBC PRIME_m.glcd
new file mode 100644
index 0000000..0ea7b4d
--- /dev/null
+++ b/graphlcd/logos/BBC PRIME_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC WORLD_l.glcd b/graphlcd/logos/BBC WORLD_l.glcd
new file mode 100644
index 0000000..8c4c191
--- /dev/null
+++ b/graphlcd/logos/BBC WORLD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC WORLD_m.glcd b/graphlcd/logos/BBC WORLD_m.glcd
new file mode 100644
index 0000000..71b132f
--- /dev/null
+++ b/graphlcd/logos/BBC WORLD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC WORLD_v2_l.glcd b/graphlcd/logos/BBC WORLD_v2_l.glcd
new file mode 100644
index 0000000..ccf90a2
--- /dev/null
+++ b/graphlcd/logos/BBC WORLD_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC WORLD_v2_m.glcd b/graphlcd/logos/BBC WORLD_v2_m.glcd
new file mode 100644
index 0000000..7c52215
--- /dev/null
+++ b/graphlcd/logos/BBC WORLD_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BEATE-UHSE.TV_l.glcd b/graphlcd/logos/BEATE-UHSE.TV_l.glcd
new file mode 100644
index 0000000..0040c04
--- /dev/null
+++ b/graphlcd/logos/BEATE-UHSE.TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BEATE-UHSE.TV_m.glcd b/graphlcd/logos/BEATE-UHSE.TV_m.glcd
new file mode 100644
index 0000000..40a8589
--- /dev/null
+++ b/graphlcd/logos/BEATE-UHSE.TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BEATE-UHSE.TV_v2_l.glcd b/graphlcd/logos/BEATE-UHSE.TV_v2_l.glcd
new file mode 100644
index 0000000..7981193
--- /dev/null
+++ b/graphlcd/logos/BEATE-UHSE.TV_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BEUR TV_l.glcd b/graphlcd/logos/BEUR TV_l.glcd
new file mode 100644
index 0000000..314a4b0
--- /dev/null
+++ b/graphlcd/logos/BEUR TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BEUR TV_m.glcd b/graphlcd/logos/BEUR TV_m.glcd
new file mode 100644
index 0000000..3caa32d
--- /dev/null
+++ b/graphlcd/logos/BEUR TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BEUR TV_v2_m.glcd b/graphlcd/logos/BEUR TV_v2_m.glcd
new file mode 100644
index 0000000..07f548e
--- /dev/null
+++ b/graphlcd/logos/BEUR TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BIBEL TV_l.glcd b/graphlcd/logos/BIBEL TV_l.glcd
new file mode 100644
index 0000000..3b62042
--- /dev/null
+++ b/graphlcd/logos/BIBEL TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BIBEL TV_m.glcd b/graphlcd/logos/BIBEL TV_m.glcd
new file mode 100644
index 0000000..30967af
--- /dev/null
+++ b/graphlcd/logos/BIBEL TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BIBEL TV_v2_m.glcd b/graphlcd/logos/BIBEL TV_v2_m.glcd
new file mode 100644
index 0000000..c9d9045
--- /dev/null
+++ b/graphlcd/logos/BIBEL TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BLOOMBERG TV_l.glcd b/graphlcd/logos/BLOOMBERG TV_l.glcd
new file mode 100644
index 0000000..f693de2
--- /dev/null
+++ b/graphlcd/logos/BLOOMBERG TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BLOOMBERG TV_m.glcd b/graphlcd/logos/BLOOMBERG TV_m.glcd
new file mode 100644
index 0000000..22dc275
--- /dev/null
+++ b/graphlcd/logos/BLOOMBERG TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BR-ALPHA_l.glcd b/graphlcd/logos/BR-ALPHA_l.glcd
new file mode 100644
index 0000000..89f455a
--- /dev/null
+++ b/graphlcd/logos/BR-ALPHA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BR-ALPHA_m.glcd b/graphlcd/logos/BR-ALPHA_m.glcd
new file mode 100644
index 0000000..9b48f64
--- /dev/null
+++ b/graphlcd/logos/BR-ALPHA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BR-ALPHA_v2_l.glcd b/graphlcd/logos/BR-ALPHA_v2_l.glcd
new file mode 100644
index 0000000..bcb323b
--- /dev/null
+++ b/graphlcd/logos/BR-ALPHA_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BR-ALPHA_v2_m.glcd b/graphlcd/logos/BR-ALPHA_v2_m.glcd
new file mode 100644
index 0000000..9c1fa3d
--- /dev/null
+++ b/graphlcd/logos/BR-ALPHA_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BR-ALPHA_v3_m.glcd b/graphlcd/logos/BR-ALPHA_v3_m.glcd
new file mode 100644
index 0000000..6de0d94
--- /dev/null
+++ b/graphlcd/logos/BR-ALPHA_v3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV4_l.glcd b/graphlcd/logos/BTV4_l.glcd
new file mode 100644
index 0000000..e82ca00
--- /dev/null
+++ b/graphlcd/logos/BTV4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV4_m.glcd b/graphlcd/logos/BTV4_m.glcd
new file mode 100644
index 0000000..4d5e9da
--- /dev/null
+++ b/graphlcd/logos/BTV4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV4_v2_l.glcd b/graphlcd/logos/BTV4_v2_l.glcd
new file mode 100644
index 0000000..c059759
--- /dev/null
+++ b/graphlcd/logos/BTV4_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV_l.glcd b/graphlcd/logos/BTV_l.glcd
new file mode 100644
index 0000000..ffdf278
--- /dev/null
+++ b/graphlcd/logos/BTV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV_m.glcd b/graphlcd/logos/BTV_m.glcd
new file mode 100644
index 0000000..f270770
--- /dev/null
+++ b/graphlcd/logos/BTV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BVN_l.glcd b/graphlcd/logos/BVN_l.glcd
new file mode 100644
index 0000000..c8df29a
--- /dev/null
+++ b/graphlcd/logos/BVN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BVN_m.glcd b/graphlcd/logos/BVN_m.glcd
new file mode 100644
index 0000000..132502b
--- /dev/null
+++ b/graphlcd/logos/BVN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BVN_v2_m.glcd b/graphlcd/logos/BVN_v2_m.glcd
new file mode 100644
index 0000000..014673e
--- /dev/null
+++ b/graphlcd/logos/BVN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CADENA DIAL_l.glcd b/graphlcd/logos/CADENA DIAL_l.glcd
new file mode 100644
index 0000000..7cf6255
--- /dev/null
+++ b/graphlcd/logos/CADENA DIAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CADENA DIAL_m.glcd b/graphlcd/logos/CADENA DIAL_m.glcd
new file mode 100644
index 0000000..b2ec34a
--- /dev/null
+++ b/graphlcd/logos/CADENA DIAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL 24 HORAS_l.glcd b/graphlcd/logos/CANAL 24 HORAS_l.glcd
new file mode 100644
index 0000000..d725461
--- /dev/null
+++ b/graphlcd/logos/CANAL 24 HORAS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL 24 HORAS_m.glcd b/graphlcd/logos/CANAL 24 HORAS_m.glcd
new file mode 100644
index 0000000..a71b55e
--- /dev/null
+++ b/graphlcd/logos/CANAL 24 HORAS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL CANARIAS_l.glcd b/graphlcd/logos/CANAL CANARIAS_l.glcd
new file mode 100644
index 0000000..2c0f53d
--- /dev/null
+++ b/graphlcd/logos/CANAL CANARIAS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL CANARIAS_m.glcd b/graphlcd/logos/CANAL CANARIAS_m.glcd
new file mode 100644
index 0000000..5870208
--- /dev/null
+++ b/graphlcd/logos/CANAL CANARIAS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL CANARIAS_v2_m.glcd b/graphlcd/logos/CANAL CANARIAS_v2_m.glcd
new file mode 100644
index 0000000..f6b64c8
--- /dev/null
+++ b/graphlcd/logos/CANAL CANARIAS_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL CLUB_l.glcd b/graphlcd/logos/CANAL CLUB_l.glcd
new file mode 100644
index 0000000..069af7c
--- /dev/null
+++ b/graphlcd/logos/CANAL CLUB_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL CLUB_m.glcd b/graphlcd/logos/CANAL CLUB_m.glcd
new file mode 100644
index 0000000..ba74083
--- /dev/null
+++ b/graphlcd/logos/CANAL CLUB_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL CLUB_v2_m.glcd b/graphlcd/logos/CANAL CLUB_v2_m.glcd
new file mode 100644
index 0000000..8bafd90
--- /dev/null
+++ b/graphlcd/logos/CANAL CLUB_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL+ ...30_m.glcd b/graphlcd/logos/CANAL+ ...30_m.glcd
new file mode 100644
index 0000000..eeb7d70
--- /dev/null
+++ b/graphlcd/logos/CANAL+ ...30_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL+_m.glcd b/graphlcd/logos/CANAL+_m.glcd
new file mode 100644
index 0000000..8e87caf
--- /dev/null
+++ b/graphlcd/logos/CANAL+_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CARTOON NETWORK_l.glcd b/graphlcd/logos/CARTOON NETWORK_l.glcd
new file mode 100644
index 0000000..1d315e0
--- /dev/null
+++ b/graphlcd/logos/CARTOON NETWORK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CARTOON NETWORK_m.glcd b/graphlcd/logos/CARTOON NETWORK_m.glcd
new file mode 100644
index 0000000..c5b7b30
--- /dev/null
+++ b/graphlcd/logos/CARTOON NETWORK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CFN RFC_l.glcd b/graphlcd/logos/CFN RFC_l.glcd
new file mode 100644
index 0000000..87d510e
--- /dev/null
+++ b/graphlcd/logos/CFN RFC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CFN RFC_m.glcd b/graphlcd/logos/CFN RFC_m.glcd
new file mode 100644
index 0000000..94ed328
--- /dev/null
+++ b/graphlcd/logos/CFN RFC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CHERIE FM_l.glcd b/graphlcd/logos/CHERIE FM_l.glcd
new file mode 100644
index 0000000..d227f27
--- /dev/null
+++ b/graphlcd/logos/CHERIE FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CHERIE FM_m.glcd b/graphlcd/logos/CHERIE FM_m.glcd
new file mode 100644
index 0000000..fc14a17
--- /dev/null
+++ b/graphlcd/logos/CHERIE FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CHRONOS_l.glcd b/graphlcd/logos/CHRONOS_l.glcd
new file mode 100644
index 0000000..67d8418
--- /dev/null
+++ b/graphlcd/logos/CHRONOS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CHRONOS_m.glcd b/graphlcd/logos/CHRONOS_m.glcd
new file mode 100644
index 0000000..ec0fe09
--- /dev/null
+++ b/graphlcd/logos/CHRONOS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CINE BOX_m.glcd b/graphlcd/logos/CINE BOX_m.glcd
new file mode 100644
index 0000000..442f234
--- /dev/null
+++ b/graphlcd/logos/CINE BOX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CLASSICA_l.glcd b/graphlcd/logos/CLASSICA_l.glcd
new file mode 100644
index 0000000..f241e7b
--- /dev/null
+++ b/graphlcd/logos/CLASSICA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CLASSICA_m.glcd b/graphlcd/logos/CLASSICA_m.glcd
new file mode 100644
index 0000000..e2f174f
--- /dev/null
+++ b/graphlcd/logos/CLASSICA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CLUB TELEACHAT_l.glcd b/graphlcd/logos/CLUB TELEACHAT_l.glcd
new file mode 100644
index 0000000..50a260d
--- /dev/null
+++ b/graphlcd/logos/CLUB TELEACHAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CLUB TELEACHAT_m.glcd b/graphlcd/logos/CLUB TELEACHAT_m.glcd
new file mode 100644
index 0000000..a1ec468
--- /dev/null
+++ b/graphlcd/logos/CLUB TELEACHAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CLUB TELEACHAT_v2_m.glcd b/graphlcd/logos/CLUB TELEACHAT_v2_m.glcd
new file mode 100644
index 0000000..e129033
--- /dev/null
+++ b/graphlcd/logos/CLUB TELEACHAT_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CNBC EUROPE_l.glcd b/graphlcd/logos/CNBC EUROPE_l.glcd
new file mode 100644
index 0000000..f9ec19f
--- /dev/null
+++ b/graphlcd/logos/CNBC EUROPE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CNBC EUROPE_m.glcd b/graphlcd/logos/CNBC EUROPE_m.glcd
new file mode 100644
index 0000000..3245855
--- /dev/null
+++ b/graphlcd/logos/CNBC EUROPE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CNBC_l.glcd b/graphlcd/logos/CNBC_l.glcd
new file mode 100644
index 0000000..14a2d09
--- /dev/null
+++ b/graphlcd/logos/CNBC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CNBC_m.glcd b/graphlcd/logos/CNBC_m.glcd
new file mode 100644
index 0000000..bf88ac7
--- /dev/null
+++ b/graphlcd/logos/CNBC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CNN INT_l.glcd b/graphlcd/logos/CNN INT_l.glcd
new file mode 100644
index 0000000..9c9dde6
--- /dev/null
+++ b/graphlcd/logos/CNN INT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CNN INT_m.glcd b/graphlcd/logos/CNN INT_m.glcd
new file mode 100644
index 0000000..823483a
--- /dev/null
+++ b/graphlcd/logos/CNN INT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CNN+_m.glcd b/graphlcd/logos/CNN+_m.glcd
new file mode 100644
index 0000000..fe93af9
--- /dev/null
+++ b/graphlcd/logos/CNN+_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CONTACT FM_l.glcd b/graphlcd/logos/CONTACT FM_l.glcd
new file mode 100644
index 0000000..39edf44
--- /dev/null
+++ b/graphlcd/logos/CONTACT FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CONTACT FM_m.glcd b/graphlcd/logos/CONTACT FM_m.glcd
new file mode 100644
index 0000000..e67d16a
--- /dev/null
+++ b/graphlcd/logos/CONTACT FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS ERSTE_l.glcd b/graphlcd/logos/DAS ERSTE_l.glcd
new file mode 100644
index 0000000..dd38c2f
--- /dev/null
+++ b/graphlcd/logos/DAS ERSTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS ERSTE_m.glcd b/graphlcd/logos/DAS ERSTE_m.glcd
new file mode 100644
index 0000000..95b8549
--- /dev/null
+++ b/graphlcd/logos/DAS ERSTE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS ERSTE_v2_l.glcd b/graphlcd/logos/DAS ERSTE_v2_l.glcd
new file mode 100644
index 0000000..3fb4ed8
--- /dev/null
+++ b/graphlcd/logos/DAS ERSTE_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS VIERTE_l.glcd b/graphlcd/logos/DAS VIERTE_l.glcd
new file mode 100644
index 0000000..250b7ac
--- /dev/null
+++ b/graphlcd/logos/DAS VIERTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDFUNK KOELN_l.glcd b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_l.glcd
new file mode 100644
index 0000000..068eb5d
--- /dev/null
+++ b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDFUNK KOELN_m.glcd b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_m.glcd
new file mode 100644
index 0000000..cfcde86
--- /dev/null
+++ b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDFUNK KOELN_v2_m.glcd b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_v2_m.glcd
new file mode 100644
index 0000000..7907ad2
--- /dev/null
+++ b/graphlcd/logos/DEUTSCHLANDFUNK KOELN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_l.glcd b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_l.glcd
new file mode 100644
index 0000000..2a8e007
--- /dev/null
+++ b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_m.glcd b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_m.glcd
new file mode 100644
index 0000000..bd35774
--- /dev/null
+++ b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_v2_m.glcd b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_v2_m.glcd
new file mode 100644
index 0000000..19947a2
--- /dev/null
+++ b/graphlcd/logos/DEUTSCHLANDRADIO BERLIN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DISCOVERY CHANNEL_l.glcd b/graphlcd/logos/DISCOVERY CHANNEL_l.glcd
new file mode 100644
index 0000000..1871981
--- /dev/null
+++ b/graphlcd/logos/DISCOVERY CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISCOVERY CHANNEL_m.glcd b/graphlcd/logos/DISCOVERY CHANNEL_m.glcd
new file mode 100644
index 0000000..fa9b349
--- /dev/null
+++ b/graphlcd/logos/DISCOVERY CHANNEL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DISCOVERY CHANNEL_v2_l.glcd b/graphlcd/logos/DISCOVERY CHANNEL_v2_l.glcd
new file mode 100644
index 0000000..cb9518d
--- /dev/null
+++ b/graphlcd/logos/DISCOVERY CHANNEL_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY CHANNEL_l.glcd b/graphlcd/logos/DISNEY CHANNEL_l.glcd
new file mode 100644
index 0000000..ed63bcf
--- /dev/null
+++ b/graphlcd/logos/DISNEY CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY CHANNEL_m.glcd b/graphlcd/logos/DISNEY CHANNEL_m.glcd
new file mode 100644
index 0000000..1e8267e
--- /dev/null
+++ b/graphlcd/logos/DISNEY CHANNEL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY CHANNEL_v2_l.glcd b/graphlcd/logos/DISNEY CHANNEL_v2_l.glcd
new file mode 100644
index 0000000..cbc7820
--- /dev/null
+++ b/graphlcd/logos/DISNEY CHANNEL_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY PLAYHOUSE_l.glcd b/graphlcd/logos/DISNEY PLAYHOUSE_l.glcd
new file mode 100644
index 0000000..778ad44
--- /dev/null
+++ b/graphlcd/logos/DISNEY PLAYHOUSE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY TOON +1_l.glcd b/graphlcd/logos/DISNEY TOON +1_l.glcd
new file mode 100644
index 0000000..5b1c984
--- /dev/null
+++ b/graphlcd/logos/DISNEY TOON +1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY TOON_l.glcd b/graphlcd/logos/DISNEY TOON_l.glcd
new file mode 100644
index 0000000..910501c
--- /dev/null
+++ b/graphlcd/logos/DISNEY TOON_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DSF_l.glcd b/graphlcd/logos/DSF_l.glcd
new file mode 100644
index 0000000..3848a34
--- /dev/null
+++ b/graphlcd/logos/DSF_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DSF_m.glcd b/graphlcd/logos/DSF_m.glcd
new file mode 100644
index 0000000..4a2c1e8
--- /dev/null
+++ b/graphlcd/logos/DSF_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DW-TV_l.glcd b/graphlcd/logos/DW-TV_l.glcd
new file mode 100644
index 0000000..5d2c3ef
--- /dev/null
+++ b/graphlcd/logos/DW-TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DW-TV_m.glcd b/graphlcd/logos/DW-TV_m.glcd
new file mode 100644
index 0000000..6eb1153
--- /dev/null
+++ b/graphlcd/logos/DW-TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/E ENTERTAINMENT_l.glcd b/graphlcd/logos/E ENTERTAINMENT_l.glcd
new file mode 100644
index 0000000..d7cb2ff
--- /dev/null
+++ b/graphlcd/logos/E ENTERTAINMENT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS EXTRA_l.glcd b/graphlcd/logos/EINS EXTRA_l.glcd
new file mode 100644
index 0000000..5d27520
--- /dev/null
+++ b/graphlcd/logos/EINS EXTRA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS EXTRA_m.glcd b/graphlcd/logos/EINS EXTRA_m.glcd
new file mode 100644
index 0000000..c56e446
--- /dev/null
+++ b/graphlcd/logos/EINS EXTRA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS EXTRA_v2_l.glcd b/graphlcd/logos/EINS EXTRA_v2_l.glcd
new file mode 100644
index 0000000..0c6c5f5
--- /dev/null
+++ b/graphlcd/logos/EINS EXTRA_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS EXTRA_v3_l.glcd b/graphlcd/logos/EINS EXTRA_v3_l.glcd
new file mode 100644
index 0000000..8d28095
--- /dev/null
+++ b/graphlcd/logos/EINS EXTRA_v3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS FESTIVAL_l.glcd b/graphlcd/logos/EINS FESTIVAL_l.glcd
new file mode 100644
index 0000000..57377a8
--- /dev/null
+++ b/graphlcd/logos/EINS FESTIVAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS FESTIVAL_m.glcd b/graphlcd/logos/EINS FESTIVAL_m.glcd
new file mode 100644
index 0000000..ccec283
--- /dev/null
+++ b/graphlcd/logos/EINS FESTIVAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS FESTIVAL_v2_l.glcd b/graphlcd/logos/EINS FESTIVAL_v2_l.glcd
new file mode 100644
index 0000000..c9b7fd4
--- /dev/null
+++ b/graphlcd/logos/EINS FESTIVAL_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS MUXX_l.glcd b/graphlcd/logos/EINS MUXX_l.glcd
new file mode 100644
index 0000000..5ff62b5
--- /dev/null
+++ b/graphlcd/logos/EINS MUXX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS MUXX_m.glcd b/graphlcd/logos/EINS MUXX_m.glcd
new file mode 100644
index 0000000..8e4beca
--- /dev/null
+++ b/graphlcd/logos/EINS MUXX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS MUXX_v2_l.glcd b/graphlcd/logos/EINS MUXX_v2_l.glcd
new file mode 100644
index 0000000..4669887
--- /dev/null
+++ b/graphlcd/logos/EINS MUXX_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ERF RADIO_l.glcd b/graphlcd/logos/ERF RADIO_l.glcd
new file mode 100644
index 0000000..ca71505
--- /dev/null
+++ b/graphlcd/logos/ERF RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ERF RADIO_m.glcd b/graphlcd/logos/ERF RADIO_m.glcd
new file mode 100644
index 0000000..5b76db4
--- /dev/null
+++ b/graphlcd/logos/ERF RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ESC1-EGYPT_l.glcd b/graphlcd/logos/ESC1-EGYPT_l.glcd
new file mode 100644
index 0000000..2a3a7c9
--- /dev/null
+++ b/graphlcd/logos/ESC1-EGYPT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ESPN CLASSIC SPORT_l.glcd b/graphlcd/logos/ESPN CLASSIC SPORT_l.glcd
new file mode 100644
index 0000000..6c44801
--- /dev/null
+++ b/graphlcd/logos/ESPN CLASSIC SPORT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ETB SAT_l.glcd b/graphlcd/logos/ETB SAT_l.glcd
new file mode 100644
index 0000000..e100d18
--- /dev/null
+++ b/graphlcd/logos/ETB SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ETB SAT_m.glcd b/graphlcd/logos/ETB SAT_m.glcd
new file mode 100644
index 0000000..5fc3657
--- /dev/null
+++ b/graphlcd/logos/ETB SAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EURONEWS_l.glcd b/graphlcd/logos/EURONEWS_l.glcd
new file mode 100644
index 0000000..ef51c05
--- /dev/null
+++ b/graphlcd/logos/EURONEWS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EURONEWS_m.glcd b/graphlcd/logos/EURONEWS_m.glcd
new file mode 100644
index 0000000..85367d1
--- /dev/null
+++ b/graphlcd/logos/EURONEWS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EUROPE 2_l.glcd b/graphlcd/logos/EUROPE 2_l.glcd
new file mode 100644
index 0000000..3020976
--- /dev/null
+++ b/graphlcd/logos/EUROPE 2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EUROPE 2_m.glcd b/graphlcd/logos/EUROPE 2_m.glcd
new file mode 100644
index 0000000..688bea3
--- /dev/null
+++ b/graphlcd/logos/EUROPE 2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EUROSPORT_l.glcd b/graphlcd/logos/EUROSPORT_l.glcd
new file mode 100644
index 0000000..3a929f0
--- /dev/null
+++ b/graphlcd/logos/EUROSPORT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EUROSPORT_m.glcd b/graphlcd/logos/EUROSPORT_m.glcd
new file mode 100644
index 0000000..c41f51d
--- /dev/null
+++ b/graphlcd/logos/EUROSPORT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EXTRA 1_l.glcd b/graphlcd/logos/EXTRA 1_l.glcd
new file mode 100644
index 0000000..694c965
--- /dev/null
+++ b/graphlcd/logos/EXTRA 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EXTREME SPORTS_l.glcd b/graphlcd/logos/EXTREME SPORTS_l.glcd
new file mode 100644
index 0000000..4d43a09
--- /dev/null
+++ b/graphlcd/logos/EXTREME SPORTS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FAB_l.glcd b/graphlcd/logos/FAB_l.glcd
new file mode 100644
index 0000000..a048767
--- /dev/null
+++ b/graphlcd/logos/FAB_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FAB_m.glcd b/graphlcd/logos/FAB_m.glcd
new file mode 100644
index 0000000..3d290ed
--- /dev/null
+++ b/graphlcd/logos/FAB_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FAB_v2_m.glcd b/graphlcd/logos/FAB_v2_m.glcd
new file mode 100644
index 0000000..f964628
--- /dev/null
+++ b/graphlcd/logos/FAB_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FASHION TV_l.glcd b/graphlcd/logos/FASHION TV_l.glcd
new file mode 100644
index 0000000..bc8e4ec
--- /dev/null
+++ b/graphlcd/logos/FASHION TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FASHION TV_m.glcd b/graphlcd/logos/FASHION TV_m.glcd
new file mode 100644
index 0000000..897fd5f
--- /dev/null
+++ b/graphlcd/logos/FASHION TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FASHION TV_v2_m.glcd b/graphlcd/logos/FASHION TV_v2_m.glcd
new file mode 100644
index 0000000..7c89848
--- /dev/null
+++ b/graphlcd/logos/FASHION TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FESTIVAL 1_l.glcd b/graphlcd/logos/FESTIVAL 1_l.glcd
new file mode 100644
index 0000000..d3e1b46
--- /dev/null
+++ b/graphlcd/logos/FESTIVAL 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FESTIVAL_m.glcd b/graphlcd/logos/FESTIVAL_m.glcd
new file mode 100644
index 0000000..25fcea3
--- /dev/null
+++ b/graphlcd/logos/FESTIVAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FM4_l.glcd b/graphlcd/logos/FM4_l.glcd
new file mode 100644
index 0000000..af43c43
--- /dev/null
+++ b/graphlcd/logos/FM4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FM4_m.glcd b/graphlcd/logos/FM4_m.glcd
new file mode 100644
index 0000000..80b9664
--- /dev/null
+++ b/graphlcd/logos/FM4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX KIDS_l.glcd b/graphlcd/logos/FOX KIDS_l.glcd
new file mode 100644
index 0000000..faac38a
--- /dev/null
+++ b/graphlcd/logos/FOX KIDS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX KIDS_m.glcd b/graphlcd/logos/FOX KIDS_m.glcd
new file mode 100644
index 0000000..6a681a1
--- /dev/null
+++ b/graphlcd/logos/FOX KIDS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX KIDS_v2_l.glcd b/graphlcd/logos/FOX KIDS_v2_l.glcd
new file mode 100644
index 0000000..008f6c6
--- /dev/null
+++ b/graphlcd/logos/FOX KIDS_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX KIDS_v2_m.glcd b/graphlcd/logos/FOX KIDS_v2_m.glcd
new file mode 100644
index 0000000..09ad0b2
--- /dev/null
+++ b/graphlcd/logos/FOX KIDS_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX NEWS_m.glcd b/graphlcd/logos/FOX NEWS_m.glcd
new file mode 100644
index 0000000..82d60f9
--- /dev/null
+++ b/graphlcd/logos/FOX NEWS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX_m.glcd b/graphlcd/logos/FOX_m.glcd
new file mode 100644
index 0000000..73b376b
--- /dev/null
+++ b/graphlcd/logos/FOX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE2_l.glcd b/graphlcd/logos/FRANCE2_l.glcd
new file mode 100644
index 0000000..a01db87
--- /dev/null
+++ b/graphlcd/logos/FRANCE2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE2_m.glcd b/graphlcd/logos/FRANCE2_m.glcd
new file mode 100644
index 0000000..8658df7
--- /dev/null
+++ b/graphlcd/logos/FRANCE2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE3_l.glcd b/graphlcd/logos/FRANCE3_l.glcd
new file mode 100644
index 0000000..fbea5ba
--- /dev/null
+++ b/graphlcd/logos/FRANCE3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE3_m.glcd b/graphlcd/logos/FRANCE3_m.glcd
new file mode 100644
index 0000000..421e4e3
--- /dev/null
+++ b/graphlcd/logos/FRANCE3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE5_l.glcd b/graphlcd/logos/FRANCE5_l.glcd
new file mode 100644
index 0000000..bc3132a
--- /dev/null
+++ b/graphlcd/logos/FRANCE5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE5_m.glcd b/graphlcd/logos/FRANCE5_m.glcd
new file mode 100644
index 0000000..03cdbd3
--- /dev/null
+++ b/graphlcd/logos/FRANCE5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANKEN SAT_l.glcd b/graphlcd/logos/FRANKEN SAT_l.glcd
new file mode 100644
index 0000000..9def4ca
--- /dev/null
+++ b/graphlcd/logos/FRANKEN SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANKEN SAT_m.glcd b/graphlcd/logos/FRANKEN SAT_m.glcd
new file mode 100644
index 0000000..4e0be7e
--- /dev/null
+++ b/graphlcd/logos/FRANKEN SAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FREE-X TV_l.glcd b/graphlcd/logos/FREE-X TV_l.glcd
new file mode 100644
index 0000000..d84a6d9
--- /dev/null
+++ b/graphlcd/logos/FREE-X TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FREE-X TV_m.glcd b/graphlcd/logos/FREE-X TV_m.glcd
new file mode 100644
index 0000000..c98bdc5
--- /dev/null
+++ b/graphlcd/logos/FREE-X TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRITZ_l.glcd b/graphlcd/logos/FRITZ_l.glcd
new file mode 100644
index 0000000..e84e499
--- /dev/null
+++ b/graphlcd/logos/FRITZ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRITZ_m.glcd b/graphlcd/logos/FRITZ_m.glcd
new file mode 100644
index 0000000..894fda0
--- /dev/null
+++ b/graphlcd/logos/FRITZ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/GAMES TV_l.glcd b/graphlcd/logos/GAMES TV_l.glcd
new file mode 100644
index 0000000..b6c862e
--- /dev/null
+++ b/graphlcd/logos/GAMES TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/GOLDSTAR TV_l.glcd b/graphlcd/logos/GOLDSTAR TV_l.glcd
new file mode 100644
index 0000000..75f6b4b
--- /dev/null
+++ b/graphlcd/logos/GOLDSTAR TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/GOLDSTAR TV_m.glcd b/graphlcd/logos/GOLDSTAR TV_m.glcd
new file mode 100644
index 0000000..82b0f94
--- /dev/null
+++ b/graphlcd/logos/GOLDSTAR TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/GOLDSTAR TV_v2_l.glcd b/graphlcd/logos/GOLDSTAR TV_v2_l.glcd
new file mode 100644
index 0000000..0bc73d4
--- /dev/null
+++ b/graphlcd/logos/GOLDSTAR TV_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/GOLDSTAR TV_v2_m.glcd b/graphlcd/logos/GOLDSTAR TV_v2_m.glcd
new file mode 100644
index 0000000..bdc8533
--- /dev/null
+++ b/graphlcd/logos/GOLDSTAR TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/GUTE LAUNE TV_l.glcd b/graphlcd/logos/GUTE LAUNE TV_l.glcd
new file mode 100644
index 0000000..afdc9d8
--- /dev/null
+++ b/graphlcd/logos/GUTE LAUNE TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HALLMARK_l.glcd b/graphlcd/logos/HALLMARK_l.glcd
new file mode 100644
index 0000000..820f67c
--- /dev/null
+++ b/graphlcd/logos/HALLMARK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HARMONY FM_l.glcd b/graphlcd/logos/HARMONY FM_l.glcd
new file mode 100644
index 0000000..c7c061e
--- /dev/null
+++ b/graphlcd/logos/HARMONY FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HARMONY FM_m.glcd b/graphlcd/logos/HARMONY FM_m.glcd
new file mode 100644
index 0000000..8829b03
--- /dev/null
+++ b/graphlcd/logos/HARMONY FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HARMONY FM_v2_m.glcd b/graphlcd/logos/HARMONY FM_v2_m.glcd
new file mode 100644
index 0000000..c32ec0f
--- /dev/null
+++ b/graphlcd/logos/HARMONY FM_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HEIMATKANAL_l.glcd b/graphlcd/logos/HEIMATKANAL_l.glcd
new file mode 100644
index 0000000..8c0161f
--- /dev/null
+++ b/graphlcd/logos/HEIMATKANAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HEIMATKANAL_m.glcd b/graphlcd/logos/HEIMATKANAL_m.glcd
new file mode 100644
index 0000000..f1224e4
--- /dev/null
+++ b/graphlcd/logos/HEIMATKANAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HEIMATKANAL_v2_l.glcd b/graphlcd/logos/HEIMATKANAL_v2_l.glcd
new file mode 100644
index 0000000..643d68a
--- /dev/null
+++ b/graphlcd/logos/HEIMATKANAL_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HESSEN FERNSEHEN_l.glcd b/graphlcd/logos/HESSEN FERNSEHEN_l.glcd
new file mode 100644
index 0000000..c2df34e
--- /dev/null
+++ b/graphlcd/logos/HESSEN FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HESSEN FERNSEHEN_m.glcd b/graphlcd/logos/HESSEN FERNSEHEN_m.glcd
new file mode 100644
index 0000000..24ed6bc
--- /dev/null
+++ b/graphlcd/logos/HESSEN FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HESSEN FERNSEHEN_v2_l.glcd b/graphlcd/logos/HESSEN FERNSEHEN_v2_l.glcd
new file mode 100644
index 0000000..afb1d56
--- /dev/null
+++ b/graphlcd/logos/HESSEN FERNSEHEN_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HISTOIRE_m.glcd b/graphlcd/logos/HISTOIRE_m.glcd
new file mode 100644
index 0000000..7343fc8
--- /dev/null
+++ b/graphlcd/logos/HISTOIRE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HISTORY CHANNEL_l.glcd b/graphlcd/logos/HISTORY CHANNEL_l.glcd
new file mode 100644
index 0000000..e175a6a
--- /dev/null
+++ b/graphlcd/logos/HISTORY CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HIT CHANNEL 1025_l.glcd b/graphlcd/logos/HIT CHANNEL 1025_l.glcd
new file mode 100644
index 0000000..278358a
--- /dev/null
+++ b/graphlcd/logos/HIT CHANNEL 1025_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HIT CHANNEL 1025_m.glcd b/graphlcd/logos/HIT CHANNEL 1025_m.glcd
new file mode 100644
index 0000000..da73db3
--- /dev/null
+++ b/graphlcd/logos/HIT CHANNEL 1025_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HITRADIO FFH_l.glcd b/graphlcd/logos/HITRADIO FFH_l.glcd
new file mode 100644
index 0000000..b5fd57e
--- /dev/null
+++ b/graphlcd/logos/HITRADIO FFH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HITRADIO FFH_m.glcd b/graphlcd/logos/HITRADIO FFH_m.glcd
new file mode 100644
index 0000000..3701543
--- /dev/null
+++ b/graphlcd/logos/HITRADIO FFH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HOERZU DIGITAL_l.glcd b/graphlcd/logos/HOERZU DIGITAL_l.glcd
new file mode 100644
index 0000000..703c47b
--- /dev/null
+++ b/graphlcd/logos/HOERZU DIGITAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HOERZU DIGITAL_m.glcd b/graphlcd/logos/HOERZU DIGITAL_m.glcd
new file mode 100644
index 0000000..fefd209
--- /dev/null
+++ b/graphlcd/logos/HOERZU DIGITAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HOLLYWOOD CINEMA_l.glcd b/graphlcd/logos/HOLLYWOOD CINEMA_l.glcd
new file mode 100644
index 0000000..c7ce748
--- /dev/null
+++ b/graphlcd/logos/HOLLYWOOD CINEMA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HOLLYWOOD CINEMA_m.glcd b/graphlcd/logos/HOLLYWOOD CINEMA_m.glcd
new file mode 100644
index 0000000..bd9f7bd
--- /dev/null
+++ b/graphlcd/logos/HOLLYWOOD CINEMA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR CHRONOS_l.glcd b/graphlcd/logos/HR CHRONOS_l.glcd
new file mode 100644
index 0000000..67d8418
--- /dev/null
+++ b/graphlcd/logos/HR CHRONOS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR KLASSIK_l.glcd b/graphlcd/logos/HR KLASSIK_l.glcd
new file mode 100644
index 0000000..8e992a9
--- /dev/null
+++ b/graphlcd/logos/HR KLASSIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR KLASSIK_m.glcd b/graphlcd/logos/HR KLASSIK_m.glcd
new file mode 100644
index 0000000..4712db5
--- /dev/null
+++ b/graphlcd/logos/HR KLASSIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR KLASSIK_v2_m.glcd b/graphlcd/logos/HR KLASSIK_v2_m.glcd
new file mode 100644
index 0000000..36e403c
--- /dev/null
+++ b/graphlcd/logos/HR KLASSIK_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR SKYLINE_l.glcd b/graphlcd/logos/HR SKYLINE_l.glcd
new file mode 100644
index 0000000..593a856
--- /dev/null
+++ b/graphlcd/logos/HR SKYLINE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR SKYLINE_m.glcd b/graphlcd/logos/HR SKYLINE_m.glcd
new file mode 100644
index 0000000..96bb038
--- /dev/null
+++ b/graphlcd/logos/HR SKYLINE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR SKYLINE_v2_m.glcd b/graphlcd/logos/HR SKYLINE_v2_m.glcd
new file mode 100644
index 0000000..1661dfc
--- /dev/null
+++ b/graphlcd/logos/HR SKYLINE_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR1_l.glcd b/graphlcd/logos/HR1_l.glcd
new file mode 100644
index 0000000..952f1b7
--- /dev/null
+++ b/graphlcd/logos/HR1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR1_m.glcd b/graphlcd/logos/HR1_m.glcd
new file mode 100644
index 0000000..6ef4da1
--- /dev/null
+++ b/graphlcd/logos/HR1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR2_l.glcd b/graphlcd/logos/HR2_l.glcd
new file mode 100644
index 0000000..54b049d
--- /dev/null
+++ b/graphlcd/logos/HR2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR2_m.glcd b/graphlcd/logos/HR2_m.glcd
new file mode 100644
index 0000000..11cf851
--- /dev/null
+++ b/graphlcd/logos/HR2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HSE24_l.glcd b/graphlcd/logos/HSE24_l.glcd
new file mode 100644
index 0000000..4a50bd1
--- /dev/null
+++ b/graphlcd/logos/HSE24_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HSE24_m.glcd b/graphlcd/logos/HSE24_m.glcd
new file mode 100644
index 0000000..00371d0
--- /dev/null
+++ b/graphlcd/logos/HSE24_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HSE24_v2_m.glcd b/graphlcd/logos/HSE24_v2_m.glcd
new file mode 100644
index 0000000..374a9cb
--- /dev/null
+++ b/graphlcd/logos/HSE24_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HUNDERT6 RADIO_l.glcd b/graphlcd/logos/HUNDERT6 RADIO_l.glcd
new file mode 100644
index 0000000..67d3792
--- /dev/null
+++ b/graphlcd/logos/HUNDERT6 RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HUNDERT6 RADIO_m.glcd b/graphlcd/logos/HUNDERT6 RADIO_m.glcd
new file mode 100644
index 0000000..af348fc
--- /dev/null
+++ b/graphlcd/logos/HUNDERT6 RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/JUMP_l.glcd b/graphlcd/logos/JUMP_l.glcd
new file mode 100644
index 0000000..981cb59
--- /dev/null
+++ b/graphlcd/logos/JUMP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/JUMP_m.glcd b/graphlcd/logos/JUMP_m.glcd
new file mode 100644
index 0000000..2bf8ed7
--- /dev/null
+++ b/graphlcd/logos/JUMP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/JUNIOR_l.glcd b/graphlcd/logos/JUNIOR_l.glcd
new file mode 100644
index 0000000..8981830
--- /dev/null
+++ b/graphlcd/logos/JUNIOR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/JUNIOR_m.glcd b/graphlcd/logos/JUNIOR_m.glcd
new file mode 100644
index 0000000..9fd377b
--- /dev/null
+++ b/graphlcd/logos/JUNIOR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/JUNIOR_v2_l.glcd b/graphlcd/logos/JUNIOR_v2_l.glcd
new file mode 100644
index 0000000..26c3666
--- /dev/null
+++ b/graphlcd/logos/JUNIOR_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/K TOON_l.glcd b/graphlcd/logos/K TOON_l.glcd
new file mode 100644
index 0000000..936273a
--- /dev/null
+++ b/graphlcd/logos/K TOON_l.glcd
Binary files differ
diff --git a/graphlcd/logos/K TOON_m.glcd b/graphlcd/logos/K TOON_m.glcd
new file mode 100644
index 0000000..be284ee
--- /dev/null
+++ b/graphlcd/logos/K TOON_m.glcd
Binary files differ
diff --git a/graphlcd/logos/K TOON_v2_m.glcd b/graphlcd/logos/K TOON_v2_m.glcd
new file mode 100644
index 0000000..d2c3a4c
--- /dev/null
+++ b/graphlcd/logos/K TOON_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/K-TV_l.glcd b/graphlcd/logos/K-TV_l.glcd
new file mode 100644
index 0000000..b22e83c
--- /dev/null
+++ b/graphlcd/logos/K-TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/K-TV_m.glcd b/graphlcd/logos/K-TV_m.glcd
new file mode 100644
index 0000000..42a98f0
--- /dev/null
+++ b/graphlcd/logos/K-TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/K-TV_v2_m.glcd b/graphlcd/logos/K-TV_v2_m.glcd
new file mode 100644
index 0000000..9e07882
--- /dev/null
+++ b/graphlcd/logos/K-TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL 1 AUSTRIA_l.glcd b/graphlcd/logos/KABEL 1 AUSTRIA_l.glcd
new file mode 100644
index 0000000..628df5e
--- /dev/null
+++ b/graphlcd/logos/KABEL 1 AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL 1 AUSTRIA_m.glcd b/graphlcd/logos/KABEL 1 AUSTRIA_m.glcd
new file mode 100644
index 0000000..b57f2bd
--- /dev/null
+++ b/graphlcd/logos/KABEL 1 AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL 1 SCHWEIZ_l.glcd b/graphlcd/logos/KABEL 1 SCHWEIZ_l.glcd
new file mode 100644
index 0000000..063c594
--- /dev/null
+++ b/graphlcd/logos/KABEL 1 SCHWEIZ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL 1 SCHWEIZ_m.glcd b/graphlcd/logos/KABEL 1 SCHWEIZ_m.glcd
new file mode 100644
index 0000000..97ad2c7
--- /dev/null
+++ b/graphlcd/logos/KABEL 1 SCHWEIZ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL 1_l.glcd b/graphlcd/logos/KABEL 1_l.glcd
new file mode 100644
index 0000000..2413092
--- /dev/null
+++ b/graphlcd/logos/KABEL 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL 1_m.glcd b/graphlcd/logos/KABEL 1_m.glcd
new file mode 100644
index 0000000..5be531b
--- /dev/null
+++ b/graphlcd/logos/KABEL 1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KIKA_l.glcd b/graphlcd/logos/KIKA_l.glcd
new file mode 100644
index 0000000..4cba709
--- /dev/null
+++ b/graphlcd/logos/KIKA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KIKA_m.glcd b/graphlcd/logos/KIKA_m.glcd
new file mode 100644
index 0000000..96f71c9
--- /dev/null
+++ b/graphlcd/logos/KIKA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KINK FM_l.glcd b/graphlcd/logos/KINK FM_l.glcd
new file mode 100644
index 0000000..d1b9e99
--- /dev/null
+++ b/graphlcd/logos/KINK FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KINK FM_m.glcd b/graphlcd/logos/KINK FM_m.glcd
new file mode 100644
index 0000000..f9ddd52
--- /dev/null
+++ b/graphlcd/logos/KINK FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KINOWELT_l.glcd b/graphlcd/logos/KINOWELT_l.glcd
new file mode 100644
index 0000000..e0f4f33
--- /dev/null
+++ b/graphlcd/logos/KINOWELT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KRIMICO_l.glcd b/graphlcd/logos/KRIMICO_l.glcd
new file mode 100644
index 0000000..20d6a99
--- /dev/null
+++ b/graphlcd/logos/KRIMICO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KRIMICO_m.glcd b/graphlcd/logos/KRIMICO_m.glcd
new file mode 100644
index 0000000..cdff586
--- /dev/null
+++ b/graphlcd/logos/KRIMICO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KTO_l.glcd b/graphlcd/logos/KTO_l.glcd
new file mode 100644
index 0000000..a6c3170
--- /dev/null
+++ b/graphlcd/logos/KTO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KTO_m.glcd b/graphlcd/logos/KTO_m.glcd
new file mode 100644
index 0000000..4222646
--- /dev/null
+++ b/graphlcd/logos/KTO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/L1MBURG_l.glcd b/graphlcd/logos/L1MBURG_l.glcd
new file mode 100644
index 0000000..0e50e3a
--- /dev/null
+++ b/graphlcd/logos/L1MBURG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/L1MBURG_m.glcd b/graphlcd/logos/L1MBURG_m.glcd
new file mode 100644
index 0000000..984a117
--- /dev/null
+++ b/graphlcd/logos/L1MBURG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LASTMINUTE_l.glcd b/graphlcd/logos/LASTMINUTE_l.glcd
new file mode 100644
index 0000000..252d343
--- /dev/null
+++ b/graphlcd/logos/LASTMINUTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/LASTMINUTE_m.glcd b/graphlcd/logos/LASTMINUTE_m.glcd
new file mode 100644
index 0000000..cefd1fa
--- /dev/null
+++ b/graphlcd/logos/LASTMINUTE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LASTMINUTE_v2_m.glcd b/graphlcd/logos/LASTMINUTE_v2_m.glcd
new file mode 100644
index 0000000..60bbb84
--- /dev/null
+++ b/graphlcd/logos/LASTMINUTE_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LCI_m.glcd b/graphlcd/logos/LCI_m.glcd
new file mode 100644
index 0000000..69c0db2
--- /dev/null
+++ b/graphlcd/logos/LCI_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LCP_l.glcd b/graphlcd/logos/LCP_l.glcd
new file mode 100644
index 0000000..a216ea8
--- /dev/null
+++ b/graphlcd/logos/LCP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/LIBERTY TV_l.glcd b/graphlcd/logos/LIBERTY TV_l.glcd
new file mode 100644
index 0000000..c905a56
--- /dev/null
+++ b/graphlcd/logos/LIBERTY TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/LIBERTY TV_m.glcd b/graphlcd/logos/LIBERTY TV_m.glcd
new file mode 100644
index 0000000..e4ea29d
--- /dev/null
+++ b/graphlcd/logos/LIBERTY TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LIBERTY TV_v2_m.glcd b/graphlcd/logos/LIBERTY TV_v2_m.glcd
new file mode 100644
index 0000000..6eafbc9
--- /dev/null
+++ b/graphlcd/logos/LIBERTY TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LIVE 1_m.glcd b/graphlcd/logos/LIVE 1_m.glcd
new file mode 100644
index 0000000..39ad718
--- /dev/null
+++ b/graphlcd/logos/LIVE 1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MATCH TV_m.glcd b/graphlcd/logos/MATCH TV_m.glcd
new file mode 100644
index 0000000..c2e9462
--- /dev/null
+++ b/graphlcd/logos/MATCH TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MAXIMA FM_l.glcd b/graphlcd/logos/MAXIMA FM_l.glcd
new file mode 100644
index 0000000..42cf233
--- /dev/null
+++ b/graphlcd/logos/MAXIMA FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MAXIMA FM_m.glcd b/graphlcd/logos/MAXIMA FM_m.glcd
new file mode 100644
index 0000000..16753a3
--- /dev/null
+++ b/graphlcd/logos/MAXIMA FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FERNSEHEN SA_l.glcd b/graphlcd/logos/MDR FERNSEHEN SA_l.glcd
new file mode 100644
index 0000000..3f684e2
--- /dev/null
+++ b/graphlcd/logos/MDR FERNSEHEN SA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FERNSEHEN SA_m.glcd b/graphlcd/logos/MDR FERNSEHEN SA_m.glcd
new file mode 100644
index 0000000..80635a9
--- /dev/null
+++ b/graphlcd/logos/MDR FERNSEHEN SA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FERNSEHEN S_l.glcd b/graphlcd/logos/MDR FERNSEHEN S_l.glcd
new file mode 100644
index 0000000..5742792
--- /dev/null
+++ b/graphlcd/logos/MDR FERNSEHEN S_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FERNSEHEN S_m.glcd b/graphlcd/logos/MDR FERNSEHEN S_m.glcd
new file mode 100644
index 0000000..a4779f4
--- /dev/null
+++ b/graphlcd/logos/MDR FERNSEHEN S_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FERNSEHEN TH_l.glcd b/graphlcd/logos/MDR FERNSEHEN TH_l.glcd
new file mode 100644
index 0000000..10fee6b
--- /dev/null
+++ b/graphlcd/logos/MDR FERNSEHEN TH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FERNSEHEN TH_m.glcd b/graphlcd/logos/MDR FERNSEHEN TH_m.glcd
new file mode 100644
index 0000000..7fef753
--- /dev/null
+++ b/graphlcd/logos/MDR FERNSEHEN TH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FERNSEHEN_l.glcd b/graphlcd/logos/MDR FERNSEHEN_l.glcd
new file mode 100644
index 0000000..b13f745
--- /dev/null
+++ b/graphlcd/logos/MDR FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FERNSEHEN_m.glcd b/graphlcd/logos/MDR FERNSEHEN_m.glcd
new file mode 100644
index 0000000..6c173bd
--- /dev/null
+++ b/graphlcd/logos/MDR FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FIGARO_l.glcd b/graphlcd/logos/MDR FIGARO_l.glcd
new file mode 100644
index 0000000..33fce31
--- /dev/null
+++ b/graphlcd/logos/MDR FIGARO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FIGARO_m.glcd b/graphlcd/logos/MDR FIGARO_m.glcd
new file mode 100644
index 0000000..870aa21
--- /dev/null
+++ b/graphlcd/logos/MDR FIGARO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR FIGARO_v2_m.glcd b/graphlcd/logos/MDR FIGARO_v2_m.glcd
new file mode 100644
index 0000000..9421c8d
--- /dev/null
+++ b/graphlcd/logos/MDR FIGARO_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR INFO_l.glcd b/graphlcd/logos/MDR INFO_l.glcd
new file mode 100644
index 0000000..7bd47b2
--- /dev/null
+++ b/graphlcd/logos/MDR INFO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR INFO_m.glcd b/graphlcd/logos/MDR INFO_m.glcd
new file mode 100644
index 0000000..8d5158a
--- /dev/null
+++ b/graphlcd/logos/MDR INFO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MEDIA TROPICAL_l.glcd b/graphlcd/logos/MEDIA TROPICAL_l.glcd
new file mode 100644
index 0000000..a8f0761
--- /dev/null
+++ b/graphlcd/logos/MEDIA TROPICAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MEDIA TROPICAL_m.glcd b/graphlcd/logos/MEDIA TROPICAL_m.glcd
new file mode 100644
index 0000000..33ae45e
--- /dev/null
+++ b/graphlcd/logos/MEDIA TROPICAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MGM_l.glcd b/graphlcd/logos/MGM_l.glcd
new file mode 100644
index 0000000..671a722
--- /dev/null
+++ b/graphlcd/logos/MGM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MGM_m.glcd b/graphlcd/logos/MGM_m.glcd
new file mode 100644
index 0000000..3a7aee8
--- /dev/null
+++ b/graphlcd/logos/MGM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MOTORS TV_l.glcd b/graphlcd/logos/MOTORS TV_l.glcd
new file mode 100644
index 0000000..bfb4ca8
--- /dev/null
+++ b/graphlcd/logos/MOTORS TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MOTORS TV_m.glcd b/graphlcd/logos/MOTORS TV_m.glcd
new file mode 100644
index 0000000..de02e3e
--- /dev/null
+++ b/graphlcd/logos/MOTORS TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MOTORS TV_v2_m.glcd b/graphlcd/logos/MOTORS TV_v2_m.glcd
new file mode 100644
index 0000000..34e196c
--- /dev/null
+++ b/graphlcd/logos/MOTORS TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV 2 POP CHANNEL_l.glcd b/graphlcd/logos/MTV 2 POP CHANNEL_l.glcd
new file mode 100644
index 0000000..118119d
--- /dev/null
+++ b/graphlcd/logos/MTV 2 POP CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV 2 POP CHANNEL_m.glcd b/graphlcd/logos/MTV 2 POP CHANNEL_m.glcd
new file mode 100644
index 0000000..f262291
--- /dev/null
+++ b/graphlcd/logos/MTV 2 POP CHANNEL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV 2_l.glcd b/graphlcd/logos/MTV 2_l.glcd
new file mode 100644
index 0000000..22cebd0
--- /dev/null
+++ b/graphlcd/logos/MTV 2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV BASE_l.glcd b/graphlcd/logos/MTV BASE_l.glcd
new file mode 100644
index 0000000..c486eb5
--- /dev/null
+++ b/graphlcd/logos/MTV BASE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV BASE_m.glcd b/graphlcd/logos/MTV BASE_m.glcd
new file mode 100644
index 0000000..f2f3ce4
--- /dev/null
+++ b/graphlcd/logos/MTV BASE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV CENTRAL_l.glcd b/graphlcd/logos/MTV CENTRAL_l.glcd
new file mode 100644
index 0000000..3fb8e3f
--- /dev/null
+++ b/graphlcd/logos/MTV CENTRAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV CENTRAL_m.glcd b/graphlcd/logos/MTV CENTRAL_m.glcd
new file mode 100644
index 0000000..f2de32b
--- /dev/null
+++ b/graphlcd/logos/MTV CENTRAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV CENTRAL_v2_m.glcd b/graphlcd/logos/MTV CENTRAL_v2_m.glcd
new file mode 100644
index 0000000..6f5fa72
--- /dev/null
+++ b/graphlcd/logos/MTV CENTRAL_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV DANCE_l.glcd b/graphlcd/logos/MTV DANCE_l.glcd
new file mode 100644
index 0000000..be83922
--- /dev/null
+++ b/graphlcd/logos/MTV DANCE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV F_l.glcd b/graphlcd/logos/MTV F_l.glcd
new file mode 100644
index 0000000..f140bf6
--- /dev/null
+++ b/graphlcd/logos/MTV F_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV HITS_l.glcd b/graphlcd/logos/MTV HITS_l.glcd
new file mode 100644
index 0000000..c15ec4d
--- /dev/null
+++ b/graphlcd/logos/MTV HITS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV HITS_m.glcd b/graphlcd/logos/MTV HITS_m.glcd
new file mode 100644
index 0000000..bdc6a67
--- /dev/null
+++ b/graphlcd/logos/MTV HITS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_l.glcd b/graphlcd/logos/MTV_l.glcd
new file mode 100644
index 0000000..487d888
--- /dev/null
+++ b/graphlcd/logos/MTV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MULTIVISION_m.glcd b/graphlcd/logos/MULTIVISION_m.glcd
new file mode 100644
index 0000000..33a286a
--- /dev/null
+++ b/graphlcd/logos/MULTIVISION_m.glcd
Binary files differ
diff --git a/graphlcd/logos/N-TV_l.glcd b/graphlcd/logos/N-TV_l.glcd
new file mode 100644
index 0000000..1183167
--- /dev/null
+++ b/graphlcd/logos/N-TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/N-TV_m.glcd b/graphlcd/logos/N-TV_m.glcd
new file mode 100644
index 0000000..872793f
--- /dev/null
+++ b/graphlcd/logos/N-TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/N-TV_v2_m.glcd b/graphlcd/logos/N-TV_v2_m.glcd
new file mode 100644
index 0000000..e063715
--- /dev/null
+++ b/graphlcd/logos/N-TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/N24_l.glcd b/graphlcd/logos/N24_l.glcd
new file mode 100644
index 0000000..0fd10c9
--- /dev/null
+++ b/graphlcd/logos/N24_l.glcd
Binary files differ
diff --git a/graphlcd/logos/N24_m.glcd b/graphlcd/logos/N24_m.glcd
new file mode 100644
index 0000000..c5f839e
--- /dev/null
+++ b/graphlcd/logos/N24_m.glcd
Binary files differ
diff --git a/graphlcd/logos/N24_v2_l.glcd b/graphlcd/logos/N24_v2_l.glcd
new file mode 100644
index 0000000..c556010
--- /dev/null
+++ b/graphlcd/logos/N24_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NASN_l.glcd b/graphlcd/logos/NASN_l.glcd
new file mode 100644
index 0000000..cdba969
--- /dev/null
+++ b/graphlcd/logos/NASN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NATIONAL GEOGRAPHIC_l.glcd b/graphlcd/logos/NATIONAL GEOGRAPHIC_l.glcd
new file mode 100644
index 0000000..c90abe7
--- /dev/null
+++ b/graphlcd/logos/NATIONAL GEOGRAPHIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NBC_l.glcd b/graphlcd/logos/NBC_l.glcd
new file mode 100644
index 0000000..cba7b8e
--- /dev/null
+++ b/graphlcd/logos/NBC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NBC_m.glcd b/graphlcd/logos/NBC_m.glcd
new file mode 100644
index 0000000..f0a5e68
--- /dev/null
+++ b/graphlcd/logos/NBC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN HH_l.glcd b/graphlcd/logos/NDR FERNSEHEN HH_l.glcd
new file mode 100644
index 0000000..5d93658
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN HH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN HH_m.glcd b/graphlcd/logos/NDR FERNSEHEN HH_m.glcd
new file mode 100644
index 0000000..7784e4b
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN HH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN MV_l.glcd b/graphlcd/logos/NDR FERNSEHEN MV_l.glcd
new file mode 100644
index 0000000..b0b82fe
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN MV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN MV_m.glcd b/graphlcd/logos/NDR FERNSEHEN MV_m.glcd
new file mode 100644
index 0000000..7e0a763
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN MV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN NDS_l.glcd b/graphlcd/logos/NDR FERNSEHEN NDS_l.glcd
new file mode 100644
index 0000000..1960b76
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN NDS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN NDS_m.glcd b/graphlcd/logos/NDR FERNSEHEN NDS_m.glcd
new file mode 100644
index 0000000..77db508
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN NDS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN SH_l.glcd b/graphlcd/logos/NDR FERNSEHEN SH_l.glcd
new file mode 100644
index 0000000..d834fa4
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN SH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN SH_m.glcd b/graphlcd/logos/NDR FERNSEHEN SH_m.glcd
new file mode 100644
index 0000000..e1e30b8
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN SH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN_l.glcd b/graphlcd/logos/NDR FERNSEHEN_l.glcd
new file mode 100644
index 0000000..999ad4d
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR FERNSEHEN_m.glcd b/graphlcd/logos/NDR FERNSEHEN_m.glcd
new file mode 100644
index 0000000..aeb6eb8
--- /dev/null
+++ b/graphlcd/logos/NDR FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR INFO_l.glcd b/graphlcd/logos/NDR INFO_l.glcd
new file mode 100644
index 0000000..33998e7
--- /dev/null
+++ b/graphlcd/logos/NDR INFO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR INFO_m.glcd b/graphlcd/logos/NDR INFO_m.glcd
new file mode 100644
index 0000000..f903c2d
--- /dev/null
+++ b/graphlcd/logos/NDR INFO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR KULTUR_l.glcd b/graphlcd/logos/NDR KULTUR_l.glcd
new file mode 100644
index 0000000..c3f54ef
--- /dev/null
+++ b/graphlcd/logos/NDR KULTUR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR KULTUR_m.glcd b/graphlcd/logos/NDR KULTUR_m.glcd
new file mode 100644
index 0000000..25530cf
--- /dev/null
+++ b/graphlcd/logos/NDR KULTUR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NED1_l.glcd b/graphlcd/logos/NED1_l.glcd
new file mode 100644
index 0000000..cc646c9
--- /dev/null
+++ b/graphlcd/logos/NED1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NED1_m.glcd b/graphlcd/logos/NED1_m.glcd
new file mode 100644
index 0000000..5d3c4f7
--- /dev/null
+++ b/graphlcd/logos/NED1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NED2_l.glcd b/graphlcd/logos/NED2_l.glcd
new file mode 100644
index 0000000..cc4b26b
--- /dev/null
+++ b/graphlcd/logos/NED2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NED2_m.glcd b/graphlcd/logos/NED2_m.glcd
new file mode 100644
index 0000000..d125a6b
--- /dev/null
+++ b/graphlcd/logos/NED2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NED3_l.glcd b/graphlcd/logos/NED3_l.glcd
new file mode 100644
index 0000000..83a391f
--- /dev/null
+++ b/graphlcd/logos/NED3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NED3_m.glcd b/graphlcd/logos/NED3_m.glcd
new file mode 100644
index 0000000..35b3235
--- /dev/null
+++ b/graphlcd/logos/NED3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NET5_l.glcd b/graphlcd/logos/NET5_l.glcd
new file mode 100644
index 0000000..373524f
--- /dev/null
+++ b/graphlcd/logos/NET5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NET5_m.glcd b/graphlcd/logos/NET5_m.glcd
new file mode 100644
index 0000000..e3a7db3
--- /dev/null
+++ b/graphlcd/logos/NET5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NEUN LIVE_l.glcd b/graphlcd/logos/NEUN LIVE_l.glcd
new file mode 100644
index 0000000..42f21c1
--- /dev/null
+++ b/graphlcd/logos/NEUN LIVE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NEUN LIVE_m.glcd b/graphlcd/logos/NEUN LIVE_m.glcd
new file mode 100644
index 0000000..b871163
--- /dev/null
+++ b/graphlcd/logos/NEUN LIVE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NEUN LIVE_v2_m.glcd b/graphlcd/logos/NEUN LIVE_v2_m.glcd
new file mode 100644
index 0000000..f0d6e86
--- /dev/null
+++ b/graphlcd/logos/NEUN LIVE_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NICKELODEON_l.glcd b/graphlcd/logos/NICKELODEON_l.glcd
new file mode 100644
index 0000000..f2fdc89
--- /dev/null
+++ b/graphlcd/logos/NICKELODEON_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NICKELODEON_m.glcd b/graphlcd/logos/NICKELODEON_m.glcd
new file mode 100644
index 0000000..8253643
--- /dev/null
+++ b/graphlcd/logos/NICKELODEON_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NICK_l.glcd b/graphlcd/logos/NICK_l.glcd
new file mode 100644
index 0000000..cf6dbda
--- /dev/null
+++ b/graphlcd/logos/NICK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NORDWEST RADIO_l.glcd b/graphlcd/logos/NORDWEST RADIO_l.glcd
new file mode 100644
index 0000000..c48ee07
--- /dev/null
+++ b/graphlcd/logos/NORDWEST RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NORDWEST RADIO_m.glcd b/graphlcd/logos/NORDWEST RADIO_m.glcd
new file mode 100644
index 0000000..895000f
--- /dev/null
+++ b/graphlcd/logos/NORDWEST RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NORDWEST RADIO_v2_m.glcd b/graphlcd/logos/NORDWEST RADIO_v2_m.glcd
new file mode 100644
index 0000000..4c7a50e
--- /dev/null
+++ b/graphlcd/logos/NORDWEST RADIO_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NRJ_l.glcd b/graphlcd/logos/NRJ_l.glcd
new file mode 100644
index 0000000..7df7c0a
--- /dev/null
+++ b/graphlcd/logos/NRJ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NRJ_m.glcd b/graphlcd/logos/NRJ_m.glcd
new file mode 100644
index 0000000..5424d41
--- /dev/null
+++ b/graphlcd/logos/NRJ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/OESTERREICH 1_l.glcd b/graphlcd/logos/OESTERREICH 1_l.glcd
new file mode 100644
index 0000000..4d35400
--- /dev/null
+++ b/graphlcd/logos/OESTERREICH 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/OESTERREICH 1_m.glcd b/graphlcd/logos/OESTERREICH 1_m.glcd
new file mode 100644
index 0000000..6c8a132
--- /dev/null
+++ b/graphlcd/logos/OESTERREICH 1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/OESTERREICH 3_l.glcd b/graphlcd/logos/OESTERREICH 3_l.glcd
new file mode 100644
index 0000000..59d4519
--- /dev/null
+++ b/graphlcd/logos/OESTERREICH 3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/OESTERREICH 3_m.glcd b/graphlcd/logos/OESTERREICH 3_m.glcd
new file mode 100644
index 0000000..22e7b3a
--- /dev/null
+++ b/graphlcd/logos/OESTERREICH 3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ONTV_l.glcd b/graphlcd/logos/ONTV_l.glcd
new file mode 100644
index 0000000..3d30545
--- /dev/null
+++ b/graphlcd/logos/ONTV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ONTV_m.glcd b/graphlcd/logos/ONTV_m.glcd
new file mode 100644
index 0000000..dd1dd72
--- /dev/null
+++ b/graphlcd/logos/ONTV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ONTV_v2_m.glcd b/graphlcd/logos/ONTV_v2_m.glcd
new file mode 100644
index 0000000..c7f75b6
--- /dev/null
+++ b/graphlcd/logos/ONTV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ONYX TV_l.glcd b/graphlcd/logos/ONYX TV_l.glcd
new file mode 100644
index 0000000..928a766
--- /dev/null
+++ b/graphlcd/logos/ONYX TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ONYX TV_m.glcd b/graphlcd/logos/ONYX TV_m.glcd
new file mode 100644
index 0000000..10f3bdb
--- /dev/null
+++ b/graphlcd/logos/ONYX TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 1_l.glcd b/graphlcd/logos/ORF 1_l.glcd
new file mode 100644
index 0000000..457b7db
--- /dev/null
+++ b/graphlcd/logos/ORF 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 1_m.glcd b/graphlcd/logos/ORF 1_m.glcd
new file mode 100644
index 0000000..48346ac
--- /dev/null
+++ b/graphlcd/logos/ORF 1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 BURGENLAND_l.glcd b/graphlcd/logos/ORF 2 BURGENLAND_l.glcd
new file mode 100644
index 0000000..3c76598
--- /dev/null
+++ b/graphlcd/logos/ORF 2 BURGENLAND_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 BURGENLAND_m.glcd b/graphlcd/logos/ORF 2 BURGENLAND_m.glcd
new file mode 100644
index 0000000..cdaeb84
--- /dev/null
+++ b/graphlcd/logos/ORF 2 BURGENLAND_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 KAERNTEN_l.glcd b/graphlcd/logos/ORF 2 KAERNTEN_l.glcd
new file mode 100644
index 0000000..17e701b
--- /dev/null
+++ b/graphlcd/logos/ORF 2 KAERNTEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 KAERNTEN_m.glcd b/graphlcd/logos/ORF 2 KAERNTEN_m.glcd
new file mode 100644
index 0000000..2ce5f2a
--- /dev/null
+++ b/graphlcd/logos/ORF 2 KAERNTEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 NIEDEROESTERREICH_l.glcd b/graphlcd/logos/ORF 2 NIEDEROESTERREICH_l.glcd
new file mode 100644
index 0000000..5e3e6c6
--- /dev/null
+++ b/graphlcd/logos/ORF 2 NIEDEROESTERREICH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 NIEDEROESTERREICH_m.glcd b/graphlcd/logos/ORF 2 NIEDEROESTERREICH_m.glcd
new file mode 100644
index 0000000..ffc2413
--- /dev/null
+++ b/graphlcd/logos/ORF 2 NIEDEROESTERREICH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 OBEROESTERREICH_l.glcd b/graphlcd/logos/ORF 2 OBEROESTERREICH_l.glcd
new file mode 100644
index 0000000..feed851
--- /dev/null
+++ b/graphlcd/logos/ORF 2 OBEROESTERREICH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 OBEROESTERREICH_m.glcd b/graphlcd/logos/ORF 2 OBEROESTERREICH_m.glcd
new file mode 100644
index 0000000..2435717
--- /dev/null
+++ b/graphlcd/logos/ORF 2 OBEROESTERREICH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 SALZBURG_l.glcd b/graphlcd/logos/ORF 2 SALZBURG_l.glcd
new file mode 100644
index 0000000..929c0f2
--- /dev/null
+++ b/graphlcd/logos/ORF 2 SALZBURG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 SALZBURG_m.glcd b/graphlcd/logos/ORF 2 SALZBURG_m.glcd
new file mode 100644
index 0000000..74b04ad
--- /dev/null
+++ b/graphlcd/logos/ORF 2 SALZBURG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 STEIERMARK_l.glcd b/graphlcd/logos/ORF 2 STEIERMARK_l.glcd
new file mode 100644
index 0000000..43bb361
--- /dev/null
+++ b/graphlcd/logos/ORF 2 STEIERMARK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 STEIERMARK_m.glcd b/graphlcd/logos/ORF 2 STEIERMARK_m.glcd
new file mode 100644
index 0000000..2f76745
--- /dev/null
+++ b/graphlcd/logos/ORF 2 STEIERMARK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 TIROL_l.glcd b/graphlcd/logos/ORF 2 TIROL_l.glcd
new file mode 100644
index 0000000..60589aa
--- /dev/null
+++ b/graphlcd/logos/ORF 2 TIROL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 TIROL_m.glcd b/graphlcd/logos/ORF 2 TIROL_m.glcd
new file mode 100644
index 0000000..afae7e3
--- /dev/null
+++ b/graphlcd/logos/ORF 2 TIROL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 VORARLBERG_l.glcd b/graphlcd/logos/ORF 2 VORARLBERG_l.glcd
new file mode 100644
index 0000000..f79b383
--- /dev/null
+++ b/graphlcd/logos/ORF 2 VORARLBERG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 VORARLBERG_m.glcd b/graphlcd/logos/ORF 2 VORARLBERG_m.glcd
new file mode 100644
index 0000000..72c984d
--- /dev/null
+++ b/graphlcd/logos/ORF 2 VORARLBERG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 WIEN_l.glcd b/graphlcd/logos/ORF 2 WIEN_l.glcd
new file mode 100644
index 0000000..ec61614
--- /dev/null
+++ b/graphlcd/logos/ORF 2 WIEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2 WIEN_m.glcd b/graphlcd/logos/ORF 2 WIEN_m.glcd
new file mode 100644
index 0000000..cf4c07e
--- /dev/null
+++ b/graphlcd/logos/ORF 2 WIEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2_l.glcd b/graphlcd/logos/ORF 2_l.glcd
new file mode 100644
index 0000000..6fbe451
--- /dev/null
+++ b/graphlcd/logos/ORF 2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF 2_m.glcd b/graphlcd/logos/ORF 2_m.glcd
new file mode 100644
index 0000000..a28cb0d
--- /dev/null
+++ b/graphlcd/logos/ORF 2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF2 RADIO_l.glcd b/graphlcd/logos/ORF2 RADIO_l.glcd
new file mode 100644
index 0000000..65d086e
--- /dev/null
+++ b/graphlcd/logos/ORF2 RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF2 RADIO_m.glcd b/graphlcd/logos/ORF2 RADIO_m.glcd
new file mode 100644
index 0000000..b42e7d5
--- /dev/null
+++ b/graphlcd/logos/ORF2 RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/OTTO SHOP_l.glcd b/graphlcd/logos/OTTO SHOP_l.glcd
new file mode 100644
index 0000000..d915a35
--- /dev/null
+++ b/graphlcd/logos/OTTO SHOP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/OTTO SHOP_m.glcd b/graphlcd/logos/OTTO SHOP_m.glcd
new file mode 100644
index 0000000..a4d832b
--- /dev/null
+++ b/graphlcd/logos/OTTO SHOP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PHOENIX_l.glcd b/graphlcd/logos/PHOENIX_l.glcd
new file mode 100644
index 0000000..15fe77a
--- /dev/null
+++ b/graphlcd/logos/PHOENIX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PHOENIX_m.glcd b/graphlcd/logos/PHOENIX_m.glcd
new file mode 100644
index 0000000..ee8c873
--- /dev/null
+++ b/graphlcd/logos/PHOENIX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PHOENIX_v2_l.glcd b/graphlcd/logos/PHOENIX_v2_l.glcd
new file mode 100644
index 0000000..91298f0
--- /dev/null
+++ b/graphlcd/logos/PHOENIX_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PHOENIX_v2_m.glcd b/graphlcd/logos/PHOENIX_v2_m.glcd
new file mode 100644
index 0000000..df84f07
--- /dev/null
+++ b/graphlcd/logos/PHOENIX_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PLANET RADIO_l.glcd b/graphlcd/logos/PLANET RADIO_l.glcd
new file mode 100644
index 0000000..a7d211b
--- /dev/null
+++ b/graphlcd/logos/PLANET RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PLANET RADIO_m.glcd b/graphlcd/logos/PLANET RADIO_m.glcd
new file mode 100644
index 0000000..3328bd5
--- /dev/null
+++ b/graphlcd/logos/PLANET RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PLANET_l.glcd b/graphlcd/logos/PLANET_l.glcd
new file mode 100644
index 0000000..b75675c
--- /dev/null
+++ b/graphlcd/logos/PLANET_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PLANET_m.glcd b/graphlcd/logos/PLANET_m.glcd
new file mode 100644
index 0000000..610bb82
--- /dev/null
+++ b/graphlcd/logos/PLANET_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PLAYBOY TV_l.glcd b/graphlcd/logos/PLAYBOY TV_l.glcd
new file mode 100644
index 0000000..184f5ff
--- /dev/null
+++ b/graphlcd/logos/PLAYBOY TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PLAYBOY_m.glcd b/graphlcd/logos/PLAYBOY_m.glcd
new file mode 100644
index 0000000..6b26e08
--- /dev/null
+++ b/graphlcd/logos/PLAYBOY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PLAYHOUSE DISNEY_m.glcd b/graphlcd/logos/PLAYHOUSE DISNEY_m.glcd
new file mode 100644
index 0000000..f39bdf4
--- /dev/null
+++ b/graphlcd/logos/PLAYHOUSE DISNEY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PLUS 1_l.glcd b/graphlcd/logos/PLUS 1_l.glcd
new file mode 100644
index 0000000..2f90c49
--- /dev/null
+++ b/graphlcd/logos/PLUS 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE AUSTRIA_l.glcd b/graphlcd/logos/PREMIERE AUSTRIA_l.glcd
new file mode 100644
index 0000000..fec540c
--- /dev/null
+++ b/graphlcd/logos/PREMIERE AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE AUSTRIA_m.glcd b/graphlcd/logos/PREMIERE AUSTRIA_m.glcd
new file mode 100644
index 0000000..695e4be
--- /dev/null
+++ b/graphlcd/logos/PREMIERE AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT PORTAL_l.glcd b/graphlcd/logos/PREMIERE DIREKT PORTAL_l.glcd
new file mode 100644
index 0000000..3451743
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT PORTAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT PORTAL_m.glcd b/graphlcd/logos/PREMIERE DIREKT PORTAL_m.glcd
new file mode 100644
index 0000000..f37c6f0
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT PORTAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT1_l.glcd b/graphlcd/logos/PREMIERE DIREKT1_l.glcd
new file mode 100644
index 0000000..3dcbf95
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT1_m.glcd b/graphlcd/logos/PREMIERE DIREKT1_m.glcd
new file mode 100644
index 0000000..867542e
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT1_v2_l.glcd b/graphlcd/logos/PREMIERE DIREKT1_v2_l.glcd
new file mode 100644
index 0000000..174bcd6
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT1_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT2_l.glcd b/graphlcd/logos/PREMIERE DIREKT2_l.glcd
new file mode 100644
index 0000000..47634fa
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT2_m.glcd b/graphlcd/logos/PREMIERE DIREKT2_m.glcd
new file mode 100644
index 0000000..06458ff
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT2_v2_l.glcd b/graphlcd/logos/PREMIERE DIREKT2_v2_l.glcd
new file mode 100644
index 0000000..4541045
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT2_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT3_l.glcd b/graphlcd/logos/PREMIERE DIREKT3_l.glcd
new file mode 100644
index 0000000..561baac
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT3_m.glcd b/graphlcd/logos/PREMIERE DIREKT3_m.glcd
new file mode 100644
index 0000000..bf95d30
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT3_v2_l.glcd b/graphlcd/logos/PREMIERE DIREKT3_v2_l.glcd
new file mode 100644
index 0000000..5956684
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT3_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT4_l.glcd b/graphlcd/logos/PREMIERE DIREKT4_l.glcd
new file mode 100644
index 0000000..be12a52
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT4_m.glcd b/graphlcd/logos/PREMIERE DIREKT4_m.glcd
new file mode 100644
index 0000000..8bd5202
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE DIREKT4_v2_l.glcd b/graphlcd/logos/PREMIERE DIREKT4_v2_l.glcd
new file mode 100644
index 0000000..e1fb8b1
--- /dev/null
+++ b/graphlcd/logos/PREMIERE DIREKT4_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 1_l.glcd b/graphlcd/logos/PREMIERE EROTIK 1_l.glcd
new file mode 100644
index 0000000..d0ba7a2
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 1_m.glcd b/graphlcd/logos/PREMIERE EROTIK 1_m.glcd
new file mode 100644
index 0000000..d74ba3e
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 1_v2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 1_v2_l.glcd
new file mode 100644
index 0000000..9d36610
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 1_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 2_l.glcd
new file mode 100644
index 0000000..72654b1
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 2_m.glcd b/graphlcd/logos/PREMIERE EROTIK 2_m.glcd
new file mode 100644
index 0000000..e54786c
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 2_v2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 2_v2_l.glcd
new file mode 100644
index 0000000..d78779e
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 2_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 3_l.glcd b/graphlcd/logos/PREMIERE EROTIK 3_l.glcd
new file mode 100644
index 0000000..65fa3da
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 3_m.glcd b/graphlcd/logos/PREMIERE EROTIK 3_m.glcd
new file mode 100644
index 0000000..2287287
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 3_v2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 3_v2_l.glcd
new file mode 100644
index 0000000..48fc074
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 3_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 4_l.glcd b/graphlcd/logos/PREMIERE EROTIK 4_l.glcd
new file mode 100644
index 0000000..87d3375
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 4_m.glcd b/graphlcd/logos/PREMIERE EROTIK 4_m.glcd
new file mode 100644
index 0000000..b312a53
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK 4_v2_l.glcd b/graphlcd/logos/PREMIERE EROTIK 4_v2_l.glcd
new file mode 100644
index 0000000..4242389
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK 4_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK_l.glcd b/graphlcd/logos/PREMIERE EROTIK_l.glcd
new file mode 100644
index 0000000..d6ab077
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE EROTIK_m.glcd b/graphlcd/logos/PREMIERE EROTIK_m.glcd
new file mode 100644
index 0000000..c57aa32
--- /dev/null
+++ b/graphlcd/logos/PREMIERE EROTIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE KRIMI_l.glcd b/graphlcd/logos/PREMIERE KRIMI_l.glcd
new file mode 100644
index 0000000..46ea4f2
--- /dev/null
+++ b/graphlcd/logos/PREMIERE KRIMI_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE KRIMI_m.glcd b/graphlcd/logos/PREMIERE KRIMI_m.glcd
new file mode 100644
index 0000000..60e809f
--- /dev/null
+++ b/graphlcd/logos/PREMIERE KRIMI_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE NOSTALGIE_l.glcd b/graphlcd/logos/PREMIERE NOSTALGIE_l.glcd
new file mode 100644
index 0000000..2fe949f
--- /dev/null
+++ b/graphlcd/logos/PREMIERE NOSTALGIE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE NOSTALGIE_m.glcd b/graphlcd/logos/PREMIERE NOSTALGIE_m.glcd
new file mode 100644
index 0000000..2d69c17
--- /dev/null
+++ b/graphlcd/logos/PREMIERE NOSTALGIE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE NOSTALGIE_v2_l.glcd b/graphlcd/logos/PREMIERE NOSTALGIE_v2_l.glcd
new file mode 100644
index 0000000..0c0fa92
--- /dev/null
+++ b/graphlcd/logos/PREMIERE NOSTALGIE_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE SERIE_l.glcd b/graphlcd/logos/PREMIERE SERIE_l.glcd
new file mode 100644
index 0000000..22d4b46
--- /dev/null
+++ b/graphlcd/logos/PREMIERE SERIE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE SERIE_m.glcd b/graphlcd/logos/PREMIERE SERIE_m.glcd
new file mode 100644
index 0000000..12d0903
--- /dev/null
+++ b/graphlcd/logos/PREMIERE SERIE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE SERIE_v2_l.glcd b/graphlcd/logos/PREMIERE SERIE_v2_l.glcd
new file mode 100644
index 0000000..0ebb263
--- /dev/null
+++ b/graphlcd/logos/PREMIERE SERIE_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE SPORT1_l.glcd b/graphlcd/logos/PREMIERE SPORT1_l.glcd
new file mode 100644
index 0000000..c6547c2
--- /dev/null
+++ b/graphlcd/logos/PREMIERE SPORT1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE SPORT1_m.glcd b/graphlcd/logos/PREMIERE SPORT1_m.glcd
new file mode 100644
index 0000000..df7c5c8
--- /dev/null
+++ b/graphlcd/logos/PREMIERE SPORT1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE SPORT1_v2_l.glcd b/graphlcd/logos/PREMIERE SPORT1_v2_l.glcd
new file mode 100644
index 0000000..4012c0f
--- /dev/null
+++ b/graphlcd/logos/PREMIERE SPORT1_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE SPORT2_l.glcd b/graphlcd/logos/PREMIERE SPORT2_l.glcd
new file mode 100644
index 0000000..c99afc7
--- /dev/null
+++ b/graphlcd/logos/PREMIERE SPORT2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE SPORT2_m.glcd b/graphlcd/logos/PREMIERE SPORT2_m.glcd
new file mode 100644
index 0000000..10088bd
--- /dev/null
+++ b/graphlcd/logos/PREMIERE SPORT2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE SPORT2_v2_l.glcd b/graphlcd/logos/PREMIERE SPORT2_v2_l.glcd
new file mode 100644
index 0000000..308a08d
--- /dev/null
+++ b/graphlcd/logos/PREMIERE SPORT2_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE START_l.glcd b/graphlcd/logos/PREMIERE START_l.glcd
new file mode 100644
index 0000000..a4d4dd2
--- /dev/null
+++ b/graphlcd/logos/PREMIERE START_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE START_m.glcd b/graphlcd/logos/PREMIERE START_m.glcd
new file mode 100644
index 0000000..fc0a473
--- /dev/null
+++ b/graphlcd/logos/PREMIERE START_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE START_v2_l.glcd b/graphlcd/logos/PREMIERE START_v2_l.glcd
new file mode 100644
index 0000000..dba4dda
--- /dev/null
+++ b/graphlcd/logos/PREMIERE START_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE1_l.glcd b/graphlcd/logos/PREMIERE1_l.glcd
new file mode 100644
index 0000000..d96b181
--- /dev/null
+++ b/graphlcd/logos/PREMIERE1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE1_m.glcd b/graphlcd/logos/PREMIERE1_m.glcd
new file mode 100644
index 0000000..dfaaad9
--- /dev/null
+++ b/graphlcd/logos/PREMIERE1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE1_v2_l.glcd b/graphlcd/logos/PREMIERE1_v2_l.glcd
new file mode 100644
index 0000000..5ff3581
--- /dev/null
+++ b/graphlcd/logos/PREMIERE1_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE2_l.glcd b/graphlcd/logos/PREMIERE2_l.glcd
new file mode 100644
index 0000000..3633669
--- /dev/null
+++ b/graphlcd/logos/PREMIERE2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE2_m.glcd b/graphlcd/logos/PREMIERE2_m.glcd
new file mode 100644
index 0000000..e54d94d
--- /dev/null
+++ b/graphlcd/logos/PREMIERE2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE2_v2_l.glcd b/graphlcd/logos/PREMIERE2_v2_l.glcd
new file mode 100644
index 0000000..0426fd9
--- /dev/null
+++ b/graphlcd/logos/PREMIERE2_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE3_l.glcd b/graphlcd/logos/PREMIERE3_l.glcd
new file mode 100644
index 0000000..ed3c2bf
--- /dev/null
+++ b/graphlcd/logos/PREMIERE3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE3_m.glcd b/graphlcd/logos/PREMIERE3_m.glcd
new file mode 100644
index 0000000..40895d4
--- /dev/null
+++ b/graphlcd/logos/PREMIERE3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE3_v2_l.glcd b/graphlcd/logos/PREMIERE3_v2_l.glcd
new file mode 100644
index 0000000..11ae7da
--- /dev/null
+++ b/graphlcd/logos/PREMIERE3_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE4_l.glcd b/graphlcd/logos/PREMIERE4_l.glcd
new file mode 100644
index 0000000..04ad87b
--- /dev/null
+++ b/graphlcd/logos/PREMIERE4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE4_m.glcd b/graphlcd/logos/PREMIERE4_m.glcd
new file mode 100644
index 0000000..92acc8b
--- /dev/null
+++ b/graphlcd/logos/PREMIERE4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE4_v2_l.glcd b/graphlcd/logos/PREMIERE4_v2_l.glcd
new file mode 100644
index 0000000..5ed2de1
--- /dev/null
+++ b/graphlcd/logos/PREMIERE4_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE5_l.glcd b/graphlcd/logos/PREMIERE5_l.glcd
new file mode 100644
index 0000000..8e124a9
--- /dev/null
+++ b/graphlcd/logos/PREMIERE5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE5_m.glcd b/graphlcd/logos/PREMIERE5_m.glcd
new file mode 100644
index 0000000..10da971
--- /dev/null
+++ b/graphlcd/logos/PREMIERE5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE5_v2_l.glcd b/graphlcd/logos/PREMIERE5_v2_l.glcd
new file mode 100644
index 0000000..b33f00a
--- /dev/null
+++ b/graphlcd/logos/PREMIERE5_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE6_l.glcd b/graphlcd/logos/PREMIERE6_l.glcd
new file mode 100644
index 0000000..e003ee7
--- /dev/null
+++ b/graphlcd/logos/PREMIERE6_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE6_m.glcd b/graphlcd/logos/PREMIERE6_m.glcd
new file mode 100644
index 0000000..81c04cb
--- /dev/null
+++ b/graphlcd/logos/PREMIERE6_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE6_v2_l.glcd b/graphlcd/logos/PREMIERE6_v2_l.glcd
new file mode 100644
index 0000000..ed0dfdd
--- /dev/null
+++ b/graphlcd/logos/PREMIERE6_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE7_l.glcd b/graphlcd/logos/PREMIERE7_l.glcd
new file mode 100644
index 0000000..24e672d
--- /dev/null
+++ b/graphlcd/logos/PREMIERE7_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE7_m.glcd b/graphlcd/logos/PREMIERE7_m.glcd
new file mode 100644
index 0000000..d7b41ce
--- /dev/null
+++ b/graphlcd/logos/PREMIERE7_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PREMIERE7_v2_l.glcd b/graphlcd/logos/PREMIERE7_v2_l.glcd
new file mode 100644
index 0000000..be4259c
--- /dev/null
+++ b/graphlcd/logos/PREMIERE7_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO SIEBEN AUSTRIA_l.glcd b/graphlcd/logos/PRO SIEBEN AUSTRIA_l.glcd
new file mode 100644
index 0000000..5978029
--- /dev/null
+++ b/graphlcd/logos/PRO SIEBEN AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO SIEBEN AUSTRIA_m.glcd b/graphlcd/logos/PRO SIEBEN AUSTRIA_m.glcd
new file mode 100644
index 0000000..2662f32
--- /dev/null
+++ b/graphlcd/logos/PRO SIEBEN AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO SIEBEN SCHWEIZ_l.glcd b/graphlcd/logos/PRO SIEBEN SCHWEIZ_l.glcd
new file mode 100644
index 0000000..86fe673
--- /dev/null
+++ b/graphlcd/logos/PRO SIEBEN SCHWEIZ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO SIEBEN SCHWEIZ_m.glcd b/graphlcd/logos/PRO SIEBEN SCHWEIZ_m.glcd
new file mode 100644
index 0000000..84dab91
--- /dev/null
+++ b/graphlcd/logos/PRO SIEBEN SCHWEIZ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO SIEBEN_l.glcd b/graphlcd/logos/PRO SIEBEN_l.glcd
new file mode 100644
index 0000000..742bca5
--- /dev/null
+++ b/graphlcd/logos/PRO SIEBEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO SIEBEN_m.glcd b/graphlcd/logos/PRO SIEBEN_m.glcd
new file mode 100644
index 0000000..8793dfe
--- /dev/null
+++ b/graphlcd/logos/PRO SIEBEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO SIEBEN_v2_l.glcd b/graphlcd/logos/PRO SIEBEN_v2_l.glcd
new file mode 100644
index 0000000..730d452
--- /dev/null
+++ b/graphlcd/logos/PRO SIEBEN_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PULS_l.glcd b/graphlcd/logos/PULS_l.glcd
new file mode 100644
index 0000000..1179844
--- /dev/null
+++ b/graphlcd/logos/PULS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PULS_m.glcd b/graphlcd/logos/PULS_m.glcd
new file mode 100644
index 0000000..16379cd
--- /dev/null
+++ b/graphlcd/logos/PULS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/QVC GERMANY_l.glcd b/graphlcd/logos/QVC GERMANY_l.glcd
new file mode 100644
index 0000000..414b626
--- /dev/null
+++ b/graphlcd/logos/QVC GERMANY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/QVC GERMANY_m.glcd b/graphlcd/logos/QVC GERMANY_m.glcd
new file mode 100644
index 0000000..0f12f0b
--- /dev/null
+++ b/graphlcd/logos/QVC GERMANY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO 10 GOLD_l.glcd b/graphlcd/logos/RADIO 10 GOLD_l.glcd
new file mode 100644
index 0000000..ac5f5a4
--- /dev/null
+++ b/graphlcd/logos/RADIO 10 GOLD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO 10 GOLD_m.glcd b/graphlcd/logos/RADIO 10 GOLD_m.glcd
new file mode 100644
index 0000000..727d3e1
--- /dev/null
+++ b/graphlcd/logos/RADIO 10 GOLD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO 538_l.glcd b/graphlcd/logos/RADIO 538_l.glcd
new file mode 100644
index 0000000..73bc2e5
--- /dev/null
+++ b/graphlcd/logos/RADIO 538_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO 538_m.glcd b/graphlcd/logos/RADIO 538_m.glcd
new file mode 100644
index 0000000..0d4480c
--- /dev/null
+++ b/graphlcd/logos/RADIO 538_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO MARIA_l.glcd b/graphlcd/logos/RADIO MARIA_l.glcd
new file mode 100644
index 0000000..2d126a9
--- /dev/null
+++ b/graphlcd/logos/RADIO MARIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO MARIA_m.glcd b/graphlcd/logos/RADIO MARIA_m.glcd
new file mode 100644
index 0000000..bea7de8
--- /dev/null
+++ b/graphlcd/logos/RADIO MARIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO MARIA_v2_m.glcd b/graphlcd/logos/RADIO MARIA_v2_m.glcd
new file mode 100644
index 0000000..ada6d4f
--- /dev/null
+++ b/graphlcd/logos/RADIO MARIA_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO MULTIKULTI_l.glcd b/graphlcd/logos/RADIO MULTIKULTI_l.glcd
new file mode 100644
index 0000000..a8b4810
--- /dev/null
+++ b/graphlcd/logos/RADIO MULTIKULTI_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO MULTIKULTI_m.glcd b/graphlcd/logos/RADIO MULTIKULTI_m.glcd
new file mode 100644
index 0000000..108ba5e
--- /dev/null
+++ b/graphlcd/logos/RADIO MULTIKULTI_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO MULTIKULTI_v2_m.glcd b/graphlcd/logos/RADIO MULTIKULTI_v2_m.glcd
new file mode 100644
index 0000000..472042f
--- /dev/null
+++ b/graphlcd/logos/RADIO MULTIKULTI_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIOEINS_l.glcd b/graphlcd/logos/RADIOEINS_l.glcd
new file mode 100644
index 0000000..5c64eb1
--- /dev/null
+++ b/graphlcd/logos/RADIOEINS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIOEINS_m.glcd b/graphlcd/logos/RADIOEINS_m.glcd
new file mode 100644
index 0000000..6178251
--- /dev/null
+++ b/graphlcd/logos/RADIOEINS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI 1_l.glcd b/graphlcd/logos/RAI 1_l.glcd
new file mode 100644
index 0000000..c51b809
--- /dev/null
+++ b/graphlcd/logos/RAI 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI 1_m.glcd b/graphlcd/logos/RAI 1_m.glcd
new file mode 100644
index 0000000..0f8541f
--- /dev/null
+++ b/graphlcd/logos/RAI 1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI 1_v2_m.glcd b/graphlcd/logos/RAI 1_v2_m.glcd
new file mode 100644
index 0000000..4f408da
--- /dev/null
+++ b/graphlcd/logos/RAI 1_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI 2_l.glcd b/graphlcd/logos/RAI 2_l.glcd
new file mode 100644
index 0000000..a1b5ae6
--- /dev/null
+++ b/graphlcd/logos/RAI 2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI 2_m.glcd b/graphlcd/logos/RAI 2_m.glcd
new file mode 100644
index 0000000..a82f388
--- /dev/null
+++ b/graphlcd/logos/RAI 2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI 2_v2_m.glcd b/graphlcd/logos/RAI 2_v2_m.glcd
new file mode 100644
index 0000000..57565ea
--- /dev/null
+++ b/graphlcd/logos/RAI 2_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI 3_l.glcd b/graphlcd/logos/RAI 3_l.glcd
new file mode 100644
index 0000000..f28bbb6
--- /dev/null
+++ b/graphlcd/logos/RAI 3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI 3_m.glcd b/graphlcd/logos/RAI 3_m.glcd
new file mode 100644
index 0000000..98d981d
--- /dev/null
+++ b/graphlcd/logos/RAI 3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI 3_v2_m.glcd b/graphlcd/logos/RAI 3_v2_m.glcd
new file mode 100644
index 0000000..525be2b
--- /dev/null
+++ b/graphlcd/logos/RAI 3_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAZE TV_l.glcd b/graphlcd/logos/RAZE TV_l.glcd
new file mode 100644
index 0000000..9848ef7
--- /dev/null
+++ b/graphlcd/logos/RAZE TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RAZE TV_m.glcd b/graphlcd/logos/RAZE TV_m.glcd
new file mode 100644
index 0000000..87ebafb
--- /dev/null
+++ b/graphlcd/logos/RAZE TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAZE TV_v2_m.glcd b/graphlcd/logos/RAZE TV_v2_m.glcd
new file mode 100644
index 0000000..514d35f
--- /dev/null
+++ b/graphlcd/logos/RAZE TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RBB BERLIN_l.glcd b/graphlcd/logos/RBB BERLIN_l.glcd
new file mode 100644
index 0000000..6b14c51
--- /dev/null
+++ b/graphlcd/logos/RBB BERLIN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RBB BERLIN_m.glcd b/graphlcd/logos/RBB BERLIN_m.glcd
new file mode 100644
index 0000000..521ea31
--- /dev/null
+++ b/graphlcd/logos/RBB BERLIN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RBB BRANDENBURG_l.glcd b/graphlcd/logos/RBB BRANDENBURG_l.glcd
new file mode 100644
index 0000000..7b30016
--- /dev/null
+++ b/graphlcd/logos/RBB BRANDENBURG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RBB BRANDENBURG_m.glcd b/graphlcd/logos/RBB BRANDENBURG_m.glcd
new file mode 100644
index 0000000..98fe110
--- /dev/null
+++ b/graphlcd/logos/RBB BRANDENBURG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REALMADRID_l.glcd b/graphlcd/logos/REALMADRID_l.glcd
new file mode 100644
index 0000000..1b57228
--- /dev/null
+++ b/graphlcd/logos/REALMADRID_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REALMADRID_m.glcd b/graphlcd/logos/REALMADRID_m.glcd
new file mode 100644
index 0000000..40c4d80
--- /dev/null
+++ b/graphlcd/logos/REALMADRID_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-CD-v2_l.glcd b/graphlcd/logos/REPLAY-CD-v2_l.glcd
new file mode 100644
index 0000000..2e8453f
--- /dev/null
+++ b/graphlcd/logos/REPLAY-CD-v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-CD-v2_m.glcd b/graphlcd/logos/REPLAY-CD-v2_m.glcd
new file mode 100644
index 0000000..fb7d75a
--- /dev/null
+++ b/graphlcd/logos/REPLAY-CD-v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-CD_l.glcd b/graphlcd/logos/REPLAY-CD_l.glcd
new file mode 100644
index 0000000..95ef265
--- /dev/null
+++ b/graphlcd/logos/REPLAY-CD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-CD_m.glcd b/graphlcd/logos/REPLAY-CD_m.glcd
new file mode 100644
index 0000000..2bd4022
--- /dev/null
+++ b/graphlcd/logos/REPLAY-CD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-DVD-v2_l.glcd b/graphlcd/logos/REPLAY-DVD-v2_l.glcd
new file mode 100644
index 0000000..5b7af21
--- /dev/null
+++ b/graphlcd/logos/REPLAY-DVD-v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-DVD_l.glcd b/graphlcd/logos/REPLAY-DVD_l.glcd
new file mode 100644
index 0000000..af19b0f
--- /dev/null
+++ b/graphlcd/logos/REPLAY-DVD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-DVD_m.glcd b/graphlcd/logos/REPLAY-DVD_m.glcd
new file mode 100644
index 0000000..6d43fa8
--- /dev/null
+++ b/graphlcd/logos/REPLAY-DVD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-FILE_l.glcd b/graphlcd/logos/REPLAY-FILE_l.glcd
new file mode 100644
index 0000000..cf60fc4
--- /dev/null
+++ b/graphlcd/logos/REPLAY-FILE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-FILE_m.glcd b/graphlcd/logos/REPLAY-FILE_m.glcd
new file mode 100644
index 0000000..3a397c1
--- /dev/null
+++ b/graphlcd/logos/REPLAY-FILE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-IMAGE_l.glcd b/graphlcd/logos/REPLAY-IMAGE_l.glcd
new file mode 100644
index 0000000..6f9ddd1
--- /dev/null
+++ b/graphlcd/logos/REPLAY-IMAGE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-IMAGE_m.glcd b/graphlcd/logos/REPLAY-IMAGE_m.glcd
new file mode 100644
index 0000000..3f240e5
--- /dev/null
+++ b/graphlcd/logos/REPLAY-IMAGE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-MUSIC_l.glcd b/graphlcd/logos/REPLAY-MUSIC_l.glcd
new file mode 100644
index 0000000..f1b2266
--- /dev/null
+++ b/graphlcd/logos/REPLAY-MUSIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-MUSIC_m.glcd b/graphlcd/logos/REPLAY-MUSIC_m.glcd
new file mode 100644
index 0000000..1ea4d01
--- /dev/null
+++ b/graphlcd/logos/REPLAY-MUSIC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-VDR_l.glcd b/graphlcd/logos/REPLAY-VDR_l.glcd
new file mode 100644
index 0000000..d879417
--- /dev/null
+++ b/graphlcd/logos/REPLAY-VDR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-VDR_m.glcd b/graphlcd/logos/REPLAY-VDR_m.glcd
new file mode 100644
index 0000000..7d3a947
--- /dev/null
+++ b/graphlcd/logos/REPLAY-VDR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RFM-TV_m.glcd b/graphlcd/logos/RFM-TV_m.glcd
new file mode 100644
index 0000000..eb731f7
--- /dev/null
+++ b/graphlcd/logos/RFM-TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RHEIN MAIN TV_l.glcd b/graphlcd/logos/RHEIN MAIN TV_l.glcd
new file mode 100644
index 0000000..d539d6b
--- /dev/null
+++ b/graphlcd/logos/RHEIN MAIN TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RHEIN MAIN TV_m.glcd b/graphlcd/logos/RHEIN MAIN TV_m.glcd
new file mode 100644
index 0000000..b1ddd98
--- /dev/null
+++ b/graphlcd/logos/RHEIN MAIN TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RHEIN MAIN TV_v2_m.glcd b/graphlcd/logos/RHEIN MAIN TV_v2_m.glcd
new file mode 100644
index 0000000..121942f
--- /dev/null
+++ b/graphlcd/logos/RHEIN MAIN TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RIRE ET CHANSONS_l.glcd b/graphlcd/logos/RIRE ET CHANSONS_l.glcd
new file mode 100644
index 0000000..47a0168
--- /dev/null
+++ b/graphlcd/logos/RIRE ET CHANSONS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RIRE ET CHANSONS_m.glcd b/graphlcd/logos/RIRE ET CHANSONS_m.glcd
new file mode 100644
index 0000000..149cbd8
--- /dev/null
+++ b/graphlcd/logos/RIRE ET CHANSONS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ROCK ANTENNE_l.glcd b/graphlcd/logos/ROCK ANTENNE_l.glcd
new file mode 100644
index 0000000..1a7f249
--- /dev/null
+++ b/graphlcd/logos/ROCK ANTENNE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ROCK ANTENNE_m.glcd b/graphlcd/logos/ROCK ANTENNE_m.glcd
new file mode 100644
index 0000000..5ef1b5d
--- /dev/null
+++ b/graphlcd/logos/ROCK ANTENNE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ROCK ANTENNE_v2_m.glcd b/graphlcd/logos/ROCK ANTENNE_v2_m.glcd
new file mode 100644
index 0000000..c1a67d7
--- /dev/null
+++ b/graphlcd/logos/ROCK ANTENNE_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RSR COULEUR 3_l.glcd b/graphlcd/logos/RSR COULEUR 3_l.glcd
new file mode 100644
index 0000000..7179318
--- /dev/null
+++ b/graphlcd/logos/RSR COULEUR 3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RSR COULEUR 3_m.glcd b/graphlcd/logos/RSR COULEUR 3_m.glcd
new file mode 100644
index 0000000..bcd4494
--- /dev/null
+++ b/graphlcd/logos/RSR COULEUR 3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTBF SAT_l.glcd b/graphlcd/logos/RTBF SAT_l.glcd
new file mode 100644
index 0000000..3e3bab1
--- /dev/null
+++ b/graphlcd/logos/RTBF SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTBF SAT_m.glcd b/graphlcd/logos/RTBF SAT_m.glcd
new file mode 100644
index 0000000..f84b460
--- /dev/null
+++ b/graphlcd/logos/RTBF SAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL 2 AUSTRIA_l.glcd b/graphlcd/logos/RTL 2 AUSTRIA_l.glcd
new file mode 100644
index 0000000..a054c59
--- /dev/null
+++ b/graphlcd/logos/RTL 2 AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL 2 AUSTRIA_m.glcd b/graphlcd/logos/RTL 2 AUSTRIA_m.glcd
new file mode 100644
index 0000000..13f12a1
--- /dev/null
+++ b/graphlcd/logos/RTL 2 AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL 2_l.glcd b/graphlcd/logos/RTL 2_l.glcd
new file mode 100644
index 0000000..a054c59
--- /dev/null
+++ b/graphlcd/logos/RTL 2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL 2_m.glcd b/graphlcd/logos/RTL 2_m.glcd
new file mode 100644
index 0000000..13f12a1
--- /dev/null
+++ b/graphlcd/logos/RTL 2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL AUSTRIA_l.glcd b/graphlcd/logos/RTL AUSTRIA_l.glcd
new file mode 100644
index 0000000..5c54cfe
--- /dev/null
+++ b/graphlcd/logos/RTL AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL AUSTRIA_m.glcd b/graphlcd/logos/RTL AUSTRIA_m.glcd
new file mode 100644
index 0000000..8c51123
--- /dev/null
+++ b/graphlcd/logos/RTL AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL AUSTRIA_v2_m.glcd b/graphlcd/logos/RTL AUSTRIA_v2_m.glcd
new file mode 100644
index 0000000..25ee6ea
--- /dev/null
+++ b/graphlcd/logos/RTL AUSTRIA_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL FM_l.glcd b/graphlcd/logos/RTL FM_l.glcd
new file mode 100644
index 0000000..a483538
--- /dev/null
+++ b/graphlcd/logos/RTL FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL FM_m.glcd b/graphlcd/logos/RTL FM_m.glcd
new file mode 100644
index 0000000..f480738
--- /dev/null
+++ b/graphlcd/logos/RTL FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL RADIO_l.glcd b/graphlcd/logos/RTL RADIO_l.glcd
new file mode 100644
index 0000000..d72fc78
--- /dev/null
+++ b/graphlcd/logos/RTL RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL RADIO_m.glcd b/graphlcd/logos/RTL RADIO_m.glcd
new file mode 100644
index 0000000..865126e
--- /dev/null
+++ b/graphlcd/logos/RTL RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL SHOP_l.glcd b/graphlcd/logos/RTL SHOP_l.glcd
new file mode 100644
index 0000000..18241d6
--- /dev/null
+++ b/graphlcd/logos/RTL SHOP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL SHOP_m.glcd b/graphlcd/logos/RTL SHOP_m.glcd
new file mode 100644
index 0000000..0fd8fcc
--- /dev/null
+++ b/graphlcd/logos/RTL SHOP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL SHOP_v2_m.glcd b/graphlcd/logos/RTL SHOP_v2_m.glcd
new file mode 100644
index 0000000..1a3c945
--- /dev/null
+++ b/graphlcd/logos/RTL SHOP_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL TELE LETZEBURG_l.glcd b/graphlcd/logos/RTL TELE LETZEBURG_l.glcd
new file mode 100644
index 0000000..3381dfb
--- /dev/null
+++ b/graphlcd/logos/RTL TELE LETZEBURG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL TELE LETZEBURG_m.glcd b/graphlcd/logos/RTL TELE LETZEBURG_m.glcd
new file mode 100644
index 0000000..4b4b4dc
--- /dev/null
+++ b/graphlcd/logos/RTL TELE LETZEBURG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL TELE LETZEBURG_v2_l.glcd b/graphlcd/logos/RTL TELE LETZEBURG_v2_l.glcd
new file mode 100644
index 0000000..9a29b21
--- /dev/null
+++ b/graphlcd/logos/RTL TELE LETZEBURG_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL TELEVISION_l.glcd b/graphlcd/logos/RTL TELEVISION_l.glcd
new file mode 100644
index 0000000..5c54cfe
--- /dev/null
+++ b/graphlcd/logos/RTL TELEVISION_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL TELEVISION_m.glcd b/graphlcd/logos/RTL TELEVISION_m.glcd
new file mode 100644
index 0000000..9b13aa2
--- /dev/null
+++ b/graphlcd/logos/RTL TELEVISION_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL4_l.glcd b/graphlcd/logos/RTL4_l.glcd
new file mode 100644
index 0000000..b84524f
--- /dev/null
+++ b/graphlcd/logos/RTL4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL4_m.glcd b/graphlcd/logos/RTL4_m.glcd
new file mode 100644
index 0000000..81c34b5
--- /dev/null
+++ b/graphlcd/logos/RTL4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL5_l.glcd b/graphlcd/logos/RTL5_l.glcd
new file mode 100644
index 0000000..ab42540
--- /dev/null
+++ b/graphlcd/logos/RTL5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL5_m.glcd b/graphlcd/logos/RTL5_m.glcd
new file mode 100644
index 0000000..351a26a
--- /dev/null
+++ b/graphlcd/logos/RTL5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTM-MAROC_l.glcd b/graphlcd/logos/RTM-MAROC_l.glcd
new file mode 100644
index 0000000..ff303d1
--- /dev/null
+++ b/graphlcd/logos/RTM-MAROC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTP INT_l.glcd b/graphlcd/logos/RTP INT_l.glcd
new file mode 100644
index 0000000..51695de
--- /dev/null
+++ b/graphlcd/logos/RTP INT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTP INT_m.glcd b/graphlcd/logos/RTP INT_m.glcd
new file mode 100644
index 0000000..4b7263b
--- /dev/null
+++ b/graphlcd/logos/RTP INT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAILING CHANNEL_l.glcd b/graphlcd/logos/SAILING CHANNEL_l.glcd
new file mode 100644
index 0000000..20f8b7e
--- /dev/null
+++ b/graphlcd/logos/SAILING CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT1 AUSTRIA_l.glcd b/graphlcd/logos/SAT1 AUSTRIA_l.glcd
new file mode 100644
index 0000000..041b996
--- /dev/null
+++ b/graphlcd/logos/SAT1 AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT1 AUSTRIA_m.glcd b/graphlcd/logos/SAT1 AUSTRIA_m.glcd
new file mode 100644
index 0000000..2882006
--- /dev/null
+++ b/graphlcd/logos/SAT1 AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT1 AUSTRIA_v2_m.glcd b/graphlcd/logos/SAT1 AUSTRIA_v2_m.glcd
new file mode 100644
index 0000000..fea6fb2
--- /dev/null
+++ b/graphlcd/logos/SAT1 AUSTRIA_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT1 SCHWEIZ_l.glcd b/graphlcd/logos/SAT1 SCHWEIZ_l.glcd
new file mode 100644
index 0000000..6c7469d
--- /dev/null
+++ b/graphlcd/logos/SAT1 SCHWEIZ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT1 SCHWEIZ_m.glcd b/graphlcd/logos/SAT1 SCHWEIZ_m.glcd
new file mode 100644
index 0000000..d3a5dec
--- /dev/null
+++ b/graphlcd/logos/SAT1 SCHWEIZ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT1_l.glcd b/graphlcd/logos/SAT1_l.glcd
new file mode 100644
index 0000000..bfcead0
--- /dev/null
+++ b/graphlcd/logos/SAT1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT1_m.glcd b/graphlcd/logos/SAT1_m.glcd
new file mode 100644
index 0000000..f57e0ff
--- /dev/null
+++ b/graphlcd/logos/SAT1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SBS6_l.glcd b/graphlcd/logos/SBS6_l.glcd
new file mode 100644
index 0000000..d2893da
--- /dev/null
+++ b/graphlcd/logos/SBS6_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SBS6_m.glcd b/graphlcd/logos/SBS6_m.glcd
new file mode 100644
index 0000000..8b10d0f
--- /dev/null
+++ b/graphlcd/logos/SBS6_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SILVERLINE_l.glcd b/graphlcd/logos/SILVERLINE_l.glcd
new file mode 100644
index 0000000..9536a08
--- /dev/null
+++ b/graphlcd/logos/SILVERLINE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY RADIO NL_l.glcd b/graphlcd/logos/SKY RADIO NL_l.glcd
new file mode 100644
index 0000000..5bf1fef
--- /dev/null
+++ b/graphlcd/logos/SKY RADIO NL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY RADIO NL_m.glcd b/graphlcd/logos/SKY RADIO NL_m.glcd
new file mode 100644
index 0000000..d55eac7
--- /dev/null
+++ b/graphlcd/logos/SKY RADIO NL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SONNENKLAR TV_l.glcd b/graphlcd/logos/SONNENKLAR TV_l.glcd
new file mode 100644
index 0000000..31491c9
--- /dev/null
+++ b/graphlcd/logos/SONNENKLAR TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SONNENKLAR TV_m.glcd b/graphlcd/logos/SONNENKLAR TV_m.glcd
new file mode 100644
index 0000000..c0d3943
--- /dev/null
+++ b/graphlcd/logos/SONNENKLAR TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SONNENKLAR TV_v2_m.glcd b/graphlcd/logos/SONNENKLAR TV_v2_m.glcd
new file mode 100644
index 0000000..588c83a
--- /dev/null
+++ b/graphlcd/logos/SONNENKLAR TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SPIEGEL TV XXP_l.glcd b/graphlcd/logos/SPIEGEL TV XXP_l.glcd
new file mode 100644
index 0000000..0b937d6
--- /dev/null
+++ b/graphlcd/logos/SPIEGEL TV XXP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SPUTNIK_l.glcd b/graphlcd/logos/SPUTNIK_l.glcd
new file mode 100644
index 0000000..08467e4
--- /dev/null
+++ b/graphlcd/logos/SPUTNIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SPUTNIK_m.glcd b/graphlcd/logos/SPUTNIK_m.glcd
new file mode 100644
index 0000000..4e40b73
--- /dev/null
+++ b/graphlcd/logos/SPUTNIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SPUTNIK_v2_l.glcd b/graphlcd/logos/SPUTNIK_v2_l.glcd
new file mode 100644
index 0000000..c785171
--- /dev/null
+++ b/graphlcd/logos/SPUTNIK_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SPUTNIK_v2_m.glcd b/graphlcd/logos/SPUTNIK_v2_m.glcd
new file mode 100644
index 0000000..2f45511
--- /dev/null
+++ b/graphlcd/logos/SPUTNIK_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SR 1_l.glcd b/graphlcd/logos/SR 1_l.glcd
new file mode 100644
index 0000000..92ec5cc
--- /dev/null
+++ b/graphlcd/logos/SR 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SR 1_m.glcd b/graphlcd/logos/SR 1_m.glcd
new file mode 100644
index 0000000..b852f51
--- /dev/null
+++ b/graphlcd/logos/SR 1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SR FERNSEHEN SW_l.glcd b/graphlcd/logos/SR FERNSEHEN SW_l.glcd
new file mode 100644
index 0000000..a543eda
--- /dev/null
+++ b/graphlcd/logos/SR FERNSEHEN SW_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SR FERNSEHEN SW_m.glcd b/graphlcd/logos/SR FERNSEHEN SW_m.glcd
new file mode 100644
index 0000000..a320e1d
--- /dev/null
+++ b/graphlcd/logos/SR FERNSEHEN SW_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SR FERNSEHEN SW_v2_m.glcd b/graphlcd/logos/SR FERNSEHEN SW_v2_m.glcd
new file mode 100644
index 0000000..942a6a7
--- /dev/null
+++ b/graphlcd/logos/SR FERNSEHEN SW_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/STUDIO UNIVERSAL_l.glcd b/graphlcd/logos/STUDIO UNIVERSAL_l.glcd
new file mode 100644
index 0000000..83bf5e9
--- /dev/null
+++ b/graphlcd/logos/STUDIO UNIVERSAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/STUDIO UNIVERSAL_m.glcd b/graphlcd/logos/STUDIO UNIVERSAL_m.glcd
new file mode 100644
index 0000000..5161ac6
--- /dev/null
+++ b/graphlcd/logos/STUDIO UNIVERSAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUEDWEST FS BW_l.glcd b/graphlcd/logos/SUEDWEST FS BW_l.glcd
new file mode 100644
index 0000000..db4a379
--- /dev/null
+++ b/graphlcd/logos/SUEDWEST FS BW_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUEDWEST FS BW_m.glcd b/graphlcd/logos/SUEDWEST FS BW_m.glcd
new file mode 100644
index 0000000..aad0a8b
--- /dev/null
+++ b/graphlcd/logos/SUEDWEST FS BW_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUEDWEST FS BW_v2_l.glcd b/graphlcd/logos/SUEDWEST FS BW_v2_l.glcd
new file mode 100644
index 0000000..8ba6648
--- /dev/null
+++ b/graphlcd/logos/SUEDWEST FS BW_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUEDWEST FS RP_l.glcd b/graphlcd/logos/SUEDWEST FS RP_l.glcd
new file mode 100644
index 0000000..59529d2
--- /dev/null
+++ b/graphlcd/logos/SUEDWEST FS RP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUEDWEST FS RP_m.glcd b/graphlcd/logos/SUEDWEST FS RP_m.glcd
new file mode 100644
index 0000000..ef6109d
--- /dev/null
+++ b/graphlcd/logos/SUEDWEST FS RP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUEDWEST FS RP_v2_l.glcd b/graphlcd/logos/SUEDWEST FS RP_v2_l.glcd
new file mode 100644
index 0000000..6a2302a
--- /dev/null
+++ b/graphlcd/logos/SUEDWEST FS RP_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUNSHINE LIVE_l.glcd b/graphlcd/logos/SUNSHINE LIVE_l.glcd
new file mode 100644
index 0000000..fd152b0
--- /dev/null
+++ b/graphlcd/logos/SUNSHINE LIVE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUNSHINE LIVE_m.glcd b/graphlcd/logos/SUNSHINE LIVE_m.glcd
new file mode 100644
index 0000000..39d0871
--- /dev/null
+++ b/graphlcd/logos/SUNSHINE LIVE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUNSHINE LIVE_v2_m.glcd b/graphlcd/logos/SUNSHINE LIVE_v2_m.glcd
new file mode 100644
index 0000000..a8a92f4
--- /dev/null
+++ b/graphlcd/logos/SUNSHINE LIVE_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER RTL AUSTRIA_l.glcd b/graphlcd/logos/SUPER RTL AUSTRIA_l.glcd
new file mode 100644
index 0000000..fbb8a0f
--- /dev/null
+++ b/graphlcd/logos/SUPER RTL AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER RTL AUSTRIA_m.glcd b/graphlcd/logos/SUPER RTL AUSTRIA_m.glcd
new file mode 100644
index 0000000..5caba7c
--- /dev/null
+++ b/graphlcd/logos/SUPER RTL AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER RTL_l.glcd b/graphlcd/logos/SUPER RTL_l.glcd
new file mode 100644
index 0000000..fbb8a0f
--- /dev/null
+++ b/graphlcd/logos/SUPER RTL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER RTL_m.glcd b/graphlcd/logos/SUPER RTL_m.glcd
new file mode 100644
index 0000000..24fb28b
--- /dev/null
+++ b/graphlcd/logos/SUPER RTL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER RTL_v2_l.glcd b/graphlcd/logos/SUPER RTL_v2_l.glcd
new file mode 100644
index 0000000..2e08d09
--- /dev/null
+++ b/graphlcd/logos/SUPER RTL_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR2_l.glcd b/graphlcd/logos/SWR2_l.glcd
new file mode 100644
index 0000000..2925575
--- /dev/null
+++ b/graphlcd/logos/SWR2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR2_m.glcd b/graphlcd/logos/SWR2_m.glcd
new file mode 100644
index 0000000..c874f4c
--- /dev/null
+++ b/graphlcd/logos/SWR2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR2_v2_m.glcd b/graphlcd/logos/SWR2_v2_m.glcd
new file mode 100644
index 0000000..224d21d
--- /dev/null
+++ b/graphlcd/logos/SWR2_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/Sat1 SCHWEIZ_v2_m.glcd b/graphlcd/logos/Sat1 SCHWEIZ_v2_m.glcd
new file mode 100644
index 0000000..a01a9e0
--- /dev/null
+++ b/graphlcd/logos/Sat1 SCHWEIZ_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TANGO TV_l.glcd b/graphlcd/logos/TANGO TV_l.glcd
new file mode 100644
index 0000000..e90433a
--- /dev/null
+++ b/graphlcd/logos/TANGO TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TANGO TV_m.glcd b/graphlcd/logos/TANGO TV_m.glcd
new file mode 100644
index 0000000..402945a
--- /dev/null
+++ b/graphlcd/logos/TANGO TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TELE 5_l.glcd b/graphlcd/logos/TELE 5_l.glcd
new file mode 100644
index 0000000..2ecac47
--- /dev/null
+++ b/graphlcd/logos/TELE 5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TELE 5_m.glcd b/graphlcd/logos/TELE 5_m.glcd
new file mode 100644
index 0000000..0409527
--- /dev/null
+++ b/graphlcd/logos/TELE 5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TELE 5_v2_m.glcd b/graphlcd/logos/TELE 5_v2_m.glcd
new file mode 100644
index 0000000..cdbb250
--- /dev/null
+++ b/graphlcd/logos/TELE 5_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TMF_l.glcd b/graphlcd/logos/TMF_l.glcd
new file mode 100644
index 0000000..5f32063
--- /dev/null
+++ b/graphlcd/logos/TMF_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TMF_m.glcd b/graphlcd/logos/TMF_m.glcd
new file mode 100644
index 0000000..70b2d0e
--- /dev/null
+++ b/graphlcd/logos/TMF_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TRACE TV_l.glcd b/graphlcd/logos/TRACE TV_l.glcd
new file mode 100644
index 0000000..c9bfb2a
--- /dev/null
+++ b/graphlcd/logos/TRACE TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TRW AM_l.glcd b/graphlcd/logos/TRW AM_l.glcd
new file mode 100644
index 0000000..ffdfad5
--- /dev/null
+++ b/graphlcd/logos/TRW AM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TRW AM_m.glcd b/graphlcd/logos/TRW AM_m.glcd
new file mode 100644
index 0000000..c2b8d15
--- /dev/null
+++ b/graphlcd/logos/TRW AM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV 5_l.glcd b/graphlcd/logos/TV 5_l.glcd
new file mode 100644
index 0000000..ee181f5
--- /dev/null
+++ b/graphlcd/logos/TV 5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV BERLIN_l.glcd b/graphlcd/logos/TV BERLIN_l.glcd
new file mode 100644
index 0000000..32de271
--- /dev/null
+++ b/graphlcd/logos/TV BERLIN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV BERLIN_m.glcd b/graphlcd/logos/TV BERLIN_m.glcd
new file mode 100644
index 0000000..84c5d07
--- /dev/null
+++ b/graphlcd/logos/TV BERLIN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV BERLIN_v2_l.glcd b/graphlcd/logos/TV BERLIN_v2_l.glcd
new file mode 100644
index 0000000..5b0839f
--- /dev/null
+++ b/graphlcd/logos/TV BERLIN_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV BERLIN_v2_m.glcd b/graphlcd/logos/TV BERLIN_v2_m.glcd
new file mode 100644
index 0000000..a26a9db
--- /dev/null
+++ b/graphlcd/logos/TV BERLIN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV BERLIN_v3_m.glcd b/graphlcd/logos/TV BERLIN_v3_m.glcd
new file mode 100644
index 0000000..779b35e
--- /dev/null
+++ b/graphlcd/logos/TV BERLIN_v3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV GALICIA_m.glcd b/graphlcd/logos/TV GALICIA_m.glcd
new file mode 100644
index 0000000..2f8c65a
--- /dev/null
+++ b/graphlcd/logos/TV GALICIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV GUSTO_l.glcd b/graphlcd/logos/TV GUSTO_l.glcd
new file mode 100644
index 0000000..d344f37
--- /dev/null
+++ b/graphlcd/logos/TV GUSTO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV TRAVEL SHOP_l.glcd b/graphlcd/logos/TV TRAVEL SHOP_l.glcd
new file mode 100644
index 0000000..ba4fd8a
--- /dev/null
+++ b/graphlcd/logos/TV TRAVEL SHOP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV TRAVEL SHOP_m.glcd b/graphlcd/logos/TV TRAVEL SHOP_m.glcd
new file mode 100644
index 0000000..e143ea2
--- /dev/null
+++ b/graphlcd/logos/TV TRAVEL SHOP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV TRAVEL SHOP_v2_m.glcd b/graphlcd/logos/TV TRAVEL SHOP_v2_m.glcd
new file mode 100644
index 0000000..c38eab2
--- /dev/null
+++ b/graphlcd/logos/TV TRAVEL SHOP_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV5 EUROPE_l.glcd b/graphlcd/logos/TV5 EUROPE_l.glcd
new file mode 100644
index 0000000..55d1905
--- /dev/null
+++ b/graphlcd/logos/TV5 EUROPE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV5 EUROPE_m.glcd b/graphlcd/logos/TV5 EUROPE_m.glcd
new file mode 100644
index 0000000..11a32ae
--- /dev/null
+++ b/graphlcd/logos/TV5 EUROPE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV6_l.glcd b/graphlcd/logos/TV6_l.glcd
new file mode 100644
index 0000000..ff202ab
--- /dev/null
+++ b/graphlcd/logos/TV6_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV6_m.glcd b/graphlcd/logos/TV6_m.glcd
new file mode 100644
index 0000000..bc14ec3
--- /dev/null
+++ b/graphlcd/logos/TV6_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV7_l.glcd b/graphlcd/logos/TV7_l.glcd
new file mode 100644
index 0000000..30c8d92
--- /dev/null
+++ b/graphlcd/logos/TV7_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TVC INT_l.glcd b/graphlcd/logos/TVC INT_l.glcd
new file mode 100644
index 0000000..c809267
--- /dev/null
+++ b/graphlcd/logos/TVC INT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TVC INT_m.glcd b/graphlcd/logos/TVC INT_m.glcd
new file mode 100644
index 0000000..c528d62
--- /dev/null
+++ b/graphlcd/logos/TVC INT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TVE INT_l.glcd b/graphlcd/logos/TVE INT_l.glcd
new file mode 100644
index 0000000..f8056bc
--- /dev/null
+++ b/graphlcd/logos/TVE INT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TVE INT_m.glcd b/graphlcd/logos/TVE INT_m.glcd
new file mode 100644
index 0000000..a38ddbd
--- /dev/null
+++ b/graphlcd/logos/TVE INT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TW1_l.glcd b/graphlcd/logos/TW1_l.glcd
new file mode 100644
index 0000000..5928b5f
--- /dev/null
+++ b/graphlcd/logos/TW1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TW1_m.glcd b/graphlcd/logos/TW1_m.glcd
new file mode 100644
index 0000000..fabea79
--- /dev/null
+++ b/graphlcd/logos/TW1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TW1_v2_m.glcd b/graphlcd/logos/TW1_v2_m.glcd
new file mode 100644
index 0000000..ac93a8c
--- /dev/null
+++ b/graphlcd/logos/TW1_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/V8_l.glcd b/graphlcd/logos/V8_l.glcd
new file mode 100644
index 0000000..6cadbf8
--- /dev/null
+++ b/graphlcd/logos/V8_l.glcd
Binary files differ
diff --git a/graphlcd/logos/V8_m.glcd b/graphlcd/logos/V8_m.glcd
new file mode 100644
index 0000000..c51daf9
--- /dev/null
+++ b/graphlcd/logos/V8_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VERONICA RADIO_l.glcd b/graphlcd/logos/VERONICA RADIO_l.glcd
new file mode 100644
index 0000000..a34e1fa
--- /dev/null
+++ b/graphlcd/logos/VERONICA RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VERONICA RADIO_m.glcd b/graphlcd/logos/VERONICA RADIO_m.glcd
new file mode 100644
index 0000000..01767c2
--- /dev/null
+++ b/graphlcd/logos/VERONICA RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VH1 CLASSIC_l.glcd b/graphlcd/logos/VH1 CLASSIC_l.glcd
new file mode 100644
index 0000000..63cb4a9
--- /dev/null
+++ b/graphlcd/logos/VH1 CLASSIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VH1 CLASSIC_m.glcd b/graphlcd/logos/VH1 CLASSIC_m.glcd
new file mode 100644
index 0000000..c2ca403
--- /dev/null
+++ b/graphlcd/logos/VH1 CLASSIC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VH1_l.glcd b/graphlcd/logos/VH1_l.glcd
new file mode 100644
index 0000000..b48d07c
--- /dev/null
+++ b/graphlcd/logos/VH1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VH1_m.glcd b/graphlcd/logos/VH1_m.glcd
new file mode 100644
index 0000000..a092a41
--- /dev/null
+++ b/graphlcd/logos/VH1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VIBRATION_l.glcd b/graphlcd/logos/VIBRATION_l.glcd
new file mode 100644
index 0000000..ddba5c6
--- /dev/null
+++ b/graphlcd/logos/VIBRATION_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VIBRATION_m.glcd b/graphlcd/logos/VIBRATION_m.glcd
new file mode 100644
index 0000000..7118bc7
--- /dev/null
+++ b/graphlcd/logos/VIBRATION_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA PLUS_l.glcd b/graphlcd/logos/VIVA PLUS_l.glcd
new file mode 100644
index 0000000..8e9d4d0
--- /dev/null
+++ b/graphlcd/logos/VIVA PLUS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA PLUS_m.glcd b/graphlcd/logos/VIVA PLUS_m.glcd
new file mode 100644
index 0000000..fc087da
--- /dev/null
+++ b/graphlcd/logos/VIVA PLUS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA PLUS_v2_m.glcd b/graphlcd/logos/VIVA PLUS_v2_m.glcd
new file mode 100644
index 0000000..c823d68
--- /dev/null
+++ b/graphlcd/logos/VIVA PLUS_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA_l.glcd b/graphlcd/logos/VIVA_l.glcd
new file mode 100644
index 0000000..b0ebf2c
--- /dev/null
+++ b/graphlcd/logos/VIVA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA_m.glcd b/graphlcd/logos/VIVA_m.glcd
new file mode 100644
index 0000000..2cd6258
--- /dev/null
+++ b/graphlcd/logos/VIVA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VOLTAGE_l.glcd b/graphlcd/logos/VOLTAGE_l.glcd
new file mode 100644
index 0000000..f5e5ea8
--- /dev/null
+++ b/graphlcd/logos/VOLTAGE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VOLTAGE_m.glcd b/graphlcd/logos/VOLTAGE_m.glcd
new file mode 100644
index 0000000..8e45857
--- /dev/null
+++ b/graphlcd/logos/VOLTAGE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX AUSTRIA_l.glcd b/graphlcd/logos/VOX AUSTRIA_l.glcd
new file mode 100644
index 0000000..6a884a5
--- /dev/null
+++ b/graphlcd/logos/VOX AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX AUSTRIA_m.glcd b/graphlcd/logos/VOX AUSTRIA_m.glcd
new file mode 100644
index 0000000..11049d8
--- /dev/null
+++ b/graphlcd/logos/VOX AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_l.glcd b/graphlcd/logos/VOX_l.glcd
new file mode 100644
index 0000000..6a884a5
--- /dev/null
+++ b/graphlcd/logos/VOX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_m.glcd b/graphlcd/logos/VOX_m.glcd
new file mode 100644
index 0000000..1202e85
--- /dev/null
+++ b/graphlcd/logos/VOX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_v2_m.glcd b/graphlcd/logos/VOX_v2_m.glcd
new file mode 100644
index 0000000..f2a3bd2
--- /dev/null
+++ b/graphlcd/logos/VOX_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR3_l.glcd b/graphlcd/logos/WDR3_l.glcd
new file mode 100644
index 0000000..12264fb
--- /dev/null
+++ b/graphlcd/logos/WDR3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR3_m.glcd b/graphlcd/logos/WDR3_m.glcd
new file mode 100644
index 0000000..dcc883a
--- /dev/null
+++ b/graphlcd/logos/WDR3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR5_l.glcd b/graphlcd/logos/WDR5_l.glcd
new file mode 100644
index 0000000..f38cde9
--- /dev/null
+++ b/graphlcd/logos/WDR5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR5_m.glcd b/graphlcd/logos/WDR5_m.glcd
new file mode 100644
index 0000000..7a2f3c8
--- /dev/null
+++ b/graphlcd/logos/WDR5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_l.glcd b/graphlcd/logos/WDR_l.glcd
new file mode 100644
index 0000000..b44031c
--- /dev/null
+++ b/graphlcd/logos/WDR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_m.glcd b/graphlcd/logos/WDR_m.glcd
new file mode 100644
index 0000000..7bad7c0
--- /dev/null
+++ b/graphlcd/logos/WDR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_v2_l.glcd b/graphlcd/logos/WDR_v2_l.glcd
new file mode 100644
index 0000000..f1af02a
--- /dev/null
+++ b/graphlcd/logos/WDR_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_v2_m.glcd b/graphlcd/logos/WDR_v2_m.glcd
new file mode 100644
index 0000000..0dd0d82
--- /dev/null
+++ b/graphlcd/logos/WDR_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_v3_m.glcd b/graphlcd/logos/WDR_v3_m.glcd
new file mode 100644
index 0000000..0f04d43
--- /dev/null
+++ b/graphlcd/logos/WDR_v3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WEIN TV_l.glcd b/graphlcd/logos/WEIN TV_l.glcd
new file mode 100644
index 0000000..b537280
--- /dev/null
+++ b/graphlcd/logos/WEIN TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WETTER FERNSEHEN_l.glcd b/graphlcd/logos/WETTER FERNSEHEN_l.glcd
new file mode 100644
index 0000000..0095d81
--- /dev/null
+++ b/graphlcd/logos/WETTER FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WISHLINE_l.glcd b/graphlcd/logos/WISHLINE_l.glcd
new file mode 100644
index 0000000..d9d6b5c
--- /dev/null
+++ b/graphlcd/logos/WISHLINE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WISHLINE_m.glcd b/graphlcd/logos/WISHLINE_m.glcd
new file mode 100644
index 0000000..2d281a8
--- /dev/null
+++ b/graphlcd/logos/WISHLINE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/X-ZONE_l.glcd b/graphlcd/logos/X-ZONE_l.glcd
new file mode 100644
index 0000000..43c1866
--- /dev/null
+++ b/graphlcd/logos/X-ZONE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/X-ZONE_m.glcd b/graphlcd/logos/X-ZONE_m.glcd
new file mode 100644
index 0000000..e8ff623
--- /dev/null
+++ b/graphlcd/logos/X-ZONE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/XXL_l.glcd b/graphlcd/logos/XXL_l.glcd
new file mode 100644
index 0000000..3232a51
--- /dev/null
+++ b/graphlcd/logos/XXL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/XXL_m.glcd b/graphlcd/logos/XXL_m.glcd
new file mode 100644
index 0000000..04d1224
--- /dev/null
+++ b/graphlcd/logos/XXL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/XXP_l.glcd b/graphlcd/logos/XXP_l.glcd
new file mode 100644
index 0000000..70d2d28
--- /dev/null
+++ b/graphlcd/logos/XXP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/XXP_m.glcd b/graphlcd/logos/XXP_m.glcd
new file mode 100644
index 0000000..84eb572
--- /dev/null
+++ b/graphlcd/logos/XXP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/XXP_v2_m.glcd b/graphlcd/logos/XXP_v2_m.glcd
new file mode 100644
index 0000000..55b0897
--- /dev/null
+++ b/graphlcd/logos/XXP_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/YAM FM_l.glcd b/graphlcd/logos/YAM FM_l.glcd
new file mode 100644
index 0000000..e6206b7
--- /dev/null
+++ b/graphlcd/logos/YAM FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/YAM FM_m.glcd b/graphlcd/logos/YAM FM_m.glcd
new file mode 100644
index 0000000..f059f03
--- /dev/null
+++ b/graphlcd/logos/YAM FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/YORIN FM_l.glcd b/graphlcd/logos/YORIN FM_l.glcd
new file mode 100644
index 0000000..5d1d13e
--- /dev/null
+++ b/graphlcd/logos/YORIN FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/YORIN FM_m.glcd b/graphlcd/logos/YORIN FM_m.glcd
new file mode 100644
index 0000000..66d2eee
--- /dev/null
+++ b/graphlcd/logos/YORIN FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/YOU FM_l.glcd b/graphlcd/logos/YOU FM_l.glcd
new file mode 100644
index 0000000..a038514
--- /dev/null
+++ b/graphlcd/logos/YOU FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/YOU FM_m.glcd b/graphlcd/logos/YOU FM_m.glcd
new file mode 100644
index 0000000..e99fd9c
--- /dev/null
+++ b/graphlcd/logos/YOU FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF DOKU-KIKA_l.glcd b/graphlcd/logos/ZDF DOKU-KIKA_l.glcd
new file mode 100644
index 0000000..e542a01
--- /dev/null
+++ b/graphlcd/logos/ZDF DOKU-KIKA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF DOKU-KIKA_m.glcd b/graphlcd/logos/ZDF DOKU-KIKA_m.glcd
new file mode 100644
index 0000000..552d2f9
--- /dev/null
+++ b/graphlcd/logos/ZDF DOKU-KIKA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF DOKUKANAL_l.glcd b/graphlcd/logos/ZDF DOKUKANAL_l.glcd
new file mode 100644
index 0000000..2ccd76e
--- /dev/null
+++ b/graphlcd/logos/ZDF DOKUKANAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF DOKUKANAL_m.glcd b/graphlcd/logos/ZDF DOKUKANAL_m.glcd
new file mode 100644
index 0000000..d822d2d
--- /dev/null
+++ b/graphlcd/logos/ZDF DOKUKANAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF DOKUKANAL_v2_l.glcd b/graphlcd/logos/ZDF DOKUKANAL_v2_l.glcd
new file mode 100644
index 0000000..b3f0dda
--- /dev/null
+++ b/graphlcd/logos/ZDF DOKUKANAL_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF DOKUKANAL_v2_m.glcd b/graphlcd/logos/ZDF DOKUKANAL_v2_m.glcd
new file mode 100644
index 0000000..93dac7b
--- /dev/null
+++ b/graphlcd/logos/ZDF DOKUKANAL_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF INFO-3SAT_l.glcd b/graphlcd/logos/ZDF INFO-3SAT_l.glcd
new file mode 100644
index 0000000..1bb5c30
--- /dev/null
+++ b/graphlcd/logos/ZDF INFO-3SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF INFO-3SAT_m.glcd b/graphlcd/logos/ZDF INFO-3SAT_m.glcd
new file mode 100644
index 0000000..fce44d8
--- /dev/null
+++ b/graphlcd/logos/ZDF INFO-3SAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF INFOKANAL_l.glcd b/graphlcd/logos/ZDF INFOKANAL_l.glcd
new file mode 100644
index 0000000..7ba43e8
--- /dev/null
+++ b/graphlcd/logos/ZDF INFOKANAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF INFOKANAL_m.glcd b/graphlcd/logos/ZDF INFOKANAL_m.glcd
new file mode 100644
index 0000000..58ebe28
--- /dev/null
+++ b/graphlcd/logos/ZDF INFOKANAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF INFOKANAL_v2_l.glcd b/graphlcd/logos/ZDF INFOKANAL_v2_l.glcd
new file mode 100644
index 0000000..5f515b9
--- /dev/null
+++ b/graphlcd/logos/ZDF INFOKANAL_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF INFOKANAL_v2_m.glcd b/graphlcd/logos/ZDF INFOKANAL_v2_m.glcd
new file mode 100644
index 0000000..1a35629
--- /dev/null
+++ b/graphlcd/logos/ZDF INFOKANAL_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF THEATERKANAL_l.glcd b/graphlcd/logos/ZDF THEATERKANAL_l.glcd
new file mode 100644
index 0000000..30caeee
--- /dev/null
+++ b/graphlcd/logos/ZDF THEATERKANAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF THEATERKANAL_v2_l.glcd b/graphlcd/logos/ZDF THEATERKANAL_v2_l.glcd
new file mode 100644
index 0000000..8e0cd92
--- /dev/null
+++ b/graphlcd/logos/ZDF THEATERKANAL_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF THEATERKANAL_v2_m.glcd b/graphlcd/logos/ZDF THEATERKANAL_v2_m.glcd
new file mode 100644
index 0000000..646e9a4
--- /dev/null
+++ b/graphlcd/logos/ZDF THEATERKANAL_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_THEATERKANAL_m.glcd b/graphlcd/logos/ZDF_THEATERKANAL_m.glcd
new file mode 100644
index 0000000..8363a6c
--- /dev/null
+++ b/graphlcd/logos/ZDF_THEATERKANAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_l.glcd b/graphlcd/logos/ZDF_l.glcd
new file mode 100644
index 0000000..4529df6
--- /dev/null
+++ b/graphlcd/logos/ZDF_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_m.glcd b/graphlcd/logos/ZDF_m.glcd
new file mode 100644
index 0000000..bc57463
--- /dev/null
+++ b/graphlcd/logos/ZDF_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZIK_l.glcd b/graphlcd/logos/ZIK_l.glcd
new file mode 100644
index 0000000..98315b7
--- /dev/null
+++ b/graphlcd/logos/ZIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZIK_m.glcd b/graphlcd/logos/ZIK_m.glcd
new file mode 100644
index 0000000..3def476
--- /dev/null
+++ b/graphlcd/logos/ZIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-CD_l.glcd b/graphlcd/logos/animated/REPLAY-CD_l.glcd
new file mode 100644
index 0000000..9c09643
--- /dev/null
+++ b/graphlcd/logos/animated/REPLAY-CD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-DVD_l.glcd b/graphlcd/logos/animated/REPLAY-DVD_l.glcd
new file mode 100644
index 0000000..0385097
--- /dev/null
+++ b/graphlcd/logos/animated/REPLAY-DVD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-FILE_l.glcd b/graphlcd/logos/animated/REPLAY-FILE_l.glcd
new file mode 100644
index 0000000..fd2e9d6
--- /dev/null
+++ b/graphlcd/logos/animated/REPLAY-FILE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-IMAGE_l.glcd b/graphlcd/logos/animated/REPLAY-IMAGE_l.glcd
new file mode 100644
index 0000000..f5b5270
--- /dev/null
+++ b/graphlcd/logos/animated/REPLAY-IMAGE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-MUSIC_l.glcd b/graphlcd/logos/animated/REPLAY-MUSIC_l.glcd
new file mode 100644
index 0000000..8013bb3
--- /dev/null
+++ b/graphlcd/logos/animated/REPLAY-MUSIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-VDR_l.glcd b/graphlcd/logos/animated/REPLAY-VDR_l.glcd
new file mode 100644
index 0000000..5144e13
--- /dev/null
+++ b/graphlcd/logos/animated/REPLAY-VDR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-VDR_m.glcd b/graphlcd/logos/animated/REPLAY-VDR_m.glcd
new file mode 100644
index 0000000..4e81191
--- /dev/null
+++ b/graphlcd/logos/animated/REPLAY-VDR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-VDR_v2_l.glcd b/graphlcd/logos/animated/REPLAY-VDR_v2_l.glcd
new file mode 100644
index 0000000..07c7f03
--- /dev/null
+++ b/graphlcd/logos/animated/REPLAY-VDR_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/SAT1_l.glcd b/graphlcd/logos/animated/SAT1_l.glcd
new file mode 100644
index 0000000..32b1cf6
--- /dev/null
+++ b/graphlcd/logos/animated/SAT1_l.glcd
Binary files differ
diff --git a/i18n.c b/i18n.c
new file mode 100644
index 0000000..0d75e2e
--- /dev/null
+++ b/i18n.c
@@ -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 }
+};
diff --git a/i18n.h b/i18n.h
new file mode 100644
index 0000000..97d9f7f
--- /dev/null
+++ b/i18n.h
@@ -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;
+};
diff --git a/logo.c b/logo.c
new file mode 100644
index 0000000..3be6198
--- /dev/null
+++ b/logo.c
@@ -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)
+{
+}
+
diff --git a/logo.h b/logo.h
new file mode 100644
index 0000000..0b213ba
--- /dev/null
+++ b/logo.h
@@ -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
diff --git a/menu.c b/menu.c
new file mode 100644
index 0000000..5394346
--- /dev/null
+++ b/menu.c
@@ -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);
+}
diff --git a/menu.h b/menu.h
new file mode 100644
index 0000000..0e125bf
--- /dev/null
+++ b/menu.h
@@ -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!
diff --git a/setup.c b/setup.c
new file mode 100644
index 0000000..6f3e57c
--- /dev/null
+++ b/setup.c
@@ -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;
+}
diff --git a/setup.h b/setup.h
new file mode 100644
index 0000000..184aa02
--- /dev/null
+++ b/setup.h
@@ -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
diff --git a/state.c b/state.c
new file mode 100644
index 0000000..fe76adb
--- /dev/null
+++ b/state.c
@@ -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;
+}
diff --git a/state.h b/state.h
new file mode 100644
index 0000000..35e79f2
--- /dev/null
+++ b/state.h
@@ -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
+