Merge branch 'devel'
This commit is contained in:
commit
f2dad7338d
127
cept.py
127
cept.py
@ -6,81 +6,88 @@ released under GPL
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
CR = "\x0d"
|
CR = "\x0d"
|
||||||
LF = "\x0a"
|
|
||||||
UMLAUT = "\xc9"
|
UMLAUT = "\xc9"
|
||||||
INI = "\x13"
|
INI = "\x13"
|
||||||
TER = "\x1c"
|
TER = "\x1c"
|
||||||
SEND = "\x1a"
|
SEND = "\x1a"
|
||||||
CURSOR_ON = "\x11"
|
CURSOR_ON = "\x11"
|
||||||
|
CURSOR_OFF = "\x14"
|
||||||
BSP = "\x08" # backspace
|
BSP = "\x08" # backspace
|
||||||
CLEARLINE = "\x18"
|
CLEARLINE = "\x18"
|
||||||
|
|
||||||
|
# TODO: stimmt das?
|
||||||
|
LEFT = "\x08"
|
||||||
|
RIGHT = "\x09"
|
||||||
|
DOWN = "\x0a"
|
||||||
|
UP = "\x0b"
|
||||||
|
HOME = "\x1e"
|
||||||
|
|
||||||
clear_line24 = (
|
clear_line24 = (
|
||||||
"\x1f\x58\x41" # Cursor Zeile 24, Spalte 0
|
"\x1f\x58\x41" # Cursor Zeile 24, Spalte 0
|
||||||
"\x18" # Zeile löschen
|
"\x18" # Zeile löschen
|
||||||
)
|
)
|
||||||
|
|
||||||
error_prefix = (
|
error_prefix = (
|
||||||
"\x1f\x2f\x40\x58" # Servicesprung Zeile 24
|
"\x1f\x2f\x40\x58" # Servicesprung Zeile 24
|
||||||
)
|
)
|
||||||
error_suffix = (
|
error_suffix = (
|
||||||
"\x1f\x2f\x4f" # Ende Servicesprung
|
"\x1f\x2f\x4f" # Ende Servicesprung
|
||||||
"\x1f\x58\x41" # Cursor Zeile 24, Spalte 0
|
"\x1f\x58\x41" # Cursor Zeile 24, Spalte 0
|
||||||
)
|
)
|
||||||
|
|
||||||
eingabezeile = (
|
eingabezeile = (
|
||||||
"\x1b" # Hintergrund blau ganze Reihe
|
"\x1b" # Hintergrund blau ganze Reihe
|
||||||
"\x23"
|
"\x23"
|
||||||
"\x21"
|
"\x21"
|
||||||
"\x54"
|
"\x54"
|
||||||
"\x44" # Hintergrund blau, Vordergrund gelb
|
"\x44" # Hintergrund blau, Vordergrund gelb
|
||||||
"\x83" )
|
"\x83" )
|
||||||
|
|
||||||
init_screen = (
|
init_screen = (
|
||||||
"\x1f" "\x2f" "\x42" # Grundzustand parallel
|
"\x1f" "\x2f" "\x42" # Grundzustand parallel
|
||||||
"\x9b"
|
"\x9b"
|
||||||
"\x30" "\x32" "\x3b" "\x32" "\x33" "\x55" # Scrollbereich ist Zeile 2 - 23
|
"\x30" "\x32" "\x3b" "\x32" "\x33" "\x55" # Scrollbereich ist Zeile 2 - 23
|
||||||
"\x9b"
|
"\x9b"
|
||||||
"\x32" "\x60" # Implizites Scrollen an
|
"\x32" "\x60" # Implizites Scrollen an
|
||||||
"\x1b" "\x23" "\x21" "\x54" # Hintergrund blau ganze Reihe
|
"\x1b" "\x23" "\x21" "\x54" # Hintergrund blau ganze Reihe
|
||||||
"\x94" "\x83" # Hintergrund blau, Vordergrund gelb
|
"\x94" "\x83" # Hintergrund blau, Vordergrund gelb
|
||||||
"\x42" "\x74" "\x78" "\x20" "\x53" "\x65" "\x72" "\x76" "\x65" "\x72" # Btx Server
|
"\x42" "\x74" "\x78" "\x20" "\x53" "\x65" "\x72" "\x76" "\x65" "\x72" # Btx Server
|
||||||
"\x20" "\x2d" "\x20" "\x4E" "\x6F" "\x72" "\x62" "\x65" "\x72" "\x74" # - Norbert
|
"\x20" "\x2d" "\x20" "\x4E" "\x6F" "\x72" "\x62" "\x65" "\x72" "\x74" # - Norbert
|
||||||
"\x20" "\x4B" "\x65" "\x68" "\x72" "\x65" "\x72" "\x2c" "\x20" # Kehrer,
|
"\x20" "\x4B" "\x65" "\x68" "\x72" "\x65" "\x72" "\x2c" "\x20" # Kehrer,
|
||||||
"\x41" "\x70" "\x72" "\x69" "\x6C" "\x20" "\x32" "\x30" "\x31" "\x36" # April 2016
|
"\x41" "\x70" "\x72" "\x69" "\x6C" "\x20" "\x32" "\x30" "\x31" "\x36" # April 2016
|
||||||
"\x90" "\x87" # Hintergrund schwarz, Vordergrund weisz
|
"\x90" "\x87" # Hintergrund schwarz, Vordergrund weisz
|
||||||
"\x0d" "\x0a" # CR/LF
|
"\x0d" "\x0a" # CR/LF
|
||||||
"\x11" # Cursor on
|
"\x11" # Cursor on
|
||||||
)
|
)
|
||||||
|
|
||||||
btxlogo = (
|
btxlogo = (
|
||||||
"\x1f\x2f\x42" # Grundzustand parallel
|
"\x1f\x2f\x42" # Grundzustand parallel
|
||||||
"\x1b\x7e" # Zeichensatz G1 rechts
|
"\x1b\x7e" # Zeichensatz G1 rechts
|
||||||
"\x9b\x31\x40" # Farbtafel 1 (Halbtöne)
|
"\x9b\x31\x40" # Farbtafel 1 (Halbtöne)
|
||||||
"\x1b\x23\x20\x54" # ganzer Schirm blau
|
"\x1b\x23\x20\x54" # ganzer Schirm blau
|
||||||
"\x1f\x3d1# 200961a\x1f" # Link zur Demo-Startseite 200961a
|
"\x1f\x3d1# 200961a\x1f\x2f" # Link zur Demo-Startseite 200961a
|
||||||
"\x1f\x43\x48\xb8\xa3\x12\x57\xe4"
|
"\x1f\x43\x48\xb8\xa3\x12\x57\xe4"
|
||||||
"\x1f\x44\x47\xea\xa0\x12\x59\xb5"
|
"\x1f\x44\x47\xea\xa0\x12\x59\xb5"
|
||||||
"\x1f\x45\x47\xea \xe8\xfc\xdf\x12\x49\xfc\xb4 \xb5"
|
"\x1f\x45\x47\xea \xe0\xf8\xfc\xdf\x12\x49\xfc\xf4\xb0 \xb5"
|
||||||
"\x1f\x46\x47\xea \xe8\xdf\x12\x44\xa3\x12\x45\xdf\x12\x44\xb4 \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 \xfc\xdf\xdf\xfc \xa2\xaf\xdf\xdf\xdf\xa5 \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\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\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\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\x4b\x47\xea \xdf\x12\x4d \xb5" # Ende Telefon-Logo
|
||||||
"\x1f\x4c\x47\xea \x12\x59\xb5"
|
"\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\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\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\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\x50\x47\xa2\xe4\xa0\x12\x57\xb8\xa1"
|
||||||
"\x1f\x51\x49\xa3\x12\x57\r\n"
|
"\x1f\x51\x49\xa3\x12\x57\r\n"
|
||||||
"\x9b\x31\x40" # Farbtafel 1
|
"\x9b\x31\x40" # Farbtafel 1
|
||||||
"\x87\x19\x50\x12\x67" # Strich
|
"\x87\x19\x50\x12\x67" # Strich
|
||||||
"\x9b\x30\x40" # Farbtafel 0
|
"\x9b\x30\x40" # Farbtafel 0
|
||||||
"\x87 Herzlich Willkommen in\r\n"
|
"\x87 Herzlich Willkommen in\r\n"
|
||||||
"\x87 retroText!\r\n"
|
"\x87 retroText!\r\n"
|
||||||
"\x9b\x31\x40" # Farbtafel 1
|
"\x9b\x31\x40" # Farbtafel 1
|
||||||
"\x87\x19\x50\x12\x67"
|
"\x87\x19\x50\x12\x67"
|
||||||
"\x9b\x30\x40" # Farbtafel 0
|
"\x9b\x30\x40" # Farbtafel 0
|
||||||
"\x83Mit # fortfahren\r\n"
|
"\x83Mit # fortfahren\r\n"
|
||||||
)
|
)
|
12
config.py
12
config.py
@ -6,16 +6,20 @@ Configuration file
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
## general settings:
|
## define the location of rtx pages
|
||||||
PAGES="pages/"
|
## rtx searches all directories and serves the page from the first one
|
||||||
DEMOPAGES="demopages/"
|
PAGES=[
|
||||||
|
"pages/",
|
||||||
|
"presentation/",
|
||||||
|
"demopages/",
|
||||||
|
]
|
||||||
|
|
||||||
## logging settings:
|
## logging settings:
|
||||||
# loglevel values: DEBUG (all messages) > INFO > WARNING > ERROR > CRITICAL (only cricital messages)
|
# loglevel values: DEBUG (all messages) > INFO > WARNING > ERROR > CRITICAL (only cricital messages)
|
||||||
LOGLEVEL=logging.DEBUG
|
LOGLEVEL=logging.DEBUG
|
||||||
|
|
||||||
## serial port settings:
|
## serial port settings:
|
||||||
PORT="/dev/pts/10"
|
PORT="/dev/pts/5"
|
||||||
#PORT="/dev/ttyUSB0"
|
#PORT="/dev/ttyUSB0"
|
||||||
BAUDRATE="2400"
|
BAUDRATE="2400"
|
||||||
# if the system is connected directly (null-modem): MODE=direct
|
# if the system is connected directly (null-modem): MODE=direct
|
||||||
|
1
demopages/11
Symbolic link
1
demopages/11
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
10501a
|
1
demopages/abida
Symbolic link
1
demopages/abida
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
35853a
|
1
demopages/adac
Symbolic link
1
demopages/adac
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
654320a
|
1
demopages/bka
Symbolic link
1
demopages/bka
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
86553222a
|
1
demopages/cbm
Symbolic link
1
demopages/cbm
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
20095a
|
1
demopages/chip
Symbolic link
1
demopages/chip
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
50707545a
|
1
demopages/commodore
Symbolic link
1
demopages/commodore
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
20095a
|
1
demopages/dimdi
Symbolic link
1
demopages/dimdi
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
44479a
|
1
demopages/eden
Symbolic link
1
demopages/eden
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
33033a
|
1
demopages/etb
Symbolic link
1
demopages/etb
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
1188a
|
1
demopages/faz
Symbolic link
1
demopages/faz
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
34034a
|
1
demopages/ffmi
Symbolic link
1
demopages/ffmi
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
34034100a
|
1
demopages/geisterbahn
Symbolic link
1
demopages/geisterbahn
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
5400404a
|
1
demopages/lotto
Symbolic link
1
demopages/lotto
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
57575a
|
1
demopages/markttechnik
Symbolic link
1
demopages/markttechnik
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
64064a
|
1
demopages/mut
Symbolic link
1
demopages/mut
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
64064a
|
1
demopages/neuemedien
Symbolic link
1
demopages/neuemedien
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
34344a
|
1
demopages/pcnet
Symbolic link
1
demopages/pcnet
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
208888a
|
1
demopages/post
Symbolic link
1
demopages/post
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
20000a
|
1
demopages/rheinpfalz
Symbolic link
1
demopages/rheinpfalz
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
67007a
|
1
demopages/schrottplatz
Symbolic link
1
demopages/schrottplatz
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
9204920400920a
|
1
demopages/semmel
Symbolic link
1
demopages/semmel
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
208585a
|
1
demopages/starduck
Symbolic link
1
demopages/starduck
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
20147475a
|
1
demopages/vznrw
Symbolic link
1
demopages/vznrw
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
21212a
|
1
doc/CEPT/retropulsiv-template.cept
Normal file
1
doc/CEPT/retropulsiv-template.cept
Normal file
@ -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# W€RetroText( @CA<0F><>!ƒ"‚#„$…%DJŒ›1@‡&'()*(@›1@BU‡RetroPulsiv 8.0DT‡26.+27. Nov. 2016EA…PgVA…Pg›0@WA›0@+ @„0€+ZurHuck Zeichensatz+„#€X` 1990aXA€
|
1
doc/CEPT/template.cept
Normal file
1
doc/CEPT/template.cept
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>UeberschriftEATextWA#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 19000aXA
|
BIN
doc/DRCs.ods
Normal file
BIN
doc/DRCs.ods
Normal file
Binary file not shown.
BIN
doc/Farbdefinition.ods
Normal file
BIN
doc/Farbdefinition.ods
Normal file
Binary file not shown.
11
doc/Nummernkreis 190.txt
Normal file
11
doc/Nummernkreis 190.txt
Normal file
@ -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
|
@ -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
|
|
BIN
doc/rtx-Logo.png
Normal file
BIN
doc/rtx-Logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 386 B |
36
doc/socat mit dosbox.txt
Normal file
36
doc/socat mit dosbox.txt
Normal file
@ -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.
|
15
pages/190101a
Normal file
15
pages/190101a
Normal file
@ -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# W€RetroText( @CA<0F><>!ƒ"‚#„$…%DJŒ›1@‡&'()*(@›1@BU‡RetroPulsiv 8.0DR‡HUber die RetroPulsivEA…PgVA…Pg›0@+ @FA€
|
||||||
|
<20>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!€WA›0@„0€+ZurHuck VortrHage+„#€Xb€190101aXA€
|
16
pages/190102a
Normal file
16
pages/190102a
Normal file
@ -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# W€RetroText( @CA<0F><>!ƒ"‚#„$…%DJŒ›1@‡&'()*(@›1@BU‡RetroPulsiv 8.0DR‡Das VortragsprogrammEA…PgVA…Pg›0@+ @FA<46>šSamstag 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
|
||||||
|
|
||||||
|
<EFBFBD>šSonntag 27. November 2016™€
|
||||||
|
„13:00 …Richard LHowenstein:€ RESHOOT
|
||||||
|
Entwicklung eines Shoot em Up
|
||||||
|
fHur den Amiga 1200WA›0@„0€+ZurHuck Veranstaltungen+„#€Xb€190102aXA€
|
1
pages/190103a
Normal file
1
pages/190103a
Normal file
@ -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# W€RetroText( @CA<0F><>!ƒ"‚#„$…%DJŒ›1@‡&'()*(@›1@BU‡RetroPulsiv 8.0CY‡WeitereDQ‡PflichtveranstaltungenEA…PgVA…Pg›0@+ @FA<46>...WA›0@„0€+ZurHuckXb€190103aXA€
|
@ -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(@"A›0@ž‡( @!"#
|
/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"Až›0@‡RetroText
|
||||||
$%& (@
|
+ @#!T
|
||||||
<EFBFBD>Bildschirmtrix
|
#!T›1@<40>Œ$%&
!"#
|
||||||
#!T
|
<EFBFBD> Testbild: ZeichensHatze
|
||||||
#!T›1@<40>
Testbild: ZeichensHatze *charset#
|
|
||||||
<0A>0@<40><><EFBFBD>
|
<0A>0@<40><><EFBFBD>
|
||||||
(@<0F><>G0-SET:<3A><> <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E>
|
(@<0F><>G0-SET:<3A><> <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E>
|
||||||
|
|
||||||
@ -10,7 +9,4 @@
|
|||||||
|
|
||||||
(@<0F><>G2-SET:<3A><>(b <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E>
|
(@<0F><>G2-SET:<3A><>(b <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E>
|
||||||
|
|
||||||
(@’€G3-SET:‡ž(d <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ž
|
(@’€G3-SET:‡ž(d <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ž
WA(@#!Tƒ0‡'ZurHuck DRCS'ƒ#‡X` 190910aXA
|
||||||
|
|
||||||
(@#!TWeiter mit # oder *Seitennummer#
|
|
||||||
Eingabe ==>
|
|
16
pages/1909111a
Normal file
16
pages/1909111a
Normal file
@ -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"A›0@ž‡RetroText
|
||||||
|
#!T
|
||||||
|
#!T›0@ž‡<C5BE>”
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(@#!Tƒ0‡...ZurHuck Weiter...ƒ#‡X` 1909111aXA
|
20
pages/1909112a
Normal file
20
pages/1909112a
Normal file
@ -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(@"A›0@ž‡RetroText
|
||||||
|
#!T
|
||||||
|
#!T›0@ž‡<C5BE>”
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(@#!Tƒ0‡...ZurHuck Farben...ƒ#‡X` 1909112aXA
|
13
pages/190911a
Normal file
13
pages/190911a
Normal file
@ -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+ @"Až›0@‡RetroText
|
||||||
|
#!T
|
||||||
|
#!T›1@<40>Œ$%&
!"#
|
||||||
|
<EFBFBD> Testbild: DRCS
|
||||||
|
›0@Œž‡
|
||||||
|
(@’€G0-SET:‡ž <20>!"#$%&'()*+,-./0123456789:;<=>?ž
|
||||||
|
’€DRCS: ‡ž ( @<0F>!"#$%&'()*+,-./0123456789:;<=>?ž(@
|
||||||
|
|
||||||
|
|
||||||
|
(@’€G0-SET:‡ž <20>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ž’€DRCS: ‡ž ( @<0F>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ž(@
|
||||||
|
|
||||||
|
(@’€G0-SET:‡ž <20>`abcdefghijklmnopqrstuvwxyz{|}~ž
|
||||||
|
’€DRCS: ‡ž ( @<0F>`abcdefghijklmnopqrstuvwxyz{|}~žWA(@#!Tƒ0‡'ZurHuck Weiter'ƒ#‡X` 190911aXA
|
@ -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(@"A›0@ž‡( @!"#
|
/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+ @"Až›0@‡RetroText
|
||||||
$%& (@
|
|
||||||
<EFBFBD>Bildschirmtrix
|
|
||||||
#!T
|
#!T
|
||||||
#!T›1@<40>
Testbild: Farben *colorset#
|
#!T›1@<40>Œ$%&
!"#
|
||||||
|
<EFBFBD> Testbild: Farben
|
||||||
|
|
||||||
›0@Œž‡(@›0@’€Farbtabelle #1‡ž
|
›0@Œž‡(@›0@’€Farbtabelle #1‡ž
|
||||||
›0@<40> ‘ ’ “ ” • – — <20> ‘ ’ “ ” • – —
|
›0@<40> ‘ ’ “ ” • – — <20> ‘ ’ “ ” • – —
|
||||||
›0@’€Farbtabelle #2‡ž
|
›0@’€Farbtabelle #2‡ž
|
||||||
@ -12,5 +12,4 @@
|
|||||||
›0@’€Farbtabelle #4 (Frei definierbar)‡ž
|
›0@’€Farbtabelle #4 (Frei definierbar)‡ž
|
||||||
›3@<40> ‘ ’ “ ” • – — <20> ‘ ’ “ ” • – —
|
›3@<40> ‘ ’ “ ” • – — <20> ‘ ’ “ ” • – —
|
||||||
›0@
|
›0@
|
||||||
ž‡(@#!TWeiter mit # oder *Seitennummer#
|
žWA(@#!Tƒ0‡'ZurHuck Farbreinheit rot'ƒ#‡X` 190912aXA
|
||||||
Eingabe ==>
|
|
1
pages/190920a
Normal file
1
pages/190920a
Normal file
@ -0,0 +1 @@
|
|||||||
|
/B=10 1909a=2# 190921a/AA# Q€
|
1
pages/190921a
Normal file
1
pages/190921a
Normal file
@ -0,0 +1 @@
|
|||||||
|
/B=10 1909a=2# 190922a/AA# R€
|
1
pages/190922a
Normal file
1
pages/190922a
Normal file
@ -0,0 +1 @@
|
|||||||
|
/B=10 1909a=2# 190923a/AA# T€
|
1
pages/190923a
Normal file
1
pages/190923a
Normal file
@ -0,0 +1 @@
|
|||||||
|
/B=10 1909a=2# 190924a/AA# W€
|
@ -1 +1 @@
|
|||||||
# P≒(dZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
(@
|
/B=10 1909a=2# 190925a/AA# P‡<50>(@................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
|
@ -1 +1 @@
|
|||||||
# P≒(@................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
|
/B=10 1909a=2# 190926a/AA# P≒(dZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
(@
|
1
pages/190926a
Normal file
1
pages/190926a
Normal file
@ -0,0 +1 @@
|
|||||||
|
/B=10 1909a=2# 1909a/AA# P<>— “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” ” <20> • <20> – <20> — ” <20> • <20> – <20> — ” <20> • <20> – <20> — ‡<>
|
18
pages/1909a
Normal file
18
pages/1909a
Normal file
@ -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"Až›0@‡RetroText
|
||||||
|
#!T
|
||||||
|
#!T›1@+ @Œ$%&
!"#
|
||||||
|
<EFBFBD> Testbilder *test#
|
||||||
|
›0@Œž‡* @
|
||||||
|
š†Decodertest:‡™
|
||||||
|
Zeichensatz§Lƒ10‡
|
||||||
|
Zeichensatz (DRCS)§Eƒ11‡
|
||||||
|
Farben§Qƒ12‡
|
||||||
|
|
||||||
|
š†Monitortest:‡™
|
||||||
|
Farbreinheit (rot)§Eƒ20‡
|
||||||
|
Farbreinheit *b(grHun)* @§Dƒ21‡
|
||||||
|
Farbreinheit (blau)§Dƒ22‡
|
||||||
|
Farbreinheit (weiss)§Cƒ23‡
|
||||||
|
Konvergenz§Mƒ24‡
|
||||||
|
Geometrie§Nƒ25‡
|
||||||
|
Farbbalken§Mƒ26‡žWA(@#!Tƒ0‡'*bZurHuck* @ Zeichensatz'ƒ#‡X` 1909aXA
|
10
pages/190a
Normal file
10
pages/190a
Normal file
@ -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# W€RetroText( @CA<0F><>!ƒ"‚#„$…%DJŒ›1@‡&'()*(@›1@BU‡RetroPulsiv 8.0DT‡26.+27. Nov. 2016EA…PgVA…Pg›0@+ @FA€
|
||||||
|
<20>Herzlich Willkommen zur RetroPulsiv!€
|
||||||
|
|
||||||
|
HUber die RetroPulsiv +C 1
|
||||||
|
Vortragsprogramm +G 2
|
||||||
|
|
||||||
|
Testbilder +M 3
|
||||||
|
PrHasentation +K 4
|
||||||
|
|
||||||
|
Btx-Demonstration +F 5WA›0@„0€+ZurHuck Zeichensatz+„#€Xe€190aXA€
|
@ -1 +0,0 @@
|
|||||||
# T<>
|
|
@ -1 +0,0 @@
|
|||||||
# P<><50> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20><>
|
|
21
pages/drcs
21
pages/drcs
@ -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(@"A›0@ž‡(c|||
|
|
||||||
/// (@
|
|
||||||
<EFBFBD>Bildschirmtrix
|
|
||||||
#!T
|
|
||||||
#!T›1@<40>
Testbild: DRCS *drcs#
|
|
||||||
›0@Œž‡
|
|
||||||
(@’€G0-SET:‡ž <20>!"#$%&'()*+,-./0123456789:;<=>?ž
|
|
||||||
’€DRCS: ‡ž ( @<0F>!"#$%&'()*+,-./0123456789:;<=>?ž(@
|
|
||||||
|
|
||||||
|
|
||||||
(@’€G0-SET:‡ž <20>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ž’€DRCS: ‡ž ( @<0F>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ž(@
|
|
||||||
|
|
||||||
(@’€G0-SET:‡ž <20>`abcdefghijklmnopqrstuvwxyz{|}~ž
|
|
||||||
’€DRCS: ‡ž ( @<0F>`abcdefghijklmnopqrstuvwxyz{|}~ž(@
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#!TWeiter mit # oder *Seitennummer#
|
|
||||||
Eingabe ==>
|
|
20
pages/drcs1
20
pages/drcs1
@ -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(@"A›0@ž‡Bildschirmtrix
|
|
||||||
›0@#!W
|
|
||||||
#!W›1@ž„›1@<40>
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 ==>
|
|
20
pages/drcs2
20
pages/drcs2
@ -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(@"A›0@ž‡Bildschirmtrix
|
|
||||||
›0@#!W
|
|
||||||
#!W›1@ž„›1@<40>
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 ==>
|
|
@ -1 +0,0 @@
|
|||||||
# R<>
|
|
1
pages/test
Symbolic link
1
pages/test
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
1990a
|
@ -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(@"A›0@ž‡( @!"#
|
|
||||||
$%& (@
|
|
||||||
<EFBFBD>Bildschirmtrix
|
|
||||||
#!T
|
|
||||||
#!T›1@<40>
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 ==>
|
|
@ -1 +0,0 @@
|
|||||||
# W€
|
|
15
presentation/190000a
Normal file
15
presentation/190000a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>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#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190000aXA
|
13
presentation/190001a
Normal file
13
presentation/190001a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>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#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190001aXA
|
16
presentation/190002a
Normal file
16
presentation/190002a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>Andere LHanderEA†šHOsterreich:™‡
|
||||||
|
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#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190002aXA
|
8
presentation/190003a
Normal file
8
presentation/190003a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>Btx in DeutschlandEA…šBtx-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#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190003aXA
|
13
presentation/190004a
Normal file
13
presentation/190004a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>ModemsEA…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
|
||||||
|
|
||||||
|
- spHater auch alternative Modems,
|
||||||
|
Akustikkoppler erlaubt
|
||||||
|
- hierfHur war ƒSoftware-Kennung‡ nHotig
|
||||||
|
- ZugHange mit hHoherer Datenrate kamen
|
||||||
|
erst Huber die JahreWA#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190004aXA
|
16
presentation/190005a
Normal file
16
presentation/190005a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>ZugangsdatenEA- †Anschluûkennung‡ (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:
|
||||||
|
- AnschluûfreizHugigkeit
|
||||||
|
- TeilnehmerfreizHugigkeitWA#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190005aXA
|
16
presentation/190006a
Normal file
16
presentation/190006a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>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#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190006aXA
|
12
presentation/190007a
Normal file
12
presentation/190007a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>Datex-JEA…Datex-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‡-ƒ1995‡WA#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190007aXA
|
15
presentation/190008a
Normal file
15
presentation/190008a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>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#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190008aXA
|
13
presentation/190009a
Normal file
13
presentation/190009a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>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#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190009aXA
|
14
presentation/190010a
Normal file
14
presentation/190010a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>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#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190010aXA
|
14
presentation/190011a
Normal file
14
presentation/190011a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>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 GrHoHûe.
|
||||||
|
|
||||||
|
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#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 190011aXA
|
15
presentation/190012a
Normal file
15
presentation/190012a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>RetroTextEA…RetroText‡ 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ƒ#‡ <20>:)‡
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
˜<EFBFBD>‚ Fragen?‡ŒŸ
|
||||||
|
WA#!Tƒ0‡!ZurHuck Zum Anfang!ƒ9‡X` 190012aXA
|
1
presentation/1900a
Normal file
1
presentation/1900a
Normal file
@ -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@# T›0@RetroTextBA#!T"#$CA#!T%&' <20>PrHasentation RetroText~FH¸£WäGGê YµHGê àøüßIüô° µIGê èßC¿£EïßC´ µJGê ªßß߯¡àüßßü°¢¯ßßߥ µKGê ¢ãøþßêßCµßýô³¡ µLGê ßCêßCµßC µMGê ßCýó¯¯óþßC µNGê ßM µOGê YµPGê D¼´ð°ôà°ð°ì¤ð°°°ô DµQGê D¿±½¥µê µµê ½¥¹±µ DµRGê D¡¡£¡£¢ £¡¢ £¡¡¡£ DµSG¢ä W¸¡TI£WWA#!Tƒ0‡!ZurHuck Weiter!ƒ#‡X` 1900aXA
|
3
rtx.py
Normal file → Executable file
3
rtx.py
Normal file → Executable file
@ -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')
|
logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s', level=config.LOGLEVEL, datefmt='%Y-%m-%d %I:%M:%S')
|
||||||
|
|
||||||
# initialize serial connection to client
|
# 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)
|
logging.info("Serial port %s opened", glob.ser.name)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
242
rtxHelpers.py
242
rtxHelpers.py
@ -11,153 +11,161 @@ import cept
|
|||||||
import glob
|
import glob
|
||||||
import logging
|
import logging
|
||||||
import config
|
import config
|
||||||
|
import rtxMask
|
||||||
|
|
||||||
def process_byte(in_byte):
|
def process_byte(in_byte):
|
||||||
""" takes the received byte and processes the command line
|
""" takes the received byte and processes the command line
|
||||||
if a new command has been entered, it will call process_command()
|
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
|
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()
|
and the found target will be sent to process_command()
|
||||||
"""
|
"""
|
||||||
instr=str(in_byte, encoding="latin-1")
|
instr=str(in_byte, encoding="latin-1")
|
||||||
|
|
||||||
if config.MODE=="modem":
|
if config.MODE=="modem":
|
||||||
logging.debug("> %s < CD: %s", instr, glob.ser.getCD())
|
logging.debug("> %s < CD: %s", instr, glob.ser.getCD())
|
||||||
|
|
||||||
# what to send back to the client
|
# what to send back to the client
|
||||||
if instr == cept.INI:
|
if instr == cept.INI:
|
||||||
logging.debug("INI")
|
logging.debug("INI")
|
||||||
echo_char = "*"
|
echo_char = "*"
|
||||||
elif instr == cept.TER:
|
elif instr == cept.TER:
|
||||||
logging.debug("TER")
|
logging.debug("TER")
|
||||||
echo_char = "#"
|
echo_char = "#"
|
||||||
else:
|
else:
|
||||||
echo_char=instr
|
echo_char=instr
|
||||||
|
|
||||||
# start of line: clear rest of cmdline
|
# start of line: clear rest of cmdline
|
||||||
if len(glob.cmdline) == 0:
|
if len(glob.cmdline) == 0:
|
||||||
glob.ser.write(bytes(cept.CLEARLINE, "latin-1"))
|
glob.ser.write(bytes(cept.CLEARLINE, "latin-1"))
|
||||||
|
|
||||||
# echo the character to the client
|
# echo the character to the client
|
||||||
glob.ser.write(bytes(echo_char, "latin-1"))
|
glob.ser.write(bytes(echo_char, "latin-1"))
|
||||||
|
|
||||||
glob.cmdline += instr
|
glob.cmdline += instr
|
||||||
|
|
||||||
# Backspace:
|
# Backspace:
|
||||||
if instr == cept.BSP:
|
if instr == cept.BSP:
|
||||||
glob.cmdline = glob.cmdline[:-1]
|
glob.cmdline = glob.cmdline[:-1]
|
||||||
return
|
return
|
||||||
|
|
||||||
logging.debug("Cmdline: >%s<", glob.cmdline)
|
logging.debug("Cmdline: >%s<", glob.cmdline)
|
||||||
|
|
||||||
# process links inside the page:
|
# process links inside the page:
|
||||||
if ( len(glob.cmdline) == 1 or len(glob.cmdline) == 2 ) and glob.curpage.get_link(glob.cmdline):
|
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
|
glob.cmdline = cept.INI + glob.curpage.get_link(glob.cmdline) + cept.TER
|
||||||
process_command(glob.cmdline)
|
process_command(glob.cmdline)
|
||||||
return
|
return
|
||||||
|
|
||||||
# reset cmdline:
|
# reset cmdline:
|
||||||
if instr == cept.INI and glob.cmdline[-2:] == cept.INI+cept.INI:
|
if instr == cept.INI and glob.cmdline[-2:] == cept.INI+cept.INI:
|
||||||
logging.debug("reset cmdline")
|
logging.debug("reset cmdline")
|
||||||
glob.cmdline = ""
|
glob.cmdline = ""
|
||||||
glob.ser.write(bytes(cept.clear_line24, "latin-1"))
|
glob.ser.write(bytes(cept.clear_line24, "latin-1"))
|
||||||
return
|
return
|
||||||
|
|
||||||
# goto last page:
|
# goto last page:
|
||||||
if instr == cept.TER and glob.cmdline == cept.INI+cept.TER:
|
if instr == cept.TER and glob.cmdline == cept.INI+cept.TER:
|
||||||
if glob.prevpage.get_page_id() == -1:
|
if glob.prevpage.get_page_id() == -1:
|
||||||
glob.cmdline = ""
|
glob.cmdline = ""
|
||||||
send_error("Keine vorige Seite vorhanden.")
|
send_error("Keine vorige Seite vorhanden.")
|
||||||
return
|
return
|
||||||
glob.cmdline = "" # reset cmdline
|
glob.cmdline = "" # reset cmdline
|
||||||
goto_last_page()
|
goto_last_page()
|
||||||
return
|
return
|
||||||
|
|
||||||
# "Make it so":
|
# "Make it so":
|
||||||
if instr == cept.TER:
|
if instr == cept.TER:
|
||||||
# or instr == cept.SEND or instr == cept.CR:
|
# or instr == cept.SEND or instr == cept.CR:
|
||||||
logging.info("Kommando: >%s<", glob.cmdline)
|
logging.info("Kommando: >%s<", glob.cmdline)
|
||||||
process_command(glob.cmdline)
|
process_command(glob.cmdline)
|
||||||
return
|
return
|
||||||
|
|
||||||
def process_command(cmd):
|
def process_command(cmd):
|
||||||
""" processes the given command line
|
""" processes the given command line
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# reset cmdline
|
# reset cmdline
|
||||||
glob.cmdline = ""
|
glob.cmdline = ""
|
||||||
|
|
||||||
# process *cmdline#, normally a page-loading command:
|
# process *cmdline#, normally a page-loading command:
|
||||||
if cmd[0] == cept.INI and cmd[-1:] == cept.TER:
|
if cmd[0] == cept.INI and cmd[-1:] == cept.TER:
|
||||||
pgnr = cmd[1:-1]
|
pgnr = cmd[1:-1]
|
||||||
check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.")
|
check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.")
|
||||||
|
|
||||||
# if only # is entered, either go to the link behind '#'
|
# if only # is entered, either go to the link behind '#'
|
||||||
# or to the next sub-page (2000a => 2000b) if it exists
|
# or to the next sub-page (2000a => 2000b) if it exists
|
||||||
if cmd == cept.TER:
|
if cmd == cept.TER:
|
||||||
if glob.curpage.get_link("#"):
|
if glob.curpage.get_link("#"):
|
||||||
pgnr = glob.curpage.get_link("#")
|
pgnr = glob.curpage.get_link("#")
|
||||||
check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.")
|
check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.")
|
||||||
else:
|
else:
|
||||||
# check if the next page exists, e.g. 2000a => 2000b
|
# check if the next page exists, e.g. 2000a => 2000b
|
||||||
curid = glob.curpage.get_page_id()
|
curid = glob.curpage.get_page_id()
|
||||||
if curid[-1:].isalpha():
|
if curid == -1:
|
||||||
# aus 2000a 2000b machen:
|
send_error("Keine n"+ cept.UMLAUT +"achste Seite gefunden.")
|
||||||
nextid = curid[:-1] + chr(ord(curid[-1:])+1)
|
elif str(curid[-1:]).isalpha():
|
||||||
check_and_send_page(nextid, "Keine n"+str(cept['UMLAUT'])+"achste Seite gefunden.")
|
# 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():
|
def goto_last_page():
|
||||||
""" go back to the previous page and make the current page the previous 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()))
|
logging.info("Letzte Seite: %s", str(glob.prevpage.get_page_id()))
|
||||||
|
|
||||||
# swap prevpage and curpage
|
# swap prevpage and curpage
|
||||||
temp = glob.curpage
|
temp = glob.curpage
|
||||||
glob.curpage = glob.prevpage
|
glob.curpage = glob.prevpage
|
||||||
glob.prevpage = temp
|
glob.prevpage = temp
|
||||||
|
|
||||||
# send the previous page (now curpage) to the client
|
# send the previous page (now curpage) to the client
|
||||||
send_page(glob.curpage)
|
send_page(glob.curpage)
|
||||||
|
|
||||||
def send_welcome_page():
|
def send_welcome_page():
|
||||||
""" get the btxlogo, make a rtxPage of it and send it to the client """
|
""" get the btxlogo, make a rtxPage of it and send it to the client """
|
||||||
wpage = rtxPage()
|
glob.curpage = rtxPage()
|
||||||
wpage.set_page(bytes(cept.btxlogo, "latin-1"))
|
glob.curpage.set_page(bytes(cept.btxlogo, "latin-1"))
|
||||||
send_page(wpage)
|
send_page(glob.curpage)
|
||||||
|
|
||||||
def check_and_send_page(pgnr, errormsg):
|
def check_and_send_page(pgnr, errormsg):
|
||||||
""" checks if the page "pgnr" exists
|
""" checks if the page "pgnr" exists
|
||||||
if yes, it loads it into curpage and sends it to the client
|
if yes, it loads it into curpage and sends it to the client
|
||||||
if not, it sends the error message "errormsg" to the client
|
if not, it sends the error message "errormsg" to the client
|
||||||
"""
|
"""
|
||||||
logging.info("suche Seite: >%s<", pgnr)
|
logging.info("suche Seite: >%s<", pgnr)
|
||||||
|
|
||||||
if rtxPage.exists(pgnr):
|
if rtxPage.exists(pgnr):
|
||||||
glob.prevpage = glob.curpage
|
glob.prevpage = glob.curpage
|
||||||
glob.curpage = rtxPage(pgnr)
|
glob.curpage = rtxPage(pgnr)
|
||||||
send_page(glob.curpage) # takes a rtxPage object!
|
send_page(glob.curpage) # takes a rtxPage object!
|
||||||
return True
|
return True
|
||||||
elif pgnr[-1:].isnumeric() and rtxPage.exists(pgnr + "a"):
|
elif pgnr[-1:].isnumeric() and rtxPage.exists(pgnr + "a"):
|
||||||
glob.prevpage = glob.curpage
|
glob.prevpage = glob.curpage
|
||||||
glob.curpage = rtxPage(pgnr + "a")
|
glob.curpage = rtxPage(pgnr + "a")
|
||||||
send_page(glob.curpage) # takes a rtxPage object!
|
send_page(glob.curpage) # takes a rtxPage object!
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
send_error(errormsg)
|
send_error(errormsg)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def send_error(msg):
|
def send_error(msg):
|
||||||
""" send an error message to the client """
|
""" send an error message to the client """
|
||||||
glob.ser.write(bytes(cept.error_prefix + msg + cept.error_suffix, "latin-1"))
|
glob.ser.write(bytes(cept.error_prefix + msg + cept.error_suffix, "latin-1"))
|
||||||
|
|
||||||
def send_page(page):
|
def send_page(page):
|
||||||
""" sends a page to the client """
|
""" sends a page to the client """
|
||||||
glob.ser.write(page.get_page())
|
glob.ser.write(page.get_page())
|
||||||
|
|
||||||
|
158
rtxMask.py
Normal file
158
rtxMask.py
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
# -*- coding: UTF-8 -*-
|
||||||
|
'''
|
||||||
|
rtx - RetroText
|
||||||
|
rtxMask: Klasse zur Verarbeitung einer Eingabemaske
|
||||||
|
by Anna Christina Naß <acn@acn.wtf>
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
|
79
rtxModem.py
79
rtxModem.py
@ -12,48 +12,51 @@ import config
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
def init_modem():
|
def init_modem():
|
||||||
""" send the modem init strings to the modem """
|
logging.debug("clearing input/output buffers")
|
||||||
logging.debug("init_modem")
|
glob.ser.reset_input_buffer()
|
||||||
if config.MODEM_INIT1 != "":
|
glob.ser.reset_output_buffer()
|
||||||
logging.debug("sending MODEM_INIT1")
|
""" send the modem init strings to the modem """
|
||||||
glob.ser.write(bytes(config.MODEM_INIT1 + "\r", "latin-1"))
|
logging.debug("init_modem")
|
||||||
rc = _serial_readline()
|
if config.MODEM_INIT1 != "":
|
||||||
logging.info("MODEM_INIT1: %s", rc)
|
logging.debug("sending MODEM_INIT1")
|
||||||
rc = _serial_readline()
|
glob.ser.write(bytes(config.MODEM_INIT1 + "\r", "latin-1"))
|
||||||
logging.info("MODEM_INIT1: %s", rc)
|
rc = _serial_readline()
|
||||||
|
logging.info("MODEM_INIT1: %s", rc)
|
||||||
|
rc = _serial_readline()
|
||||||
|
logging.info("MODEM_INIT1: %s", rc)
|
||||||
|
|
||||||
if config.MODEM_INIT2 != "":
|
if config.MODEM_INIT2 != "":
|
||||||
logging.debug("sending MODEM_INIT2")
|
logging.debug("sending MODEM_INIT2")
|
||||||
glob.ser.write(bytes(config.MODEM_INIT2 + "\r", "latin-1"))
|
glob.ser.write(bytes(config.MODEM_INIT2 + "\r", "latin-1"))
|
||||||
rc = _serial_readline()
|
rc = _serial_readline()
|
||||||
logging.info("MODEM_INIT2: %s", rc)
|
logging.info("MODEM_INIT2: %s", rc)
|
||||||
rc = _serial_readline()
|
rc = _serial_readline()
|
||||||
logging.info("MODEM_INIT2: %s", rc)
|
logging.info("MODEM_INIT2: %s", rc)
|
||||||
|
|
||||||
def wait_for_caller():
|
def wait_for_caller():
|
||||||
""" waits for the RING of the modem and answers it """
|
""" waits for the RING of the modem and answers it """
|
||||||
modem_answered = False
|
modem_answered = False
|
||||||
logging.debug("wait_for_caller")
|
logging.debug("wait_for_caller")
|
||||||
while not modem_answered:
|
while not modem_answered:
|
||||||
rc = _serial_readline()
|
rc = _serial_readline()
|
||||||
if rc.startswith(config.MODEM_RING):
|
if rc.startswith(config.MODEM_RING):
|
||||||
logging.info("modem ringing! Answering.")
|
logging.info("modem ringing! Answering.")
|
||||||
glob.ser.write(bytes(config.MODEM_ANSWER + "\r", "latin-1"))
|
glob.ser.write(bytes(config.MODEM_ANSWER + "\r", "latin-1"))
|
||||||
rc = _serial_readline()
|
rc = _serial_readline()
|
||||||
logging.info("Answer: %s", rc)
|
logging.info("Answer: %s", rc)
|
||||||
rc = _serial_readline()
|
rc = _serial_readline()
|
||||||
logging.info("Answer: %s", rc)
|
logging.info("Answer: %s", rc)
|
||||||
modem_answered=True
|
modem_answered=True
|
||||||
else:
|
else:
|
||||||
modem_answered=False
|
modem_answered=False
|
||||||
|
|
||||||
def _serial_readline():
|
def _serial_readline():
|
||||||
line = ""
|
line = ""
|
||||||
in_byte = ""
|
in_byte = ""
|
||||||
|
|
||||||
while not in_byte == b"\n":
|
while not in_byte == b"\n":
|
||||||
in_byte = glob.ser.read(1)
|
in_byte = glob.ser.read(1)
|
||||||
#print(in_byte)
|
#print(in_byte)
|
||||||
line += str(in_byte, encoding="latin-1")
|
line += str(in_byte, encoding="latin-1")
|
||||||
|
|
||||||
return line
|
return line
|
||||||
|
169
rtxPage.py
169
rtxPage.py
@ -12,103 +12,100 @@ import config
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
class rtxPage:
|
class rtxPage:
|
||||||
""" Klasse zur Benutzung einer CEPT-Seite
|
""" Klasse zur Benutzung einer CEPT-Seite
|
||||||
"""
|
"""
|
||||||
|
|
||||||
die_seite = ""
|
die_seite = ""
|
||||||
seiten_nummer = -1
|
seiten_nummer = -1
|
||||||
link_liste = {}
|
link_liste = {}
|
||||||
|
|
||||||
def __init__(self, page = None):
|
def __init__(self, page = None):
|
||||||
""" create a new page object for the page 'page'
|
""" create a new page object for the page 'page'
|
||||||
returns False if the page cannot be found
|
returns False if the page cannot be found
|
||||||
returns True if the page has been loaded
|
returns True if the page has been loaded
|
||||||
"""
|
"""
|
||||||
if page == None:
|
if page == None:
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self.die_seite = ""
|
self.die_seite = ""
|
||||||
self.seiten_nummer = -1
|
self.seiten_nummer = -1
|
||||||
self.link_liste = {}
|
self.link_liste = {}
|
||||||
self._load_page(page)
|
self._load_page(page)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def exists(page):
|
def exists(page):
|
||||||
""" checks if the page (i.e. the file) exists """
|
""" checks if the page (i.e. the file) exists """
|
||||||
if os.path.isfile(config.PAGES + page):
|
for path in config.PAGES:
|
||||||
return True
|
if os.path.isfile(path + page):
|
||||||
elif os.path.isfile(config.DEMOPAGES + page):
|
return True
|
||||||
return True
|
return False
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_page(self):
|
def get_page(self):
|
||||||
""" returns the page if loaded
|
""" returns the page if loaded
|
||||||
returns False if no page has been loaded
|
returns False if no page has been loaded
|
||||||
"""
|
"""
|
||||||
if self.die_seite != "":
|
if self.die_seite != "":
|
||||||
return self.die_seite
|
return self.die_seite
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def set_page(self,pagedata):
|
def set_page(self,pagedata):
|
||||||
""" write the pagedata as the new page and (probably) the link list """
|
""" write the pagedata as the new page and (probably) the link list """
|
||||||
self.die_seite = pagedata
|
self.die_seite = pagedata
|
||||||
self.link_liste = self._get_link_list()
|
self.link_liste = self._get_link_list()
|
||||||
|
|
||||||
def get_links(self):
|
def get_links(self):
|
||||||
""" returns the list of links found in this page """
|
""" returns the list of links found in this page """
|
||||||
return self.link_liste
|
return self.link_liste
|
||||||
|
|
||||||
def get_link(self, link):
|
def get_link(self, link):
|
||||||
""" returns the target for a given link
|
""" returns the target for a given link
|
||||||
returns False if this link does not exist
|
returns False if this link does not exist
|
||||||
"""
|
"""
|
||||||
if link in self.link_liste:
|
if link in self.link_liste:
|
||||||
return self.link_liste[link]
|
return self.link_liste[link]
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_page_id(self):
|
def get_page_id(self):
|
||||||
""" returns the id of the current page """
|
""" returns the id of the current page """
|
||||||
return self.seiten_nummer
|
return self.seiten_nummer
|
||||||
|
|
||||||
def _load_page(self, page):
|
def _load_page(self, page):
|
||||||
""" Load a CEPT page from the file system
|
""" Load a CEPT page from the file system
|
||||||
returns False if the page cannot be found
|
returns False if the page cannot be found
|
||||||
returns True if the page has been loaded
|
returns True if the page has been loaded
|
||||||
"""
|
"""
|
||||||
if os.path.isfile(config.PAGES + page):
|
for path in config.PAGES:
|
||||||
filename = config.PAGES + page
|
if os.path.isfile(path + page):
|
||||||
elif os.path.isfile(config.DEMOPAGES + page):
|
filename = path + page
|
||||||
filename = config.DEMOPAGES + page
|
""" page has been found, now exit the for loop """
|
||||||
else:
|
break
|
||||||
return False
|
else:
|
||||||
|
""" page does not exist anywhere, so exit the function """
|
||||||
|
return False
|
||||||
|
|
||||||
with open(filename, "rb") as f:
|
with open(filename, "rb") as f:
|
||||||
self.die_seite = f.read()
|
self.die_seite = f.read()
|
||||||
self.seiten_nummer = page
|
self.seiten_nummer = page
|
||||||
link_liste = self._get_link_list()
|
self.link_liste = self._get_link_list()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _get_link_list(self):
|
def _get_link_list(self):
|
||||||
""" private function which parses the CEPT page and extracts the link list
|
""" private function which parses the CEPT page and extracts the link list
|
||||||
returns True if links have been found
|
returns True if links have been found
|
||||||
returns False if no links have been found
|
returns False if no links have been found
|
||||||
"""
|
"""
|
||||||
links = []
|
links = []
|
||||||
links = re.findall("\x1f\x3d([^\x1f\x9b\x1b]+)", str(self.die_seite, "latin-1"))
|
links = re.findall("\x1f\x3d([^\x1f\x9b\x1b]+)", str(self.die_seite, "latin-1"))
|
||||||
|
liste = {}
|
||||||
|
|
||||||
for item in links:
|
for item in links:
|
||||||
if item[0] != "0":
|
if item[0] != "0":
|
||||||
link = item[1:3].strip()
|
link = item[1:3].strip()
|
||||||
target = item[3:].strip()
|
target = item[3:].strip()
|
||||||
self.link_liste[link] = target
|
liste[link] = target
|
||||||
|
|
||||||
logging.info(self.link_liste)
|
logging.info(liste)
|
||||||
|
|
||||||
if self.link_liste == {}:
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
return liste
|
||||||
|
Loading…
Reference in New Issue
Block a user