
;	A fragment of code borrowed from 'music' a pd music demo from
;	Commodore and resourced using resource.
;

	public	_main
	public	AmigaJunk
	public	_stdout

AmigaJunk
	lea	initialSP(pc),a1
	move.l	sp,(a1)
	lea	dosCmdLen(pc),a1
	move.l	d0,(a1)
	lea	dosCmdBuf(pc),a1
	move.l	a0,(a1)
	lea	returnMsg(pc),a1
	move.l	#0,(a1)
	move.l	4,a6
	sub.l	a1,a1
	jsr	-$0126(a6)				; allocate memory
	move.l	d0,a4
	tst.l	$00AC(a4)
	beq	fromWorkbench
fromCLI	bsr	openDOS
	clr.l	-(sp)
	bsr	_FindTask
	addq.l	#4,sp
	move.l	d0,a0
	move.l	$00AC(a0),a0
	add.l	a0,a0
	add.l	a0,a0
	move.l	$0010(a0),a0
	add.l	a0,a0
	add.l	a0,a0
	movem.l	d2/a2/a3,-(sp)
	lea	argvBuffer(pc),a2
	lea	argvArray(pc),a3
	moveq.l	#1,d2
	moveq.l	#0,d0
	move.b	(a0)+,d0
	move.l	a2,(a3)+
	bra.s	1$

2$	move.b	(a0)+,(a2)+
1$	dbra	d0,2$
	clr.b	(a2)+
	move.l	dosCmdLen(pc),d0
	move.l	dosCmdBuf(pc),a0
3$	move.b	(a0)+,d1
	subq.l	#1,d0
	ble.s	parmExit
	cmp.b	#$20,d1
	ble.s	3$
	addq.l	#1,d2
	move.l	a2,(a3)+
	bra.s	5$

4$	move.b	(a0)+,d1
	subq.l	#1,d0
	cmp.b	#$20,d1
	ble.s	6$
5$	move.b	d1,(a2)+
	bra.s	4$

6$	clr.b	(a2)+
	bra.s	3$

parmExit
	clr.b	(a2)+
	clr.l	(a3)+
	move.l	d2,d0
	movem.l	(sp)+,d2/a2/a3
	pea	argvArray(pc)
	move.l	d0,-(sp)
	bsr	_Input
	lea	_stdin(pc),a0
	move.l	d0,(a0)
	bsr	_Output
	lea	_stdout(pc),a0
	move.l	d0,(a0)+
	move.l	d0,(a0)
	bsr	_main
	moveq.l	#0,d0
	move.l	initialSP(pc),sp
	rts

fromWorkbench
	bsr	openDOS
	bsr	waitmsg
	lea	returnMsg(pc),a0
	move.l	d0,(a0)
	move.l	d0,-(sp)
	move.l	d0,a2
	move.l	$0024(a2),d0
	beq.s	docons
	move.l	_DOSBase(pc),a6
	move.l	d0,a0
	move.l	0(a0),d1
	jsr	-$007E(a6)
docons	move.l	$0020(a2),d1

;	beq.s	domain

 lea	mywindow(pc),a0
 move.l	a0,d1

	move.l	#$000003ED,d2
	jsr	-$001E(a6)
	lea	_stdin(pc),a0
	move.l	d0,(a0)+
	move.l	d0,(a0)+
	move.l	d0,(a0)
	beq.s	domain
	lsl.l	#2,d0
	move.l	d0,a0
	move.l	8(a0),$00A4(a4)
domain	clr.l	-(sp)
	bsr	_main

 move.l	_stdin(pc),d1
 beq.s	1$
 move.l	_DOSBase(pc),a6
 jsr	-$24(a6)
1$


	moveq.l	#0,d0
	bra.s	exit2

_exit	move.l	4(sp),d0
exit2	move.l	initialSP(pc),sp
	move.l	d0,-(sp)
	move.l	returnMsg(pc),d1
	beq.s	exitToDOS
	move.l	4,a6
	jsr	-$0084(a6)
	move.l	returnMsg(pc),a1
	jsr	-$017A(a6)
exitToDOS
	move.l	(sp)+,d0
	rts

noDOS	movem.l	d7/a5/a6,-(sp)
	move.l	#$00038007,d7
	move.l	4,a6
	jsr	-$006C(a6)
	movem.l	(sp)+,d7/a5/a6
	moveq.l	#$64,d0
	bra.s	exit2

waitmsg	lea	$005C(a4),a0
	jsr	-$0180(a6)
	lea	$005C(a4),a0
	jsr	-$0174(a6)
	rts

openDOS	lea	DOSName(pc),a1
	jsr	-$0198(a6)
	lea	_DOSBase(pc),a1
	move.l	d0,(a1)
	beq.s	noDOS
	rts

_FindTask
	move.l	a6,-(sp)
	move.l	8(sp),a1
	move.l	4,a6
	jsr	-$0126(a6)
	move.l	(sp)+,a6
	rts

_Input	move.l	a6,-(sp)
	move.l	_DOSBase,a6
	jsr	-$0036(a6)
	move.l	(sp)+,a6
	rts

_Output	move.l	a6,-(sp)
	move.l	_DOSBase,a6
	jsr	-$003C(a6)
	move.l	(sp)+,a6
	rts

mywindow	dc.b	'RAW:0/0/400/80/tetris window',0
		even
_DOSBase	dc.l	0
_errno		dc.l	0
_stdin		dc.l	0
_stdout		dc.l	0
_stderr		dc.l	0
initialSP	dc.l	0
returnMsg	dc.l	0
dosCmdLen	dc.l	0
dosCmdBuf	dc.l	0
argvArray	dcb.l	32,0
argvBuffer	dcb.l	64,0
DOSName		dc.b	'dos.library',0
