	10 . Crer le fichier source (.S)




Le noyau VISUAL

Le noyau (niveau 0 de la pile) est le coeur du V.A. car votre source projet.S doit toujours 
commencer par :

lea mon_app,a1
include visual41.s

"mon_app" tant le nom que vous aurez donn  votre objet principal dans le fichier pro-
jet.OBJ.

Par consquent chacune de vos routines sera appele par un JSR et devra donc se terminer 
par un RTS.
La question est : que-fais-je quand je reois un AP_TERM ou quivalent vu que je suis 
une sous-routine ? Eh bien, vous sautez au label : VISUAL40_END qui fermera et quittera 
pour vous votre application.
Notez que le fait que la pile ne soit pas correcte au moment de faire AP_EXIT ne fait abso-
lument rien puisque l'on quitte.
Notez aussi qu'il ne faut jamais le faire en cas d'un AC_CLOSE parce que la pile est com-
mune  tous les accessoires et qu'en plus vous 'planteriez' le systme, car un accessoire ne 
doit jamais sortir !

Votre fichier source .S doit normalement, avant que vous ayez tap une ligne de program-
me,  ressembler fortement  quelque chose comme a :

	output d:\assemble\visual41\samples\acc_app\project.acx

OPT_FULL_PATHNAMES
*OPT_DEBUG_IN_ACCESSORY_MODE
*OPT_DEBUG

	lea objet_application,a1

	include project.def
	include visual41.s
	include project.hs
	include project.obj

	comment HEAD=7
	section TEXT

;---------------------------------------------------------------------------
	; Exemple de programme Visual Assembleur 4.1
	; Proprit : marche aussi bien en accessoire qu'en programme

	; ce programme rpond aux quatre lois de l'ouverture :
	; 1) ligne de commande
	; 2) si pas de ligne de commande : slecteur de fichiers
	;    et si annule, CTRL+O -> redemande
	; 3) en accessoire : un click appelle le slecteur
	; 4) en accessoire, supporte le VA_START

	; de surcroit, en accessoire il ouvre une fentre permettant
	; grace  son menu d'avoir un comportement identique  un PRG
;---------------------------------------------------------------------------

my_inits:
	ifnd OPT_DEBUG_IN_ACCESSORY_MODE
	tst GWVA_APP_OBJ_IS_ACC_PRG
	bne.s .prg
	endc

	bset 
#GWVA_WIN_BIT_AMENU,objet_fenetre_fond+GWVA_WIND_OBJ_PROPERTIES+1	; menu 
dans la fenetre

	ifd OPT_DEBUG_IN_ACCESSORY_MODE
	bra.s acc_open
	else
	rts
	endc

.prg:	bset #GWVA_APP_BIT_MENU,objet_application+GWVA_APP_OBJ_FLAGS	; 
menu principal
	bset 
#GWVA_APP_BIT_BACKGROUND,objet_application+GWVA_APP_OBJ_FLAGS	; fond

	tst d0
	bne.s open_object		; cmd line present

	bra.s menu_open

acc_open:	lea objet_fenetre_fond,a0
	bra GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND

menu_open:	lea texte,a0		; 35 chars max.
	lea mask,a1			; 18 caracteres max
	lea 0,a2
	bsr FILE_SELECTOR
	tst d0
	ble .annule

	move.l a1,a0
	bra.s open_object

.annule:	rts

menu_information:
	lea objet_fenetre_info,a0
	bra GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND

routine_menu_quit:
app_term:
acc_close:
	tst GWVA_APP_OBJ_IS_ACC_PRG
	bne VISUAL40_END

	rts

other_message:
	cmp.w #VA_START,d0
	beq.s .va_start
	rts

.va_start:	move.l 6(a0),a0

	save.l a0
	bsr GWVA_APP_OBJ_PRG_ACC_OPEN_VSTATION
	load.l a0
	tst d7
	bge open_object

	rts	; pas b infinie si jamais 1 vstation se libre ?

open_object:		; ici : a0 pointeur sur un pathname !

	; le programme ...

	rts

	section DATA

texte:	dc.b 'Genuwax for the best : ',0
mask:	dc.b '*.S,*.BAK',0

END
