Merge branch 'devel'
This commit is contained in:
127
cept.py
127
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"
|
||||
)
|
||||
"\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"
|
||||
)
|
12
config.py
12
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
|
||||
|
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><>!<21>"<22>#<23>$<24>%DJ<44><4A>1@<40>&'()*(@<0F>1@BU<42>RetroPulsiv 8.0DT<44>26.+27. Nov. 2016EA<45>PgVA<56>Pg<>0@WA<57>0@+ @<40>0<EFBFBD>+ZurHuck Zeichensatz+<2B>#<23>X` 1990aXA<58>
|
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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>UeberschriftEATextWA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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><>!<21>"<22>#<23>$<24>%DJ<44><4A>1@<40>&'()*(@<0F>1@BU<42>RetroPulsiv 8.0DR<44>HUber die RetroPulsivEA<45>PgVA<56>Pg<>0@+ @FA<46>
|
||||
<20>Es gib zu wenig Retrocomputing-
|
||||
Veranstaltungen im SHuden der Republik!
|
||||
|
||||
<EFBFBD>Wer kennt sie nicht, die Computer der
|
||||
60er, 70er und 80er Jahre? Kaum jemand
|
||||
aus der "Generation Golf" sa<19> 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<19>
|
||||
an Kreativitat fHorderten, <20>wird auf der
|
||||
RETROpulsiv an der HS Augsburg (erneut)
|
||||
zum Leben erweckt!<21>WA<57>0@<40>0<EFBFBD>+ZurHuck VortrHage+<2B>#<23>Xb<58>190101aXA<58>
|
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><>!<21>"<22>#<23>$<24>%DJ<44><4A>1@<40>&'()*(@<0F>1@BU<42>RetroPulsiv 8.0DR<44>Das VortragsprogrammEA<45>PgVA<56>Pg<>0@+ @FA<46><41>Samstag 26. November 2016<31>
|
||||
<EFBFBD>11:30 <20>Dr. Stefan HHoltgen:<3A>
|
||||
G.W. Leibniz und der ALTAIR 8800
|
||||
Eine archHaologische Verschaltung
|
||||
von Computern und Philosophie
|
||||
<EFBFBD>15:00 <20>Herwig Solf:<3A> Feuer fur den A500
|
||||
klassische Beschleunigung
|
||||
fHur die Freundin, aber wie?
|
||||
<EFBFBD>17:00 <20>Christian Krenner:<3A> Space Chase:
|
||||
Entwicklung eines Spiels fHur die
|
||||
CBM II-Computer
|
||||
|
||||
<EFBFBD><EFBFBD>Sonntag 27. November 2016<31><36>
|
||||
<EFBFBD>13:00 <20>Richard LHowenstein:<3A> RESHOOT
|
||||
Entwicklung eines Shoot em Up
|
||||
fHur den Amiga 1200WA<57>0@<40>0<EFBFBD>+ZurHuck Veranstaltungen+<2B>#<23>Xb<58>190102aXA<58>
|
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><>!<21>"<22>#<23>$<24>%DJ<44><4A>1@<40>&'()*(@<0F>1@BU<42>RetroPulsiv 8.0CY<43>WeitereDQ<44>PflichtveranstaltungenEA<45>PgVA<56>Pg<>0@+ @FA<46>...WA<57>0@<40>0<EFBFBD>+ZurHuckXb<58>190103aXA<58>
|
@@ -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@ž‡( @!"#
|
||||
$%& (@
|
||||
<EFBFBD>Bildschirmtrix
|
||||
#!T
|
||||
#!T›1@<40>
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"Až›0@‡RetroText
|
||||
+ @#!T
|
||||
#!T›1@<40>Œ$%&
!"#
|
||||
<EFBFBD> Testbild: ZeichensHatze
|
||||
<0A>0@<40><><EFBFBD>
|
||||
(@<0F><>G0-SET:<3A><> <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E>
|
||||
|
||||
@@ -10,7 +9,4 @@
|
||||
|
||||
(@<0F><>G2-SET:<3A><>(b <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E>
|
||||
|
||||
(@’€G3-SET:‡ž(d <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ž
|
||||
|
||||
(@#!TWeiter mit # oder *Seitennummer#
|
||||
Eingabe ==>
|
||||
(@’€G3-SET:‡ž(d <20>!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ž
WA(@#!Tƒ0‡'ZurHuck DRCS'ƒ#‡X` 190910aXA
|
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<0C>1@# T"A<>0@<40><>RetroText
|
||||
|
||||
#!T
|
||||
#!T<>0@<40><><EFBFBD><EFBFBD>
|
||||
Testbild DRCS
|
||||
|
||||
<EFBFBD>0@<40><><EFBFBD>
|
||||
BTX DRCS-Beispiel nach CEPT T/CD 6-1
|
||||
|
||||
|
||||
Alle geladenen DRCS Zeichen:
|
||||
|
||||
( @!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
|
||||
|
||||
|
||||
|
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<0C>1@# T(@"A<>0@<40><>RetroText
|
||||
|
||||
#!T
|
||||
#!T<>0@<40><><EFBFBD><EFBFBD>
|
||||
Testbild DRCS2
|
||||
|
||||
|
||||
<EFBFBD>0@<40><><EFBFBD>BTX DRCS-Beispiel nach CEPT T/CD 6-1
|
||||
|
||||
|
||||
Geladenene DRCS Zeichen:
|
||||
|
||||
( @!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
|
||||
|
||||
|
||||
|
||||
(@Zusammengebaut zu einem Bild:
|
||||
|
||||
|
||||
|
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<0C>1@# T+ @"A<><41>0@<40>RetroText
|
||||
|
||||
#!T
|
||||
#!T<>1@<40><>$%&
|
||||
!"#
|
||||
<EFBFBD> Testbild: DRCS
|
||||
<EFBFBD>0@<40><><EFBFBD>
|
||||
|
||||
(@<0F><>G0-SET:<3A><> <20>!"#$%&'()*+,-./0123456789:;<=>?<3F>
|
||||
|
||||
<EFBFBD><EFBFBD>DRCS: <20><> ( @<0F>!"#$%&'()*+,-./0123456789:;<=>?<3F>(@
|
||||
|
||||
|
@@ -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@ž‡( @!"#
|
||||
$%& (@
|
||||
<EFBFBD>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+ @"Až›0@‡RetroText
|
||||
#!T
|
||||
#!T›1@<40>
Testbild: Farben *colorset#
|
||||
#!T›1@<40>Œ$%&
!"#
|
||||
<EFBFBD> Testbild: Farben
|
||||
|
||||
›0@Œž‡(@›0@’€Farbtabelle #1‡ž
|
||||
›0@<40> ‘ ’ “ ” • – — <20> ‘ ’ “ ” • – —
|
||||
›0@’€Farbtabelle #2‡ž
|
||||
@@ -12,5 +12,4 @@
|
||||
›0@’€Farbtabelle #4 (Frei definierbar)‡ž
|
||||
›3@<40> ‘ ’ “ ” • – — <20> ‘ ’ “ ” • – —
|
||||
›0@
|
||||
ž‡(@#!TWeiter mit # oder *Seitennummer#
|
||||
Eingabe ==>
|
||||
žWA(@#!Tƒ0‡'ZurHuck Farbreinheit rot'ƒ#‡X` 190912aXA
|
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<><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><>
|
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<0C>1@# T"A<><41>0@<40>RetroText
|
||||
|
||||
#!T
|
||||
#!T<>1@+ @<40>$%&
|
||||
!"#
|
||||
<EFBFBD> Testbilder *test#
|
||||
|
||||
<EFBFBD>0@<40><><EFBFBD>* @
|
||||
|
||||
<EFBFBD><EFBFBD>Decodertest:<3A><>
|
||||
|
||||
Zeichensatz<EFBFBD>L<>10<31>
|
||||
|
||||
Zeichensatz (DRCS)<29>E<>11<31>
|
||||
|
||||
Farben<EFBFBD>Q<>12<31>
|
||||
|
||||
|
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><>!<21>"<22>#<23>$<24>%DJ<44><4A>1@<40>&'()*(@<0F>1@BU<42>RetroPulsiv 8.0DT<44>26.+27. Nov. 2016EA<45>PgVA<56>Pg<>0@+ @FA<46>
|
||||
<20>Herzlich Willkommen zur RetroPulsiv!<21>
|
||||
|
||||
HUber die RetroPulsiv +C 1
|
||||
Vortragsprogramm +G 2
|
||||
|
||||
Testbilder +M 3
|
||||
PrHasentation +K 4
|
||||
|
||||
Btx-Demonstration +F 5WA<57>0@<40>0<EFBFBD>+ZurHuck Zeichensatz+<2B>#<23>Xe<58>190aXA<58>
|
@@ -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<1E>1@# T(@"A<>0@<40><>(c|||
|
||||
|
||||
/// (@
|
||||
<EFBFBD>Bildschirmtrix
|
||||
|
||||
#!T
|
||||
#!T<>1@<40>
|
||||
Testbild: DRCS *drcs#
|
||||
|
||||
<EFBFBD>0@<40><><EFBFBD>
|
||||
|
||||
(@<0F><>G0-SET:<3A><> <20>!"#$%&'()*+,-./0123456789:;<=>?<3F>
|
||||
|
||||
<EFBFBD><EFBFBD>DRCS: <20><> ( @<0F>!"#$%&'()*+,-./0123456789:;<=>?<3F>(@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
(@<0F><>G0-SET:<3A><> <20>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_<><5F><EFBFBD>DRCS: <20><> ( @<0F>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_<>(@
|
||||
|
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<0C>1@# T(@"A<>0@<40><>Bildschirmtrix
|
||||
|
||||
<EFBFBD>0@#!W
|
||||
#!W<>1@<40><><EFBFBD>1@<40>
|
||||
Testbild *drcs#
|
||||
|
||||
<EFBFBD>0@<40><><EFBFBD>BTX DRCS-Beispiel nach CEPT T/CD 6-1
|
||||
|
||||
|
||||
Alle geladenen DRCS Zeichen:
|
||||
|
||||
( @!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
|
||||
|
||||
|
||||
|
||||
(@Zusammengebaut zu einem Bild:
|
||||
|
||||
|
||||
|
||||
( @!"#$%&'
|
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<0C>1@# T(@"A<>0@<40><>Bildschirmtrix
|
||||
|
||||
<EFBFBD>0@#!W
|
||||
#!W<>1@<40><><EFBFBD>1@<40>
|
||||
Testbild *drcs2#
|
||||
|
||||
<EFBFBD>0@<40><><EFBFBD>BTX DRCS-Beispiel nach CEPT T/CD 6-1
|
||||
|
||||
|
||||
Geladenene DRCS Zeichen:
|
||||
|
||||
( @!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
|
||||
|
||||
|
||||
|
||||
(@Zusammengebaut zu einem Bild:
|
||||
|
||||
|
||||
|
||||
( @<0F>!"#$%&'
|
@@ -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<1E>1@# T(@"A<>0@<40><>( @!"#
|
||||
|
||||
$%& (@
|
||||
<EFBFBD>Bildschirmtrix
|
||||
|
||||
#!T
|
||||
#!T<>1@<40>
|
||||
Testbilder: *testbild#
|
||||
|
||||
<EFBFBD>0@<40><><EFBFBD>(@
|
||||
|
||||
<EFBFBD>Decodertest:<3A>
|
||||
|
||||
Zeichensatz.............<2E>10 *charset#<23>
|
||||
|
||||
Zeichensatz (DRCS)......<2E>11 *drcs#<23>
|
||||
|
||||
Farben..................<2E>12 *colorset#<23>
|
||||
|
||||
|
||||
|
||||
<EFBFBD>Monitortest:<3A>
|
||||
|
||||
Farbreinheit (rot)......<2E>20 *red#<23>
|
||||
|
@@ -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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>BildschirmtextEABildschirmtext (Btx) war ein inter-
|
||||
aktiver Onlinedienst.
|
||||
|
||||
Vorstellung auf der <20>IFA '77<37> in Berlin
|
||||
von Postminister Kurt Gscheidle
|
||||
|
||||
Entwickelt unter der Leitung von Eric
|
||||
Danke, inspiriert <20>1975<37> durch VerHoffent-
|
||||
lichung Huber das britische
|
||||
PRESTEL-System.
|
||||
|
||||
<EFBFBD>1980<EFBFBD> Feldversuch mit 2000 Teilnehmern.
|
||||
18. MHarz <20>1983<38> Unterzeichnung des
|
||||
Btx-Staatsvertrags
|
||||
1. Sept. <20>1983<38> Start zur IFAWA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>BildschirmtextEANutzer: <20>1986<38> ca. <20>60.000<EFBFBD> (gepl.: 1 Mio.)
|
||||
erst <20>1996 1 Mio.<2E>, aber da war es schon
|
||||
T-Online mit Internet+E-Mail
|
||||
|
||||
<EFBFBD>31.12.2001<EFBFBD>: Abschaltung des
|
||||
klassischen Btx
|
||||
Online-Banking noch bis 10. Mai <20>2007<30>
|
||||
|
||||
Btx-Leitzentrale in <20>Ulm<6C>
|
||||
Zu Beginn Vermittlungsstellen in
|
||||
DHusseldorf, Hamburg, Frankfurt/M,
|
||||
MHunchen, Stuttgart
|
||||
Geplant waren 150 VSt...WA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>Andere LHanderEA<45><41>HOsterreich:<3A><>
|
||||
Start Juni <20>1982<38>,
|
||||
MUPID als eigenes Terminal
|
||||
(vgl. RetroPulsiv 7.0)
|
||||
Ende: November <20>2001<30>
|
||||
|
||||
HAhnliche Systeme in <20>Europa<70>:
|
||||
|
||||
<20>Schweiz<69>: Videotex
|
||||
<20>UK<55>: Prestel
|
||||
<20>Schweden<65>: Prestel plus
|
||||
<20>Frankreich<63>: Minitel
|
||||
<20>DHanemark<72>: Teledata
|
||||
<20>Italien<65>: Videotel
|
||||
<EFBFBD>Niederlande<EFBFBD>: Viditel
|
||||
<20>Spanien<65>: IbertexWA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>Btx in DeutschlandEA<45><41>Btx-EndgerHate:<3A><>
|
||||
|
||||
- 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<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>ModemsEA<45>Postmodem:<3A>
|
||||
- D-BT 03 war lange der Standard
|
||||
- <20>1200<30> Bit/s empfangen,
|
||||
<20>75<37> Bit/s senden (V.23)
|
||||
- feste Anschlu<19>kennung (EPROM)
|
||||
- fest programmierte Telefonnummer
|
||||
- eigenes Anschlu<19>interface
|
||||
|
||||
- spHater auch alternative Modems,
|
||||
Akustikkoppler erlaubt
|
||||
- hierfHur war <20>Software-Kennung<6E> nHotig
|
||||
- ZugHange mit hHoherer Datenrate kamen
|
||||
erst Huber die JahreWA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>ZugangsdatenEA- <20>Anschlu<19>kennung<6E> (12 Stellen) identi-
|
||||
fiziert den Telefonanschlu<19>
|
||||
- aufgrunnd fehlender <20>CallerID<49>, da ja
|
||||
noch viele VSt Analogtechnik hatten
|
||||
- zunHachst fest in D-BT03 integriert,
|
||||
spHater <20>Software-Kennung<6E> mHoglich
|
||||
|
||||
- <20>Benutzerkennung<6E> identifiziert den
|
||||
Teilnehmer
|
||||
- <20>Mitbenutzerkennung<6E> z.B. andere
|
||||
Familienmitglieder
|
||||
- <20>PersHonliches Kennwort<72> als Sicherheit
|
||||
|
||||
- FHur nomadische Benutzer:
|
||||
- Anschlu<19>freizHugigkeit
|
||||
- TeilnehmerfreizHugigkeitWA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>Btx-ZentraleEADas Btx-System war hierarchisch
|
||||
organisiert.
|
||||
- <20>Leitzentrale<6C> in Ulm mit IBM-Technik
|
||||
- weitere VSt waren "Caches"
|
||||
- <20>externe Rechner<65> wurden direkt
|
||||
angesprochen, waren per <20>Datex-P<>
|
||||
(X.25) angebunden
|
||||
- Beispiele: Quelle, Fluglinien, Bahn,
|
||||
Banken ...
|
||||
|
||||
Kosten fHur Inhalte:
|
||||
- <20>seitenabhHangige VergHutung<6E>:
|
||||
<20>0,01 DM<44> bis <20>9,99 DM<44> mHoglich
|
||||
- <20>zeitabhHangige VergHutung<6E>:
|
||||
<20>0,01 DM<44> bis <20>1,30 DM<44> pro Min. mHoglich
|
||||
- Abrechnung Huber TelefonrechnungWA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>Datex-JEA<45>Datex-J<>:
|
||||
|
||||
<EFBFBD>1993<EFBFBD>: Trennung von Netz (Datex-J)
|
||||
und Inhalt (Btx)
|
||||
Btx blieb aber der einzige
|
||||
Dienst in Datex-J
|
||||
<EFBFBD>1995<EFBFBD>: Umbenennung in <20>T-Online<6E>
|
||||
|
||||
<EFBFBD>HOsterreich:<3A>
|
||||
|
||||
<EFBFBD>PAN<EFBFBD> (Public Access Network)
|
||||
<20>1993<39>-<2D>1995<39>WA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>Frankreich: MinitelEASehr erfolgreiches System mit
|
||||
eigenen Terminals.
|
||||
|
||||
Testbetrieb <20>1981<38>, Start <20>1982<38>.
|
||||
Einstellung <20>30.Juni 2012<31> (!)
|
||||
|
||||
Terminals kostenlos erhHaltlich, statt
|
||||
gedrucktem Telefonbuch.
|
||||
|
||||
<EFBFBD>1985<EFBFBD>: 1 Mio. Nutzer
|
||||
<EFBFBD>1990<EFBFBD>: 4 Mio. Nutzer
|
||||
<20>1990er<65>: 25.000 Dienste
|
||||
<EFBFBD>2000<EFBFBD>: 25 Mio. Nutzer (HHochstzahl)
|
||||
<EFBFBD>2010<EFBFBD>: 2 Mio. Nutzer - 2.400 Dienste
|
||||
<EFBFBD>Juni 2012<31>: 400.000 N. / 1.800 D.WA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>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 (<28>DRCS<43>).WA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>ZeichensHatzeEAEs gibt 4 Standard-ZeichensHatze, <20>G0<47>-<2D>G3<47>.
|
||||
|
||||
Weiterhin den Zeichensatz <20>L<EFBFBD> mit Zeichen
|
||||
aus G0+G1 aufgr. Prestel-KompatibilitHat.
|
||||
|
||||
<EFBFBD>G0<EFBFBD> enthHalt die meisten <20>ASCII<49>-Zeichen
|
||||
<EFBFBD>G1<EFBFBD> enthHalt <20>Blockgrafik<69>-Elemente mit
|
||||
<20>2x3<78> BlHocken pro Zeichen
|
||||
<EFBFBD>G2<EFBFBD> enthHalt weitere <20>Sonderzeichen<65>
|
||||
<EFBFBD>G3<EFBFBD> enthHalt weitere <20>Grafiksymbole<6C>, z.B.
|
||||
Liniensymbole
|
||||
|
||||
ZeichensHatze kHonnen gemischt verwendet
|
||||
werden, auch innerhalb einer Zeile.WA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>Dynamische ZeichensHatze (DRC)EAMit DRCs lassen sich eigene Zeichen mit
|
||||
<EFBFBD>12x10<EFBFBD> bzw. <20>12x12<31> (bei 20x40 Zeichen)
|
||||
definieren.
|
||||
|
||||
Ein DRC-Zeichen kann <20>2<EFBFBD>-, <20>4<EFBFBD>- oder <20>16<31>-
|
||||
<EFBFBD>farbig<EFBFBD> sein, letzteres aber nur bei
|
||||
max. <20>6x10<31> 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<EFBFBD>!ZurHuck Weiter!<21>#<23>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>RetroTextEA<45>RetroText<78> ist eine in <20>Python<6F> implemen-
|
||||
tierte Fassung eines Btx-Servers.
|
||||
Es wurde inspiriert von <20>Norbert Kehrers<72>
|
||||
Btx-Server-Projekt,
|
||||
siehe RetroPulsiv 7.0.
|
||||
|
||||
Infos unter
|
||||
<20>*<2A>acn.wtf/retrotext.html<6D>#<23> <20>:)<29>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD> Fragen?<3F><><EFBFBD>
|
||||
WA#!T<>0<EFBFBD>!ZurHuck Zum Anfang!<21>9<EFBFBD>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+ @<0C>1@# T<>0@RetroTextBA#!T"#$CA#!T%&' <20>PrHasentation RetroText~FH<46><48>W<>GG<47><47>Y<>HG<48> <20><><EFBFBD><EFBFBD>I<><49><EFBFBD> <20>IG<49> <20><>C<><43>E<><45>C<> <20>JG<4A> <20><><EFBFBD>߯<EFBFBD><DFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߥ <20>KG<4B> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>LG<4C> <20>C<><43>C<><43>C <20>MG<4D> <20>C<><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C <20>NG<4E> <20>M <20>OG<4F> Y<>PG<50> D<><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𰰰<EFBFBD> D<>QG<51> D<><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> D<>RG<52> D<><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> D<>SG<53><47><EFBFBD>W<><57>TI<54>WWA#!T<>0<EFBFBD>!ZurHuck Weiter!<21>#<23>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')
|
||||
|
||||
# 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:
|
||||
|
242
rtxHelpers.py
242
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")
|
||||
""" 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())
|
||||
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())
|
||||
|
||||
|
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
|
||||
|
||||
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 = ""
|
||||
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")
|
||||
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
|
||||
|
169
rtxPage.py
169
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
|
||||
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
|
||||
link_liste = self._get_link_list()
|
||||
return True
|
||||
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
|
||||
|
Reference in New Issue
Block a user