- added iStaticServiceInformation
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 7 Feb 2005 09:14:02 +0000 (09:14 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 7 Feb 2005 09:14:02 +0000 (09:14 +0000)
 - added service list interface for dvb
 - started work on queries (currently only "instr" on servicename)
 - started work on infobar
 - added listbox with service
 - fixed dvbdb
 - remove some debug output

28 files changed:
components.py
lamedb [new file with mode: 0644]
lib/base/connection.cpp [new file with mode: 0644]
lib/dvb/db.cpp
lib/dvb/db.h
lib/dvb/idvb.h
lib/dvb/stT1RVV7 [deleted file]
lib/gdi/font.cpp
lib/gui/elistbox.cpp
lib/gui/elistbox.h
lib/gui/elistboxcontent.cpp
lib/gui/elistboxcontent.h
lib/nav/core.cpp
lib/python/enigma_python.i
lib/service/iservice.h
lib/service/listboxservice.cpp [new file with mode: 0644]
lib/service/listboxservice.h [new file with mode: 0644]
lib/service/service.cpp
lib/service/service.h
lib/service/servicedvb.cpp
lib/service/servicedvb.h
lib/service/servicefs.cpp
lib/service/servicefs.h
lib/service/servicemp3.cpp
lib/service/servicemp3.h
mytest.py
screens.py
skin.py

index 8015621..48bcdaf 100644 (file)
@@ -174,11 +174,11 @@ class Clock(HTMLComponent, GUIComponent, VariableText):
                return self.getText()
 
 class Button(HTMLComponent, GUIComponent, VariableText):
                return self.getText()
 
 class Button(HTMLComponent, GUIComponent, VariableText):
-       def __init__(self, text=""):
+       def __init__(self, text="", onClick = [ ]):
                GUIComponent.__init__(self)
                VariableText.__init__(self)
                self.setText(text)
                GUIComponent.__init__(self)
                VariableText.__init__(self)
                self.setText(text)
-               self.onClick = [ ]
+               self.onClick = onClick
        
        def push(self):
                for x in self.onClick:
        
        def push(self):
                for x in self.onClick:
@@ -224,7 +224,6 @@ class VolumeBar(HTMLComponent, GUIComponent, VariableValue):
                g.setRange(0, 100)
                return g
 
                g.setRange(0, 100)
                return g
 
-
 class MenuList(HTMLComponent, GUIComponent):
        def __init__(self, list):
                GUIComponent.__init__(self)
 class MenuList(HTMLComponent, GUIComponent):
        def __init__(self, list):
                GUIComponent.__init__(self)
diff --git a/lamedb b/lamedb
new file mode 100644 (file)
index 0000000..83299f9
--- /dev/null
+++ b/lamedb
@@ -0,0 +1,3255 @@
+eDVB services /3/
+transponders
+00c00000:03f0:0001
+       s 11317500:22000000:1:4:2:192
+/
+00c00000:03fa:0001
+       s 11479000:22000000:1:4:2:192
+/
+00c00000:03fc:0001
+       s 11508500:22000000:1:4:2:192
+/
+00c00000:0400:0001
+       s 11567500:22000000:1:4:2:192
+/
+00c00000:0402:0001
+       s 11597000:22000000:1:4:2:192
+/
+00c00000:0408:0001
+       s 11685500:22000000:1:4:2:192
+/
+00c00000:040a:0001
+       s 10979000:22000000:1:4:2:192
+/
+00c00000:040e:0001
+       s 11038000:22000000:1:4:2:192
+/
+00c00000:0412:0001
+       s 11097000:22000000:1:4:2:192
+/
+00c00000:0416:0001
+       s 11156000:22000000:1:4:2:192
+/
+00c00000:041d:0001
+       s 10773250:22000000:0:4:2:192
+/
+00c00000:041e:0001
+       s 10788000:22000000:1:4:2:192
+/
+00c00000:0420:0001
+       s 10817500:22000000:1:4:2:192
+/
+00c00000:0421:0001
+       s 10832250:22000000:0:4:2:192
+/
+00c00000:0422:0001
+       s 10847000:22000000:1:4:2:192
+/
+00c00000:0423:0001
+       s 10861750:22000000:0:4:2:192
+/
+00c00000:0424:0001
+       s 10876500:22000000:1:4:2:192
+/
+00c00000:042a:0001
+       s 11739000:27500000:1:3:2:192
+/
+00c00000:042c:0001
+       s 11778000:27500000:1:3:2:192
+/
+00c00000:042e:0001
+       s 11817000:27500000:1:3:2:192
+/
+00c00000:0430:0001
+       s 11856000:27500000:1:3:2:192
+/
+00c00000:0431:0001
+       s 12109500:27500000:0:3:2:192
+/
+00c00000:0432:0001
+       s 11895000:27500000:1:3:2:192
+/
+00c00000:0434:0001
+       s 11934000:27500000:1:3:2:192
+/
+00c00000:0436:0001
+       s 11973000:27500000:1:3:2:192
+/
+00c00000:0437:0001
+       s 11953500:27500000:0:3:2:192
+/
+00c00000:0438:0001
+       s 12012000:27500000:1:3:2:192
+/
+00c00000:043a:0001
+       s 12051000:27500000:1:3:2:192
+/
+00c00000:043c:0001
+       s 12090000:29900000:1:5:2:192
+/
+00c00000:043e:0001
+       s 12129000:27500000:1:3:2:192
+/
+00c00000:0440:0001
+       s 12168000:27500000:1:3:2:192
+/
+00c00000:0441:0001
+       s 12187500:27500000:0:3:2:192
+/
+00c00000:0442:0001
+       s 12207000:27500000:1:3:2:192
+/
+00c00000:0443:0001
+       s 12226500:27500000:0:3:2:192
+/
+00c00000:0444:0001
+       s 12246000:27500000:1:3:2:192
+/
+00c00000:0445:0001
+       s 12265500:27500000:0:3:2:192
+/
+00c00000:0446:0001
+       s 12285000:27500000:1:3:2:192
+/
+00c00000:0447:0001
+       s 12304500:27500000:0:3:2:192
+/
+00c00000:0448:0001
+       s 12324000:27500000:1:3:2:192
+/
+00c00000:044a:0001
+       s 12363050:27500000:1:3:2:192
+/
+00c00000:044b:0001
+       s 12382500:27500000:0:3:2:192
+/
+00c00000:044c:0001
+       s 12402000:27500000:1:3:2:192
+/
+00c00000:044d:0001
+       s 11836500:27500000:0:3:2:192
+/
+00c00000:044e:0001
+       s 12441000:27500000:1:3:2:192
+/
+00c00000:044f:0001
+       s 12460500:27500000:0:3:2:192
+/
+00c00000:0452:0001
+       s 12522000:22000000:1:4:2:192
+/
+00c00000:0453:0001
+       s 12544750:22000000:0:4:2:192
+/
+00c00000:0454:0001
+       s 12551500:22000000:1:4:2:192
+/
+00c00000:0456:0001
+       s 12581000:22000000:1:4:2:192
+/
+00c00000:0457:0001
+       s 12603750:22000000:0:4:2:192
+/
+00c00000:0458:0001
+       s 12610500:22000000:1:4:2:192
+/
+00c00000:0459:0001
+       s 12633250:22000000:0:4:2:192
+/
+00c00000:045a:0001
+       s 12640000:22000000:1:4:2:192
+/
+00c00000:045b:0001
+       s 12662750:22000000:0:4:2:192
+/
+00c00000:045c:0001
+       s 12669500:22000000:1:4:2:192
+/
+00c00000:045d:0001
+       s 12692250:22000000:0:4:2:192
+/
+00c00000:045e:0001
+       s 12699000:22000000:1:4:2:192
+/
+00c00000:045f:0001
+       s 12721750:22000000:0:4:2:192
+/
+00c00000:04b1:0001
+       s 12421500:27500000:0:3:2:192
+/
+00c00000:04f9:0001
+       s 11875500:27500000:0:3:2:192
+/
+00c00000:04ff:0001
+       s 11992500:27500000:0:3:2:192
+/
+00c00000:0423:0019
+       s 10861750:22000000:0:4:2:192
+/
+00c00000:043c:0019
+       s 12090000:27500000:1:3:2:192
+/
+00c00000:0445:0019
+       s 12265500:27500000:0:3:2:192
+/
+00c00000:0460:0019
+       s 12728500:22000000:1:4:2:192
+/
+00c00000:0449:0035
+       s 12343500:27500000:0:3:2:192
+/
+00c00000:0451:0035
+       s 12515250:22000000:0:4:2:192
+/
+00c00000:0455:0035
+       s 12574250:22000000:0:4:2:192
+/
+00c00000:0001:0085
+       s 12070500:27500000:0:3:2:192
+/
+00c00000:0002:0085
+       s 11797500:27500000:0:3:2:192
+/
+00c00000:0003:0085
+       s 11719500:27500000:0:3:2:192
+/
+00c00000:0004:0085
+       s 12031500:27500000:0:3:2:192
+/
+00c00000:0005:0085
+       s 12460500:27500000:0:3:2:192
+/
+00c00000:0007:0085
+       s 12148500:27500000:0:3:2:192
+/
+00c00000:0011:0085
+       s 11758500:27500000:0:3:2:192
+/
+00c00000:0021:0085
+       s 12480000:27500000:1:3:2:192
+/
+end
+services
+0300:00c00000:0007:0085:1:0
+\86RNF\87plus
+p:BetaDigital
+7500:00c00000:0420:0001:1:0
+DCINE ESPAÑOL
+p:DIGITAL+
+0201:00c00000:0004:0085:1:0
+DIREKT \86EROTIK\87
+p:PREMIERE,C:1702,C:1722,C:1801
+0301:00c00000:0007:0085:1:0
+TV \86TRAVEL\87 SHOP
+p:BetaDigital
+2201:00c00000:044c:0001:1:0
+JETIX
+p:CSAT
+7501:00c00000:0420:0001:1:0
+CANAL COCINA
+p:DIGITAL+
+0202:00c00000:0007:0085:1:0
+\86ONTV\87 Regional
+p:BetaDigital
+0302:00c00000:0007:0085:1:0
+\86BD\87 Partner\86 TV\87
+p:BetaDigital,C:1702,C:1801
+2202:00c00000:044c:0001:1:0
+L'EQUIPE TV
+p:CSAT
+7502:00c00000:0420:0001:1:0
+CCVALENCIANA
+p:DIGITAL+
+7602:00c00000:0408:0001:1:0
+CNN+
+p:DIGITAL+
+0203:00c00000:0011:0085:1:0
+MGM
+p:PREMIERE,C:1702,C:1722,C:1801
+0303:00c00000:0007:0085:1:0
+BD 1
+p:BetaDigital,C:1702,C:1801
+2203:00c00000:044c:0001:1:0
+PLANETE CHOC
+p:CSAT
+7503:00c00000:0420:0001:1:0
+FOX
+p:DIGITAL+
+0204:00c00000:0004:0085:1:0
+PREMIERE \86NOSTALGIE\87
+p:PREMIERE,C:1702,C:1722,C:1801
+0304:00c00000:0007:0085:1:0
+\86TV.B\87ERLIN
+p:BetaDigital
+2204:00c00000:044c:0001:1:0
+NAT GEOGRAPHIC
+p:CSAT
+7504:00c00000:0420:0001:1:0
+AXN
+p:DIGITAL+
+0305:00c00000:0007:0085:1:0
+BD 4
+p:BetaDigital,C:1702,C:1801
+2205:00c00000:044c:0001:1:0
+C CINEMA CLASSIC
+p:CSAT
+0206:00c00000:0001:0085:1:0
+\86GOLDSTAR\87 TV
+p:PREMIERE,C:1702,C:1722,C:1801
+0306:00c00000:0007:0085:1:0
+\86GOD \87Channel
+p:BetaDigital
+0307:00c00000:0007:0085:1:0
+\86F\87ranken \86SAT\87
+p:BetaDigital
+2207:00c00000:044c:0001:1:0
+C CINEMA FAMIZ
+p:CSAT
+0008:00c00000:0002:0085:1:0
+PREMIERE \86START\87
+p:PREMIERE,C:1702,C:1722,C:1801
+2f08:00c00000:0441:0001:1:0
+\ 5\86S\87uper\86 RTL\87
+p:RTL World
+0009:00c00000:0002:0085:1:0
+\86PREM\87IERE\86 4\87
+p:PREMIERE,C:1702,C:1722,C:1801
+2009:00c00000:0430:0001:1:0
+CANAL+
+p:CSAT
+000a:00c00000:0002:0085:1:0
+\86PREM\87IERE\86 1\87
+p:PREMIERE,C:1702,C:1722,C:1801
+200a:00c00000:0430:0001:1:0
+CANAL+ CONFORT
+p:CSAT
+000b:00c00000:0002:0085:1:0
+\86PREM\87IERE\86 2\87
+p:PREMIERE,C:1702,C:1722,C:1801
+200b:00c00000:0430:0001:1:0
+CANAL+ CINEMA
+p:CSAT
+f20b:00c00000:0421:0001:1:0
+RAZE TV
+p:Astra
+000c:00c00000:0011:0085:1:0
+\86ANIMAL\87 PLANET
+p:PREMIERE,C:1702,C:1722,C:1801
+200c:00c00000:0430:0001:1:0
+CANAL+ 16/9
+p:CSAT
+300c:00c00000:0458:0001:1:0
+CLEAR TV
+p:ASTRA
+760c:00c00000:0408:0001:1:0
+CINEM. CLÁSICO
+p:DIGITAL+
+000d:00c00000:0011:0085:1:0
+\86Neu\87er Kanal
+p:PREMIERE,C:1702,C:1722,C:1801
+200d:00c00000:0430:0001:1:0
+
+p:CSAT
+220d:00c00000:044c:0001:1:0
+GAME ONE
+p:CSAT
+300d:00c00000:0458:0001:1:0
+TV6
+p:X-Gate
+760d:00c00000:0408:0001:1:0
+FDF
+p:DIGITAL+
+000e:00c00000:0011:0085:1:0
+\86DISCOVERY\87 CHANNEL
+p:PREMIERE,C:1702,C:1722,C:1801
+200e:00c00000:0430:0001:1:0
+C CINEMA PREMIER
+p:CSAT
+760e:00c00000:0408:0001:1:0
+TV GALICIA
+p:DIGITAL+
+000f:00c00000:0001:0085:1:0
+CLASSICA
+p:PREMIERE,C:1702,C:1722,C:1801
+200f:00c00000:0430:0001:1:0
+DISNEY CHANNEL
+p:CSAT
+0010:00c00000:0004:0085:1:0
+PREMIERE \86SERIE\87
+p:PREMIERE,C:1702,C:1722,C:1801
+2010:00c00000:0430:0001:1:0
+CANAL+ SPORT
+p:CSAT
+0011:00c00000:0003:0085:1:0
+PREMIERE \86SPORT 1\87
+p:PREMIERE,C:1702,C:1722,C:1801
+2011:00c00000:0430:0001:1:0
+EQUIDIA
+p:CSAT
+0012:00c00000:0004:0085:1:0
+PREMIERE \86DIREKT\87
+p:PREMIERE,C:1702,C:1722,C:1801
+2712:00c00000:0402:0001:1:0
+RTM MAROC
+p:CANALSATELLITE
+0013:00c00000:0011:0085:1:0
+\86JUNIOR\87
+p:PREMIERE,C:1702,C:1722,C:1801
+2013:00c00000:0430:0001:1:0
+PAD
+p:CSAT
+5013:00c00000:0447:0001:1:0
+UPC_EPG
+p:UPC Direct
+0014:00c00000:0002:0085:1:0
+\86PREM\87IERE\86 7\87
+p:PREMIERE,C:1702,C:1722,C:1801
+2014:00c00000:0430:0001:1:0
+PAD 2
+p:CSAT
+0015:00c00000:0001:0085:1:0
+\86B\87EATE\86-UHSE\87.TV
+p:PREMIERE,C:1702,C:1722,C:1801
+2015:00c00000:0430:0001:1:0
+CANAL+ 16/9.
+p:CSAT
+0016:00c00000:0001:0085:1:0
+\86HEIMAT\87KANAL
+p:PREMIERE,C:1702,C:1722,C:1801
+0017:00c00000:0004:0085:1:0
+PREMIERE \86KRIMI\87
+p:PREMIERE,C:1702,C:1722,C:1801
+271a:00c00000:0402:0001:1:0
+EUROSPORT
+p:Eurosport
+001b:00c00000:0004:0085:1:0
+PREMIERE \86SPORT 2\87
+p:PREMIERE,C:1702,C:1722,C:1801
+001c:00c00000:0011:0085:1:0
+\86FOX\87 \86KIDS\87
+p:PREMIERE,C:1702,C:1722,C:1801
+2f1c:00c00000:0441:0001:1:0
+VOX
+p:RTL World
+f21c:00c00000:0421:0001:1:0
+Free-X TV
+p:RRSAT
+001d:00c00000:0002:0085:1:0
+\86PREM\87IERE\86 5\87
+p:PREMIERE,C:1702,C:1722,C:1801
+1c1f:00c00000:0451:0035:1:0
+EPG
+p:CANAL+
+0020:00c00000:0021:0085:1:0
+\86Sonnen\87klar \86TV\87
+p:PREMIERE
+1c20:00c00000:0451:0035:1:0
+Lunapark
+p:CANAL+
+0021:00c00000:0007:0085:1:0
+PFH
+p:,C:1810
+4e21:00c00000:043a:0001:1:0
+ProSieben Schweiz
+p:ProSiebenSat.1
+0022:00c00000:0011:0085:1:0
+\86DISNEY\87 CHANNEL
+p:PREMIERE,C:1702,C:1722,C:1801
+4e22:00c00000:043a:0001:1:0
+ProSieben Austria
+p:ProSiebenSat.1
+4e23:00c00000:043a:0001:1:0
+Kabel 1 Schweiz
+p:ProSiebenSat.1
+7023:00c00000:0402:0001:1:0
+Sky News
+p:BSkyB
+0024:00c00000:0011:0085:1:0
+SCI FI
+p:PREMIERE,C:1702,C:1722,C:1801
+2724:00c00000:0402:0001:1:0
+DW-TV
+p:Deutsche Welle
+4e24:00c00000:043a:0001:1:0
+Kabel 1 Austria
+p:ProSiebenSat.1
+7724:00c00000:0416:0001:1:0
+CARTOON NET.
+p:DIGITAL+
+4e25:00c00000:043a:0001:1:0
+SAT.1 A
+p:ProSiebenSat.1
+f226:00c00000:0421:0001:1:0
+Ocko TV
+p:OCKO TV
+0028:00c00000:0021:0085:1:0
+\86HSE24\87
+p:BetaDigital
+7728:00c00000:0416:0001:1:0
+PEOPLE+ARTS
+p:DIGITAL+
+f228:00c00000:0421:0001:1:0
+TV SHOP
+p:CLT-UFA
+0029:00c00000:0002:0085:1:0
+\86PREM\87IERE\86 6\87
+p:PREMIERE,C:1702,C:1722,C:1801
+6e29:00c00000:0431:0001:1:0
+\ 5EinsExtra
+p:\ 5ARD
+7729:00c00000:0416:0001:1:0
+VIAJAR
+p:DIGITAL+
+f229:00c00000:0421:0001:1:0
+24.CZ
+p:teresticky
+002a:00c00000:0011:0085:1:0
+\8613 TH\87 STREET
+p:PREMIERE,C:1702,C:1722,C:1801
+6e2a:00c00000:0431:0001:1:0
+\ 5EinsFestival
+p:\ 5ARD
+772a:00c00000:0416:0001:1:0
+NICK-PARAMOUNT
+p:DIGITAL+
+002b:00c00000:0002:0085:1:0
+\86PREM\87IERE\86 3\87
+p:PREMIERE,C:1702,C:1722,C:1801
+6e2b:00c00000:0431:0001:1:0
+\ 5EinsMuXx
+p:\ 5ARD
+772b:00c00000:0416:0001:1:0
+CAZA Y PESCA
+p:DIGITAL+
+6e2c:00c00000:0431:0001:1:0
+\ 5MDR FERNSEHEN
+p:\ 5ARD
+332d:00c00000:045b:0001:1:0
+TW1
+p:ORF
+6e2d:00c00000:0431:0001:1:0
+\ 5rbb Brandenburg
+p:\ 5ARD
+002e:00c00000:0021:0085:1:0
+SAT.1
+p:ProSiebenSat.1
+272e:00c00000:0402:0001:1:0
+CNBC Europe
+p:CNBC
+332e:00c00000:045b:0001:1:0
+GoTV
+p:GoTV
+6e2e:00c00000:0431:0001:1:0
+\ 5rbb Berlin
+p:\ 5ARD
+772e:00c00000:0416:0001:1:0
+CALLE 13
+p:DIGITAL+
+002f:00c00000:0021:0085:1:0
+N24
+p:ProSiebenSat.1
+0030:00c00000:0007:0085:1:0
+SAT.1-CH
+p:ProSiebenSat.1
+2f30:00c00000:0441:0001:1:0
+RTL Shop
+p:RTL World
+7730:00c00000:0416:0001:1:0
+COSMOPOLITAN
+p:Digital+
+7731:00c00000:0416:0001:1:0
+BLOOMBERG
+p:Digital+
+0032:00c00000:0001:0085:1:0
+BIG \86BROTHER\87
+p:PREMIERE,C:1702,C:1722,C:1801
+0033:00c00000:0021:0085:1:0
+TELE 5
+p:BetaDigital
+2333:00c00000:0400:0001:1:0
+CANAL ALGERIE
+p:CANALSATELLITE
+0034:00c00000:0007:0085:1:0
+\86BLUE \87MOVIE \86A\87ustria
+p:PREMIERE,C:1702,C:1801
+2334:00c00000:0400:0001:1:0
+TV 5
+p:CANALSATELLITE
+0035:00c00000:0007:0085:1:0
+\86PREM\87IERE\86 A\87ustria
+p:PREMIERE,C:1702,C:1801
+2135:00c00000:0442:0001:1:0
+FRANCE 5
+p:CSAT
+0036:00c00000:0007:0085:1:0
+DPC.TV 3
+p:BetaDigital
+2136:00c00000:0442:0001:1:0
+TV BREIZH
+p:CSAT
+2336:00c00000:0400:0001:1:0
+ESC1 - EGYPT
+p:CANALSATELLITE
+3336:00c00000:045b:0001:1:0
+OEC
+p:ORF
+2137:00c00000:0442:0001:1:0
+LIVE 1
+p:CSAT
+2337:00c00000:0400:0001:1:0
+RAI 1
+p:CANALSATELLITE
+3037:00c00000:0458:0001:1:0
+Montagne TV
+p:CANALSATELLITE
+2138:00c00000:0442:0001:1:0
+PLANETE THALASSA
+p:CSAT
+3138:00c00000:0459:0001:1:0
+Bahn TV
+p:T-Systems
+2139:00c00000:0442:0001:1:0
+BLOOMBERG TV
+p:CSAT
+2339:00c00000:0400:0001:1:0
+RTPI
+p:CANALSATELLITE
+3139:00c00000:0459:0001:1:0
+K-TV
+p:T-Systems
+213a:00c00000:0442:0001:1:0
+LCP
+p:CSAT
+233a:00c00000:0400:0001:1:0
+TV7
+p:CANALSATELLITE
+2f3a:00c00000:0441:0001:1:0
+n-tv
+p:RTL World
+313a:00c00000:0459:0001:1:0
+XXP
+p:T-Systems
+6e3a:00c00000:0431:0001:1:0
+\ 5ARD-Online-Kanal
+p:\ 5ARD
+233b:00c00000:0400:0001:1:0
+ARTE
+p:CANALSATELLITE
+313b:00c00000:0459:0001:1:0
+LifeStyle-TV
+p:T-Systems
+003c:00c00000:0005:0085:1:0
+VIC-Liebevoll.tv
+p:BetaDigital
+213c:00c00000:0442:0001:1:0
+RFO SAT
+p:CSAT
+003d:00c00000:0005:0085:1:0
+wellenlaenge.tv
+p:BetaDigital
+233d:00c00000:0400:0001:1:0
+Al Jazeera
+p:CANALSATELLITE
+6e3d:00c00000:0431:0001:1:0
+\ 5ARD-MHP-TEST-5
+p:\ 5ARD
+003e:00c00000:0005:0085:1:0
+NEULAND.tv
+p:BetaDigital
+233e:00c00000:0400:0001:1:0
+TVEi
+p:CANALSATELLITE
+6e3e:00c00000:0431:0001:1:0
+\ 5ARD-MHP-TEST-6
+p:\ 5ARD
+003f:00c00000:0005:0085:1:0
+Amio.tv
+p:BetaDigital
+2f3f:00c00000:0441:0001:1:0
+Traumpartner TV
+p:RTL World
+6e40:00c00000:0431:0001:1:0
+\ 5NDR FS MV
+p:\ 5ARD
+1f41:00c00000:042e:0001:1:0
+SEASONS
+p:CSAT
+6e41:00c00000:0431:0001:1:0
+\ 5NDR FS HH
+p:\ 5ARD
+1f42:00c00000:042e:0001:1:0
+C CINEMA EMOTION
+p:CSAT
+6e42:00c00000:0431:0001:1:0
+\ 5NDR FS NDS
+p:\ 5ARD
+1f43:00c00000:042e:0001:1:0
+C CINEMA FRISSON
+p:CSAT
+6e43:00c00000:0431:0001:1:0
+\ 5NDR FS SH
+p:\ 5ARD
+1f44:00c00000:042e:0001:1:0
+EURONEWS
+p:CSAT
+6e44:00c00000:0431:0001:1:0
+\ 5MDR SACHSEN
+p:\ 5ARD
+1c45:00c00000:0457:0001:1:0
+STB Wisplus
+p:SES Astra
+1f45:00c00000:042e:0001:1:0
+PARIS PREMIERE
+p:CSAT
+6e45:00c00000:0431:0001:1:0
+\ 5MDR S-ANHALT
+p:\ 5ARD
+1f46:00c00000:042e:0001:1:0
+JIMMY
+p:CSAT
+2346:00c00000:0400:0001:1:0
+2M Maroc
+p:CANALSATELLITE
+3146:00c00000:0459:0001:1:0
+rhein main tv
+p:T-Systems
+6e46:00c00000:0431:0001:1:0
+\ 5MDR THÜRINGEN
+p:\ 5ARD
+1f47:00c00000:042e:0001:1:0
+MEZZO
+p:CSAT
+6e47:00c00000:0431:0001:1:0
+\ 5SÜDWEST RP
+p:\ 5ARD
+1f48:00c00000:042e:0001:1:0
+LA CHAINE METEO
+p:CSAT
+3148:00c00000:0459:0001:1:0
+K1010
+p:T-Systems
+1f49:00c00000:042e:0001:1:0
+SPORT+
+p:CSAT
+1f4a:00c00000:042e:0001:1:0
+I>TELE
+p:CSAT
+314a:00c00000:0459:0001:1:0
+Spielekanal TV
+p:T-Systems
+314b:00c00000:0459:0001:1:0
+Quiz-des-Tages.de
+p:T-Systems
+1f4c:00c00000:042e:0001:1:0
+UFTU TJH
+p:CSAT
+1f4d:00c00000:042e:0001:1:0
+NCMESS
+p:CSAT
+4f4d:00c00000:0447:0001:1:0
+\86Gal\87axie \86Sport\87
+p:UPC Direct
+4f4e:00c00000:0447:0001:1:0
+\86Animal\87 \86Pl\87anet
+p:UPC Direct
+4f4f:00c00000:0447:0001:1:0
+\86Disc\87overy CE
+p:UPC Direct
+4f51:00c00000:0447:0001:1:0
+\86Jetix\87
+p:UPC Direct
+4f52:00c00000:0447:0001:1:0
+\86Nat\87 \86Geo\87
+p:UPC Direct
+4f53:00c00000:0447:0001:1:0
+\86Eurosport 2\87
+p:UPC Direct
+4f54:00c00000:0447:0001:1:0
+\86Hall\87mark
+p:UPC Direct
+2455:00c00000:0456:0001:1:0
+FESTIVAL
+p:CSAT
+4f55:00c00000:0447:0001:1:0
+\86Pr\87ivate \86Gold\87
+p:UPC Direct
+2456:00c00000:0456:0001:1:0
+HISTOIRE
+p:CSAT
+4f56:00c00000:0447:0001:1:0
+\86Real\87ity \86TV\87
+p:UPC Direct
+2457:00c00000:0456:0001:1:0
+TCHATCHE TV
+p:CSAT
+4f57:00c00000:0447:0001:1:0
+\86Ex\87treme \86Sports\87
+p:UPC Direct
+2458:00c00000:0456:0001:1:0
+
+p:CSAT
+4f58:00c00000:0447:0001:1:0
+\86Club\87
+p:UPC Direct
+1b59:00c00000:03fc:0001:1:0
+full-X3
+p:GlobeCast
+2459:00c00000:0456:0001:1:0
+EXTREME SPORTS
+p:CSAT
+4f59:00c00000:0447:0001:1:0
+\86M2\87
+p:UPC Direct
+1b5a:00c00000:03fc:0001:1:0
+full-X3 M
+p:
+4f5a:00c00000:0447:0001:1:0
+\86Duna\87
+p:UPC Direct
+1b5b:00c00000:03fc:0001:1:0
+Infocast Mail Astra
+p:NEOTION
+4f5b:00c00000:044b:0001:1:0
+\86Eurosport\87
+p:UPC Direct
+1b5c:00c00000:03fc:0001:1:0
+DEMAIN!
+p:GlobeCast
+245c:00c00000:0456:0001:1:0
+DISCOVERY
+p:CSAT
+4f5c:00c00000:044b:0001:1:0
+\86MTV Europe\87
+p:UPC Direct
+1b5d:00c00000:03fc:0001:1:0
+TELIF
+p:GCE
+245d:00c00000:0456:0001:1:0
+PINK TV
+p:CSAT
+4f5d:00c00000:044b:0001:1:0
+\86Hall\87mark
+p:UPC Direct
+245e:00c00000:0456:0001:1:0
+
+p:CSAT
+4f5e:00c00000:044b:0001:1:0
+\86Viasat-3\87
+p:UPC Direct
+245f:00c00000:0456:0001:1:0
+
+p:CSAT
+4f5f:00c00000:044b:0001:1:0
+\86TV Markiza\86
+p:UPC Direct
+4f60:00c00000:044b:0001:1:0
+\86TV JOJ\86
+p:UPC Direct
+2261:00c00000:0438:0001:1:0
+FRANCE 2
+p:CSAT
+4f61:00c00000:044b:0001:1:0
+UPC Direct
+p:UPC Direct
+1c62:00c00000:0457:0001:1:0
+STB Comag
+p:SES Astra
+2262:00c00000:0438:0001:1:0
+FRANCE 3
+p:CSAT
+4f62:00c00000:044b:0001:1:0
+\86BBC Prime\87
+p:UPC Direct
+7562:00c00000:0412:0001:1:0
+GALAVISIÓN
+p:DIGITAL+
+4f63:00c00000:044b:0001:1:0
+\86Prima TV\87
+p:UPC Direct
+6d63:00c00000:042c:0001:1:0
+Travel
+p:Landmark Travel Channel Limited
+7563:00c00000:0412:0001:1:0
+REAL MADRID TV
+p:DIGITAL+
+1c64:00c00000:0457:0001:1:0
+OTTO MHP
+p:SES Astra
+4f64:00c00000:044b:0001:1:0
+\86TA3\87
+p:UPC Direct
+7564:00c00000:0412:0001:1:0
+BARÇA TV
+p:DIGITAL+
+2265:00c00000:0438:0001:1:0
+RTL9
+p:CSAT
+4f65:00c00000:044b:0001:1:0
+\86Magyar ATV\86
+p:UPC Direct
+7565:00c00000:0412:0001:1:0
+TAQUILLA 5
+p:DIGITAL+
+6d66:00c00000:0437:0001:1:0
+\ 5ZDF
+p:\ 5ZDFvision
+7566:00c00000:0412:0001:1:0
+TAQUILLA 6
+p:DIGITAL+
+2267:00c00000:0438:0001:1:0
+TRACE TV
+p:CSAT
+6d67:00c00000:0437:0001:1:0
+\ 53sat
+p:\ 5ZDFvision
+7567:00c00000:0412:0001:1:0
+TAQUILLA 7
+p:DIGITAL+
+2268:00c00000:0438:0001:1:0
+TELE MELODY
+p:CSAT
+6d68:00c00000:0437:0001:1:0
+\ 5KiKa
+p:\ 5ZDFvision
+7468:00c00000:03f0:0001:1:0
+DOCUMANÍA
+p:DIGITAL+
+7568:00c00000:0412:0001:1:0
+TAQUILLA X
+p:DIGITAL+
+6d69:00c00000:0437:0001:1:0
+\ 5Eurosport
+p:\ 5ZDFvision
+6f69:00c00000:042c:0001:1:0
+Cartoon Network
+p:TBS
+7469:00c00000:03f0:0001:1:0
+JETIX
+p:DIGITAL+
+7569:00c00000:0412:0001:1:0
+TAQUILLA X
+p:DIGITAL+
+6f6a:00c00000:042c:0001:1:0
+CNN Int.
+p:CNN
+746a:00c00000:03f0:0001:1:0
+DISNEY CH. +1
+p:DIGITAL+
+756a:00c00000:0412:0001:1:0
+TAQUILLA XX
+p:DIGITAL+
+6d6b:00c00000:0437:0001:1:0
+\ 5ZDFinfokanal
+p:\ 5ZDFvision
+746b:00c00000:03f0:0001:1:0
+PLAYHOUSE
+p:DIGITAL+
+756b:00c00000:0412:0001:1:0
+TAQUILLA 12
+p:DIGITAL+
+526c:00c00000:0440:0001:1:0
+Euro1080
+p:EURO1080
+756c:00c00000:0412:0001:1:0
+TAQUILLA 9
+p:DIGITAL+
+226d:00c00000:0438:0001:1:0
+ESPN CLASSIC
+p:CSAT
+6f6d:00c00000:042c:0001:1:0
+TCM
+p:TBS
+756d:00c00000:0412:0001:1:0
+TAQUILLA 8
+p:DIGITAL+
+226e:00c00000:0438:0001:1:0
+
+p:CSAT
+6d6e:00c00000:0437:0001:1:0
+\ 5ZDFdokukanal
+p:\ 5ZDFvision
+6f6e:00c00000:042c:0001:1:0
+TCM
+p:TBS.
+6d6f:00c00000:0437:0001:1:0
+\ 5EuroNews
+p:\ 5ZDFvision
+746f:00c00000:03f0:0001:1:0
+TOON DISNEY
+p:DIGITAL+
+1770:00c00000:0455:0035:1:0
+test
+p:canal+
+2270:00c00000:0438:0001:1:0
+CANAL EVENEMENT
+p:CSAT
+6d70:00c00000:0437:0001:1:0
+\ 5ZDFtheaterkanal
+p:\ 5ZDFvision
+7472:00c00000:03f0:0001:1:0
+C+ CINE 1
+p:DIGITAL+
+7473:00c00000:03f0:0001:1:0
+C+ CINE 2
+p:DIGITAL+
+7474:00c00000:03f0:0001:1:0
+C+ CINE 3
+p:DIGITAL+
+7475:00c00000:03f0:0001:1:0
+EXPANSIÓN TV
+p:DIGITAL+
+427c:00c00000:0446:0001:1:0
+AB MOTEURS
+p:AB SAT,C:0100,C:0500
+427d:00c00000:0446:0001:1:0
+AB1
+p:ABSAT,C:0100,C:0500
+427e:00c00000:0446:0001:1:0
+ANIMAUX
+p:ABSAT,C:0100
+427f:00c00000:0446:0001:1:0
+ENCYCLOPEDIA
+p:ABSAT,C:0100
+4280:00c00000:0446:0001:1:0
+ZIK/XXL
+p:ABSAT
+7080:00c00000:0443:0001:1:0
+RTL Austria
+p:RTL
+0381:00c00000:0021:0085:1:0
+\86NEUN LIVE\87 Television
+p:BetaDigital
+0c81:00c00000:0444:0001:1:0
+NDS_VOTE
+p:Canal Satellite
+4281:00c00000:0446:0001:1:0
+ESCALES
+p:ABSAT,C:0100,C:0500
+0382:00c00000:0021:0085:1:0
+ProSieben
+p:ProSiebenSat.1
+0c82:00c00000:0444:0001:1:0
+NDS_RR
+p:Canal Satellite
+4282:00c00000:0446:0001:1:0
+toute L'HISTOIRE
+p:ABSAT,C:0100
+0383:00c00000:0021:0085:1:0
+KABEL1
+p:ProSiebenSat.1
+0c83:00c00000:0444:0001:1:0
+NDS_COD
+p:Canal Satellite
+4283:00c00000:0446:0001:1:0
+BBC WORLD
+p:ABSAT
+0384:00c00000:0021:0085:1:0
+DSF
+p:BetaDigital
+4284:00c00000:0446:0001:1:0
+RFM-TV
+p:ABSAT,C:0100
+7085:00c00000:0443:0001:1:0
+VOX Austria
+p:RTL
+4286:00c00000:0446:0001:1:0
+ACTION
+p:AB SAT,C:0100
+4287:00c00000:0446:0001:1:0
+MANGAS
+p:ABSAT,C:0100
+7788:00c00000:0424:0001:1:0
+40 LATINO
+p:DIGITAL+
+4289:00c00000:0446:0001:1:0
+TERRA NOVA
+p:ABSAT
+7789:00c00000:0424:0001:1:0
+GOLF+
+p:DIGITAL+
+0c8a:00c00000:0444:0001:1:0
+ASTRA Satmode EU 1
+p:SES ASTRA
+428a:00c00000:0446:0001:1:0
+CINE FX
+p:ABSAT,C:0100,C:0500
+708a:00c00000:0443:0001:1:0
+RTL2 Austria
+p:RTL
+778a:00c00000:0424:0001:1:0
+CANAL+...30
+p:DIGITAL+
+0c8b:00c00000:0444:0001:1:0
+ASTRA Satmode EU 2
+p:ASTRA
+778b:00c00000:0424:0001:1:0
+PLAYBOY TV
+p:DIGITAL+
+0c8c:00c00000:0444:0001:1:0
+ASTRA Satmode EU 3
+p:MGN
+138c:00c00000:0455:0035:1:0
+NET5
+p:CANAL+
+778c:00c00000:0424:0001:1:0
+MÉTEO
+p:DIGITAL+
+0c8d:00c00000:0444:0001:1:0
+ASTRA Satmode EU 4
+p:SES ASTRA
+138d:00c00000:0455:0035:1:0
+SBS6
+p:CANAL+
+238d:00c00000:044a:0001:1:0
+GUIDE TV
+p:C+
+778d:00c00000:0424:0001:1:0
+NAT GEOGRAPHIC
+p:DIGITAL+
+0c8e:00c00000:0444:0001:1:0
+ASTRA Satmode DEV 1
+p:SES ASTRA
+0f8e:00c00000:0458:0001:1:0
+RTBF SAT
+p:RTBF
+238e:00c00000:044a:0001:1:0
+CANALSAT JEUX
+p:C+
+768e:00c00000:041e:0001:1:0
+TAQUILLA 1
+p:DIGITAL+
+0c8f:00c00000:0444:0001:1:0
+ASTRA Satmode DEV 2
+p:SES ASTRA
+708f:00c00000:0443:0001:1:0
+Super RTL A
+p:RTL
+768f:00c00000:041e:0001:1:0
+TAQUILLA 2
+p:DIGITAL+
+0c90:00c00000:0444:0001:1:0
+ASTRA Satmode DEV 3
+p:SES ASTRA
+2390:00c00000:044a:0001:1:0
+C:DIRECT
+p:C+
+7690:00c00000:041e:0001:1:0
+TAQUILLA 3
+p:DIGITAL+
+2391:00c00000:044a:0001:1:0
+PLAYIN'TV
+p:CSAT
+6e91:00c00000:04b1:0001:1:0
+WDR Aachen
+p:ARD
+7691:00c00000:041e:0001:1:0
+TAQUILLA 4
+p:DIGITAL+
+0292:00c00000:0005:0085:1:0
+DPC.TV2
+p:BetaDigital
+1392:00c00000:0455:0035:1:0
+Yorin
+p:CANAL+
+2392:00c00000:044a:0001:1:0
+CASH TV
+p:CSAT
+6e92:00c00000:04b1:0001:1:0
+WDR Bielefeld
+p:ARD
+0293:00c00000:0005:0085:1:0
+tv.gusto
+p:BetaDigital
+2393:00c00000:044a:0001:1:0
+PRATIQUE LOISIRS
+p:CSAT
+6e93:00c00000:04b1:0001:1:0
+WDR Dortmund
+p:ARD
+7793:00c00000:0424:0001:1:0
+FOX NEWS
+p:DIGITAL+
+0294:00c00000:0007:0085:1:0
+DPC_DVB
+p:BetaDigital,C:1702
+2394:00c00000:044a:0001:1:0
+
+p:CSAT
+6e94:00c00000:04b1:0001:1:0
+\ 5WDR Düsseldorf
+p:ARD
+7594:00c00000:0422:0001:1:0
+MÚSICA DIGITAL
+p:DIGITAL+
+0295:00c00000:0021:0085:1:0
+AstroTV
+p:BetaDigital
+2395:00c00000:044a:0001:1:0
+
+p:CSAT
+6e95:00c00000:04b1:0001:1:0
+WDR Essen
+p:ARD
+7595:00c00000:0422:0001:1:0
+MÚSICA DIGITAL
+p:DIGITAL+
+7695:00c00000:041e:0001:1:0
+TAQUILLA XY
+p:DIGITAL+
+0296:00c00000:0005:0085:1:0
+1-2-3.tv
+p:BetaDigital
+6e96:00c00000:04b1:0001:1:0
+\ 5WDR Münster
+p:ARD
+7596:00c00000:0422:0001:1:0
+RADIOS
+p:DIGITAL+
+7696:00c00000:041e:0001:1:0
+TAQUILLA 10
+p:DIGITAL+
+0297:00c00000:0005:0085:1:0
+DPC.TV1
+p:BetaDigital
+1397:00c00000:0455:0035:1:0
+TMF
+p:CANAL+
+2397:00c00000:044a:0001:1:0
+EVENEMENT
+p:CSAT
+6e97:00c00000:04b1:0001:1:0
+WDR Siegen
+p:ARD
+7597:00c00000:0422:0001:1:0
+RADIOS
+p:DIGITAL+
+7697:00c00000:041e:0001:1:0
+TELECINCO
+p:DIGITAL+
+0298:00c00000:0004:0085:1:0
+\86BLUE M\87OVIE
+p:PREMIERE,C:1702,C:1722,C:1801,C:1810
+2398:00c00000:044a:0001:1:0
+
+p:CSAT
+6e98:00c00000:04b1:0001:1:0
+WDR Wuppertal
+p:ARD
+7598:00c00000:0422:0001:1:0
+RADIOS ESP
+p:DIGITAL+
+2199:00c00000:0448:0001:1:0
+RFO SAT.
+p:CSAT
+2399:00c00000:044a:0001:1:0
+TIERCE N°1
+p:CSAT
+7699:00c00000:041e:0001:1:0
+BOOMERANG
+p:DIGITAL+
+219a:00c00000:0448:0001:1:0
+BANQUES
+p:CSAT
+239a:00c00000:044a:0001:1:0
+ESPACE CLIENT
+p:C+
+219b:00c00000:0448:0001:1:0
+MOSAIQUE
+p:CSAT
+439b:00c00000:045e:0001:1:0
+Trend Pro
+p:BT Broadcast Services
+139c:00c00000:0455:0035:1:0
+Veronica/FoxKids
+p:CANAL+
+779c:00c00000:0424:0001:1:0
+C+ DEPORTE 1
+p:DIGITAL+
+239d:00c00000:044a:0001:1:0
+
+p:CSAT
+779d:00c00000:0424:0001:1:0
+C+ DEPORTE 2
+p:DIGITAL+
+239e:00c00000:044a:0001:1:0
+
+p:CSAT
+209f:00c00000:0432:0001:1:0
+C CINEMA AUTEUR
+p:CSAT
+239f:00c00000:044a:0001:1:0
+
+p:CSAT
+20a0:00c00000:0432:0001:1:0
+MCM
+p:CSAT
+21a0:00c00000:0448:0001:1:0
+MOSAIQUE
+p:CSAT
+23a0:00c00000:044a:0001:1:0
+
+p:CSAT
+13a1:00c00000:0455:0035:1:0
+BVN
+p:CANAL+
+20a1:00c00000:0432:0001:1:0
+KTO
+p:CSAT
+21a1:00c00000:0448:0001:1:0
+MMD
+p:CSAT
+23a1:00c00000:044a:0001:1:0
+UNIVERSAL MOBILE
+p:CSAT
+20a2:00c00000:0432:0001:1:0
+MCM POP
+p:CSAT
+21a2:00c00000:0448:0001:1:0
+CA TV
+p:CSAT
+23a2:00c00000:044a:0001:1:0
+JEUX
+p:IMEDIA
+20a3:00c00000:0432:0001:1:0
+MATCH TV
+p:CSAT
+23a3:00c00000:044a:0001:1:0
+
+p:IMEDIA
+20a4:00c00000:0432:0001:1:0
+C CINEMA INFO
+p:CSAT
+21a4:00c00000:0448:0001:1:0
+Best of Shopping
+p:CSAT
+23a4:00c00000:044a:0001:1:0
+PLAYJAM
+p:C+
+0fa5:00c00000:0451:0035:1:0
+C+ Rood
+p:CANAL+
+21a5:00c00000:0448:0001:1:0
+
+p:CSAT
+23a5:00c00000:044a:0001:1:0
+RTL JEUX
+p:CSAT
+0fa6:00c00000:0451:0035:1:0
+C+ Blauw
+p:CANAL+
+0fa7:00c00000:0451:0035:1:0
+C+16/9
+p:CANAL+
+20a7:00c00000:0432:0001:1:0
+GOURMET TV
+p:CSAT
+21a7:00c00000:0448:0001:1:0
+
+p:CSAT
+2fa7:00c00000:0458:0001:1:0
+LibertyTV FR
+p:LibertyTV.com
+00a8:00c00000:0011:0085:1:0
+HIT24
+p:PREMIERE,C:1702,C:1722,C:1801
+20a8:00c00000:0432:0001:1:0
+TEST CDN 8
+p:CSAT
+21a8:00c00000:0448:0001:1:0
+CDN12
+p:CSAT
+23a8:00c00000:044a:0001:1:0
+ASTRALIA
+p:CSAT
+0fa9:00c00000:0451:0035:1:0
+SPICE PLATINUM
+p:CANAL+
+20a9:00c00000:0432:0001:1:0
+
+p:CSAT
+21a9:00c00000:0448:0001:1:0
+SFR La Carte
+p:CSAT
+23a9:00c00000:044a:0001:1:0
+SMS TV
+p:C+
+20aa:00c00000:0432:0001:1:0
+NBA+
+p:CSAT
+0fab:00c00000:0451:0035:1:0
+NED1
+p:CANAL+
+20ab:00c00000:0432:0001:1:0
+
+p:CSAT
+23ab:00c00000:044a:0001:1:0
+COMMUNIQUER
+p:CSAT
+0fac:00c00000:0451:0035:1:0
+NED2
+p:CANAL+
+20ac:00c00000:0432:0001:1:0
+
+p:CSAT
+23ac:00c00000:044a:0001:1:0
+SPORT
+p:C+
+0fad:00c00000:0451:0035:1:0
+NED3
+p:CANAL+
+20ad:00c00000:0432:0001:1:0
+MCM TOP
+p:CSAT
+23ae:00c00000:044a:0001:1:0
+A LA UNE
+p:IMEDIA
+0faf:00c00000:0451:0035:1:0
+Cartoon / TCM
+p:CANAL+
+23b1:00c00000:044a:0001:1:0
+
+p:CSAT
+23b2:00c00000:044a:0001:1:0
+JEUNESSE
+p:CSAT
+31b2:00c00000:042c:0001:1:0
+ntl1.068
+p:Bloomberg
+77ba:00c00000:040a:0001:1:0
+CINEMANÍA EXTRA
+p:DIGITAL+
+77bb:00c00000:040a:0001:1:0
+CLÁSICO
+p:DIGITAL+
+31bc:00c00000:045c:0001:1:0
+VIVA
+p:VIVA Fernsehen GmbH & Co. KG
+77bc:00c00000:040a:0001:1:0
+24 HORAS
+p:DIGITAL+
+77bd:00c00000:040a:0001:1:0
+CINEMANÍA...30
+p:DIGITAL+
+23be:00c00000:044a:0001:1:0
+DT1
+p:C+
+23bf:00c00000:044a:0001:1:0
+DT2
+p:C+
+76c0:00c00000:040e:0001:1:0
+CANAL+
+p:DIGITAL+
+77c0:00c00000:040a:0001:1:0
+TELENOVELAS
+p:DIGITAL+
+23c1:00c00000:044a:0001:1:0
+DT4
+p:C+
+77c1:00c00000:040a:0001:1:0
+HOLLYWOOD
+p:DIGITAL+
+23c2:00c00000:044a:0001:1:0
+DT5
+p:C+
+77c2:00c00000:040a:0001:1:0
+CANAL HISTORIA
+p:DIGITAL+
+23c3:00c00000:044a:0001:1:0
+DT6
+p:C+
+76c3:00c00000:040e:0001:1:0
+DISNEY CHANNEL
+p:DIGITAL+
+23c4:00c00000:044a:0001:1:0
+DT7
+p:C+
+76c4:00c00000:040e:0001:1:0
+SPORTMANÍA
+p:DIGITAL+
+22c5:00c00000:045a:0001:1:0
+C CINEMA 16/9
+p:CSAT
+23c5:00c00000:044a:0001:1:0
+DT8
+p:C+
+76c5:00c00000:040e:0001:1:0
+40 TV
+p:DIGITAL+
+77c5:00c00000:040a:0001:1:0
+TV CANARIA
+p:DIGITAL+
+22c6:00c00000:045a:0001:1:0
+CINE POLAR
+p:CSAT
+23c6:00c00000:044a:0001:1:0
+DT9
+p:C+
+75c6:00c00000:0422:0001:1:0
+OKplus
+p:DIGITAL+
+76c6:00c00000:040e:0001:1:0
+DISCOVERY
+p:DIGITAL+
+23c7:00c00000:044a:0001:1:0
+DT10
+p:C+
+75c7:00c00000:0422:0001:1:0
+TIENDAS
+p:DIGITAL+
+22c8:00c00000:045a:0001:1:0
+
+p:CSAT
+23c8:00c00000:044a:0001:1:0
+DT11
+p:C+
+75c8:00c00000:0422:0001:1:0
+EPG
+p:DIGITAL+
+22c9:00c00000:045a:0001:1:0
+TEVA
+p:CSAT
+23c9:00c00000:044a:0001:1:0
+DT12
+p:C+
+32c9:00c00000:045d:0001:1:0
+ORF1
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+22ca:00c00000:045a:0001:1:0
+DISNEY CHANNEL+1
+p:CSAT
+23ca:00c00000:044a:0001:1:0
+DT13
+p:C+
+32ca:00c00000:045d:0001:1:0
+ORF2
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+6dca:00c00000:044d:0001:1:0
+Das Erste
+p:ARD
+75ca:00c00000:0422:0001:1:0
+INFOBOLSA B.
+p:DIGITAL+
+76ca:00c00000:040e:0001:1:0
+CANAL+ 2
+p:DIGITAL+
+22cb:00c00000:045a:0001:1:0
+PLAYHOUSE DISNEY
+p:CSAT
+23cb:00c00000:044a:0001:1:0
+DT14
+p:C+
+32cb:00c00000:045d:0001:1:0
+ORF2 W
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+6dcb:00c00000:044d:0001:1:0
+Bayerisches FS
+p:ARD
+75cb:00c00000:0422:0001:1:0
+LA CAIXA
+p:DIGITAL+
+76cb:00c00000:040e:0001:1:0
+C+ DEPORTE 3
+p:DIGITAL+
+22cc:00c00000:045a:0001:1:0
+TOON DISNEY
+p:CSAT
+23cc:00c00000:044a:0001:1:0
+DT15
+p:C+
+32cc:00c00000:045d:0001:1:0
+ORF2 N
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+6dcc:00c00000:044d:0001:1:0
+hr-fernsehen
+p:ARD
+75cc:00c00000:0422:0001:1:0
+ONCEplus
+p:DIGITAL+
+76cc:00c00000:040e:0001:1:0
+TELEDEPORTE
+p:DIGITAL+
+f1cc:00c00000:0421:0001:1:0
+Bibel TV
+p:Astra
+22cd:00c00000:045a:0001:1:0
+BBC PRIME
+p:CSAT
+23cd:00c00000:044a:0001:1:0
+DT16
+p:C+
+32cd:00c00000:045d:0001:1:0
+ORF2 B
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+6dcd:00c00000:044d:0001:1:0
+arte
+p:ARD
+22ce:00c00000:045a:0001:1:0
+MOTORS TV
+p:CSAT
+23ce:00c00000:044a:0001:1:0
+DT17
+p:C+
+31ce:00c00000:045c:0001:1:0
+HOERZU DIGITAL
+p:HOERZU
+32ce:00c00000:045d:0001:1:0
+ORF2 O
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+6dce:00c00000:044d:0001:1:0
+\ 5SR Fernsehen Südwest
+p:ARD
+75ce:00c00000:0422:0001:1:0
+IBERDROLA
+p:DIGITAL+
+22cf:00c00000:045a:0001:1:0
+E! ENTERTAINMENT
+p:CSAT
+23cf:00c00000:044a:0001:1:0
+DT18
+p:C+
+32cf:00c00000:045d:0001:1:0
+ORF2 S
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+6dcf:00c00000:044d:0001:1:0
+\ 5WDR Köln
+p:ARD
+75cf:00c00000:0422:0001:1:0
+DIGITAL+
+p:DIGITAL+
+23d0:00c00000:044a:0001:1:0
+DT19
+p:C+
+2fd0:00c00000:0458:0001:1:0
+TV5 Europe
+p:TV5
+32d0:00c00000:045d:0001:1:0
+ORF2 T
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+6dd0:00c00000:044d:0001:1:0
+BR-alpha
+p:ARD
+75d0:00c00000:0422:0001:1:0
+CARTELERA
+p:DIGITAL+
+23d1:00c00000:044a:0001:1:0
+DT20
+p:C+
+32d1:00c00000:045d:0001:1:0
+ORF2 V
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+6dd1:00c00000:044d:0001:1:0
+\ 5SÜDWEST BW
+p:ARD
+75d1:00c00000:0422:0001:1:0
+MOVISTAR
+p:DIGITAL+
+32d2:00c00000:045d:0001:1:0
+ORF2 St
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+6dd2:00c00000:044d:0001:1:0
+Phoenix
+p:ARD
+75d2:00c00000:0422:0001:1:0
+TAQUILLA FÚTBOL
+p:DIGITAL+
+32d3:00c00000:045d:0001:1:0
+ORF2 K
+p:ORF,C:0d05,C:1702,C:1762,C:1801
+75d3:00c00000:0422:0001:1:0
+RECIBO
+p:DIGITAL+
+07d4:00c00000:0449:0035:1:0
+RTL4
+p:CANAL+
+32d4:00c00000:045d:0001:1:0
+ATV+
+p:ATV+,C:0d05,C:1702,C:1762,C:1801
+07d5:00c00000:0449:0035:1:0
+RTL5
+p:CANAL+
+32d5:00c00000:045d:0001:1:0
+TW1 - 28Feb05
+p:ORF
+32d6:00c00000:045d:0001:1:0
+ORF2E
+p:ORF
+75d6:00c00000:0422:0001:1:0
+AMENA
+p:DIGITAL+
+1fd7:00c00000:0434:0001:1:0
+EUROSPORT
+p:CSAT
+32d7:00c00000:045d:0001:1:0
+GoTV - 28Feb05
+p:ATV+
+f1d7:00c00000:0421:0001:1:0
+TV TRWAM
+p:Astra
+1fd8:00c00000:0434:0001:1:0
+TMC
+p:CSAT
+6fd8:00c00000:042c:0001:1:0
+TVBS
+p:Chinese Channel LTD.
+75d8:00c00000:0422:0001:1:0
+TELEPIZZA
+p:DIGITAL+
+1fd9:00c00000:0434:0001:1:0
+PLANETE
+p:CSAT
+07da:00c00000:0449:0035:1:0
+NGC
+p:CANAL+
+1fdb:00c00000:0434:0001:1:0
+VOYAGE
+p:CSAT
+1fdc:00c00000:0434:0001:1:0
+LCI
+p:CSAT
+75dc:00c00000:0422:0001:1:0
+COMPRA SMS
+p:DIGITAL+
+1fdd:00c00000:0434:0001:1:0
+CANAL J
+p:CSAT
+75dd:00c00000:0422:0001:1:0
+TEST TÉCNICO
+p:DIGITAL+
+20de:00c00000:043e:0001:1:0
+KIOSQUE
+p:CSAT
+75de:00c00000:0422:0001:1:0
+TEST_CSD1
+p:DIGITAL+
+07df:00c00000:0449:0035:1:0
+Discovery
+p:CANAL+
+1fdf:00c00000:0434:0001:1:0
+MA PLANETE
+p:CSAT
+75df:00c00000:0422:0001:1:0
+TEST_CSD2
+p:DIGITAL+
+1fe0:00c00000:0434:0001:1:0
+CUISINE.TV
+p:CSAT
+6fe0:00c00000:0443:0001:1:0
+MTV2 Pop Channel
+p:MTV Networks
+75e0:00c00000:0422:0001:1:0
+TEST_CSD3
+p:DIGITAL+
+f1e0:00c00000:0421:0001:1:0
+T.TV
+p:Tele 2
+1fe1:00c00000:0434:0001:1:0
+FILLES TV
+p:CSAT
+75e1:00c00000:0422:0001:1:0
+TEST_CSD4
+p:DIGITAL+
+1fe2:00c00000:0434:0001:1:0
+TiJi
+p:CSAT
+6de2:00c00000:044d:0001:1:0
+Test-R
+p:ARD
+75e2:00c00000:0422:0001:1:0
+TEST_CSD5
+p:DIGITAL+
+2ee3:00c00000:0441:0001:1:0
+\ 5\86RTL\87 Television
+p:RTL World
+75e3:00c00000:0422:0001:1:0
+TEST_CSD6
+p:DIGITAL+
+07e4:00c00000:0449:0035:1:0
+Animal Planet
+p:CANAL+
+75e4:00c00000:0422:0001:1:0
+TEST_CSD7
+p:DIGITAL+
+75e5:00c00000:0422:0001:1:0
+TEST_CSD8
+p:DIGITAL+
+75e6:00c00000:0422:0001:1:0
+TEST_CSD9
+p:DIGITAL+
+75e7:00c00000:0422:0001:1:0
+TEST_CSD10
+p:DIGITAL+
+75e8:00c00000:0422:0001:1:0
+TEST_CSD11
+p:DIGITAL+
+07e9:00c00000:0449:0035:1:0
+Eurosport
+p:canal+
+75e9:00c00000:0422:0001:1:0
+TEST_CSD12
+p:DIGITAL+
+23ea:00c00000:044a:0001:1:0
+CDN1
+p:CSAT
+75ea:00c00000:0422:0001:1:0
+TEST_CSD13
+p:DIGITAL+
+23eb:00c00000:044a:0001:1:0
+CDN2
+p:CSAT
+6feb:00c00000:042a:0001:1:0
+MTV ESP
+p:MTV Networks
+75eb:00c00000:0422:0001:1:0
+TEST_CSD14
+p:DIGITAL+
+23ec:00c00000:044a:0001:1:0
+CDN6
+p:CSAT
+6fec:00c00000:042a:0001:1:0
+MTV F
+p:MTV Networks
+75ec:00c00000:0422:0001:1:0
+TEST_CSD15
+p:DIGITAL+
+23ed:00c00000:044a:0001:1:0
+CDN7
+p:CSAT
+6fed:00c00000:042a:0001:1:0
+MTV Central
+p:MTV Networks
+07ee:00c00000:0449:0035:1:0
+BBC Prime
+p:canal+
+23ee:00c00000:044a:0001:1:0
+CDN5
+p:CSAT
+2fee:00c00000:0458:0001:1:0
+M6 Boutique
+p:HSS
+6fee:00c00000:042a:0001:1:0
+MTV HITS
+p:
+6eef:00c00000:04b1:0001:1:0
+ARD MHP-Test
+p:ARD
+6fef:00c00000:042a:0001:1:0
+MTV Base
+p:
+6ff0:00c00000:042a:0001:1:0
+VH1
+p:
+23f1:00c00000:0452:0001:1:0
+walled garden
+p:C+
+6ff1:00c00000:042a:0001:1:0
+VH1 Classic
+p:MTV Networks
+6ff2:00c00000:042a:0001:1:0
+Nickelodeon NL
+p:MTV Networks
+07f3:00c00000:0449:0035:1:0
+Hallmark
+p:CANAL+
+6ff3:00c00000:042a:0001:1:0
+MTV 2
+p:
+23f4:00c00000:0452:0001:1:0
+ABO1
+p:IMEDIA
+2ef4:00c00000:0441:0001:1:0
+RTL2
+p:RTL World
+6ff4:00c00000:042a:0001:1:0
+NICKELODEON ESP
+p:MTV Networks
+23f5:00c00000:0452:0001:1:0
+ABO2
+p:IMEDIA
+6ff5:00c00000:042a:0001:1:0
+Service11
+p:MTV Networks
+75f5:00c00000:0422:0001:1:0
+PLAYIN'TV
+p:DIGITAL+
+23f6:00c00000:0452:0001:1:0
+testg2_1
+p:C+
+23f7:00c00000:0452:0001:1:0
+testg2_2
+p:C+
+23f8:00c00000:0452:0001:1:0
+testg2_3
+p:C+
+2ff8:00c00000:0458:0001:1:0
+LibertyTV FR
+p:LibertyTV.com
+6ff8:00c00000:042a:0001:1:0
+MTV HITS.
+p:
+6ff9:00c00000:042a:0001:1:0
+MTV Base.
+p:
+75f9:00c00000:0408:0001:1:0
+TVC INT.
+p:DIGITAL+
+23fa:00c00000:0452:0001:1:0
+MON CSAT
+p:IMEDIA
+6ffa:00c00000:042a:0001:1:0
+VH1.
+p:
+75fa:00c00000:0408:0001:1:0
+ANDALUCÍA TV
+p:DIGITAL+
+75fb:00c00000:0408:0001:1:0
+EUSKADI TV
+p:DIGITAL+
+23fc:00c00000:0452:0001:1:0
+GL CONSULTANTS.
+p:CSAT
+75fc:00c00000:0408:0001:1:0
+TM SAT/LAOTRA
+p:DIGITAL+
+02fd:00c00000:0007:0085:1:0
+iFoxKids
+p:BetaDigital
+23fd:00c00000:0452:0001:1:0
+
+p:CSAT
+6ffd:00c00000:042a:0001:1:0
+MTV 2.
+p:
+21fe:00c00000:044c:0001:1:0
+COMEDIE !
+p:CSAT
+74fe:00c00000:0420:0001:1:0
+CINEMANÍA
+p:DIGITAL+
+f1fe:00c00000:0421:0001:1:0
+ASTRA
+p:Astra
+02ff:00c00000:0007:0085:1:0
+LokalSAT
+p:BetaDigital
+21ff:00c00000:044c:0001:1:0
+13EME RUE
+p:CSAT
+74ff:00c00000:0420:0001:1:0
+CINEMANÍA 2
+p:DIGITAL+
+0803:00c00000:0449:0035:2:0
+RTL RADIO
+p:CANAL+
+7508:00c00000:0420:0001:2:0
+CADENA SER
+p:DIGITAL+
+f208:00c00000:0421:0001:2:0
+Radio Horeb
+p:Eurociel
+7509:00c00000:0420:0001:2:0
+M-80 RADIO
+p:DIGITAL+
+750a:00c00000:0420:0001:2:0
+40 PRINCIPALES
+p:DIGITAL+
+f20a:00c00000:0421:0001:2:0
+RDC
+p:Polskie Radio-Regionalna
+750b:00c00000:0420:0001:2:0
+CADENA DIAL
+p:DIGITAL+
+750c:00c00000:0420:0001:2:0
+RADIOLÉ
+p:DIGITAL+
+750d:00c00000:0420:0001:2:0
+MÁXIMA FM
+p:DIGITAL+
+f20d:00c00000:0421:0001:2:0
+Jazz Radio Berlin
+p:Deutsche Telekom AG
+750e:00c00000:0420:0001:2:0
+SINFO RADIO
+p:DIGITAL+
+f20e:00c00000:0421:0001:2:0
+Radio Caroline
+p:StreamTel net
+750f:00c00000:0420:0001:2:0
+EUSKADIRRATIA
+p:DIGITAL+
+7510:00c00000:0420:0001:2:0
+RADIO EUSKADI
+p:DIGITAL+
+7511:00c00000:0420:0001:2:0
+ANDALUCÍA RADIO
+p:DIGITAL+
+7512:00c00000:0420:0001:2:0
+CAT. CULTURA
+p:DIGITAL+
+7513:00c00000:0420:0001:2:0
+CAT. INFORM
+p:DIGITAL+
+7514:00c00000:0420:0001:2:0
+CAT. MÚSICA
+p:DIGITAL+
+7515:00c00000:0420:0001:2:0
+CAT. RADIO
+p:DIGITAL+
+0816:00c00000:0449:0035:2:0
+RVi1 (VRT)
+p:CANAL+
+081b:00c00000:0449:0035:2:0
+RVi2 (VRT)
+p:CANAL+
+2725:00c00000:0402:0001:2:0
+DW01
+p:DW
+2727:00c00000:0402:0001:2:0
+DW03
+p:Deutsche Telekom AG
+2728:00c00000:0402:0001:2:0
+DW04
+p:DW
+f22a:00c00000:0421:0001:2:0
+CFN/RFC
+p:Canadian Forces Europe
+f22b:00c00000:0421:0001:2:0
+Radio Neue Hoffnung
+p:RADIO Neue Hoffnung
+6e2f:00c00000:0431:0001:2:0
+\ 5NDR Kultur
+p:\ 5ARD
+6e30:00c00000:0431:0001:2:0
+\ 5MDR FIGARO
+p:\ 5ARD
+6e31:00c00000:0431:0001:2:0
+\ 5Fritz
+p:\ 5ARD
+6e32:00c00000:0431:0001:2:0
+\ 5MDR JUMP
+p:\ 5ARD
+6e33:00c00000:0431:0001:2:0
+\ 5MDR INFO
+p:\ 5ARD
+6e34:00c00000:0431:0001:2:0
+\ 5\86SPUTNIK
+p:\ 5ARD
+3035:00c00000:0458:0001:2:0
+CFN/RFC
+p:Canadian Forces Europe
+6e35:00c00000:0431:0001:2:0
+\ 5RADIOmultikulti
+p:\ 5ARD
+3036:00c00000:0458:0001:2:0
+La Première Sat
+p:RTBF
+6e36:00c00000:0431:0001:2:0
+\ 5SWR2
+p:\ 5ARD
+6e37:00c00000:0431:0001:2:0
+\ 5WDR 3
+p:\ 5ARD
+6e38:00c00000:0431:0001:2:0
+\ 5WDR 5
+p:\ 5ARD
+213b:00c00000:0442:0001:2:0
+CSAT RADIOS
+p:CSAT
+2140:00c00000:0442:0001:2:0
+RADIO INT 2
+p:CSAT
+2141:00c00000:0442:0001:2:0
+RADIO INT
+p:CSAT
+3341:00c00000:045b:0001:2:0
+OE1
+p:ORF
+2142:00c00000:0442:0001:2:0
+RADIO INT 3
+p:CSAT
+3342:00c00000:045b:0001:2:0
+OE1 DD
+p:ORF
+3343:00c00000:045b:0001:2:0
+OE2 W
+p:ORF
+3344:00c00000:045b:0001:2:0
+OE2 N
+p:ORF
+3345:00c00000:045b:0001:2:0
+OE2 B
+p:ORF
+3346:00c00000:045b:0001:2:0
+OE2 O
+p:ORF
+2147:00c00000:0442:0001:2:0
+FRANCE MUSIQUES
+p:CSAT
+3347:00c00000:045b:0001:2:0
+OE2 S
+p:ORF
+2148:00c00000:0442:0001:2:0
+FIP
+p:CSAT
+3348:00c00000:045b:0001:2:0
+OE2 T
+p:ORF
+2149:00c00000:0442:0001:2:0
+France INFO
+p:CSAT
+3349:00c00000:045b:0001:2:0
+OE2 V
+p:ORF
+214a:00c00000:0442:0001:2:0
+France INTER
+p:CSAT
+334a:00c00000:045b:0001:2:0
+OE2 St
+p:ORF
+214b:00c00000:0442:0001:2:0
+LA CITY RADIO
+p:CSAT
+334b:00c00000:045b:0001:2:0
+OE2 K
+p:ORF
+214c:00c00000:0442:0001:2:0
+RFI INT
+p:CSAT
+214d:00c00000:0442:0001:2:0
+RADIO CLASSIQUE
+p:CSAT
+334d:00c00000:045b:0001:2:0
+OE3
+p:ORF
+1f4e:00c00000:0449:0035:2:0
+MM
+p:CANAL+
+214e:00c00000:0442:0001:2:0
+EUROPE 1
+p:CSAT
+334e:00c00000:045b:0001:2:0
+FM4
+p:ORF
+214f:00c00000:0442:0001:2:0
+RMC
+p:CSAT
+334f:00c00000:045b:0001:2:0
+ROI Wien
+p:ORF
+2150:00c00000:0442:0001:2:0
+RTL
+p:CSAT
+2151:00c00000:0442:0001:2:0
+RIRE ET CHANSONS
+p:CSAT
+2153:00c00000:0442:0001:2:0
+M FM
+p:CSAT
+2154:00c00000:0442:0001:2:0
+TSF
+p:CSAT
+3354:00c00000:045b:0001:2:0
+RADIO MARIA
+p:Radio Maria Österreich
+2155:00c00000:0442:0001:2:0
+NOSTALGIE
+p:CSAT
+2156:00c00000:0442:0001:2:0
+BFM
+p:CSAT
+2157:00c00000:0442:0001:2:0
+PARIS JAZZ
+p:CSAT
+2158:00c00000:0442:0001:2:0
+NRJ
+p:CSAT
+2159:00c00000:0442:0001:2:0
+EUROPE 2
+p:CSAT
+215a:00c00000:0442:0001:2:0
+RTL 2
+p:CSAT
+215b:00c00000:0442:0001:2:0
+SKYROCK
+p:CSAT
+215c:00c00000:0442:0001:2:0
+FUN RADIO
+p:CSAT
+215d:00c00000:0442:0001:2:0
+LE MOUV
+p:CSAT
+215e:00c00000:0442:0001:2:0
+RADIO NOVA
+p:CSAT
+215f:00c00000:0442:0001:2:0
+RADIO FG
+p:CSAT
+2160:00c00000:0442:0001:2:0
+VIBRATION
+p:CSAT
+2161:00c00000:0442:0001:2:0
+CONTACT FM
+p:CSAT
+2162:00c00000:0442:0001:2:0
+RADIO LATINA
+p:CSAT
+2163:00c00000:0442:0001:2:0
+RFM
+p:CSAT
+2164:00c00000:0442:0001:2:0
+CHERIE FM
+p:CSAT
+2165:00c00000:0442:0001:2:0
+ALOUETTE
+p:CSAT
+2166:00c00000:0442:0001:2:0
+VOLTAGE
+p:CSAT
+2167:00c00000:0442:0001:2:0
+OUI FM
+p:CSAT
+2168:00c00000:0442:0001:2:0
+ADO
+p:CSAT
+2169:00c00000:0442:0001:2:0
+COULEUR 3
+p:CSAT
+216a:00c00000:0442:0001:2:0
+RFI MUSIQUE
+p:CSAT
+316a:00c00000:0459:0001:2:0
+Radio Maria
+p:T-Systems
+216b:00c00000:0442:0001:2:0
+RADIO NOTRE-DAME
+p:CSAT
+316b:00c00000:0459:0001:2:0
+Inselradio
+p:T-Systems
+6f6b:00c00000:042c:0001:2:0
+CNN Radio
+p:CNN
+216c:00c00000:0442:0001:2:0
+RADIO ALPHA
+p:CSAT
+6d6c:00c00000:0437:0001:2:0
+\ 5DLR-Berlin
+p:\ 5ZDFvision
+216d:00c00000:0442:0001:2:0
+RCJ / SHALOM
+p:CSAT
+6d6d:00c00000:0437:0001:2:0
+\ 5DLF-Köln
+p:\ 5ZDFvision
+216e:00c00000:0442:0001:2:0
+BEUR FM
+p:CSAT
+216f:00c00000:0442:0001:2:0
+MEDIA TROPICAL
+p:CSAT
+2170:00c00000:0442:0001:2:0
+AFRICA N1
+p:CSAT
+2171:00c00000:0442:0001:2:0
+RCI SAT
+p:CSAT
+6d71:00c00000:0437:0001:2:0
+\ 5Österreich 1
+p:\ 5ZDFvision
+2172:00c00000:0442:0001:2:0
+MEDI 1
+p:CSAT
+2173:00c00000:0442:0001:2:0
+France CULTURE
+p:CSAT
+2174:00c00000:0442:0001:2:0
+WRN
+p:CSAT
+3174:00c00000:0459:0001:2:0
+HIT RADIO FFH
+p:T-Systems
+2175:00c00000:0442:0001:2:0
+RADIO DU VOYAGE
+p:CSAT
+3175:00c00000:0459:0001:2:0
+planet radio
+p:T-Systems
+2176:00c00000:0442:0001:2:0
+PARIS LIVE RADIO
+p:CSAT
+3176:00c00000:0459:0001:2:0
+harmony fm
+p:T-Systems
+4e85:00c00000:043a:0001:2:0
+Popular Classical
+p:XtraMusic
+4e86:00c00000:043a:0001:2:0
+Symphonic
+p:XtraMusic
+4e87:00c00000:043a:0001:2:0
+Opera
+p:XtraMusic
+4e88:00c00000:043a:0001:2:0
+Modern Country
+p:XtraMusic
+4e89:00c00000:043a:0001:2:0
+Traditional Country
+p:XtraMusic
+4e8a:00c00000:043a:0001:2:0
+Beautiful Instruments
+p:XtraMusic
+4e8b:00c00000:043a:0001:2:0
+New Age
+p:XtraMusic
+4e8c:00c00000:043a:0001:2:0
+Euro Hits
+p:XtraMusic
+4e8d:00c00000:043a:0001:2:0
+French Hits
+p:XtraMusic
+4e8e:00c00000:043a:0001:2:0
+German Folk
+p:XtraMusic
+4e8f:00c00000:043a:0001:2:0
+German Rock
+p:XtraMusic
+4e90:00c00000:043a:0001:2:0
+German Schlager
+p:XtraMusic
+0091:00c00000:0002:0085:2:0
+BLUES
+p:PREMIERE,C:1702,C:1722,C:1801
+4e91:00c00000:043a:0001:2:0
+German Hits
+p:XtraMusic
+0092:00c00000:0002:0085:2:0
+\86DINNER\87 PARTY
+p:PREMIERE,C:1702,C:1722,C:1801
+4e92:00c00000:043a:0001:2:0
+Italian Contemporary
+p:XtraMusic
+0093:00c00000:0002:0085:2:0
+KLASSIK
+p:PREMIERE,C:1702,C:1722,C:1801
+4e93:00c00000:043a:0001:2:0
+UK Hits
+p:XtraMusic
+0094:00c00000:0002:0085:2:0
+JAZZ
+p:PREMIERE,C:1702,C:1722,C:1801
+4e94:00c00000:043a:0001:2:0
+Indian Pop
+p:XtraMusic
+0095:00c00000:0002:0085:2:0
+COUNTRY
+p:PREMIERE,C:1702,C:1722,C:1801
+4e95:00c00000:043a:0001:2:0
+Turkish Pop
+p:XtraMusic
+0096:00c00000:0002:0085:2:0
+UK HITS
+p:PREMIERE,C:1702,C:1722,C:1801
+4e96:00c00000:043a:0001:2:0
+Dutch Hits
+p:XtraMusic
+0097:00c00000:0002:0085:2:0
+\86D\87EU\86T\87SCHE\86 CHARTS\87
+p:PREMIERE,C:1702,C:1722,C:1801
+4e97:00c00000:043a:0001:2:0
+Acid Jazz
+p:XtraMusic
+0098:00c00000:0002:0085:2:0
+\86HARD\87 \86ROCK\87
+p:PREMIERE,C:1702,C:1722,C:1801
+4e98:00c00000:043a:0001:2:0
+Contemporary Jazz
+p:XtraMusic
+0099:00c00000:0002:0085:2:0
+\86SOUL CL\87ASSICS
+p:PREMIERE,C:1702,C:1722,C:1801
+4e99:00c00000:043a:0001:2:0
+Classic Jazz
+p:XtraMusic
+009a:00c00000:0002:0085:2:0
+\86A\87LTERNATIVE\86 ROCK\87
+p:PREMIERE,C:1702,C:1722,C:1801
+4e9a:00c00000:043a:0001:2:0
+Smooth Jazz
+p:XtraMusic
+009b:00c00000:0002:0085:2:0
+\86SOFT\87 \86ROCK\87
+p:PREMIERE,C:1702,C:1722,C:1801
+4e9b:00c00000:043a:0001:2:0
+Brazil Carnival
+p:XtraMusic
+009c:00c00000:0002:0085:2:0
+\86LOVE\87 \86SONG\87S
+p:PREMIERE,C:1702,C:1722,C:1801
+4e9c:00c00000:043a:0001:2:0
+Latin Contemporary
+p:XtraMusic
+009d:00c00000:0002:0085:2:0
+REGGAE
+p:PREMIERE,C:1702,C:1722,C:1801
+4e9d:00c00000:043a:0001:2:0
+Salsa
+p:XtraMusic
+009e:00c00000:0002:0085:2:0
+\86SPECIAL\87 EVENT
+p:PREMIERE,C:1702,C:1722,C:1801
+4e9e:00c00000:043a:0001:2:0
+Rock en Espanol
+p:XtraMusic
+009f:00c00000:0002:0085:2:0
+\86R&B\87/HIP HOP
+p:PREMIERE,C:1702,C:1722,C:1801
+4e9f:00c00000:043a:0001:2:0
+Rock n Roll Oldies
+p:XtraMusic
+00a0:00c00000:0007:0085:2:0
+\86ROCK ANT\87ENNE
+p:BetaDigital
+4ea0:00c00000:043a:0001:2:0
+70's Hits
+p:XtraMusic
+00a1:00c00000:0007:0085:2:0
+\86ERF\87 Radio
+p:BetaDigital
+4ea1:00c00000:043a:0001:2:0
+80's Hits
+p:XtraMusic
+00a2:00c00000:0002:0085:2:0
+SCHLAGER
+p:PREMIERE,C:1702,C:1722,C:1801
+4ea2:00c00000:043a:0001:2:0
+90's Hits
+p:XtraMusic
+00a3:00c00000:0002:0085:2:0
+\86CL\87ASSIC\86 ROCK\87
+p:PREMIERE,C:1702,C:1722,C:1801
+4ea3:00c00000:043a:0001:2:0
+Great Standards
+p:XtraMusic
+00a4:00c00000:0002:0085:2:0
+\86N\87EW\86 COUNT\87RY
+p:PREMIERE,C:1702,C:1722,C:1801
+4ea4:00c00000:043a:0001:2:0
+Big Band Swing
+p:XtraMusic
+00a5:00c00000:0002:0085:2:0
+DANCE
+p:PREMIERE,C:1702,C:1722,C:1801
+4ea5:00c00000:043a:0001:2:0
+Classic Rock
+p:XtraMusic
+00a6:00c00000:0002:0085:2:0
+70ER/80ER
+p:PREMIERE,C:1702,C:1722,C:1801
+4ea6:00c00000:043a:0001:2:0
+Metal
+p:XtraMusic
+00a7:00c00000:0002:0085:2:0
+50ER/60ER
+p:PREMIERE,C:1702,C:1722,C:1801
+13a7:00c00000:0455:0035:2:0
+NLR1
+p:CANAL+
+4ea7:00c00000:043a:0001:2:0
+Alternative
+p:XtraMusic
+13a8:00c00000:0455:0035:2:0
+NLR2
+p:CANAL+
+4ea8:00c00000:043a:0001:2:0
+Dance
+p:XtraMusic
+00a9:00c00000:0007:0085:2:0
+\86sunshine\87 live
+p:BetaDigital
+13a9:00c00000:0455:0035:2:0
+NLR3
+p:CANAL+
+4ea9:00c00000:043a:0001:2:0
+Retro Dance
+p:XtraMusic
+00aa:00c00000:0007:0085:2:0
+\86ANTENNE\87 BAYERN
+p:BetaDigital
+13aa:00c00000:0455:0035:2:0
+NLR4
+p:CANAL+
+4eaa:00c00000:043a:0001:2:0
+Trends
+p:XtraMusic
+00ab:00c00000:0005:0085:2:0
+domradio
+p:BetaDigital
+13ab:00c00000:0455:0035:2:0
+AM747
+p:CANAL+
+4eab:00c00000:043a:0001:2:0
+Contemporary Pop
+p:XtraMusic
+4eac:00c00000:043a:0001:2:0
+Hottest Hits
+p:XtraMusic
+4ead:00c00000:043a:0001:2:0
+Love Songs
+p:XtraMusic
+4eae:00c00000:043a:0001:2:0
+Power Hits
+p:XtraMusic
+4eaf:00c00000:043a:0001:2:0
+Blues
+p:XtraMusic
+4eb0:00c00000:043a:0001:2:0
+Classic R & B
+p:XtraMusic
+4eb1:00c00000:043a:0001:2:0
+R & B Hip Hop
+p:XtraMusic
+4eb2:00c00000:043a:0001:2:0
+Reggae
+p:XtraMusic
+4eb3:00c00000:043a:0001:2:0
+Rap
+p:XtraMusic
+0fb4:00c00000:0451:0035:2:0
+YAM FM
+p:Canal+
+13ba:00c00000:0455:0035:2:0
+Yorin FM
+p:CANAL+
+0fbe:00c00000:0451:0035:2:0
+RTL FM
+p:canal+
+13bf:00c00000:0455:0035:2:0
+KINK FM
+p:CANAL+
+0fc3:00c00000:0451:0035:2:0
+FunX     .
+p:CANAL+
+13c4:00c00000:0455:0035:2:0
+RNW1
+p:CANAL+
+13c5:00c00000:0455:0035:2:0
+RNW2
+p:CANAL+
+13c6:00c00000:0455:0035:2:0
+RNW3
+p:CANAL+
+13ce:00c00000:0455:0035:2:0
+Sky Radio
+p:CANAL+
+13cf:00c00000:0455:0035:2:0
+Juize.FM
+p:CANAL+
+13d0:00c00000:0455:0035:2:0
+Radio538
+p:CANAL+
+13d8:00c00000:0455:0035:2:0
+Concertzender
+p:CANAL+
+6dd8:00c00000:044d:0001:2:0
+Bayern 4 Klassik
+p:ARD
+f1d8:00c00000:0421:0001:2:0
+Radio Maryja
+p:Astra
+6dd9:00c00000:044d:0001:2:0
+B5 aktuell
+p:ARD
+6dda:00c00000:044d:0001:2:0
+hr-info
+p:ARD
+6ddb:00c00000:044d:0001:2:0
+hr2
+p:ARD
+6ddc:00c00000:044d:0001:2:0
+hr-klassik
+p:ARD
+13dd:00c00000:0455:0035:2:0
+Radio10Gold
+p:Canal+
+32dd:00c00000:045d:0001:2:0
+OE1 - 28Feb05
+p:ORF
+6ddd:00c00000:044d:0001:2:0
+YOU FM
+p:ARD
+6dde:00c00000:044d:0001:2:0
+Bayern 1
+p:ARD
+32df:00c00000:045d:0001:2:0
+OE2 W - 28Feb05
+p:ORF
+6ddf:00c00000:044d:0001:2:0
+NDR Info
+p:ARD
+32e0:00c00000:045d:0001:2:0
+OE2 N - 28Feb05
+p:ORF
+6de0:00c00000:044d:0001:2:0
+NordwestRadio
+p:ARD
+32e1:00c00000:045d:0001:2:0
+OE2 B - 28Feb05
+p:ORF
+6de1:00c00000:044d:0001:2:0
+SR 1
+p:ARD
+32e2:00c00000:045d:0001:2:0
+OE2 O - 28Feb05
+p:ORF
+32e3:00c00000:045d:0001:2:0
+OE2 S - 28Feb05
+p:ORF
+32e4:00c00000:045d:0001:2:0
+OE2 T - 28Feb05
+p:ORF
+32e5:00c00000:045d:0001:2:0
+OE2 V - 28Feb05
+p:ORF
+32e6:00c00000:045d:0001:2:0
+OE2 St - 28Feb05
+p:ORF
+13e7:00c00000:0455:0035:2:0
+Radio Veronica
+p:CANAL+
+32e7:00c00000:045d:0001:2:0
+OE2 K - 28Feb05
+p:ORF
+32e9:00c00000:045d:0001:2:0
+OE3 - 28Feb05
+p:ORF
+32ea:00c00000:045d:0001:2:0
+FM4 - 28Feb05
+p:ORF
+32eb:00c00000:045d:0001:2:0
+ROI Wien - 28Feb05
+p:ORF
+6eed:00c00000:04b1:0001:2:0
+MEHRKANALTEST
+p:ARD
+6eee:00c00000:04b1:0001:2:0
+Mehrkanaltest
+p:ARD
+0c12:00c00000:045c:0001:12:0
+MMS01C
+p:SES Multimedia SA
+0c13:00c00000:0457:0001:12:0
+MMS02C
+p:SES Astra
+0c14:00c00000:041d:0001:12:0
+MMS03C
+p:Ses-Astra
+1d1b:00c00000:04f9:0001:12:0
+Net sys 01
+p:Netsystem
+1d1c:00c00000:04f9:0001:12:0
+AliceSat
+p:Netsystem
+1d1d:00c00000:04f9:0001:12:0
+Net sys 03
+p:Netsystem
+1d1e:00c00000:04f9:0001:12:0
+Net sys 04
+p:Netsystem
+1d1f:00c00000:04f9:0001:12:0
+Net sys 05
+p:Netsystem
+1d20:00c00000:04f9:0001:12:0
+Net sys 06
+p:Netsystem
+1d21:00c00000:04f9:0001:12:0
+Net sys 07
+p:Netsystem
+1c22:00c00000:0457:0001:12:0
+Lorcom
+p:SES Astra
+1d22:00c00000:04f9:0001:12:0
+Net sys 08
+p:Netsystem
+1c23:00c00000:0457:0001:12:0
+Euro-Service 1
+p:SES Astra
+1d23:00c00000:04f9:0001:12:0
+Net sys 09
+p:Netsystem
+1c24:00c00000:0457:0001:12:0
+Icomera
+p:OpenMux IP Gateway
+1d24:00c00000:04f9:0001:12:0
+Net sys 10
+p:Netsystem
+1c25:00c00000:0457:0001:12:0
+Demos Streams
+p:SES Astra
+1c27:00c00000:0457:0001:12:0
+MFTS Services
+p:SES Astra
+1c28:00c00000:0457:0001:12:0
+AN PTU-VS
+p:SES Astra
+1c29:00c00000:0457:0001:12:0
+AN PTU
+p:SES Astra
+1c32:00c00000:0457:0001:12:0
+CVCE
+p:SES Astra
+1c38:00c00000:0457:0001:12:0
+STB Skardin
+p:SES Astra
+1c3d:00c00000:0457:0001:12:0
+ASTON DOWNLOAD
+p:ASTON
+1c41:00c00000:0457:0001:12:0
+STB Won Ik
+p:SES Multimeda SA
+1c42:00c00000:0457:0001:12:0
+STB Loewe
+p:SES Astra
+3143:00c00000:0459:0001:12:0
+Wartezimmer TV
+p:T-Systems
+3145:00c00000:0459:0001:12:0
+RAPS
+p:T-Systems
+3149:00c00000:0459:0001:12:0
+b.i.s. AG
+p:T-Systems
+314c:00c00000:0459:0001:12:0
+InfomedTV
+p:T-Systems
+1c50:00c00000:0457:0001:12:0
+tvtv Digital
+p:SES Astra
+1c51:00c00000:0457:0001:12:0
+STB Bang-Olufsen
+p:SES Astra
+1c53:00c00000:0457:0001:12:0
+STB Pesi
+p:SES Astra
+1c54:00c00000:0457:0001:12:0
+FS Ecovision
+p:SES Astra
+1c57:00c00000:0457:0001:12:0
+Casablanca
+p:SES Astra
+6e5a:00c00000:0431:0001:12:0
+\ 5ARD-MHP-Data
+p:\ 5ARD
+185c:00c00000:0457:0001:12:0
+Proxy_txp2
+p:ses astra
+185d:00c00000:0457:0001:12:0
+VPN TXP-2
+p:ses astra
+1c5e:00c00000:0457:0001:12:0
+STB Seodu
+p:SES Astra
+1c60:00c00000:0457:0001:12:0
+STB Comag1
+p:SES Astra
+1c63:00c00000:0457:0001:12:0
+STB Panasonic
+p:SES Astra
+1c66:00c00000:0457:0001:12:0
+Datendienst T1M
+p:SES Astra
+1c6c:00c00000:0457:0001:12:0
+Datacargo
+p:SES Astra
+1c71:00c00000:045c:0001:12:0
+Canal Net
+p:OpenMux IP Gateway
+1773:00c00000:0460:0019:12:0
+MPE FL1 Service
+p:SES Astra
+1c73:00c00000:0457:0001:12:0
+VS Unique Promo
+p:SES-Astra
+1d74:00c00000:03fa:0001:12:0
+Proxy GAC 1018
+p:Ses-Astra
+0f77:00c00000:0005:0085:12:0
+BData6
+p:BetaDigital
+0f79:00c00000:0005:0085:12:0
+moreTV
+p:BetaDigital
+1d79:00c00000:03fa:0001:12:0
+Proxy_26
+p:Ses-Astra
+1e79:00c00000:043c:0001:12:0
+RBBS 1084 Chn1
+p:Ses Astra
+1c7a:00c00000:0457:0001:12:0
+FWD PATH NF
+p:SES Multimedia S.A.
+1e7a:00c00000:043c:0001:12:0
+RBBS 1084 Inst
+p:Ses Astra
+1d7c:00c00000:03fa:0001:12:0
+Proxy_12
+p:Ses-Astra
+1d7f:00c00000:041d:0001:12:0
+TDSL Proxy 1
+p:Ses-Astra
+0f80:00c00000:0002:0085:12:0
+
+p:betaresearch
+1d80:00c00000:041d:0001:12:0
+DSL-MCST_02
+p:Ses-Astra
+1d81:00c00000:041d:0001:12:0
+T-DSL VPN 1
+p:Ses-Astra
+0f82:00c00000:0021:0085:12:0
+BData1
+p:BetaDigital
+1d82:00c00000:041d:0001:12:0
+Proxy_02
+p:Ses-Astra
+0f83:00c00000:0007:0085:12:0
+BData2
+p:BetaDigital
+1d84:00c00000:041d:0001:12:0
+Sat@Once
+p:SES Astra
+0f86:00c00000:0007:0085:12:0
+BData3
+p:BetaDigital
+0f87:00c00000:0007:0085:12:0
+BData4
+p:BetaDigital
+0190:00c00000:0005:0085:12:0
+moreTVtest1
+p:
+3390:00c00000:045d:0001:12:0
+AlphaCrypt
+p:ORF
+0191:00c00000:0005:0085:12:0
+moreTVtest2
+p:
+0192:00c00000:0005:0085:12:0
+moreTVtest3
+p:
+0193:00c00000:0005:0085:12:0
+moreTVtest4
+p:
+0194:00c00000:0005:0085:12:0
+moreTVtest5
+p:
+0195:00c00000:0005:0085:12:0
+moreTVtest6
+p:
+0196:00c00000:0005:0085:12:0
+moreTVtest7
+p:
+0197:00c00000:0005:0085:12:0
+moreTVtest8
+p:
+0198:00c00000:0005:0085:12:0
+moreTVtest9
+p:
+0199:00c00000:0005:0085:12:0
+moreTVtest10
+p:
+019a:00c00000:0005:0085:12:0
+moreTVtest11
+p:
+1da0:00c00000:041d:0001:12:0
+MediaSat
+p:Ses-Astra
+0dac:00c00000:0002:0085:12:0
+CPT_TP69
+p:PREMIERE
+0dad:00c00000:0001:0085:12:0
+CPT_TP83
+p:PREMIERE
+0dae:00c00000:0003:0085:12:0
+CPT_TP65
+p:PREMIERE
+0daf:00c00000:0004:0085:12:0
+CPT_TP81
+p:PREMIERE
+0db0:00c00000:0011:0085:12:0
+CPT_TP67
+p:PREMIERE
+1cb7:00c00000:045f:0001:12:0
+HSI
+p:SES Astra
+0bb8:00c00000:045c:0001:12:0
+MMS1116A
+p:SES Multimedia SA
+1cb8:00c00000:045f:0001:12:0
+Zucchetti
+p:SES Astra
+1cb9:00c00000:045f:0001:12:0
+Demo
+p:SES Astra
+1edc:00c00000:041d:0001:12:0
+INT
+p:SES ASTRA (An SES GLOBAL Company)
+1edd:00c00000:0453:0001:12:0
+INT_1107
+p:SES ASTRA 
+1cdf:00c00000:045f:0001:12:0
+SkyData
+p:SES Astra
+1ce8:00c00000:0453:0001:12:0
+Proxy Global AC 1107
+p:OpenMux IP Gateway
+1ce9:00c00000:0453:0001:12:0
+Servisys
+p:OpenMux IP Gateway
+1cea:00c00000:0453:0001:12:0
+ONET
+p:OpenMux IP Gateway
+1ceb:00c00000:0453:0001:12:0
+TVN24
+p:OpenMux IP Gateway
+1cec:00c00000:0453:0001:12:0
+sat_speed
+p:OpenMux IP Gateway
+1ced:00c00000:0453:0001:12:0
+EasyNet
+p:OpenMux IP Gateway
+1cee:00c00000:0453:0001:12:0
+Filiago
+p:OpenMux IP Gateway
+1cef:00c00000:0453:0001:12:0
+Proxy_19
+p:OpenMux IP Gateway
+1cf0:00c00000:0453:0001:12:0
+NetupSat
+p:OpenMux IP Gateway
+1cf4:00c00000:0453:0001:12:0
+File Push
+p:SES Astra
+1cf5:00c00000:0453:0001:12:0
+MT Tests
+p:OpenMux IP Gateway
+1cf6:00c00000:0453:0001:12:0
+IP4 Proxy
+p:OpenMux IP Gateway
+1cf7:00c00000:0453:0001:12:0
+EntrySat
+p:OpenMux IP Gateway
+1cf8:00c00000:0453:0001:12:0
+Sharp & Strong
+p:OpenMux IP Gateway
+1cfc:00c00000:0453:0001:12:0
+SGI
+p:SES Astra
+1771:00c00000:0460:0019:14:0
+RCS FL1 Service
+p:ASTRA
+7404:00c00000:044e:0001:128:0
+ASTRA HD
+p:Ses-Astra
+1c2a:00c00000:0457:0001:128:0
+STB Handan
+p:SES Astra
+1c2b:00c00000:0457:0001:128:0
+STB Hyundai
+p:SES Astra
+1c3a:00c00000:0457:0001:128:0
+STB Philips
+p:SES Astra
+1c3b:00c00000:0457:0001:128:0
+STB Opentech
+p:SES Astra
+1c48:00c00000:0457:0001:128:0
+STB Sony
+p:SES Multimedia SA
+1c49:00c00000:0457:0001:128:0
+STB GSS
+p:SES Astra
+1c4b:00c00000:0457:0001:128:0
+STB Inverto
+p:SES Astra
+1c4f:00c00000:0457:0001:128:0
+Topfield
+p:SES Astra
+1c58:00c00000:0457:0001:128:0
+GRUNDIG DVB
+p:SES Astra
+1c5b:00c00000:0457:0001:128:0
+Opentech
+p:SES Astra
+1c5c:00c00000:0457:0001:128:0
+SKYMASTER1
+p:SES Astra
+1c5d:00c00000:0457:0001:128:0
+STB DMT
+p:SES Astra
+1c5f:00c00000:0457:0001:128:0
+SKYMASTER2
+p:SES Astra
+1c65:00c00000:0457:0001:128:0
+STB Homecast
+p:SES Astra
+1c74:00c00000:0457:0001:128:0
+STB Eycos
+p:SES Astra
+0bba:00c00000:0457:0001:128:0
+MMS1111A
+p:SES Astra
+000d:00c00000:0457:0001:129:0
+ASTRA SDT
+p:ASTRA
+5014:00c00000:045c:0001:129:0
+ASTRA-NET GEN1
+p:ESM
+1c21:00c00000:045c:0001:129:0
+ASTRA NET Service 1
+p:SES Multimedia SA
+1c2e:00c00000:045c:0001:129:0
+Intersat
+p:SES Multimedia SA
+0065:00c00000:045c:0001:129:0
+Nokia SW Update1
+p:NOKIA
+0071:00c00000:045c:0001:129:0
+Nokia SW Update2
+p:SES Multimedia SA
+007a:00c00000:045c:0001:129:0
+Samsung2
+p:Samsung
+33a4:00c00000:045d:0001:129:0
+VESTEL OAD2
+p:ORF
+33ae:00c00000:045d:0001:129:0
+VESTEL DOWNLOAD
+p:ORF
+00e1:00c00000:0447:0001:129:0
+PHILIPS DOWNLOAD 1.1
+p:WIZJA 1
+00e2:00c00000:0447:0001:129:0
+PHILIPS DOWNLOAD 1.2
+p:UPC DIRECT
+0066:00c00000:045c:0001:130:0
+HUMAX DOWNLOAD SVC
+p:Humax
+1c70:00c00000:045c:0001:130:0
+Icomera
+p:NSAB
+1774:00c00000:0460:0019:130:0
+MMT FL1 Service
+p:ASTRA
+1c3f:00c00000:0457:0001:144:0
+THOMSON download
+p:SES Astra
+1c83:00c00000:0457:0001:170:0
+Kathrein Download
+p:SES Astra
+1c3c:00c00000:0457:0001:171:0
+STB Radix
+p:RADIXdownload
+1c40:00c00000:0457:0001:171:0
+STB SMEL
+p:SES Multimedia
+1c43:00c00000:0457:0001:171:0
+STB Echostar
+p:SES Astra
+1c44:00c00000:0457:0001:171:0
+STB Grob
+p:SES Astra
+1c46:00c00000:0457:0001:171:0
+STB Samsung Co.
+p:SES Astra
+1c4e:00c00000:0457:0001:171:0
+STB Aston2
+p:ASTON
+006a:00c00000:045c:0001:171:0
+GALAXIS DOWNLOAD
+p:Astra
+006b:00c00000:045c:0001:171:0
+FORCE DOWNLOAD
+p:Astra
+006c:00c00000:045c:0001:171:0
+SEMCO Download
+p:Astra
+006e:00c00000:045c:0001:171:0
+STB Galaxis 2
+p:Astra
+0070:00c00000:045c:0001:171:0
+STB Technisat
+p:SES Multimedia SA
+0a82:00c00000:0004:0085:178:0
+Videotext
+p:BetaResearch
+0a94:00c00000:0011:0085:178:0
+TM V1.0
+p:Premiere World,C:1702,C:1722,C:1801
+0f84:00c00000:0011:0085:179:0
+VCR-Setup
+p:BetaResearch
+0f85:00c00000:0011:0085:179:0
+Modem-Setup
+p:BetaResearch
+23f0:00c00000:0452:0001:192:0
+CODE DOWN1
+p:C+
+2007:00c00000:0434:0001:193:0
+DATA SYSTEM\8676\87
+p:CSAT
+2327:00c00000:045a:0001:193:0
+DATASYSTEM \86114\87
+p:CSAT
+2133:00c00000:043e:0001:193:0
+DATA SYSTEM[86]
+p:CSAT
+233c:00c00000:0400:0001:193:0
+DATASYSTEMS TR 24
+p:CANALSATELLITE
+2453:00c00000:0452:0001:193:0
+DATA SYS
+p:test
+1b58:00c00000:03fc:0001:193:0
+DATA SYSTEM
+p:CSAT
+225f:00c00000:044c:0001:193:0
+DATA SYSTEM[100]
+p:CSAT
+206b:00c00000:0430:0001:193:0
+DATA SYSTEM[72]
+p:CSAT
+6f71:00c00000:042c:0001:193:0
+DATA_SYS_68
+p:DT CSAT
+2773:00c00000:0402:0001:193:0
+DATA SYSTEM
+p:CSAT
+0c84:00c00000:0444:0001:193:0
+NDS_DATA
+p:Canal Satellite
+2197:00c00000:0442:0001:193:0
+DATA SYSTEM[90]
+p:CSAT
+1fa3:00c00000:042e:0001:193:0
+DATA SYSTEM[70]
+p:CSAT
+24b7:00c00000:0456:0001:193:0
+DATASYSTEM 110
+p:CSAT
+22c3:00c00000:0438:0001:193:0
+DATA SYSTEM\8680\87
+p:CSAT
+42cb:00c00000:0446:0001:193:0
+DATA SYSTEM TR94
+p:AB SAT
+20cf:00c00000:0432:0001:193:0
+DATA SYSTEM\8674\87
+p:CSAT
+6fea:00c00000:042a:0001:193:0
+DATA_SYSTEM_TR_66
+p:MTV Networks
+23ef:00c00000:044a:0001:193:0
+DATA SYSTEM[98]
+p:C+
+21fb:00c00000:0448:0001:193:0
+DATA SYSTEM[96]
+p:CSAT
+2143:00c00000:0442:0001:195:0
+KIOSQUE 13
+p:CSAT
+2144:00c00000:0442:0001:195:0
+OM'TV
+p:CSAT
+2263:00c00000:0438:0001:195:0
+CANAL EVENEMENT
+p:CSAT
+2266:00c00000:0438:0001:195:0
+
+p:CSAT
+2269:00c00000:0438:0001:195:0
+KIOSQUE 1
+p:CSAT
+226a:00c00000:0438:0001:195:0
+KIOSQUE
+p:CSAT
+226b:00c00000:0438:0001:195:0
+KIOSQUE 11
+p:CSAT
+226c:00c00000:0438:0001:195:0
+ESPACE KIOSQUE
+p:CSAT
+20d2:00c00000:043e:0001:195:0
+KIOSQUE 2
+p:CSAT
+20d3:00c00000:043e:0001:195:0
+KIOSQUE 3
+p:CSAT
+20d4:00c00000:043e:0001:195:0
+KIOSQUE 4
+p:CSAT
+20d5:00c00000:043e:0001:195:0
+KIOSQUE 5
+p:CSAT
+20d6:00c00000:043e:0001:195:0
+KIOSQUE 6
+p:CSAT
+20d7:00c00000:043e:0001:195:0
+KIOSQUE 7
+p:CSAT
+20d8:00c00000:043e:0001:195:0
+KIOSQUE 8
+p:CSAT
+20d9:00c00000:043e:0001:195:0
+KIOSQUE 9
+p:CSAT
+20da:00c00000:043e:0001:195:0
+KIOSQUE 10
+p:CSAT
+20db:00c00000:043e:0001:195:0
+KIOSQUE 14
+p:CSAT
+20dc:00c00000:043e:0001:195:0
+KIOSQUE 15
+p:CSAT
+20dd:00c00000:043e:0001:195:0
+KIOSQUE 12
+p:CSAT
+23f2:00c00000:0452:0001:195:0
+PPV1
+p:IMEDIA
+23f3:00c00000:0452:0001:195:0
+PPV2
+p:IMEDIA
+23f9:00c00000:0452:0001:195:0
+PPV3
+p:IMEDIA
+23fb:00c00000:0452:0001:195:0
+KIOSQUE
+p:IMEDIA
+2012:00c00000:0430:0001:197:0
+PMU sur Canal+
+p:CSAT
+219c:00c00000:0448:0001:197:0
+MOSA 2
+p:CSAT
+219d:00c00000:0448:0001:197:0
+MOSA 3
+p:CSAT
+21a6:00c00000:0448:0001:197:0
+MOSA 4
+p:CSAT
+23c0:00c00000:044a:0001:197:0
+DT3
+p:IMEDIA
+213d:00c00000:0442:0001:198:0
+CANALSAT RADIOS
+p:CSAT
+213e:00c00000:0442:0001:198:0
+RADIOS 2
+p:CSAT
+213f:00c00000:0442:0001:198:0
+RADIOS 3
+p:CSAT
+2146:00c00000:0442:0001:198:0
+RF
+p:CSAT
+end
+Have a lot of bugs!
diff --git a/lib/base/connection.cpp b/lib/base/connection.cpp
new file mode 100644 (file)
index 0000000..f6a398c
--- /dev/null
@@ -0,0 +1,5 @@
+#include <connection.h>
+
+DEFINE_REF(eConnection);
+
+
index 810aba0..fe4bcc7 100644 (file)
@@ -27,6 +27,52 @@ eDVBService &eDVBService::operator=(const eDVBService &s)
        return *this;
 }
 
        return *this;
 }
 
+RESULT eDVBService::getName(const eServiceReference &ref, std::string &name)
+{
+       name = m_service_name;
+}
+
+int eDVBService::checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQuery &query)
+{
+       int res = 0;
+       switch (query.m_type)
+       {
+       case eDVBChannelQuery::tName:
+               res = m_service_name.find(query.m_string) != std::string::npos;
+               break;
+       case eDVBChannelQuery::tProvider:
+               res = m_provider_name.find(query.m_string) != std::string::npos;
+               break;
+       case eDVBChannelQuery::tType:
+               res = ref.getServiceType() == query.m_int;
+               break;
+       case eDVBChannelQuery::tBouquet:
+               res = 0;
+               break;
+       case eDVBChannelQuery::tSatellitePosition:
+               res = (ref.getDVBNamespace().get() >> 16) == query.m_int;
+               break;
+       case eDVBChannelQuery::tChannelID:
+       {
+               eDVBChannelID chid;
+               ref.getChannelID(chid);
+               res = chid == query.m_channelid;
+               break;
+       }
+       case eDVBChannelQuery::tAND:
+               res = checkFilter(ref, *query.m_p1) && checkFilter(ref, *query.m_p2);
+               break;
+       case eDVBChannelQuery::tOR:
+               res = checkFilter(ref, *query.m_p1) || checkFilter(ref, *query.m_p2);
+               break;
+       }
+
+       if (query.m_inverse)
+               return !res;
+       else
+               return res;
+}
+
 DEFINE_REF(eDVBDB);
 
 eDVBDB::eDVBDB()
 DEFINE_REF(eDVBDB);
 
 eDVBDB::eDVBDB()
