;*************************************************************************
;*
;* Dieses Programm ist Public Domain und wurde mit dem Profimat-Assembler
;* von Data Becker erstellt. Das Kopieren für den privaten
;* Gebrauch ist erlaubt. Sollen das Programm oder Teile daraus für
;* kommerzielle Zwecke verwendet werden, bitte ich darum, sich mit
;* mir in Verbindung zu setzen.
;*
;* © 1988 Richard Englert, Flößaustraße 160, 8510 Fürth, Tel.:0911/708255
;*
;* letzte Änderung: 23-05-1988
;*
;* Diese Programm lädt und startet einen CLI-Befehl von der Workbench.
;* Es wird in CLI4WB eingebunden und damit nach den Wünschen des
;* Benutzers angepaßt.
;* Deshalb muß es vor dem Assemblieren von CLI4WB.ASM bereits assembliert
;* unter dem Namen WBStart in der RAM-Disk liegen. Damit man später
;* die CLI-Programme auch von der WB aus starten kann ist natürlich ein
;* Icon nötig. Dieses Icon muß unter dem Namen WBStart.info ebenfalls
;* vor dem Assemblieren von CLI4WB in der RAM-Disk liegeb.
;*
;* Achtung: Dieses Programm hat erst Sinn, wenn es in CLI4WB integriert
;*          ist. CLI4WB verändert es dann entsprechend den Wünschen
;*          des Benutzers (gewünschter CLI-Befehl, Window, warten oder
;*          Argumente eingeben) und schreibt es dann zusammen mit dem
;*          Icon unter einem beliebigen Namen wieder auf Disk. Von dort
;*          wird es dann mit Doppelklick gestartet und lädt und startet
;*          selbst wieder das gewünschte Programm.
;*
;* Wichtig: Die Execute-Funktion der Dos Library benötigt den RUN-Befehl
;*          im C: Verzeichnis der Workbench-Disk, um eine neue Task
;*          zu starten. Deshalb überprüfen, ob sich RUN auch im C:-Ordner
;*          befindet, bevor ich verflucht werde, warum das Sch...-Pro-
;*          gramm nicht funktioniert.
;*
;*************************************************************************

 INCLUDE 'ram:Amiga.ASM'

_LVOOpenLibrary   EQU -$0228
_LVOCloseLibrary  EQU -$019e
_LVOExecute       EQU -$00de
_LVOOpen          EQU -$001e
_LVOClose         EQU -$0024
_LVOWaitForChar   EQU -$00cc
_LVORead          EQU -$002a

OLD_OPEN    EQU 1005

;*************************************************************************
;Hauptprogramm:
;*************************************************************************

 INIT_AMIGA

;Dos-Library öffnen:

 LEA DosName,A1
 MOVEQ #0,D0
 CALLSYS OpenLibrary
 MOVE.L D0,DosBase
 BEQ EXIT1

 TST wndo                    ;soll Window geöffnet werden?
 BNE IOWindow

 MOVE.L #DummyWnd,D1         ;nein, dann wird ein kleines
 MOVE.L #OLD_OPEN,D2         ;Window für den Fall, daß das
 LINKSYS Open,DosBase        ;aufzurufende Programm Ausgaben
 MOVE.L D0,WHandle           ;macht, geöffnet
 BEQ EXIT1
 BRA ArgTest

IOWindow:
 MOVE.L #CmdString,D1        ;Ausgabewindow für aufzurufendes
 MOVE.L #OLD_OPEN,D2         ;Programm öffnen
 LINKSYS Open,DosBase
 MOVE.L D0,WHandle
 BEQ EXIT

ArgTest:
 TST ArgIn                   ;dürfen Argumente eingegeben werden?
 BEQ Ausführen               ;nein, dann gleich Befehl starten
 MOVE.L #ArgInWnd,D1
 MOVE.L #OLD_OPEN,D2         ;Fenster für Argumenteneingabe
 LINKSYS Open,DosBase        ;öffnen
 MOVE.L D0,ArgHandle
 BEQ EXIT1

 MOVE.L #Command,A1          ;Befehlsende im Kommandopuffer
 CLR.L D0                    ;suchen:
 MOVE.B #10,D1

SuchSchleife:
 CMP.B (A1,D0),D1            ;nach CR suchen
 BEQ ExLoop
 ADD #1,D0
 BRA SuchSchleife

ExLoop:
 ADD.L D0,A1
 MOVE.L #255,D3
 SUB.L D0,D3

 MOVE.L A1,D2                ;Argumente eingeben
 MOVE.L ArgHandle,D1         ;und an Befehlsende anhängen
 LINKSYS Read,DosBase
 CMP.W #1,D0
 BEQ ExArg

 BSR ArgClose
 BRA Ausführen

ExArg:
 BSR ArgClose
 BRA EXIT

ArgClose:
 MOVE.L ArgHandle,D1         ;Window zur Argumenteneingabe
 LINKSYS Close,DosBase       ;schließen
 RTS

Ausführen:
 MOVE.L #Command,D1          ;CLI-Befehl mit EXECUTE-Funktion
 CLR.L D2
 MOVE.L WHandle,D3
 LINKSYS Execute,DosBase     ;ausführen

NEIN:
 TST waitflag                ;nach Ausführung warten?
 BEQ EXIT                    ;nein dann evtl. Window schließen

Warten:
 MOVE.L WHandle,D1           ;warten auf Tastendruck
 MOVE.L #$ffffffff,D2
 LINKSYS WaitForChar,DosBase

 MOVE #119,D0                ;RETURN gedrückt?
 CMP.B $BFEC01,D0
 BNE Warten                  ;nein, dann weiter warten

EXIT:
 MOVE.L WHandle,D1           ;Fenster
 LINKSYS Close,DosBase       ;schließen

EXIT1:

;Library schließen:

 MOVE.L DosBase,D0
 BEQ.S No_Dos
 MOVE.L D0,A1
 CALLSYS CloseLibrary
No_Dos:
 EXIT_AMIGA

 DATA
DosName:       DC.B 'dos.library',0
 ALIGN
CmdString: DC.B 'con:0/0/600/100/CLI4WB © 1988 R.Englert',0
 ALIGN
ArgInWnd:  DC.B 'con:40/50/500/21/CLI4WB Eingabe der Argumente',0
 ALIGN
DummyWnd:  DC.B 'con:0/20/320/50/CLI4WB',0
 ALIGN
wndo:          DS.W 1
waitflag:      DS.W 1
ArgIn:         DS.W 1
Command:       DS.B 256

 ALIGN
 BSS
DosBase:       DS.L 1
WHandle:       DS.L 1
ArgHandle:     DS.L 1

 END

