
************************** Loader pour Boot-Menu *************************


** Permet de récuperer le choix effectué dans Boot-Menu et de
** lancer le programme conséquent



; MACROS

***********************
FindTask=-$0126
WaitPort=-$0180
GetMsg=-$0174
ReplyMsg=-$017a
Forbid=-$0084

PR_CLI=172
PR_MsgPort=92
***********************

OpenLib=-408
CloseLib=-414

Execute=-222
IOerr=-132
Exit=-144
Open=-30
Read=-42
Close=-36

; 

CALLSYS:MACRO 
	Jsr \1(a6)
	ENDM


INIT_AMIGA:MACRO

	Move.l	SP,Initial_SP
	Move.l	4,a6
	Move.l	a6,ExecBase
	Sub.l	a1,a1
	Jsr	FindTask(a6)
	Move.l	d0,Own_Task

	Move.l	d0,a4
	Tst.l	$ac(a4)
	Bne.s	M_Suit

	Lea	$5c(a4),a0
	Jsr	WaitPort(a6)	
	Lea	$5c(a4),a0
	Jsr	GetMsg(A6)		
	Move.l	d0,Msg

M_Suit:

; Start from Workbench ?

	Move.l	d0,a4
	Tst.l	PR_CLI(a4)
	Bne.s	M_P1

; Get Message

	Lea	PR_MsgPort(a4),a0
	Jsr	WaitPort(a6)
	Lea	PR_MsgPort(a4),a0
	Jsr	GetMsg(a6)
	Move.l	d0,WBenchMsg

M_P1:

	ENDM

EXIT_AMIGA:MACRO

	Tst.l	WBenchMsg
	Beq.s	M_P2

	Move.l	ExecBase,a6
	Jsr	Forbid(a6)
	Move.l	WBenchMsg,a1
	Jsr	ReplyMsg(A6)

M_P2:
	Moveq	#0,d0
	Move.l	Initial_SP,SP



	ENDM



; END MACROS



Start:	

	INIT_AMIGA
	
	Move.l	4,a6		; ExecBase
	Lea	Dos,a1		; Pointe sur dos.library
	Moveq 	#0,d0		; Version
	CALLSYS	OpenLib		
	Move.l 	d0,Dosbase	; Sauve DosBase


	Move.l	Dosbase,a6
	Move.l	#1005,d2	; Pour ouverture en lecture (1006 ecriture)
	Move.l	#Name,d1	; Adresse trouvee du script a charger
	CALLSYS	Open		; Ouvre le fichier
	Tst.l	d0		; Erreur ?
	Beq	Erreur		; Oui
	Move.l	d0,Filehd	; Non:on sauve le handle du fichier

	Move.l	d0,d1
	Move.l	#Buffer,d2
	Move.l	#360,d3		; Nombre de caracteres a lire
	CALLSYS	Read		; on lit

	Move.l	Filehd,d1
	CALLSYS	Close		; Ferme fichier


	Move.l	0,d1		; Recupere Choix Menu

	Cmp.b	#$f5,d1		; ESC ?
	Bne	Pas_ESC
	Move.l	#10,d1		; 11e choix
Pas_ESC:
	Cmp.l	#$f6,d1
	Bne	Pas_DEL
	Move.l	#11,d1		; 12e choix
Pas_DEL:

	Lea	Buffer,a0	; Pointe sur les Fichiers a Executer
	Move.l	a0,a1

	Cmp.l	#0,d1
	Beq	Met_zero
	Sub.b	#1,d1

Loop1:	
	Cmp.l	#Buffer+362,a0
	Beq	Erreur
	Cmp.b	#$a,(a0)+	; On compare jusqu'au LINE FEED ($a)
	Bne.s	Loop1		
	Dbra	d1,Loop1	; Boucle si necessaire
	Move.l	a0,a1		; On a trouver l'adresse

Met_zero:
	Cmp.l	#Buffer+362,a0
	Beq	Erreur
	Cmp.b	#$a,(a0)+	; On compare jusqu'au LINE FEED ($a)
	Bne.s	Met_zero		

	Sub.l	#1,a0
	Move.b	#0,(a0)		; Met un 0 de fin de nom


Charge:
	Move.l	Dosbase,a6
	Move.l	a1,d1		; Adresse du nom trouve
	Moveq	#0,d2		; Entre fenetre CLI
	Moveq 	#0,d3		; Sortie fenetre CLI
	CALLSYS	Execute		; Charge fichier et le lance

	Bra	Normal

Erreur:
	Move.l	#-1,d7

Normal:

	Move.l	Dosbase,a6
	CALLSYS	IOerr		; Traitement erreur
	Move.l	d0,d5

	Move.l 	4,a6		
	Move.l 	Dosbase,a1
	CALLSYS	CloseLib	; Ferme dos.library

	EXIT_AMIGA	

	Rts			; Fin

; DONNEES

Name:	Dc.b	"SYS:Menu",0
	


Dos:	Dc.b	"dos.library",0

	even
Dosbase:Dc.l 	0
Filehd:	Dc.l	0
Buffer:	dcb.b	362,0

	even
WBenchMsg:	Dc.l 0 
Own_Task:	Dc.l 0
ExecBase:	Dc.l 0
Initial_SP:	Dc.l 0
Msg:		Dc.l 0

