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.