TeleText

Het Protocol

Het teletekst protocol is omschreven in European Telecommunication Standard ETS 300.072 (Terminal Equipment; Videotex presentation layer protocol and data syntax).
Het is een rommelig protocol en algemener dan wat met teletekst mogelijk is. Sommige zaken zijn niet omschreven of zijn nog in studie.
Vandaar hier een praktische handleiding, alleen gericht op teletekst.

Algemeen:
Het Videotext protocol kent 3 soorten 'displays':
'Alpha Mosaic': gebaseerd op charactersets die bestaan uit het alfabet en tekens die vlakjes (met een matrix van 2x3) vormen, vandaar 'mosaic'.
'Geometric': Vector gebaseerd, dwz lijnen, circles, vlakken die met coördinaten beschreven worden.
'Photographic': gebaseerd op pixels, zoals een gifplaatje.

Teletekst volgt het alphamosaic display heeft 8 kleuren (wit, geel, cyaan, groen, magenta, rood, blauw, zwart) van 40 characters breed en 24 regels hoog. De characterset is gebaseerd op ascii aangevuld met mosaic characters, de eerste 32 characters zijn controlcodes. Het lijkt door de kleuren wat op ansi en door de mosaiccharacters op ms-dos beeldopbouw. Maar het meest lijkt het op de uitvoer van de philips p2000 homecomputer. Zie http://www.komkon.org/~dekogel/m2000.html, met de documentatie en de sourcecodes kom je al een heel eind.

Omschrijving:
Het teletekstdisplay bestaat uit 40x24 characters. Een omschrijving van 1 pagina bestaat uit 9600 characters, hierbij zijn OOK controlcharacters bij inbegrepen. Een controlcharacter bezet dus een plaats op het scherm.
De controlcharacters bepalen de kleur, de grootte en enkele ander attributes van de opvolgende characters.
Per pagina wordt bepaald welk characterset er wordt gebruikt. De mij bekende charactersets zijn: engels, frans, zweeds, duits, spaans en italiaans. De omschrijvingen van de charactersets zijn NIET te vinden in ETS 300.072. De verschillen tussen de sets zijn voornamelijk letters met diacritische tekens en speciale characters en hebben asciiwaardes 35, 36, 64, 91-96, 123-126 (verderop omschreven).
De eerste rij tekens (pagina, zendernaam, datum, tijd) zijn gegenereerd ofwel door de encoder (zender) ofwel door de decoder (ontvanger). Hoe deze regel uit moet zien is ook niet gestandaardiseerd.
Voor de graphics bestaan 2 mosaic character sets: continuous en seperated.
De sets hebben dezelfde vormen, maar bij de seperated set zijn de afzonderlijke vlakjes gescheiden van elkaar en bij de continuous set zitten ze tegen elkaar aan. Meestal zie je de continuous versie, bij de BBC (pagina 100) zijn de woorden 'BBC CEEFAX' opgebouwd met continuous en de zeilboot met seperated mosaic. Bij de BRT 1 teletekst (pagina 100) de woorden 'BRTN TELETEKST' met seperated mosaic.

De Controlcharacters:
De eerste 32 characters zijn controlcharacters:

asciiafkortingETS naam uitleg
000ABKALPHA BLACK alphanumeric set (dus niet 1 van de 2 mosaic sets), kleur zwart.
001ANRALPHA RED alphanumeric set, kleur rood.
002ANGALPHA GREEN alphanumeric set, kleur groen.
003ANYALPHA YELLOW alphanumeric set, kleur geel.
004ANBALPHA BLUE alphanumeric set, kleur blauw.
005ANMALPHA MAGENTA alphanumeric set, kleur magenta.
006ANCALPHA CYAN alphanumeric set, kleur cyaan.
007ANWALPHA WHITE alphanumeric set, kleur wit.
008FSHFLASH knipperend.
009STDSTEADY niet knipperend.
010SBXSTART BOX wordt niet gebruikt bij teletekst.
011EBXEND BOX wordt niet gebruikt bij teletekst.
012NSZNORMAL SIZE hoogte van de letter = 1 regel.
013DBHDOUBLE HEIGHT hoogte van de letter = 2 regels. (zie opmerkingen)
014DBWDOUBLE WIDTH 2 x normale breedte, wordt niet gebruikt bij teletekst.
015DBSDOUBLE SIZE 2 x normale breedte en hoogte, wordt niet gebruikt bij teletekst.
016MBKMOSAIC BLACK mosaic set (1 van de twee, zie 025 en 026), kleur zwart.
017MSRMOSAIC RED mosaic set, kleur rood.
018MSGMOSAIC GREEN mosaic set, kleur groen.
019MSYMOSAIC YELLOW mosaic set, kleur geel.
020MSBMOSAIC BLUE mosaic set, kleur blauw.
021MSMMOSAIC MAGENTA mosaic set, kleur magenta.
022MSCMOSAIC CYAN mosaic set, kleur cyaan.
023MSWMOSAIC WHITE mosaic set, kleur wit.
024CDYCONCEAL DISPLAY verborgen text, opgeheven wanneer andere kleur wordt gekozen.
025SPLSTOP LINING bij mosaic continuous set gebruiken.
026STLSTART LINING bij mosaic seperated set gebruiken.
027CSICONTROL SEQUENCE INTRODUCERwordt niet gebruikt bij teletekst.
028BBDBLACK BACKGROUND achtergrondkleur van de characters zwart.
029NBDNEW BACKGROUND achtergrondkleur wordt de kleur van de characters.
030HMSHOLD MOSAIC bij mosaic set de laatst gebruikte character weergeven als er een control character staat.
031RMSRELEASE MOSAIC bij mosaic set een spatie weergeven als er een control character staat (default).

Opmerkingen bij controlcharacters:
Een control character neemt ook een positie in op de display, dus te beschouwen als een spatie. Als HOLD MOSAIC aanstaat wordt de laatste mosaic character weergegeven bij een control character als de character set op mosaic staat.

Aan het begin van iedere regel worden de attributes gereset. Dwz: alphanumeric characterset, character kleur wit, achtergrondkleur zwart, niet knipperend of verborgen, normale grootte, als mosaic aan komt te staan continuous set gebruiken, spatie bij control character.

Bij DOUBLE HEIGHT worden de characters met hun achtergrondkleur met dubbele hoogte weergegeven, ze worden naar onder uitgerekt. Op de laatste regel moet deze control genegeerd worden.
Wat er op de regel na DOUBLE HEIGHT moet gebeuren is volgens ETS 300.072 nog onderwerp van studie. Wat er op alle tv's gebeurt is het volgende:
Op de plaatsen waar de characters van de bovengelegen regel dubbele hoogte hebben wordt niets neergezet, op alle andere posities alleen dezelfde achtergrondkleur als op de bovengelegen regel.
Characters en controls worden dus genegeerd op die regel.
Soms staat er toch nog tekst op een regel na een regel met characters met dubbele hoogte. Ik heb er voor gekozen deze tekst wel te laten zien en bij iedere character de achtergrondkleur te nemen van de dezelfde positie op de bovengelegen regel.

testpagina van at5.

In bovenstaand voorbeeld is op regel 14/15 een tekst met dubbele hoogte te zien. Op de teletekst van de tv is het woord 'Stilstaand!' niet te zien.
De teletekstdata die de server produceert vind je hier.

Ik negeer FLASH (knipperen) en CONCEAL DISPLAY (verborgen tekst), ik laat de characters daarna in de geldende kleur zien.

Alphanumeric characters
De alphanumeric characters volgen de asciicodes met uitzondering van codes 35, 36, 64, 91-96, 123-126.
Deze codes verschillen ook per taalset. Uit de charactersets van programma's waarmee teletekstpagina's worden gemaakt kon ik het volgende destileren:

Mosaic characters
De mosaic characters zijn opgebouwd uit 6 vierkantjes; 2 breed, 3 hoog.
Bij de continuous set (bovenste 2 rijen in het plaatje) liggen de vierkantjes tegen elkaar aan, bij de seperated set (onderste 2 rijen in het plaatje) zit ruimte tussen de vierkantjes.

De Server

