summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY443
-rw-r--r--Makefile281
-rw-r--r--README142
-rw-r--r--TODO1
-rw-r--r--alias.c74
-rw-r--r--alias.h28
-rw-r--r--common.c217
-rw-r--r--common.h8
-rw-r--r--compat.h18
-rw-r--r--display.c2317
-rw-r--r--display.h200
-rw-r--r--extdata.c96
-rw-r--r--extdata.h46
-rw-r--r--global.h9
-rw-r--r--[l---------]graphlcd/channels.alias640
-rw-r--r--graphlcd/channels.alias-20101014.txt631
-rw-r--r--graphlcd/channels.alias-20110104.txt639
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/DejaVuSans-Bold.ttfbin0 -> 573136 bytes
-rw-r--r--graphlcd/fonts/DejaVuSansCondensed.ttfbin0 -> 544636 bytes
-rw-r--r--graphlcd/fonts/f12b.fntbin2576 -> 2576 bytes
-rw-r--r--graphlcd/fonts/f12bn.fntbin2576 -> 2576 bytes
-rw-r--r--graphlcd/fonts/f17b.fntbin3801 -> 3801 bytes
-rw-r--r--graphlcd/fonts/f5n.fntbin1456 -> 1456 bytes
-rw-r--r--graphlcd/fonts/f8b.fntbin1936 -> 1936 bytes
-rw-r--r--graphlcd/fonts/f8n.fntbin1936 -> 1936 bytes
-rw-r--r--graphlcd/fonts/verdana-012.fntbin0 -> 4572 bytes
-rw-r--r--graphlcd/fonts/verdana-014.fntbin0 -> 6396 bytes
-rw-r--r--graphlcd/fonts/verdana-015.fntbin0 -> 7440 bytes
-rw-r--r--graphlcd/fonts/verdana-022.fntbin0 -> 12092 bytes
-rw-r--r--graphlcd/logos/channels/1-2-3 TV_l.glcd (renamed from graphlcd/logos/1-2-3 TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/1-2-3.tv_l.glcd (renamed from graphlcd/logos/1-2-3.tv_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/1-2-3.tv_m.glcd (renamed from graphlcd/logos/1-2-3.tv_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/13TH_STREET_l.glcd (renamed from graphlcd/logos/13TH_STREET_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/13TH_STREET_m.glcd (renamed from graphlcd/logos/13TH_STREET_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/13TH_STREETv2_l.glcd (renamed from graphlcd/logos/13TH_STREETv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/1LIVE_DIGGI_l.glcd (renamed from graphlcd/logos/1LIVE_DIGGI_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/1LIVE_DIGGI_m.glcd (renamed from graphlcd/logos/1LIVE_DIGGI_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/1LIVE_DIGGIv2_l.glcd (renamed from graphlcd/logos/1LIVE_DIGGIv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/1LIVE_l.glcd (renamed from graphlcd/logos/1LIVE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/1LIVE_m.glcd (renamed from graphlcd/logos/1LIVE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/2M_MAROC_m.glcd (renamed from graphlcd/logos/2M_MAROC_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/3SAT_l.glcd (renamed from graphlcd/logos/3SAT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/3SAT_m.glcd (renamed from graphlcd/logos/3SAT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/40_TV_m.glcd (renamed from graphlcd/logos/40_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/9LIVE_l.glcd (renamed from graphlcd/logos/9LIVE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/9LIVE_m.glcd (renamed from graphlcd/logos/9LIVE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/AB1_l.glcd (renamed from graphlcd/logos/AB1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/AB1_m.glcd (renamed from graphlcd/logos/AB1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/AB_MOTEURS_l.glcd (renamed from graphlcd/logos/AB_MOTEURS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/AB_MOTEURS_m.glcd (renamed from graphlcd/logos/AB_MOTEURS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ACTION_m.glcd (renamed from graphlcd/logos/ACTION_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ADO FM_l.glcd (renamed from graphlcd/logos/ADO FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ADO FM_m.glcd (renamed from graphlcd/logos/ADO FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ADO_FM_l.glcd (renamed from graphlcd/logos/ADO_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ADO_FM_m.glcd (renamed from graphlcd/logos/ADO_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ALGERIE_l.glcd (renamed from graphlcd/logos/ALGERIE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ALGERIE_m.glcd (renamed from graphlcd/logos/ALGERIE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ALOUETTE_l.glcd (renamed from graphlcd/logos/ALOUETTE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ALOUETTE_m.glcd (renamed from graphlcd/logos/ALOUETTE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/AL_JAZEERA_l.glcd (renamed from graphlcd/logos/AL_JAZEERA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/AL_JAZEERA_m.glcd (renamed from graphlcd/logos/AL_JAZEERA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ANIMAL_PLANET_l.glcd (renamed from graphlcd/logos/ANIMAL_PLANET_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ANIMAL_PLANET_m.glcd (renamed from graphlcd/logos/ANIMAL_PLANET_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ANIMAUX_l.glcd (renamed from graphlcd/logos/ANIMAUX_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ANIMAUX_m.glcd (renamed from graphlcd/logos/ANIMAUX_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ANIXE_HD_l.glcd (renamed from graphlcd/logos/ANIXE_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ANIXE_HD_m.glcd (renamed from graphlcd/logos/ANIXE_HD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ANIXE_HDv2_l.glcd (renamed from graphlcd/logos/ANIXE_HDv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ANIXE_SD_l.glcd (renamed from graphlcd/logos/ANIXE_SD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ANIXE_SD_m.glcd (renamed from graphlcd/logos/ANIXE_SD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ANTENNE_BAYERN_l.glcd (renamed from graphlcd/logos/ANTENNE_BAYERN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ANTENNE_BAYERN_m.glcd (renamed from graphlcd/logos/ANTENNE_BAYERN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ANTENNE_BAYERN_v2_m.glcd (renamed from graphlcd/logos/ANTENNE_BAYERN_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ANTENNE_BRANDENBURG_l.glcd (renamed from graphlcd/logos/ANTENNE_BRANDENBURG_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ANTENNE_BRANDENBURG_m.glcd (renamed from graphlcd/logos/ANTENNE_BRANDENBURG_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ARTE_HD_l.glcd (renamed from graphlcd/logos/ARTE_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ARTE_HD_m.glcd (renamed from graphlcd/logos/ARTE_HD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ARTE_HDv2_l.glcd (renamed from graphlcd/logos/ARTE_HDv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ARTE_l.glcd (renamed from graphlcd/logos/ARTE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ARTE_m.glcd (renamed from graphlcd/logos/ARTE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ASTRA_HD_l.glcd (renamed from graphlcd/logos/ASTRA_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ASTRA_HD_m.glcd (renamed from graphlcd/logos/ASTRA_HD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ATVPLUS_l.glcd (renamed from graphlcd/logos/ATVPLUS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ATVPLUS_m.glcd (renamed from graphlcd/logos/ATVPLUS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/AXN_l.glcd (renamed from graphlcd/logos/AXN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/AXN_m.glcd (renamed from graphlcd/logos/AXN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/B5_AKTUELL_l.glcd (renamed from graphlcd/logos/B5_AKTUELL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/B5_AKTUELL_m.glcd (renamed from graphlcd/logos/B5_AKTUELL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/B5_AKTUELLv2_l.glcd (renamed from graphlcd/logos/B5_AKTUELLv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/B5_AKTUELLv2_m.glcd (renamed from graphlcd/logos/B5_AKTUELLv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/B5_AKTUELLv3_m.glcd (renamed from graphlcd/logos/B5_AKTUELLv3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/B5_PLUS_l.glcd (renamed from graphlcd/logos/B5_PLUS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/B5_PLUS_m.glcd (renamed from graphlcd/logos/B5_PLUS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BAHN_TV_l.glcd (renamed from graphlcd/logos/BAHN_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAHN_TV_m.glcd (renamed from graphlcd/logos/BAHN_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BAHN_TV_v2_m.glcd (renamed from graphlcd/logos/BAHN_TV_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_l.glcd (renamed from graphlcd/logos/BAYERISCHES_FERNSEHEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_m.glcd (renamed from graphlcd/logos/BAYERISCHES_FERNSEHEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_v2_l.glcd (renamed from graphlcd/logos/BAYERISCHES_FERNSEHEN_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_v2_m.glcd (renamed from graphlcd/logos/BAYERISCHES_FERNSEHEN_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_1_l.glcd (renamed from graphlcd/logos/BAYERN_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_1_m.glcd (renamed from graphlcd/logos/BAYERN_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_1v2_l.glcd (renamed from graphlcd/logos/BAYERN_1v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_1v2_m.glcd (renamed from graphlcd/logos/BAYERN_1v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_2_l.glcd (renamed from graphlcd/logos/BAYERN_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_2v2_l.glcd (renamed from graphlcd/logos/BAYERN_2v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_3_l.glcd (renamed from graphlcd/logos/BAYERN_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_3v2_l.glcd (renamed from graphlcd/logos/BAYERN_3v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_4_KLASSIK_l.glcd (renamed from graphlcd/logos/BAYERN_4_KLASSIK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_4_KLASSIK_m.glcd (renamed from graphlcd/logos/BAYERN_4_KLASSIK_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_4_KLASSIKv2_l.glcd (renamed from graphlcd/logos/BAYERN_4_KLASSIKv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_4_KLASSIKv2_m.glcd (renamed from graphlcd/logos/BAYERN_4_KLASSIKv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_PLUS_l.glcd (renamed from graphlcd/logos/BAYERN_PLUS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BAYERN_PLUS_m.glcd (renamed from graphlcd/logos/BAYERN_PLUS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BBC_PRIME_l.glcd (renamed from graphlcd/logos/BBC_PRIME_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BBC_PRIME_m.glcd (renamed from graphlcd/logos/BBC_PRIME_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BBC_WORLD_l.glcd (renamed from graphlcd/logos/BBC_WORLD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BBC_WORLD_m.glcd (renamed from graphlcd/logos/BBC_WORLD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BBC_WORLD_v2_l.glcd (renamed from graphlcd/logos/BBC_WORLD_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BBC_WORLD_v2_m.glcd (renamed from graphlcd/logos/BBC_WORLD_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BEATE_UHSE.TV_l.glcd (renamed from graphlcd/logos/BEATE_UHSE.TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BEATE_UHSE.TV_m.glcd (renamed from graphlcd/logos/BEATE_UHSE.TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BEATE_UHSE.TV_v2_l.glcd (renamed from graphlcd/logos/BEATE_UHSE.TV_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BEUR_TV_l.glcd (renamed from graphlcd/logos/BEUR_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BEUR_TV_m.glcd (renamed from graphlcd/logos/BEUR_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BEUR_TVv2_m.glcd (renamed from graphlcd/logos/BEUR_TVv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BIBEL_TV_l.glcd (renamed from graphlcd/logos/BIBEL_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BIBEL_TV_m.glcd (renamed from graphlcd/logos/BIBEL_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BIBEL_TV_v2_m.glcd (renamed from graphlcd/logos/BIBEL_TV_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BLOOMBERG_TV_GERMANY_l.glcd (renamed from graphlcd/logos/BLOOMBERG_TV_GERMANY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BLOOMBERG_TV_GERMANY_m.glcd (renamed from graphlcd/logos/BLOOMBERG_TV_GERMANY_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BLOOMBERG_TV_l.glcd (renamed from graphlcd/logos/BLOOMBERG_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BLOOMBERG_TV_m.glcd (renamed from graphlcd/logos/BLOOMBERG_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BREMEN_EINS_l.glcd (renamed from graphlcd/logos/BREMEN_EINS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BREMEN_EINS_m.glcd (renamed from graphlcd/logos/BREMEN_EINS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BREMEN_VIER_l.glcd (renamed from graphlcd/logos/BREMEN_VIER_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BREMEN_VIER_m.glcd (renamed from graphlcd/logos/BREMEN_VIER_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BR_ALPHA_l.glcd (renamed from graphlcd/logos/BR_ALPHA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BR_ALPHA_m.glcd (renamed from graphlcd/logos/BR_ALPHA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BR_ALPHAv2_l.glcd (renamed from graphlcd/logos/BR_ALPHAv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BR_ALPHAv2_m.glcd (renamed from graphlcd/logos/BR_ALPHAv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BR_ALPHAv3_l.glcd (renamed from graphlcd/logos/BR_ALPHAv3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BR_ALPHAv3_m.glcd (renamed from graphlcd/logos/BR_ALPHAv3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BR_KLASSIK_l.glcd (renamed from graphlcd/logos/BR_KLASSIK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BR_VERKEHR_l.glcd (renamed from graphlcd/logos/BR_VERKEHR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BR_VERKEHR_m.glcd (renamed from graphlcd/logos/BR_VERKEHR_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BTV4_l.glcd (renamed from graphlcd/logos/BTV4_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BTV4_m.glcd (renamed from graphlcd/logos/BTV4_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BTV4_v2_l.glcd (renamed from graphlcd/logos/BTV4_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BTV_l.glcd (renamed from graphlcd/logos/BTV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BTV_m.glcd (renamed from graphlcd/logos/BTV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BVN_l.glcd (renamed from graphlcd/logos/BVN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/BVN_m.glcd (renamed from graphlcd/logos/BVN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/BVN_v2_m.glcd (renamed from graphlcd/logos/BVN_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CADENA_DIAL_l.glcd (renamed from graphlcd/logos/CADENA_DIAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CADENA_DIAL_m.glcd (renamed from graphlcd/logos/CADENA_DIAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CANAL+ ...30_m.glcd (renamed from graphlcd/logos/CANAL+ ...30_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CANAL+_m.glcd (renamed from graphlcd/logos/CANAL+_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CANAL_24_HORAS_l.glcd (renamed from graphlcd/logos/CANAL_24_HORAS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CANAL_24_HORAS_m.glcd (renamed from graphlcd/logos/CANAL_24_HORAS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CANAL_CANARIAS_l.glcd (renamed from graphlcd/logos/CANAL_CANARIAS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CANAL_CANARIAS_m.glcd (renamed from graphlcd/logos/CANAL_CANARIAS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CANAL_CANARIAS_v2_m.glcd (renamed from graphlcd/logos/CANAL_CANARIAS_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CANAL_CLUB_l.glcd (renamed from graphlcd/logos/CANAL_CLUB_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CANAL_CLUB_m.glcd (renamed from graphlcd/logos/CANAL_CLUB_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CANAL_CLUB_v2_m.glcd (renamed from graphlcd/logos/CANAL_CLUB_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CARTOON_NETWORK_l.glcd (renamed from graphlcd/logos/CARTOON_NETWORK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CARTOON_NETWORK_m.glcd (renamed from graphlcd/logos/CARTOON_NETWORK_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CFN_RFC_l.glcd (renamed from graphlcd/logos/CFN_RFC_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CFN_RFC_m.glcd (renamed from graphlcd/logos/CFN_RFC_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CHANNEL_21_l.glcd (renamed from graphlcd/logos/CHANNEL_21_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CHANNEL_21_m.glcd (renamed from graphlcd/logos/CHANNEL_21_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CHERIE_FM_l.glcd (renamed from graphlcd/logos/CHERIE_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CHERIE_FM_m.glcd (renamed from graphlcd/logos/CHERIE_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CHRONOS_l.glcd (renamed from graphlcd/logos/CHRONOS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CHRONOS_m.glcd (renamed from graphlcd/logos/CHRONOS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CINE_BOX_m.glcd (renamed from graphlcd/logos/CINE_BOX_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CLASSICA_l.glcd (renamed from graphlcd/logos/CLASSICA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CLASSICA_m.glcd (renamed from graphlcd/logos/CLASSICA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CLUB_TELEACHAT_l.glcd (renamed from graphlcd/logos/CLUB_TELEACHAT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CLUB_TELEACHAT_m.glcd (renamed from graphlcd/logos/CLUB_TELEACHAT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CLUB_TELEACHAT_v2_m.glcd (renamed from graphlcd/logos/CLUB_TELEACHAT_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CNBC_EUROPE_l.glcd (renamed from graphlcd/logos/CNBC_EUROPE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CNBC_EUROPE_m.glcd (renamed from graphlcd/logos/CNBC_EUROPE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CNN+_m.glcd (renamed from graphlcd/logos/CNN+_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CNN_INT_l.glcd (renamed from graphlcd/logos/CNN_INT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CNN_INT_m.glcd (renamed from graphlcd/logos/CNN_INT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/COMEDY_CENTRAL_l.glcd (renamed from graphlcd/logos/COMEDY_CENTRAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/COMEDY_CENTRAL_m.glcd (renamed from graphlcd/logos/COMEDY_CENTRAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/CONT.RA_l.glcd (renamed from graphlcd/logos/CONT.RA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CONTACT_FM_l.glcd (renamed from graphlcd/logos/CONTACT_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/CONTACT_FM_m.glcd (renamed from graphlcd/logos/CONTACT_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DAS_DING_l.glcd (renamed from graphlcd/logos/DAS_DING_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DAS_DING_m.glcd (renamed from graphlcd/logos/DAS_DING_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DAS_DINGv2_l.glcd (renamed from graphlcd/logos/DAS_DINGv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DAS_ERSTE_HD_l.glcd (renamed from graphlcd/logos/DAS_ERSTE_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DAS_ERSTE_HD_m.glcd (renamed from graphlcd/logos/DAS_ERSTE_HD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DAS_ERSTE_HDv2_l.glcd (renamed from graphlcd/logos/DAS_ERSTE_HDv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DAS_ERSTE_HDv2_m.glcd (renamed from graphlcd/logos/DAS_ERSTE_HDv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DAS_ERSTE_l.glcd (renamed from graphlcd/logos/DAS_ERSTE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DAS_ERSTE_m.glcd (renamed from graphlcd/logos/DAS_ERSTE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DAS_ERSTEv2_l.glcd (renamed from graphlcd/logos/DAS_ERSTEv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DAS_VIERTE_l.glcd (renamed from graphlcd/logos/DAS_VIERTE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DAS_VIERTE_m.glcd (renamed from graphlcd/logos/DAS_VIERTE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DAS_VIERTEv2_l.glcd (renamed from graphlcd/logos/DAS_VIERTEv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DELUXE_LOUNGE_l.glcd (renamed from graphlcd/logos/DELUXE_LOUNGE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DELUXE_LOUNGE_m.glcd (renamed from graphlcd/logos/DELUXE_LOUNGE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DELUXE_MUSIC_l.glcd (renamed from graphlcd/logos/DELUXE_MUSIC_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DELUXE_MUSIC_m.glcd (renamed from graphlcd/logos/DELUXE_MUSIC_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DELUXE_MUSICv2_l.glcd (renamed from graphlcd/logos/DELUXE_MUSICv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DELUXE_RADIO_l.glcd (renamed from graphlcd/logos/DELUXE_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DELUXE_RADIO_m.glcd (renamed from graphlcd/logos/DELUXE_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DELUXE_RADIOv2_l.glcd (renamed from graphlcd/logos/DELUXE_RADIOv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DEUTSCHLANDFUNK_KOELN_l.glcd (renamed from graphlcd/logos/DEUTSCHLANDFUNK_KOELN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DEUTSCHLANDFUNK_KOELN_m.glcd (renamed from graphlcd/logos/DEUTSCHLANDFUNK_KOELN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DEUTSCHLANDFUNK_KOELN_v2_m.glcd (renamed from graphlcd/logos/DEUTSCHLANDFUNK_KOELN_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DEUTSCHLANDRADIO_BERLIN_l.glcd (renamed from graphlcd/logos/DEUTSCHLANDRADIO_BERLIN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DEUTSCHLANDRADIO_BERLIN_m.glcd (renamed from graphlcd/logos/DEUTSCHLANDRADIO_BERLIN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DEUTSCHLANDRADIO_BERLIN_v2_m.glcd (renamed from graphlcd/logos/DEUTSCHLANDRADIO_BERLIN_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DISCOVERY_CHANNEL_l.glcd (renamed from graphlcd/logos/DISCOVERY_CHANNEL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISCOVERY_CHANNEL_m.glcd (renamed from graphlcd/logos/DISCOVERY_CHANNEL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DISCOVERY_CHANNELv2_l.glcd (renamed from graphlcd/logos/DISCOVERY_CHANNELv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISCOVERY_CHANNELv3_l.glcd (renamed from graphlcd/logos/DISCOVERY_CHANNELv3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISCOVERY_HD_l.glcd (renamed from graphlcd/logos/DISCOVERY_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_CHANNEL_l.glcd (renamed from graphlcd/logos/DISNEY_CHANNEL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_CHANNEL_m.glcd (renamed from graphlcd/logos/DISNEY_CHANNEL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_CHANNELv2_l.glcd (renamed from graphlcd/logos/DISNEY_CHANNELv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_CHANNELv3_l.glcd (renamed from graphlcd/logos/DISNEY_CHANNELv3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_CINEMAGIC_HD_l.glcd (renamed from graphlcd/logos/DISNEY_CINEMAGIC_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_CINEMAGIC_l.glcd (renamed from graphlcd/logos/DISNEY_CINEMAGIC_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_PLAYHOUSE_l.glcd (renamed from graphlcd/logos/DISNEY_PLAYHOUSE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_TOON_+1_l.glcd (renamed from graphlcd/logos/DISNEY_TOON_+1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_TOON_l.glcd (renamed from graphlcd/logos/DISNEY_TOON_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DISNEY_XD_l.glcd (renamed from graphlcd/logos/DISNEY_XD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DKULTUR_l.glcd (renamed from graphlcd/logos/DKULTUR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DKULTUR_m.glcd (renamed from graphlcd/logos/DKULTUR_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DMAX_l.glcd (renamed from graphlcd/logos/DMAX_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DMAX_m.glcd (renamed from graphlcd/logos/DMAX_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DOK-DEB_l.glcd (renamed from graphlcd/logos/DOK-DEB_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DOK-DEb_m.glcd (renamed from graphlcd/logos/DOK-DEb_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DOMRADIO_l.glcd (renamed from graphlcd/logos/DOMRADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DOMRADIO_m.glcd (renamed from graphlcd/logos/DOMRADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DSF_l.glcd (renamed from graphlcd/logos/DSF_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DSF_m.glcd (renamed from graphlcd/logos/DSF_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DW_1_l.glcd (renamed from graphlcd/logos/DW_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DW_1_m.glcd (renamed from graphlcd/logos/DW_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DW_4_l.glcd (renamed from graphlcd/logos/DW_4_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DW_4_m.glcd (renamed from graphlcd/logos/DW_4_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DW_RADIO_M_l.glcd (renamed from graphlcd/logos/DW_RADIO_M_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DW_RADIO_M_m.glcd (renamed from graphlcd/logos/DW_RADIO_M_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DW_RADIO_l.glcd (renamed from graphlcd/logos/DW_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DW_RADIO_m.glcd (renamed from graphlcd/logos/DW_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/DW_TV_l.glcd (renamed from graphlcd/logos/DW_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/DW_TV_m.glcd (renamed from graphlcd/logos/DW_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EGO_FM_l.glcd (renamed from graphlcd/logos/EGO_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EGO_FM_m.glcd (renamed from graphlcd/logos/EGO_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EINS_EXTRA_l.glcd (renamed from graphlcd/logos/EINS_EXTRA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_EXTRA_m.glcd (renamed from graphlcd/logos/EINS_EXTRA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EINS_EXTRAv2_l.glcd (renamed from graphlcd/logos/EINS_EXTRAv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_EXTRAv2_m.glcd (renamed from graphlcd/logos/EINS_EXTRAv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EINS_EXTRAv3_l.glcd (renamed from graphlcd/logos/EINS_EXTRAv3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_EXTRAv4_l.glcd (renamed from graphlcd/logos/EINS_EXTRAv4_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_FESTIVAL_HD_l.glcd (renamed from graphlcd/logos/EINS_FESTIVAL_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_FESTIVAL_HD_m.glcd (renamed from graphlcd/logos/EINS_FESTIVAL_HD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EINS_FESTIVAL_HDv2_l.glcd (renamed from graphlcd/logos/EINS_FESTIVAL_HDv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_FESTIVAL_l.glcd (renamed from graphlcd/logos/EINS_FESTIVAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_FESTIVAL_m.glcd (renamed from graphlcd/logos/EINS_FESTIVAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EINS_FESTIVALv2_l .glcd (renamed from graphlcd/logos/EINS_FESTIVALv2_l .glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_FESTIVALv2_l.glcd (renamed from graphlcd/logos/EINS_FESTIVALv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_FESTIVALv2_m.glcd (renamed from graphlcd/logos/EINS_FESTIVALv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EINS_FESTIVALv3_l.glcd (renamed from graphlcd/logos/EINS_FESTIVALv3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_MUXX_l.glcd (renamed from graphlcd/logos/EINS_MUXX_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_MUXX_m.glcd (renamed from graphlcd/logos/EINS_MUXX_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EINS_MUXX_v2_l.glcd (renamed from graphlcd/logos/EINS_MUXX_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_PLUS_l.glcd (renamed from graphlcd/logos/EINS_PLUS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EINS_PLUS_m.glcd (renamed from graphlcd/logos/EINS_PLUS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EINS_PLUSv2_l.glcd (renamed from graphlcd/logos/EINS_PLUSv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ERF_RADIO_l.glcd (renamed from graphlcd/logos/ERF_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ERF_RADIO_m.glcd (renamed from graphlcd/logos/ERF_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ESC1_EGYPT_l.glcd (renamed from graphlcd/logos/ESC1_EGYPT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ESPN_CLASSIC_SPORT_l.glcd (renamed from graphlcd/logos/ESPN_CLASSIC_SPORT_l.glcd)bin432 -> 432 bytes
-rw-r--r--graphlcd/logos/channels/EURONEWS_l.glcd (renamed from graphlcd/logos/EURONEWS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EURONEWS_m.glcd (renamed from graphlcd/logos/EURONEWS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EUROPE_2_l.glcd (renamed from graphlcd/logos/EUROPE_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EUROPE_2_m.glcd (renamed from graphlcd/logos/EUROPE_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EUROSPORT_HD_l.glcd (renamed from graphlcd/logos/EUROSPORT_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EUROSPORT_l.glcd (renamed from graphlcd/logos/EUROSPORT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EUROSPORT_m.glcd (renamed from graphlcd/logos/EUROSPORT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/EXTRA 1_l.glcd (renamed from graphlcd/logos/EXTRA 1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/EXTREME SPORTS_l.glcd (renamed from graphlcd/logos/EXTREME SPORTS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/E_ENTERTAINMENT_l.glcd (renamed from graphlcd/logos/E_ENTERTAINMENT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FASHION_TV_l.glcd (renamed from graphlcd/logos/FASHION_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FASHION_TV_m.glcd (renamed from graphlcd/logos/FASHION_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FASHION_TV_v2_m.glcd (renamed from graphlcd/logos/FASHION_TV_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FESTIVAL_l.glcd (renamed from graphlcd/logos/FESTIVAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FESTIVAL_m.glcd (renamed from graphlcd/logos/FESTIVAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FFN_COMEDY_l.glcd (renamed from graphlcd/logos/FFN_COMEDY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FFN_COMEDY_m.glcd (renamed from graphlcd/logos/FFN_COMEDY_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FFN_DIGITAL_l.glcd (renamed from graphlcd/logos/FFN_DIGITAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FFN_DIGITAL_m.glcd (renamed from graphlcd/logos/FFN_DIGITAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FM4_l.glcd (renamed from graphlcd/logos/FM4_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FM4_m.glcd (renamed from graphlcd/logos/FM4_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FOX_KIDS_l.glcd (renamed from graphlcd/logos/FOX_KIDS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FOX_KIDS_m.glcd (renamed from graphlcd/logos/FOX_KIDS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FOX_KIDSv2_l.glcd (renamed from graphlcd/logos/FOX_KIDSv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FOX_KIDSv2_m.glcd (renamed from graphlcd/logos/FOX_KIDSv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FOX_NEWS_m.glcd (renamed from graphlcd/logos/FOX_NEWS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FOX_l.glcd (renamed from graphlcd/logos/FOX_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FOX_m.glcd (renamed from graphlcd/logos/FOX_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FRANCE_24_l.glcd (renamed from graphlcd/logos/FRANCE_24_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FRANCE_24_m.glcd (renamed from graphlcd/logos/FRANCE_24_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FRANCE_2_l.glcd (renamed from graphlcd/logos/FRANCE_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FRANCE_2_m.glcd (renamed from graphlcd/logos/FRANCE_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FRANCE_3_l.glcd (renamed from graphlcd/logos/FRANCE_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FRANCE_3_m.glcd (renamed from graphlcd/logos/FRANCE_3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FRANCE_5_l.glcd (renamed from graphlcd/logos/FRANCE_5_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FRANCE_5_m.glcd (renamed from graphlcd/logos/FRANCE_5_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FRANKEN_SAT_l.glcd (renamed from graphlcd/logos/FRANKEN_SAT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FRANKEN_SAT_m.glcd (renamed from graphlcd/logos/FRANKEN_SAT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FREE_X_TV_l.glcd (renamed from graphlcd/logos/FREE_X_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FREE_X_TV_m.glcd (renamed from graphlcd/logos/FREE_X_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/FRITZ_l.glcd (renamed from graphlcd/logos/FRITZ_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/FRITZ_m.glcd (renamed from graphlcd/logos/FRITZ_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/GAMES_TV_l.glcd (renamed from graphlcd/logos/GAMES_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/GAMES_TV_m.glcd (renamed from graphlcd/logos/GAMES_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/GOLDSTAR_TV_l.glcd (renamed from graphlcd/logos/GOLDSTAR_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/GOLDSTAR_TV_m.glcd (renamed from graphlcd/logos/GOLDSTAR_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/GOLDSTAR_TVv2_l.glcd (renamed from graphlcd/logos/GOLDSTAR_TVv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/GOLDSTAR_TVv2_m.glcd (renamed from graphlcd/logos/GOLDSTAR_TVv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/GO_TV_l.glcd (renamed from graphlcd/logos/GO_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/GO_TV_m.glcd (renamed from graphlcd/logos/GO_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/GO_TVv2_l.glcd (renamed from graphlcd/logos/GO_TVv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/GUTE_LAUNE_TV_l.glcd (renamed from graphlcd/logos/GUTE_LAUNE_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/GUTE_LAUNE_TV_m.glcd (renamed from graphlcd/logos/GUTE_LAUNE_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HALLMARK_l.glcd (renamed from graphlcd/logos/HALLMARK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HALLMARK_m.glcd (renamed from graphlcd/logos/HALLMARK_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HARMONY_FM_l.glcd (renamed from graphlcd/logos/HARMONY_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HARMONY_FM_m.glcd (renamed from graphlcd/logos/HARMONY_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HARMONY_FM_v2_m.glcd (renamed from graphlcd/logos/HARMONY_FM_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HARMONY_FMv2_m.glcd (renamed from graphlcd/logos/HARMONY_FMv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HD_TEST_ARD_ZDF_l.glcd (renamed from graphlcd/logos/HD_TEST_ARD_ZDF_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HD_TEST_ARD_ZDF_m.glcd (renamed from graphlcd/logos/HD_TEST_ARD_ZDF_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HEIMATKANAL_l.glcd (renamed from graphlcd/logos/HEIMATKANAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HEIMATKANAL_m.glcd (renamed from graphlcd/logos/HEIMATKANAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HEIMATKANAL_v2_l.glcd (renamed from graphlcd/logos/HEIMATKANAL_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HEIMATKANALv2_l.glcd (renamed from graphlcd/logos/HEIMATKANALv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HESSEN_FERNSEHEN_l.glcd (renamed from graphlcd/logos/HESSEN_FERNSEHEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HESSEN_FERNSEHEN_m.glcd (renamed from graphlcd/logos/HESSEN_FERNSEHEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HESSEN_FERNSEHEN_v2_l.glcd (renamed from graphlcd/logos/HESSEN_FERNSEHEN_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HISTOIRE_m.glcd (renamed from graphlcd/logos/HISTOIRE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HISTORY_CHANNEL_l.glcd (renamed from graphlcd/logos/HISTORY_CHANNEL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HISTORY_HD_l.glcd (renamed from graphlcd/logos/HISTORY_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HITRADIO_FFH_l.glcd (renamed from graphlcd/logos/HITRADIO_FFH_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HITRADIO_FFH_m.glcd (renamed from graphlcd/logos/HITRADIO_FFH_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HITRADIO_OE3_l.glcd (renamed from graphlcd/logos/HITRADIO_OE3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HITRADIO_OE3_m.glcd (renamed from graphlcd/logos/HITRADIO_OE3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HOERZU_DIGITAL_l.glcd (renamed from graphlcd/logos/HOERZU_DIGITAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HOERZU_DIGITAL_m.glcd (renamed from graphlcd/logos/HOERZU_DIGITAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HOPE_CHANNEL_RADIO_l.glcd (renamed from graphlcd/logos/HOPE_CHANNEL_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HOPE_CHANNEL_RADIO_m.glcd (renamed from graphlcd/logos/HOPE_CHANNEL_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_1_l.glcd (renamed from graphlcd/logos/HR_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HR_1_m.glcd (renamed from graphlcd/logos/HR_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_2_l.glcd (renamed from graphlcd/logos/HR_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HR_2_m.glcd (renamed from graphlcd/logos/HR_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_3_l.glcd (renamed from graphlcd/logos/HR_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HR_3_m.glcd (renamed from graphlcd/logos/HR_3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_4_l.glcd (renamed from graphlcd/logos/HR_4_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HR_4_m.glcd (renamed from graphlcd/logos/HR_4_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_CHRONOS_l.glcd (renamed from graphlcd/logos/HR_CHRONOS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HR_INFO_PLUS_l.glcd (renamed from graphlcd/logos/HR_INFO_PLUS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HR_INFO_PLUS_m.glcd (renamed from graphlcd/logos/HR_INFO_PLUS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_INFO_l.glcd (renamed from graphlcd/logos/HR_INFO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HR_INFO_m.glcd (renamed from graphlcd/logos/HR_INFO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_KLASSIK_l.glcd (renamed from graphlcd/logos/HR_KLASSIK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HR_KLASSIK_m.glcd (renamed from graphlcd/logos/HR_KLASSIK_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_KLASSIKv2_m.glcd (renamed from graphlcd/logos/HR_KLASSIKv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_SKYLINE_l.glcd (renamed from graphlcd/logos/HR_SKYLINE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HR_SKYLINE_m.glcd (renamed from graphlcd/logos/HR_SKYLINE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_SKYLINEv2_m.glcd (renamed from graphlcd/logos/HR_SKYLINEv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HR_l.glcd (renamed from graphlcd/logos/HR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HSE24_EXTRA_l.glcd (renamed from graphlcd/logos/HSE24_EXTRA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HSE24_EXTRA_m.glcd (renamed from graphlcd/logos/HSE24_EXTRA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HSE24_l.glcd (renamed from graphlcd/logos/HSE24_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/HSE24_m.glcd (renamed from graphlcd/logos/HSE24_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/HSE24v2_m.glcd (renamed from graphlcd/logos/HSE24v2_m.glcd)bin123 -> 123 bytes
-rw-r--r--graphlcd/logos/channels/INFORADIO_l.glcd (renamed from graphlcd/logos/INFORADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/INFORADIO_m.glcd (renamed from graphlcd/logos/INFORADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/INSELRADIO_l.glcd (renamed from graphlcd/logos/INSELRADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/INSELRADIO_m.glcd (renamed from graphlcd/logos/INSELRADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/I_MUSIC_TV_l.glcd (renamed from graphlcd/logos/I_MUSIC_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/I_MUSIC_TV_m.glcd (renamed from graphlcd/logos/I_MUSIC_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/I_MUSIC_l.glcd (renamed from graphlcd/logos/I_MUSIC_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/I_MUSIC_m.glcd (renamed from graphlcd/logos/I_MUSIC_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/JML_SHOP_l.glcd (renamed from graphlcd/logos/JML_SHOP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/JML_SHOP_m.glcd (renamed from graphlcd/logos/JML_SHOP_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/JUMP_l.glcd (renamed from graphlcd/logos/JUMP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/JUMP_m.glcd (renamed from graphlcd/logos/JUMP_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/JUNIOR_l.glcd (renamed from graphlcd/logos/JUNIOR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/JUNIOR_m.glcd (renamed from graphlcd/logos/JUNIOR_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/JUNIOR_v2_l.glcd (renamed from graphlcd/logos/JUNIOR_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/JUWELO_TV_l.glcd (renamed from graphlcd/logos/JUWELO_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/JUWELO_TV_m.glcd (renamed from graphlcd/logos/JUWELO_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KABEL_1_AUSTRIA_l.glcd (renamed from graphlcd/logos/KABEL_1_AUSTRIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KABEL_1_AUSTRIA_m.glcd (renamed from graphlcd/logos/KABEL_1_AUSTRIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KABEL_1_HD_l.glcd (renamed from graphlcd/logos/KABEL_1_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KABEL_1_SCHWEIZ_l.glcd (renamed from graphlcd/logos/KABEL_1_SCHWEIZ_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KABEL_1_SCHWEIZ_m.glcd (renamed from graphlcd/logos/KABEL_1_SCHWEIZ_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KABEL_1_l.glcd (renamed from graphlcd/logos/KABEL_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KABEL_1_m.glcd (renamed from graphlcd/logos/KABEL_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KABEL_1v2_l.glcd (renamed from graphlcd/logos/KABEL_1v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KABEL_1v2_m.glcd (renamed from graphlcd/logos/KABEL_1v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KIKA_l.glcd (renamed from graphlcd/logos/KIKA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KIKA_m.glcd (renamed from graphlcd/logos/KIKA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KINK_FM_l.glcd (renamed from graphlcd/logos/KINK_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KINK_FM_m.glcd (renamed from graphlcd/logos/KINK_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KINOWELT_l.glcd (renamed from graphlcd/logos/KINOWELT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KINOWELT_m.glcd (renamed from graphlcd/logos/KINOWELT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KIRAKA_l.glcd (renamed from graphlcd/logos/KIRAKA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KIRAKA_m.glcd (renamed from graphlcd/logos/KIRAKA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KLASSIK_RADIO_l.glcd (renamed from graphlcd/logos/KLASSIK_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KLASSIK_RADIO_m.glcd (renamed from graphlcd/logos/KLASSIK_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KLASSIK_RADIOv2_l.glcd (renamed from graphlcd/logos/KLASSIK_RADIOv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KRIMICO_l.glcd (renamed from graphlcd/logos/KRIMICO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KRIMICO_m.glcd (renamed from graphlcd/logos/KRIMICO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KTO_l.glcd (renamed from graphlcd/logos/KTO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KTO_m.glcd (renamed from graphlcd/logos/KTO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/KULTURRADIO_l.glcd (renamed from graphlcd/logos/KULTURRADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/KULTURRADIO_m.glcd (renamed from graphlcd/logos/KULTURRADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/K_TV_l.glcd (renamed from graphlcd/logos/K_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/K_TV_m.glcd (renamed from graphlcd/logos/K_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/K_TV_v2_m.glcd (renamed from graphlcd/logos/K_TV_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/L1MBURG_l.glcd (renamed from graphlcd/logos/L1MBURG_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/L1MBURG_m.glcd (renamed from graphlcd/logos/L1MBURG_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/LCI_l.glcd (renamed from graphlcd/logos/LCI_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/LCI_m.glcd (renamed from graphlcd/logos/LCI_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/LCP_l.glcd (renamed from graphlcd/logos/LCP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/LCP_m.glcd (renamed from graphlcd/logos/LCP_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/LIBERTY_TV_l.glcd (renamed from graphlcd/logos/LIBERTY_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/LIBERTY_TV_m.glcd (renamed from graphlcd/logos/LIBERTY_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/LIBERTY_TV_v2_m.glcd (renamed from graphlcd/logos/LIBERTY_TV_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/LIVE_ 1_m.glcd (renamed from graphlcd/logos/LIVE_ 1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MATCH TV_m.glcd (renamed from graphlcd/logos/MATCH TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR1_SACHSEN_l.glcd (renamed from graphlcd/logos/MDR1_SACHSEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR1_SACHSEN_m.glcd (renamed from graphlcd/logos/MDR1_SACHSEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR1_SA_ANHALT_l.glcd (renamed from graphlcd/logos/MDR1_SA_ANHALT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR1_SA_ANHALT_m.glcd (renamed from graphlcd/logos/MDR1_SA_ANHALT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR1_THUERINGEN_l.glcd (renamed from graphlcd/logos/MDR1_THUERINGEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR1_THUERINGEN_m.glcd (renamed from graphlcd/logos/MDR1_THUERINGEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FERNSEHEN_SA_l.glcd (renamed from graphlcd/logos/MDR_FERNSEHEN_SA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FERNSEHEN_SA_m.glcd (renamed from graphlcd/logos/MDR_FERNSEHEN_SA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FERNSEHEN_S_l.glcd (renamed from graphlcd/logos/MDR_FERNSEHEN_S_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FERNSEHEN_S_m.glcd (renamed from graphlcd/logos/MDR_FERNSEHEN_S_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FERNSEHEN_TH_l.glcd (renamed from graphlcd/logos/MDR_FERNSEHEN_TH_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FERNSEHEN_TH_m.glcd (renamed from graphlcd/logos/MDR_FERNSEHEN_TH_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FERNSEHEN_l.glcd (renamed from graphlcd/logos/MDR_FERNSEHEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FERNSEHEN_m.glcd (renamed from graphlcd/logos/MDR_FERNSEHEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FIGARO_l.glcd (renamed from graphlcd/logos/MDR_FIGARO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR_FIGARO_m.glcd (renamed from graphlcd/logos/MDR_FIGARO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR_INFO_l.glcd (renamed from graphlcd/logos/MDR_INFO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR_INFO_m.glcd (renamed from graphlcd/logos/MDR_INFO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR_KLASSIK_l.glcd (renamed from graphlcd/logos/MDR_KLASSIK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR_KLASSIK_m.glcd (renamed from graphlcd/logos/MDR_KLASSIK_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR_SPUTNIK_l.glcd (renamed from graphlcd/logos/MDR_SPUTNIK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MDR_SPUTNIK_m.glcd (renamed from graphlcd/logos/MDR_SPUTNIK_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MDR_l.glcd (renamed from graphlcd/logos/MDR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MEDIA _TROPICAL_l.glcd (renamed from graphlcd/logos/MEDIA _TROPICAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MEDIA_TROPICAL_m.glcd (renamed from graphlcd/logos/MEDIA_TROPICAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MEIN_TV_SHOP_l.glcd (renamed from graphlcd/logos/MEIN_TV_SHOP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MEIN_TV_SHOP_m.glcd (renamed from graphlcd/logos/MEIN_TV_SHOP_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MGM_l.glcd (renamed from graphlcd/logos/MGM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MGM_lv2.glcd (renamed from graphlcd/logos/MGM_lv2.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MGM_m.glcd (renamed from graphlcd/logos/MGM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MOTORS_TV_l.glcd (renamed from graphlcd/logos/MOTORS_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MOTORS_TV_m.glcd (renamed from graphlcd/logos/MOTORS_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MOTORS_TV_v2_m.glcd (renamed from graphlcd/logos/MOTORS_TV_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MOTORVISION_TV_l.glcd (renamed from graphlcd/logos/MOTORVISION_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_2_POP_CHANNEL_l.glcd (renamed from graphlcd/logos/MTV_2_POP_CHANNEL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_2_POP_CHANNEL_m.glcd (renamed from graphlcd/logos/MTV_2_POP_CHANNEL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MTV_2_l.glcd (renamed from graphlcd/logos/MTV_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_AUSTRIA_l.glcd (renamed from graphlcd/logos/MTV_AUSTRIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_AUSTRIA_m.glcd (renamed from graphlcd/logos/MTV_AUSTRIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MTV_BASE_l.glcd (renamed from graphlcd/logos/MTV_BASE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_BASE_m.glcd (renamed from graphlcd/logos/MTV_BASE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MTV_CENTRAL_l.glcd (renamed from graphlcd/logos/MTV_CENTRAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_CENTRAL_m.glcd (renamed from graphlcd/logos/MTV_CENTRAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MTV_CENTRALv2_m.glcd (renamed from graphlcd/logos/MTV_CENTRALv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MTV_DANCE_l.glcd (renamed from graphlcd/logos/MTV_DANCE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_F_l.glcd (renamed from graphlcd/logos/MTV_F_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_GERMANY_l.glcd (renamed from graphlcd/logos/MTV_GERMANY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_GERMANY_m.glcd (renamed from graphlcd/logos/MTV_GERMANY_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MTV_HITS_l.glcd (renamed from graphlcd/logos/MTV_HITS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_HITS_m.glcd (renamed from graphlcd/logos/MTV_HITS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MTV_l.glcd (renamed from graphlcd/logos/MTV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/MTV_m.glcd (renamed from graphlcd/logos/MTV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/MULTIVISION_m.glcd (renamed from graphlcd/logos/MULTIVISION_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/N24_l.glcd (renamed from graphlcd/logos/N24_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/N24_m.glcd (renamed from graphlcd/logos/N24_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/N24_v2_l.glcd (renamed from graphlcd/logos/N24_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NASN_l.glcd (renamed from graphlcd/logos/NASN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NASN_m.glcd (renamed from graphlcd/logos/NASN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NATIONAL_GEOGRAPHIC_HD_l.glcd (renamed from graphlcd/logos/NATIONAL_GEOGRAPHIC_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NATIONAL_GEOGRAPHIC_l.glcd (renamed from graphlcd/logos/NATIONAL_GEOGRAPHIC_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NATIONAL_GEOGRAPHIC_m.glcd (renamed from graphlcd/logos/NATIONAL_GEOGRAPHIC_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NATIONAL_GEOGRAPHICv2_l .glcd (renamed from graphlcd/logos/NATIONAL_GEOGRAPHICv2_l .glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NAT_GEO_WILD_l.glcd (renamed from graphlcd/logos/NAT_GEO_WILD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NBC_l.glcd (renamed from graphlcd/logos/NBC_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NBC_m.glcd (renamed from graphlcd/logos/NBC_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_1_NIEDERS_l.glcd (renamed from graphlcd/logos/NDR_1_NIEDERS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_1_NIEDERS_m.glcd (renamed from graphlcd/logos/NDR_1_NIEDERS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_1_RADIO_MV_l.glcd (renamed from graphlcd/logos/NDR_1_RADIO_MV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_1_RADIO_MV_m.glcd (renamed from graphlcd/logos/NDR_1_RADIO_MV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_1_WELLE_NORD_l.glcd (renamed from graphlcd/logos/NDR_1_WELLE_NORD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_1_WELLE_NORD_m.glcd (renamed from graphlcd/logos/NDR_1_WELLE_NORD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_2_l.glcd (renamed from graphlcd/logos/NDR_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_2_m.glcd (renamed from graphlcd/logos/NDR_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_90_3_l.glcd (renamed from graphlcd/logos/NDR_90_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_90_3_m.glcd (renamed from graphlcd/logos/NDR_90_3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_HH_l.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_HH_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_HH_m.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_HH_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_MV_l.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_MV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_MV_m.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_MV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_NDS_l.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_NDS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_NDS_m.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_NDS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_SH_l.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_SH_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_SH_m.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_SH_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_l.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_FERNSEHEN_m.glcd (renamed from graphlcd/logos/NDR_FERNSEHEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_INFO_SPEZIAL_l.glcd (renamed from graphlcd/logos/NDR_INFO_SPEZIAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_INFO_SPEZIAL_m.glcd (renamed from graphlcd/logos/NDR_INFO_SPEZIAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_INFO_l.glcd (renamed from graphlcd/logos/NDR_INFO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_INFO_m.glcd (renamed from graphlcd/logos/NDR_INFO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_KULTUR_l.glcd (renamed from graphlcd/logos/NDR_KULTUR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NDR_KULTUR_m.glcd (renamed from graphlcd/logos/NDR_KULTUR_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NDR_l.glcd (renamed from graphlcd/logos/NDR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ND_1_WELLE_NORD_l.glcd (renamed from graphlcd/logos/ND_1_WELLE_NORD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ND_1_WELLE_NORD_m.glcd (renamed from graphlcd/logos/ND_1_WELLE_NORD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NED_1_l.glcd (renamed from graphlcd/logos/NED_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NED_1_m.glcd (renamed from graphlcd/logos/NED_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NED_2_l.glcd (renamed from graphlcd/logos/NED_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NED_2_m.glcd (renamed from graphlcd/logos/NED_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NED_3_l.glcd (renamed from graphlcd/logos/NED_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NED_3_m.glcd (renamed from graphlcd/logos/NED_3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NET_5_l.glcd (renamed from graphlcd/logos/NET_5_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NET_5_m.glcd (renamed from graphlcd/logos/NET_5_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NEUN_LIVE_l.glcd (renamed from graphlcd/logos/NEUN_LIVE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NEUN_LIVE_m.glcd (renamed from graphlcd/logos/NEUN_LIVE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NEUN_LIVE_v2_m.glcd (renamed from graphlcd/logos/NEUN_LIVE_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NICKELODEON_l.glcd (renamed from graphlcd/logos/NICKELODEON_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NICKELODEON_m.glcd (renamed from graphlcd/logos/NICKELODEON_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NICK_l.glcd (renamed from graphlcd/logos/NICK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NORDWEST_RADIO2_l.glcd (renamed from graphlcd/logos/NORDWEST_RADIO2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NORDWEST_RADIO_l.glcd (renamed from graphlcd/logos/NORDWEST_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NORDWEST_RADIO_m.glcd (renamed from graphlcd/logos/NORDWEST_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NORDWEST_RADIOv2_m.glcd (renamed from graphlcd/logos/NORDWEST_RADIOv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NRJ_HITS_l.glcd (renamed from graphlcd/logos/NRJ_HITS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NRJ_l.glcd (renamed from graphlcd/logos/NRJ_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NRJ_m.glcd (renamed from graphlcd/logos/NRJ_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NTV_l.glcd (renamed from graphlcd/logos/NTV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/NTV_m.glcd (renamed from graphlcd/logos/NTV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/NTV_v2_m.glcd (renamed from graphlcd/logos/NTV_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/N_JOY_l.glcd (renamed from graphlcd/logos/N_JOY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/N_JOY_m.glcd (renamed from graphlcd/logos/N_JOY_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/N_JOYv2_l.glcd (renamed from graphlcd/logos/N_JOYv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/OESTERREICH_1_l.glcd (renamed from graphlcd/logos/OESTERREICH_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/OESTERREICH_1_m.glcd (renamed from graphlcd/logos/OESTERREICH_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/OESTERREICH_3_l.glcd (renamed from graphlcd/logos/OESTERREICH_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/OESTERREICH_3_m.glcd (renamed from graphlcd/logos/OESTERREICH_3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/OLDIESTAR_l.glcd (renamed from graphlcd/logos/OLDIESTAR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/OLDIESTAR_m.glcd (renamed from graphlcd/logos/OLDIESTAR_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ONTV_l.glcd (renamed from graphlcd/logos/ONTV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ONTV_m.glcd (renamed from graphlcd/logos/ONTV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ONTV_v2_m.glcd (renamed from graphlcd/logos/ONTV_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ONYX_TV_l.glcd (renamed from graphlcd/logos/ONYX_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ONYX_TV_m.glcd (renamed from graphlcd/logos/ONYX_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ON_3_RADIO_l.glcd (renamed from graphlcd/logos/ON_3_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ON_3_RADIO_m.glcd (renamed from graphlcd/logos/ON_3_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF2_RADIO_l.glcd (renamed from graphlcd/logos/ORF2_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF2_RADIO_m.glcd (renamed from graphlcd/logos/ORF2_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_1_HD_l.glcd (renamed from graphlcd/logos/ORF_1_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_1_l.glcd (renamed from graphlcd/logos/ORF_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_1_m.glcd (renamed from graphlcd/logos/ORF_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_ BURGENLAND_l.glcd (renamed from graphlcd/logos/ORF_2_ BURGENLAND_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_ BURGENLAND_m.glcd (renamed from graphlcd/logos/ORF_2_ BURGENLAND_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_HD_l.glcd (renamed from graphlcd/logos/ORF_2_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_KAERNTEN_l.glcd (renamed from graphlcd/logos/ORF_2_KAERNTEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_KAERNTEN_m.glcd (renamed from graphlcd/logos/ORF_2_KAERNTEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_NIEDEROESTERREICH_l.glcd (renamed from graphlcd/logos/ORF_2_NIEDEROESTERREICH_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_NIEDEROESTERREICH_m.glcd (renamed from graphlcd/logos/ORF_2_NIEDEROESTERREICH_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_OBEROESTERREICH_l.glcd (renamed from graphlcd/logos/ORF_2_OBEROESTERREICH_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_OBEROESTERREICH_m.glcd (renamed from graphlcd/logos/ORF_2_OBEROESTERREICH_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_SALZBURG_l.glcd (renamed from graphlcd/logos/ORF_2_SALZBURG_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_SALZBURG_m.glcd (renamed from graphlcd/logos/ORF_2_SALZBURG_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_STEIERMARK_l.glcd (renamed from graphlcd/logos/ORF_2_STEIERMARK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_STEIERMARK_m.glcd (renamed from graphlcd/logos/ORF_2_STEIERMARK_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_TIROL_l.glcd (renamed from graphlcd/logos/ORF_2_TIROL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_TIROL_m.glcd (renamed from graphlcd/logos/ORF_2_TIROL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_VORARLBERG_l.glcd (renamed from graphlcd/logos/ORF_2_VORARLBERG_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_VORARLBERG_m.glcd (renamed from graphlcd/logos/ORF_2_VORARLBERG_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_WIEN_l.glcd (renamed from graphlcd/logos/ORF_2_WIEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_WIEN_m.glcd (renamed from graphlcd/logos/ORF_2_WIEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_l.glcd (renamed from graphlcd/logos/ORF_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ORF_2_m.glcd (renamed from graphlcd/logos/ORF_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/OTTO_SHOP_l.glcd (renamed from graphlcd/logos/OTTO_SHOP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/OTTO_SHOP_m.glcd (renamed from graphlcd/logos/OTTO_SHOP_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PASSION_l.glcd (renamed from graphlcd/logos/PASSION_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PEPPERMINT_FM_l.glcd (renamed from graphlcd/logos/PEPPERMINT_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PEPPERMINT_FM_m.glcd (renamed from graphlcd/logos/PEPPERMINT_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PHOENIX_l.glcd (renamed from graphlcd/logos/PHOENIX_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PHOENIX_m.glcd (renamed from graphlcd/logos/PHOENIX_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PHOENIX_v2_l.glcd (renamed from graphlcd/logos/PHOENIX_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PHOENIX_v2_m.glcd (renamed from graphlcd/logos/PHOENIX_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PLANET_RADIO_l.glcd (renamed from graphlcd/logos/PLANET_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PLANET_RADIO_m.glcd (renamed from graphlcd/logos/PLANET_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PLANET_l.glcd (renamed from graphlcd/logos/PLANET_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PLANET_m.glcd (renamed from graphlcd/logos/PLANET_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PLAYBOY_TV_l.glcd (renamed from graphlcd/logos/PLAYBOY_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PLAYBOY_TV_m.glcd (renamed from graphlcd/logos/PLAYBOY_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PLAYHOUSE_DISNEY_l.glcd (renamed from graphlcd/logos/PLAYHOUSE_DISNEY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PLAYHOUSE_DISNEY_m.glcd (renamed from graphlcd/logos/PLAYHOUSE_DISNEY_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PRO_SIEBEN_AUSTRIA_l.glcd (renamed from graphlcd/logos/PRO_SIEBEN_AUSTRIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PRO_SIEBEN_AUSTRIA_m.glcd (renamed from graphlcd/logos/PRO_SIEBEN_AUSTRIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PRO_SIEBEN_HD_l.glcd (renamed from graphlcd/logos/PRO_SIEBEN_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PRO_SIEBEN_SCHWEIZ_l.glcd (renamed from graphlcd/logos/PRO_SIEBEN_SCHWEIZ_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PRO_SIEBEN_SCHWEIZ_m.glcd (renamed from graphlcd/logos/PRO_SIEBEN_SCHWEIZ_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PRO_SIEBEN_l.glcd (renamed from graphlcd/logos/PRO_SIEBEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PRO_SIEBEN_m.glcd (renamed from graphlcd/logos/PRO_SIEBEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/PRO_SIEBENv2_l.glcd (renamed from graphlcd/logos/PRO_SIEBENv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PULS_l.glcd (renamed from graphlcd/logos/PULS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/PULS_m.glcd (renamed from graphlcd/logos/PULS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/QVC_GERMANY_l.glcd (renamed from graphlcd/logos/QVC_GERMANY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/QVC_GERMANY_m.glcd (renamed from graphlcd/logos/QVC_GERMANY_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/Q_TV_SHOP_l.glcd (renamed from graphlcd/logos/Q_TV_SHOP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/Q_TV_SHOP_m.glcd (renamed from graphlcd/logos/Q_TV_SHOP_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_10_GOLD_l.glcd (renamed from graphlcd/logos/RADIO_10_GOLD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_10_GOLD_m.glcd (renamed from graphlcd/logos/RADIO_10_GOLD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_538_l.glcd (renamed from graphlcd/logos/RADIO_538_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_538_m.glcd (renamed from graphlcd/logos/RADIO_538_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_BERLIN_88_8_l.glcd (renamed from graphlcd/logos/RADIO_BERLIN_88_8_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_BERLIN_88_8_m.glcd (renamed from graphlcd/logos/RADIO_BERLIN_88_8_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_EINS_l.glcd (renamed from graphlcd/logos/RADIO_EINS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_EINS_m.glcd (renamed from graphlcd/logos/RADIO_EINS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_GLORIA_l.glcd (renamed from graphlcd/logos/RADIO_GLORIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_GLORIA_m.glcd (renamed from graphlcd/logos/RADIO_GLORIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_HOREB_l.glcd (renamed from graphlcd/logos/RADIO_HOREB_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_HOREB_m.glcd (renamed from graphlcd/logos/RADIO_HOREB_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_MARIA_l.glcd (renamed from graphlcd/logos/RADIO_MARIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_MARIA_m.glcd (renamed from graphlcd/logos/RADIO_MARIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_MARIA_v2_m.glcd (renamed from graphlcd/logos/RADIO_MARIA_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_MULTIKULTI_l.glcd (renamed from graphlcd/logos/RADIO_MULTIKULTI_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_MULTIKULTI_m.glcd (renamed from graphlcd/logos/RADIO_MULTIKULTI_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_MULTIKULTI_v2_m.glcd (renamed from graphlcd/logos/RADIO_MULTIKULTI_v2_m.glcd)bin128 -> 128 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_PALOMA_l.glcd (renamed from graphlcd/logos/RADIO_PALOMA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_PALOMA_m.glcd (renamed from graphlcd/logos/RADIO_PALOMA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_REGENBOGEN_l.glcd (renamed from graphlcd/logos/RADIO_REGENBOGEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RADIO_REGENBOGEN_m.glcd (renamed from graphlcd/logos/RADIO_REGENBOGEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RAI _1_l.glcd (renamed from graphlcd/logos/RAI _1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RAI _1_m.glcd (renamed from graphlcd/logos/RAI _1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RAI _1v2_m.glcd (renamed from graphlcd/logos/RAI _1v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RAI _2_l.glcd (renamed from graphlcd/logos/RAI _2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RAI _2_m.glcd (renamed from graphlcd/logos/RAI _2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RAI _2v2_m.glcd (renamed from graphlcd/logos/RAI _2v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RAI _3_m.glcd (renamed from graphlcd/logos/RAI _3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RAI _3v2_m.glcd (renamed from graphlcd/logos/RAI _3v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RAI_3_l.glcd (renamed from graphlcd/logos/RAI_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RAZE_TV_l.glcd (renamed from graphlcd/logos/RAZE_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RAZE_TV_m.glcd (renamed from graphlcd/logos/RAZE_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RAZE_TV_v2_m.glcd (renamed from graphlcd/logos/RAZE_TV_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RBB_BERLIN_l.glcd (renamed from graphlcd/logos/RBB_BERLIN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RBB_BERLIN_m.glcd (renamed from graphlcd/logos/RBB_BERLIN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RBB_BRANDENBURG_l.glcd (renamed from graphlcd/logos/RBB_BRANDENBURG_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RBB_BRANDENBURG_m.glcd (renamed from graphlcd/logos/RBB_BRANDENBURG_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/REAL_MADRID_TV_l.glcd (renamed from graphlcd/logos/REAL_MADRID_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/REAL_MADRID_TV_m.glcd (renamed from graphlcd/logos/REAL_MADRID_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-CD-v2_l.glcd (renamed from graphlcd/logos/REPLAY-CD-v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-CD-v2_m.glcd (renamed from graphlcd/logos/REPLAY-CD-v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-CD_l.glcd (renamed from graphlcd/logos/REPLAY-CD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-CD_m.glcd (renamed from graphlcd/logos/REPLAY-CD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-DVD-v2_l.glcd (renamed from graphlcd/logos/REPLAY-DVD-v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-DVD_l.glcd (renamed from graphlcd/logos/REPLAY-DVD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-DVD_m.glcd (renamed from graphlcd/logos/REPLAY-DVD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-FILE_l.glcd (renamed from graphlcd/logos/REPLAY-FILE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-FILE_m.glcd (renamed from graphlcd/logos/REPLAY-FILE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-IMAGE_l.glcd (renamed from graphlcd/logos/REPLAY-IMAGE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-IMAGE_m.glcd (renamed from graphlcd/logos/REPLAY-IMAGE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-MUSIC_l.glcd (renamed from graphlcd/logos/REPLAY-MUSIC_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-MUSIC_m.glcd (renamed from graphlcd/logos/REPLAY-MUSIC_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-VDR_l.glcd (renamed from graphlcd/logos/REPLAY-VDR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/REPLAY-VDR_m.glcd (renamed from graphlcd/logos/REPLAY-VDR_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RFM_TV_m.glcd (renamed from graphlcd/logos/RFM_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RHEIN_MAIN_TV_l.glcd (renamed from graphlcd/logos/RHEIN_MAIN_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RHEIN_MAIN_TV_m.glcd (renamed from graphlcd/logos/RHEIN_MAIN_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RHEIN_MAIN_TVv2_m.glcd (renamed from graphlcd/logos/RHEIN_MAIN_TVv2_m.glcd)bin158 -> 158 bytes
-rw-r--r--graphlcd/logos/channels/RIRE_ET_CHANSONS_l.glcd (renamed from graphlcd/logos/RIRE_ET_CHANSONS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RIRE_ET_CHANSONS_m.glcd (renamed from graphlcd/logos/RIRE_ET_CHANSONS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ROCK_ANTENNE_l.glcd (renamed from graphlcd/logos/ROCK_ANTENNE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ROCK_ANTENNE_m.glcd (renamed from graphlcd/logos/ROCK_ANTENNE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ROCK_ANTENNE_v2_m.glcd (renamed from graphlcd/logos/ROCK_ANTENNE_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RSR_COULEUR_3_l.glcd (renamed from graphlcd/logos/RSR_COULEUR_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RSR_COULEUR_3_m.glcd (renamed from graphlcd/logos/RSR_COULEUR_3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTBF_SAT_l.glcd (renamed from graphlcd/logos/RTBF_SAT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTBF_SAT_m.glcd (renamed from graphlcd/logos/RTBF_SAT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_2_AUSTRIA_l.glcd (renamed from graphlcd/logos/RTL_2_AUSTRIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_2_AUSTRIA_m.glcd (renamed from graphlcd/logos/RTL_2_AUSTRIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_2_l.glcd (renamed from graphlcd/logos/RTL_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_2_m.glcd (renamed from graphlcd/logos/RTL_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_2v2_l.glcd (renamed from graphlcd/logos/RTL_2v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_4_l.glcd (renamed from graphlcd/logos/RTL_4_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_4_m.glcd (renamed from graphlcd/logos/RTL_4_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_5_l.glcd (renamed from graphlcd/logos/RTL_5_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_5_m.glcd (renamed from graphlcd/logos/RTL_5_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_AUSTRIA_l.glcd (renamed from graphlcd/logos/RTL_AUSTRIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_AUSTRIA_m.glcd (renamed from graphlcd/logos/RTL_AUSTRIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_AUSTRIA_v2_m.glcd (renamed from graphlcd/logos/RTL_AUSTRIA_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_CRIME_l.glcd (renamed from graphlcd/logos/RTL_CRIME_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_FM_l.glcd (renamed from graphlcd/logos/RTL_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_FM_m.glcd (renamed from graphlcd/logos/RTL_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_FS_l.glcd (renamed from graphlcd/logos/RTL_FS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_FS_m.glcd (renamed from graphlcd/logos/RTL_FS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_HD_l.glcd (renamed from graphlcd/logos/RTL_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_HDv2_l.glcd (renamed from graphlcd/logos/RTL_HDv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_HDv3_l.glcd (renamed from graphlcd/logos/RTL_HDv3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_PASSION_l.glcd (renamed from graphlcd/logos/RTL_PASSION_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_RADIO_l.glcd (renamed from graphlcd/logos/RTL_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_RADIO_m.glcd (renamed from graphlcd/logos/RTL_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_SHOP_l.glcd (renamed from graphlcd/logos/RTL_SHOP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_SHOP_m.glcd (renamed from graphlcd/logos/RTL_SHOP_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_SHOP_v2_m.glcd (renamed from graphlcd/logos/RTL_SHOP_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_TELE LETZEBURG_l.glcd (renamed from graphlcd/logos/RTL_TELE LETZEBURG_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_TELE LETZEBURG_m.glcd (renamed from graphlcd/logos/RTL_TELE LETZEBURG_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTL_TELE LETZEBURG_v2_l.glcd (renamed from graphlcd/logos/RTL_TELE LETZEBURG_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_TELEVISION_l.glcd (renamed from graphlcd/logos/RTL_TELEVISION_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTL_TELEVISION_m.glcd (renamed from graphlcd/logos/RTL_TELEVISION_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RTM_MAROC_l.glcd (renamed from graphlcd/logos/RTM_MAROC_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTP_INT_l.glcd (renamed from graphlcd/logos/RTP_INT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RTP_INT_m.glcd (renamed from graphlcd/logos/RTP_INT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/RUSSIA_TODAY_l.glcd (renamed from graphlcd/logos/RUSSIA_TODAY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/RUSSIA_TODAY_m.glcd (renamed from graphlcd/logos/RUSSIA_TODAY_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SAILING_CHANNEL_l.glcd (renamed from graphlcd/logos/SAILING_CHANNEL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SALZBURG_TV_l.glcd (renamed from graphlcd/logos/SALZBURG_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SALZBURG_TV_m.glcd (renamed from graphlcd/logos/SALZBURG_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1_AUSTRIA_l.glcd (renamed from graphlcd/logos/SAT.1_AUSTRIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1_AUSTRIA_m.glcd (renamed from graphlcd/logos/SAT.1_AUSTRIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1_AUSTRIA_v2_m.glcd (renamed from graphlcd/logos/SAT.1_AUSTRIA_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1_HD_l.glcd (renamed from graphlcd/logos/SAT.1_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1_SCHWEIZ_l.glcd (renamed from graphlcd/logos/SAT.1_SCHWEIZ_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1_SCHWEIZ_m.glcd (renamed from graphlcd/logos/SAT.1_SCHWEIZ_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1_SCHWEIZ_v2_m.glcd (renamed from graphlcd/logos/SAT.1_SCHWEIZ_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1_l.glcd (renamed from graphlcd/logos/SAT.1_l.glcd)bin1550 -> 1550 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1_m.glcd (renamed from graphlcd/logos/SAT.1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SAT.1v2_l.glcd (renamed from graphlcd/logos/SAT.1v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SBS6_l.glcd (renamed from graphlcd/logos/SBS6_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SBS6_m.glcd (renamed from graphlcd/logos/SBS6_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SCHMUCKKANAL_l.glcd (renamed from graphlcd/logos/SCHMUCKKANAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SCHMUCKKANAL_m.glcd (renamed from graphlcd/logos/SCHMUCKKANAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SERVUS_TV_HD_l.glcd (renamed from graphlcd/logos/SERVUS_TV_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SERVUS_TV_l.glcd (renamed from graphlcd/logos/SERVUS_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SF_ 1_l.glcd (renamed from graphlcd/logos/SF_ 1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SF_1_m.glcd (renamed from graphlcd/logos/SF_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SF_2_l.glcd (renamed from graphlcd/logos/SF_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SF_2_m.glcd (renamed from graphlcd/logos/SF_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SF_INFO_l.glcd (renamed from graphlcd/logos/SF_INFO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SF_INFO_m.glcd (renamed from graphlcd/logos/SF_INFO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SILVERLINE_l.glcd (renamed from graphlcd/logos/SILVERLINE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SILVERLINE_m.glcd (renamed from graphlcd/logos/SILVERLINE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SIXX_l.glcd (renamed from graphlcd/logos/SIXX_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SIXX_m.glcd (renamed from graphlcd/logos/SIXX_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SKY_ACTION_HD_l.glcd (renamed from graphlcd/logos/SKY_ACTION_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_ACTION_l.glcd (renamed from graphlcd/logos/SKY_ACTION_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_BUNDESLIGA_l.glcd (renamed from graphlcd/logos/SKY_BUNDESLIGA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_CINEMA+1_l.glcd (renamed from graphlcd/logos/SKY_CINEMA+1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_CINEMA+24_l.glcd (renamed from graphlcd/logos/SKY_CINEMA+24_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_CINEMAHITS_HD_l.glcd (renamed from graphlcd/logos/SKY_CINEMAHITS_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_CINEMAHITS_l.glcd (renamed from graphlcd/logos/SKY_CINEMAHITS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_CINEMA_HD_l.glcd (renamed from graphlcd/logos/SKY_CINEMA_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_CINEMA_HDv2_l.glcd (renamed from graphlcd/logos/SKY_CINEMA_HDv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_CINEMA_l.glcd (renamed from graphlcd/logos/SKY_CINEMA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_COMEDY_l.glcd (renamed from graphlcd/logos/SKY_COMEDY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_EMOTION_l.glcd (renamed from graphlcd/logos/SKY_EMOTION_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_KRIMI_l.glcd (renamed from graphlcd/logos/SKY_KRIMI_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_NEWS_INTL_l.glcd (renamed from graphlcd/logos/SKY_NEWS_INTL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_NEWS_INTL_m.glcd (renamed from graphlcd/logos/SKY_NEWS_INTL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SKY_NEWS_INTLv2_l.glcd (renamed from graphlcd/logos/SKY_NEWS_INTLv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_NEWS_INTLv2_m.glcd (renamed from graphlcd/logos/SKY_NEWS_INTLv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SKY_NEWS_l.glcd (renamed from graphlcd/logos/SKY_NEWS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_NOSTALIGIE_l.glcd (renamed from graphlcd/logos/SKY_NOSTALIGIE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_RADIO_NL_l.glcd (renamed from graphlcd/logos/SKY_RADIO_NL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_RADIO_NL_m.glcd (renamed from graphlcd/logos/SKY_RADIO_NL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SKY_SPORT_1_l.glcd (renamed from graphlcd/logos/SKY_SPORT_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_SPORT_2_l.glcd (renamed from graphlcd/logos/SKY_SPORT_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_SPORT_AUSTRIA_l.glcd (renamed from graphlcd/logos/SKY_SPORT_AUSTRIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_SPORT_HD1_l.glcd (renamed from graphlcd/logos/SKY_SPORT_HD1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SKY_SPORT_HD2_l.glcd (renamed from graphlcd/logos/SKY_SPORT_HD2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SONNENKLAR_TV_l.glcd (renamed from graphlcd/logos/SONNENKLAR_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SONNENKLAR_TV_m.glcd (renamed from graphlcd/logos/SONNENKLAR_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SPIEGEL_GESCHICHTE_l.glcd (renamed from graphlcd/logos/SPIEGEL_GESCHICHTE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SPIEGEL_TV_XXP_l.glcd (renamed from graphlcd/logos/SPIEGEL_TV_XXP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SPORT1_l.glcd (renamed from graphlcd/logos/SPORT1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SPUTNIK_l.glcd (renamed from graphlcd/logos/SPUTNIK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SPUTNIK_m.glcd (renamed from graphlcd/logos/SPUTNIK_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SPUTNIKv2_l.glcd (renamed from graphlcd/logos/SPUTNIKv2_l.glcd)bin352 -> 352 bytes
-rw-r--r--graphlcd/logos/channels/SPUTNIKv2_m.glcd (renamed from graphlcd/logos/SPUTNIKv2_m.glcd)bin123 -> 123 bytes
-rw-r--r--graphlcd/logos/channels/SR1_EUROPAWELLE_l.glcd (renamed from graphlcd/logos/SR1_EUROPAWELLE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SR2_KULTURRADIO_l.glcd (renamed from graphlcd/logos/SR2_KULTURRADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SR3_SAARLANDWELLE_l.glcd (renamed from graphlcd/logos/SR3_SAARLANDWELLE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SR_1_l.glcd (renamed from graphlcd/logos/SR_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SR_1_m.glcd (renamed from graphlcd/logos/SR_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SR_FERNSEHEN_l.glcd (renamed from graphlcd/logos/SR_FERNSEHEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SR_FERNSEHEN_m.glcd (renamed from graphlcd/logos/SR_FERNSEHEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SUEDWEST_FS_RP_l.glcd (renamed from graphlcd/logos/SUEDWEST_FS_RP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SUEDWEST_FS_RP_m.glcd (renamed from graphlcd/logos/SUEDWEST_FS_RP_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SUEDWEST_FS_RPv2_l.glcd (renamed from graphlcd/logos/SUEDWEST_FS_RPv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SUNSHINE_LIVE_l.glcd (renamed from graphlcd/logos/SUNSHINE_LIVE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SUNSHINE_LIVE_m.glcd (renamed from graphlcd/logos/SUNSHINE_LIVE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SUNSHINE_LIVE_v2_m.glcd (renamed from graphlcd/logos/SUNSHINE_LIVE_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SUPER_RTL_AUSTRIA_l.glcd (renamed from graphlcd/logos/SUPER_RTL_AUSTRIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SUPER_RTL_AUSTRIA_m.glcd (renamed from graphlcd/logos/SUPER_RTL_AUSTRIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SUPER_RTL_l.glcd (renamed from graphlcd/logos/SUPER_RTL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SUPER_RTL_m.glcd (renamed from graphlcd/logos/SUPER_RTL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SUPER_RTLv2_l.glcd (renamed from graphlcd/logos/SUPER_RTLv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_1_BW_l.glcd (renamed from graphlcd/logos/SWR_1_BW_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_1_BW_m.glcd (renamed from graphlcd/logos/SWR_1_BW_m.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_1_RP_l.glcd (renamed from graphlcd/logos/SWR_1_RP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_1_RP_m.glcd (renamed from graphlcd/logos/SWR_1_RP_m.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_1_l.glcd (renamed from graphlcd/logos/SWR_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_1_m.glcd (renamed from graphlcd/logos/SWR_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SWR_2_l.glcd (renamed from graphlcd/logos/SWR_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_2_m.glcd (renamed from graphlcd/logos/SWR_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SWR_2v2_l.glcd (renamed from graphlcd/logos/SWR_2v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_2v2_m.glcd (renamed from graphlcd/logos/SWR_2v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SWR_3_l.glcd (renamed from graphlcd/logos/SWR_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_3_m.glcd (renamed from graphlcd/logos/SWR_3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SWR_3v2_l.glcd (renamed from graphlcd/logos/SWR_3v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_3v2_m.glcd (renamed from graphlcd/logos/SWR_3v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SWR_4_BW_l.glcd (renamed from graphlcd/logos/SWR_4_BW_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_4_BW_m.glcd (renamed from graphlcd/logos/SWR_4_BW_m.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_4_RP_l.glcd (renamed from graphlcd/logos/SWR_4_RP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_4_RP_m.glcd (renamed from graphlcd/logos/SWR_4_RP_m.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_4_l.glcd (renamed from graphlcd/logos/SWR_4_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_4_m.glcd (renamed from graphlcd/logos/SWR_4_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SWR_BW_l.glcd (renamed from graphlcd/logos/SWR_BW_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_CONT_RA_l.glcd (renamed from graphlcd/logos/SWR_CONT_RA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_CONT_RA_m.glcd (renamed from graphlcd/logos/SWR_CONT_RA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SWR_FERNSEHEN_BW_l.glcd (renamed from graphlcd/logos/SWR_FERNSEHEN_BW_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/SWR_FERNSEHEN_BW_m.glcd (renamed from graphlcd/logos/SWR_FERNSEHEN_BW_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/SYFY_l.glcd (renamed from graphlcd/logos/SYFY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TANGO TV_l.glcd (renamed from graphlcd/logos/TANGO TV_l.glcd)bin352 -> 352 bytes
-rw-r--r--graphlcd/logos/channels/TANGO TV_m.glcd (renamed from graphlcd/logos/TANGO TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TEDDY_l.glcd (renamed from graphlcd/logos/TEDDY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TEDDY_m.glcd (renamed from graphlcd/logos/TEDDY_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TELE_5_l.glcd (renamed from graphlcd/logos/TELE_5_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TELE_5_m.glcd (renamed from graphlcd/logos/TELE_5_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TELE_5v2_l.glcd (renamed from graphlcd/logos/TELE_5v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TMF_l.glcd (renamed from graphlcd/logos/TMF_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TMF_m.glcd (renamed from graphlcd/logos/TMF_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TNT_SERIE_l.glcd (renamed from graphlcd/logos/TNT_SERIE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TRACE_TV_l.glcd (renamed from graphlcd/logos/TRACE_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TRACE_TV_m.glcd (renamed from graphlcd/logos/TRACE_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TRW_AM_l.glcd (renamed from graphlcd/logos/TRW_AM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TSI_1_l.glcd (renamed from graphlcd/logos/TSI_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TSI_1_m.glcd (renamed from graphlcd/logos/TSI_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TSR_1_l.glcd (renamed from graphlcd/logos/TSR_1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TSR_1_m.glcd (renamed from graphlcd/logos/TSR_1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TVC_INT_l.glcd (renamed from graphlcd/logos/TVC_INT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TVC_INT_m.glcd (renamed from graphlcd/logos/TVC_INT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TVE_INT_l.glcd (renamed from graphlcd/logos/TVE_INT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TVE_INT_m.glcd (renamed from graphlcd/logos/TVE_INT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TV_5_EUROPE_l.glcd (renamed from graphlcd/logos/TV_5_EUROPE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TV_5_EUROPE_m.glcd (renamed from graphlcd/logos/TV_5_EUROPE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TV_5_l.glcd (renamed from graphlcd/logos/TV_5_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TV_5_m.glcd (renamed from graphlcd/logos/TV_5_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TV_6_l.glcd (renamed from graphlcd/logos/TV_6_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TV_6_m.glcd (renamed from graphlcd/logos/TV_6_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TV_7_l.glcd (renamed from graphlcd/logos/TV_7_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TV_7_m.glcd (renamed from graphlcd/logos/TV_7_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TV_BERLIN_l.glcd (renamed from graphlcd/logos/TV_BERLIN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TV_BERLIN_m.glcd (renamed from graphlcd/logos/TV_BERLIN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TV_BERLIN_v2_l.glcd (renamed from graphlcd/logos/TV_BERLIN_v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TV_BERLIN_v2_m.glcd (renamed from graphlcd/logos/TV_BERLIN_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TV_BERLIN_v3_m.glcd (renamed from graphlcd/logos/TV_BERLIN_v3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TV_GALICIA_m.glcd (renamed from graphlcd/logos/TV_GALICIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TV_GUSTO_l.glcd (renamed from graphlcd/logos/TV_GUSTO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TV_GUSTO_m.glcd (renamed from graphlcd/logos/TV_GUSTO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TW1_l.glcd (renamed from graphlcd/logos/TW1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/TW1_m.glcd (renamed from graphlcd/logos/TW1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/TW1v2_m.glcd (renamed from graphlcd/logos/TW1v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VERONICA_RADIO_l.glcd (renamed from graphlcd/logos/VERONICA_RADIO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VERONICA_RADIO_m.glcd (renamed from graphlcd/logos/VERONICA_RADIO_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VH1_CLASSIC_l.glcd (renamed from graphlcd/logos/VH1_CLASSIC_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VH1_CLASSIC_m.glcd (renamed from graphlcd/logos/VH1_CLASSIC_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VH1_l.glcd (renamed from graphlcd/logos/VH1_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VH1_m.glcd (renamed from graphlcd/logos/VH1_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VIBRATION_l.glcd (renamed from graphlcd/logos/VIBRATION_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VIBRATION_m.glcd (renamed from graphlcd/logos/VIBRATION_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VIVA_GERMANY_l.glcd (renamed from graphlcd/logos/VIVA_GERMANY_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VIVA_GERMANY_m.glcd (renamed from graphlcd/logos/VIVA_GERMANY_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VIVA_PLUS_l.glcd (renamed from graphlcd/logos/VIVA_PLUS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VIVA_PLUS_m.glcd (renamed from graphlcd/logos/VIVA_PLUS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VIVA_PLUSv2_m.glcd (renamed from graphlcd/logos/VIVA_PLUSv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VIVA_l.glcd (renamed from graphlcd/logos/VIVA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VIVA_m.glcd (renamed from graphlcd/logos/VIVA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VOLTAGE_l.glcd (renamed from graphlcd/logos/VOLTAGE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VOLTAGE_m.glcd (renamed from graphlcd/logos/VOLTAGE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VOX_AUSTRIA_l.glcd (renamed from graphlcd/logos/VOX_AUSTRIA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VOX_AUSTRIA_m.glcd (renamed from graphlcd/logos/VOX_AUSTRIA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VOX_CH_l.glcd (renamed from graphlcd/logos/VOX_CH_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VOX_CH_m.glcd (renamed from graphlcd/logos/VOX_CH_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VOX_HD_l.glcd (renamed from graphlcd/logos/VOX_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VOX_l.glcd (renamed from graphlcd/logos/VOX_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/VOX_m.glcd (renamed from graphlcd/logos/VOX_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/VOXv2_m.glcd (renamed from graphlcd/logos/VOXv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WDR_2_l.glcd (renamed from graphlcd/logos/WDR_2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WDR_2_m.glcd (renamed from graphlcd/logos/WDR_2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WDR_3_l.glcd (renamed from graphlcd/logos/WDR_3_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WDR_3_m.glcd (renamed from graphlcd/logos/WDR_3_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WDR_3v2_l.glcd (renamed from graphlcd/logos/WDR_3v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WDR_3v2_m.glcd (renamed from graphlcd/logos/WDR_3v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WDR_4_l.glcd (renamed from graphlcd/logos/WDR_4_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WDR_4_m.glcd (renamed from graphlcd/logos/WDR_4_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WDR_5_l.glcd (renamed from graphlcd/logos/WDR_5_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WDR_5_m.glcd (renamed from graphlcd/logos/WDR_5_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WDR_5v2_l.glcd (renamed from graphlcd/logos/WDR_5v2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WDR_5v2_m.glcd (renamed from graphlcd/logos/WDR_5v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WDR_EVENT_l.glcd (renamed from graphlcd/logos/WDR_EVENT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WDR_EVENT_m.glcd (renamed from graphlcd/logos/WDR_EVENT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WDR_FUNKHAUS_EUROPA_l.glcd (renamed from graphlcd/logos/WDR_FUNKHAUS_EUROPA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WDR_FUNKHAUS_EUROPA_m.glcd (renamed from graphlcd/logos/WDR_FUNKHAUS_EUROPA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WDR_l.glcd (renamed from graphlcd/logos/WDR_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WDR_m.glcd (renamed from graphlcd/logos/WDR_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WEIN_TV_l.glcd (renamed from graphlcd/logos/WEIN_TV_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WEIN_TV_m.glcd (renamed from graphlcd/logos/WEIN_TV_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WETTER_FERNSEHEN_l.glcd (renamed from graphlcd/logos/WETTER_FERNSEHEN_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WETTER_FERNSEHEN_m.glcd (renamed from graphlcd/logos/WETTER_FERNSEHEN_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WISHLINE_l.glcd (renamed from graphlcd/logos/WISHLINE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WISHLINE_m.glcd (renamed from graphlcd/logos/WISHLINE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/WRN_DEUTSCH_l.glcd (renamed from graphlcd/logos/WRN_DEUTSCH_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/WRN_DEUTSCH_m.glcd (renamed from graphlcd/logos/WRN_DEUTSCH_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/XXL_l.glcd (renamed from graphlcd/logos/XXL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/XXL_m.glcd (renamed from graphlcd/logos/XXL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/XXP_l.glcd (renamed from graphlcd/logos/XXP_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/XXP_m.glcd (renamed from graphlcd/logos/XXP_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/XXP_v2_m.glcd (renamed from graphlcd/logos/XXP_v2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/X_ZONE_l.glcd (renamed from graphlcd/logos/X_ZONE_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/X_ZONE_m.glcd (renamed from graphlcd/logos/X_ZONE_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/YAM_FM_l.glcd (renamed from graphlcd/logos/YAM_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/YAM_FM_m.glcd (renamed from graphlcd/logos/YAM_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/YAVIDO_CLIPS_l.glcd (renamed from graphlcd/logos/YAVIDO_CLIPS_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/YAVIDO_CLIPS_m.glcd (renamed from graphlcd/logos/YAVIDO_CLIPS_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/YORIN_FM_l.glcd (renamed from graphlcd/logos/YORIN_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/YORIN_FM_m.glcd (renamed from graphlcd/logos/YORIN_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/YOU_FM_l.glcd (renamed from graphlcd/logos/YOU_FM_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/YOU_FM_m.glcd (renamed from graphlcd/logos/YOU_FM_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_DOKUKANAL_l.glcd (renamed from graphlcd/logos/ZDF_DOKUKANAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_DOKUKANAL_m.glcd (renamed from graphlcd/logos/ZDF_DOKUKANAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_DOKUKANALv2_l.glcd (renamed from graphlcd/logos/ZDF_DOKUKANALv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_DOKUKANALv2_m.glcd (renamed from graphlcd/logos/ZDF_DOKUKANALv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_DOKU_KIKA_l.glcd (renamed from graphlcd/logos/ZDF_DOKU_KIKA_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_DOKU_KIKA_m.glcd (renamed from graphlcd/logos/ZDF_DOKU_KIKA_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_HD_l.glcd (renamed from graphlcd/logos/ZDF_HD_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_HD_m.glcd (renamed from graphlcd/logos/ZDF_HD_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_HDv2_l.glcd (renamed from graphlcd/logos/ZDF_HDv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_HDv2_m.glcd (renamed from graphlcd/logos/ZDF_HDv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_INFOKANAL_l.glcd (renamed from graphlcd/logos/ZDF_INFOKANAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_INFOKANAL_m.glcd (renamed from graphlcd/logos/ZDF_INFOKANAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_INFOKANALv2_l.glcd (renamed from graphlcd/logos/ZDF_INFOKANALv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_INFOKANALv2_m.glcd (renamed from graphlcd/logos/ZDF_INFOKANALv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_INFO_3SAT_l.glcd (renamed from graphlcd/logos/ZDF_INFO_3SAT_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_INFO_3SAT_m.glcd (renamed from graphlcd/logos/ZDF_INFO_3SAT_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_NEO_l.glcd (renamed from graphlcd/logos/ZDF_NEO_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_THEATERKANAL_l.glcd (renamed from graphlcd/logos/ZDF_THEATERKANAL_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_THEATERKANAL_m.glcd (renamed from graphlcd/logos/ZDF_THEATERKANAL_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_THEATERKANALv2_l.glcd (renamed from graphlcd/logos/ZDF_THEATERKANALv2_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_THEATERKANALv2_m.glcd (renamed from graphlcd/logos/ZDF_THEATERKANALv2_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_l.glcd (renamed from graphlcd/logos/ZDF_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZDF_m.glcd (renamed from graphlcd/logos/ZDF_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/ZIK_l.glcd (renamed from graphlcd/logos/ZIK_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/ZIK_m.glcd (renamed from graphlcd/logos/ZIK_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/_l.glcd (renamed from graphlcd/logos/_l.glcd)bin392 -> 392 bytes
-rw-r--r--graphlcd/logos/channels/_m.glcd (renamed from graphlcd/logos/_m.glcd)bin153 -> 153 bytes
-rw-r--r--graphlcd/logos/channels/animated/SAT1_l.glcd (renamed from graphlcd/logos/animated/SAT1_l.glcd)bin1550 -> 1550 bytes
-rw-r--r--graphlcd/logos/replay/animated/replay-cd_l.glcd (renamed from graphlcd/logos/animated/REPLAY-CD_l.glcd)bin782 -> 782 bytes
-rw-r--r--graphlcd/logos/replay/animated/replay-dvd_l.glcd (renamed from graphlcd/logos/animated/REPLAY-DVD_l.glcd)bin782 -> 782 bytes
-rw-r--r--graphlcd/logos/replay/animated/replay-file_l.glcd (renamed from graphlcd/logos/animated/REPLAY-FILE_l.glcd)bin782 -> 782 bytes
-rw-r--r--graphlcd/logos/replay/animated/replay-image_l.glcd (renamed from graphlcd/logos/animated/REPLAY-IMAGE_l.glcd)bin782 -> 782 bytes
-rw-r--r--graphlcd/logos/replay/animated/replay-music_l.glcd (renamed from graphlcd/logos/animated/REPLAY-MUSIC_l.glcd)bin782 -> 782 bytes
-rw-r--r--graphlcd/logos/replay/animated/replay-vdr_l.glcd (renamed from graphlcd/logos/animated/REPLAY-VDR_l.glcd)bin12302 -> 12302 bytes
-rw-r--r--graphlcd/logos/replay/animated/replay-vdr_m.glcd (renamed from graphlcd/logos/animated/REPLAY-VDR_m.glcd)bin4654 -> 4654 bytes
-rw-r--r--graphlcd/logos/replay/animated/replay-vdr_v2_l.glcd (renamed from graphlcd/logos/animated/REPLAY-VDR_v2_l.glcd)bin782 -> 782 bytes
-rw-r--r--graphlcd/logos/replay/replay-cd_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/replay/replay-cd_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/replay/replay-cd_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/replay/replay-cd_v2_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/replay/replay-dvd_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/replay/replay-dvd_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/replay/replay-dvd_v2_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/replay/replay-file_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/replay/replay-file_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/replay/replay-image_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/replay/replay-image_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/replay/replay-music_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/replay/replay-music_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos/replay/replay-vdr_l.glcdbin0 -> 392 bytes
-rw-r--r--graphlcd/logos/replay/replay-vdr_m.glcdbin0 -> 153 bytes
-rw-r--r--graphlcd/logos_bmp/13th_Street_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/1LIVE_DIGGI_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/1LIVE_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/3SAT_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/AnixeHD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/BAYERN1_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/BAYERN2_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/BAYERN3_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/BR_ALPHA_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/BR_KLASSIK_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/BR_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Beate-Uhse.TV_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/CONT.RA_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Classica_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/DAS_DING_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/DELUXE_MUSIC_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/DELUXE_RADIO_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/DMAX_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/DSF_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/DasErsteHD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Discovery_Channel_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Discovery_HD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/DisneyXD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Disney_Channel_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Disney_Cinemagic_HD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Disney_Cinemagic_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/EINS_EXTRA_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/EINS_FESTIVAL_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/EINS_PLUS_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/EURONEWS_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/EinsFestival_HD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Eurosport_HD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/FOX_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/GO_TV_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/GoldStarTV_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/HR_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Heimatkanal_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/History_HD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/I_MUSIC_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Junior_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/KABEL1_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/KLASSIK_RADIO_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/MDR_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/MGM_Channel_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/MotorvisionTV_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Music_Choice_Extra_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/N24_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/NAT_GEO_WILD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/NDR_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/NJOY_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/NRJ_HITS_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/National_Geographic_HD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/National_Geographic_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/ORF_1_HD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/ORF_2_HD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/PHOENIX_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Passion_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Playhouse_Disney_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/RTL_Crime_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/RTL_II_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SAT1_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SIXX_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKYNEWS_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_actionHD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_action_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_bundesliga_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_cinema+1_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_cinema+24_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_cinemaHD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_cinema_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_cinemahitsHD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_cinemahits_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_comedy_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_emotion_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_krimi_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_nostalgie_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_sport1_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_sport2_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_sportHD1_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_sportHD2_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SKY_sport_austria_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SPIEGEL_Geschichte_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SPORT1_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SUPER_RTL_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SWR1_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SWR2_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SWR3_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SWR4_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/SWR_BW_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/ServusTV.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/Syfy_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/TELE_5_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/TNT_Serie_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/TW1_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/WDR_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/ZDF_HD_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/ZDF_NEO_l.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/logos_bmp/arteHD_L.bmpbin446 -> 0 bytes
-rw-r--r--graphlcd/skins/default/default.skin433
-rw-r--r--graphlcd/skins/default/images/arrow.pbmbin0 -> 59 bytes
-rw-r--r--graphlcd/skins/default/images/arrow_small.pbm4
-rw-r--r--graphlcd/skins/default/images/message.pbmbin0 -> 123 bytes
-rw-r--r--graphlcd/skins/default/images/mute.pbm4
-rw-r--r--graphlcd/skins/default/symbols/dolby.pbm4
-rw-r--r--graphlcd/skins/default/symbols/dolby_small.pbm4
-rw-r--r--graphlcd/skins/default/symbols/empty.pbm4
-rw-r--r--graphlcd/skins/default/symbols/empty_small.pbm4
-rw-r--r--graphlcd/skins/default/symbols/multilanguage.pbm4
-rw-r--r--graphlcd/skins/default/symbols/multilanguage_small.pbm4
-rw-r--r--graphlcd/skins/default/symbols/mute.pbm4
-rw-r--r--graphlcd/skins/default/symbols/mute_small.pbm4
-rw-r--r--graphlcd/skins/default/symbols/recording.pbm4
-rw-r--r--graphlcd/skins/default/symbols/recording2.pbm4
-rw-r--r--graphlcd/skins/default/symbols/recording2_small.pbm4
-rw-r--r--graphlcd/skins/default/symbols/recording3.pbm4
-rw-r--r--graphlcd/skins/default/symbols/recording3_small.pbm4
-rw-r--r--graphlcd/skins/default/symbols/recording4.pbm4
-rw-r--r--graphlcd/skins/default/symbols/recording4_small.pbm4
-rw-r--r--graphlcd/skins/default/symbols/recording_small.pbm4
-rw-r--r--graphlcd/skins/default/symbols/replay-fast-fwd.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/default/symbols/replay-fast-rwd.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/default/symbols/replay-pause.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/default/symbols/replay-play.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/default/symbols/replay-slow-fwd.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/default/symbols/replay-slow-rwd.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/default/symbols/scrambled.pbm4
-rw-r--r--graphlcd/skins/default/symbols/scrambled_small.pbm4
-rw-r--r--graphlcd/skins/default/symbols/teletext.pbm4
-rw-r--r--graphlcd/skins/default/symbols/teletext_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/images/arrow.pbmbin0 -> 59 bytes
-rw-r--r--graphlcd/skins/touchcol/images/arrow_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/images/message.pbmbin0 -> 123 bytes
-rw-r--r--graphlcd/skins/touchcol/images/mute.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/dolby.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/dolby_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/empty.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/empty_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/multilanguage.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/multilanguage_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/mute.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/mute_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/recording.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/recording2.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/recording2_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/recording3.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/recording3_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/recording4.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/recording4_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/recording_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/replay-fast-fwd.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/touchcol/symbols/replay-fast-rwd.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/touchcol/symbols/replay-pause.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/touchcol/symbols/replay-play.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/touchcol/symbols/replay-slow-fwd.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/touchcol/symbols/replay-slow-rwd.pbmbin0 -> 63 bytes
-rw-r--r--graphlcd/skins/touchcol/symbols/scrambled.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/scrambled_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/teletext.pbm4
-rw-r--r--graphlcd/skins/touchcol/symbols/teletext_small.pbm4
-rw-r--r--graphlcd/skins/touchcol/touchcol.skin421
-rw-r--r--i18n.c1770
-rw-r--r--i18n.h4
-rw-r--r--layout.c171
-rw-r--r--layout.h54
-rw-r--r--logo.c35
-rw-r--r--logo.h44
-rw-r--r--logolist.c177
-rw-r--r--logolist.h65
-rw-r--r--menu.c131
-rw-r--r--menu.h8
-rw-r--r--patches/femon-1.1.5_fixnullandsegfault_path.diff38
-rw-r--r--patches/femon-1.7.7_fixsegfault_patch.diff11
-rw-r--r--plugin.c674
-rw-r--r--po/de_DE.po50
-rw-r--r--po/fi_FI.po49
-rw-r--r--po/fr_FR.po49
-rw-r--r--[-rwxr-xr-x]po/it_IT.po50
-rw-r--r--po/ro_RO.po49
-rw-r--r--service.c626
-rw-r--r--service.h111
-rw-r--r--setup.c97
-rw-r--r--setup.h54
-rw-r--r--skinconfig.c999
-rw-r--r--skinconfig.h50
-rw-r--r--state.c798
-rw-r--r--state.h103
-rw-r--r--strfct.c84
-rw-r--r--widgets.c95
-rw-r--r--widgets.h61
1197 files changed, 7085 insertions, 6263 deletions
diff --git a/HISTORY b/HISTORY
index 11075ef..2bc47f1 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,26 +1,6 @@
VDR Plugin 'graphlcd' Revision History
-------------------------------------
-2011-02-13: version 0.1.9
-- fixed vdr 1.6.0 combatibility and several typos
-- added SVDRP support (TomJoad): http://projects.vdr-developer.org/issues/488
-- added SPAN support (Mreimer): http://projects.vdr-developer.org/issues/523
-- new: logonames.alias is now named channels.alias, which is maintained by wbreu
-
-
-2010-11-21: version 0.1.8
-- added --exclude .git in make dist
-- code minimizing (http://www.vdrportal.de/board/thread.php?postid=955543#post955543)
-- wrong recordinglength with vdr-1.7.x (http://projects.vdr-developer.org/issues/443)
-- fixed NULL-pointer-exception when using UTF-8 and Freetype fonts (http://projects.vdr-developer.org/issues/457)
- patches by Steve135 - http://www.vdrportal.de/board/thread.php?postid=955543#post955543
-
-
-2010-11-02: version 0.1.7
-- added wbreus logo pack (http://wbreu.htpc-forum.de/vdrplugins/vdrgraphlcdplugin/index.php)
-- added utf8 conversion for correct display (http://projects.vdr-developer.org/issues/436)
-
-
2010-03-01: Version 0.1.6
- added UTF8 support (vdr-graphlcd-0.1.5-utf8_i18n.diff)
- added include path graphlcd-base/ in Makefile
@@ -28,7 +8,6 @@ VDR Plugin 'graphlcd' Revision History
- changed FRAMESPERSEC to DEFAULTFRAMESPERSECOND (vdr-1.7.x)
- modified Makefile for vdr-1.7.13
-
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)
@@ -59,3 +38,425 @@ VDR Plugin 'graphlcd' Revision History
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
index 1c69325..f0321e8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,50 +1,158 @@
#
# Makefile for a Video Disk Recorder plugin
#
+# Compliant with: VDR >= 1.7.34 (new Makefile style) but also VDR 1.4.x, VDR 1.6.x, up to VDR 1.7.33 ('old style Makefiles')
+#
# $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
-# define this if you built graphlcd-base with freetype:
-HAVE_FREETYPE2 = 1
+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:
+### The directory environment:
-CXX ?= g++
-CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
+# Use package data if installed...otherwise assume we're under the VDR source directory:
+PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell pkg-config --variable=$(1) vdr || pkg-config --variable=$(1) ../../../vdr.pc))
+LIBDIR = $(call PKGCFG,libdir)
+LOCDIR = $(call PKGCFG,locdir)
+PLGCFG = $(call PKGCFG,plgcfg)
+#
+TMPDIR ?= /tmp
+
+### The compiler options:
+
+export CFLAGS = $(call PKGCFG,cflags)
+export CXXFLAGS = $(call PKGCFG,cxxflags)
+
+### The version number of VDR's plugin API:
+
+APIVERSION = $(call PKGCFG,apiversion)
+
+
+# FLAG_PKGCFG: is pkg-config existing for vdr?
+# 'auto' : via pkg-config vdr,
+# 'absolute': via pkg-config $(VDRDIR)/vdr.pc,
+# 'relative': via pkg-config ../../../vdr.pc,
+# 'no' : compiling w/o pkg-config
+FLAG_PKGCFG=no
+ifneq ($(VDRDIR),)
+ ifeq ($(shell pkg-config --exists $(VDRDIR)/vdr.pc && echo yes),yes)
+ FLAG_PKGCFG=absolute
+ endif
+else
+ ifeq ($(shell pkg-config --exists vdr && echo yes),yes)
+ FLAG_PKGCFG=auto
+ else
+ ifeq ($(shell pkg-config --exists ../../../vdr.pc && echo yes),yes)
+ FLAG_PKGCFG=relative
+ endif
+ endif
+endif
-### The directory environment:
+ifeq ($(strip $(APIVERSION)),)
+ # APIVERSION is empty? either pkg-config was not successful or vdr is too old:
+ # assume in-vdr-tree compilation: set VDRDIR Makefile-wide
+ VDRDIR ?= ../../..
+ APIVERSION = $(shell grep 'define APIVERSION ' $(VDRDIR)/config.h | cut -d'"' -f2)
+endif
+
+# still no APIVERSION? bail out
+ifeq ($(APIVERSION),)
+ $(error no APIVERSION found, bailing out ...)
+endif
-VDRDIR = ../../..
-LIBDIR = ../../lib
-TMPDIR = /tmp
+# get numeric VDR version number for numeric comparisons (eg: 1.7.47 -> 10747)
+APIVERSNUM = $(shell printf "%2d%02d%02d" $(subst ., ,$(APIVERSION)))
-export INSTALLPREFIX = /usr
-export INSTALLDOCDIR = $(INSTALLPREFIX)/share/doc
+# non-Makefile-wide VDRDIR only for internal use
+ifeq ($(VDRDIR),)
+ TEMP_VDRDIR = ../../..
+else
+ TEMP_VDRDIR = $(VDRDIR)
+endif
-### Make sure that necessary options are included:
+# post 1.7.33 vdr?
+FLAG_NEWSTYLE=false
+$(shell [ $(APIVERSNUM) -gt 10733 ] && FLAG_NEWSTYLE=true)
+
+# do some adaptions and defaults for old vdr versions
+ifeq ($(FLAG_NEWSTYLE),false)
+ CXXFLAGS += $(call PKGCFG,plugincflags)
+ # ensure -fPIC
+ ifeq ($(findstring -fPIC,$(CXXFLAGS)),)
+ CXXFLAGS += -fPIC
+ endif
+ export CXXFLAGS
+
+ ifeq ($(LOCDIR),)
+ LOCDIR = $(call PKGCFG,localedir)
+ ifeq ($(LOCDIR),)
+ LOCDIR = $(TEMP_VDRDIR)/locale
+ endif
+ endif
+ # avoid relative locale path
+ ifeq ($(LOCDIR),./locale)
+ LOCDIR = $(TEMP_VDRDIR)/locale
+ endif
+
+ ifeq ($(PLGCFG),)
+ PLGCFG = $(TEMP_VDRDIR)/Make.config
+ endif
+
+ # fallbacks
+ ifeq ($(LIBDIR),)
+ LIBDIR = $(TEMP_VDRDIR)/PLUGINS/lib
+ endif
+endif
+-include $(PLGCFG)
--include $(VDRDIR)/Make.global
+# some paranoia security checks
+ifeq ($(LIBDIR),)
+ $(error LIBDIR not set, bailing out ...)
+endif
+ifeq ($(shell [ $(APIVERSNUM) -ge 10500 ] && echo yes),yes)
+ ifeq ($(LOCDIR),)
+ $(error LOCDIR not set, bailing out ...)
+ endif
+endif
+
### Allow user defined options to overwrite defaults:
--include $(VDRDIR)/Make.config
+# make sure to have a correct RESDIR
+MYRESDIR = $(call PKGCFG,resdir)
+ifeq ($(MYRESDIR),)
+ MYRESDIR = /usr/share/vdr
+endif
+RESDIR := $(MYRESDIR)/plugins/$(PLUGIN)
-### 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
+# define this if you built graphlcd-base with freetype:
+HAVE_FREETYPE2 ?= 1
+
+# define this if femon-plugin <= 1.7.7 is used AND which has already been patched (see README)
+# either define this setting here or in $VDRDIR/Make.config or in $VDRDIR/Make.global
+HAVE_VALID_FEMON ?= 0
+
+# define the path to the graphlcd.conf file. if not defined, path = "/etc/graphlcd.conf"
+#PLUGIN_GRAPHLCDCONF = "$(CONFDIR)/plugins/$(PLUGIN)/graphlcd.conf"
+
+# defines if installing of TTF should be omitted (default is to install)
+SKIP_INSTALL_TTF ?= 0
+
+# defines if installing of documentation should be omitted (default is to install)
+SKIP_INSTALL_DOC ?= 0
+
+# if no prefix defined: use a default one
+PREFIX ?= /usr
+
+# if we install the documentation ourselves, do it here:
+export INSTALLDOCDIR = $(PREFIX)/share/doc/vdr-$(PLUGIN)-$(VERSION)
### The name of the distribution archive:
@@ -52,95 +160,142 @@ endif
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
+### The name of the shared object file:
+
+SOFILE = libvdr-$(PLUGIN).so
### Includes and Defines (add further entries here):
-INCLUDES += -I./graphlcd-base/ -I$(VDRDIR)/include -I$(INSTALLPREFIX)/include
+#include $(VDRDIR)/include if vdr is not installed via package-systems or the like
+ifneq ($(FLAG_PKGCFG),auto)
+ INCLUDES += -I$(TEMP_VDRDIR)/include
+endif
+INCLUDES += -I./graphlcd-base/ -I$(PREFIX)/include
-DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
+DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
-ifdef HAVE_FREETYPE2
- INCLUDES += -I$(INSTALLPREFIX)/include/freetype2
+ifneq ($(HAVE_FREETYPE2), 0)
+ INCLUDES += $(shell pkg-config --cflags freetype2 || echo "-I$(PREFIX)/include/freetype2")
DEFINES += -DHAVE_FREETYPE2
endif
+# if a valid and/or fixed femon-plugin is available
+ifneq ($(HAVE_VALID_FEMON), 0)
+ DEFINES += -DGRAPHLCD_SERVICE_FEMON_VALID
+endif
+
+# if a graphlcd.conf different than the default one in /etc is provided
+ifdef PLUGIN_GRAPHLCDCONF
+ DEFINES += -DPLUGIN_GRAPHLCDCONF='${PLUGIN_GRAPHLCDCONF}'
+endif
+
+# if we add TTF to additional install targets
+ifeq ($(SKIP_INSTALL_TTF), 0)
+ INS_TARGET_TTF = ttf-fonts
+endif
+
+# if we add documentations to additional install targets
+ifeq ($(SKIP_INSTALL_DOC), 0)
+ INS_TARGET_DOCS = docs
+endif
+
### The object files (add further files here):
-OBJS = display.o layout.o logo.o logolist.o menu.o plugin.o setup.o state.o strfct.o widgets.o
+OBJS = alias.o common.o display.o menu.o plugin.o setup.o skinconfig.o state.o strfct.o service.o extdata.o
-### The main target:
-TARGETS = libvdr-$(PLUGIN).so
-ifneq ($(shell grep -l 'Phrases' $(VDRDIR)/i18n.c),$(VDRDIR)/i18n.c)
-TARGETS += i18n
+# internationalisation: check if new style (> vdr 1.4.x) or fall back to 1.4.x
+ifeq ($(shell [ $(APIVERSNUM) -ge 10500 ] && echo yes),yes)
+ I18NTARGET = i18n
+else
+ OBJS += i18n.o
endif
+### The main target:
-all: $(TARGETS)
+all: $(SOFILE) $(I18NTARGET)
### Implicit rules:
%.o: %.c
- $(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
-
+ $(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
-# Dependencies:
+### Dependencies:
-MAKEDEP = g++ -MM -MG
+MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
- @$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
+ @$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
-
### Internationalization (I18N):
PODIR = po
-LOCALEDIR = $(VDRDIR)/locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
-I18Ndirs = $(notdir $(foreach file, $(I18Npo), $(basename $(file))))
+I18Nmsgs = $(addprefix $(DESTDIR)$(LOCDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Npot = $(PODIR)/$(PLUGIN).pot
-
%.mo: %.po
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
- xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<nobody@domain.com>' -o $@ $^
+ xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=vdr-$(PLUGIN) --package-version=$(VERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^`
-$(I18Npo): $(I18Npot)
- msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
+%.po: $(I18Npot)
+ msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
@touch $@
-i18n: $(I18Nmo)
- @mkdir -p $(LOCALEDIR)
- for i in $(I18Ndirs); do\
- mkdir -p $(LOCALEDIR)/$$i/LC_MESSAGES;\
- cp $(PODIR)/$$i.mo $(LOCALEDIR)/$$i/LC_MESSAGES/vdr-$(PLUGIN).mo;\
- done
+$(I18Nmsgs): $(DESTDIR)$(LOCDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
+ install -D -m644 $< $@
+
+.PHONY: i18n
+i18n: $(I18Nmo) $(I18Npot)
+
+install-i18n: $(I18Nmsgs)
### Targets:
-libvdr-$(PLUGIN).so: $(OBJS)
- $(CXX) $(CXXFLAGS) -L$(INSTALLPREFIX)/lib -L./graphlcd-base/glcddrivers/ -L./graphlcd-base/glcdgraphics/ -shared $(OBJS) -lglcddrivers -lglcdgraphics -lstdc++ -o $@
- @cp $@ $(LIBDIR)/$@.$(APIVERSION)
+$(SOFILE): $(OBJS)
+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -lglcddrivers -lglcdgraphics -lglcdskin -lstdc++ -o $@
+
+install-lib: $(SOFILE)
+ install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION)
-dist: clean
+install: install-lib install-i18n resources $(INS_TARGET_TTF) $(INS_TARGET_DOCS)
+
+docs:
+ @install -d $(DESTDIR)$(INSTALLDOCDIR)
+ @install -m 644 COPYING $(DESTDIR)$(INSTALLDOCDIR)
+ @install -m 644 README $(DESTDIR)$(INSTALLDOCDIR)
+ @install -m 644 HISTORY $(DESTDIR)$(INSTALLDOCDIR)
+
+ttf-fonts:
+ @install -d $(DESTDIR)$(RESDIR)/fonts
+ @install -m 644 $(PLUGIN)/fonts/*.ttf $(DESTDIR)$(RESDIR)/fonts
+
+resources:
+ @install -d $(DESTDIR)$(RESDIR)/fonts
+ @install -m 644 $(PLUGIN)/channels.alias $(DESTDIR)$(RESDIR)
+ @cp -a $(PLUGIN)/logos $(DESTDIR)$(RESDIR)
+ @cp -a $(PLUGIN)/skins $(DESTDIR)$(RESDIR)
+ @install -m 644 $(PLUGIN)/fonts/*.fnt $(DESTDIR)$(RESDIR)/fonts
+
+dist: $(I18Npo) clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@mkdir $(TMPDIR)/$(ARCHIVE)
@cp -a * $(TMPDIR)/$(ARCHIVE)
- @tar czf $(PACKAGE).tgz --exclude .svn --exclude .git --exclude *.cbp --exclude *.layout -C $(TMPDIR) $(ARCHIVE)
+ @tar czf $(PACKAGE).tgz --exclude .git --exclude *.cbp --exclude *.layout -C $(TMPDIR) $(ARCHIVE)
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@echo Distribution package created as $(PACKAGE).tgz
clean:
@-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
- @-rm -f *.o $(DEPFILE) *.so *.tgz core* *~
-
-install: all
- @install -d $(INSTALLDOCDIR)/$(PLUGIN)
- @install -m 644 README $(INSTALLDOCDIR)/$(PLUGIN)
+ @-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~
uninstall:
- @rm -rf $(INSTALLDOCDIR)/$(PLUGIN)
+ @-rm -rf $(DESTDIR)$(INSTALLDOCDIR)
+ @-rm -rf $(DESTDIR)$(RESDIR)
+ @-rm -f $(DESTDIR)$(LOCDIR)/*/LC_MESSAGES/vdr-$(PLUGIN).mo
+ @-rm -f $(DESTDIR)$(LIBDIR)/$(SOFILE).$(APIVERSION)
+
diff --git a/README b/README
index ddfdc73..731f577 100644
--- a/README
+++ b/README
@@ -4,7 +4,8 @@ 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)
from 0.1.5 on maintained by Wolfgang Astleitner (mrwastl AT users.sourceforge.net) & Andreas 'randy' Weinberger (vdr AT smue.org)
-Project's homepage: http://graphlcd.berlios.de/
+Project's homepage: http://projects.vdr-developer.org/projects/show/graphlcd
+ before 0.1.5: http://graphlcd.berlios.de/
before 0.0.8: http://c.siebholz.bei.t-online.de/
GIT repo: http://projects.vdr-developer.org/projects/show/graphlcd
@@ -37,20 +38,29 @@ Installation and Configuration:
|
+- plugins
| |
- | +- graphlcd (contains channels.alias)
+ | +- graphlcd (contains logonames.alias)
| | |
| | +-- fonts (contains *.fnt files)
| | |
- . . +-- logos (contains *.glcd files)
+ | | +-- logos (contains *.glcd files)
+ | | |
+ . . +-- skins (contains skin files and definitions)
. .
-5. Start VDR with the plugin.
+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
+ -s SKIN, --skin=SKIN name of the skin
+
-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'
@@ -58,10 +68,13 @@ Installation and Configuration:
-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.
+ -s: Sets the name of the skin to be used.
+ If this parameter is not given, skin 'default' will be used.
Examples:
vdr -P 'graphlcd -c /video/graphlcd.conf -d ks0108'
vdr -P 'graphlcd -c /etc/graphlcd.conf'
+ vdr -P 'graphlcd -c /video/graphlcd.conf -d usb13700 -s bigskin'
Channel Logos
@@ -75,10 +88,11 @@ Normally, the plugin looks for a file with the name
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 channels.alias for the
+them <ChannelName>_<Size>.glcd and use the file logonames.alias for the
relation between channel ID and channel name.
-example: ZDF_l.glcd, channels.alias entry: '1-1079-28006:ZDF'
+example: ZDF_l.glcd
+
Setup Parameters:
-----------------
@@ -181,64 +195,60 @@ Scroll time interval:
(Possible values: 100 <= x <= 2000)
-SVDRP Commands:
----------------
-svdrpsend.pl "PLUG graphlcd <CMD>", where CMD is:
-
-ON
- Switch Plugin on
-
-OFF
- Switch Plugin off
-
-UPD
- Update LCD Content, Plugin must be active.
-
-CLS
- Clear LCD Content (aka blank screen), Plugin must not be active.
-
-
-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.
+Patches
+-------
+femon:
+versions <= 1.7.7 require a patch to be functionable with graphlcd.
+if graphlcd-plugin detects a femon version <= 1.7.7 and this version has not yet been patched,
+femon will ignored by graphlcd (problem: if graphlcd calls an unpatched femon, vdr will crash
+when shutting or restarting). the bug has already been reported to the maintainer of femon and
+will be fixed in 1.7.8.
+
+note: $SOURCEDIR/VDR == source directory of vdr. replace accordingly.
+
+for femon <= 1.2.x apply the following patch:
+cd $SOURCEDIR/VDR/PLUGINS/src/femon
+patch -p0 < $SOURCEDIR/VDR/PLUGINS/src/graphlcd/patches/femon-1.1.5_fixnullandsegfault_path.diff
+
+for femon > 1.2.x and <= 1.7.7 apply the following patch:
+cd $SOURCEDIR/VDR/PLUGINS/src/femon
+patch -p0 < $SOURCEDIR/VDR/PLUGINS/src/graphlcd/patches/femon-1.7.7_fixsegfault_patch.diff
+
+or, if you don't want to apply a patch or the patch fails with your version of femon,
+replace the entire function
+
+bool cPluginFemon::Service(const char *Id, void *Data)
+{
+....
+}
+
+with the following one (should be valid for all femon versions >= 1.1.x):
+
+bool cPluginFemon::Service(const char *Id, void *Data)
+{
+ if (strcmp(Id,"FemonService-v1.0") == 0) {
+ if (Data) {
+ FemonService_v1_0 *data = (FemonService_v1_0*)Data;
+ if (! cDevice::ActualDevice() )
+ return false;
+
+ int ndx = cDevice::ActualDevice()->CardIndex();
+ data->fe_name = getFrontendName(ndx);
+ data->fe_status = getFrontendStatus(ndx);
+ data->fe_snr = getSNR(ndx);
+ data->fe_signal = getSignal(ndx);
+ data->fe_ber = getBER(ndx);
+ data->fe_unc = getUNC(ndx);
+ data->video_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetVideoBitrate() : 0.0;
+ data->audio_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetAudioBitrate() : 0.0;
+ data->dolby_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetDolbyBitrate() : 0.0;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+
+after applying this patch uncomment DEFINES += -DGRAPHLCD_SERVICE_FEMON_VALID in the Makefile.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..e49b92e
--- /dev/null
+++ b/TODO
@@ -0,0 +1 @@
+for skin-related TODOs: see TODO in graphlcd-base
diff --git a/alias.c b/alias.c
new file mode 100644
index 0000000..a17a4d9
--- /dev/null
+++ b/alias.c
@@ -0,0 +1,74 @@
+/*
+ * GraphLCD plugin for the Video Disk Recorder
+ *
+ * alias.c - alias class for converting channel id to its alias name
+ *
+ * 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>
+ * (c) 2011 Wolfgang Astleitner <mrwastl AT users sourceforge net>
+ */
+
+#include <fstream>
+
+#include "alias.h"
+#include "strfct.h"
+
+#include <vdr/tools.h>
+
+const char * kChannelAliasFileName = "channels.alias";
+
+bool cChannelAliasList::Load(const std::string & CfgPath)
+{
+ std::fstream file;
+ char readLine[1000];
+ std::string line;
+ std::string aliasFileName;
+ std::string::size_type pos;
+ std::string id;
+ std::string alias;
+
+ aliasFileName = CfgPath + "/" + kChannelAliasFileName;
+
+#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())
+ {
+ esyslog("graphlcd plugin: ERROR opening channel alias file '%s'", aliasFileName.c_str());
+ return false;
+ }
+
+ 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;
+ id = trim(line.substr(0, pos));
+ alias = trim(line.substr(pos + 1));
+ mAliases.insert(std::make_pair(id, alias));
+ }
+ file.close();
+
+ return true;
+}
+
+std::string cChannelAliasList::GetAlias(const std::string & ChannelID) const
+{
+ std::map<std::string, std::string>::const_iterator pos;
+
+ pos = mAliases.find(ChannelID);
+ if (pos != mAliases.end())
+ return pos->second;
+ return "";
+}
diff --git a/alias.h b/alias.h
new file mode 100644
index 0000000..a691cb1
--- /dev/null
+++ b/alias.h
@@ -0,0 +1,28 @@
+/*
+ * GraphLCD plugin for the Video Disk Recorder
+ *
+ * alias.h - alias class for converting channel id to its alias name
+ *
+ * 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_ALIAS_H_
+#define _GRAPHLCD_ALIAS_H_
+
+#include <map>
+#include <string>
+
+class cChannelAliasList
+{
+private:
+ std::map<std::string, std::string> mAliases;
+public:
+ bool Load(const std::string & CfgPath);
+ std::string GetAlias(const std::string & ChannelID) const;
+};
+
+#endif
diff --git a/common.c b/common.c
new file mode 100644
index 0000000..8f1c52a
--- /dev/null
+++ b/common.c
@@ -0,0 +1,217 @@
+#include <time.h>
+
+#include <glcdskin/type.h>
+#include <glcdskin/string.h>
+
+#include <vdr/plugin.h>
+#include <string.h>
+
+#include "strfct.h"
+
+#if APIVERSNUM < 10503
+#include <locale.h>
+
+static char* locID[] = {
+ "en_US", //" English",
+ "de_DE", // "Deutsch",
+ "sl_SI", // "Slovenski",
+ "it_IT", // "Italiano",
+ "nl_NL", // "Nederlands",
+ "pt_PT", // "Português",
+ "fr_FR", // "Français",
+ "no_NO", // "Norsk",
+ "fi_FI", // "suomi", Finnish (this is not a typo - it's really lowercase!)
+ "pl_PL", // "Polski",
+ "es_ES", // "Español",
+ "el_GR", // "ÅëëçíéêÜ", Greek
+ "sv_SE", // "Svenska",
+ "ro_RO", // "Românã",
+ "hu_HU", // "Magyar",
+ "ca_ES", // "Català",
+ "ru_RU", // "ÀãááÚØÙ", Russian
+ "hr_HR", // "Hrvatski",
+ "et_EE", // "Eesti",
+ "da_DK", // "Dansk",
+ "cs_CZ" // "Èesky", Czech
+};
+#endif
+
+
+GLCD::cType TimeType(time_t Time, const std::string &Format)
+{
+ static char result[1000];
+ struct tm tm_r, *tm;
+ tm = localtime_r(&Time, &tm_r);
+
+ if (Time > 0)
+ {
+ if (Format.length() > 0)
+ {
+// for vdr < 1.5.x: force locale for correct language output. for >= 1.5.x: system locale should be fine
+#if APIVERSNUM < 10503
+ setlocale(LC_TIME, ( Setup.OSDLanguage < (int)(sizeof(locID)/sizeof(char*)) ) ? locID[Setup.OSDLanguage] : "en_US" );
+#endif
+ strftime(result, sizeof(result), Format.c_str(), tm);
+
+ GLCD::cType r = result;
+ return r;
+ } else
+ return Time;
+ }
+ return false;
+}
+
+GLCD::cType DurationType(int Index, const std::string &Format, double framesPerSecFactor = 1.0)
+{
+ static char result[1000];
+ if (Index > 0)
+ {
+ if (Format.length() > 0)
+ {
+ uint update = 0;
+ const char *ptr = Format.c_str();
+ char *res = result;
+ enum { normal, format } state = normal;
+ int n = 0;
+
+ int f = (Index % (int)framesPerSecFactor) + 1;
+ int s = (Index / (int)framesPerSecFactor);
+
+ int m = s / 60 % 60;
+ int h = s / 3600;
+ s %= 60;
+ while (*ptr && res < result + sizeof(result))
+ {
+ switch (state)
+ {
+ case normal:
+ if (*ptr == '%')
+ state = format;
+ else
+ *(res++) = *ptr;
+ break;
+
+ case format:
+ switch (*ptr)
+ {
+ case 'H':
+ n = snprintf(res, sizeof(result) - (res - result), "%02d", h);
+ break;
+
+ case 'k':
+ n = snprintf(res, sizeof(result) - (res - result), "% 2d", h);
+ break;
+
+ case 'M':
+ n = snprintf(res, sizeof(result) - (res - result), "%02d", m);
+ update = 1000*60;
+ break;
+
+ case 'm':
+ n = snprintf(res, sizeof(result) - (res - result), "%d", m + (h * 60));
+ update = 1000*60;
+ break;
+
+ case 'S':
+ n = snprintf(res, sizeof(result) - (res - result), "%02d", s);
+ update = 1000;
+ break;
+
+ case 'f':
+ n = snprintf(res, sizeof(result) - (res - result), "%d", f);
+ update = 1000;
+ break;
+
+ case '%':
+ n = 1;
+ *res = '%';
+ break;
+ }
+ res += n;
+ state = normal;
+ break;
+ }
+ ++ptr;
+ }
+
+ GLCD::cType r = result;
+ r.SetUpdate(update);
+ return r;
+ } else
+ return (int)Index;
+ }
+ return false;
+}
+
+int ParanoiaStrcmp(const char *s1, const char *s2)
+{
+ if (! s1 || ! s2)
+ return -1;
+
+ // s1 must be under 'our' control (and thus valid), s2 may be a string w/ unexpected content
+ size_t n = strlen(s1);
+
+ int rv = strncmp(s1, s2, n);
+ if (rv == 0)
+ return (s2[n] == '\0') ? 0 : -1;
+ else
+ return rv;
+}
+
+const std::string SplitText(const std::string &Text, const std::string &Delim, bool firstPart = true) {
+ size_t found = Text.find(Delim);
+
+ if (found != std::string::npos) {
+ return (firstPart) ? Text.substr(0, found) : Text.substr(found + Delim.size());
+ }
+ return (firstPart) ? Text : NULL;
+}
+
+const std::string SplitToken(const std::string &Token, const struct GLCD::tSkinAttrib Attrib, bool extSplit) {
+ if (Attrib.Type == GLCD::aClean) {
+ if (extSplit) {
+ std::string Text = SplitText(Token, " - ", true);
+
+ // also cut leading index numbers, eg: "1 Menu" -> "Menu"
+ size_t pos = 0;
+ bool exitw = false;
+ bool valid = true;
+
+ while (!exitw && valid && pos < Text.size()-1) {
+ if (Text[pos] == ' ') {
+ pos++;
+ } else {
+ valid = (isdigit(Text[pos]) || Text[pos] == ' ' || Text[pos] == '\t') ? true : false;
+ exitw = true;
+ }
+ }
+
+ exitw = false;
+ while (!exitw && valid && pos < Text.size()-1) {
+ if (isdigit(Text[pos])) {
+ pos++;
+ } else {
+ valid = (Text[pos] == ' ' || Text[pos] == '\t') ? true : false;
+ exitw = true;
+ }
+ }
+
+ exitw = false;
+ while (!exitw && valid && pos < Text.size()-1) {
+ if (Text[pos] == ' ') {
+ pos++;
+ } else {
+ exitw = true;
+ }
+ }
+
+ if (valid && Text[pos] == '\t')
+ pos++;
+ return trim( (valid) ? Text.substr(pos) : Text );
+ }
+ return SplitText(Token, " - ", true);
+ } else if (Attrib.Type == GLCD::aRest) {
+ return SplitText(Token, " - ", false);
+ }
+ return Token;
+}
diff --git a/common.h b/common.h
new file mode 100644
index 0000000..9873690
--- /dev/null
+++ b/common.h
@@ -0,0 +1,8 @@
+
+#include <glcdskin/string.h>
+
+GLCD::cType TimeType(time_t Time, const std::string &Format);
+GLCD::cType DurationType(int Index, const std::string &Format, double framesPerSecFactor = 1.0);
+int ParanoiaStrcmp(const char *s1, const char *s2);
+const std::string SplitText(const std::string &Text, const std::string &Delim, bool firstPart = true);
+const std::string SplitToken(const std::string &Token, const struct GLCD::tSkinAttrib Attrib, bool extSplit = false);
diff --git a/compat.h b/compat.h
deleted file mode 100644
index 4041ed4..0000000
--- a/compat.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#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
index 49ddbb4..54c93f1 100644
--- a/display.c
+++ b/display.c
@@ -7,18 +7,17 @@
* 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>
+ * (c) 2004-2010 Andreas Regel <andreas.regel AT powarman.de>
+ * (c) 2010-2012 Wolfgang Astleitner <mrwastl AT users sourceforge net>
*/
-#include <ctype.h>
-#include <unistd.h>
-#include <sys/io.h>
-#include <sys/time.h>
+#include <stdlib.h>
#include <algorithm>
#include <glcddrivers/config.h>
#include <glcddrivers/drivers.h>
+#include <glcdskin/parser.h>
#include "display.h"
#include "global.h"
@@ -28,1992 +27,481 @@
#include <vdr/tools.h>
#include <vdr/menu.h>
-#include <vdr/plugin.h>
-
-#include "compat.h"
-
-#ifdef USE_WAREAGLEICON
-#include <vdr/iconpatch.h>
-#endif
-
-#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;
-
+#include <vdr/remote.h>
cGraphLCDDisplay::cGraphLCDDisplay()
: cThread("glcd_display"),
- update(false),
- active(false),
mLcd(NULL),
- bitmap(NULL),
- GraphLCDState(NULL)
+ mScreen(NULL),
+ mSkin(NULL),
+ mSkinConfig(NULL),
+ mGraphLCDState(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, "");
+ mUpdate = false;
+ mUpdateAt = 0;
+ mLastTimeMs = 0;
+
+ mState = StateNormal;
+ mLastState = StateNormal;
+
+ mDisplayMode = DisplayModeNormal;
+ LastTimeDisplayMode = 0;
+
+ mShowVolume = false;
+ mShowAudio = false;
nCurrentBrightness = -1;
LastTimeBrightness = 0;
bBrightnessActive = true;
- LastTimeSA.Set(0); //span
- // convert to UTF-8 internally, if we want to support anything else and not only ISO-8859-1
- conv = new cCharSetConv(cCharSetConv::SystemCharacterTable() ? cCharSetConv::SystemCharacterTable() : "UTF-8", "UTF-8");
-#ifdef USE_WAREAGLEICON
- bIsUTF8 = IsLangUtf8();
- textWithIcons = 0;
-#endif
+ mService = NULL; /* cannot be initialised here (mGraphLCDState not yet available) */
}
cGraphLCDDisplay::~cGraphLCDDisplay()
{
- active = false;
Cancel(3);
- delete GraphLCDState;
- delete bitmap;
- delete logoList;
-
- if (conv) {
- delete conv;
- }
-#ifdef USE_WAREAGLEICON
- if (textWithIcons)
- free(textWithIcons);
-#endif
+ delete mSkin;
+ delete mSkinConfig;
+ delete mScreen;
+ delete mGraphLCDState;
+
+ delete mService;
}
-int cGraphLCDDisplay::Init(GLCD::cDriver * Lcd, const char * CfgDir)
+bool cGraphLCDDisplay::Initialise(GLCD::cDriver * Lcd, const std::string & CfgPath, const std::string & SkinsPath, const std::string & SkinName)
{
- if (!Lcd || !CfgDir)
- return 2;
+ std::string skinsPath;
+
+ if (!Lcd)
+ return false;
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;
- }
+ mGraphLCDState = new cGraphLCDState(this);
+ if (!mGraphLCDState)
+ return false;
+
+ // must be initialised before cGraphLCDSkinConfig (else: seg fault)
+ mService = new cGraphLCDService(mGraphLCDState);
+
+ skinsPath = SkinsPath;
+ if (skinsPath == "")
+ skinsPath = CfgPath + "/skins";
- std::string fontListFile = cfgDir + "/fonts.conf";
- if (fontList.Load(fontListFile) == false)
+ mSkinConfig = new cGraphLCDSkinConfig(this, CfgPath, skinsPath, SkinName, mGraphLCDState);
+ if (!mSkinConfig)
{
- esyslog("graphlcd plugin: ERROR: Could not load %s!\n", fontListFile.c_str());
- return 1;
+ esyslog("graphlcd plugin: ERROR creating skin config\n");
+ return false;
}
Start();
- return 0;
+ return true;
}
void cGraphLCDDisplay::Tick(void)
{
- if (GraphLCDState)
- GraphLCDState->Tick();
+ if (mGraphLCDState)
+ mGraphLCDState->Tick();
}
void cGraphLCDDisplay::Action(void)
{
+ std::string skinFileName;
+
if (mLcd->Init() != 0)
{
esyslog("graphlcd plugin: ERROR: Failed initializing display\n");
+ GraphLCDSetup.PluginActive = 0;
+ Cancel(-1); // cancel display thread
return;
}
- bitmap = new GLCD::cBitmap(mLcd->Width(), mLcd->Height());
- if (!bitmap)
+ mScreen = new GLCD::cBitmap(mLcd->Width(), mLcd->Height());
+ if (!mScreen)
{
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)
+ skinFileName = mSkinConfig->SkinPath() + "/" + mSkinConfig->SkinName() + ".skin";
+ std::string errorString = "";
+ mSkin = GLCD::XmlParse(*mSkinConfig, mSkinConfig->SkinName(), skinFileName, errorString);
+ if (!mSkin)
{
- 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;
- }
+ int skipx = mLcd->Width() >> 3;
+ int skipy = mLcd->Height() >> 3;
- 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;
- }
+ esyslog("graphlcd plugin: ERROR loading skin '%s'\n", mSkinConfig->SkinName().c_str());
- 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;
- }
+ mLcd->Clear();
+ // clear the screen with a filled rectangle using a defined colour to guarantee visible text or 'X'
+#ifdef GRAPHLCD_CBITMAP_ARGB
+ mScreen->DrawRectangle(0, 0, mLcd->Width()-1, mLcd->Height()-1, GLCD::cColor::Black, true);
+#else
+ mScreen->DrawRectangle(0, 0, mLcd->Width()-1, mLcd->Height()-1, GLCD::clrBlack, true);
+#endif
- GraphLCDState = new cGraphLCDState(this);
- if (!GraphLCDState)
+ GLCD::cFont * font = new GLCD::cFont();
+ if ( font->LoadFNT( mSkinConfig->FontPath() + "/" + "f8n.fnt") ) {
+ std::vector <std::string> lines;
+ font->WrapText(mLcd->Width()-10, mLcd->Height()-1, errorString, lines);
+ int lh = font->LineHeight();
+ for (size_t i = 0; i < lines.size(); i++) {
+#ifdef GRAPHLCD_CBITMAP_ARGB
+ mScreen->DrawText(3, 1+i*lh, mLcd->Width()-1, lines[i], font, GLCD::cColor::White);
+#else
+ mScreen->DrawText(3, 1+i*lh, mLcd->Width()-1, lines[i], font, GLCD::clrWhite);
+#endif
+ }
+ } else {
+ // draw an 'X' to inform the user that there was a problem with loading the skin
+ // (better than just leaving an empty screen ...)
+#ifdef GRAPHLCD_CBITMAP_ARGB
+ mScreen->DrawLine(skipx, skipy, mLcd->Width()-1-skipx, mLcd->Height()-1-skipy, GLCD::cColor::White);
+ mScreen->DrawLine(mLcd->Width()-1-skipx, skipy, skipx, mLcd->Height()-1-skipy, GLCD::cColor::White);
+#else
+ mScreen->DrawLine(skipx, skipy, mLcd->Width()-1-skipx, mLcd->Height()-1-skipy, GLCD::clrWhite);
+ mScreen->DrawLine(mLcd->Width()-1-skipx, skipy, skipx, mLcd->Height()-1-skipy, GLCD::clrWhite);
+#endif
+ }
+#ifdef GRAPHLCD_CBITMAP_ARGB
+ mLcd->SetScreen(mScreen->Data(), mScreen->Width(), mScreen->Height());
+#else
+ mLcd->SetScreen(mScreen->Data(), mScreen->Width(), mScreen->Height(), mScreen->LineSize());
+#endif
+ mLcd->Refresh(true);
return;
+ }
+ mSkin->SetBaseSize(mScreen->Width(), mScreen->Height());
+ mLcd->Clear();
mLcd->Refresh(true);
- active = true;
- update = true;
- while (active)
+ mUpdate = true;
+
+ uint64_t lastEventMs = 0;
+#define MIN_EVENT_DELAY 500
+
+ while (Running())
{
if (GraphLCDSetup.PluginActive)
{
- CurrTime = time(NULL);
+ uint64_t currTimeMs = cTimeMs::Now();
+ GLCD::cSkinDisplay * display = NULL;
- if (timerisset(&UpdateAt))
+ if (mUpdateAt != 0)
{
// timed Update enabled
- if (gettimeofday(&CurrTimeval, NULL) == 0)
+ if (currTimeMs > mUpdateAt)
{
- // 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;
+ mUpdateAt = 0;
+ mUpdate = true;
}
}
- SetBrightness();
-
- switch (State)
+ if (GraphLCDSetup.ShowVolume)
{
- case Normal:
- // check and update external triggered symbols
- if (GraphLCDSetup.ShowETSymbols)
+ tVolumeState volume;
+ volume = mGraphLCDState->GetVolumeState();
+
+ if (volume.lastChange > 0)
+ {
+ if (!mShowVolume)
{
- if (CurrTime != LastTimeCheckSym)
+ if (currTimeMs - volume.lastChange < 2000)
{
- update |= CheckAndUpdateSymbols();
- LastTimeCheckSym = CurrTime;
+ mShowVolume = true;
+ mUpdate = true;
}
}
-
+ else
{
- std::vector<cScroller>::iterator it;
- for (it = scroller.begin(); it != scroller.end(); it++)
+ if (currTimeMs - volume.lastChange > 2000)
{
- if (it->NeedsUpdate())
- update = true;
+ mShowVolume = false;
+ mUpdate = 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;
+ if (GraphLCDSetup.ShowMenu)
+ {
+ tAudioState audio;
+ audio = mGraphLCDState->GetAudioState();
- case Replay:
+ if (audio.tracks.size() == 0) {
+ mShowAudio = false;
+ } else
+ if (audio.lastChange > 0)
{
- tReplayState replay = GraphLCDState->GetReplayState();
- if (replay.control)
+ if (!mShowAudio)
{
+ if (currTimeMs - audio.lastChange < 5000)
{
- 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;
- }
-
- if ( LastTimeSA.TimedOut() ) //span
- {
- update = true;
- LastTimeSA.Set(1000);
- }
-
- // update Display every second or due to an update
- if (CurrTime != LastTime || update)
- {
- // but only, if something has changed
-#if VDRVERSNUM >= 10701
- if (replay.total / replay.framesPerSecond != replay.totalLast / replay.framesPerSecond ||
- replay.current / replay.framesPerSecond != replay.currentLast / replay.framesPerSecond ||
- CurrTime/60 != LastTime/60 ||
- update)
-#else
- if (replay.total / FRAMESPERSEC != replay.totalLast / FRAMESPERSEC ||
- replay.current / FRAMESPERSEC != replay.currentLast / FRAMESPERSEC ||
- CurrTime/60 != LastTime/60 ||
- update)
-#endif
- {
- 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
+ mShowAudio = true;
+ mUpdate = true;
}
}
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)
+ if (currTimeMs - audio.lastChange > 5000)
{
- 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;
+ mShowAudio = false;
+ mUpdate = true;
}
- 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::Clear()
-{
- bitmap->Clear();
- mLcd->SetScreen(bitmap->Data(), bitmap->Width(), bitmap->Height(), bitmap->LineSize());
- mLcd->Refresh(false);
-}
-
-void cGraphLCDDisplay::DisplayTime()
-{
- static char buffer[32];
- static char month[16];
- 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);
-
- const char *amonth = tr("JanFebMarAprMayJunJulAugSepOctNovDec");
- amonth += Utf8SymChars(amonth, tm->tm_mon * 3);
- strn0cpy(month, amonth, min(Utf8SymChars(amonth, 3) + 1, int(sizeof(month))));
- snprintf(buffer, sizeof(buffer), "%s %2d.%s %d:%02d", (const char *) WeekDayName(tm->tm_wday), tm->tm_mday, Convert(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, Convert(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);
- }
+ /* display mode (normal or interactive): reset after 10 secs if not normal */
+ if ( (mDisplayMode != DisplayModeNormal) && ( (uint32_t)(currTimeMs - LastTimeDisplayMode) > (uint32_t)(10000)) ) {
+ mDisplayMode = DisplayModeNormal;
+ LastTimeDisplayMode = currTimeMs;
+ mUpdate = true;
+ }
- 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 (mState == StateNormal)
+ display = mSkin->GetDisplay("normal");
+ else if (mState == StateReplay)
+ display = mSkin->GetDisplay("replay");
+ else if (mState == StateMenu)
+ display = mSkin->GetDisplay("menu");
+ if (display && display->NeedsUpdate(currTimeMs ) )
+ mUpdate = true;
- 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;
- const char * pszTmp1;
-
- 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)
+ // update Display every minute
+ if (mState == StateNormal && (currTimeMs/60000 != mLastTimeMs/60000))
{
- // tiny, small & medium display
- if (IsSymbolsActive()) // Symbols enabled
- {
- FrameWidth = std::max(FrameWidth - FRAME_SPACE_XB - symbols->TotalWidth(), 1);
- }
+ mUpdate = true;
}
- }
-
- 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)
+ // update Display every second in replay state
+ if (mState == StateReplay && (currTimeMs/1000 != mLastTimeMs/1000))
{
- // 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));
- }
+ mUpdate = true;
}
- }
- 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)
- {
- pszTmp1 = Convert(channel.strTmp.c_str());
- bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X,
- yPos + TEXT_OFFSET_Y_CHANNEL,
- FRAME_SPACE_X + FrameWidth - 1,
- pszTmp1, normalFont, GLCD::clrWhite);
- }
- else if (channel.str.length() > 0)
- {
- pszTmp1 = Convert(channel.str.c_str());
- bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X,
- yPos + TEXT_OFFSET_Y_CHANNEL,
- FRAME_SPACE_X + FrameWidth - 1,
- pszTmp1, 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;
+ bool bActive = bBrightnessActive
+ || (mState == StateMenu)
+ || (GraphLCDSetup.ShowVolume && mShowVolume)
+ || (GraphLCDSetup.ShowMenu && mShowAudio)
+ || (GraphLCDSetup.ShowMessages && mGraphLCDState->ShowMessage())
+ || (GraphLCDSetup.BrightnessDelay == 900);
- if (IsLogoActive())
- {
- if (logo->Count() > 1)
- {
- uint64_t t = TimeMs();
- if (t - logo->LastChange() >= logo->Delay())
+ // update display if BrightnessDelay is exceeded
+ if (bActive && (nCurrentBrightness == GraphLCDSetup.BrightnessActive) &&
+ ((uint32_t)((/*cTimeMs::Now()*/currTimeMs - LastTimeBrightness)) > (uint32_t)(GraphLCDSetup.BrightnessDelay*1000)))
{
- if (!logo->Next(t))
- logo->First(t);
+ mUpdate = true;
}
- }
-
- 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
+ // external service changed (check each 1/10th second)
+ if ( (currTimeMs/100 != mLastTimeMs/100) && mService->NeedsUpdate(currTimeMs))
{
- 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);
+ mUpdate = true;
+ }
+
+
+ // check event
+ GLCD::cGLCDEvent * ev = mSkin->Config().GetDriver()->GetEvent();
+ if (ev && display && ((uint32_t)(currTimeMs-lastEventMs) > (uint32_t)(MIN_EVENT_DELAY) )) {
+ std::string rv = "";
+
+ if ( (rv = display->CheckAction(ev) ) != "") {
+ if (rv.substr(0,4) == "Key.") {
+ cRemote::Put(cKey::FromString(rv.substr(4).c_str()), true);
+ LastTimeDisplayMode = currTimeMs; /* if interactive mode: extend it */
+ } else if (rv.substr(0,5) == "Mode.") {
+ if (rv.substr(5) == "Interactive") {
+ mDisplayMode = DisplayModeInteractive;
+ LastTimeDisplayMode = currTimeMs;
+ } else if (rv.substr(5) == "Normal") {
+ mDisplayMode = DisplayModeNormal;
+ LastTimeDisplayMode = currTimeMs;
}
+ mUpdate = true;
}
- }
- 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);
- }
+ lastEventMs = currTimeMs;
}
}
- else // large display
+
+ if (mUpdate)
{
- 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);
- }
+ mUpdateAt = 0;
+ mUpdate = false;
- xPos = bitmap->Width() - FRAME_SPACE_X - symbols->Width(' ');
+ mGraphLCDState->Update();
- 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;
+ mScreen->Clear(mSkin->GetBackgroundColor());
- // blank or dolby
- bitmap->DrawCharacter(xPos, yPos, bitmap->Width() - 1, ch->Dpid1() ? 'D' : ' ', symbols);
- xPos -= symbols->Width(ch->Dpid1() ? 'D' : ' ') + SYMBOL_SPACE;
+ mSkin->SetTSEvalTick(currTimeMs);
- 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;
- }
+ GLCD::cSkinDisplay * display = NULL;
- // 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
+ if (mState == StateNormal)
+ display = mSkin->GetDisplay("normal");
+ else if (mState == StateReplay)
+ display = mSkin->GetDisplay("replay");
+ else if (mState == StateMenu)
+ display = mSkin->GetDisplay("menu");
+ if (display)
+ display->Render(mScreen);
+ if (mShowVolume)
{
- // 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);
- }
+ display = mSkin->GetDisplay("volume");
+ if (display)
+ display->Render(mScreen);
}
-
- // 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--)
+ if (mShowAudio)
{
- // 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);
- }
- }
+ display = mSkin->GetDisplay("audio");
+ if (display)
+ display->Render(mScreen);
}
-
- // show external triggered symbols
- if (GraphLCDSetup.ShowETSymbols && strlen(szETSymbols) > 0)
+ if (GraphLCDSetup.ShowMessages && mGraphLCDState->ShowMessage())
{
- 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);
- }
+ display = mSkin->GetDisplay("message");
+ if (display)
+ display->Render(mScreen);
}
- }
- }
- }
-}
+#ifdef GRAPHLCD_CBITMAP_ARGB
+ mLcd->SetScreen(mScreen->Data(), mScreen->Width(), mScreen->Height());
+#else
+ mLcd->SetScreen(mScreen->Data(), mScreen->Width(), mScreen->Height(), mScreen->LineSize());
+#endif
+ mLcd->Refresh(false);
+ mLastTimeMs = currTimeMs;
+ SetBrightness();
-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 = Convert(buffer);
- if ((bitmap->Width() >= MINY_L || !IsSymbolsActive()))
- {
- str += " - ";
+ // flush events
+ mSkin->Config().GetDriver()->GetEvent();
}
else
{
- str += "-";
+#if 0
+ GLCD::cGLCDEvent * ev = mSkin->Config().GetDriver()->GetEvent();
+ if (ev && display && ((uint32_t)(currTimeMs-lastEventMs) > (uint32_t)(MIN_EVENT_DELAY) )) {
+ std::string rv = "";
+
+ if ( (rv = display->CheckAction(ev) ) != "") {
+ if (rv.substr(0,4) == "Key.") {
+ cRemote::Put(cKey::FromString(rv.substr(4).c_str()), true);
+ }
+ lastEventMs = currTimeMs;
+ }
+ }
+#endif
+ cCondWait::SleepMs(100);
}
- 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 = Convert(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, Convert(event.presentTitle.c_str()));
- }
- 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, Convert(event.presentTitle.c_str()));
- scroller[1].Init(FRAME_SPACE_X + TEXT_OFFSET_X,
- bitmap->Height() - (TEXT_OFFSET_Y_TITLE-1) - normalFont->TotalHeight(),
- bitmap->Width() - 1,
- normalFont, Convert(event.presentSubtitle.c_str()));
- }
- }
- 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,
- Convert(str.c_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,
- Convert(str.c_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);
- }
- }
+ cCondWait::SleepMs(100);
}
}
+ // clear screen before thread is stopping
+ mLcd->Clear();
+ mLcd->Refresh(true);
}
-#if VDRVERSNUM >= 10701
-bool cGraphLCDDisplay::IndexIsGreaterAsOneHour(int Index, double framesPerSecond) const
-{
- return (((Index / framesPerSecond) / 3600) > 0);
-}
-#else
-bool cGraphLCDDisplay::IndexIsGreaterAsOneHour(int Index) const
-{
- int h = (Index / FRAMESPERSEC) / 3600;
- return h > 0;
-}
-#endif
-
-#if VDRVERSNUM >= 10701
-const char * cGraphLCDDisplay::IndexToMS(int Index, double framesPerSecond) const
-{
- static char buffer[16];
- int s = (Index / framesPerSecond);
-#else
-const char * cGraphLCDDisplay::IndexToMS(int Index) const
-{
- static char buffer[16];
- int s = (Index / FRAMESPERSEC);
-#endif
- 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
+void cGraphLCDDisplay::Update()
{
- 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
+ mUpdate = true;
}
-void cGraphLCDDisplay::DisplayReplay(tReplayState & replay)
+void cGraphLCDDisplay::UpdateIn(uint64_t msec)
{
- 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;
- std::string szReplayName = Convert(replay.name.c_str());
-
- 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(szReplayName);
- }
- else
- largeFont->WrapText(nMaxX, maxLines * lineHeight, szReplayName, lines);
- }
- else if (maxLines == 1) //singleline mode
- lines.push_back(szReplayName);
- else
- {
- largeFont->WrapText(nMaxX, maxLines * lineHeight, szReplayName, 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);
-
- DisplaySA(); //span
-
- 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)
+ if (msec == 0)
{
- 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;
+ mUpdateAt = 0;
}
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 VDRVERSNUM >= 10701
- if ((replay.total > 1 && IndexIsGreaterAsOneHour(replay.total, replay.framesPerSecond)) ||
- IndexIsGreaterAsOneHour(replay.current, replay.framesPerSecond)) // Check if any index bigger as one hour
- {
- szCurrent = (const char *) IndexToHMSF(replay.current, false, replay.framesPerSecond);
- if (replay.total > 1) // Don't draw totaltime for endless streams
- szTotal = (const char *) IndexToHMSF(replay.total, false, replay.framesPerSecond);
- }
- else
- {
- // Show only minutes and seconds on short replays
- szCurrent = (const char *) IndexToMS(replay.current, replay.framesPerSecond);
- if (replay.total > 1) // Don't draw totaltime for endless streams
- szTotal = (const char *) IndexToMS(replay.total, replay.framesPerSecond);
- }
-#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);
- }
-#endif
- }
- // 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);
+ mUpdateAt = cTimeMs::Now() + msec;
}
}
-void cGraphLCDDisplay::DisplayMenu(void)
+void cGraphLCDDisplay::Replaying(bool Starting)
{
- const 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)
- {
- pszTmp1 = Convert(osd.title.c_str());
- 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,
- pszTmp1, normalFont, GLCD::clrWhite);
- }
-
- if (!(textItemLines.size() > 0))
+ if (Starting)
{
- // 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))
+ if (mState != StateMenu)
{
- menuCount = (bitmap->Height() - yPos - smallFont->TotalHeight() - 4 - FRAME_SPACE_Y / 3) / iEntryHeight;
+ mState = StateReplay;
}
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);
- }
- pszTmp1 = Convert(osd.items[i].c_str());
- pszTmp2 = (char*) 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 = (char*) 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;
- const char * pszTmp1;
-
- 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++)
- {
- pszTmp1 = Convert(lines[i].c_str());
- 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,
- pszTmp1, normalFont);
+ mLastState = StateReplay;
}
}
-}
-
-void cGraphLCDDisplay::DisplayTextItem()
-{
- int lineCount;
- int iEntryHeight, iLineAnz;
- int yPos;
- tOsdState osd;
- const char * pszTmp1;
-
- osd = GraphLCDState->GetOsdState();
-
- mutex.Lock();
- if (textItemLines.size() > 0)
+ else
{
- lineCount = textItemLines.size();
-
- if (GraphLCDSetup.ShowDateTime == 1 ||
- (GraphLCDSetup.ShowDateTime == 2 && State != Menu))
+ if (mState != StateMenu)
{
- yPos = FRAME_SPACE_Y + normalFont->TotalAscent() + 2 * TEXT_OFFSET_Y_TIME + FRAME_SPACE_YB;
+ mState = StateNormal;
}
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) {
- pszTmp1 = Convert(textItemLines[i + startLine].c_str());
- bitmap->DrawText(FRAME_SPACE_X + TEXT_OFFSET_X,
- yPos + i * iEntryHeight,
- bitmap->Width() - 1 - FRAME_SPACE_X,
- pszTmp1, normalFont);
- }
+ mLastState = StateNormal;
}
}
- mutex.Unlock();
+ Update();
}
-void cGraphLCDDisplay::DisplayColorButtons()
+void cGraphLCDDisplay::SetMenuClear()
{
- int i, buttonWidth, textLen;
- int extra = 0;
- tOsdState osd;
- const char * pszTmp1;
-
- osd = GraphLCDState->GetOsdState();
+ if (mSkin)
+ mSkin->SetTSEvalSwitch(cTimeMs::Now());
- if (GraphLCDSetup.ShowColorButtons)
+ mSkinConfig->SetMenuClear();
+ if (mState == StateMenu)
{
- 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)
- {
- pszTmp1 = Convert(osd.colorButton[i].c_str());
- 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,
- pszTmp1, 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,
- pszTmp1, smallFont, GLCD::clrWhite);
- }
- }
- }
+ mState = mLastState;
+ // activate delayed Update
+ UpdateIn(100);
}
-}
-
-void cGraphLCDDisplay::DisplayVolume()
-{
- int RecW, RecH;
- tVolumeState volume;
-
- volume = GraphLCDState->GetVolumeState();
-
- if (GraphLCDSetup.ShowVolume)
+ else
{
- 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;
- }
- }
+ Update();
}
}
-void cGraphLCDDisplay::UpdateIn(long usec)
+void cGraphLCDDisplay::SetMenuTitle()
{
- if (usec == 0)
+ if (mState != StateMenu)
{
- 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;
- }
- }
+ mLastState = mState;
+ mState = StateMenu;
}
+ UpdateIn(100);
}
-
-bool cGraphLCDDisplay::CheckAndUpdateSymbols()
+void cGraphLCDDisplay::SetMenuCurrent()
{
- 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;
- }
+ if (mState != StateMenu)
+ {
+ mLastState = mState;
+ mState = StateMenu;
}
- return bRet;
+ UpdateIn(100);
}
void cGraphLCDDisplay::SetBrightness()
{
- mutex.Lock();
+ //mutex.Lock();
bool bActive = bBrightnessActive
- || (State == Menu)
- || (GraphLCDSetup.ShowVolume && showVolume)
- || (GraphLCDSetup.ShowMessages && GraphLCDState->GetOsdState().message.length() > 0)
+ || (mState == StateMenu)
+ || (GraphLCDSetup.ShowVolume && mShowVolume)
+ || (GraphLCDSetup.ShowMenu && mShowAudio)
+ || (GraphLCDSetup.ShowMessages && mGraphLCDState->ShowMessage())
|| (GraphLCDSetup.BrightnessDelay == 900);
if (bActive)
{
- LastTimeBrightness = TimeMs();
+ LastTimeBrightness = cTimeMs::Now();
bBrightnessActive = false;
}
if ((bActive ? GraphLCDSetup.BrightnessActive : GraphLCDSetup.BrightnessIdle) != nCurrentBrightness)
@@ -2026,211 +514,28 @@ void cGraphLCDDisplay::SetBrightness()
else
{
if (GraphLCDSetup.BrightnessDelay < 1
- || ((TimeMs() - LastTimeBrightness) > (uint64_t) (GraphLCDSetup.BrightnessDelay*1000)))
+ || ((unsigned int)(cTimeMs::Now() - LastTimeBrightness) > (unsigned int)(GraphLCDSetup.BrightnessDelay*1000)))
{
mLcd->SetBrightness(GraphLCDSetup.BrightnessIdle);
nCurrentBrightness = GraphLCDSetup.BrightnessIdle;
}
}
}
- mutex.Unlock();
-}
-
-#ifdef USE_WAREAGLEICON
-const char * cGraphLCDDisplay::ConvertWarEagleIconsUtf8(const char *s)
-{
- if (textWithIcons)
- free(textWithIcons);
- textWithIcons = (char *)malloc(sizeof(char *) * strlen(s) + 10);
- textWithIcons[0] = '\0';
- int sl;
- uint sym;
- char * iconChar;
- iconChar = (char *)malloc(sizeof(char *) * 4);
- iconChar[0] = '\0';
- // will replace unicode access codes with non-unicode ones between
- // start and end code of wareagle icons defined in VDRSymbols.ttf,
- // see http://andreas.vdr-developer.org/fonts/symbols.html and iconpatch.h of
- // vdr sources patched with USE_WAREAGLEICON support:
- uint symStart = 0xE000; // ICON_RESUME_UTF8
- //uint symEnd = 0xE000 + 0x15; // ICON_CLOCK_LH_UTF8
- uint symEnd = 0xE000 + 0x1C; // last custom icon beyond ICON_CLOCK_LH_UTF8
- int symOffset = - 0xDF80;
- for (const char *p = s; *p; )
- {
- sl = Utf8CharLen(p);
- sym = Utf8CharGet(p, sl);
- if (sym >= symStart && sym <= symEnd)
- {
- sl = Utf8CharSet(sym + symOffset, iconChar);
- strncat(textWithIcons, iconChar, sl - 1);
- }
- else
- {
- strncat(textWithIcons, p, sl);
- }
- p += sl;
- }
- free (iconChar);
- return textWithIcons;
+ //mutex.Unlock();
}
-#endif
-const char * cGraphLCDDisplay::Convert(const char *s)
-{
-// do character recoding to ISO-8859-1
-// code based on jowi24s vdr-lcdprog
- if (!s || !*s) {
- return s;
- }
- const char *s_converted = conv->Convert(s);
- if (s_converted == s) {
- const char* SCT = cCharSetConv::SystemCharacterTable() ? cCharSetConv::SystemCharacterTable() : "UTF-8";
- esyslog("graphlcd plugin: ERROR: conversion from %s to UTF-8 failed.", SCT);
- esyslog("graphlcd plugin: ERROR: '%s'",s);
- }
-#ifdef USE_WAREAGLEICON
- if (bIsUTF8)
- return ConvertWarEagleIconsUtf8(s_converted);
- else
-#endif
- return s_converted;
+void cGraphLCDDisplay::ForceUpdateBrightness() {
+ bBrightnessActive = true;
+ SetBrightness();
}
-
-void cGraphLCDDisplay::DisplaySA() //span
-{
-// Spectrum Analyzer visualization
- if ( GraphLCDSetup.enableSpectrumAnalyzer && GraphLCDSetup.pluginSpectrumAnalyzer )
- {
- if (cPluginManager::CallFirstService(SPAN_GET_BAR_HEIGHTS_ID, NULL))
- {
- Span_GetBarHeights_v1_0 GetBarHeights;
-
- int bandsSA = 20;
- int falloffSA = 8;
- int channelsSA = 1;
-
- unsigned int bar;
- unsigned int *barHeights = new unsigned int[bandsSA];
- unsigned int *barHeightsLeftChannel = new unsigned int[bandsSA];
- unsigned int *barHeightsRightChannel = new unsigned int[bandsSA];
- unsigned int volumeLeftChannel;
- unsigned int volumeRightChannel;
- unsigned int volumeBothChannels;
- unsigned int *barPeaksBothChannels = new unsigned int[bandsSA];
- unsigned int *barPeaksLeftChannel = new unsigned int[bandsSA];
- unsigned int *barPeaksRightChannel = new unsigned int[bandsSA];
-
- GetBarHeights.bands = bandsSA;
- GetBarHeights.barHeights = barHeights;
- GetBarHeights.barHeightsLeftChannel = barHeightsLeftChannel;
- GetBarHeights.barHeightsRightChannel = barHeightsRightChannel;
- GetBarHeights.volumeLeftChannel = &volumeLeftChannel;
- GetBarHeights.volumeRightChannel = &volumeRightChannel;
- GetBarHeights.volumeBothChannels = &volumeBothChannels;
- GetBarHeights.name = "graphlcd";
- GetBarHeights.falloff = falloffSA;
- GetBarHeights.barPeaksBothChannels = barPeaksBothChannels;
- GetBarHeights.barPeaksLeftChannel = barPeaksLeftChannel;
- GetBarHeights.barPeaksRightChannel = barPeaksRightChannel;
-
- if ( cPluginManager::CallFirstService(SPAN_GET_BAR_HEIGHTS_ID, &GetBarHeights ))
- {
- int i;
- int barWidth = 2;
- int saStartX = FRAME_SPACE_X;
- int saEndX = saStartX + barWidth*bandsSA*2 + bandsSA/4 - 1;
- int saStartY = FRAME_SPACE_Y;
- int saEndY = FRAME_SPACE_Y + bitmap->Height()/2 - 3;
-
- LastTimeSA.Set(100);
-
- if ( GraphLCDSetup.SAShowVolume )
- {
-
- saStartX = FRAME_SPACE_X + bitmap->Width()/2 - (barWidth*bandsSA*2 + bandsSA/4)/2 - 2;
- saEndX = saStartX + barWidth*bandsSA*2 + bandsSA/4 - 1;
-
- // left volume
- bitmap->DrawRectangle(FRAME_SPACE_X,
- saStartY,
- saStartX-1,
- saEndY + 1,
- GLCD::clrWhite, true);
-
- for ( i=0; (i<(int)logo->Width()/2-2) && (i<3*((int)volumeLeftChannel*(int)saStartX)/100); i++)
- {
- bitmap->DrawRectangle(saStartX - i - 2,
- saStartY + saEndY/2 - i,
- saStartX - i - 4,
- saStartY + saEndY/2 + i,
- GLCD::clrBlack, true);
- }
-
- // right volume
- bitmap->DrawRectangle(saEndX + 1,
- saStartY,
- bitmap->Width() - 1,
- saEndY + 1,
- GLCD::clrWhite, true);
-
- for ( i=0; (i<(int)logo->Width()/2-2) && (i<3*((int)volumeRightChannel*(int)saStartX)/100); i++)
- {
- bitmap->DrawRectangle(saEndX + 2 + i,
- saStartY + saEndY/2 - i,
- saEndX + i + 4,
- saStartY + saEndY/2 + i,
- GLCD::clrBlack, true);
- }
- }
- // black background
- bitmap->DrawRectangle(saStartX,
- saStartY,
- saEndX,
- saEndY + 1,
- GLCD::clrBlack, true);
-
- for ( i=0; i < bandsSA; i++ )
- {
-/*
- if ( channelsSA == 2 )
- {
- bar = barHeightsLeftChannel[i];
- bar = barHeightsRightChannel[i];
- }
-*/
- if ( channelsSA == 1)
- {
- // the bar
- bar = (barHeights[i]*(saEndY-saStartY))/100;
- bitmap->DrawRectangle(saStartX + barWidth*2*(i)+ barWidth + 1,
- saEndY,
- saStartX + barWidth*2*(i) + barWidth+ barWidth + 1,
- saEndY - bar,
- GLCD::clrWhite, true);
-
- // the peak
- bar = (barPeaksBothChannels[i]*(saEndY-saStartY))/100;
- if ( bar > 0 )
- {
- bitmap->DrawRectangle(saStartX + barWidth*2*(i)+ barWidth + 1,
- saEndY - bar,
- saStartX + barWidth*2*(i) + barWidth+ barWidth + 1,
- saEndY - bar+1,
- GLCD::clrWhite, true);
- }
- }
- }
- }
-
- delete [] barHeights;
- delete [] barHeightsLeftChannel;
- delete [] barHeightsRightChannel;
- delete [] barPeaksBothChannels;
- delete [] barPeaksLeftChannel;
- delete [] barPeaksRightChannel;
- }
- }
+void cGraphLCDDisplay::Clear() {
+ mScreen->Clear();
+#ifdef GRAPHLCD_CBITMAP_ARGB
+ mLcd->SetScreen(mScreen->Data(), mScreen->Width(), mScreen->Height());
+#else
+ mLcd->SetScreen(mScreen->Data(), mScreen->Width(), mScreen->Height(), mScreen->LineSize());
+#endif
+ mLcd->Refresh(false);
}
diff --git a/display.h b/display.h
index ac8cc81..2bb971a 100644
--- a/display.h
+++ b/display.h
@@ -7,68 +7,45 @@
* 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>
+ * (c) 2004-2010 Andreas Regel <andreas.regel AT powarman.de>
+ * (c) 2010-2011 Wolfgang Astleitner <mrwastl AT users sourceforge net>
*/
-#ifndef GRAPHLCD_DISPLAY_H
-#define GRAPHLCD_DISPLAY_H
+#ifndef _GRAPHLCD_DISPLAY_H_
+#define _GRAPHLCD_DISPLAY_H_
#include <stdint.h>
#include <string>
#include <vector>
+#include <map>
#include <glcdgraphics/bitmap.h>
-#include <glcdgraphics/font.h>
+#include <glcddrivers/driver.h>
+#include <glcdskin/skin.h>
#include "global.h"
-#include "layout.h"
-#include "logolist.h"
#include "setup.h"
#include "state.h"
-#include "widgets.h"
+#include "skinconfig.h"
-#include <vdr/thread.h>
-#include <vdr/player.h>
-
-#define SPAN_CLIENT_CHECK_ID "Span-ClientCheck-v1.0"
-#define SPAN_GET_BAR_HEIGHTS_ID "Span-GetBarHeights-v1.0"
+#include "service.h"
-#define LCDMAXCARDS 4
-static const int kMaxTabCount = 10;
+#include <vdr/thread.h>
-struct Span_Client_Check_1_0 {
- bool *isActive;
- bool *isRunning;
-};
-struct Span_GetBarHeights_v1_0 {
- unsigned int bands; // number of bands to compute
- unsigned int *barHeights; // the heights of the bars of the
- // two channels combined
- unsigned int *barHeightsLeftChannel; // the heights of the bars of the
- // left channel
- unsigned int *barHeightsRightChannel; // the heights of the bars of the
- // right channel
- unsigned int *volumeLeftChannel; // the volume of the left channels
- unsigned int *volumeRightChannel; // the volume of the right channels
- unsigned int *volumeBothChannels; // the combined volume of the two
- // channels
- const char *name; // name of the plugin that wants to
- // get the data (must be unique for
- // each client!)
- unsigned int falloff; // bar falloff value
- unsigned int *barPeaksBothChannels; // bar peaks of the two channels
- // combined
- unsigned int *barPeaksLeftChannel; // bar peaks of the left channel
- unsigned int *barPeaksRightChannel; // bar peaks of the right channel
+enum eThreadState
+{
+ StateNormal,
+ StateReplay,
+ StateMenu
};
-enum ThreadState
+// state of current display mode (interesting for displays w/ touchpads)
+enum eDisplayMode
{
- Normal,
- Replay,
- Menu
+ DisplayModeNormal,
+ DisplayModeInteractive
};
// Display update Thread
@@ -78,121 +55,58 @@ 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);
-
+ bool Initialise(GLCD::cDriver * Lcd, const std::string & CfgPath, const std::string & SkinsPath, const std::string & SkinName);
+ void Tick();
void Update();
void Clear();
+ void Replaying(bool Starting);
+ void SetMenuClear();
+ void SetMenuTitle();
+ void SetMenuCurrent();
+ const GLCD::cBitmap * GetScreen() const { return mScreen; }
+
+ void ForceUpdateBrightness();
+
+ const cGraphLCDService * GetServiceObject() const { return mService; }
+ GLCD::cDriver * GetDriver() const { return mLcd; }
+ GLCD::cSkin * GetSkin() const { return mSkin; }
+
+ const eDisplayMode GetDisplayMode() const { return mDisplayMode; }
protected:
virtual void Action();
private:
- bool update;
- bool active;
GLCD::cDriver * mLcd;
+ GLCD::cBitmap * mScreen;
+ GLCD::cSkin * mSkin;
+ cGraphLCDSkinConfig * mSkinConfig;
- 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;
- cTimeMs LastTimeSA; //span
- struct timeval CurrTimeval;
- struct timeval UpdateAt;
-
- std::vector<cScroller> scroller;
-
- cGraphLCDLogoList * logoList;
- cGraphLCDLogo * logo;
-
- char szETSymbols[32];
-
-#ifdef USE_WAREAGLEICON
- bool bIsUTF8;
- char * textWithIcons;
- const char * ConvertWarEagleIconsUtf8(const char *s);
-#endif
+ bool mUpdate;
+ uint64_t mUpdateAt;
+ uint64_t mLastTimeMs;
- 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 DisplaySA(); //span
-
- void UpdateIn(long usec);
- bool CheckAndUpdateSymbols();
-
-#if VDRVERSNUM >= 10701
- /** Check if replay index bigger as one hour */
- bool IndexIsGreaterAsOneHour(int Index, double framesPerSecond) const;
- /** Translate replay index to string with minute and second MM:SS */
- const char *IndexToMS(int Index, double framesPerSecond) const;
-#else
- bool IndexIsGreaterAsOneHour(int Index) const;
- const char *IndexToMS(int Index) const;
-#endif
- /** 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 */
+ eThreadState mState;
+ eThreadState mLastState;
+
+ cMutex mMutex;
+ cGraphLCDState * mGraphLCDState;
+
+ bool mShowVolume;
+ bool mShowAudio;
+
+ void UpdateIn(uint64_t msec);
+
+ /* set brightness depending on user activity */
void SetBrightness();
uint64_t LastTimeBrightness;
int nCurrentBrightness;
bool bBrightnessActive;
-
- cCharSetConv *conv;
- const char * Convert(const char *s);
+ /* external services */
+ cGraphLCDService * mService;
+ /* display mode (normal or interactive) */
+ eDisplayMode mDisplayMode;
+ uint64_t LastTimeDisplayMode;
};
#endif
diff --git a/extdata.c b/extdata.c
new file mode 100644
index 0000000..f71f410
--- /dev/null
+++ b/extdata.c
@@ -0,0 +1,96 @@
+/*
+ * GraphLCD plugin for the Video Disk Recorder
+ *
+ * extdata.c - external data sent via SVDRP
+ *
+ * This file is released under the GNU General Public License. Refer
+ * to the COPYING file distributed with this package.
+ *
+ * (c) 2011 Wolfgang Astleitner <mrwastl AT users sourceforge net>
+ */
+
+#include "extdata.h"
+
+#include <vdr/tools.h>
+
+#include <stdio.h>
+cExtData * cExtData::mExtDataInstance = NULL;
+
+cExtData * cExtData::GetExtData(void) {
+ if (mExtDataInstance == NULL) {
+ mExtDataInstance = new cExtData();
+ }
+ return mExtDataInstance;
+}
+
+
+void cExtData::ReleaseExtData(void) {
+ delete mExtDataInstance;
+ mExtDataInstance = NULL;
+}
+
+
+cExtData::~cExtData(void) {
+ data.clear();
+ expData.clear();
+}
+
+
+bool cExtData::Set(const std::string & key, const std::string & value, const std::string & scope, uint32_t expire ) {
+ if (mExtDataInstance == NULL) return false; // paranoia check
+
+ std::string compkey = scope; compkey += ":"; compkey += key; // <scope>:<key>, <scope> can be "" (== global)
+ data[compkey] = value;
+
+ if (expire > 0) {
+ expData[compkey] = cTimeMs::Now() + (expire * 1000);
+ } else {
+ expData.erase(compkey); // just in case of an old expiration entry for compkey
+ }
+ return true;
+}
+
+
+bool cExtData::Unset(const std::string & key, const std::string & scope ) {
+ if (mExtDataInstance == NULL) return false; // paranoia check
+
+ std::string compkey = scope; compkey += ":"; compkey += key; // <scope>:<key>, <scope> can be "" (== global)
+ expData.erase(compkey); // ignore result;
+ return ( (data.erase(compkey) > 0) ? true : false );
+}
+
+
+bool cExtData::IsSet(const std::string & key, const std::string & scope ) {
+ std::string ret = Get(key, scope);
+ return ( (ret != "") ? true : false );
+}
+
+
+std::string cExtData::Get(const std::string & key, const std::string & scope ) {
+ if (mExtDataInstance == NULL) return ""; // paranoia check
+
+ std::string compkey;
+ int l = 0;
+ int loops = (scope == "") ? 1 : 2;
+ while ( l < loops) {
+ compkey = (l == 0) ? scope : ""; compkey += ":"; compkey += key; // 1st loop: display-scope, 2nd loop: global
+ it = data.find(compkey);
+ if ( it != data.end() ) {
+ expDataIt = expData.find(compkey);
+ if ( expDataIt != expData.end() ) {
+ uint64_t expts = (*expDataIt).second;
+ if ( cTimeMs::Now() > expts ) {
+ expData.erase(compkey);
+ data.erase(compkey);
+ // expired, thus no result here, but maybe there'll be a hit in global scope, so don't return here
+ } else {
+ return (*it).second;
+ }
+ } else {
+ return (*it).second;
+ }
+ }
+ l++;
+ }
+ return "";
+}
diff --git a/extdata.h b/extdata.h
new file mode 100644
index 0000000..0c7d781
--- /dev/null
+++ b/extdata.h
@@ -0,0 +1,46 @@
+/*
+ * GraphLCD plugin for the Video Disk Recorder
+ *
+ * extdata.h - external data sent via SVDRP
+ *
+ * This file is released under the GNU General Public License. Refer
+ * to the COPYING file distributed with this package.
+ *
+ * (c) 2011 Wolfgang Astleitner <mrwastl AT users sourceforge net>
+ */
+
+#ifndef _GRAPHLCD_EXTDATA_H_
+#define _GRAPHLCD_EXTDATA_H_
+
+#include <stdint.h>
+
+#include <string>
+#include <map>
+
+
+// external data set via SVDRP
+class cExtData {
+ friend class cGraphLCDSkinConfig;
+ friend class cPluginGraphLCD;
+private:
+ std::map<std::string,std::string> data;
+ std::map<std::string,std::string>::iterator it;
+ std::map<std::string,uint64_t> expData;
+ std::map<std::string,uint64_t>::iterator expDataIt;
+
+ static cExtData * mExtDataInstance;
+
+ cExtData(void) {}
+ ~cExtData(void);
+protected:
+ static cExtData * GetExtData(void);
+ static void ReleaseExtData(void);
+
+public:
+ bool Set(const std::string & key, const std::string & value, const std::string & scope, uint32_t expire = 0 );
+ bool Unset(const std::string & key, const std::string & scope);
+ bool IsSet(const std::string & key, const std::string & scope);
+ std::string Get(const std::string & key, const std::string & scope);
+};
+
+#endif
diff --git a/global.h b/global.h
index a810180..a2f031d 100644
--- a/global.h
+++ b/global.h
@@ -13,17 +13,8 @@
#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;
diff --git a/graphlcd/channels.alias b/graphlcd/channels.alias
index debab3e..e0a802b 120000..100644
--- a/graphlcd/channels.alias
+++ b/graphlcd/channels.alias
@@ -1 +1,639 @@
-channels.alias-20110104.txt \ No newline at end of file
+133-5-662:1-2-3.tv
+61441-10000-50110:1-2-3.tv
+133-1-42:13TH_STREET
+61441-10005-50107:13TH_STREET
+53-1109-502313TH_STREET
+1-1093-28475:1LIVE
+1-1093-28481:1LIVE_DIGGI
+1-1024-9030:2M_MAROC
+1-1079-28007:3SAT
+1-1038-30405:40_TV
+1-1107-17504:9LIVE
+1-1094-17020:AB_MOTEURS
+1-1094-12021:AB1
+1-1094-17030:ACTION
+1-1090-8552:ADO_FM
+1-1020-7009:AL_JAZEERA
+1-1020-7012:AL_JAZEERA
+1-1024-9021:AL_JAZEERA
+1-1024-9011:ALGERIE
+1-1090-8549:ALOUETTE
+1-1095-20302:ANIMAL_PLANET
+53-1097-2020:ANIMAL_PLANET
+1-1094-17022:ANIMAUX
+1-1102-13203:ANIMAX
+53-1097-2047:ANIMAX
+1-1032-30207:ANIMAX
+1-1057-61202:ANIXE_HD
+133-5-764:ANIXE_SD
+133-7-170:ANTENNE_BAYERN
+1-1093-28454:ANTENNE_BRANDENBURG
+1-1051-28724:ARTE
+1-1076-8159:ARTE
+1-1076-8172:ARTE
+8468-2561-2:ARTE
+1-1098-9111:ARTE_HD
+1-1110-9304:ARTE_HD
+1-1110-9324:ARTE_HD
+1-1011-11120:ARTE_HD
+1-1057-61203:ASTRA_HD
+1-1117-13012:ATVPLUS
+1-1115-13106:AUSTRIA_9_TV
+1-1102-13212:AUTO_MOTOR_UND_SPORT
+1-1063-20352:AXN
+1-1008-29815:AXN
+61441-10005-50304:AXN
+133-9-62:AXN_ACTION
+1-1093-28404:B5_AKTUELL
+1-1093-28408:B5_PLUS
+1-1101-28107:BAYERISCHES_FERNSEHEN
+1-1101-28110:BAYERISCHES_FERNSEHEN
+8468-5633-34:BAYERISCHES_FERNSEHEN
+1-1093-28400:BAYERN_1
+1-1093-28401:BAYERN_2
+1-1093-28402:BAYERN_3
+1-1093-28403:BAYERN_4_KLASSIK
+1-1093-28405:BAYERN_PLUS
+1-1279-20328:BBC_PRIME
+53-1097-2030:BBC_PRIME
+61441-10004-53406:BBC_PRIME
+1-1026-10050:BBC_WORLD
+1-1094-17027:BBC_WORLD
+1-1112-12340:BBC_WORLD
+61441-10000-53001:BBC_WORLD
+133-17-21:BEATE_UHSE.TV
+1-1092-10155:BEATE_UHSE_SEXY_SAT
+1-1096-8613:BEUR_TV
+1-1108-12122:BIBEL TV
+61441-10004-53403:BIBEL TV
+1-1102-13208:BIOGRAPHY_CHANNEL
+133-9-67:BIOGRAPHY_CHANNEL
+1-1090-8505:BLOOMBERG_TV
+1-1108-12160:BLOOMBERG_TV
+61441-10000-53004:BLOOMBERG_TV
+1-1026-10067:BLOOMBERG_TV_GERMANY
+133-4-513:BLUE_MOVIE
+133-1-345:BLUE_MOVIE_1
+133-1-355:BLUE_MOVIE_2
+133-1-365:BLUE_MOVIE_3
+1-1063-20343:BOOMERANG
+133-9-66:BOOMERANG
+1-1054-30361:BOOMERANG
+1-1068-28527:BOOMERANG
+1-1093-28403:BR_KLASSIK
+1-1093-28407:BR_VERKEHR
+1-1093-28487:BR_ALPHA
+1-1101-28112:BR_ALPHA
+1-1093-28448:BREMEN_EINS
+1-1093-28450:BREMEN_VIER
+53-1109-5025:BVN
+1-1056-29963:CADENA_DIAL
+1-1020-7017:CANAL_CANARIAS
+1-1096-8612:CANAL_CLUB
+1-1038-30400:CANAL+
+1-1008-29817:CANAL+ ...30
+1-1102-13204:CARTOON_NETWORK
+133-9-64:CARTOON_NETWORK
+1-1279-20341:CARTOON_NETWORK
+1-1068-28521:CARTOON_NETWORK
+1-1111-7291:CFN_RFC
+1-1089-12095:CHANNEL_21
+1-1089-12080:CHANNEL_21
+133-7-769:CHANNEL_21
+1-1090-8548:CHERIE_FM
+1-1094-17032:CINE_BOX
+133-17-24:CLASSICA
+1-1026-10030:CNBC_EUROPE
+1-1112-12200:CNBC_EUROPE
+1-1068-28522:CNN_INT
+1-1032-30210:CNN+
+1-1063-20351:COMEDY_CENTRAL
+1-1090-8545:CONTACT_FM
+133-17-156:COUNTRY
+1-1092-10102:DAF_ANLEGER_TV
+1-1093-28471:DAS_DING
+1-1101-28106:DAS_ERSTE
+8468-2561-128:DAS_ERSTE
+8468-258-14:DAS_ERSTE
+1-1011-11100:DAS_ERSTE_HDv2
+133-5-1793:DAS_VIERTE
+1-1092-10141:DELUXE_LOUNGE
+1-1092-10100:DELUXE_MUSIC
+1-1092-10100:DELUXE_MUSIC
+1-1092-10140:DELUXE_RADIO
+1-1092-10140:DELUXE_RADIO
+133-17-150:DEUTSCHE_CHARTS
+1-1079-28013:DEUTSCHLANDFUNK_KOELN
+DEUTSCHLANDRADIO_BERLIN
+133-4-14:DISCOVERY_CHANNEL
+133-6-130:DISCOVERY_HD
+1-1038-30403:DISNEY_CHANNEL
+1-1095-20305:DISNEY_CHANNEL
+133-17-34:DISNEY_CHANNEL
+1-1072-8207:DISNEY_CHANNEL
+133-3-25:DISNEY_CINEMAGIC
+133-13-111:DISNEY_CINEMAGIC_HD
+133-8-126:DISNEY_CINEMAGIC_HD
+61441-10002-50709:DISNEY_PLAYHOUSE
+61441-10005-50307:DISNEY_TOON
+61441-10002-50710:DISNEY_TOON_+1
+133-17-28:DISNEY_XD
+1-1100-8705:DISNEY_XD
+1-1046-30506:DISNEY_XD
+1-1079-28012:DKULTUR
+1-1097-28013:DLF
+1-1092-10101:DMAX
+133-5-171:DOMRADIO
+8468-774-16392:DSF
+1-1093-28416:DW_1
+1-1093-28417:DW_4
+1-1026-10020:DW_TV
+61441-10005-50104:E_ENTERTAINMENT
+1-1114-8911:E_ENTERTAINMENT
+133-5-172:EGO_FM
+1-1051-28721:EINS_EXTRA
+1-1051-28722:EINS_FESTIVAL
+1-1201-28396:EINS_FESTIVAL_HD
+1-1073-28203:EINS_MUXX
+1-1051-28723:EINS_PLUS
+133-7-161:ERF_RADIO
+1-1024-9014:ESC1_EGYPT
+1-1115-13109:ESPN _AMERICA
+133-11-119:ESPN_AMERICA_SPORT
+1-1115-13105:ESPN_AMERICA_SPORT
+61441-10005-50301:ESPN_CLASSIC_SPORT
+1-1070-8004:EURONEWS
+1-1079-28015:EURONEWS
+1-1091-31220:EURONEWS
+1-1090-8537:EUROPE_2
+1-1034-30680:EUROSPORT
+1-1046-30503:EUROSPORT
+1-1076-8151:EUROSPORT
+1-1079-28009:EUROSPORT
+1-1091-31200:EUROSPORT
+1-1279-20321:EUROSPORT
+53-1097-2025:EUROSPORT
+8468-5889-16420:EUROSPORT
+8468-774-16420:EUROSPORT
+1-1102-13205:EUROSPORT_2
+133-9-65:EUROSPORT_2
+1-1099-20367:EUROSPORT_2
+1-1099-20366:EUROSPORT_2
+1-1088-9503:EUROSPORT_2
+133-6-132:EUROSPORT_HD
+1-1098-9106:EUROSPORT_HD
+1-1116-9903:EUROSPORT_HD
+1-1116-9923:EUROSPORT_HD
+1-1056-29953:EUROSPORT_HD
+1-1058-30163:EUROSPORT_HD
+1-1058-30163EXTRA_1
+61441-10004-53409:EXTREME_SPORTS
+1-1095-20311:EXTREME_SPORTS
+1-1088-9508:EXTREME_SPORTS
+1-1094-17029:FASHION_TV
+61441-10005-50101:FASHION_TV
+1-1110-9301:FESTIVAL
+1-1113-12658:FFN_COMEDY
+1-1113-12654:FFN_DIGITAL
+1-1115-13134:FM4
+1-1102-13209:FOX
+1-1008-29801:FOX_KIDS
+1-1099-20316:FOX_KIDS
+133-17-28:FOX_KIDS
+1-1060-30611:FOX_NEWS
+1-1032-30201:FOX_NEWS
+133-1-16:FOX
+1-1022-6906:FRANCE_ 24
+1-1080-8801:FRANCE_2
+1-1080-8802:FRANCE_3
+1-1090-8501:FRANCE_5
+1-1092-10104:FRANKEN_SAT
+1-1057-61980:FREE_X_TV
+1-1073-28209:FRITZ
+1-1093-28457:FRITZ
+133-17-333:FUSSBALL_AUT
+133-2-253:FUSSBALL_AUT
+61441-10002-50706:GAMES_TV
+1-1115-13102:GO_TV
+133-17-518:GOLDSTAR_TV
+133-1-373:GOLF
+61441-10003-50111:GUTE_LAUNE_TV
+1-1095-20308:HALLMARK
+1-1279-20323:HALLMARK
+53-1097-2035:HALLMARK
+1-1113-12662:HARMONY_FM
+1-1011-11140:HD_TEST_ARD_ZDF
+133-17-22:HEIMATKANAL
+1-1101-28108:HESSEN_FERNSEHEN
+1-1110-9302:HISTOIRE
+1-1102-13201:HISTORY
+133-9-68:HISTORY
+61441-10003-53301:HISTORY_CHANNEL
+133-13-113:HISTORY_HD
+133-8-128:HISTORY_HD
+1-1113-12660:HITRADIO_FFH
+1-1117-13013:HITRADIO_OE3
+1-1116-12750:HOERZU_DIGITAL
+133-7-71:HOPE_CHANNEL
+133-5-175:HOPE_CHANNEL_RADIO
+1-1093-28419:HR_1
+1-1093-28420:HR_2
+1-1093-28421:HR_3
+1-1093-28422:HR_4
+1-1093-28424:HR_INFO
+1-1093-28425:HR_INFO_PLUS
+1-1101-28124:HR_KLASSIK
+1-1101-28122:HR_SKYLINE
+133-33-40:HSE24
+1-1091-31210:HSE24_EXTRA
+133-33-77:HSE24_TREND
+133-5-772:I_MUSIC
+1-1093-28452:INFORADIO
+1-1113-12651:INSELRADIO
+133-7-514:JML_SHOP
+1-1093-28432:JUMP
+133-17-19:JUNIOR
+1-1113-12616:JUWELO_TV
+1-1113-12601:K_TV
+61441-10002-50705:K_TV
+8468-3074-16394:KABEL_1
+8468-769-16394:KABEL_1
+1-1107-17502:KABEL_1
+1-1082-20004:KABEL_1_AUSTRIA
+1-1107-17506:KABEL_1_CLASSIC
+1-1017-61302:KABEL_1_HD
+1-1082-20003:KABEL_1_SCHWEIZ
+1-1079-28008:KIKA
+53-1109-5055:KINK_FM
+133-9-60:KINOWELT
+1-1102-13206:KINOWELT
+1-1093-28482:KIRAKA
+133-5-173:KLASSIK_RADIO
+1-1022-6902:KTO
+1-1093-28453:KULTURRADIO
+1-1076-8156:LCI
+1-1076-8154:LCP
+1-1076-8173:LCP
+1-1108-12120:LIBERTY_TV
+1-1112-12280:LIBERTY_TV
+1-1110-9307:LIVE_1
+133-17-152:LOVE_SONGS
+1-1074-8355:MATCH_TV
+1-1073-28204:MDR_FERNSEHEN
+8468-5633-100:MDR_FERNSEHEN
+1-1073-28228:MDR_FERNSEHEN_S
+1-1073-28229:MDR_FERNSEHEN_SA
+1-1073-28230:MDR_FERNSEHEN_TH
+1-1073-28208:MDR_FIGARO
+1-1093-28431:MDR_FIGARO
+1-1073-28211:MDR_INFO
+1-1093-28434:MDR_INFO
+1-1093-28435:MDR_KLASSIK
+1-1093-28433:MDR_SPUTNIK
+1-1093-28429:MDR1_SA_ANHALT
+1-1093-28428:MDR1_SACHSEN
+1-1093-28430:MDR1_THUERINGEN
+1-1090-8559:MEDIA_TROPICAL
+133-33-899:MEIN_TV_SHOP
+133-3-515:MGM
+1-1063-20349:MGM
+1-1088-9509:MOTORS_TV
+61441-10003-50102:MOTORS_TV
+133-1-168:MOTORVISION_TV
+61441-10000-53005:MTV
+1-1066-28659:MTV_2
+1-1091-28641:MTV_AUSTRIA
+1-1066-28655:MTV_BASE
+1-1066-28661:MTV_BASE
+1-1066-28665:MTV_BASE
+1-1066-28653:MTV_CENTRAL
+1-1091-28641:MTV_CENTRAL
+1-1279-20322:MTV_CENTRAL
+61441-10002-50703:MTV_DANCE
+1-1066-28652:MTV_F
+1-1078-28673:MTV_GERMANY
+1-1066-28664:MTV_HITS
+1-1066-28654:MTV_HITS
+61441-10002-50704:MTV_HITS
+1-1093-28440:N_JOY
+1-1107-17503:N24
+8468-3074-16398:N24
+8468-769-16398:N24
+61441-10005-50306:NASN
+133-4-12:NAT_GEO_WILD
+1-1088-9506:NAT_GEO_WILD
+61441-10002-50708:NATIONAL_GEOGRAPHIC
+1-1060-30605:NATIONAL_GEOGRAPHIC
+133-4-13:NATIONAL_GEOGRAPHIC
+1-1102-13202NATIONAL_GEOGRAPHIC
+133-13-112:NATIONAL_GEOGRAPHIC_HD
+133-8-127:NATIONAL_GEOGRAPHIC_HD
+1-1058-30124NATIONAL_GEOGRAPHIC_HD
+1-1028-30704NATIONAL_GEOGRAPHIC_HD
+1-1093-28444:NDR_1_NIEDERS
+1-1093-28443:NDR_1_RADIO_MV
+1-1093-28442:NDR_1_WELLE_NORD
+1-1093-28437:NDR_2
+1-1093-28441:NDR_90_3
+1-1073-28225:NDR_FERNSEHEN_HH
+1-1073-28224:NDR_FERNSEHEN_MV
+1-1073-28226:NDR_FERNSEHEN_NDS
+1-1073-28227:NDR_FERNSEHEN_SH
+8468-5633-131:NDR_FERNSEHEN_SH
+1-1093-28439:NDR_INFO
+1-1101-28127:NDR_INFO
+1-1093-28445:NDR_INFO_SPEZIAL
+1-1093-28438:NDR_KULTUR
+1-1073-28207:NDR_KULTUR
+53-1105-4011:NED_1
+53-1105-4012:NED_2
+53-1105-4013:NED_3
+53-1109-5004:NET_5
+61441-10000-53006:NICK
+1-1066-28660:NICK
+1-1091-28640:NICKELODEON
+1-1078-28680:NICKELODEON
+1-1066-28658:NICKELODEON
+1-1078-28682:NICKTOONS_S
+1-1093-28449:NORDWEST_RADIO
+1-1090-8536:NRJ
+1-1018-6406:NRJ_HITS
+1-1089-12090:NTV
+1-1115-13135:OE_1_INTERNATIONAL
+1-1117-13021:OESTERREICH_1
+1-1115-13122:OESTERREICH_1
+1-1115-13121:OESTERREICH_1
+1-1117-13033:OESTERREICH_3
+1-1115-13133:OESTERREICH_3
+133-5-174:OLDIESTAR
+1-1093-28406:ON_3_RADIO
+1-1092-10103:ONTV
+1-1117-13001:ORF_1
+1-1007-4911:ORF_1_HD
+1-1117-13002:ORF_2
+1-1117-13014:ORF_2
+1-1117-13005:ORF_2_ BURGENLAND
+1-1115-13125:ORF_2_ BURGENLAND
+1-1007-4912:ORF_2_HD
+1-1117-13011:ORF_2_KAERNTEN
+1-1115-13131:ORF_2_KAERNTEN
+1-1117-13004:ORF_2_NIEDEROESTERREICH
+1-1115-13124:ORF_2_NIEDEROESTERREICH
+1-1117-13006:ORF_2_OBEROESTERREICH
+1-1115-13126:ORF_2_OBEROESTERREICH
+1-1117-13007:ORF_2_SALZBURG
+1-1115-13127:ORF_2_SALZBURG
+1-1117-13010:ORF_2_STEIERMARK
+1-1115-13130:ORF_2_STEIERMARK
+1-1117-13008:ORF_2_TIROL
+1-1115-13128:ORF_2_TIROL
+1-1117-13009:ORF_2_VORARLBERG
+1-1115-13129:ORF_2_VORARLBERG
+1-1117-13003:ORF_2_WIEN
+1-1115-13123:ORF_2_WIEN
+1-1111-7268:OTTO_SHOP
+1-1113-12657:PEPPERMINT_FM
+1-1051-28725:PHOENIX
+8468-2561-3:PHOENIX
+8468-258-13:PHOENIX
+133-17-13:PLANET
+61441-10003-50105:PLANET
+1-1113-12661:PLANET_RADIO
+1-1102-13210:PLAYBOY_TV
+1-1090-8506:PLAYBOY_TV
+1-1060-30603:PLAYBOY_TV
+61441-10002-50707:PLAYBOY_TV
+1-1008-29803:PLAYHOUSE_DISNEY
+1-1114-8907:PLAYHOUSE_DISNEY
+133-17-26:PLAYHOUSE_DISNEY
+1-1107-17501:PRO_SIEBEN
+8468-3074-16403:PRO_SIEBEN
+8468-769-16403:PRO_SIEBEN
+8468-771-16624:PRO_SIEBEN
+1-1082-20002:PRO_SIEBEN_AUSTRIA
+1-1017-61301:PRO_SIEBEN_HD
+1-1082-20001:PRO_SIEBEN_SCHWEIZ
+1-1082-20007:PULS
+133-7-54:Q_TV_SHOP
+1-1108-12100:QVC_GERMANY
+53-1109-5085:RADIO_10_GOLD
+53-1109-5072:RADIO_538
+1-1093-28455:RADIO_BERLIN_88_8
+1-1093-28456:RADIO_EINS
+1-1113-12659:RADIO_GLORIA
+1-1111-7289:RADIO_HOREB
+1-1115-13140:RADIO_MARIA
+1-1113-12650:RADIO_MARIA
+1-1073-28213:RADIO_MULTIKULTI
+1-1113-12655:RADIO_PALOMA
+1-1113-12663:RADIO_REGENBOGEN
+1-1057-61963:RAZE_TV
+1-1073-28206:RBB_BERLIN
+8468-258-12:RBB_BERLIN
+1-1073-28205:RBB_BRANDENBURG
+8468-258-11:RBB_BRANDENBURG
+1-1042-30051:REAL_MADRID_TV
+1-1090-8547:RFM_TV
+1-1113-12614:RHEIN_MAIN_TV
+1-1090-8529:RIRE_ET_CHANSONS
+133-17-155:RNB_HIPHOP
+133-7-160:ROCK_ANTENNE
+133-17-151:ROCK_HYMNEN
+133-9-63:ROMANCE_TV
+1-1090-8553:RSR_COULEUR_3
+1-1112-3982:RTBF_SAT
+1-1089-12020:RTL_2
+1-1090-8538:RTL_2
+8468-2818-16406:RTL_2
+8468-773-16406:RTL_2
+1-1091-28810:RTL_2_AUSTRIA
+53-1097-2004:RTL_4
+53-1097-2005:RTL_5
+53-1097-2006:RTL_7
+53-1097-2035:RTL_8
+1-1094-17035:RTL_9
+1-1089-12085:RTL_AUSTRIA
+1-1091-28800:RTL_AUSTRIA
+133-1-27:RTL_CRIME
+53-1105-4030:RTL_FM
+1-1057-61200:RTL_HD
+1-1089-12006:RTL_FS
+1-1089-12005:RTL_TELEVISION
+1-1089-12004:RTL_TELEVISION
+133-1-29:RTL_PASSION
+53-1097-2051:RTL_RADIO
+1-1102-13207:RTL_LIVING
+1-1089-12030:RTL_LIVING
+1-1089-12080:RTL_SHOP
+1-1108-3994:RTL_TELE_LETZEBURG
+1-1089-12003:RTL_TELEVISION
+1-1090-8528:RTL_TELEVISION
+8468-2818-16405:RTL_TELEVISION
+8468-773-16405:RTL_TELEVISION
+1-1026-10002:RTM_MAROC
+1-1024-9017:RTP_INT
+1-1022-6904:RUSSIA_TODAY
+1-1026-10077:RUSSIA_TODAY
+61441-10002-50702:SAILING_CHANNEL
+1-1107-17500:SAT.1
+8468-3074-16408:SAT.1
+8468-769-16408:SAT.1
+1-1107-17507:SAT.1
+1-1082-20008:SAT.1
+1-1107-17508:SAT.1
+1-1082-20009:SAT.1
+1-1082-20010:SAT.1
+1-1107-17505:SAT.1_COMEDY
+1-1082-20005:SAT.1_AUSTRIA
+1-1017-61300:SAT.1_HD
+1-1082-20006:SAT.1_SCHWEIZ
+53-1109-5005:SBS6
+61441-10002-50106:SCIFI
+1-1115-13111:SERVUS_TV
+1-1007-4913:SERVUS_TV_HD
+1-1007-4914:SERVUS_TV_HD
+8948-5-1:SF_1
+8948-5-2:SF_2
+8948-5-3:SF_INFO
+61441-10005-50305:SILVERLINE
+133-5-776:SIXX
+133-2-9:SKY_ACTION
+133-12-106:SKY_ACTION_HD
+133-10-123:SKY_ACTION_HD
+133-4-223:SKY_BUNDESLIGA
+133-2-10:SKY_CINEMA
+133-6-131:SKY_CINEMA_HD
+133-2-11:SKY_CINEMA+1
+133-2-43:SKY_CINEMA+24
+133-3-41:SKY_CINEMAHITS
+133-12-107:SKY_CINEMAHITS_HD
+133-10-124:SKY_CINEMAHITS_HD
+133-2-8:SKY_COMEDY
+133-2-20:SKY_EMOTION
+133-1-23:SKY_KRIMI
+1-1057-61969:SKY_NEWS_INTL
+1-1111-7290:SKY_NEWS_INTL
+133-3-516:SKY_NOSTALIGIE
+53-1109-5070:SKY_RADIO_NL
+133-4-18:SKY_SELECT
+133-4-221:SKY_SPORT_1
+133-4-222:SKY_SPORT_2
+133-7-53:SKY_SPORT_AUSTRIA
+133-6-129:SKY_SPORT_HD1
+133-13-114:SKY_SPORT_HD2
+133-10-122:SKY_SPORT_HD2
+133-3-17:SKY_SPORT_INFO
+133-33-32:SONNENKLAR_TV
+133-4-52:SPIEGEL_GESCHICHTE
+61441-10002-53401:SPIEGEL_TV_XXP
+133-33-900:SPORT1
+1-1057-61204:SPORT1_HD
+133-9-69:SPORTDIGITAL
+1-1073-28212:SPUTNIK
+1-1101-28129:SR_1
+1-1093-28486:SR_FERNSEHEN
+1-1093-28461:SR1_EUROPAWELLE
+1-1093-28462:SR2_KULTURRADIO
+1-1093-28463:SR3_SAARLANDWELLE
+1-1073-28231:SUEDWEST_FS_RP
+133-7-169:SUNSHINE_LIVE
+1-1089-12040:SUPER_RTL
+8468-2818-16411:SUPER_RTL
+8468-773-16411:SUPER_RTL
+1-1091-28815:SUPER_RTL_AUSTRIA
+1-1089-12041:SUPER_RTL
+1-1093-28465:SWR_1_BW
+1-1093-28466:SWR_1_RP
+1-1093-28467:SWR_2
+1-1093-28468:SWR_3
+1-1093-28469:SWR_4_BW
+1-1093-28470:SWR_4_RP
+1-1093-28472:SWR_CONT_RA
+1-1101-28113:SWR_FERNSEHEN_BW
+1-1073-28231:SWR_FERNSEHEN_RP
+133-17-36:SYFY
+1-1057-61920:TANGO_TV
+1-1092-10142:TEDDY
+133-33-51:TELE_5
+61441-10000-53002:TELE_5
+8468-5889-16413:TELE_5
+53-1109-5015:TMF
+133-1-50:TNT_SERIE
+133-9-61:TNT_FILM_TCM
+1-1100-8710:TRACE_TV
+61441-10003-50103:TRACE_TV
+1-1057-61911:TRW_AM
+8948-5-513:TSI_1
+8948-5-257:TSR_1
+61441-10000-53007:TV_5
+1-1024-9012:TV_5_EUROPE
+1-1112-12240:TV_5_EUROPE
+1-1091-31230:TV_6
+1-1112-12301:TV_6
+1-1024-9018:TV_7
+133-7-772:TV_BERLIN
+1-1032-30222:TV_GALICIA
+61441-10003-53302:TV_GUSTO
+1-1032-30201:TVC_INT
+1-1026-10001:TVE_INT
+1-1115-13101:TW1
+53-1109-5095:VERONICA_RADIO
+1-1066-28656:VH1
+1-1066-28666:VH1
+1-1066-28657:VH1_CLASSIC
+1-1066-28667:VH1_CLASSIC
+61441-10005-50302:VH1_CLASSIC
+1-1090-8544:VIBRATION
+1-1031-20365:VIVA
+1-1078-28676:VIVA
+1-1116-12732:VIVA
+1-1078-28676:VIVA_GERMANY
+1-1108-12120:VIVA_PLUS
+8468-774-16417:VIVA_PLUS
+1-1090-8550:VOLTAGE
+1-1089-12060:VOX
+8468-2818-16418:VOX
+8468-773-16418:VOX
+1-1091-28805:VOX_AUSTRIA
+1-1089-12061:VOX_CH
+1-1057-61201:VOX_HD
+1-1111-28534:WDR
+1-1201-28306:WDR
+1-1111-28536:WDR
+1-1201-28307:WDR
+1-1111-28537:WDR
+1-1201-28308:WDR
+1-1201-28309:WDR
+1-1101-28111:WDR
+1-1201-28310:WDR
+1-1201-28311:WDR
+1-1201-28395:WDR
+1-1111-28535:WDR
+8468-5633-262:WDR
+1-1093-28476:WDR_2
+1-1073-28215:WDR_3
+1-1093-28477:WDR_3
+1-1093-28478:WDR_4
+1-1073-28216:WDR_5
+1-1093-28479:WDR_5
+1-1093-28483:WDR_EVENT
+1-1093-28480:WDR_FUNKHAUS_EUROPA
+61441-10005-50303:WEIN_TV
+61441-10003-50109:WETTER_FERNSEHEN
+1-1112-12320:WISHLINE
+1-1113-12656:WRN_DEUTSCH
+53-1105-4009:X_ZONE
+1-1113-12602:XXP
+53-1105-4020:YAM_FM
+133-7-765:YAVIDO_CLIPS
+53-1109-5050:YORIN_FM
+1-1093-28423:YOU_FM
+1-1079-28006:ZDF
+8468-514-514:ZDF
+8468-514-517:ZDF_DOKU_KIKA
+1-1011-11110:ZDF_HD
+8468-514-515:ZDF_INFO_3SAT
+1-1079-28011:ZDF_INFOKANAL
+1-1079-28014:ZDF_NEO
+1-1079-28016:ZDF_THEATERKANAL
+1-1094-17024:ZIK
diff --git a/graphlcd/channels.alias-20101014.txt b/graphlcd/channels.alias-20101014.txt
deleted file mode 100644
index edbf06c..0000000
--- a/graphlcd/channels.alias-20101014.txt
+++ /dev/null
@@ -1,631 +0,0 @@
-133-5-662:1-2-3.tv
-61441-10000-50110:1-2-3.tv
-133-1-42:13TH_STREET
-61441-10005-50107:13TH_STREET
-53-1109-502313TH_STREET
-1-1093-28475:1LIVE
-1-1093-28481:1LIVE_DIGGI
-1-1024-9030:2M_MAROC
-1-1079-28007:3SAT
-1-1038-30405:40_TV
-1-1107-17504:9LIVE
-1-1094-17020:AB_MOTEURS
-1-1094-12021:AB1
-1-1094-17030:ACTION
-1-1090-8552:ADO_FM
-1-1020-7009:AL_JAZEERA
-1-1020-7012:AL_JAZEERA
-1-1024-9021:AL_JAZEERA
-1-1024-9011:ALGERIE
-1-1090-8549:ALOUETTE
-1-1095-20302:ANIMAL_PLANET
-53-1097-2020:ANIMAL_PLANET
-1-1094-17022:ANIMAUX
-1-1102-13203:ANIMAX
-53-1097-2047:ANIMAX
-1-1032-30207:ANIMAX
-1-1057-61202:ANIXE_HD
-133-5-764:ANIXE_SD
-133-7-170:ANTENNE_BAYERN
-1-1093-28454:ANTENNE_BRANDENBURG
-1-1051-28724:ARTE
-1-1076-8159:ARTE
-1-1076-8172:ARTE
-8468-2561-2:ARTE
-1-1098-9111:ARTE_HD
-1-1110-9304:ARTE_HD
-1-1110-9324:ARTE_HD
-1-1011-11120:ARTE_HD
-1-1057-61203:ASTRA_HD
-1-1117-13012:ATVPLUS
-1-1115-13106:AUSTRIA_9_TV
-1-1102-13212:AUTO_MOTOR_UND_SPORT
-1-1063-20352:AXN
-1-1008-29815:AXN
-61441-10005-50304:AXN
-133-9-62:AXN_ACTION
-1-1093-28404:B5_AKTUELL
-1-1093-28408:B5_PLUS
-1-1101-28107:BAYERISCHES_FERNSEHEN
-1-1101-28110:BAYERISCHES_FERNSEHEN
-8468-5633-34:BAYERISCHES_FERNSEHEN
-1-1093-28400:BAYERN_1
-1-1093-28401:BAYERN_2
-1-1093-28402:BAYERN_3
-1-1093-28403:BAYERN_4_KLASSIK
-1-1093-28405:BAYERN_PLUS
-1-1279-20328:BBC_PRIME
-53-1097-2030:BBC_PRIME
-61441-10004-53406:BBC_PRIME
-1-1026-10050:BBC_WORLD
-1-1094-17027:BBC_WORLD
-1-1112-12340:BBC_WORLD
-61441-10000-53001:BBC_WORLD
-133-17-21:BEATE_UHSE.TV
-1-1092-10155:BEATE_UHSE_SEXY_SAT
-1-1096-8613:BEUR_TV
-1-1108-12122:BIBEL TV
-61441-10004-53403:BIBEL TV
-1-1102-13208:BIOGRAPHY_CHANNEL
-133-9-67:BIOGRAPHY_CHANNEL
-1-1090-8505:BLOOMBERG_TV
-1-1108-12160:BLOOMBERG_TV
-61441-10000-53004:BLOOMBERG_TV
-1-1026-10067:BLOOMBERG_TV_GERMANY
-133-4-513:BLUE_MOVIE
-133-1-345:BLUE_MOVIE_1
-133-1-355:BLUE_MOVIE_2
-133-1-365:BLUE_MOVIE_3
-1-1063-20343:BOOMERANG
-133-9-66:BOOMERANG
-1-1054-30361:BOOMERANG
-1-1068-28527:BOOMERANG
-1-1093-28403:BR_KLASSIK
-1-1093-28407:BR_VERKEHR
-1-1093-28487:BR_ALPHA
-1-1101-28112:BR_ALPHA
-1-1093-28448:BREMEN_EINS
-1-1093-28450:BREMEN_VIER
-53-1109-5025:BVN
-1-1056-29963:CADENA_DIAL
-1-1020-7017:CANAL_CANARIAS
-1-1096-8612:CANAL_CLUB
-1-1038-30400:CANAL+
-1-1008-29817:CANAL+ ...30
-1-1102-13204:CARTOON_NETWORK
-133-9-64:CARTOON_NETWORK
-1-1279-20341:CARTOON_NETWORK
-1-1068-28521:CARTOON_NETWORK
-1-1111-7291:CFN_RFC
-1-1089-12095:CHANNEL_21
-1-1089-12080:CHANNEL_21
-133-7-769:CHANNEL_21
-1-1090-8548:CHERIE_FM
-1-1094-17032:CINE_BOX
-133-17-24:CLASSICA
-1-1026-10030:CNBC_EUROPE
-1-1112-12200:CNBC_EUROPE
-1-1068-28522:CNN_INT
-1-1032-30210:CNN+
-1-1063-20351:COMEDY_CENTRAL
-1-1090-8545:CONTACT_FM
-133-17-156:COUNTRY
-1-1092-10102:DAF_ANLEGER_TV
-1-1093-28471:DAS_DING
-1-1101-28106:DAS_ERSTE
-8468-2561-128:DAS_ERSTE
-8468-258-14:DAS_ERSTE
-1-1011-11100:DAS_ERSTE_HDv2
-133-5-1793:DAS_VIERTE
-1-1092-10141:DELUXE_LOUNGE
-1-1092-10100:DELUXE_MUSIC
-1-1092-10100:DELUXE_MUSIC
-1-1092-10140:DELUXE_RADIO
-1-1092-10140:DELUXE_RADIO
-133-17-150:DEUTSCHE_CHARTS
-1-1079-28013:DEUTSCHLANDFUNK_KOELN
-DEUTSCHLANDRADIO_BERLIN
-133-4-14:DISCOVERY_CHANNEL
-133-6-130:DISCOVERY_HD
-1-1038-30403:DISNEY_CHANNEL
-1-1095-20305:DISNEY_CHANNEL
-133-17-34:DISNEY_CHANNEL
-1-1072-8207:DISNEY_CHANNEL
-133-3-25:DISNEY_CINEMAGIC
-133-8-126:DISNEY_CINEMAGIC_HD
-61441-10002-50709:DISNEY_PLAYHOUSE
-61441-10005-50307:DISNEY_TOON
-61441-10002-50710:DISNEY_TOON_+1
-133-17-28:DISNEY_XD
-1-1100-8705:DISNEY_XD
-1-1046-30506:DISNEY_XD
-1-1079-28012:DKULTUR
-1-1097-28013:DLF
-1-1092-10101:DMAX
-133-5-171:DOMRADIO
-8468-774-16392:DSF
-1-1093-28416:DW_1
-1-1093-28417:DW_4
-1-1026-10020:DW_TV
-61441-10005-50104:E_ENTERTAINMENT
-1-1114-8911:E_ENTERTAINMENT
-133-5-172:EGO_FM
-1-1051-28721:EINS_EXTRA
-1-1051-28722:EINS_FESTIVAL
-1-1201-28396:EINS_FESTIVAL_HD
-1-1073-28203:EINS_MUXX
-1-1051-28723:EINS_PLUS
-133-7-161:ERF_RADIO
-1-1024-9014:ESC1_EGYPT
-1-1115-13109:ESPN _AMERICA
-1-1115-13105:ESPN_AMERICA_S
-61441-10005-50301:ESPN_CLASSIC_SPORT
-1-1070-8004:EURONEWS
-1-1079-28015:EURONEWS
-1-1091-31220:EURONEWS
-1-1090-8537:EUROPE_2
-1-1034-30680:EUROSPORT
-1-1046-30503:EUROSPORT
-1-1076-8151:EUROSPORT
-1-1079-28009:EUROSPORT
-1-1091-31200:EUROSPORT
-1-1279-20321:EUROSPORT
-53-1097-2025:EUROSPORT
-8468-5889-16420:EUROSPORT
-8468-774-16420:EUROSPORT
-1-1102-13205:EUROSPORT_2
-133-9-65:EUROSPORT_2
-1-1099-20367:EUROSPORT_2
-1-1099-20366:EUROSPORT_2
-1-1088-9503:EUROSPORT_2
-133-6-132:EUROSPORT_HD
-1-1098-9106:EUROSPORT_HD
-1-1116-9903:EUROSPORT_HD
-1-1116-9923:EUROSPORT_HD
-1-1056-29953:EUROSPORT_HD
-1-1058-30163:EUROSPORT_HD
-1-1058-30163EXTRA_1
-61441-10004-53409:EXTREME_SPORTS
-1-1095-20311:EXTREME_SPORTS
-1-1088-9508:EXTREME_SPORTS
-1-1094-17029:FASHION_TV
-61441-10005-50101:FASHION_TV
-1-1110-9301:FESTIVAL
-1-1113-12658:FFN_COMEDY
-1-1113-12654:FFN_DIGITAL
-1-1115-13134:FM4
-1-1102-13209:FOX
-1-1008-29801:FOX_KIDS
-1-1099-20316:FOX_KIDS
-133-17-28:FOX_KIDS
-1-1060-30611:FOX_NEWS
-1-1032-30201:FOX_NEWS
-133-1-16:FOX
-1-1022-6906:FRANCE_ 24
-1-1080-8801:FRANCE_2
-1-1080-8802:FRANCE_3
-1-1090-8501:FRANCE_5
-1-1092-10104:FRANKEN_SAT
-1-1057-61980:FREE_X_TV
-1-1073-28209:FRITZ
-1-1093-28457:FRITZ
-133-17-333:FUSSBALL_AUT
-133-2-253:FUSSBALL_AUT
-61441-10002-50706:GAMES_TV
-1-1115-13102:GO_TV
-133-17-518:GOLDSTAR_TV
-133-1-373:GOLF
-61441-10003-50111:GUTE_LAUNE_TV
-1-1095-20308:HALLMARK
-1-1279-20323:HALLMARK
-53-1097-2035:HALLMARK
-1-1113-12662:HARMONY_FM
-1-1011-11140:HD_TEST_ARD_ZDF
-133-17-22:HEIMATKANAL
-1-1101-28108:HESSEN_FERNSEHEN
-1-1110-9302:HISTOIRE
-1-1102-13201:HISTORY
-133-9-68:HISTORY
-61441-10003-53301:HISTORY_CHANNEL
-133-8-128:HISTORY_HD
-1-1113-12660:HITRADIO_FFH
-1-1117-13013:HITRADIO_OE3
-1-1116-12750:HOERZU_DIGITAL
-133-7-71:HOPE_CHANNEL
-133-5-175:HOPE_CHANNEL_RADIO
-1-1093-28419:HR_1
-1-1093-28420:HR_2
-1-1093-28421:HR_3
-1-1093-28422:HR_4
-1-1093-28424:HR_INFO
-1-1093-28425:HR_INFO_PLUS
-1-1101-28124:HR_KLASSIK
-1-1101-28122:HR_SKYLINE
-133-33-40:HSE24
-1-1091-31210:HSE24_EXTRA
-133-33-77:HSE24_TREND
-133-5-772:I_MUSIC
-1-1093-28452:INFORADIO
-1-1113-12651:INSELRADIO
-133-7-514:JML_SHOP
-1-1093-28432:JUMP
-133-17-19:JUNIOR
-1-1113-12616:JUWELO_TV
-1-1113-12601:K_TV
-61441-10002-50705:K_TV
-8468-3074-16394:KABEL_1
-8468-769-16394:KABEL_1
-1-1107-17502:KABEL_1
-1-1082-20004:KABEL_1_AUSTRIA
-1-1107-17506:KABEL_1_CLASSIC
-1-1017-61302:KABEL_1_HD
-1-1082-20003:KABEL_1_SCHWEIZ
-1-1079-28008:KIKA
-53-1109-5055:KINK_FM
-133-9-60:KINOWELT
-1-1102-13206:KINOWELT
-1-1093-28482:KIRAKA
-133-5-173:KLASSIK_RADIO
-1-1022-6902:KTO
-1-1093-28453:KULTURRADIO
-1-1076-8156:LCI
-1-1076-8154:LCP
-1-1076-8173:LCP
-1-1108-12120:LIBERTY_TV
-1-1112-12280:LIBERTY_TV
-1-1110-9307:LIVE_1
-133-17-152:LOVE_SONGS
-1-1074-8355:MATCH_TV
-1-1073-28204:MDR_FERNSEHEN
-8468-5633-100:MDR_FERNSEHEN
-1-1073-28228:MDR_FERNSEHEN_S
-1-1073-28229:MDR_FERNSEHEN_SA
-1-1073-28230:MDR_FERNSEHEN_TH
-1-1073-28208:MDR_FIGARO
-1-1093-28431:MDR_FIGARO
-1-1073-28211:MDR_INFO
-1-1093-28434:MDR_INFO
-1-1093-28435:MDR_KLASSIK
-1-1093-28433:MDR_SPUTNIK
-1-1093-28429:MDR1_SA_ANHALT
-1-1093-28428:MDR1_SACHSEN
-1-1093-28430:MDR1_THUERINGEN
-1-1090-8559:MEDIA_TROPICAL
-133-33-899:MEIN_TV_SHOP
-133-3-515:MGM
-1-1063-20349:MGM
-1-1088-9509:MOTORS_TV
-61441-10003-50102:MOTORS_TV
-133-1-168:MOTORVISION_TV
-61441-10000-53005:MTV
-1-1066-28659:MTV_2
-1-1091-28641:MTV_AUSTRIA
-1-1066-28655:MTV_BASE
-1-1066-28661:MTV_BASE
-1-1066-28665:MTV_BASE
-1-1066-28653:MTV_CENTRAL
-1-1091-28641:MTV_CENTRAL
-1-1279-20322:MTV_CENTRAL
-61441-10002-50703:MTV_DANCE
-1-1066-28652:MTV_F
-1-1078-28673:MTV_GERMANY
-1-1066-28664:MTV_HITS
-1-1066-28654:MTV_HITS
-61441-10002-50704:MTV_HITS
-1-1093-28440:N_JOY
-1-1107-17503:N24
-8468-3074-16398:N24
-8468-769-16398:N24
-61441-10005-50306:NASN
-133-4-12:NAT_GEO_WILD
-1-1088-9506:NAT_GEO_WILD
-61441-10002-50708:NATIONAL_GEOGRAPHIC
-1-1060-30605:NATIONAL_GEOGRAPHIC
-133-4-13:NATIONAL_GEOGRAPHIC
-1-1102-13202NATIONAL_GEOGRAPHIC
-133-8-127:NATIONAL_GEOGRAPHIC_HD
-1-1058-30124NATIONAL_GEOGRAPHIC_HD
-1-1028-30704NATIONAL_GEOGRAPHIC_HD
-1-1093-28444:NDR_1_NIEDERS
-1-1093-28443:NDR_1_RADIO_MV
-1-1093-28442:NDR_1_WELLE_NORD
-1-1093-28437:NDR_2
-1-1093-28441:NDR_90_3
-1-1073-28225:NDR_FERNSEHEN_HH
-1-1073-28224:NDR_FERNSEHEN_MV
-1-1073-28226:NDR_FERNSEHEN_NDS
-1-1073-28227:NDR_FERNSEHEN_SH
-8468-5633-131:NDR_FERNSEHEN_SH
-1-1093-28439:NDR_INFO
-1-1101-28127:NDR_INFO
-1-1093-28445:NDR_INFO_SPEZIAL
-1-1093-28438:NDR_KULTUR
-1-1073-28207:NDR_KULTUR
-53-1105-4011:NED_1
-53-1105-4012:NED_2
-53-1105-4013:NED_3
-53-1109-5004:NET_5
-61441-10000-53006:NICK
-1-1066-28660:NICK
-1-1091-28640:NICKELODEON
-1-1078-28680:NICKELODEON
-1-1066-28658:NICKELODEON
-1-1078-28682:NICKTOONS_S
-1-1093-28449:NORDWEST_RADIO
-1-1090-8536:NRJ
-1-1018-6406:NRJ_HITS
-1-1089-12090:NTV
-1-1115-13135:OE_1_INTERNATIONAL
-1-1117-13021:OESTERREICH_1
-1-1115-13122:OESTERREICH_1
-1-1115-13121:OESTERREICH_1
-1-1117-13033:OESTERREICH_3
-1-1115-13133:OESTERREICH_3
-133-5-174:OLDIESTAR
-1-1093-28406:ON_3_RADIO
-1-1092-10103:ONTV
-1-1117-13001:ORF_1
-1-1007-4911:ORF_1_HD
-1-1117-13002:ORF_2
-1-1117-13014:ORF_2
-1-1117-13005:ORF_2_ BURGENLAND
-1-1115-13125:ORF_2_ BURGENLAND
-1-1007-4912:ORF_2_HD
-1-1117-13011:ORF_2_KAERNTEN
-1-1115-13131:ORF_2_KAERNTEN
-1-1117-13004:ORF_2_NIEDEROESTERREICH
-1-1115-13124:ORF_2_NIEDEROESTERREICH
-1-1117-13006:ORF_2_OBEROESTERREICH
-1-1115-13126:ORF_2_OBEROESTERREICH
-1-1117-13007:ORF_2_SALZBURG
-1-1115-13127:ORF_2_SALZBURG
-1-1117-13010:ORF_2_STEIERMARK
-1-1115-13130:ORF_2_STEIERMARK
-1-1117-13008:ORF_2_TIROL
-1-1115-13128:ORF_2_TIROL
-1-1117-13009:ORF_2_VORARLBERG
-1-1115-13129:ORF_2_VORARLBERG
-1-1117-13003:ORF_2_WIEN
-1-1115-13123:ORF_2_WIEN
-1-1111-7268:OTTO_SHOP
-1-1113-12657:PEPPERMINT_FM
-1-1051-28725:PHOENIX
-8468-2561-3:PHOENIX
-8468-258-13:PHOENIX
-133-17-13:PLANET
-61441-10003-50105:PLANET
-1-1113-12661:PLANET_RADIO
-1-1102-13210:PLAYBOY_TV
-1-1090-8506:PLAYBOY_TV
-1-1060-30603:PLAYBOY_TV
-61441-10002-50707:PLAYBOY_TV
-1-1008-29803:PLAYHOUSE_DISNEY
-1-1114-8907:PLAYHOUSE_DISNEY
-133-17-26:PLAYHOUSE_DISNEY
-1-1107-17501:PRO_SIEBEN
-8468-3074-16403:PRO_SIEBEN
-8468-769-16403:PRO_SIEBEN
-8468-771-16624:PRO_SIEBEN
-1-1082-20002:PRO_SIEBEN_AUSTRIA
-1-1017-61301:PRO_SIEBEN_HD
-1-1082-20001:PRO_SIEBEN_SCHWEIZ
-1-1082-20007:PULS
-133-7-54:Q_TV_SHOP
-1-1108-12100:QVC_GERMANY
-53-1109-5085:RADIO_10_GOLD
-53-1109-5072:RADIO_538
-1-1093-28455:RADIO_BERLIN_88_8
-1-1093-28456:RADIO_EINS
-1-1113-12659:RADIO_GLORIA
-1-1111-7289:RADIO_HOREB
-1-1115-13140:RADIO_MARIA
-1-1113-12650:RADIO_MARIA
-1-1073-28213:RADIO_MULTIKULTI
-1-1113-12655:RADIO_PALOMA
-1-1113-12663:RADIO_REGENBOGEN
-1-1057-61963:RAZE_TV
-1-1073-28206:RBB_BERLIN
-8468-258-12:RBB_BERLIN
-1-1073-28205:RBB_BRANDENBURG
-8468-258-11:RBB_BRANDENBURG
-1-1042-30051:REAL_MADRID_TV
-1-1090-8547:RFM_TV
-1-1113-12614:RHEIN_MAIN_TV
-1-1090-8529:RIRE_ET_CHANSONS
-133-17-155:RNB_HIPHOP
-133-7-160:ROCK_ANTENNE
-133-17-151:ROCK_HYMNEN
-133-9-63:ROMANCE_TV
-1-1090-8553:RSR_COULEUR_3
-1-1112-3982:RTBF_SAT
-1-1089-12020:RTL_2
-1-1090-8538:RTL_2
-8468-2818-16406:RTL_2
-8468-773-16406:RTL_2
-1-1091-28810:RTL_2_AUSTRIA
-53-1097-2004:RTL_4
-53-1097-2005:RTL_5
-53-1097-2006:RTL_7
-53-1097-2035:RTL_8
-1-1094-17035:RTL_9
-1-1089-12085:RTL_AUSTRIA
-1-1091-28800:RTL_AUSTRIA
-133-1-27:RTL_CRIME
-53-1105-4030:RTL_FM
-1-1057-61200:RTL_HD
-1-1089-12006:RTL_FS
-1-1089-12005:RTL_TELEVISION
-1-1089-12004:RTL_TELEVISION
-133-1-29:RTL_PASSION
-53-1097-2051:RTL_RADIO
-1-1102-13207:RTL_LIVING
-1-1089-12030:RTL_LIVING
-1-1089-12080:RTL_SHOP
-1-1108-3994:RTL_TELE_LETZEBURG
-1-1089-12003:RTL_TELEVISION
-1-1090-8528:RTL_TELEVISION
-8468-2818-16405:RTL_TELEVISION
-8468-773-16405:RTL_TELEVISION
-1-1026-10002:RTM_MAROC
-1-1024-9017:RTP_INT
-1-1022-6904:RUSSIA_TODAY
-1-1026-10077:RUSSIA_TODAY
-61441-10002-50702:SAILING_CHANNEL
-1-1107-17500:SAT.1
-8468-3074-16408:SAT.1
-8468-769-16408:SAT.1
-1-1107-17507:SAT.1
-1-1082-20008:SAT.1
-1-1107-17508:SAT.1
-1-1082-20009:SAT.1
-1-1082-20010:SAT.1
-1-1107-17505:SAT.1_COMEDY
-1-1082-20005:SAT.1_AUSTRIA
-1-1017-61300:SAT.1_HD
-1-1082-20006:SAT.1_SCHWEIZ
-53-1109-5005:SBS6
-61441-10002-50106:SCIFI
-1-1115-13111:SERVUS_TV
-1-1007-4913:SERVUS_TV_HD
-8948-5-1:SF_1
-8948-5-2:SF_2
-8948-5-3:SF_INFO
-61441-10005-50305:SILVERLINE
-133-5-776:SIXX
-133-2-9:SKY_ACTION
-133-10-123:SKY_ACTION_HD
-133-4-223:SKY_BUNDESLIGA
-133-2-10:SKY_CINEMA
-133-6-131:SKY_CINEMA_HD
-133-2-11:SKY_CINEMA+1
-133-2-43:SKY_CINEMA+24
-133-3-41:SKY_CINEMAHITS
-133-10-124:SKY_CINEMAHITS_HD
-133-2-8:SKY_COMEDY
-133-2-20:SKY_EMOTION
-133-1-23:SKY_KRIMI
-1-1057-61969:SKY_NEWS_INTL
-1-1111-7290:SKY_NEWS_INTL
-133-3-516:SKY_NOSTALIGIE
-53-1109-5070:SKY_RADIO_NL
-133-4-18:SKY_SELECT
-133-4-221:SKY_SPORT_1
-133-4-222:SKY_SPORT_2
-133-7-53:SKY_SPORT_AUSTRIA
-133-6-129:SKY_SPORT_HD1
-133-10-122:SKY_SPORT_HD2
-133-3-17:SKY_SPORT_INFO
-133-33-32:SONNENKLAR_TV
-133-4-52:SPIEGEL_GESCHICHTE
-61441-10002-53401:SPIEGEL_TV_XXP
-133-33-900:SPORT1
-1-1057-61204:SPORT1_HD_DEMO
-133-9-69:SPORTDIGITAL
-1-1073-28212:SPUTNIK
-1-1101-28129:SR_1
-1-1093-28486:SR_FERNSEHEN
-1-1093-28461:SR1_EUROPAWELLE
-1-1093-28462:SR2_KULTURRADIO
-1-1093-28463:SR3_SAARLANDWELLE
-1-1073-28231:SUEDWEST_FS_RP
-133-7-169:SUNSHINE_LIVE
-1-1089-12040:SUPER_RTL
-8468-2818-16411:SUPER_RTL
-8468-773-16411:SUPER_RTL
-1-1091-28815:SUPER_RTL_AUSTRIA
-1-1089-12041:SUPER_RTL
-1-1093-28465:SWR_1_BW
-1-1093-28466:SWR_1_RP
-1-1093-28467:SWR_2
-1-1093-28468:SWR_3
-1-1093-28469:SWR_4_BW
-1-1093-28470:SWR_4_RP
-1-1093-28472:SWR_CONT_RA
-1-1101-28113:SWR_FERNSEHEN_BW
-1-1073-28231:SWR_FERNSEHEN_RP
-133-17-36:SYFY
-1-1057-61920:TANGO_TV
-1-1092-10142:TEDDY
-133-33-51:TELE_5
-61441-10000-53002:TELE_5
-8468-5889-16413:TELE_5
-53-1109-5015:TMF
-133-1-50:TNT_SERIE
-133-9-61:TNT_FILM_TCM
-1-1100-8710:TRACE_TV
-61441-10003-50103:TRACE_TV
-1-1057-61911:TRW_AM
-8948-5-513:TSI_1
-8948-5-257:TSR_1
-61441-10000-53007:TV_5
-1-1024-9012:TV_5_EUROPE
-1-1112-12240:TV_5_EUROPE
-1-1091-31230:TV_6
-1-1112-12301:TV_6
-1-1024-9018:TV_7
-133-7-772:TV_BERLIN
-1-1032-30222:TV_GALICIA
-61441-10003-53302:TV_GUSTO
-1-1032-30201:TVC_INT
-1-1026-10001:TVE_INT
-1-1115-13101:TW1
-53-1109-5095:VERONICA_RADIO
-1-1066-28656:VH1
-1-1066-28666:VH1
-1-1066-28657:VH1_CLASSIC
-1-1066-28667:VH1_CLASSIC
-61441-10005-50302:VH1_CLASSIC
-1-1090-8544:VIBRATION
-1-1031-20365:VIVA
-1-1078-28676:VIVA
-1-1116-12732:VIVA
-1-1078-28676:VIVA_GERMANY
-1-1108-12120:VIVA_PLUS
-8468-774-16417:VIVA_PLUS
-1-1090-8550:VOLTAGE
-1-1089-12060:VOX
-8468-2818-16418:VOX
-8468-773-16418:VOX
-1-1091-28805:VOX_AUSTRIA
-1-1089-12061:VOX_CH
-1-1057-61201:VOX_HD
-1-1111-28534:WDR
-1-1201-28306:WDR
-1-1111-28536:WDR
-1-1201-28307:WDR
-1-1111-28537:WDR
-1-1201-28308:WDR
-1-1201-28309:WDR
-1-1101-28111:WDR
-1-1201-28310:WDR
-1-1201-28311:WDR
-1-1201-28395:WDR
-1-1111-28535:WDR
-8468-5633-262:WDR
-1-1093-28476:WDR_2
-1-1073-28215:WDR_3
-1-1093-28477:WDR_3
-1-1093-28478:WDR_4
-1-1073-28216:WDR_5
-1-1093-28479:WDR_5
-1-1093-28483:WDR_EVENT
-1-1093-28480:WDR_FUNKHAUS_EUROPA
-61441-10005-50303:WEIN_TV
-61441-10003-50109:WETTER_FERNSEHEN
-1-1112-12320:WISHLINE
-1-1113-12656:WRN_DEUTSCH
-53-1105-4009:X_ZONE
-1-1113-12602:XXP
-53-1105-4020:YAM_FM
-133-7-765:YAVIDO_CLIPS
-53-1109-5050:YORIN_FM
-1-1093-28423:YOU_FM
-1-1079-28006:ZDF
-8468-514-514:ZDF
-8468-514-517:ZDF_DOKU_KIKA
-1-1011-11110:ZDF_HD
-8468-514-515:ZDF_INFO_3SAT
-1-1079-28011:ZDF_INFOKANAL
-1-1079-28014:ZDF_NEO
-1-1079-28016:ZDF_THEATERKANAL
-1-1094-17024:ZIK
diff --git a/graphlcd/channels.alias-20110104.txt b/graphlcd/channels.alias-20110104.txt
deleted file mode 100644
index e0a802b..0000000
--- a/graphlcd/channels.alias-20110104.txt
+++ /dev/null
@@ -1,639 +0,0 @@
-133-5-662:1-2-3.tv
-61441-10000-50110:1-2-3.tv
-133-1-42:13TH_STREET
-61441-10005-50107:13TH_STREET
-53-1109-502313TH_STREET
-1-1093-28475:1LIVE
-1-1093-28481:1LIVE_DIGGI
-1-1024-9030:2M_MAROC
-1-1079-28007:3SAT
-1-1038-30405:40_TV
-1-1107-17504:9LIVE
-1-1094-17020:AB_MOTEURS
-1-1094-12021:AB1
-1-1094-17030:ACTION
-1-1090-8552:ADO_FM
-1-1020-7009:AL_JAZEERA
-1-1020-7012:AL_JAZEERA
-1-1024-9021:AL_JAZEERA
-1-1024-9011:ALGERIE
-1-1090-8549:ALOUETTE
-1-1095-20302:ANIMAL_PLANET
-53-1097-2020:ANIMAL_PLANET
-1-1094-17022:ANIMAUX
-1-1102-13203:ANIMAX
-53-1097-2047:ANIMAX
-1-1032-30207:ANIMAX
-1-1057-61202:ANIXE_HD
-133-5-764:ANIXE_SD
-133-7-170:ANTENNE_BAYERN
-1-1093-28454:ANTENNE_BRANDENBURG
-1-1051-28724:ARTE
-1-1076-8159:ARTE
-1-1076-8172:ARTE
-8468-2561-2:ARTE
-1-1098-9111:ARTE_HD
-1-1110-9304:ARTE_HD
-1-1110-9324:ARTE_HD
-1-1011-11120:ARTE_HD
-1-1057-61203:ASTRA_HD
-1-1117-13012:ATVPLUS
-1-1115-13106:AUSTRIA_9_TV
-1-1102-13212:AUTO_MOTOR_UND_SPORT
-1-1063-20352:AXN
-1-1008-29815:AXN
-61441-10005-50304:AXN
-133-9-62:AXN_ACTION
-1-1093-28404:B5_AKTUELL
-1-1093-28408:B5_PLUS
-1-1101-28107:BAYERISCHES_FERNSEHEN
-1-1101-28110:BAYERISCHES_FERNSEHEN
-8468-5633-34:BAYERISCHES_FERNSEHEN
-1-1093-28400:BAYERN_1
-1-1093-28401:BAYERN_2
-1-1093-28402:BAYERN_3
-1-1093-28403:BAYERN_4_KLASSIK
-1-1093-28405:BAYERN_PLUS
-1-1279-20328:BBC_PRIME
-53-1097-2030:BBC_PRIME
-61441-10004-53406:BBC_PRIME
-1-1026-10050:BBC_WORLD
-1-1094-17027:BBC_WORLD
-1-1112-12340:BBC_WORLD
-61441-10000-53001:BBC_WORLD
-133-17-21:BEATE_UHSE.TV
-1-1092-10155:BEATE_UHSE_SEXY_SAT
-1-1096-8613:BEUR_TV
-1-1108-12122:BIBEL TV
-61441-10004-53403:BIBEL TV
-1-1102-13208:BIOGRAPHY_CHANNEL
-133-9-67:BIOGRAPHY_CHANNEL
-1-1090-8505:BLOOMBERG_TV
-1-1108-12160:BLOOMBERG_TV
-61441-10000-53004:BLOOMBERG_TV
-1-1026-10067:BLOOMBERG_TV_GERMANY
-133-4-513:BLUE_MOVIE
-133-1-345:BLUE_MOVIE_1
-133-1-355:BLUE_MOVIE_2
-133-1-365:BLUE_MOVIE_3
-1-1063-20343:BOOMERANG
-133-9-66:BOOMERANG
-1-1054-30361:BOOMERANG
-1-1068-28527:BOOMERANG
-1-1093-28403:BR_KLASSIK
-1-1093-28407:BR_VERKEHR
-1-1093-28487:BR_ALPHA
-1-1101-28112:BR_ALPHA
-1-1093-28448:BREMEN_EINS
-1-1093-28450:BREMEN_VIER
-53-1109-5025:BVN
-1-1056-29963:CADENA_DIAL
-1-1020-7017:CANAL_CANARIAS
-1-1096-8612:CANAL_CLUB
-1-1038-30400:CANAL+
-1-1008-29817:CANAL+ ...30
-1-1102-13204:CARTOON_NETWORK
-133-9-64:CARTOON_NETWORK
-1-1279-20341:CARTOON_NETWORK
-1-1068-28521:CARTOON_NETWORK
-1-1111-7291:CFN_RFC
-1-1089-12095:CHANNEL_21
-1-1089-12080:CHANNEL_21
-133-7-769:CHANNEL_21
-1-1090-8548:CHERIE_FM
-1-1094-17032:CINE_BOX
-133-17-24:CLASSICA
-1-1026-10030:CNBC_EUROPE
-1-1112-12200:CNBC_EUROPE
-1-1068-28522:CNN_INT
-1-1032-30210:CNN+
-1-1063-20351:COMEDY_CENTRAL
-1-1090-8545:CONTACT_FM
-133-17-156:COUNTRY
-1-1092-10102:DAF_ANLEGER_TV
-1-1093-28471:DAS_DING
-1-1101-28106:DAS_ERSTE
-8468-2561-128:DAS_ERSTE
-8468-258-14:DAS_ERSTE
-1-1011-11100:DAS_ERSTE_HDv2
-133-5-1793:DAS_VIERTE
-1-1092-10141:DELUXE_LOUNGE
-1-1092-10100:DELUXE_MUSIC
-1-1092-10100:DELUXE_MUSIC
-1-1092-10140:DELUXE_RADIO
-1-1092-10140:DELUXE_RADIO
-133-17-150:DEUTSCHE_CHARTS
-1-1079-28013:DEUTSCHLANDFUNK_KOELN
-DEUTSCHLANDRADIO_BERLIN
-133-4-14:DISCOVERY_CHANNEL
-133-6-130:DISCOVERY_HD
-1-1038-30403:DISNEY_CHANNEL
-1-1095-20305:DISNEY_CHANNEL
-133-17-34:DISNEY_CHANNEL
-1-1072-8207:DISNEY_CHANNEL
-133-3-25:DISNEY_CINEMAGIC
-133-13-111:DISNEY_CINEMAGIC_HD
-133-8-126:DISNEY_CINEMAGIC_HD
-61441-10002-50709:DISNEY_PLAYHOUSE
-61441-10005-50307:DISNEY_TOON
-61441-10002-50710:DISNEY_TOON_+1
-133-17-28:DISNEY_XD
-1-1100-8705:DISNEY_XD
-1-1046-30506:DISNEY_XD
-1-1079-28012:DKULTUR
-1-1097-28013:DLF
-1-1092-10101:DMAX
-133-5-171:DOMRADIO
-8468-774-16392:DSF
-1-1093-28416:DW_1
-1-1093-28417:DW_4
-1-1026-10020:DW_TV
-61441-10005-50104:E_ENTERTAINMENT
-1-1114-8911:E_ENTERTAINMENT
-133-5-172:EGO_FM
-1-1051-28721:EINS_EXTRA
-1-1051-28722:EINS_FESTIVAL
-1-1201-28396:EINS_FESTIVAL_HD
-1-1073-28203:EINS_MUXX
-1-1051-28723:EINS_PLUS
-133-7-161:ERF_RADIO
-1-1024-9014:ESC1_EGYPT
-1-1115-13109:ESPN _AMERICA
-133-11-119:ESPN_AMERICA_SPORT
-1-1115-13105:ESPN_AMERICA_SPORT
-61441-10005-50301:ESPN_CLASSIC_SPORT
-1-1070-8004:EURONEWS
-1-1079-28015:EURONEWS
-1-1091-31220:EURONEWS
-1-1090-8537:EUROPE_2
-1-1034-30680:EUROSPORT
-1-1046-30503:EUROSPORT
-1-1076-8151:EUROSPORT
-1-1079-28009:EUROSPORT
-1-1091-31200:EUROSPORT
-1-1279-20321:EUROSPORT
-53-1097-2025:EUROSPORT
-8468-5889-16420:EUROSPORT
-8468-774-16420:EUROSPORT
-1-1102-13205:EUROSPORT_2
-133-9-65:EUROSPORT_2
-1-1099-20367:EUROSPORT_2
-1-1099-20366:EUROSPORT_2
-1-1088-9503:EUROSPORT_2
-133-6-132:EUROSPORT_HD
-1-1098-9106:EUROSPORT_HD
-1-1116-9903:EUROSPORT_HD
-1-1116-9923:EUROSPORT_HD
-1-1056-29953:EUROSPORT_HD
-1-1058-30163:EUROSPORT_HD
-1-1058-30163EXTRA_1
-61441-10004-53409:EXTREME_SPORTS
-1-1095-20311:EXTREME_SPORTS
-1-1088-9508:EXTREME_SPORTS
-1-1094-17029:FASHION_TV
-61441-10005-50101:FASHION_TV
-1-1110-9301:FESTIVAL
-1-1113-12658:FFN_COMEDY
-1-1113-12654:FFN_DIGITAL
-1-1115-13134:FM4
-1-1102-13209:FOX
-1-1008-29801:FOX_KIDS
-1-1099-20316:FOX_KIDS
-133-17-28:FOX_KIDS
-1-1060-30611:FOX_NEWS
-1-1032-30201:FOX_NEWS
-133-1-16:FOX
-1-1022-6906:FRANCE_ 24
-1-1080-8801:FRANCE_2
-1-1080-8802:FRANCE_3
-1-1090-8501:FRANCE_5
-1-1092-10104:FRANKEN_SAT
-1-1057-61980:FREE_X_TV
-1-1073-28209:FRITZ
-1-1093-28457:FRITZ
-133-17-333:FUSSBALL_AUT
-133-2-253:FUSSBALL_AUT
-61441-10002-50706:GAMES_TV
-1-1115-13102:GO_TV
-133-17-518:GOLDSTAR_TV
-133-1-373:GOLF
-61441-10003-50111:GUTE_LAUNE_TV
-1-1095-20308:HALLMARK
-1-1279-20323:HALLMARK
-53-1097-2035:HALLMARK
-1-1113-12662:HARMONY_FM
-1-1011-11140:HD_TEST_ARD_ZDF
-133-17-22:HEIMATKANAL
-1-1101-28108:HESSEN_FERNSEHEN
-1-1110-9302:HISTOIRE
-1-1102-13201:HISTORY
-133-9-68:HISTORY
-61441-10003-53301:HISTORY_CHANNEL
-133-13-113:HISTORY_HD
-133-8-128:HISTORY_HD
-1-1113-12660:HITRADIO_FFH
-1-1117-13013:HITRADIO_OE3
-1-1116-12750:HOERZU_DIGITAL
-133-7-71:HOPE_CHANNEL
-133-5-175:HOPE_CHANNEL_RADIO
-1-1093-28419:HR_1
-1-1093-28420:HR_2
-1-1093-28421:HR_3
-1-1093-28422:HR_4
-1-1093-28424:HR_INFO
-1-1093-28425:HR_INFO_PLUS
-1-1101-28124:HR_KLASSIK
-1-1101-28122:HR_SKYLINE
-133-33-40:HSE24
-1-1091-31210:HSE24_EXTRA
-133-33-77:HSE24_TREND
-133-5-772:I_MUSIC
-1-1093-28452:INFORADIO
-1-1113-12651:INSELRADIO
-133-7-514:JML_SHOP
-1-1093-28432:JUMP
-133-17-19:JUNIOR
-1-1113-12616:JUWELO_TV
-1-1113-12601:K_TV
-61441-10002-50705:K_TV
-8468-3074-16394:KABEL_1
-8468-769-16394:KABEL_1
-1-1107-17502:KABEL_1
-1-1082-20004:KABEL_1_AUSTRIA
-1-1107-17506:KABEL_1_CLASSIC
-1-1017-61302:KABEL_1_HD
-1-1082-20003:KABEL_1_SCHWEIZ
-1-1079-28008:KIKA
-53-1109-5055:KINK_FM
-133-9-60:KINOWELT
-1-1102-13206:KINOWELT
-1-1093-28482:KIRAKA
-133-5-173:KLASSIK_RADIO
-1-1022-6902:KTO
-1-1093-28453:KULTURRADIO
-1-1076-8156:LCI
-1-1076-8154:LCP
-1-1076-8173:LCP
-1-1108-12120:LIBERTY_TV
-1-1112-12280:LIBERTY_TV
-1-1110-9307:LIVE_1
-133-17-152:LOVE_SONGS
-1-1074-8355:MATCH_TV
-1-1073-28204:MDR_FERNSEHEN
-8468-5633-100:MDR_FERNSEHEN
-1-1073-28228:MDR_FERNSEHEN_S
-1-1073-28229:MDR_FERNSEHEN_SA
-1-1073-28230:MDR_FERNSEHEN_TH
-1-1073-28208:MDR_FIGARO
-1-1093-28431:MDR_FIGARO
-1-1073-28211:MDR_INFO
-1-1093-28434:MDR_INFO
-1-1093-28435:MDR_KLASSIK
-1-1093-28433:MDR_SPUTNIK
-1-1093-28429:MDR1_SA_ANHALT
-1-1093-28428:MDR1_SACHSEN
-1-1093-28430:MDR1_THUERINGEN
-1-1090-8559:MEDIA_TROPICAL
-133-33-899:MEIN_TV_SHOP
-133-3-515:MGM
-1-1063-20349:MGM
-1-1088-9509:MOTORS_TV
-61441-10003-50102:MOTORS_TV
-133-1-168:MOTORVISION_TV
-61441-10000-53005:MTV
-1-1066-28659:MTV_2
-1-1091-28641:MTV_AUSTRIA
-1-1066-28655:MTV_BASE
-1-1066-28661:MTV_BASE
-1-1066-28665:MTV_BASE
-1-1066-28653:MTV_CENTRAL
-1-1091-28641:MTV_CENTRAL
-1-1279-20322:MTV_CENTRAL
-61441-10002-50703:MTV_DANCE
-1-1066-28652:MTV_F
-1-1078-28673:MTV_GERMANY
-1-1066-28664:MTV_HITS
-1-1066-28654:MTV_HITS
-61441-10002-50704:MTV_HITS
-1-1093-28440:N_JOY
-1-1107-17503:N24
-8468-3074-16398:N24
-8468-769-16398:N24
-61441-10005-50306:NASN
-133-4-12:NAT_GEO_WILD
-1-1088-9506:NAT_GEO_WILD
-61441-10002-50708:NATIONAL_GEOGRAPHIC
-1-1060-30605:NATIONAL_GEOGRAPHIC
-133-4-13:NATIONAL_GEOGRAPHIC
-1-1102-13202NATIONAL_GEOGRAPHIC
-133-13-112:NATIONAL_GEOGRAPHIC_HD
-133-8-127:NATIONAL_GEOGRAPHIC_HD
-1-1058-30124NATIONAL_GEOGRAPHIC_HD
-1-1028-30704NATIONAL_GEOGRAPHIC_HD
-1-1093-28444:NDR_1_NIEDERS
-1-1093-28443:NDR_1_RADIO_MV
-1-1093-28442:NDR_1_WELLE_NORD
-1-1093-28437:NDR_2
-1-1093-28441:NDR_90_3
-1-1073-28225:NDR_FERNSEHEN_HH
-1-1073-28224:NDR_FERNSEHEN_MV
-1-1073-28226:NDR_FERNSEHEN_NDS
-1-1073-28227:NDR_FERNSEHEN_SH
-8468-5633-131:NDR_FERNSEHEN_SH
-1-1093-28439:NDR_INFO
-1-1101-28127:NDR_INFO
-1-1093-28445:NDR_INFO_SPEZIAL
-1-1093-28438:NDR_KULTUR
-1-1073-28207:NDR_KULTUR
-53-1105-4011:NED_1
-53-1105-4012:NED_2
-53-1105-4013:NED_3
-53-1109-5004:NET_5
-61441-10000-53006:NICK
-1-1066-28660:NICK
-1-1091-28640:NICKELODEON
-1-1078-28680:NICKELODEON
-1-1066-28658:NICKELODEON
-1-1078-28682:NICKTOONS_S
-1-1093-28449:NORDWEST_RADIO
-1-1090-8536:NRJ
-1-1018-6406:NRJ_HITS
-1-1089-12090:NTV
-1-1115-13135:OE_1_INTERNATIONAL
-1-1117-13021:OESTERREICH_1
-1-1115-13122:OESTERREICH_1
-1-1115-13121:OESTERREICH_1
-1-1117-13033:OESTERREICH_3
-1-1115-13133:OESTERREICH_3
-133-5-174:OLDIESTAR
-1-1093-28406:ON_3_RADIO
-1-1092-10103:ONTV
-1-1117-13001:ORF_1
-1-1007-4911:ORF_1_HD
-1-1117-13002:ORF_2
-1-1117-13014:ORF_2
-1-1117-13005:ORF_2_ BURGENLAND
-1-1115-13125:ORF_2_ BURGENLAND
-1-1007-4912:ORF_2_HD
-1-1117-13011:ORF_2_KAERNTEN
-1-1115-13131:ORF_2_KAERNTEN
-1-1117-13004:ORF_2_NIEDEROESTERREICH
-1-1115-13124:ORF_2_NIEDEROESTERREICH
-1-1117-13006:ORF_2_OBEROESTERREICH
-1-1115-13126:ORF_2_OBEROESTERREICH
-1-1117-13007:ORF_2_SALZBURG
-1-1115-13127:ORF_2_SALZBURG
-1-1117-13010:ORF_2_STEIERMARK
-1-1115-13130:ORF_2_STEIERMARK
-1-1117-13008:ORF_2_TIROL
-1-1115-13128:ORF_2_TIROL
-1-1117-13009:ORF_2_VORARLBERG
-1-1115-13129:ORF_2_VORARLBERG
-1-1117-13003:ORF_2_WIEN
-1-1115-13123:ORF_2_WIEN
-1-1111-7268:OTTO_SHOP
-1-1113-12657:PEPPERMINT_FM
-1-1051-28725:PHOENIX
-8468-2561-3:PHOENIX
-8468-258-13:PHOENIX
-133-17-13:PLANET
-61441-10003-50105:PLANET
-1-1113-12661:PLANET_RADIO
-1-1102-13210:PLAYBOY_TV
-1-1090-8506:PLAYBOY_TV
-1-1060-30603:PLAYBOY_TV
-61441-10002-50707:PLAYBOY_TV
-1-1008-29803:PLAYHOUSE_DISNEY
-1-1114-8907:PLAYHOUSE_DISNEY
-133-17-26:PLAYHOUSE_DISNEY
-1-1107-17501:PRO_SIEBEN
-8468-3074-16403:PRO_SIEBEN
-8468-769-16403:PRO_SIEBEN
-8468-771-16624:PRO_SIEBEN
-1-1082-20002:PRO_SIEBEN_AUSTRIA
-1-1017-61301:PRO_SIEBEN_HD
-1-1082-20001:PRO_SIEBEN_SCHWEIZ
-1-1082-20007:PULS
-133-7-54:Q_TV_SHOP
-1-1108-12100:QVC_GERMANY
-53-1109-5085:RADIO_10_GOLD
-53-1109-5072:RADIO_538
-1-1093-28455:RADIO_BERLIN_88_8
-1-1093-28456:RADIO_EINS
-1-1113-12659:RADIO_GLORIA
-1-1111-7289:RADIO_HOREB
-1-1115-13140:RADIO_MARIA
-1-1113-12650:RADIO_MARIA
-1-1073-28213:RADIO_MULTIKULTI
-1-1113-12655:RADIO_PALOMA
-1-1113-12663:RADIO_REGENBOGEN
-1-1057-61963:RAZE_TV
-1-1073-28206:RBB_BERLIN
-8468-258-12:RBB_BERLIN
-1-1073-28205:RBB_BRANDENBURG
-8468-258-11:RBB_BRANDENBURG
-1-1042-30051:REAL_MADRID_TV
-1-1090-8547:RFM_TV
-1-1113-12614:RHEIN_MAIN_TV
-1-1090-8529:RIRE_ET_CHANSONS
-133-17-155:RNB_HIPHOP
-133-7-160:ROCK_ANTENNE
-133-17-151:ROCK_HYMNEN
-133-9-63:ROMANCE_TV
-1-1090-8553:RSR_COULEUR_3
-1-1112-3982:RTBF_SAT
-1-1089-12020:RTL_2
-1-1090-8538:RTL_2
-8468-2818-16406:RTL_2
-8468-773-16406:RTL_2
-1-1091-28810:RTL_2_AUSTRIA
-53-1097-2004:RTL_4
-53-1097-2005:RTL_5
-53-1097-2006:RTL_7
-53-1097-2035:RTL_8
-1-1094-17035:RTL_9
-1-1089-12085:RTL_AUSTRIA
-1-1091-28800:RTL_AUSTRIA
-133-1-27:RTL_CRIME
-53-1105-4030:RTL_FM
-1-1057-61200:RTL_HD
-1-1089-12006:RTL_FS
-1-1089-12005:RTL_TELEVISION
-1-1089-12004:RTL_TELEVISION
-133-1-29:RTL_PASSION
-53-1097-2051:RTL_RADIO
-1-1102-13207:RTL_LIVING
-1-1089-12030:RTL_LIVING
-1-1089-12080:RTL_SHOP
-1-1108-3994:RTL_TELE_LETZEBURG
-1-1089-12003:RTL_TELEVISION
-1-1090-8528:RTL_TELEVISION
-8468-2818-16405:RTL_TELEVISION
-8468-773-16405:RTL_TELEVISION
-1-1026-10002:RTM_MAROC
-1-1024-9017:RTP_INT
-1-1022-6904:RUSSIA_TODAY
-1-1026-10077:RUSSIA_TODAY
-61441-10002-50702:SAILING_CHANNEL
-1-1107-17500:SAT.1
-8468-3074-16408:SAT.1
-8468-769-16408:SAT.1
-1-1107-17507:SAT.1
-1-1082-20008:SAT.1
-1-1107-17508:SAT.1
-1-1082-20009:SAT.1
-1-1082-20010:SAT.1
-1-1107-17505:SAT.1_COMEDY
-1-1082-20005:SAT.1_AUSTRIA
-1-1017-61300:SAT.1_HD
-1-1082-20006:SAT.1_SCHWEIZ
-53-1109-5005:SBS6
-61441-10002-50106:SCIFI
-1-1115-13111:SERVUS_TV
-1-1007-4913:SERVUS_TV_HD
-1-1007-4914:SERVUS_TV_HD
-8948-5-1:SF_1
-8948-5-2:SF_2
-8948-5-3:SF_INFO
-61441-10005-50305:SILVERLINE
-133-5-776:SIXX
-133-2-9:SKY_ACTION
-133-12-106:SKY_ACTION_HD
-133-10-123:SKY_ACTION_HD
-133-4-223:SKY_BUNDESLIGA
-133-2-10:SKY_CINEMA
-133-6-131:SKY_CINEMA_HD
-133-2-11:SKY_CINEMA+1
-133-2-43:SKY_CINEMA+24
-133-3-41:SKY_CINEMAHITS
-133-12-107:SKY_CINEMAHITS_HD
-133-10-124:SKY_CINEMAHITS_HD
-133-2-8:SKY_COMEDY
-133-2-20:SKY_EMOTION
-133-1-23:SKY_KRIMI
-1-1057-61969:SKY_NEWS_INTL
-1-1111-7290:SKY_NEWS_INTL
-133-3-516:SKY_NOSTALIGIE
-53-1109-5070:SKY_RADIO_NL
-133-4-18:SKY_SELECT
-133-4-221:SKY_SPORT_1
-133-4-222:SKY_SPORT_2
-133-7-53:SKY_SPORT_AUSTRIA
-133-6-129:SKY_SPORT_HD1
-133-13-114:SKY_SPORT_HD2
-133-10-122:SKY_SPORT_HD2
-133-3-17:SKY_SPORT_INFO
-133-33-32:SONNENKLAR_TV
-133-4-52:SPIEGEL_GESCHICHTE
-61441-10002-53401:SPIEGEL_TV_XXP
-133-33-900:SPORT1
-1-1057-61204:SPORT1_HD
-133-9-69:SPORTDIGITAL
-1-1073-28212:SPUTNIK
-1-1101-28129:SR_1
-1-1093-28486:SR_FERNSEHEN
-1-1093-28461:SR1_EUROPAWELLE
-1-1093-28462:SR2_KULTURRADIO
-1-1093-28463:SR3_SAARLANDWELLE
-1-1073-28231:SUEDWEST_FS_RP
-133-7-169:SUNSHINE_LIVE
-1-1089-12040:SUPER_RTL
-8468-2818-16411:SUPER_RTL
-8468-773-16411:SUPER_RTL
-1-1091-28815:SUPER_RTL_AUSTRIA
-1-1089-12041:SUPER_RTL
-1-1093-28465:SWR_1_BW
-1-1093-28466:SWR_1_RP
-1-1093-28467:SWR_2
-1-1093-28468:SWR_3
-1-1093-28469:SWR_4_BW
-1-1093-28470:SWR_4_RP
-1-1093-28472:SWR_CONT_RA
-1-1101-28113:SWR_FERNSEHEN_BW
-1-1073-28231:SWR_FERNSEHEN_RP
-133-17-36:SYFY
-1-1057-61920:TANGO_TV
-1-1092-10142:TEDDY
-133-33-51:TELE_5
-61441-10000-53002:TELE_5
-8468-5889-16413:TELE_5
-53-1109-5015:TMF
-133-1-50:TNT_SERIE
-133-9-61:TNT_FILM_TCM
-1-1100-8710:TRACE_TV
-61441-10003-50103:TRACE_TV
-1-1057-61911:TRW_AM
-8948-5-513:TSI_1
-8948-5-257:TSR_1
-61441-10000-53007:TV_5
-1-1024-9012:TV_5_EUROPE
-1-1112-12240:TV_5_EUROPE
-1-1091-31230:TV_6
-1-1112-12301:TV_6
-1-1024-9018:TV_7
-133-7-772:TV_BERLIN
-1-1032-30222:TV_GALICIA
-61441-10003-53302:TV_GUSTO
-1-1032-30201:TVC_INT
-1-1026-10001:TVE_INT
-1-1115-13101:TW1
-53-1109-5095:VERONICA_RADIO
-1-1066-28656:VH1
-1-1066-28666:VH1
-1-1066-28657:VH1_CLASSIC
-1-1066-28667:VH1_CLASSIC
-61441-10005-50302:VH1_CLASSIC
-1-1090-8544:VIBRATION
-1-1031-20365:VIVA
-1-1078-28676:VIVA
-1-1116-12732:VIVA
-1-1078-28676:VIVA_GERMANY
-1-1108-12120:VIVA_PLUS
-8468-774-16417:VIVA_PLUS
-1-1090-8550:VOLTAGE
-1-1089-12060:VOX
-8468-2818-16418:VOX
-8468-773-16418:VOX
-1-1091-28805:VOX_AUSTRIA
-1-1089-12061:VOX_CH
-1-1057-61201:VOX_HD
-1-1111-28534:WDR
-1-1201-28306:WDR
-1-1111-28536:WDR
-1-1201-28307:WDR
-1-1111-28537:WDR
-1-1201-28308:WDR
-1-1201-28309:WDR
-1-1101-28111:WDR
-1-1201-28310:WDR
-1-1201-28311:WDR
-1-1201-28395:WDR
-1-1111-28535:WDR
-8468-5633-262:WDR
-1-1093-28476:WDR_2
-1-1073-28215:WDR_3
-1-1093-28477:WDR_3
-1-1093-28478:WDR_4
-1-1073-28216:WDR_5
-1-1093-28479:WDR_5
-1-1093-28483:WDR_EVENT
-1-1093-28480:WDR_FUNKHAUS_EUROPA
-61441-10005-50303:WEIN_TV
-61441-10003-50109:WETTER_FERNSEHEN
-1-1112-12320:WISHLINE
-1-1113-12656:WRN_DEUTSCH
-53-1105-4009:X_ZONE
-1-1113-12602:XXP
-53-1105-4020:YAM_FM
-133-7-765:YAVIDO_CLIPS
-53-1109-5050:YORIN_FM
-1-1093-28423:YOU_FM
-1-1079-28006:ZDF
-8468-514-514:ZDF
-8468-514-517:ZDF_DOKU_KIKA
-1-1011-11110:ZDF_HD
-8468-514-515:ZDF_INFO_3SAT
-1-1079-28011:ZDF_INFOKANAL
-1-1079-28014:ZDF_NEO
-1-1079-28016:ZDF_THEATERKANAL
-1-1094-17024:ZIK
diff --git a/graphlcd/fonts.conf b/graphlcd/fonts.conf
deleted file mode 120000
index 0df1c43..0000000
--- a/graphlcd/fonts.conf
+++ /dev/null
@@ -1 +0,0 @@
-fonts.conf.large \ No newline at end of file
diff --git a/graphlcd/fonts.conf.large b/graphlcd/fonts.conf.large
deleted file mode 100644
index e976638..0000000
--- a/graphlcd/fonts.conf.large
+++ /dev/null
@@ -1,4 +0,0 @@
-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
deleted file mode 100644
index 3ffe9c8..0000000
--- a/graphlcd/fonts.conf.medium
+++ /dev/null
@@ -1,4 +0,0 @@
-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
deleted file mode 100644
index 3ffe9c8..0000000
--- a/graphlcd/fonts.conf.small
+++ /dev/null
@@ -1,4 +0,0 @@
-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
deleted file mode 100644
index e289421..0000000
--- a/graphlcd/fonts.conf.tiny
+++ /dev/null
@@ -1,4 +0,0 @@
-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
deleted file mode 100644
index 8441388..0000000
--- a/graphlcd/fonts.conf.ttf
+++ /dev/null
@@ -1,4 +0,0 @@
-Large Font = ft2:Vera.ttf:18
-Normal Font = ft2:VeraBd.ttf:13
-Small Font = ft2:VeraBd.ttf:9
-Symbol Font = fnt:sym11.fnt
diff --git a/graphlcd/fonts/DejaVuSans-Bold.ttf b/graphlcd/fonts/DejaVuSans-Bold.ttf
new file mode 100644
index 0000000..55fc14e
--- /dev/null
+++ b/graphlcd/fonts/DejaVuSans-Bold.ttf
Binary files differ
diff --git a/graphlcd/fonts/DejaVuSansCondensed.ttf b/graphlcd/fonts/DejaVuSansCondensed.ttf
new file mode 100644
index 0000000..83d6e6e
--- /dev/null
+++ b/graphlcd/fonts/DejaVuSansCondensed.ttf
Binary files differ
diff --git a/graphlcd/fonts/f12b.fnt b/graphlcd/fonts/f12b.fnt
index ca2776d..c5379ff 100644
--- a/graphlcd/fonts/f12b.fnt
+++ b/graphlcd/fonts/f12b.fnt
Binary files differ
diff --git a/graphlcd/fonts/f12bn.fnt b/graphlcd/fonts/f12bn.fnt
index bf7f41e..55899a9 100644
--- a/graphlcd/fonts/f12bn.fnt
+++ b/graphlcd/fonts/f12bn.fnt
Binary files differ
diff --git a/graphlcd/fonts/f17b.fnt b/graphlcd/fonts/f17b.fnt
index a025765..a6c0e78 100644
--- a/graphlcd/fonts/f17b.fnt
+++ b/graphlcd/fonts/f17b.fnt
Binary files differ
diff --git a/graphlcd/fonts/f5n.fnt b/graphlcd/fonts/f5n.fnt
index 9e8814b..cc151e5 100644
--- a/graphlcd/fonts/f5n.fnt
+++ b/graphlcd/fonts/f5n.fnt
Binary files differ
diff --git a/graphlcd/fonts/f8b.fnt b/graphlcd/fonts/f8b.fnt
index ea6cc08..a9c882b 100644
--- a/graphlcd/fonts/f8b.fnt
+++ b/graphlcd/fonts/f8b.fnt
Binary files differ
diff --git a/graphlcd/fonts/f8n.fnt b/graphlcd/fonts/f8n.fnt
index fdd0362..8663403 100644
--- a/graphlcd/fonts/f8n.fnt
+++ b/graphlcd/fonts/f8n.fnt
Binary files differ
diff --git a/graphlcd/fonts/verdana-012.fnt b/graphlcd/fonts/verdana-012.fnt
new file mode 100644
index 0000000..538d9f2
--- /dev/null
+++ b/graphlcd/fonts/verdana-012.fnt
Binary files differ
diff --git a/graphlcd/fonts/verdana-014.fnt b/graphlcd/fonts/verdana-014.fnt
new file mode 100644
index 0000000..2603797
--- /dev/null
+++ b/graphlcd/fonts/verdana-014.fnt
Binary files differ
diff --git a/graphlcd/fonts/verdana-015.fnt b/graphlcd/fonts/verdana-015.fnt
new file mode 100644
index 0000000..bf501f5
--- /dev/null
+++ b/graphlcd/fonts/verdana-015.fnt
Binary files differ
diff --git a/graphlcd/fonts/verdana-022.fnt b/graphlcd/fonts/verdana-022.fnt
new file mode 100644
index 0000000..fd62316
--- /dev/null
+++ b/graphlcd/fonts/verdana-022.fnt
Binary files differ
diff --git a/graphlcd/logos/1-2-3 TV_l.glcd b/graphlcd/logos/channels/1-2-3 TV_l.glcd
index ddb538f..ddb538f 100644
--- a/graphlcd/logos/1-2-3 TV_l.glcd
+++ b/graphlcd/logos/channels/1-2-3 TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/1-2-3.tv_l.glcd b/graphlcd/logos/channels/1-2-3.tv_l.glcd
index ddb538f..ddb538f 100644
--- a/graphlcd/logos/1-2-3.tv_l.glcd
+++ b/graphlcd/logos/channels/1-2-3.tv_l.glcd
Binary files differ
diff --git a/graphlcd/logos/1-2-3.tv_m.glcd b/graphlcd/logos/channels/1-2-3.tv_m.glcd
index 8029f30..8029f30 100644
--- a/graphlcd/logos/1-2-3.tv_m.glcd
+++ b/graphlcd/logos/channels/1-2-3.tv_m.glcd
Binary files differ
diff --git a/graphlcd/logos/13TH_STREET_l.glcd b/graphlcd/logos/channels/13TH_STREET_l.glcd
index b98c792..b98c792 100644
--- a/graphlcd/logos/13TH_STREET_l.glcd
+++ b/graphlcd/logos/channels/13TH_STREET_l.glcd
Binary files differ
diff --git a/graphlcd/logos/13TH_STREET_m.glcd b/graphlcd/logos/channels/13TH_STREET_m.glcd
index 99967b7..99967b7 100644
--- a/graphlcd/logos/13TH_STREET_m.glcd
+++ b/graphlcd/logos/channels/13TH_STREET_m.glcd
Binary files differ
diff --git a/graphlcd/logos/13TH_STREETv2_l.glcd b/graphlcd/logos/channels/13TH_STREETv2_l.glcd
index 6c1186e..6c1186e 100644
--- a/graphlcd/logos/13TH_STREETv2_l.glcd
+++ b/graphlcd/logos/channels/13TH_STREETv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/1LIVE_DIGGI_l.glcd b/graphlcd/logos/channels/1LIVE_DIGGI_l.glcd
index dd6dacd..dd6dacd 100644
--- a/graphlcd/logos/1LIVE_DIGGI_l.glcd
+++ b/graphlcd/logos/channels/1LIVE_DIGGI_l.glcd
Binary files differ
diff --git a/graphlcd/logos/1LIVE_DIGGI_m.glcd b/graphlcd/logos/channels/1LIVE_DIGGI_m.glcd
index 82d7a0d..82d7a0d 100644
--- a/graphlcd/logos/1LIVE_DIGGI_m.glcd
+++ b/graphlcd/logos/channels/1LIVE_DIGGI_m.glcd
Binary files differ
diff --git a/graphlcd/logos/1LIVE_DIGGIv2_l.glcd b/graphlcd/logos/channels/1LIVE_DIGGIv2_l.glcd
index 12d28f7..12d28f7 100644
--- a/graphlcd/logos/1LIVE_DIGGIv2_l.glcd
+++ b/graphlcd/logos/channels/1LIVE_DIGGIv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/1LIVE_l.glcd b/graphlcd/logos/channels/1LIVE_l.glcd
index 984519a..984519a 100644
--- a/graphlcd/logos/1LIVE_l.glcd
+++ b/graphlcd/logos/channels/1LIVE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/1LIVE_m.glcd b/graphlcd/logos/channels/1LIVE_m.glcd
index bbf40f2..bbf40f2 100644
--- a/graphlcd/logos/1LIVE_m.glcd
+++ b/graphlcd/logos/channels/1LIVE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/2M_MAROC_m.glcd b/graphlcd/logos/channels/2M_MAROC_m.glcd
index 07b58c7..07b58c7 100644
--- a/graphlcd/logos/2M_MAROC_m.glcd
+++ b/graphlcd/logos/channels/2M_MAROC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/3SAT_l.glcd b/graphlcd/logos/channels/3SAT_l.glcd
index 4a94a40..4a94a40 100644
--- a/graphlcd/logos/3SAT_l.glcd
+++ b/graphlcd/logos/channels/3SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/3SAT_m.glcd b/graphlcd/logos/channels/3SAT_m.glcd
index 0e36114..0e36114 100644
--- a/graphlcd/logos/3SAT_m.glcd
+++ b/graphlcd/logos/channels/3SAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/40_TV_m.glcd b/graphlcd/logos/channels/40_TV_m.glcd
index d5b2b32..d5b2b32 100644
--- a/graphlcd/logos/40_TV_m.glcd
+++ b/graphlcd/logos/channels/40_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/9LIVE_l.glcd b/graphlcd/logos/channels/9LIVE_l.glcd
index edb49e3..edb49e3 100644
--- a/graphlcd/logos/9LIVE_l.glcd
+++ b/graphlcd/logos/channels/9LIVE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/9LIVE_m.glcd b/graphlcd/logos/channels/9LIVE_m.glcd
index 8aad814..8aad814 100644
--- a/graphlcd/logos/9LIVE_m.glcd
+++ b/graphlcd/logos/channels/9LIVE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/AB1_l.glcd b/graphlcd/logos/channels/AB1_l.glcd
index 5512b78..5512b78 100644
--- a/graphlcd/logos/AB1_l.glcd
+++ b/graphlcd/logos/channels/AB1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/AB1_m.glcd b/graphlcd/logos/channels/AB1_m.glcd
index 8dbea74..8dbea74 100644
--- a/graphlcd/logos/AB1_m.glcd
+++ b/graphlcd/logos/channels/AB1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/AB_MOTEURS_l.glcd b/graphlcd/logos/channels/AB_MOTEURS_l.glcd
index 30cd306..30cd306 100644
--- a/graphlcd/logos/AB_MOTEURS_l.glcd
+++ b/graphlcd/logos/channels/AB_MOTEURS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/AB_MOTEURS_m.glcd b/graphlcd/logos/channels/AB_MOTEURS_m.glcd
index 295a143..295a143 100644
--- a/graphlcd/logos/AB_MOTEURS_m.glcd
+++ b/graphlcd/logos/channels/AB_MOTEURS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ACTION_m.glcd b/graphlcd/logos/channels/ACTION_m.glcd
index 202f153..202f153 100644
--- a/graphlcd/logos/ACTION_m.glcd
+++ b/graphlcd/logos/channels/ACTION_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ADO FM_l.glcd b/graphlcd/logos/channels/ADO FM_l.glcd
index de4b32c..de4b32c 100644
--- a/graphlcd/logos/ADO FM_l.glcd
+++ b/graphlcd/logos/channels/ADO FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ADO FM_m.glcd b/graphlcd/logos/channels/ADO FM_m.glcd
index 8c0b06c..8c0b06c 100644
--- a/graphlcd/logos/ADO FM_m.glcd
+++ b/graphlcd/logos/channels/ADO FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ADO_FM_l.glcd b/graphlcd/logos/channels/ADO_FM_l.glcd
index de4b32c..de4b32c 100644
--- a/graphlcd/logos/ADO_FM_l.glcd
+++ b/graphlcd/logos/channels/ADO_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ADO_FM_m.glcd b/graphlcd/logos/channels/ADO_FM_m.glcd
index 8c0b06c..8c0b06c 100644
--- a/graphlcd/logos/ADO_FM_m.glcd
+++ b/graphlcd/logos/channels/ADO_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ALGERIE_l.glcd b/graphlcd/logos/channels/ALGERIE_l.glcd
index 941578e..941578e 100644
--- a/graphlcd/logos/ALGERIE_l.glcd
+++ b/graphlcd/logos/channels/ALGERIE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ALGERIE_m.glcd b/graphlcd/logos/channels/ALGERIE_m.glcd
index 387c98f..387c98f 100644
--- a/graphlcd/logos/ALGERIE_m.glcd
+++ b/graphlcd/logos/channels/ALGERIE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ALOUETTE_l.glcd b/graphlcd/logos/channels/ALOUETTE_l.glcd
index 03f5cc4..03f5cc4 100644
--- a/graphlcd/logos/ALOUETTE_l.glcd
+++ b/graphlcd/logos/channels/ALOUETTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ALOUETTE_m.glcd b/graphlcd/logos/channels/ALOUETTE_m.glcd
index e1b8c38..e1b8c38 100644
--- a/graphlcd/logos/ALOUETTE_m.glcd
+++ b/graphlcd/logos/channels/ALOUETTE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/AL_JAZEERA_l.glcd b/graphlcd/logos/channels/AL_JAZEERA_l.glcd
index 76ba7c8..76ba7c8 100644
--- a/graphlcd/logos/AL_JAZEERA_l.glcd
+++ b/graphlcd/logos/channels/AL_JAZEERA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/AL_JAZEERA_m.glcd b/graphlcd/logos/channels/AL_JAZEERA_m.glcd
index 54132b6..54132b6 100644
--- a/graphlcd/logos/AL_JAZEERA_m.glcd
+++ b/graphlcd/logos/channels/AL_JAZEERA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIMAL_PLANET_l.glcd b/graphlcd/logos/channels/ANIMAL_PLANET_l.glcd
index bf7bf4b..bf7bf4b 100644
--- a/graphlcd/logos/ANIMAL_PLANET_l.glcd
+++ b/graphlcd/logos/channels/ANIMAL_PLANET_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIMAL_PLANET_m.glcd b/graphlcd/logos/channels/ANIMAL_PLANET_m.glcd
index 7c5cf8f..7c5cf8f 100644
--- a/graphlcd/logos/ANIMAL_PLANET_m.glcd
+++ b/graphlcd/logos/channels/ANIMAL_PLANET_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIMAUX_l.glcd b/graphlcd/logos/channels/ANIMAUX_l.glcd
index da5b6a5..da5b6a5 100644
--- a/graphlcd/logos/ANIMAUX_l.glcd
+++ b/graphlcd/logos/channels/ANIMAUX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIMAUX_m.glcd b/graphlcd/logos/channels/ANIMAUX_m.glcd
index 4ca8553..4ca8553 100644
--- a/graphlcd/logos/ANIMAUX_m.glcd
+++ b/graphlcd/logos/channels/ANIMAUX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIXE_HD_l.glcd b/graphlcd/logos/channels/ANIXE_HD_l.glcd
index 3621a70..3621a70 100644
--- a/graphlcd/logos/ANIXE_HD_l.glcd
+++ b/graphlcd/logos/channels/ANIXE_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIXE_HD_m.glcd b/graphlcd/logos/channels/ANIXE_HD_m.glcd
index 771147e..771147e 100644
--- a/graphlcd/logos/ANIXE_HD_m.glcd
+++ b/graphlcd/logos/channels/ANIXE_HD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIXE_HDv2_l.glcd b/graphlcd/logos/channels/ANIXE_HDv2_l.glcd
index 3a2fc8d..3a2fc8d 100644
--- a/graphlcd/logos/ANIXE_HDv2_l.glcd
+++ b/graphlcd/logos/channels/ANIXE_HDv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIXE_SD_l.glcd b/graphlcd/logos/channels/ANIXE_SD_l.glcd
index 30505c5..30505c5 100644
--- a/graphlcd/logos/ANIXE_SD_l.glcd
+++ b/graphlcd/logos/channels/ANIXE_SD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANIXE_SD_m.glcd b/graphlcd/logos/channels/ANIXE_SD_m.glcd
index ef10a1d..ef10a1d 100644
--- a/graphlcd/logos/ANIXE_SD_m.glcd
+++ b/graphlcd/logos/channels/ANIXE_SD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANTENNE_BAYERN_l.glcd b/graphlcd/logos/channels/ANTENNE_BAYERN_l.glcd
index b38bfaf..b38bfaf 100644
--- a/graphlcd/logos/ANTENNE_BAYERN_l.glcd
+++ b/graphlcd/logos/channels/ANTENNE_BAYERN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANTENNE_BAYERN_m.glcd b/graphlcd/logos/channels/ANTENNE_BAYERN_m.glcd
index 2bca2b4..2bca2b4 100644
--- a/graphlcd/logos/ANTENNE_BAYERN_m.glcd
+++ b/graphlcd/logos/channels/ANTENNE_BAYERN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANTENNE_BAYERN_v2_m.glcd b/graphlcd/logos/channels/ANTENNE_BAYERN_v2_m.glcd
index 9ca0433..9ca0433 100644
--- a/graphlcd/logos/ANTENNE_BAYERN_v2_m.glcd
+++ b/graphlcd/logos/channels/ANTENNE_BAYERN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ANTENNE_BRANDENBURG_l.glcd b/graphlcd/logos/channels/ANTENNE_BRANDENBURG_l.glcd
index 0069347..0069347 100644
--- a/graphlcd/logos/ANTENNE_BRANDENBURG_l.glcd
+++ b/graphlcd/logos/channels/ANTENNE_BRANDENBURG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ANTENNE_BRANDENBURG_m.glcd b/graphlcd/logos/channels/ANTENNE_BRANDENBURG_m.glcd
index 6371211..6371211 100644
--- a/graphlcd/logos/ANTENNE_BRANDENBURG_m.glcd
+++ b/graphlcd/logos/channels/ANTENNE_BRANDENBURG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ARTE_HD_l.glcd b/graphlcd/logos/channels/ARTE_HD_l.glcd
index 043e161..043e161 100644
--- a/graphlcd/logos/ARTE_HD_l.glcd
+++ b/graphlcd/logos/channels/ARTE_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ARTE_HD_m.glcd b/graphlcd/logos/channels/ARTE_HD_m.glcd
index f390dde..f390dde 100644
--- a/graphlcd/logos/ARTE_HD_m.glcd
+++ b/graphlcd/logos/channels/ARTE_HD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ARTE_HDv2_l.glcd b/graphlcd/logos/channels/ARTE_HDv2_l.glcd
index c97ed73..c97ed73 100644
--- a/graphlcd/logos/ARTE_HDv2_l.glcd
+++ b/graphlcd/logos/channels/ARTE_HDv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ARTE_l.glcd b/graphlcd/logos/channels/ARTE_l.glcd
index c2f575e..c2f575e 100644
--- a/graphlcd/logos/ARTE_l.glcd
+++ b/graphlcd/logos/channels/ARTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ARTE_m.glcd b/graphlcd/logos/channels/ARTE_m.glcd
index ca150b1..ca150b1 100644
--- a/graphlcd/logos/ARTE_m.glcd
+++ b/graphlcd/logos/channels/ARTE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ASTRA_HD_l.glcd b/graphlcd/logos/channels/ASTRA_HD_l.glcd
index c799579..c799579 100644
--- a/graphlcd/logos/ASTRA_HD_l.glcd
+++ b/graphlcd/logos/channels/ASTRA_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ASTRA_HD_m.glcd b/graphlcd/logos/channels/ASTRA_HD_m.glcd
index 392907d..392907d 100644
--- a/graphlcd/logos/ASTRA_HD_m.glcd
+++ b/graphlcd/logos/channels/ASTRA_HD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ATVPLUS_l.glcd b/graphlcd/logos/channels/ATVPLUS_l.glcd
index 6751fc1..6751fc1 100644
--- a/graphlcd/logos/ATVPLUS_l.glcd
+++ b/graphlcd/logos/channels/ATVPLUS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ATVPLUS_m.glcd b/graphlcd/logos/channels/ATVPLUS_m.glcd
index a5bc829..a5bc829 100644
--- a/graphlcd/logos/ATVPLUS_m.glcd
+++ b/graphlcd/logos/channels/ATVPLUS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/AXN_l.glcd b/graphlcd/logos/channels/AXN_l.glcd
index 8eb1880..8eb1880 100644
--- a/graphlcd/logos/AXN_l.glcd
+++ b/graphlcd/logos/channels/AXN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/AXN_m.glcd b/graphlcd/logos/channels/AXN_m.glcd
index ddfd81a..ddfd81a 100644
--- a/graphlcd/logos/AXN_m.glcd
+++ b/graphlcd/logos/channels/AXN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/B5_AKTUELL_l.glcd b/graphlcd/logos/channels/B5_AKTUELL_l.glcd
index 95830b7..95830b7 100644
--- a/graphlcd/logos/B5_AKTUELL_l.glcd
+++ b/graphlcd/logos/channels/B5_AKTUELL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/B5_AKTUELL_m.glcd b/graphlcd/logos/channels/B5_AKTUELL_m.glcd
index 6c8a481..6c8a481 100644
--- a/graphlcd/logos/B5_AKTUELL_m.glcd
+++ b/graphlcd/logos/channels/B5_AKTUELL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/B5_AKTUELLv2_l.glcd b/graphlcd/logos/channels/B5_AKTUELLv2_l.glcd
index 049cdb2..049cdb2 100644
--- a/graphlcd/logos/B5_AKTUELLv2_l.glcd
+++ b/graphlcd/logos/channels/B5_AKTUELLv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/B5_AKTUELLv2_m.glcd b/graphlcd/logos/channels/B5_AKTUELLv2_m.glcd
index 554903a..554903a 100644
--- a/graphlcd/logos/B5_AKTUELLv2_m.glcd
+++ b/graphlcd/logos/channels/B5_AKTUELLv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/B5_AKTUELLv3_m.glcd b/graphlcd/logos/channels/B5_AKTUELLv3_m.glcd
index d40ab98..d40ab98 100644
--- a/graphlcd/logos/B5_AKTUELLv3_m.glcd
+++ b/graphlcd/logos/channels/B5_AKTUELLv3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/B5_PLUS_l.glcd b/graphlcd/logos/channels/B5_PLUS_l.glcd
index 6c736c4..6c736c4 100644
--- a/graphlcd/logos/B5_PLUS_l.glcd
+++ b/graphlcd/logos/channels/B5_PLUS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/B5_PLUS_m.glcd b/graphlcd/logos/channels/B5_PLUS_m.glcd
index b6f8aaf..b6f8aaf 100644
--- a/graphlcd/logos/B5_PLUS_m.glcd
+++ b/graphlcd/logos/channels/B5_PLUS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAHN_TV_l.glcd b/graphlcd/logos/channels/BAHN_TV_l.glcd
index bf92d26..bf92d26 100644
--- a/graphlcd/logos/BAHN_TV_l.glcd
+++ b/graphlcd/logos/channels/BAHN_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAHN_TV_m.glcd b/graphlcd/logos/channels/BAHN_TV_m.glcd
index cef8da8..cef8da8 100644
--- a/graphlcd/logos/BAHN_TV_m.glcd
+++ b/graphlcd/logos/channels/BAHN_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAHN_TV_v2_m.glcd b/graphlcd/logos/channels/BAHN_TV_v2_m.glcd
index fea2765..fea2765 100644
--- a/graphlcd/logos/BAHN_TV_v2_m.glcd
+++ b/graphlcd/logos/channels/BAHN_TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERISCHES_FERNSEHEN_l.glcd b/graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_l.glcd
index c0b93e6..c0b93e6 100644
--- a/graphlcd/logos/BAYERISCHES_FERNSEHEN_l.glcd
+++ b/graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERISCHES_FERNSEHEN_m.glcd b/graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_m.glcd
index a224e95..a224e95 100644
--- a/graphlcd/logos/BAYERISCHES_FERNSEHEN_m.glcd
+++ b/graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERISCHES_FERNSEHEN_v2_l.glcd b/graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_v2_l.glcd
index ad7d919..ad7d919 100644
--- a/graphlcd/logos/BAYERISCHES_FERNSEHEN_v2_l.glcd
+++ b/graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERISCHES_FERNSEHEN_v2_m.glcd b/graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_v2_m.glcd
index 9b6b4f2..9b6b4f2 100644
--- a/graphlcd/logos/BAYERISCHES_FERNSEHEN_v2_m.glcd
+++ b/graphlcd/logos/channels/BAYERISCHES_FERNSEHEN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_1_l.glcd b/graphlcd/logos/channels/BAYERN_1_l.glcd
index 2426c09..2426c09 100644
--- a/graphlcd/logos/BAYERN_1_l.glcd
+++ b/graphlcd/logos/channels/BAYERN_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_1_m.glcd b/graphlcd/logos/channels/BAYERN_1_m.glcd
index e3bf771..e3bf771 100644
--- a/graphlcd/logos/BAYERN_1_m.glcd
+++ b/graphlcd/logos/channels/BAYERN_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_1v2_l.glcd b/graphlcd/logos/channels/BAYERN_1v2_l.glcd
index e308876..e308876 100644
--- a/graphlcd/logos/BAYERN_1v2_l.glcd
+++ b/graphlcd/logos/channels/BAYERN_1v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_1v2_m.glcd b/graphlcd/logos/channels/BAYERN_1v2_m.glcd
index e3bf771..e3bf771 100644
--- a/graphlcd/logos/BAYERN_1v2_m.glcd
+++ b/graphlcd/logos/channels/BAYERN_1v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_2_l.glcd b/graphlcd/logos/channels/BAYERN_2_l.glcd
index 1694783..1694783 100644
--- a/graphlcd/logos/BAYERN_2_l.glcd
+++ b/graphlcd/logos/channels/BAYERN_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_2v2_l.glcd b/graphlcd/logos/channels/BAYERN_2v2_l.glcd
index 7b6c504..7b6c504 100644
--- a/graphlcd/logos/BAYERN_2v2_l.glcd
+++ b/graphlcd/logos/channels/BAYERN_2v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_3_l.glcd b/graphlcd/logos/channels/BAYERN_3_l.glcd
index 12cffed..12cffed 100644
--- a/graphlcd/logos/BAYERN_3_l.glcd
+++ b/graphlcd/logos/channels/BAYERN_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_3v2_l.glcd b/graphlcd/logos/channels/BAYERN_3v2_l.glcd
index 7b6c504..7b6c504 100644
--- a/graphlcd/logos/BAYERN_3v2_l.glcd
+++ b/graphlcd/logos/channels/BAYERN_3v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_4_KLASSIK_l.glcd b/graphlcd/logos/channels/BAYERN_4_KLASSIK_l.glcd
index 72670c2..72670c2 100644
--- a/graphlcd/logos/BAYERN_4_KLASSIK_l.glcd
+++ b/graphlcd/logos/channels/BAYERN_4_KLASSIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_4_KLASSIK_m.glcd b/graphlcd/logos/channels/BAYERN_4_KLASSIK_m.glcd
index d6d720d..d6d720d 100644
--- a/graphlcd/logos/BAYERN_4_KLASSIK_m.glcd
+++ b/graphlcd/logos/channels/BAYERN_4_KLASSIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_4_KLASSIKv2_l.glcd b/graphlcd/logos/channels/BAYERN_4_KLASSIKv2_l.glcd
index 72670c2..72670c2 100644
--- a/graphlcd/logos/BAYERN_4_KLASSIKv2_l.glcd
+++ b/graphlcd/logos/channels/BAYERN_4_KLASSIKv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_4_KLASSIKv2_m.glcd b/graphlcd/logos/channels/BAYERN_4_KLASSIKv2_m.glcd
index d6d720d..d6d720d 100644
--- a/graphlcd/logos/BAYERN_4_KLASSIKv2_m.glcd
+++ b/graphlcd/logos/channels/BAYERN_4_KLASSIKv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_PLUS_l.glcd b/graphlcd/logos/channels/BAYERN_PLUS_l.glcd
index de0ea2f..de0ea2f 100644
--- a/graphlcd/logos/BAYERN_PLUS_l.glcd
+++ b/graphlcd/logos/channels/BAYERN_PLUS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BAYERN_PLUS_m.glcd b/graphlcd/logos/channels/BAYERN_PLUS_m.glcd
index 52f1cfb..52f1cfb 100644
--- a/graphlcd/logos/BAYERN_PLUS_m.glcd
+++ b/graphlcd/logos/channels/BAYERN_PLUS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC_PRIME_l.glcd b/graphlcd/logos/channels/BBC_PRIME_l.glcd
index c53afba..c53afba 100644
--- a/graphlcd/logos/BBC_PRIME_l.glcd
+++ b/graphlcd/logos/channels/BBC_PRIME_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC_PRIME_m.glcd b/graphlcd/logos/channels/BBC_PRIME_m.glcd
index 0ea7b4d..0ea7b4d 100644
--- a/graphlcd/logos/BBC_PRIME_m.glcd
+++ b/graphlcd/logos/channels/BBC_PRIME_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC_WORLD_l.glcd b/graphlcd/logos/channels/BBC_WORLD_l.glcd
index 8c4c191..8c4c191 100644
--- a/graphlcd/logos/BBC_WORLD_l.glcd
+++ b/graphlcd/logos/channels/BBC_WORLD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC_WORLD_m.glcd b/graphlcd/logos/channels/BBC_WORLD_m.glcd
index 71b132f..71b132f 100644
--- a/graphlcd/logos/BBC_WORLD_m.glcd
+++ b/graphlcd/logos/channels/BBC_WORLD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC_WORLD_v2_l.glcd b/graphlcd/logos/channels/BBC_WORLD_v2_l.glcd
index ccf90a2..ccf90a2 100644
--- a/graphlcd/logos/BBC_WORLD_v2_l.glcd
+++ b/graphlcd/logos/channels/BBC_WORLD_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BBC_WORLD_v2_m.glcd b/graphlcd/logos/channels/BBC_WORLD_v2_m.glcd
index 7c52215..7c52215 100644
--- a/graphlcd/logos/BBC_WORLD_v2_m.glcd
+++ b/graphlcd/logos/channels/BBC_WORLD_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BEATE_UHSE.TV_l.glcd b/graphlcd/logos/channels/BEATE_UHSE.TV_l.glcd
index 0040c04..0040c04 100644
--- a/graphlcd/logos/BEATE_UHSE.TV_l.glcd
+++ b/graphlcd/logos/channels/BEATE_UHSE.TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BEATE_UHSE.TV_m.glcd b/graphlcd/logos/channels/BEATE_UHSE.TV_m.glcd
index 40a8589..40a8589 100644
--- a/graphlcd/logos/BEATE_UHSE.TV_m.glcd
+++ b/graphlcd/logos/channels/BEATE_UHSE.TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BEATE_UHSE.TV_v2_l.glcd b/graphlcd/logos/channels/BEATE_UHSE.TV_v2_l.glcd
index 7981193..7981193 100644
--- a/graphlcd/logos/BEATE_UHSE.TV_v2_l.glcd
+++ b/graphlcd/logos/channels/BEATE_UHSE.TV_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BEUR_TV_l.glcd b/graphlcd/logos/channels/BEUR_TV_l.glcd
index 314a4b0..314a4b0 100644
--- a/graphlcd/logos/BEUR_TV_l.glcd
+++ b/graphlcd/logos/channels/BEUR_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BEUR_TV_m.glcd b/graphlcd/logos/channels/BEUR_TV_m.glcd
index 3caa32d..3caa32d 100644
--- a/graphlcd/logos/BEUR_TV_m.glcd
+++ b/graphlcd/logos/channels/BEUR_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BEUR_TVv2_m.glcd b/graphlcd/logos/channels/BEUR_TVv2_m.glcd
index 07f548e..07f548e 100644
--- a/graphlcd/logos/BEUR_TVv2_m.glcd
+++ b/graphlcd/logos/channels/BEUR_TVv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BIBEL_TV_l.glcd b/graphlcd/logos/channels/BIBEL_TV_l.glcd
index 3b62042..3b62042 100644
--- a/graphlcd/logos/BIBEL_TV_l.glcd
+++ b/graphlcd/logos/channels/BIBEL_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BIBEL_TV_m.glcd b/graphlcd/logos/channels/BIBEL_TV_m.glcd
index 30967af..30967af 100644
--- a/graphlcd/logos/BIBEL_TV_m.glcd
+++ b/graphlcd/logos/channels/BIBEL_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BIBEL_TV_v2_m.glcd b/graphlcd/logos/channels/BIBEL_TV_v2_m.glcd
index c9d9045..c9d9045 100644
--- a/graphlcd/logos/BIBEL_TV_v2_m.glcd
+++ b/graphlcd/logos/channels/BIBEL_TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BLOOMBERG_TV_GERMANY_l.glcd b/graphlcd/logos/channels/BLOOMBERG_TV_GERMANY_l.glcd
index f693de2..f693de2 100644
--- a/graphlcd/logos/BLOOMBERG_TV_GERMANY_l.glcd
+++ b/graphlcd/logos/channels/BLOOMBERG_TV_GERMANY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BLOOMBERG_TV_GERMANY_m.glcd b/graphlcd/logos/channels/BLOOMBERG_TV_GERMANY_m.glcd
index 22dc275..22dc275 100644
--- a/graphlcd/logos/BLOOMBERG_TV_GERMANY_m.glcd
+++ b/graphlcd/logos/channels/BLOOMBERG_TV_GERMANY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BLOOMBERG_TV_l.glcd b/graphlcd/logos/channels/BLOOMBERG_TV_l.glcd
index f693de2..f693de2 100644
--- a/graphlcd/logos/BLOOMBERG_TV_l.glcd
+++ b/graphlcd/logos/channels/BLOOMBERG_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BLOOMBERG_TV_m.glcd b/graphlcd/logos/channels/BLOOMBERG_TV_m.glcd
index 22dc275..22dc275 100644
--- a/graphlcd/logos/BLOOMBERG_TV_m.glcd
+++ b/graphlcd/logos/channels/BLOOMBERG_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BREMEN_EINS_l.glcd b/graphlcd/logos/channels/BREMEN_EINS_l.glcd
index 59aab45..59aab45 100644
--- a/graphlcd/logos/BREMEN_EINS_l.glcd
+++ b/graphlcd/logos/channels/BREMEN_EINS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BREMEN_EINS_m.glcd b/graphlcd/logos/channels/BREMEN_EINS_m.glcd
index 35d09d7..35d09d7 100644
--- a/graphlcd/logos/BREMEN_EINS_m.glcd
+++ b/graphlcd/logos/channels/BREMEN_EINS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BREMEN_VIER_l.glcd b/graphlcd/logos/channels/BREMEN_VIER_l.glcd
index f08a13f..f08a13f 100644
--- a/graphlcd/logos/BREMEN_VIER_l.glcd
+++ b/graphlcd/logos/channels/BREMEN_VIER_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BREMEN_VIER_m.glcd b/graphlcd/logos/channels/BREMEN_VIER_m.glcd
index 8592594..8592594 100644
--- a/graphlcd/logos/BREMEN_VIER_m.glcd
+++ b/graphlcd/logos/channels/BREMEN_VIER_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BR_ALPHA_l.glcd b/graphlcd/logos/channels/BR_ALPHA_l.glcd
index 89f455a..89f455a 100644
--- a/graphlcd/logos/BR_ALPHA_l.glcd
+++ b/graphlcd/logos/channels/BR_ALPHA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BR_ALPHA_m.glcd b/graphlcd/logos/channels/BR_ALPHA_m.glcd
index 9b48f64..9b48f64 100644
--- a/graphlcd/logos/BR_ALPHA_m.glcd
+++ b/graphlcd/logos/channels/BR_ALPHA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BR_ALPHAv2_l.glcd b/graphlcd/logos/channels/BR_ALPHAv2_l.glcd
index bcb323b..bcb323b 100644
--- a/graphlcd/logos/BR_ALPHAv2_l.glcd
+++ b/graphlcd/logos/channels/BR_ALPHAv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BR_ALPHAv2_m.glcd b/graphlcd/logos/channels/BR_ALPHAv2_m.glcd
index 9c1fa3d..9c1fa3d 100644
--- a/graphlcd/logos/BR_ALPHAv2_m.glcd
+++ b/graphlcd/logos/channels/BR_ALPHAv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BR_ALPHAv3_l.glcd b/graphlcd/logos/channels/BR_ALPHAv3_l.glcd
index 8cdbbb5..8cdbbb5 100644
--- a/graphlcd/logos/BR_ALPHAv3_l.glcd
+++ b/graphlcd/logos/channels/BR_ALPHAv3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BR_ALPHAv3_m.glcd b/graphlcd/logos/channels/BR_ALPHAv3_m.glcd
index 6de0d94..6de0d94 100644
--- a/graphlcd/logos/BR_ALPHAv3_m.glcd
+++ b/graphlcd/logos/channels/BR_ALPHAv3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BR_KLASSIK_l.glcd b/graphlcd/logos/channels/BR_KLASSIK_l.glcd
index 4b57abe..4b57abe 100644
--- a/graphlcd/logos/BR_KLASSIK_l.glcd
+++ b/graphlcd/logos/channels/BR_KLASSIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BR_VERKEHR_l.glcd b/graphlcd/logos/channels/BR_VERKEHR_l.glcd
index c655535..c655535 100644
--- a/graphlcd/logos/BR_VERKEHR_l.glcd
+++ b/graphlcd/logos/channels/BR_VERKEHR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BR_VERKEHR_m.glcd b/graphlcd/logos/channels/BR_VERKEHR_m.glcd
index 697be63..697be63 100644
--- a/graphlcd/logos/BR_VERKEHR_m.glcd
+++ b/graphlcd/logos/channels/BR_VERKEHR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV4_l.glcd b/graphlcd/logos/channels/BTV4_l.glcd
index e82ca00..e82ca00 100644
--- a/graphlcd/logos/BTV4_l.glcd
+++ b/graphlcd/logos/channels/BTV4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV4_m.glcd b/graphlcd/logos/channels/BTV4_m.glcd
index 4d5e9da..4d5e9da 100644
--- a/graphlcd/logos/BTV4_m.glcd
+++ b/graphlcd/logos/channels/BTV4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV4_v2_l.glcd b/graphlcd/logos/channels/BTV4_v2_l.glcd
index c059759..c059759 100644
--- a/graphlcd/logos/BTV4_v2_l.glcd
+++ b/graphlcd/logos/channels/BTV4_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV_l.glcd b/graphlcd/logos/channels/BTV_l.glcd
index ffdf278..ffdf278 100644
--- a/graphlcd/logos/BTV_l.glcd
+++ b/graphlcd/logos/channels/BTV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BTV_m.glcd b/graphlcd/logos/channels/BTV_m.glcd
index f270770..f270770 100644
--- a/graphlcd/logos/BTV_m.glcd
+++ b/graphlcd/logos/channels/BTV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BVN_l.glcd b/graphlcd/logos/channels/BVN_l.glcd
index c8df29a..c8df29a 100644
--- a/graphlcd/logos/BVN_l.glcd
+++ b/graphlcd/logos/channels/BVN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/BVN_m.glcd b/graphlcd/logos/channels/BVN_m.glcd
index 132502b..132502b 100644
--- a/graphlcd/logos/BVN_m.glcd
+++ b/graphlcd/logos/channels/BVN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/BVN_v2_m.glcd b/graphlcd/logos/channels/BVN_v2_m.glcd
index 014673e..014673e 100644
--- a/graphlcd/logos/BVN_v2_m.glcd
+++ b/graphlcd/logos/channels/BVN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CADENA_DIAL_l.glcd b/graphlcd/logos/channels/CADENA_DIAL_l.glcd
index 7cf6255..7cf6255 100644
--- a/graphlcd/logos/CADENA_DIAL_l.glcd
+++ b/graphlcd/logos/channels/CADENA_DIAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CADENA_DIAL_m.glcd b/graphlcd/logos/channels/CADENA_DIAL_m.glcd
index b2ec34a..b2ec34a 100644
--- a/graphlcd/logos/CADENA_DIAL_m.glcd
+++ b/graphlcd/logos/channels/CADENA_DIAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL+ ...30_m.glcd b/graphlcd/logos/channels/CANAL+ ...30_m.glcd
index eeb7d70..eeb7d70 100644
--- a/graphlcd/logos/CANAL+ ...30_m.glcd
+++ b/graphlcd/logos/channels/CANAL+ ...30_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL+_m.glcd b/graphlcd/logos/channels/CANAL+_m.glcd
index 8e87caf..8e87caf 100644
--- a/graphlcd/logos/CANAL+_m.glcd
+++ b/graphlcd/logos/channels/CANAL+_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL_24_HORAS_l.glcd b/graphlcd/logos/channels/CANAL_24_HORAS_l.glcd
index d725461..d725461 100644
--- a/graphlcd/logos/CANAL_24_HORAS_l.glcd
+++ b/graphlcd/logos/channels/CANAL_24_HORAS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL_24_HORAS_m.glcd b/graphlcd/logos/channels/CANAL_24_HORAS_m.glcd
index a71b55e..a71b55e 100644
--- a/graphlcd/logos/CANAL_24_HORAS_m.glcd
+++ b/graphlcd/logos/channels/CANAL_24_HORAS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL_CANARIAS_l.glcd b/graphlcd/logos/channels/CANAL_CANARIAS_l.glcd
index 2c0f53d..2c0f53d 100644
--- a/graphlcd/logos/CANAL_CANARIAS_l.glcd
+++ b/graphlcd/logos/channels/CANAL_CANARIAS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL_CANARIAS_m.glcd b/graphlcd/logos/channels/CANAL_CANARIAS_m.glcd
index 5870208..5870208 100644
--- a/graphlcd/logos/CANAL_CANARIAS_m.glcd
+++ b/graphlcd/logos/channels/CANAL_CANARIAS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL_CANARIAS_v2_m.glcd b/graphlcd/logos/channels/CANAL_CANARIAS_v2_m.glcd
index f6b64c8..f6b64c8 100644
--- a/graphlcd/logos/CANAL_CANARIAS_v2_m.glcd
+++ b/graphlcd/logos/channels/CANAL_CANARIAS_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL_CLUB_l.glcd b/graphlcd/logos/channels/CANAL_CLUB_l.glcd
index 069af7c..069af7c 100644
--- a/graphlcd/logos/CANAL_CLUB_l.glcd
+++ b/graphlcd/logos/channels/CANAL_CLUB_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL_CLUB_m.glcd b/graphlcd/logos/channels/CANAL_CLUB_m.glcd
index ba74083..ba74083 100644
--- a/graphlcd/logos/CANAL_CLUB_m.glcd
+++ b/graphlcd/logos/channels/CANAL_CLUB_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CANAL_CLUB_v2_m.glcd b/graphlcd/logos/channels/CANAL_CLUB_v2_m.glcd
index 8bafd90..8bafd90 100644
--- a/graphlcd/logos/CANAL_CLUB_v2_m.glcd
+++ b/graphlcd/logos/channels/CANAL_CLUB_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CARTOON_NETWORK_l.glcd b/graphlcd/logos/channels/CARTOON_NETWORK_l.glcd
index 1d315e0..1d315e0 100644
--- a/graphlcd/logos/CARTOON_NETWORK_l.glcd
+++ b/graphlcd/logos/channels/CARTOON_NETWORK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CARTOON_NETWORK_m.glcd b/graphlcd/logos/channels/CARTOON_NETWORK_m.glcd
index c5b7b30..c5b7b30 100644
--- a/graphlcd/logos/CARTOON_NETWORK_m.glcd
+++ b/graphlcd/logos/channels/CARTOON_NETWORK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CFN_RFC_l.glcd b/graphlcd/logos/channels/CFN_RFC_l.glcd
index 87d510e..87d510e 100644
--- a/graphlcd/logos/CFN_RFC_l.glcd
+++ b/graphlcd/logos/channels/CFN_RFC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CFN_RFC_m.glcd b/graphlcd/logos/channels/CFN_RFC_m.glcd
index 94ed328..94ed328 100644
--- a/graphlcd/logos/CFN_RFC_m.glcd
+++ b/graphlcd/logos/channels/CFN_RFC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CHANNEL_21_l.glcd b/graphlcd/logos/channels/CHANNEL_21_l.glcd
index 91ef488..91ef488 100644
--- a/graphlcd/logos/CHANNEL_21_l.glcd
+++ b/graphlcd/logos/channels/CHANNEL_21_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CHANNEL_21_m.glcd b/graphlcd/logos/channels/CHANNEL_21_m.glcd
index f09c7da..f09c7da 100644
--- a/graphlcd/logos/CHANNEL_21_m.glcd
+++ b/graphlcd/logos/channels/CHANNEL_21_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CHERIE_FM_l.glcd b/graphlcd/logos/channels/CHERIE_FM_l.glcd
index d227f27..d227f27 100644
--- a/graphlcd/logos/CHERIE_FM_l.glcd
+++ b/graphlcd/logos/channels/CHERIE_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CHERIE_FM_m.glcd b/graphlcd/logos/channels/CHERIE_FM_m.glcd
index fc14a17..fc14a17 100644
--- a/graphlcd/logos/CHERIE_FM_m.glcd
+++ b/graphlcd/logos/channels/CHERIE_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CHRONOS_l.glcd b/graphlcd/logos/channels/CHRONOS_l.glcd
index 67d8418..67d8418 100644
--- a/graphlcd/logos/CHRONOS_l.glcd
+++ b/graphlcd/logos/channels/CHRONOS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CHRONOS_m.glcd b/graphlcd/logos/channels/CHRONOS_m.glcd
index ec0fe09..ec0fe09 100644
--- a/graphlcd/logos/CHRONOS_m.glcd
+++ b/graphlcd/logos/channels/CHRONOS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CINE_BOX_m.glcd b/graphlcd/logos/channels/CINE_BOX_m.glcd
index 442f234..442f234 100644
--- a/graphlcd/logos/CINE_BOX_m.glcd
+++ b/graphlcd/logos/channels/CINE_BOX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CLASSICA_l.glcd b/graphlcd/logos/channels/CLASSICA_l.glcd
index f241e7b..f241e7b 100644
--- a/graphlcd/logos/CLASSICA_l.glcd
+++ b/graphlcd/logos/channels/CLASSICA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CLASSICA_m.glcd b/graphlcd/logos/channels/CLASSICA_m.glcd
index e2f174f..e2f174f 100644
--- a/graphlcd/logos/CLASSICA_m.glcd
+++ b/graphlcd/logos/channels/CLASSICA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CLUB_TELEACHAT_l.glcd b/graphlcd/logos/channels/CLUB_TELEACHAT_l.glcd
index 50a260d..50a260d 100644
--- a/graphlcd/logos/CLUB_TELEACHAT_l.glcd
+++ b/graphlcd/logos/channels/CLUB_TELEACHAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CLUB_TELEACHAT_m.glcd b/graphlcd/logos/channels/CLUB_TELEACHAT_m.glcd
index a1ec468..a1ec468 100644
--- a/graphlcd/logos/CLUB_TELEACHAT_m.glcd
+++ b/graphlcd/logos/channels/CLUB_TELEACHAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CLUB_TELEACHAT_v2_m.glcd b/graphlcd/logos/channels/CLUB_TELEACHAT_v2_m.glcd
index e129033..e129033 100644
--- a/graphlcd/logos/CLUB_TELEACHAT_v2_m.glcd
+++ b/graphlcd/logos/channels/CLUB_TELEACHAT_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CNBC_EUROPE_l.glcd b/graphlcd/logos/channels/CNBC_EUROPE_l.glcd
index f9ec19f..f9ec19f 100644
--- a/graphlcd/logos/CNBC_EUROPE_l.glcd
+++ b/graphlcd/logos/channels/CNBC_EUROPE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CNBC_EUROPE_m.glcd b/graphlcd/logos/channels/CNBC_EUROPE_m.glcd
index 3245855..3245855 100644
--- a/graphlcd/logos/CNBC_EUROPE_m.glcd
+++ b/graphlcd/logos/channels/CNBC_EUROPE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CNN+_m.glcd b/graphlcd/logos/channels/CNN+_m.glcd
index fe93af9..fe93af9 100644
--- a/graphlcd/logos/CNN+_m.glcd
+++ b/graphlcd/logos/channels/CNN+_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CNN_INT_l.glcd b/graphlcd/logos/channels/CNN_INT_l.glcd
index 9c9dde6..9c9dde6 100644
--- a/graphlcd/logos/CNN_INT_l.glcd
+++ b/graphlcd/logos/channels/CNN_INT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CNN_INT_m.glcd b/graphlcd/logos/channels/CNN_INT_m.glcd
index 823483a..823483a 100644
--- a/graphlcd/logos/CNN_INT_m.glcd
+++ b/graphlcd/logos/channels/CNN_INT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/COMEDY_CENTRAL_l.glcd b/graphlcd/logos/channels/COMEDY_CENTRAL_l.glcd
index c385e5b..c385e5b 100644
--- a/graphlcd/logos/COMEDY_CENTRAL_l.glcd
+++ b/graphlcd/logos/channels/COMEDY_CENTRAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/COMEDY_CENTRAL_m.glcd b/graphlcd/logos/channels/COMEDY_CENTRAL_m.glcd
index 87ab9b1..87ab9b1 100644
--- a/graphlcd/logos/COMEDY_CENTRAL_m.glcd
+++ b/graphlcd/logos/channels/COMEDY_CENTRAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/CONT.RA_l.glcd b/graphlcd/logos/channels/CONT.RA_l.glcd
index 3282f16..3282f16 100644
--- a/graphlcd/logos/CONT.RA_l.glcd
+++ b/graphlcd/logos/channels/CONT.RA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CONTACT_FM_l.glcd b/graphlcd/logos/channels/CONTACT_FM_l.glcd
index 39edf44..39edf44 100644
--- a/graphlcd/logos/CONTACT_FM_l.glcd
+++ b/graphlcd/logos/channels/CONTACT_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/CONTACT_FM_m.glcd b/graphlcd/logos/channels/CONTACT_FM_m.glcd
index e67d16a..e67d16a 100644
--- a/graphlcd/logos/CONTACT_FM_m.glcd
+++ b/graphlcd/logos/channels/CONTACT_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_DING_l.glcd b/graphlcd/logos/channels/DAS_DING_l.glcd
index 40b0799..40b0799 100644
--- a/graphlcd/logos/DAS_DING_l.glcd
+++ b/graphlcd/logos/channels/DAS_DING_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_DING_m.glcd b/graphlcd/logos/channels/DAS_DING_m.glcd
index aeae433..aeae433 100644
--- a/graphlcd/logos/DAS_DING_m.glcd
+++ b/graphlcd/logos/channels/DAS_DING_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_DINGv2_l.glcd b/graphlcd/logos/channels/DAS_DINGv2_l.glcd
index a33ce03..a33ce03 100644
--- a/graphlcd/logos/DAS_DINGv2_l.glcd
+++ b/graphlcd/logos/channels/DAS_DINGv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_ERSTE_HD_l.glcd b/graphlcd/logos/channels/DAS_ERSTE_HD_l.glcd
index 16972f9..16972f9 100644
--- a/graphlcd/logos/DAS_ERSTE_HD_l.glcd
+++ b/graphlcd/logos/channels/DAS_ERSTE_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_ERSTE_HD_m.glcd b/graphlcd/logos/channels/DAS_ERSTE_HD_m.glcd
index f11a75d..f11a75d 100644
--- a/graphlcd/logos/DAS_ERSTE_HD_m.glcd
+++ b/graphlcd/logos/channels/DAS_ERSTE_HD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_ERSTE_HDv2_l.glcd b/graphlcd/logos/channels/DAS_ERSTE_HDv2_l.glcd
index c07c36a..c07c36a 100644
--- a/graphlcd/logos/DAS_ERSTE_HDv2_l.glcd
+++ b/graphlcd/logos/channels/DAS_ERSTE_HDv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_ERSTE_HDv2_m.glcd b/graphlcd/logos/channels/DAS_ERSTE_HDv2_m.glcd
index d6287f4..d6287f4 100644
--- a/graphlcd/logos/DAS_ERSTE_HDv2_m.glcd
+++ b/graphlcd/logos/channels/DAS_ERSTE_HDv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_ERSTE_l.glcd b/graphlcd/logos/channels/DAS_ERSTE_l.glcd
index dd38c2f..dd38c2f 100644
--- a/graphlcd/logos/DAS_ERSTE_l.glcd
+++ b/graphlcd/logos/channels/DAS_ERSTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_ERSTE_m.glcd b/graphlcd/logos/channels/DAS_ERSTE_m.glcd
index 95b8549..95b8549 100644
--- a/graphlcd/logos/DAS_ERSTE_m.glcd
+++ b/graphlcd/logos/channels/DAS_ERSTE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_ERSTEv2_l.glcd b/graphlcd/logos/channels/DAS_ERSTEv2_l.glcd
index 3fb4ed8..3fb4ed8 100644
--- a/graphlcd/logos/DAS_ERSTEv2_l.glcd
+++ b/graphlcd/logos/channels/DAS_ERSTEv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_VIERTE_l.glcd b/graphlcd/logos/channels/DAS_VIERTE_l.glcd
index 8417ec4..8417ec4 100644
--- a/graphlcd/logos/DAS_VIERTE_l.glcd
+++ b/graphlcd/logos/channels/DAS_VIERTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_VIERTE_m.glcd b/graphlcd/logos/channels/DAS_VIERTE_m.glcd
index b542605..b542605 100644
--- a/graphlcd/logos/DAS_VIERTE_m.glcd
+++ b/graphlcd/logos/channels/DAS_VIERTE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DAS_VIERTEv2_l.glcd b/graphlcd/logos/channels/DAS_VIERTEv2_l.glcd
index 250b7ac..250b7ac 100644
--- a/graphlcd/logos/DAS_VIERTEv2_l.glcd
+++ b/graphlcd/logos/channels/DAS_VIERTEv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DELUXE_LOUNGE_l.glcd b/graphlcd/logos/channels/DELUXE_LOUNGE_l.glcd
index 5bf536f..5bf536f 100644
--- a/graphlcd/logos/DELUXE_LOUNGE_l.glcd
+++ b/graphlcd/logos/channels/DELUXE_LOUNGE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DELUXE_LOUNGE_m.glcd b/graphlcd/logos/channels/DELUXE_LOUNGE_m.glcd
index 1183376..1183376 100644
--- a/graphlcd/logos/DELUXE_LOUNGE_m.glcd
+++ b/graphlcd/logos/channels/DELUXE_LOUNGE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DELUXE_MUSIC_l.glcd b/graphlcd/logos/channels/DELUXE_MUSIC_l.glcd
index 75733e8..75733e8 100644
--- a/graphlcd/logos/DELUXE_MUSIC_l.glcd
+++ b/graphlcd/logos/channels/DELUXE_MUSIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DELUXE_MUSIC_m.glcd b/graphlcd/logos/channels/DELUXE_MUSIC_m.glcd
index 51a3182..51a3182 100644
--- a/graphlcd/logos/DELUXE_MUSIC_m.glcd
+++ b/graphlcd/logos/channels/DELUXE_MUSIC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DELUXE_MUSICv2_l.glcd b/graphlcd/logos/channels/DELUXE_MUSICv2_l.glcd
index 01c2ef9..01c2ef9 100644
--- a/graphlcd/logos/DELUXE_MUSICv2_l.glcd
+++ b/graphlcd/logos/channels/DELUXE_MUSICv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DELUXE_RADIO_l.glcd b/graphlcd/logos/channels/DELUXE_RADIO_l.glcd
index 2fb7b82..2fb7b82 100644
--- a/graphlcd/logos/DELUXE_RADIO_l.glcd
+++ b/graphlcd/logos/channels/DELUXE_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DELUXE_RADIO_m.glcd b/graphlcd/logos/channels/DELUXE_RADIO_m.glcd
index 3c8018b..3c8018b 100644
--- a/graphlcd/logos/DELUXE_RADIO_m.glcd
+++ b/graphlcd/logos/channels/DELUXE_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DELUXE_RADIOv2_l.glcd b/graphlcd/logos/channels/DELUXE_RADIOv2_l.glcd
index 9cffa95..9cffa95 100644
--- a/graphlcd/logos/DELUXE_RADIOv2_l.glcd
+++ b/graphlcd/logos/channels/DELUXE_RADIOv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDFUNK_KOELN_l.glcd b/graphlcd/logos/channels/DEUTSCHLANDFUNK_KOELN_l.glcd
index 068eb5d..068eb5d 100644
--- a/graphlcd/logos/DEUTSCHLANDFUNK_KOELN_l.glcd
+++ b/graphlcd/logos/channels/DEUTSCHLANDFUNK_KOELN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDFUNK_KOELN_m.glcd b/graphlcd/logos/channels/DEUTSCHLANDFUNK_KOELN_m.glcd
index cfcde86..cfcde86 100644
--- a/graphlcd/logos/DEUTSCHLANDFUNK_KOELN_m.glcd
+++ b/graphlcd/logos/channels/DEUTSCHLANDFUNK_KOELN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDFUNK_KOELN_v2_m.glcd b/graphlcd/logos/channels/DEUTSCHLANDFUNK_KOELN_v2_m.glcd
index 7907ad2..7907ad2 100644
--- a/graphlcd/logos/DEUTSCHLANDFUNK_KOELN_v2_m.glcd
+++ b/graphlcd/logos/channels/DEUTSCHLANDFUNK_KOELN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDRADIO_BERLIN_l.glcd b/graphlcd/logos/channels/DEUTSCHLANDRADIO_BERLIN_l.glcd
index 2a8e007..2a8e007 100644
--- a/graphlcd/logos/DEUTSCHLANDRADIO_BERLIN_l.glcd
+++ b/graphlcd/logos/channels/DEUTSCHLANDRADIO_BERLIN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDRADIO_BERLIN_m.glcd b/graphlcd/logos/channels/DEUTSCHLANDRADIO_BERLIN_m.glcd
index bd35774..bd35774 100644
--- a/graphlcd/logos/DEUTSCHLANDRADIO_BERLIN_m.glcd
+++ b/graphlcd/logos/channels/DEUTSCHLANDRADIO_BERLIN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DEUTSCHLANDRADIO_BERLIN_v2_m.glcd b/graphlcd/logos/channels/DEUTSCHLANDRADIO_BERLIN_v2_m.glcd
index 19947a2..19947a2 100644
--- a/graphlcd/logos/DEUTSCHLANDRADIO_BERLIN_v2_m.glcd
+++ b/graphlcd/logos/channels/DEUTSCHLANDRADIO_BERLIN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DISCOVERY_CHANNEL_l.glcd b/graphlcd/logos/channels/DISCOVERY_CHANNEL_l.glcd
index 7607e1b..7607e1b 100644
--- a/graphlcd/logos/DISCOVERY_CHANNEL_l.glcd
+++ b/graphlcd/logos/channels/DISCOVERY_CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISCOVERY_CHANNEL_m.glcd b/graphlcd/logos/channels/DISCOVERY_CHANNEL_m.glcd
index fa9b349..fa9b349 100644
--- a/graphlcd/logos/DISCOVERY_CHANNEL_m.glcd
+++ b/graphlcd/logos/channels/DISCOVERY_CHANNEL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DISCOVERY_CHANNELv2_l.glcd b/graphlcd/logos/channels/DISCOVERY_CHANNELv2_l.glcd
index 1871981..1871981 100644
--- a/graphlcd/logos/DISCOVERY_CHANNELv2_l.glcd
+++ b/graphlcd/logos/channels/DISCOVERY_CHANNELv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISCOVERY_CHANNELv3_l.glcd b/graphlcd/logos/channels/DISCOVERY_CHANNELv3_l.glcd
index cb9518d..cb9518d 100644
--- a/graphlcd/logos/DISCOVERY_CHANNELv3_l.glcd
+++ b/graphlcd/logos/channels/DISCOVERY_CHANNELv3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISCOVERY_HD_l.glcd b/graphlcd/logos/channels/DISCOVERY_HD_l.glcd
index ffb07f6..ffb07f6 100644
--- a/graphlcd/logos/DISCOVERY_HD_l.glcd
+++ b/graphlcd/logos/channels/DISCOVERY_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_CHANNEL_l.glcd b/graphlcd/logos/channels/DISNEY_CHANNEL_l.glcd
index 4b8b8f8..4b8b8f8 100644
--- a/graphlcd/logos/DISNEY_CHANNEL_l.glcd
+++ b/graphlcd/logos/channels/DISNEY_CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_CHANNEL_m.glcd b/graphlcd/logos/channels/DISNEY_CHANNEL_m.glcd
index 1e8267e..1e8267e 100644
--- a/graphlcd/logos/DISNEY_CHANNEL_m.glcd
+++ b/graphlcd/logos/channels/DISNEY_CHANNEL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_CHANNELv2_l.glcd b/graphlcd/logos/channels/DISNEY_CHANNELv2_l.glcd
index ed63bcf..ed63bcf 100644
--- a/graphlcd/logos/DISNEY_CHANNELv2_l.glcd
+++ b/graphlcd/logos/channels/DISNEY_CHANNELv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_CHANNELv3_l.glcd b/graphlcd/logos/channels/DISNEY_CHANNELv3_l.glcd
index cbc7820..cbc7820 100644
--- a/graphlcd/logos/DISNEY_CHANNELv3_l.glcd
+++ b/graphlcd/logos/channels/DISNEY_CHANNELv3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_CINEMAGIC_HD_l.glcd b/graphlcd/logos/channels/DISNEY_CINEMAGIC_HD_l.glcd
index 003ec59..003ec59 100644
--- a/graphlcd/logos/DISNEY_CINEMAGIC_HD_l.glcd
+++ b/graphlcd/logos/channels/DISNEY_CINEMAGIC_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_CINEMAGIC_l.glcd b/graphlcd/logos/channels/DISNEY_CINEMAGIC_l.glcd
index a04933d..a04933d 100644
--- a/graphlcd/logos/DISNEY_CINEMAGIC_l.glcd
+++ b/graphlcd/logos/channels/DISNEY_CINEMAGIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_PLAYHOUSE_l.glcd b/graphlcd/logos/channels/DISNEY_PLAYHOUSE_l.glcd
index 778ad44..778ad44 100644
--- a/graphlcd/logos/DISNEY_PLAYHOUSE_l.glcd
+++ b/graphlcd/logos/channels/DISNEY_PLAYHOUSE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_TOON_+1_l.glcd b/graphlcd/logos/channels/DISNEY_TOON_+1_l.glcd
index 5b1c984..5b1c984 100644
--- a/graphlcd/logos/DISNEY_TOON_+1_l.glcd
+++ b/graphlcd/logos/channels/DISNEY_TOON_+1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_TOON_l.glcd b/graphlcd/logos/channels/DISNEY_TOON_l.glcd
index 910501c..910501c 100644
--- a/graphlcd/logos/DISNEY_TOON_l.glcd
+++ b/graphlcd/logos/channels/DISNEY_TOON_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DISNEY_XD_l.glcd b/graphlcd/logos/channels/DISNEY_XD_l.glcd
index d4c2b55..d4c2b55 100644
--- a/graphlcd/logos/DISNEY_XD_l.glcd
+++ b/graphlcd/logos/channels/DISNEY_XD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DKULTUR_l.glcd b/graphlcd/logos/channels/DKULTUR_l.glcd
index f3982e4..f3982e4 100644
--- a/graphlcd/logos/DKULTUR_l.glcd
+++ b/graphlcd/logos/channels/DKULTUR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DKULTUR_m.glcd b/graphlcd/logos/channels/DKULTUR_m.glcd
index 4886b36..4886b36 100644
--- a/graphlcd/logos/DKULTUR_m.glcd
+++ b/graphlcd/logos/channels/DKULTUR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DMAX_l.glcd b/graphlcd/logos/channels/DMAX_l.glcd
index 3750973..3750973 100644
--- a/graphlcd/logos/DMAX_l.glcd
+++ b/graphlcd/logos/channels/DMAX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DMAX_m.glcd b/graphlcd/logos/channels/DMAX_m.glcd
index 2f2f4be..2f2f4be 100644
--- a/graphlcd/logos/DMAX_m.glcd
+++ b/graphlcd/logos/channels/DMAX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DOK-DEB_l.glcd b/graphlcd/logos/channels/DOK-DEB_l.glcd
index cced77f..cced77f 100644
--- a/graphlcd/logos/DOK-DEB_l.glcd
+++ b/graphlcd/logos/channels/DOK-DEB_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DOK-DEb_m.glcd b/graphlcd/logos/channels/DOK-DEb_m.glcd
index 55f65b2..55f65b2 100644
--- a/graphlcd/logos/DOK-DEb_m.glcd
+++ b/graphlcd/logos/channels/DOK-DEb_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DOMRADIO_l.glcd b/graphlcd/logos/channels/DOMRADIO_l.glcd
index e9fc84d..e9fc84d 100644
--- a/graphlcd/logos/DOMRADIO_l.glcd
+++ b/graphlcd/logos/channels/DOMRADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DOMRADIO_m.glcd b/graphlcd/logos/channels/DOMRADIO_m.glcd
index c65bf3b..c65bf3b 100644
--- a/graphlcd/logos/DOMRADIO_m.glcd
+++ b/graphlcd/logos/channels/DOMRADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DSF_l.glcd b/graphlcd/logos/channels/DSF_l.glcd
index 1821bbc..1821bbc 100644
--- a/graphlcd/logos/DSF_l.glcd
+++ b/graphlcd/logos/channels/DSF_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DSF_m.glcd b/graphlcd/logos/channels/DSF_m.glcd
index 4a2c1e8..4a2c1e8 100644
--- a/graphlcd/logos/DSF_m.glcd
+++ b/graphlcd/logos/channels/DSF_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_1_l.glcd b/graphlcd/logos/channels/DW_1_l.glcd
index d8cfdf3..d8cfdf3 100644
--- a/graphlcd/logos/DW_1_l.glcd
+++ b/graphlcd/logos/channels/DW_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_1_m.glcd b/graphlcd/logos/channels/DW_1_m.glcd
index 940036f..940036f 100644
--- a/graphlcd/logos/DW_1_m.glcd
+++ b/graphlcd/logos/channels/DW_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_4_l.glcd b/graphlcd/logos/channels/DW_4_l.glcd
index d8cfdf3..d8cfdf3 100644
--- a/graphlcd/logos/DW_4_l.glcd
+++ b/graphlcd/logos/channels/DW_4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_4_m.glcd b/graphlcd/logos/channels/DW_4_m.glcd
index 940036f..940036f 100644
--- a/graphlcd/logos/DW_4_m.glcd
+++ b/graphlcd/logos/channels/DW_4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_RADIO_M_l.glcd b/graphlcd/logos/channels/DW_RADIO_M_l.glcd
index 781516a..781516a 100644
--- a/graphlcd/logos/DW_RADIO_M_l.glcd
+++ b/graphlcd/logos/channels/DW_RADIO_M_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_RADIO_M_m.glcd b/graphlcd/logos/channels/DW_RADIO_M_m.glcd
index 7834c4d..7834c4d 100644
--- a/graphlcd/logos/DW_RADIO_M_m.glcd
+++ b/graphlcd/logos/channels/DW_RADIO_M_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_RADIO_l.glcd b/graphlcd/logos/channels/DW_RADIO_l.glcd
index 90662ab..90662ab 100644
--- a/graphlcd/logos/DW_RADIO_l.glcd
+++ b/graphlcd/logos/channels/DW_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_RADIO_m.glcd b/graphlcd/logos/channels/DW_RADIO_m.glcd
index 6e935b3..6e935b3 100644
--- a/graphlcd/logos/DW_RADIO_m.glcd
+++ b/graphlcd/logos/channels/DW_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_TV_l.glcd b/graphlcd/logos/channels/DW_TV_l.glcd
index 5d2c3ef..5d2c3ef 100644
--- a/graphlcd/logos/DW_TV_l.glcd
+++ b/graphlcd/logos/channels/DW_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/DW_TV_m.glcd b/graphlcd/logos/channels/DW_TV_m.glcd
index 5bf7652..5bf7652 100644
--- a/graphlcd/logos/DW_TV_m.glcd
+++ b/graphlcd/logos/channels/DW_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EGO_FM_l.glcd b/graphlcd/logos/channels/EGO_FM_l.glcd
index d8933ae..d8933ae 100644
--- a/graphlcd/logos/EGO_FM_l.glcd
+++ b/graphlcd/logos/channels/EGO_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EGO_FM_m.glcd b/graphlcd/logos/channels/EGO_FM_m.glcd
index 5ea8bad..5ea8bad 100644
--- a/graphlcd/logos/EGO_FM_m.glcd
+++ b/graphlcd/logos/channels/EGO_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_EXTRA_l.glcd b/graphlcd/logos/channels/EINS_EXTRA_l.glcd
index 2cc1245..2cc1245 100644
--- a/graphlcd/logos/EINS_EXTRA_l.glcd
+++ b/graphlcd/logos/channels/EINS_EXTRA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_EXTRA_m.glcd b/graphlcd/logos/channels/EINS_EXTRA_m.glcd
index caa4ed8..caa4ed8 100644
--- a/graphlcd/logos/EINS_EXTRA_m.glcd
+++ b/graphlcd/logos/channels/EINS_EXTRA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_EXTRAv2_l.glcd b/graphlcd/logos/channels/EINS_EXTRAv2_l.glcd
index eae17ac..eae17ac 100644
--- a/graphlcd/logos/EINS_EXTRAv2_l.glcd
+++ b/graphlcd/logos/channels/EINS_EXTRAv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_EXTRAv2_m.glcd b/graphlcd/logos/channels/EINS_EXTRAv2_m.glcd
index c56e446..c56e446 100644
--- a/graphlcd/logos/EINS_EXTRAv2_m.glcd
+++ b/graphlcd/logos/channels/EINS_EXTRAv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_EXTRAv3_l.glcd b/graphlcd/logos/channels/EINS_EXTRAv3_l.glcd
index 8d28095..8d28095 100644
--- a/graphlcd/logos/EINS_EXTRAv3_l.glcd
+++ b/graphlcd/logos/channels/EINS_EXTRAv3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_EXTRAv4_l.glcd b/graphlcd/logos/channels/EINS_EXTRAv4_l.glcd
index 0c6c5f5..0c6c5f5 100644
--- a/graphlcd/logos/EINS_EXTRAv4_l.glcd
+++ b/graphlcd/logos/channels/EINS_EXTRAv4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_FESTIVAL_HD_l.glcd b/graphlcd/logos/channels/EINS_FESTIVAL_HD_l.glcd
index fc98ef8..fc98ef8 100644
--- a/graphlcd/logos/EINS_FESTIVAL_HD_l.glcd
+++ b/graphlcd/logos/channels/EINS_FESTIVAL_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_FESTIVAL_HD_m.glcd b/graphlcd/logos/channels/EINS_FESTIVAL_HD_m.glcd
index e769e30..e769e30 100644
--- a/graphlcd/logos/EINS_FESTIVAL_HD_m.glcd
+++ b/graphlcd/logos/channels/EINS_FESTIVAL_HD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_FESTIVAL_HDv2_l.glcd b/graphlcd/logos/channels/EINS_FESTIVAL_HDv2_l.glcd
index eeb4241..eeb4241 100644
--- a/graphlcd/logos/EINS_FESTIVAL_HDv2_l.glcd
+++ b/graphlcd/logos/channels/EINS_FESTIVAL_HDv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_FESTIVAL_l.glcd b/graphlcd/logos/channels/EINS_FESTIVAL_l.glcd
index 2af3fc7..2af3fc7 100644
--- a/graphlcd/logos/EINS_FESTIVAL_l.glcd
+++ b/graphlcd/logos/channels/EINS_FESTIVAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_FESTIVAL_m.glcd b/graphlcd/logos/channels/EINS_FESTIVAL_m.glcd
index 9e745ec..9e745ec 100644
--- a/graphlcd/logos/EINS_FESTIVAL_m.glcd
+++ b/graphlcd/logos/channels/EINS_FESTIVAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_FESTIVALv2_l .glcd b/graphlcd/logos/channels/EINS_FESTIVALv2_l .glcd
index 57377a8..57377a8 100644
--- a/graphlcd/logos/EINS_FESTIVALv2_l .glcd
+++ b/graphlcd/logos/channels/EINS_FESTIVALv2_l .glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_FESTIVALv2_l.glcd b/graphlcd/logos/channels/EINS_FESTIVALv2_l.glcd
index 37d0fb0..37d0fb0 100644
--- a/graphlcd/logos/EINS_FESTIVALv2_l.glcd
+++ b/graphlcd/logos/channels/EINS_FESTIVALv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_FESTIVALv2_m.glcd b/graphlcd/logos/channels/EINS_FESTIVALv2_m.glcd
index ccec283..ccec283 100644
--- a/graphlcd/logos/EINS_FESTIVALv2_m.glcd
+++ b/graphlcd/logos/channels/EINS_FESTIVALv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_FESTIVALv3_l.glcd b/graphlcd/logos/channels/EINS_FESTIVALv3_l.glcd
index c9b7fd4..c9b7fd4 100644
--- a/graphlcd/logos/EINS_FESTIVALv3_l.glcd
+++ b/graphlcd/logos/channels/EINS_FESTIVALv3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_MUXX_l.glcd b/graphlcd/logos/channels/EINS_MUXX_l.glcd
index 5ff62b5..5ff62b5 100644
--- a/graphlcd/logos/EINS_MUXX_l.glcd
+++ b/graphlcd/logos/channels/EINS_MUXX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_MUXX_m.glcd b/graphlcd/logos/channels/EINS_MUXX_m.glcd
index 8e4beca..8e4beca 100644
--- a/graphlcd/logos/EINS_MUXX_m.glcd
+++ b/graphlcd/logos/channels/EINS_MUXX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_MUXX_v2_l.glcd b/graphlcd/logos/channels/EINS_MUXX_v2_l.glcd
index 4669887..4669887 100644
--- a/graphlcd/logos/EINS_MUXX_v2_l.glcd
+++ b/graphlcd/logos/channels/EINS_MUXX_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_PLUS_l.glcd b/graphlcd/logos/channels/EINS_PLUS_l.glcd
index bab0a76..bab0a76 100644
--- a/graphlcd/logos/EINS_PLUS_l.glcd
+++ b/graphlcd/logos/channels/EINS_PLUS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_PLUS_m.glcd b/graphlcd/logos/channels/EINS_PLUS_m.glcd
index ed35013..ed35013 100644
--- a/graphlcd/logos/EINS_PLUS_m.glcd
+++ b/graphlcd/logos/channels/EINS_PLUS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EINS_PLUSv2_l.glcd b/graphlcd/logos/channels/EINS_PLUSv2_l.glcd
index c949549..c949549 100644
--- a/graphlcd/logos/EINS_PLUSv2_l.glcd
+++ b/graphlcd/logos/channels/EINS_PLUSv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ERF_RADIO_l.glcd b/graphlcd/logos/channels/ERF_RADIO_l.glcd
index ca71505..ca71505 100644
--- a/graphlcd/logos/ERF_RADIO_l.glcd
+++ b/graphlcd/logos/channels/ERF_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ERF_RADIO_m.glcd b/graphlcd/logos/channels/ERF_RADIO_m.glcd
index 5b76db4..5b76db4 100644
--- a/graphlcd/logos/ERF_RADIO_m.glcd
+++ b/graphlcd/logos/channels/ERF_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ESC1_EGYPT_l.glcd b/graphlcd/logos/channels/ESC1_EGYPT_l.glcd
index 2a3a7c9..2a3a7c9 100644
--- a/graphlcd/logos/ESC1_EGYPT_l.glcd
+++ b/graphlcd/logos/channels/ESC1_EGYPT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ESPN_CLASSIC_SPORT_l.glcd b/graphlcd/logos/channels/ESPN_CLASSIC_SPORT_l.glcd
index 6c44801..6c44801 100644
--- a/graphlcd/logos/ESPN_CLASSIC_SPORT_l.glcd
+++ b/graphlcd/logos/channels/ESPN_CLASSIC_SPORT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EURONEWS_l.glcd b/graphlcd/logos/channels/EURONEWS_l.glcd
index 9a8ed2d..9a8ed2d 100644
--- a/graphlcd/logos/EURONEWS_l.glcd
+++ b/graphlcd/logos/channels/EURONEWS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EURONEWS_m.glcd b/graphlcd/logos/channels/EURONEWS_m.glcd
index 85367d1..85367d1 100644
--- a/graphlcd/logos/EURONEWS_m.glcd
+++ b/graphlcd/logos/channels/EURONEWS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EUROPE_2_l.glcd b/graphlcd/logos/channels/EUROPE_2_l.glcd
index 3020976..3020976 100644
--- a/graphlcd/logos/EUROPE_2_l.glcd
+++ b/graphlcd/logos/channels/EUROPE_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EUROPE_2_m.glcd b/graphlcd/logos/channels/EUROPE_2_m.glcd
index 688bea3..688bea3 100644
--- a/graphlcd/logos/EUROPE_2_m.glcd
+++ b/graphlcd/logos/channels/EUROPE_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EUROSPORT_HD_l.glcd b/graphlcd/logos/channels/EUROSPORT_HD_l.glcd
index c6c42d7..c6c42d7 100644
--- a/graphlcd/logos/EUROSPORT_HD_l.glcd
+++ b/graphlcd/logos/channels/EUROSPORT_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EUROSPORT_l.glcd b/graphlcd/logos/channels/EUROSPORT_l.glcd
index 3a929f0..3a929f0 100644
--- a/graphlcd/logos/EUROSPORT_l.glcd
+++ b/graphlcd/logos/channels/EUROSPORT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EUROSPORT_m.glcd b/graphlcd/logos/channels/EUROSPORT_m.glcd
index c41f51d..c41f51d 100644
--- a/graphlcd/logos/EUROSPORT_m.glcd
+++ b/graphlcd/logos/channels/EUROSPORT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/EXTRA 1_l.glcd b/graphlcd/logos/channels/EXTRA 1_l.glcd
index 694c965..694c965 100644
--- a/graphlcd/logos/EXTRA 1_l.glcd
+++ b/graphlcd/logos/channels/EXTRA 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/EXTREME SPORTS_l.glcd b/graphlcd/logos/channels/EXTREME SPORTS_l.glcd
index 4d43a09..4d43a09 100644
--- a/graphlcd/logos/EXTREME SPORTS_l.glcd
+++ b/graphlcd/logos/channels/EXTREME SPORTS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/E_ENTERTAINMENT_l.glcd b/graphlcd/logos/channels/E_ENTERTAINMENT_l.glcd
index d7cb2ff..d7cb2ff 100644
--- a/graphlcd/logos/E_ENTERTAINMENT_l.glcd
+++ b/graphlcd/logos/channels/E_ENTERTAINMENT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FASHION_TV_l.glcd b/graphlcd/logos/channels/FASHION_TV_l.glcd
index bc8e4ec..bc8e4ec 100644
--- a/graphlcd/logos/FASHION_TV_l.glcd
+++ b/graphlcd/logos/channels/FASHION_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FASHION_TV_m.glcd b/graphlcd/logos/channels/FASHION_TV_m.glcd
index 897fd5f..897fd5f 100644
--- a/graphlcd/logos/FASHION_TV_m.glcd
+++ b/graphlcd/logos/channels/FASHION_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FASHION_TV_v2_m.glcd b/graphlcd/logos/channels/FASHION_TV_v2_m.glcd
index 7c89848..7c89848 100644
--- a/graphlcd/logos/FASHION_TV_v2_m.glcd
+++ b/graphlcd/logos/channels/FASHION_TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FESTIVAL_l.glcd b/graphlcd/logos/channels/FESTIVAL_l.glcd
index d3e1b46..d3e1b46 100644
--- a/graphlcd/logos/FESTIVAL_l.glcd
+++ b/graphlcd/logos/channels/FESTIVAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FESTIVAL_m.glcd b/graphlcd/logos/channels/FESTIVAL_m.glcd
index 25fcea3..25fcea3 100644
--- a/graphlcd/logos/FESTIVAL_m.glcd
+++ b/graphlcd/logos/channels/FESTIVAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FFN_COMEDY_l.glcd b/graphlcd/logos/channels/FFN_COMEDY_l.glcd
index 12ee1d2..12ee1d2 100644
--- a/graphlcd/logos/FFN_COMEDY_l.glcd
+++ b/graphlcd/logos/channels/FFN_COMEDY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FFN_COMEDY_m.glcd b/graphlcd/logos/channels/FFN_COMEDY_m.glcd
index 4ad9f5e..4ad9f5e 100644
--- a/graphlcd/logos/FFN_COMEDY_m.glcd
+++ b/graphlcd/logos/channels/FFN_COMEDY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FFN_DIGITAL_l.glcd b/graphlcd/logos/channels/FFN_DIGITAL_l.glcd
index 2bc4045..2bc4045 100644
--- a/graphlcd/logos/FFN_DIGITAL_l.glcd
+++ b/graphlcd/logos/channels/FFN_DIGITAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FFN_DIGITAL_m.glcd b/graphlcd/logos/channels/FFN_DIGITAL_m.glcd
index 2044d6f..2044d6f 100644
--- a/graphlcd/logos/FFN_DIGITAL_m.glcd
+++ b/graphlcd/logos/channels/FFN_DIGITAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FM4_l.glcd b/graphlcd/logos/channels/FM4_l.glcd
index af43c43..af43c43 100644
--- a/graphlcd/logos/FM4_l.glcd
+++ b/graphlcd/logos/channels/FM4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FM4_m.glcd b/graphlcd/logos/channels/FM4_m.glcd
index 80b9664..80b9664 100644
--- a/graphlcd/logos/FM4_m.glcd
+++ b/graphlcd/logos/channels/FM4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX_KIDS_l.glcd b/graphlcd/logos/channels/FOX_KIDS_l.glcd
index faac38a..faac38a 100644
--- a/graphlcd/logos/FOX_KIDS_l.glcd
+++ b/graphlcd/logos/channels/FOX_KIDS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX_KIDS_m.glcd b/graphlcd/logos/channels/FOX_KIDS_m.glcd
index 6a681a1..6a681a1 100644
--- a/graphlcd/logos/FOX_KIDS_m.glcd
+++ b/graphlcd/logos/channels/FOX_KIDS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX_KIDSv2_l.glcd b/graphlcd/logos/channels/FOX_KIDSv2_l.glcd
index 008f6c6..008f6c6 100644
--- a/graphlcd/logos/FOX_KIDSv2_l.glcd
+++ b/graphlcd/logos/channels/FOX_KIDSv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX_KIDSv2_m.glcd b/graphlcd/logos/channels/FOX_KIDSv2_m.glcd
index 09ad0b2..09ad0b2 100644
--- a/graphlcd/logos/FOX_KIDSv2_m.glcd
+++ b/graphlcd/logos/channels/FOX_KIDSv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX_NEWS_m.glcd b/graphlcd/logos/channels/FOX_NEWS_m.glcd
index 82d60f9..82d60f9 100644
--- a/graphlcd/logos/FOX_NEWS_m.glcd
+++ b/graphlcd/logos/channels/FOX_NEWS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX_l.glcd b/graphlcd/logos/channels/FOX_l.glcd
index 12da108..12da108 100644
--- a/graphlcd/logos/FOX_l.glcd
+++ b/graphlcd/logos/channels/FOX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FOX_m.glcd b/graphlcd/logos/channels/FOX_m.glcd
index 73b376b..73b376b 100644
--- a/graphlcd/logos/FOX_m.glcd
+++ b/graphlcd/logos/channels/FOX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE_24_l.glcd b/graphlcd/logos/channels/FRANCE_24_l.glcd
index bfd30be..bfd30be 100644
--- a/graphlcd/logos/FRANCE_24_l.glcd
+++ b/graphlcd/logos/channels/FRANCE_24_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE_24_m.glcd b/graphlcd/logos/channels/FRANCE_24_m.glcd
index 375258e..375258e 100644
--- a/graphlcd/logos/FRANCE_24_m.glcd
+++ b/graphlcd/logos/channels/FRANCE_24_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE_2_l.glcd b/graphlcd/logos/channels/FRANCE_2_l.glcd
index a01db87..a01db87 100644
--- a/graphlcd/logos/FRANCE_2_l.glcd
+++ b/graphlcd/logos/channels/FRANCE_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE_2_m.glcd b/graphlcd/logos/channels/FRANCE_2_m.glcd
index 8658df7..8658df7 100644
--- a/graphlcd/logos/FRANCE_2_m.glcd
+++ b/graphlcd/logos/channels/FRANCE_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE_3_l.glcd b/graphlcd/logos/channels/FRANCE_3_l.glcd
index fbea5ba..fbea5ba 100644
--- a/graphlcd/logos/FRANCE_3_l.glcd
+++ b/graphlcd/logos/channels/FRANCE_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE_3_m.glcd b/graphlcd/logos/channels/FRANCE_3_m.glcd
index 421e4e3..421e4e3 100644
--- a/graphlcd/logos/FRANCE_3_m.glcd
+++ b/graphlcd/logos/channels/FRANCE_3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE_5_l.glcd b/graphlcd/logos/channels/FRANCE_5_l.glcd
index bc3132a..bc3132a 100644
--- a/graphlcd/logos/FRANCE_5_l.glcd
+++ b/graphlcd/logos/channels/FRANCE_5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANCE_5_m.glcd b/graphlcd/logos/channels/FRANCE_5_m.glcd
index 03cdbd3..03cdbd3 100644
--- a/graphlcd/logos/FRANCE_5_m.glcd
+++ b/graphlcd/logos/channels/FRANCE_5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANKEN_SAT_l.glcd b/graphlcd/logos/channels/FRANKEN_SAT_l.glcd
index 9def4ca..9def4ca 100644
--- a/graphlcd/logos/FRANKEN_SAT_l.glcd
+++ b/graphlcd/logos/channels/FRANKEN_SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRANKEN_SAT_m.glcd b/graphlcd/logos/channels/FRANKEN_SAT_m.glcd
index 4e0be7e..4e0be7e 100644
--- a/graphlcd/logos/FRANKEN_SAT_m.glcd
+++ b/graphlcd/logos/channels/FRANKEN_SAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FREE_X_TV_l.glcd b/graphlcd/logos/channels/FREE_X_TV_l.glcd
index d84a6d9..d84a6d9 100644
--- a/graphlcd/logos/FREE_X_TV_l.glcd
+++ b/graphlcd/logos/channels/FREE_X_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FREE_X_TV_m.glcd b/graphlcd/logos/channels/FREE_X_TV_m.glcd
index c98bdc5..c98bdc5 100644
--- a/graphlcd/logos/FREE_X_TV_m.glcd
+++ b/graphlcd/logos/channels/FREE_X_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/FRITZ_l.glcd b/graphlcd/logos/channels/FRITZ_l.glcd
index e84e499..e84e499 100644
--- a/graphlcd/logos/FRITZ_l.glcd
+++ b/graphlcd/logos/channels/FRITZ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/FRITZ_m.glcd b/graphlcd/logos/channels/FRITZ_m.glcd
index 894fda0..894fda0 100644
--- a/graphlcd/logos/FRITZ_m.glcd
+++ b/graphlcd/logos/channels/FRITZ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/GAMES_TV_l.glcd b/graphlcd/logos/channels/GAMES_TV_l.glcd
index b6c862e..b6c862e 100644
--- a/graphlcd/logos/GAMES_TV_l.glcd
+++ b/graphlcd/logos/channels/GAMES_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/GAMES_TV_m.glcd b/graphlcd/logos/channels/GAMES_TV_m.glcd
index e952df0..e952df0 100644
--- a/graphlcd/logos/GAMES_TV_m.glcd
+++ b/graphlcd/logos/channels/GAMES_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/GOLDSTAR_TV_l.glcd b/graphlcd/logos/channels/GOLDSTAR_TV_l.glcd
index e2ebf7d..e2ebf7d 100644
--- a/graphlcd/logos/GOLDSTAR_TV_l.glcd
+++ b/graphlcd/logos/channels/GOLDSTAR_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/GOLDSTAR_TV_m.glcd b/graphlcd/logos/channels/GOLDSTAR_TV_m.glcd
index 82b0f94..82b0f94 100644
--- a/graphlcd/logos/GOLDSTAR_TV_m.glcd
+++ b/graphlcd/logos/channels/GOLDSTAR_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/GOLDSTAR_TVv2_l.glcd b/graphlcd/logos/channels/GOLDSTAR_TVv2_l.glcd
index 75f6b4b..75f6b4b 100644
--- a/graphlcd/logos/GOLDSTAR_TVv2_l.glcd
+++ b/graphlcd/logos/channels/GOLDSTAR_TVv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/GOLDSTAR_TVv2_m.glcd b/graphlcd/logos/channels/GOLDSTAR_TVv2_m.glcd
index bdc8533..bdc8533 100644
--- a/graphlcd/logos/GOLDSTAR_TVv2_m.glcd
+++ b/graphlcd/logos/channels/GOLDSTAR_TVv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/GO_TV_l.glcd b/graphlcd/logos/channels/GO_TV_l.glcd
index bcecb6d..bcecb6d 100644
--- a/graphlcd/logos/GO_TV_l.glcd
+++ b/graphlcd/logos/channels/GO_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/GO_TV_m.glcd b/graphlcd/logos/channels/GO_TV_m.glcd
index 9df3abe..9df3abe 100644
--- a/graphlcd/logos/GO_TV_m.glcd
+++ b/graphlcd/logos/channels/GO_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/GO_TVv2_l.glcd b/graphlcd/logos/channels/GO_TVv2_l.glcd
index 8550f77..8550f77 100644
--- a/graphlcd/logos/GO_TVv2_l.glcd
+++ b/graphlcd/logos/channels/GO_TVv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/GUTE_LAUNE_TV_l.glcd b/graphlcd/logos/channels/GUTE_LAUNE_TV_l.glcd
index afdc9d8..afdc9d8 100644
--- a/graphlcd/logos/GUTE_LAUNE_TV_l.glcd
+++ b/graphlcd/logos/channels/GUTE_LAUNE_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/GUTE_LAUNE_TV_m.glcd b/graphlcd/logos/channels/GUTE_LAUNE_TV_m.glcd
index c3fe4f2..c3fe4f2 100644
--- a/graphlcd/logos/GUTE_LAUNE_TV_m.glcd
+++ b/graphlcd/logos/channels/GUTE_LAUNE_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HALLMARK_l.glcd b/graphlcd/logos/channels/HALLMARK_l.glcd
index 820f67c..820f67c 100644
--- a/graphlcd/logos/HALLMARK_l.glcd
+++ b/graphlcd/logos/channels/HALLMARK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HALLMARK_m.glcd b/graphlcd/logos/channels/HALLMARK_m.glcd
index 7d8ecda..7d8ecda 100644
--- a/graphlcd/logos/HALLMARK_m.glcd
+++ b/graphlcd/logos/channels/HALLMARK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HARMONY_FM_l.glcd b/graphlcd/logos/channels/HARMONY_FM_l.glcd
index c7c061e..c7c061e 100644
--- a/graphlcd/logos/HARMONY_FM_l.glcd
+++ b/graphlcd/logos/channels/HARMONY_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HARMONY_FM_m.glcd b/graphlcd/logos/channels/HARMONY_FM_m.glcd
index 8829b03..8829b03 100644
--- a/graphlcd/logos/HARMONY_FM_m.glcd
+++ b/graphlcd/logos/channels/HARMONY_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HARMONY_FM_v2_m.glcd b/graphlcd/logos/channels/HARMONY_FM_v2_m.glcd
index c32ec0f..c32ec0f 100644
--- a/graphlcd/logos/HARMONY_FM_v2_m.glcd
+++ b/graphlcd/logos/channels/HARMONY_FM_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HARMONY_FMv2_m.glcd b/graphlcd/logos/channels/HARMONY_FMv2_m.glcd
index c32ec0f..c32ec0f 100644
--- a/graphlcd/logos/HARMONY_FMv2_m.glcd
+++ b/graphlcd/logos/channels/HARMONY_FMv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HD_TEST_ARD_ZDF_l.glcd b/graphlcd/logos/channels/HD_TEST_ARD_ZDF_l.glcd
index 4bce386..4bce386 100644
--- a/graphlcd/logos/HD_TEST_ARD_ZDF_l.glcd
+++ b/graphlcd/logos/channels/HD_TEST_ARD_ZDF_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HD_TEST_ARD_ZDF_m.glcd b/graphlcd/logos/channels/HD_TEST_ARD_ZDF_m.glcd
index 8f66e73..8f66e73 100644
--- a/graphlcd/logos/HD_TEST_ARD_ZDF_m.glcd
+++ b/graphlcd/logos/channels/HD_TEST_ARD_ZDF_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HEIMATKANAL_l.glcd b/graphlcd/logos/channels/HEIMATKANAL_l.glcd
index 8c0161f..8c0161f 100644
--- a/graphlcd/logos/HEIMATKANAL_l.glcd
+++ b/graphlcd/logos/channels/HEIMATKANAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HEIMATKANAL_m.glcd b/graphlcd/logos/channels/HEIMATKANAL_m.glcd
index f1224e4..f1224e4 100644
--- a/graphlcd/logos/HEIMATKANAL_m.glcd
+++ b/graphlcd/logos/channels/HEIMATKANAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HEIMATKANAL_v2_l.glcd b/graphlcd/logos/channels/HEIMATKANAL_v2_l.glcd
index 643d68a..643d68a 100644
--- a/graphlcd/logos/HEIMATKANAL_v2_l.glcd
+++ b/graphlcd/logos/channels/HEIMATKANAL_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HEIMATKANALv2_l.glcd b/graphlcd/logos/channels/HEIMATKANALv2_l.glcd
index 643d68a..643d68a 100644
--- a/graphlcd/logos/HEIMATKANALv2_l.glcd
+++ b/graphlcd/logos/channels/HEIMATKANALv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HESSEN_FERNSEHEN_l.glcd b/graphlcd/logos/channels/HESSEN_FERNSEHEN_l.glcd
index c2df34e..c2df34e 100644
--- a/graphlcd/logos/HESSEN_FERNSEHEN_l.glcd
+++ b/graphlcd/logos/channels/HESSEN_FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HESSEN_FERNSEHEN_m.glcd b/graphlcd/logos/channels/HESSEN_FERNSEHEN_m.glcd
index 24ed6bc..24ed6bc 100644
--- a/graphlcd/logos/HESSEN_FERNSEHEN_m.glcd
+++ b/graphlcd/logos/channels/HESSEN_FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HESSEN_FERNSEHEN_v2_l.glcd b/graphlcd/logos/channels/HESSEN_FERNSEHEN_v2_l.glcd
index afb1d56..afb1d56 100644
--- a/graphlcd/logos/HESSEN_FERNSEHEN_v2_l.glcd
+++ b/graphlcd/logos/channels/HESSEN_FERNSEHEN_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HISTOIRE_m.glcd b/graphlcd/logos/channels/HISTOIRE_m.glcd
index 7343fc8..7343fc8 100644
--- a/graphlcd/logos/HISTOIRE_m.glcd
+++ b/graphlcd/logos/channels/HISTOIRE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HISTORY_CHANNEL_l.glcd b/graphlcd/logos/channels/HISTORY_CHANNEL_l.glcd
index e175a6a..e175a6a 100644
--- a/graphlcd/logos/HISTORY_CHANNEL_l.glcd
+++ b/graphlcd/logos/channels/HISTORY_CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HISTORY_HD_l.glcd b/graphlcd/logos/channels/HISTORY_HD_l.glcd
index 7f0d64b..7f0d64b 100644
--- a/graphlcd/logos/HISTORY_HD_l.glcd
+++ b/graphlcd/logos/channels/HISTORY_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HITRADIO_FFH_l.glcd b/graphlcd/logos/channels/HITRADIO_FFH_l.glcd
index b5fd57e..b5fd57e 100644
--- a/graphlcd/logos/HITRADIO_FFH_l.glcd
+++ b/graphlcd/logos/channels/HITRADIO_FFH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HITRADIO_FFH_m.glcd b/graphlcd/logos/channels/HITRADIO_FFH_m.glcd
index 3701543..3701543 100644
--- a/graphlcd/logos/HITRADIO_FFH_m.glcd
+++ b/graphlcd/logos/channels/HITRADIO_FFH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HITRADIO_OE3_l.glcd b/graphlcd/logos/channels/HITRADIO_OE3_l.glcd
index 06655c5..06655c5 100644
--- a/graphlcd/logos/HITRADIO_OE3_l.glcd
+++ b/graphlcd/logos/channels/HITRADIO_OE3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HITRADIO_OE3_m.glcd b/graphlcd/logos/channels/HITRADIO_OE3_m.glcd
index 6f6619e..6f6619e 100644
--- a/graphlcd/logos/HITRADIO_OE3_m.glcd
+++ b/graphlcd/logos/channels/HITRADIO_OE3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HOERZU_DIGITAL_l.glcd b/graphlcd/logos/channels/HOERZU_DIGITAL_l.glcd
index 703c47b..703c47b 100644
--- a/graphlcd/logos/HOERZU_DIGITAL_l.glcd
+++ b/graphlcd/logos/channels/HOERZU_DIGITAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HOERZU_DIGITAL_m.glcd b/graphlcd/logos/channels/HOERZU_DIGITAL_m.glcd
index fefd209..fefd209 100644
--- a/graphlcd/logos/HOERZU_DIGITAL_m.glcd
+++ b/graphlcd/logos/channels/HOERZU_DIGITAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HOPE_CHANNEL_RADIO_l.glcd b/graphlcd/logos/channels/HOPE_CHANNEL_RADIO_l.glcd
index b4e8ca3..b4e8ca3 100644
--- a/graphlcd/logos/HOPE_CHANNEL_RADIO_l.glcd
+++ b/graphlcd/logos/channels/HOPE_CHANNEL_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HOPE_CHANNEL_RADIO_m.glcd b/graphlcd/logos/channels/HOPE_CHANNEL_RADIO_m.glcd
index 0f88c92..0f88c92 100644
--- a/graphlcd/logos/HOPE_CHANNEL_RADIO_m.glcd
+++ b/graphlcd/logos/channels/HOPE_CHANNEL_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_1_l.glcd b/graphlcd/logos/channels/HR_1_l.glcd
index 952f1b7..952f1b7 100644
--- a/graphlcd/logos/HR_1_l.glcd
+++ b/graphlcd/logos/channels/HR_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_1_m.glcd b/graphlcd/logos/channels/HR_1_m.glcd
index 6ef4da1..6ef4da1 100644
--- a/graphlcd/logos/HR_1_m.glcd
+++ b/graphlcd/logos/channels/HR_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_2_l.glcd b/graphlcd/logos/channels/HR_2_l.glcd
index 54b049d..54b049d 100644
--- a/graphlcd/logos/HR_2_l.glcd
+++ b/graphlcd/logos/channels/HR_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_2_m.glcd b/graphlcd/logos/channels/HR_2_m.glcd
index 11cf851..11cf851 100644
--- a/graphlcd/logos/HR_2_m.glcd
+++ b/graphlcd/logos/channels/HR_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_3_l.glcd b/graphlcd/logos/channels/HR_3_l.glcd
index 5eb21c8..5eb21c8 100644
--- a/graphlcd/logos/HR_3_l.glcd
+++ b/graphlcd/logos/channels/HR_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_3_m.glcd b/graphlcd/logos/channels/HR_3_m.glcd
index 7ba39c1..7ba39c1 100644
--- a/graphlcd/logos/HR_3_m.glcd
+++ b/graphlcd/logos/channels/HR_3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_4_l.glcd b/graphlcd/logos/channels/HR_4_l.glcd
index 7ae3529..7ae3529 100644
--- a/graphlcd/logos/HR_4_l.glcd
+++ b/graphlcd/logos/channels/HR_4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_4_m.glcd b/graphlcd/logos/channels/HR_4_m.glcd
index dee66cd..dee66cd 100644
--- a/graphlcd/logos/HR_4_m.glcd
+++ b/graphlcd/logos/channels/HR_4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_CHRONOS_l.glcd b/graphlcd/logos/channels/HR_CHRONOS_l.glcd
index 67d8418..67d8418 100644
--- a/graphlcd/logos/HR_CHRONOS_l.glcd
+++ b/graphlcd/logos/channels/HR_CHRONOS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_INFO_PLUS_l.glcd b/graphlcd/logos/channels/HR_INFO_PLUS_l.glcd
index 9b7ed86..9b7ed86 100644
--- a/graphlcd/logos/HR_INFO_PLUS_l.glcd
+++ b/graphlcd/logos/channels/HR_INFO_PLUS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_INFO_PLUS_m.glcd b/graphlcd/logos/channels/HR_INFO_PLUS_m.glcd
index 3d68d12..3d68d12 100644
--- a/graphlcd/logos/HR_INFO_PLUS_m.glcd
+++ b/graphlcd/logos/channels/HR_INFO_PLUS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_INFO_l.glcd b/graphlcd/logos/channels/HR_INFO_l.glcd
index 383db0e..383db0e 100644
--- a/graphlcd/logos/HR_INFO_l.glcd
+++ b/graphlcd/logos/channels/HR_INFO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_INFO_m.glcd b/graphlcd/logos/channels/HR_INFO_m.glcd
index cacbe8c..cacbe8c 100644
--- a/graphlcd/logos/HR_INFO_m.glcd
+++ b/graphlcd/logos/channels/HR_INFO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_KLASSIK_l.glcd b/graphlcd/logos/channels/HR_KLASSIK_l.glcd
index 8e992a9..8e992a9 100644
--- a/graphlcd/logos/HR_KLASSIK_l.glcd
+++ b/graphlcd/logos/channels/HR_KLASSIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_KLASSIK_m.glcd b/graphlcd/logos/channels/HR_KLASSIK_m.glcd
index 4712db5..4712db5 100644
--- a/graphlcd/logos/HR_KLASSIK_m.glcd
+++ b/graphlcd/logos/channels/HR_KLASSIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_KLASSIKv2_m.glcd b/graphlcd/logos/channels/HR_KLASSIKv2_m.glcd
index 36e403c..36e403c 100644
--- a/graphlcd/logos/HR_KLASSIKv2_m.glcd
+++ b/graphlcd/logos/channels/HR_KLASSIKv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_SKYLINE_l.glcd b/graphlcd/logos/channels/HR_SKYLINE_l.glcd
index 593a856..593a856 100644
--- a/graphlcd/logos/HR_SKYLINE_l.glcd
+++ b/graphlcd/logos/channels/HR_SKYLINE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_SKYLINE_m.glcd b/graphlcd/logos/channels/HR_SKYLINE_m.glcd
index 96bb038..96bb038 100644
--- a/graphlcd/logos/HR_SKYLINE_m.glcd
+++ b/graphlcd/logos/channels/HR_SKYLINE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_SKYLINEv2_m.glcd b/graphlcd/logos/channels/HR_SKYLINEv2_m.glcd
index 1661dfc..1661dfc 100644
--- a/graphlcd/logos/HR_SKYLINEv2_m.glcd
+++ b/graphlcd/logos/channels/HR_SKYLINEv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HR_l.glcd b/graphlcd/logos/channels/HR_l.glcd
index 5af17bd..5af17bd 100644
--- a/graphlcd/logos/HR_l.glcd
+++ b/graphlcd/logos/channels/HR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HSE24_EXTRA_l.glcd b/graphlcd/logos/channels/HSE24_EXTRA_l.glcd
index 38810cd..38810cd 100644
--- a/graphlcd/logos/HSE24_EXTRA_l.glcd
+++ b/graphlcd/logos/channels/HSE24_EXTRA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HSE24_EXTRA_m.glcd b/graphlcd/logos/channels/HSE24_EXTRA_m.glcd
index 4376eb0..4376eb0 100644
--- a/graphlcd/logos/HSE24_EXTRA_m.glcd
+++ b/graphlcd/logos/channels/HSE24_EXTRA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HSE24_l.glcd b/graphlcd/logos/channels/HSE24_l.glcd
index ab516b9..ab516b9 100644
--- a/graphlcd/logos/HSE24_l.glcd
+++ b/graphlcd/logos/channels/HSE24_l.glcd
Binary files differ
diff --git a/graphlcd/logos/HSE24_m.glcd b/graphlcd/logos/channels/HSE24_m.glcd
index f4a8e35..f4a8e35 100644
--- a/graphlcd/logos/HSE24_m.glcd
+++ b/graphlcd/logos/channels/HSE24_m.glcd
Binary files differ
diff --git a/graphlcd/logos/HSE24v2_m.glcd b/graphlcd/logos/channels/HSE24v2_m.glcd
index 374a9cb..374a9cb 100644
--- a/graphlcd/logos/HSE24v2_m.glcd
+++ b/graphlcd/logos/channels/HSE24v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/INFORADIO_l.glcd b/graphlcd/logos/channels/INFORADIO_l.glcd
index 39bfa9e..39bfa9e 100644
--- a/graphlcd/logos/INFORADIO_l.glcd
+++ b/graphlcd/logos/channels/INFORADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/INFORADIO_m.glcd b/graphlcd/logos/channels/INFORADIO_m.glcd
index 09da732..09da732 100644
--- a/graphlcd/logos/INFORADIO_m.glcd
+++ b/graphlcd/logos/channels/INFORADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/INSELRADIO_l.glcd b/graphlcd/logos/channels/INSELRADIO_l.glcd
index cfb5060..cfb5060 100644
--- a/graphlcd/logos/INSELRADIO_l.glcd
+++ b/graphlcd/logos/channels/INSELRADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/INSELRADIO_m.glcd b/graphlcd/logos/channels/INSELRADIO_m.glcd
index 681e0f1..681e0f1 100644
--- a/graphlcd/logos/INSELRADIO_m.glcd
+++ b/graphlcd/logos/channels/INSELRADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/I_MUSIC_TV_l.glcd b/graphlcd/logos/channels/I_MUSIC_TV_l.glcd
index 902bb08..902bb08 100644
--- a/graphlcd/logos/I_MUSIC_TV_l.glcd
+++ b/graphlcd/logos/channels/I_MUSIC_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/I_MUSIC_TV_m.glcd b/graphlcd/logos/channels/I_MUSIC_TV_m.glcd
index 85ba0f5..85ba0f5 100644
--- a/graphlcd/logos/I_MUSIC_TV_m.glcd
+++ b/graphlcd/logos/channels/I_MUSIC_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/I_MUSIC_l.glcd b/graphlcd/logos/channels/I_MUSIC_l.glcd
index 23f9512..23f9512 100644
--- a/graphlcd/logos/I_MUSIC_l.glcd
+++ b/graphlcd/logos/channels/I_MUSIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/I_MUSIC_m.glcd b/graphlcd/logos/channels/I_MUSIC_m.glcd
index 85ba0f5..85ba0f5 100644
--- a/graphlcd/logos/I_MUSIC_m.glcd
+++ b/graphlcd/logos/channels/I_MUSIC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/JML_SHOP_l.glcd b/graphlcd/logos/channels/JML_SHOP_l.glcd
index dfc924b..dfc924b 100644
--- a/graphlcd/logos/JML_SHOP_l.glcd
+++ b/graphlcd/logos/channels/JML_SHOP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/JML_SHOP_m.glcd b/graphlcd/logos/channels/JML_SHOP_m.glcd
index 67b7958..67b7958 100644
--- a/graphlcd/logos/JML_SHOP_m.glcd
+++ b/graphlcd/logos/channels/JML_SHOP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/JUMP_l.glcd b/graphlcd/logos/channels/JUMP_l.glcd
index 981cb59..981cb59 100644
--- a/graphlcd/logos/JUMP_l.glcd
+++ b/graphlcd/logos/channels/JUMP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/JUMP_m.glcd b/graphlcd/logos/channels/JUMP_m.glcd
index 2bf8ed7..2bf8ed7 100644
--- a/graphlcd/logos/JUMP_m.glcd
+++ b/graphlcd/logos/channels/JUMP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/JUNIOR_l.glcd b/graphlcd/logos/channels/JUNIOR_l.glcd
index 8981830..8981830 100644
--- a/graphlcd/logos/JUNIOR_l.glcd
+++ b/graphlcd/logos/channels/JUNIOR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/JUNIOR_m.glcd b/graphlcd/logos/channels/JUNIOR_m.glcd
index 9fd377b..9fd377b 100644
--- a/graphlcd/logos/JUNIOR_m.glcd
+++ b/graphlcd/logos/channels/JUNIOR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/JUNIOR_v2_l.glcd b/graphlcd/logos/channels/JUNIOR_v2_l.glcd
index 26c3666..26c3666 100644
--- a/graphlcd/logos/JUNIOR_v2_l.glcd
+++ b/graphlcd/logos/channels/JUNIOR_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/JUWELO_TV_l.glcd b/graphlcd/logos/channels/JUWELO_TV_l.glcd
index 9ce22c9..9ce22c9 100644
--- a/graphlcd/logos/JUWELO_TV_l.glcd
+++ b/graphlcd/logos/channels/JUWELO_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/JUWELO_TV_m.glcd b/graphlcd/logos/channels/JUWELO_TV_m.glcd
index 4099d7b..4099d7b 100644
--- a/graphlcd/logos/JUWELO_TV_m.glcd
+++ b/graphlcd/logos/channels/JUWELO_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL_1_AUSTRIA_l.glcd b/graphlcd/logos/channels/KABEL_1_AUSTRIA_l.glcd
index 628df5e..628df5e 100644
--- a/graphlcd/logos/KABEL_1_AUSTRIA_l.glcd
+++ b/graphlcd/logos/channels/KABEL_1_AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL_1_AUSTRIA_m.glcd b/graphlcd/logos/channels/KABEL_1_AUSTRIA_m.glcd
index b57f2bd..b57f2bd 100644
--- a/graphlcd/logos/KABEL_1_AUSTRIA_m.glcd
+++ b/graphlcd/logos/channels/KABEL_1_AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL_1_HD_l.glcd b/graphlcd/logos/channels/KABEL_1_HD_l.glcd
index ee1eaba..ee1eaba 100644
--- a/graphlcd/logos/KABEL_1_HD_l.glcd
+++ b/graphlcd/logos/channels/KABEL_1_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL_1_SCHWEIZ_l.glcd b/graphlcd/logos/channels/KABEL_1_SCHWEIZ_l.glcd
index 063c594..063c594 100644
--- a/graphlcd/logos/KABEL_1_SCHWEIZ_l.glcd
+++ b/graphlcd/logos/channels/KABEL_1_SCHWEIZ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL_1_SCHWEIZ_m.glcd b/graphlcd/logos/channels/KABEL_1_SCHWEIZ_m.glcd
index 97ad2c7..97ad2c7 100644
--- a/graphlcd/logos/KABEL_1_SCHWEIZ_m.glcd
+++ b/graphlcd/logos/channels/KABEL_1_SCHWEIZ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL_1_l.glcd b/graphlcd/logos/channels/KABEL_1_l.glcd
index 032c5fe..032c5fe 100644
--- a/graphlcd/logos/KABEL_1_l.glcd
+++ b/graphlcd/logos/channels/KABEL_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL_1_m.glcd b/graphlcd/logos/channels/KABEL_1_m.glcd
index 667579c..667579c 100644
--- a/graphlcd/logos/KABEL_1_m.glcd
+++ b/graphlcd/logos/channels/KABEL_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL_1v2_l.glcd b/graphlcd/logos/channels/KABEL_1v2_l.glcd
index e83f38b..e83f38b 100644
--- a/graphlcd/logos/KABEL_1v2_l.glcd
+++ b/graphlcd/logos/channels/KABEL_1v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KABEL_1v2_m.glcd b/graphlcd/logos/channels/KABEL_1v2_m.glcd
index 5be531b..5be531b 100644
--- a/graphlcd/logos/KABEL_1v2_m.glcd
+++ b/graphlcd/logos/channels/KABEL_1v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KIKA_l.glcd b/graphlcd/logos/channels/KIKA_l.glcd
index 4cba709..4cba709 100644
--- a/graphlcd/logos/KIKA_l.glcd
+++ b/graphlcd/logos/channels/KIKA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KIKA_m.glcd b/graphlcd/logos/channels/KIKA_m.glcd
index 96f71c9..96f71c9 100644
--- a/graphlcd/logos/KIKA_m.glcd
+++ b/graphlcd/logos/channels/KIKA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KINK_FM_l.glcd b/graphlcd/logos/channels/KINK_FM_l.glcd
index d1b9e99..d1b9e99 100644
--- a/graphlcd/logos/KINK_FM_l.glcd
+++ b/graphlcd/logos/channels/KINK_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KINK_FM_m.glcd b/graphlcd/logos/channels/KINK_FM_m.glcd
index f9ddd52..f9ddd52 100644
--- a/graphlcd/logos/KINK_FM_m.glcd
+++ b/graphlcd/logos/channels/KINK_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KINOWELT_l.glcd b/graphlcd/logos/channels/KINOWELT_l.glcd
index e0f4f33..e0f4f33 100644
--- a/graphlcd/logos/KINOWELT_l.glcd
+++ b/graphlcd/logos/channels/KINOWELT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KINOWELT_m.glcd b/graphlcd/logos/channels/KINOWELT_m.glcd
index a53866c..a53866c 100644
--- a/graphlcd/logos/KINOWELT_m.glcd
+++ b/graphlcd/logos/channels/KINOWELT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KIRAKA_l.glcd b/graphlcd/logos/channels/KIRAKA_l.glcd
index 8b52850..8b52850 100644
--- a/graphlcd/logos/KIRAKA_l.glcd
+++ b/graphlcd/logos/channels/KIRAKA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KIRAKA_m.glcd b/graphlcd/logos/channels/KIRAKA_m.glcd
index 9f1afa9..9f1afa9 100644
--- a/graphlcd/logos/KIRAKA_m.glcd
+++ b/graphlcd/logos/channels/KIRAKA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KLASSIK_RADIO_l.glcd b/graphlcd/logos/channels/KLASSIK_RADIO_l.glcd
index 808e6da..808e6da 100644
--- a/graphlcd/logos/KLASSIK_RADIO_l.glcd
+++ b/graphlcd/logos/channels/KLASSIK_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KLASSIK_RADIO_m.glcd b/graphlcd/logos/channels/KLASSIK_RADIO_m.glcd
index a6440b3..a6440b3 100644
--- a/graphlcd/logos/KLASSIK_RADIO_m.glcd
+++ b/graphlcd/logos/channels/KLASSIK_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KLASSIK_RADIOv2_l.glcd b/graphlcd/logos/channels/KLASSIK_RADIOv2_l.glcd
index b945bf9..b945bf9 100644
--- a/graphlcd/logos/KLASSIK_RADIOv2_l.glcd
+++ b/graphlcd/logos/channels/KLASSIK_RADIOv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KRIMICO_l.glcd b/graphlcd/logos/channels/KRIMICO_l.glcd
index 20d6a99..20d6a99 100644
--- a/graphlcd/logos/KRIMICO_l.glcd
+++ b/graphlcd/logos/channels/KRIMICO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KRIMICO_m.glcd b/graphlcd/logos/channels/KRIMICO_m.glcd
index cdff586..cdff586 100644
--- a/graphlcd/logos/KRIMICO_m.glcd
+++ b/graphlcd/logos/channels/KRIMICO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KTO_l.glcd b/graphlcd/logos/channels/KTO_l.glcd
index a6c3170..a6c3170 100644
--- a/graphlcd/logos/KTO_l.glcd
+++ b/graphlcd/logos/channels/KTO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KTO_m.glcd b/graphlcd/logos/channels/KTO_m.glcd
index 4222646..4222646 100644
--- a/graphlcd/logos/KTO_m.glcd
+++ b/graphlcd/logos/channels/KTO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/KULTURRADIO_l.glcd b/graphlcd/logos/channels/KULTURRADIO_l.glcd
index 7d6e881..7d6e881 100644
--- a/graphlcd/logos/KULTURRADIO_l.glcd
+++ b/graphlcd/logos/channels/KULTURRADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/KULTURRADIO_m.glcd b/graphlcd/logos/channels/KULTURRADIO_m.glcd
index 645a358..645a358 100644
--- a/graphlcd/logos/KULTURRADIO_m.glcd
+++ b/graphlcd/logos/channels/KULTURRADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/K_TV_l.glcd b/graphlcd/logos/channels/K_TV_l.glcd
index b22e83c..b22e83c 100644
--- a/graphlcd/logos/K_TV_l.glcd
+++ b/graphlcd/logos/channels/K_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/K_TV_m.glcd b/graphlcd/logos/channels/K_TV_m.glcd
index 42a98f0..42a98f0 100644
--- a/graphlcd/logos/K_TV_m.glcd
+++ b/graphlcd/logos/channels/K_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/K_TV_v2_m.glcd b/graphlcd/logos/channels/K_TV_v2_m.glcd
index 9e07882..9e07882 100644
--- a/graphlcd/logos/K_TV_v2_m.glcd
+++ b/graphlcd/logos/channels/K_TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/L1MBURG_l.glcd b/graphlcd/logos/channels/L1MBURG_l.glcd
index 0e50e3a..0e50e3a 100644
--- a/graphlcd/logos/L1MBURG_l.glcd
+++ b/graphlcd/logos/channels/L1MBURG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/L1MBURG_m.glcd b/graphlcd/logos/channels/L1MBURG_m.glcd
index 984a117..984a117 100644
--- a/graphlcd/logos/L1MBURG_m.glcd
+++ b/graphlcd/logos/channels/L1MBURG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LCI_l.glcd b/graphlcd/logos/channels/LCI_l.glcd
index a216ea8..a216ea8 100644
--- a/graphlcd/logos/LCI_l.glcd
+++ b/graphlcd/logos/channels/LCI_l.glcd
Binary files differ
diff --git a/graphlcd/logos/LCI_m.glcd b/graphlcd/logos/channels/LCI_m.glcd
index 69c0db2..69c0db2 100644
--- a/graphlcd/logos/LCI_m.glcd
+++ b/graphlcd/logos/channels/LCI_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LCP_l.glcd b/graphlcd/logos/channels/LCP_l.glcd
index a216ea8..a216ea8 100644
--- a/graphlcd/logos/LCP_l.glcd
+++ b/graphlcd/logos/channels/LCP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/LCP_m.glcd b/graphlcd/logos/channels/LCP_m.glcd
index 69c0db2..69c0db2 100644
--- a/graphlcd/logos/LCP_m.glcd
+++ b/graphlcd/logos/channels/LCP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LIBERTY_TV_l.glcd b/graphlcd/logos/channels/LIBERTY_TV_l.glcd
index c905a56..c905a56 100644
--- a/graphlcd/logos/LIBERTY_TV_l.glcd
+++ b/graphlcd/logos/channels/LIBERTY_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/LIBERTY_TV_m.glcd b/graphlcd/logos/channels/LIBERTY_TV_m.glcd
index e4ea29d..e4ea29d 100644
--- a/graphlcd/logos/LIBERTY_TV_m.glcd
+++ b/graphlcd/logos/channels/LIBERTY_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LIBERTY_TV_v2_m.glcd b/graphlcd/logos/channels/LIBERTY_TV_v2_m.glcd
index 6eafbc9..6eafbc9 100644
--- a/graphlcd/logos/LIBERTY_TV_v2_m.glcd
+++ b/graphlcd/logos/channels/LIBERTY_TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/LIVE_ 1_m.glcd b/graphlcd/logos/channels/LIVE_ 1_m.glcd
index 39ad718..39ad718 100644
--- a/graphlcd/logos/LIVE_ 1_m.glcd
+++ b/graphlcd/logos/channels/LIVE_ 1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MATCH TV_m.glcd b/graphlcd/logos/channels/MATCH TV_m.glcd
index c2e9462..c2e9462 100644
--- a/graphlcd/logos/MATCH TV_m.glcd
+++ b/graphlcd/logos/channels/MATCH TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR1_SACHSEN_l.glcd b/graphlcd/logos/channels/MDR1_SACHSEN_l.glcd
index 455130f..455130f 100644
--- a/graphlcd/logos/MDR1_SACHSEN_l.glcd
+++ b/graphlcd/logos/channels/MDR1_SACHSEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR1_SACHSEN_m.glcd b/graphlcd/logos/channels/MDR1_SACHSEN_m.glcd
index 8914bae..8914bae 100644
--- a/graphlcd/logos/MDR1_SACHSEN_m.glcd
+++ b/graphlcd/logos/channels/MDR1_SACHSEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR1_SA_ANHALT_l.glcd b/graphlcd/logos/channels/MDR1_SA_ANHALT_l.glcd
index bbc52b9..bbc52b9 100644
--- a/graphlcd/logos/MDR1_SA_ANHALT_l.glcd
+++ b/graphlcd/logos/channels/MDR1_SA_ANHALT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR1_SA_ANHALT_m.glcd b/graphlcd/logos/channels/MDR1_SA_ANHALT_m.glcd
index 753d9ae..753d9ae 100644
--- a/graphlcd/logos/MDR1_SA_ANHALT_m.glcd
+++ b/graphlcd/logos/channels/MDR1_SA_ANHALT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR1_THUERINGEN_l.glcd b/graphlcd/logos/channels/MDR1_THUERINGEN_l.glcd
index 10fee6b..10fee6b 100644
--- a/graphlcd/logos/MDR1_THUERINGEN_l.glcd
+++ b/graphlcd/logos/channels/MDR1_THUERINGEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR1_THUERINGEN_m.glcd b/graphlcd/logos/channels/MDR1_THUERINGEN_m.glcd
index 7fef753..7fef753 100644
--- a/graphlcd/logos/MDR1_THUERINGEN_m.glcd
+++ b/graphlcd/logos/channels/MDR1_THUERINGEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FERNSEHEN_SA_l.glcd b/graphlcd/logos/channels/MDR_FERNSEHEN_SA_l.glcd
index 3f684e2..3f684e2 100644
--- a/graphlcd/logos/MDR_FERNSEHEN_SA_l.glcd
+++ b/graphlcd/logos/channels/MDR_FERNSEHEN_SA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FERNSEHEN_SA_m.glcd b/graphlcd/logos/channels/MDR_FERNSEHEN_SA_m.glcd
index 80635a9..80635a9 100644
--- a/graphlcd/logos/MDR_FERNSEHEN_SA_m.glcd
+++ b/graphlcd/logos/channels/MDR_FERNSEHEN_SA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FERNSEHEN_S_l.glcd b/graphlcd/logos/channels/MDR_FERNSEHEN_S_l.glcd
index 5742792..5742792 100644
--- a/graphlcd/logos/MDR_FERNSEHEN_S_l.glcd
+++ b/graphlcd/logos/channels/MDR_FERNSEHEN_S_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FERNSEHEN_S_m.glcd b/graphlcd/logos/channels/MDR_FERNSEHEN_S_m.glcd
index a4779f4..a4779f4 100644
--- a/graphlcd/logos/MDR_FERNSEHEN_S_m.glcd
+++ b/graphlcd/logos/channels/MDR_FERNSEHEN_S_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FERNSEHEN_TH_l.glcd b/graphlcd/logos/channels/MDR_FERNSEHEN_TH_l.glcd
index 10fee6b..10fee6b 100644
--- a/graphlcd/logos/MDR_FERNSEHEN_TH_l.glcd
+++ b/graphlcd/logos/channels/MDR_FERNSEHEN_TH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FERNSEHEN_TH_m.glcd b/graphlcd/logos/channels/MDR_FERNSEHEN_TH_m.glcd
index 7fef753..7fef753 100644
--- a/graphlcd/logos/MDR_FERNSEHEN_TH_m.glcd
+++ b/graphlcd/logos/channels/MDR_FERNSEHEN_TH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FERNSEHEN_l.glcd b/graphlcd/logos/channels/MDR_FERNSEHEN_l.glcd
index b13f745..b13f745 100644
--- a/graphlcd/logos/MDR_FERNSEHEN_l.glcd
+++ b/graphlcd/logos/channels/MDR_FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FERNSEHEN_m.glcd b/graphlcd/logos/channels/MDR_FERNSEHEN_m.glcd
index 6c173bd..6c173bd 100644
--- a/graphlcd/logos/MDR_FERNSEHEN_m.glcd
+++ b/graphlcd/logos/channels/MDR_FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FIGARO_l.glcd b/graphlcd/logos/channels/MDR_FIGARO_l.glcd
index 21acb6c..21acb6c 100644
--- a/graphlcd/logos/MDR_FIGARO_l.glcd
+++ b/graphlcd/logos/channels/MDR_FIGARO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_FIGARO_m.glcd b/graphlcd/logos/channels/MDR_FIGARO_m.glcd
index e8d6c15..e8d6c15 100644
--- a/graphlcd/logos/MDR_FIGARO_m.glcd
+++ b/graphlcd/logos/channels/MDR_FIGARO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_INFO_l.glcd b/graphlcd/logos/channels/MDR_INFO_l.glcd
index 4abb98a..4abb98a 100644
--- a/graphlcd/logos/MDR_INFO_l.glcd
+++ b/graphlcd/logos/channels/MDR_INFO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_INFO_m.glcd b/graphlcd/logos/channels/MDR_INFO_m.glcd
index bfbb0d8..bfbb0d8 100644
--- a/graphlcd/logos/MDR_INFO_m.glcd
+++ b/graphlcd/logos/channels/MDR_INFO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_KLASSIK_l.glcd b/graphlcd/logos/channels/MDR_KLASSIK_l.glcd
index cf8a527..cf8a527 100644
--- a/graphlcd/logos/MDR_KLASSIK_l.glcd
+++ b/graphlcd/logos/channels/MDR_KLASSIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_KLASSIK_m.glcd b/graphlcd/logos/channels/MDR_KLASSIK_m.glcd
index 2f33f64..2f33f64 100644
--- a/graphlcd/logos/MDR_KLASSIK_m.glcd
+++ b/graphlcd/logos/channels/MDR_KLASSIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_SPUTNIK_l.glcd b/graphlcd/logos/channels/MDR_SPUTNIK_l.glcd
index c65e40b..c65e40b 100644
--- a/graphlcd/logos/MDR_SPUTNIK_l.glcd
+++ b/graphlcd/logos/channels/MDR_SPUTNIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_SPUTNIK_m.glcd b/graphlcd/logos/channels/MDR_SPUTNIK_m.glcd
index e105630..e105630 100644
--- a/graphlcd/logos/MDR_SPUTNIK_m.glcd
+++ b/graphlcd/logos/channels/MDR_SPUTNIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MDR_l.glcd b/graphlcd/logos/channels/MDR_l.glcd
index a971a26..a971a26 100644
--- a/graphlcd/logos/MDR_l.glcd
+++ b/graphlcd/logos/channels/MDR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MEDIA _TROPICAL_l.glcd b/graphlcd/logos/channels/MEDIA _TROPICAL_l.glcd
index a8f0761..a8f0761 100644
--- a/graphlcd/logos/MEDIA _TROPICAL_l.glcd
+++ b/graphlcd/logos/channels/MEDIA _TROPICAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MEDIA_TROPICAL_m.glcd b/graphlcd/logos/channels/MEDIA_TROPICAL_m.glcd
index 33ae45e..33ae45e 100644
--- a/graphlcd/logos/MEDIA_TROPICAL_m.glcd
+++ b/graphlcd/logos/channels/MEDIA_TROPICAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MEIN_TV_SHOP_l.glcd b/graphlcd/logos/channels/MEIN_TV_SHOP_l.glcd
index ff75a00..ff75a00 100644
--- a/graphlcd/logos/MEIN_TV_SHOP_l.glcd
+++ b/graphlcd/logos/channels/MEIN_TV_SHOP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MEIN_TV_SHOP_m.glcd b/graphlcd/logos/channels/MEIN_TV_SHOP_m.glcd
index ce328ee..ce328ee 100644
--- a/graphlcd/logos/MEIN_TV_SHOP_m.glcd
+++ b/graphlcd/logos/channels/MEIN_TV_SHOP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MGM_l.glcd b/graphlcd/logos/channels/MGM_l.glcd
index 68b7285..68b7285 100644
--- a/graphlcd/logos/MGM_l.glcd
+++ b/graphlcd/logos/channels/MGM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MGM_lv2.glcd b/graphlcd/logos/channels/MGM_lv2.glcd
index 671a722..671a722 100644
--- a/graphlcd/logos/MGM_lv2.glcd
+++ b/graphlcd/logos/channels/MGM_lv2.glcd
Binary files differ
diff --git a/graphlcd/logos/MGM_m.glcd b/graphlcd/logos/channels/MGM_m.glcd
index 3a7aee8..3a7aee8 100644
--- a/graphlcd/logos/MGM_m.glcd
+++ b/graphlcd/logos/channels/MGM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MOTORS_TV_l.glcd b/graphlcd/logos/channels/MOTORS_TV_l.glcd
index bfb4ca8..bfb4ca8 100644
--- a/graphlcd/logos/MOTORS_TV_l.glcd
+++ b/graphlcd/logos/channels/MOTORS_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MOTORS_TV_m.glcd b/graphlcd/logos/channels/MOTORS_TV_m.glcd
index de02e3e..de02e3e 100644
--- a/graphlcd/logos/MOTORS_TV_m.glcd
+++ b/graphlcd/logos/channels/MOTORS_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MOTORS_TV_v2_m.glcd b/graphlcd/logos/channels/MOTORS_TV_v2_m.glcd
index 34e196c..34e196c 100644
--- a/graphlcd/logos/MOTORS_TV_v2_m.glcd
+++ b/graphlcd/logos/channels/MOTORS_TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MOTORVISION_TV_l.glcd b/graphlcd/logos/channels/MOTORVISION_TV_l.glcd
index 47dbb78..47dbb78 100644
--- a/graphlcd/logos/MOTORVISION_TV_l.glcd
+++ b/graphlcd/logos/channels/MOTORVISION_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_2_POP_CHANNEL_l.glcd b/graphlcd/logos/channels/MTV_2_POP_CHANNEL_l.glcd
index 118119d..118119d 100644
--- a/graphlcd/logos/MTV_2_POP_CHANNEL_l.glcd
+++ b/graphlcd/logos/channels/MTV_2_POP_CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_2_POP_CHANNEL_m.glcd b/graphlcd/logos/channels/MTV_2_POP_CHANNEL_m.glcd
index f262291..f262291 100644
--- a/graphlcd/logos/MTV_2_POP_CHANNEL_m.glcd
+++ b/graphlcd/logos/channels/MTV_2_POP_CHANNEL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_2_l.glcd b/graphlcd/logos/channels/MTV_2_l.glcd
index 22cebd0..22cebd0 100644
--- a/graphlcd/logos/MTV_2_l.glcd
+++ b/graphlcd/logos/channels/MTV_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_AUSTRIA_l.glcd b/graphlcd/logos/channels/MTV_AUSTRIA_l.glcd
index 084d75f..084d75f 100644
--- a/graphlcd/logos/MTV_AUSTRIA_l.glcd
+++ b/graphlcd/logos/channels/MTV_AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_AUSTRIA_m.glcd b/graphlcd/logos/channels/MTV_AUSTRIA_m.glcd
index 42acde4..42acde4 100644
--- a/graphlcd/logos/MTV_AUSTRIA_m.glcd
+++ b/graphlcd/logos/channels/MTV_AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_BASE_l.glcd b/graphlcd/logos/channels/MTV_BASE_l.glcd
index c486eb5..c486eb5 100644
--- a/graphlcd/logos/MTV_BASE_l.glcd
+++ b/graphlcd/logos/channels/MTV_BASE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_BASE_m.glcd b/graphlcd/logos/channels/MTV_BASE_m.glcd
index f2f3ce4..f2f3ce4 100644
--- a/graphlcd/logos/MTV_BASE_m.glcd
+++ b/graphlcd/logos/channels/MTV_BASE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_CENTRAL_l.glcd b/graphlcd/logos/channels/MTV_CENTRAL_l.glcd
index 3fb8e3f..3fb8e3f 100644
--- a/graphlcd/logos/MTV_CENTRAL_l.glcd
+++ b/graphlcd/logos/channels/MTV_CENTRAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_CENTRAL_m.glcd b/graphlcd/logos/channels/MTV_CENTRAL_m.glcd
index f2de32b..f2de32b 100644
--- a/graphlcd/logos/MTV_CENTRAL_m.glcd
+++ b/graphlcd/logos/channels/MTV_CENTRAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_CENTRALv2_m.glcd b/graphlcd/logos/channels/MTV_CENTRALv2_m.glcd
index 6f5fa72..6f5fa72 100644
--- a/graphlcd/logos/MTV_CENTRALv2_m.glcd
+++ b/graphlcd/logos/channels/MTV_CENTRALv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_DANCE_l.glcd b/graphlcd/logos/channels/MTV_DANCE_l.glcd
index be83922..be83922 100644
--- a/graphlcd/logos/MTV_DANCE_l.glcd
+++ b/graphlcd/logos/channels/MTV_DANCE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_F_l.glcd b/graphlcd/logos/channels/MTV_F_l.glcd
index f140bf6..f140bf6 100644
--- a/graphlcd/logos/MTV_F_l.glcd
+++ b/graphlcd/logos/channels/MTV_F_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_GERMANY_l.glcd b/graphlcd/logos/channels/MTV_GERMANY_l.glcd
index 084d75f..084d75f 100644
--- a/graphlcd/logos/MTV_GERMANY_l.glcd
+++ b/graphlcd/logos/channels/MTV_GERMANY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_GERMANY_m.glcd b/graphlcd/logos/channels/MTV_GERMANY_m.glcd
index 42acde4..42acde4 100644
--- a/graphlcd/logos/MTV_GERMANY_m.glcd
+++ b/graphlcd/logos/channels/MTV_GERMANY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_HITS_l.glcd b/graphlcd/logos/channels/MTV_HITS_l.glcd
index c15ec4d..c15ec4d 100644
--- a/graphlcd/logos/MTV_HITS_l.glcd
+++ b/graphlcd/logos/channels/MTV_HITS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_HITS_m.glcd b/graphlcd/logos/channels/MTV_HITS_m.glcd
index bdc6a67..bdc6a67 100644
--- a/graphlcd/logos/MTV_HITS_m.glcd
+++ b/graphlcd/logos/channels/MTV_HITS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_l.glcd b/graphlcd/logos/channels/MTV_l.glcd
index 487d888..487d888 100644
--- a/graphlcd/logos/MTV_l.glcd
+++ b/graphlcd/logos/channels/MTV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/MTV_m.glcd b/graphlcd/logos/channels/MTV_m.glcd
index abf7142..abf7142 100644
--- a/graphlcd/logos/MTV_m.glcd
+++ b/graphlcd/logos/channels/MTV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/MULTIVISION_m.glcd b/graphlcd/logos/channels/MULTIVISION_m.glcd
index 33a286a..33a286a 100644
--- a/graphlcd/logos/MULTIVISION_m.glcd
+++ b/graphlcd/logos/channels/MULTIVISION_m.glcd
Binary files differ
diff --git a/graphlcd/logos/N24_l.glcd b/graphlcd/logos/channels/N24_l.glcd
index 4d803f6..4d803f6 100644
--- a/graphlcd/logos/N24_l.glcd
+++ b/graphlcd/logos/channels/N24_l.glcd
Binary files differ
diff --git a/graphlcd/logos/N24_m.glcd b/graphlcd/logos/channels/N24_m.glcd
index c5f839e..c5f839e 100644
--- a/graphlcd/logos/N24_m.glcd
+++ b/graphlcd/logos/channels/N24_m.glcd
Binary files differ
diff --git a/graphlcd/logos/N24_v2_l.glcd b/graphlcd/logos/channels/N24_v2_l.glcd
index c556010..c556010 100644
--- a/graphlcd/logos/N24_v2_l.glcd
+++ b/graphlcd/logos/channels/N24_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NASN_l.glcd b/graphlcd/logos/channels/NASN_l.glcd
index cdba969..cdba969 100644
--- a/graphlcd/logos/NASN_l.glcd
+++ b/graphlcd/logos/channels/NASN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NASN_m.glcd b/graphlcd/logos/channels/NASN_m.glcd
index 6600d85..6600d85 100644
--- a/graphlcd/logos/NASN_m.glcd
+++ b/graphlcd/logos/channels/NASN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NATIONAL_GEOGRAPHIC_HD_l.glcd b/graphlcd/logos/channels/NATIONAL_GEOGRAPHIC_HD_l.glcd
index 088c181..088c181 100644
--- a/graphlcd/logos/NATIONAL_GEOGRAPHIC_HD_l.glcd
+++ b/graphlcd/logos/channels/NATIONAL_GEOGRAPHIC_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NATIONAL_GEOGRAPHIC_l.glcd b/graphlcd/logos/channels/NATIONAL_GEOGRAPHIC_l.glcd
index 897e687..897e687 100644
--- a/graphlcd/logos/NATIONAL_GEOGRAPHIC_l.glcd
+++ b/graphlcd/logos/channels/NATIONAL_GEOGRAPHIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NATIONAL_GEOGRAPHIC_m.glcd b/graphlcd/logos/channels/NATIONAL_GEOGRAPHIC_m.glcd
index 1d6caa0..1d6caa0 100644
--- a/graphlcd/logos/NATIONAL_GEOGRAPHIC_m.glcd
+++ b/graphlcd/logos/channels/NATIONAL_GEOGRAPHIC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NATIONAL_GEOGRAPHICv2_l .glcd b/graphlcd/logos/channels/NATIONAL_GEOGRAPHICv2_l .glcd
index c90abe7..c90abe7 100644
--- a/graphlcd/logos/NATIONAL_GEOGRAPHICv2_l .glcd
+++ b/graphlcd/logos/channels/NATIONAL_GEOGRAPHICv2_l .glcd
Binary files differ
diff --git a/graphlcd/logos/NAT_GEO_WILD_l.glcd b/graphlcd/logos/channels/NAT_GEO_WILD_l.glcd
index 8ceb052..8ceb052 100644
--- a/graphlcd/logos/NAT_GEO_WILD_l.glcd
+++ b/graphlcd/logos/channels/NAT_GEO_WILD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NBC_l.glcd b/graphlcd/logos/channels/NBC_l.glcd
index cba7b8e..cba7b8e 100644
--- a/graphlcd/logos/NBC_l.glcd
+++ b/graphlcd/logos/channels/NBC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NBC_m.glcd b/graphlcd/logos/channels/NBC_m.glcd
index f0a5e68..f0a5e68 100644
--- a/graphlcd/logos/NBC_m.glcd
+++ b/graphlcd/logos/channels/NBC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_1_NIEDERS_l.glcd b/graphlcd/logos/channels/NDR_1_NIEDERS_l.glcd
index a374e69..a374e69 100644
--- a/graphlcd/logos/NDR_1_NIEDERS_l.glcd
+++ b/graphlcd/logos/channels/NDR_1_NIEDERS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_1_NIEDERS_m.glcd b/graphlcd/logos/channels/NDR_1_NIEDERS_m.glcd
index 013aedf..013aedf 100644
--- a/graphlcd/logos/NDR_1_NIEDERS_m.glcd
+++ b/graphlcd/logos/channels/NDR_1_NIEDERS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_1_RADIO_MV_l.glcd b/graphlcd/logos/channels/NDR_1_RADIO_MV_l.glcd
index b5d6c28..b5d6c28 100644
--- a/graphlcd/logos/NDR_1_RADIO_MV_l.glcd
+++ b/graphlcd/logos/channels/NDR_1_RADIO_MV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_1_RADIO_MV_m.glcd b/graphlcd/logos/channels/NDR_1_RADIO_MV_m.glcd
index c1f5d93..c1f5d93 100644
--- a/graphlcd/logos/NDR_1_RADIO_MV_m.glcd
+++ b/graphlcd/logos/channels/NDR_1_RADIO_MV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_1_WELLE_NORD_l.glcd b/graphlcd/logos/channels/NDR_1_WELLE_NORD_l.glcd
index ae3be53..ae3be53 100644
--- a/graphlcd/logos/NDR_1_WELLE_NORD_l.glcd
+++ b/graphlcd/logos/channels/NDR_1_WELLE_NORD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_1_WELLE_NORD_m.glcd b/graphlcd/logos/channels/NDR_1_WELLE_NORD_m.glcd
index 437b693..437b693 100644
--- a/graphlcd/logos/NDR_1_WELLE_NORD_m.glcd
+++ b/graphlcd/logos/channels/NDR_1_WELLE_NORD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_2_l.glcd b/graphlcd/logos/channels/NDR_2_l.glcd
index 68a2ff2..68a2ff2 100644
--- a/graphlcd/logos/NDR_2_l.glcd
+++ b/graphlcd/logos/channels/NDR_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_2_m.glcd b/graphlcd/logos/channels/NDR_2_m.glcd
index 1948fad..1948fad 100644
--- a/graphlcd/logos/NDR_2_m.glcd
+++ b/graphlcd/logos/channels/NDR_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_90_3_l.glcd b/graphlcd/logos/channels/NDR_90_3_l.glcd
index 4cfdb76..4cfdb76 100644
--- a/graphlcd/logos/NDR_90_3_l.glcd
+++ b/graphlcd/logos/channels/NDR_90_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_90_3_m.glcd b/graphlcd/logos/channels/NDR_90_3_m.glcd
index 7deaf08..7deaf08 100644
--- a/graphlcd/logos/NDR_90_3_m.glcd
+++ b/graphlcd/logos/channels/NDR_90_3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_HH_l.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_HH_l.glcd
index 5d93658..5d93658 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_HH_l.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_HH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_HH_m.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_HH_m.glcd
index 7784e4b..7784e4b 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_HH_m.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_HH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_MV_l.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_MV_l.glcd
index b0b82fe..b0b82fe 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_MV_l.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_MV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_MV_m.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_MV_m.glcd
index 7e0a763..7e0a763 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_MV_m.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_MV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_NDS_l.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_NDS_l.glcd
index 1960b76..1960b76 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_NDS_l.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_NDS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_NDS_m.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_NDS_m.glcd
index 77db508..77db508 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_NDS_m.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_NDS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_SH_l.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_SH_l.glcd
index d834fa4..d834fa4 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_SH_l.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_SH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_SH_m.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_SH_m.glcd
index e1e30b8..e1e30b8 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_SH_m.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_SH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_l.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_l.glcd
index 999ad4d..999ad4d 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_l.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_FERNSEHEN_m.glcd b/graphlcd/logos/channels/NDR_FERNSEHEN_m.glcd
index aeb6eb8..aeb6eb8 100644
--- a/graphlcd/logos/NDR_FERNSEHEN_m.glcd
+++ b/graphlcd/logos/channels/NDR_FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_INFO_SPEZIAL_l.glcd b/graphlcd/logos/channels/NDR_INFO_SPEZIAL_l.glcd
index 2f93656..2f93656 100644
--- a/graphlcd/logos/NDR_INFO_SPEZIAL_l.glcd
+++ b/graphlcd/logos/channels/NDR_INFO_SPEZIAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_INFO_SPEZIAL_m.glcd b/graphlcd/logos/channels/NDR_INFO_SPEZIAL_m.glcd
index 2a26de3..2a26de3 100644
--- a/graphlcd/logos/NDR_INFO_SPEZIAL_m.glcd
+++ b/graphlcd/logos/channels/NDR_INFO_SPEZIAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_INFO_l.glcd b/graphlcd/logos/channels/NDR_INFO_l.glcd
index a97bfd4..a97bfd4 100644
--- a/graphlcd/logos/NDR_INFO_l.glcd
+++ b/graphlcd/logos/channels/NDR_INFO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_INFO_m.glcd b/graphlcd/logos/channels/NDR_INFO_m.glcd
index 23b9768..23b9768 100644
--- a/graphlcd/logos/NDR_INFO_m.glcd
+++ b/graphlcd/logos/channels/NDR_INFO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_KULTUR_l.glcd b/graphlcd/logos/channels/NDR_KULTUR_l.glcd
index ae9ad90..ae9ad90 100644
--- a/graphlcd/logos/NDR_KULTUR_l.glcd
+++ b/graphlcd/logos/channels/NDR_KULTUR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_KULTUR_m.glcd b/graphlcd/logos/channels/NDR_KULTUR_m.glcd
index 696d975..696d975 100644
--- a/graphlcd/logos/NDR_KULTUR_m.glcd
+++ b/graphlcd/logos/channels/NDR_KULTUR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NDR_l.glcd b/graphlcd/logos/channels/NDR_l.glcd
index 8765cf8..8765cf8 100644
--- a/graphlcd/logos/NDR_l.glcd
+++ b/graphlcd/logos/channels/NDR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ND_1_WELLE_NORD_l.glcd b/graphlcd/logos/channels/ND_1_WELLE_NORD_l.glcd
index ae3be53..ae3be53 100644
--- a/graphlcd/logos/ND_1_WELLE_NORD_l.glcd
+++ b/graphlcd/logos/channels/ND_1_WELLE_NORD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ND_1_WELLE_NORD_m.glcd b/graphlcd/logos/channels/ND_1_WELLE_NORD_m.glcd
index 437b693..437b693 100644
--- a/graphlcd/logos/ND_1_WELLE_NORD_m.glcd
+++ b/graphlcd/logos/channels/ND_1_WELLE_NORD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NED_1_l.glcd b/graphlcd/logos/channels/NED_1_l.glcd
index cc646c9..cc646c9 100644
--- a/graphlcd/logos/NED_1_l.glcd
+++ b/graphlcd/logos/channels/NED_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NED_1_m.glcd b/graphlcd/logos/channels/NED_1_m.glcd
index 5d3c4f7..5d3c4f7 100644
--- a/graphlcd/logos/NED_1_m.glcd
+++ b/graphlcd/logos/channels/NED_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NED_2_l.glcd b/graphlcd/logos/channels/NED_2_l.glcd
index cc4b26b..cc4b26b 100644
--- a/graphlcd/logos/NED_2_l.glcd
+++ b/graphlcd/logos/channels/NED_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NED_2_m.glcd b/graphlcd/logos/channels/NED_2_m.glcd
index d125a6b..d125a6b 100644
--- a/graphlcd/logos/NED_2_m.glcd
+++ b/graphlcd/logos/channels/NED_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NED_3_l.glcd b/graphlcd/logos/channels/NED_3_l.glcd
index 83a391f..83a391f 100644
--- a/graphlcd/logos/NED_3_l.glcd
+++ b/graphlcd/logos/channels/NED_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NED_3_m.glcd b/graphlcd/logos/channels/NED_3_m.glcd
index 35b3235..35b3235 100644
--- a/graphlcd/logos/NED_3_m.glcd
+++ b/graphlcd/logos/channels/NED_3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NET_5_l.glcd b/graphlcd/logos/channels/NET_5_l.glcd
index 373524f..373524f 100644
--- a/graphlcd/logos/NET_5_l.glcd
+++ b/graphlcd/logos/channels/NET_5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NET_5_m.glcd b/graphlcd/logos/channels/NET_5_m.glcd
index e3a7db3..e3a7db3 100644
--- a/graphlcd/logos/NET_5_m.glcd
+++ b/graphlcd/logos/channels/NET_5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NEUN_LIVE_l.glcd b/graphlcd/logos/channels/NEUN_LIVE_l.glcd
index 42f21c1..42f21c1 100644
--- a/graphlcd/logos/NEUN_LIVE_l.glcd
+++ b/graphlcd/logos/channels/NEUN_LIVE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NEUN_LIVE_m.glcd b/graphlcd/logos/channels/NEUN_LIVE_m.glcd
index b871163..b871163 100644
--- a/graphlcd/logos/NEUN_LIVE_m.glcd
+++ b/graphlcd/logos/channels/NEUN_LIVE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NEUN_LIVE_v2_m.glcd b/graphlcd/logos/channels/NEUN_LIVE_v2_m.glcd
index f0d6e86..f0d6e86 100644
--- a/graphlcd/logos/NEUN_LIVE_v2_m.glcd
+++ b/graphlcd/logos/channels/NEUN_LIVE_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NICKELODEON_l.glcd b/graphlcd/logos/channels/NICKELODEON_l.glcd
index f2fdc89..f2fdc89 100644
--- a/graphlcd/logos/NICKELODEON_l.glcd
+++ b/graphlcd/logos/channels/NICKELODEON_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NICKELODEON_m.glcd b/graphlcd/logos/channels/NICKELODEON_m.glcd
index 8253643..8253643 100644
--- a/graphlcd/logos/NICKELODEON_m.glcd
+++ b/graphlcd/logos/channels/NICKELODEON_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NICK_l.glcd b/graphlcd/logos/channels/NICK_l.glcd
index cf6dbda..cf6dbda 100644
--- a/graphlcd/logos/NICK_l.glcd
+++ b/graphlcd/logos/channels/NICK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NORDWEST_RADIO2_l.glcd b/graphlcd/logos/channels/NORDWEST_RADIO2_l.glcd
index c48ee07..c48ee07 100644
--- a/graphlcd/logos/NORDWEST_RADIO2_l.glcd
+++ b/graphlcd/logos/channels/NORDWEST_RADIO2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NORDWEST_RADIO_l.glcd b/graphlcd/logos/channels/NORDWEST_RADIO_l.glcd
index f1739be..f1739be 100644
--- a/graphlcd/logos/NORDWEST_RADIO_l.glcd
+++ b/graphlcd/logos/channels/NORDWEST_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NORDWEST_RADIO_m.glcd b/graphlcd/logos/channels/NORDWEST_RADIO_m.glcd
index 895000f..895000f 100644
--- a/graphlcd/logos/NORDWEST_RADIO_m.glcd
+++ b/graphlcd/logos/channels/NORDWEST_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NORDWEST_RADIOv2_m.glcd b/graphlcd/logos/channels/NORDWEST_RADIOv2_m.glcd
index 4c7a50e..4c7a50e 100644
--- a/graphlcd/logos/NORDWEST_RADIOv2_m.glcd
+++ b/graphlcd/logos/channels/NORDWEST_RADIOv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NRJ_HITS_l.glcd b/graphlcd/logos/channels/NRJ_HITS_l.glcd
index 0f1bd6c..0f1bd6c 100644
--- a/graphlcd/logos/NRJ_HITS_l.glcd
+++ b/graphlcd/logos/channels/NRJ_HITS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NRJ_l.glcd b/graphlcd/logos/channels/NRJ_l.glcd
index 7df7c0a..7df7c0a 100644
--- a/graphlcd/logos/NRJ_l.glcd
+++ b/graphlcd/logos/channels/NRJ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NRJ_m.glcd b/graphlcd/logos/channels/NRJ_m.glcd
index 5424d41..5424d41 100644
--- a/graphlcd/logos/NRJ_m.glcd
+++ b/graphlcd/logos/channels/NRJ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NTV_l.glcd b/graphlcd/logos/channels/NTV_l.glcd
index 1183167..1183167 100644
--- a/graphlcd/logos/NTV_l.glcd
+++ b/graphlcd/logos/channels/NTV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/NTV_m.glcd b/graphlcd/logos/channels/NTV_m.glcd
index 872793f..872793f 100644
--- a/graphlcd/logos/NTV_m.glcd
+++ b/graphlcd/logos/channels/NTV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/NTV_v2_m.glcd b/graphlcd/logos/channels/NTV_v2_m.glcd
index e063715..e063715 100644
--- a/graphlcd/logos/NTV_v2_m.glcd
+++ b/graphlcd/logos/channels/NTV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/N_JOY_l.glcd b/graphlcd/logos/channels/N_JOY_l.glcd
index d18a9b9..d18a9b9 100644
--- a/graphlcd/logos/N_JOY_l.glcd
+++ b/graphlcd/logos/channels/N_JOY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/N_JOY_m.glcd b/graphlcd/logos/channels/N_JOY_m.glcd
index d793145..d793145 100644
--- a/graphlcd/logos/N_JOY_m.glcd
+++ b/graphlcd/logos/channels/N_JOY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/N_JOYv2_l.glcd b/graphlcd/logos/channels/N_JOYv2_l.glcd
index 05d5fa6..05d5fa6 100644
--- a/graphlcd/logos/N_JOYv2_l.glcd
+++ b/graphlcd/logos/channels/N_JOYv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/OESTERREICH_1_l.glcd b/graphlcd/logos/channels/OESTERREICH_1_l.glcd
index 4d35400..4d35400 100644
--- a/graphlcd/logos/OESTERREICH_1_l.glcd
+++ b/graphlcd/logos/channels/OESTERREICH_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/OESTERREICH_1_m.glcd b/graphlcd/logos/channels/OESTERREICH_1_m.glcd
index 6c8a132..6c8a132 100644
--- a/graphlcd/logos/OESTERREICH_1_m.glcd
+++ b/graphlcd/logos/channels/OESTERREICH_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/OESTERREICH_3_l.glcd b/graphlcd/logos/channels/OESTERREICH_3_l.glcd
index 59d4519..59d4519 100644
--- a/graphlcd/logos/OESTERREICH_3_l.glcd
+++ b/graphlcd/logos/channels/OESTERREICH_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/OESTERREICH_3_m.glcd b/graphlcd/logos/channels/OESTERREICH_3_m.glcd
index 22e7b3a..22e7b3a 100644
--- a/graphlcd/logos/OESTERREICH_3_m.glcd
+++ b/graphlcd/logos/channels/OESTERREICH_3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/OLDIESTAR_l.glcd b/graphlcd/logos/channels/OLDIESTAR_l.glcd
index 08af1da..08af1da 100644
--- a/graphlcd/logos/OLDIESTAR_l.glcd
+++ b/graphlcd/logos/channels/OLDIESTAR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/OLDIESTAR_m.glcd b/graphlcd/logos/channels/OLDIESTAR_m.glcd
index faa1d67..faa1d67 100644
--- a/graphlcd/logos/OLDIESTAR_m.glcd
+++ b/graphlcd/logos/channels/OLDIESTAR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ONTV_l.glcd b/graphlcd/logos/channels/ONTV_l.glcd
index 3d30545..3d30545 100644
--- a/graphlcd/logos/ONTV_l.glcd
+++ b/graphlcd/logos/channels/ONTV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ONTV_m.glcd b/graphlcd/logos/channels/ONTV_m.glcd
index dd1dd72..dd1dd72 100644
--- a/graphlcd/logos/ONTV_m.glcd
+++ b/graphlcd/logos/channels/ONTV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ONTV_v2_m.glcd b/graphlcd/logos/channels/ONTV_v2_m.glcd
index c7f75b6..c7f75b6 100644
--- a/graphlcd/logos/ONTV_v2_m.glcd
+++ b/graphlcd/logos/channels/ONTV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ONYX_TV_l.glcd b/graphlcd/logos/channels/ONYX_TV_l.glcd
index 928a766..928a766 100644
--- a/graphlcd/logos/ONYX_TV_l.glcd
+++ b/graphlcd/logos/channels/ONYX_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ONYX_TV_m.glcd b/graphlcd/logos/channels/ONYX_TV_m.glcd
index 10f3bdb..10f3bdb 100644
--- a/graphlcd/logos/ONYX_TV_m.glcd
+++ b/graphlcd/logos/channels/ONYX_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ON_3_RADIO_l.glcd b/graphlcd/logos/channels/ON_3_RADIO_l.glcd
index 2784037..2784037 100644
--- a/graphlcd/logos/ON_3_RADIO_l.glcd
+++ b/graphlcd/logos/channels/ON_3_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ON_3_RADIO_m.glcd b/graphlcd/logos/channels/ON_3_RADIO_m.glcd
index e9b0676..e9b0676 100644
--- a/graphlcd/logos/ON_3_RADIO_m.glcd
+++ b/graphlcd/logos/channels/ON_3_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF2_RADIO_l.glcd b/graphlcd/logos/channels/ORF2_RADIO_l.glcd
index 65d086e..65d086e 100644
--- a/graphlcd/logos/ORF2_RADIO_l.glcd
+++ b/graphlcd/logos/channels/ORF2_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF2_RADIO_m.glcd b/graphlcd/logos/channels/ORF2_RADIO_m.glcd
index b42e7d5..b42e7d5 100644
--- a/graphlcd/logos/ORF2_RADIO_m.glcd
+++ b/graphlcd/logos/channels/ORF2_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_1_HD_l.glcd b/graphlcd/logos/channels/ORF_1_HD_l.glcd
index 730688a..730688a 100644
--- a/graphlcd/logos/ORF_1_HD_l.glcd
+++ b/graphlcd/logos/channels/ORF_1_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_1_l.glcd b/graphlcd/logos/channels/ORF_1_l.glcd
index 457b7db..457b7db 100644
--- a/graphlcd/logos/ORF_1_l.glcd
+++ b/graphlcd/logos/channels/ORF_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_1_m.glcd b/graphlcd/logos/channels/ORF_1_m.glcd
index 48346ac..48346ac 100644
--- a/graphlcd/logos/ORF_1_m.glcd
+++ b/graphlcd/logos/channels/ORF_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_ BURGENLAND_l.glcd b/graphlcd/logos/channels/ORF_2_ BURGENLAND_l.glcd
index 3c76598..3c76598 100644
--- a/graphlcd/logos/ORF_2_ BURGENLAND_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_ BURGENLAND_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_ BURGENLAND_m.glcd b/graphlcd/logos/channels/ORF_2_ BURGENLAND_m.glcd
index cdaeb84..cdaeb84 100644
--- a/graphlcd/logos/ORF_2_ BURGENLAND_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_ BURGENLAND_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_HD_l.glcd b/graphlcd/logos/channels/ORF_2_HD_l.glcd
index aa7e4a2..aa7e4a2 100644
--- a/graphlcd/logos/ORF_2_HD_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_KAERNTEN_l.glcd b/graphlcd/logos/channels/ORF_2_KAERNTEN_l.glcd
index 17e701b..17e701b 100644
--- a/graphlcd/logos/ORF_2_KAERNTEN_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_KAERNTEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_KAERNTEN_m.glcd b/graphlcd/logos/channels/ORF_2_KAERNTEN_m.glcd
index 2ce5f2a..2ce5f2a 100644
--- a/graphlcd/logos/ORF_2_KAERNTEN_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_KAERNTEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_NIEDEROESTERREICH_l.glcd b/graphlcd/logos/channels/ORF_2_NIEDEROESTERREICH_l.glcd
index 5e3e6c6..5e3e6c6 100644
--- a/graphlcd/logos/ORF_2_NIEDEROESTERREICH_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_NIEDEROESTERREICH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_NIEDEROESTERREICH_m.glcd b/graphlcd/logos/channels/ORF_2_NIEDEROESTERREICH_m.glcd
index ffc2413..ffc2413 100644
--- a/graphlcd/logos/ORF_2_NIEDEROESTERREICH_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_NIEDEROESTERREICH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_OBEROESTERREICH_l.glcd b/graphlcd/logos/channels/ORF_2_OBEROESTERREICH_l.glcd
index feed851..feed851 100644
--- a/graphlcd/logos/ORF_2_OBEROESTERREICH_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_OBEROESTERREICH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_OBEROESTERREICH_m.glcd b/graphlcd/logos/channels/ORF_2_OBEROESTERREICH_m.glcd
index 2435717..2435717 100644
--- a/graphlcd/logos/ORF_2_OBEROESTERREICH_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_OBEROESTERREICH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_SALZBURG_l.glcd b/graphlcd/logos/channels/ORF_2_SALZBURG_l.glcd
index 929c0f2..929c0f2 100644
--- a/graphlcd/logos/ORF_2_SALZBURG_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_SALZBURG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_SALZBURG_m.glcd b/graphlcd/logos/channels/ORF_2_SALZBURG_m.glcd
index 74b04ad..74b04ad 100644
--- a/graphlcd/logos/ORF_2_SALZBURG_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_SALZBURG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_STEIERMARK_l.glcd b/graphlcd/logos/channels/ORF_2_STEIERMARK_l.glcd
index 43bb361..43bb361 100644
--- a/graphlcd/logos/ORF_2_STEIERMARK_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_STEIERMARK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_STEIERMARK_m.glcd b/graphlcd/logos/channels/ORF_2_STEIERMARK_m.glcd
index 2f76745..2f76745 100644
--- a/graphlcd/logos/ORF_2_STEIERMARK_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_STEIERMARK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_TIROL_l.glcd b/graphlcd/logos/channels/ORF_2_TIROL_l.glcd
index 60589aa..60589aa 100644
--- a/graphlcd/logos/ORF_2_TIROL_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_TIROL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_TIROL_m.glcd b/graphlcd/logos/channels/ORF_2_TIROL_m.glcd
index afae7e3..afae7e3 100644
--- a/graphlcd/logos/ORF_2_TIROL_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_TIROL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_VORARLBERG_l.glcd b/graphlcd/logos/channels/ORF_2_VORARLBERG_l.glcd
index f79b383..f79b383 100644
--- a/graphlcd/logos/ORF_2_VORARLBERG_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_VORARLBERG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_VORARLBERG_m.glcd b/graphlcd/logos/channels/ORF_2_VORARLBERG_m.glcd
index 72c984d..72c984d 100644
--- a/graphlcd/logos/ORF_2_VORARLBERG_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_VORARLBERG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_WIEN_l.glcd b/graphlcd/logos/channels/ORF_2_WIEN_l.glcd
index ec61614..ec61614 100644
--- a/graphlcd/logos/ORF_2_WIEN_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_WIEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_WIEN_m.glcd b/graphlcd/logos/channels/ORF_2_WIEN_m.glcd
index cf4c07e..cf4c07e 100644
--- a/graphlcd/logos/ORF_2_WIEN_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_WIEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_l.glcd b/graphlcd/logos/channels/ORF_2_l.glcd
index 6fbe451..6fbe451 100644
--- a/graphlcd/logos/ORF_2_l.glcd
+++ b/graphlcd/logos/channels/ORF_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ORF_2_m.glcd b/graphlcd/logos/channels/ORF_2_m.glcd
index a28cb0d..a28cb0d 100644
--- a/graphlcd/logos/ORF_2_m.glcd
+++ b/graphlcd/logos/channels/ORF_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/OTTO_SHOP_l.glcd b/graphlcd/logos/channels/OTTO_SHOP_l.glcd
index d915a35..d915a35 100644
--- a/graphlcd/logos/OTTO_SHOP_l.glcd
+++ b/graphlcd/logos/channels/OTTO_SHOP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/OTTO_SHOP_m.glcd b/graphlcd/logos/channels/OTTO_SHOP_m.glcd
index a4d832b..a4d832b 100644
--- a/graphlcd/logos/OTTO_SHOP_m.glcd
+++ b/graphlcd/logos/channels/OTTO_SHOP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PASSION_l.glcd b/graphlcd/logos/channels/PASSION_l.glcd
index 7b745ff..7b745ff 100644
--- a/graphlcd/logos/PASSION_l.glcd
+++ b/graphlcd/logos/channels/PASSION_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PEPPERMINT_FM_l.glcd b/graphlcd/logos/channels/PEPPERMINT_FM_l.glcd
index d1a9f2c..d1a9f2c 100644
--- a/graphlcd/logos/PEPPERMINT_FM_l.glcd
+++ b/graphlcd/logos/channels/PEPPERMINT_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PEPPERMINT_FM_m.glcd b/graphlcd/logos/channels/PEPPERMINT_FM_m.glcd
index f996e72..f996e72 100644
--- a/graphlcd/logos/PEPPERMINT_FM_m.glcd
+++ b/graphlcd/logos/channels/PEPPERMINT_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PHOENIX_l.glcd b/graphlcd/logos/channels/PHOENIX_l.glcd
index ad5c44f..ad5c44f 100644
--- a/graphlcd/logos/PHOENIX_l.glcd
+++ b/graphlcd/logos/channels/PHOENIX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PHOENIX_m.glcd b/graphlcd/logos/channels/PHOENIX_m.glcd
index ee8c873..ee8c873 100644
--- a/graphlcd/logos/PHOENIX_m.glcd
+++ b/graphlcd/logos/channels/PHOENIX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PHOENIX_v2_l.glcd b/graphlcd/logos/channels/PHOENIX_v2_l.glcd
index 91298f0..91298f0 100644
--- a/graphlcd/logos/PHOENIX_v2_l.glcd
+++ b/graphlcd/logos/channels/PHOENIX_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PHOENIX_v2_m.glcd b/graphlcd/logos/channels/PHOENIX_v2_m.glcd
index df84f07..df84f07 100644
--- a/graphlcd/logos/PHOENIX_v2_m.glcd
+++ b/graphlcd/logos/channels/PHOENIX_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PLANET_RADIO_l.glcd b/graphlcd/logos/channels/PLANET_RADIO_l.glcd
index a7d211b..a7d211b 100644
--- a/graphlcd/logos/PLANET_RADIO_l.glcd
+++ b/graphlcd/logos/channels/PLANET_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PLANET_RADIO_m.glcd b/graphlcd/logos/channels/PLANET_RADIO_m.glcd
index 3328bd5..3328bd5 100644
--- a/graphlcd/logos/PLANET_RADIO_m.glcd
+++ b/graphlcd/logos/channels/PLANET_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PLANET_l.glcd b/graphlcd/logos/channels/PLANET_l.glcd
index b75675c..b75675c 100644
--- a/graphlcd/logos/PLANET_l.glcd
+++ b/graphlcd/logos/channels/PLANET_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PLANET_m.glcd b/graphlcd/logos/channels/PLANET_m.glcd
index 610bb82..610bb82 100644
--- a/graphlcd/logos/PLANET_m.glcd
+++ b/graphlcd/logos/channels/PLANET_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PLAYBOY_TV_l.glcd b/graphlcd/logos/channels/PLAYBOY_TV_l.glcd
index 184f5ff..184f5ff 100644
--- a/graphlcd/logos/PLAYBOY_TV_l.glcd
+++ b/graphlcd/logos/channels/PLAYBOY_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PLAYBOY_TV_m.glcd b/graphlcd/logos/channels/PLAYBOY_TV_m.glcd
index 6b26e08..6b26e08 100644
--- a/graphlcd/logos/PLAYBOY_TV_m.glcd
+++ b/graphlcd/logos/channels/PLAYBOY_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PLAYHOUSE_DISNEY_l.glcd b/graphlcd/logos/channels/PLAYHOUSE_DISNEY_l.glcd
index 34a9ccc..34a9ccc 100644
--- a/graphlcd/logos/PLAYHOUSE_DISNEY_l.glcd
+++ b/graphlcd/logos/channels/PLAYHOUSE_DISNEY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PLAYHOUSE_DISNEY_m.glcd b/graphlcd/logos/channels/PLAYHOUSE_DISNEY_m.glcd
index f39bdf4..f39bdf4 100644
--- a/graphlcd/logos/PLAYHOUSE_DISNEY_m.glcd
+++ b/graphlcd/logos/channels/PLAYHOUSE_DISNEY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO_SIEBEN_AUSTRIA_l.glcd b/graphlcd/logos/channels/PRO_SIEBEN_AUSTRIA_l.glcd
index 5978029..5978029 100644
--- a/graphlcd/logos/PRO_SIEBEN_AUSTRIA_l.glcd
+++ b/graphlcd/logos/channels/PRO_SIEBEN_AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO_SIEBEN_AUSTRIA_m.glcd b/graphlcd/logos/channels/PRO_SIEBEN_AUSTRIA_m.glcd
index 2662f32..2662f32 100644
--- a/graphlcd/logos/PRO_SIEBEN_AUSTRIA_m.glcd
+++ b/graphlcd/logos/channels/PRO_SIEBEN_AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO_SIEBEN_HD_l.glcd b/graphlcd/logos/channels/PRO_SIEBEN_HD_l.glcd
index 28c1be9..28c1be9 100644
--- a/graphlcd/logos/PRO_SIEBEN_HD_l.glcd
+++ b/graphlcd/logos/channels/PRO_SIEBEN_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO_SIEBEN_SCHWEIZ_l.glcd b/graphlcd/logos/channels/PRO_SIEBEN_SCHWEIZ_l.glcd
index 86fe673..86fe673 100644
--- a/graphlcd/logos/PRO_SIEBEN_SCHWEIZ_l.glcd
+++ b/graphlcd/logos/channels/PRO_SIEBEN_SCHWEIZ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO_SIEBEN_SCHWEIZ_m.glcd b/graphlcd/logos/channels/PRO_SIEBEN_SCHWEIZ_m.glcd
index 84dab91..84dab91 100644
--- a/graphlcd/logos/PRO_SIEBEN_SCHWEIZ_m.glcd
+++ b/graphlcd/logos/channels/PRO_SIEBEN_SCHWEIZ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO_SIEBEN_l.glcd b/graphlcd/logos/channels/PRO_SIEBEN_l.glcd
index 742bca5..742bca5 100644
--- a/graphlcd/logos/PRO_SIEBEN_l.glcd
+++ b/graphlcd/logos/channels/PRO_SIEBEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO_SIEBEN_m.glcd b/graphlcd/logos/channels/PRO_SIEBEN_m.glcd
index 8793dfe..8793dfe 100644
--- a/graphlcd/logos/PRO_SIEBEN_m.glcd
+++ b/graphlcd/logos/channels/PRO_SIEBEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/PRO_SIEBENv2_l.glcd b/graphlcd/logos/channels/PRO_SIEBENv2_l.glcd
index 730d452..730d452 100644
--- a/graphlcd/logos/PRO_SIEBENv2_l.glcd
+++ b/graphlcd/logos/channels/PRO_SIEBENv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PULS_l.glcd b/graphlcd/logos/channels/PULS_l.glcd
index 1179844..1179844 100644
--- a/graphlcd/logos/PULS_l.glcd
+++ b/graphlcd/logos/channels/PULS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/PULS_m.glcd b/graphlcd/logos/channels/PULS_m.glcd
index 16379cd..16379cd 100644
--- a/graphlcd/logos/PULS_m.glcd
+++ b/graphlcd/logos/channels/PULS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/QVC_GERMANY_l.glcd b/graphlcd/logos/channels/QVC_GERMANY_l.glcd
index 414b626..414b626 100644
--- a/graphlcd/logos/QVC_GERMANY_l.glcd
+++ b/graphlcd/logos/channels/QVC_GERMANY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/QVC_GERMANY_m.glcd b/graphlcd/logos/channels/QVC_GERMANY_m.glcd
index 0f12f0b..0f12f0b 100644
--- a/graphlcd/logos/QVC_GERMANY_m.glcd
+++ b/graphlcd/logos/channels/QVC_GERMANY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/Q_TV_SHOP_l.glcd b/graphlcd/logos/channels/Q_TV_SHOP_l.glcd
index 654a619..654a619 100644
--- a/graphlcd/logos/Q_TV_SHOP_l.glcd
+++ b/graphlcd/logos/channels/Q_TV_SHOP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/Q_TV_SHOP_m.glcd b/graphlcd/logos/channels/Q_TV_SHOP_m.glcd
index 37cdfc6..37cdfc6 100644
--- a/graphlcd/logos/Q_TV_SHOP_m.glcd
+++ b/graphlcd/logos/channels/Q_TV_SHOP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_10_GOLD_l.glcd b/graphlcd/logos/channels/RADIO_10_GOLD_l.glcd
index ac5f5a4..ac5f5a4 100644
--- a/graphlcd/logos/RADIO_10_GOLD_l.glcd
+++ b/graphlcd/logos/channels/RADIO_10_GOLD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_10_GOLD_m.glcd b/graphlcd/logos/channels/RADIO_10_GOLD_m.glcd
index 727d3e1..727d3e1 100644
--- a/graphlcd/logos/RADIO_10_GOLD_m.glcd
+++ b/graphlcd/logos/channels/RADIO_10_GOLD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_538_l.glcd b/graphlcd/logos/channels/RADIO_538_l.glcd
index 73bc2e5..73bc2e5 100644
--- a/graphlcd/logos/RADIO_538_l.glcd
+++ b/graphlcd/logos/channels/RADIO_538_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_538_m.glcd b/graphlcd/logos/channels/RADIO_538_m.glcd
index 0d4480c..0d4480c 100644
--- a/graphlcd/logos/RADIO_538_m.glcd
+++ b/graphlcd/logos/channels/RADIO_538_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_BERLIN_88_8_l.glcd b/graphlcd/logos/channels/RADIO_BERLIN_88_8_l.glcd
index 4940f74..4940f74 100644
--- a/graphlcd/logos/RADIO_BERLIN_88_8_l.glcd
+++ b/graphlcd/logos/channels/RADIO_BERLIN_88_8_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_BERLIN_88_8_m.glcd b/graphlcd/logos/channels/RADIO_BERLIN_88_8_m.glcd
index cde9f30..cde9f30 100644
--- a/graphlcd/logos/RADIO_BERLIN_88_8_m.glcd
+++ b/graphlcd/logos/channels/RADIO_BERLIN_88_8_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_EINS_l.glcd b/graphlcd/logos/channels/RADIO_EINS_l.glcd
index 5c64eb1..5c64eb1 100644
--- a/graphlcd/logos/RADIO_EINS_l.glcd
+++ b/graphlcd/logos/channels/RADIO_EINS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_EINS_m.glcd b/graphlcd/logos/channels/RADIO_EINS_m.glcd
index 6178251..6178251 100644
--- a/graphlcd/logos/RADIO_EINS_m.glcd
+++ b/graphlcd/logos/channels/RADIO_EINS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_GLORIA_l.glcd b/graphlcd/logos/channels/RADIO_GLORIA_l.glcd
index a5f5bac..a5f5bac 100644
--- a/graphlcd/logos/RADIO_GLORIA_l.glcd
+++ b/graphlcd/logos/channels/RADIO_GLORIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_GLORIA_m.glcd b/graphlcd/logos/channels/RADIO_GLORIA_m.glcd
index d5508b5..d5508b5 100644
--- a/graphlcd/logos/RADIO_GLORIA_m.glcd
+++ b/graphlcd/logos/channels/RADIO_GLORIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_HOREB_l.glcd b/graphlcd/logos/channels/RADIO_HOREB_l.glcd
index b44b4b1..b44b4b1 100644
--- a/graphlcd/logos/RADIO_HOREB_l.glcd
+++ b/graphlcd/logos/channels/RADIO_HOREB_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_HOREB_m.glcd b/graphlcd/logos/channels/RADIO_HOREB_m.glcd
index 3b2a458..3b2a458 100644
--- a/graphlcd/logos/RADIO_HOREB_m.glcd
+++ b/graphlcd/logos/channels/RADIO_HOREB_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_MARIA_l.glcd b/graphlcd/logos/channels/RADIO_MARIA_l.glcd
index 2d126a9..2d126a9 100644
--- a/graphlcd/logos/RADIO_MARIA_l.glcd
+++ b/graphlcd/logos/channels/RADIO_MARIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_MARIA_m.glcd b/graphlcd/logos/channels/RADIO_MARIA_m.glcd
index bea7de8..bea7de8 100644
--- a/graphlcd/logos/RADIO_MARIA_m.glcd
+++ b/graphlcd/logos/channels/RADIO_MARIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_MARIA_v2_m.glcd b/graphlcd/logos/channels/RADIO_MARIA_v2_m.glcd
index ada6d4f..ada6d4f 100644
--- a/graphlcd/logos/RADIO_MARIA_v2_m.glcd
+++ b/graphlcd/logos/channels/RADIO_MARIA_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_MULTIKULTI_l.glcd b/graphlcd/logos/channels/RADIO_MULTIKULTI_l.glcd
index a8b4810..a8b4810 100644
--- a/graphlcd/logos/RADIO_MULTIKULTI_l.glcd
+++ b/graphlcd/logos/channels/RADIO_MULTIKULTI_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_MULTIKULTI_m.glcd b/graphlcd/logos/channels/RADIO_MULTIKULTI_m.glcd
index 108ba5e..108ba5e 100644
--- a/graphlcd/logos/RADIO_MULTIKULTI_m.glcd
+++ b/graphlcd/logos/channels/RADIO_MULTIKULTI_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_MULTIKULTI_v2_m.glcd b/graphlcd/logos/channels/RADIO_MULTIKULTI_v2_m.glcd
index 472042f..472042f 100644
--- a/graphlcd/logos/RADIO_MULTIKULTI_v2_m.glcd
+++ b/graphlcd/logos/channels/RADIO_MULTIKULTI_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_PALOMA_l.glcd b/graphlcd/logos/channels/RADIO_PALOMA_l.glcd
index bbeae09..bbeae09 100644
--- a/graphlcd/logos/RADIO_PALOMA_l.glcd
+++ b/graphlcd/logos/channels/RADIO_PALOMA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_PALOMA_m.glcd b/graphlcd/logos/channels/RADIO_PALOMA_m.glcd
index 21f693d..21f693d 100644
--- a/graphlcd/logos/RADIO_PALOMA_m.glcd
+++ b/graphlcd/logos/channels/RADIO_PALOMA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_REGENBOGEN_l.glcd b/graphlcd/logos/channels/RADIO_REGENBOGEN_l.glcd
index 28df2cf..28df2cf 100644
--- a/graphlcd/logos/RADIO_REGENBOGEN_l.glcd
+++ b/graphlcd/logos/channels/RADIO_REGENBOGEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RADIO_REGENBOGEN_m.glcd b/graphlcd/logos/channels/RADIO_REGENBOGEN_m.glcd
index beae79e..beae79e 100644
--- a/graphlcd/logos/RADIO_REGENBOGEN_m.glcd
+++ b/graphlcd/logos/channels/RADIO_REGENBOGEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI _1_l.glcd b/graphlcd/logos/channels/RAI _1_l.glcd
index c51b809..c51b809 100644
--- a/graphlcd/logos/RAI _1_l.glcd
+++ b/graphlcd/logos/channels/RAI _1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI _1_m.glcd b/graphlcd/logos/channels/RAI _1_m.glcd
index 0f8541f..0f8541f 100644
--- a/graphlcd/logos/RAI _1_m.glcd
+++ b/graphlcd/logos/channels/RAI _1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI _1v2_m.glcd b/graphlcd/logos/channels/RAI _1v2_m.glcd
index 4f408da..4f408da 100644
--- a/graphlcd/logos/RAI _1v2_m.glcd
+++ b/graphlcd/logos/channels/RAI _1v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI _2_l.glcd b/graphlcd/logos/channels/RAI _2_l.glcd
index a1b5ae6..a1b5ae6 100644
--- a/graphlcd/logos/RAI _2_l.glcd
+++ b/graphlcd/logos/channels/RAI _2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI _2_m.glcd b/graphlcd/logos/channels/RAI _2_m.glcd
index a82f388..a82f388 100644
--- a/graphlcd/logos/RAI _2_m.glcd
+++ b/graphlcd/logos/channels/RAI _2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI _2v2_m.glcd b/graphlcd/logos/channels/RAI _2v2_m.glcd
index 57565ea..57565ea 100644
--- a/graphlcd/logos/RAI _2v2_m.glcd
+++ b/graphlcd/logos/channels/RAI _2v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI _3_m.glcd b/graphlcd/logos/channels/RAI _3_m.glcd
index 98d981d..98d981d 100644
--- a/graphlcd/logos/RAI _3_m.glcd
+++ b/graphlcd/logos/channels/RAI _3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI _3v2_m.glcd b/graphlcd/logos/channels/RAI _3v2_m.glcd
index 525be2b..525be2b 100644
--- a/graphlcd/logos/RAI _3v2_m.glcd
+++ b/graphlcd/logos/channels/RAI _3v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAI_3_l.glcd b/graphlcd/logos/channels/RAI_3_l.glcd
index f28bbb6..f28bbb6 100644
--- a/graphlcd/logos/RAI_3_l.glcd
+++ b/graphlcd/logos/channels/RAI_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RAZE_TV_l.glcd b/graphlcd/logos/channels/RAZE_TV_l.glcd
index 9848ef7..9848ef7 100644
--- a/graphlcd/logos/RAZE_TV_l.glcd
+++ b/graphlcd/logos/channels/RAZE_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RAZE_TV_m.glcd b/graphlcd/logos/channels/RAZE_TV_m.glcd
index 87ebafb..87ebafb 100644
--- a/graphlcd/logos/RAZE_TV_m.glcd
+++ b/graphlcd/logos/channels/RAZE_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RAZE_TV_v2_m.glcd b/graphlcd/logos/channels/RAZE_TV_v2_m.glcd
index 514d35f..514d35f 100644
--- a/graphlcd/logos/RAZE_TV_v2_m.glcd
+++ b/graphlcd/logos/channels/RAZE_TV_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RBB_BERLIN_l.glcd b/graphlcd/logos/channels/RBB_BERLIN_l.glcd
index 6b14c51..6b14c51 100644
--- a/graphlcd/logos/RBB_BERLIN_l.glcd
+++ b/graphlcd/logos/channels/RBB_BERLIN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RBB_BERLIN_m.glcd b/graphlcd/logos/channels/RBB_BERLIN_m.glcd
index 521ea31..521ea31 100644
--- a/graphlcd/logos/RBB_BERLIN_m.glcd
+++ b/graphlcd/logos/channels/RBB_BERLIN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RBB_BRANDENBURG_l.glcd b/graphlcd/logos/channels/RBB_BRANDENBURG_l.glcd
index 7b30016..7b30016 100644
--- a/graphlcd/logos/RBB_BRANDENBURG_l.glcd
+++ b/graphlcd/logos/channels/RBB_BRANDENBURG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RBB_BRANDENBURG_m.glcd b/graphlcd/logos/channels/RBB_BRANDENBURG_m.glcd
index 98fe110..98fe110 100644
--- a/graphlcd/logos/RBB_BRANDENBURG_m.glcd
+++ b/graphlcd/logos/channels/RBB_BRANDENBURG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REAL_MADRID_TV_l.glcd b/graphlcd/logos/channels/REAL_MADRID_TV_l.glcd
index 1b57228..1b57228 100644
--- a/graphlcd/logos/REAL_MADRID_TV_l.glcd
+++ b/graphlcd/logos/channels/REAL_MADRID_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REAL_MADRID_TV_m.glcd b/graphlcd/logos/channels/REAL_MADRID_TV_m.glcd
index 40c4d80..40c4d80 100644
--- a/graphlcd/logos/REAL_MADRID_TV_m.glcd
+++ b/graphlcd/logos/channels/REAL_MADRID_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-CD-v2_l.glcd b/graphlcd/logos/channels/REPLAY-CD-v2_l.glcd
index 2e8453f..2e8453f 100644
--- a/graphlcd/logos/REPLAY-CD-v2_l.glcd
+++ b/graphlcd/logos/channels/REPLAY-CD-v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-CD-v2_m.glcd b/graphlcd/logos/channels/REPLAY-CD-v2_m.glcd
index fb7d75a..fb7d75a 100644
--- a/graphlcd/logos/REPLAY-CD-v2_m.glcd
+++ b/graphlcd/logos/channels/REPLAY-CD-v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-CD_l.glcd b/graphlcd/logos/channels/REPLAY-CD_l.glcd
index 95ef265..95ef265 100644
--- a/graphlcd/logos/REPLAY-CD_l.glcd
+++ b/graphlcd/logos/channels/REPLAY-CD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-CD_m.glcd b/graphlcd/logos/channels/REPLAY-CD_m.glcd
index 2bd4022..2bd4022 100644
--- a/graphlcd/logos/REPLAY-CD_m.glcd
+++ b/graphlcd/logos/channels/REPLAY-CD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-DVD-v2_l.glcd b/graphlcd/logos/channels/REPLAY-DVD-v2_l.glcd
index 5b7af21..5b7af21 100644
--- a/graphlcd/logos/REPLAY-DVD-v2_l.glcd
+++ b/graphlcd/logos/channels/REPLAY-DVD-v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-DVD_l.glcd b/graphlcd/logos/channels/REPLAY-DVD_l.glcd
index af19b0f..af19b0f 100644
--- a/graphlcd/logos/REPLAY-DVD_l.glcd
+++ b/graphlcd/logos/channels/REPLAY-DVD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-DVD_m.glcd b/graphlcd/logos/channels/REPLAY-DVD_m.glcd
index 6d43fa8..6d43fa8 100644
--- a/graphlcd/logos/REPLAY-DVD_m.glcd
+++ b/graphlcd/logos/channels/REPLAY-DVD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-FILE_l.glcd b/graphlcd/logos/channels/REPLAY-FILE_l.glcd
index cf60fc4..cf60fc4 100644
--- a/graphlcd/logos/REPLAY-FILE_l.glcd
+++ b/graphlcd/logos/channels/REPLAY-FILE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-FILE_m.glcd b/graphlcd/logos/channels/REPLAY-FILE_m.glcd
index 3a397c1..3a397c1 100644
--- a/graphlcd/logos/REPLAY-FILE_m.glcd
+++ b/graphlcd/logos/channels/REPLAY-FILE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-IMAGE_l.glcd b/graphlcd/logos/channels/REPLAY-IMAGE_l.glcd
index 6f9ddd1..6f9ddd1 100644
--- a/graphlcd/logos/REPLAY-IMAGE_l.glcd
+++ b/graphlcd/logos/channels/REPLAY-IMAGE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-IMAGE_m.glcd b/graphlcd/logos/channels/REPLAY-IMAGE_m.glcd
index 3f240e5..3f240e5 100644
--- a/graphlcd/logos/REPLAY-IMAGE_m.glcd
+++ b/graphlcd/logos/channels/REPLAY-IMAGE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-MUSIC_l.glcd b/graphlcd/logos/channels/REPLAY-MUSIC_l.glcd
index f1b2266..f1b2266 100644
--- a/graphlcd/logos/REPLAY-MUSIC_l.glcd
+++ b/graphlcd/logos/channels/REPLAY-MUSIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-MUSIC_m.glcd b/graphlcd/logos/channels/REPLAY-MUSIC_m.glcd
index 1ea4d01..1ea4d01 100644
--- a/graphlcd/logos/REPLAY-MUSIC_m.glcd
+++ b/graphlcd/logos/channels/REPLAY-MUSIC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-VDR_l.glcd b/graphlcd/logos/channels/REPLAY-VDR_l.glcd
index d879417..d879417 100644
--- a/graphlcd/logos/REPLAY-VDR_l.glcd
+++ b/graphlcd/logos/channels/REPLAY-VDR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/REPLAY-VDR_m.glcd b/graphlcd/logos/channels/REPLAY-VDR_m.glcd
index 7d3a947..7d3a947 100644
--- a/graphlcd/logos/REPLAY-VDR_m.glcd
+++ b/graphlcd/logos/channels/REPLAY-VDR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RFM_TV_m.glcd b/graphlcd/logos/channels/RFM_TV_m.glcd
index eb731f7..eb731f7 100644
--- a/graphlcd/logos/RFM_TV_m.glcd
+++ b/graphlcd/logos/channels/RFM_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RHEIN_MAIN_TV_l.glcd b/graphlcd/logos/channels/RHEIN_MAIN_TV_l.glcd
index d539d6b..d539d6b 100644
--- a/graphlcd/logos/RHEIN_MAIN_TV_l.glcd
+++ b/graphlcd/logos/channels/RHEIN_MAIN_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RHEIN_MAIN_TV_m.glcd b/graphlcd/logos/channels/RHEIN_MAIN_TV_m.glcd
index b1ddd98..b1ddd98 100644
--- a/graphlcd/logos/RHEIN_MAIN_TV_m.glcd
+++ b/graphlcd/logos/channels/RHEIN_MAIN_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RHEIN_MAIN_TVv2_m.glcd b/graphlcd/logos/channels/RHEIN_MAIN_TVv2_m.glcd
index 121942f..121942f 100644
--- a/graphlcd/logos/RHEIN_MAIN_TVv2_m.glcd
+++ b/graphlcd/logos/channels/RHEIN_MAIN_TVv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RIRE_ET_CHANSONS_l.glcd b/graphlcd/logos/channels/RIRE_ET_CHANSONS_l.glcd
index 47a0168..47a0168 100644
--- a/graphlcd/logos/RIRE_ET_CHANSONS_l.glcd
+++ b/graphlcd/logos/channels/RIRE_ET_CHANSONS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RIRE_ET_CHANSONS_m.glcd b/graphlcd/logos/channels/RIRE_ET_CHANSONS_m.glcd
index 149cbd8..149cbd8 100644
--- a/graphlcd/logos/RIRE_ET_CHANSONS_m.glcd
+++ b/graphlcd/logos/channels/RIRE_ET_CHANSONS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ROCK_ANTENNE_l.glcd b/graphlcd/logos/channels/ROCK_ANTENNE_l.glcd
index 1a7f249..1a7f249 100644
--- a/graphlcd/logos/ROCK_ANTENNE_l.glcd
+++ b/graphlcd/logos/channels/ROCK_ANTENNE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ROCK_ANTENNE_m.glcd b/graphlcd/logos/channels/ROCK_ANTENNE_m.glcd
index 5ef1b5d..5ef1b5d 100644
--- a/graphlcd/logos/ROCK_ANTENNE_m.glcd
+++ b/graphlcd/logos/channels/ROCK_ANTENNE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ROCK_ANTENNE_v2_m.glcd b/graphlcd/logos/channels/ROCK_ANTENNE_v2_m.glcd
index c1a67d7..c1a67d7 100644
--- a/graphlcd/logos/ROCK_ANTENNE_v2_m.glcd
+++ b/graphlcd/logos/channels/ROCK_ANTENNE_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RSR_COULEUR_3_l.glcd b/graphlcd/logos/channels/RSR_COULEUR_3_l.glcd
index 7179318..7179318 100644
--- a/graphlcd/logos/RSR_COULEUR_3_l.glcd
+++ b/graphlcd/logos/channels/RSR_COULEUR_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RSR_COULEUR_3_m.glcd b/graphlcd/logos/channels/RSR_COULEUR_3_m.glcd
index bcd4494..bcd4494 100644
--- a/graphlcd/logos/RSR_COULEUR_3_m.glcd
+++ b/graphlcd/logos/channels/RSR_COULEUR_3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTBF_SAT_l.glcd b/graphlcd/logos/channels/RTBF_SAT_l.glcd
index 3e3bab1..3e3bab1 100644
--- a/graphlcd/logos/RTBF_SAT_l.glcd
+++ b/graphlcd/logos/channels/RTBF_SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTBF_SAT_m.glcd b/graphlcd/logos/channels/RTBF_SAT_m.glcd
index f84b460..f84b460 100644
--- a/graphlcd/logos/RTBF_SAT_m.glcd
+++ b/graphlcd/logos/channels/RTBF_SAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_2_AUSTRIA_l.glcd b/graphlcd/logos/channels/RTL_2_AUSTRIA_l.glcd
index a054c59..a054c59 100644
--- a/graphlcd/logos/RTL_2_AUSTRIA_l.glcd
+++ b/graphlcd/logos/channels/RTL_2_AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_2_AUSTRIA_m.glcd b/graphlcd/logos/channels/RTL_2_AUSTRIA_m.glcd
index 13f12a1..13f12a1 100644
--- a/graphlcd/logos/RTL_2_AUSTRIA_m.glcd
+++ b/graphlcd/logos/channels/RTL_2_AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_2_l.glcd b/graphlcd/logos/channels/RTL_2_l.glcd
index 8ec5083..8ec5083 100644
--- a/graphlcd/logos/RTL_2_l.glcd
+++ b/graphlcd/logos/channels/RTL_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_2_m.glcd b/graphlcd/logos/channels/RTL_2_m.glcd
index 13f12a1..13f12a1 100644
--- a/graphlcd/logos/RTL_2_m.glcd
+++ b/graphlcd/logos/channels/RTL_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_2v2_l.glcd b/graphlcd/logos/channels/RTL_2v2_l.glcd
index a054c59..a054c59 100644
--- a/graphlcd/logos/RTL_2v2_l.glcd
+++ b/graphlcd/logos/channels/RTL_2v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_4_l.glcd b/graphlcd/logos/channels/RTL_4_l.glcd
index b84524f..b84524f 100644
--- a/graphlcd/logos/RTL_4_l.glcd
+++ b/graphlcd/logos/channels/RTL_4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_4_m.glcd b/graphlcd/logos/channels/RTL_4_m.glcd
index 81c34b5..81c34b5 100644
--- a/graphlcd/logos/RTL_4_m.glcd
+++ b/graphlcd/logos/channels/RTL_4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_5_l.glcd b/graphlcd/logos/channels/RTL_5_l.glcd
index ab42540..ab42540 100644
--- a/graphlcd/logos/RTL_5_l.glcd
+++ b/graphlcd/logos/channels/RTL_5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_5_m.glcd b/graphlcd/logos/channels/RTL_5_m.glcd
index 351a26a..351a26a 100644
--- a/graphlcd/logos/RTL_5_m.glcd
+++ b/graphlcd/logos/channels/RTL_5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_AUSTRIA_l.glcd b/graphlcd/logos/channels/RTL_AUSTRIA_l.glcd
index 5c54cfe..5c54cfe 100644
--- a/graphlcd/logos/RTL_AUSTRIA_l.glcd
+++ b/graphlcd/logos/channels/RTL_AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_AUSTRIA_m.glcd b/graphlcd/logos/channels/RTL_AUSTRIA_m.glcd
index 8c51123..8c51123 100644
--- a/graphlcd/logos/RTL_AUSTRIA_m.glcd
+++ b/graphlcd/logos/channels/RTL_AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_AUSTRIA_v2_m.glcd b/graphlcd/logos/channels/RTL_AUSTRIA_v2_m.glcd
index 25ee6ea..25ee6ea 100644
--- a/graphlcd/logos/RTL_AUSTRIA_v2_m.glcd
+++ b/graphlcd/logos/channels/RTL_AUSTRIA_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_CRIME_l.glcd b/graphlcd/logos/channels/RTL_CRIME_l.glcd
index d7df968..d7df968 100644
--- a/graphlcd/logos/RTL_CRIME_l.glcd
+++ b/graphlcd/logos/channels/RTL_CRIME_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_FM_l.glcd b/graphlcd/logos/channels/RTL_FM_l.glcd
index a483538..a483538 100644
--- a/graphlcd/logos/RTL_FM_l.glcd
+++ b/graphlcd/logos/channels/RTL_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_FM_m.glcd b/graphlcd/logos/channels/RTL_FM_m.glcd
index f480738..f480738 100644
--- a/graphlcd/logos/RTL_FM_m.glcd
+++ b/graphlcd/logos/channels/RTL_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_FS_l.glcd b/graphlcd/logos/channels/RTL_FS_l.glcd
index 5c54cfe..5c54cfe 100644
--- a/graphlcd/logos/RTL_FS_l.glcd
+++ b/graphlcd/logos/channels/RTL_FS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_FS_m.glcd b/graphlcd/logos/channels/RTL_FS_m.glcd
index 9b13aa2..9b13aa2 100644
--- a/graphlcd/logos/RTL_FS_m.glcd
+++ b/graphlcd/logos/channels/RTL_FS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_HD_l.glcd b/graphlcd/logos/channels/RTL_HD_l.glcd
index 3462f79..3462f79 100644
--- a/graphlcd/logos/RTL_HD_l.glcd
+++ b/graphlcd/logos/channels/RTL_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_HDv2_l.glcd b/graphlcd/logos/channels/RTL_HDv2_l.glcd
index 51420ee..51420ee 100644
--- a/graphlcd/logos/RTL_HDv2_l.glcd
+++ b/graphlcd/logos/channels/RTL_HDv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_HDv3_l.glcd b/graphlcd/logos/channels/RTL_HDv3_l.glcd
index 51420ee..51420ee 100644
--- a/graphlcd/logos/RTL_HDv3_l.glcd
+++ b/graphlcd/logos/channels/RTL_HDv3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_PASSION_l.glcd b/graphlcd/logos/channels/RTL_PASSION_l.glcd
index 7b745ff..7b745ff 100644
--- a/graphlcd/logos/RTL_PASSION_l.glcd
+++ b/graphlcd/logos/channels/RTL_PASSION_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_RADIO_l.glcd b/graphlcd/logos/channels/RTL_RADIO_l.glcd
index d72fc78..d72fc78 100644
--- a/graphlcd/logos/RTL_RADIO_l.glcd
+++ b/graphlcd/logos/channels/RTL_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_RADIO_m.glcd b/graphlcd/logos/channels/RTL_RADIO_m.glcd
index 865126e..865126e 100644
--- a/graphlcd/logos/RTL_RADIO_m.glcd
+++ b/graphlcd/logos/channels/RTL_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_SHOP_l.glcd b/graphlcd/logos/channels/RTL_SHOP_l.glcd
index 18241d6..18241d6 100644
--- a/graphlcd/logos/RTL_SHOP_l.glcd
+++ b/graphlcd/logos/channels/RTL_SHOP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_SHOP_m.glcd b/graphlcd/logos/channels/RTL_SHOP_m.glcd
index 0fd8fcc..0fd8fcc 100644
--- a/graphlcd/logos/RTL_SHOP_m.glcd
+++ b/graphlcd/logos/channels/RTL_SHOP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_SHOP_v2_m.glcd b/graphlcd/logos/channels/RTL_SHOP_v2_m.glcd
index 1a3c945..1a3c945 100644
--- a/graphlcd/logos/RTL_SHOP_v2_m.glcd
+++ b/graphlcd/logos/channels/RTL_SHOP_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_TELE LETZEBURG_l.glcd b/graphlcd/logos/channels/RTL_TELE LETZEBURG_l.glcd
index 3381dfb..3381dfb 100644
--- a/graphlcd/logos/RTL_TELE LETZEBURG_l.glcd
+++ b/graphlcd/logos/channels/RTL_TELE LETZEBURG_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_TELE LETZEBURG_m.glcd b/graphlcd/logos/channels/RTL_TELE LETZEBURG_m.glcd
index 4b4b4dc..4b4b4dc 100644
--- a/graphlcd/logos/RTL_TELE LETZEBURG_m.glcd
+++ b/graphlcd/logos/channels/RTL_TELE LETZEBURG_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_TELE LETZEBURG_v2_l.glcd b/graphlcd/logos/channels/RTL_TELE LETZEBURG_v2_l.glcd
index 9a29b21..9a29b21 100644
--- a/graphlcd/logos/RTL_TELE LETZEBURG_v2_l.glcd
+++ b/graphlcd/logos/channels/RTL_TELE LETZEBURG_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_TELEVISION_l.glcd b/graphlcd/logos/channels/RTL_TELEVISION_l.glcd
index 5c54cfe..5c54cfe 100644
--- a/graphlcd/logos/RTL_TELEVISION_l.glcd
+++ b/graphlcd/logos/channels/RTL_TELEVISION_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTL_TELEVISION_m.glcd b/graphlcd/logos/channels/RTL_TELEVISION_m.glcd
index 9b13aa2..9b13aa2 100644
--- a/graphlcd/logos/RTL_TELEVISION_m.glcd
+++ b/graphlcd/logos/channels/RTL_TELEVISION_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RTM_MAROC_l.glcd b/graphlcd/logos/channels/RTM_MAROC_l.glcd
index ff303d1..ff303d1 100644
--- a/graphlcd/logos/RTM_MAROC_l.glcd
+++ b/graphlcd/logos/channels/RTM_MAROC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTP_INT_l.glcd b/graphlcd/logos/channels/RTP_INT_l.glcd
index 51695de..51695de 100644
--- a/graphlcd/logos/RTP_INT_l.glcd
+++ b/graphlcd/logos/channels/RTP_INT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RTP_INT_m.glcd b/graphlcd/logos/channels/RTP_INT_m.glcd
index 4b7263b..4b7263b 100644
--- a/graphlcd/logos/RTP_INT_m.glcd
+++ b/graphlcd/logos/channels/RTP_INT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/RUSSIA_TODAY_l.glcd b/graphlcd/logos/channels/RUSSIA_TODAY_l.glcd
index b8dcf0f..b8dcf0f 100644
--- a/graphlcd/logos/RUSSIA_TODAY_l.glcd
+++ b/graphlcd/logos/channels/RUSSIA_TODAY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/RUSSIA_TODAY_m.glcd b/graphlcd/logos/channels/RUSSIA_TODAY_m.glcd
index 1c32bc1..1c32bc1 100644
--- a/graphlcd/logos/RUSSIA_TODAY_m.glcd
+++ b/graphlcd/logos/channels/RUSSIA_TODAY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAILING_CHANNEL_l.glcd b/graphlcd/logos/channels/SAILING_CHANNEL_l.glcd
index 20f8b7e..20f8b7e 100644
--- a/graphlcd/logos/SAILING_CHANNEL_l.glcd
+++ b/graphlcd/logos/channels/SAILING_CHANNEL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SALZBURG_TV_l.glcd b/graphlcd/logos/channels/SALZBURG_TV_l.glcd
index 92f549e..92f549e 100644
--- a/graphlcd/logos/SALZBURG_TV_l.glcd
+++ b/graphlcd/logos/channels/SALZBURG_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SALZBURG_TV_m.glcd b/graphlcd/logos/channels/SALZBURG_TV_m.glcd
index 3d99363..3d99363 100644
--- a/graphlcd/logos/SALZBURG_TV_m.glcd
+++ b/graphlcd/logos/channels/SALZBURG_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1_AUSTRIA_l.glcd b/graphlcd/logos/channels/SAT.1_AUSTRIA_l.glcd
index 041b996..041b996 100644
--- a/graphlcd/logos/SAT.1_AUSTRIA_l.glcd
+++ b/graphlcd/logos/channels/SAT.1_AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1_AUSTRIA_m.glcd b/graphlcd/logos/channels/SAT.1_AUSTRIA_m.glcd
index 2882006..2882006 100644
--- a/graphlcd/logos/SAT.1_AUSTRIA_m.glcd
+++ b/graphlcd/logos/channels/SAT.1_AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1_AUSTRIA_v2_m.glcd b/graphlcd/logos/channels/SAT.1_AUSTRIA_v2_m.glcd
index fea6fb2..fea6fb2 100644
--- a/graphlcd/logos/SAT.1_AUSTRIA_v2_m.glcd
+++ b/graphlcd/logos/channels/SAT.1_AUSTRIA_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1_HD_l.glcd b/graphlcd/logos/channels/SAT.1_HD_l.glcd
index 79fb6bf..79fb6bf 100644
--- a/graphlcd/logos/SAT.1_HD_l.glcd
+++ b/graphlcd/logos/channels/SAT.1_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1_SCHWEIZ_l.glcd b/graphlcd/logos/channels/SAT.1_SCHWEIZ_l.glcd
index 6c7469d..6c7469d 100644
--- a/graphlcd/logos/SAT.1_SCHWEIZ_l.glcd
+++ b/graphlcd/logos/channels/SAT.1_SCHWEIZ_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1_SCHWEIZ_m.glcd b/graphlcd/logos/channels/SAT.1_SCHWEIZ_m.glcd
index d3a5dec..d3a5dec 100644
--- a/graphlcd/logos/SAT.1_SCHWEIZ_m.glcd
+++ b/graphlcd/logos/channels/SAT.1_SCHWEIZ_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1_SCHWEIZ_v2_m.glcd b/graphlcd/logos/channels/SAT.1_SCHWEIZ_v2_m.glcd
index a01a9e0..a01a9e0 100644
--- a/graphlcd/logos/SAT.1_SCHWEIZ_v2_m.glcd
+++ b/graphlcd/logos/channels/SAT.1_SCHWEIZ_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1_l.glcd b/graphlcd/logos/channels/SAT.1_l.glcd
index 32b1cf6..32b1cf6 100644
--- a/graphlcd/logos/SAT.1_l.glcd
+++ b/graphlcd/logos/channels/SAT.1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1_m.glcd b/graphlcd/logos/channels/SAT.1_m.glcd
index f57e0ff..f57e0ff 100644
--- a/graphlcd/logos/SAT.1_m.glcd
+++ b/graphlcd/logos/channels/SAT.1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SAT.1v2_l.glcd b/graphlcd/logos/channels/SAT.1v2_l.glcd
index dd0b3b0..dd0b3b0 100644
--- a/graphlcd/logos/SAT.1v2_l.glcd
+++ b/graphlcd/logos/channels/SAT.1v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SBS6_l.glcd b/graphlcd/logos/channels/SBS6_l.glcd
index d2893da..d2893da 100644
--- a/graphlcd/logos/SBS6_l.glcd
+++ b/graphlcd/logos/channels/SBS6_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SBS6_m.glcd b/graphlcd/logos/channels/SBS6_m.glcd
index 8b10d0f..8b10d0f 100644
--- a/graphlcd/logos/SBS6_m.glcd
+++ b/graphlcd/logos/channels/SBS6_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SCHMUCKKANAL_l.glcd b/graphlcd/logos/channels/SCHMUCKKANAL_l.glcd
index 0927413..0927413 100644
--- a/graphlcd/logos/SCHMUCKKANAL_l.glcd
+++ b/graphlcd/logos/channels/SCHMUCKKANAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SCHMUCKKANAL_m.glcd b/graphlcd/logos/channels/SCHMUCKKANAL_m.glcd
index 0bad1af..0bad1af 100644
--- a/graphlcd/logos/SCHMUCKKANAL_m.glcd
+++ b/graphlcd/logos/channels/SCHMUCKKANAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SERVUS_TV_HD_l.glcd b/graphlcd/logos/channels/SERVUS_TV_HD_l.glcd
index 73a91c0..73a91c0 100644
--- a/graphlcd/logos/SERVUS_TV_HD_l.glcd
+++ b/graphlcd/logos/channels/SERVUS_TV_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SERVUS_TV_l.glcd b/graphlcd/logos/channels/SERVUS_TV_l.glcd
index 73a91c0..73a91c0 100644
--- a/graphlcd/logos/SERVUS_TV_l.glcd
+++ b/graphlcd/logos/channels/SERVUS_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SF_ 1_l.glcd b/graphlcd/logos/channels/SF_ 1_l.glcd
index 2b0b4f4..2b0b4f4 100644
--- a/graphlcd/logos/SF_ 1_l.glcd
+++ b/graphlcd/logos/channels/SF_ 1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SF_1_m.glcd b/graphlcd/logos/channels/SF_1_m.glcd
index 537fd3f..537fd3f 100644
--- a/graphlcd/logos/SF_1_m.glcd
+++ b/graphlcd/logos/channels/SF_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SF_2_l.glcd b/graphlcd/logos/channels/SF_2_l.glcd
index c295a9a..c295a9a 100644
--- a/graphlcd/logos/SF_2_l.glcd
+++ b/graphlcd/logos/channels/SF_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SF_2_m.glcd b/graphlcd/logos/channels/SF_2_m.glcd
index e9c6733..e9c6733 100644
--- a/graphlcd/logos/SF_2_m.glcd
+++ b/graphlcd/logos/channels/SF_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SF_INFO_l.glcd b/graphlcd/logos/channels/SF_INFO_l.glcd
index 38865f6..38865f6 100644
--- a/graphlcd/logos/SF_INFO_l.glcd
+++ b/graphlcd/logos/channels/SF_INFO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SF_INFO_m.glcd b/graphlcd/logos/channels/SF_INFO_m.glcd
index 68d82ff..68d82ff 100644
--- a/graphlcd/logos/SF_INFO_m.glcd
+++ b/graphlcd/logos/channels/SF_INFO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SILVERLINE_l.glcd b/graphlcd/logos/channels/SILVERLINE_l.glcd
index 9536a08..9536a08 100644
--- a/graphlcd/logos/SILVERLINE_l.glcd
+++ b/graphlcd/logos/channels/SILVERLINE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SILVERLINE_m.glcd b/graphlcd/logos/channels/SILVERLINE_m.glcd
index 070f67d..070f67d 100644
--- a/graphlcd/logos/SILVERLINE_m.glcd
+++ b/graphlcd/logos/channels/SILVERLINE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SIXX_l.glcd b/graphlcd/logos/channels/SIXX_l.glcd
index ccdf594..ccdf594 100644
--- a/graphlcd/logos/SIXX_l.glcd
+++ b/graphlcd/logos/channels/SIXX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SIXX_m.glcd b/graphlcd/logos/channels/SIXX_m.glcd
index e9a14a0..e9a14a0 100644
--- a/graphlcd/logos/SIXX_m.glcd
+++ b/graphlcd/logos/channels/SIXX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_ACTION_HD_l.glcd b/graphlcd/logos/channels/SKY_ACTION_HD_l.glcd
index d8dc488..d8dc488 100644
--- a/graphlcd/logos/SKY_ACTION_HD_l.glcd
+++ b/graphlcd/logos/channels/SKY_ACTION_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_ACTION_l.glcd b/graphlcd/logos/channels/SKY_ACTION_l.glcd
index d48a608..d48a608 100644
--- a/graphlcd/logos/SKY_ACTION_l.glcd
+++ b/graphlcd/logos/channels/SKY_ACTION_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_BUNDESLIGA_l.glcd b/graphlcd/logos/channels/SKY_BUNDESLIGA_l.glcd
index a5262b5..a5262b5 100644
--- a/graphlcd/logos/SKY_BUNDESLIGA_l.glcd
+++ b/graphlcd/logos/channels/SKY_BUNDESLIGA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_CINEMA+1_l.glcd b/graphlcd/logos/channels/SKY_CINEMA+1_l.glcd
index 0723912..0723912 100644
--- a/graphlcd/logos/SKY_CINEMA+1_l.glcd
+++ b/graphlcd/logos/channels/SKY_CINEMA+1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_CINEMA+24_l.glcd b/graphlcd/logos/channels/SKY_CINEMA+24_l.glcd
index 4c22cca..4c22cca 100644
--- a/graphlcd/logos/SKY_CINEMA+24_l.glcd
+++ b/graphlcd/logos/channels/SKY_CINEMA+24_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_CINEMAHITS_HD_l.glcd b/graphlcd/logos/channels/SKY_CINEMAHITS_HD_l.glcd
index 4b99934..4b99934 100644
--- a/graphlcd/logos/SKY_CINEMAHITS_HD_l.glcd
+++ b/graphlcd/logos/channels/SKY_CINEMAHITS_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_CINEMAHITS_l.glcd b/graphlcd/logos/channels/SKY_CINEMAHITS_l.glcd
index 9dcdf41..9dcdf41 100644
--- a/graphlcd/logos/SKY_CINEMAHITS_l.glcd
+++ b/graphlcd/logos/channels/SKY_CINEMAHITS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_CINEMA_HD_l.glcd b/graphlcd/logos/channels/SKY_CINEMA_HD_l.glcd
index f2c40ff..f2c40ff 100644
--- a/graphlcd/logos/SKY_CINEMA_HD_l.glcd
+++ b/graphlcd/logos/channels/SKY_CINEMA_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_CINEMA_HDv2_l.glcd b/graphlcd/logos/channels/SKY_CINEMA_HDv2_l.glcd
index 9177f02..9177f02 100644
--- a/graphlcd/logos/SKY_CINEMA_HDv2_l.glcd
+++ b/graphlcd/logos/channels/SKY_CINEMA_HDv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_CINEMA_l.glcd b/graphlcd/logos/channels/SKY_CINEMA_l.glcd
index 15b0a31..15b0a31 100644
--- a/graphlcd/logos/SKY_CINEMA_l.glcd
+++ b/graphlcd/logos/channels/SKY_CINEMA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_COMEDY_l.glcd b/graphlcd/logos/channels/SKY_COMEDY_l.glcd
index 1ece653..1ece653 100644
--- a/graphlcd/logos/SKY_COMEDY_l.glcd
+++ b/graphlcd/logos/channels/SKY_COMEDY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_EMOTION_l.glcd b/graphlcd/logos/channels/SKY_EMOTION_l.glcd
index ed1d973..ed1d973 100644
--- a/graphlcd/logos/SKY_EMOTION_l.glcd
+++ b/graphlcd/logos/channels/SKY_EMOTION_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_KRIMI_l.glcd b/graphlcd/logos/channels/SKY_KRIMI_l.glcd
index 29469a5..29469a5 100644
--- a/graphlcd/logos/SKY_KRIMI_l.glcd
+++ b/graphlcd/logos/channels/SKY_KRIMI_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_NEWS_INTL_l.glcd b/graphlcd/logos/channels/SKY_NEWS_INTL_l.glcd
index 9001e6f..9001e6f 100644
--- a/graphlcd/logos/SKY_NEWS_INTL_l.glcd
+++ b/graphlcd/logos/channels/SKY_NEWS_INTL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_NEWS_INTL_m.glcd b/graphlcd/logos/channels/SKY_NEWS_INTL_m.glcd
index 8cd9d6c..8cd9d6c 100644
--- a/graphlcd/logos/SKY_NEWS_INTL_m.glcd
+++ b/graphlcd/logos/channels/SKY_NEWS_INTL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_NEWS_INTLv2_l.glcd b/graphlcd/logos/channels/SKY_NEWS_INTLv2_l.glcd
index 9001e6f..9001e6f 100644
--- a/graphlcd/logos/SKY_NEWS_INTLv2_l.glcd
+++ b/graphlcd/logos/channels/SKY_NEWS_INTLv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_NEWS_INTLv2_m.glcd b/graphlcd/logos/channels/SKY_NEWS_INTLv2_m.glcd
index 8cd9d6c..8cd9d6c 100644
--- a/graphlcd/logos/SKY_NEWS_INTLv2_m.glcd
+++ b/graphlcd/logos/channels/SKY_NEWS_INTLv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_NEWS_l.glcd b/graphlcd/logos/channels/SKY_NEWS_l.glcd
index 921773c..921773c 100644
--- a/graphlcd/logos/SKY_NEWS_l.glcd
+++ b/graphlcd/logos/channels/SKY_NEWS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_NOSTALIGIE_l.glcd b/graphlcd/logos/channels/SKY_NOSTALIGIE_l.glcd
index 5947239..5947239 100644
--- a/graphlcd/logos/SKY_NOSTALIGIE_l.glcd
+++ b/graphlcd/logos/channels/SKY_NOSTALIGIE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_RADIO_NL_l.glcd b/graphlcd/logos/channels/SKY_RADIO_NL_l.glcd
index 5bf1fef..5bf1fef 100644
--- a/graphlcd/logos/SKY_RADIO_NL_l.glcd
+++ b/graphlcd/logos/channels/SKY_RADIO_NL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_RADIO_NL_m.glcd b/graphlcd/logos/channels/SKY_RADIO_NL_m.glcd
index d55eac7..d55eac7 100644
--- a/graphlcd/logos/SKY_RADIO_NL_m.glcd
+++ b/graphlcd/logos/channels/SKY_RADIO_NL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_SPORT_1_l.glcd b/graphlcd/logos/channels/SKY_SPORT_1_l.glcd
index 4783fa7..4783fa7 100644
--- a/graphlcd/logos/SKY_SPORT_1_l.glcd
+++ b/graphlcd/logos/channels/SKY_SPORT_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_SPORT_2_l.glcd b/graphlcd/logos/channels/SKY_SPORT_2_l.glcd
index 7ba5293..7ba5293 100644
--- a/graphlcd/logos/SKY_SPORT_2_l.glcd
+++ b/graphlcd/logos/channels/SKY_SPORT_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_SPORT_AUSTRIA_l.glcd b/graphlcd/logos/channels/SKY_SPORT_AUSTRIA_l.glcd
index 69af96f..69af96f 100644
--- a/graphlcd/logos/SKY_SPORT_AUSTRIA_l.glcd
+++ b/graphlcd/logos/channels/SKY_SPORT_AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_SPORT_HD1_l.glcd b/graphlcd/logos/channels/SKY_SPORT_HD1_l.glcd
index 4c210b5..4c210b5 100644
--- a/graphlcd/logos/SKY_SPORT_HD1_l.glcd
+++ b/graphlcd/logos/channels/SKY_SPORT_HD1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SKY_SPORT_HD2_l.glcd b/graphlcd/logos/channels/SKY_SPORT_HD2_l.glcd
index c64de7c..c64de7c 100644
--- a/graphlcd/logos/SKY_SPORT_HD2_l.glcd
+++ b/graphlcd/logos/channels/SKY_SPORT_HD2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SONNENKLAR_TV_l.glcd b/graphlcd/logos/channels/SONNENKLAR_TV_l.glcd
index 22225a7..22225a7 100644
--- a/graphlcd/logos/SONNENKLAR_TV_l.glcd
+++ b/graphlcd/logos/channels/SONNENKLAR_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SONNENKLAR_TV_m.glcd b/graphlcd/logos/channels/SONNENKLAR_TV_m.glcd
index 0438350..0438350 100644
--- a/graphlcd/logos/SONNENKLAR_TV_m.glcd
+++ b/graphlcd/logos/channels/SONNENKLAR_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SPIEGEL_GESCHICHTE_l.glcd b/graphlcd/logos/channels/SPIEGEL_GESCHICHTE_l.glcd
index 85b229c..85b229c 100644
--- a/graphlcd/logos/SPIEGEL_GESCHICHTE_l.glcd
+++ b/graphlcd/logos/channels/SPIEGEL_GESCHICHTE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SPIEGEL_TV_XXP_l.glcd b/graphlcd/logos/channels/SPIEGEL_TV_XXP_l.glcd
index 0b937d6..0b937d6 100644
--- a/graphlcd/logos/SPIEGEL_TV_XXP_l.glcd
+++ b/graphlcd/logos/channels/SPIEGEL_TV_XXP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SPORT1_l.glcd b/graphlcd/logos/channels/SPORT1_l.glcd
index a1e2c16..a1e2c16 100644
--- a/graphlcd/logos/SPORT1_l.glcd
+++ b/graphlcd/logos/channels/SPORT1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SPUTNIK_l.glcd b/graphlcd/logos/channels/SPUTNIK_l.glcd
index 08467e4..08467e4 100644
--- a/graphlcd/logos/SPUTNIK_l.glcd
+++ b/graphlcd/logos/channels/SPUTNIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SPUTNIK_m.glcd b/graphlcd/logos/channels/SPUTNIK_m.glcd
index 4e40b73..4e40b73 100644
--- a/graphlcd/logos/SPUTNIK_m.glcd
+++ b/graphlcd/logos/channels/SPUTNIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SPUTNIKv2_l.glcd b/graphlcd/logos/channels/SPUTNIKv2_l.glcd
index c785171..c785171 100644
--- a/graphlcd/logos/SPUTNIKv2_l.glcd
+++ b/graphlcd/logos/channels/SPUTNIKv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SPUTNIKv2_m.glcd b/graphlcd/logos/channels/SPUTNIKv2_m.glcd
index 2f45511..2f45511 100644
--- a/graphlcd/logos/SPUTNIKv2_m.glcd
+++ b/graphlcd/logos/channels/SPUTNIKv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SR1_EUROPAWELLE_l.glcd b/graphlcd/logos/channels/SR1_EUROPAWELLE_l.glcd
index e296d8f..e296d8f 100644
--- a/graphlcd/logos/SR1_EUROPAWELLE_l.glcd
+++ b/graphlcd/logos/channels/SR1_EUROPAWELLE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SR2_KULTURRADIO_l.glcd b/graphlcd/logos/channels/SR2_KULTURRADIO_l.glcd
index 0115984..0115984 100644
--- a/graphlcd/logos/SR2_KULTURRADIO_l.glcd
+++ b/graphlcd/logos/channels/SR2_KULTURRADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SR3_SAARLANDWELLE_l.glcd b/graphlcd/logos/channels/SR3_SAARLANDWELLE_l.glcd
index 93ecf74..93ecf74 100644
--- a/graphlcd/logos/SR3_SAARLANDWELLE_l.glcd
+++ b/graphlcd/logos/channels/SR3_SAARLANDWELLE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SR_1_l.glcd b/graphlcd/logos/channels/SR_1_l.glcd
index 92ec5cc..92ec5cc 100644
--- a/graphlcd/logos/SR_1_l.glcd
+++ b/graphlcd/logos/channels/SR_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SR_1_m.glcd b/graphlcd/logos/channels/SR_1_m.glcd
index b852f51..b852f51 100644
--- a/graphlcd/logos/SR_1_m.glcd
+++ b/graphlcd/logos/channels/SR_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SR_FERNSEHEN_l.glcd b/graphlcd/logos/channels/SR_FERNSEHEN_l.glcd
index a543eda..a543eda 100644
--- a/graphlcd/logos/SR_FERNSEHEN_l.glcd
+++ b/graphlcd/logos/channels/SR_FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SR_FERNSEHEN_m.glcd b/graphlcd/logos/channels/SR_FERNSEHEN_m.glcd
index a320e1d..a320e1d 100644
--- a/graphlcd/logos/SR_FERNSEHEN_m.glcd
+++ b/graphlcd/logos/channels/SR_FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUEDWEST_FS_RP_l.glcd b/graphlcd/logos/channels/SUEDWEST_FS_RP_l.glcd
index 59529d2..59529d2 100644
--- a/graphlcd/logos/SUEDWEST_FS_RP_l.glcd
+++ b/graphlcd/logos/channels/SUEDWEST_FS_RP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUEDWEST_FS_RP_m.glcd b/graphlcd/logos/channels/SUEDWEST_FS_RP_m.glcd
index ef6109d..ef6109d 100644
--- a/graphlcd/logos/SUEDWEST_FS_RP_m.glcd
+++ b/graphlcd/logos/channels/SUEDWEST_FS_RP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUEDWEST_FS_RPv2_l.glcd b/graphlcd/logos/channels/SUEDWEST_FS_RPv2_l.glcd
index 6a2302a..6a2302a 100644
--- a/graphlcd/logos/SUEDWEST_FS_RPv2_l.glcd
+++ b/graphlcd/logos/channels/SUEDWEST_FS_RPv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUNSHINE_LIVE_l.glcd b/graphlcd/logos/channels/SUNSHINE_LIVE_l.glcd
index fd152b0..fd152b0 100644
--- a/graphlcd/logos/SUNSHINE_LIVE_l.glcd
+++ b/graphlcd/logos/channels/SUNSHINE_LIVE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUNSHINE_LIVE_m.glcd b/graphlcd/logos/channels/SUNSHINE_LIVE_m.glcd
index 39d0871..39d0871 100644
--- a/graphlcd/logos/SUNSHINE_LIVE_m.glcd
+++ b/graphlcd/logos/channels/SUNSHINE_LIVE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUNSHINE_LIVE_v2_m.glcd b/graphlcd/logos/channels/SUNSHINE_LIVE_v2_m.glcd
index a8a92f4..a8a92f4 100644
--- a/graphlcd/logos/SUNSHINE_LIVE_v2_m.glcd
+++ b/graphlcd/logos/channels/SUNSHINE_LIVE_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER_RTL_AUSTRIA_l.glcd b/graphlcd/logos/channels/SUPER_RTL_AUSTRIA_l.glcd
index fbb8a0f..fbb8a0f 100644
--- a/graphlcd/logos/SUPER_RTL_AUSTRIA_l.glcd
+++ b/graphlcd/logos/channels/SUPER_RTL_AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER_RTL_AUSTRIA_m.glcd b/graphlcd/logos/channels/SUPER_RTL_AUSTRIA_m.glcd
index 5caba7c..5caba7c 100644
--- a/graphlcd/logos/SUPER_RTL_AUSTRIA_m.glcd
+++ b/graphlcd/logos/channels/SUPER_RTL_AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER_RTL_l.glcd b/graphlcd/logos/channels/SUPER_RTL_l.glcd
index c5af137..c5af137 100644
--- a/graphlcd/logos/SUPER_RTL_l.glcd
+++ b/graphlcd/logos/channels/SUPER_RTL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER_RTL_m.glcd b/graphlcd/logos/channels/SUPER_RTL_m.glcd
index 24fb28b..24fb28b 100644
--- a/graphlcd/logos/SUPER_RTL_m.glcd
+++ b/graphlcd/logos/channels/SUPER_RTL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SUPER_RTLv2_l.glcd b/graphlcd/logos/channels/SUPER_RTLv2_l.glcd
index 2e08d09..2e08d09 100644
--- a/graphlcd/logos/SUPER_RTLv2_l.glcd
+++ b/graphlcd/logos/channels/SUPER_RTLv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_1_BW_l.glcd b/graphlcd/logos/channels/SWR_1_BW_l.glcd
index b8dbf8f..b8dbf8f 100644
--- a/graphlcd/logos/SWR_1_BW_l.glcd
+++ b/graphlcd/logos/channels/SWR_1_BW_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_1_BW_m.glcd b/graphlcd/logos/channels/SWR_1_BW_m.glcd
index b8dbf8f..b8dbf8f 100644
--- a/graphlcd/logos/SWR_1_BW_m.glcd
+++ b/graphlcd/logos/channels/SWR_1_BW_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_1_RP_l.glcd b/graphlcd/logos/channels/SWR_1_RP_l.glcd
index b8dbf8f..b8dbf8f 100644
--- a/graphlcd/logos/SWR_1_RP_l.glcd
+++ b/graphlcd/logos/channels/SWR_1_RP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_1_RP_m.glcd b/graphlcd/logos/channels/SWR_1_RP_m.glcd
index b8dbf8f..b8dbf8f 100644
--- a/graphlcd/logos/SWR_1_RP_m.glcd
+++ b/graphlcd/logos/channels/SWR_1_RP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_1_l.glcd b/graphlcd/logos/channels/SWR_1_l.glcd
index daa6622..daa6622 100644
--- a/graphlcd/logos/SWR_1_l.glcd
+++ b/graphlcd/logos/channels/SWR_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_1_m.glcd b/graphlcd/logos/channels/SWR_1_m.glcd
index ebc590c..ebc590c 100644
--- a/graphlcd/logos/SWR_1_m.glcd
+++ b/graphlcd/logos/channels/SWR_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_2_l.glcd b/graphlcd/logos/channels/SWR_2_l.glcd
index 97348c8..97348c8 100644
--- a/graphlcd/logos/SWR_2_l.glcd
+++ b/graphlcd/logos/channels/SWR_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_2_m.glcd b/graphlcd/logos/channels/SWR_2_m.glcd
index c874f4c..c874f4c 100644
--- a/graphlcd/logos/SWR_2_m.glcd
+++ b/graphlcd/logos/channels/SWR_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_2v2_l.glcd b/graphlcd/logos/channels/SWR_2v2_l.glcd
index bb5c3ab..bb5c3ab 100644
--- a/graphlcd/logos/SWR_2v2_l.glcd
+++ b/graphlcd/logos/channels/SWR_2v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_2v2_m.glcd b/graphlcd/logos/channels/SWR_2v2_m.glcd
index 5b37580..5b37580 100644
--- a/graphlcd/logos/SWR_2v2_m.glcd
+++ b/graphlcd/logos/channels/SWR_2v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_3_l.glcd b/graphlcd/logos/channels/SWR_3_l.glcd
index 977f286..977f286 100644
--- a/graphlcd/logos/SWR_3_l.glcd
+++ b/graphlcd/logos/channels/SWR_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_3_m.glcd b/graphlcd/logos/channels/SWR_3_m.glcd
index 0120ee3..0120ee3 100644
--- a/graphlcd/logos/SWR_3_m.glcd
+++ b/graphlcd/logos/channels/SWR_3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_3v2_l.glcd b/graphlcd/logos/channels/SWR_3v2_l.glcd
index 25323f8..25323f8 100644
--- a/graphlcd/logos/SWR_3v2_l.glcd
+++ b/graphlcd/logos/channels/SWR_3v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_3v2_m.glcd b/graphlcd/logos/channels/SWR_3v2_m.glcd
index 0120ee3..0120ee3 100644
--- a/graphlcd/logos/SWR_3v2_m.glcd
+++ b/graphlcd/logos/channels/SWR_3v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_4_BW_l.glcd b/graphlcd/logos/channels/SWR_4_BW_l.glcd
index 0b0dc77..0b0dc77 100644
--- a/graphlcd/logos/SWR_4_BW_l.glcd
+++ b/graphlcd/logos/channels/SWR_4_BW_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_4_BW_m.glcd b/graphlcd/logos/channels/SWR_4_BW_m.glcd
index 0b0dc77..0b0dc77 100644
--- a/graphlcd/logos/SWR_4_BW_m.glcd
+++ b/graphlcd/logos/channels/SWR_4_BW_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_4_RP_l.glcd b/graphlcd/logos/channels/SWR_4_RP_l.glcd
index 0b0dc77..0b0dc77 100644
--- a/graphlcd/logos/SWR_4_RP_l.glcd
+++ b/graphlcd/logos/channels/SWR_4_RP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_4_RP_m.glcd b/graphlcd/logos/channels/SWR_4_RP_m.glcd
index 0b0dc77..0b0dc77 100644
--- a/graphlcd/logos/SWR_4_RP_m.glcd
+++ b/graphlcd/logos/channels/SWR_4_RP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_4_l.glcd b/graphlcd/logos/channels/SWR_4_l.glcd
index 5d02d1e..5d02d1e 100644
--- a/graphlcd/logos/SWR_4_l.glcd
+++ b/graphlcd/logos/channels/SWR_4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_4_m.glcd b/graphlcd/logos/channels/SWR_4_m.glcd
index 336ecd9..336ecd9 100644
--- a/graphlcd/logos/SWR_4_m.glcd
+++ b/graphlcd/logos/channels/SWR_4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_BW_l.glcd b/graphlcd/logos/channels/SWR_BW_l.glcd
index 028f848..028f848 100644
--- a/graphlcd/logos/SWR_BW_l.glcd
+++ b/graphlcd/logos/channels/SWR_BW_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_CONT_RA_l.glcd b/graphlcd/logos/channels/SWR_CONT_RA_l.glcd
index 2da4cc7..2da4cc7 100644
--- a/graphlcd/logos/SWR_CONT_RA_l.glcd
+++ b/graphlcd/logos/channels/SWR_CONT_RA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_CONT_RA_m.glcd b/graphlcd/logos/channels/SWR_CONT_RA_m.glcd
index 01fa376..01fa376 100644
--- a/graphlcd/logos/SWR_CONT_RA_m.glcd
+++ b/graphlcd/logos/channels/SWR_CONT_RA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_FERNSEHEN_BW_l.glcd b/graphlcd/logos/channels/SWR_FERNSEHEN_BW_l.glcd
index 347708c..347708c 100644
--- a/graphlcd/logos/SWR_FERNSEHEN_BW_l.glcd
+++ b/graphlcd/logos/channels/SWR_FERNSEHEN_BW_l.glcd
Binary files differ
diff --git a/graphlcd/logos/SWR_FERNSEHEN_BW_m.glcd b/graphlcd/logos/channels/SWR_FERNSEHEN_BW_m.glcd
index 952988e..952988e 100644
--- a/graphlcd/logos/SWR_FERNSEHEN_BW_m.glcd
+++ b/graphlcd/logos/channels/SWR_FERNSEHEN_BW_m.glcd
Binary files differ
diff --git a/graphlcd/logos/SYFY_l.glcd b/graphlcd/logos/channels/SYFY_l.glcd
index 60ee998..60ee998 100644
--- a/graphlcd/logos/SYFY_l.glcd
+++ b/graphlcd/logos/channels/SYFY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TANGO TV_l.glcd b/graphlcd/logos/channels/TANGO TV_l.glcd
index e90433a..e90433a 100644
--- a/graphlcd/logos/TANGO TV_l.glcd
+++ b/graphlcd/logos/channels/TANGO TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TANGO TV_m.glcd b/graphlcd/logos/channels/TANGO TV_m.glcd
index 402945a..402945a 100644
--- a/graphlcd/logos/TANGO TV_m.glcd
+++ b/graphlcd/logos/channels/TANGO TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TEDDY_l.glcd b/graphlcd/logos/channels/TEDDY_l.glcd
index 4ed9fe4..4ed9fe4 100644
--- a/graphlcd/logos/TEDDY_l.glcd
+++ b/graphlcd/logos/channels/TEDDY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TEDDY_m.glcd b/graphlcd/logos/channels/TEDDY_m.glcd
index 843e2d5..843e2d5 100644
--- a/graphlcd/logos/TEDDY_m.glcd
+++ b/graphlcd/logos/channels/TEDDY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TELE_5_l.glcd b/graphlcd/logos/channels/TELE_5_l.glcd
index 929c44c..929c44c 100644
--- a/graphlcd/logos/TELE_5_l.glcd
+++ b/graphlcd/logos/channels/TELE_5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TELE_5_m.glcd b/graphlcd/logos/channels/TELE_5_m.glcd
index 0409527..0409527 100644
--- a/graphlcd/logos/TELE_5_m.glcd
+++ b/graphlcd/logos/channels/TELE_5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TELE_5v2_l.glcd b/graphlcd/logos/channels/TELE_5v2_l.glcd
index 2ecac47..2ecac47 100644
--- a/graphlcd/logos/TELE_5v2_l.glcd
+++ b/graphlcd/logos/channels/TELE_5v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TMF_l.glcd b/graphlcd/logos/channels/TMF_l.glcd
index 5f32063..5f32063 100644
--- a/graphlcd/logos/TMF_l.glcd
+++ b/graphlcd/logos/channels/TMF_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TMF_m.glcd b/graphlcd/logos/channels/TMF_m.glcd
index 70b2d0e..70b2d0e 100644
--- a/graphlcd/logos/TMF_m.glcd
+++ b/graphlcd/logos/channels/TMF_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TNT_SERIE_l.glcd b/graphlcd/logos/channels/TNT_SERIE_l.glcd
index adea156..adea156 100644
--- a/graphlcd/logos/TNT_SERIE_l.glcd
+++ b/graphlcd/logos/channels/TNT_SERIE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TRACE_TV_l.glcd b/graphlcd/logos/channels/TRACE_TV_l.glcd
index c9bfb2a..c9bfb2a 100644
--- a/graphlcd/logos/TRACE_TV_l.glcd
+++ b/graphlcd/logos/channels/TRACE_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TRACE_TV_m.glcd b/graphlcd/logos/channels/TRACE_TV_m.glcd
index 5e37f06..5e37f06 100644
--- a/graphlcd/logos/TRACE_TV_m.glcd
+++ b/graphlcd/logos/channels/TRACE_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TRW_AM_l.glcd b/graphlcd/logos/channels/TRW_AM_l.glcd
index ffdfad5..ffdfad5 100644
--- a/graphlcd/logos/TRW_AM_l.glcd
+++ b/graphlcd/logos/channels/TRW_AM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TSI_1_l.glcd b/graphlcd/logos/channels/TSI_1_l.glcd
index 6acd59c..6acd59c 100644
--- a/graphlcd/logos/TSI_1_l.glcd
+++ b/graphlcd/logos/channels/TSI_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TSI_1_m.glcd b/graphlcd/logos/channels/TSI_1_m.glcd
index 35faf68..35faf68 100644
--- a/graphlcd/logos/TSI_1_m.glcd
+++ b/graphlcd/logos/channels/TSI_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TSR_1_l.glcd b/graphlcd/logos/channels/TSR_1_l.glcd
index b9e069f..b9e069f 100644
--- a/graphlcd/logos/TSR_1_l.glcd
+++ b/graphlcd/logos/channels/TSR_1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TSR_1_m.glcd b/graphlcd/logos/channels/TSR_1_m.glcd
index 9088c26..9088c26 100644
--- a/graphlcd/logos/TSR_1_m.glcd
+++ b/graphlcd/logos/channels/TSR_1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TVC_INT_l.glcd b/graphlcd/logos/channels/TVC_INT_l.glcd
index c809267..c809267 100644
--- a/graphlcd/logos/TVC_INT_l.glcd
+++ b/graphlcd/logos/channels/TVC_INT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TVC_INT_m.glcd b/graphlcd/logos/channels/TVC_INT_m.glcd
index c528d62..c528d62 100644
--- a/graphlcd/logos/TVC_INT_m.glcd
+++ b/graphlcd/logos/channels/TVC_INT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TVE_INT_l.glcd b/graphlcd/logos/channels/TVE_INT_l.glcd
index f8056bc..f8056bc 100644
--- a/graphlcd/logos/TVE_INT_l.glcd
+++ b/graphlcd/logos/channels/TVE_INT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TVE_INT_m.glcd b/graphlcd/logos/channels/TVE_INT_m.glcd
index a38ddbd..a38ddbd 100644
--- a/graphlcd/logos/TVE_INT_m.glcd
+++ b/graphlcd/logos/channels/TVE_INT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_5_EUROPE_l.glcd b/graphlcd/logos/channels/TV_5_EUROPE_l.glcd
index 55d1905..55d1905 100644
--- a/graphlcd/logos/TV_5_EUROPE_l.glcd
+++ b/graphlcd/logos/channels/TV_5_EUROPE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_5_EUROPE_m.glcd b/graphlcd/logos/channels/TV_5_EUROPE_m.glcd
index 11a32ae..11a32ae 100644
--- a/graphlcd/logos/TV_5_EUROPE_m.glcd
+++ b/graphlcd/logos/channels/TV_5_EUROPE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_5_l.glcd b/graphlcd/logos/channels/TV_5_l.glcd
index ee181f5..ee181f5 100644
--- a/graphlcd/logos/TV_5_l.glcd
+++ b/graphlcd/logos/channels/TV_5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_5_m.glcd b/graphlcd/logos/channels/TV_5_m.glcd
index ee4b4a3..ee4b4a3 100644
--- a/graphlcd/logos/TV_5_m.glcd
+++ b/graphlcd/logos/channels/TV_5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_6_l.glcd b/graphlcd/logos/channels/TV_6_l.glcd
index ff202ab..ff202ab 100644
--- a/graphlcd/logos/TV_6_l.glcd
+++ b/graphlcd/logos/channels/TV_6_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_6_m.glcd b/graphlcd/logos/channels/TV_6_m.glcd
index bc14ec3..bc14ec3 100644
--- a/graphlcd/logos/TV_6_m.glcd
+++ b/graphlcd/logos/channels/TV_6_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_7_l.glcd b/graphlcd/logos/channels/TV_7_l.glcd
index 30c8d92..30c8d92 100644
--- a/graphlcd/logos/TV_7_l.glcd
+++ b/graphlcd/logos/channels/TV_7_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_7_m.glcd b/graphlcd/logos/channels/TV_7_m.glcd
index ebc7324..ebc7324 100644
--- a/graphlcd/logos/TV_7_m.glcd
+++ b/graphlcd/logos/channels/TV_7_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_BERLIN_l.glcd b/graphlcd/logos/channels/TV_BERLIN_l.glcd
index 32de271..32de271 100644
--- a/graphlcd/logos/TV_BERLIN_l.glcd
+++ b/graphlcd/logos/channels/TV_BERLIN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_BERLIN_m.glcd b/graphlcd/logos/channels/TV_BERLIN_m.glcd
index 84c5d07..84c5d07 100644
--- a/graphlcd/logos/TV_BERLIN_m.glcd
+++ b/graphlcd/logos/channels/TV_BERLIN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_BERLIN_v2_l.glcd b/graphlcd/logos/channels/TV_BERLIN_v2_l.glcd
index 5b0839f..5b0839f 100644
--- a/graphlcd/logos/TV_BERLIN_v2_l.glcd
+++ b/graphlcd/logos/channels/TV_BERLIN_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_BERLIN_v2_m.glcd b/graphlcd/logos/channels/TV_BERLIN_v2_m.glcd
index a26a9db..a26a9db 100644
--- a/graphlcd/logos/TV_BERLIN_v2_m.glcd
+++ b/graphlcd/logos/channels/TV_BERLIN_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_BERLIN_v3_m.glcd b/graphlcd/logos/channels/TV_BERLIN_v3_m.glcd
index 779b35e..779b35e 100644
--- a/graphlcd/logos/TV_BERLIN_v3_m.glcd
+++ b/graphlcd/logos/channels/TV_BERLIN_v3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_GALICIA_m.glcd b/graphlcd/logos/channels/TV_GALICIA_m.glcd
index 2f8c65a..2f8c65a 100644
--- a/graphlcd/logos/TV_GALICIA_m.glcd
+++ b/graphlcd/logos/channels/TV_GALICIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_GUSTO_l.glcd b/graphlcd/logos/channels/TV_GUSTO_l.glcd
index d344f37..d344f37 100644
--- a/graphlcd/logos/TV_GUSTO_l.glcd
+++ b/graphlcd/logos/channels/TV_GUSTO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TV_GUSTO_m.glcd b/graphlcd/logos/channels/TV_GUSTO_m.glcd
index 781e676..781e676 100644
--- a/graphlcd/logos/TV_GUSTO_m.glcd
+++ b/graphlcd/logos/channels/TV_GUSTO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TW1_l.glcd b/graphlcd/logos/channels/TW1_l.glcd
index bb6662e..bb6662e 100644
--- a/graphlcd/logos/TW1_l.glcd
+++ b/graphlcd/logos/channels/TW1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/TW1_m.glcd b/graphlcd/logos/channels/TW1_m.glcd
index fabea79..fabea79 100644
--- a/graphlcd/logos/TW1_m.glcd
+++ b/graphlcd/logos/channels/TW1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/TW1v2_m.glcd b/graphlcd/logos/channels/TW1v2_m.glcd
index ac93a8c..ac93a8c 100644
--- a/graphlcd/logos/TW1v2_m.glcd
+++ b/graphlcd/logos/channels/TW1v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VERONICA_RADIO_l.glcd b/graphlcd/logos/channels/VERONICA_RADIO_l.glcd
index a34e1fa..a34e1fa 100644
--- a/graphlcd/logos/VERONICA_RADIO_l.glcd
+++ b/graphlcd/logos/channels/VERONICA_RADIO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VERONICA_RADIO_m.glcd b/graphlcd/logos/channels/VERONICA_RADIO_m.glcd
index 01767c2..01767c2 100644
--- a/graphlcd/logos/VERONICA_RADIO_m.glcd
+++ b/graphlcd/logos/channels/VERONICA_RADIO_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VH1_CLASSIC_l.glcd b/graphlcd/logos/channels/VH1_CLASSIC_l.glcd
index 63cb4a9..63cb4a9 100644
--- a/graphlcd/logos/VH1_CLASSIC_l.glcd
+++ b/graphlcd/logos/channels/VH1_CLASSIC_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VH1_CLASSIC_m.glcd b/graphlcd/logos/channels/VH1_CLASSIC_m.glcd
index c2ca403..c2ca403 100644
--- a/graphlcd/logos/VH1_CLASSIC_m.glcd
+++ b/graphlcd/logos/channels/VH1_CLASSIC_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VH1_l.glcd b/graphlcd/logos/channels/VH1_l.glcd
index b48d07c..b48d07c 100644
--- a/graphlcd/logos/VH1_l.glcd
+++ b/graphlcd/logos/channels/VH1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VH1_m.glcd b/graphlcd/logos/channels/VH1_m.glcd
index a092a41..a092a41 100644
--- a/graphlcd/logos/VH1_m.glcd
+++ b/graphlcd/logos/channels/VH1_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VIBRATION_l.glcd b/graphlcd/logos/channels/VIBRATION_l.glcd
index ddba5c6..ddba5c6 100644
--- a/graphlcd/logos/VIBRATION_l.glcd
+++ b/graphlcd/logos/channels/VIBRATION_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VIBRATION_m.glcd b/graphlcd/logos/channels/VIBRATION_m.glcd
index 7118bc7..7118bc7 100644
--- a/graphlcd/logos/VIBRATION_m.glcd
+++ b/graphlcd/logos/channels/VIBRATION_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA_GERMANY_l.glcd b/graphlcd/logos/channels/VIVA_GERMANY_l.glcd
index 2db1e6e..2db1e6e 100644
--- a/graphlcd/logos/VIVA_GERMANY_l.glcd
+++ b/graphlcd/logos/channels/VIVA_GERMANY_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA_GERMANY_m.glcd b/graphlcd/logos/channels/VIVA_GERMANY_m.glcd
index 2cd6258..2cd6258 100644
--- a/graphlcd/logos/VIVA_GERMANY_m.glcd
+++ b/graphlcd/logos/channels/VIVA_GERMANY_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA_PLUS_l.glcd b/graphlcd/logos/channels/VIVA_PLUS_l.glcd
index 8e9d4d0..8e9d4d0 100644
--- a/graphlcd/logos/VIVA_PLUS_l.glcd
+++ b/graphlcd/logos/channels/VIVA_PLUS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA_PLUS_m.glcd b/graphlcd/logos/channels/VIVA_PLUS_m.glcd
index fc087da..fc087da 100644
--- a/graphlcd/logos/VIVA_PLUS_m.glcd
+++ b/graphlcd/logos/channels/VIVA_PLUS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA_PLUSv2_m.glcd b/graphlcd/logos/channels/VIVA_PLUSv2_m.glcd
index c823d68..c823d68 100644
--- a/graphlcd/logos/VIVA_PLUSv2_m.glcd
+++ b/graphlcd/logos/channels/VIVA_PLUSv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA_l.glcd b/graphlcd/logos/channels/VIVA_l.glcd
index 2db1e6e..2db1e6e 100644
--- a/graphlcd/logos/VIVA_l.glcd
+++ b/graphlcd/logos/channels/VIVA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VIVA_m.glcd b/graphlcd/logos/channels/VIVA_m.glcd
index 1de1785..1de1785 100644
--- a/graphlcd/logos/VIVA_m.glcd
+++ b/graphlcd/logos/channels/VIVA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VOLTAGE_l.glcd b/graphlcd/logos/channels/VOLTAGE_l.glcd
index f5e5ea8..f5e5ea8 100644
--- a/graphlcd/logos/VOLTAGE_l.glcd
+++ b/graphlcd/logos/channels/VOLTAGE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VOLTAGE_m.glcd b/graphlcd/logos/channels/VOLTAGE_m.glcd
index 8e45857..8e45857 100644
--- a/graphlcd/logos/VOLTAGE_m.glcd
+++ b/graphlcd/logos/channels/VOLTAGE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_AUSTRIA_l.glcd b/graphlcd/logos/channels/VOX_AUSTRIA_l.glcd
index 6a884a5..6a884a5 100644
--- a/graphlcd/logos/VOX_AUSTRIA_l.glcd
+++ b/graphlcd/logos/channels/VOX_AUSTRIA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_AUSTRIA_m.glcd b/graphlcd/logos/channels/VOX_AUSTRIA_m.glcd
index 11049d8..11049d8 100644
--- a/graphlcd/logos/VOX_AUSTRIA_m.glcd
+++ b/graphlcd/logos/channels/VOX_AUSTRIA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_CH_l.glcd b/graphlcd/logos/channels/VOX_CH_l.glcd
index 6a884a5..6a884a5 100644
--- a/graphlcd/logos/VOX_CH_l.glcd
+++ b/graphlcd/logos/channels/VOX_CH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_CH_m.glcd b/graphlcd/logos/channels/VOX_CH_m.glcd
index 1202e85..1202e85 100644
--- a/graphlcd/logos/VOX_CH_m.glcd
+++ b/graphlcd/logos/channels/VOX_CH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_HD_l.glcd b/graphlcd/logos/channels/VOX_HD_l.glcd
index 0472c21..0472c21 100644
--- a/graphlcd/logos/VOX_HD_l.glcd
+++ b/graphlcd/logos/channels/VOX_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_l.glcd b/graphlcd/logos/channels/VOX_l.glcd
index 6a884a5..6a884a5 100644
--- a/graphlcd/logos/VOX_l.glcd
+++ b/graphlcd/logos/channels/VOX_l.glcd
Binary files differ
diff --git a/graphlcd/logos/VOX_m.glcd b/graphlcd/logos/channels/VOX_m.glcd
index 1202e85..1202e85 100644
--- a/graphlcd/logos/VOX_m.glcd
+++ b/graphlcd/logos/channels/VOX_m.glcd
Binary files differ
diff --git a/graphlcd/logos/VOXv2_m.glcd b/graphlcd/logos/channels/VOXv2_m.glcd
index f2a3bd2..f2a3bd2 100644
--- a/graphlcd/logos/VOXv2_m.glcd
+++ b/graphlcd/logos/channels/VOXv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_2_l.glcd b/graphlcd/logos/channels/WDR_2_l.glcd
index 0a4a7cc..0a4a7cc 100644
--- a/graphlcd/logos/WDR_2_l.glcd
+++ b/graphlcd/logos/channels/WDR_2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_2_m.glcd b/graphlcd/logos/channels/WDR_2_m.glcd
index 0e5ae65..0e5ae65 100644
--- a/graphlcd/logos/WDR_2_m.glcd
+++ b/graphlcd/logos/channels/WDR_2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_3_l.glcd b/graphlcd/logos/channels/WDR_3_l.glcd
index 5c54ca9..5c54ca9 100644
--- a/graphlcd/logos/WDR_3_l.glcd
+++ b/graphlcd/logos/channels/WDR_3_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_3_m.glcd b/graphlcd/logos/channels/WDR_3_m.glcd
index 5a8d43a..5a8d43a 100644
--- a/graphlcd/logos/WDR_3_m.glcd
+++ b/graphlcd/logos/channels/WDR_3_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_3v2_l.glcd b/graphlcd/logos/channels/WDR_3v2_l.glcd
index 12264fb..12264fb 100644
--- a/graphlcd/logos/WDR_3v2_l.glcd
+++ b/graphlcd/logos/channels/WDR_3v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_3v2_m.glcd b/graphlcd/logos/channels/WDR_3v2_m.glcd
index dcc883a..dcc883a 100644
--- a/graphlcd/logos/WDR_3v2_m.glcd
+++ b/graphlcd/logos/channels/WDR_3v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_4_l.glcd b/graphlcd/logos/channels/WDR_4_l.glcd
index 3884648..3884648 100644
--- a/graphlcd/logos/WDR_4_l.glcd
+++ b/graphlcd/logos/channels/WDR_4_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_4_m.glcd b/graphlcd/logos/channels/WDR_4_m.glcd
index 0f28338..0f28338 100644
--- a/graphlcd/logos/WDR_4_m.glcd
+++ b/graphlcd/logos/channels/WDR_4_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_5_l.glcd b/graphlcd/logos/channels/WDR_5_l.glcd
index 80f6dfe..80f6dfe 100644
--- a/graphlcd/logos/WDR_5_l.glcd
+++ b/graphlcd/logos/channels/WDR_5_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_5_m.glcd b/graphlcd/logos/channels/WDR_5_m.glcd
index f845f36..f845f36 100644
--- a/graphlcd/logos/WDR_5_m.glcd
+++ b/graphlcd/logos/channels/WDR_5_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_5v2_l.glcd b/graphlcd/logos/channels/WDR_5v2_l.glcd
index f38cde9..f38cde9 100644
--- a/graphlcd/logos/WDR_5v2_l.glcd
+++ b/graphlcd/logos/channels/WDR_5v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_5v2_m.glcd b/graphlcd/logos/channels/WDR_5v2_m.glcd
index 7a2f3c8..7a2f3c8 100644
--- a/graphlcd/logos/WDR_5v2_m.glcd
+++ b/graphlcd/logos/channels/WDR_5v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_EVENT_l.glcd b/graphlcd/logos/channels/WDR_EVENT_l.glcd
index c675098..c675098 100644
--- a/graphlcd/logos/WDR_EVENT_l.glcd
+++ b/graphlcd/logos/channels/WDR_EVENT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_EVENT_m.glcd b/graphlcd/logos/channels/WDR_EVENT_m.glcd
index e2321c2..e2321c2 100644
--- a/graphlcd/logos/WDR_EVENT_m.glcd
+++ b/graphlcd/logos/channels/WDR_EVENT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_FUNKHAUS_EUROPA_l.glcd b/graphlcd/logos/channels/WDR_FUNKHAUS_EUROPA_l.glcd
index d3c32d8..d3c32d8 100644
--- a/graphlcd/logos/WDR_FUNKHAUS_EUROPA_l.glcd
+++ b/graphlcd/logos/channels/WDR_FUNKHAUS_EUROPA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_FUNKHAUS_EUROPA_m.glcd b/graphlcd/logos/channels/WDR_FUNKHAUS_EUROPA_m.glcd
index 4ca9b44..4ca9b44 100644
--- a/graphlcd/logos/WDR_FUNKHAUS_EUROPA_m.glcd
+++ b/graphlcd/logos/channels/WDR_FUNKHAUS_EUROPA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_l.glcd b/graphlcd/logos/channels/WDR_l.glcd
index 197ef2b..197ef2b 100644
--- a/graphlcd/logos/WDR_l.glcd
+++ b/graphlcd/logos/channels/WDR_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WDR_m.glcd b/graphlcd/logos/channels/WDR_m.glcd
index 4d762ce..4d762ce 100644
--- a/graphlcd/logos/WDR_m.glcd
+++ b/graphlcd/logos/channels/WDR_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WEIN_TV_l.glcd b/graphlcd/logos/channels/WEIN_TV_l.glcd
index b537280..b537280 100644
--- a/graphlcd/logos/WEIN_TV_l.glcd
+++ b/graphlcd/logos/channels/WEIN_TV_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WEIN_TV_m.glcd b/graphlcd/logos/channels/WEIN_TV_m.glcd
index 57f0ffc..57f0ffc 100644
--- a/graphlcd/logos/WEIN_TV_m.glcd
+++ b/graphlcd/logos/channels/WEIN_TV_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WETTER_FERNSEHEN_l.glcd b/graphlcd/logos/channels/WETTER_FERNSEHEN_l.glcd
index 0095d81..0095d81 100644
--- a/graphlcd/logos/WETTER_FERNSEHEN_l.glcd
+++ b/graphlcd/logos/channels/WETTER_FERNSEHEN_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WETTER_FERNSEHEN_m.glcd b/graphlcd/logos/channels/WETTER_FERNSEHEN_m.glcd
index c44b42c..c44b42c 100644
--- a/graphlcd/logos/WETTER_FERNSEHEN_m.glcd
+++ b/graphlcd/logos/channels/WETTER_FERNSEHEN_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WISHLINE_l.glcd b/graphlcd/logos/channels/WISHLINE_l.glcd
index d9d6b5c..d9d6b5c 100644
--- a/graphlcd/logos/WISHLINE_l.glcd
+++ b/graphlcd/logos/channels/WISHLINE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WISHLINE_m.glcd b/graphlcd/logos/channels/WISHLINE_m.glcd
index 2d281a8..2d281a8 100644
--- a/graphlcd/logos/WISHLINE_m.glcd
+++ b/graphlcd/logos/channels/WISHLINE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/WRN_DEUTSCH_l.glcd b/graphlcd/logos/channels/WRN_DEUTSCH_l.glcd
index 7fa6335..7fa6335 100644
--- a/graphlcd/logos/WRN_DEUTSCH_l.glcd
+++ b/graphlcd/logos/channels/WRN_DEUTSCH_l.glcd
Binary files differ
diff --git a/graphlcd/logos/WRN_DEUTSCH_m.glcd b/graphlcd/logos/channels/WRN_DEUTSCH_m.glcd
index 6ad05e1..6ad05e1 100644
--- a/graphlcd/logos/WRN_DEUTSCH_m.glcd
+++ b/graphlcd/logos/channels/WRN_DEUTSCH_m.glcd
Binary files differ
diff --git a/graphlcd/logos/XXL_l.glcd b/graphlcd/logos/channels/XXL_l.glcd
index 3232a51..3232a51 100644
--- a/graphlcd/logos/XXL_l.glcd
+++ b/graphlcd/logos/channels/XXL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/XXL_m.glcd b/graphlcd/logos/channels/XXL_m.glcd
index 04d1224..04d1224 100644
--- a/graphlcd/logos/XXL_m.glcd
+++ b/graphlcd/logos/channels/XXL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/XXP_l.glcd b/graphlcd/logos/channels/XXP_l.glcd
index 70d2d28..70d2d28 100644
--- a/graphlcd/logos/XXP_l.glcd
+++ b/graphlcd/logos/channels/XXP_l.glcd
Binary files differ
diff --git a/graphlcd/logos/XXP_m.glcd b/graphlcd/logos/channels/XXP_m.glcd
index 84eb572..84eb572 100644
--- a/graphlcd/logos/XXP_m.glcd
+++ b/graphlcd/logos/channels/XXP_m.glcd
Binary files differ
diff --git a/graphlcd/logos/XXP_v2_m.glcd b/graphlcd/logos/channels/XXP_v2_m.glcd
index 55b0897..55b0897 100644
--- a/graphlcd/logos/XXP_v2_m.glcd
+++ b/graphlcd/logos/channels/XXP_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/X_ZONE_l.glcd b/graphlcd/logos/channels/X_ZONE_l.glcd
index 43c1866..43c1866 100644
--- a/graphlcd/logos/X_ZONE_l.glcd
+++ b/graphlcd/logos/channels/X_ZONE_l.glcd
Binary files differ
diff --git a/graphlcd/logos/X_ZONE_m.glcd b/graphlcd/logos/channels/X_ZONE_m.glcd
index e8ff623..e8ff623 100644
--- a/graphlcd/logos/X_ZONE_m.glcd
+++ b/graphlcd/logos/channels/X_ZONE_m.glcd
Binary files differ
diff --git a/graphlcd/logos/YAM_FM_l.glcd b/graphlcd/logos/channels/YAM_FM_l.glcd
index e6206b7..e6206b7 100644
--- a/graphlcd/logos/YAM_FM_l.glcd
+++ b/graphlcd/logos/channels/YAM_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/YAM_FM_m.glcd b/graphlcd/logos/channels/YAM_FM_m.glcd
index f059f03..f059f03 100644
--- a/graphlcd/logos/YAM_FM_m.glcd
+++ b/graphlcd/logos/channels/YAM_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/YAVIDO_CLIPS_l.glcd b/graphlcd/logos/channels/YAVIDO_CLIPS_l.glcd
index f110787..f110787 100644
--- a/graphlcd/logos/YAVIDO_CLIPS_l.glcd
+++ b/graphlcd/logos/channels/YAVIDO_CLIPS_l.glcd
Binary files differ
diff --git a/graphlcd/logos/YAVIDO_CLIPS_m.glcd b/graphlcd/logos/channels/YAVIDO_CLIPS_m.glcd
index 8afdca1..8afdca1 100644
--- a/graphlcd/logos/YAVIDO_CLIPS_m.glcd
+++ b/graphlcd/logos/channels/YAVIDO_CLIPS_m.glcd
Binary files differ
diff --git a/graphlcd/logos/YORIN_FM_l.glcd b/graphlcd/logos/channels/YORIN_FM_l.glcd
index 5d1d13e..5d1d13e 100644
--- a/graphlcd/logos/YORIN_FM_l.glcd
+++ b/graphlcd/logos/channels/YORIN_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/YORIN_FM_m.glcd b/graphlcd/logos/channels/YORIN_FM_m.glcd
index 66d2eee..66d2eee 100644
--- a/graphlcd/logos/YORIN_FM_m.glcd
+++ b/graphlcd/logos/channels/YORIN_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/YOU_FM_l.glcd b/graphlcd/logos/channels/YOU_FM_l.glcd
index a038514..a038514 100644
--- a/graphlcd/logos/YOU_FM_l.glcd
+++ b/graphlcd/logos/channels/YOU_FM_l.glcd
Binary files differ
diff --git a/graphlcd/logos/YOU_FM_m.glcd b/graphlcd/logos/channels/YOU_FM_m.glcd
index e99fd9c..e99fd9c 100644
--- a/graphlcd/logos/YOU_FM_m.glcd
+++ b/graphlcd/logos/channels/YOU_FM_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_DOKUKANAL_l.glcd b/graphlcd/logos/channels/ZDF_DOKUKANAL_l.glcd
index 2ccd76e..2ccd76e 100644
--- a/graphlcd/logos/ZDF_DOKUKANAL_l.glcd
+++ b/graphlcd/logos/channels/ZDF_DOKUKANAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_DOKUKANAL_m.glcd b/graphlcd/logos/channels/ZDF_DOKUKANAL_m.glcd
index d822d2d..d822d2d 100644
--- a/graphlcd/logos/ZDF_DOKUKANAL_m.glcd
+++ b/graphlcd/logos/channels/ZDF_DOKUKANAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_DOKUKANALv2_l.glcd b/graphlcd/logos/channels/ZDF_DOKUKANALv2_l.glcd
index b3f0dda..b3f0dda 100644
--- a/graphlcd/logos/ZDF_DOKUKANALv2_l.glcd
+++ b/graphlcd/logos/channels/ZDF_DOKUKANALv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_DOKUKANALv2_m.glcd b/graphlcd/logos/channels/ZDF_DOKUKANALv2_m.glcd
index 93dac7b..93dac7b 100644
--- a/graphlcd/logos/ZDF_DOKUKANALv2_m.glcd
+++ b/graphlcd/logos/channels/ZDF_DOKUKANALv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_DOKU_KIKA_l.glcd b/graphlcd/logos/channels/ZDF_DOKU_KIKA_l.glcd
index e542a01..e542a01 100644
--- a/graphlcd/logos/ZDF_DOKU_KIKA_l.glcd
+++ b/graphlcd/logos/channels/ZDF_DOKU_KIKA_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_DOKU_KIKA_m.glcd b/graphlcd/logos/channels/ZDF_DOKU_KIKA_m.glcd
index 552d2f9..552d2f9 100644
--- a/graphlcd/logos/ZDF_DOKU_KIKA_m.glcd
+++ b/graphlcd/logos/channels/ZDF_DOKU_KIKA_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_HD_l.glcd b/graphlcd/logos/channels/ZDF_HD_l.glcd
index 713e767..713e767 100644
--- a/graphlcd/logos/ZDF_HD_l.glcd
+++ b/graphlcd/logos/channels/ZDF_HD_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_HD_m.glcd b/graphlcd/logos/channels/ZDF_HD_m.glcd
index 564020d..564020d 100644
--- a/graphlcd/logos/ZDF_HD_m.glcd
+++ b/graphlcd/logos/channels/ZDF_HD_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_HDv2_l.glcd b/graphlcd/logos/channels/ZDF_HDv2_l.glcd
index 392b14a..392b14a 100644
--- a/graphlcd/logos/ZDF_HDv2_l.glcd
+++ b/graphlcd/logos/channels/ZDF_HDv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_HDv2_m.glcd b/graphlcd/logos/channels/ZDF_HDv2_m.glcd
index c47ba55..c47ba55 100644
--- a/graphlcd/logos/ZDF_HDv2_m.glcd
+++ b/graphlcd/logos/channels/ZDF_HDv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_INFOKANAL_l.glcd b/graphlcd/logos/channels/ZDF_INFOKANAL_l.glcd
index 7ba43e8..7ba43e8 100644
--- a/graphlcd/logos/ZDF_INFOKANAL_l.glcd
+++ b/graphlcd/logos/channels/ZDF_INFOKANAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_INFOKANAL_m.glcd b/graphlcd/logos/channels/ZDF_INFOKANAL_m.glcd
index 58ebe28..58ebe28 100644
--- a/graphlcd/logos/ZDF_INFOKANAL_m.glcd
+++ b/graphlcd/logos/channels/ZDF_INFOKANAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_INFOKANALv2_l.glcd b/graphlcd/logos/channels/ZDF_INFOKANALv2_l.glcd
index 5f515b9..5f515b9 100644
--- a/graphlcd/logos/ZDF_INFOKANALv2_l.glcd
+++ b/graphlcd/logos/channels/ZDF_INFOKANALv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_INFOKANALv2_m.glcd b/graphlcd/logos/channels/ZDF_INFOKANALv2_m.glcd
index 1a35629..1a35629 100644
--- a/graphlcd/logos/ZDF_INFOKANALv2_m.glcd
+++ b/graphlcd/logos/channels/ZDF_INFOKANALv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_INFO_3SAT_l.glcd b/graphlcd/logos/channels/ZDF_INFO_3SAT_l.glcd
index 1bb5c30..1bb5c30 100644
--- a/graphlcd/logos/ZDF_INFO_3SAT_l.glcd
+++ b/graphlcd/logos/channels/ZDF_INFO_3SAT_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_INFO_3SAT_m.glcd b/graphlcd/logos/channels/ZDF_INFO_3SAT_m.glcd
index fce44d8..fce44d8 100644
--- a/graphlcd/logos/ZDF_INFO_3SAT_m.glcd
+++ b/graphlcd/logos/channels/ZDF_INFO_3SAT_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_NEO_l.glcd b/graphlcd/logos/channels/ZDF_NEO_l.glcd
index d2b86ba..d2b86ba 100644
--- a/graphlcd/logos/ZDF_NEO_l.glcd
+++ b/graphlcd/logos/channels/ZDF_NEO_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_THEATERKANAL_l.glcd b/graphlcd/logos/channels/ZDF_THEATERKANAL_l.glcd
index 30caeee..30caeee 100644
--- a/graphlcd/logos/ZDF_THEATERKANAL_l.glcd
+++ b/graphlcd/logos/channels/ZDF_THEATERKANAL_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_THEATERKANAL_m.glcd b/graphlcd/logos/channels/ZDF_THEATERKANAL_m.glcd
index 8363a6c..8363a6c 100644
--- a/graphlcd/logos/ZDF_THEATERKANAL_m.glcd
+++ b/graphlcd/logos/channels/ZDF_THEATERKANAL_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_THEATERKANALv2_l.glcd b/graphlcd/logos/channels/ZDF_THEATERKANALv2_l.glcd
index 8e0cd92..8e0cd92 100644
--- a/graphlcd/logos/ZDF_THEATERKANALv2_l.glcd
+++ b/graphlcd/logos/channels/ZDF_THEATERKANALv2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_THEATERKANALv2_m.glcd b/graphlcd/logos/channels/ZDF_THEATERKANALv2_m.glcd
index 646e9a4..646e9a4 100644
--- a/graphlcd/logos/ZDF_THEATERKANALv2_m.glcd
+++ b/graphlcd/logos/channels/ZDF_THEATERKANALv2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_l.glcd b/graphlcd/logos/channels/ZDF_l.glcd
index 4529df6..4529df6 100644
--- a/graphlcd/logos/ZDF_l.glcd
+++ b/graphlcd/logos/channels/ZDF_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZDF_m.glcd b/graphlcd/logos/channels/ZDF_m.glcd
index bc57463..bc57463 100644
--- a/graphlcd/logos/ZDF_m.glcd
+++ b/graphlcd/logos/channels/ZDF_m.glcd
Binary files differ
diff --git a/graphlcd/logos/ZIK_l.glcd b/graphlcd/logos/channels/ZIK_l.glcd
index 98315b7..98315b7 100644
--- a/graphlcd/logos/ZIK_l.glcd
+++ b/graphlcd/logos/channels/ZIK_l.glcd
Binary files differ
diff --git a/graphlcd/logos/ZIK_m.glcd b/graphlcd/logos/channels/ZIK_m.glcd
index 3def476..3def476 100644
--- a/graphlcd/logos/ZIK_m.glcd
+++ b/graphlcd/logos/channels/ZIK_m.glcd
Binary files differ
diff --git a/graphlcd/logos/_l.glcd b/graphlcd/logos/channels/_l.glcd
index d879417..d879417 100644
--- a/graphlcd/logos/_l.glcd
+++ b/graphlcd/logos/channels/_l.glcd
Binary files differ
diff --git a/graphlcd/logos/_m.glcd b/graphlcd/logos/channels/_m.glcd
index 7d3a947..7d3a947 100644
--- a/graphlcd/logos/_m.glcd
+++ b/graphlcd/logos/channels/_m.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/SAT1_l.glcd b/graphlcd/logos/channels/animated/SAT1_l.glcd
index 32b1cf6..32b1cf6 100644
--- a/graphlcd/logos/animated/SAT1_l.glcd
+++ b/graphlcd/logos/channels/animated/SAT1_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-CD_l.glcd b/graphlcd/logos/replay/animated/replay-cd_l.glcd
index 9c09643..9c09643 100644
--- a/graphlcd/logos/animated/REPLAY-CD_l.glcd
+++ b/graphlcd/logos/replay/animated/replay-cd_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-DVD_l.glcd b/graphlcd/logos/replay/animated/replay-dvd_l.glcd
index 0385097..0385097 100644
--- a/graphlcd/logos/animated/REPLAY-DVD_l.glcd
+++ b/graphlcd/logos/replay/animated/replay-dvd_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-FILE_l.glcd b/graphlcd/logos/replay/animated/replay-file_l.glcd
index fd2e9d6..fd2e9d6 100644
--- a/graphlcd/logos/animated/REPLAY-FILE_l.glcd
+++ b/graphlcd/logos/replay/animated/replay-file_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-IMAGE_l.glcd b/graphlcd/logos/replay/animated/replay-image_l.glcd
index f5b5270..f5b5270 100644
--- a/graphlcd/logos/animated/REPLAY-IMAGE_l.glcd
+++ b/graphlcd/logos/replay/animated/replay-image_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-MUSIC_l.glcd b/graphlcd/logos/replay/animated/replay-music_l.glcd
index 8013bb3..8013bb3 100644
--- a/graphlcd/logos/animated/REPLAY-MUSIC_l.glcd
+++ b/graphlcd/logos/replay/animated/replay-music_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-VDR_l.glcd b/graphlcd/logos/replay/animated/replay-vdr_l.glcd
index 5144e13..5144e13 100644
--- a/graphlcd/logos/animated/REPLAY-VDR_l.glcd
+++ b/graphlcd/logos/replay/animated/replay-vdr_l.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-VDR_m.glcd b/graphlcd/logos/replay/animated/replay-vdr_m.glcd
index 4e81191..4e81191 100644
--- a/graphlcd/logos/animated/REPLAY-VDR_m.glcd
+++ b/graphlcd/logos/replay/animated/replay-vdr_m.glcd
Binary files differ
diff --git a/graphlcd/logos/animated/REPLAY-VDR_v2_l.glcd b/graphlcd/logos/replay/animated/replay-vdr_v2_l.glcd
index 07c7f03..07c7f03 100644
--- a/graphlcd/logos/animated/REPLAY-VDR_v2_l.glcd
+++ b/graphlcd/logos/replay/animated/replay-vdr_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-cd_l.glcd b/graphlcd/logos/replay/replay-cd_l.glcd
new file mode 100644
index 0000000..95ef265
--- /dev/null
+++ b/graphlcd/logos/replay/replay-cd_l.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-cd_m.glcd b/graphlcd/logos/replay/replay-cd_m.glcd
new file mode 100644
index 0000000..2bd4022
--- /dev/null
+++ b/graphlcd/logos/replay/replay-cd_m.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-cd_v2_l.glcd b/graphlcd/logos/replay/replay-cd_v2_l.glcd
new file mode 100644
index 0000000..2e8453f
--- /dev/null
+++ b/graphlcd/logos/replay/replay-cd_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-cd_v2_m.glcd b/graphlcd/logos/replay/replay-cd_v2_m.glcd
new file mode 100644
index 0000000..fb7d75a
--- /dev/null
+++ b/graphlcd/logos/replay/replay-cd_v2_m.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-dvd_l.glcd b/graphlcd/logos/replay/replay-dvd_l.glcd
new file mode 100644
index 0000000..af19b0f
--- /dev/null
+++ b/graphlcd/logos/replay/replay-dvd_l.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-dvd_m.glcd b/graphlcd/logos/replay/replay-dvd_m.glcd
new file mode 100644
index 0000000..6d43fa8
--- /dev/null
+++ b/graphlcd/logos/replay/replay-dvd_m.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-dvd_v2_l.glcd b/graphlcd/logos/replay/replay-dvd_v2_l.glcd
new file mode 100644
index 0000000..5b7af21
--- /dev/null
+++ b/graphlcd/logos/replay/replay-dvd_v2_l.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-file_l.glcd b/graphlcd/logos/replay/replay-file_l.glcd
new file mode 100644
index 0000000..cf60fc4
--- /dev/null
+++ b/graphlcd/logos/replay/replay-file_l.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-file_m.glcd b/graphlcd/logos/replay/replay-file_m.glcd
new file mode 100644
index 0000000..3a397c1
--- /dev/null
+++ b/graphlcd/logos/replay/replay-file_m.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-image_l.glcd b/graphlcd/logos/replay/replay-image_l.glcd
new file mode 100644
index 0000000..6f9ddd1
--- /dev/null
+++ b/graphlcd/logos/replay/replay-image_l.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-image_m.glcd b/graphlcd/logos/replay/replay-image_m.glcd
new file mode 100644
index 0000000..3f240e5
--- /dev/null
+++ b/graphlcd/logos/replay/replay-image_m.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-music_l.glcd b/graphlcd/logos/replay/replay-music_l.glcd
new file mode 100644
index 0000000..f1b2266
--- /dev/null
+++ b/graphlcd/logos/replay/replay-music_l.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-music_m.glcd b/graphlcd/logos/replay/replay-music_m.glcd
new file mode 100644
index 0000000..1ea4d01
--- /dev/null
+++ b/graphlcd/logos/replay/replay-music_m.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-vdr_l.glcd b/graphlcd/logos/replay/replay-vdr_l.glcd
new file mode 100644
index 0000000..d879417
--- /dev/null
+++ b/graphlcd/logos/replay/replay-vdr_l.glcd
Binary files differ
diff --git a/graphlcd/logos/replay/replay-vdr_m.glcd b/graphlcd/logos/replay/replay-vdr_m.glcd
new file mode 100644
index 0000000..7d3a947
--- /dev/null
+++ b/graphlcd/logos/replay/replay-vdr_m.glcd
Binary files differ
diff --git a/graphlcd/logos_bmp/13th_Street_l.bmp b/graphlcd/logos_bmp/13th_Street_l.bmp
deleted file mode 100644
index 8f20734..0000000
--- a/graphlcd/logos_bmp/13th_Street_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/1LIVE_DIGGI_l.bmp b/graphlcd/logos_bmp/1LIVE_DIGGI_l.bmp
deleted file mode 100644
index f640213..0000000
--- a/graphlcd/logos_bmp/1LIVE_DIGGI_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/1LIVE_l.bmp b/graphlcd/logos_bmp/1LIVE_l.bmp
deleted file mode 100644
index 1002eea..0000000
--- a/graphlcd/logos_bmp/1LIVE_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/3SAT_l.bmp b/graphlcd/logos_bmp/3SAT_l.bmp
deleted file mode 100644
index 11053a0..0000000
--- a/graphlcd/logos_bmp/3SAT_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/AnixeHD_l.bmp b/graphlcd/logos_bmp/AnixeHD_l.bmp
deleted file mode 100644
index aaedcee..0000000
--- a/graphlcd/logos_bmp/AnixeHD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/BAYERN1_l.bmp b/graphlcd/logos_bmp/BAYERN1_l.bmp
deleted file mode 100644
index 9a645ae..0000000
--- a/graphlcd/logos_bmp/BAYERN1_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/BAYERN2_l.bmp b/graphlcd/logos_bmp/BAYERN2_l.bmp
deleted file mode 100644
index 74c8606..0000000
--- a/graphlcd/logos_bmp/BAYERN2_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/BAYERN3_l.bmp b/graphlcd/logos_bmp/BAYERN3_l.bmp
deleted file mode 100644
index 5e050a6..0000000
--- a/graphlcd/logos_bmp/BAYERN3_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/BR_ALPHA_l.bmp b/graphlcd/logos_bmp/BR_ALPHA_l.bmp
deleted file mode 100644
index 59e8e39..0000000
--- a/graphlcd/logos_bmp/BR_ALPHA_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/BR_KLASSIK_l.bmp b/graphlcd/logos_bmp/BR_KLASSIK_l.bmp
deleted file mode 100644
index 319f637..0000000
--- a/graphlcd/logos_bmp/BR_KLASSIK_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/BR_l.bmp b/graphlcd/logos_bmp/BR_l.bmp
deleted file mode 100644
index a273100..0000000
--- a/graphlcd/logos_bmp/BR_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Beate-Uhse.TV_l.bmp b/graphlcd/logos_bmp/Beate-Uhse.TV_l.bmp
deleted file mode 100644
index 2eec795..0000000
--- a/graphlcd/logos_bmp/Beate-Uhse.TV_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/CONT.RA_l.bmp b/graphlcd/logos_bmp/CONT.RA_l.bmp
deleted file mode 100644
index cb98c21..0000000
--- a/graphlcd/logos_bmp/CONT.RA_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Classica_l.bmp b/graphlcd/logos_bmp/Classica_l.bmp
deleted file mode 100644
index 054c38d..0000000
--- a/graphlcd/logos_bmp/Classica_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/DAS_DING_l.bmp b/graphlcd/logos_bmp/DAS_DING_l.bmp
deleted file mode 100644
index a4536e3..0000000
--- a/graphlcd/logos_bmp/DAS_DING_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/DELUXE_MUSIC_l.bmp b/graphlcd/logos_bmp/DELUXE_MUSIC_l.bmp
deleted file mode 100644
index 6d2c457..0000000
--- a/graphlcd/logos_bmp/DELUXE_MUSIC_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/DELUXE_RADIO_l.bmp b/graphlcd/logos_bmp/DELUXE_RADIO_l.bmp
deleted file mode 100644
index 0e90626..0000000
--- a/graphlcd/logos_bmp/DELUXE_RADIO_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/DMAX_l.bmp b/graphlcd/logos_bmp/DMAX_l.bmp
deleted file mode 100644
index 0752e46..0000000
--- a/graphlcd/logos_bmp/DMAX_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/DSF_l.bmp b/graphlcd/logos_bmp/DSF_l.bmp
deleted file mode 100644
index 7ccf943..0000000
--- a/graphlcd/logos_bmp/DSF_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/DasErsteHD_l.bmp b/graphlcd/logos_bmp/DasErsteHD_l.bmp
deleted file mode 100644
index bacc9bd..0000000
--- a/graphlcd/logos_bmp/DasErsteHD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Discovery_Channel_l.bmp b/graphlcd/logos_bmp/Discovery_Channel_l.bmp
deleted file mode 100644
index ac9ad25..0000000
--- a/graphlcd/logos_bmp/Discovery_Channel_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Discovery_HD_l.bmp b/graphlcd/logos_bmp/Discovery_HD_l.bmp
deleted file mode 100644
index 4089c42..0000000
--- a/graphlcd/logos_bmp/Discovery_HD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/DisneyXD_l.bmp b/graphlcd/logos_bmp/DisneyXD_l.bmp
deleted file mode 100644
index cd92377..0000000
--- a/graphlcd/logos_bmp/DisneyXD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Disney_Channel_l.bmp b/graphlcd/logos_bmp/Disney_Channel_l.bmp
deleted file mode 100644
index 64382ed..0000000
--- a/graphlcd/logos_bmp/Disney_Channel_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Disney_Cinemagic_HD_l.bmp b/graphlcd/logos_bmp/Disney_Cinemagic_HD_l.bmp
deleted file mode 100644
index c571c0e..0000000
--- a/graphlcd/logos_bmp/Disney_Cinemagic_HD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Disney_Cinemagic_l.bmp b/graphlcd/logos_bmp/Disney_Cinemagic_l.bmp
deleted file mode 100644
index e433a84..0000000
--- a/graphlcd/logos_bmp/Disney_Cinemagic_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/EINS_EXTRA_l.bmp b/graphlcd/logos_bmp/EINS_EXTRA_l.bmp
deleted file mode 100644
index 23b56a2..0000000
--- a/graphlcd/logos_bmp/EINS_EXTRA_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/EINS_FESTIVAL_l.bmp b/graphlcd/logos_bmp/EINS_FESTIVAL_l.bmp
deleted file mode 100644
index 95d5353..0000000
--- a/graphlcd/logos_bmp/EINS_FESTIVAL_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/EINS_PLUS_l.bmp b/graphlcd/logos_bmp/EINS_PLUS_l.bmp
deleted file mode 100644
index d1d6399..0000000
--- a/graphlcd/logos_bmp/EINS_PLUS_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/EURONEWS_l.bmp b/graphlcd/logos_bmp/EURONEWS_l.bmp
deleted file mode 100644
index 291486f..0000000
--- a/graphlcd/logos_bmp/EURONEWS_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/EinsFestival_HD_l.bmp b/graphlcd/logos_bmp/EinsFestival_HD_l.bmp
deleted file mode 100644
index bb0d556..0000000
--- a/graphlcd/logos_bmp/EinsFestival_HD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Eurosport_HD_l.bmp b/graphlcd/logos_bmp/Eurosport_HD_l.bmp
deleted file mode 100644
index 4d4ed7e..0000000
--- a/graphlcd/logos_bmp/Eurosport_HD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/FOX_l.bmp b/graphlcd/logos_bmp/FOX_l.bmp
deleted file mode 100644
index 89f954d..0000000
--- a/graphlcd/logos_bmp/FOX_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/GO_TV_l.bmp b/graphlcd/logos_bmp/GO_TV_l.bmp
deleted file mode 100644
index 1253c9a..0000000
--- a/graphlcd/logos_bmp/GO_TV_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/GoldStarTV_l.bmp b/graphlcd/logos_bmp/GoldStarTV_l.bmp
deleted file mode 100644
index 2f4b678..0000000
--- a/graphlcd/logos_bmp/GoldStarTV_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/HR_l.bmp b/graphlcd/logos_bmp/HR_l.bmp
deleted file mode 100644
index ecae21b..0000000
--- a/graphlcd/logos_bmp/HR_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Heimatkanal_l.bmp b/graphlcd/logos_bmp/Heimatkanal_l.bmp
deleted file mode 100644
index acd6b0f..0000000
--- a/graphlcd/logos_bmp/Heimatkanal_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/History_HD_l.bmp b/graphlcd/logos_bmp/History_HD_l.bmp
deleted file mode 100644
index cf274a1..0000000
--- a/graphlcd/logos_bmp/History_HD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/I_MUSIC_l.bmp b/graphlcd/logos_bmp/I_MUSIC_l.bmp
deleted file mode 100644
index 14851ab..0000000
--- a/graphlcd/logos_bmp/I_MUSIC_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Junior_l.bmp b/graphlcd/logos_bmp/Junior_l.bmp
deleted file mode 100644
index 51746e6..0000000
--- a/graphlcd/logos_bmp/Junior_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/KABEL1_l.bmp b/graphlcd/logos_bmp/KABEL1_l.bmp
deleted file mode 100644
index 1412107..0000000
--- a/graphlcd/logos_bmp/KABEL1_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/KLASSIK_RADIO_l.bmp b/graphlcd/logos_bmp/KLASSIK_RADIO_l.bmp
deleted file mode 100644
index f4090a2..0000000
--- a/graphlcd/logos_bmp/KLASSIK_RADIO_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/MDR_l.bmp b/graphlcd/logos_bmp/MDR_l.bmp
deleted file mode 100644
index dbe795b..0000000
--- a/graphlcd/logos_bmp/MDR_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/MGM_Channel_l.bmp b/graphlcd/logos_bmp/MGM_Channel_l.bmp
deleted file mode 100644
index ae44ee4..0000000
--- a/graphlcd/logos_bmp/MGM_Channel_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/MotorvisionTV_l.bmp b/graphlcd/logos_bmp/MotorvisionTV_l.bmp
deleted file mode 100644
index 2229069..0000000
--- a/graphlcd/logos_bmp/MotorvisionTV_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Music_Choice_Extra_l.bmp b/graphlcd/logos_bmp/Music_Choice_Extra_l.bmp
deleted file mode 100644
index 5eefa0b..0000000
--- a/graphlcd/logos_bmp/Music_Choice_Extra_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/N24_l.bmp b/graphlcd/logos_bmp/N24_l.bmp
deleted file mode 100644
index 8ddd552..0000000
--- a/graphlcd/logos_bmp/N24_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/NAT_GEO_WILD_l.bmp b/graphlcd/logos_bmp/NAT_GEO_WILD_l.bmp
deleted file mode 100644
index bc1e9b3..0000000
--- a/graphlcd/logos_bmp/NAT_GEO_WILD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/NDR_l.bmp b/graphlcd/logos_bmp/NDR_l.bmp
deleted file mode 100644
index 2f46154..0000000
--- a/graphlcd/logos_bmp/NDR_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/NJOY_l.bmp b/graphlcd/logos_bmp/NJOY_l.bmp
deleted file mode 100644
index 27bf6b0..0000000
--- a/graphlcd/logos_bmp/NJOY_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/NRJ_HITS_l.bmp b/graphlcd/logos_bmp/NRJ_HITS_l.bmp
deleted file mode 100644
index 33bad62..0000000
--- a/graphlcd/logos_bmp/NRJ_HITS_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/National_Geographic_HD_l.bmp b/graphlcd/logos_bmp/National_Geographic_HD_l.bmp
deleted file mode 100644
index 0cf2420..0000000
--- a/graphlcd/logos_bmp/National_Geographic_HD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/National_Geographic_l.bmp b/graphlcd/logos_bmp/National_Geographic_l.bmp
deleted file mode 100644
index 43cd4d1..0000000
--- a/graphlcd/logos_bmp/National_Geographic_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/ORF_1_HD_l.bmp b/graphlcd/logos_bmp/ORF_1_HD_l.bmp
deleted file mode 100644
index 51ae581..0000000
--- a/graphlcd/logos_bmp/ORF_1_HD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/ORF_2_HD_l.bmp b/graphlcd/logos_bmp/ORF_2_HD_l.bmp
deleted file mode 100644
index d70b46f..0000000
--- a/graphlcd/logos_bmp/ORF_2_HD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/PHOENIX_l.bmp b/graphlcd/logos_bmp/PHOENIX_l.bmp
deleted file mode 100644
index a836915..0000000
--- a/graphlcd/logos_bmp/PHOENIX_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Passion_l.bmp b/graphlcd/logos_bmp/Passion_l.bmp
deleted file mode 100644
index 6d2eee2..0000000
--- a/graphlcd/logos_bmp/Passion_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Playhouse_Disney_l.bmp b/graphlcd/logos_bmp/Playhouse_Disney_l.bmp
deleted file mode 100644
index a3b5398..0000000
--- a/graphlcd/logos_bmp/Playhouse_Disney_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/RTL_Crime_l.bmp b/graphlcd/logos_bmp/RTL_Crime_l.bmp
deleted file mode 100644
index 926eb62..0000000
--- a/graphlcd/logos_bmp/RTL_Crime_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/RTL_II_l.bmp b/graphlcd/logos_bmp/RTL_II_l.bmp
deleted file mode 100644
index 607af4d..0000000
--- a/graphlcd/logos_bmp/RTL_II_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SAT1_l.bmp b/graphlcd/logos_bmp/SAT1_l.bmp
deleted file mode 100644
index bf59b7a..0000000
--- a/graphlcd/logos_bmp/SAT1_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SIXX_l.bmp b/graphlcd/logos_bmp/SIXX_l.bmp
deleted file mode 100644
index 494d650..0000000
--- a/graphlcd/logos_bmp/SIXX_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKYNEWS_l.bmp b/graphlcd/logos_bmp/SKYNEWS_l.bmp
deleted file mode 100644
index e2d8273..0000000
--- a/graphlcd/logos_bmp/SKYNEWS_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_actionHD_l.bmp b/graphlcd/logos_bmp/SKY_actionHD_l.bmp
deleted file mode 100644
index 45f5035..0000000
--- a/graphlcd/logos_bmp/SKY_actionHD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_action_l.bmp b/graphlcd/logos_bmp/SKY_action_l.bmp
deleted file mode 100644
index 909c9cc..0000000
--- a/graphlcd/logos_bmp/SKY_action_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_bundesliga_l.bmp b/graphlcd/logos_bmp/SKY_bundesliga_l.bmp
deleted file mode 100644
index 15e9d1e..0000000
--- a/graphlcd/logos_bmp/SKY_bundesliga_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_cinema+1_l.bmp b/graphlcd/logos_bmp/SKY_cinema+1_l.bmp
deleted file mode 100644
index bc24919..0000000
--- a/graphlcd/logos_bmp/SKY_cinema+1_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_cinema+24_l.bmp b/graphlcd/logos_bmp/SKY_cinema+24_l.bmp
deleted file mode 100644
index 7c5e67a..0000000
--- a/graphlcd/logos_bmp/SKY_cinema+24_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_cinemaHD_l.bmp b/graphlcd/logos_bmp/SKY_cinemaHD_l.bmp
deleted file mode 100644
index eebde22..0000000
--- a/graphlcd/logos_bmp/SKY_cinemaHD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_cinema_l.bmp b/graphlcd/logos_bmp/SKY_cinema_l.bmp
deleted file mode 100644
index 843881a..0000000
--- a/graphlcd/logos_bmp/SKY_cinema_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_cinemahitsHD_l.bmp b/graphlcd/logos_bmp/SKY_cinemahitsHD_l.bmp
deleted file mode 100644
index 8d74c95..0000000
--- a/graphlcd/logos_bmp/SKY_cinemahitsHD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_cinemahits_l.bmp b/graphlcd/logos_bmp/SKY_cinemahits_l.bmp
deleted file mode 100644
index 8f021a6..0000000
--- a/graphlcd/logos_bmp/SKY_cinemahits_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_comedy_l.bmp b/graphlcd/logos_bmp/SKY_comedy_l.bmp
deleted file mode 100644
index 9a60373..0000000
--- a/graphlcd/logos_bmp/SKY_comedy_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_emotion_l.bmp b/graphlcd/logos_bmp/SKY_emotion_l.bmp
deleted file mode 100644
index c3dbb16..0000000
--- a/graphlcd/logos_bmp/SKY_emotion_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_krimi_l.bmp b/graphlcd/logos_bmp/SKY_krimi_l.bmp
deleted file mode 100644
index 5c8659d..0000000
--- a/graphlcd/logos_bmp/SKY_krimi_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_nostalgie_l.bmp b/graphlcd/logos_bmp/SKY_nostalgie_l.bmp
deleted file mode 100644
index 5dd5292..0000000
--- a/graphlcd/logos_bmp/SKY_nostalgie_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_sport1_l.bmp b/graphlcd/logos_bmp/SKY_sport1_l.bmp
deleted file mode 100644
index b3b7e2a..0000000
--- a/graphlcd/logos_bmp/SKY_sport1_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_sport2_l.bmp b/graphlcd/logos_bmp/SKY_sport2_l.bmp
deleted file mode 100644
index 9d2d5b4..0000000
--- a/graphlcd/logos_bmp/SKY_sport2_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_sportHD1_l.bmp b/graphlcd/logos_bmp/SKY_sportHD1_l.bmp
deleted file mode 100644
index 5b7d487..0000000
--- a/graphlcd/logos_bmp/SKY_sportHD1_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_sportHD2_l.bmp b/graphlcd/logos_bmp/SKY_sportHD2_l.bmp
deleted file mode 100644
index 502eb9f..0000000
--- a/graphlcd/logos_bmp/SKY_sportHD2_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SKY_sport_austria_l.bmp b/graphlcd/logos_bmp/SKY_sport_austria_l.bmp
deleted file mode 100644
index b3ce1ea..0000000
--- a/graphlcd/logos_bmp/SKY_sport_austria_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SPIEGEL_Geschichte_l.bmp b/graphlcd/logos_bmp/SPIEGEL_Geschichte_l.bmp
deleted file mode 100644
index ea0277f..0000000
--- a/graphlcd/logos_bmp/SPIEGEL_Geschichte_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SPORT1_l.bmp b/graphlcd/logos_bmp/SPORT1_l.bmp
deleted file mode 100644
index ed9ff85..0000000
--- a/graphlcd/logos_bmp/SPORT1_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SUPER_RTL_l.bmp b/graphlcd/logos_bmp/SUPER_RTL_l.bmp
deleted file mode 100644
index ce290a4..0000000
--- a/graphlcd/logos_bmp/SUPER_RTL_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SWR1_l.bmp b/graphlcd/logos_bmp/SWR1_l.bmp
deleted file mode 100644
index f18a7dd..0000000
--- a/graphlcd/logos_bmp/SWR1_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SWR2_l.bmp b/graphlcd/logos_bmp/SWR2_l.bmp
deleted file mode 100644
index 5a82323..0000000
--- a/graphlcd/logos_bmp/SWR2_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SWR3_l.bmp b/graphlcd/logos_bmp/SWR3_l.bmp
deleted file mode 100644
index 67f9aaf..0000000
--- a/graphlcd/logos_bmp/SWR3_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SWR4_l.bmp b/graphlcd/logos_bmp/SWR4_l.bmp
deleted file mode 100644
index 3f26a15..0000000
--- a/graphlcd/logos_bmp/SWR4_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/SWR_BW_l.bmp b/graphlcd/logos_bmp/SWR_BW_l.bmp
deleted file mode 100644
index ba176b4..0000000
--- a/graphlcd/logos_bmp/SWR_BW_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/ServusTV.bmp b/graphlcd/logos_bmp/ServusTV.bmp
deleted file mode 100644
index 07479be..0000000
--- a/graphlcd/logos_bmp/ServusTV.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/Syfy_l.bmp b/graphlcd/logos_bmp/Syfy_l.bmp
deleted file mode 100644
index cf4bec1..0000000
--- a/graphlcd/logos_bmp/Syfy_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/TELE_5_l.bmp b/graphlcd/logos_bmp/TELE_5_l.bmp
deleted file mode 100644
index eae8003..0000000
--- a/graphlcd/logos_bmp/TELE_5_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/TNT_Serie_l.bmp b/graphlcd/logos_bmp/TNT_Serie_l.bmp
deleted file mode 100644
index 2466abe..0000000
--- a/graphlcd/logos_bmp/TNT_Serie_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/TW1_l.bmp b/graphlcd/logos_bmp/TW1_l.bmp
deleted file mode 100644
index f3aa16b..0000000
--- a/graphlcd/logos_bmp/TW1_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/WDR_l.bmp b/graphlcd/logos_bmp/WDR_l.bmp
deleted file mode 100644
index 59d5ab8..0000000
--- a/graphlcd/logos_bmp/WDR_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/ZDF_HD_l.bmp b/graphlcd/logos_bmp/ZDF_HD_l.bmp
deleted file mode 100644
index fc891e7..0000000
--- a/graphlcd/logos_bmp/ZDF_HD_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/ZDF_NEO_l.bmp b/graphlcd/logos_bmp/ZDF_NEO_l.bmp
deleted file mode 100644
index 6aabd36..0000000
--- a/graphlcd/logos_bmp/ZDF_NEO_l.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/logos_bmp/arteHD_L.bmp b/graphlcd/logos_bmp/arteHD_L.bmp
deleted file mode 100644
index 9585492..0000000
--- a/graphlcd/logos_bmp/arteHD_L.bmp
+++ /dev/null
Binary files differ
diff --git a/graphlcd/skins/default/default.skin b/graphlcd/skins/default/default.skin
new file mode 100644
index 0000000..c6178f5
--- /dev/null
+++ b/graphlcd/skins/default/default.skin
@@ -0,0 +1,433 @@
+<?xml version="1.0"?>
+<skin version="1.2" name="default">
+
+ <font id="FontInfo" url="ft2:VeraBd.ttf:9" condition="le({ScreenHeight},65)"/>
+ <font id="FontChannel" url="ft2:VeraBd.ttf:12" condition="le({ScreenHeight},65)"/>
+ <font id="FontMenuTitle" url="ft2:Vera.ttf:8" condition="le({ScreenHeight},65)"/>
+ <font id="FontMenuItem" url="ft2:DejaVuSansCondensed.ttf:8" condition="le({ScreenHeight},65)"/>
+ <font id="FontMenuButton" url="ft2:DejaVuSansCondensed.ttf:8" condition="le({ScreenHeight},65)"/>
+ <font id="FontTitle" url="ft2:VeraBd.ttf:9" condition="le({ScreenHeight},65)"/>
+ <font id="FontTitleSmall" url="ft2:VeraBd.ttf:8" condition="le({ScreenHeight},65)"/>
+ <font id="FontInfoSmall" url="ft2:Vera.ttf:8" condition="le({ScreenHeight},65)"/>
+ <font id="FontInfoSmall2" url="ft2:Vera.ttf:7" condition="le({ScreenHeight},65)"/>
+ <font id="FontTimes" url="fnt:f8n.fnt" condition="le({ScreenHeight},65)"/>
+
+ <font id="FontTitle" url="ft2:VeraBd.ttf:24" condition="gt({ScreenHeight},128)"/>
+ <font id="FontTitleSmall" url="ft2:Vera.ttf:20" condition="gt({ScreenHeight},128)"/>
+ <font id="FontInfoSmall" url="ft2:VeraBd.ttf:16" condition="gt({ScreenHeight},128)"/>
+ <font id="FontInfoSmall2" url="ft2:Vera.ttf:14" condition="gt({ScreenHeight},128)"/>
+
+ <font id="FontInfo" url="ft2:Vera.ttf:18"/>
+ <font id="FontChannel" url="ft2:VeraBd.ttf:22"/>
+ <font id="FontMenuTitle" url="ft2:Vera.ttf:15"/>
+ <font id="FontMenuItem" url="ft2:Vera.ttf:12"/>
+ <font id="FontMenuButton" url="ft2:VeraBd.ttf:9"/>
+ <font id="FontTitle" url="ft2:VeraBd.ttf:20" />
+ <font id="FontTitleSmall" url="ft2:Vera.ttf:14" />
+ <font id="FontInfoSmall" url="ft2:VeraBd.ttf:10"/>
+ <font id="FontInfoSmall2" url="ft2:Vera.ttf:10"/>
+ <font id="FontTimes" url="ft2:Vera.ttf:14"/>
+
+ <variable id="LineThickness" value="1" condition="le({ScreenHeight},65)" default="2" />
+ <variable id="PaddingW" value="0" condition="le({ScreenHeight},65)" />
+ <variable id="PaddingW" value="2" condition="ge({ScreenHeight},240)" default="1" />
+ <variable id="PaddingH" value="0" condition="le({ScreenHeight},65)" default="1" />
+
+ <!-- COLOURS -->
+ <!-- defines -->
+ <variable id="ColMonoFG" value="{ForegroundColor}"/>
+ <variable id="ColMonoBG" value="{BackgroundColor}"/>
+
+ <condblock condition="QueryFeature('iscolour')">
+ <!-- display id normal -->
+ <variable id="ColChannelBG" value="'0x77300060'" default="#ColMonoFG" />
+ <variable id="ColChannelInfo" value="'white'" default="#ColMonoBG" />
+ <variable id="ColDateTime" value="'white'" default="#ColMonoBG" />
+ <variable id="ColBorder" value="'0x770000FF'" default="#ColMonoBG" />
+ <variable id="ColLogoBG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColLogoFG" value="'cyan'" default="#ColMonoFG" />
+ <variable id="ColSymbol" value="'yellow'" default="#ColMonoFG" />
+ <variable id="ColSymbolGreyed" value="'0x333333'" default="#ColMonoBG" />
+ <variable id="ColPresProgrText" value="'0xCCCCFF'" default="#ColMonoFG" />
+ <variable id="ColPresProgrBar" value="'0xDDC0FFC0'" default="#ColMonoFG" />
+ <variable id="ColPresProgrBarBrd" value="'0xAAFFFFFF'" default="#ColMonoFG" />
+ <variable id="ColPresentTitle" value="'0xAAC0FFFF'" default="#ColMonoFG" />
+ <variable id="ColPresentShort" value="'0xAAC0C0FF'" default="#ColMonoFG" />
+ <variable id="ColFollowingTitle" value="'0xAAFFFFFF'" default="#ColMonoFG" />
+ <variable id="ColFollowingShort" value="'0xAAFFFFFF'" default="#ColMonoFG" />
+ <variable id="ColRecSymbol" value="'magenta'" default="#ColMonoFG" />
+ <variable id="ColRecText" value="'magenta'" default="#ColMonoFG" />
+ <variable id="ColFemonBar" value="'0x550000FF'" default="#ColMonoFG" />
+ <variable id="ColFemonText" value="'0xDDDDDD'" default="#ColMonoFG" />
+ <!-- display id volume -->
+ <variable id="ColVolumeBG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColVolumeFG" value="'white'" default="#ColMonoFG" />
+ <variable id="ColVolumeBar" value="'green'" default="#ColMonoFG" />
+ <!-- display id audio -->
+ <variable id="ColAudioBG" value="'0x77300060'" default="#ColMonoBG" />
+ <variable id="ColAudioHeaderBG" value="'green'" default="#ColMonoFG" />
+ <variable id="ColAudioHeaderFG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColAudioEntry" value="'white'" default="#ColMonoFG" />
+ <variable id="ColAudioEntryCurr" value="'black'" default="#ColMonoBG" />
+ <variable id="ColAudioSelected" value="'cyan'" default="#ColMonoFG" />
+ <!-- display id message -->
+ <variable id="ColMessageBG" value="'0xAA000000'" default="#ColMonoBG" />
+ <variable id="ColMessageFG" value="'red'" default="#ColMonoFG" />
+ <variable id="ColMessageIcon" value="'0x77FF0000'" default="#ColMonoFG" />
+ <variable id="ColMessageText" value="'white'" default="#ColMonoFG" />
+ <!-- display id replay -->
+ <variable id="ColReplayBorder" value="#ColBorder" default="#ColBorder" /> <!-- -->
+ <variable id="ColReplayLogo" value="'cyan'" default="#ColMonoFG" />
+ <variable id="ColReplayText" value="'white'" default="#ColMonoFG" />
+ <variable id="ColReplaySymbol" value="'yellow'" default="#ColMonoFG" />
+ <variable id="ColReplayBar" value="'magenta'" default="#ColMonoFG" />
+ <variable id="ColReplayTime" value="'white'" default="#ColMonoFG" />
+ <!-- display id menu -->
+ <!--variable id="ColMenuHeaderBG" value="'yellow'" condition="QueryFeature('iscolour')"/-->
+ <variable id="ColMenuHeaderBG" value="#ColChannelBG" default="#ColChannelBG"/> <!-- -->
+ <variable id="ColMenuHeaderFG" value="'white'" default="#ColChannelInfo"/>
+ <variable id="ColMenuBorder" value="#ColMenuHeaderBG" default="#ColBorder" />
+ <!--variable id="ColMenuEntryMarker" value="'yellow'" default="#ColMonoFG" /-->
+ <variable id="ColMenuEntry" value="'white'" default="#ColMonoFG" />
+ <variable id="ColMenuEntryCurr" value="'black'" default="#ColMonoBG" />
+ <variable id="ColMenuSelected" value="'0xFF00AAAA'" default="#ColMonoFG" />
+ <variable id="ColMenuText" value="'magenta'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonRBG" value="'red'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonRFG" value="'white'" default="#ColMonoBG" />
+ <variable id="ColMenuButtonGBG" value="'green'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonGFG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColMenuButtonYBG" value="'yellow'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonYFG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColMenuButtonBBG" value="'blue'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonBFG" value="'white'" default="#ColMonoBG" />
+ <variable id="ColMenuButtonBG" value="'0xEEEEEE'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonFG" value="'black'" default="#ColMonoBG" />
+ </condblock>
+
+
+ <display id="normal">
+
+ <!-- LogoSymbSmall: 1: small, symbols left of logo, 0: large, symbols at bottom of logo -->
+ <variable id="LogoSymbSmall" value="1" condition="le({ScreenHeight},65)" default="0" />
+ <!-- LogoSymbPos: 1: logo + symbols inside channel bar, 0: logo + symbols below channel bar -->
+ <variable id="LogoSymbPos" value="1" condition="le({ScreenHeight},128)" default="0" />
+ <variable id="ChannelLogo" value="'{ConfigPath}/logos/channels/{ChannelAlias}_m.glcd'" condition="#LogoSymbSmall"
+ default="'{ConfigPath}/logos/channels/{ChannelAlias}_l.glcd'"/>
+ <variable id="LogoW" value="40" condition="#LogoSymbSmall" default="64" />
+ <variable id="LogoH" value="29" condition="#LogoSymbSmall" default="48" />
+ <variable id="LogoBorder" value="1" />
+
+ <variable id="SymbolW" value="ImageWidth('symbols/empty_small.pbm')" condition="#LogoSymbSmall" default="ImageWidth('symbols/empty.pbm')" />
+ <variable id="SymbolH" value="ImageHeight('symbols/empty_small.pbm')" condition="#LogoSymbSmall" default="ImageHeight('symbols/empty.pbm')"/>
+ <variable id="SymbolGap" value="1" condition="#LogoSymbSmall" default="2" />
+ <variable id="SymbolTeletext" value="'symbols/teletext_small.pbm'" condition="#LogoSymbSmall" default="'symbols/teletext.pbm'"/>
+ <variable id="SymbolDolby" value="'symbols/dolby_small.pbm'" condition="#LogoSymbSmall" default="'symbols/dolby.pbm'"/>
+ <variable id="SymbolScrambled" value="'symbols/scrambled_small.pbm'" condition="#LogoSymbSmall" default="'symbols/scrambled.pbm'"/>
+ <variable id="SymbolMute" value="'symbols/mute_small.pbm'" condition="#LogoSymbSmall" default="'symbols/mute.pbm'"/>
+ <variable id="SymbolRecording" value="'symbols/recording_small.pbm'" condition="#LogoSymbSmall" default="'symbols/recording.pbm'"/>
+
+ <!-- dimensions of logo + symbols + borders -->
+ <variable id="LogoSymbW" value="#SymbolW" condition="and(#LogoSymbSmall,not({SettingShowChannelLogo}),{SettingShowSymbols})" />
+ <variable id="LogoSymbW" value="add(#SymbolW,#SymbolGap,#LogoBorder,#LogoW,#LogoBorder)" condition="and(#LogoSymbSmall,{SettingShowChannelLogo},{SettingShowSymbols})" />
+ <variable id="LogoSymbW" value="add(mul(#SymbolW,4),mul(#SymbolGap,3))" condition="and(not(#LogoSymbSmall),not({SettingShowChannelLogo}),{SettingShowSymbols})" />
+ <variable id="LogoSymbW" value="add(#LogoBorder,#LogoW,#LogoBorder)" condition="and(not(#LogoSymbSmall),{SettingShowChannelLogo},{SettingShowSymbols})" />
+ <variable id="LogoSymbW" value="add(#LogoBorder,#LogoW,#LogoBorder)" condition="and({SettingShowChannelLogo},not({SettingShowSymbols}))" />
+ <variable id="LogoSymbW" value="0" />
+ <variable id="LogoSymbH" value="add(mul(#SymbolH,4),mul(#SymbolGap,3))" condition="and(#LogoSymbSmall,{SettingShowSymbols})" />
+ <variable id="LogoSymbH" value="#SymbolH" condition="and(not(#LogoSymbSmall),not({SettingShowChannelLogo}),{SettingShowSymbols})" />
+ <variable id="LogoSymbH" value="add(#LogoBorder,#LogoH,#LogoBorder,#SymbolGap,#SymbolH)" condition="and(not(#LogoSymbSmall),{SettingShowChannelLogo},{SettingShowSymbols})" />
+ <variable id="LogoSymbH" value="add(#LogoBorder,#LogoH,#LogoBorder)" condition="and({SettingShowChannelLogo},not({SettingShowSymbols}))" />
+ <variable id="LogoSymbH" value="0" />
+
+ <variable id="ChannelBarW" value="sub({ScreenWidth},mul(#LogoSymbPos,add(#LogoSymbW,4)))" />
+ <!-- ChannelBarH: PaddingH + Height(FontChannel) + 2x PaddingH + Height(FontInfo) + PaddingH -->
+ <variable id="ChannelBarH" value="add(FontLineHeight('FontChannel'),FontLineHeight('FontInfo'),mul(#PaddingH,2))" />
+ <variable id="ChannelContentW" value="sub({ScreenWidth},#LogoW,mul(2,#LogoPadding))" condition="and({SettingShowChannelLogo},#LogoTopRight)"
+ default="{ScreenWidth}" />
+
+ <variable id="LogoSymbX" value="sub({ScreenWidth},1,#LogoSymbW)" />
+ <variable id="LogoSymbY" value="0" condition="#LogoSymbPos" default="#ChannelBarH" />
+
+ <variable id="TimeBarW" value="FontTextWidth('FontTimes','00:00 - 00:00')"/>
+ <variable id="TimeBarY" value="add(#ChannelBarH,#LineThickness)"/>
+
+
+ <rectangle x="0" y="0" width="#ChannelBarW" height="#ChannelBarH" color="#ColChannelBG" filled="yes" />
+ <text x="#PaddingW" y="0" width="sub(#ChannelBarW,mul(#PaddingW,2),1)" height="FontLineHeight('FontChannel')" color="#ColChannelInfo" align="left" scrollmode="never" font="FontChannel">
+ {ChannelNumber} | {ChannelName}
+ </text>
+ <text condition="not(and(#LogoSymbSmall,{SettingShowChannelLogo}))" x="#PaddingW" y="add(FontLineHeight('FontChannel'))" width="sub(#ChannelBarW,mul(#PaddingW,2),1)" height="FontLineHeight('FontInfo')" color="#ColDateTime" align="left" font="FontInfo">
+ {DateTime:%a %d.%m.}
+ </text>
+ <text condition="and(#LogoSymbSmall,{SettingShowChannelLogo})" x="#PaddingW" y="add(FontLineHeight('FontChannel'))" width="sub(#ChannelBarW,mul(#PaddingW,2),1)" height="FontLineHeight('FontInfo')" color="#ColDateTime" align="left" font="FontInfo">
+ {DateTime:%d.%m.}
+ </text>
+ <text x="#PaddingW" y="add(FontLineHeight('FontChannel'))" width="sub(#ChannelBarW,mul(#PaddingW,2),1)" height="FontLineHeight('FontInfo')" color="#ColDateTime" align="right" font="FontInfo">
+ {DateTime:%H\:%M}
+ </text>
+ <!-- logo + symbols -->
+ <rectangle x="#LogoSymbX" y="#LogoSymbY" width="#LogoSymbW" height="#LogoSymbH" filled="yes" color="#ColLogoBG" condition="gt(#LogoSymbW,0)" />
+
+ <block condition="{SettingShowChannelLogo}">
+ <image x="mul(-1,add(#LogoBorder,#LogoW))" y="add(#LogoSymbY,#LogoBorder)" width="#LogoW" height="#LogoH" bgcolor="#ColLogoBG" color="#ColLogoFG" path="#ChannelLogo"/>
+ </block>
+ <block condition="and(not(#LogoSymbSmall),{SettingShowSymbols})">
+ <image x="add(#LogoSymbX,mul(0,add(#SymbolW,#SymbolGap)))" y="add(#LogoSymbY,mul({SettingShowChannelLogo},add(#LogoBorder,#LogoH,#LogoBorder,#SymbolGap)))" color="#ColSymbol" path="#SymbolTeletext" condition="{ChannelHasTeletext}"/>
+ <image x="add(#LogoSymbX,mul(1,add(#SymbolW,#SymbolGap)))" y="add(#LogoSymbY,mul({SettingShowChannelLogo},add(#LogoBorder,#LogoH,#LogoBorder,#SymbolGap)))" color="#ColSymbol" path="#SymbolDolby" condition="{ChannelHasDolby}"/>
+ <image x="add(#LogoSymbX,mul(2,add(#SymbolW,#SymbolGap)))" y="add(#LogoSymbY,mul({SettingShowChannelLogo},add(#LogoBorder,#LogoH,#LogoBorder,#SymbolGap)))" color="#ColSymbol" path="#SymbolScrambled" condition="{ChannelIsEncrypted}"/>
+ <image x="add(#LogoSymbX,mul(3,add(#SymbolW,#SymbolGap)))" y="add(#LogoSymbY,mul({SettingShowChannelLogo},add(#LogoBorder,#LogoH,#LogoBorder,#SymbolGap)))" color="#ColSymbol" path="#SymbolMute" condition="{VolumeIsMute}"/>
+ </block>
+ <block condition="and(#LogoSymbSmall,{SettingShowSymbols})">
+ <image x="#LogoSymbX" y="add(#LogoSymbY,mul(0,add(#SymbolH,#SymbolGap)))" color="#ColSymbol" path="#SymbolTeletext" condition="{ChannelHasTeletext}"/>
+ <image x="#LogoSymbX" y="add(#LogoSymbY,mul(1,add(#SymbolH,#SymbolGap)))" color="#ColSymbol" path="#SymbolDolby" condition="{ChannelHasDolby}"/>
+ <image x="#LogoSymbX" y="add(#LogoSymbY,mul(2,add(#SymbolH,#SymbolGap)))" color="#ColSymbol" path="#SymbolScrambled" condition="{ChannelIsEncrypted}"/>
+ <image x="#LogoSymbX" y="add(#LogoSymbY,mul(3,add(#SymbolH,#SymbolGap)))" color="#ColSymbol" path="#SymbolMute" condition="{VolumeIsMute}"/>
+ </block>
+ <block condition="and({SettingShowTimebar},{FollowingValid})">
+ <text x1="0" x2="-1" y1="#TimeBarY" y2="-1" color="#ColPresProgrText" align="left" font="FontTimes">
+ {PresentStartDateTime:%H\:%M} - {FollowingStartDateTime:%H\:%M}
+ </text>
+ <rectangle x="#PaddingW" width="#TimeBarW" y="add(#TimeBarY,#PaddingH,FontLineHeight('FontTimes'))" height="6" color="#ColPresProgrBarBrd"/>
+ <progress x="add(#PaddingW,2)" width="sub(#TimeBarW,4)" y1="add(#TimeBarY,#PaddingH,FontLineHeight('FontTimes'),2)" height="2" color="#ColPresProgrBar" direction="0" current="{PresentProgress}" total="{PresentDuration}"/>
+ </block>
+
+ <!-- ProginfoPlaceY: Y start for title-info w/o and w/ limits because of logos + symbols
+ ProginfoPlaceYLim: Y start for title-info w/o any limits -->
+ <variable id="ProginfoPlaceY" value="add(#TimeBarY,#PaddingH,FontLineHeight('FontTimes'),6,#PaddingH)" condition="{SettingShowTimebar}"
+ default="add(#ChannelBarH,#PaddingH)" />
+ <variable id="ProginfoPlaceYLim" value="#ProginfoPlaceY" condition="lt(add(#LogoSymbX,#LogoSymbH,#PaddingH),#ProginfoPlaceY)"
+ default="add(#LogoSymbY,#LogoSymbH,#PaddingH)" />
+ <!--variable id="PresentTextY" value="sub(sub(#RecordingsLineY,FontLineHeight('FontInfo')),2)"/-->
+
+ <variable id="ProginfoLines" value="5" condition="gt(sub({ScreenHeight},#ProginfoPlaceY,1),add(FontLineHeight('FontTitle'),FontLineHeight('FontTitleSmall'),FontLineHeight('FontInfoSmall'),FontLineHeight('FontInfoSmall2'),#LineThickness,1,FontLineHeight('FontInfoSmall2')))" />
+ <variable id="ProginfoLines" value="4" condition="gt(sub({ScreenHeight},#ProginfoPlaceY,1),add(FontLineHeight('FontTitle'),FontLineHeight('FontTitleSmall'),FontLineHeight('FontInfoSmall'),#LineThickness,1,FontLineHeight('FontInfoSmall2')))" />
+ <variable id="ProginfoLines" value="3" condition="gt(sub({ScreenHeight},#ProginfoPlaceY,1),add(FontLineHeight('FontTitle'),FontLineHeight('FontTitleSmall'),FontLineHeight('FontInfoSmall')))" />
+ <variable id="ProginfoLines" value="2" condition="gt(sub({ScreenHeight},#ProginfoPlaceY,1),add(FontLineHeight('FontTitle'),FontLineHeight('FontInfoSmall')))" />
+ <variable id="ProginfoLines" value="1" />
+
+ <variable id="ProginfoLine1YRaw" value="#ProginfoPlaceY" />
+ <variable id="ProginfoLine2YRaw" value="add(#ProginfoPlaceY,FontLineHeight('FontTitle'))" />
+ <variable id="ProginfoLine3YRaw" value="add(#ProginfoPlaceY,FontLineHeight('FontTitle'),FontLineHeight('FontTitleSmall'))" />
+ <variable id="ProginfoLine4YRaw" value="add(#ProginfoPlaceY,FontLineHeight('FontTitle'),FontLineHeight('FontTitleSmall'),FontLineHeight('FontInfoSmall'))" />
+ <variable id="ProginfoLine5YRaw" value="add(#ProginfoPlaceY,FontLineHeight('FontTitle'),FontLineHeight('FontTitleSmall'),FontLineHeight('FontInfoSmall'),FontLineHeight('FontInfoSmall'))" />
+
+ <variable id="ProginfoGapH" value="sub(#ProginfoLine5YRaw,#ProginfoLine4YRaw)" condition="eq(#ProginfoLines,5)" />
+ <variable id="ProginfoGapH" value="sub(#ProginfoLine4YRaw,#ProginfoLine3YRaw)" condition="eq(#ProginfoLines,4)" />
+ <variable id="ProginfoGapH" value="0" />
+
+ <!-- big displays: divide free space and add as gap(s) -->
+ <variable id="ProginfoLine1Y" value="add(#ProginfoLine1YRaw,div(#ProginfoGapH,2))" />
+ <variable id="ProginfoLine2Y" value="add(#ProginfoLine2YRaw,div(#ProginfoGapH,2))" />
+ <variable id="ProginfoLine3Y" value="add(#ProginfoLine3YRaw,#ProginfoGapH)" />
+ <variable id="ProginfoLine4Y" value="add(#ProginfoLine4YRaw,#ProginfoGapH)" />
+ <variable id="ProginfoLine5Y" value="add(#ProginfoLine5YRaw,#ProginfoGapH)" />
+
+ <!-- Y starts for information lines -->
+ <variable id="PresentTitleY" value="#ProginfoLine1Y" />
+ <variable id="PresentShortTextY" value="#ProginfoLine2Y" />
+ <variable id="FollowingTitleY" value="#ProginfoLine3Y" condition="gt(#ProginfoLines,2)" default="#ProginfoLine2Y" />
+ <variable id="FollowingShortTextY" value="#ProginfoLine4Y" condition="gt(#ProginfoLines,3)" default="0" />
+ <variable id="RecordingsAreaY" value="#ProginfoLine5Y" condition="eq(#ProginfoLines,5)" />
+ <variable id="RecordingsAreaY" value="#ProginfoLine4Y" condition="eq(#ProginfoLines,4)" />
+ <variable id="RecordingsAreaY" value="#ProginfoLine3Y" condition="eq(#ProginfoLines,3)" default="#ProginfoLine2Y" />
+
+ <!-- width for information lines (default: screenwidth, except a line would overlap logo/symbol area -->
+ <variable id="PresentTitleW" value="-1" condition="ge(#PresentTitleY,#ProginfoPlaceYLim)" default="sub(#LogoSymbX,1,#PaddingW)" />
+ <variable id="PresentShortTextW" value="-1" condition="ge(#PresentShortTextY,#ProginfoPlaceYLim)" default="sub(#LogoSymbX,1,#PaddingW)" />
+ <variable id="FollowingTitleW" value="-1" condition="ge(#FollowingTitleY,#ProginfoPlaceYLim)" default="sub(#LogoSymbX,1,#PaddingW)" />
+ <variable id="FollowingShortTextW" value="-1" condition="ge(#FollowingShortTextY,#ProginfoPlaceYLim)" default="sub(#LogoSymbX,1,#PaddingW)" />
+ <variable id="RecordingsAreaW" value="-1" condition="ge(#RecordingsAreaY,#ProginfoPlaceYLim)" default="sub(#LogoSymbX,1,#PaddingW)" />
+
+ <variable id="RecordingsLineY" value="#RecordingsAreaY"/>
+ <variable id="RecordingsTextY" value="add(#RecordingsLineY,#LineThickness,1)" />
+ <variable id="RecordingsSymbolY" value="add(#RecordingsTextY,div(sub(FontLineHeight('FontInfoSmall2'),#SymbolH),2))"/>
+
+
+ <!--variable id="PresentShortTextY" value="add(#PresentTitleY,FontLineHeight('FontTitle'))" /-->
+ <!--variable id="FollowingTextY" value="add(#PresentShortTextY,FontLineHeight('FontTitleSmall'))" /-->
+ <!--variable id="FollowingShortTextY" value="add(#FollowingTextY,FontLineHeight('FontInfoSmall'))" /-->
+
+ <text x="0" y="#PresentTitleY" width="#PresentTitleW" height="FontLineHeight('FontTitle')" color="#ColPresentTitle" align="left" font="FontTitle">
+ {PresentTitle}
+ </text>
+
+ <text x="0" y="#PresentShortTextY" condition="gt(#ProginfoLines,2)" width="#PresentShortTextW" height="FontLineHeight('FontTitleSmall')" color="#ColPresentTitle" align="left" font="FontTitleSmall">
+ {PresentShortText}
+ </text>
+ <block condition="{FollowingValid}">
+ <text x="0" y="#FollowingTitleY" condition="or(gt(#ProginfoLines,3),and(ge(#ProginfoLines,2),not({IsRecording})))" height="FontLineHeight('FontInfoSmall')" color="#ColPresentTitle" align="left" font="FontInfoSmall">
+ {FollowingStartDateTime:%H\:%M}
+ </text>
+ <text x="FontTextWidth('FontInfoSmall','00:00 ')" condition="or(gt(#ProginfoLines,3),and(ge(#ProginfoLines,2),not({IsRecording})))" y="#FollowingTitleY" width="sub(#FollowingTitleW,FontTextWidth('FontInfoSmall','00:00 '))" height="FontLineHeight('FontInfoSmall')" color="#ColPresentTitle" align="left" font="FontInfoSmall">
+ {FollowingTitle}
+ </text>
+ <text x="FontTextWidth('FontInfoSmall','00:00 ')" condition="or(gt(#ProginfoLines,4),and(eq(#ProginfoLines,4),not({IsRecording})))" y="#FollowingShortTextY" width="sub(#FollowingShortTextW,FontTextWidth('FontInfoSmall','00:00 '))" height="FontLineHeight('FontInfoSmall2')" color="#ColPresentTitle" align="left" font="FontInfoSmall2">
+ {FollowingShortText}
+ </text>
+ </block>
+
+ <rectangle x1="0" x2="-1" y="#RecordingsLineY" height="#LineThickness" condition="{IsRecording}" color="#ColBorder" filled="yes"/>
+ <image x="0" y="#RecordingsSymbolY" color="#ColSymbol" path="#SymbolRecording" condition="{IsRecording}"/>
+ <text x1="add(#SymbolW,2)" x2="-1" y="#RecordingsTextY" height="FontLineHeight('FontInfoSmall2')" color="#ColRecText" align="left" font="FontInfoSmall2">
+ {Recordings}
+ </text>
+ </display>
+
+ <display id="volume">
+ <variable id="VolumeBarX" value="20"/>
+ <variable id="VolumeBarW" value="sub({ScreenWidth},mul(2,#VolumeBarX))"/>
+ <variable id="VolumeBarH" value="30"/>
+ <variable id="VolumeBarY" value="div(sub({ScreenHeight},#VolumeBarH),2)"/>
+ <variable id="MuteImage" value="'images/mute.pbm'"/>
+ <variable id="MuteImageW" value="ImageWidth(#MuteImage)"/>
+ <variable id="MuteImageH" value="ImageHeight(#MuteImage)"/>
+ <rectangle x1="#VolumeBarX" y1="#VolumeBarY" width="#VolumeBarW" height="#VolumeBarH" color="#ColVolumeBG" filled="yes" radius="3"/>
+ <rectangle x1="add(#VolumeBarX,2)" y1="add(#VolumeBarY,2)" width="sub(#VolumeBarW,4)" height="sub(#VolumeBarH,4)" color="#ColVolumeFG" radius="2"/>
+ <block condition="not({VolumeIsMute})">
+ <progress x1="add(#VolumeBarX,4)" y1="add(#VolumeBarY,4)" width="sub(#VolumeBarW,8)" height="sub(#VolumeBarH,8)" color="#ColVolumeBar" direction="0" current="{VolumeCurrent}" total="{VolumeTotal}"/>
+ </block>
+ <block condition="{VolumeIsMute}">
+ <image x="div(sub({ScreenWidth},#MuteImageW),2)" y="div(sub({ScreenHeight},#MuteImageH),2)" color="#ColVolumeBar" path="#MuteImage"/>
+ </block>
+ </display>
+
+ <display id="audio">
+ <variable id="AudioX" value="10"/>
+ <variable id="AudioW" value="sub({ScreenWidth},mul(4,#AudioX))"/>
+ <variable id="AudioH" value="sub(div({ScreenHeight},2),4)"/>
+ <variable id="AudioY" value="sub({ScreenHeight},div({ScreenHeight},2))"/>
+ <variable id="AudioHeaderH" value="add(FontLineHeight('FontMenuTitle'),1,#PaddingH,#PaddingH)"/>
+ <variable id="AudioChannelW" value="FontTextWidth('FontMenuItem','L|R')" />
+
+ <rectangle x="#AudioX" y="#AudioY" width="#AudioW" height="#AudioHeaderH" color="#ColAudioHeaderBG" filled="yes"/>
+ <text x="add(#PaddingW,#AudioX)" y="add(#PaddingH,#AudioY)" width="sub(#AudioW,#PaddingW,#PaddingW)" height="FontLineHeight('FontMenuTitle')" color="#ColAudioHeaderFG" font="FontMenuTitle">Audio</text>
+ <!--rectangle x1="0" y1="add(FontLineHeight('FontMenuTitle'),2)" x2="-1" height="#LineThickness" color="#ColMenuBorder" filled="yes"/-->
+ <rectangle x="#AudioX" y="add(#AudioY,#AudioHeaderH)" width="#AudioW" height="sub(#AudioH,#AudioHeaderH)" color="#ColAudioBG" filled="yes"/>
+ <list x="#AudioX" y="add(#AudioY,#AudioHeaderH)" width="#AudioW" height="sub(#AudioH,#AudioHeaderH)">
+ <item height="#ItemHeight"/>
+ <rectangle x="0" y="0" width="#AudioW" height="add(#ItemHeight,1)" color="#ColAudioSelected" condition="{IsAudioTrackCurrent}" filled="yes"/>
+ <text x="#PaddingW" width="#AudioChannelW" y="0" height="#ItemHeight" condition="and({IsAudioTrackCurrent},eq({AudioChannel},0))" color="#ColAudioEntryCurr" scrollmode="never" align="center" font="FontMenuItem">L|R</text>
+ <text x="#PaddingW" width="#AudioChannelW" y="0" height="#ItemHeight" condition="and({IsAudioTrackCurrent},eq({AudioChannel},1))" color="#ColAudioEntryCurr" scrollmode="never" align="left" font="FontMenuItem">L| </text>
+ <text x="#PaddingW" width="#AudioChannelW" y="0" height="#ItemHeight" condition="and({IsAudioTrackCurrent},eq({AudioChannel},2))" color="#ColAudioEntryCurr" scrollmode="never" align="right" font="FontMenuItem"> |R</text>
+ <text x1="add(#PaddingW,#AudioChannelW,FontTextWidth('FontMenuItem',' '))" x2="-1" y="0" height="#ItemHeight" color="#ColAudioEntryCurr" font="FontMenuItem">{AudioTrackCurrent}</text>
+ <text x1="add(#PaddingW,#AudioChannelW,FontTextWidth('FontMenuItem',' '))" x2="-1" y="0" height="#ItemHeight" color="#ColAudioEntry" font="FontMenuItem">{AudioTrackItem}</text>
+ <!--text x1="#ArrowWidth" x2="-1" y1="0" height="#ItemHeight" color="#ColMenuEntryCurr" font="FontMenuItem">{MenuCurrent}</text-->
+ <!--image x="0" y="#ArrowY" color="#ColMenuEntryMarker" path="#ArrowBitmap" condition="{IsMenuCurrent}"/-->
+ <!--text x1="#ArrowWidth" x2="-1" y1="0" height="#ItemHeight" color="#ColMenuEntry" font="FontMenuItem">{MenuItem}</text-->
+ </list>
+ </display>
+
+ <display id="message">
+ <variable id="MessageX" value="10"/>
+ <variable id="MessageW" value="sub({ScreenWidth},mul(2,#MessageX))"/>
+ <variable id="MessageTextH" value="mul(4,FontLineHeight('FontInfo'))"/>
+ <variable id="MessageH" value="add(#MessageTextH,8)"/>
+ <variable id="MessageY" value="div(sub({ScreenHeight},#MessageH),2)"/>
+ <variable id="MessageBitmap" value="'images/message.pbm'"/>
+ <variable id="MessageBitmapW" value="ImageWidth(#MessageBitmap)"/>
+ <variable id="MessageBitmapH" value="ImageHeight(#MessageBitmap)"/>
+
+ <rectangle x1="#MessageX" y1="#MessageY" width="#MessageW" height="#MessageH" color="#ColMessageBG" filled="yes" radius="3"/>
+ <rectangle x1="add(#MessageX,2)" y1="add(#MessageY,2)" width="sub(#MessageW,4)" height="sub(#MessageH,4)" color="#ColMessageFG" radius="2"/>
+ <block condition="lt(#MessageBitmapH,sub(#MessageH,12))">
+ <image x1="add(#MessageX,6)" y1="add(#MessageY,6)" color="#ColMessageIcon" path="#MessageBitmap"/>
+ <text x1="add(add(#MessageX,10),#MessageBitmapW)" y1="add(#MessageY,4)" width="sub(sub(#MessageW,14),#MessageBitmapW)" height="#MessageTextH" color="#ColMessageText" align="left" multiline="yes" font="FontInfo">
+ {Message}
+ </text>
+ </block>
+ <block condition="ge(#MessageBitmapH,sub(#MessageH,12))">
+ <text x1="add(#MessageX,4)" y1="add(#MessageY,4)" width="sub(#MessageW,8)" height="#MessageTextH" color="#ColMessageText" align="left" multiline="yes" font="FontInfo">
+ {Message}
+ </text>
+ </block>
+ </display>
+
+ <display id="replay">
+ <variable id="ReplayProgressH" value="14"/>
+ <variable id="ReplayProgressGap" value="1"/>
+ <variable id="ReplayTimeY" value="mul(FontLineHeight('FontInfo'),-1)"/>
+ <variable id="ReplayProgressY" value="sub(#ReplayTimeY,#ReplayProgressH,#ReplayProgressGap)"/>
+ <variable id="ReplayLogo" value="'{ConfigPath}/logos/replay/replay-{ReplayMode}_m.glcd'" condition="le({ScreenHeight},64)"/>
+ <variable id="ReplayLogo" value="'{ConfigPath}/logos/replay/replay-{ReplayMode}_l.glcd'"/>
+ <variable id="ReplayLogoW" value="ImageWidth(#ReplayLogo)" />
+ <variable id="ReplayLogoH" value="ImageHeight(#ReplayLogo)" />
+ <variable id="ReplayLogoX" value="sub({ScreenWidth},#ReplayLogoW)" />
+
+ <block condition="{SettingShowReplayLogo}">
+ <image x="#ReplayLogoX" y="0" color="#ColReplayLogo" path="#ReplayLogo"/>
+ <rectangle x="sub(#ReplayLogoX,#LineThickness)" width="#LineThickness" y="0" height="#LogoH" color="#ColReplayBorder" filled="yes"/>
+ <rectangle x1="sub(#ReplayLogoX,#LineThickness)" x2="-1" y="#ReplayLogoH" height="#LineThickness" color="#ColReplayBorder" filled="yes"/>
+ <text x1="0" x2="sub(#ReplayLogoX,#LineThickness,2)" y1="0" y2="#ReplayProgressY" color="#ColReplayText" align="left" multiline="yes" font="FontInfo">
+ {ReplayTitle}
+ </text>
+ </block>
+ <block condition="not({SettingShowReplayLogo})">
+ <text x1="0" x2="-1" y1="0" y2="#ReplayProgressY" color="#ColReplayText" align="left" multiline="yes" font="FontInfo">
+ {ReplayTitle}
+ </text>
+ </block>
+ <rectangle x1="0" y1="#ReplayProgressY" width="15" height="14" color="#ColReplayBorder"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplayLogo" path="symbols/replay-play.pbm" condition="{ReplayIsPlaying}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplayLogo" path="symbols/replay-pause.pbm" condition="{ReplayIsPausing}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplayLogo" path="symbols/replay-fast-fwd.pbm" condition="{ReplayIsFastForward}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplayLogo" path="symbols/replay-fast-rwd.pbm" condition="{ReplayIsFastRewind}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplayLogo" path="symbols/replay-slow-fwd.pbm" condition="{ReplayIsSlowForward}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplayLogo" path="symbols/replay-slow-rwd.pbm" condition="{ReplayIsSlowRewind}"/>
+ <rectangle x1="14" x2="-1" y1="#ReplayProgressY" height="#ReplayProgressH" color="#ColReplayBorder"/>
+ <progress x1="16" x2="-3" y1="add(#ReplayProgressY,2)" height="sub(#ReplayProgressH,4)" color="#ColReplayBar" direction="0" current="{ReplayPosition}" total="{ReplayDuration}"/>
+ <text x1="0" x2="-1" y1="#ReplayTimeY" y2="-1" color="#ColReplayText" align="left" font="FontInfo">
+ {ReplayPositionIndex:%H\:%M\:%S}
+ </text>
+ <text x1="0" x2="-1" y1="#ReplayTimeY" y2="-1" color="#ColReplayText" align="right" font="FontInfo">
+ {ReplayDurationIndex:%H\:%M\:%S}
+ </text>
+ </display>
+
+ <display id="menu">
+ <variable id="ButtonPitch" value="div({ScreenWidth},4)"/>
+ <variable id="ButtonWidth" value="sub(#ButtonPitch,2)"/>
+ <variable id="ButtonHeight" value="add(FontLineHeight('FontMenuButton'),2)"/>
+ <variable id="ButtonY" value="mul(#ButtonHeight,-1)"/>
+ <variable id="ItemHeight" value="FontLineHeight('FontMenuItem')"/>
+ <!--variable id="ArrowBitmap" value="'images/arrow_small.pbm'" condition="le({ScreenHeight},64)"/-->
+ <!--variable id="ArrowBitmap" value="'images/arrow.pbm'"/-->
+ <!--variable id="ArrowWidth" value="ImageWidth(#ArrowBitmap)"/-->
+ <!--variable id="ArrowHeight" value="ImageHeight(#ArrowBitmap)"/-->
+ <!--variable id="ArrowY" value="div(sub(#ItemHeight,#ArrowHeight),2)" condition="le({ScreenHeight},64)"/-->
+ <!--variable id="ArrowY" value="add(div(sub(#ItemHeight,#ArrowHeight),2),2)"/-->
+
+ <rectangle x1="0" y1="0" width="{ScreenWidth}" height="add(FontLineHeight('FontMenuTitle'),1)" color="#ColMenuHeaderBG" filled="yes"/>
+ <text x1="#PaddingW" x2="-1" height="FontLineHeight('FontMenuTitle')" color="#ColMenuHeaderFG" font="FontMenuTitle">{MenuTitle}</text>
+ <rectangle x1="0" y1="add(FontLineHeight('FontMenuTitle'),2)" x2="-1" height="#LineThickness" color="#ColMenuBorder" filled="yes"/>
+ <list x1="0" y1="add(FontLineHeight('FontMenuTitle'),4)" x2="-1" y2="#ButtonY">
+ <item height="#ItemHeight"/>
+ <rectangle x="0" y="0" height="add(#ItemHeight,1)" color="#ColMenuSelected" condition="{IsMenuCurrent}" filled="yes"/>
+ <text x1="#PaddingW" x2="-1" y1="0" height="#ItemHeight" color="#ColMenuEntryCurr" font="FontMenuItem">{MenuCurrent}</text>
+ <text x1="#PaddingW" x2="-1" y1="0" height="#ItemHeight" color="#ColMenuEntry" font="FontMenuItem">{MenuItem}</text>
+ <!--text x1="#ArrowWidth" x2="-1" y1="0" height="#ItemHeight" color="#ColMenuEntryCurr" font="FontMenuItem">{MenuCurrent}</text-->
+ <!--image x="0" y="#ArrowY" color="#ColMenuEntryMarker" path="#ArrowBitmap" condition="{IsMenuCurrent}"/-->
+ <!--text x1="#ArrowWidth" x2="-1" y1="0" height="#ItemHeight" color="#ColMenuEntry" font="FontMenuItem">{MenuItem}</text-->
+ </list>
+ <block condition="{ButtonRed}">
+ <rectangle x1="add(mul(#ButtonPitch,0),1)" y1="#ButtonY" width="#ButtonWidth" height="#ButtonHeight" color="#ColMenuButtonRBG" filled="yes" radius="2"/>
+ <text x1="add(mul(#ButtonPitch,0),2)" y1="#ButtonY" width="sub(#ButtonPitch,4)" height="#ButtonHeight" color="#ColMenuButtonRFG" align="center" scrollmode="once" font="FontMenuButton">{ButtonRed}</text>
+ </block>
+ <block condition="{ButtonGreen}">
+ <rectangle x1="add(mul(#ButtonPitch,1),1)" y1="#ButtonY" width="#ButtonWidth" height="#ButtonHeight" color="#ColMenuButtonGBG" filled="yes" radius="2"/>
+ <text x1="add(mul(#ButtonPitch,1),2)" y1="#ButtonY" width="sub(#ButtonPitch,4)" height="#ButtonHeight" color="#ColMenuButtonGFG" align="center" scrollmode="once" font="FontMenuButton">{ButtonGreen}</text>
+ </block>
+ <block condition="{ButtonYellow}">
+ <rectangle x1="add(mul(#ButtonPitch,2),1)" y1="#ButtonY" width="#ButtonWidth" height="#ButtonHeight" color="#ColMenuButtonYBG" filled="yes" radius="2"/>
+ <text x1="add(mul(#ButtonPitch,2),2)" y1="#ButtonY" width="sub(#ButtonPitch,4)" height="#ButtonHeight" color="#ColMenuButtonYFG" align="center" scrollmode="once" font="FontMenuButton">{ButtonYellow}</text>
+ </block>
+ <block condition="{ButtonBlue}">
+ <rectangle x1="add(mul(#ButtonPitch,3),1)" y1="#ButtonY" width="#ButtonWidth" height="#ButtonHeight" color="#ColMenuButtonBBG" filled="yes" radius="2"/>
+ <text x1="add(mul(#ButtonPitch,3),2)" y1="#ButtonY" width="sub(#ButtonPitch,4)" height="#ButtonHeight" color="#ColMenuButtonBFG" align="center" scrollmode="once" font="FontMenuButton">{ButtonBlue}</text>
+ </block>
+
+ <block condition="{MenuText}">
+ <text x="#PaddingW" y="add(FontLineHeight('FontMenuTitle'),4)" y2="#ButtonY" color="#ColMenuText" multiline="yes" mlrelscroll="{MenuTextScroll}" font="FontMenuItem">{MenuText}</text>
+ </block>
+
+ </display>
+</skin>
diff --git a/graphlcd/skins/default/images/arrow.pbm b/graphlcd/skins/default/images/arrow.pbm
new file mode 100644
index 0000000..2ea2c0f
--- /dev/null
+++ b/graphlcd/skins/default/images/arrow.pbm
Binary files differ
diff --git a/graphlcd/skins/default/images/arrow_small.pbm b/graphlcd/skins/default/images/arrow_small.pbm
new file mode 100644
index 0000000..b02a42b
--- /dev/null
+++ b/graphlcd/skins/default/images/arrow_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+8 7
+ þÿþ  \ No newline at end of file
diff --git a/graphlcd/skins/default/images/message.pbm b/graphlcd/skins/default/images/message.pbm
new file mode 100644
index 0000000..a8ff675
--- /dev/null
+++ b/graphlcd/skins/default/images/message.pbm
Binary files differ
diff --git a/graphlcd/skins/default/images/mute.pbm b/graphlcd/skins/default/images/mute.pbm
new file mode 100644
index 0000000..f19b0fa
--- /dev/null
+++ b/graphlcd/skins/default/images/mute.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+23 22
+À‡`Í0Ù0± `aÀÁ }ƒAÎÆÁlÁ8Á8ÁlÁÎÆÁ}ƒA @Á `a0±0Ù`ÍÀ‡ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/dolby.pbm b/graphlcd/skins/default/symbols/dolby.pbm
new file mode 100644
index 0000000..7273c86
--- /dev/null
+++ b/graphlcd/skins/default/symbols/dolby.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+þþžò†Â†Â‚‚‚‚‚‚†Â†Âžòþþ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/dolby_small.pbm b/graphlcd/skins/default/symbols/dolby_small.pbm
new file mode 100644
index 0000000..a4a72f9
--- /dev/null
+++ b/graphlcd/skins/default/symbols/dolby_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ûÿ»¿›?Š?›?»¿ûÿ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/empty.pbm b/graphlcd/skins/default/symbols/empty.pbm
new file mode 100644
index 0000000..2fbee34
--- /dev/null
+++ b/graphlcd/skins/default/symbols/empty.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþ€€€€€€€€€ÿþ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/empty_small.pbm b/graphlcd/skins/default/symbols/empty_small.pbm
new file mode 100644
index 0000000..fe8389b
--- /dev/null
+++ b/graphlcd/skins/default/symbols/empty_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿ€?€?€?€9€7ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/multilanguage.pbm b/graphlcd/skins/default/symbols/multilanguage.pbm
new file mode 100644
index 0000000..0b6c317
--- /dev/null
+++ b/graphlcd/skins/default/symbols/multilanguage.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþ€€œr¶Ú¢Š¶Úœr€€ÿþ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/multilanguage_small.pbm b/graphlcd/skins/default/symbols/multilanguage_small.pbm
new file mode 100644
index 0000000..3435bfd
--- /dev/null
+++ b/graphlcd/skins/default/symbols/multilanguage_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿþ€?»¿ª¿»¿€?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/mute.pbm b/graphlcd/skins/default/symbols/mute.pbm
new file mode 100644
index 0000000..d88a206
--- /dev/null
+++ b/graphlcd/skins/default/symbols/mute.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+v œ0 ðÐ ð0 œv \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/mute_small.pbm b/graphlcd/skins/default/symbols/mute_small.pbm
new file mode 100644
index 0000000..f86fc93
--- /dev/null
+++ b/graphlcd/skins/default/symbols/mute_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+G_)Ÿ%)ŸG_ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/recording.pbm b/graphlcd/skins/default/symbols/recording.pbm
new file mode 100644
index 0000000..b13c220
--- /dev/null
+++ b/graphlcd/skins/default/symbols/recording.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþÿþÌfÕÞÕÞÌÞÕÞÕÞÔfÿþÿþ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/recording2.pbm b/graphlcd/skins/default/symbols/recording2.pbm
new file mode 100644
index 0000000..569dc17
--- /dev/null
+++ b/graphlcd/skins/default/symbols/recording2.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþÿþãžíníîãÞë¾í~íÿþÿþ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/recording2_small.pbm b/graphlcd/skins/default/symbols/recording2_small.pbm
new file mode 100644
index 0000000..b52adb7
--- /dev/null
+++ b/graphlcd/skins/default/symbols/recording2_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿœ¯¿Ÿ®ÿ¬?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/recording3.pbm b/graphlcd/skins/default/symbols/recording3.pbm
new file mode 100644
index 0000000..af1e5da
--- /dev/null
+++ b/graphlcd/skins/default/symbols/recording3.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþÿþãžíníîãÞëîínížÿþÿþ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/recording3_small.pbm b/graphlcd/skins/default/symbols/recording3_small.pbm
new file mode 100644
index 0000000..1383772
--- /dev/null
+++ b/graphlcd/skins/default/symbols/recording3_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿœ¯¿ž¯¿¬ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/recording4.pbm b/graphlcd/skins/default/symbols/recording4.pbm
new file mode 100644
index 0000000..cfc18b7
--- /dev/null
+++ b/graphlcd/skins/default/symbols/recording4.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþÿþã¾í¾í~ã^ëíÞíÞÿþÿþ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/recording4_small.pbm b/graphlcd/skins/default/symbols/recording4_small.pbm
new file mode 100644
index 0000000..33300e6
--- /dev/null
+++ b/graphlcd/skins/default/symbols/recording4_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿŸ®ÿ¬?¯ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/recording_small.pbm b/graphlcd/skins/default/symbols/recording_small.pbm
new file mode 100644
index 0000000..b378aae
--- /dev/null
+++ b/graphlcd/skins/default/symbols/recording_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿ™?«™«©?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/replay-fast-fwd.pbm b/graphlcd/skins/default/symbols/replay-fast-fwd.pbm
new file mode 100644
index 0000000..a5dfa47
--- /dev/null
+++ b/graphlcd/skins/default/symbols/replay-fast-fwd.pbm
Binary files differ
diff --git a/graphlcd/skins/default/symbols/replay-fast-rwd.pbm b/graphlcd/skins/default/symbols/replay-fast-rwd.pbm
new file mode 100644
index 0000000..bccfb9c
--- /dev/null
+++ b/graphlcd/skins/default/symbols/replay-fast-rwd.pbm
Binary files differ
diff --git a/graphlcd/skins/default/symbols/replay-pause.pbm b/graphlcd/skins/default/symbols/replay-pause.pbm
new file mode 100644
index 0000000..5a45410
--- /dev/null
+++ b/graphlcd/skins/default/symbols/replay-pause.pbm
Binary files differ
diff --git a/graphlcd/skins/default/symbols/replay-play.pbm b/graphlcd/skins/default/symbols/replay-play.pbm
new file mode 100644
index 0000000..9808fa2
--- /dev/null
+++ b/graphlcd/skins/default/symbols/replay-play.pbm
Binary files differ
diff --git a/graphlcd/skins/default/symbols/replay-slow-fwd.pbm b/graphlcd/skins/default/symbols/replay-slow-fwd.pbm
new file mode 100644
index 0000000..5187921
--- /dev/null
+++ b/graphlcd/skins/default/symbols/replay-slow-fwd.pbm
Binary files differ
diff --git a/graphlcd/skins/default/symbols/replay-slow-rwd.pbm b/graphlcd/skins/default/symbols/replay-slow-rwd.pbm
new file mode 100644
index 0000000..a069fa4
--- /dev/null
+++ b/graphlcd/skins/default/symbols/replay-slow-rwd.pbm
Binary files differ
diff --git a/graphlcd/skins/default/symbols/scrambled.pbm b/graphlcd/skins/default/symbols/scrambled.pbm
new file mode 100644
index 0000000..50d6fd1
--- /dev/null
+++ b/graphlcd/skins/default/symbols/scrambled.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþ€€€r€Ú¿Š˜Ú˜r€€ÿþ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/scrambled_small.pbm b/graphlcd/skins/default/symbols/scrambled_small.pbm
new file mode 100644
index 0000000..56c7af7
--- /dev/null
+++ b/graphlcd/skins/default/symbols/scrambled_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿ€?ƒ¿¾¿“¿€?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/teletext.pbm b/graphlcd/skins/default/symbols/teletext.pbm
new file mode 100644
index 0000000..c1bfccd
--- /dev/null
+++ b/graphlcd/skins/default/symbols/teletext.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþ€€¿ú€¿ú€¿ú€€ÿþ \ No newline at end of file
diff --git a/graphlcd/skins/default/symbols/teletext_small.pbm b/graphlcd/skins/default/symbols/teletext_small.pbm
new file mode 100644
index 0000000..825ce98
--- /dev/null
+++ b/graphlcd/skins/default/symbols/teletext_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿ€?¿¿€?¿¿€?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/images/arrow.pbm b/graphlcd/skins/touchcol/images/arrow.pbm
new file mode 100644
index 0000000..2ea2c0f
--- /dev/null
+++ b/graphlcd/skins/touchcol/images/arrow.pbm
Binary files differ
diff --git a/graphlcd/skins/touchcol/images/arrow_small.pbm b/graphlcd/skins/touchcol/images/arrow_small.pbm
new file mode 100644
index 0000000..b02a42b
--- /dev/null
+++ b/graphlcd/skins/touchcol/images/arrow_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+8 7
+ þÿþ  \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/images/message.pbm b/graphlcd/skins/touchcol/images/message.pbm
new file mode 100644
index 0000000..a8ff675
--- /dev/null
+++ b/graphlcd/skins/touchcol/images/message.pbm
Binary files differ
diff --git a/graphlcd/skins/touchcol/images/mute.pbm b/graphlcd/skins/touchcol/images/mute.pbm
new file mode 100644
index 0000000..f19b0fa
--- /dev/null
+++ b/graphlcd/skins/touchcol/images/mute.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+23 22
+À‡`Í0Ù0± `aÀÁ }ƒAÎÆÁlÁ8Á8ÁlÁÎÆÁ}ƒA @Á `a0±0Ù`ÍÀ‡ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/dolby.pbm b/graphlcd/skins/touchcol/symbols/dolby.pbm
new file mode 100644
index 0000000..7273c86
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/dolby.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+þþžò†Â†Â‚‚‚‚‚‚†Â†Âžòþþ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/dolby_small.pbm b/graphlcd/skins/touchcol/symbols/dolby_small.pbm
new file mode 100644
index 0000000..a4a72f9
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/dolby_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ûÿ»¿›?Š?›?»¿ûÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/empty.pbm b/graphlcd/skins/touchcol/symbols/empty.pbm
new file mode 100644
index 0000000..2fbee34
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/empty.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþ€€€€€€€€€ÿþ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/empty_small.pbm b/graphlcd/skins/touchcol/symbols/empty_small.pbm
new file mode 100644
index 0000000..fe8389b
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/empty_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿ€?€?€?€9€7ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/multilanguage.pbm b/graphlcd/skins/touchcol/symbols/multilanguage.pbm
new file mode 100644
index 0000000..0b6c317
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/multilanguage.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþ€€œr¶Ú¢Š¶Úœr€€ÿþ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/multilanguage_small.pbm b/graphlcd/skins/touchcol/symbols/multilanguage_small.pbm
new file mode 100644
index 0000000..3435bfd
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/multilanguage_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿþ€?»¿ª¿»¿€?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/mute.pbm b/graphlcd/skins/touchcol/symbols/mute.pbm
new file mode 100644
index 0000000..d88a206
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/mute.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+v œ0 ðÐ ð0 œv \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/mute_small.pbm b/graphlcd/skins/touchcol/symbols/mute_small.pbm
new file mode 100644
index 0000000..f86fc93
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/mute_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+G_)Ÿ%)ŸG_ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/recording.pbm b/graphlcd/skins/touchcol/symbols/recording.pbm
new file mode 100644
index 0000000..b13c220
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/recording.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþÿþÌfÕÞÕÞÌÞÕÞÕÞÔfÿþÿþ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/recording2.pbm b/graphlcd/skins/touchcol/symbols/recording2.pbm
new file mode 100644
index 0000000..569dc17
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/recording2.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþÿþãžíníîãÞë¾í~íÿþÿþ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/recording2_small.pbm b/graphlcd/skins/touchcol/symbols/recording2_small.pbm
new file mode 100644
index 0000000..b52adb7
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/recording2_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿœ¯¿Ÿ®ÿ¬?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/recording3.pbm b/graphlcd/skins/touchcol/symbols/recording3.pbm
new file mode 100644
index 0000000..af1e5da
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/recording3.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþÿþãžíníîãÞëîínížÿþÿþ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/recording3_small.pbm b/graphlcd/skins/touchcol/symbols/recording3_small.pbm
new file mode 100644
index 0000000..1383772
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/recording3_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿœ¯¿ž¯¿¬ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/recording4.pbm b/graphlcd/skins/touchcol/symbols/recording4.pbm
new file mode 100644
index 0000000..cfc18b7
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/recording4.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþÿþã¾í¾í~ã^ëíÞíÞÿþÿþ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/recording4_small.pbm b/graphlcd/skins/touchcol/symbols/recording4_small.pbm
new file mode 100644
index 0000000..33300e6
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/recording4_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿŸ®ÿ¬?¯ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/recording_small.pbm b/graphlcd/skins/touchcol/symbols/recording_small.pbm
new file mode 100644
index 0000000..b378aae
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/recording_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿ™?«™«©?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/replay-fast-fwd.pbm b/graphlcd/skins/touchcol/symbols/replay-fast-fwd.pbm
new file mode 100644
index 0000000..a5dfa47
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/replay-fast-fwd.pbm
Binary files differ
diff --git a/graphlcd/skins/touchcol/symbols/replay-fast-rwd.pbm b/graphlcd/skins/touchcol/symbols/replay-fast-rwd.pbm
new file mode 100644
index 0000000..bccfb9c
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/replay-fast-rwd.pbm
Binary files differ
diff --git a/graphlcd/skins/touchcol/symbols/replay-pause.pbm b/graphlcd/skins/touchcol/symbols/replay-pause.pbm
new file mode 100644
index 0000000..5a45410
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/replay-pause.pbm
Binary files differ
diff --git a/graphlcd/skins/touchcol/symbols/replay-play.pbm b/graphlcd/skins/touchcol/symbols/replay-play.pbm
new file mode 100644
index 0000000..9808fa2
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/replay-play.pbm
Binary files differ
diff --git a/graphlcd/skins/touchcol/symbols/replay-slow-fwd.pbm b/graphlcd/skins/touchcol/symbols/replay-slow-fwd.pbm
new file mode 100644
index 0000000..5187921
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/replay-slow-fwd.pbm
Binary files differ
diff --git a/graphlcd/skins/touchcol/symbols/replay-slow-rwd.pbm b/graphlcd/skins/touchcol/symbols/replay-slow-rwd.pbm
new file mode 100644
index 0000000..a069fa4
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/replay-slow-rwd.pbm
Binary files differ
diff --git a/graphlcd/skins/touchcol/symbols/scrambled.pbm b/graphlcd/skins/touchcol/symbols/scrambled.pbm
new file mode 100644
index 0000000..50d6fd1
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/scrambled.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþ€€€r€Ú¿Š˜Ú˜r€€ÿþ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/scrambled_small.pbm b/graphlcd/skins/touchcol/symbols/scrambled_small.pbm
new file mode 100644
index 0000000..56c7af7
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/scrambled_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿ€?ƒ¿¾¿“¿€?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/teletext.pbm b/graphlcd/skins/touchcol/symbols/teletext.pbm
new file mode 100644
index 0000000..c1bfccd
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/teletext.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+15 11
+ÿþ€€¿ú€¿ú€¿ú€€ÿþ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/symbols/teletext_small.pbm b/graphlcd/skins/touchcol/symbols/teletext_small.pbm
new file mode 100644
index 0000000..825ce98
--- /dev/null
+++ b/graphlcd/skins/touchcol/symbols/teletext_small.pbm
@@ -0,0 +1,4 @@
+P4
+# Created by Paint Shop Pro 5
+11 7
+ÿÿ€?¿¿€?¿¿€?ÿÿ \ No newline at end of file
diff --git a/graphlcd/skins/touchcol/touchcol.skin b/graphlcd/skins/touchcol/touchcol.skin
new file mode 100644
index 0000000..cb32017
--- /dev/null
+++ b/graphlcd/skins/touchcol/touchcol.skin
@@ -0,0 +1,421 @@
+<?xml version="1.0"?>
+
+<skin version="1.1" name="touchcol" enable="touchscreen">
+
+ <font id="FontInfo" url="fnt:f12bn.fnt" condition="le({ScreenHeight},128)"/>
+ <font id="FontChannel" url="fnt:f12bn.fnt" condition="le({ScreenHeight},128)"/>
+ <font id="FontMenuTitle" url="fnt:f8n.fnt" condition="le({ScreenHeight},128)"/>
+ <font id="FontMenuItem" url="fnt:f8n.fnt" condition="le({ScreenHeight},128)"/>
+ <font id="FontMenuButton" url="fnt:f5n.fnt" condition="le({ScreenHeight},128)"/>
+ <font id="FontTimes" url="fnt:f8n.fnt" condition="le({ScreenHeight},128)"/>
+ <font id="FontTitle" url="ft2:VeraBd.ttf:12" condition="le({ScreenHeight},128)"/>
+ <font id="FontTitleSmall" url="ft2:VeraBd.ttf:10" condition="le({ScreenHeight},128)"/>
+ <font id="FontInfoSmall" url="ft2:Vera.ttf:10" condition="le({ScreenHeight},128)"/>
+ <font id="FontInfoSmall2" url="ft2:Vera.ttf:8" condition="le({ScreenHeight},128)"/>
+ <font id="FontInfoFollowing" url="ft2:Vera.ttf:8" condition="le({ScreenHeight},128)"/>
+ <font id="FontInfoFollowingShort" url="ft2:Vera.ttf:7" condition="le({ScreenHeight},128)"/>
+
+
+ <font id="FontTimes" url="fnt:verdana-018.fnt"/>
+ <!--font id="FontTitle" url="fnt:verdana-022.fnt"/-->
+ <font id="FontTitle" url="ft2:VeraBd.ttf:24"/>
+ <font id="FontTitleSmall" url="ft2:VeraBd.ttf:18"/>
+ <!--font id="FontChannel" url="fnt:verdana-022.fnt"/-->
+ <!--font id="FontMenuButton" url="ft2:VeraBd.ttf:12" condition="#UseTouchscreen"/-->
+ <!--font id="FontMenuButton" url="ft2:DejaVuSans.ttf:9" condition="#UseTouchscreen"/-->
+ <!--font id="FontMenuButton" url="fnt:verdanab-009.fnt"/-->
+
+ <font id="FontInfoSmall" url="ft2:Vera.ttf:12"/>
+ <font id="FontInfoSmall2" url="ft2:Vera.ttf:10"/>
+ <font id="FontInfoFollowing" url="ft2:VeraBd.ttf:9"/>
+ <font id="FontInfoFollowingShort" url="ft2:Vera.ttf:9"/>
+ <!--font id="FontMenuTitle" url="ft2:VeraBd.ttf:13"/-->
+ <!--font id="FontMenuItem" url="ft2:Vera.ttf:9"/-->
+ <font id="FontMenuTitle" url="ft2:DejaVuSans-Bold.ttf:13"/>
+ <font id="FontMenuItem" url="ft2:DejaVuSansCondensed.ttf:9"/>
+ <font id="FontMenuButton" url="ft2:VeraBd.ttf:9"/>
+
+ <font id="FontInfo" url="ft2:VeraBd.ttf:16"/>
+ <font id="FontChannel" url="ft2:VeraBd.ttf:24"/>
+
+ <font id="FontInfoSignal" url="fnt:f8n.fnt"/>
+
+ <variable id="UseTouchscreen" value="1" condition="QueryFeature('touchscreen')" default="0"/>
+
+ <variable id="ColFemonSigProg" value="'0xFF5555'" condition="le({ServiceItem:femon,percent_signal},33)"/>
+ <variable id="ColFemonSigProg" value="'green'" condition="gt({ServiceItem:femon,percent_signal},66)" default="'yellow'"/>
+
+ <variable id="ColFemonSNRProg" value="'0xFF5555'" condition="le({ServiceItem:femon,percent_snr},33)"/>
+ <variable id="ColFemonSNRProg" value="'green'" condition="gt({ServiceItem:femon,percent_snr},66)" default="'yellow'"/>
+
+
+ <!-- COLOURS -->
+ <!-- defines -->
+ <variable id="ColMonoFG" value="{DefaultForegroundColor}"/>
+ <variable id="ColMonoBG" value="{DefaultBackgroundColor}"/>
+
+ <condblock condition="QueryFeature('iscolour')">
+ <!-- display id normal -->
+ <variable id="ColChannelBG" value="'0x300060'" default="#ColMonoFG" />
+ <variable id="ColChannelInfo" value="'white'" default="#ColMonoBG" />
+ <variable id="ColDateTime" value="'white'" default="#ColMonoBG" />
+ <variable id="ColBorder" value="'blue'" default="#ColMonoBG" />
+ <variable id="ColLogoBG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColLogoFG" value="'cyan'" default="#ColMonoFG" />
+ <variable id="ColSymbol" value="'yellow'" default="#ColMonoFG" />
+ <variable id="ColSymbolGreyed" value="'0x333333'" default="#ColMonoBG" />
+ <variable id="ColPresProgrText" value="'0xFF777700'" default="#ColMonoFG" />
+ <variable id="ColPresProgrBar" value="'white'" default="#ColMonoFG" />
+ <variable id="ColPresentTitle" value="'0x77C077'" default="#ColMonoFG" />
+ <variable id="ColPresentShort" value="'0x77C077'" default="#ColMonoFG" />
+ <variable id="ColFollowingTitle" value="'0x00C0C0'" default="#ColMonoFG" />
+ <variable id="ColFollowingShort" value="'0x00C0C0'" default="#ColMonoFG" />
+ <variable id="ColRecSymbol" value="'magenta'" default="#ColMonoFG" />
+ <variable id="ColRecText" value="'magenta'" default="#ColMonoFG" />
+ <variable id="ColFemonBar" value="'cyan'" default="#ColMonoFG" />
+ <variable id="ColFemonText" value="'white'" default="#ColMonoFG" />
+ <!-- display id volume -->
+ <variable id="ColVolumeBG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColVolumeFG" value="'white'" default="#ColMonoFG" />
+ <variable id="ColVolumeBar" value="'green'" default="#ColMonoFG" />
+ <!-- display id message -->
+ <variable id="ColMessageBG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColMessageFG" value="'red'" default="#ColMonoFG" />
+ <variable id="ColMessageIcon" value="'red'" default="#ColMonoFG" />
+ <variable id="ColMessageText" value="'white'" default="#ColMonoFG" />
+ <!-- display id replay -->
+ <variable id="ColReplayBorder" value="#ColBorder" default="#ColBorder" /> <!-- -->
+ <variable id="ColReplayLogo" value="'cyan'" default="#ColMonoFG" />
+ <variable id="ColReplayText" value="'white'" default="#ColMonoFG" />
+ <variable id="ColReplaySymbol" value="'yellow'" default="#ColMonoFG" />
+ <variable id="ColReplayBar" value="'magenta'" default="#ColMonoFG" />
+ <variable id="ColReplayTime" value="'white'" default="#ColMonoFG" />
+ <!-- display id menu -->
+ <!--variable id="ColMenuHeaderBG" value="'yellow'" condition="QueryFeature('iscolour')"/-->
+ <variable id="ColMenuHeaderBG" value="#ColChannelBG" default="#ColChannelBG"/> <!-- -->
+ <variable id="ColMenuHeaderFG" value="'white'" default="#ColChannelInfo"/>
+ <variable id="ColMenuBorder" value="#ColMenuHeaderBG" default="#ColBorder" />
+ <variable id="ColMenuEntryCurr" value="'yellow'" default="#ColMonoFG" />
+ <variable id="ColMenuEntryMarker" value="'yellow'" default="#ColMonoFG" />
+ <variable id="ColMenuEntry" value="'white'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonRBG" value="'red'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonRFG" value="'white'" default="#ColMonoBG" />
+ <variable id="ColMenuButtonGBG" value="'green'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonGFG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColMenuButtonYBG" value="'yellow'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonYFG" value="'black'" default="#ColMonoBG" />
+ <variable id="ColMenuButtonBBG" value="'blue'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonBFG" value="'white'" default="#ColMonoBG" />
+ <variable id="ColMenuButtonBG" value="'0xEEEEEE'" default="#ColMonoFG" />
+ <variable id="ColMenuButtonFG" value="'black'" default="#ColMonoBG" />
+ </condblock>
+
+ <variable id="LineThickness" value="2"/>
+
+ <variable id="LogoW" value="64"/>
+ <variable id="LogoH" value="48"/>
+ <variable id="LogoX" value="mul(-1,#LogoW)"/>
+ <variable id="ChannelLogo" value="'{ConfigPath}/logos/channels/{ChannelAlias}_l.glcd'"/>
+
+ <variable id="SymbolW" value="ImageWidth('symbols/empty.pbm')"/>
+ <variable id="SymbolH" value="ImageHeight('symbols/empty.pbm')"/>
+ <variable id="SymbolPitch" value="add(#SymbolW,1)"/>
+ <variable id="SymbolTeletext" value="'symbols/teletext.pbm'"/>
+ <variable id="SymbolDolby" value="'symbols/dolby.pbm'"/>
+ <variable id="SymbolScrambled" value="'symbols/scrambled.pbm'"/>
+ <variable id="SymbolMute" value="'symbols/mute.pbm'"/>
+ <variable id="SymbolRecording" value="'symbols/recording.pbm'"/>
+
+ <!-- button dimensions -->
+ <variable id="ButtonPitch3W" value="div({ScreenWidth},3)"/>
+ <variable id="ButtonPitch4W" value="div({ScreenWidth},4)"/>
+ <variable id="ButtonPitch5W" value="div({ScreenWidth},5)"/>
+ <variable id="ButtonPitchH" value="div({ScreenHeight},5)" condition="#UseTouchscreen"
+ default="add(FontLineHeight('FontMenuButton'),2)" />
+
+ <variable id="ButtonWidth3" value="sub(#ButtonPitch3W,2)"/>
+ <variable id="ButtonWidth4" value="sub(#ButtonPitch4W,2)"/>
+ <variable id="ButtonWidth5" value="sub(#ButtonPitch5W,2)"/>
+ <variable id="ButtonHeight" value="sub(#ButtonPitchH,2)"/>
+ <!-- menu dimensions -->
+ <variable id="MenuHeaderW" value="sub({ScreenWidth},mul(#ButtonPitch5W,2),2)" condition="#UseTouchscreen"
+ default="sub({ScreenWidth},0)" />
+ <variable id="MenuHeaderH" value="sub(#ButtonHeight,2)" condition="#UseTouchscreen"
+ default="FontLineHeight('FontMenuTitle')" />
+
+ <display id="normal">
+
+ <block condition="equal({DisplayMode},'Normal')">
+ <variable id="TimeBarW" value="FontTextWidth('FontTimes','00:00 - 00:00')"/>
+ <variable id="TimeBarY" value="add(#LogoH,#LineThickness,FontLineHeight('FontTimes'),18)"/>
+
+ <item x1="0" y1="0" width="mul(div({ScreenWidth},3),2)" height="mul(div({ScreenHeight},5),4)" action="Mode.Interactive"/>
+
+ <rectangle x1="0" y1="0" width="add({ScreenWidth},0)" height="#LogoH" color="#ColChannelBG" filled="yes"/>
+
+ <text x1="1" y1="0" width="sub({ScreenWidth},2)" color="#ColChannelInfo" align="left" font="FontChannel" scrollmode="never">
+ {ChannelNumber} | {ChannelName}
+ </text>
+ <text x1="1" y1="sub(#LogoH,FontLineHeight('FontInfo'))" color="#ColDateTime" align="left" font="FontInfo">
+ {DateTime:%a %d.%m.}
+ </text>
+ <text x1="1" y1="sub(#LogoH,FontLineHeight('FontInfo'))" x2="sub({ScreenWidth},1)" color="#ColDateTime" align="right" font="FontInfo">
+ {DateTime:%H\:%M}
+ </text>
+ <rectangle x1="0" x2="-1" y1="#LogoH" height="#LineThickness" color="#ColBorder" filled="yes"/>
+ <!--rectangle x1="0" x2="-1" y1="#LogoH" height="#LineThickness" color="black" filled="yes"/-->
+ <block condition="{SettingShowChannelLogo}">
+ <rectangle x1="sub(#LogoX,#LineThickness)" width="#LineThickness" y1="add(#LogoH,#LineThickness)" height="#LogoH" color="#ColBorder" filled="yes"/>
+ <rectangle x1="#LogoX" y1="add(#LogoH,#LineThickness)" width="#LogoW" height="#LogoH" color="#ColLogoBG" filled="yes"/>
+ <image x="#LogoX" y="add(#LogoH,#LineThickness)" color="#ColLogoFG" path="#ChannelLogo"/>
+ <rectangle x1="sub(#LogoX,#LineThickness)" x2="-1" y1="add(add(#LogoH,#LineThickness),#LogoH)" height="#LineThickness" color="#ColBorder" filled="yes"/>
+ </block>
+ <block condition="{SettingShowSymbols}">
+ <image x="mul(-4,#SymbolPitch)" y="mul(add(#LogoH,#LineThickness,1),2)" color="#ColSymbol" path="#SymbolTeletext" condition="{ChannelHasTeletext}"/>
+ <image x="mul(-4,#SymbolPitch)" y="mul(add(#LogoH,#LineThickness,1),2)" color="#ColSymbolGreyed" path="#SymbolTeletext" condition="not({ChannelHasTeletext})"/>
+ <image x="mul(-3,#SymbolPitch)" y="mul(add(#LogoH,#LineThickness,1),2)" color="#ColSymbol" path="#SymbolDolby" condition="{ChannelHasDolby}"/>
+ <image x="mul(-3,#SymbolPitch)" y="mul(add(#LogoH,#LineThickness,1),2)" color="#ColSymbolGreyed" path="#SymbolDolby" condition="not({ChannelHasDolby})"/>
+ <image x="mul(-2,#SymbolPitch)" y="mul(add(#LogoH,#LineThickness,1),2)" color="#ColSymbol" path="#SymbolScrambled" condition="{ChannelIsEncrypted}"/>
+ <image x="mul(-2,#SymbolPitch)" y="mul(add(#LogoH,#LineThickness,1),2)" color="#ColSymbolGreyed" path="#SymbolScrambled" condition="not({ChannelIsEncrypted})"/>
+ <image x="mul(-1,#SymbolPitch)" y="mul(add(#LogoH,#LineThickness,1),2)" color="#ColSymbol" path="#SymbolMute" condition="{VolumeIsMute}"/>
+ <image x="mul(-1,#SymbolPitch)" y="mul(add(#LogoH,#LineThickness,1),2)" color="#ColSymbolGreyed" path="#SymbolMute" condition="not({VolumeIsMute})"/>
+ </block>
+ <block condition="{SettingShowTimebar}">
+ <block condition="{PresentValid}">
+ <text x1="0" x2="-1" y1="add(add(#LogoH,#LineThickness),15)" y2="-1" color="#ColPresProgrText" align="left" font="FontTimes">
+ {PresentStartDateTime:%H\:%M} - {FollowingStartDateTime:%H\:%M}
+ </text>
+ <rectangle x1="0" width="#TimeBarW" y1="#TimeBarY" height="12" color="#ColPresProgrBar"/>
+ <progress x1="4" width="sub(#TimeBarW,8)" y1="add(#TimeBarY,4)" height="4" color="#ColPresProgrBar" direction="0" current="{PresentProgress}" total="{PresentDuration}"/>
+ </block>
+ </block>
+
+ <variable id="FemonBarY" value="sub(#TimeBarY,10)"/>
+ <block condition="{ServiceIsAvailable:femon}">
+ <rectangle x1="add(#TimeBarW,20)" width="74" y1="#FemonBarY" height="6" color="#ColFemonBar"/>
+ <!--progress x1="add(#TimeBarW,22)" width="70" y1="add(#FemonBarY,2)" height="2" color="#ColFemonBar" direction="0" current="{ServiceItem:femon,signal}" total="65536"/-->
+ <progress x1="add(#TimeBarW,22)" width="70" y1="add(#FemonBarY,2)" height="2" color="#ColFemonSigProg" direction="0" current="{ServiceItem:femon,signal}" total="65536"/>
+ <rectangle x1="add(#TimeBarW,20)" width="74" y1="#TimeBarY" height="6" color="#ColFemonBar"/>
+ <!--progress x1="add(#TimeBarW,22)" width="70" y1="add(#TimeBarY,2)" height="2" color="#ColFemonBar" direction="0" current="{ServiceItem:femon,snr}" total="65536"/-->
+ <progress x1="add(#TimeBarW,22)" width="70" y1="add(#TimeBarY,2)" height="2" color="#ColFemonSNRProg" direction="0" current="{ServiceItem:femon,snr}" total="65536"/>
+ <text x1="add(#TimeBarW,98)" width="16" y1="sub(#FemonBarY,2)" y2="-1" color="#ColFemonText" align="right" scrollmode="never" font="FontInfoSignal">
+ {ServiceItem:femon,percent_signal}%
+ </text>
+ <text x1="add(#TimeBarW,98)" width="16" y1="sub(#TimeBarY,2)" y2="-1" color="#ColFemonText" align="right" scrollmode="never" font="FontInfoSignal">
+ {ServiceItem:femon,percent_snr}%
+ </text>
+ <!--text x1="add(#TimeBarW,20)" width="74" y1="sub(#FemonBarY,12)" y2="-1" color="$ColFemonText" align="left" scrollmode="never" font="FontInfoSignal" altcondition="{IsRadio}" alttext="ABR: {ServiceItem:femon,abr,%2.2f,1024} k/s">
+ VBR: {ServiceItem:femon,vbr,%2.2f,1048576} M/s
+ </text-->
+ </block>
+ <!--block condition="{ExtDataIsAvailable:somemsg}">
+ <text x1="add(#TimeBarW)" width="90" y1="sub(#FemonBarY,2)" y2="-1" color="#ColFemonText" align="right" scrollmode="never" font="FontInfoSignal">
+ {ExtDataItem:somemsg}
+ </text>
+ </block-->
+
+ <variable id="RecordingsTextY" value="mul(-1,FontLineHeight('FontTimes'))"/>
+ <variable id="RecordingsLineY" value="sub(sub(#RecordingsTextY,#LineThickness),1)"/>
+ <variable id="RecordingsSymbolY" value="add(#RecordingsTextY,div(sub(FontLineHeight('FontTimes'),#SymbolH),2))"/>
+ <variable id="FollowingShortTextY" value="sub(sub(#RecordingsLineY,FontLineHeight('FontInfoSmall2')),2)"/>
+ <variable id="FollowingTextY" value="sub(sub(#FollowingShortTextY,FontLineHeight('FontInfoSmall')),2)"/>
+ <variable id="PresentShortTextY" value="sub(sub(#FollowingTextY,FontLineHeight('FontTitleSmall')),4)"/>
+ <variable id="PresentTextY" value="sub(sub(#PresentShortTextY,FontLineHeight('FontTitle')),2)"/>
+
+ <text x1="0" x2="-1" y1="#PresentTextY" height="FontLineHeight('FontTitle')" color="#ColPresentTitle" align="left" font="FontTitle" altcondition="and(not({PresentTitle}),{ServiceIsAvailable:radio})" alttext="{ServiceItem:radio}">
+ {PresentTitle}
+ </text>
+ <text x1="0" x2="-1" y1="#PresentShortTextY" height="FontLineHeight('FontTitleSmall')" color="#ColPresentShort" align="left" font="FontTitleSmall" altcondition="and({PresentTitle},{ServiceIsAvailable:radio})" alttext="{ServiceItem:radio}">
+ {PresentShortText}
+ </text>
+
+ <block condition="{FollowingValid}">
+ <text x1="0" x2="-1" y1="#FollowingTextY" height="FontLineHeight('FontInfoSmall')" color="#ColFollowingTitle" align="left" font="FontInfoSmall">
+ {FollowingStartDateTime:%H\:%M}
+ </text>
+ <text x1="80" x2="-1" y1="#FollowingTextY" height="FontLineHeight('FontInfoSmall')" color="#ColFollowingTitle" align="left" font="FontInfoSmall">
+ {FollowingTitle}
+ </text>
+ <text x1="80" x2="-1" y1="#FollowingShortTextY" height="FontLineHeight('FontInfoSmall2')" color="#ColFollowingShort" align="left" font="FontInfoSmall2">
+ {FollowingShortText}
+ </text>
+ </block>
+
+ <block condition="{Recordings}">
+ <rectangle x1="0" x2="-1" y1="#RecordingsLineY" height="#LineThickness" color="#ColBorder" filled="yes"/>
+ <image x="0" y="#RecordingsSymbolY" color="#ColRecSymbol" path="#SymbolRecording" condition="{IsRecording}"/>
+ <text x1="add(#SymbolW,2)" x2="-1" y1="#RecordingsTextY" height="FontLineHeight('FontTimes')" color="#ColRecText" align="left" font="FontTimes">
+ {Recordings}
+ </text>
+ </block>
+ </block>
+
+ <block condition="equal({DisplayMode},'Interactive')">
+ <variable id="IVolumeBarX" value="0"/>
+ <variable id="IVolumeBarW" value="sub(mul(#ButtonWidth3,2),0)"/>
+ <variable id="IVolumeBarH" value="30"/>
+ <variable id="IVolumeBarY" value="add(mul(#ButtonPitchH,2),1)"/>
+ <variable id="IMuteImage" value="'images/mute.pbm'"/>
+ <variable id="IMuteImageW" value="ImageWidth(#IMuteImage)"/>
+ <variable id="IMuteImageH" value="ImageHeight(#IMuteImage)"/>
+
+
+ <button action="Mode.Normal" x1="1" y1="0" width="mul(#ButtonWidth3,2)" height="add(#MenuHeaderH,2)" color="#ColMenuHeaderBG" labelcolor="#ColMenuHeaderFG" font="FontMenuButton" radius="0">Back</button>
+ <button action="Key.Menu" x1="sub({ScreenWidth},mul(#ButtonPitch3W,1))" y1="add(mul(#ButtonPitchH,0),1)" width="#ButtonWidth3" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">Menu</button>
+ <button action="Key.Up" x1="sub({ScreenWidth},mul(#ButtonPitch3W,1))" y1="add(mul(#ButtonPitchH,1),1)" width="#ButtonWidth3" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">Ch+</button>
+ <button action="Key.Down" x1="sub({ScreenWidth},mul(#ButtonPitch3W,1))" y1="add(mul(#ButtonPitchH,2),1)" width="#ButtonWidth3" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">Ch-</button>
+ <button action="Key.Mute" x1="sub({ScreenWidth},mul(#ButtonPitch3W,3))" y1="add(mul(#ButtonPitchH,3),1)" width="#ButtonWidth3" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">Mute</button>
+ <button action="Key.Volume-" x1="sub({ScreenWidth},mul(#ButtonPitch3W,2))" y1="add(mul(#ButtonPitchH,3),1)" width="#ButtonWidth3" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">Vol-</button>
+ <button action="Key.Volume+" x1="sub({ScreenWidth},mul(#ButtonPitch3W,1))" y1="add(mul(#ButtonPitchH,3),1)" width="#ButtonWidth3" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">Vol+</button>
+
+
+ <text x1="1" y1="add(mul(#ButtonPitchH,1),1)" width="mul(#ButtonWidth3,2)" color="#ColChannelInfo" align="left" font="FontChannel" scrollmode="never">
+ {ChannelNumber} | {ChannelName}
+ </text>
+ <rectangle x1="#IVolumeBarX" y1="#IVolumeBarY" width="#IVolumeBarW" height="#IVolumeBarH" color="#ColVolumeBG" filled="yes" radius="3"/>
+ <rectangle x1="add(#IVolumeBarX,2)" y1="add(#IVolumeBarY,2)" width="sub(#IVolumeBarW,4)" height="sub(#IVolumeBarH,4)" color="#ColVolumeFG" radius="2"/>
+ <block condition="not({VolumeIsMute})">
+ <progress x1="add(#IVolumeBarX,4)" y1="add(#IVolumeBarY,4)" width="sub(#IVolumeBarW,8)" height="sub(#IVolumeBarH,8)" color="#ColVolumeBar" direction="0" current="{VolumeCurrent}" total="{VolumeTotal}"/>
+ </block>
+ <block condition="{VolumeIsMute}">
+ <image x="add(#IVolumeBarX,div(#IVolumeBarW,2))" y="add(#IVolumeBarY,4)" color="#ColVolumeBar" path="#IMuteImage"/>
+ </block>
+ </block>
+ </display>
+
+ <display id="volume">
+
+ <variable id="VolumeBarX" value="20" />
+ <variable id="VolumeBarW" value="sub({ScreenWidth},mul(2,#VolumeBarX))" />
+ <variable id="VolumeBarH" value="30" />
+ <variable id="VolumeBarY" value="div(sub({ScreenHeight},#VolumeBarH),2)" />
+
+ <variable id="MuteImage" value="'images/mute.pbm'"/>
+ <variable id="MuteImageW" value="ImageWidth(#MuteImage)"/>
+ <variable id="MuteImageH" value="ImageHeight(#MuteImage)"/>
+
+ <block condition="equal({DisplayMode},'Normal')">
+ <rectangle x1="#VolumeBarX" y1="#VolumeBarY" width="#VolumeBarW" height="#VolumeBarH" color="#ColVolumeBG" filled="yes" radius="3"/>
+ <rectangle x1="add(#VolumeBarX,2)" y1="add(#VolumeBarY,2)" width="sub(#VolumeBarW,4)" height="sub(#VolumeBarH,4)" color="#ColVolumeFG" radius="2"/>
+ <block condition="not({VolumeIsMute})">
+ <progress x1="add(#VolumeBarX,4)" y1="add(#VolumeBarY,4)" width="sub(#VolumeBarW,8)" height="sub(#VolumeBarH,8)" color="#ColVolumeBar" direction="0" current="{VolumeCurrent}" total="{VolumeTotal}"/>
+ </block>
+ <block condition="{VolumeIsMute}">
+ <image x="div(sub({ScreenWidth},#MuteImageW),2)" y="div(sub({ScreenHeight},#MuteImageH),2)" color="#ColVolumeBar" path="#MuteImage"/>
+ </block>
+ </block>
+ </display>
+
+
+ <display id="message">
+ <variable id="MessageX" value="10"/>
+ <variable id="MessageW" value="sub({ScreenWidth},mul(2,#MessageX))"/>
+ <variable id="MessageTextH" value="mul(4,FontLineHeight('FontInfo'))"/>
+ <variable id="MessageH" value="add(#MessageTextH,8)"/>
+ <variable id="MessageY" value="div(sub({ScreenHeight},#MessageH),2)"/>
+ <variable id="MessageBitmap" value="'images/message.pbm'"/>
+ <variable id="MessageBitmapW" value="ImageWidth(#MessageBitmap)"/>
+ <variable id="MessageBitmapH" value="ImageHeight(#MessageBitmap)"/>
+
+ <rectangle x1="#MessageX" y1="#MessageY" width="#MessageW" height="#MessageH" color="#ColMessageBG" filled="yes" radius="3"/>
+ <rectangle x1="add(#MessageX,2)" y1="add(#MessageY,2)" width="sub(#MessageW,4)" height="sub(#MessageH,4)" color="#ColMessageFG" radius="2"/>
+ <block condition="lt(#MessageBitmapH,sub(#MessageH,12))">
+ <image x1="add(#MessageX,6)" y1="add(#MessageY,6)" color="#ColMessageIcon" path="#MessageBitmap"/>
+ <text x1="add(add(#MessageX,10),#MessageBitmapW)" y1="add(#MessageY,4)" width="sub(sub(#MessageW,14),#MessageBitmapW)" height="#MessageTextH" color="#ColMessageText" align="left" multiline="yes" font="FontInfo">
+ {Message}
+ </text>
+ </block>
+ <block condition="ge(#MessageBitmapH,sub(#MessageH,12))">
+ <text x1="add(#MessageX,4)" y1="add(#MessageY,4)" width="sub(#MessageW,8)" height="#MessageTextH" color="#ColMessageText" align="left" multiline="yes" font="FontInfo">
+ {Message}
+ </text>
+ </block>
+ </display>
+
+
+ <display id="replay">
+ <variable id="ReplayProgressH" value="14"/>
+ <variable id="ReplayProgressGap" value="1"/>
+ <variable id="ReplayTimeY" value="mul(FontLineHeight('FontInfo'),-1)"/>
+ <variable id="ReplayProgressY" value="sub(#ReplayTimeY,#ReplayProgressH,#ReplayProgressGap)"/>
+ <variable id="ReplayLogo" value="'{ConfigPath}/logos/replay/animated/replay-{ReplayMode}_m.glcd'" condition="le({ScreenHeight},64)"
+ default="'{ConfigPath}/logos/replay/animated/replay-{ReplayMode}_l.glcd'"/>
+
+ <item x1="0" y1="0" height="div({ScreenWidth},3)" width="div({ScreenHeight},5)" action="Key.Back"/>
+ <item x1="mul(div({ScreenWidth},3),2)" y1="0" height="mul(div({ScreenHeight},5),2)" action="Key.Up"/>
+ <item x1="mul(div({ScreenWidth},3),2)" y1="mul(div({ScreenHeight},5),2)" height="mul(div({ScreenHeight},5),2)" action="Key.Down"/>
+ <item x1="0" y1="mul(div({ScreenHeight},5),4)" width="div({ScreenWidth},3)" height="div({ScreenHeight},5)" action="Key.Volume-"/>
+ <item x1="div({ScreenWidth},3)" y1="mul(div({ScreenHeight},5),4)" width="div({ScreenWidth},3)" height="div({ScreenHeight},5)" action="Key.Mute"/>
+ <item x1="mul(div({ScreenWidth},3),2)" y1="mul(div({ScreenHeight},5),4)" width="div({ScreenWidth},3)" height="div({ScreenHeight},5)" action="Key.Volume+"/>
+
+ <block condition="{SettingShowReplayLogo}">
+ <image x="#LogoX" y="0" color="#ColReplayLogo" path="#ReplayLogo"/>
+ <rectangle x1="sub(#LogoX,#LineThickness)" width="#LineThickness" y1="0" height="#LogoH" color="#ColReplayBorder" filled="yes"/>
+ <rectangle x1="sub(#LogoX,#LineThickness)" x2="-1" y1="#LogoH" height="#LineThickness" color="#ColReplayBorder" filled="yes"/>
+ <text x1="0" x2="sub(#LogoX,#LineThickness,2)" y1="0" y2="#ReplayProgressY" color="#ColReplayText" align="left" multiline="yes" font="FontInfo">
+ {ReplayTitle}
+ </text>
+ </block>
+ <block condition="not({SettingShowReplayLogo})">
+ <text x1="0" x2="-1" y1="0" y2="#ReplayProgressY" color="#ColReplayText" align="left" multiline="yes" font="FontInfo">
+ {ReplayTitle}
+ </text>
+ </block>
+ <rectangle x1="0" y1="#ReplayProgressY" width="15" height="14" color="#ColReplayBorder"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplaySymbol" path="symbols/replay-play.pbm" condition="{ReplayIsPlaying}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplaySymbol" path="symbols/replay-pause.pbm" condition="{ReplayIsPausing}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplaySymbol" path="symbols/replay-fast-fwd.pbm" condition="{ReplayIsFastForward}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplaySymbol" path="symbols/replay-fast-rwd.pbm" condition="{ReplayIsFastRewind}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplaySymbol" path="symbols/replay-slow-fwd.pbm" condition="{ReplayIsSlowForward}"/>
+ <image x="1" y="add(#ReplayProgressY,1)" color="#ColReplaySymbol" path="symbols/replay-slow-rwd.pbm" condition="{ReplayIsSlowRewind}"/>
+ <rectangle x1="14" x2="-1" y1="#ReplayProgressY" height="#ReplayProgressH" color="#ColReplayBar"/>
+ <progress x1="16" x2="-3" y1="add(#ReplayProgressY,2)" height="sub(#ReplayProgressH,4)" color="#ColReplayBar" direction="0" current="{ReplayPosition}" total="{ReplayDuration}"/>
+ <text x1="0" x2="-1" y1="#ReplayTimeY" y2="-1" color="#ColReplayTime" align="left" font="FontInfo">
+ {ReplayPositionIndex:%H\:%M\:%S}
+ </text>
+ <text x1="0" x2="-1" y1="#ReplayTimeY" y2="-1" color="#ColReplayTime" align="right" font="FontInfo">
+ {ReplayDurationIndex:%H\:%M\:%S}
+ </text>
+ </display>
+
+
+ <display id="menu">
+ <variable id="ButtonY" value="mul(#ButtonHeight,-1)"/>
+ <variable id="ButtonTextY" value="mul(#ButtonHeight,-1)"/>
+ <variable id="ItemHeight" value="FontLineHeight('FontMenuItem')"/>
+ <variable id="ArrowBitmap" value="'images/arrow_small.pbm'" condition="le({ScreenHeight},64)"
+ default="'images/arrow.pbm'" />
+ <variable id="ArrowWidth" value="ImageWidth(#ArrowBitmap)"/>
+ <variable id="ArrowHeight" value="ImageHeight(#ArrowBitmap)"/>
+ <variable id="ArrowY" value="div(sub(#ItemHeight,#ArrowHeight),2)" condition="le({ScreenHeight},64)"
+ default="add(div(sub(#ItemHeight,#ArrowHeight),2),2)" />
+
+ <variable id="MenuContentW" value="sub({ScreenWidth},#ButtonPitch5W,#ArrowWidth,6)" condition="#UseTouchscreen"
+ default="sub({ScreenWidth},0)" />
+
+ <item x1="0" y1="0" height="#MenuHeaderH" width="#ButtonWidth5" action="Key.Back"/>
+
+ <rectangle x1="0" y1="0" width="#MenuHeaderW" height="add(#MenuHeaderH,1)" color="#ColMenuHeaderBG" filled="yes"/>
+ <text x1="0" x2="-1" height="#MenuHeaderH" width="#MenuHeaderW" color="#ColMenuHeaderFG" multiline="yes" valign="middle" font="FontMenuTitle">{MenuTitle}</text>
+ <rectangle x1="0" y1="add(#MenuHeaderH,1)" width="#MenuHeaderW" x2="-1" height="#LineThickness" color="#ColMenuBorder" filled="yes"/>
+ <list x1="0" y1="add(#MenuHeaderH,4)" x2="-1" y2="#ButtonY">
+ <item height="#ItemHeight"/>
+ <text x1="add(#ArrowWidth,2)" x2="-1" y1="0" height="#ItemHeight" width="#MenuContentW" color="#ColMenuEntryCurr" font="FontMenuItem" scrollmode="once">{MenuCurrent}</text>
+ <image x="0" y="#ArrowY" width="#ArrowWidth" height="#ArrowHeight" color="#ColMenuEntryMarker" path="#ArrowBitmap" condition="{IsMenuCurrent}"/>
+ <text x1="add(#ArrowWidth,2)" x2="-1" y1="0" color="#ColMenuEntry" height="#ItemHeight" width="#MenuContentW" font="FontMenuItem">{MenuItem}</text>
+ </list>
+
+ <button condition="{ButtonRed}" action="Key.Red" x1="add(mul(#ButtonPitch4W,0),1)" y1="#ButtonY" width="#ButtonWidth4" height="#ButtonHeight" color="#ColMenuButtonRBG" labelcolor="#ColMenuButtonRFG" font="FontMenuButton" radius="2">{ButtonRed}</button>
+ <button condition="{ButtonGreen}" action="Key.Green" x1="add(mul(#ButtonPitch4W,1),1)" y1="#ButtonY" width="#ButtonWidth4" height="#ButtonHeight" color="#ColMenuButtonGBG" labelcolor="#ColMenuButtonGFG" font="FontMenuButton" radius="2">{ButtonGreen}</button>
+ <button condition="{ButtonYellow}" action="Key.Yellow" x1="add(mul(#ButtonPitch4W,2),1)" y1="#ButtonY" width="#ButtonWidth4" height="#ButtonHeight" color="#ColMenuButtonYBG" labelcolor="#ColMenuButtonYFG" font="FontMenuButton" radius="2">{ButtonYellow}</button>
+ <button condition="{ButtonBlue}" action="Key.Blue" x1="add(mul(#ButtonPitch4W,3),1)" y1="#ButtonY" width="#ButtonWidth4" height="#ButtonHeight" color="#ColMenuButtonBBG" labelcolor="#ColMenuButtonBFG" font="FontMenuButton" radius="2">{ButtonBlue}</button>
+ <!-- navigation buttons if touchscreen is available -->
+ <block condition="#UseTouchscreen">
+ <button action="Key.Left" x1="sub({ScreenWidth},mul(#ButtonPitch5W,2))" y1="add(mul(#ButtonPitchH,0),1)" width="#ButtonWidth5" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">&lt;</button>
+ <button action="Key.Right" x1="sub({ScreenWidth},mul(#ButtonPitch5W,1))" y1="add(mul(#ButtonPitchH,0),1)" width="#ButtonWidth5" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">&gt;</button>
+ <button action="Key.Up" x1="sub({ScreenWidth},mul(#ButtonPitch5W,1))" y1="add(mul(#ButtonPitchH,1),1)" width="#ButtonWidth5" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">/\</button>
+ <button action="Key.Down" x1="sub({ScreenWidth},mul(#ButtonPitch5W,1))" y1="add(mul(#ButtonPitchH,2),1)" width="#ButtonWidth5" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">\/</button>
+ <button action="Key.Ok" x1="sub({ScreenWidth},mul(#ButtonPitch5W,1))" y1="add(mul(#ButtonPitchH,3),1)" width="#ButtonWidth5" height="#ButtonHeight" color="#ColMenuButtonBG" labelcolor="#ColMenuButtonFG" font="FontMenuButton" radius="2">OK</button>
+ </block>
+ </display>
+</skin>
diff --git a/i18n.c b/i18n.c
index 821987b..c3e0a4e 100644
--- a/i18n.c
+++ b/i18n.c
@@ -30,989 +30,789 @@
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
- },
- {
- "Show spectrum analyzer",
- "Zeige Spektrum Analyzer",
- "",// TODO Slovenski
- "",// TODO Italiano
- "",// TODO Nederlands
- "",// TODO Português
- "",// TODO Francais
- "",// TODO Norsk
- "",// TODO Suomi
- "",// TODO Polski
- "",// TODO Español
- "",// TODO Ellinika
- "",// TODO Svenska
- "",// TODO Românã
- "",// TODO Magyar
- "",// TODO Català
-#if VDRVERSNUM > 10302
- "",// TODO Russian
-# if VDRVERSNUM > 10307
- "",// TODO Croatian
-# endif
-#endif
- },
- {
- "Show analyzer volume",
- "Zeige Analyzer Lautstärke",
- "",// TODO Slovenski
- "",// TODO Italiano
- "",// TODO Nederlands
- "",// TODO Português
- "",// TODO Francais
- "",// TODO Norsk
- "",// TODO Suomi
- "",// TODO Polski
- "",// TODO Español
- "",// TODO Ellinika
- "",// TODO Svenska
- "",// TODO Românã
- "",// TODO Magyar
- "",// TODO Català
-#if VDRVERSNUM > 10302
- "",// TODO Russian
-# if VDRVERSNUM > 10307
- "",// TODO Croatian
-# endif
-#endif
- },
- { NULL }
+ {
+ "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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Plugin active",
+ "Plugin aktiv",
+ "",// TODO Slovenski
+ "Plugin attivo",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Date/Time",
+ "Zeige Datum/Uhrzeit",
+ "",// TODO Slovenski
+ "Mostra Data/Ora",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "not in menu",
+ "nicht im Menu",
+ "",// TODO Slovenski
+ "non nel menu",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Channel",
+ "Zeige Kanal",
+ "",// TODO Slovenski
+ "Mostra Canale",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Logo",
+ "Zeige Logo",
+ "",// TODO Slovenski
+ "Mostra Logo",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Logo on Replay",
+ "Zeige Logo bei Wiedergabe",
+ "",// TODO Slovenski
+ "Mostra logo in riproduzione",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Symbols",
+ "Zeige Symbole",
+ "",// TODO Slovenski
+ "Mostra Simboli",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Program",
+ "Zeige Programm",
+ "",// TODO Slovenski
+ "Mostra Programmi",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Timebar",
+ "Zeige Zeitbalken",
+ "",// TODO Slovenski
+ "Mostra barra ora",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Menu",
+ "Zeige Menüs",
+ "",// TODO Slovenski
+ "Mostra Menu",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Messages",
+ "Zeige Nachrichten",
+ "",// TODO Slovenski
+ "Mostra messaggi",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Color Buttons",
+ "Zeige farbige Tasten",
+ "",// TODO Slovenski
+ "Mostra pulsanti colorati",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show Volume",
+ "Zeige Lautstärke",
+ "",// TODO Slovenski
+ "Mostra Volume",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show free Cards",
+ "Zeige freie Karten",
+ "",// TODO Slovenski
+ "Mostra schede disponibili",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Identify replay type",
+ "Wiedergabetyp erkennen",
+ "",// TODO Slovenski
+ "Identifica tipo riproduzione",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Modify replay string",
+ "Wiedergabetext verändern",
+ "",// TODO Slovenski
+ "Modifica testo riproduzione",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Scroll text lines",
+ "Textzeilen scrollen",
+ "",// TODO Slovenski
+ "Scorrimento testo",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Scroll speed",
+ "Scrollgeschwindigkeit",
+ "",// TODO Slovenski
+ "Velocità scorrimento",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Scroll time interval",
+ "Zeitabstand beim Scrollen",
+ "",// TODO Slovenski
+ "Intervallo tempo scorrimento",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "never",
+ "niemals",
+ "",// TODO Slovenski
+ "mai",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "once",
+ "einmal",
+ "",// TODO Slovenski
+ "una volta",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "always",
+ "ständig",
+ "",// TODO Slovenski
+ "sempre",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Brightness on user activity",
+ "Helligkeit bei Nutzeraktivität",
+ "",// TODO Slovenski
+ "Luminosità con attività utente",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Brightness on user inactivity",
+ "Helligkeit bei Nutzerinaktivität",
+ "",// TODO Slovenski
+ "Luminosità con inattività utente",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Brightness delay [s]",
+ "Verzögerung der Helligkeit [s]",
+ "",// TODO Slovenski
+ "Ritardo luminosità [s]",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ { NULL }
};
+
+// not needed any longer but keep it just in case of ...
+#if 0
+ {
+ "JanFebMarAprMayJunJulAugSepOctNovDec",
+ "JanFebMärAprMaiJunJulAugSepOktNovDez",
+ "",// TODO Slovenski
+ "GenFebMarAprMagGiuLugAgoSetOttNovDic",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Show ET Symbols",
+ "Zeige ET Symbole",
+ "",// TODO Slovenski
+ "Mostra Simboli ET",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "compressed",
+ "komprimiert",
+ "",// TODO Slovenski
+ "compresso",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "auto",
+ "auto",
+ "",// TODO Slovenski
+ "automatico",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "medium",
+ "mittel",
+ "",// TODO Slovenski
+ "medio",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "large",
+ "groß",
+ "",// TODO Slovenski
+ "grande",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Replay",
+ "Spiele",
+ "",// TODO Slovenski
+ "Riproduci",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "DVD",
+ "DVD",
+ "",// TODO Slovenski
+ "DVD",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Music",
+ "Musik",
+ "",// TODO Slovenski
+ "Musica",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "File",
+ "Datei",
+ "",// TODO Slovenski
+ "File",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Image",
+ "Bild",
+ "",// TODO Slovenski
+ "Immagine",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "CD",
+ "CD",
+ "",// TODO Slovenski
+ "CD",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+ {
+ "Unknown title",
+ "Unbekannter Titel",
+ "",// TODO Slovenski
+ "Titolo sconosciuto",// 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à
+ "",// TODO Russian
+ "",// TODO Croatian
+ },
+#endif
diff --git a/i18n.h b/i18n.h
index 97d9f7f..c765b22 100644
--- a/i18n.h
+++ b/i18n.h
@@ -1,7 +1,7 @@
/*
- * GraphLCD plugin for the Video Disk Recorder
+ * GraphLCD plugin for the Video Disk Recorder
*
- * i18n.h - Internationalization
+ * i18n.h - Internationalization
*
* This file is released under the GNU General Public License. Refer
* to the COPYING file distributed with this package.
diff --git a/layout.c b/layout.c
deleted file mode 100644
index 8ee8072..0000000
--- a/layout.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * 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);
- }
-#if APIVERSNUM >= 10503
- // NULL SystemCharacterTable defaults to UTF-8 (see VDR tools.h)
- return font.LoadFT2(file, cCharSetConv::SystemCharacterTable() ? cCharSetConv::SystemCharacterTable() : "UTF-8", size);
-#else
- return font.LoadFT2(file, I18nCharSets()[Setup.OSDLanguage], size);
-#endif
- }
- 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
deleted file mode 100644
index 95269a8..0000000
--- a/layout.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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
deleted file mode 100644
index 3be6198..0000000
--- a/logo.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 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
deleted file mode 100644
index 0b213ba..0000000
--- a/logo.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 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
deleted file mode 100644
index 24e370e..0000000
--- a/logolist.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * 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 = "channels.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()) {
- syslog(LOG_INFO, "graphlcd: WWARNING: cannot open '%s", aliasFileName.c_str());
- 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
deleted file mode 100644
index 47044c4..0000000
--- a/logolist.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * 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
index a23cd98..4b5c086 100644
--- a/menu.c
+++ b/menu.c
@@ -27,85 +27,72 @@
#include "menu.h"
+#if APIVERSNUM < 10503
+ #define trNOOP(_s) (_s)
+ #define trVDR(_s) tr(_s)
+#endif
+
cGraphLCDMenuSetup::cGraphLCDMenuSetup()
{
- static const char * showDateTimeValues[3];
- showDateTimeValues[0] = trVDR("no");
- showDateTimeValues[1] = trVDR("yes");
- showDateTimeValues[2] = tr("not in menu");
- static const char * showSymbolsValues[3];
- showSymbolsValues[0] = trVDR("no");
- showSymbolsValues[1] = trVDR("yes");
- showSymbolsValues[2] = tr("compressed");
- static const char * showLogoValues[4];
- showLogoValues[0] = trVDR("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");
+ static const char * showDateTimeValues[3];
+ showDateTimeValues[0] = trVDR("no");
+ showDateTimeValues[1] = trVDR("yes");
+ showDateTimeValues[2] = tr("not in menu");
+ static const char * scrollModeValues[3];
+ scrollModeValues[0] = tr("never");
+ scrollModeValues[1] = tr("once");
+ scrollModeValues[2] = tr("always");
- newGraphLCDSetup = GraphLCDSetup;
+ 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));
- if (newGraphLCDSetup.pluginSpectrumAnalyzer)
- {
- Add(new cMenuEditBoolItem(tr("Show spectrum analyzer"), &newGraphLCDSetup.enableSpectrumAnalyzer));
- Add(new cMenuEditBoolItem(tr("Show analyzer volume"), &newGraphLCDSetup.SAShowVolume));
- }
+ 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 cMenuEditBoolItem(tr("Show Logo"), &newGraphLCDSetup.ShowChannelLogo));
+ Add(new cMenuEditBoolItem(tr("Show Symbols"), &newGraphLCDSetup.ShowSymbols));
+ 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 cMenuEditBoolItem(tr("Show Logo on Replay"), &newGraphLCDSetup.ShowReplayLogo));
+ }
+ 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);
- SetupStore("enableSpectrumAnalyzer", GraphLCDSetup.enableSpectrumAnalyzer = newGraphLCDSetup.enableSpectrumAnalyzer); //span
- SetupStore("SAShowVolume", GraphLCDSetup.SAShowVolume = newGraphLCDSetup.SAShowVolume);
+ SetupStore("PluginActive", GraphLCDSetup.PluginActive = newGraphLCDSetup.PluginActive);
+ SetupStore("ShowDateTime",GraphLCDSetup.ShowDateTime = newGraphLCDSetup.ShowDateTime);
+ SetupStore("ShowChannel", GraphLCDSetup.ShowChannel = newGraphLCDSetup.ShowChannel);
+ SetupStore("ShowChannelLogo", GraphLCDSetup.ShowChannelLogo = newGraphLCDSetup.ShowChannelLogo);
+ SetupStore("ShowSymbols", GraphLCDSetup.ShowSymbols = newGraphLCDSetup.ShowSymbols);
+ 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.ShowReplayLogo = newGraphLCDSetup.ShowReplayLogo);
+ 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
index 0e125bf..6055a08 100644
--- a/menu.h
+++ b/menu.h
@@ -1,5 +1,5 @@
/**
- * GraphLCD plugin for the Video Disk Recorder
+ * GraphLCD plugin for the Video Disk Recorder
*
* menu.h - setup menu class
*
@@ -36,11 +36,11 @@
class cGraphLCDMenuSetup : public cMenuSetupPage
{
private:
- cGraphLCDSetup newGraphLCDSetup;
+ cGraphLCDSetup newGraphLCDSetup;
protected:
- virtual void Store();
+ virtual void Store();
public:
- cGraphLCDMenuSetup();
+ cGraphLCDMenuSetup();
};
#endif
diff --git a/patches/femon-1.1.5_fixnullandsegfault_path.diff b/patches/femon-1.1.5_fixnullandsegfault_path.diff
new file mode 100644
index 0000000..a8dcc82
--- /dev/null
+++ b/patches/femon-1.1.5_fixnullandsegfault_path.diff
@@ -0,0 +1,38 @@
+--- femon.c_orig 2008-01-20 03:20:00.000000000 +0100
++++ femon.c 2010-06-05 01:30:33.000000000 +0200
+@@ -134,18 +134,23 @@
+
+ bool cPluginFemon::Service(const char *Id, void *Data)
+ {
+- if ((strcmp(Id,"FemonService-v1.0") == 0) && Data) {
+- FemonService_v1_0 *data = (FemonService_v1_0*)Data;
+- int ndx = cDevice::ActualDevice()->CardIndex();
+- data->fe_name = getFrontendName(ndx);
+- data->fe_status = getFrontendStatus(ndx);
+- data->fe_snr = getSNR(ndx);
+- data->fe_signal = getSignal(ndx);
+- data->fe_ber = getBER(ndx);
+- data->fe_unc = getUNC(ndx);
+- data->video_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetVideoBitrate() : 0.0;
+- data->audio_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetAudioBitrate() : 0.0;
+- data->dolby_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetDolbyBitrate() : 0.0;
++ if (strcmp(Id,"FemonService-v1.0") == 0) {
++ if (Data) {
++ FemonService_v1_0 *data = (FemonService_v1_0*)Data;
++ if (! cDevice::ActualDevice() )
++ return false;
++
++ int ndx = cDevice::ActualDevice()->CardIndex();
++ data->fe_name = getFrontendName(ndx);
++ data->fe_status = getFrontendStatus(ndx);
++ data->fe_snr = getSNR(ndx);
++ data->fe_signal = getSignal(ndx);
++ data->fe_ber = getBER(ndx);
++ data->fe_unc = getUNC(ndx);
++ data->video_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetVideoBitrate() : 0.0;
++ data->audio_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetAudioBitrate() : 0.0;
++ data->dolby_bitrate = cFemonOsd::Instance() ? cFemonOsd::Instance()->GetDolbyBitrate() : 0.0;
++ }
+ return true;
+ }
+
diff --git a/patches/femon-1.7.7_fixsegfault_patch.diff b/patches/femon-1.7.7_fixsegfault_patch.diff
new file mode 100644
index 0000000..86cf976
--- /dev/null
+++ b/patches/femon-1.7.7_fixsegfault_patch.diff
@@ -0,0 +1,11 @@
+--- femon.c_orig 2010-06-05 01:34:59.000000000 +0200
++++ femon.c 2010-06-05 01:35:23.000000000 +0200
+@@ -133,6 +133,8 @@
+ if (strcmp(Id,"FemonService-v1.0") == 0) {
+ if (Data) {
+ FemonService_v1_0 *data = (FemonService_v1_0*)Data;
++ if (! cDevice::ActualDevice() )
++ return false;
+ int ndx = cDevice::ActualDevice()->CardIndex();
+ data->fe_name = getFrontendName(ndx);
+ data->fe_status = getFrontendStatus(ndx);
diff --git a/plugin.c b/plugin.c
index ae6efdd..c508ecb 100644
--- a/plugin.c
+++ b/plugin.c
@@ -7,7 +7,13 @@
* 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>
+ * (c) 2004-2010 Andreas Regel <andreas.regel AT powarman.de>
+ * (c) 2010-2012 Wolfgang Astleitner <mrwastl AT users sourceforge net>
+ *
+ * Contributions:
+ * CONNECT / DISCONNect, multi-display support:
+ * (c) 2011 Lutz Neumann <superelchi AT wolke7.net>
+ *
*/
#include <getopt.h>
@@ -18,25 +24,66 @@
#include "display.h"
#include "global.h"
#include "menu.h"
+#include "extdata.h"
+#include "strfct.h"
#include <vdr/plugin.h>
+#include <ctype.h>
+#include <vector>
+
+#if APIVERSNUM < 10503
+ #include "i18n.h"
+ #define trNOOP(_s) (_s)
+#endif
-static const char *VERSION = "0.2.0-pre (git 20110213)";
-static const char *DESCRIPTION = "Output to graphic LCD";
+
+static const char * kPluginName = "graphlcd";
+static const char *VERSION = "0.3.0";
+static const char *DESCRIPTION = trNOOP("Output to graphic LCD");
static const char *MAINMENUENTRY = NULL;
-static const char * kDefaultConfigFile = "/etc/graphlcd.conf";
+#ifndef PLUGIN_GRAPHLCDCONF
+ #define PLUGIN_GRAPHLCDCONF "/etc/graphlcd.conf"
+#endif
+
+
+enum eDisplayStatus {
+ EMPTY,
+ DEAD,
+ CONNECTED,
+ DISCONNECTED,
+ CONNECT_PENDING,
+ CONNECTING
+};
+
+struct tDisplayData {
+ eDisplayStatus Status;
+ std::string Name;
+ std::string Skin;
+ GLCD::cDriver * Driver;
+ cGraphLCDDisplay * Disp;
+ uint64_t to_timestamp;
+};
+#define GRAPHLCD_MAX_DISPLAYS 4
class cPluginGraphLCD : public cPlugin
{
private:
// Add any member variables or functions you may need here.
+ std::string mDisplayNames;
+ std::string mSkinNames;
std::string mConfigName;
- std::string mDisplayName;
- GLCD::cDriver * mLcd;
- cGraphLCDDisplay * mDisplay;
+ std::string mSkinsPath;
+ std::string mConfigDir;
+ tDisplayData mDisplay[GRAPHLCD_MAX_DISPLAYS];
+ cExtData * mExtData;
+
+ int DisplayIndex(std::string);
+ bool ConnectDisplay(unsigned int, unsigned int);
+ void DisconnectDisplay(unsigned int);
+
public:
cPluginGraphLCD();
virtual ~cPluginGraphLCD();
@@ -47,50 +94,60 @@ public:
virtual bool Initialize();
virtual bool Start();
virtual void Housekeeping();
+ virtual const char **SVDRPHelpPages(void);
+ virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode);
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);
- virtual const char **SVDRPHelpPages(void);
- virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode);
- virtual bool Service(const char *Id, void *Data); // for span
};
cPluginGraphLCD::cPluginGraphLCD()
: mConfigName(""),
- mDisplayName("")
+ mSkinsPath("")
{
- mLcd = NULL;
- mDisplay = NULL;
+ for (unsigned int i = 0; i < GRAPHLCD_MAX_DISPLAYS; i++)
+ {
+ mDisplay[i].Status = EMPTY;
+ mDisplay[i].Name = "";
+ mDisplay[i].Skin = "";
+ mDisplay[i].Driver = NULL;
+ mDisplay[i].Disp = NULL;
+ }
+ mExtData = cExtData::GetExtData();
}
cPluginGraphLCD::~cPluginGraphLCD()
{
- delete mDisplay;
- if (mLcd)
- mLcd->DeInit();
- delete mLcd;
+ for (unsigned int index = 0; index < GRAPHLCD_MAX_DISPLAYS; index++)
+ DisconnectDisplay(index);
+ mExtData->ReleaseExtData();
+ mExtData = NULL;
}
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";
+ return " -c, --config=CFG use CFG as driver config file (default is \""PLUGIN_GRAPHLCDCONF"\")\n"
+ " -d, --display=DISP[,DISP]... use display DISP for output or if DISP=none: start w/o any display\n"
+ " -s, --skin=SKIN[,SKIN]... use skin SKIN (default is \"default\")\n"
+ " -p, --skinspath=PATH use path PATH for skins (default is \"<plugin_config>/skins/\")\n";
}
bool cPluginGraphLCD::ProcessArgs(int argc, char * argv[])
{
static struct option long_options[] =
{
- {"config", required_argument, NULL, 'c'},
- {"display", required_argument, NULL, 'd'},
+ {"config", required_argument, NULL, 'c'},
+ {"display", required_argument, NULL, 'd'},
+ {"skinspath", required_argument, NULL, 'p'},
+ {"skin", required_argument, NULL, 's'},
{NULL}
};
int c;
int option_index = 0;
- while ((c = getopt_long(argc, argv, "c:d:", long_options, &option_index)) != -1)
+ while ((c = getopt_long(argc, argv, "c:d:p:s:", long_options, &option_index)) != -1)
{
switch (c)
{
@@ -99,7 +156,15 @@ bool cPluginGraphLCD::ProcessArgs(int argc, char * argv[])
break;
case 'd':
- mDisplayName = optarg;
+ mDisplayNames = optarg;
+ break;
+
+ case 'p':
+ mSkinsPath = optarg;
+ break;
+
+ case 's':
+ mSkinNames = optarg;
break;
default:
@@ -112,110 +177,479 @@ bool cPluginGraphLCD::ProcessArgs(int argc, char * argv[])
bool cPluginGraphLCD::Initialize()
{
- unsigned int displayNumber = 0;
- const char * cfgDir;
+
+#if APIVERSNUM < 10503
+ RegisterI18n(Phrases);
+#endif
if (mConfigName.length() == 0)
{
- mConfigName = kDefaultConfigFile;
- isyslog("graphlcd plugin: No config file specified, using default (%s).\n", mConfigName.c_str());
+ mConfigName = PLUGIN_GRAPHLCDCONF;
+ isyslog("graphlcd plugin: INFO: 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");
+ esyslog("graphlcd plugin: ERROR loading config file!\n");
+ return false;
+ }
+ if (GLCD::Config.driverConfigs.size() == 0)
+ {
+ esyslog("graphlcd plugin: ERROR: No displays specified in config file!\n");
+ return false;
+ }
+
+ if (mDisplayNames == "none")
+ {
+ isyslog("graphlcd plugin: INFO: displayname = none, starting with no display connected.\n");
+ return true;
+ }
+
+ if (mDisplayNames.length() == 0)
+ {
+ isyslog("graphlcd plugin: INFO: No display specified, using first one (%s).\n", GLCD::Config.driverConfigs[0].name.c_str());
+ mDisplayNames = GLCD::Config.driverConfigs[0].name;
+ }
+
+ size_t pos1, pos2 = -1;
+ unsigned int index = 0;
+ do
+ {
+ pos1 = pos2 + 1;
+ pos2 = mDisplayNames.find(',', pos1);
+ mDisplay[index].Name = mDisplayNames.substr(pos1, (pos2 == std::string::npos) ? pos2 : pos2 - pos1);
+ mDisplay[index].Status = CONNECT_PENDING;
+ index++;
+ }
+ while (pos2 != std::string::npos && index < GRAPHLCD_MAX_DISPLAYS);
+
+ pos2 = -1;
+ index = 0;
+ do
+ {
+ pos1 = pos2 + 1;
+ pos2 = mSkinNames.find(',', pos1);
+ mDisplay[index].Skin = mSkinNames.substr(pos1, (pos2 == std::string::npos) ? pos2 : pos2 - pos1);
+ index++;
+ }
+ while (pos2 != std::string::npos && index < GRAPHLCD_MAX_DISPLAYS);
+
+#if APIVERSNUM < 10730
+ const char* tempConfigDir = ConfigDirectory(kPluginName);
+#else
+ const char* tempConfigDir = ResourceDirectory(kPluginName);
+#endif
+ if (!tempConfigDir) {
return false;
+ } else {
+ mConfigDir = tempConfigDir;
}
- if (GLCD::Config.driverConfigs.size() > 0)
+
+ bool connecting = false;
+ for (unsigned int i = 0; i < GRAPHLCD_MAX_DISPLAYS; i++)
{
- if (mDisplayName.length() > 0)
+ if (mDisplay[i].Name.size() > 0)
{
- for (displayNumber = 0; displayNumber < GLCD::Config.driverConfigs.size(); displayNumber++)
+ int displayNumber = DisplayIndex(mDisplay[i].Name);
+ if (displayNumber == -1)
{
- if (GLCD::Config.driverConfigs[displayNumber].name == mDisplayName)
- break;
+ esyslog("graphlcd plugin: ERROR: Specified display %s not found in config file!\n", mDisplay[i].Name.c_str());
+ return false;
}
- if (displayNumber == GLCD::Config.driverConfigs.size())
+
+ if (!connecting)
{
- esyslog("graphlcd plugin: ERROR: Specified display %s not found in config file!\n", mDisplayName.c_str());
- return false;
+ if (ConnectDisplay(i, (unsigned int) displayNumber) == false)
+ return false;
+ connecting = true;
}
}
- 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
+ return true;
+}
+
+bool cPluginGraphLCD::Start()
+{
+ return true;
+}
+
+int cPluginGraphLCD::DisplayIndex(std::string displayName)
+{
+ unsigned int displayNumber;
+ for (displayNumber = 0; displayNumber < GLCD::Config.driverConfigs.size(); displayNumber++)
{
- esyslog("graphlcd plugin: ERROR: No displays specified in config file!\n");
- return false;
+ if (GLCD::Config.driverConfigs[displayNumber].name == displayName)
+ break;
}
+ return (displayNumber == GLCD::Config.driverConfigs.size()) ? -1 : (int) displayNumber;
+}
- mLcd = GLCD::CreateDriver(GLCD::Config.driverConfigs[displayNumber].id, &GLCD::Config.driverConfigs[displayNumber]);
- if (!mLcd)
+bool cPluginGraphLCD::ConnectDisplay(unsigned int index, unsigned int displayNumber)
+{
+ mDisplay[index].Driver = GLCD::CreateDriver(GLCD::Config.driverConfigs[displayNumber].id, &GLCD::Config.driverConfigs[displayNumber]);
+ if (!mDisplay[index].Driver)
{
- esyslog("graphlcd plugin: ERROR: Failed creating display object %s\n", mDisplayName.c_str());
+ esyslog("graphlcd plugin: ERROR: Failed creating display object %s\n", mDisplay[index].Name.c_str());
+ mDisplay[index].Status = DEAD;
return false;
}
- cfgDir = ConfigDirectory(PLUGIN_NAME);
- if (!cfgDir)
- return false;
-
- mDisplay = new cGraphLCDDisplay();
- if (!mDisplay)
+ mDisplay[index].Disp = new cGraphLCDDisplay();
+ if (!mDisplay[index].Disp) {
+ mDisplay[index].Status = DEAD;
return false;
- if (mDisplay->Init(mLcd, cfgDir) != 0)
+ }
+ if (mDisplay[index].Skin == "")
+ mDisplay[index].Skin = "default";
+ if (!mDisplay[index].Disp->Initialise(mDisplay[index].Driver, mConfigDir.c_str(), mSkinsPath, mDisplay[index].Skin)) {
+ mDisplay[index].Status = DEAD;
return false;
+ }
- return true;
+ /* if plugin was deactivated -> reactivate */
+ GraphLCDSetup.PluginActive = 1;
+ dsyslog("graphlcd plugin: DEBUG: Init timeout waiting for display %s thread to get ready", mDisplay[index].Name.c_str());
+ mDisplay[index].to_timestamp = cTimeMs::Now();
+ mDisplay[index].Status = CONNECTING;
+
+ return true;
}
-bool cPluginGraphLCD::Start()
+void cPluginGraphLCD::DisconnectDisplay(unsigned int index)
{
- int count;
-
- for (int i = 0; ; i++) {
- cPlugin *p = cPluginManager::GetPlugin(i);
- if (p) {
- if (strstr(p->Name(), "span")) {
- isyslog("graphlcd plugin: found %s (%s) plugin\n", p->Name(), p->Version());
- GraphLCDSetup.pluginSpectrumAnalyzer=1;
- };
- } else {
- break;
- }
+ if (mDisplay[index].Disp != NULL)
+ delete mDisplay[index].Disp;
+ mDisplay[index].Disp = NULL;
+ if (mDisplay[index].Driver != NULL) {
+ mDisplay[index].Driver->DeInit();
+ delete mDisplay[index].Driver;
}
-
+ mDisplay[index].Driver = NULL;
+ mDisplay[index].Status = DISCONNECTED;
+}
+
+void cPluginGraphLCD::Housekeeping()
+{
+}
- dsyslog("graphlcd plugin: waiting for display thread to get ready");
- for (count = 0; count < 1200; count++)
+void cPluginGraphLCD::MainThreadHook()
+{
+ bool wait = false;
+ int nextconnect = -1;
+ for (unsigned int index = 0; index < GRAPHLCD_MAX_DISPLAYS; index++)
{
- if (mDisplay->Active())
+ if (mDisplay[index].Status == CONNECTING)
{
- dsyslog ("graphlcd plugin: display thread ready");
- return true;
+ if (mDisplay[index].Disp->Active())
+ {
+ dsyslog("graphlcd plugin: DEBUG: Display thread for %s is ready", mDisplay[index].Name.c_str());
+ mDisplay[index].Status = CONNECTED;
+ }
+ else
+ {
+ if ( (cTimeMs::Now() - mDisplay[index].to_timestamp) > (uint64_t) 10000)
+ {
+ dsyslog ("graphlcd plugin: DEBUG: Timeout while waiting for display thread %s", mDisplay[index].Name.c_str());
+ /* no activity after 10 secs: display is unusable */
+ //GraphLCDSetup.PluginActive = 0;
+ DisconnectDisplay(index);
+ }
+ else
+ wait = true;
+ }
}
-#if VDRVERSNUM < 10314
- usleep(100000);
-#else
- cCondWait::SleepMs(100);
-#endif
+ if (nextconnect == -1 && mDisplay[index].Status == CONNECT_PENDING)
+ nextconnect = index;
+
+ if (mDisplay[index].Status == CONNECTED)
+ mDisplay[index].Disp->Tick();
}
- dsyslog ("graphlcd plugin: timeout while waiting for display thread");
- return false;
+
+ if (nextconnect != -1 && !wait)
+ if (ConnectDisplay(nextconnect, (unsigned int) DisplayIndex(mDisplay[nextconnect].Name)) == false)
+ esyslog("graphlcd plugin: ERROR: failed connecting display %s\n", mDisplay[nextconnect].Name.c_str());
}
-void cPluginGraphLCD::Housekeeping()
+const char **cPluginGraphLCD::SVDRPHelpPages(void)
{
+ static const char *HelpPages[] = {
+ "CLS Clear display.",
+ "UPD Update display.",
+ "OFF Switch plugin off.",
+ "ON Switch plugin on.",
+ "SET <key>[,expire=<expire>][,display=<display>] <value> Set entry <key> to value <value>. optionally expire after <expire> seconds.",
+ "UNSET <key>[,display=<display>] Unset (clear) entry <key>.",
+ "GET <key>[,display=<display>] Get value assigned to entry <key>.",
+ "CONNECT [<display> [<skin>]] Connect given display or reconnect all displays if called w/o parameter.",
+ "DISCONN [<display>] Disconnect given display or all displays if called w/o parameter.",
+ NULL
+ };
+ return HelpPages;
}
-void cPluginGraphLCD::MainThreadHook()
+cString cPluginGraphLCD::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
{
- if (mDisplay)
- mDisplay->Tick();
+ std::vector <std::string> options;
+
+ // split option-string
+ if (trim(Option).size() > 0) {
+ std::string options_raw = trim(Option);
+ size_t firstpos = std::string::npos;
+ while ( (firstpos = options_raw.find_first_of(' ')) != std::string::npos ) {
+ // special treatment for SET <key> <value>: option <value> is the rest of the cmd line, including spaces
+ if ( (strcasecmp(Command, "SET") == 0) && (options.size() == 1) ) {
+ options.push_back( trim(options_raw) );
+ options_raw = "";
+ } else {
+ options.push_back( trim(options_raw.substr(0, firstpos)) );
+ options_raw = trim(options_raw.substr(firstpos+1));
+ }
+ }
+ if (trim(options_raw).size() > 0)
+ options.push_back( trim(options_raw) );
+ }
+
+ if (strcasecmp(Command, "OFF") == 0) {
+ GraphLCDSetup.PluginActive = 0;
+ return "GraphLCD Plugin switched off.";
+ } else
+ if (strcasecmp(Command, "ON") == 0) {
+ GraphLCDSetup.PluginActive = 1;
+ for (unsigned int index = 0; index < GRAPHLCD_MAX_DISPLAYS; index++)
+ {
+ if (mDisplay[index].Status == CONNECTED)
+ mDisplay[index].Disp->Update();
+ }
+ return "GraphLCD Plugin switched on.";
+ } else
+ if (strcasecmp(Command, "CONNECT") == 0) {
+ if (options.size() >= 1 && options.size() <= 2) {
+ std::string name;
+
+ name = options[0];
+
+ int index = -1;
+ for (unsigned int i = 0; i < GRAPHLCD_MAX_DISPLAYS; i++) {
+ if (mDisplay[i].Name == name) {
+ index = i;
+ break;
+ }
+ if (index == -1 && mDisplay[i].Disp == NULL)
+ index = i;
+ }
+
+ if (index == -1)
+ return "CONNECT error: max number of displays already connected.";
+
+ int displayNumber = DisplayIndex(name);
+ if (displayNumber < 0)
+ return "CONNECT errror: display not in config file.";
+
+ mDisplay[index].Name = name;
+ mDisplay[index].Skin = (options.size() == 2)
+ ? options[1]
+ : (
+ (mDisplay[index].Skin != "")
+ ? mDisplay[index].Skin
+ : "default"
+ );
+
+ std::string retval = "Display "; retval.append(name); retval.append(": ");
+ if (mDisplay[index].Status == CONNECTED) {
+ DisconnectDisplay(index);
+ retval.append("RE");
+ }
+
+ if (ConnectDisplay(index, (unsigned int) displayNumber) == true) {
+ for (unsigned int count = 0; count < 100; count++) {
+ cCondWait::SleepMs(100);
+ if (mDisplay[index].Disp->Active()) {
+ dsyslog ("graphlcd plugin: DEBUG: Display thread for '%s' ready", mDisplay[index].Name.c_str());
+ mDisplay[index].Status = CONNECTED;
+ break;
+ }
+ }
+ if (mDisplay[index].Status != CONNECTED)
+ dsyslog ("graphlcd plugin: DEBUG: Timeout while waiting for display thread '%s'", mDisplay[index].Name.c_str());
+ }
+
+ retval.append((mDisplay[index].Status == CONNECTED) ? "CONNECT ok." : "CONNECT error.");
+ return retval.c_str();
+ } else if (options.size() == 0) {
+ int count_ok = 0;
+ int count_fail = 0;
+
+ for (unsigned int i = 0; i < GRAPHLCD_MAX_DISPLAYS; i++) {
+ if (mDisplay[i].Name != "") {
+
+ if (mDisplay[i].Skin == "") // should never occur, only for paranoia ...
+ mDisplay[i].Skin = "default";
+
+ int displayNumber = DisplayIndex(mDisplay[i].Name);
+ if (mDisplay[i].Status == CONNECTED) {
+ DisconnectDisplay(i);
+ }
+
+ if (ConnectDisplay(i, (unsigned int) displayNumber) == true) {
+ for (unsigned int count = 0; count < 100; count++) {
+ cCondWait::SleepMs(100);
+ if (mDisplay[i].Disp->Active()) {
+ dsyslog ("graphlcd plugin: DEBUG: Display thread ready for '%s'", mDisplay[i].Name.c_str());
+ mDisplay[i].Status = CONNECTED;
+ break;
+ }
+ }
+ if (mDisplay[i].Status != CONNECTED)
+ dsyslog ("graphlcd plugin: DEBUG: Timeout while waiting for display thread '%s'", mDisplay[i].Name.c_str());
+ }
+
+ if (mDisplay[i].Status != CONNECTED) {
+ dsyslog ("graphlcd plugin: DEBUG: Timeout while waiting for display thread '%s'", mDisplay[i].Name.c_str());
+ count_fail ++;
+ } else {
+ count_ok ++;
+ }
+ }
+ }
+ char buf[25];
+ std::string retval = "RECONNECT status: ";
+ snprintf(buf, 24, "OK = %1d, FAILED = %1d", count_ok, count_fail);
+ retval += buf;
+ return retval.c_str();
+ }
+ return "CONNECT requires up to two parameters: CONNECT [<display> [<skin>]].";
+ } else
+ if (strcasecmp(Command, "DISCONN") == 0 || strcasecmp(Command, "DISCONNECT") == 0 ) {
+ if ( options.size() >= 0 && options.size() < 2 ) {
+ std::string name = "";
+ bool disconn_all = true;
+ if (options.size() != 0) {
+ disconn_all = false;
+ name = options[0];
+ }
+
+ for (unsigned int index = 0; index < GRAPHLCD_MAX_DISPLAYS; index++) {
+ if (mDisplay[index].Status == CONNECTED && (disconn_all || name == mDisplay[index].Name))
+ DisconnectDisplay(index);
+ }
+ return "DISCONNect ok.";
+ }
+ return "DISCONNect requires zero or one parameters: DISCONNect [<display>].";
+ } else { // following commands are valid only if at least one display is connected
+ unsigned int index;
+ for (index = 0; index < GRAPHLCD_MAX_DISPLAYS; index++)
+ if (mDisplay[index].Status == CONNECTED)
+ break;
+ if (index == GRAPHLCD_MAX_DISPLAYS) {
+ return "Error: no display connected";
+ } else {
+ if (strcasecmp(Command, "CLS") == 0) {
+ if (GraphLCDSetup.PluginActive == 1) {
+ return "Error: Plugin is active.";
+ } else {
+ for (unsigned int index = 0; index < GRAPHLCD_MAX_DISPLAYS; index++)
+ if (mDisplay[index].Status == CONNECTED)
+ mDisplay[index].Disp->Clear();
+ return "GraphLCD cleared.";
+ };
+ } else
+ if (strcasecmp(Command, "UPD") == 0) {
+ if (GraphLCDSetup.PluginActive == 0) {
+ return "Error: Plugin is not active.";
+ } else {
+ for (unsigned int index = 0; index < GRAPHLCD_MAX_DISPLAYS; index++)
+ if (mDisplay[index].Status == CONNECTED)
+ mDisplay[index].Disp->Update();
+ return "GraphLCD updated.";
+ };
+ } else
+ if ( (strcasecmp(Command, "SET") == 0) || (strcasecmp(Command, "UNSET") == 0) || (strcasecmp(Command, "GET") == 0) ) {
+ std::string key = "";
+ std::string display = "";
+ std::string expire = "";
+
+ if (options.size() > 0) {
+ // split key parameter
+ std::string key_raw = options[0];
+ size_t commapos = key_raw.find_first_of(',');
+ if (commapos == std::string::npos) {
+ key = key_raw;
+ } else {
+ key = key_raw.substr(0,commapos);
+ do {
+ key_raw = key_raw.substr(commapos+1);
+ size_t delimpos = key_raw.find_first_of('=');
+ if (delimpos != std::string::npos) {
+ std::string paramkey = key_raw.substr(0, delimpos);
+ size_t nextpos = key_raw.find_first_of(',');
+ std::string paramval = (nextpos == std::string::npos)
+ ? key_raw.substr(delimpos+1)
+ : key_raw.substr(delimpos+1, nextpos-delimpos-1);
+
+ if ( paramkey == "d" || paramkey == "display") {
+ display = paramval;
+ } else if ( (strcasecmp(Command, "SET") == 0) &&
+ ( paramkey == "e" || paramkey == "expire" || paramkey == "expires" )
+ )
+ {
+ expire = paramval;
+ } else {
+ return "SET: invalid refining parameter(s) for option '<key>'.";
+ }
+ } else {
+ return "SET: invalid refining parameter(s) for option '<key>'.";
+ }
+ } while ( (commapos = key_raw.find_first_of(',')) != std::string::npos );
+ }
+ }
+
+ if (strcasecmp(Command, "SET") == 0) {
+ if (options.size() == 2) {
+ uint32_t expsecs = 0;
+ if (expire != "") {
+ expsecs = (uint32_t)strtoul(expire.c_str(), NULL, 10);
+ }
+
+ if ( isalpha(key[0]) ) {
+ for (unsigned int index = 0; index < GRAPHLCD_MAX_DISPLAYS; index++)
+ if (mDisplay[index].Status == CONNECTED)
+ mExtData->Set(key, options[1], display, expsecs );
+ return "SET ok";
+ }
+ return "SET not ok";
+ }
+ return "SET requires exactly two parameters: SET <key>[,expire=<expire>][,display=<display>] <value>.";
+ } else
+ if (strcasecmp(Command, "UNSET") == 0) {
+ if (options.size() == 1) {
+ for (unsigned int index = 0; index < GRAPHLCD_MAX_DISPLAYS; index++)
+ if (mDisplay[index].Status == CONNECTED)
+ mExtData->Unset( key, display );
+ return "UNSET ok";
+ }
+ return "UNSET requires exactly one parameter: UNSET <key>[,display=<display>].";
+ } else
+ if (strcasecmp(Command, "GET") == 0) {
+ if (options.size() == 1) {
+ std::string res = "";
+ for (unsigned int index = 0; res == "" && index < GRAPHLCD_MAX_DISPLAYS; index++)
+ if (mDisplay[index].Status == CONNECTED)
+ res = mExtData->Get( key, display );
+ std::string retval = "GET "; retval.append(key); retval.append(": ");
+ if (res != "" ) {
+ retval.append(res);
+ } else {
+ retval.append("(null)");
+ }
+ return retval.c_str();
+ }
+ return "GET requires exactly one parameter: GET <key>[,display=<display>].";
+ }
+ } else { // command not supported
+ return NULL;
+ }
+ }
+ }
+ return NULL; /* make gcc happy */
}
cOsdObject * cPluginGraphLCD::MainMenuAction()
@@ -233,9 +667,8 @@ 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, "ShowChannelLogo")) GraphLCDSetup.ShowChannelLogo = 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);
@@ -245,78 +678,15 @@ bool cPluginGraphLCD::SetupParse(const char * Name, const char * 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, "ShowReplayLogo")) GraphLCDSetup.ShowReplayLogo = 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 if (!strcasecmp(Name, "enableSpectrumAnalyzer")) GraphLCDSetup.enableSpectrumAnalyzer = atoi(Value);
- else if (!strcasecmp(Name, "SAShowVolume")) GraphLCDSetup.SAShowVolume = atoi(Value);
else return false;
return true;
}
-const char **cPluginGraphLCD::SVDRPHelpPages(void)
-{
- static const char *HelpPages[] = {
- "CLS\n"
- " Clear Display.",
- "UPD\n"
- " Update Display.",
- "OFF\n"
- " Switch Plugin off.",
- "ON \n"
- " Switch Plugin on.",
- NULL
- };
- return HelpPages;
-}
-
-cString cPluginGraphLCD::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
-{
- if (strcasecmp(Command, "CLS") == 0) {
- if (GraphLCDSetup.PluginActive == 1) {
- return "Error: Plugin is active.";
- } else {
- mDisplay->Clear();
- return "GraphLCD cleared.";
- };
- }
- if (strcasecmp(Command, "UPD") == 0) {
- if (GraphLCDSetup.PluginActive == 0) {
- return "Error: Plugin is not active.";
- } else {
- mDisplay->Update();
- return "GraphLCD updated.";
- };
- }
-
- if (strcasecmp(Command, "OFF") == 0) {
- GraphLCDSetup.PluginActive = 0;
- return "GraphLCD Plugin switched off.";
- }
- if (strcasecmp(Command, "ON") == 0) {
- GraphLCDSetup.PluginActive = 1;
- return "GraphLCD Plugin switched on.";
- }
- return NULL;
-}
-
- bool cPluginGraphLCD::Service(const char *Id, void *Data)
- {
- if (strcmp(Id, SPAN_CLIENT_CHECK_ID) == 0)
- {
- if ( GraphLCDSetup.pluginSpectrumAnalyzer && GraphLCDSetup.enableSpectrumAnalyzer && (Data != NULL) )
- {
- *((Span_Client_Check_1_0*)Data)->isActive = true;
- }
- return true;
- }
- return false;
- }
-
-
-
VDRPLUGINCREATOR(cPluginGraphLCD); // Don't touch this!
diff --git a/po/de_DE.po b/po/de_DE.po
index 7073650..d982b35 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -2,55 +2,24 @@
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Klaus Schmidinger <kls@cadsoft.de>, 2000
+# Wolfgang Astleitner <mrwastl AT users.sourceforge.net>, 2011
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <nobody@domain.com>\n"
-"POT-Creation-Date: 2011-01-23 21:12+0100\n"
+"POT-Creation-Date: 2011-06-14 20:35+0200\n"
"PO-Revision-Date: 2008-07-09 13:14+0200\n"
"Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-msgid "JanFebMarAprMayJunJulAugSepOctNovDec"
-msgstr "JanFebMärAprMaiJunJulAugSepOktNovDez"
-
-msgid "DVD"
-msgstr "DVD"
-
-msgid "Music"
-msgstr "Musik"
-
-msgid "File"
-msgstr "Datei"
-
-msgid "Image"
-msgstr "Bild"
-
-msgid "CD"
-msgstr "CD"
-
-msgid "Replay"
-msgstr "Spiele"
-
msgid "not in menu"
msgstr "nicht im Menu"
-msgid "compressed"
-msgstr "komprimiert"
-
-msgid "auto"
-msgstr "auto"
-
-msgid "medium"
-msgstr "mittel"
-
-msgid "large"
-msgstr "groß"
-
msgid "never"
msgstr "niemals"
@@ -75,9 +44,6 @@ msgstr "Zeige Logo"
msgid "Show Symbols"
msgstr "Zeige Symbole"
-msgid "Show ET Symbols"
-msgstr "Zeige ET Symbole"
-
msgid "Show Program"
msgstr "Zeige Programm"
@@ -126,11 +92,5 @@ msgstr "Helligkeit bei Nutzerinaktivität"
msgid "Brightness delay [s]"
msgstr "Verzögerung der Helligkeit [s]"
-msgid "Show spectrum analyzer"
-msgstr "Zeige Spektrumanalyzer"
-
-msgid "Show analyzer volume"
-msgstr "Zeige Lautstärke im Analyzer"
-
-msgid "Unknown title"
-msgstr "Unbekannter Titel"
+msgid "Output to graphic LCD"
+msgstr "Ausgabe auf einem Grafik-LCD"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index df9cf6c..2a37a32 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -10,50 +10,18 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <nobody@domain.com>\n"
-"POT-Creation-Date: 2011-01-24 21:00+0100\n"
+"POT-Creation-Date: 2011-06-14 20:35+0200\n"
"PO-Revision-Date: 2008-07-09 13:14+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: <vdr@linuxtv.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-msgid "JanFebMarAprMayJunJulAugSepOctNovDec"
-msgstr "TamHelMaaHuhTouKesHeiEloSyyLokMarJou"
-
-msgid "DVD"
-msgstr "DVD"
-
-msgid "Music"
-msgstr "Musiikki"
-
-msgid "File"
-msgstr "Tiedostot"
-
-msgid "Image"
-msgstr "Kuvat"
-
-msgid "CD"
-msgstr "CD"
-
-msgid "Replay"
-msgstr "Toistotila"
-
msgid "not in menu"
msgstr "ei valikossa"
-msgid "compressed"
-msgstr "pakattu"
-
-msgid "auto"
-msgstr "automaattinen"
-
-msgid "medium"
-msgstr "keskikokoinen"
-
-msgid "large"
-msgstr "suuri"
-
msgid "never"
msgstr "ei koskaan"
@@ -78,9 +46,6 @@ msgstr "Näytä logo"
msgid "Show Symbols"
msgstr "Näytä symbolit"
-msgid "Show ET Symbols"
-msgstr "Näytä ET-symbolit"
-
msgid "Show Program"
msgstr "Näytä ohjelma"
@@ -129,11 +94,5 @@ msgstr ""
msgid "Brightness delay [s]"
msgstr ""
-msgid "Show spectrum analyzer"
-msgstr ""
-
-msgid "Show analyzer volume"
-msgstr ""
-
-msgid "Unknown title"
-msgstr "Tuntematon nimi"
+msgid "Output to graphic LCD"
+msgstr "Ohjaa graafista LCD-näyttöä"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 2aefd5c..549031b 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -10,50 +10,18 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <nobody@domain.com>\n"
-"POT-Creation-Date: 2011-01-24 21:00+0100\n"
+"POT-Creation-Date: 2011-06-14 20:35+0200\n"
"PO-Revision-Date: 2008-07-09 13:14+0200\n"
"Last-Translator: Nicolas Huillard <nhuillard@e-dition.fr>\n"
"Language-Team: <vdr@linuxtv.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-msgid "JanFebMarAprMayJunJulAugSepOctNovDec"
-msgstr "JanFevMarAvrMaiJunJuiAouSepOctNovDec"
-
-msgid "DVD"
-msgstr "DVD"
-
-msgid "Music"
-msgstr "Musique"
-
-msgid "File"
-msgstr "Fichier:"
-
-msgid "Image"
-msgstr "Image"
-
-msgid "CD"
-msgstr "CD"
-
-msgid "Replay"
-msgstr "Lecture"
-
msgid "not in menu"
msgstr "pas dans le menu"
-msgid "compressed"
-msgstr "Compressé"
-
-msgid "auto"
-msgstr "auto"
-
-msgid "medium"
-msgstr "moyen"
-
-msgid "large"
-msgstr "grand"
-
msgid "never"
msgstr "jamais"
@@ -78,9 +46,6 @@ msgstr "Afficher le Logo"
msgid "Show Symbols"
msgstr "Afficher les Symboles"
-msgid "Show ET Symbols"
-msgstr "Afficher les Symboles ET"
-
msgid "Show Program"
msgstr "Afficher les programmes"
@@ -129,11 +94,5 @@ msgstr "Luminosité en non-utilisation"
msgid "Brightness delay [s]"
msgstr "Delai de Luminosité [s]"
-msgid "Show spectrum analyzer"
-msgstr ""
-
-msgid "Show analyzer volume"
-msgstr ""
-
-msgid "Unknown title"
-msgstr "Titre inconnu"
+msgid "Output to graphic LCD"
+msgstr "Affichage sur un écran LCD"
diff --git a/po/it_IT.po b/po/it_IT.po
index b7834a2..b2de56e 100755..100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -9,10 +9,11 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <nobody@domain.com>\n"
-"POT-Creation-Date: 2011-01-24 21:00+0100\n"
+"POT-Creation-Date: 2011-06-14 20:35+0200\n"
"PO-Revision-Date: 2011-03-05 16:38+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: <vdr@linuxtv.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -20,42 +21,9 @@ msgstr ""
"X-Poedit-Country: ITALY\n"
"X-Poedit-SourceCharset: utf-8\n"
-msgid "JanFebMarAprMayJunJulAugSepOctNovDec"
-msgstr "GenFebMarAprMagGiuLugAgoSetOttNovDic"
-
-msgid "DVD"
-msgstr "DVD"
-
-msgid "Music"
-msgstr "Musica"
-
-msgid "File"
-msgstr "File"
-
-msgid "Image"
-msgstr "Immagine"
-
-msgid "CD"
-msgstr "CD"
-
-msgid "Replay"
-msgstr "Riproduci"
-
msgid "not in menu"
msgstr "non nel menu"
-msgid "compressed"
-msgstr "compresso"
-
-msgid "auto"
-msgstr "automatico"
-
-msgid "medium"
-msgstr "medio"
-
-msgid "large"
-msgstr "grande"
-
msgid "never"
msgstr "mai"
@@ -80,9 +48,6 @@ msgstr "Mostra Logo"
msgid "Show Symbols"
msgstr "Mostra Simboli"
-msgid "Show ET Symbols"
-msgstr "Mostra Simboli ET"
-
msgid "Show Program"
msgstr "Mostra Programmi"
@@ -131,12 +96,5 @@ msgstr "Luminosità con inattività utente"
msgid "Brightness delay [s]"
msgstr "Ritardo luminosità [s]"
-msgid "Show spectrum analyzer"
-msgstr "Mostra analizzatore di spretto"
-
-msgid "Show analyzer volume"
-msgstr "Mostra analizzatore volume"
-
-msgid "Unknown title"
-msgstr "Titolo sconosciuto"
-
+msgid "Output to graphic LCD"
+msgstr ""
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 2346276..ccc8fd2 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,50 +8,18 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <nobody@domain.com>\n"
-"POT-Creation-Date: 2011-01-24 21:00+0100\n"
+"POT-Creation-Date: 2011-06-14 20:35+0200\n"
"PO-Revision-Date: 2008-07-09 13:14+0200\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: <vdr@linuxtv.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-msgid "JanFebMarAprMayJunJulAugSepOctNovDec"
-msgstr "IanFebMarAprMaiIunIulAugSepOctNoiDec"
-
-msgid "DVD"
-msgstr "DVD"
-
-msgid "Music"
-msgstr "Muzicã"
-
-msgid "File"
-msgstr "Fiºier"
-
-msgid "Image"
-msgstr "Imagine"
-
-msgid "CD"
-msgstr "CD"
-
-msgid "Replay"
-msgstr "Redare"
-
msgid "not in menu"
msgstr "nu în meniu"
-msgid "compressed"
-msgstr "comprimat"
-
-msgid "auto"
-msgstr "auto"
-
-msgid "medium"
-msgstr "mediu"
-
-msgid "large"
-msgstr "mare"
-
msgid "never"
msgstr "niciodatã"
@@ -76,9 +44,6 @@ msgstr "Aratã logo"
msgid "Show Symbols"
msgstr "Aratã simboluri"
-msgid "Show ET Symbols"
-msgstr "Aratã simboluri externe"
-
msgid "Show Program"
msgstr "Aratã programul"
@@ -127,11 +92,5 @@ msgstr "Luminozitate la inactivitate"
msgid "Brightness delay [s]"
msgstr "Limita luminozitate"
-msgid "Show spectrum analyzer"
-msgstr ""
-
-msgid "Show analyzer volume"
-msgstr ""
-
-msgid "Unknown title"
-msgstr "Titlu necunoscut"
+msgid "Output to graphic LCD"
+msgstr "Ecran grafic LCD/VFD"
diff --git a/service.c b/service.c
new file mode 100644
index 0000000..0d5be30
--- /dev/null
+++ b/service.c
@@ -0,0 +1,626 @@
+/**
+ * GraphLCD plugin for the Video Disk Recorder
+ *
+ * service.h - class for events from external services
+ *
+ * (c) 2010-2012 Wolfgang Astleitner <mrwastl AT users sourceforge net>
+ *
+ * mailbox-contribution: user 'Keine_Ahnung'
+ **/
+
+#include "strfct.h"
+#include <limits>
+
+#include "service.h"
+#include "common.h"
+
+#include <vdr/plugin.h>
+
+#include <map>
+
+
+const char* pluginName = "graphlcd"; // for span
+
+cGraphLCDService::cGraphLCDService(cGraphLCDState * state)
+{
+ mState = state;
+
+ /* initialise flags for services */
+ radioActive = false; radioChanged = false; radioUse = false; radioInit = false;
+ lcrActive = false; lcrChanged = false; lcrUse = false; lcrInit = false;
+ femonActive = false; femonChanged = false; femonUse = false; femonInit = false;
+ mailboxActive = false; mailboxChanged = false; mailboxUse = false; mailboxInit = false;
+ spanActive = false; spanChanged = false; spanUse = false; spanInit = false;
+
+ radioLastChange = lcrLastChange = femonLastChange = mailboxLastChange = spanLastChange = 0;
+
+ femonVersionChecked = femonVersionValid = false;
+
+ // default min. change delays
+ radioUpdateDelay = 100; // 100 ms
+ lcrUpdateDelay = 60000; // 60 sec
+ femonUpdateDelay = 2000; // 2 sec
+ mailboxUpdateDelay = 10000; // 10 sec
+ spanUpdateDelay = 500; // 1/2 sec
+
+ // pre-init strings
+ checkRTSData.rds_text = (char*)"";
+ checkRTSData.rds_title = (char*)"";
+ checkRTSData.rds_artist = (char*)"";
+
+ checkLcrData.destination = (char*)"";
+ checkLcrData.price = (char*)"";
+ checkLcrData.pulse = (char*)"";
+
+#if 0
+ currFemonData.fe_name = (char*)"";
+ currFemonData.fe_status = (char*)"";
+#endif
+
+ // pre-init span stuff (real initialisation will happen at 1st call of ServiceIsAvailable())
+ checkSpanData.bands = 0;
+ checkSpanData.barHeights = NULL;
+ checkSpanData.barHeightsLeftChannel = NULL;
+ checkSpanData.barHeightsRightChannel = NULL;
+ checkSpanData.volumeLeftChannel = new unsigned int[1];
+ checkSpanData.volumeRightChannel = new unsigned int[1];
+ checkSpanData.volumeBothChannels = new unsigned int[1];
+ checkSpanData.name = pluginName;
+ checkSpanData.falloff = 8;
+ checkSpanData.barPeaksBothChannels = NULL;
+ checkSpanData.barPeaksLeftChannel = NULL;
+ checkSpanData.barPeaksRightChannel = NULL;
+
+ currSpanData.volumeLeftChannel = new unsigned int[1];
+ currSpanData.volumeRightChannel = new unsigned int[1];
+ currSpanData.volumeBothChannels = new unsigned int[1];
+}
+
+cGraphLCDService::~cGraphLCDService()
+{
+}
+
+
+bool cGraphLCDService::ServiceIsAvailable(const std::string & Name, const std::string & Options) {
+ bool rvAvail = false;
+ bool firstTime = false;
+
+ if (Name == "RadioTextService-v1.0" || Name == "radio") {
+ if (!radioInit) {
+ radioInit = true;
+ firstTime = true;
+ radioUse = true;
+ }
+ rvAvail = (mState->GetChannelInfo().isRadio) ? radioActive : false;
+ } else if (Name == "LcrService-v1.0" || Name == "lcr") {
+ if (!lcrInit) {
+ lcrInit = true;
+ firstTime = true;
+ lcrUse = true;
+ }
+ rvAvail = lcrActive;
+ } else if (Name == "FemonService-v1.0" || Name == "femon") {
+ if (!femonInit) {
+ femonInit = true;
+ firstTime = true;
+ femonUse = true;
+ }
+ rvAvail = femonActive;
+ } else if (Name == "MailBox-1.0" || Name == "mailbox") {
+ if (!mailboxInit) {
+ mailboxInit = true;
+ firstTime = true;
+ mailboxUse = true;
+ }
+ rvAvail = mailboxActive;
+ } else if (Name == "span") {
+ if (!spanInit) {
+ spanInit = true;
+ firstTime = true;
+ spanUse = true;
+ }
+ //spanUse = true;
+ rvAvail = spanActive;
+ }
+
+
+ if (firstTime) {
+ std::map<std::string, std::string> opts;
+ std::map<std::string, std::string>::iterator it;
+
+ if (Options.length() > 0) {
+ size_t pos = 0;
+ while (pos < Options.length() && pos != std::string::npos) {
+ size_t start = pos;
+ pos = Options.find(",", start);
+
+ std::string curropt = (pos != std::string::npos) ? Options.substr(start, pos-start) : Options.substr(start);
+ size_t delim = curropt.find("=");
+ if ( (delim != std::string::npos) && (delim < curropt.length()-1) ) {
+ opts[curropt.substr(0, delim)] = curropt.substr(delim+1);
+ }
+
+ if (pos != std::string::npos)
+ pos++;
+ }
+ }
+
+ // options valid for all services
+ it = opts.find("delay");
+ if (it != opts.end()) {
+ int delay = atoi( (*it).second.c_str() );
+ if (delay >= 100) {
+ SetServiceUpdateDelay(Name, delay);
+ }
+ }
+
+ // indiv. options
+ if (Name == "span") {
+ int bands = 0; // default: no bands, only volume
+ it = opts.find("bands");
+ if (it != opts.end()) {
+ bands = atoi( (*it).second.c_str() );
+ }
+ if (bands < 0 || bands > 100)
+ bands = 0;
+
+ if (bands != 0) {
+ checkSpanData.bands = bands;
+ checkSpanData.barHeights = new unsigned int[bands];
+ checkSpanData.barHeightsLeftChannel = new unsigned int[bands];
+ checkSpanData.barHeightsRightChannel = new unsigned int[bands];
+ checkSpanData.barPeaksBothChannels = new unsigned int[bands];
+ checkSpanData.barPeaksLeftChannel = new unsigned int[bands];
+ checkSpanData.barPeaksRightChannel = new unsigned int[bands];
+
+ currSpanData.barHeights = new unsigned int[bands];
+ currSpanData.barHeightsLeftChannel = new unsigned int[bands];
+ currSpanData.barHeightsRightChannel = new unsigned int[bands];
+ currSpanData.barPeaksBothChannels = new unsigned int[bands];
+ currSpanData.barPeaksLeftChannel = new unsigned int[bands];
+ currSpanData.barPeaksRightChannel = new unsigned int[bands];
+ }
+
+ it = opts.find("falloff");
+ if (it != opts.end()) { // if no option 'falloff': use preset value
+ int falloff = atoi( (*it).second.c_str() );
+ if (falloff > 0 && falloff < 100)
+ checkSpanData.falloff = falloff;
+ }
+ }
+ }
+
+ return rvAvail;
+}
+
+
+void cGraphLCDService::SetServiceUpdateDelay(const std::string & Name, int delay) {
+ if (delay < 100)
+ return;
+
+ if (Name == "RadioTextService-v1.0" || Name == "radio") {
+ radioUpdateDelay = delay;
+ } else if (Name == "LcrService-v1.0" || Name == "lcr") {
+ lcrUpdateDelay = delay;
+ } else if (Name == "FemonService-v1.0" || Name == "femon") {
+ femonUpdateDelay = delay;
+ } else if (Name == "MailBox-1.0" || Name == "mailbox") {
+ mailboxUpdateDelay = delay;
+ } else if (Name == "span") {
+ spanUpdateDelay = delay;
+ }
+}
+
+
+GLCD::cType cGraphLCDService::GetItem(const std::string & ServiceName, const std::string & Item = "")
+{
+ size_t found = 0;
+ std::string ItemName = Item;
+ std::string ItemFormat = "";
+ std::string ItemExtra = "";
+
+ if (ItemName != "") {
+ found = Item.find(",");
+ if (found != std::string::npos) {
+ ItemName = Item.substr(0, found);
+ ItemFormat = Item.substr(found+1);
+ if ( (found = ItemFormat.find(",")) != std::string::npos) {
+ ItemExtra = ItemFormat.substr(found+1);
+ ItemFormat = ItemFormat.substr(0, found);
+ }
+ } else {
+ ItemName = Item;
+ }
+ }
+
+ //NeedsUpdate();
+ if (ServiceName == "RadioTextService-v1.0" || ServiceName == "radio") {
+ radioUse = true;
+ if (radioActive) {
+ if (ItemName == "" || ItemName == "default") {
+ if (currRTSData.rds_info == 2 && strstr(currRTSData.rds_title, "---") == NULL) {
+ char rtpinfo[2][65], rtstr[140];
+ strcpy(rtpinfo[0], currRTSData.rds_title);
+ strcpy(rtpinfo[1], currRTSData.rds_artist);
+ sprintf(rtstr, "%02d:%02d %s | %s", currRTSData.title_start->tm_hour, currRTSData.title_start->tm_min, trim(((std::string)(rtpinfo[0]))).c_str(), trim(((std::string)(rtpinfo[1]))).c_str());
+ return rtstr;
+ } else if (currRTSData.rds_info > 0) {
+ return trim(currRTSData.rds_text);
+ }
+ } else if (ItemName == "title") {
+ return trim(currRTSData.rds_title);
+ } else if (ItemName == "artist") {
+ return trim(currRTSData.rds_artist);
+ } else if (ItemName == "text") {
+ return trim(currRTSData.rds_text);
+ } else if (ItemName == "rds_info" || ItemName == "info") {
+ return (int)(currRTSData.rds_info);
+ } else if (ItemName == "rds_pty" || ItemName == "pty") {
+ return (int)(currRTSData.rds_pty);
+ }
+ }
+
+ } else if (ServiceName == "LcrService-v1.0" || ServiceName == "lcr") {
+ lcrUse = true;
+ if (lcrActive) {
+ if ( strstr( currLcrData.destination, "---" ) == NULL ) {
+ char lcrStringParts[3][25], lcrString[100];
+ strcpy( lcrStringParts[0], (const char *)currLcrData.destination );
+ strcpy( lcrStringParts[1], (const char *)currLcrData.price );
+ strcpy( lcrStringParts[2], (const char *)currLcrData.pulse );
+ sprintf(lcrString, "%s | %s", trim((std::string)(lcrStringParts[1])).c_str(), trim((std::string)(lcrStringParts[2])).c_str());
+ if (ItemName == "" || ItemName == "default") {
+ return trim(lcrString);
+ } else if (ItemName == "destination") {
+ return trim(lcrStringParts[0]);
+ } else if (ItemName == "price") {
+ return trim(lcrStringParts[1]);
+ } else if (ItemName == "pulse") {
+ return trim(lcrStringParts[2]);
+ }
+ }
+ }
+ } else if (ServiceName == "FemonService-v1.0" || ServiceName == "femon") {
+ femonUse = true;
+ if (femonActive) {
+ if (ItemName == "" || ItemName == "default" || ItemName == "status") {
+ return (const char*)currFemonData.fe_status;
+ } else if (ItemName == "name") {
+ return (const char*)currFemonData.fe_name;
+ } else if (ItemName == "snr") {
+ return (int)currFemonData.fe_snr;
+ } else if (ItemName == "signal") {
+ return (int)currFemonData.fe_signal;
+ } else if (ItemName == "percent_snr") {
+ return (int)((currFemonData.fe_snr * 100) / 65535);
+ } else if (ItemName == "percent_signal") {
+ return (int)((currFemonData.fe_signal * 100) / 65535);
+ } else if (ItemName == "ber") {
+ return (int)currFemonData.fe_ber;
+ } else if (ItemName == "unc") {
+ return (int)currFemonData.fe_unc;
+ } else if (ItemName == "video_bitrate" || ItemName == "vbr") {
+ if (ItemFormat == "" && (ItemExtra == "" || ItemExtra == "0")) {
+ return (int)currFemonData.video_bitrate;
+ } else {
+ double divisor = (ItemExtra == "") ? 1.0 : atof(ItemExtra.c_str());
+ double value = currFemonData.video_bitrate;
+ if (ItemFormat == "") {
+ return (int)(value / divisor);
+ } else {
+ char buf[20];
+ snprintf(buf, 19, ItemFormat.c_str(), (value / divisor));
+ return buf;
+ }
+ }
+ } else if (ItemName == "audio_bitrate" || ItemName == "abr") {
+ if (ItemFormat == "" && (ItemExtra == "" || ItemExtra == "0")) {
+ return (int)currFemonData.audio_bitrate;
+ } else {
+ double divisor = (ItemExtra == "") ? 1 : atof(ItemExtra.c_str());
+ double value = currFemonData.audio_bitrate;
+ if (ItemFormat == "") {
+ return (int)(value / divisor);
+ } else {
+ char buf[20];
+ snprintf(buf, 19, ItemFormat.c_str(), (value / divisor));
+ return buf;
+ }
+ }
+ } else if (ItemName == "dolby_bitrate" || ItemName == "dbr") {
+ if (ItemFormat == "" && (ItemExtra == "" || ItemExtra == "0")) {
+ return (int)currFemonData.dolby_bitrate;
+ } else {
+ double divisor = (ItemExtra == "") ? 1 : atof(ItemExtra.c_str());
+ double value = currFemonData.dolby_bitrate;
+ if (ItemFormat == "") {
+ return (int)(value / divisor);
+ } else {
+ char buf[20];
+ snprintf(buf, 19, ItemFormat.c_str(), (value / divisor));
+ return buf;
+ }
+ }
+ }
+ }
+ } else if (ServiceName == "MailBox-1.0" || ServiceName == "mailbox") {
+ mailboxUse = true;
+ if (mailboxActive) {
+ if (ItemName == "" || ItemName == "default"|| ItemName == "hasnew") {
+ return (bool)currMailboxNewData;
+ } else if (ItemName == "newcount") {
+ if (currMailboxUnseenData > (unsigned long)std::numeric_limits<int>::max()) {
+ return (int)-1;
+ } else {
+ return (int)currMailboxUnseenData;
+ }
+ }
+ }
+ } else if (ServiceName == "span") {
+ spanUse = true;
+ if (spanActive) {
+ int index = 0;
+ if (ItemFormat != "") {
+ index = atoi(ItemFormat.c_str());
+ }
+ if (ItemName == "" || ItemName == "default" || ItemName == "VolumeBoth" || ItemName == "volume") {
+ return (int)checkSpanData.volumeBothChannels[0];
+ } else if (ItemName == "VolumeLeft" || ItemName == "volumel") {
+ return (int)checkSpanData.volumeLeftChannel[0];
+ } else if (ItemName == "VolumeRight" || ItemName == "volumer") {
+ return (int)checkSpanData.volumeRightChannel[0];
+ } else if (ItemName == "Bands" || ItemName == "bands") {
+ return (int)checkSpanData.bands;
+ } else if (ItemName == "Falloff" || ItemName == "falloff") {
+ return (int)checkSpanData.falloff;
+ } else if (ItemName == "BarHeight" || ItemName == "height") {
+ return (int)checkSpanData.barHeights[index];
+ } else if (ItemName == "BarHeightLeft" || ItemName == "heightl") {
+ return (int)checkSpanData.barHeightsLeftChannel[index];
+ } else if (ItemName == "BarHeightRight" || ItemName == "heightr") {
+ return (int)checkSpanData.barHeightsRightChannel[index];
+ } else if (ItemName == "BarPeak" || ItemName == "peak") {
+ return (int)checkSpanData.barPeaksBothChannels[index];
+ } else if (ItemName == "BarPeakLeft" || ItemName == "peakl") {
+ return (int)checkSpanData.barPeaksLeftChannel[index];
+ } else if (ItemName == "BarPeakRight" || ItemName == "peakr") {
+ return (int)checkSpanData.barPeaksRightChannel[index];
+ }
+ }
+ }
+
+ return "";
+}
+
+
+
+/* async. check event updates for services from other plugins */
+/* only sets flags but does NOT update display output */
+bool cGraphLCDService::NeedsUpdate(uint64_t CurrentTime)
+{
+ //mutex.Lock();
+
+ /*radioActive = false;*/ radioChanged = false;
+ /*lcrActive = false;*/ lcrChanged = false;
+ /*femonActive = false;*/ femonChanged = false;
+ mailboxChanged = false;
+ spanChanged = false;
+
+ cPlugin *p = NULL;
+
+ // Radiotext
+ // only ask if radio-services are defined in the skin and min. request delay exceeded
+ if (radioUse && ((CurrentTime-radioLastChange) >= (uint64_t)radioUpdateDelay)) {
+ radioLastChange = CurrentTime;
+ p = cPluginManager::CallFirstService("RadioTextService-v1.0", NULL);
+ if (p) {
+ checkRTSData.rds_text = NULL;
+ checkRTSData.rds_title = NULL;
+ checkRTSData.rds_artist = NULL;
+
+ if (cPluginManager::CallFirstService("RadioTextService-v1.0", &checkRTSData)) {
+ radioActive = true;
+ if (
+ (currRTSData.rds_info != checkRTSData.rds_info) ||
+ (currRTSData.rds_pty != checkRTSData.rds_pty) ||
+ (ParanoiaStrcmp(currRTSData.rds_text, checkRTSData.rds_text) != 0) ||
+ (ParanoiaStrcmp(currRTSData.rds_title, checkRTSData.rds_title) != 0) ||
+ (ParanoiaStrcmp(currRTSData.rds_artist, checkRTSData.rds_artist) != 0)
+ )
+ {
+ currRTSData.rds_info = checkRTSData.rds_info;
+ currRTSData.rds_pty = checkRTSData.rds_pty;
+ currRTSData.rds_text = checkRTSData.rds_text;
+ currRTSData.rds_title = checkRTSData.rds_title;
+ currRTSData.rds_artist = checkRTSData.rds_artist;
+ currRTSData.title_start= checkRTSData.title_start;
+
+ radioChanged = true;
+ }
+ }
+ }
+ }
+
+ // Lcr
+ // only ask if lcr-services are defined in the skin and min. request delay exceeded
+ if (lcrUse && ((CurrentTime-lcrLastChange) >= (uint64_t)lcrUpdateDelay)) {
+ lcrLastChange = CurrentTime;
+ p = cPluginManager::CallFirstService("LcrService-v1.0", NULL);
+ if (p) {
+ checkLcrData.destination = NULL;
+ checkLcrData.price = NULL;
+ checkLcrData.pulse = NULL;
+
+ if (cPluginManager::CallFirstService("LcrService-v1.0", &checkLcrData)) {
+ lcrActive = true;
+ if (
+ (ParanoiaStrcmp(currLcrData.destination, checkLcrData.destination) != 0) ||
+ (ParanoiaStrcmp(currLcrData.price, checkLcrData.price) != 0) ||
+ (ParanoiaStrcmp(currLcrData.pulse, checkLcrData.pulse) != 0)
+ )
+ {
+ currLcrData.destination = checkLcrData.destination;
+ currLcrData.price = checkLcrData.price;
+ currLcrData.pulse = checkLcrData.pulse;
+
+ lcrChanged = true;
+ }
+ }
+ }
+ }
+
+
+ // femon
+ // only ask if femon-services are defined in the skin and min. request delay exceeded
+ if (femonUse && ((CurrentTime-femonLastChange) >= (uint64_t)femonUpdateDelay)) {
+ femonLastChange = CurrentTime;
+ p = cPluginManager::CallFirstService("FemonService-v1.0", NULL);
+ if (p) {
+#ifdef GRAPHLCD_SERVICE_FEMON_VALID
+ femonVersionChecked = femonVersionValid = true;
+#else
+ // nota bene: femon version <= 1.2.x will not make it until here because of a 2nd bug in femon in these versions
+ if (!femonVersionChecked) { // only execute this check once
+ std::string version = p->Version();
+ size_t mstart = 0;
+ size_t mend = std::string::npos;
+ int numval = 0;
+
+ if ((mend = version.find(".", mstart)) != std::string::npos) {
+ numval = atoi(version.substr(mstart, mend-mstart).c_str());
+ if (numval > 1) {
+ femonVersionValid = true;
+ } else if (numval == 1) { // version 1.x.x
+ mstart = mend + 1;
+ if ((mend = version.find(".", mstart)) != std::string::npos) {
+ numval = atoi(version.substr(mstart, mend-mstart).c_str());
+ if (numval <= 6) { // version <= 1.6.x
+ isyslog("graphlcd plugin: INFO: femon <= 1.7.7 requires a patch prior to be usable with graphlcd\n");
+ isyslog("graphlcd plugin: INFO: see README for further instructions\n");
+ } else if (numval == 7) {
+ mstart = mend + 1;
+ numval = atoi(version.substr(mstart).c_str()); // ignore trailing characters
+ if (numval <= 7) {
+ isyslog("graphlcd plugin: INFO: femon <= 1.7.7 requires a patch prior to be usable with graphlcd\n");
+ isyslog("graphlcd plugin: INFO: see README for further instructions\n");
+ } else { // version >= 1.7.8: ok
+ femonVersionValid = true;
+ }
+ } else { // version >= 1.8.x: ok
+ femonVersionValid = true;
+ }
+ } else {
+ isyslog("graphlcd plugin: INFO: Unable to decode version information of femon\n");
+ }
+ } else {
+ isyslog("graphlcd plugin: INFO: Unable to decode version information of femon\n");
+ }
+ }
+ femonVersionChecked = true;
+ }
+#endif /* GRAPHLCD_SERVICE_FEMON_VALID */
+
+ if (femonVersionValid) {
+ if (cPluginManager::CallFirstService("FemonService-v1.0", &checkFemonData)) {
+ femonActive = true;
+ if (
+#if 0
+ (strcmp(currFemonData.fe_name, checkFemonData.fe_name) != 0) ||
+ (strcmp(currFemonData.fe_status, checkFemonData.fe_status) != 0) ||
+#endif
+ (currFemonData.fe_signal != checkFemonData.fe_signal) ||
+ (currFemonData.fe_ber != checkFemonData.fe_ber) ||
+ (currFemonData.fe_unc != checkFemonData.fe_unc) ||
+ (currFemonData.video_bitrate != checkFemonData.video_bitrate) ||
+ (currFemonData.audio_bitrate != checkFemonData.audio_bitrate) ||
+ (currFemonData.dolby_bitrate != checkFemonData.dolby_bitrate)
+ )
+ {
+ currFemonData.fe_name = checkFemonData.fe_name;
+ currFemonData.fe_status = checkFemonData.fe_status;
+ currFemonData.fe_snr = checkFemonData.fe_snr;
+ currFemonData.fe_signal = checkFemonData.fe_signal;
+ currFemonData.fe_ber = checkFemonData.fe_ber;
+ currFemonData.fe_unc = checkFemonData.fe_unc;
+ currFemonData.video_bitrate = checkFemonData.video_bitrate;
+ currFemonData.audio_bitrate = checkFemonData.audio_bitrate;
+ currFemonData.dolby_bitrate = checkFemonData.dolby_bitrate;
+
+ femonChanged = true;
+ }
+ }
+ }
+ }
+ }
+
+ // Mailbox
+ // only ask if mailbox-services are defined in the skin and min. request delay exceeded
+ if (mailboxUse && ((CurrentTime-mailboxLastChange) >= (uint64_t)mailboxUpdateDelay)) {
+ mailboxLastChange = CurrentTime;
+ if (cPluginManager::CallFirstService("MailBox-HasNewMail-1.0", NULL) &&
+ cPluginManager::CallFirstService("MailBox-GetTotalUnseen-1.0", NULL)) {
+ if (cPluginManager::CallFirstService("MailBox-HasNewMail-1.0", &checkMailboxNewData) &&
+ cPluginManager::CallFirstService("MailBox-GetTotalUnseen-1.0", &checkMailboxUnseenData)) {
+ mailboxActive = true;
+ if (
+ (currMailboxNewData != checkMailboxNewData) ||
+ (currMailboxUnseenData != checkMailboxUnseenData)
+ )
+ {
+ currMailboxNewData = checkMailboxNewData;
+ currMailboxUnseenData = checkMailboxUnseenData;
+
+ mailboxChanged = true;
+ }
+ }
+ }
+ }
+
+ // span
+ // only ask if span-services are defined in the skin and min. request delay exceeded
+ if (checkSpanData.bands > 0 && spanUse && ((CurrentTime-spanLastChange) >= (uint64_t)spanUpdateDelay)) {
+ spanLastChange = CurrentTime;
+ spanActive = false;
+ p = cPluginManager::CallFirstService("Span-ClientCheck-v1.0", NULL);
+ if (p) {
+ cControl* c = cControl::Control(); // workaround a bug somewhere in music or span-plugin
+ if (c != NULL && cPluginManager::CallFirstService("Span-GetBarHeights-v1.0", &checkSpanData)) {
+ spanActive = true;
+ bool chg = false;
+
+ if ( (currSpanData.volumeLeftChannel[0] != checkSpanData.volumeLeftChannel[0]) ||
+ (currSpanData.volumeRightChannel[0] != checkSpanData.volumeRightChannel[0]) ||
+ (currSpanData.volumeBothChannels[0] != checkSpanData.volumeBothChannels[0])
+ )
+ {
+ chg = true;
+ currSpanData.volumeLeftChannel[0] = checkSpanData.volumeLeftChannel[0];
+ currSpanData.volumeRightChannel[0] = checkSpanData.volumeRightChannel[0];
+ currSpanData.volumeBothChannels[0] = checkSpanData.volumeBothChannels[0];
+ }
+ for (unsigned int i = 0; i < checkSpanData.bands; i++) {
+ if ( (currSpanData.barHeights[i] != checkSpanData.barHeights[i]) ||
+ (currSpanData.barHeightsLeftChannel[i] != checkSpanData.barHeightsLeftChannel[i]) ||
+ (currSpanData.barHeightsRightChannel[i] != checkSpanData.barHeightsRightChannel[i]) ||
+ (currSpanData.barPeaksBothChannels[i] != checkSpanData.barPeaksBothChannels[i]) ||
+ (currSpanData.barPeaksLeftChannel[i] != checkSpanData.barPeaksLeftChannel[i]) ||
+ (currSpanData.barPeaksRightChannel[i] != checkSpanData.barPeaksRightChannel[i])
+ )
+ {
+ chg = true;
+ currSpanData.barHeights[i] = checkSpanData.barHeights[i];
+ currSpanData.barHeightsLeftChannel[i] = checkSpanData.barHeightsLeftChannel[i];
+ currSpanData.barHeightsRightChannel[i] = checkSpanData.barHeightsRightChannel[i];
+ currSpanData.barPeaksBothChannels[i] = checkSpanData.barPeaksBothChannels[i];
+ currSpanData.barPeaksLeftChannel[i] = checkSpanData.barPeaksLeftChannel[i];
+ currSpanData.barPeaksRightChannel[i] = checkSpanData.barPeaksRightChannel[i];
+ }
+ }
+ spanChanged = chg;
+ }
+ }
+ }
+
+ //mutex.Unlock();
+ return (radioChanged || lcrChanged || femonChanged || mailboxChanged || spanChanged);
+}
diff --git a/service.h b/service.h
new file mode 100644
index 0000000..f0fda6f
--- /dev/null
+++ b/service.h
@@ -0,0 +1,111 @@
+/**
+ * GraphLCD plugin for the Video Disk Recorder
+ *
+ * service.h - class for events from external services
+ *
+ * (c) 2010-2011 Wolfgang Astleitner <mrwastl AT users sourceforge net>
+ *
+ * mailbox-contribution: user 'Keine_Ahnung'
+ **/
+
+#ifndef _GRAPHLCD_SERVICE_H_
+#define _GRAPHLCD_SERVICE_H_
+
+#include <glcdskin/type.h>
+
+#include <string>
+#include <vdr/plugin.h>
+
+#include <vector> // req. for state.h
+#include "state.h"
+
+// Radiotext
+struct RadioTextService_v1_0 {
+ int rds_info;
+ int rds_pty;
+ char *rds_text;
+ char *rds_title;
+ char *rds_artist;
+ struct tm *title_start;
+};
+
+// LcrData
+struct LcrService_v1_0 {
+ cString destination;
+ cString price;
+ cString pulse;
+};
+
+// Femon
+struct FemonService_v1_0 {
+ cString fe_name;
+ cString fe_status;
+ uint16_t fe_snr;
+ uint16_t fe_signal;
+ uint32_t fe_ber;
+ uint32_t fe_unc;
+ double video_bitrate;
+ double audio_bitrate;
+ double dolby_bitrate;
+};
+
+// Span
+struct Span_GetBarHeights_v1_0 {
+ // all heights are normalized to 100(%)
+ unsigned int bands; // number of bands to compute
+ unsigned int *barHeights; // the heights of the bars of the two channels combined
+ unsigned int *barHeightsLeftChannel; // the heights of the bars of the left channel
+ unsigned int *barHeightsRightChannel; // the heights of the bars of the right channel
+ unsigned int *volumeLeftChannel; // the volume of the left channels
+ unsigned int *volumeRightChannel; // the volume of the right channels
+ unsigned int *volumeBothChannels; // the combined volume of the two channels
+ const char *name; // name of the plugin that wants to get the data
+ // (must be unique for each client!)
+ unsigned int falloff; // bar falloff value
+ unsigned int *barPeaksBothChannels; // bar peaks of the two channels combined
+ unsigned int *barPeaksLeftChannel; // bar peaks of the left channel
+ unsigned int *barPeaksRightChannel; // bar peaks of the right channel
+};
+
+
+class cGraphLCDService
+{
+private:
+ //cMutex mutex;
+ cGraphLCDState * mState;
+
+ RadioTextService_v1_0 checkRTSData, currRTSData;
+ LcrService_v1_0 checkLcrData, currLcrData;
+ FemonService_v1_0 checkFemonData, currFemonData;
+ Span_GetBarHeights_v1_0 checkSpanData, currSpanData;
+ bool checkMailboxNewData, currMailboxNewData;
+ unsigned long checkMailboxUnseenData, currMailboxUnseenData;
+ /* __Changed = data has been changed */
+ /* __Active = plugin/service is available and active */
+ /* __Use = service is requested in skin (don't call services that wouldn't be used anyway) */
+ /* __Init = ServiceIsAvailable() has been called at least one for this service */
+ bool radioChanged, radioActive, radioUse, radioInit;
+ bool lcrChanged, lcrActive, lcrUse, lcrInit;
+ bool femonChanged, femonActive, femonUse, femonInit;
+ bool mailboxChanged, mailboxActive, mailboxUse, mailboxInit;
+ bool spanChanged, spanActive, spanUse, spanInit;
+ // timestamp of last service update request
+ uint64_t radioLastChange, lcrLastChange, femonLastChange, mailboxLastChange, spanLastChange;
+ // min. delay between two service update requests
+ int radioUpdateDelay, lcrUpdateDelay, femonUpdateDelay, mailboxUpdateDelay, spanUpdateDelay;
+
+ // check if femon version <= 1.7.7
+ bool femonVersionChecked, femonVersionValid;
+//protected:
+
+public:
+ cGraphLCDService(cGraphLCDState * state);
+ virtual ~cGraphLCDService();
+
+ bool ServiceIsAvailable(const std::string & Name, const std::string & Options = NULL);
+ void SetServiceUpdateDelay(const std::string & Name, int delay);
+ bool NeedsUpdate(uint64_t CurrentTime);
+ GLCD::cType GetItem(const std::string & ServiceName, const std::string & Item);
+};
+
+#endif
diff --git a/setup.c b/setup.c
index 10631d5..0ae387f 100644
--- a/setup.c
+++ b/setup.c
@@ -27,34 +27,31 @@
#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),
- pluginSpectrumAnalyzer(0), // SPAN loaded?
- enableSpectrumAnalyzer(1),
- SAShowVolume(1)
+: PluginActive(1),
+ ShowDateTime(1),
+ ShowChannel(1),
+ ShowChannelLogo(1),
+ ShowSymbols(1),
+ ShowProgram(1),
+ ShowTimebar(1),
+ ShowMenu(1),
+ ShowMessages(1),
+ ShowColorButtons(1),
+ ShowVolume(1),
+ ShowNotRecording(0),
+ IdentifyReplayType(1),
+ ModifyReplayString(1),
+ ShowReplayLogo(1),
+ ScrollMode(0),
+ ScrollSpeed(2),
+ ScrollTime(500),
+ BrightnessActive(100),
+ BrightnessIdle(100),
+ BrightnessDelay(30)
{
}
@@ -64,35 +61,31 @@ cGraphLCDSetup::~cGraphLCDSetup(void)
cGraphLCDSetup & cGraphLCDSetup::operator=(const cGraphLCDSetup & setup)
{
- CopyFrom(&setup);
- return *this;
+ 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;
- pluginSpectrumAnalyzer = source->pluginSpectrumAnalyzer;
- enableSpectrumAnalyzer = source->enableSpectrumAnalyzer;
- SAShowVolume = source->SAShowVolume;
+ PluginActive = source->PluginActive;
+ ShowDateTime = source->ShowDateTime;
+ ShowChannel = source->ShowChannel;
+ ShowChannelLogo = source->ShowChannelLogo;
+ ShowSymbols = source->ShowSymbols;
+ 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;
+ ShowReplayLogo = source->ShowReplayLogo;
+ 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
index ec73f25..a76f9cb 100644
--- a/setup.h
+++ b/setup.h
@@ -32,37 +32,33 @@
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;
- int pluginSpectrumAnalyzer;
- int enableSpectrumAnalyzer;
- int SAShowVolume;
+ int PluginActive;
+ int ShowDateTime;
+ int ShowChannel;
+ int ShowChannelLogo;
+ int ShowSymbols;
+ 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 ShowReplayLogo;
+ 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);
+ cGraphLCDSetup(void);
+ virtual ~cGraphLCDSetup(void);
+ cGraphLCDSetup & operator= (const cGraphLCDSetup & setup);
+ void CopyFrom(const cGraphLCDSetup * source);
};
extern cGraphLCDSetup GraphLCDSetup;
diff --git a/skinconfig.c b/skinconfig.c
new file mode 100644
index 0000000..39b6c75
--- /dev/null
+++ b/skinconfig.c
@@ -0,0 +1,999 @@
+/*
+ * GraphLCD plugin for the Video Disk Recorder
+ *
+ * skinconfig.c - skin config class that implements all the callbacks
+ *
+ * This file is released under the GNU General Public License. Refer
+ * to the COPYING file distributed with this package.
+ *
+ * (c) 2004-2010 Andreas Regel <andreas.regel AT powarman.de>
+ * (c) 2010-2011 Wolfgang Astleitner <mrwastl AT users sourceforge net>
+ */
+
+#include <glcdskin/config.h>
+#include <glcdskin/type.h>
+#include <glcdskin/string.h>
+
+#include "common.h"
+#include "display.h"
+#include "state.h"
+#include "skinconfig.h"
+#include "service.h"
+#include "extdata.h"
+
+typedef enum _eTokenId
+{
+ // current channel
+ tokPrivateChannelStart,
+ tokChannelNumber,
+ tokChannelName,
+ tokChannelShortName,
+ tokChannelProvider,
+ tokChannelPortal,
+ tokChannelSource,
+ tokChannelID,
+ tokHasTeletext,
+ tokChannelHasTeletext,
+ tokHasMultilang,
+ tokChannelHasMultilang,
+ tokHasDolby,
+ tokChannelHasDolby,
+ tokIsEncrypted,
+ tokChannelIsEncrypted,
+ tokIsRadio,
+ tokChannelIsRadio,
+ tokChannelAlias,
+ tokPrivateChannelEnd,
+
+ // current device
+ tokPrivateDeviceStart,
+ tokActualDevice,
+ tokSignalStrength,
+ tokSignalQuality,
+ tokSupportsSignalInfo,
+ tokPrivateDeviceEnd,
+
+ tokPrivateRecordingStart,
+ tokIsRecording,
+ tokRecordings,
+ tokPrivateRecordingEnd,
+
+ // present event
+ tokPrivatePresentStart,
+ tokPresentValid,
+ tokPresentStartDateTime,
+ tokPresentVpsDateTime,
+ tokPresentEndDateTime,
+ tokPresentDuration,
+ tokPresentProgress,
+ tokPresentRemaining,
+ tokPresentTitle,
+ tokPresentShortText,
+ tokPresentDescription,
+ tokPrivatePresentEnd,
+
+ // following event
+ tokPrivateFollowingStart,
+ tokFollowingValid,
+ tokFollowingStartDateTime,
+ tokFollowingVpsDateTime,
+ tokFollowingEndDateTime,
+ tokFollowingDuration,
+ tokFollowingTitle,
+ tokFollowingShortText,
+ tokFollowingDescription,
+ tokPrivateFollowingEnd,
+
+ // volume display
+ tokPrivateVolumeStart,
+ tokVolumeCurrent,
+ tokVolumeTotal,
+ tokIsMute,
+ tokVolumeIsMute,
+ tokPrivateVolumeEnd,
+
+ // audio display
+ tokPrivateAudioStart,
+ tokAudioTrackItem,
+ tokAudioTrackCurrent,
+ tokIsAudioTrackCurrent,
+ tokAudioChannel,
+ tokPrivateAudioEnd,
+
+ tokPrivateReplayStart,
+ tokReplayTitle,
+ tokReplayPositionIndex,
+ tokReplayDurationIndex,
+ tokIsPlaying,
+ tokReplayIsPlaying,
+ tokIsFastForward,
+ tokReplayIsFastForward,
+ tokIsFastRewind,
+ tokReplayIsFastRewind,
+ tokIsSlowForward,
+ tokReplayIsSlowForward,
+ tokIsSlowRewind,
+ tokReplayIsSlowRewind,
+ tokIsPausing,
+ tokReplayIsPausing,
+ tokReplayPosition,
+ tokReplayDuration,
+ tokReplayRemaining,
+ tokReplayMode,
+ tokReplayIsShuffle,
+ tokReplayIsLoop,
+ tokPrivateReplayEnd,
+
+ tokPrivateOsdStart,
+ tokMessage,
+ tokMenuTitle,
+ tokMenuItem,
+ tokMenuCurrent,
+ tokIsMenuCurrent,
+ tokIsMenuList,
+ tokMenuText,
+ tokMenuTextScroll,
+ tokButtonRed,
+ tokButtonGreen,
+ tokButtonYellow,
+ tokButtonBlue,
+ tokPrivateOsdEnd,
+
+ tokDateTime,
+ tokConfigPath,
+ tokSkinPath,
+ tokScreenWidth,
+ tokScreenHeight,
+ tokDefaultForegroundColor,
+ tokDefaultBackgroundColor,
+ tokForegroundColor,
+ tokBackgroundColor,
+ tokIsUTF8,
+
+ tokPrivateSettingStart,
+ tokSettingShowChannelLogo,
+ tokSettingShowReplayLogo,
+ tokSettingShowSymbols,
+ tokSettingShowTimebar,
+
+ tokScrollMode,
+ tokScrollSpeed,
+ tokScrollTime,
+ tokBrightnessActive,
+ tokBrightnessIdle,
+ tokBrightnessDelay,
+ tokDisplayMode,
+ tokPrivateSettingEnd,
+
+ // external services and data
+ tokPrivateServiceStart,
+ tokServiceIsAvailable,
+ tokServiceItem,
+ tokExtDataIsAvailable,
+ tokExtDataItem,
+ tokPrivateServiceEnd,
+
+ tokCountToken
+} eTokenId;
+
+static const std::string Tokens[tokCountToken] =
+{
+ "privateChannelStart",
+ "ChannelNumber",
+ "ChannelName",
+ "ChannelShortName",
+ "ChannelProvider",
+ "ChannelPortal",
+ "ChannelSource",
+ "ChannelID",
+ "HasTeletext",
+ "ChannelHasTeletext",
+ "HasMultilang",
+ "ChannelHasMultilang",
+ "HasDolby",
+ "ChannelHasDolby",
+ "IsEncrypted",
+ "ChannelIsEncrypted",
+ "IsRadio",
+ "ChannelIsRadio",
+ "ChannelAlias",
+ "privateChannelEnd",
+
+ "privatePrivateDeviceStart",
+ "ActualDevice",
+ "SignalStrength",
+ "SignalQuality",
+ "SupportsSignalInfo",
+ "privateDeviceEnd",
+
+ "privateRecordingStart",
+ "IsRecording",
+ "Recordings",
+ "privateRecordingEnd",
+
+ "privatePresentStart",
+ "PresentValid",
+ "PresentStartDateTime",
+ "PresentVpsDateTime",
+ "PresentEndDateTime",
+ "PresentDuration",
+ "PresentProgress",
+ "PresentRemaining",
+ "PresentTitle",
+ "PresentShortText",
+ "PresentDescription",
+ "privatePresentEnd",
+
+ "privateFollowingStart",
+ "FollowingValid",
+ "FollowingStartDateTime",
+ "FollowingVpsDateTime",
+ "FollowingEndDateTime",
+ "FollowingDuration",
+ "FollowingTitle",
+ "FollowingShortText",
+ "FollowingDescription",
+ "privateFollowingEnd",
+
+ "privateVolumeStart",
+ "VolumeCurrent",
+ "VolumeTotal",
+ "IsMute",
+ "VolumeIsMute",
+ "privateVolumeEnd",
+
+ "privateAudioStart",
+ "AudioTrackItem",
+ "AudioTrackCurrent",
+ "IsAudioTrackCurrent",
+ "AudioChannel",
+ "privateAudioEnd",
+
+ "privateReplayStart",
+ "ReplayTitle",
+ "ReplayPositionIndex",
+ "ReplayDurationIndex",
+ "IsPlaying",
+ "ReplayIsPlaying",
+ "IsFastForward",
+ "ReplayIsFastForward",
+ "IsFastRewind",
+ "ReplayIsFastRewind",
+ "IsSlowForward",
+ "ReplayIsSlowForward",
+ "IsSlowRewind",
+ "ReplayIsSlowRewind",
+ "IsPausing",
+ "ReplayIsPausing",
+ "ReplayPosition",
+ "ReplayDuration",
+ "ReplayRemaining",
+ "ReplayMode",
+ "ReplayIsShuffle",
+ "ReplayIsLoop",
+ "privateReplayEnd",
+
+ "privateOsdStart",
+ "Message",
+ "MenuTitle",
+ "MenuItem",
+ "MenuCurrent",
+ "IsMenuCurrent",
+ "IsMenuList",
+ "MenuText",
+ "MenuTextScroll",
+ "ButtonRed",
+ "ButtonGreen",
+ "ButtonYellow",
+ "ButtonBlue",
+ "privateOsdEnd",
+
+ "DateTime",
+ "ConfigPath",
+ "SkinPath",
+ "ScreenWidth",
+ "ScreenHeight",
+ "DefaultForegroundColor",
+ "DefaultBackgroundColor",
+ "ForegroundColor",
+ "BackgroundColor",
+ "IsUTF8",
+
+ "privateSettingStart",
+ "SettingShowChannelLogo",
+ "SettingShowReplayLogo",
+ "SettingShowSymbols",
+ "SettingShowTimebar",
+
+ "ScrollMode",
+ "ScrollSpeed",
+ "ScrollTime",
+ "BrightnessActive",
+ "BrightnessIdle",
+ "BrightnessDelay",
+ "DisplayMode",
+ "privateSettingEnd",
+
+ // external services
+ "privateServiceStart",
+ "ServiceIsAvailable",
+ "ServiceItem",
+ "ExtDataIsAvailable",
+ "ExtDataItem",
+ "privateServiceEnd"
+};
+
+cGraphLCDSkinConfig::cGraphLCDSkinConfig(const cGraphLCDDisplay * Display, const std::string & CfgPath, const std::string & SkinsPath, const std::string & SkinName, cGraphLCDState * State)
+{
+ mDisplay = Display;
+ mConfigPath = CfgPath;
+ mSkinPath = SkinsPath + "/" + SkinName;
+ mSkinName = SkinName;
+ mState = State;
+ mAliasList.Load(CfgPath);
+}
+
+cGraphLCDSkinConfig::~cGraphLCDSkinConfig()
+{
+}
+
+std::string cGraphLCDSkinConfig::SkinPath(void)
+{
+ return mSkinPath;
+}
+
+std::string cGraphLCDSkinConfig::FontPath(void)
+{
+ return mConfigPath + "/fonts";
+}
+
+std::string cGraphLCDSkinConfig::CharSet(void)
+{
+#if APIVERSNUM >= 10503
+ if (cCharSetConv::SystemCharacterTable()) {
+ return cCharSetConv::SystemCharacterTable();
+ } else {
+ return "UTF-8";
+ }
+#else
+ if (I18nCharSets()[Setup.OSDLanguage]) {
+ return I18nCharSets()[Setup.OSDLanguage];
+ } else {
+ return "iso-8859-15";
+ }
+#endif
+}
+
+std::string cGraphLCDSkinConfig::Translate(const std::string & Text)
+{
+ return I18nTranslate(Text.c_str());
+}
+
+GLCD::cType cGraphLCDSkinConfig::GetToken(const GLCD::tSkinToken & Token)
+{
+ if (Token.Id > tokPrivateChannelStart && Token.Id < tokPrivateChannelEnd)
+ {
+ tChannel channel = mState->GetChannelInfo();
+ switch (Token.Id)
+ {
+ case tokChannelNumber:
+ return channel.number;
+ case tokChannelName:
+ return channel.name;
+ case tokChannelShortName:
+ return channel.shortName;
+ case tokChannelProvider:
+ return channel.provider;
+ case tokChannelPortal:
+ return channel.portal;
+ case tokChannelSource:
+ return channel.source;
+ case tokChannelID:
+ return (GLCD::cType) (const char *) channel.id.ToString();
+ case tokHasTeletext:
+ case tokChannelHasTeletext:
+ return channel.hasTeletext;
+ case tokHasMultilang:
+ case tokChannelHasMultilang:
+ return channel.hasMultiLanguage;
+ case tokHasDolby:
+ case tokChannelHasDolby:
+ return channel.hasDolby;
+ case tokIsEncrypted:
+ case tokChannelIsEncrypted:
+ return channel.isEncrypted;
+ case tokIsRadio:
+ case tokChannelIsRadio:
+ return channel.isRadio;
+ case tokChannelAlias:
+ {
+ char tmp[64];
+ std::string alias;
+
+ sprintf(tmp, "%d-%d-%d", channel.id.Nid(), channel.id.Tid(), channel.id.Sid());
+ alias = mAliasList.GetAlias(tmp);
+ return alias;
+ }
+ default:
+ break;
+ }
+ }
+ else if (Token.Id > tokPrivateDeviceStart && Token.Id < tokPrivateDeviceEnd)
+ {
+ cDevice * currDev = cDevice::ActualDevice();
+ if (currDev)
+ {
+ switch (Token.Id)
+ {
+ case tokActualDevice:
+ {
+ return currDev->DeviceNumber()+1; // DeviceNumber() starts with 0 but let output start w/ 1
+ }
+ case tokSignalStrength:
+ {
+#if VDRVERSNUM >= 10719
+ return currDev->SignalStrength();
+#else
+ return false;
+#endif
+ }
+ case tokSignalQuality:
+ {
+#if VDRVERSNUM >= 10719
+ return currDev->SignalQuality();
+#else
+ return false;
+#endif
+ }
+ case tokSupportsSignalInfo:
+ {
+#if VDRVERSNUM >= 10719
+ return true;
+#else
+ return false;
+#endif
+ }
+ default:
+ break;
+ }
+ }
+ return false;
+ }
+ else if (Token.Id > tokPrivateRecordingStart && Token.Id < tokPrivateRecordingEnd)
+ {
+ switch (Token.Id)
+ {
+ case tokIsRecording:
+ {
+ if (Token.Attrib.Type == GLCD::aNumber)
+ return mState->IsRecording(Token.Attrib.Number);
+ return mState->IsRecording(-1);
+ }
+ case tokRecordings:
+ {
+ if (Token.Attrib.Type == GLCD::aNumber)
+ return mState->Recordings(Token.Attrib.Number);
+ return mState->Recordings(-1);
+ }
+ default:
+ break;
+ }
+ }
+ else if (Token.Id > tokPrivatePresentStart && Token.Id < tokPrivatePresentEnd)
+ {
+ tEvent event = mState->GetPresentEvent();
+ switch (Token.Id)
+ {
+ case tokPresentValid:
+ return event.valid;
+ case tokPresentStartDateTime:
+ return TimeType(event.startTime, Token.Attrib.Text);
+ case tokPresentVpsDateTime:
+ return TimeType(event.vpsTime, Token.Attrib.Text);
+ case tokPresentEndDateTime:
+ return TimeType(event.startTime + event.duration, Token.Attrib.Text);
+ case tokPresentDuration:
+ return DurationType(event.duration, Token.Attrib.Text);
+ case tokPresentProgress:
+ return DurationType(time(NULL) - event.startTime, Token.Attrib.Text);
+ case tokPresentRemaining:
+ if ((time(NULL) - event.startTime) < event.duration)
+ {
+ return DurationType(event.duration - (time(NULL) - event.startTime), Token.Attrib.Text);
+ }
+ return false;
+ case tokPresentTitle:
+ return event.title;
+ case tokPresentShortText:
+ return event.shortText;
+ case tokPresentDescription:
+ return event.description;
+ default:
+ break;
+ }
+ }
+ else if (Token.Id > tokPrivateFollowingStart && Token.Id < tokPrivateFollowingEnd)
+ {
+ tEvent event = mState->GetFollowingEvent();
+ switch (Token.Id)
+ {
+ case tokFollowingValid:
+ return event.valid;
+ case tokFollowingStartDateTime:
+ return TimeType(event.startTime, Token.Attrib.Text);
+ case tokFollowingVpsDateTime:
+ return TimeType(event.vpsTime, Token.Attrib.Text);
+ case tokFollowingEndDateTime:
+ return TimeType(event.startTime + event.duration, Token.Attrib.Text);
+ case tokFollowingDuration:
+ return DurationType(event.duration, Token.Attrib.Text);
+ case tokFollowingTitle:
+ return event.title;
+ case tokFollowingShortText:
+ return event.shortText;
+ case tokFollowingDescription:
+ return event.description;
+ default:
+ break;
+ }
+ }
+ else if (Token.Id > tokPrivateVolumeStart && Token.Id < tokPrivateVolumeEnd)
+ {
+ tVolumeState volume = mState->GetVolumeState();
+ switch (Token.Id)
+ {
+ case tokVolumeCurrent:
+ return volume.value;
+ case tokVolumeTotal:
+ return 255;
+ case tokIsMute:
+ case tokVolumeIsMute:
+ return volume.value == 0;
+ default:
+ break;
+ }
+ }
+ else if (Token.Id > tokPrivateAudioStart && Token.Id < tokPrivateAudioEnd)
+ {
+ tAudioState audio = mState->GetAudioState();
+ switch (Token.Id)
+ {
+ case tokAudioTrackItem:
+ case tokAudioTrackCurrent:
+ case tokIsAudioTrackCurrent:
+ {
+ if (audio.tracks.size() == 0
+ || audio.currentTrack == -1)
+ {
+ return false;
+ }
+ int maxItems = Token.MaxItems;
+ if (maxItems > (int) audio.tracks.size())
+ maxItems = audio.tracks.size();
+ int currentIndex = maxItems / 2;
+ if (audio.currentTrack < currentIndex)
+ currentIndex = audio.currentTrack;
+ int topIndex = audio.currentTrack - currentIndex;
+ if ((topIndex + maxItems) > (int) audio.tracks.size())
+ {
+ currentIndex += (topIndex + maxItems) - audio.tracks.size();
+ topIndex = audio.currentTrack - currentIndex;
+ }
+ if (Token.Id == tokAudioTrackItem)
+ {
+ if (Token.Index < maxItems && Token.Index != currentIndex)
+ return audio.tracks[topIndex + Token.Index];
+ }
+ else if (Token.Id == tokAudioTrackCurrent)
+ {
+ if (Token.Index < maxItems && Token.Index == currentIndex)
+ return audio.tracks[topIndex + Token.Index];
+ else if (Token.Index < 0) // outside of <list/>: return last MenuCurrent
+ return audio.tracks[topIndex];
+ }
+ else if (Token.Id == tokIsAudioTrackCurrent)
+ {
+ if (Token.Index < maxItems && Token.Index == currentIndex)
+ return true;
+ }
+ return false;
+ }
+ case tokAudioChannel:
+ return audio.currentChannel;
+ default:
+ break;
+ }
+ }
+ else if (Token.Id > tokPrivateReplayStart && Token.Id < tokPrivateReplayEnd)
+ {
+ tReplayState replay = mState->GetReplayState();
+ double framesPerSec =
+#if VDRVERSNUM >= 10701
+ (replay.control) ? replay.control->FramesPerSecond() : (double)DEFAULTFRAMESPERSECOND
+#else
+ (double)FRAMESPERSEC
+#endif
+ ;
+
+ switch (Token.Id)
+ {
+ case tokReplayTitle:
+ return replay.name;
+ case tokReplayPositionIndex:
+ return DurationType(replay.current, Token.Attrib.Text, framesPerSec);
+ case tokReplayDurationIndex:
+ return DurationType(replay.total, Token.Attrib.Text, framesPerSec);
+ case tokReplayPosition:
+ return replay.current;
+ case tokReplayDuration:
+ return replay.total;
+ case tokReplayRemaining:
+ return DurationType(replay.total - replay.current, Token.Attrib.Text, framesPerSec);
+ case tokIsPlaying:
+ case tokReplayIsPlaying:
+ return replay.play && replay.speed == -1;
+ case tokIsPausing:
+ case tokReplayIsPausing:
+ return !replay.play && replay.speed == -1;
+ case tokIsFastForward:
+ case tokReplayIsFastForward:
+ if (replay.play && replay.forward && replay.speed != -1)
+ {
+ return Token.Attrib.Type == GLCD::aNumber
+ ? (GLCD::cType) (replay.speed == Token.Attrib.Number)
+ : (GLCD::cType) true;
+ }
+ return false;
+ case tokIsFastRewind:
+ case tokReplayIsFastRewind:
+ if (replay.play && !replay.forward && replay.speed != -1)
+ {
+ return Token.Attrib.Type == GLCD::aNumber
+ ? (GLCD::cType) (replay.speed == Token.Attrib.Number)
+ : (GLCD::cType) true;
+ }
+ return false;
+ case tokIsSlowForward:
+ case tokReplayIsSlowForward:
+ if (!replay.play && replay.forward && replay.speed != -1)
+ {
+ return Token.Attrib.Type == GLCD::aNumber
+ ? (GLCD::cType) (replay.speed == Token.Attrib.Number)
+ : (GLCD::cType) true;
+ }
+ return false;
+ case tokIsSlowRewind:
+ case tokReplayIsSlowRewind:
+ if (!replay.play && !replay.forward && replay.speed != -1)
+ {
+ return Token.Attrib.Type == GLCD::aNumber
+ ? (GLCD::cType) (replay.speed == Token.Attrib.Number)
+ : (GLCD::cType) true;
+ }
+ return false;
+ case tokReplayMode:
+ switch (replay.mode)
+ {
+ case eReplayAudioCD:
+ return "cd";
+ case eReplayDVD:
+ return "dvd";
+ case eReplayFile:
+ return "file";
+ case eReplayImage:
+ return "image";
+ case eReplayMusic:
+ return "music";
+ default:
+ return "vdr";
+ }
+ case tokReplayIsShuffle:
+ case tokReplayIsLoop:
+ default:
+ break;
+ }
+ }
+ else if (Token.Id > tokPrivateOsdStart && Token.Id < tokPrivateOsdEnd)
+ {
+ tOsdState osd = mState->GetOsdState();
+ switch (Token.Id)
+ {
+ case tokMessage:
+ return osd.message;
+ case tokMenuTitle:
+ return SplitToken(osd.title, Token.Attrib);
+ case tokMenuItem:
+ case tokMenuCurrent:
+ case tokIsMenuCurrent:
+ {
+ if (osd.items.size() == 0
+ || osd.currentItemIndex == -1)
+ {
+ return false;
+ }
+ int maxItems = Token.MaxItems;
+ if (maxItems > (int) osd.items.size())
+ maxItems = osd.items.size();
+ int currentIndex = maxItems / 2;
+ if (osd.currentItemIndex < currentIndex)
+ currentIndex = osd.currentItemIndex;
+ int topIndex = osd.currentItemIndex - currentIndex;
+ if ((topIndex + maxItems) > (int) osd.items.size())
+ {
+ currentIndex += (topIndex + maxItems) - osd.items.size();
+ topIndex = osd.currentItemIndex - currentIndex;
+ }
+ if (Token.Id == tokMenuItem)
+ {
+ if (Token.Index < maxItems && Token.Index != currentIndex)
+ return osd.items[topIndex + Token.Index];
+ }
+ else if (Token.Id == tokMenuCurrent)
+ {
+ if (Token.Index < maxItems && Token.Index == currentIndex)
+ return SplitToken(osd.items[topIndex + Token.Index], Token.Attrib);
+ else if (Token.Index < 0) // outside of <list/>: return last MenuCurrent
+ return SplitToken(osd.items[topIndex], Token.Attrib, true);
+ }
+ else if (Token.Id == tokIsMenuCurrent)
+ {
+ if (Token.Index < maxItems && Token.Index == currentIndex)
+ return true;
+ }
+ return false;
+ }
+ case tokIsMenuList:
+ return (osd.items.size() == 0) ? false : true;
+ case tokMenuText:
+ return SplitToken(osd.textItem, Token.Attrib);
+ case tokMenuTextScroll: {
+ int curr_scroll = osd.currentTextItemScroll;
+ mState->ResetOsdStateScroll();
+ return curr_scroll;
+ }
+ case tokButtonRed:
+ return osd.redButton;
+ case tokButtonGreen:
+ return osd.greenButton;
+ case tokButtonYellow:
+ return osd.yellowButton;
+ case tokButtonBlue:
+ return osd.blueButton;
+ default:
+ break;
+ }
+ }
+ else if (Token.Id > tokPrivateSettingStart && Token.Id < tokPrivateSettingEnd)
+ {
+ switch (Token.Id)
+ {
+ case tokSettingShowChannelLogo:
+ if (GraphLCDSetup.ShowChannelLogo)
+ return true;
+ return false;
+ case tokSettingShowReplayLogo:
+ if (GraphLCDSetup.ShowReplayLogo)
+ return true;
+ return false;
+ case tokSettingShowSymbols:
+ if (GraphLCDSetup.ShowSymbols)
+ return true;
+ return false;
+ case tokSettingShowTimebar:
+ if (GraphLCDSetup.ShowTimebar)
+ return true;
+ return false;
+
+ case tokScrollMode:
+ return GraphLCDSetup.ScrollMode;
+ case tokScrollSpeed:
+ return GraphLCDSetup.ScrollSpeed;
+ case tokScrollTime:
+ return GraphLCDSetup.ScrollTime;
+ case tokBrightnessActive:
+ return GraphLCDSetup.BrightnessActive;
+ case tokBrightnessIdle:
+ return GraphLCDSetup.BrightnessIdle;
+ case tokBrightnessDelay:
+ return GraphLCDSetup.BrightnessDelay;
+ case tokDisplayMode:
+ switch (mDisplay->GetDisplayMode())
+ {
+ case DisplayModeNormal:
+ return "Normal";
+ case DisplayModeInteractive:
+ return "Interactive";
+ default:
+ return "Normal";
+ }
+
+ default:
+ break;
+ }
+ }
+ else if (Token.Id > tokPrivateServiceStart && Token.Id < tokPrivateServiceEnd)
+ {
+ cGraphLCDService * s = (cGraphLCDService*)mDisplay->GetServiceObject();
+ switch (Token.Id)
+ {
+ case tokServiceIsAvailable: {
+ if (Token.Attrib.Text == "")
+ return false;
+
+ size_t found = Token.Attrib.Text.find(",");
+ std::string ServiceName = "";
+ std::string Options = "";
+
+ if (found != std::string::npos) {
+ ServiceName = Token.Attrib.Text.substr(0, found);
+ Options = Token.Attrib.Text.substr(found+1);
+ } else {
+ ServiceName = Token.Attrib.Text;
+ }
+ return s->ServiceIsAvailable(ServiceName, Options);
+ }
+ break;
+ case tokServiceItem: {
+ size_t found = Token.Attrib.Text.find(",");
+ std::string ServiceName = "";
+ std::string ItemName = "";
+
+ if (found != std::string::npos) {
+ ServiceName = Token.Attrib.Text.substr(0, found);
+ ItemName = Token.Attrib.Text.substr(found+1);
+ } else {
+ ServiceName = Token.Attrib.Text;
+ }
+ return s->GetItem(ServiceName, ItemName);
+ }
+ break;
+ case tokExtDataIsAvailable: {
+ if (Token.Attrib.Text == "")
+ return false;
+
+ cExtData * extData = cExtData::GetExtData();
+ if (extData)
+ return extData->IsSet( Token.Attrib.Text, mDisplay->GetDriver()->ConfigName() );
+ return false;
+ }
+ break;
+ case tokExtDataItem: {
+ if (Token.Attrib.Text == "")
+ return false;
+
+ cExtData * extData = cExtData::GetExtData();
+ if (extData)
+ return extData->Get( Token.Attrib.Text, mDisplay->GetDriver()->ConfigName() );
+ return false;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ switch (Token.Id)
+ {
+ case tokDateTime:
+ return TimeType(time(NULL), Token.Attrib.Text);
+ case tokConfigPath:
+ return mConfigPath;
+ case tokSkinPath:
+ return mSkinPath;
+ case tokScreenWidth:
+ {
+ const GLCD::cBitmap * bitmap = mDisplay->GetScreen();
+ return bitmap->Width();
+ }
+ case tokScreenHeight:
+ {
+ const GLCD::cBitmap * bitmap = mDisplay->GetScreen();
+ return bitmap->Height();
+ }
+ case tokDefaultForegroundColor:
+ {
+ char buffer[12];
+ snprintf(buffer, 11, "0x%08x", (uint32_t)((mDisplay)->GetDriver()->GetForegroundColor(true)));
+ return buffer;
+ }
+ case tokDefaultBackgroundColor:
+ {
+ char buffer[12];
+ snprintf(buffer, 11, "0x%08x", (uint32_t)((mDisplay)->GetDriver()->GetBackgroundColor(true)));
+ return buffer;
+ }
+ case tokForegroundColor:
+ {
+ char buffer[12];
+ snprintf(buffer, 11, "0x%08x", (uint32_t)((mDisplay)->GetDriver()->GetForegroundColor(false)));
+ return buffer;
+ }
+ case tokBackgroundColor:
+ {
+ char buffer[12];
+ snprintf(buffer, 11, "0x%08x", (uint32_t)((mDisplay)->GetDriver()->GetBackgroundColor(false)));
+ return buffer;
+ }
+ case tokIsUTF8:
+ {
+ return (CharSet() == "UTF-8");
+ }
+ default:
+ break;
+ }
+ }
+ return "";
+}
+
+int cGraphLCDSkinConfig::GetTokenId(const std::string & Name)
+{
+ int i;
+
+ for (i = 0; i < tokCountToken; i++)
+ {
+ if (Name == Tokens[i])
+ return i;
+ }
+ esyslog("graphlcd plugin: ERROR: Unknown token %s", Name.c_str());
+ return tokCountToken;
+}
+
+int cGraphLCDSkinConfig::GetTabPosition(int Index, int MaxWidth, const GLCD::cFont & Font)
+{
+ if (mTabs.size() == 0)
+ {
+ int i;
+ tOsdState osd = mState->GetOsdState();
+
+ for (i = 0; i < (int) osd.items.size(); i++)
+ {
+ int iTab, t;
+ std::string str;
+ std::string::size_type pos1, pos2;
+
+ str = osd.items[i];
+ pos1 = 0;
+ pos2 = str.find('\t');
+ iTab = 0;
+ while (pos1 < str.length() && pos2 != std::string::npos)
+ {
+ t = Font.Width(str.substr(pos1), pos2 - pos1);
+ if (iTab == 0 && t > (MaxWidth * 66) / 100)
+ t = (MaxWidth * 66) / 100;
+ if (iTab < (int) mTabs.size())
+ {
+ if (mTabs[iTab] < t)
+ mTabs[iTab] = t;
+ }
+ else
+ {
+ mTabs.push_back(t);
+ }
+ pos1 = pos2 + 1;
+ pos2 = str.find('\t', pos1);
+ iTab++;
+ }
+ }
+ }
+
+ if (Index < (int) mTabs.size())
+ return mTabs[Index];
+ return 0;
+}
+
+void cGraphLCDSkinConfig::SetMenuClear()
+{
+ mTabs.clear();
+}
+
+
+uint64_t cGraphLCDSkinConfig::Now(void)
+{
+ return cTimeMs::Now();
+}
+
+GLCD::cDriver * cGraphLCDSkinConfig::GetDriver(void) const
+{
+ return (mDisplay) ? (mDisplay)->GetDriver() : NULL;
+}
diff --git a/skinconfig.h b/skinconfig.h
new file mode 100644
index 0000000..3e901d5
--- /dev/null
+++ b/skinconfig.h
@@ -0,0 +1,50 @@
+/*
+ * GraphLCD plugin for the Video Disk Recorder
+ *
+ * skinconfig.h - skin config class that implements all the callbacks
+ *
+ * This file is released under the GNU General Public License. Refer
+ * to the COPYING file distributed with this package.
+ *
+ * (c) 2004-2010 Andreas Regel <andreas.regel AT powarman.de>
+ * (c) 2010-2011 Wolfgang Astleitner <mrwastl AT users sourceforge net>
+ */
+
+#ifndef _GRAPHLCD_SKINCONFIG_H_
+#define _GRAPHLCD_SKINCONFIG_H_
+
+#include "alias.h"
+
+#include <glcddrivers/driver.h>
+
+class cGraphLCDSkinConfig : public GLCD::cSkinConfig
+{
+private:
+ const cGraphLCDDisplay * mDisplay;
+ std::string mConfigPath;
+ std::string mSkinPath;
+ std::string mSkinName;
+ cGraphLCDState * mState;
+ cChannelAliasList mAliasList;
+ std::vector <int> mTabs;
+
+public:
+ cGraphLCDSkinConfig(const cGraphLCDDisplay * Display, const std::string & CfgPath, const std::string & SkinsPath, const std::string & SkinName, cGraphLCDState * State);
+ virtual ~cGraphLCDSkinConfig();
+ void SetMenuClear();
+
+ virtual std::string SkinPath(void);
+ virtual std::string FontPath(void);
+ virtual std::string CharSet(void);
+ virtual std::string Translate(const std::string & Text);
+ virtual GLCD::cType GetToken(const GLCD::tSkinToken & Token);
+ virtual int GetTokenId(const std::string & Name);
+ virtual int GetTabPosition(int Index, int MaxWidth, const GLCD::cFont & Font);
+
+ const std::string & SkinName(void) const { return mSkinName; }
+
+ virtual uint64_t Now(void);
+ virtual GLCD::cDriver * GetDriver(void) const;
+};
+
+#endif
diff --git a/state.c b/state.c
index 6f29e9d..23be6d1 100644
--- a/state.c
+++ b/state.c
@@ -4,6 +4,7 @@
* status.c - status monitor class
*
* (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de>
+ * (c) 2010-2012 Wolfgang Astleitner <mrwastl AT users sourceforge net>
**/
#include <ctype.h>
@@ -17,55 +18,70 @@
#include <vdr/eitscan.h>
#include <vdr/i18n.h>
-#include "compat.h"
+#if APIVERSNUM < 10503
+ #define trNOOP(_s) (_s)
+ #define trVDR(_s) tr(_s)
+#endif
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;
-#if VDRVERSNUM >= 10701
- replay.currentLast = DEFAULTFRAMESPERSECOND;
- replay.framesPerSecond = DEFAULTFRAMESPERSECOND;
-#else
- replay.currentLast = FRAMESPERSEC;
- replay.framesPerSecond = FRAMESPERSEC;
-#endif
- 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;
+ mChannel.id = tChannelID::InvalidID;
+ mChannel.number = 0;
+ mChannel.name = "";
+ mChannel.shortName = "";
+ mChannel.provider = "";
+ mChannel.portal = "";
+ mChannel.source = "";
+ mChannel.hasTeletext = false;
+ mChannel.hasMultiLanguage = false;
+ mChannel.hasDolby = false;
+ mChannel.isEncrypted = false;
+ mChannel.isRadio = false;
+
+ mPresent.valid = false;
+ mPresent.startTime = 0;
+ mPresent.vpsTime = 0;
+ mPresent.duration = 0;
+ mPresent.title = "";
+ mPresent.shortText = "";
+ mPresent.description = "";
+
+ mFollowing.valid = false;
+ mFollowing.startTime = 0;
+ mFollowing.vpsTime = 0;
+ mFollowing.duration = 0;
+ mFollowing.title = "";
+ mFollowing.shortText = "";
+ mFollowing.description = "";
+
+ mReplay.name = "";
+ mReplay.loopmode = "";
+ mReplay.control = NULL;
+ mReplay.mode = eReplayNormal;
+ mReplay.current = 0;
+ mReplay.total = 0;
+
+ mOsd.currentItem = "";
+ mOsd.title = "";
+ mOsd.redButton = "";
+ mOsd.greenButton = "";
+ mOsd.yellowButton = "";
+ mOsd.blueButton = "";
+ mOsd.message = "";
+ mOsd.textItem = "";
+ mOsd.currentItemIndex = -1;
+ mOsd.currentTextItemScroll = 0;
+ mOsd.currentTextItemScrollReset = false;
+
+ mVolume.value = -1;
+ mVolume.lastChange = 0;
+
+ mAudio.currentTrack = -1;
+ mAudio.currentChannel = -1;
+ mAudio.lastChange = 0;
SetChannel(cDevice::CurrentChannel());
}
@@ -74,12 +90,16 @@ cGraphLCDState::~cGraphLCDState()
{
}
-void cGraphLCDState::ChannelSwitch(const cDevice * Device, int ChannelNumber)
-{
+#if VDRVERSNUM >= 10726
+void cGraphLCDState::ChannelSwitch(const cDevice * Device, int ChannelNumber, bool LiveView) {
+#else
+void cGraphLCDState::ChannelSwitch(const cDevice * Device, int ChannelNumber) {
+ bool LiveView = Device->IsPrimaryDevice() && !EITScanner.UsesDevice(Device);
+#endif
//printf("graphlcd plugin: cGraphLCDState::ChannelSwitch %d %d\n", Device->CardIndex(), ChannelNumber);
if (GraphLCDSetup.PluginActive)
{
- if (ChannelNumber > 0 && Device->IsPrimaryDevice() && !EITScanner.UsesDevice(Device))
+ if (ChannelNumber > 0 && LiveView)
{
if (ChannelNumber == cDevice::CurrentChannel())
{
@@ -89,34 +109,41 @@ void cGraphLCDState::ChannelSwitch(const cDevice * Device, int 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)
{
+ std::vector <tRecording>::iterator it;
+
mutex.Lock();
-#if VDRVERSNUM < 10338
- if (Name)
-#else
+ it = mRecordings.begin();
+ while (it != mRecordings.end())
+ {
+ if (it->deviceNumber == Device->DeviceNumber()
+ && it->fileName == FileName)
+ {
+ break;
+ }
+ it++;
+ }
+
if (On)
-#endif
{
- card[Device->DeviceNumber()].recordingCount++;
-#if VDRVERSNUM < 10338
- card[Device->DeviceNumber()].recordingName = Name;
-#else
- card[Device->DeviceNumber()].recordingName = Name ? Name : "";
-#endif
+ if (it == mRecordings.end())
+ {
+ tRecording rec;
+
+ rec.deviceNumber = Device->DeviceNumber();
+ rec.name = Name;
+ rec.fileName = FileName;
+ mRecordings.push_back(rec);
+ }
}
else
{
- if (card[Device->DeviceNumber()].recordingCount > 0)
- card[Device->DeviceNumber()].recordingCount--;
- card[Device->DeviceNumber()].recordingName = "";
+ if (it != mRecordings.end())
+ mRecordings.erase(it);
}
mutex.Unlock();
@@ -124,31 +151,19 @@ void cGraphLCDState::Recording(const cDevice * Device, const char * Name, const
}
}
-#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
+ mReplay.control = (cControl *) Control;
+ mReplay.mode = eReplayNormal;
+ mReplay.name = "";
+ mReplay.loopmode = "";
if (Name && !isempty(Name))
-#endif
{
if (GraphLCDSetup.IdentifyReplayType)
{
@@ -175,15 +190,15 @@ void cGraphLCDState::Replaying(const cControl * Control, const char * Name, cons
{
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 ());
+ mReplay.loopmode = Name;
+ mReplay.loopmode = mReplay.loopmode.substr (0, 5);
+ if (mReplay.loopmode[2] == '.')
+ mReplay.loopmode.erase (2, 1);
+ if (mReplay.loopmode[1] == '.')
+ mReplay.loopmode.erase (1, 1);
+ if (mReplay.loopmode[1] == ']')
+ mReplay.loopmode = "";
+ //printf ("loopmode=<%s>\n", mReplay.loopmode.c_str ());
for (j=0;*(Name+i+j) != '\0';++j) //trim name
{
if (*(Name+i+j)!=' ')
@@ -192,13 +207,13 @@ void cGraphLCDState::Replaying(const cControl * Control, const char * Name, cons
if (strlen(Name+i+j) > 0)
{ //if name isn't empty, then copy
- replay.name = Name + i + j;
+ mReplay.name = Name + i + j;
}
else
{ //if Name empty, set fallback title
- replay.name = tr("Unknown title");
+ mReplay.name = trVDR("Unknown title");
}
- replay.mode = eReplayMusic;
+ mReplay.mode = eReplayMusic;
}
}
///////////////////////////////////////////////////////////////////////
@@ -232,24 +247,24 @@ void cGraphLCDState::Replaying(const cControl * Control, const char * Name, cons
if (strlen(Name+i+j) > 0)
{ // if name isn't empty, then copy
- replay.name = Name + i + j;
+ mReplay.name = Name + i + j;
// replace all '_' with ' '
- replace(replay.name.begin(), replay.name.end(), '_', ' ');
- for (j = 0, b = true; j < replay.name.length(); ++j)
+ replace(mReplay.name.begin(), mReplay.name.end(), '_', ' ');
+ for (j = 0, b = true; j < mReplay.name.length(); ++j)
{
// KAPITALIZE -> Kaptialize
- if (replay.name[j] == ' ')
+ if (mReplay.name[j] == ' ')
b = true;
else if (b)
b = false;
- else replay.name[j] = tolower(replay.name[j]);
+ else mReplay.name[j] = tolower(mReplay.name[j]);
}
}
else
{ //if Name empty, set fallback title
- replay.name = tr("Unknown title");
+ mReplay.name = trVDR("Unknown title");
}
- replay.mode = eReplayDVD;
+ mReplay.mode = eReplayDVD;
}
}
}
@@ -267,7 +282,7 @@ void cGraphLCDState::Replaying(const cControl * Control, const char * Name, cons
// look for file extentsion like .xxx or .xxxx
if (slen>5 && ((*(Name+slen-4) == '.') || (*(Name+slen-5) == '.')))
{
- replay.mode = eReplayFile;
+ mReplay.mode = eReplayFile;
}
else
{
@@ -276,7 +291,7 @@ void cGraphLCDState::Replaying(const cControl * Control, const char * Name, cons
}
case '~':
{
- replay.name = Name + i + 1;
+ mReplay.name = Name + i + 1;
bFound = true;
i = 0;
}
@@ -288,47 +303,37 @@ void cGraphLCDState::Replaying(const cControl * Control, const char * Name, cons
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;
+ if (mReplay.mode != eReplayFile) //if'nt already Name stripped-down as filename
+ mReplay.name = Name + 8;
+ mReplay.mode = eReplayImage;
bFound = true;
}
else if (0 == strncmp(Name,"[audiocd] ",10))
{
- replay.name = Name + 10;
- replay.mode = eReplayAudioCD;
+ mReplay.name = Name + 10;
+ mReplay.mode = eReplayAudioCD;
bFound = true;
}
if (!bFound || !GraphLCDSetup.ModifyReplayString)
{
- replay.name = Name;
+ mReplay.name = Name;
}
}
else
{
- replay.name = Name;
+ mReplay.name = Name;
}
}
-#if VDRVERSNUM >= 10701
- replay.currentLast = DEFAULTFRAMESPERSECOND;
-#else
- replay.currentLast = FRAMESPERSEC;
-#endif
- replay.totalLast = 1;
mutex.Unlock();
}
else
{
mutex.Lock();
- replay.control = NULL;
+ mReplay.control = NULL;
mutex.Unlock();
- SetChannel(channel.number);
+ SetChannel(mChannel.number);
}
-#if VDRVERSNUM < 10338
- mDisplay->Replaying(Name ? true : false, replay.mode);
-#else
- mDisplay->Replaying(On, replay.mode);
-#endif
+ mDisplay->Replaying(On);
}
}
@@ -339,21 +344,17 @@ void cGraphLCDState::SetVolume(int Volume, bool Absolute)
{
mutex.Lock();
-#if VDRVERSNUM < 10402
- volume.value = Volume;
-#else
if (!Absolute)
{
- volume.value += Volume;
+ mVolume.value += Volume;
}
else
{
- volume.value = Volume;
+ mVolume.value = Volume;
}
-#endif
if (!first)
{
- volume.lastChange = cTimeMs::Now();
+ mVolume.lastChange = cTimeMs::Now();
mutex.Unlock();
mDisplay->Update();
}
@@ -366,6 +367,32 @@ void cGraphLCDState::SetVolume(int Volume, bool Absolute)
}
}
+void cGraphLCDState::SetAudioTrack(int Index, const char * const *Tracks) {
+ if (GraphLCDSetup.PluginActive) {
+ mutex.Lock();
+ mAudio.currentTrack = Index;
+ mAudio.tracks.clear();
+ int i = 0;
+ while (Tracks[i]) {
+ mAudio.tracks.push_back(Tracks[i]);
+ i++;
+ }
+ mAudio.lastChange = cTimeMs::Now();
+ mutex.Unlock();
+ //mDisplay->Update(); -> will be done in SetAudioChannel
+ }
+}
+
+void cGraphLCDState::SetAudioChannel(int AudioChannel) {
+ if (GraphLCDSetup.PluginActive) {
+ mutex.Lock();
+ mAudio.currentChannel = AudioChannel;
+ mAudio.lastChange = cTimeMs::Now();
+ mutex.Unlock();
+ mDisplay->Update();
+ }
+}
+
void cGraphLCDState::Tick()
{
//printf("graphlcd plugin: cGraphLCDState::Tick\n");
@@ -373,17 +400,23 @@ void cGraphLCDState::Tick()
{
mutex.Lock();
+ if (mOsd.currentTextItemScrollReset) { // mOsd.currentTextItemScroll has been read since last update? -> reset to 0
+ mOsd.currentTextItemScroll = 0;
+ mOsd.currentTextItemScrollReset = false;
+ }
+
tickUsed = true;
- if (replay.control)
+ if (mReplay.control)
{
- if (replay.control->GetIndex(replay.current, replay.total, false))
+ mReplay.control->GetReplayMode(mReplay.play, mReplay.forward, mReplay.speed);
+ if (mReplay.control->GetIndex(mReplay.current, mReplay.total, false))
{
- replay.total = (replay.total == 0) ? 1 : replay.total;
+ mReplay.total = (mReplay.total == 0) ? 1 : mReplay.total;
}
else
{
- replay.control = NULL;
+ mReplay.control = NULL;
}
}
@@ -393,52 +426,61 @@ void cGraphLCDState::Tick()
void cGraphLCDState::OsdClear()
{
- //printf("graphlcd plugin: cGraphLCDState::OsdClear\n");
+ //esyslog("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 = "";
+ mOsd.title = "";
+ mOsd.items.clear();
+ mOsd.currentItem = "";
+ mOsd.currentItemIndex = -1;
+ mOsd.redButton = "";
+ mOsd.greenButton = "";
+ mOsd.yellowButton = "";
+ mOsd.blueButton = "";
+ mOsd.message = "";
+ mOsd.textItem = "";
+ mOsd.currentTextItemScroll = 0;
+ mOsd.currentTextItemScrollReset = false;
+
+ mAudio.currentTrack = -1;
+ mAudio.currentChannel = -1;
+ mAudio.tracks.clear();
+ mAudio.lastChange = 0;
mutex.Unlock();
- mDisplay->SetClear();
+ mDisplay->SetMenuClear();
}
}
void cGraphLCDState::OsdTitle(const char * Title)
{
- //printf("graphlcd plugin: cGraphLCDState::OsdTitle '%s'\n", Title);
+ //esyslog("graphlcd plugin: cGraphLCDState::OsdTitle '%s'\n", Title);
if (GraphLCDSetup.PluginActive)
{
mutex.Lock();
- osd.message = "";
- osd.title = "";
+ mOsd.message = "";
+ mOsd.title = "";
if (Title)
{
- osd.title = Title;
+ mOsd.title = Title;
// remove the time
- std::string::size_type pos = osd.title.find('\t');
+ std::string::size_type pos = mOsd.title.find('\t');
if (pos != std::string::npos)
- osd.title.resize(pos);
- osd.title = compactspace(osd.title);
+ mOsd.title.resize(pos);
+ mOsd.title = compactspace(mOsd.title);
}
mutex.Unlock();
- mDisplay->SetOsdTitle();
+ mDisplay->SetMenuTitle();
}
}
void cGraphLCDState::OsdStatusMessage(const char * Message)
{
- //printf("graphlcd plugin: cGraphLCDState::OsdStatusMessage '%s'\n", Message);
+ //esyslog("graphlcd plugin: cGraphLCDState::OsdStatusMessage '%s'\n", Message);
if (GraphLCDSetup.PluginActive)
{
if (GraphLCDSetup.ShowMessages)
@@ -446,9 +488,9 @@ void cGraphLCDState::OsdStatusMessage(const char * Message)
mutex.Lock();
if (Message)
- osd.message = compactspace(Message);
+ mOsd.message = compactspace(Message);
else
- osd.message = "";
+ mOsd.message = "";
mutex.Unlock();
mDisplay->Update();
@@ -458,24 +500,26 @@ void cGraphLCDState::OsdStatusMessage(const char * Message)
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);
+ //esyslog("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] = "";
+ mOsd.redButton = "";
+ mOsd.greenButton = "";
+ mOsd.yellowButton = "";
+ mOsd.blueButton = "";
if (Red)
- osd.colorButton[0] = compactspace(Red);
+ mOsd.redButton = compactspace(Red);
if (Green)
- osd.colorButton[1] = compactspace(Green);
+ mOsd.greenButton = compactspace(Green);
if (Yellow)
- osd.colorButton[2] = compactspace(Yellow);
+ mOsd.yellowButton = compactspace(Yellow);
if (Blue)
- osd.colorButton[3] = compactspace(Blue);
+ mOsd.blueButton = compactspace(Blue);
mutex.Unlock();
}
@@ -484,106 +528,93 @@ void cGraphLCDState::OsdHelpKeys(const char * Red, const char * Green, const cha
void cGraphLCDState::OsdItem(const char * Text, int Index)
{
- //printf("graphlcd plugin: cGraphLCDState::OsdItem %s, %d\n", Text, Index);
+ //esyslog("graphlcd plugin: cGraphLCDState::OsdItem %s, %d\n", Text, Index);
if (GraphLCDSetup.PluginActive)
{
if (GraphLCDSetup.ShowMenu)
{
mutex.Lock();
- osd.message = "";
+ mOsd.message = "";
if (Text)
- osd.items.push_back(Text);
+ mOsd.items.push_back(Text);
mutex.Unlock();
- if (Text)
- mDisplay->SetOsdItem(Text);
+ //if (Text)
+ // mDisplay->SetOsdItem(Text);
}
}
}
void cGraphLCDState::OsdCurrentItem(const char * Text)
{
- //printf("graphlcd plugin: cGraphLCDState::OsdCurrentItem %s\n", Text);
+ //esyslog("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 = "";
+ mOsd.message = "";
+ mOsd.currentItem = "";
if (Text)
{
- osd.currentItem = Text;
+ uint32_t i;
- // count nr of tabs in text
- tabs = 0;
- for (unsigned int i = 0; i < osd.currentItem.length(); i++)
+ mOsd.currentItem = Text;
+ mOsd.currentItemIndex = -1;
+ for (i = 0; i < mOsd.items.size(); i++)
{
- if (osd.currentItem[i] == '\t')
- tabs++;
+ if (mOsd.items[i].compare(mOsd.currentItem) == 0)
+ {
+ mOsd.currentItemIndex = i;
+ break;
+ }
}
- if (tabs == 1)
+ if (i == mOsd.items.size())
{
- // only one tab => prob. Setup Menu
- pos = osd.currentItem.find('\t');
- osd.currentItemIndex = 0;
- if (pos != std::string::npos)
+ // maybe this is a settings menu with edit items, so
+ // just one tab
+ std::string::size_type pos = mOsd.currentItem.find('\t');
+ if (pos != std::string::npos && pos == mOsd.currentItem.rfind('\t'))
{
- for (unsigned int i = 0; i < osd.items.size(); i++)
+ for (i = 0; i < mOsd.items.size(); i++)
{
- if (osd.items[i].find(osd.currentItem.c_str(), 0, pos) == 0)
+ if (mOsd.items[i].compare(0, pos, mOsd.currentItem, 0, pos) == 0)
{
- osd.currentItemIndex = i;
- osd.items[i] = osd.currentItem;
+ mOsd.items[i] = mOsd.currentItem;
+ mOsd.currentItemIndex = i;
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();
+ mDisplay->SetMenuCurrent();
}
}
}
void cGraphLCDState::OsdTextItem(const char * Text, bool Scroll)
{
- //printf("graphlcd plugin: cGraphLCDState::OsdTextItem %s %d\n", Text, Scroll);
+ //esyslog("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
+ mOsd.textItem = trim(Text);
+ mOsd.currentTextItemScroll = 0;
+ mOsd.currentTextItemScrollReset = false;
+ } else {
+ mOsd.currentTextItemScroll += (Scroll) ? -1 : 1;
+ mDisplay->Update();
}
mutex.Unlock();
- mDisplay->SetOsdTextItem(Text, Scroll);
+ //mDisplay->SetOsdTextItem(Text, Scroll);
}
}
@@ -593,18 +624,7 @@ 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();
-
+ mDisplay->ForceUpdateBrightness();
if (Text)
mDisplay->Update();
}
@@ -618,143 +638,210 @@ void cGraphLCDState::OsdProgramme(time_t PresentTime, const char * PresentTitle,
//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;
+ mChannel.number = ChannelNumber;
+ mPresent.startTime = 0;
+ mFollowing.startTime = 0;
mutex.Unlock();
- mDisplay->SetChannel(ChannelNumber);
+ if (mDisplay->GetSkin())
+ mDisplay->GetSkin()->SetTSEvalSwitch(cTimeMs::Now());
+
+ mDisplay->Update();
}
-void cGraphLCDState::GetProgramme()
+void cGraphLCDState::UpdateChannelInfo(void)
{
+ if (mChannel.number == 0)
+ return;
+
+ // correct stored channel number if differs from device's channel number
+ // e.g after switching off plugin, switching channel, re-enabling plugin
+ if (mChannel.number != cDevice::CurrentChannel()) {
+ mutex.Lock();
+ mChannel.number = cDevice::CurrentChannel();
+ mutex.Unlock();
+ }
+
mutex.Lock();
-#if VDRVERSNUM < 10300
- const cEventInfo * present = NULL, * following = NULL;
- cMutexLock mutexLock;
- const cSchedules * schedules = cSIProcessor::Schedules(mutexLock);
- if (channel.id.Valid())
+
+ cChannel * ch = Channels.GetByNumber(mChannel.number);
+ if (ch)
+ {
+ mChannel.id = ch->GetChannelID();
+ mChannel.name = ch->Name();
+ mChannel.shortName = ch->ShortName(true);
+ mChannel.provider = ch->Provider();
+ mChannel.portal = ch->PortalName();
+ mChannel.source = Sources.Get(ch->Source())->Description();
+ mChannel.hasTeletext = ch->Tpid() != 0;
+ mChannel.hasMultiLanguage = ch->Apid(1) != 0;
+ mChannel.hasDolby = ch->Dpid(0) != 0;
+ mChannel.isEncrypted = ch->Ca() != 0;
+ mChannel.isRadio = (ch->Vpid() == 0) || (ch->Vpid() == 1) || (ch->Vpid() == 0x1FFF);
+ }
+ else
+ {
+ mChannel.id = tChannelID::InvalidID;
+ mChannel.name = trVDR("*** Invalid Channel ***");
+ mChannel.shortName = trVDR("*** Invalid Channel ***");
+ mChannel.provider = "";
+ mChannel.portal = "";
+ mChannel.source = "";
+ mChannel.hasTeletext = false;
+ mChannel.hasMultiLanguage = false;
+ mChannel.hasDolby = false;
+ mChannel.isEncrypted = false;
+ mChannel.isRadio = false;
+ }
+
+ mutex.Unlock();
+}
+
+void cGraphLCDState::UpdateEventInfo(void)
+{
+ mutex.Lock();
+ const cEvent * present = NULL, * following = NULL;
+ cSchedulesLock schedulesLock;
+
+ // backup current values
+ std::string currTitle = mPresent.title;
+ std::string currShortText = mPresent.shortText;
+ std::string currDescription = mPresent.description;
+
+
+ // reset event data to empty values
+ mPresent.valid = false;
+ mPresent.startTime = 0;
+ mPresent.vpsTime = 0;
+ mPresent.duration = 0;
+ mPresent.title = "";
+ mPresent.shortText = "";
+ mPresent.description = "";
+
+ mFollowing.valid = false;
+ mFollowing.startTime = 0;
+ mFollowing.vpsTime = 0;
+ mFollowing.duration = 0;
+ mFollowing.title = "";
+ mFollowing.shortText = "";
+ mFollowing.description = "";
+
+ const cSchedules * schedules = cSchedules::Schedules(schedulesLock);
+ if (mChannel.id.Valid())
{
if (schedules)
{
- const cSchedule * schedule = schedules->GetSchedule(channel.id);
+ const cSchedule * schedule = schedules->GetSchedule(mChannel.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();
+ mPresent.valid = true;
+ mPresent.startTime = present->StartTime();
+ mPresent.vpsTime = present->Vps();
+ mPresent.duration = present->Duration();
+ mPresent.title = "";
+ if (present->Title()) {
+ mPresent.title = present->Title();
+ }
+ mPresent.shortText = "";
+ if (present->ShortText())
+ mPresent.shortText = present->ShortText();
+ mPresent.description = "";
+ if (present->Description())
+ mPresent.description = present->Description();
}
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();
+ mFollowing.valid = true;
+ mFollowing.startTime = following->StartTime();
+ mFollowing.vpsTime = following->Vps();
+ mFollowing.duration = following->Duration();
+ mFollowing.title = "";
+ if (following->Title())
+ mFollowing.title = following->Title();
+ mFollowing.shortText = "";
+ if (following->ShortText())
+ mFollowing.shortText = following->ShortText();
+ mFollowing.description = "";
+ if (following->Description())
+ mFollowing.description = following->Description();
}
}
}
}
-#else
- const cEvent * present = NULL, * following = NULL;
- cSchedulesLock schedulesLock;
- const cSchedules * schedules = cSchedules::Schedules(schedulesLock);
- if (channel.id.Valid())
+
+ mutex.Unlock();
+}
+
+void cGraphLCDState::UpdateReplayInfo(void)
+{
+ mutex.Lock();
+ if (!tickUsed)
{
- if (schedules)
+ if (mReplay.control)
{
- const cSchedule * schedule = schedules->GetSchedule(channel.id);
- if (schedule)
+ mReplay.control->GetReplayMode(mReplay.play, mReplay.forward, mReplay.speed);
+ if (mReplay.control->GetIndex(mReplay.current, mReplay.total, false))
{
- 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();
- }
+ mReplay.total = (mReplay.total == 0) ? 1 : mReplay.total;
+ }
+ else
+ {
+ mReplay.control = NULL;
}
}
}
-#endif
mutex.Unlock();
}
-tChannelState cGraphLCDState::GetChannelState()
+void cGraphLCDState::Update()
+{
+ UpdateChannelInfo();
+ UpdateEventInfo();
+ UpdateReplayInfo();
+}
+
+tChannel cGraphLCDState::GetChannelInfo()
+{
+ tChannel ret;
+
+ mutex.Lock();
+ ret = mChannel;
+ mutex.Unlock();
+
+ return ret;
+}
+
+tEvent cGraphLCDState::GetPresentEvent()
{
- tChannelState ret;
+ tEvent ret;
mutex.Lock();
- ret = channel;
+ ret = mPresent;
mutex.Unlock();
return ret;
}
-tEventState cGraphLCDState::GetEventState()
+tEvent cGraphLCDState::GetFollowingEvent()
{
- tEventState ret;
+ tEvent ret;
- GetProgramme();
mutex.Lock();
- ret = event;
+ ret = mFollowing;
mutex.Unlock();
return ret;
@@ -765,50 +852,33 @@ tReplayState cGraphLCDState::GetReplayState()
tReplayState ret;
mutex.Lock();
+ ret = mReplay;
+ mutex.Unlock();
- if (tickUsed)
+ return ret;
+}
+
+bool cGraphLCDState::IsRecording(int CardNumber)
+{
+ bool ret = false;
+ std::vector <tRecording>::iterator it;
+
+ mutex.Lock();
+ if (CardNumber == -1 && mRecordings.size() > 0)
{
- if (replay.control)
- {
-#if VDRVERSNUM >= 10701
- replay.framesPerSecond = replay.control->FramesPerSecond();
-#else
- replay.framesPerSecond = FRAMESPERSEC;
-#endif
- ret = replay;
- replay.currentLast = replay.current;
- replay.totalLast = replay.total;
- }
- else
- {
- ret = replay;
- }
+ ret = true;
}
else
{
- if (replay.control)
+ it = mRecordings.begin();
+ while (it != mRecordings.end())
{
-#if VDRVERSNUM >= 10701
- replay.framesPerSecond = replay.control->FramesPerSecond();
-#else
- replay.framesPerSecond = FRAMESPERSEC;
-#endif
- if (replay.control->GetIndex(replay.current, replay.total, false))
+ if (it->deviceNumber == CardNumber)
{
- replay.total = (replay.total == 0) ? 1 : replay.total;
- ret = replay;
- replay.currentLast = replay.current;
- replay.totalLast = replay.total;
- }
- else
- {
- replay.control = NULL;
- ret = replay;
+ ret = true;
+ break;
}
- }
- else
- {
- ret = replay;
+ it++;
}
}
mutex.Unlock();
@@ -816,12 +886,23 @@ tReplayState cGraphLCDState::GetReplayState()
return ret;
}
-tCardState cGraphLCDState::GetCardState(int number)
+std::string cGraphLCDState::Recordings(int CardNumber)
{
- tCardState ret;
+ std::string ret = "";
+ std::vector <tRecording>::iterator it;
mutex.Lock();
- ret = card[number];
+ it = mRecordings.begin();
+ while (it != mRecordings.end())
+ {
+ if (CardNumber == -1 || it->deviceNumber == CardNumber)
+ {
+ if (ret.length() > 0)
+ ret += "\n";
+ ret += it->name;
+ }
+ it++;
+ }
mutex.Unlock();
return ret;
@@ -832,19 +913,46 @@ tOsdState cGraphLCDState::GetOsdState()
tOsdState ret;
mutex.Lock();
- ret = osd;
+ ret = mOsd;
mutex.Unlock();
return ret;
}
+void cGraphLCDState::ResetOsdStateScroll() {
+ mOsd.currentTextItemScrollReset = true;
+}
+
tVolumeState cGraphLCDState::GetVolumeState()
{
tVolumeState ret;
mutex.Lock();
- ret = volume;
+ ret = mVolume;
+ mutex.Unlock();
+
+ return ret;
+}
+
+tAudioState cGraphLCDState::GetAudioState()
+{
+ tAudioState ret;
+
+ mutex.Lock();
+ ret = mAudio;
mutex.Unlock();
return ret;
}
+
+bool cGraphLCDState::ShowMessage()
+{
+ bool ret;
+
+ mutex.Lock();
+ ret = mOsd.message.length() > 0;
+ mutex.Unlock();
+ return ret;
+}
+
+
diff --git a/state.h b/state.h
index 612eabf..67cdb66 100644
--- a/state.h
+++ b/state.h
@@ -4,33 +4,43 @@
* state.h - status monitor class
*
* (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de>
+ * (c) 2010-2012 Wolfgang Astleitner <mrwastl AT users sourceforge net>
**/
#ifndef _GRAPHLCD_STATE_H_
#define _GRAPHLCD_STATE_H_
-#include <stdint.h>
-#include <string.h>
+#include <map>
+#include <string>
#include <vdr/status.h>
-struct tChannelState
+struct tChannel
{
tChannelID id;
int number;
- std::string str;
- std::string strTmp;
+ std::string name;
+ std::string shortName;
+ std::string provider;
+ std::string portal;
+ std::string source;
+ bool hasTeletext;
+ bool hasMultiLanguage;
+ bool hasDolby;
+ bool isEncrypted;
+ bool isRadio;
};
-struct tEventState
+struct tEvent
{
- time_t presentTime;
- std::string presentTitle;
- std::string presentSubtitle;
- time_t followingTime;
- std::string followingTitle;
- std::string followingSubtitle;
+ bool valid;
+ time_t startTime;
+ time_t vpsTime;
+ int duration;
+ std::string title;
+ std::string shortText;
+ std::string description;
};
enum eReplayMode
@@ -50,16 +60,17 @@ struct tReplayState
cControl * control;
eReplayMode mode;
int current;
- int currentLast;
int total;
- int totalLast;
- double framesPerSecond;
+ bool play;
+ bool forward;
+ int speed;
};
-struct tCardState
+struct tRecording
{
- int recordingCount;
- std::string recordingName;
+ int deviceNumber;
+ std::string name;
+ std::string fileName;
};
struct tOsdState
@@ -67,10 +78,15 @@ struct tOsdState
std::string currentItem;
std::vector <std::string> items;
std::string title;
- std::string colorButton[4];
+ std::string redButton;
+ std::string greenButton;
+ std::string yellowButton;
+ std::string blueButton;
std::string textItem;
std::string message;
int currentItemIndex;
+ int currentTextItemScroll;
+ bool currentTextItemScrollReset;
};
struct tVolumeState
@@ -79,6 +95,14 @@ struct tVolumeState
uint64_t lastChange;
};
+struct tAudioState
+{
+ int currentTrack;
+ std::vector <std::string> tracks;
+ int currentChannel;
+ uint64_t lastChange;
+};
+
class cGraphLCDDisplay;
class cGraphLCDState : public cStatus
@@ -90,25 +114,30 @@ private:
cMutex mutex;
- tChannelState channel;
- tEventState event;
- tReplayState replay;
- tCardState card[MAXDEVICES];
- tOsdState osd;
- tVolumeState volume;
+ tChannel mChannel;
+ tEvent mPresent;
+ tEvent mFollowing;
+ tReplayState mReplay;
+ std::vector <tRecording> mRecordings;
+ tOsdState mOsd;
+ tVolumeState mVolume;
+ tAudioState mAudio;
void SetChannel(int ChannelNumber);
- void GetProgramme();
+ void UpdateChannelInfo(void);
+ void UpdateEventInfo(void);
+ void UpdateReplayInfo(void);
protected:
+#if VDRVERSNUM >= 10726
+ virtual void ChannelSwitch(const cDevice *Device, int ChannelNumber, bool LiveView);
+#else
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
+#endif
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 SetAudioTrack(int Index, const char * const *Tracks);
+ virtual void SetAudioChannel(int AudioChannel);
virtual void OsdClear();
virtual void OsdTitle(const char *Title);
virtual void OsdStatusMessage(const char *Message);
@@ -123,13 +152,19 @@ public:
cGraphLCDState(cGraphLCDDisplay * Display);
virtual ~cGraphLCDState();
+ void Update();
void Tick();
- tChannelState GetChannelState();
- tEventState GetEventState();
+ tChannel GetChannelInfo();
+ tEvent GetPresentEvent();
+ tEvent GetFollowingEvent();
tReplayState GetReplayState();
- tCardState GetCardState(int number);
+ bool IsRecording(int CardNumber);
+ std::string Recordings(int CardNumber);
tOsdState GetOsdState();
+ void ResetOsdStateScroll();
tVolumeState GetVolumeState();
+ tAudioState GetAudioState();
+ bool ShowMessage();
};
#endif
diff --git a/strfct.c b/strfct.c
index 45ced40..adafae1 100644
--- a/strfct.c
+++ b/strfct.c
@@ -34,58 +34,58 @@
char * strncopy(char * dest , const char * src , size_t n)
{
- strncpy(dest, src, n);
- if (n)
- {
- *(dest + n - 1) = 0;
- }
- return dest;
+ 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;
+ 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);
+ 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())
+ 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)
{
- if (!isspace(tmp[pos]))
- {
- str += tmp[pos];
- cnt = 0;
- }
- else if (cnt == 0)
- {
- str += tmp[pos];
- cnt++;
- }
- else
- cnt++;
- pos++;
+ str += tmp[pos];
+ cnt++;
}
- return str;
+ else
+ cnt++;
+ pos++;
+ }
+ return str;
}
diff --git a/widgets.c b/widgets.c
deleted file mode 100644
index 68193d5..0000000
--- a/widgets.c
+++ /dev/null
@@ -1,95 +0,0 @@
-#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
deleted file mode 100644
index d6fd3a4..0000000
--- a/widgets.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * 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
-