;Program.    BlueLoad
;Version.    1.0 7/10/1990
;Contents.   executes a string that`s adr is in ColdCapture,
;            Puts old ColdCapture back, Deallocates memory
;            Senseful only with BlueMenu.
;            Running it without BlueMenu launched will cause Guru !
;Author.     Volker Oth
;Address.    Kopernikusstr.1, 6453 Seligenstadt
;Date.       7/10/1990 (one day hack)
;Language.   Assembler
;Translator. Seka
;History     7/10/1990 [Volker Oth] first and only Version 1.0


Start:

;********************* CONSTANTS *************************
ExecBase     =  $04
ColdCapture  =  $2A
OpenLibrary  = -$0228
CloseLibrary = -$019E
FreeMem      = -$00D2
Open         = -$001E
Close        = -$0024
Write        = -$0030
Execute      = -$00DE

;********************* MAIN ******************************
JSR OpenDos
CMP.L #0,D0
BEQ End
MOVE.L D0,DosBase
JSR OpenWin
CMP.L #0,D0
BEQ CloseDos
MOVE.L D0,WinHandle
JSR WriteText
JSR ExecString
JSR CloseWin
JMP CloseDos

;********************* Open dos.library ******************
OpenDos:
MOVE.L ExecBase,A6
MOVE.L #DosName,A1
MOVE.L #0,D0
JSR OpenLibrary(A6)
RTS

;********************* Open CLI-Window *******************
OpenWin:
MOVE.L DosBase,A6
MOVE.L #Window,D1
MOVE.L #1006,D2
JSR Open(A6)
RTS

;********************* Write Text into CLI ***************
WriteText:
MOVE.L DosBase,A6
MOVE.L Winhandle,D1
MOVE.L #Text,D2
MOVE.L #TextEnd,D3
SUB.L D2,D3
JSR Write(A6)
RTS

;******************** Get String Address,Deallocate ******
;******************** Put Old to ColdCapture,Execute *****
ExecString:
MOVE.L ExecBase,A6
MOVE.L ColdCapture(A6),A3 ; A3 at Ptr in ColdCapture
LEA ColdCapture(A6),A2    ; A2 at ColdCapture
MOVE.L A3,A1              ; Copy Ptr to A1 since A3 used in LOOP
MOVE.L #String,A4         ; A4 at StringPuffer
MOVE.L 40(A3),(A2)        ; OldColdCapture to ColdCapture
MOVE.L #39,D0
StringLoop:
  MOVE.B (A3)+,(A4)+      ;Copy String to Buffer
DBRA D0,StringLoop
                          ; Ptr in ColdCapture is still in A1
MOVE.L #44,D0             ; Length to D0
JSR FreeMem(A6)           ; Deallocate Memory
MOVE.L DosBase,A6
MOVE.L #String,D1
MOVE.L #0,D2
MOVE.L #0,D3
JSR Execute(A6);          ;Execute String
RTS

;******************* Close Window ************************
CloseWin:
MOVE.L WinHandle,D1
MOVE.L DosBase,A6
JSR Close (A6)
RTS

;******************* Close Dos.Library *******************
CloseDos:
MOVE.L ExecBase,A6
MOVE.L DosBase,A1
JSR CloseLibrary(A6)

END:
RTS

;******************* Buffers *****************************

EVEN
DosBase:
DC.L 0

WinHandle:
DC.L 0

DosName:
DC.B `dos.library`,0

Window:
DC.B `*`,0

String:
DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Text:
DC.B `Whodunit ? Here comes a clue: He's fast and blue !`,10
TextEnd:
