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"
|
||||
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><>!ƒ"‚#„$…%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@ž‡( @!"#
|
||||
$%& (@
|
||||
<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›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@ž‡( @!"#
|
||||
$%& (@
|
||||
<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<>— “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” — “ – ’ • ‘ ” ” <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')
|
||||
|
||||
# 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:
|
||||
|
244
rtxHelpers.py
244
rtxHelpers.py
@ -11,153 +11,161 @@ import cept
|
||||
import glob
|
||||
import logging
|
||||
import config
|
||||
import rtxMask
|
||||
|
||||
def process_byte(in_byte):
|
||||
""" takes the received byte and processes the command line
|
||||
if a new command has been entered, it will call process_command()
|
||||
if a short link has been entered, the link_list of the current page will be searched
|
||||
and the found target will be sent to process_command()
|
||||
"""
|
||||
instr=str(in_byte, encoding="latin-1")
|
||||
|
||||
if config.MODE=="modem":
|
||||
logging.debug("> %s < CD: %s", instr, glob.ser.getCD())
|
||||
""" takes the received byte and processes the command line
|
||||
if a new command has been entered, it will call process_command()
|
||||
if a short link has been entered, the link_list of the current page will be searched
|
||||
and the found target will be sent to process_command()
|
||||
"""
|
||||
instr=str(in_byte, encoding="latin-1")
|
||||
|
||||
if config.MODE=="modem":
|
||||
logging.debug("> %s < CD: %s", instr, glob.ser.getCD())
|
||||
|
||||
# what to send back to the client
|
||||
if instr == cept.INI:
|
||||
logging.debug("INI")
|
||||
echo_char = "*"
|
||||
elif instr == cept.TER:
|
||||
logging.debug("TER")
|
||||
echo_char = "#"
|
||||
else:
|
||||
echo_char=instr
|
||||
# what to send back to the client
|
||||
if instr == cept.INI:
|
||||
logging.debug("INI")
|
||||
echo_char = "*"
|
||||
elif instr == cept.TER:
|
||||
logging.debug("TER")
|
||||
echo_char = "#"
|
||||
else:
|
||||
echo_char=instr
|
||||
|
||||
# start of line: clear rest of cmdline
|
||||
if len(glob.cmdline) == 0:
|
||||
glob.ser.write(bytes(cept.CLEARLINE, "latin-1"))
|
||||
# start of line: clear rest of cmdline
|
||||
if len(glob.cmdline) == 0:
|
||||
glob.ser.write(bytes(cept.CLEARLINE, "latin-1"))
|
||||
|
||||
# echo the character to the client
|
||||
glob.ser.write(bytes(echo_char, "latin-1"))
|
||||
# echo the character to the client
|
||||
glob.ser.write(bytes(echo_char, "latin-1"))
|
||||
|
||||
glob.cmdline += instr
|
||||
glob.cmdline += instr
|
||||
|
||||
# Backspace:
|
||||
if instr == cept.BSP:
|
||||
glob.cmdline = glob.cmdline[:-1]
|
||||
return
|
||||
# Backspace:
|
||||
if instr == cept.BSP:
|
||||
glob.cmdline = glob.cmdline[:-1]
|
||||
return
|
||||
|
||||
logging.debug("Cmdline: >%s<", glob.cmdline)
|
||||
logging.debug("Cmdline: >%s<", glob.cmdline)
|
||||
|
||||
# process links inside the page:
|
||||
if ( len(glob.cmdline) == 1 or len(glob.cmdline) == 2 ) and glob.curpage.get_link(glob.cmdline):
|
||||
glob.cmdline = cept.INI + glob.curpage.get_link(glob.cmdline) + cept.TER
|
||||
process_command(glob.cmdline)
|
||||
return
|
||||
# process links inside the page:
|
||||
if ( len(glob.cmdline) == 1 or len(glob.cmdline) == 2 ) and glob.curpage.get_link(glob.cmdline):
|
||||
glob.cmdline = cept.INI + glob.curpage.get_link(glob.cmdline) + cept.TER
|
||||
process_command(glob.cmdline)
|
||||
return
|
||||
|
||||
# reset cmdline:
|
||||
if instr == cept.INI and glob.cmdline[-2:] == cept.INI+cept.INI:
|
||||
logging.debug("reset cmdline")
|
||||
glob.cmdline = ""
|
||||
glob.ser.write(bytes(cept.clear_line24, "latin-1"))
|
||||
return
|
||||
# reset cmdline:
|
||||
if instr == cept.INI and glob.cmdline[-2:] == cept.INI+cept.INI:
|
||||
logging.debug("reset cmdline")
|
||||
glob.cmdline = ""
|
||||
glob.ser.write(bytes(cept.clear_line24, "latin-1"))
|
||||
return
|
||||
|
||||
# goto last page:
|
||||
if instr == cept.TER and glob.cmdline == cept.INI+cept.TER:
|
||||
if glob.prevpage.get_page_id() == -1:
|
||||
glob.cmdline = ""
|
||||
send_error("Keine vorige Seite vorhanden.")
|
||||
return
|
||||
glob.cmdline = "" # reset cmdline
|
||||
goto_last_page()
|
||||
return
|
||||
# goto last page:
|
||||
if instr == cept.TER and glob.cmdline == cept.INI+cept.TER:
|
||||
if glob.prevpage.get_page_id() == -1:
|
||||
glob.cmdline = ""
|
||||
send_error("Keine vorige Seite vorhanden.")
|
||||
return
|
||||
glob.cmdline = "" # reset cmdline
|
||||
goto_last_page()
|
||||
return
|
||||
|
||||
# "Make it so":
|
||||
if instr == cept.TER:
|
||||
# or instr == cept.SEND or instr == cept.CR:
|
||||
logging.info("Kommando: >%s<", glob.cmdline)
|
||||
process_command(glob.cmdline)
|
||||
return
|
||||
# "Make it so":
|
||||
if instr == cept.TER:
|
||||
# or instr == cept.SEND or instr == cept.CR:
|
||||
logging.info("Kommando: >%s<", glob.cmdline)
|
||||
process_command(glob.cmdline)
|
||||
return
|
||||
|
||||
def process_command(cmd):
|
||||
""" processes the given command line
|
||||
"""
|
||||
""" processes the given command line
|
||||
"""
|
||||
|
||||
# reset cmdline
|
||||
glob.cmdline = ""
|
||||
# reset cmdline
|
||||
glob.cmdline = ""
|
||||
|
||||
# process *cmdline#, normally a page-loading command:
|
||||
if cmd[0] == cept.INI and cmd[-1:] == cept.TER:
|
||||
pgnr = cmd[1:-1]
|
||||
check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.")
|
||||
# process *cmdline#, normally a page-loading command:
|
||||
if cmd[0] == cept.INI and cmd[-1:] == cept.TER:
|
||||
pgnr = cmd[1:-1]
|
||||
check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.")
|
||||
|
||||
# if only # is entered, either go to the link behind '#'
|
||||
# or to the next sub-page (2000a => 2000b) if it exists
|
||||
if cmd == cept.TER:
|
||||
if glob.curpage.get_link("#"):
|
||||
pgnr = glob.curpage.get_link("#")
|
||||
check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.")
|
||||
else:
|
||||
# check if the next page exists, e.g. 2000a => 2000b
|
||||
curid = glob.curpage.get_page_id()
|
||||
if curid[-1:].isalpha():
|
||||
# aus 2000a 2000b machen:
|
||||
nextid = curid[:-1] + chr(ord(curid[-1:])+1)
|
||||
check_and_send_page(nextid, "Keine n"+str(cept['UMLAUT'])+"achste Seite gefunden.")
|
||||
# if only # is entered, either go to the link behind '#'
|
||||
# or to the next sub-page (2000a => 2000b) if it exists
|
||||
if cmd == cept.TER:
|
||||
if glob.curpage.get_link("#"):
|
||||
pgnr = glob.curpage.get_link("#")
|
||||
check_and_send_page(pgnr, "Die Seite kann nicht gefunden werden.")
|
||||
else:
|
||||
# check if the next page exists, e.g. 2000a => 2000b
|
||||
curid = glob.curpage.get_page_id()
|
||||
if curid == -1:
|
||||
send_error("Keine n"+ cept.UMLAUT +"achste Seite gefunden.")
|
||||
elif str(curid[-1:]).isalpha():
|
||||
# aus 2000a 2000b machen:
|
||||
nextid = curid[:-1] + chr(ord(curid[-1:])+1)
|
||||
check_and_send_page(nextid, "Keine n" + cept.UMLAUT +"achste Seite gefunden.")
|
||||
|
||||
# special commands:
|
||||
if cmd == "!1" + cept.TER:
|
||||
send_welcome_page()
|
||||
return
|
||||
if cmd == "!2" + cept.TER:
|
||||
glob.ser.write(bytes(cept.init_screen, "latin-1"))
|
||||
maske = rtxMask.rtxMask()
|
||||
maske.addLine(3,1,10)
|
||||
maske.addLine(4,4,10)
|
||||
maske.process_input()
|
||||
return
|
||||
|
||||
# special commands:
|
||||
if cmd == "!1" + cept.TER:
|
||||
send_welcome_page()
|
||||
return
|
||||
if cmd == "!2" + cept.TER:
|
||||
glob.ser.write(bytes(cept.init_screen, "latin-1"))
|
||||
return
|
||||
|
||||
def goto_last_page():
|
||||
""" go back to the previous page and make the current page the previous page
|
||||
"""
|
||||
logging.info("Letzte Seite: %s", str(glob.prevpage.get_page_id()))
|
||||
""" go back to the previous page and make the current page the previous page
|
||||
"""
|
||||
logging.info("Letzte Seite: %s", str(glob.prevpage.get_page_id()))
|
||||
|
||||
# swap prevpage and curpage
|
||||
temp = glob.curpage
|
||||
glob.curpage = glob.prevpage
|
||||
glob.prevpage = temp
|
||||
# swap prevpage and curpage
|
||||
temp = glob.curpage
|
||||
glob.curpage = glob.prevpage
|
||||
glob.prevpage = temp
|
||||
|
||||
# send the previous page (now curpage) to the client
|
||||
send_page(glob.curpage)
|
||||
# send the previous page (now curpage) to the client
|
||||
send_page(glob.curpage)
|
||||
|
||||
def send_welcome_page():
|
||||
""" get the btxlogo, make a rtxPage of it and send it to the client """
|
||||
wpage = rtxPage()
|
||||
wpage.set_page(bytes(cept.btxlogo, "latin-1"))
|
||||
send_page(wpage)
|
||||
""" get the btxlogo, make a rtxPage of it and send it to the client """
|
||||
glob.curpage = rtxPage()
|
||||
glob.curpage.set_page(bytes(cept.btxlogo, "latin-1"))
|
||||
send_page(glob.curpage)
|
||||
|
||||
def check_and_send_page(pgnr, errormsg):
|
||||
""" checks if the page "pgnr" exists
|
||||
if yes, it loads it into curpage and sends it to the client
|
||||
if not, it sends the error message "errormsg" to the client
|
||||
"""
|
||||
logging.info("suche Seite: >%s<", pgnr)
|
||||
""" checks if the page "pgnr" exists
|
||||
if yes, it loads it into curpage and sends it to the client
|
||||
if not, it sends the error message "errormsg" to the client
|
||||
"""
|
||||
logging.info("suche Seite: >%s<", pgnr)
|
||||
|
||||
if rtxPage.exists(pgnr):
|
||||
glob.prevpage = glob.curpage
|
||||
glob.curpage = rtxPage(pgnr)
|
||||
send_page(glob.curpage) # takes a rtxPage object!
|
||||
return True
|
||||
elif pgnr[-1:].isnumeric() and rtxPage.exists(pgnr + "a"):
|
||||
glob.prevpage = glob.curpage
|
||||
glob.curpage = rtxPage(pgnr + "a")
|
||||
send_page(glob.curpage) # takes a rtxPage object!
|
||||
return True
|
||||
else:
|
||||
send_error(errormsg)
|
||||
return False
|
||||
if rtxPage.exists(pgnr):
|
||||
glob.prevpage = glob.curpage
|
||||
glob.curpage = rtxPage(pgnr)
|
||||
send_page(glob.curpage) # takes a rtxPage object!
|
||||
return True
|
||||
elif pgnr[-1:].isnumeric() and rtxPage.exists(pgnr + "a"):
|
||||
glob.prevpage = glob.curpage
|
||||
glob.curpage = rtxPage(pgnr + "a")
|
||||
send_page(glob.curpage) # takes a rtxPage object!
|
||||
return True
|
||||
else:
|
||||
send_error(errormsg)
|
||||
return False
|
||||
|
||||
def send_error(msg):
|
||||
""" send an error message to the client """
|
||||
glob.ser.write(bytes(cept.error_prefix + msg + cept.error_suffix, "latin-1"))
|
||||
""" send an error message to the client """
|
||||
glob.ser.write(bytes(cept.error_prefix + msg + cept.error_suffix, "latin-1"))
|
||||
|
||||
def send_page(page):
|
||||
""" sends a page to the client """
|
||||
glob.ser.write(page.get_page())
|
||||
""" sends a page to the client """
|
||||
glob.ser.write(page.get_page())
|
||||
|
||||
|
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)
|
||||
|
||||
|
||||
|
81
rtxModem.py
81
rtxModem.py
@ -12,48 +12,51 @@ import config
|
||||
import logging
|
||||
|
||||
def init_modem():
|
||||
""" send the modem init strings to the modem """
|
||||
logging.debug("init_modem")
|
||||
if config.MODEM_INIT1 != "":
|
||||
logging.debug("sending MODEM_INIT1")
|
||||
glob.ser.write(bytes(config.MODEM_INIT1 + "\r", "latin-1"))
|
||||
rc = _serial_readline()
|
||||
logging.info("MODEM_INIT1: %s", rc)
|
||||
rc = _serial_readline()
|
||||
logging.info("MODEM_INIT1: %s", rc)
|
||||
logging.debug("clearing input/output buffers")
|
||||
glob.ser.reset_input_buffer()
|
||||
glob.ser.reset_output_buffer()
|
||||
""" send the modem init strings to the modem """
|
||||
logging.debug("init_modem")
|
||||
if config.MODEM_INIT1 != "":
|
||||
logging.debug("sending MODEM_INIT1")
|
||||
glob.ser.write(bytes(config.MODEM_INIT1 + "\r", "latin-1"))
|
||||
rc = _serial_readline()
|
||||
logging.info("MODEM_INIT1: %s", rc)
|
||||
rc = _serial_readline()
|
||||
logging.info("MODEM_INIT1: %s", rc)
|
||||
|
||||
if config.MODEM_INIT2 != "":
|
||||
logging.debug("sending MODEM_INIT2")
|
||||
glob.ser.write(bytes(config.MODEM_INIT2 + "\r", "latin-1"))
|
||||
rc = _serial_readline()
|
||||
logging.info("MODEM_INIT2: %s", rc)
|
||||
rc = _serial_readline()
|
||||
logging.info("MODEM_INIT2: %s", rc)
|
||||
if config.MODEM_INIT2 != "":
|
||||
logging.debug("sending MODEM_INIT2")
|
||||
glob.ser.write(bytes(config.MODEM_INIT2 + "\r", "latin-1"))
|
||||
rc = _serial_readline()
|
||||
logging.info("MODEM_INIT2: %s", rc)
|
||||
rc = _serial_readline()
|
||||
logging.info("MODEM_INIT2: %s", rc)
|
||||
|
||||
def wait_for_caller():
|
||||
""" waits for the RING of the modem and answers it """
|
||||
modem_answered = False
|
||||
logging.debug("wait_for_caller")
|
||||
while not modem_answered:
|
||||
rc = _serial_readline()
|
||||
if rc.startswith(config.MODEM_RING):
|
||||
logging.info("modem ringing! Answering.")
|
||||
glob.ser.write(bytes(config.MODEM_ANSWER + "\r", "latin-1"))
|
||||
rc = _serial_readline()
|
||||
logging.info("Answer: %s", rc)
|
||||
rc = _serial_readline()
|
||||
logging.info("Answer: %s", rc)
|
||||
modem_answered=True
|
||||
else:
|
||||
modem_answered=False
|
||||
""" waits for the RING of the modem and answers it """
|
||||
modem_answered = False
|
||||
logging.debug("wait_for_caller")
|
||||
while not modem_answered:
|
||||
rc = _serial_readline()
|
||||
if rc.startswith(config.MODEM_RING):
|
||||
logging.info("modem ringing! Answering.")
|
||||
glob.ser.write(bytes(config.MODEM_ANSWER + "\r", "latin-1"))
|
||||
rc = _serial_readline()
|
||||
logging.info("Answer: %s", rc)
|
||||
rc = _serial_readline()
|
||||
logging.info("Answer: %s", rc)
|
||||
modem_answered=True
|
||||
else:
|
||||
modem_answered=False
|
||||
|
||||
def _serial_readline():
|
||||
line = ""
|
||||
in_byte = ""
|
||||
|
||||
while not in_byte == b"\n":
|
||||
in_byte = glob.ser.read(1)
|
||||
#print(in_byte)
|
||||
line += str(in_byte, encoding="latin-1")
|
||||
line = ""
|
||||
in_byte = ""
|
||||
|
||||
while not in_byte == b"\n":
|
||||
in_byte = glob.ser.read(1)
|
||||
#print(in_byte)
|
||||
line += str(in_byte, encoding="latin-1")
|
||||
|
||||
return line
|
||||
return line
|
||||
|
171
rtxPage.py
171
rtxPage.py
@ -12,103 +12,100 @@ import config
|
||||
import logging
|
||||
|
||||
class rtxPage:
|
||||
""" Klasse zur Benutzung einer CEPT-Seite
|
||||
"""
|
||||
""" Klasse zur Benutzung einer CEPT-Seite
|
||||
"""
|
||||
|
||||
die_seite = ""
|
||||
seiten_nummer = -1
|
||||
link_liste = {}
|
||||
die_seite = ""
|
||||
seiten_nummer = -1
|
||||
link_liste = {}
|
||||
|
||||
def __init__(self, page = None):
|
||||
""" create a new page object for the page 'page'
|
||||
returns False if the page cannot be found
|
||||
returns True if the page has been loaded
|
||||
"""
|
||||
if page == None:
|
||||
return
|
||||
else:
|
||||
self.die_seite = ""
|
||||
self.seiten_nummer = -1
|
||||
self.link_liste = {}
|
||||
self._load_page(page)
|
||||
def __init__(self, page = None):
|
||||
""" create a new page object for the page 'page'
|
||||
returns False if the page cannot be found
|
||||
returns True if the page has been loaded
|
||||
"""
|
||||
if page == None:
|
||||
return
|
||||
else:
|
||||
self.die_seite = ""
|
||||
self.seiten_nummer = -1
|
||||
self.link_liste = {}
|
||||
self._load_page(page)
|
||||
|
||||
@staticmethod
|
||||
def exists(page):
|
||||
""" checks if the page (i.e. the file) exists """
|
||||
if os.path.isfile(config.PAGES + page):
|
||||
return True
|
||||
elif os.path.isfile(config.DEMOPAGES + page):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
@staticmethod
|
||||
def exists(page):
|
||||
""" checks if the page (i.e. the file) exists """
|
||||
for path in config.PAGES:
|
||||
if os.path.isfile(path + page):
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_page(self):
|
||||
""" returns the page if loaded
|
||||
returns False if no page has been loaded
|
||||
"""
|
||||
if self.die_seite != "":
|
||||
return self.die_seite
|
||||
else:
|
||||
return False
|
||||
def get_page(self):
|
||||
""" returns the page if loaded
|
||||
returns False if no page has been loaded
|
||||
"""
|
||||
if self.die_seite != "":
|
||||
return self.die_seite
|
||||
else:
|
||||
return False
|
||||
|
||||
def set_page(self,pagedata):
|
||||
""" write the pagedata as the new page and (probably) the link list """
|
||||
self.die_seite = pagedata
|
||||
self.link_liste = self._get_link_list()
|
||||
def set_page(self,pagedata):
|
||||
""" write the pagedata as the new page and (probably) the link list """
|
||||
self.die_seite = pagedata
|
||||
self.link_liste = self._get_link_list()
|
||||
|
||||
def get_links(self):
|
||||
""" returns the list of links found in this page """
|
||||
return self.link_liste
|
||||
def get_links(self):
|
||||
""" returns the list of links found in this page """
|
||||
return self.link_liste
|
||||
|
||||
def get_link(self, link):
|
||||
""" returns the target for a given link
|
||||
returns False if this link does not exist
|
||||
"""
|
||||
if link in self.link_liste:
|
||||
return self.link_liste[link]
|
||||
else:
|
||||
return False
|
||||
def get_link(self, link):
|
||||
""" returns the target for a given link
|
||||
returns False if this link does not exist
|
||||
"""
|
||||
if link in self.link_liste:
|
||||
return self.link_liste[link]
|
||||
else:
|
||||
return False
|
||||
|
||||
def get_page_id(self):
|
||||
""" returns the id of the current page """
|
||||
return self.seiten_nummer
|
||||
def get_page_id(self):
|
||||
""" returns the id of the current page """
|
||||
return self.seiten_nummer
|
||||
|
||||
def _load_page(self, page):
|
||||
""" Load a CEPT page from the file system
|
||||
returns False if the page cannot be found
|
||||
returns True if the page has been loaded
|
||||
"""
|
||||
if os.path.isfile(config.PAGES + page):
|
||||
filename = config.PAGES + page
|
||||
elif os.path.isfile(config.DEMOPAGES + page):
|
||||
filename = config.DEMOPAGES + page
|
||||
else:
|
||||
return False
|
||||
|
||||
with open(filename, "rb") as f:
|
||||
self.die_seite = f.read()
|
||||
self.seiten_nummer = page
|
||||
link_liste = self._get_link_list()
|
||||
return True
|
||||
def _load_page(self, page):
|
||||
""" Load a CEPT page from the file system
|
||||
returns False if the page cannot be found
|
||||
returns True if the page has been loaded
|
||||
"""
|
||||
for path in config.PAGES:
|
||||
if os.path.isfile(path + page):
|
||||
filename = path + page
|
||||
""" page has been found, now exit the for loop """
|
||||
break
|
||||
else:
|
||||
""" page does not exist anywhere, so exit the function """
|
||||
return False
|
||||
|
||||
with open(filename, "rb") as f:
|
||||
self.die_seite = f.read()
|
||||
self.seiten_nummer = page
|
||||
self.link_liste = self._get_link_list()
|
||||
return True
|
||||
|
||||
def _get_link_list(self):
|
||||
""" private function which parses the CEPT page and extracts the link list
|
||||
returns True if links have been found
|
||||
returns False if no links have been found
|
||||
"""
|
||||
links = []
|
||||
links = re.findall("\x1f\x3d([^\x1f\x9b\x1b]+)", str(self.die_seite, "latin-1"))
|
||||
def _get_link_list(self):
|
||||
""" private function which parses the CEPT page and extracts the link list
|
||||
returns True if links have been found
|
||||
returns False if no links have been found
|
||||
"""
|
||||
links = []
|
||||
links = re.findall("\x1f\x3d([^\x1f\x9b\x1b]+)", str(self.die_seite, "latin-1"))
|
||||
liste = {}
|
||||
|
||||
for item in links:
|
||||
if item[0] != "0":
|
||||
link = item[1:3].strip()
|
||||
target = item[3:].strip()
|
||||
self.link_liste[link] = target
|
||||
for item in links:
|
||||
if item[0] != "0":
|
||||
link = item[1:3].strip()
|
||||
target = item[3:].strip()
|
||||
liste[link] = target
|
||||
|
||||
logging.info(self.link_liste)
|
||||
|
||||
if self.link_liste == {}:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
logging.info(liste)
|
||||
|
||||
return liste
|
||||
|
Loading…
Reference in New Issue
Block a user