
; ***** wbarg.asm *****

; Jens Gelhar  07.11.92

argsize	= 200

sm_NumArgs	= 28
sm_ArgList	= 36

fib_filename	= 8

UnLock		= -90
DupLock		= -96
Examine		= -102
CurrentDir	= -126
ParentDir	= -210

	xdef	_wbparse

	xref	main_
	xref	_DOSBase

_wbparse:	; Stack-Argument: Zeiger auf Startup-Msg
	move.l	4(a7),a0
	movem.l d2-d7/a2-a6,-(a7)
	move.l	a7,a5

	move.l	a7,a2
	lea	-1000(a7),a7
	clr.b	-(a2)

	move.l	a0,d0
	beq.b	nix
	btst	#0,d0
	bne.b	nix

	move.l	sm_NumArgs(a0),d0
	beq	nix
	asl.l	#3,d0
	move.l	sm_ArgList(a0),a0
	add.l	d0,a0
loop	; Strings puschen:
	move.l	-(a0),a1	; wa_Name
	move.l	-(a0),d1	; wa_Lock

	move.b	#" ",-(a2)
	move.b	#'"',-(a2)
.1	tst.b	(a1)+		; Stringende suchen
	bne.b	.1
	subq.l	#1,a1
.2	cmp.l	4(a0),a1
	bls.b	.3
	move.b	-(a1),-(a2)
	bra.b	.2
.3	
	movem.l	d0/a0,-(a7)
	move.l	_DOSBase,a6
	jsr	DupLock(a6)
	bsr.b	FullPath
	movem.l	(a7)+,d0/a0

	move.b	#'"',-(a2)

	subq.l	#8,d0
	bhi.b	loop

done:	; Verzeichnis setzen:
	move.l	(a0),d1
	move.l	_DOSBase,a6
	jsr	CurrentDir(a6)
nix
	move.l	a2,d0			; Stack sparen...
	and.w	#$fffc,d0
	move.l	d0,a7

	move.l	a2,a0
	moveq	#-1,d0
.1	addq.l	#1,d0
	tst.b	(a2)+
	bne.b	.1

call	movem.l	d0/a0/a5,-(a7)	
	jsr	main_
	move.l	8(a7),a7
	movem.l	(a7)+,d2-d7/a2-a6
	rts

FullPath ; zu Lock d0 (destruktiv)
	move.l	d0,d1
	beq.b	.0
	move.l	d0,-(a7)
	jsr	ParentDir(a6)
	move.l	d0,-(a7)

	tst.l	(a7)
	beq.b	.dev
	move.b	#'/',-(a2)
	bra.b	.3
.dev	move.b	#":",-(a2)
.3
	; Namen feststellen:
	move.l	4(a7),d1
	lea	-300(a7),a7
	move.l	a7,d2
	addq.l	#4,d2
	and.w	#$fffc,d2
	move.l	d2,-(a7)
	jsr	Examine(a6)
	move.l	(a7)+,a0
	tst.l	d0
	beq.b	.ok

	lea	fib_filename(a0),a0
	move.l	a0,a1
.1	tst.b	(a1)+
	bne.b	.1
	subq.l	#1,a1
.2	cmp.l	a0,a1
	bls.b	.ok
	move.b	-(a1),-(a2)
	bra.b	.2
.ok
	lea	300(a7),a7

	move.l	4(a7),d1
	jsr	UnLock(a6)
	move.l	(a7)+,d0
	addq.l	#4,a7
	bra.b	FullPath	
.0	rts

Dummy	dc.b	10,0

	end