@@ -282,3 +328,42 @@ RESULT eDVBDB::getService(const eServiceReferenceDVB &reference, ePtr<eDVBServic
        return 0;
 }
 
        return 0;
 }
 
+RESULT eDVBDB::startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *q)
+{
+       query = new eDVBDBQuery(this, q);
+       return 0;
+}
+
+DEFINE_REF(eDVBDBQuery);
+
+eDVBDBQuery::eDVBDBQuery(eDVBDB *db, eDVBChannelQuery *query): m_db(db), m_query(query)
+{
+       m_cursor = m_db->m_services.begin();
+}
+
+RESULT eDVBDBQuery::getNextResult(eServiceReferenceDVB &ref)
+{
+       while (m_cursor != m_db->m_services.end())
+       {
+               ref = m_cursor->first;
+               
+               int res = (!m_query) || m_cursor->second->checkFilter(ref, *m_query);
+
+               ++m_cursor;
+               
+               if (res)
+                       return 0;
+       }
+       return 1;
+}
+
+RESULT eDVBChannelQuery::compile(ePtr<eDVBChannelQuery> &res, std::string query)
+{
+       res = new eDVBChannelQuery();
+       res->m_type = eDVBChannelQuery::tName;
+       res->m_inverse = 0;
+       res->m_string = query;
+       return 0;
+}
+
+DEFINE_REF(eDVBChannelQuery);
index e673b9e..55998eb 100644 (file)
@@ -4,27 +4,12 @@
 #include <lib/dvb/idvb.h>
 #include <set>
 
 #include <lib/dvb/idvb.h>
 #include <set>
 
