*	Startup.asm
*	22.10.91 by BRAINDEATH
*
*	Startup-Modul für Workbench und CLI
*	kann mit INCLUDE vor das Hauptprogramm assembliert werden
*
* Übergabe an Hauptprogramm:
*
* 1. Start vom CLI:
*	D1 = 0 !
*	A0/D0 Zeiger/Länge der Arg-Zeile
*
* 2. Start von der Workbench
*	D1 <> 0 !
*	A0 = Zeiger auf Liste mit WB_Args
*	D0 = Anzahl der WB_Args
*
* Hauptprogramm wird über JSR aufgerufen und muß mit RTS zum Startup
* zurückkehren. Ein Returncode kann in D0 übergeben werden
*
* Tabulator-Größe : 08

EXEC		=	4
pr_CLI		=	$AC
pr_MSGPORT	=	$5C

sm_ARGLIST	=	$24
sm_NUMARGS	=	$1C

FINDTASK	=	-294
WAITPORT	=	-384
GETMSG		=	-372
REPLYMSG	=	-378

***********************************************************************
*

StartUp
	movem.l	d0/a0,-(sp)	;Args auf den Stack
	sub.l	a1,a1		;uns selbst
	move.l	EXEC.w,a6	;Execbase nach a6
	jsr	FINDTASK(a6)	;suchen

	sub.l	a1,a1		;keine WB_MSG !
	move.l	d0,a2		;nach a2
	tst.l	pr_CLI(a2)	;kommen wir vom CLI ?
	bne.s	1$		;ja,dann weiter !!!	

	lea	pr_MSGPORT(a2),a0	;MsgPort nach a0
	jsr	WAITPORT(a6)		;warten
	lea	pr_MSGPORT(a2),a0
	jsr	GETMSG(a6)
	move.l	d0,a1			;WB_Startup nach a1 retten

	move.l	sm_NUMARGS(a1),d0	;Anzahl nach d0
	move.l	sm_ARGLIST(a1),a0	;Liste nach a0
	moveq	#-1,d1			;<>0 bed. wir kommen von WB !
	addq.w	#8,sp			;Stack korrigieren
	bra.s	2$
1$
	movem.l	(sp)+,d0/a0		;Args vom Stack
	moveq	#0,d1			;=0 bed. wir kommen vom CLI !
2$
	movem.l	a1/a6,-(sp)		;retten
	jsr	4$			;Hauptprogramm abarbeiten
	movem.l	(sp)+,a1/a6		;wieder vom Stack

	move.l	a1,d1			;kamen wir von WB ?
	beq.s	3$			;nein,dann fertig !
	move.l	d0,d2			;Returncode retten
	jsr	REPLYMSG(a6)		;WB_MSG zurück !
	move.l	d2,d0			;Returncode wieder nach d0
3$
	rts				;und fertig !


***********************************************************************

*	HIER FOLGT DAS HAUPTPROGRAMM

	SECTION	"_prg",CODE		;eigentlich nicht nötig !
4$
***********************************************************************

	END


