TINST.COM
Im Anfangsbereich eines jeden Turbo-Pascal-(2.xx,3.xx)-Programms und auch von Turbo selbst liegen die Terminal-Steuercodes.
Initial werden diese Steuercodes mit TINST.COM eingerichtet. TINST installiert außerdem die Taktfrequenz sowie Editorkommandos. TINST ist übrigens selbst in Turbo Pascal geschrieben. Das Programm patcht aber nur das Programm TURBO.COM, keine eigenen. Zum Anpassen fremder kompilierter Pascal-Programme muss deshalb das Programm zunächst in TURBO.COM umbenannt werden, ehe mit TINST die Terminaleinstellungen geändert werden können.
Downloads
- Perl-Programm terminal_info.pl zum Auslesen der Terminal-Infos aus TURBO.COM oder aus compilierten Programmen.
- Perl-Programm terminal_info2.pl zeigt zusätzlich die Turbo-Version und die eingerichteten Editor-Kommandos an
- tpterm.pas/tpterm.com kopiert die aktuellen Terminal-Einstellungen aus TURBO.COM in ein vorhandenes compiliertes Programm. Damit können Programme ohne Quellcode ans eigene System angepasst werden: „tpterm datei.com“ patcht datei.com.
Terminal-Steuercodes
Wenn man TINST nicht zur Hand hat, kann man auch selbst patchen. Der Installationsbereich der Terminal-Steuercodes ist 125 Byte lang und geht bei Turbo 2.xx bzw. 3.xx von 0153h-01EFh. Im Folgenden wird dieser Bereich erläutert. Zum Auslesen der Daten aus vorhandenen kompilierten Programmen habe ich ein kurzes Perl-Programm geschrieben (s.u.).
Die Strings sind wie in Pascal üblich längendefiniert (1. Byte = Länge). Länge 00 kennzeichnet einen leeren String.
0124 AFrequency: DEFW 4 ;Operating frequency of CPU (1-12 MHz) ;Screen-Installationsbereich ;---------------------------- ;Terminal >> 0153 TermTypStr: DEFB 20,'No Terminal selected' 0168 Width: DEFB 80 ;Bildschirmbreite (1-256) 0169 Height: DEFB 24 ;Bildschirmhoehe (1-256) 016A DEFB 0 ;wozu das? 016B InitialStr: DEFS 16 017B ResetStr: DEFS 16 ;Cursor >> 018B CursorStr: DEFS 16 ;Muster fuer Cursor-Positionierung 019B BinaryAddr: DEFB 0 ;0=ASCII, 1=Binary address 019C ColumnOff: DEFB 0 019D LineOff: DEFB 0 019E XPosition: DEFB 0 ;Pos. in Muster 019F YPosition: DEFB 0 ; " 01A0 DelayCursor: DEFW 0 ;Delay after cursor address (0-255 ms) ;Line >> 01A2 ClearScrStr: DEFS 6 ;Clear screen 01A8 HomeStr: DEFS 6 ;Home cursor (Dieser String ist leer, ;wenn Clear screen schon Home macht) 01AE InsLineStr: DEFS 6 ;Insert line 01B4 DelLineStr: DEFS 6 ;Delete line 01BA DelayLine: DEFW 0 ;Delay after Clear, Delete and Insert (0-255 ms) ;Highlight >> 01BC EraToEolStr: DEFS 6 ;Erase to end of line 01C2 HLStartStr: DEFS 6 ;Start highlighting 01C8 HLEndStr: DEFS 6 ;End highlighting 01CE DelayHL: DEFW 0 ;Delay after EraToEol and HighLight 01D0
Erläuterungen
Auszug aus dem Handbuch:
L.2.1 Terminaltyp
Geben Sie den Namen des Terminals ein, das Sie installieren wollen. Wenn Sie TINST beenden, werden die Werte gespeichert und der Terminalname erscheint auf der Liste der Terminals. Falls Sie später TURBO Pascal nochmals für das Terminal installieren müssen, können Sie es auf der Liste anwählen.
L.2.2 Soll ein Initialisierungsstring an das Terminal geschickt werden?
Wenn Sie Ihr Terminal initialisieren wollen, wenn Turbo startet (z.B. um Befehle auf Funktionstasten zu programmieren), antworten Sie Y auf diese Frage. Wenn nicht, drücken Sie RETURN.
L.2.3 Soll ein Resetstring an das Terminal geschickt werden?
Hier können Sie einen String definieren, der bei Beendigung von TURBO Pascal an das Terminal geschickt wird. Die obige Beschreibung des Initialisierungsbefehls gilt hier ebenfalls.
L.2.4 CURSOR LEAD-IN Befehl
Cursor Lead-in ist eine spezielle Sequenz von Zeichen, die Ihrem Terminal mitteilt, daß die folgenden Zeichen eine Adresse auf dem Bildschirm sind, auf die der Cursor plaziert werden soll. Wenn Sie diesen Befehl definieren, werden Ihnen die folgenden zusätzlichen Fragen gestellt:
L.2.4.1 Soll der CURSOR POSITIONING Befehl zwischen Zeiten- und Spaltenadresse geschickt werden?
Bei einigen Terminals muß der Befehl zwischen den zwei Zahlen, die die Reihen- und Spaltencursoradresse definieren, stehen.
L2.4.2 Soll der CURSOR POSITIONING Befehl nach der Zeile und Spalte geschickt werden ?
Bei einigen Terminals muß der Befehl nach der Definition der Zeilen- und Spaltenadresse des Cursor stehen.
L.2.4.3 Spalte zuerst?
Bei den meisten Terminals muß die Adresse in folgendem Format stehen: zuerst REIHE, dann SPALTE. Wenn dies bei Ihrem Terminal so ist, antworten Sie mit N. Wenn Ihr Terminal zuerst die SPALTE benötigt und darin die REIHE, antworten Sie Y.
L.2.4.4 Offset der ersten Zeilennummer
Geben Sie die Zahl ein, die zur Zeilenadresse addiert werden soll.
L.2.4.5 Offset der ersten Spalte
Geben Sie sie Zahl ein, die zur Spaltenadresse addiert werden soll.
L.2.4.6 Binäre Adresse?
Den meisten Terminals muß die Cursoradresse in binärer Form geschickt werden. Falls das auch für Ihr Terminal gilt, geben Sie Y ein. Wenn Ihr Terminal die Cursoradresse in ASCII Ziffern erwartet, geben Sie N ein. Sie werden dann zusätzlich gefragt:
L.2.4.6.1 2 oder 3 ASCII Ziffern?
Geben Sie die Anzahl von ASCII-Ziffern in der Cursoradresse Ihres Terminals an.
L.2.5 CLEAR SCREEN Befehl
Geben Sie den Befehl ein, der den gesamten Bildschirminhalt löscht (wenn nötig sowohl für den Vorder-, als auch für den Hintergrund).
L.2.6 Führt CLEAR SCREEN auch den Cursor in HOME Position?
Dies ist normalerweise der Fall; wenn dies für Ihr Terminal nicht zutrifft, geben Sie N ein und definieren den Cursor HOME Befehl.
L.2.7 DELETE LINE Befehl
Geben Sie den Befehl ein, der die Cursor-Zeile ganz löscht.
L.2.8 INSERT LINE Befehl
Geben Sie den Befehl ein, der an der Cursorposition eine ganze Zeile einfügt.
L.2.9 ERASE TO END OF LINE Befehl
Geben Sie den Befehl ein, der die Zeile von der Cursorposition bis zum rechten Zeilenende löscht.
L.2.10 START OF 'LOW VIDEO' Befehl
Wenn Ihr Terminal über verschiedene Bildintensitäten verfügt, dann geben Sie hier den Befehl ein, der den Bildschirm abdunkelt. Wenn dieser Befehl definiert ist, wird die folgende Frage gestellt:
L.2.10.1 START OF 'NORMAL VIDEO' Befehl
Definieren Sie den Befehl, der den Bildschirm auf Normalbild setzt.
L.2.11 Zahl der Zeilen auf Ihrem Bildschirm
Geben Sie die Zahl der horizontalen Zeilen Ihres Terminals an.
L.2.12 Zahl der Spalten auf Ihrem Bildschirm
Geben Sie die Zahl der vertikalen Spaltenpositionen an.
L.2.13 Verzögerung nach CURSOR ADDRESS (0-255ms):
Verzögerung nach CLEAR, DELETE und INSERT (0-255ms):
Verzögerung nach ERASE TO END OF LINE und HIGHLIGHT On/Off (o255 ms)
Geben Sie die gewünschte Verzögerung in Millisekunden für die angegebenen Funktionen ein. <RETURN> bedeutet Null (keine Verzögerung).
L.2.15 Arbeitsfrequenz Ihres Mikroprozessors in MHz (für Verzögerungen)
Da die weiter oben angegebenen Verzögerungen von der Arbeitsfrequenz Ihrer CPU abhängen, müssen Sie diesen Wert definieren. Die Installation ist beendet, die Installationsdaten werden auf die Diskette geschrieben und Sie kehren in das höhere Menü zurück (siehe Abschnitt 1.6). Die Installationsdaten sind auch in der Installationsdatendatei gespeichert. Das neue Terminal erscheint in der Terminalwahlliste bei zukünftigen TINST-Läufen.
Beispiele
0153 | TermTypStr: | 13,ADDS 20/25/30 | 4,ANSI (=DEC Rainbow, 8 bit) | 18,Kaypro with hilite | 19,Wyse WY-100/200/300 | 16,PC 1715 IWF/Jahn |
---|---|---|---|---|---|---|
0168 | Width: | 80 | 80 | 80 | 80 | 80 |
0169 | Height: | 24 | 24 | 24 | 24 | 24 |
016A | ???: | 0 | 0 | 0 | 0 | 0 |
016B | InitialStr: | 03,1B,'0','P' | 00 | 00 | 00 | 00 |
017B | ResetStr: | 00 | 00 | 00 | 00 | 00 |
018B | CursorStr: | 04,1B,'Y',00,00 | 08,1B,'[','0','0',';','0','0','H' | 04,1B,'=',00,00 | 04,1B,'=',00,00 | 03,1B,00,00 |
019B | BinaryAddr: | 1 | 0 | 1 | 1 | 1 |
019C | ColumnOff: | 32 | 1 | 32 | 32 | 128 |
019D | LineOff: | 32 | 1 | 32 | 32 | 128 |
019E | XPosition: | 3 | 7 | 4 | 4 | 3 |
019F | YPosition: | 4 | 4 | 3 | 3 | 2 |
01A0 | DelayCursor: | 0 | 0 | 0 | 0 | 0 |
01A2 | ClearScrStr: | 01,0C | 04,1B,'[','2','J' | 01,1A | 02,1B,'*' | 01,0C |
01A8 | HomeStr: | 00 | 03,1B,'[','f' | 00 | 00 | 00 |
01AE | InsLineStr: | 00 | 04,1B,'[','1','L' | 04,0D,1B,'E',0D | 02,1B,'E' | 00 |
01B4 | DelLineStr: | 00 | 04,1B,'[','1','M' | 02,1B,'R' | 02,1B,'R' | 00 |
01BA | DelayLine: | 0 | 0 | 0 | 0 | 0 |
01BC | EraToEolStr: | 02,1B,'K' | 03,1B,'[','K' | 01,18 | 02,1B,'T' | 01,16 |
01C2 | HLStartStr: | 00 | 04,1B,'[','1','m' | 03,1B,'C','1' | 02,1B,')' | 00 |
01C8 | HLEndStr: | 00 | 04,1B,'[','0','m' | 03,1B,'B','1' | 02,1B,'(' | 00 |
01CE | DelayHL: | 0 | 0 | 0 | 0 | 0 |
Beispiel PC 1715
0153 TermTypStr: 16,PC 1715 IWF/Jahn 0168 Width: 80 0169 Height: 24 016A ???: 0 016B InitialStr: 00 017B ResetStr: 00 018B CursorStr: 03,1B,00,00 <- 3 Zeichen: ESC,128+Y,128+X 019B BinaryAddr: 1 <- X und Y werden binär angegeben 019C ColumnOff: 128 <- die 128 ist zu X zu addieren 019D LineOff: 128 <- die 128 ist zu Y zu addieren 019E XPosition: 3 <- Position des X-Werts im CursorStr 019F YPosition: 2 <- Position des Y-Werts im CursorStr 01A0 DelayCursor: 0 01A2 ClearScrStr: 01,0C <- 1 Zeichen: ^L 01A8 HomeStr: 00 01AE InsLineStr: 00 01B4 DelLineStr: 00 01BA DelayLine: 0 01BC EraToEolStr: 01,16 <- 1 Zeichen: ^V 01C2 HLStartStr: 00 01C8 HLEndStr: 00 01CE DelayHL: 0
Beispiele Pascal880s
125 0153 TermTypStr: 15,PC 1715 / 1715W 0168 Width: 80 0169 Height: 24 016A ???: 0 016B InitialStr: 03,1B,'^','P' 017B ResetStr: 03,1B,'^','@' 018B CursorStr: 03,1B,00,00 019B BinaryAddr: 1 019C ColumnOff: 128 019D LineOff: 128 019E XPosition: 3 019F YPosition: 2 01A0 DelayCursor: 0 01A2 ClearScrStr: 01,0C 01A8 HomeStr: 00 01AE InsLineStr: 00 01B4 DelLineStr: 00 01BA DelayLine: 0 01BC EraToEolStr: 01,16 01C2 HLStartStr: 00 01C8 HLEndStr: 00 01CE DelayHL: 0
Beispiel KC85/4
125 0153 TermTypStr: 20,KC85+D004/KC compact 0168 Width: 80 0169 Height: 24 016A ???: 0 016B InitialStr: 01,85 017B ResetStr: 01,84 018B CursorStr: 03,1B,00,00 019B BinaryAddr: 1 019C ColumnOff: 128 019D LineOff: 128 019E XPosition: 3 019F YPosition: 2 01A0 DelayCursor: 0 01A2 ClearScrStr: 01,0C 01A8 HomeStr: 00 01AE InsLineStr: 00 01B4 DelLineStr: 00 01BA DelayLine: 0 01BC EraToEolStr: 01,16 01C2 HLStartStr: 00 01C8 HLEndStr: 00 01CE DelayHL: 0
ausgelesen mit terminal_info.pl (s. Downloads).
Beispiel Z9001
Turbo 3 Turbo 3.00 Terminal Configuration 125 0153 TermTypStr: 11,Z9001-Color 0168 Width: 40 0169 Height: 24 016A ???: 0 016B InitialStr: 00 017B ResetStr: 00 018B CursorStr: 03,1B,00,00 019B BinaryAddr: 1 019C ColumnOff: 128 019D LineOff: 128 019E XPosition: 3 019F YPosition: 2 01A0 DelayCursor: 0 01A2 ClearScrStr: 01,0C 01A8 HomeStr: 00 01AE InsLineStr: 00 01B4 DelLineStr: 00 01BA DelayLine: 0 01BC EraToEolStr: 00 01C2 HLStartStr: 02,14,'3' 01C8 HLEndStr: 02,14,'2' 01CE DelayHL: 0 Editor Configuration addr nr command keys hex keys ctrl default keys CURSOR MOVEMENTS: 42A1 0 new line 01,0D 01,^M 01,^M 42A3 1 Character left 01,08 01,^H 01,^S 42A5 2 Alternative 01,13 01,^S 01,^H 42A7 3 Character right 01,09 01,^I 01,^D 42A9 4 Word left 01,01 01,^A 01,^A 42AB 5 Word right 01,06 01,^F 01,^F 42AD 6 Line up 01,0B 01,^K 01,^E 42AF 7 Line down 01,0A 01,^J 01,^X 42B1 8 Scroll down 01,17 01,^W 01,^W 42B3 9 Scroll up 02,11,'z' 02,^Q,'z' 01,^Z 42B6 10 Page up 01,12 01,^R 01,^R 42B8 11 Page down 01,03 01,^C 01,^C 42BA 12 To left on line 01,19 01,^Y 02,^Q,^S 42BC 13 To right on line 01,18 01,^X 02,^Q,^D 42BE 14 To top of page 02,11,'e' 02,^Q,'e' 02,^Q,^E 42C1 15 To bottom of page 02,11,'x' 02,^Q,'x' 02,^Q,^X 42C4 16 To top of file 02,11,'r' 02,^Q,'r' 02,^Q,^R 42C7 17 To end of file 02,11,'c' 02,^Q,'c' 02,^Q,^C 42CA 18 To begining of block 02,11,'b' 02,^Q,'b' 02,^Q,^B 42CD 19 To end of block 02,11,'k' 02,^Q,'k' 02,^Q,^K 42D0 20 To last cursor position 02,11,'p' 02,^Q,'p' 02,^Q,^P INSERT & DELETE: 42D3 21 Insert mode on/off 01,1A 01,^Z 01,^V 42D5 22 Insert line 01,0E 01,^N 01,^N 42D7 23 Delete line 01,02 01,^B 01,^Y 42D9 24 Delete to end of line 02,11,'y' 02,^Q,'y' 02,^Q,^Y 42DC 25 Delete right word 01,14 01,^T 01,^T 42DE 26 Delete character under cursor 01,07 01,^G 01,^G 42E0 27 Delete left character 01,7F 01,7F 01,7F 42E2 28 Alternative 01,FF 01,FF 01,FF BLOCK COMMANDS: 42E4 29 Mark block begin 02,05,'b' 02,^E,'b' 02,^K,^B 42E7 30 Mark block end 02,05,'k' 02,^E,'k' 02,^K,^K 42EA 31 Mark single word 02,05,'t' 02,^E,'t' 02,^K,^T 42ED 32 Hide/display block 02,05,'h' 02,^E,'h' 02,^K,^H 42F0 33 Copy block 02,05,'c' 02,^E,'c' 02,^K,^C 42F3 34 Move block 02,05,'v' 02,^E,'v' 02,^K,^V 42F6 35 Delete block 02,05,'y' 02,^E,'y' 02,^K,^Y 42F9 36 Read block from disk 02,05,'r' 02,^E,'r' 02,^K,^R 42FC 37 Write block to disk 02,05,'w' 02,^E,'w' 02,^K,^W MISC. EDITING COMMANDS: 42FF 38 End edit 02,05,'d' 02,^E,'d' 02,^K,^D 4302 39 Tab 01,1D 01,^] 01,^I 4304 40 Auto tab on/off 02,11,'i' 02,^Q,'i' 02,^Q,^I 4307 41 Restore line 02,11,'l' 02,^Q,'l' 02,^Q,^L 430A 42 Find 02,11,'f' 02,^Q,'f' 02,^Q,^F 430D 43 Find & replace 02,11,'a' 02,^Q,'a' 02,^Q,^A 4310 44 Repeat last find 01,0C 01,^L 01,^L 4312 45 Control character prefix 01,10 01,^P 01,^P
ausgelesden mit terminfo2.pl
Historie
*2024* die Version terminal_info2.pl erkennt die Turbo-Pascal-Version, mit der compiliert wurde. Beim Programm turbo.com werden außerdem die aktuell eingerichteten Editierkommandos angezeigt.