-class eDVBService: public iObject
-{
-       DECLARE_REF;
-public:
-       eDVBService();
-       std::string m_service_name;
-       std::string m_provider_name;
-       
-       int m_flags;
-       std::set<int> m_ca;
-       std::map<int,int> m_cache;
-       virtual ~eDVBService();
-       
-       eDVBService &operator=(const eDVBService &);
-};
-
 class ServiceDescriptionTable;
 
 class eDVBDB: public iDVBChannelList
 {
 DECLARE_REF;
 class ServiceDescriptionTable;
 
 class eDVBDB: public iDVBChannelList
 {
 DECLARE_REF;
+       friend class eDVBDBQuery;
 private:
        struct channel
        {
 private:
        struct channel
        {
@@ -45,6 +30,21 @@ public:
        
        RESULT addService(const eServiceReferenceDVB &service, eDVBService *service);
        RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service);
        
        RESULT addService(const eServiceReferenceDVB &service, eDVBService *service);
        RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service);
+
+       RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query);
+};
+
+       // we have to add a possibility to invalidate here.
+class eDVBDBQuery: public iDVBChannelListQuery
+{
+DECLARE_REF;
+private:
+       std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_cursor;
+       ePtr<eDVBDB> m_db;
+       ePtr<eDVBChannelQuery> m_query;
+public:
+       eDVBDBQuery(eDVBDB *db, eDVBChannelQuery *query);
+       virtual RESULT getNextResult(eServiceReferenceDVB &ref);
 };
 
 #endif
 };
 
 #endif
