	; *
	; * Library-Modul "arg"
	; *
	; * Parameter: auf Stack liegen Länge und Adresse des Parameters
	; *
	; * Diese Routine erzeugt einen passenden Argument-Vector und
	; * ruft dann mit den entsprechenden Argumenten "main_iPPc" auf.
	; *
	; * Jens Gelhar 06.11.92/31.08.93/23.11.93
	; *

	xdef	main_
	xref	main__iPPc

ExecBase	= 4

main_:
	move.l a7,a5
	movem.l 4(a7),d0/a0
	move.l d0,d1
	addq.l #4,d1
	and.w #$FFFC,d1
	sub.l d1,a7
	move.l a7,a1
	move.w d0,d2
	beq.b copied
copy	move.b (a0)+,(a1)+
	subq.w #1,d2
	bne.b copy
	subq.l #1,a1
copied	move.l a7,a0            ; Stringanfang
	clr.l -(a7)             ; Nullpointer ans Listenende
	moveq #1,d1
	cmp.l a0,a1
	beq.b done
	bra.b clear             ; Null ans Ende und gleich nachfolgende Spaces überlesen

count	cmp.l a0,a1
	blo.b first
	cmp.b #'"',(a1)
	beq.b cnqu
	cmp.b #"'",(a1)
	bne.b normstr
cnqu	; evtl. Parameter mit "...":
	move.l a1,a2
quotstr	cmp.l a0,a2
	bls.b normstr     ; doch nicht...
	move.b -(a2),d0
	cmp.b (a1),d0
	bne.b quotstr
	cmp.l a0,a2
	beq.b quoted
	cmp.b #' ',-1(a2)
	bhi.b normstr
quoted	; Yow:
	clr.b (a1)              ; abschließendes " löschen
	move.l a2,a1
	bra.b word
normstr	; Parameter ohne "..."
	cmp.l a0,a1
	bls.b first
	cmp.b #' ',-(a1)
	bhi.b normstr
word	; Wortzwischenraum gefunden:
	pea 1(a1)
	addq.l #1,d1
	cmp.l a0,a1
	bls.b done
clear	; Wortzwischenraum ganz löschen:
	clr.b (a1)
	subq.l #1,a1
	cmp.l a0,a1
	bls.b count
	cmp.b #' ',(a1)
	bls.b clear
	bra.b count
first	addq.l #1,d1
	move.l a1,-(a7)         ; erster String
	; d1 Zeiger liegen nun auf dem Stack
done
	clr.l -(a7)             ; Platz für Programmnamen freihalten
	move.l a7,-(a7)
	move.l d1,-(a7)
	; Programmnamen ermitteln:
	move.l ExecBase.w,a6
	move.l	$114(a6),a0      ; ThisTask
	move.l 172(a0),d0               ; BCPL-Zeiger auf CLI
	beq.b workb
	asl.l #2,d0
	move.l d0,a0
	move.l 16(a0),d0                ; BCPL-Stringzeiger
	beq.b Nameless
	asl.l #2,d0
	move.l d0,a0
	moveq #0,d1
	move.b (a0)+,d1                 ; Länge nach d1
	beq.b Nameless
	clr.b 0(a0,d1)
	bra.b ThisName
workb	; Workbench-Start: Programmnamen nicht selbst ermitteln
	addq.l #4,4(a7)
	subq.l #1,(a7)
	bra.b call
Nameless	lea defaultname(pc),a0
ThisName	move.l a0,8(a7)

call	jsr main__iPPc

	move.l a5,a7
	rts

defaultname	dc.b '?',0

	end

