Kommandodateien unter CAOS

von Frank Dachselt

Kommandodateien bieten eine bequeme Möglichkeit, sich häufig wiederholende Kommandofolgen insbesondere auf Betriebssystemebene zu automatisieren, sparen somit Zeit und Tipparbeit und verringern die Fehlerrate. Unter MicroDOS sind sie als SUB-Dateien bekannt, die mit den Kommandos "<" oder "SUBMIT" gestartet werden. Auch CAOS bietet einige rudimentäre Voraussetzungen für diesen Zweck und viele KC-User nutzen diese Möglichkeiten, indem sie Funktionstasten belegen oder die Datei INITIAL.UUU auf einer CAOS-Diskette anlegen.

Ein paar Informationen zur Arbeit mit Kommandofolgen unter CAOS waren bereits in den KC-News 1/93 zu lesen. Zur Erinnerung hier noch einmal das Wesentliche:

In CAOS ist es möglich, Kommandofolgen beliebiger Länge, die sich an einer beliebigen Stelle im Speicher befinden, auszuführen. Eine solche Datei verhält sich wie die Kommandofolge einer Funktionstaste und wird vom Betriebssystem in gleicher Weise behandelt. Das folgende Programmstück löst die Abarbeitung von Kommandos aus, die ab Adresse xxxxh im Speicher stehen:

LD HL,xxxxH
LD (0B7D1H),HL
SET 6,(IX+8)

Danach kann mit dem RET-Befehl oder einem direkten Sprung über Unterprogramm 12h in die Kommandoebene von CAOS übergegangen werden. Das Ende einer Kommandofolge im Speicher wird mit dem Code 00h gekennzeichnet. Mittels BREAK-Taste kann die Abarbeitung vorzeitig abgebrochen und in den Tastatureingabemodus übergegangen werden. Sollen Programme auf diese Weise bedient werden, so sind die entsprechenden Eingaben über das Unterprogramm 04h zu realisieren. Die Unterprogramme 0Ch und 0Eh verlangen dagegen echte Tastatureingaben.

Diese Möglichkeit läßt sich nun überall dort sinnvoll nutzen, wo die Belegung einer Funktionstaste wegen der Begrenzung des Funktionstastenspeichers auf 156 Byte (B900 - B99B) nicht möglich ist oder wenn zusätzliche Flexibilität gefordert ist. In den nachfolgenden Beispielen kommt der Effekt der praktisch unbegrenzten Länge einer solchen Kommandofolge aus Platzgründen natürlich nicht zum Vorschein, vielmehr soll hier das prinzipielle Herangehen gezeigt werden.

Das erste Beispiel zeigt die Grundvariante einer solchen CAOS-Kommandodatei. Angenommen wird hier, daß die zwei jeweils 200h Byte langen Dateien FILE1.KCC und FILE2.KCC miteinander verkettet und als FILE3.KCC auf Diskette gespeichert werden sollen. Die Ausgangsdateien belegen dabei stets den Speicherbereich 6000h - 6200h. Vor den eigentlichen Kommandos wird zunächst der Bildschirm gelöscht, um Fehler durch den ursprünglichen Bildschirminhalt bei der Abarbeitung zu vermeiden. Das nachfolgende ENTER erzeugt einen CAOS-Prompt.

         ORG 200H
;
DEFW 7F7FH
DEFM 'COMBINE'
DEFB 1
;
START: LD HL,COMM
LD (0B7D1H),HL
SET 6,(IX+8)
RET
;
COMM: DEFB 12 ;CLS
DEFB 13 ;Enter
DEFM 'FLOAD'
DEFB 13
DEFM 'FILE1'
DEFB 13
DEFM 'FLOAD 200'
DEFB 13
DEFM 'FILE2'
DEFB 13
DEFM 'FSAVE 6000 6400'
DEFB 13
DEFM 'FILE3'
DEFB 13
NOP ;Ende der Kommandofolge

Im zweiten Beispiel ist die Grundvariante um eine Parameterübergabe erweitert worden. Die zwei Parameter bezeichnen dabei eine Ziffer im Dateinamen, wobei die Ziffern 0 bis 9 zulässig sind. Mit COMBINE 3 6 wird FILE3.KCC mit FILE6.KCC verkettet und als FILE3+6.KCC abgespeichert.

         ORG 200H
CAOS EQU 0F003H
BEEP EQU 7
CLS EQU 12
LF EQU 10
ET EQU 13
;
DEFW 7F7FH
DEFM 'COMBINE'
DEFB 1
;
PARAM: LD A,(0B781H)
CP 2
JR NC,P1
ERROR: CALL CAOS
DEFB 23H
DEFB BEEP
DEFM 'Parameter fehlerhaft!'
DEFB LF
DEFB ET
NOP
RET
P1: LD A,(0B782H)
AND 0FH
CP 9
JR NC,ERROR
ADD 30H
LD (N11),1
LD (N12),A
P2: LD A,(0B784H)
AND 0FH
CP 9
JR NC,ERROR
ADD 30H
LD (N21),A
LD (N22),A
;
START: LD HL,COMM
LD (0B7D1H),HL
SET 6,(IX+8)
RET
;
COMM: DEFB CLS
DEFB ET
DEFM 'FLOAD'
DEFB ET
DEFM 'FILE'
N11: DEFM '1'
DEFB ET
;
DEFM 'FLOAD 200'
DEFB ET
DEFM 'FILE'
N21: DEFM '2'
DEFB ET
;
DEFM 'FSAVE 6000 6400'
DEFB ET
DEFM 'FILE'
N12: DEFM '1+'
N22: DEFM '2'
DEFB ET
NOP

Die Möglichkeiten, Kommandofolgen unter CAOS zu benutzen, sind damit bei weitem noch nicht ausgeschöpft. Die gezeigten Beispiele sollen nur als Anregung dienen, wie die eine oder andere Aufgabe unter CAOS bequem und effektiv gelöst werden kann.