index c68ad94..1579616 100644 (file)
@@ -139,7 +139,7 @@ struct eServiceReferenceDVB: public eServiceReference
                setTransportStreamID(chid.transport_stream_id);
        }
        
                setTransportStreamID(chid.transport_stream_id);
        }
        
-       void getChannelID(eDVBChannelID &chid)
+       void getChannelID(eDVBChannelID &chid) const
        {
                chid = eDVBChannelID(getDVBNamespace(), getTransportStreamID(), getOriginalNetworkID());
        }
        {
                chid = eDVBChannelID(getDVBNamespace(), getTransportStreamID(), getOriginalNetworkID());
        }
@@ -151,14 +151,81 @@ struct eServiceReferenceDVB: public eServiceReference
 };
 
 
 };
 
 
+////////////////// TODO: we need an interface here, but what exactly?
+
+#include <set>
+// btw, still implemented in db.cpp. FIX THIS, TOO.
+
+class eDVBChannelQuery;
+
+class eDVBService: public iStaticServiceInformation
+{
+       DECLARE_REF;
+public:
+       eDVBService();
+       std::string m_service_name;
+       std::string m_provider_name;
+       
+       int m_flags;
+       std::set<int> m_ca;
+       std::map<int,int> m_cache;
+       virtual ~eDVBService();
+       
+       eDVBService &operator=(const eDVBService &);
+       
+       // iStaticServiceInformation
+       RESULT getName(const eServiceReference &ref, std::string &name);
+       
+       // for filtering:
+       int checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQuery &query);
+};
+
+//////////////////
+
 class iDVBChannel;
 class iDVBDemux;
 class iDVBFrontendParameters;
 
 class iDVBChannel;
 class iDVBDemux;
 class iDVBFrontendParameters;
 
