* ------------------------------------------------------------------------- *

	INCLUDE	"ram:Support.s"

* ------------------------------------------------------------------------- *

* Disect V1.6 Disassembly:
* ------------------------



* ------------------------------------------------------------------------- *

; Disassembly of 'KeepASL' - DMA 1.10.94

main	move.l	(EXEC_BASE).w,sys_base

	bsr.w	start_up		; WB/CLI start up

	lea.l	int_name(pc),a1	; open intuition
	moveq.l	#$0,d0
	movea.l	sys_base(pc),a6
	jsr	_LVOOpenLibrary(a6)
	move.l	d0,int_base
	beq.w	exit

	lea.l	asl_name(pc),a1	; open ASL
	moveq.l	#$0,d0
	movea.l	sys_base(pc),a6
	jsr	_LVOOpenLibrary(a6)
	move.l	d0,asl_base
	beq.b	exit

	lea.l	clip_name(pc),a0	; open clipboard
	lea.l	clip_iorq(pc),a1
	moveq.l	#$0,d0
	moveq.l	#$0,d1
	movea.l	sys_base(pc),a6
	jsr	_LVOOpenDevice(a6)
	tst.l	d0
	bne.b	exit
	st.b	clip_flag

	lea.l	newwind0(pc),a0	; open window
	movea.l	int_base(pc),a6
	jsr	_LVOOpenWindow(a6)
	move.l	d0,window_p
	beq.b	exit

	movea.l	window_p(pc),a0	; wait for window
	movea.l	wd_UserPort(a0),a2	; close message

.wait_loop	movea.l	a2,a0
	movea.l	sys_base(pc),a6
	jsr	_LVOWaitPort(a6)

	movea.l	a2,a0
	movea.l	sys_base(pc),a6
	jsr	_LVOGetMsg(a6)
	tst.l	d0
	beq.b	.wait_loop

	movea.l	d0,a1
	movea.l	sys_base(pc),a6
	jsr	_LVOReplyMsg(a6)

exit	move.l	window_p(pc),d0	; close window
	beq.b	.no_window
	movea.l	d0,a0
	movea.l	int_base(pc),a6
	jsr	_LVOCloseWindow(a6)

.no_window	tst.b	clip_flag		; close clipboard
	beq.b	.no_clip
	clr.b	clip_flag
	lea.l	clip_iorq(pc),a1
	movea.l	sys_base(pc),a6
	jsr	_LVOCloseDevice(a6)

.no_clip	move.l	asl_base(pc),d0	; close ASL
	beq.w	.no_asl
	movea.l	d0,a1
	movea.l	sys_base(pc),a6
	jsr	_LVOCloseLibrary(a6)
.no_asl	clr.l	asl_base

	move.l	int_base(pc),d0	; close intuition
	beq.w	.no_int
	movea.l	d0,a1
	movea.l	sys_base(pc),a6
	jsr	_LVOCloseLibrary(a6)
.no_int	clr.l	int_base

	bsr.w	close_down

	moveq.l	#$0,d0

	rts

* ------------------------------------------------------------------------- *

start_up	movem.l	d0/a0,-(a7)

	suba.l	a1,a1
	move.l	a1,wb_msg_p
	movea.l	sys_base(pc),a6
	jsr	_LVOFindTask(a6)
	movea.l	d0,a4
	move.l	d0,task_p

	tst.l	pr_CLI(a4)
	bne.b	.exit

	lea.l	pr_MsgPort(a4),a0
	movea.l	sys_base(pc),a6
	jsr	_LVOWaitPort(a6)

	lea.l	pr_MsgPort(a4),a0
	movea.l	sys_base(pc),a6
	jsr	_LVOGetMsg(a6)
	move.l	d0,wb_msg_p

.exit	movem.l	(a7)+,d0/a0

	rts

* ------------------------------------------------------------------------- *

close_down	tst.l	wb_msg_p
	beq.b	.exit

	movea.l	sys_base(pc),a6
	jsr	_LVOForbid(a6)

	movea.l	wb_msg_p(pc),a1
	movea.l	sys_base(pc),a6
	jsr	_LVOReplyMsg(a6)

.exit	rts

* ------------------------------------------------------------------------- *

sys_base	DC.L	0
int_base	DC.L	0
asl_base	DC.L	0,0
wb_msg_p	DC.L	0
task_p	DC.L	0
window_p	DC.L	0

clip_flag	DC.B	0,0

; IOClipReq structure

clip_iorq	DCB.W	25
	DC.W	0

newwind0	NEWWINDOW	$a8,$0,$130,$b,$3,$0,IDCMP_CLOSEWINDOW,
&		WFLG_ACTIVATE+WFLG_DRAGBAR+WFLG_DEPTHGADGET+WFLG_CLOSEGADGET+WFLG_RMBTRAP,
&		$0,$0,ascii0,$0,$0,$0,$0,$0,$0,WBENCHSCREEN

ascii0	DC.B	"Keep ASL(CD) - Dave 'A' 93(94)",$0,0

int_name	DC.B	"intuition.library",$0
asl_name	DC.B	"asl.library",$0
clip_name	DC.B	"clipboard.device",$0,$0
	DC.W	0

* ------------------------------------------------------------------------- *