START	movem.l	d0/a0,-(a7)	;save initial values
	movea.l	$4.w,a6
	suba.l	a1,a1
	jsr	(-294,a6)		; FindTask()
	move.l	d0,a4
	tst.l	(172,a4)		; process.cli
	beq.s	workbench
	movem.l	(a7)+,d0/a0	;restore regs
	bra.s	cli		;and run the user prog
workbench	lea	(92,a4),a0	; process.msgport
	jsr	(-384,a6)		;wait for a message (WaitPort(())
	lea	(92,a4),a0	; process.msgport
	jsr	(-372,a6)		;then get it (GetMsg())
	move.l	d0,_wbmessage		;save it for later reply
	movem.l	(a7)+,d0/a0	;restore
cli	bsr.s	_START		;call our program
	move.l	d0,-(a7)		;save it
	tst.l	_wbmessage
	beq.s	exittodos		;if I was a CLI
	jsr	(-132,a6)		; Forbid()
	move.l	(_wbmessage,pc),a1
	jsr	(-138,a6)		; Permit()
exittodos	move.l	(a7)+,d0		;exit code
	rts

_START  move.l  a0,_arg
        clr.b   (-1,a0,d0.w)
        movea.l $4.w,a6
        lea     (DOSName,pc),a1
        moveq   #37,d0
        jsr     (-552,a6)               ; OpenLibrary()
        move.l  d0,_DOSBase
        beq.s   .FINISH

        movea.l d0,a6
        jsr     (-60,a6)                ; Output()
        move.l  d0,_stdout
        jsr     (-54,a6)                ; Input()
        move.l  d0,_stdin

        movea.l $4.w,a6
        lea     (IntName,pc),a1
        moveq   #37,d0
        jsr     (-552,a6)               ; OpenLibrary()
        move.l  d0,_IntuitionBase
        beq.s   .CLOSEDOS

        movea.l $4.w,a6
        lea     (GfxName,pc),a1
        moveq   #37,d0
        jsr     (-552,a6)               ; OpenLibrary()
        move.l  d0,_GfxBase
        beq.s   .CLOSEINT

        movea.l $4.w,a6
        lea     (MUIName,pc),a1
        moveq   #19,d0
        jsr     (-552,a6)
        move.l  d0,_MUIMasterBase
        beq.s   .CLOSEGFX

        xref    _main
        jsr     _main           ; a6 is stored
        move.l  d0,d2

        movea.l _MUIMasterBase,a1
        jsr     (-414,a6)               ; CloseLibrary()
.CLOSEGFX
        movea.l _GfxBase,a1
        jsr     (-414,a6)               ; CloseLibrary()
.CLOSEINT
        movea.l _IntuitionBase,a1
        jsr     (-414,a6)               ; CloseLibrary()
.CLOSEDOS
        movea.l _DOSBase,a1
        jsr     (-414,a6)               ; CloseLibrary()
.FINISH move.l  d2,d0
        rts
****************************************
        xdef    _DOSBase
        xdef    _IntuitionBase
        xdef    _GfxBase
        xdef    _MUIMasterBase
        xdef    _arg
        xdef    _stdout
        xdef    _stdin
        xdef    _wbmessage
****************************************
_DOSBase        dc.l    0
_IntuitionBase  dc.l    0
_GfxBase        dc.l    0
_MUIMasterBase  dc.l    0
_arg            dc.l    0
_stdout         dc.l    0
_stdin          dc.l    0
_wbmessage      dc.l    0
****************************************
DOSName dc.b    'dos.library',0
IntName dc.b    'intuition.library',0
GfxName dc.b    'graphics.library',0
MUIName dc.b    'muimaster.library',0