+class iDVBChannelListQuery: public iObject
+{
+public:
+       virtual RESULT getNextResult(eServiceReferenceDVB &ref)=0;
+};
+
+class eDVBChannelQuery: public iObject
+{
+       DECLARE_REF;
+public:
+       enum
+       {
+               tName,
+               tProvider,
+               tType,
+               tBouquet,
+               tSatellitePosition,
+               tChannelID,
+               tAND,
+               tOR
+       };
+       
+       int m_type;
+       int m_inverse;
+       
+       std::string m_string;
+       int m_int;
+       eDVBChannelID m_channelid;
+       
+       static RESULT compile(ePtr<eDVBChannelQuery> &res, std::string query);
+       
+       ePtr<eDVBChannelQuery> m_p1, m_p2;
+};
+
 class iDVBChannelList: public iObject
 {
 public:
        virtual RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm)=0;
 class iDVBChannelList: public iObject
 {
 public:
        virtual RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm)=0;
+       virtual RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service)=0;
+       virtual RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query)=0;
 };
 
 class iDVBResourceManager: public iObject
 };
 
 class iDVBResourceManager: public iObject
diff --git a/lib/dvb/stT1RVV7 b/lib/dvb/stT1RVV7
deleted file mode 100644 (file)
index e69de29..0000000
index 187512d..9a7ec06 100644 (file)
@@ -467,7 +467,7 @@ int eTextPara::renderString(const std::string &string, int rflags)
 
        while(p != string.end())
        {
 
        while(p != string.end())
        {
-               unsigned int unicode=*p++;
+               unsigned int unicode=(unsigned char)*p++;
 
                if (unicode & 0x80) // we have (hopefully) UTF8 here, and we assume that the encoding is VALID
                {
 
                if (unicode & 0x80) // we have (hopefully) UTF8 here, and we assume that the encoding is VALID
                {
index 5a9ee4d..f530019 100644 (file)
@@ -1,3 +1,4 @@
+       /* written by: Felix Domke <tmbinc@elitedvb.net> */
 #include <lib/gui/elistbox.h>
 #include <lib/gui/elistboxcontent.h>
 
 #include <lib/gui/elistbox.h>
 #include <lib/gui/elistboxcontent.h>
 
@@ -9,11 +10,7 @@ eListbox::eListbox(eWidget *parent): eWidget(parent)
 void eListbox::setContent(iListboxContent *content)
 {
        m_content = content;
 void eListbox::setContent(iListboxContent *content)
 {
        m_content = content;
-       invalidate();
-       if (m_content)
-               m_content->cursorHome();
-       m_top = 0;
-       m_selected = 0;
+       entryReset();
 }
 
 void eListbox::moveSelection(int dir)
 }
 
 void eListbox::moveSelection(int dir)
@@ -46,6 +43,8 @@ void eListbox::moveSelection(int dir)
                if (m_top < 0)
                        m_top = 0;
                break;
                if (m_top < 0)
                        m_top = 0;
                break;
+       case justCheck:
+               break;
        }
        
                /* note that we could be on an invalid cursor position, but we don't
        }
        
                /* note that we could be on an invalid cursor position, but we don't
@@ -54,6 +53,7 @@ void eListbox::moveSelection(int dir)
        
                /* now, look wether the current selection is out of screen */
        m_selected = m_content->cursorGet();
        
                /* now, look wether the current selection is out of screen */
        m_selected = m_content->cursorGet();
+       
        if (m_selected < m_top)
        {
                m_top -= m_items_per_page;
        if (m_selected < m_top)
        {
                m_top -= m_items_per_page;
@@ -64,11 +64,12 @@ void eListbox::moveSelection(int dir)
                        /* m_top should be always valid here as it's selected */
                m_top += m_items_per_page;
        }
                        /* m_top should be always valid here as it's selected */
                m_top += m_items_per_page;
        }
-       
+
        if (m_top != oldtop)
                invalidate();
        if (m_top != oldtop)
                invalidate();
-       else
+       else if (m_selected != oldsel)
        {
        {
+               
                        /* redraw the old and newly selected */
                gRegion inv = eRect(0, m_itemheight * (m_selected-m_top), size().width(), m_itemheight);
                inv |= eRect(0, m_itemheight * (oldsel-m_top), size().width(), m_itemheight);
                        /* redraw the old and newly selected */
                gRegion inv = eRect(0, m_itemheight * (m_selected-m_top), size().width(), m_itemheight);
                inv |= eRect(0, m_itemheight * (oldsel-m_top), size().width(), m_itemheight);
@@ -119,3 +120,57 @@ void eListbox::recalcSize()
        m_content->setSize(eSize(size().width(), m_itemheight));
        m_items_per_page = size().height() / m_itemheight;
 }
        m_content->setSize(eSize(size().width(), m_itemheight));
        m_items_per_page = size().height() / m_itemheight;
 }
+
+void eListbox::entryAdded(int index)
+{
+               /* manage our local pointers. when the entry was added before the current position, we have to advance. */
+               
+               /* we need to check <= - when the new entry has the (old) index of the cursor, the cursor was just moved down. */
+       if (index <= m_selected)
+               ++m_selected;
+       if (index <= m_top)
+               ++m_top;
+               
+               /* we have to check wether our current cursor is gone out of the screen. */
+               /* moveSelection will check for this case */
+       moveSelection(justCheck);
+       
+               /* now, check if the new index is visible. */
+       if ((m_top <= index) && (index < (m_top + m_items_per_page)))
+       {
+                       /* todo, calc exact invalidation... */
+               invalidate();
+       }
+}
+
+void eListbox::entryRemoved(int index)
+{
+       if (index == m_selected)
+               m_selected = m_content->cursorGet();
+
+       moveSelection(justCheck);
+       
+       if ((m_top <= index) && (index < (m_top + m_items_per_page)))
+       {
+                       /* todo, calc exact invalidation... */
+               invalidate();
+       }
+}
+
+void eListbox::entryChanged(int index)
+{
+       if ((m_top <= index) && (index < (m_top + m_items_per_page)))
+       {
+               gRegion inv = eRect(0, m_itemheight * (index-m_top), size().width(), m_itemheight);
+               invalidate(inv);
+       }
+}
+
+void eListbox::entryReset()
+{
+       invalidate();
+       if (m_content)
+               m_content->cursorHome();
+       m_top = 0;
+       m_selected = 0;
+}
index d546486..9ec9466 100644 (file)
@@ -34,13 +34,15 @@ protected:
        
        virtual int size()=0;
        
        
        virtual int size()=0;
        
-       virtual RESULT connectItemChanged(const Slot0<void> &itemChanged, ePtr<eConnection> &connection)=0;
+       void setListbox(eListbox *lb);
        
        // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
        virtual void setSize(const eSize &size)=0;
        
                /* the following functions always refer to the selected item */
        virtual void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)=0;
        
        // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
        virtual void setSize(const eSize &size)=0;
        
                /* the following functions always refer to the selected item */
        virtual void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)=0;
+       
+       eListbox *m_listbox;
 #endif
 };
 
 #endif
 };
 
@@ -55,12 +57,24 @@ public:
                moveUp,
                moveDown,
                moveTop,
                moveUp,
                moveDown,
                moveTop,
-               moveEnd
+               moveEnd,
+               justCheck
        };
 protected:
        int event(int event, void *data=0, void *data2=0);
        void recalcSize();
 private:
        };
 protected:
        int event(int event, void *data=0, void *data2=0);
        void recalcSize();
 private:
+       friend class iListboxContent;
+       
+               /* entryAdded: an entry was added *before* the given index. it's index is the given number. */
+       void entryAdded(int index);
+               /* entryRemoved: an entry with the given index was removed. */
+       void entryRemoved(int index);
+               /* entryChanged: the entry with the given index was changed and should be redrawn. */
+       void entryChanged(int index);
+               /* the complete list changed. you should not attemp to keep the current index. */
+       void entryReset();
+       
        int m_top, m_selected;
        int m_itemheight;
        int m_items_per_page;
        int m_top, m_selected;
        int m_itemheight;
        int m_items_per_page;
index d3a2e77..0a10b27 100644 (file)
@@ -29,6 +29,10 @@ iListboxContent::~iListboxContent()
 {
 }
 
 {
 }
 
+void iListboxContent::setListbox(eListbox *lb)
+{
+       m_listbox = lb;
+}
 
 DEFINE_REF(eListboxTestContent);
 
 
 DEFINE_REF(eListboxTestContent);
 
@@ -203,11 +207,6 @@ int eListboxStringContent::size()
        return m_size;
 }
        
        return m_size;
 }
        
-RESULT eListboxStringContent::connectItemChanged(const Slot0<void> &itemChanged, ePtr<eConnection> &connection)
-{
-       return 0;
-}
-
 void eListboxStringContent::setSize(const eSize &size)
 {
        m_itemsize = size;
 void eListboxStringContent::setSize(const eSize &size)
 {
        m_itemsize = size;
@@ -316,11 +315,6 @@ int eListboxPythonStringContent::size()
        return PyList_Size(m_list);
 }
        
        return PyList_Size(m_list);
 }
        
-RESULT eListboxPythonStringContent::connectItemChanged(const Slot0<void> &itemChanged, ePtr<eConnection> &connection)
-{
-       return 0;
-}
-
 void eListboxPythonStringContent::setSize(const eSize &size)
 {
        m_itemsize = size;
 void eListboxPythonStringContent::setSize(const eSize &size)
 {
        m_itemsize = size;
index 7ef6011..deea300 100644 (file)
@@ -55,8 +55,6 @@ protected:
        void cursorRestore();
        int size();
        
        void cursorRestore();
        int size();
        
-       RESULT connectItemChanged(const Slot0<void> &itemChanged, ePtr<eConnection> &connection);
-       
        // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
        void setSize(const eSize &size);
        
        // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
        void setSize(const eSize &size);
        
index 72d3fc5..10d18e3 100644 (file)
@@ -102,7 +102,7 @@ RESULT eNavigation::pause(int dop)
        if (!m_runningService)
                return -1;
        ePtr<iPauseableService> p;
        if (!m_runningService)
                return -1;
        ePtr<iPauseableService> p;
-       if (m_runningService->getIPausableService(p))
+       if (m_runningService->pause(p))
                return -2;
        if (dop)
                return p->pause();
                return -2;
        if (dop)
                return p->pause();
index 8e55b74..4bd0cdc 100644 (file)
@@ -66,6 +66,7 @@ extern PSignal1<void,int> &keyPressedSignal();
 %}
 
 RefCount(eListboxPythonStringContent)
 %}
 
 RefCount(eListboxPythonStringContent)
+RefCount(eListboxServiceContent)
 
 #define DEBUG
 %include "stl.i"
 
 #define DEBUG
 %include "stl.i"
index 01c61fc..5a8a062 100644 (file)
@@ -147,13 +147,21 @@ public:
           large list, provided that no state information is nessesary to deliver
           the required information. Anyway - ref *must* be the same as the argument
           to the info() or getIServiceInformation call! */
           large list, provided that no state information is nessesary to deliver
           the required information. Anyway - ref *must* be the same as the argument
           to the info() or getIServiceInformation call! */
-class iServiceInformation: public iObject
+class iStaticServiceInformation: public iObject
 {
 public:
        virtual RESULT getName(const eServiceReference &ref, std::string &name)=0;
 };
 
 {
 public:
        virtual RESULT getName(const eServiceReference &ref, std::string &name)=0;
 };
 
-typedef ePtr<iServiceInformation> iServiceInformationPtr;
+TEMPLATE_TYPEDEF(ePtr<iStaticServiceInformation>, iStaticServiceInformationPtr);
+
+class iServiceInformation: public iStaticServiceInformation
+{
+public:
+       
+};
+
+TEMPLATE_TYPEDEF(ePtr<iServiceInformation>, iServiceInformationPtr);
 
 class iPauseableService: public iObject
 {
 
 class iPauseableService: public iObject
 {
@@ -162,7 +170,7 @@ public:
        virtual RESULT unpause()=0;
 };
 
        virtual RESULT unpause()=0;
 };
 
-typedef ePtr<iPauseableService> iPauseableServicePtr;
+TEMPLATE_TYPEDEF(ePtr<iPauseableService>, iPauseableServicePtr);
 
 class iPlayableService: public iObject
 {
 
 class iPlayableService: public iObject
 {
@@ -176,8 +184,8 @@ public:
        virtual RESULT connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection)=0;
        virtual RESULT start()=0;
        virtual RESULT stop()=0;
        virtual RESULT connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection)=0;
        virtual RESULT start()=0;
        virtual RESULT stop()=0;
-       virtual RESULT getIPausableService(ePtr<iPauseableService> &ptr)=0;
-       virtual RESULT getIServiceInformation(ePtr<iServiceInformation> &ptr)=0;
+       virtual RESULT pause(ePtr<iPauseableService> &ptr)=0;
+       virtual RESULT info(ePtr<iServiceInformation> &ptr)=0;
 };
 
 TEMPLATE_TYPEDEF(ePtr<iPlayableService>, iPlayableServicePtr);
 };
 
 TEMPLATE_TYPEDEF(ePtr<iPlayableService>, iPlayableServicePtr);
@@ -189,10 +197,9 @@ public:
        virtual RESULT stop()=0;
 };
 
        virtual RESULT stop()=0;
 };
 
-typedef ePtr<iRecordableService> iRecordableServicePtr;
+TEMPLATE_TYPEDEF(ePtr<iRecordableService>, iRecordableServicePtr);
 
 // TEMPLATE_TYPEDEF(std::list<eServiceReference>, eServiceReferenceList);
 
 // TEMPLATE_TYPEDEF(std::list<eServiceReference>, eServiceReferenceList);
-typedef std::list<eServiceReference> eServiceReferenceList;
 
 class iListableService: public iObject
 {
 
 class iListableService: public iObject
 {
@@ -208,9 +215,9 @@ public:
        virtual RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr)=0;
        virtual RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr)=0;
        virtual RESULT list(const eServiceReference &, ePtr<iListableService> &ptr)=0;
        virtual RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr)=0;
        virtual RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr)=0;
        virtual RESULT list(const eServiceReference &, ePtr<iListableService> &ptr)=0;
-       virtual RESULT info(const eServiceReference &, ePtr<iServiceInformation> &ptr);
+       virtual RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
 };
 
 };
 
-typedef ePtr<iServiceHandler> iServiceHandlerPtr;
+TEMPLATE_TYPEDEF(ePtr<iServiceHandler>, iServiceHandlerPtr);
 
 #endif
 
 #endif
diff --git a/lib/service/listboxservice.cpp b/lib/service/listboxservice.cpp
new file mode 100644 (file)
index 0000000..011c96c
--- /dev/null
@@ -0,0 +1,134 @@
+#include <lib/service/listboxservice.h>
+#include <lib/service/service.h>
+
+void eListboxServiceContent::setRoot(const eServiceReference &root)
+{
+       m_root = root;
+       
+       assert(m_service_center);
+       
+       ePtr<iListableService> lst;
+       if (m_service_center->list(m_root, lst))
+               eDebug("no list available!");
+       else
+               if (lst->getContent(m_list))
+                       eDebug("getContent failed");
+
+       m_size = m_list.size();
+       cursorHome();
+}
+
+DEFINE_REF(eListboxServiceContent);
+
+eListboxServiceContent::eListboxServiceContent()
+{
+       m_size = 0;
+       cursorHome();
+       eServiceCenter::getInstance(m_service_center);
+}
+
+void eListboxServiceContent::cursorHome()
+{
+       m_cursor = m_list.begin();
+       m_cursor_number = 0;
+}
+
+void eListboxServiceContent::cursorEnd()
+{
+       m_cursor = m_list.end();
+       m_cursor_number = m_size;
+}
+
+int eListboxServiceContent::cursorMove(int count)
+{
+       if (count > 0)
+       {
+               while (count && (m_cursor != m_list.end()))
+               {
+                       ++m_cursor;
+                       ++m_cursor_number;
+                       --count;
+               }
+       } else if (count < 0)
+       {
+               while (count && (m_cursor != m_list.begin()))
+               {
+                       --m_cursor;
+                       --m_cursor_number;
+                       ++count;
+               }
+       }
+       
+       return 0;
+}
+
+int eListboxServiceContent::cursorValid()
+{
+       return m_cursor != m_list.end();
+}
+
+int eListboxServiceContent::cursorSet(int n)
+{
+       cursorHome();
+       cursorMove(n);
+       
+       return 0;
+}
+
+int eListboxServiceContent::cursorGet()
+{
+       return m_cursor_number;
+}
+
+void eListboxServiceContent::cursorSave()
+{
+       m_saved_cursor = m_cursor;
+       m_saved_cursor_number = m_cursor_number;
+}
+
+void eListboxServiceContent::cursorRestore()
+{
+       m_cursor = m_saved_cursor;
+       m_cursor_number = m_saved_cursor_number;
+}
+
+int eListboxServiceContent::size()
+{
+       return m_size;
+}
+       
+void eListboxServiceContent::setSize(const eSize &size)
+{
+       m_itemsize = size;
+}
+
+void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)
+{
+       ePtr<gFont> fnt = new gFont("Arial", 14);
+       painter.clip(eRect(offset, m_itemsize));
+       style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
+       painter.clear();
+       
+       if (cursorValid())
+       {
+               painter.setFont(fnt);
+               
+               ePoint text_offset = offset + (selected ? ePoint(2, 2) : ePoint(1, 1));
+               
+                       /* get name of service */
+               ePtr<iStaticServiceInformation> service_info;
+               m_service_center->info(*m_cursor, service_info);
+               std::string name = "<n/a>";
+               
+               if (service_info)
+                       service_info->getName(*m_cursor, name);
+               
+               painter.renderText(eRect(text_offset, m_itemsize), name);
+               
+               if (selected)
+                       style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry);
+       }
+       
+       painter.clippop();
+}
+
diff --git a/lib/service/listboxservice.h b/lib/service/listboxservice.h
new file mode 100644 (file)
index 0000000..45e5ba7
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef __lib_service_listboxservice_h
+#define __lib_service_listboxservice_h
+
+#include <lib/gui/elistbox.h>
+#include <lib/service/iservice.h>
+
+class eServiceCenter;
+
+class eListboxServiceContent: public virtual iListboxContent
+{
+       DECLARE_REF;
+public:
+       eListboxServiceContent();
+       void setRoot(const eServiceReference &ref);
+
+protected:
+       void cursorHome();
+       void cursorEnd();
+       int cursorMove(int count=1);
+       int cursorValid();
+       int cursorSet(int n);
+       int cursorGet();
+       
+       void cursorSave();
+       void cursorRestore();
+       int size();
+       
+       // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
+       void setSize(const eSize &size);
+       
+               /* the following functions always refer to the selected item */
+       void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected);
+private:
+       typedef std::list<eServiceReference> list;
+       
+       list m_list;
+       list::iterator m_cursor, m_saved_cursor;
+       
+       int m_cursor_number, m_saved_cursor_number;
+       int m_size;
+       
+       eSize m_itemsize;
+       ePtr<eServiceCenter> m_service_center;
+       
+       eServiceReference m_root;
+};
+
+#endif
index 40cbf8d..75d4987 100644 (file)
@@ -90,7 +90,7 @@ RESULT eServiceCenter::list(const eServiceReference &ref, ePtr<iListableService>
        return i->second->list(ref, ptr);
 }
 
        return i->second->list(ref, ptr);
 }
 
-RESULT eServiceCenter::info(const eServiceReference &ref, ePtr<iServiceInformation> &ptr)
+RESULT eServiceCenter::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
 {
        std::map<int,ePtr<iServiceHandler> >::iterator i = handler.find(ref.type);
        if (i == handler.end())
 {
        std::map<int,ePtr<iServiceHandler> >::iterator i = handler.find(ref.type);
        if (i == handler.end())
@@ -114,7 +114,7 @@ RESULT eServiceCenter::removeServiceFactory(int id)
 }
 
        /* default handlers */
 }
 
        /* default handlers */
-RESULT iServiceHandler::info(const eServiceReference &, ePtr<iServiceInformation> &ptr)
+RESULT iServiceHandler::info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr)
 {
        ptr = 0;
        return -1;
 {
        ptr = 0;
        return -1;
index c3f0c48..9f4b456 100644 (file)
@@ -23,7 +23,7 @@ public:
        RESULT play(const eServiceReference &, iPlayableServicePtr &ptr);
        RESULT record(const eServiceReference &, iRecordableServicePtr &ptr);
        RESULT list(const eServiceReference &, iListableServicePtr &ptr);
        RESULT play(const eServiceReference &, iPlayableServicePtr &ptr);
        RESULT record(const eServiceReference &, iRecordableServicePtr &ptr);
        RESULT list(const eServiceReference &, iListableServicePtr &ptr);
-       RESULT info(const eServiceReference &, ePtr<iServiceInformation> &ptr);
+       RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
        
                // eServiceCenter
        static RESULT getInstance(eServiceCenterPtr &ptr) { ptr = instance; return 0; }
        
                // eServiceCenter
        static RESULT getInstance(eServiceCenterPtr &ptr) { ptr = instance; return 0; }
index 0c6d72b..d1ebeb3 100644 (file)
@@ -6,6 +6,9 @@
 #include <lib/base/init_num.h>
 #include <lib/base/init.h>
 
 #include <lib/base/init_num.h>
 #include <lib/base/init.h>
 
+#include <lib/dvb/dvb.h>
+#include <lib/dvb/db.h>
+
 DEFINE_REF(eServiceFactoryDVB)
 
 eServiceFactoryDVB::eServiceFactoryDVB()
 DEFINE_REF(eServiceFactoryDVB)
 
 eServiceFactoryDVB::eServiceFactoryDVB()
@@ -26,6 +29,53 @@ eServiceFactoryDVB::~eServiceFactoryDVB()
                sc->removeServiceFactory(eServiceFactoryDVB::id);
 }
 
                sc->removeServiceFactory(eServiceFactoryDVB::id);
 }
 
+DEFINE_REF(eDVBServiceList);
+
+eDVBServiceList::eDVBServiceList(const eServiceReference &parent): m_parent(parent)
+{
+}
+
+eDVBServiceList::~eDVBServiceList()
+{
+}
+
+RESULT eDVBServiceList::getContent(std::list<eServiceReference> &list)
+{
+       ePtr<iDVBChannelList> db;
+       ePtr<eDVBResourceManager> res;
+       
+       int err;
+       if ((err = eDVBResourceManager::getInstance(res)) != 0)
+       {
+               eDebug("no resource manager");
+               return err;
+       }
+       if ((err = res->getChannelList(db)) != 0)
+       {
+               eDebug("no channel list");
+               return err;
+       }
+       
+       ePtr<iDVBChannelListQuery> query;
+       
+       ePtr<eDVBChannelQuery> q;
+       
+       if (m_parent.path.size())
+               eDVBChannelQuery::compile(q, m_parent.path);
+       
+       if ((err = db->startQuery(query, q)) != 0)
+       {
+               eDebug("startQuery failed");
+               return err;
+       }
+       
+       eServiceReferenceDVB ref;
+       
+       while (!query->getNextResult(ref))
+               list.push_back(ref);
+       return 0;
+}
+
 RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr<iPlayableService> &ptr)
 {
                // check resources...
 RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr<iPlayableService> &ptr)
 {
                // check resources...
@@ -39,10 +89,46 @@ RESULT eServiceFactoryDVB::record(const eServiceReference &, ePtr<iRecordableSer
        return -1;
 }
 
        return -1;
 }
 
-RESULT eServiceFactoryDVB::list(const eServiceReference &, ePtr<iListableService> &ptr)
+RESULT eServiceFactoryDVB::list(const eServiceReference &ref, ePtr<iListableService> &ptr)
+{
+       ptr = new eDVBServiceList(ref);
+       return 0;
+}
+
+RESULT eServiceFactoryDVB::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
 {
        ptr = 0;
 {
        ptr = 0;
-       return -1;
+                       // TODO: handle the listing itself
+       // if (ref.... == -1) .. return "... bouquets ...";
+       // could be also done in another serviceFactory (with seperate ID) to seperate actual services and lists
+                       // TODO: cache
+       ePtr<iDVBChannelList> db;
+       ePtr<eDVBResourceManager> res;
+       
+       int err;
+       if ((err = eDVBResourceManager::getInstance(res)) != 0)
+       {
+               eDebug("no resource manager");
+               return err;
+       }
+       if ((err = res->getChannelList(db)) != 0)
+       {
+               eDebug("no channel list");
+               return err;
+       }
+       
+       ePtr<eDVBService> service;
+
+               /* we are sure to have a ..DVB reference as the info() call was forwarded here according to it's ID. */
+       if ((err = db->getService((eServiceReferenceDVB&)ref, service)) != 0)
+       {
+               eDebug("getService failed!");
+               return err;
+       }
+       
+               /* eDVBService has the iStaticServiceInformation interface, so we pass it here. */
+       ptr = service;
+       return 0;
 }
 
 eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref): 
 }
 
 eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref): 
@@ -145,14 +231,14 @@ RESULT eDVBServicePlay::connectEvent(const Slot2<void,iPlayableService*,int> &ev
        return -1;
 }
 
        return -1;
 }
 
-RESULT eDVBServicePlay::getIPausableService(ePtr<iPauseableService> &ptr)
+RESULT eDVBServicePlay::pause(ePtr<iPauseableService> &ptr)
 {
                // not yet possible, maybe later...
        ptr = 0;
        return -1;
 }
 
 {
                // not yet possible, maybe later...
        ptr = 0;
        return -1;
 }
 
-RESULT eDVBServicePlay::getIServiceInformation(ePtr<iServiceInformation> &ptr)
+RESULT eDVBServicePlay::info(ePtr<iServiceInformation> &ptr)
 {
        ptr = this;
        return 0;
 {
        ptr = this;
        return 0;
index c54eb5c..94659ed 100644 (file)
@@ -18,6 +18,19 @@ public:
        RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr);
        RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
        RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
        RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr);
        RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
        RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
+       RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
+};
+
+class eDVBServiceList: public iListableService
+{
+DECLARE_REF;
+private:
+       eServiceReference m_parent;
+       friend class eServiceFactoryDVB;
+       eDVBServiceList(const eServiceReference &parent);
+public:
+       virtual ~eDVBServiceList();
+       RESULT getContent(std::list<eServiceReference> &list);
 };
 
 class eDVBServicePlay: public iPlayableService, public Object, public iServiceInformation
 };
 
 class eDVBServicePlay: public iPlayableService, public Object, public iServiceInformation