Als server gebruiken we 'Lantext for Windows' van 'Keyword info systems'. Zie: http://www.keyword.nl/TeletekstLAN.html.
Dit systeem is eigenlijk bedoeld om in een netwerk met een aparte browser teletekstpagina's op te vragen. Dit systeem kan ook asciifiles en htmlpagina's exporteren. De geexporteerde html-pagina's hebben 3 nadelen (anders waren we snel klaar geweest):
  • ze maken gebruik van tags die alleen microsoft explorer begrijpt.
  • een apart font installeren op de machine van de gebruiker is noodzakelijk (om de mosaic graphics te kunnen zien).
  • de achtergrondkleuren worden genegeerd.
    Als er geen exportoptie geselecteerd wordt schrijft Lantex 'ruwe teletekstfiles' weg, waarbij teletekstpagina's die een aantal subpagina's hebben als 1 file weggeschreven worden. De files betaan uit teletekstcodes (0-127), per subpagina beslaat dat 24x40=960 bytes.
    De eerste 'regel' (=40 characters of bytes) van iedere (sub)pagina geeft de volgende informatie:
    bytes 0-5 paginanummer en subpaginanummer, gescheiden door '/', vb: 100/2
    byte 6 0 (=teletekstcodering), 1=asciicodering komt bij ons niet voor.
    byte 7 taalsetnummer:
    0=engels
    1=frans
    2=zweeds
    4=duits
    5=spaans
    6=italiaans
    bytes 8-39Teletekst kopregel, meestal bestaande uit zendernaam, datum, tijd.

    De teletextserver hardware kan maar 4 pagina's tegelijk grabben, hij heeft maar geheugen voor 4 pagina's. Softwarematig kan worden aangegeven welke 4 pagina's binnengehaald moeten worden.
    Het serverprogramma doet dat besturen van de server hardware. Je kunt in een lijst aangeven welke pagina's (eventueel met de pagina's waar naar toe wordt gelinkt op die pagina) om de hoeveel minuten opgehaald moeten worden. Het serverprogramma gaat dan automatisch aan de hardware opgeven welke pagina's die wil hebben. Hij zet 4 pagina's (het maximale waar de hardware geheugen voor heeft) in een wachtrij, als 1 van die pagina's binnen is haalt de server- software die pagina uit het geheugen van de hardware en bewaart het op schijf, en hij zet een nieuwe pagina in de wachtrij.
    Op dit proces van in welke volgorde de pagina's in de wachtrij komen heb je geen invloed. Dat is een algoritme die de server gebruikt naar aanleiding van de lijst die je ingevuld hebt.

    De Conversie

    De teletekstserver is gekoppeld aan ons netwerk. Vreemd genoeg wilde het serverprogramma niet goed werken als de teletekstfiles weggeschreven moesten worden op een harddisk van een andere computer in het netwerk. Na een aantal files weggeschreven te hebben stopte de server met een melding die nergens op sloeg.
    Dit is opgelost door vanuit een unixmachine door middel van 'Samba' de (windows 95) server harddisk te benaderen. Met 'smbtar' worden de nieuw aangemaakte teletekstfiles in een tarfile opgehaald en uitgepakt. De 'nieuw aangemaakte teletekstfiles' wil zeggen: alle files op de teletextserver waarvan de date/time jonger is dan de date/time van de vorige tarfile op de http-server cq. obelix. De tarfile krijgt de date/time van de http-server op het moment dat hij binnengehaald is. De stand van de klokken van de betrokken machines is dus erg belangrijk! Als de klok van de teletextserver achterloopt op die van de http-server, dan zijn files die gegrabt worden net na dat een tarfile is overgezet ouder dan die tarfile en worden de volgende keer niet opgehaald. De klok van de teletextserver kan het beste 2 minuten voorlopen op de klok van de http-server. Er worden dan wel wat files te veel opgehaald, maat er blijven er tenminste geen liggen.
    Met behulp van een tar-list worden de files 1 voor 1 vertaald naar een gifplaatje en bijbehorende html met clientside image map. Ik heb hier een C-programmaatje voor gemaakt dat met cron ieder kwartier opstart. Source: obelix:/ext/www/at5/nl/teletext/getpages.c.
    De source van het vertaalprogramma: regulus:/usr/people/wiel/sources/TeleText/tt2html.c.
    Na het vertalen worden de teletekstfiles verplaatst naar /ext/www/at5/nl/teletext/DATA/.
    Ieder uur wordt op basis van de files van teletekstpagina's 201 t/m 207 program.html gegenereerd, source: regulus:/usr/people/wiel/sources/TeleText/makeprogram.c.