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.

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  

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.

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

Beispiel Z9001

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

Zum Auslesen dient ein kleines Perl-Programm terminal_info.pl.