OpenLibrary:	equ	-552
ReadItem:	equ	-810
VPrintf:	equ	-954
ITEMSIZE:	equ	40

move.l a0,ArgStrg		; Zeiger auf Argument-String sowie
move.l d0,ArgStrgLen		; Länge retten
move.l 4,a6
lea DosName,a1
move.l #37,d0			; mindestens OS 2.0 erforderlich
jsr OpenLibrary(a6)		; Dos-Library öffnen
tst.l d0			; V37 nicht vorhanden ?
beq quit
move.l d0,DosBase		; Library-Basis retten
move.l ArgStrg,a0		; Parameter für ReadArguments()
move.l ArgStrgLen,d0
jsr ReadArguments		; ReadArguments() aufrufen
lea param,a0			; Anzahl der Argumente in Parameter-Array 
move.l NumItems,(a0)		; schreiben (wird für VPrintf() gebraucht)
move.l #fmsg1,d1
move.l #param,d2
move.l DosBase,a6
jsr VPrintf(a6)			; Anzahl der Argumente ausgeben
lea ItemArray,a3		; Adresse des Arrays der Argumente
sub.l d3,d3
out_args:			; Argumente ausgeben:
cmp.l NumItems,d3		; schon alle Argumente ausgegeben ?
beq quit
lea param,a0			; für VPrintf() wieder Parameter-Array
move.l d3,(a0)			; beschreiben (mit Argumentnummer sowie
move.l a3,4(a0)			;              Adresse des Arguments)
move.l #fmsg2,d1
move.l #param,d2
jsr VPrintf(a6)			; Ausgabe des Arguments
add.l #1,d3			; Argumentnummer erhöhen
add.l #ITEMSIZE,a3		; Zeiger auf das nächste Argument setzen
bra out_args			; weiter mit nächstem Argument
quit:
sub.l d0,d0
rts

; ReadArguments() - unterteilt den Argument-String in die verschiedene
;		    Argumente und schreibt sie in das Array "ItemArray"
; Parameter: a0: Argument-String
;	     d0: Länge des Argument-Strings
ReadArguments:
movem.l d2-d3/a3/a6,-(sp)
move.l DosBase,a6
lea CSource,a1		; Argument-String und seine Länge in CSource-Struktur
move.l a0,(a1)		; eintragen, die der Dos-Funktion ReadItem()
move.l d0,4(a1)		; übergeben wird
move.l #0,8(a1)
lea ItemArray,a3	; Adresse des Argument-Arrays
clr.l NumItems		; Zähler für Anzahl der Argumente
read_item:
move.l ArgStrgLen,d0
sub.l #1,d0
lea CSource,a0
cmp.l 8(a0),d0		; schon fertig ?
beq quit_ReadArguments
move.l a3,d1		; Ziel für nächstes Argument
move.l #ITEMSIZE,d2
move.l #CSource,d3
jsr ReadItem(a6)	; nächstes Argument bestimmen mit ReadItem()
add.l #ITEMSIZE,a3	; Adresse für nächstes Argument
add.l #1,NUMITEMS	; Argumentenzähler erhöhen
bra read_item		; nächste Runde
quit_ReadArguments:
movem.l (sp)+,d2-d3/a3/a6
rts

ItemArray:	blk.b	ITEMSIZE*50
even
NumItems:	dc.l	0
ArgStrgLen:	dc.l	0
ArgStrg:	dc.l	0
CSource:	blk.b	12
DosName:	dc.b	 "dos.library",0
even
DosBase:	dc.l	0
fmsg1:		dc.b	13,10,"Anzahl der Argumente: %ld",13,10,10,0
even
fmsg2:		dc.b	"Argument %ld: %s",13,10,0
even
param:		dc.l	0,0
