; startup-sequence
     XREF _main
; Exec entries
_LVOForbid        EQU -$84
_LVOAllocMem      EQU -$C6
_LVOFreeMem       EQU -$D2
_LVOFindTask      EQU -$126
_LVOSetSignal     EQU -$132
_LVOGetMsg        EQU -$174
_LVOReplyMsg      EQU -$17A
_LVOWaitPort      EQU -$180
_LVOCloseLibrary  EQU -$19E
_LVOOpenLibrary   EQU -$228
; DOS entries
_LVOOpen          EQU -$1E
_LVOClose         EQU -$24
_LVORead          EQU -$2A
_LVOWrite         EQU -$30
_LVOInput         EQU -$36
_LVOOutput        EQU -$3C
_LVOSeek          EQU -$42
_LVODeleteFile    EQU -$48
_LVOLock          EQU -$54
_LVOUnLock        EQU -$5A
_LVOCurrentDir    EQU -$7E
_LVOIOErr         EQU -$84
; Intuition entries
_LVOAutoRequest   EQU -$15C
; Process defs
pr_MsgPort        EQU  $5C
pr_CurrentDir     EQU  $98
pr_ConsoleTask    EQU  $A4
pr_CLI            EQU  $AC
; startup message defs
sm_ToolWindow     EQU  $20
sm_ArgList        EQU  $24
; workbench arg def
wa_Lock           EQU  $0
; file handle definition
fh_Type           EQU  $8
; cli struct defs
cli_StandardInput   EQU $1C
cli_StandardOutput  EQU $38
;
MODE_OLDFILE      EQU  1005
;
 move.l d0,d2
 move.l a0,a2
 lea    DosName,a1
 moveq.l #0,d0
 move.l $4,a6
 jsr    _LVOOpenLibrary(a6)
 move.l d0,_DOSBase
 beq    WrapUp
 sub.l  a1,a1
 jsr    _LVOFindTask(a6)
 move.l d0,a3
 tst.l  pr_CLI(a3)
 beq.s  x.workbench
; CLI startup
 subq.w #1,d2
 clr.b  $0(a2,d2)
x.cli move.l a2,DosCmdBuf
 move.b (a2)+,d0
 cmp.b  #' ',d0
 bne.s  x.click
 subq.w #1,d2
 bra.s  x.cli
x.click:
 move.l d2,DosCmdLen
 move.l pr_CLI(a3),a0
 add.l  a0,a0
 add.l  a0,a0
 move.l cli_StandardInput(a0),_stdin
 move.l cli_StandardOutput(a0),_stdout
 sub.l  a2,a2
 bra    x.begin
;
x.workbench:
 clr.l  DosCmdBuf
 lea    pr_MsgPort(a3),a0
 jsr    _LVOWaitPort(a6)
 lea    pr_MsgPort(a3),a0
 jsr    _LVOGetMsg(a6)
 move.l _DOSBase,a6
 move.l d0,WBenchMsg
 move.l d0,a2
 tst.l  sm_ArgList(a2)
 beq.s  x.parm
  move.l sm_ArgList(a2),a0
  move.l wa_Lock(a0),d1
  jsr    _LVOCurrentDir(a6)
x.parm:
 tst.l  sm_ToolWindow(a2)
 beq.s  x.begin
  move.l sm_ToolWindow(a2),d1
  move.l #MODE_OLDFILE,d2
  jsr    _LVOOpen,a6
  move.l d0,_stdin
  move.l d0,_stdout
  beq.s  x.begin
   lsl.l  #2,d0
   move.l d0,a0
   move.l fh_Type(a0),pr_ConsoleTask(a3)
x.begin:
 move.l a3,a1
 move.l DosCmdBuf,a0
 move.l DosCmdLen,d0
 move.l _DOSBase,a6
; enter with:  a0,d0 = CLI parameters (a0=0 for WorkBench)
;              a1,a2 = Process, WB message (a2=0 for CLI)
;              a6 - positioned for DOS library
 jsr    _main

 tst.l  WBenchMsg
 beq.s  DosWrap
  move.l _stdout,d1
  beq.s  DosWrap
   move.l _DOSBase,a6
   jsr    _LVOClose(a6)
DosWrap:
 move.l _DOSBase,a1
 move.l $4,a6
 jsr    _LVOCloseLibrary(a6)
 tst.l  WBenchMsg
 beq.s  WrapUp
  jsr    _LVOForbid(a6)
  move.l WBenchMsg,a1
  jsr    _LVOReplyMsg(a6)
WrapUp  rts
WBenchMsg  dc.l 0
_stdin     dc.l 0
_stdout    dc.l 0
DosName    dc.b "dos.library",0

_DOSBase   ds.l 1
DosCmdLen  ds.l 1
DosCmdBuf  ds.l 1
