###   Projekte und Informationen rund um den KC85   ### 

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.