@@ -41,8 +54,8 @@ public:
        RESULT connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection);
        RESULT start();
        RESULT stop();
        RESULT connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection);
        RESULT start();
        RESULT stop();
-       RESULT getIPausableService(ePtr<iPauseableService> &ptr);
-       RESULT getIServiceInformation(ePtr<iServiceInformation> &ptr);
+       RESULT pause(ePtr<iPauseableService> &ptr);
+       RESULT info(ePtr<iServiceInformation> &ptr);
        
                // iServiceInformation
        RESULT getName(const eServiceReference &ref, std::string &name);
        
                // iServiceInformation
        RESULT getName(const eServiceReference &ref, std::string &name);
index de75cc6..5a94567 100644 (file)
 #include <unistd.h>
 
 
 #include <unistd.h>
 
 
-class eServiceFSInformation: public iServiceInformation
+class eStaticServiceFSInformation: public iStaticServiceInformation
 {
        DECLARE_REF;
 public:
        RESULT getName(const eServiceReference &ref, std::string &name);
 };
 
 {
        DECLARE_REF;
 public:
        RESULT getName(const eServiceReference &ref, std::string &name);
 };
 
-DEFINE_REF(eServiceFSInformation);
+DEFINE_REF(eStaticServiceFSInformation);
 
 
-RESULT eServiceFSInformation::getName(const eServiceReference &ref, std::string &name)
+RESULT eStaticServiceFSInformation::getName(const eServiceReference &ref, std::string &name)
 {
        name = ref.path;
 }
 {
        name = ref.path;
 }
@@ -36,7 +36,7 @@ eServiceFactoryFS::eServiceFactoryFS()
        if (sc)
                sc->addServiceFactory(eServiceFactoryFS::id, this);
        
        if (sc)
                sc->addServiceFactory(eServiceFactoryFS::id, this);
        
-       m_service_information = new eServiceFSInformation();
+       m_service_information = new eStaticServiceFSInformation();
 }
 
 eServiceFactoryFS::~eServiceFactoryFS()
 }
 
 eServiceFactoryFS::~eServiceFactoryFS()
@@ -69,7 +69,7 @@ RESULT eServiceFactoryFS::list(const eServiceReference &ref, ePtr<iListableServi
        return 0;
 }
 
        return 0;
 }
 
-RESULT eServiceFactoryFS::info(const eServiceReference &ref, ePtr<iServiceInformation> &ptr)
+RESULT eServiceFactoryFS::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
 {
        ptr = m_service_information;
        return 0;
 {
        ptr = m_service_information;
        return 0;
index d8e7760..337ff62 100644 (file)
@@ -15,9 +15,9 @@ public:
        RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr);
        RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
        RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
        RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr);
        RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
        RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
-       RESULT info(const eServiceReference &, ePtr<iServiceInformation> &ptr);
+       RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
 private:
 private:
-       ePtr<iServiceInformation> m_service_information;
+       ePtr<iStaticServiceInformation> m_service_information;
 };
 
 class eServiceFS: public iListableService
 };
 
 class eServiceFS: public iListableService
index 1f883f9..a5f1b77 100644 (file)
@@ -17,7 +17,7 @@ eServiceFactoryMP3::eServiceFactoryMP3()
        if (sc)
                sc->addServiceFactory(eServiceFactoryMP3::id, this);
 
        if (sc)
                sc->addServiceFactory(eServiceFactoryMP3::id, this);
 
-       m_service_info = new eServiceMP3Info();
+       m_service_info = new eStaticServiceMP3Info();
 }
 
 eServiceFactoryMP3::~eServiceFactoryMP3()
 }
 
 eServiceFactoryMP3::~eServiceFactoryMP3()
@@ -51,29 +51,29 @@ RESULT eServiceFactoryMP3::list(const eServiceReference &, ePtr<iListableService
        return -1;
 }
 
        return -1;
 }
 
-RESULT eServiceFactoryMP3::info(const eServiceReference &ref, ePtr<iServiceInformation> &ptr)
+RESULT eServiceFactoryMP3::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
 {
        ptr = m_service_info;
        return 0;
 }
 
 {
        ptr = m_service_info;
        return 0;
 }
 
-// eServiceMP3Info
+// eStaticServiceMP3Info
 
 
 
 
-// eServiceMP3Info is seperated from eServiceMP3 to give information
+// eStaticServiceMP3Info is seperated from eServiceMP3 to give information
 // about unopened files.
 
 // about unopened files.
 
-// probably eServiceMP3 should use this class as well, and eServiceMP3Info
+// probably eServiceMP3 should use this class as well, and eStaticServiceMP3Info
 // should have a database backend where ID3-files etc. are cached.
 // this would allow listing the mp3 database based on certain filters.
 
 // should have a database backend where ID3-files etc. are cached.
 // this would allow listing the mp3 database based on certain filters.
 
-DEFINE_REF(eServiceMP3Info)
+DEFINE_REF(eStaticServiceMP3Info)
 
 
-eServiceMP3Info::eServiceMP3Info()
+eStaticServiceMP3Info::eStaticServiceMP3Info()
 {
 }
 
 {
 }
 
-RESULT eServiceMP3Info::getName(const eServiceReference &ref, std::string &name)
+RESULT eStaticServiceMP3Info::getName(const eServiceReference &ref, std::string &name)
 {
        name = "MP3 file: " + ref.path;
        return 0;
 {
        name = "MP3 file: " + ref.path;
        return 0;
@@ -134,13 +134,13 @@ RESULT eServiceMP3::stop()
        return 0;
 }
 
        return 0;
 }
 
-RESULT eServiceMP3::getIPausableService(ePtr<iPauseableService> &ptr) { ptr=this; return 0; }
+RESULT eServiceMP3::pause(ePtr<iPauseableService> &ptr) { ptr=this; return 0; }
 
                // iPausableService
 RESULT eServiceMP3::pause() { printf("mp3 pauses!\n"); return 0; }
 RESULT eServiceMP3::unpause() { printf("mp3 unpauses!\n"); return 0; }
 
 
                // iPausableService
 RESULT eServiceMP3::pause() { printf("mp3 pauses!\n"); return 0; }
 RESULT eServiceMP3::unpause() { printf("mp3 unpauses!\n"); return 0; }
 
-RESULT eServiceMP3::getIServiceInformation(ePtr<iServiceInformation>&i) { i = this; return 0; }
+RESULT eServiceMP3::info(ePtr<iServiceInformation>&i) { i = this; return 0; }
 
 RESULT eServiceMP3::getName(const eServiceReference &ref, std::string &name)
 {
 
 RESULT eServiceMP3::getName(const eServiceReference &ref, std::string &name)
 {
index 7ef8402..40287ae 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <lib/service/iservice.h>
 
 
 #include <lib/service/iservice.h>
 
-class eServiceMP3Info ;
+class eStaticServiceMP3Info;
 
 class eServiceFactoryMP3: public iServiceHandler
 {
 
 class eServiceFactoryMP3: public iServiceHandler
 {
@@ -17,16 +17,16 @@ public:
        RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr);
        RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
        RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
        RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr);
        RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
        RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
-       RESULT info(const eServiceReference &, ePtr<iServiceInformation> &ptr);
+       RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
 private:
 private:
-       ePtr<eServiceMP3Info> m_service_info;
+       ePtr<eStaticServiceMP3Info> m_service_info;
 };
 
 };
 
-class eServiceMP3Info: public iServiceInformation
+class eStaticServiceMP3Info: public iServiceInformation
 {
        DECLARE_REF;
        friend class eServiceFactoryMP3;
 {
        DECLARE_REF;
        friend class eServiceFactoryMP3;
-       eServiceMP3Info();
+       eStaticServiceMP3Info();
 public:
        RESULT getName(const eServiceReference &ref, std::string &name);
 };
 public:
        RESULT getName(const eServiceReference &ref, std::string &name);
 };
@@ -53,13 +53,13 @@ public:
        RESULT connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection);
        RESULT start();
        RESULT stop();
        RESULT connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection);
        RESULT start();
        RESULT stop();
-       RESULT getIPausableService(ePtr<iPauseableService> &ptr);
+       RESULT pause(ePtr<iPauseableService> &ptr);
 
                // iPausableService
        RESULT pause();
        RESULT unpause();
        
 
                // iPausableService
        RESULT pause();
        RESULT unpause();
        
-       RESULT getIServiceInformation(ePtr<iServiceInformation>&);
+       RESULT info(ePtr<iServiceInformation>&);
        
                // iServiceInformation
        RESULT getName(const eServiceReference &ref, std::string &name);
        
                // iServiceInformation
        RESULT getName(const eServiceReference &ref, std::string &name);
index e257f11..2f6cecf 100644 (file)
--- a/mytest.py
+++ b/mytest.py
@@ -32,7 +32,7 @@ def dump(dir, p = ""):
 components = {}
 
 # do global
 components = {}
 
 # do global
-screens["global"](components)
+doGlobal(components)
 
 # display
 
 
 # display
 
@@ -84,15 +84,15 @@ class Session:
                
                if self.desktop != None:
                        self.currentWindow = wnd = eWindow(self.desktop)
                
                if self.desktop != None:
                        self.currentWindow = wnd = eWindow(self.desktop)
-                       wnd.setTitle("Screen from python!")
-                       wnd.move(ePoint(300, 100))
-                       wnd.resize(eSize(300, 300))
+#                      wnd.setTitle("Screen from python!")
+#                      wnd.move(ePoint(300, 100))
+#                      wnd.resize(eSize(300, 300))
 
                        gui = GUIOutputDevice()
                        gui.parent = wnd
                        gui.create(self.currentDialog)
 
 
                        gui = GUIOutputDevice()
                        gui.parent = wnd
                        gui.create(self.currentDialog)
 
-                       applyGUIskin(self.currentDialog, None, screen.__class__.__name__)
+                       applyGUIskin(self.currentDialog, wnd, None, screen.__class__.__name__)
 
                        wnd.show()
                else:
 
                        wnd.show()
                else:
@@ -102,9 +102,15 @@ class Session:
 #              print "code " + str(code)
                if code == 32:
                        self.currentDialog.data["okbutton"]["instance"].push()
 #              print "code " + str(code)
                if code == 32:
                        self.currentDialog.data["okbutton"]["instance"].push()
+
+               if code == 33:
+                       self.currentDialog.data["channelSwitcher"]["instance"].push()
                
                if code >= 0x30 and code <= 0x39:
                
                if code >= 0x30 and code <= 0x39:
-                       self.currentDialog.data["menu"]["instance"].moveSelection(code - 0x31)
+                       try:
+                               self.currentDialog.data["menu"]["instance"].moveSelection(code - 0x31)
+                       except:
+                               self.currentDialog.data["list"]["instance"].moveSelection(code - 0x31)
 
        def close(self):
                self.delayTimer.start(0, 1)
 
        def close(self):
                self.delayTimer.start(0, 1)
@@ -113,21 +119,8 @@ def runScreenTest():
        session = Session()
        session.desktop = getDesktop()
        
        session = Session()
        session.desktop = getDesktop()
        
-#      session.open(screens["clockDisplay"](components["clock"]))
-       session.open(screens["testDialog"]())
-
-       # simple reason for this helper function: we want to call the currently
-       # active "okbutton", even when we changed the dialog
-       #
-       # more complicated reason: we don't want to hold a reference.
-#      def blub():
-#              session.currentDialog.data["okbutton"]["instance"].push()       
-#              session.currentDialog["okbutton"].setText("hello!")
-#      
-#      tmr = eTimer()
-#      CONNECT(tmr.timeout, blub)
-#      tmr.start(4000, 0)
-#      
+       session.open(infoBar())
+
        CONNECT(keyPressedSignal(), session.keyEvent)
        
        runMainloop()
        CONNECT(keyPressedSignal(), session.keyEvent)
        
        runMainloop()
index 6aa88e8..9148f25 100644 (file)
@@ -15,15 +15,8 @@ class Screen(dict, HTMLSkin, GUISkin):
        def close(self, retval=None):
                self.session.close()
        
        def close(self, retval=None):
                self.session.close()
        
-# a test dialog
-class testDialog(Screen):
-       def testDialogClick(self):
-               selection = self["menu"].getCurrent()
-               selection[1]()
+class mainMenu(Screen):
        
        
-       def goMain(self):
-               self.session.open(screens["mainMenu"]())
-               
        def goEmu(self):
                self["title"].setText("EMUs ARE ILLEGAL AND NOT SUPPORTED!")
        
        def goEmu(self):
                self["title"].setText("EMUs ARE ILLEGAL AND NOT SUPPORTED!")
        
@@ -34,35 +27,61 @@ class testDialog(Screen):
                self["title"].setText("HDTV GREEN FLASHES: ENABLED")
        
        def goClock(self):
                self["title"].setText("HDTV GREEN FLASHES: ENABLED")
        
        def goClock(self):
-               self.session.open(screens["clockDisplay"](Clock()))
+               self.session.open(clockDisplay(Clock()))
+
+       def okbuttonClick(self):
+               selection = self["menu"].getCurrent()
+               selection[1]()
 
        def __init__(self):
                GUISkin.__init__(self)
                b = Button("ok")
 
        def __init__(self):
                GUISkin.__init__(self)
                b = Button("ok")
-               b.onClick = [ self.testDialogClick ]
+
+               b.onClick = [ self.okbuttonClick ]
                self["okbutton"] = b
                self["okbutton"] = b
-               self["title"] = Header("Test Dialog - press ok to leave!")
-#              self["menu"] = MenuList(
-#                      [
-#                              ("MAIN MENU", self.goMain), 
-#                              ("EMU SETUP", self.goEmu),
-#                              ("TIMESHIFT SETUP", self.goTimeshift),
-#                              ("HDTV PIP CONFIG", self.goHDTV),
-#                              ("wie spaet ists?!", self.goClock)
-#                      ])
-               self["menu"] = ServiceList()
-               
-               self["menu"].setRoot(eServiceReference("2:0:1:0:0:0:0:0:0:0:/"))
+               self["title"] = Header("Main Menu! - press ok to leave!")
+               self["menu"] = MenuList(
+                       [
+                               ("EMU SETUP", self.goEmu),
+                               ("TIMESHIFT SETUP", self.goTimeshift),
+                               ("HDTV PIP CONFIG", self.goHDTV),
+                               ("wie spaet ists?!", self.goClock)
+                       ])
 
 
-class mainMenu(Screen):
+#class mainMenu(Screen):
+#      def __init__(self):
+#              GUISkin.__init__(self)
+#              
+#              self["title"] = Header("this is the\nMAIN MENU !!!");
+#              self["okbutton"] = Button("ok")
+#              self["okbutton"].onClick = [ self.close ]
+
+class channelSelection(Screen):
        def __init__(self):
                GUISkin.__init__(self)
                
        def __init__(self):
                GUISkin.__init__(self)
                
-               self["title"] = Header("this is the\nMAIN MENU !!!");
-               self["okbutton"] = Button("ok")
-               self["okbutton"].onClick = [ self.close ]
+               self["list"] = ServiceList()
+               self["list"].setRoot(eServiceReference("1:0:1:0:0:0:0:0:0:0:PREMIERE"))
+               
+               self["okbutton"] = Button("ok", [self.channelSelected, self.close])
+
+       def channelSelected(self):
+#              print "channel selected!"
+               pass
 
 
+class infoBar(Screen):
+       def __init__(self):
+               GUISkin.__init__(self)
+               
+               self["channelSwitcher"] = Button("switch Channel", [self.switchChannel])
+               self["okbutton"] = Button("mainMenu", [self.mainMenu])
        
        
+       def mainMenu(self):
+               self.session.open(mainMenu())
+               
+       def switchChannel(self):
+               self.session.open(channelSelection())
+
 # a clock display dialog
 class clockDisplay(Screen):
        def okbutton(self):
 # a clock display dialog
 class clockDisplay(Screen):
        def okbutton(self):
@@ -76,10 +95,3 @@ class clockDisplay(Screen):
                self["okbutton"] = b
                self["title"] = Header("clock dialog: here you see the current uhrzeit!")
 
                self["okbutton"] = b
                self["title"] = Header("clock dialog: here you see the current uhrzeit!")
 
-# defined screens (evtl. kann man sich das sparen, ich seh den sinn gerade nicht mehr)
-screens = {
-       "global": doGlobal,
-       "testDialog": testDialog,
-       "clockDisplay": clockDisplay ,
-       "mainMenu": mainMenu }
-
diff --git a/skin.py b/skin.py
index 9fbdfeb..687d808 100644 (file)
--- a/skin.py
+++ b/skin.py
@@ -13,7 +13,7 @@ def dump(x, i=0):
 dom = xml.dom.minidom.parseString(
        """
        <skin>
 dom = xml.dom.minidom.parseString(
        """
        <skin>
-               <screen name="testDialog">
+               <screen name="mainMenu" position="300,100" size="300,300" title="real main menu">
                        <widget name="okbutton" position="10,190" size="280,50" />
                        <widget name="title" position="10,10" size="280,20" />
                        <widget name="menu" position="10,30" size="280,140" />
                        <widget name="okbutton" position="10,190" size="280,50" />
                        <widget name="title" position="10,10" size="280,20" />
                        <widget name="menu" position="10,30" size="280,140" />
@@ -23,9 +23,12 @@ dom = xml.dom.minidom.parseString(
                        <widget name="title" position="10,120" size="280,50" />
                        <widget name="theClock" position="10,60" size="280,50" />
                </screen>
                        <widget name="title" position="10,120" size="280,50" />
                        <widget name="theClock" position="10,60" size="280,50" />
                </screen>
-               <screen name="mainMenu" position="300,100" size="300,300">
-                       <widget name="title" position="10,10" size="280,80" />
+               <screen name="infoBar" position="100,100" size="500,400" title="InfoBar">
+                       <widget name="channelSwitcher" position="10,190" size="280,50" />
+               </screen>
+               <screen name="channelSelection" position="300,100" size="300,300" title="Channel Selection">
                        <widget name="okbutton" position="10,190" size="280,50" />
                        <widget name="okbutton" position="10,190" size="280,50" />
+                       <widget name="list" position="10,30" size="280,140" />
                </screen>
        </skin>
 """)
                </screen>
        </skin>
 """)
@@ -45,15 +48,23 @@ def applyAttributes(guiObject, node):
        for p in range(node.attributes.length):
                a = node.attributes.item(p)
                
        for p in range(node.attributes.length):
                a = node.attributes.item(p)
                
+               # convert to string (was: unicode)
+               attrib = str(a.name)
+               # TODO: proper UTF8 translation?! (for value)
+               # TODO: localization? as in e1?
+               value = str(a.value)
+               
                # and set attributes
                # and set attributes
-               if a.name == 'position':
-                       guiObject.move(parsePosition(a.value))
-               elif a.name == 'size':
-                       guiObject.resize(parseSize(a.value))
-               elif a.name != 'name':
-                       print "unsupported attribute " + a.name
+               if attrib == 'position':
+                       guiObject.move(parsePosition(value))
+               elif attrib == 'size':
+                       guiObject.resize(parseSize(value))
+               elif attrib == 'title':
+                       guiObject.setTitle(value)
+               elif attrib != 'name':
+                       print "unsupported attribute " + attrib + "=" + value
 
 
-def applyGUIskin(screen, skin, name):
+def applyGUIskin(screen, parent, skin, name):
        
        myscreen = None
        
        
        myscreen = None
        
@@ -67,6 +78,8 @@ def applyGUIskin(screen, skin, name):
        
        assert myscreen != None, "no skin for screen '" + name + "' found!"
        
        
        assert myscreen != None, "no skin for screen '" + name + "' found!"
        
+       applyAttributes(parent, myscreen)
+       
        # now walk all widgets
        for widget in myscreen.getElementsByTagName("widget"):
                wname = widget.getAttribute('name')
        # now walk all widgets
        for widget in myscreen.getElementsByTagName("widget"):
                wname = widget.getAttribute('name')