diff --git a/cept.py b/cept.py index cd567cb..5bc8806 100644 --- a/cept.py +++ b/cept.py @@ -6,81 +6,88 @@ released under GPL ''' CR = "\x0d" -LF = "\x0a" UMLAUT = "\xc9" INI = "\x13" TER = "\x1c" SEND = "\x1a" CURSOR_ON = "\x11" +CURSOR_OFF = "\x14" BSP = "\x08" # backspace CLEARLINE = "\x18" +# TODO: stimmt das? +LEFT = "\x08" +RIGHT = "\x09" +DOWN = "\x0a" +UP = "\x0b" +HOME = "\x1e" + clear_line24 = ( - "\x1f\x58\x41" # Cursor Zeile 24, Spalte 0 - "\x18" # Zeile löschen - ) + "\x1f\x58\x41" # Cursor Zeile 24, Spalte 0 + "\x18" # Zeile löschen + ) error_prefix = ( - "\x1f\x2f\x40\x58" # Servicesprung Zeile 24 - ) + "\x1f\x2f\x40\x58" # Servicesprung Zeile 24 + ) error_suffix = ( - "\x1f\x2f\x4f" # Ende Servicesprung - "\x1f\x58\x41" # Cursor Zeile 24, Spalte 0 - ) + "\x1f\x2f\x4f" # Ende Servicesprung + "\x1f\x58\x41" # Cursor Zeile 24, Spalte 0 + ) eingabezeile = ( - "\x1b" # Hintergrund blau ganze Reihe - "\x23" - "\x21" - "\x54" - "\x44" # Hintergrund blau, Vordergrund gelb - "\x83" ) + "\x1b" # Hintergrund blau ganze Reihe + "\x23" + "\x21" + "\x54" + "\x44" # Hintergrund blau, Vordergrund gelb + "\x83" ) init_screen = ( - "\x1f" "\x2f" "\x42" # Grundzustand parallel - "\x9b" - "\x30" "\x32" "\x3b" "\x32" "\x33" "\x55" # Scrollbereich ist Zeile 2 - 23 - "\x9b" - "\x32" "\x60" # Implizites Scrollen an - "\x1b" "\x23" "\x21" "\x54" # Hintergrund blau ganze Reihe - "\x94" "\x83" # Hintergrund blau, Vordergrund gelb - "\x42" "\x74" "\x78" "\x20" "\x53" "\x65" "\x72" "\x76" "\x65" "\x72" # Btx Server - "\x20" "\x2d" "\x20" "\x4E" "\x6F" "\x72" "\x62" "\x65" "\x72" "\x74" # - Norbert - "\x20" "\x4B" "\x65" "\x68" "\x72" "\x65" "\x72" "\x2c" "\x20" # Kehrer, - "\x41" "\x70" "\x72" "\x69" "\x6C" "\x20" "\x32" "\x30" "\x31" "\x36" # April 2016 - "\x90" "\x87" # Hintergrund schwarz, Vordergrund weisz - "\x0d" "\x0a" # CR/LF - "\x11" # Cursor on - ) + "\x1f" "\x2f" "\x42" # Grundzustand parallel + "\x9b" + "\x30" "\x32" "\x3b" "\x32" "\x33" "\x55" # Scrollbereich ist Zeile 2 - 23 + "\x9b" + "\x32" "\x60" # Implizites Scrollen an + "\x1b" "\x23" "\x21" "\x54" # Hintergrund blau ganze Reihe + "\x94" "\x83" # Hintergrund blau, Vordergrund gelb + "\x42" "\x74" "\x78" "\x20" "\x53" "\x65" "\x72" "\x76" "\x65" "\x72" # Btx Server + "\x20" "\x2d" "\x20" "\x4E" "\x6F" "\x72" "\x62" "\x65" "\x72" "\x74" # - Norbert + "\x20" "\x4B" "\x65" "\x68" "\x72" "\x65" "\x72" "\x2c" "\x20" # Kehrer, + "\x41" "\x70" "\x72" "\x69" "\x6C" "\x20" "\x32" "\x30" "\x31" "\x36" # April 2016 + "\x90" "\x87" # Hintergrund schwarz, Vordergrund weisz + "\x0d" "\x0a" # CR/LF + "\x11" # Cursor on + ) btxlogo = ( - "\x1f\x2f\x42" # Grundzustand parallel - "\x1b\x7e" # Zeichensatz G1 rechts - "\x9b\x31\x40" # Farbtafel 1 (Halbtöne) - "\x1b\x23\x20\x54" # ganzer Schirm blau - "\x1f\x3d1# 200961a\x1f" # Link zur Demo-Startseite 200961a - "\x1f\x43\x48\xb8\xa3\x12\x57\xe4" - "\x1f\x44\x47\xea\xa0\x12\x59\xb5" - "\x1f\x45\x47\xea \xe8\xfc\xdf\x12\x49\xfc\xb4 \xb5" - "\x1f\x46\x47\xea \xe8\xdf\x12\x44\xa3\x12\x45\xdf\x12\x44\xb4 \xb5" - "\x1f\x47\x47\xea \xaa\xdf\xdf\xdf\xaf\xa1 \xfc\xdf\xdf\xfc \xa2\xaf\xdf\xdf\xdf\xa5 \xb5" - "\x1f\x48\x47\xea \xa2\xe3\xf8\xfe\xdf\xea\xdf\x12\x43\xb5\xdf\xfd\xf4\xb3\xa1 \xb5" - "\x1f\x49\x47\xea \xdf\x12\x43\xea\xdf\x12\x43\xb5\xdf\x12\x43 \xb5" - "\x1f\x4a\x47\xea \xdf\x12\x43\xfd\xf3\xaf\xaf\xf3\xfe\xdf\x12\x43 \xb5" - "\x1f\x4b\x47\xea \xdf\x12\x4d \xb5" # Ende Telefon-Logo - "\x1f\x4c\x47\xea \x12\x59\xb5" - "\x1f\x4d\x47\xea \x12\x44\xbc\xb4\xf0\xb0\xf4\xe0\xb0\xf0\xb0\xec\xa4\xf0\xb0\xb0\xb0\xf4 \x12\x44\xb5" # Logo-Text 1 - "\x1f\x4e\x47\xea \x12\x44\xbf\xb1\xbd\xa5\xb5\xea \xb5\xb5\xea \xbd\xa5\xb9\xb1\xb5 \x12\x44\xb5" # Logo-Text 2 - "\x1f\x4f\x47\xea \x12\x44\xa1\xa1\xa3\xa1\xa3\xa2 \xa3\xa1\xa2 \xa3\xa1\xa1\xa1\xa3 \x12\x44\xb5" # Logo-Text 3 - "\x1f\x50\x47\xa2\xe4\xa0\x12\x57\xb8\xa1" - "\x1f\x51\x49\xa3\x12\x57\r\n" - "\x9b\x31\x40" # Farbtafel 1 - "\x87\x19\x50\x12\x67" # Strich - "\x9b\x30\x40" # Farbtafel 0 - "\x87 Herzlich Willkommen in\r\n" - "\x87 retroText!\r\n" - "\x9b\x31\x40" # Farbtafel 1 - "\x87\x19\x50\x12\x67" - "\x9b\x30\x40" # Farbtafel 0 - "\x83Mit # fortfahren\r\n" - ) \ No newline at end of file + "\x1f\x2f\x42" # Grundzustand parallel + "\x1b\x7e" # Zeichensatz G1 rechts + "\x9b\x31\x40" # Farbtafel 1 (Halbtöne) + "\x1b\x23\x20\x54" # ganzer Schirm blau + "\x1f\x3d1# 200961a\x1f\x2f" # Link zur Demo-Startseite 200961a + "\x1f\x43\x48\xb8\xa3\x12\x57\xe4" + "\x1f\x44\x47\xea\xa0\x12\x59\xb5" + "\x1f\x45\x47\xea \xe0\xf8\xfc\xdf\x12\x49\xfc\xf4\xb0 \xb5" + "\x1f\x46\x47\xea \xe8\xdf\x12\x43\xbf\xa3\x12\x45\xef\xdf\x12\x43\xb4 \xb5" + "\x1f\x47\x47\xea \xaa\xdf\xdf\xdf\xaf\xa1\xe0\xfc\xdf\xdf\xfc\xb0\xa2\xaf\xdf\xdf\xdf\xa5 \xb5" + "\x1f\x48\x47\xea \xa2\xe3\xf8\xfe\xdf\xea\xdf\x12\x43\xb5\xdf\xfd\xf4\xb3\xa1 \xb5" + "\x1f\x49\x47\xea \xdf\x12\x43\xea\xdf\x12\x43\xb5\xdf\x12\x43 \xb5" + "\x1f\x4a\x47\xea \xdf\x12\x43\xfd\xf3\xaf\xaf\xf3\xfe\xdf\x12\x43 \xb5" + "\x1f\x4b\x47\xea \xdf\x12\x4d \xb5" # Ende Telefon-Logo + "\x1f\x4c\x47\xea \x12\x59\xb5" + "\x1f\x4d\x47\xea \x12\x44\xbc\xb4\xf0\xb0\xf4\xe0\xb0\xf0\xb0\xec\xa4\xf0\xb0\xb0\xb0\xf4 \x12\x44\xb5" # Logo-Text 1 + "\x1f\x4e\x47\xea \x12\x44\xbf\xb1\xbd\xa5\xb5\xea \xb5\xb5\xea \xbd\xa5\xb9\xb1\xb5 \x12\x44\xb5" # Logo-Text 2 + "\x1f\x4f\x47\xea \x12\x44\xa1\xa1\xa3\xa1\xa3\xa2 \xa3\xa1\xa2 \xa3\xa1\xa1\xa1\xa3 \x12\x44\xb5" # Logo-Text 3 + "\x1f\x50\x47\xa2\xe4\xa0\x12\x57\xb8\xa1" + "\x1f\x51\x49\xa3\x12\x57\r\n" + "\x9b\x31\x40" # Farbtafel 1 + "\x87\x19\x50\x12\x67" # Strich + "\x9b\x30\x40" # Farbtafel 0 + "\x87 Herzlich Willkommen in\r\n" + "\x87 retroText!\r\n" + "\x9b\x31\x40" # Farbtafel 1 + "\x87\x19\x50\x12\x67" + "\x9b\x30\x40" # Farbtafel 0 + "\x83Mit # fortfahren\r\n" + ) \ No newline at end of file diff --git a/config.py b/config.py index b56ff9e..c08fd3e 100644 --- a/config.py +++ b/config.py @@ -6,16 +6,20 @@ Configuration file import logging -## general settings: -PAGES="pages/" -DEMOPAGES="demopages/" +## define the location of rtx pages +## rtx searches all directories and serves the page from the first one +PAGES=[ + "pages/", + "presentation/", + "demopages/", + ] ## logging settings: # loglevel values: DEBUG (all messages) > INFO > WARNING > ERROR > CRITICAL (only cricital messages) LOGLEVEL=logging.DEBUG ## serial port settings: -PORT="/dev/pts/10" +PORT="/dev/pts/5" #PORT="/dev/ttyUSB0" BAUDRATE="2400" # if the system is connected directly (null-modem): MODE=direct diff --git a/demopages/11 b/demopages/11 new file mode 120000 index 0000000..7b5c0ef --- /dev/null +++ b/demopages/11 @@ -0,0 +1 @@ +10501a \ No newline at end of file diff --git a/demopages/abida b/demopages/abida new file mode 120000 index 0000000..bfc0596 --- /dev/null +++ b/demopages/abida @@ -0,0 +1 @@ +35853a \ No newline at end of file diff --git a/demopages/adac b/demopages/adac new file mode 120000 index 0000000..3deb259 --- /dev/null +++ b/demopages/adac @@ -0,0 +1 @@ +654320a \ No newline at end of file diff --git a/demopages/bka b/demopages/bka new file mode 120000 index 0000000..bd81ba8 --- /dev/null +++ b/demopages/bka @@ -0,0 +1 @@ +86553222a \ No newline at end of file diff --git a/demopages/cbm b/demopages/cbm new file mode 120000 index 0000000..2fe929b --- /dev/null +++ b/demopages/cbm @@ -0,0 +1 @@ +20095a \ No newline at end of file diff --git a/demopages/chip b/demopages/chip new file mode 120000 index 0000000..f421913 --- /dev/null +++ b/demopages/chip @@ -0,0 +1 @@ +50707545a \ No newline at end of file diff --git a/demopages/commodore b/demopages/commodore new file mode 120000 index 0000000..2fe929b --- /dev/null +++ b/demopages/commodore @@ -0,0 +1 @@ +20095a \ No newline at end of file diff --git a/demopages/dimdi b/demopages/dimdi new file mode 120000 index 0000000..c958a43 --- /dev/null +++ b/demopages/dimdi @@ -0,0 +1 @@ +44479a \ No newline at end of file diff --git a/demopages/eden b/demopages/eden new file mode 120000 index 0000000..d3e23c9 --- /dev/null +++ b/demopages/eden @@ -0,0 +1 @@ +33033a \ No newline at end of file diff --git a/demopages/etb b/demopages/etb new file mode 120000 index 0000000..25c1270 --- /dev/null +++ b/demopages/etb @@ -0,0 +1 @@ +1188a \ No newline at end of file diff --git a/demopages/faz b/demopages/faz new file mode 120000 index 0000000..9362a09 --- /dev/null +++ b/demopages/faz @@ -0,0 +1 @@ +34034a \ No newline at end of file diff --git a/demopages/ffmi b/demopages/ffmi new file mode 120000 index 0000000..86e459f --- /dev/null +++ b/demopages/ffmi @@ -0,0 +1 @@ +34034100a \ No newline at end of file diff --git a/demopages/geisterbahn b/demopages/geisterbahn new file mode 120000 index 0000000..f0bc614 --- /dev/null +++ b/demopages/geisterbahn @@ -0,0 +1 @@ +5400404a \ No newline at end of file diff --git a/demopages/lotto b/demopages/lotto new file mode 120000 index 0000000..649e4de --- /dev/null +++ b/demopages/lotto @@ -0,0 +1 @@ +57575a \ No newline at end of file diff --git a/demopages/markttechnik b/demopages/markttechnik new file mode 120000 index 0000000..d291ada --- /dev/null +++ b/demopages/markttechnik @@ -0,0 +1 @@ +64064a \ No newline at end of file diff --git a/demopages/mut b/demopages/mut new file mode 120000 index 0000000..d291ada --- /dev/null +++ b/demopages/mut @@ -0,0 +1 @@ +64064a \ No newline at end of file diff --git a/demopages/neuemedien b/demopages/neuemedien new file mode 120000 index 0000000..b82d0b3 --- /dev/null +++ b/demopages/neuemedien @@ -0,0 +1 @@ +34344a \ No newline at end of file diff --git a/demopages/pcnet b/demopages/pcnet new file mode 120000 index 0000000..d707711 --- /dev/null +++ b/demopages/pcnet @@ -0,0 +1 @@ +208888a \ No newline at end of file diff --git a/demopages/post b/demopages/post new file mode 120000 index 0000000..f25c58c --- /dev/null +++ b/demopages/post @@ -0,0 +1 @@ +20000a \ No newline at end of file diff --git a/demopages/rheinpfalz b/demopages/rheinpfalz new file mode 120000 index 0000000..1b80c2a --- /dev/null +++ b/demopages/rheinpfalz @@ -0,0 +1 @@ +67007a \ No newline at end of file diff --git a/demopages/schrottplatz b/demopages/schrottplatz new file mode 120000 index 0000000..e0ef241 --- /dev/null +++ b/demopages/schrottplatz @@ -0,0 +1 @@ +9204920400920a \ No newline at end of file diff --git a/demopages/semmel b/demopages/semmel new file mode 120000 index 0000000..b5f8e08 --- /dev/null +++ b/demopages/semmel @@ -0,0 +1 @@ +208585a \ No newline at end of file diff --git a/demopages/starduck b/demopages/starduck new file mode 120000 index 0000000..0c07ed4 --- /dev/null +++ b/demopages/starduck @@ -0,0 +1 @@ +20147475a \ No newline at end of file diff --git a/demopages/vznrw b/demopages/vznrw new file mode 120000 index 0000000..02c6b44 --- /dev/null +++ b/demopages/vznrw @@ -0,0 +1 @@ +21212a \ No newline at end of file diff --git a/doc/CEPT/retropulsiv-template.cept b/doc/CEPT/retropulsiv-template.cept new file mode 100644 index 0000000..e2fb339 --- /dev/null +++ b/doc/CEPT/retropulsiv-template.cept @@ -0,0 +1 @@ +/B# ( @FA#!0Op!LL"Op!LL"0@@Cp!LL!O|OpL@Cp!0Gx!A`%@X!0Cp!LL!L@%0@@Cp!LL$Cp!0@@"ACG~!\@X@0@@"FC!LF!_xO`0GGGONXN_\\@!@@[[0xp@@yl!SM!@@[[0@@"p@!`@!@@"0'Yf AA # WRetroText( @CA!"#$%DJ1@&'()*(@1@BURetroPulsiv 8.0DT26.+27. Nov. 2016EAPgVAPg0@WA0@+ @0+ZurHuck Zeichensatz+#X` 1990aXA \ No newline at end of file diff --git a/doc/CEPT/template.cept b/doc/CEPT/template.cept new file mode 100644 index 0000000..03c8dd4 --- /dev/null +++ b/doc/CEPT/template.cept @@ -0,0 +1 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190a=2# 19001a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' UeberschriftEATextWA#!T0!ZurHuck Weiter!#X` 19000aXA \ No newline at end of file diff --git a/doc/DRCs.ods b/doc/DRCs.ods new file mode 100644 index 0000000..6f9c23d Binary files /dev/null and b/doc/DRCs.ods differ diff --git a/doc/Farbdefinition.ods b/doc/Farbdefinition.ods new file mode 100644 index 0000000..5945607 Binary files /dev/null and b/doc/Farbdefinition.ods differ diff --git a/doc/Nummernkreis 190.txt b/doc/Nummernkreis 190.txt new file mode 100644 index 0000000..124d8a6 --- /dev/null +++ b/doc/Nummernkreis 190.txt @@ -0,0 +1,11 @@ +190 - Leitseite ACN + +190 0 - Präsentation +190 0xx + +190 1 - RetroPulsiv +190 101 - Über die Retropulsiv +190 102 - Vortragsprogramm + +190 9 - Testbilder +190 9xx \ No newline at end of file diff --git a/doc/Vorbereitung Praesentation.txt b/doc/Vorbereitung Praesentation.txt deleted file mode 100644 index f711559..0000000 --- a/doc/Vorbereitung Praesentation.txt +++ /dev/null @@ -1,128 +0,0 @@ -Präsentation retroText ----------------------- - -Bildschirmtext (Btx) war ein inter- -aktiver Onlinedienst. - -Vorstellung auf der IFA '77 in Berlin -von Postminister Kurt Gscheidle -Entwickelt unter der Leitung von Eric -Danke, inspiriert 1975 durch Veröffent- -lichung über das britische -PRESTEL-System. - ----- - -1980 Feldversuch mit 2000 Teilnehmern. -18. März 1983 Unterzeichnung des - Btx-Staatsvertrags -1. Sept. 1983 Start zur IFA - -Nutzer: 1986 ca. 60.000 (gepl.: 1 Mio.) -erst 1996 1 Mio., aber da war es schon - T-Online mit Internet+E-Mail - -31.12.2001: Abschaltung des - klassischen Btx -Online-Banking noch bis 10. Mai 2007 - ----- - -Btx-Leitzentrale in Ulm -Zu Beginn Vermittlungsstellen in - Düsseldorf, Hamburg, Frankfurt/M, - München, Stuttgart -Geplant waren 150 VSt... - ----- - -Österreich: -Start Juni 1982, -MUPID als eigenes Terminal - (vgl. RetroPulsiv 7.0) -Ende: November 2001 - ----- - -Ähnliche Systeme in Europa: - -Schweiz: Videotex -UK: Prestel -Schweden: Prestel plus -Frankreich: Minitel -Dänemark: Teledata -Italien: Videotel -Niederlande: Viditel -Spanien: Ibertex - -Deutschland ------------ - -Btx-Endgerät: -- Fernseher mit Btx-Decoder oder - Set-Top-Box (z.B. btxTv) -- Btx-Terminal (z.B. MultiTel, MultiKom) -- Computer mit Btx-Karten/-Modulen - oder Software - -Postmodem: -- D-BT 03 war lange der Standard -- 1200 Bit/s empfangen, - 75 Bit/s senden (V.23) -- feste Anschlußkennung (EPROM) -- fest programmierte Telefonnummer -- eigenes Anschlußinterface - -- später auch alternative Modems, - Akustikkoppler erlaubt -- hierfür war "Software-Kennung" nötig -- Zugänge mit höherer Datenrate kamen - erst über die Jahre - -Zugangsdaten: -- Anschlußkennung (12 Stellen) identi- - fiziert den Telefonanschluß -- aufgrunnd fehlender "CallerID", da ja - noch viele VSt Analogtechnik hatten - -- Benutzerkennung identifiziert den - Teilnehmer -- Mitbenutzerkennung z.B. andere - Familienmitglieder -- Persönliches Kennwort als Sicherheit - -- Für nomadische Benutzer: - - Anschlußfreizügigkeit - - Teilnehmerfreizügigkeit - -Btx-Server: -- Hierarchisch organisiert -- Leitzentrale in Ulm mit IBM-Technik -- weitere VSt waren "Caches" -- "externe Rechner" wurden direkt - angesprochen, waren per Datex-P - (X.25) angebunden - - Beispiele: Quelle, Fluglinien, Bahn, - Banken ... - -Kosten für Inhalte: -- "seitenabhängige Vergütung": - 0,01 DM bis 9,99 DM möglich -- "zeitabhängige Vergütung": - 0,01 DM bis 1,30 DM pro Min. möglich -- Abrechnung über Telefonrechnung - -1993: Trennung von Netz (Datex-J) - und Inhalt (Btx) -Btx blieb aber der einzige Dienst - im Datex-J -1995: Umbenennung in T-Online - -Österreich: "PAN" (Public Access - Network), 1993-1995 - -Der CEPT-Standard ------------------ - - -https://de.wikipedia.org/wiki/Minitel diff --git a/doc/rtx-Logo.png b/doc/rtx-Logo.png new file mode 100644 index 0000000..3baa127 Binary files /dev/null and b/doc/rtx-Logo.png differ diff --git a/doc/socat mit dosbox.txt b/doc/socat mit dosbox.txt new file mode 100644 index 0000000..3e94933 --- /dev/null +++ b/doc/socat mit dosbox.txt @@ -0,0 +1,36 @@ +socat mit DosBox als "virtuelles Modem" +--------------------------------------- + +In der dosbox-Konfigurationsdatei folgenden Eintrag hinzufügen/ändern: + +---------- +[serial] +serial1=nullmodem server port:5000 +---------- + +Nun öffnet dosbox beim Start den TCP-Port 5000, worüber COM1 von DOS aus +verfügbar ist. + +Um von Linux-Seite her einen "virtuellen seriellen Port" zur Vefügung zu haben, +folgendes Kommando eingeben: + +# socat -d -d tcp:127.0.0.1:5000 pty,raw,echo=0 + +Dies verbindet den Port 5000 (dosbox) mit einem neuen /dev/pts-Device. +Welches /dev/pts-Device es ist, gibt socat beim Start aus, z.B.: + +---------- +socat[8054] N opening connection to AF=2 127.0.0.1:5000 +socat[8054] N successfully connected from local address AF=2 127.0.0.1:51590 +socat[8054] N PTY is /dev/pts/5 +socat[8054] N starting data transfer loop with FDs [5,5] and [6,6] +---------- + +In die RetroText-Konfiguration config.py muß nun (in diesem Beispiel) + +PORT="/dev/pts/5" +MODE="direct" + +eingetragen werden. +MODE="direct" sorgt dafür, daß nicht auf ein Klingelzeichen gewartet wird, +welches von dosbox/socat nicht ausgegeben wird. diff --git a/pages/190101a b/pages/190101a new file mode 100644 index 0000000..8ae1c04 --- /dev/null +++ b/pages/190101a @@ -0,0 +1,15 @@ +/B# ( @FA#!0Op!LL"Op!LL"0@@Cp!LL!O|OpL@Cp!0Gx!A`%@X!0Cp!LL!L@%0@@Cp!LL$Cp!0@@"ACG~!\@X@0@@"FC!LF!_xO`0GGGONXN_\\@!@@[[0xp@@yl!SM!@@[[0@@"p@!`@!@@"0'Yf =10 190a=2# 190102a/AA # WRetroText( @CA!"#$%DJ1@&'()*(@1@BURetroPulsiv 8.0DRHUber die RetroPulsivEAPgVAPg0@+ @FA + Es gib zu wenig Retrocomputing- + Veranstaltungen im SHuden der Republik! + +Wer kennt sie nicht, die Computer der +60er, 70er und 80er Jahre? Kaum jemand +aus der "Generation Golf" sa nicht in +seiner Jugend vor einem C64, CPC oder +trHaumte von einem Amiga oder Atari ST. +Diese Zeit, in der die Welt der Compu- +ter vielfHaltig war und die begrenzten +technischen MHoglichkeiten ein hohes Ma +an Kreativitat fHorderten, wird auf der +RETROpulsiv an der HS Augsburg (erneut) +zum Leben erweckt!WA0@0+ZurHuck VortrHage+#Xb190101aXA \ No newline at end of file diff --git a/pages/190102a b/pages/190102a new file mode 100644 index 0000000..3ed0497 --- /dev/null +++ b/pages/190102a @@ -0,0 +1,16 @@ +/B# ( @FA#!0Op!LL"Op!LL"0@@Cp!LL!O|OpL@Cp!0Gx!A`%@X!0Cp!LL!L@%0@@Cp!LL$Cp!0@@"ACG~!\@X@0@@"FC!LF!_xO`0GGGONXN_\\@!@@[[0xp@@yl!SM!@@[[0@@"p@!`@!@@"0'Yf =10 190a=2# 190103a/AA # WRetroText( @CA!"#$%DJ1@&'()*(@1@BURetroPulsiv 8.0DRDas VortragsprogrammEAPgVAPg0@+ @FASamstag 26. November 2016 +11:30 Dr. Stefan HHoltgen: + G.W. Leibniz und der ALTAIR 8800 + Eine archHaologische Verschaltung + von Computern und Philosophie +15:00 Herwig Solf: Feuer fur den A500 + klassische Beschleunigung + fHur die Freundin, aber wie? +17:00 Christian Krenner: Space Chase: + Entwicklung eines Spiels fHur die + CBM II-Computer + +Sonntag 27. November 2016 +13:00 Richard LHowenstein: RESHOOT + Entwicklung eines Shoot em Up + fHur den Amiga 1200WA0@0+ZurHuck Veranstaltungen+#Xb190102aXA \ No newline at end of file diff --git a/pages/190103a b/pages/190103a new file mode 100644 index 0000000..2bd0ca8 --- /dev/null +++ b/pages/190103a @@ -0,0 +1 @@ +/B# ( @FA#!0Op!LL"Op!LL"0@@Cp!LL!O|OpL@Cp!0Gx!A`%@X!0Cp!LL!L@%0@@Cp!LL$Cp!0@@"ACG~!\@X@0@@"FC!LF!_xO`0GGGONXN_\\@!@@[[0xp@@yl!SM!@@[[0@@"p@!`@!@@"0'Yf =10 190a/AA # WRetroText( @CA!"#$%DJ1@&'()*(@1@BURetroPulsiv 8.0CYWeitereDQPflichtveranstaltungenEAPgVAPg0@+ @FA...WA0@0+ZurHuckXb190103aXA \ No newline at end of file diff --git a/pages/charset b/pages/190910a similarity index 51% rename from pages/charset rename to pages/190910a index e0f601c..3e27c99 100644 --- a/pages/charset +++ b/pages/190910a @@ -1,8 +1,7 @@ -/# ( @GA#!0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@AA 1@# T(@"A0@( @!"# - $%& (@ -Bildschirmtrix - #!T -#!T1@ Testbild: ZeichensHatze *charset# +/B# ( @GA#!0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@0'Yf =10 1909a=2# 190911a/AA 1@# T"A0@RetroText + + @#!T +#!T1@$%& !"# + Testbild: ZeichensHatze 0@ (@G0-SET: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ @@ -10,7 +9,4 @@ (@G2-SET:(b !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ - (@G3-SET:(d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ - - (@#!TWeiter mit # oder *Seitennummer# - Eingabe ==> \ No newline at end of file + (@G3-SET:(d !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ WA(@#!T0'ZurHuck DRCS'#X` 190910aXA \ No newline at end of file diff --git a/pages/1909111a b/pages/1909111a new file mode 100644 index 0000000..1cf66d7 --- /dev/null +++ b/pages/1909111a @@ -0,0 +1,16 @@ +/B# ( @KA#!0@^QHJCEDBB0@@p_@yabCA0@DO`XN{trH0@f@@@@`pP0@@x~DCXX[X0@@@@@@xOpX0@@@@@@@@|N0CAABFLLHLD0WJGCA@@@AB0eRH`pPQhLF0FCAHfPHh`@0ToHXYIHIIL0aFX`@@@`@`0p@@@@@@@@@0DEECCAA@@@0Lxpp@@GlXO0CA@@Gx@Oxp0@pPPXHHhhl0LLDDCCA@AA0PPxp`@@```0@@@@@@@@@@0@@@x_@@@@0GB]A@pP@C0Qqcb@@@@CB0DDFBBBBrNB0@@@@@@@@@@0```PPPPLom0@@@@@@@@@`=10 1909a=2# 1909112aAA 1@# T"A0@RetroText + #!T +#!T0@ Testbild DRCS + 0@ +BTX DRCS-Beispiel nach CEPT T/CD 6-1 + + Alle geladenen DRCS Zeichen: + ( @!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ + + (@Zusammengebaut zu einem Bild: + + ( @!"#$%&' + ()*+,-. + /012345 + 6789:;< + (@*Facepalm*WA(@#!T0...ZurHuck Weiter...#X` 1909111aXA \ No newline at end of file diff --git a/pages/1909112a b/pages/1909112a new file mode 100644 index 0000000..aecd88b --- /dev/null +++ b/pages/1909112a @@ -0,0 +1,20 @@ +/C /@XSeite wird aufgebaut/B# ( @GA#!0@@@@@@@@@@@@@@@@@@@@0@@@@@@@@@A@G@L@sAoFO0@A@OCp\]`\P]|]~O^N^G0`ANsnww}wm~bGp0`@|@Gp`^`S`pApCqCsxw0@@@@@@@@@@p@L@b@q`rp0@@@@@@@@@@@@@@@@@@@@0@@@@@@@A@C@F@D@J@V@w0LgX{~_o^O{CfChAX@`A@0lxc`L@p@`@@@@@@@@@@w0@@@@@sAsCWDQ[@}`t`j`0NMAq@M`B@A@@@@M@BP@\0gH}t|rmuoNR_LFsCvAd0@@@@@@@@`@P@h@l@T@r@0@cAYA~B|BNE{G|OeI}H}0b@t@OOsSOPn`S`L@B@A0A{AAz@~@`@@@@@`@@Bg0R`BX@H@FABCAB@M@_B~B0@^@G@A@A@A@@~@pS~P0@w`WPI|EnEGbAA@A@@`@0m@]@|`|`bPwP]H\HhL`D0HBPBPBPDpDaDodeLhoh0@AHBpCpBqCA^AHA@@@@0B^Al@P@@@A@AH@HOhGdA0@B@BX@|P|pxwAgFgGO0XWEM_w0P@d@~@}L~|CpAp@`T~d0`DPDPFPBHBHBkZk{y[y0lHoHoIlIoiol`L`D`DpD0C@G@f@DA|ArAXAXBXBpB0B@pOhPFPAp@@D@]@KpG`0_OF[xWL_GG_|y_y[0c0~H~C~b~j}hHZvf}0YiYyYyiiimiykcxBxBxB0PDPBPZK~OqI}O}D_DC0pBPBLBLB@B@B`A`APAPA0@@@A@C@GAF_D_XY_i0_`p0G{~~0y{y`ypypY`[@B@D0pBpFpDhDnDlOhshsP_P0CAAAc@n@X@X@K@G@B@A0h@lAvA[AYazq~Y]Lvmy0h@dC@@GAHOG@hGwcX@o@0o_sG[OwY@0y~~||xp`a0@E@J@W@gAkC]D^HOwFo@0~`|`Y@I@z@t@l@h@P@`@0@A@@@@@@@@@@@@@@@@@@0{|wIM}B^An@p@L@C@A0t`LPCdDMcKsYCUcGGsG0@@@@@@}Y{Y0f|g~GpEWG_gc{`{G0_AorD}X|pi`f@L@p@@@0@@@@@@@@@@@@@@@@@@@@=10 1909a=2# 190912a/AA 1@# T(@"A0@RetroText + #!T +#!T0@ Testbild DRCS2 + + 0@BTX DRCS-Beispiel nach CEPT T/CD 6-1 + + Geladenene DRCS Zeichen: + ( @!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ + + (@Zusammengebaut zu einem Bild: + + ( @!"#$%&' + ()*+,-. + /012345 + 6789:;< + =>?@ABC + DEFGHIJ + KLMNOPQ + RSTUVWX + WA(@#!T0...ZurHuck Farben...#X` 1909112aXA \ No newline at end of file diff --git a/pages/190911a b/pages/190911a new file mode 100644 index 0000000..b067d57 --- /dev/null +++ b/pages/190911a @@ -0,0 +1,13 @@ +/B# ( @GA#!0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@0'Yf =10 1909a=2# 1909111a/AA 1@# T+ @"A0@RetroText + #!T +#!T1@$%& !"# + Testbild: DRCS +0@ + (@G0-SET: !"#$%&'()*+,-./0123456789:;<=>? + DRCS: ( @!"#$%&'()*+,-./0123456789:;<=>?(@ + + + (@G0-SET: @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_DRCS: ( @@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_(@ + + (@G0-SET: `abcdefghijklmnopqrstuvwxyz{|}~ + DRCS: ( @`abcdefghijklmnopqrstuvwxyz{|}~WA(@#!T0'ZurHuck Weiter'#X` 190911aXA \ No newline at end of file diff --git a/pages/colorset b/pages/190912a similarity index 62% rename from pages/colorset rename to pages/190912a index 4754a74..9f7b73e 100644 --- a/pages/colorset +++ b/pages/190912a @@ -1,8 +1,8 @@ -/# ( @GA#!0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@AA 1@# T(@"A0@( @!"# - $%& (@ -Bildschirmtrix +/B# ( @GA#!0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@0'Yf =10 1909a=2# 190920a/AA 1@# T+ @"A0@RetroText #!T -#!T1@ Testbild: Farben *colorset# +#!T1@$%& !"# + Testbild: Farben + 0@(@0@Farbtabelle #1 0@ 0@Farbtabelle #2 @@ -12,5 +12,4 @@ 0@Farbtabelle #4 (Frei definierbar) 3@ 0@ - (@#!TWeiter mit # oder *Seitennummer# - Eingabe ==> \ No newline at end of file + WA(@#!T0'ZurHuck Farbreinheit rot'#X` 190912aXA \ No newline at end of file diff --git a/pages/190920a b/pages/190920a new file mode 100644 index 0000000..87d8643 --- /dev/null +++ b/pages/190920a @@ -0,0 +1 @@ +/B=10 1909a=2# 190921a/AA # Q \ No newline at end of file diff --git a/pages/190921a b/pages/190921a new file mode 100644 index 0000000..2b6d91c --- /dev/null +++ b/pages/190921a @@ -0,0 +1 @@ +/B=10 1909a=2# 190922a/AA # R \ No newline at end of file diff --git a/pages/190922a b/pages/190922a new file mode 100644 index 0000000..519bd5b --- /dev/null +++ b/pages/190922a @@ -0,0 +1 @@ +/B=10 1909a=2# 190923a/AA # T \ No newline at end of file diff --git a/pages/190923a b/pages/190923a new file mode 100644 index 0000000..49a8d24 --- /dev/null +++ b/pages/190923a @@ -0,0 +1 @@ +/B=10 1909a=2# 190924a/AA # W \ No newline at end of file diff --git a/pages/crosshatch b/pages/190924a similarity index 89% rename from pages/crosshatch rename to pages/190924a index b518191..4e3ac19 100644 --- a/pages/crosshatch +++ b/pages/190924a @@ -1 +1 @@ - # P(dZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ (@ \ No newline at end of file +/B=10 1909a=2# 190925a/AA # P(@................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ \ No newline at end of file diff --git a/pages/dots b/pages/190925a similarity index 88% rename from pages/dots rename to pages/190925a index 9bcb6d1..18efa4a 100644 --- a/pages/dots +++ b/pages/190925a @@ -1 +1 @@ - # P(@................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ \ No newline at end of file +/B=10 1909a=2# 190926a/AA # P(dZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ (@ \ No newline at end of file diff --git a/pages/190926a b/pages/190926a new file mode 100644 index 0000000..6138127 --- /dev/null +++ b/pages/190926a @@ -0,0 +1 @@ +/B=10 1909a=2# 1909a/AA # P \ No newline at end of file diff --git a/pages/1909a b/pages/1909a new file mode 100644 index 0000000..af7a0fa --- /dev/null +++ b/pages/1909a @@ -0,0 +1,18 @@ +/B# ( @GA# GA#!0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@0'Yf =110190910a=211190911a=312190912a=420190920a=521190921a=622190922a=723190923a=824190924a=925190925a=:26190926a=;0 190a=<# 190910a/AA 1@# T"A0@RetroText + #!T +#!T1@+ @$%& !"# + Testbilder *test# + 0@* @ + Decodertest: + ZeichensatzL10 + Zeichensatz (DRCS)E11 + FarbenQ12 + + Monitortest: + Farbreinheit (rot)E20 + Farbreinheit *b(grHun)* @D21 + Farbreinheit (blau)D22 + Farbreinheit (weiss)C23 + KonvergenzM24 + GeometrieN25 + FarbbalkenM26WA(@#!T0'*bZurHuck* @ Zeichensatz'#X` 1909aXA \ No newline at end of file diff --git a/pages/190a b/pages/190a new file mode 100644 index 0000000..e78ca29 --- /dev/null +++ b/pages/190a @@ -0,0 +1,10 @@ +/B# ( @FA#!0Op!LL"Op!LL"0@@Cp!LL!O|OpL@Cp!0Gx!A`%@X!0Cp!LL!L@%0@@Cp!LL$Cp!0@@"ACG~!\@X@0@@"FC!LF!_xO`0GGGONXN_\\@!@@[[0xp@@yl!SM!@@[[0@@"p@!`@!@@"0'Yf =11 190101a=22 190102a=33 1909a=44 1900a=55 200961a/AA # WRetroText( @CA!"#$%DJ1@&'()*(@1@BURetroPulsiv 8.0DT26.+27. Nov. 2016EAPgVAPg0@+ @FA + Herzlich Willkommen zur RetroPulsiv! + + HUber die RetroPulsiv +C 1 + Vortragsprogramm +G 2 + + Testbilder +M 3 + PrHasentation +K 4 + + Btx-Demonstration +F 5WA0@0+ZurHuck Zeichensatz+#Xe190aXA \ No newline at end of file diff --git a/pages/blue b/pages/blue deleted file mode 100644 index e199f4a..0000000 --- a/pages/blue +++ /dev/null @@ -1 +0,0 @@ - # T \ No newline at end of file diff --git a/pages/colorbars b/pages/colorbars deleted file mode 100644 index fc415e3..0000000 --- a/pages/colorbars +++ /dev/null @@ -1 +0,0 @@ - # P \ No newline at end of file diff --git a/pages/drcs b/pages/drcs deleted file mode 100644 index 40051fe..0000000 --- a/pages/drcs +++ /dev/null @@ -1,21 +0,0 @@ -/# ) @GA#!0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@AA 1@# T(@"A0@(c||| - /// (@ -Bildschirmtrix - #!T -#!T1@ Testbild: DRCS *drcs# - 0@ - (@G0-SET: !"#$%&'()*+,-./0123456789:;<=>? - DRCS: ( @!"#$%&'()*+,-./0123456789:;<=>?(@ - - - (@G0-SET: @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_DRCS: ( @@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_(@ - - (@G0-SET: `abcdefghijklmnopqrstuvwxyz{|}~ - DRCS: ( @`abcdefghijklmnopqrstuvwxyz{|}~(@ - - - - - - #!TWeiter mit # oder *Seitennummer# - Eingabe ==> \ No newline at end of file diff --git a/pages/drcs1 b/pages/drcs1 deleted file mode 100644 index 6e509fd..0000000 --- a/pages/drcs1 +++ /dev/null @@ -1,20 +0,0 @@ -/# ( @KA#!0@^QHJCEDBB0@@p_@yabCA0@DO`XN{trH0@f@@@@`pP0@@x~DCXX[X0@@@@@@xOpX0@@@@@@@@|N0CAABFLLHLD0WJGCA@@@AB0eRH`pPQhLF0FCAHfPHh`@0ToHXYIHIIL0aFX`@@@`@`0p@@@@@@@@@0DEECCAA@@@0Lxpp@@GlXO0CA@@Gx@Oxp0@pPPXHHhhl0LLDDCCA@AA0PPxp`@@```0@@@@@@@@@@0@@@x_@@@@0GB]A@pP@C0Qqcb@@@@CB0DDFBBBBrNB0@@@@@@@@@@0```PPPPLom0@@@@@@@@@`AA 1@# T(@"A0@Bildschirmtrix - 0@#!W -#!W1@1@ Testbild *drcs# - 0@BTX DRCS-Beispiel nach CEPT T/CD 6-1 - - Alle geladenen DRCS Zeichen: - ( @!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ - - (@Zusammengebaut zu einem Bild: - - ( @!"#$%&' - ()*+,-. - /012345 - 6789:;< - (@*Facepalm* - - - - (@# um zweite seite zu laden - Eingabe ==> \ No newline at end of file diff --git a/pages/drcs2 b/pages/drcs2 deleted file mode 100644 index d7ef8a8..0000000 --- a/pages/drcs2 +++ /dev/null @@ -1,20 +0,0 @@ -/# ( @GA#!0@@@@@@@@@@@@@@@@@@@@0@@@@@@@@@A@G@L@sAoFO0@A@OCp\]`\P]|]~O^N^G0`ANsnww}wm~bGp0`@|@Gp`^`S`pApCqCsxw0@@@@@@@@@@p@L@b@q`rp0@@@@@@@@@@@@@@@@@@@@0@@@@@@@A@C@F@D@J@V@w0LgX{~_o^O{CfChAX@`A@0lxc`L@p@`@@@@@@@@@@w0@@@@@sAsCWDQ[@}`t`j`0NMAq@M`B@A@@@@M@BP@\0gH}t|rmuoNR_LFsCvAd0@@@@@@@@`@P@h@l@T@r@0@cAYA~B|BNE{G|OeI}H}0b@t@OOsSOPn`S`L@B@A0A{AAz@~@`@@@@@`@@Bg0R`BX@H@FABCAB@M@_B~B0@^@G@A@A@A@@~@pS~P0@w`WPI|EnEGbAA@A@@`@0m@]@|`|`bPwP]H\HhL`D0HBPBPBPDpDaDodeLhoh0@AHBpCpBqCA^AHA@@@@0B^Al@P@@@A@AH@HOhGdA0@B@BX@|P|pxwAgFgGO0XWEM_w0P@d@~@}L~|CpAp@`T~d0`DPDPFPBHBHBkZk{y[y0lHoHoIlIoiol`L`D`DpD0C@G@f@DA|ArAXAXBXBpB0B@pOhPFPAp@@D@]@KpG`0_OF[xWL_GG_|y_y[0c0~H~C~b~j}hHZvf}0YiYyYyiiimiykcxBxBxB0PDPBPZK~OqI}O}D_DC0pBPBLBLB@B@B`A`APAPA0@@@A@C@GAF_D_XY_i0_`p0G{~~0y{y`ypypY`[@B@D0pBpFpDhDnDlOhshsP_P0CAAAc@n@X@X@K@G@B@A0h@lAvA[AYazq~Y]Lvmy0h@dC@@GAHOG@hGwcX@o@0o_sG[OwY@0y~~||xp`a0@E@J@W@gAkC]D^HOwFo@0~`|`Y@I@z@t@l@h@P@`@0@A@@@@@@@@@@@@@@@@@@0{|wIM}B^An@p@L@C@A0t`LPCdDMcKsYCUcGGsG0@@@@@@}Y{Y0f|g~GpEWG_gc{`{G0_AorD}X|pi`f@L@p@@@0@@@@@@@@@@@@@@@@@@@@AA 1@# T(@"A0@Bildschirmtrix - 0@#!W -#!W1@1@ Testbild *drcs2# - 0@BTX DRCS-Beispiel nach CEPT T/CD 6-1 - - Geladenene DRCS Zeichen: - ( @!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ - - (@Zusammengebaut zu einem Bild: - - ( @!"#$%&' - ()*+,-. - /012345 - 6789:;< - =>?@ABC - DEFGHIJ - KLMNOPQ - RSTUVWX - (@(@# fHur HUbersicht - Eingabe ==> \ No newline at end of file diff --git a/pages/green b/pages/green deleted file mode 100644 index 1b60cec..0000000 --- a/pages/green +++ /dev/null @@ -1 +0,0 @@ - # R \ No newline at end of file diff --git a/pages/red b/pages/red deleted file mode 100644 index f9c88a7..0000000 --- a/pages/red +++ /dev/null @@ -1 +0,0 @@ - # Q \ No newline at end of file diff --git a/pages/test b/pages/test new file mode 120000 index 0000000..191e24d --- /dev/null +++ b/pages/test @@ -0,0 +1 @@ +1990a \ No newline at end of file diff --git a/pages/testbild b/pages/testbild deleted file mode 100644 index 764c77e..0000000 --- a/pages/testbild +++ /dev/null @@ -1,25 +0,0 @@ -/# ( @GA#!0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@AA 1@# T(@"A0@( @!"# - $%& (@ -Bildschirmtrix - #!T -#!T1@ Testbilder: *testbild# - 0@(@ - Decodertest: - Zeichensatz.............10 *charset# - Zeichensatz (DRCS)......11 *drcs# - Farben..................12 *colorset# - - Monitortest: - Farbreinheit (rot)......20 *red# - Farbreinheit (grHun).....21 *green# - Farbreinheit (blau).....22 *blue# - Farbreinheit (weiss)....23 *white# - Konvergenz .............24 *dots# - Geometrie ..............25 *crosshatch# - Farbbalken .............26 *colorbars# - - - - - #!TWeiter mit # oder *Seitennummer# - Eingabe ==> \ No newline at end of file diff --git a/pages/white b/pages/white deleted file mode 100644 index 24fe799..0000000 --- a/pages/white +++ /dev/null @@ -1 +0,0 @@ - # W \ No newline at end of file diff --git a/presentation/190000a b/presentation/190000a new file mode 100644 index 0000000..9dbf602 --- /dev/null +++ b/presentation/190000a @@ -0,0 +1,15 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 1900a=2# 190001a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' BildschirmtextEABildschirmtext (Btx) war ein inter- +aktiver Onlinedienst. + +Vorstellung auf der IFA '77 in Berlin +von Postminister Kurt Gscheidle + +Entwickelt unter der Leitung von Eric +Danke, inspiriert 1975 durch VerHoffent- +lichung Huber das britische +PRESTEL-System. + +1980 Feldversuch mit 2000 Teilnehmern. +18. MHarz 1983 Unterzeichnung des + Btx-Staatsvertrags +1. Sept. 1983 Start zur IFAWA#!T0!ZurHuck Weiter!#X` 190000aXA \ No newline at end of file diff --git a/presentation/190001a b/presentation/190001a new file mode 100644 index 0000000..79f44c8 --- /dev/null +++ b/presentation/190001a @@ -0,0 +1,13 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 1900a=2# 190002a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' BildschirmtextEANutzer: 1986 ca. 60.000 (gepl.: 1 Mio.) +erst 1996 1 Mio., aber da war es schon + T-Online mit Internet+E-Mail + +31.12.2001: Abschaltung des + klassischen Btx +Online-Banking noch bis 10. Mai 2007 + +Btx-Leitzentrale in Ulm +Zu Beginn Vermittlungsstellen in + DHusseldorf, Hamburg, Frankfurt/M, + MHunchen, Stuttgart +Geplant waren 150 VSt...WA#!T0!ZurHuck Weiter!#X` 190001aXA \ No newline at end of file diff --git a/presentation/190002a b/presentation/190002a new file mode 100644 index 0000000..8bb8482 --- /dev/null +++ b/presentation/190002a @@ -0,0 +1,16 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190001a=2# 190003a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' Andere LHanderEAHOsterreich: +Start Juni 1982, +MUPID als eigenes Terminal + (vgl. RetroPulsiv 7.0) +Ende: November 2001 + +HAhnliche Systeme in Europa: + + Schweiz: Videotex + UK: Prestel + Schweden: Prestel plus + Frankreich: Minitel + DHanemark: Teledata + Italien: Videotel +Niederlande: Viditel + Spanien: IbertexWA#!T0!ZurHuck Weiter!#X` 190002aXA \ No newline at end of file diff --git a/presentation/190003a b/presentation/190003a new file mode 100644 index 0000000..5a1b145 --- /dev/null +++ b/presentation/190003a @@ -0,0 +1,8 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190002a=2# 190004a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' Btx in DeutschlandEABtx-EndgerHate: + +- Fernseher mit Btx-Decoder oder + Set-Top-Box (z.B. btxTv) +- Btx-Terminal (z.B. MultiTel/-Kom) +- Computer mit Btx-Karten/-Modulen + oder Software +- HOffentliche Btx-TerminalsWA#!T0!ZurHuck Weiter!#X` 190003aXA \ No newline at end of file diff --git a/presentation/190004a b/presentation/190004a new file mode 100644 index 0000000..c66bfd3 --- /dev/null +++ b/presentation/190004a @@ -0,0 +1,13 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190003a=2# 190005a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' ModemsEAPostmodem: +- D-BT 03 war lange der Standard +- 1200 Bit/s empfangen, + 75 Bit/s senden (V.23) +- feste Anschlukennung (EPROM) +- fest programmierte Telefonnummer +- eigenes Anschluinterface + +- spHater auch alternative Modems, + Akustikkoppler erlaubt +- hierfHur war Software-Kennung nHotig +- ZugHange mit hHoherer Datenrate kamen + erst Huber die JahreWA#!T0!ZurHuck Weiter!#X` 190004aXA \ No newline at end of file diff --git a/presentation/190005a b/presentation/190005a new file mode 100644 index 0000000..cc19f31 --- /dev/null +++ b/presentation/190005a @@ -0,0 +1,16 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190004a=2# 190006a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' ZugangsdatenEA- Anschlukennung (12 Stellen) identi- + fiziert den Telefonanschlu +- aufgrunnd fehlender CallerID, da ja + noch viele VSt Analogtechnik hatten +- zunHachst fest in D-BT03 integriert, + spHater Software-Kennung mHoglich + +- Benutzerkennung identifiziert den + Teilnehmer +- Mitbenutzerkennung z.B. andere + Familienmitglieder +- PersHonliches Kennwort als Sicherheit + +- FHur nomadische Benutzer: + - AnschlufreizHugigkeit + - TeilnehmerfreizHugigkeitWA#!T0!ZurHuck Weiter!#X` 190005aXA \ No newline at end of file diff --git a/presentation/190006a b/presentation/190006a new file mode 100644 index 0000000..49c4750 --- /dev/null +++ b/presentation/190006a @@ -0,0 +1,16 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190005a=2# 190007a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' Btx-ZentraleEADas Btx-System war hierarchisch +organisiert. +- Leitzentrale in Ulm mit IBM-Technik +- weitere VSt waren "Caches" +- externe Rechner wurden direkt + angesprochen, waren per Datex-P + (X.25) angebunden +- Beispiele: Quelle, Fluglinien, Bahn, + Banken ... + +Kosten fHur Inhalte: +- seitenabhHangige VergHutung: + 0,01 DM bis 9,99 DM mHoglich +- zeitabhHangige VergHutung: + 0,01 DM bis 1,30 DM pro Min. mHoglich +- Abrechnung Huber TelefonrechnungWA#!T0!ZurHuck Weiter!#X` 190006aXA \ No newline at end of file diff --git a/presentation/190007a b/presentation/190007a new file mode 100644 index 0000000..039add3 --- /dev/null +++ b/presentation/190007a @@ -0,0 +1,12 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190006a=2# 190008a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' Datex-JEADatex-J: + +1993: Trennung von Netz (Datex-J) + und Inhalt (Btx) + Btx blieb aber der einzige + Dienst in Datex-J +1995: Umbenennung in T-Online + +HOsterreich: + +PAN (Public Access Network) + 1993-1995WA#!T0!ZurHuck Weiter!#X` 190007aXA \ No newline at end of file diff --git a/presentation/190008a b/presentation/190008a new file mode 100644 index 0000000..980c132 --- /dev/null +++ b/presentation/190008a @@ -0,0 +1,15 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190007a=2# 190009a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' Frankreich: MinitelEASehr erfolgreiches System mit +eigenen Terminals. + +Testbetrieb 1981, Start 1982. +Einstellung 30.Juni 2012 (!) + +Terminals kostenlos erhHaltlich, statt +gedrucktem Telefonbuch. + +1985: 1 Mio. Nutzer +1990: 4 Mio. Nutzer + 1990er: 25.000 Dienste +2000: 25 Mio. Nutzer (HHochstzahl) +2010: 2 Mio. Nutzer - 2.400 Dienste +Juni 2012: 400.000 N. / 1.800 D.WA#!T0!ZurHuck Weiter!#X` 190008aXA \ No newline at end of file diff --git a/presentation/190009a b/presentation/190009a new file mode 100644 index 0000000..1da7b2b --- /dev/null +++ b/presentation/190009a @@ -0,0 +1,13 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190008a=2# 190010a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' Der CEPT-StandardEADie bei Btx dargestellten Daten sind +im CEPT-Standard gespeicherte Seiten. + +CEPT-Seiten sind mit Steuerzeichen +angereicherte Textdateien. Die Steuer- +zeichen sind jedoch am besten mit einem +Hex-Editor sicht- und editierbar. + +HUber Steuerzeichen lassen sich Farb- +paletten Handern, Zeichenattribute fest- +legen, der Zeichensatz umschalten und +auch eigene ZeichensHatze frei +definieren (DRCS).WA#!T0!ZurHuck Weiter!#X` 190009aXA \ No newline at end of file diff --git a/presentation/190010a b/presentation/190010a new file mode 100644 index 0000000..d41f289 --- /dev/null +++ b/presentation/190010a @@ -0,0 +1,14 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190009a=2# 190011a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' ZeichensHatzeEAEs gibt 4 Standard-ZeichensHatze, G0-G3. + +Weiterhin den Zeichensatz L mit Zeichen +aus G0+G1 aufgr. Prestel-KompatibilitHat. + +G0 enthHalt die meisten ASCII-Zeichen +G1 enthHalt Blockgrafik-Elemente mit + 2x3 BlHocken pro Zeichen +G2 enthHalt weitere Sonderzeichen +G3 enthHalt weitere Grafiksymbole, z.B. + Liniensymbole + +ZeichensHatze kHonnen gemischt verwendet +werden, auch innerhalb einer Zeile.WA#!T0!ZurHuck Weiter!#X` 190010aXA \ No newline at end of file diff --git a/presentation/190011a b/presentation/190011a new file mode 100644 index 0000000..4867076 --- /dev/null +++ b/presentation/190011a @@ -0,0 +1,14 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190010a=2# 190012a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' Dynamische ZeichensHatze (DRC)EAMit DRCs lassen sich eigene Zeichen mit +12x10 bzw. 12x12 (bei 20x40 Zeichen) +definieren. + +Ein DRC-Zeichen kann 2-, 4- oder 16- +farbig sein, letzteres aber nur bei +max. 6x10 Pixeln GrHoHe. + +Durch DRCs lassen sich hoch aufgelHoste +Bilder darstellen, die Huber die normalen +Blockgrafiken hinausgehen. + +Zeichen aller ZeichensHatze (incl. DRCs) +sind auf der gleichen Seite darstellbar!WA#!T0!ZurHuck Weiter!#X` 190011aXA \ No newline at end of file diff --git a/presentation/190012a b/presentation/190012a new file mode 100644 index 0000000..2eb498a --- /dev/null +++ b/presentation/190012a @@ -0,0 +1,15 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190011a=29 1900a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' RetroTextEARetroText ist eine in Python implemen- +tierte Fassung eines Btx-Servers. +Es wurde inspiriert von Norbert Kehrers +Btx-Server-Projekt, +siehe RetroPulsiv 7.0. + +Infos unter + *acn.wtf/retrotext.html# :) + + + + + + Fragen? +WA#!T0!ZurHuck Zum Anfang!9X` 190012aXA \ No newline at end of file diff --git a/presentation/1900a b/presentation/1900a new file mode 100644 index 0000000..eb5ceb3 --- /dev/null +++ b/presentation/1900a @@ -0,0 +1 @@ +/B# ( @GA# GA#!0'Yf 0@@@@CL@p@pOpqp|p@0@@@@@@@@@@CpO|0@@@@p@L@C|CCcOC@C0pOppppp@L@C@@@@0O|O|ss|O@@@@@@@@0|CCCCC@C@Lp@@@@=10 190a=2# 190000a/AA+ @ 1@# T0@RetroTextBA#!T"#$CA#!T%&' PrHasentation RetroText~FHWGGYHG I IG CEC JG ߯ߥ KG C LG CCC MG CC NG M OG YPG D𰰰 DQG D DRG D DSGWTIWWA#!T0!ZurHuck Weiter!#X` 1900aXA \ No newline at end of file diff --git a/rtx.py b/rtx.py old mode 100644 new mode 100755 index a7fcb10..cc7f22d --- a/rtx.py +++ b/rtx.py @@ -23,7 +23,8 @@ import logging logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s', level=config.LOGLEVEL, datefmt='%Y-%m-%d %I:%M:%S') # initialize serial connection to client -glob.ser = serial.Serial(config.PORT, config.BAUDRATE, timeout=None) +logging.debug("Serial port %s, Baud rate %s", config.PORT, config.BAUDRATE) +glob.ser = serial.Serial(config.PORT, config.BAUDRATE, timeout=None, rtscts=True, dsrdtr=True) logging.info("Serial port %s opened", glob.ser.name) while True: diff --git a/rtxHelpers.py b/rtxHelpers.py index 6fdd903..5ad1fc5 100644 --- a/rtxHelpers.py +++ b/rtxHelpers.py @@ -11,153 +11,161 @@ import cept import glob import logging import config +import rtxMask def process_byte(in_byte): - """ takes the received byte and processes the command line - if a new command has been entered, it will call process_command() - if a short link has been entered, the link_list of the current page will be searched - and the found target will be sent to process_command() - """ - instr=str(in_byte, encoding="latin-1") - - if config.MODE=="modem": - logging.debug("> %s < CD: %s", instr, glob.ser.getCD()) + """ takes the received byte and processes the command line + if a new command has been entered, it will call process_command() + if a short link has been entered, the link_list of the current page will be searched + and the found target will be sent to process_command() + """ + instr=str(in_byte, encoding="latin-1") + + if config.MODE=="modem": + logging.debug("> %s < CD: %s", instr, glob.ser.getCD()) - # what to send back to the client - if instr == cept.INI: - logging.debug("INI") - echo_char = "*" - elif instr == cept.TER: - logging.debug("TER") - echo_char = "#" - else: - echo_char=instr + # what to send back to the client + if instr == cept.INI: + logging.debug("INI") + echo_char = "*" + elif instr == cept.TER: + logging.debug("TER") + echo_char = "#" + else: + echo_char=instr - # start of line: clear rest of cmdline - if len(glob.cmdline) == 0: - glob.ser.write(bytes(cept.CLEARLINE, "latin-1")) + # start of line: clear rest of cmdline + if len(glob.cmdline) == 0: + glob.ser.write(bytes(cept.CLEARLINE, "latin-1")) - # echo the character to the client - glob.ser.write(bytes(echo_char, "latin-1")) + # echo the character to the client + glob.ser.write(bytes(echo_char, "latin-1")) - glob.cmdline += instr + glob.cmdline += instr - # Backspace: - if instr == cept.BSP: - glob.cmdline = glob.cmdline[:-1] - return + # Backspace: + if instr == cept.BSP: + glob.cmdline = glob.cmdline[:-1] + return - logging.debug("Cmdline: >%s<", glob.cmdline) + logging.debug("Cmdline: >%s<", glob.cmdline) - # process links inside the page: - if ( len(glob.cmdline) == 1 or len(glob.cmdline) == 2 ) and glob.curpage.get_link(glob.cmdline): - glob.cmdline = cept.INI + glob.curpage.get_link(glob.cmdline) + cept.TER - process_command(glob.cmdline) - return + # process links inside the page: + if ( len(glob.cmdline) == 1 or len(glob.cmdline) == 2 ) and glob.curpage.get_link(glob.cmdline): + glob.cmdline = cept.INI + glob.curpage.get_link(glob.cmdline) + cept.TER + process_command(glob.cmdline) + return - # reset cmdline: - if instr == cept.INI and glob.cmdline[-2:] == cept.INI+cept.INI: - logging.debug("reset cmdline") - glob.cmdline = "" - glob.ser.write(bytes(cept.clear_line24, "latin-1")) - return + # reset cmdline: + if instr == cept.INI and glob.cmdline[-2:] == cept.INI+cept.INI: + logging.debug("reset cmdline") + glob.cmdline = "" + glob.ser.write(bytes(cept.clear_line24, "latin-1")) + return - # goto last page: - if instr == cept.TER and glob.cmdline == cept.INI+cept.TER: - if glob.prevpage.get_page_id() == -1: - glob.cmdline = "" - send_error("Keine vorige Seite vorhanden.") - return - glob.cmdline = "" # reset cmdline - goto_last_page() - return + # goto last page: + if instr == cept.TER and glob.cmdline == cept.INI+cept.TER: + if glob.prevpage.get_page_id() == -1: + glob.cmdline = "" + send_error("Keine vorige Seite vorhanden.") + return + glob.cmdline = "" # reset cmdline + goto_last_page() + return - # "Make it so": - if instr == cept.TER: - # or instr == cept.SEND or instr == cept.CR: - logging.info("Kommando: >%s<", glob.cmdline) - process_command(glob.cmdline) - return + # "Make it so": + if instr == cept.TER: + # or instr == cept.SEND or instr == cept.CR: + logging.info("Kommando: >%s<", glob.cmdline) + process_command(glob.cmdline) + return def process_command(cmd): - """ processes the given command line - """ + """ processes the given command line + """ - # reset cmdline - glob.cmdline = "" + # reset cmdline + glob.cmdline = "" - # process *cmdline#, normally a page-loading command: - if cmd[0] == cept.INI and cmd[-1:] == cept.TER: - pgnr = cmd[1:-1] - check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.") + # process *cmdline#, normally a page-loading command: + if cmd[0] == cept.INI and cmd[-1:] == cept.TER: + pgnr = cmd[1:-1] + check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.") - # if only # is entered, either go to the link behind '#' - # or to the next sub-page (2000a => 2000b) if it exists - if cmd == cept.TER: - if glob.curpage.get_link("#"): - pgnr = glob.curpage.get_link("#") - check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.") - else: - # check if the next page exists, e.g. 2000a => 2000b - curid = glob.curpage.get_page_id() - if curid[-1:].isalpha(): - # aus 2000a 2000b machen: - nextid = curid[:-1] + chr(ord(curid[-1:])+1) - check_and_send_page(nextid, "Keine n"+str(cept['UMLAUT'])+"achste Seite gefunden.") + # if only # is entered, either go to the link behind '#' + # or to the next sub-page (2000a => 2000b) if it exists + if cmd == cept.TER: + if glob.curpage.get_link("#"): + pgnr = glob.curpage.get_link("#") + check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.") + else: + # check if the next page exists, e.g. 2000a => 2000b + curid = glob.curpage.get_page_id() + if curid == -1: + send_error("Keine n"+ cept.UMLAUT +"achste Seite gefunden.") + elif str(curid[-1:]).isalpha(): + # aus 2000a 2000b machen: + nextid = curid[:-1] + chr(ord(curid[-1:])+1) + check_and_send_page(nextid, "Keine n" + cept.UMLAUT +"achste Seite gefunden.") + + # special commands: + if cmd == "!1" + cept.TER: + send_welcome_page() + return + if cmd == "!2" + cept.TER: + glob.ser.write(bytes(cept.init_screen, "latin-1")) + maske = rtxMask.rtxMask() + maske.addLine(3,1,10) + maske.addLine(4,4,10) + maske.process_input() + return - # special commands: - if cmd == "!1" + cept.TER: - send_welcome_page() - return - if cmd == "!2" + cept.TER: - glob.ser.write(bytes(cept.init_screen, "latin-1")) - return def goto_last_page(): - """ go back to the previous page and make the current page the previous page - """ - logging.info("Letzte Seite: %s", str(glob.prevpage.get_page_id())) + """ go back to the previous page and make the current page the previous page + """ + logging.info("Letzte Seite: %s", str(glob.prevpage.get_page_id())) - # swap prevpage and curpage - temp = glob.curpage - glob.curpage = glob.prevpage - glob.prevpage = temp + # swap prevpage and curpage + temp = glob.curpage + glob.curpage = glob.prevpage + glob.prevpage = temp - # send the previous page (now curpage) to the client - send_page(glob.curpage) + # send the previous page (now curpage) to the client + send_page(glob.curpage) def send_welcome_page(): - """ get the btxlogo, make a rtxPage of it and send it to the client """ - wpage = rtxPage() - wpage.set_page(bytes(cept.btxlogo, "latin-1")) - send_page(wpage) + """ get the btxlogo, make a rtxPage of it and send it to the client """ + glob.curpage = rtxPage() + glob.curpage.set_page(bytes(cept.btxlogo, "latin-1")) + send_page(glob.curpage) def check_and_send_page(pgnr, errormsg): - """ checks if the page "pgnr" exists - if yes, it loads it into curpage and sends it to the client - if not, it sends the error message "errormsg" to the client - """ - logging.info("suche Seite: >%s<", pgnr) + """ checks if the page "pgnr" exists + if yes, it loads it into curpage and sends it to the client + if not, it sends the error message "errormsg" to the client + """ + logging.info("suche Seite: >%s<", pgnr) - if rtxPage.exists(pgnr): - glob.prevpage = glob.curpage - glob.curpage = rtxPage(pgnr) - send_page(glob.curpage) # takes a rtxPage object! - return True - elif pgnr[-1:].isnumeric() and rtxPage.exists(pgnr + "a"): - glob.prevpage = glob.curpage - glob.curpage = rtxPage(pgnr + "a") - send_page(glob.curpage) # takes a rtxPage object! - return True - else: - send_error(errormsg) - return False + if rtxPage.exists(pgnr): + glob.prevpage = glob.curpage + glob.curpage = rtxPage(pgnr) + send_page(glob.curpage) # takes a rtxPage object! + return True + elif pgnr[-1:].isnumeric() and rtxPage.exists(pgnr + "a"): + glob.prevpage = glob.curpage + glob.curpage = rtxPage(pgnr + "a") + send_page(glob.curpage) # takes a rtxPage object! + return True + else: + send_error(errormsg) + return False def send_error(msg): - """ send an error message to the client """ - glob.ser.write(bytes(cept.error_prefix + msg + cept.error_suffix, "latin-1")) + """ send an error message to the client """ + glob.ser.write(bytes(cept.error_prefix + msg + cept.error_suffix, "latin-1")) def send_page(page): - """ sends a page to the client """ - glob.ser.write(page.get_page()) + """ sends a page to the client """ + glob.ser.write(page.get_page()) diff --git a/rtxMask.py b/rtxMask.py new file mode 100644 index 0000000..6184213 --- /dev/null +++ b/rtxMask.py @@ -0,0 +1,158 @@ +# -*- coding: UTF-8 -*- +''' +rtx - RetroText +rtxMask: Klasse zur Verarbeitung einer Eingabemaske +by Anna Christina Naß +released under GPL +''' + +import glob +import logging +import config +import cept + +class rtxMask: + """ Klasse zur Verarbeitung einer Eingabemaske + """ + + lines = [] + answers = [] + + def __init__(self): + return + + def addLine(self, x, y, length): + """ adds a new line for the mask to the object """ + newLine = {} + newLine['x'] = x + newLine['y'] = y + newLine['length'] = length + self.lines.append(newLine) + + def get_answer(self, nr): + """ returns the answer for a specific line """ + if nr >= 0 and nr <= len(self.answers): + return self.answers[nr] + else: + return False + + def get_answers(self): + """ returns the array of all answers """ + return self.answers + + def _pos_cur_to_line(self, line): + """ positions the cursor to the beginning of a line """ + self._pos_cur_to_xy(line['x'], line['y']) + + def _pos_cur_to_xy(self, x, y): + """ positions the cursor to a (x,y) position on screen """ + toX=0x41 + x + toY=0x41 + y + gotoString = "\x1f" + chr(toX) + chr(toY) + glob.ser.write(bytes(gotoString, "latin-1")) + + def _set_str_at_pos(self, char, pos, line): + """ changes the 'char' at a position 'pos' of a specific answer 'line' """ + zeile = self.answers[line] + + # if the line is shorter than the position, add spaces + while len(zeile) < pos: + zeile += " " + + zeile = zeile[:pos-1] + char + zeile[pos:] + self.answers[line] = zeile + + def process_input(self): + """ reads the input from the client, fills the mask and gets the input """ + + # if there have no input lines been defined, no input can be processed - so exit the function + if len(self.lines) == 0: + logging.debug("Keine Zeilen in der Maske definiert!") + return False + + # position the cursor into the first field + self._pos_cur_to_line(self.lines[0]) + + posx = 0 # cursor position inside the line - max. position is length-1 + posy = 0 # the current line - max. number is len(self.lines)-1 + + weiter = True + # read input and interpret it + while weiter==True: + # if the modem hangs up, exit the function: + #if config.MODE == "modem" and glob.ser.getCD() == False: + # weiter=False + in_byte = glob.ser.read(1) + instr = str(in_byte, encoding="latin-1") + echostr = instr + + if instr == cept.TER or instr == cept.CR: + # go to the beginning of the next line + # or finish the mask + if posy == len(self.lines)-1: + weiter = False + self._send_data() + else: + # go to the beginning of the next line + posy += 1 + posx = 0 + self._pos_cur_to_line(self.lines[posy]) + elif instr == cept.BSP: + self.answers[posy] = self.answers[posy][:-1] + posx -= 1 + elif instr == cept.UP: + # if the cursor is in the first line, we can't go higher... + # so we ignore the keypress + echostr = "" # no echo needed, we position the curser ourselves + if posy > 0: + posy -= 1 + posx = 0 + self._pos_cur_to_line(self.lines[posy]) + elif instr == cept.DOWN: + # same here: last line => it can't go lower => ignore + echostr = "" # no echo needed, we position the curser ourselves + if posy < len(self.lines): + posy += 1 + posx = 0 + self._pos_cur_to_line(self.lines[posy]) + elif instr == cept.LEFT: + if posx > 0: + posx -= 1 + else: + echostr = "" + elif instr == cept.RIGHT: + if posx < len(self.answers[posy]): + posx += 1 + else: + echostr = "" + elif instr == cept.HOME: + posy = 0 + posx = 0 + self._pos_cur_to_line(self.lines[posy]) + echostr = "" + elif instr == cept.SEND: # ist das DCT?? + weiter = False + self._send_data() + elif instr.isalnum(): + # "normal" input + # TODO: lineinput == Zeilenende beachten + #self._set_str_at_pos(instr, posx, posy) + posx += 1 + else: + # ignore the rest and do not echo it :) + echostr = "" + + # now send the echo + glob.ser.write(bytes(echostr, "latin-1")) + + def _send_data(self): + """ strip spaces from the right of the answers and save them """ + new_answers = [] + for answer in self.answers: + temp = answer.rstrip() + new_answers.append(temp) + self.answers = new_answers + print(self.answers) + + + diff --git a/rtxModem.py b/rtxModem.py index a022462..0aa1b0c 100644 --- a/rtxModem.py +++ b/rtxModem.py @@ -12,48 +12,51 @@ import config import logging def init_modem(): - """ send the modem init strings to the modem """ - logging.debug("init_modem") - if config.MODEM_INIT1 != "": - logging.debug("sending MODEM_INIT1") - glob.ser.write(bytes(config.MODEM_INIT1 + "\r", "latin-1")) - rc = _serial_readline() - logging.info("MODEM_INIT1: %s", rc) - rc = _serial_readline() - logging.info("MODEM_INIT1: %s", rc) + logging.debug("clearing input/output buffers") + glob.ser.reset_input_buffer() + glob.ser.reset_output_buffer() + """ send the modem init strings to the modem """ + logging.debug("init_modem") + if config.MODEM_INIT1 != "": + logging.debug("sending MODEM_INIT1") + glob.ser.write(bytes(config.MODEM_INIT1 + "\r", "latin-1")) + rc = _serial_readline() + logging.info("MODEM_INIT1: %s", rc) + rc = _serial_readline() + logging.info("MODEM_INIT1: %s", rc) - if config.MODEM_INIT2 != "": - logging.debug("sending MODEM_INIT2") - glob.ser.write(bytes(config.MODEM_INIT2 + "\r", "latin-1")) - rc = _serial_readline() - logging.info("MODEM_INIT2: %s", rc) - rc = _serial_readline() - logging.info("MODEM_INIT2: %s", rc) + if config.MODEM_INIT2 != "": + logging.debug("sending MODEM_INIT2") + glob.ser.write(bytes(config.MODEM_INIT2 + "\r", "latin-1")) + rc = _serial_readline() + logging.info("MODEM_INIT2: %s", rc) + rc = _serial_readline() + logging.info("MODEM_INIT2: %s", rc) def wait_for_caller(): - """ waits for the RING of the modem and answers it """ - modem_answered = False - logging.debug("wait_for_caller") - while not modem_answered: - rc = _serial_readline() - if rc.startswith(config.MODEM_RING): - logging.info("modem ringing! Answering.") - glob.ser.write(bytes(config.MODEM_ANSWER + "\r", "latin-1")) - rc = _serial_readline() - logging.info("Answer: %s", rc) - rc = _serial_readline() - logging.info("Answer: %s", rc) - modem_answered=True - else: - modem_answered=False + """ waits for the RING of the modem and answers it """ + modem_answered = False + logging.debug("wait_for_caller") + while not modem_answered: + rc = _serial_readline() + if rc.startswith(config.MODEM_RING): + logging.info("modem ringing! Answering.") + glob.ser.write(bytes(config.MODEM_ANSWER + "\r", "latin-1")) + rc = _serial_readline() + logging.info("Answer: %s", rc) + rc = _serial_readline() + logging.info("Answer: %s", rc) + modem_answered=True + else: + modem_answered=False def _serial_readline(): - line = "" - in_byte = "" - - while not in_byte == b"\n": - in_byte = glob.ser.read(1) - #print(in_byte) - line += str(in_byte, encoding="latin-1") + line = "" + in_byte = "" + + while not in_byte == b"\n": + in_byte = glob.ser.read(1) + #print(in_byte) + line += str(in_byte, encoding="latin-1") - return line + return line diff --git a/rtxPage.py b/rtxPage.py index 078f76e..d1240af 100644 --- a/rtxPage.py +++ b/rtxPage.py @@ -12,103 +12,100 @@ import config import logging class rtxPage: - """ Klasse zur Benutzung einer CEPT-Seite - """ + """ Klasse zur Benutzung einer CEPT-Seite + """ - die_seite = "" - seiten_nummer = -1 - link_liste = {} + die_seite = "" + seiten_nummer = -1 + link_liste = {} - def __init__(self, page = None): - """ create a new page object for the page 'page' - returns False if the page cannot be found - returns True if the page has been loaded - """ - if page == None: - return - else: - self.die_seite = "" - self.seiten_nummer = -1 - self.link_liste = {} - self._load_page(page) + def __init__(self, page = None): + """ create a new page object for the page 'page' + returns False if the page cannot be found + returns True if the page has been loaded + """ + if page == None: + return + else: + self.die_seite = "" + self.seiten_nummer = -1 + self.link_liste = {} + self._load_page(page) - @staticmethod - def exists(page): - """ checks if the page (i.e. the file) exists """ - if os.path.isfile(config.PAGES + page): - return True - elif os.path.isfile(config.DEMOPAGES + page): - return True - else: - return False + @staticmethod + def exists(page): + """ checks if the page (i.e. the file) exists """ + for path in config.PAGES: + if os.path.isfile(path + page): + return True + return False - def get_page(self): - """ returns the page if loaded - returns False if no page has been loaded - """ - if self.die_seite != "": - return self.die_seite - else: - return False + def get_page(self): + """ returns the page if loaded + returns False if no page has been loaded + """ + if self.die_seite != "": + return self.die_seite + else: + return False - def set_page(self,pagedata): - """ write the pagedata as the new page and (probably) the link list """ - self.die_seite = pagedata - self.link_liste = self._get_link_list() + def set_page(self,pagedata): + """ write the pagedata as the new page and (probably) the link list """ + self.die_seite = pagedata + self.link_liste = self._get_link_list() - def get_links(self): - """ returns the list of links found in this page """ - return self.link_liste + def get_links(self): + """ returns the list of links found in this page """ + return self.link_liste - def get_link(self, link): - """ returns the target for a given link - returns False if this link does not exist - """ - if link in self.link_liste: - return self.link_liste[link] - else: - return False + def get_link(self, link): + """ returns the target for a given link + returns False if this link does not exist + """ + if link in self.link_liste: + return self.link_liste[link] + else: + return False - def get_page_id(self): - """ returns the id of the current page """ - return self.seiten_nummer + def get_page_id(self): + """ returns the id of the current page """ + return self.seiten_nummer - def _load_page(self, page): - """ Load a CEPT page from the file system - returns False if the page cannot be found - returns True if the page has been loaded - """ - if os.path.isfile(config.PAGES + page): - filename = config.PAGES + page - elif os.path.isfile(config.DEMOPAGES + page): - filename = config.DEMOPAGES + page - else: - return False - - with open(filename, "rb") as f: - self.die_seite = f.read() - self.seiten_nummer = page - link_liste = self._get_link_list() - return True + def _load_page(self, page): + """ Load a CEPT page from the file system + returns False if the page cannot be found + returns True if the page has been loaded + """ + for path in config.PAGES: + if os.path.isfile(path + page): + filename = path + page + """ page has been found, now exit the for loop """ + break + else: + """ page does not exist anywhere, so exit the function """ + return False + + with open(filename, "rb") as f: + self.die_seite = f.read() + self.seiten_nummer = page + self.link_liste = self._get_link_list() + return True - def _get_link_list(self): - """ private function which parses the CEPT page and extracts the link list - returns True if links have been found - returns False if no links have been found - """ - links = [] - links = re.findall("\x1f\x3d([^\x1f\x9b\x1b]+)", str(self.die_seite, "latin-1")) + def _get_link_list(self): + """ private function which parses the CEPT page and extracts the link list + returns True if links have been found + returns False if no links have been found + """ + links = [] + links = re.findall("\x1f\x3d([^\x1f\x9b\x1b]+)", str(self.die_seite, "latin-1")) + liste = {} - for item in links: - if item[0] != "0": - link = item[1:3].strip() - target = item[3:].strip() - self.link_liste[link] = target + for item in links: + if item[0] != "0": + link = item[1:3].strip() + target = item[3:].strip() + liste[link] = target - logging.info(self.link_liste) - - if self.link_liste == {}: - return False - else: - return True + logging.info(liste) + return liste