	16 . Un programme au pas … pas



	Voici un petit exemple explicatif pour vos premiers pas dans le Visual 
Assembleur : "START.S".


	16.1 Le fichier START.DEF

	; Definition file for Genuwax Visual Assembler 4.0
	; (c) GenuWax 10/VIII/95

	; put here all the labels refering to the modules/library
	; you want to include/use in your program
	; also defined here : the stack size !

GWVA_APP_OBJ_STACK_SIZE = 1024
GWVA_MAX_PATH_LENGTH = 128

GWVA_APP_DEP_LIB_VERSION = 4
GWVA_APP_DEP_LIB_MAJOR = 0
GWVA_APP_DEP_LIB_MINOR = 35

;MDL_TOS	; |
MDL_GEM	; | exclusif

MDL_RELOCATE_RSC

MDL_EVENTS

MDL_MENU

MDL_WIND
GWVA_APP_OBJ_MAX_NUMBER_WIND = 8

MDL_WIND_CUSTOM
MDL_WIND_TEXT
MDL_WIND_FORM
MDL_WIND_BITMAP

;LIB_HEXA
;LIB_DECI
;LIB_PALETTE
LIB_GET_FLENGTH
LIB_LOAD_FILE_IN_MEM
LIB_FILESELECTOR
LIB_FORMULARY

;FLG_INIBE_COLOR

	16.2 Le fichier START.HS

	; Indice du ressource pour START *

MENU_PRINCIPAL = 0	; Arbre menu *
MNU_FONTES = 5	; TITLE dans l'arbre MENU_PRINCIPAL *
MNU_DESK_INFO = 8	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_WIND1 = 17	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_WIND2 = 18	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_WIND3 = 19	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_WIND4 = 20	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_WIND5 = 21	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_WIND6 = 22	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_WIND7 = 23	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_WIND8 = 24	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_WIND9 = 25	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_OPEN_WI = 26	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FILE_QUIT = 27	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FONTES_BITMP = 29	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FONTES_SCALB = 30	; STRING dans l'arbre MENU_PRINCIPAL *
MNU_FONTES_FLYIG = 31	; STRING dans l'arbre MENU_PRINCIPAL *

FORM_BACKGROUND = 1	; FormulaireDialogue *
FORM_BACKGROUND0 = 0	; BOX dans l'arbre FORM_BACKGROUND *
FORM_BACKGROUND1 = 1	; BUTTON dans l'arbre FORM_BACKGROUND 
*

FORM_TOOLBAR1 = 2	; FormulaireDialogue *
TLOBJ_1 = 4   	; IMAGE dans l'arbre FORM_TOOLBAR1 *
TLOBJ_2 = 5   	; IMAGE dans l'arbre FORM_TOOLBAR1 *
TLOBJ_3 = 6   	; IMAGE dans l'arbre FORM_TOOLBAR1 *
TLOBJ_4 = 7   	; IMAGE dans l'arbre FORM_TOOLBAR1 *
TLOBJ_TXT = 31	; BOXTEXT dans l'arbre FORM_TOOLBAR1 *

FORMULAIRE3 = 3	; FormulaireDialogue *
TEXT_DESCRIPT = 3	; FTEXT dans l'arbre FORMULAIRE3 *
TEXT_DESCRIPT2 = 4	; FTEXT dans l'arbre FORMULAIRE3 *
TEXT_BANAL = 5	; TEXT dans l'arbre FORMULAIRE3 *
RADIO_1 = 8   	; BOX dans l'arbre FORMULAIRE3 *
BTON_YES = 9	; BUTTON dans l'arbre FORMULAIRE3 *
BTON_NO = 10  	; BUTTON dans l'arbre FORMULAIRE3 *
BTON_PERHAPS = 11	; BUTTON dans l'arbre FORMULAIRE3 *
BTON_OPTION1 = 12	; BUTTON dans l'arbre FORMULAIRE3 *
BTON_OPTION2 = 13	; BUTTON dans l'arbre FORMULAIRE3 *
POP_QUALITY3D = 15	; BOXTEXT dans l'arbre FORMULAIRE3 *
POP_QUALITY = 16	; BOXTEXT dans l'arbre FORMULAIRE3 *
BTON_DESC_OK = 18	; BUTTON dans l'arbre FORMULAIRE3 *
BTON_ANNULE_DESC = 20	; BUTTON dans l'arbre FORMULAIRE3 *

FORM_TOOLBAR2 = 4	; FormulaireDialogue *

FORM_TOOLBAR3 = 5	; FormulaireDialogue *

FORM_TOOLBOX = 6	; FormulaireDialogue *

ICONIFY_1 = 7	; FormulaireDialogue *

POPUPS = 8   	; FormulaireDialogue *
POPUP_QUALITY = 1	; BOX dans l'arbre POPUPS *
POPUP_90 = 2	; STRING dans l'arbre POPUPS *
POPUP_70 = 3	; STRING dans l'arbre POPUPS *
POPUP_50 = 4	; STRING dans l'arbre POPUPS *
POPUP_30 = 5	; STRING dans l'arbre POPUPS *
POPUP_10 = 6	; STRING dans l'arbre POPUPS *
POPUP_1 = 7   	; STRING dans l'arbre POPUPS *
POPUP_100 = 8	; STRING dans l'arbre POPUPS *
POPUP_QUALITY3D = 9	; BOX dans l'arbre POPUPS *
POPUP_1003D = 16	; STRING dans l'arbre POPUPS *

MENUS_ATTACHES = 9	; FormulaireDialogue *
MENU_PERE1 = 1	; BOX dans l'arbre MENUS_ATTACHES *
OBJ_MENU_PERE1 = 4	; STRING dans l'arbre MENUS_ATTACHES *
MENU_PERE2 = 9	; BOX dans l'arbre MENUS_ATTACHES *
OBJ_MENU_PERE2 = 16	; STRING dans l'arbre MENUS_ATTACHES *
MNU_FATHER_WINDO = 17	; BOX dans l'arbre MENUS_ATTACHES *
MNU_WINDOW1 = 18	; STRING dans l'arbre MENUS_ATTACHES *
MNU_WINDOW2 = 19	; STRING dans l'arbre MENUS_ATTACHES *
MNU_WINDOW3 = 20	; STRING dans l'arbre MENUS_ATTACHES *
MNU_WINDOW4 = 21	; STRING dans l'arbre MENUS_ATTACHES *
MNU_WINDOW6 = 22	; STRING dans l'arbre MENUS_ATTACHES *
MNU_WINDOW5 = 23	; STRING dans l'arbre MENUS_ATTACHES *
MNU_WINDOW7 = 24	; STRING dans l'arbre MENUS_ATTACHES *
MNU_WINDOW9 = 25	; STRING dans l'arbre MENUS_ATTACHES *
MNU_WINDOW8 = 26	; STRING dans l'arbre MENUS_ATTACHES *

FORM_GENERAL = 10	; FormulaireDialogue *
REDRAW_LVL1 = 1	; BOX dans l'arbre FORM_GENERAL *
FGO_EDIT_TIMER = 4	; FTEXT dans l'arbre FORM_GENERAL *
FGO_RADIO_INIT_S = 5	; IBOX dans l'arbre FORM_GENERAL *
FGO_BTON_INIT_Y = 6	; BUTTON dans l'arbre FORM_GENERAL *
FGO_BTON_INIT_N = 7	; BUTTON dans l'arbre FORM_GENERAL *
FGO_BTON_INIT_A = 8	; BUTTON dans l'arbre FORM_GENERAL *
FGO_BTON_AUTO_SA = 9	; BOXCHAR dans l'arbre FORM_GENERAL *
FGO_TEXT_VOXPATH = 12	; TEXT dans l'arbre FORM_GENERAL *
FGO_TEXT_LOGPATH = 13	; TEXT dans l'arbre FORM_GENERAL *
FGO_TEXT_VOXCMD = 15	; TEXT dans l'arbre FORM_GENERAL *
FGO_BTON_LOG_ACT = 16	; BOXCHAR dans l'arbre FORM_GENERAL *
FGO_TEXT_SFAXPAT = 19	; TEXT dans l'arbre FORM_GENERAL *
FGO_TEXT_SFAXCMD = 20	; TEXT dans l'arbre FORM_GENERAL *
FGO_EDIT_FAX_ID = 22	; FTEXT dans l'arbre FORM_GENERAL *
FGO_BTON_OK = 23	; BUTTON dans l'arbre FORM_GENERAL *
FGO_BTON_SAVE = 25	; BUTTON dans l'arbre FORM_GENERAL *

ALERT1 = 0   	; Chaine d'alerte *

CAUTION = 1   	; Chaine d'alerte *


	16.3 Le fichier START.OBJ

DATA
objet_application:	dc.b %00001111		; FLAGS
		dc.b 0			; STATUS
		dc.l 0			; TSR_SIZE
		dc.l name_app		; REG_NAME
		dc.l name_menu		; ACC_NAME
		dc.l table_name_rsc		; RSC_INFO
		dc.w FORM_BACKGROUND		; BACKGROUND_OBJ
		dc.l structure_menu_principal	; MAIN_MENU_PTR
		dc.l 0			; ALL_ICON_PTR
		dcb.w 10,0			; 
M1FLAG,M1X,M1Y,M1W,M1H,M2FLAG,M2X,M2Y,M2W,M2H
		dc.l 1000			; COUNT (TIMER)
		dc.l my_inits		; CUSTOM_INITS
		dc.l acc_open		; AC_OPEN
		dc.l acc_close		; AC_CLOSE
		dc.l app_term		; AP_TERM
		dc.l 0			; AP_TFAIL
		dc.l 0			; SHUT_COMPLETED
		dc.l 0			; RESCH_COMPLETED
		dc.l 0			; AP_DRAG_DROP
		dc.l 0			; SH_WDRAW
		dc.l 0			; CH_EXIT
		dc.l other_message		; ALL_OTHER
		dc.l 0			; EVNT_KEYBD
		dc.l 0			; EVNT_BUTTON
		dc.l 0			; EVNT_MOUSE1
		dc.l 0			; EVNT_MOUSE2
		dc.l 0			; EVNT_TIMER

structure_menu_principal:
		dc.w MENU_PRINCIPAL		; INDEX
		dc.l 0			; PTR
		dc.w -1			; SCROLL_INDEX
		dc.l liste_sous_menus		; LIST_ATTACH_PTR

		dc.w MNU_DESK_INFO,$00*256+'i'-'a'+1; 
MENU_STRUCT_START_LIST
		dc.l information
		dc.w MNU_FILE_WIND1,$08*256+$80+$78	; Alt - 1
		dc.l menu_wind1
		dc.w MNU_FILE_WIND2,$00*256+$02	; Ctrl - ‚ (Que en 
France)
		dc.l menu_wind2
		dc.w MNU_FILE_WIND3,$09*256+$80+$7a	; Shift - Alt - 3
		dc.l menu_wind3
		dc.w MNU_FILE_WIND4,$00*256+$14	; Shift - Ctrl - 4 (Que 
en France)
		dc.l menu_wind4
		dc.w MNU_FILE_WIND5,0
		dc.l menu_wind5
		dc.w MNU_FILE_WIND6,$00*256+$1d	; Ctrl - Ý (n'est pas 
dans la table US)
		dc.l menu_wind6
		dc.w MNU_FILE_WIND7,$09*256+$80+$7e	; Shift - Alt - 7
		dc.l menu_wind7
		dc.w MNU_FILE_WIND8,$00*256+$18	; Shift - Ctrl - 8
		dc.l menu_wind8
		dc.w MNU_FILE_WIND9,$08*256+'a'	; Alt - A
		dc.l menu_wind9
		dc.w MNU_FILE_QUIT,$00*256+$11	; Ctrl - Q
		dc.l menu_quit

		dc.w -1

liste_sous_menus:	dc.l structure_sous_menu_1
		dc.l structure_sous_menu_2
		dc.l structure_sous_menu_3
		dc.l structure_sous_menu_4
		dc.l 0

structure_sous_menu_1:
		dc.w MENU_PRINCIPAL		; TREE_OBJ_ATTACHED
		dc.w MNU_FONTES_FLYIG		; OBJ_IDX_ATTACHED
		dc.w MENUS_ATTACHES		; TREE
		dc.w MENU_PERE1		; INDEX
		dc.w OBJ_MENU_PERE1		; WHICH_ALIGN
		dc.w 0			; SCROLL

		dc.w -1			; START_LIST

structure_sous_menu_2:
		dc.w MENU_PRINCIPAL		; TREE_OBJ_ATTACHED
		dc.w MNU_FONTES_BITMP		; OBJ_IDX_ATTACHED
		dc.w MENUS_ATTACHES		; TREE
		dc.w MENU_PERE2		; INDEX
		dc.w OBJ_MENU_PERE2		; WHICH_ALIGN
		dc.w 0			; SCROLL

		dc.w -1			; START_LIST

structure_sous_menu_3:
		dc.w MENUS_ATTACHES		; TREE_OBJ_ATTACHED
		dc.w OBJ_MENU_PERE1		; OBJ_IDX_ATTACHED
		dc.w MENUS_ATTACHES		; TREE
		dc.w MENU_PERE2		; INDEX
		dc.w OBJ_MENU_PERE2		; WHICH_ALIGN
		dc.w 0			; SCROLL

		dc.w -1			; START_LIST

structure_sous_menu_4:
		dc.w MENU_PRINCIPAL		; TREE_OBJ_ATTACHED
		dc.w MNU_FILE_OPEN_WI		; OBJ_IDX_ATTACHED
		dc.w MENUS_ATTACHES		; TREE
		dc.w MNU_FATHER_WINDO		; INDEX
		dc.w MNU_WINDOW9		; WHICH_ALIGN
		dc.w 0			; SCROLL

		dc.w MNU_WINDOW1,0		; START_LIST
		dc.l menu_wind1
		dc.w MNU_WINDOW2,0
		dc.l menu_wind2
		dc.w MNU_WINDOW3,0
		dc.l menu_wind3
		dc.w MNU_WINDOW4,0
		dc.l menu_wind4
*		dc.w MNU_WINDOW5,0
*		dc.l menu_wind5
		dc.w MNU_WINDOW6,0
		dc.l menu_wind6
		dc.w MNU_WINDOW7,0
		dc.l menu_wind7
		dc.w MNU_WINDOW8,0
		dc.l menu_wind8
		dc.w MNU_WINDOW9,0
		dc.l menu_wind9
		dc.w -1

name_app:		dc.b 'START000',0
name_menu:		dc.b '  Exemple Visual 4.0  ',0

	ifnd MDL_RELOCATE_RSC
	ifnd OPT_FULL_PATHNAMES
rsc_2_colors:	dc.b 'start.rsc',0
rsc_16_colors:	dc.b 'start.rsc',0
	else
rsc_2_colors:	dc.b 'd:\assemble\visual40\start\start.rsc',0
rsc_16_colors:	dc.b 'd:\assemble\visual40\start\start.rsc',0
	endc
	else
rsc_2_colors:	incbin d:\assemble\visual40\start\start.rsc
rsc_16_colors:	incbin d:\assemble\visual40\start\start.rsc
	endc
even

table_name_rsc:	dc.l rsc_2_colors
		dc.l rsc_2_colors
		dc.l rsc_16_colors
		dc.l rsc_16_colors
		dc.l rsc_16_colors
	;-------------------------------------------
objet_fenetre1:	dc.w %0100111111111111		; FLAGS
		dc.w 0			; STATUS
		dc.w %0000000000000001		; PROPERTIES
		dc.w 1			; TOPABLE_STATE
		dc.l window1_name,window1_info	; NAME,INFO
		dc.l 0			; ICON_WIND_PTR
		dc.l toolbar_wind1		; TOOLBAR_SPEC_PTR
		dc.w 0			; TOOLBAR_HEIGHT
		dc.l 0			; MENU_SPEC_PTR
		dc.w 0			; MENU_HEIGHT
		dc.l table_touche_fenetre1	; KEY_TABLE

		dc.w -1,10			; FIRST_X,FIRST_Y
		dc.w 320,240		; FIRST_W,FIRST_H
		dc.w 640,480		; INTERNAL_MAX_W,INTERNAL_MAX_H

		dc.w -1			; GEM_HANDLE
		dcb.w 10,0			; 
EXTERNAL_X,EXTERNAL_Y,EXTERNAL_W,EXTERNAL_H,INTERNAL_X,INTERNAL_Y,INTERNAL_W,INTERNAL_H,EXTERNAL_MAX_W,EXTERNAL_MAX_H
		dc.w 1,500,1000,500		; 
SLIDER_V_POS,SLIDER_V_SIZE,SLIDER_H_POS,SLIDER_H_SIZE

		dc.w 1			; TYPE
		dc.l 0			; SPEC_PTR
		dcb.l 2,0			; USER_PTR1,USER_PTR2

		dc.w WM_AFTER+WM_CLOSED		; START_EVNT_LIST
		dc.l event_window1_closed
		dc.w WM_BEFORE+WM_MOVED
		dc.l event_window1_moved
		dc.w WM_AFTER+WM_REDRAW
		dc.l event_window1_redraw
		dc.w -1

toolbar_wind1:	dc.w FORM_TOOLBAR1		; FORM_IDX
		dc.l 0			; FORM_PTR
		dc.l 0			; CLICK_ROUTINE
		dcb.w 8,0			; 
FOCUSED_TXT,CURSOR_POS,L_SCULPT,T_SCULPT,R_SCULPT,B_SCULPT,W_SCULPT,H_SCULPT
		dc.w 0			; IS_CLONE_FORM
		dc.l 0			; CLONE_FORM_SAVE
		dc.l 0			; CLONE_MAIN_PTR

		dc.w TLOBJ_1		; obj idx
		dc.w 0			; shortcut(0=no)
		dc.w GWVA_FORM_WIND_OBJECT_BUTTON
		dc.l tool_obj1		; ptr struct

		dc.w -1

tool_obj1:		dc.w 0			; STATE
		dc.w GWVA_EVNT_CLICK		; START_EVNT_LIST
		dc.l wind1_tool_obj1_click
		dc.w -1

table_touche_fenetre1:	dc.w 1,$00*256+'c'-'a'+1
		dc.l fenetre1_control_c
		dc.w -1

window1_name:	dc.b 'Window custom 1 name',0
window1_info:	dc.b 'Window custom 1 info',0
even
	;-------------------------------------------
objet_fenetre2:	dc.w %0100111111111111		; FLAGS
		dc.w 0			; STATUS
		dc.w %0000000000000000		; PROPERTIES
		dc.w 0			; TOPABLE_STATE
		dc.l window2_name,window2_info	; NAME,INFO
		dc.l 0			; ICON_WIND_PTR
		dc.l 0			; TOOLBAR_SPEC_PTR
		dc.w 0			; TOOLBAR_HEIGHT
		dc.l 0			; MENU_SPEC_PTR
		dc.w 0			; MENU_HEIGHT
		dc.l 0			; KEY_TABLE

		dc.w -1,10			; FIRST_X,FIRST_Y
		dc.w 320,240		; FIRST_W,FIRST_H
		dc.w 640,480		; INTERNAL_MAX_W,INTERNAL_MAX_H

		dc.w -1			; GEM_HANDLE
		dcb.w 10,0			; 
EXTERNAL_X,EXTERNAL_Y,EXTERNAL_W,EXTERNAL_H,INTERNAL_X,INTERNAL_Y,INTERNAL_W,INTERNAL_H,EXTERNAL_MAX_W,EXTERNAL_MAX_H
		dc.w 500,500,500,-1		; 
SLIDER_V_POS,SLIDER_V_SIZE,SLIDER_H_POS,SLIDER_H_SIZE

		dc.w 1			; TYPE
		dc.l 0			; SPEC_PTR
		dcb.l 2,0			; USER_PTR1,USER_PTR2

*		dc.w WM_AFTER+WM_CLOSED		; START_EVNT_LIST
*		dc.l event_window2_closed
		dc.w -1

window2_name:	dc.b 'Window custom 2 name',0
window2_info:	dc.b 'Window custom 2 info',0
even
	;-------------------------------------------
objet_fenetre3:	dc.w %100111111111111		; FLAGS
		dc.w 0			; STATUS
		dc.w %0000000000000001		; PROPERTIES
		dc.w 0			; TOPABLE_STATE
		dc.l window3_name,window3_info	; NAME,INFO
		dc.l 0			; ICON_WIND_PTR
		dc.l wind3_toolbar		; TOOLBAR_SPEC_PTR
		dc.w 0			; TOOLBAR_HEIGHT
		dc.l 0			; MENU_SPEC_PTR
		dc.w 0			; MENU_HEIGHT
		dc.l 0			; KEY_TABLE

		dc.w -1,20			; FIRST_X,FIRST_Y
		dc.w 320,240		; FIRST_W,FIRST_H
		dc.w 640,480		; INTERNAL_MAX_W,INTERNAL_MAX_H

		dc.w -1			; GEM_HANDLE
		dcb.w 10,0			; 
EXTERNAL_X,EXTERNAL_Y,EXTERNAL_W,EXTERNAL_H,INTERNAL_X,INTERNAL_Y,INTERNAL_W,INTERNAL_H,EXTERNAL_MAX_W,EXTERNAL_MAX_H
		dc.w 10,10,10,10		; 
SLIDER_V_POS,SLIDER_V_SIZE,SLIDER_H_POS,SLIDER_H_SIZE

		dc.w 3			; TYPE
		dc.l window3_specs		; SPEC_PTR
		dcb.l 2,0			; USER_PTR1,USER_PTR2

		dc.w WM_BEFORE+WM_REDRAW	; START_EVNT_LIST
		dc.l event_window3_redraw

		dc.w WM_GWVA_NEWIND+WM_BEFORE
		dc.l event_window3_created

		dc.w WM_GWVA_OPENED+WM_BEFORE
		dc.l event_window3_opened

		dc.w WM_CLOSED+WM_BEFORE
		dc.l event_window3_closed

		dc.w -1

wind3_toolbar:	dc.w FORM_TOOLBAR2		; FORM_IDX
		dc.l 0			; FORM_PTR
		dc.l 0			; CLICK_ROUTINE
		dcb.w 8,0			; 
FOCUSED_TXT,CURSOR_POS,L_SCULPT,T_SCULPT,R_SCULPT,B_SCULPT,W_SCULPT,H_SCULPT
		dc.w 0			; IS_CLONE_FORM
		dc.l 0			; CLONE_FORM_SAVE
		dc.l 0			; CLONE_MAIN_PTR
		dc.w -1

window3_specs:	dc.w FORMULAIRE3		; FORM_IDX
		dc.l 0			; FORM_PTR
		dc.l 0			; CLICK_ROUTINE
		dc.w TEXT_DESCRIPT		; FOCUSED_TXT
		dcb.w 7,0			; 
CURSOR_POS,L_SCULPT,T_SCULPT,R_SCULPT,B_SCULPT,W_SCULPT,H_SCULPT
		dc.w 0			; IS_CLONE_FORM
		dc.l 0			; CLONE_FORM_SAVE
		dc.l 0			; CLONE_MAIN_PTR

		dc.w BTON_DESC_OK		; obj idx
		dc.w $08*256+'o'		; shortcut(0=no)
		dc.w GWVA_FORM_WIND_OBJECT_BUTTON
		dc.l struct_bton_ok1		; ptr struct

		dc.w BTON_ANNULE_DESC		; obj idx
		dc.w 0			; shortcut(0=no)
		dc.w GWVA_FORM_WIND_OBJECT_BUTTON
		dc.l struct_bton_cancel		; ptr struct

		dc.w POP_QUALITY		; obj idx
		dc.w 0			; shortcut(0=no)
		dc.w GWVA_FORM_WIND_OBJECT_MENU_POPUP
		dc.l struct_popup1		; ptr struct

		dc.w POP_QUALITY3D		; obj idx
		dc.w 0			; shortcut(0=no)
		dc.w GWVA_FORM_WIND_OBJECT_MENU_POPUP
		dc.l struct_popup2		; ptr struct

		dc.w RADIO_1		; obj idx
		dc.w 0			; shortcut(0=no)
		dc.w GWVA_FORM_WIND_OBJECT_RADIO_BUTTON
		dc.l struct_radio1		; ptr struct

		dc.w BTON_OPTION1		; obj idx
		dc.w $08*256+'z'		; shortcut(0=no)
		dc.w GWVA_FORM_WIND_OBJECT_BUTTON
		dc.l struct_opt1		; ptr struct

		dc.w -1

struct_opt1:	dc.w 0			; STATE
		dc.w GWVA_EVNT_UNSELECTED	; START_EVNT_LIST
		dc.l w3_option1_unselct
		dc.w -1

struct_radio1:	dc.w -1			; SELECTION
		dc.l radio_bton_click		; CHANGE_ROUTINE

struct_bton_ok1:	dc.w 0			; STATE
		dc.w GWVA_EVNT_CLICK		; START_EVNT_LIST
		dc.l wind3_bton_ok_click
		dc.w -1

struct_bton_cancel:	dc.w 0			; STATE
		dc.w GWVA_EVNT_CLICK		; START_EVNT_LIST
		dc.l wind3_bton_cancel_click
		dc.w -1

struct_popup1:	dc.w POPUPS			; TREE_FORM
		dc.w POPUP_QUALITY		; FORM_IDX
		dc.w POPUP_100		; SELECTION
		dc.l popup1_changed		; CHANGE_ROUTINE

struct_popup2:	dc.w POPUPS			; TREE_FORM
		dc.w POPUP_QUALITY3D		; FORM_IDX
		dc.w POPUP_1003D		; SELECTION
		dc.l 0			; CHANGE_ROUTINE

window3_name:	dc.b 'Window form 3 name',0
window3_info:	dc.b 'Window form 3 info',0
even
	;-------------------------------------------
objet_fenetre4:	dc.w %0100000000011111		; FLAGS
		dc.w 0			; STATUS
		dc.w %0000001100000000		; PROPERTIES
		dc.w -1			; TOPABLE_STATE
		dc.l window4_name,window4_info	; NAME,INFO
		dc.l 0			; ICON_WIND_PTR
		dc.l 0			; TOOLBAR_SPEC_PTR
		dc.w 0			; TOOLBAR_HEIGHT
		dc.l 0			; MENU_SPEC_PTR
		dc.w 0			; MENU_HEIGHT
		dc.l 0			; KEY_TABLE

		dc.w -1,-1			; FIRST_X,FIRST_Y
		dc.w 320,240		; FIRST_W,FIRST_H
		dc.w 640,480		; INTERNAL_MAX_W,INTERNAL_MAX_H

		dc.w -1			; GEM_HANDLE
		dcb.w 10,0			; 
EXTERNAL_X,EXTERNAL_Y,EXTERNAL_W,EXTERNAL_H,INTERNAL_X,INTERNAL_Y,INTERNAL_W,INTERNAL_H,EXTERNAL_MAX_W,EXTERNAL_MAX_H
		dc.w 100,100,100,100		; 
SLIDER_V_POS,SLIDER_V_SIZE,SLIDER_H_POS,SLIDER_H_SIZE

		dc.w 3			; TYPE
		dc.l window4_specs		; SPEC_PTR
		dcb.l 2,0			; USER_PTR1,USER_PTR2

		dc.w -1			; START_EVNT_LIST

window4_specs:	dc.w FORM_GENERAL		; FORM_IDX
		dc.l 0			; FORM_PTR
		dc.l 0			; CLICK_ROUTINE
		dcb.w 8,0			; 
FOCUSED_TXT,CURSOR_POS,L_SCULPT,T_SCULPT,R_SCULPT,B_SCULPT,W_SCULPT,H_SCULPT
		dc.w 0			; IS_CLONE_FORM
		dc.l 0			; CLONE_FORM_SAVE
		dc.l 0			; CLONE_MAIN_PTR

		dc.w -1

window4_name:	dc.b 'Window form 4 name',0
window4_info:	dc.b 'Window form 4 info',0
even
	;-------------------------------------------
objet_fenetre5:	dc.w %0100000000001001		; FLAGS
		dc.w 0			; STATUS
		dc.w %0000000000000000		; PROPERTIES
		dc.w 0			; TOPABLE_STATE
		dc.l window5_name,0		; NAME,INFO
		dc.l 0			; ICON_WIND_PTR
		dc.l 0			; TOOLBAR_SPEC_PTR
		dc.w 0			; TOOLBAR_HEIGHT
		dc.l 0			; MENU_SPEC_PTR
		dc.w 0			; MENU_HEIGHT
		dc.l 0			; KEY_TABLE

		dc.w 0,0			; FIRST_X,FIRST_Y
		dc.w 320,240		; FIRST_W,FIRST_H
		dc.w 640,480		; INTERNAL_MAX_W,INTERNAL_MAX_H

		dc.w -1			; GEM_HANDLE
		dcb.w 10,0			; 
EXTERNAL_X,EXTERNAL_Y,EXTERNAL_W,EXTERNAL_H,INTERNAL_X,INTERNAL_Y,INTERNAL_W,INTERNAL_H,EXTERNAL_MAX_W,EXTERNAL_MAX_H
		dc.w 1,1000,1,1000		; 
SLIDER_V_POS,SLIDER_V_SIZE,SLIDER_H_POS,SLIDER_H_SIZE

		dc.w 3			; TYPE
		dc.l window5_specs		; SPEC_PTR
		dcb.l 2,0			; USER_PTR1,USER_PTR2

		dc.w -1			; START_EVNT_LIST

window5_specs:	dc.w FORM_TOOLBOX		; FORM_IDX
		dc.l 0			; FORM_PTR
		dc.l 0			; CLICK_ROUTINE
		dcb.w 8,0			; 
FOCUSED_TXT,CURSOR_POS,L_SCULPT,T_SCULPT,R_SCULPT,B_SCULPT,W_SCULPT,H_SCULPT
		dc.w 0			; IS_CLONE_FORM
		dc.l 0			; CLONE_FORM_SAVE
		dc.l 0			; CLONE_MAIN_PTR

		dc.w -1

window5_name:	dc.b 'TOOLBOX',0
even
	;-------------------------------------------
objet_fenetre6:	dc.w %0100111111111111		; FLAGS
		dc.w 0			; STATUS
		dc.w %0000000000000001		; PROPERTIES
		dc.w 0			; TOPABLE_STATE
		dc.l window6_name,window6_info	; NAME,INFO
		dc.l 0			; ICON_WIND_PTR
		dc.l toolbar_wind6		; TOOLBAR_SPEC_PTR
		dc.w 0			; TOOLBAR_HEIGHT
		dc.l 0			; MENU_SPEC_PTR
		dc.w 0			; MENU_HEIGHT
		dc.l 0			; KEY_TABLE

		dc.w -1,100			; FIRST_X,FIRST_Y
		dc.w 10,10			; FIRST_W,FIRST_H
		dc.w 0,0			; INTERNAL_MAX_W,INTERNAL_MAX_H

		dc.w -1			; GEM_HANDLE
		dcb.w 10,0			; 
EXTERNAL_X,EXTERNAL_Y,EXTERNAL_W,EXTERNAL_H,INTERNAL_X,INTERNAL_Y,INTERNAL_W,INTERNAL_H,EXTERNAL_MAX_W,EXTERNAL_MAX_H
		dc.w 1000,1000,1000,1000	; 
SLIDER_V_POS,SLIDER_V_SIZE,SLIDER_H_POS,SLIDER_H_SIZE

		dc.w 2			; TYPE
		dc.l spec_wind6_texte		; SPEC_PTR
		dcb.l 2,0			; USER_PTR1,USER_PTR2

		dc.w WM_ARROWED+WM_BEFORE	; START_EVNT_LIST
		dc.l event_window6_arrowed

		dc.w -1

spec_wind6_texte:	dc.w 80,100			; 
NB_COLONNES,NB_LIGNES
		dc.w 13			; FNT_SIZE
		dcb.w 2,0			; CELL_WIDTH,CELL_HEIGHT
		dc.l 0			; MALOC
		dcb.w 8,0			; 
CUR_BUF_COL,CUR_BUF_LIGN,CUR_AFF_COL,CUR_AFF_LIGN,BUF_COLONNE,BUF_LIGNE,AFF_COLONNE,AFF_LIGNE
		dc.w 0			; IS_CLONE_FORM
		dc.l 0			; CLONE_FORM_SAVE
		dc.l 0			; CLONE_MAIN_PTR
	
toolbar_wind6:	dc.w FORM_TOOLBAR3		; FORM_IDX
		dc.l 0			; FORM_PTR
		dc.l 0			; CLICK_ROUTINE
		dcb.w 8,0			; 
FOCUSED_TXT,CURSOR_POS,L_SCULPT,T_SCULPT,R_SCULPT,B_SCULPT,W_SCULPT,H_SCULPT
		dc.w 0			; IS_CLONE_FORM
		dc.l 0			; CLONE_FORM_SAVE
		dc.l 0			; CLONE_MAIN_PTR

		dc.w -1

window6_name:	dc.b 'Window text 6 name',0
window6_info:	dc.b 'Window text 6 info',0
even
	;-------------------------------------------
objet_fenetre7:
*		dc.w %0100111111111111		; FLAGS
		dc.w %0100000000011111		; FLAGS
		dc.w 0			; STATUS
		dc.w %0000000000000001		; PROPERTIES
		dc.w 0			; TOPABLE_STATE
		dc.l window7_name,window7_info	; NAME,INFO
		dc.l 0			; ICON_WIND_PTR
		dc.l toolbar_wind7		; TOOLBAR_SPEC_PTR
		dc.w 0			; TOOLBAR_HEIGHT
		dc.l 0			; MENU_SPEC_PTR
		dc.w 0			; MENU_HEIGHT
		dc.l 0			; KEY_TABLE

		dc.w 10,10			; FIRST_X,FIRST_Y
		dc.w 160,100		; FIRST_W,FIRST_H
		dc.w 0,0			; INTERNAL_MAX_W,INTERNAL_MAX_H

		dc.w -1			; GEM_HANDLE
		dcb.w 10,0			; 
EXTERNAL_X,EXTERNAL_Y,EXTERNAL_W,EXTERNAL_H,INTERNAL_X,INTERNAL_Y,INTERNAL_W,INTERNAL_H,EXTERNAL_MAX_W,EXTERNAL_MAX_H
		dc.w 1000,1000,1000,1000	; 
SLIDER_V_POS,SLIDER_V_SIZE,SLIDER_H_POS,SLIDER_H_SIZE

		dc.w 4			; TYPE
		dc.l spec_wind7_bitmap		; SPEC_PTR
		dcb.l 2,0			; USER_PTR1,USER_PTR2

		; START_EVNT_LIST

		dc.w WM_AFTER+WM_CLOSED		; START_EVNT_LIST
		dc.l event_window_bitmap_closed

		dc.w WM_BEFORE+WM_FULLED
		dc.l event_window_bitmap_fulled

		dc.w -1


spec_wind7_bitmap:	dc.w 0,0			; IMG_WIDTH,IMG_HEIGHT
		dc.l 0			; DATA_PTR
		dc.l 0			; PAL_PTR
		dc.w 0			; NBR_BITPLANES
		dc.w 0,0			; AFF_DX, AFF_DY

toolbar_wind7:	dc.w FORM_TOOLBAR3		; FORM_IDX
		dc.l 0			; FORM_PTR
		dc.l 0			; CLICK_ROUTINE
		dcb.w 8,0			; 
FOCUSED_TXT,CURSOR_POS,L_SCULPT,T_SCULPT,R_SCULPT,B_SCULPT,W_SCULPT,H_SCULPT
		dc.w 0			; IS_CLONE_FORM
		dc.l 0			; CLONE_FORM_SAVE
		dc.l 0			; CLONE_MAIN_PTR

		dc.w -1

window7_name:	dc.b 'Window bitmap 7 16,name',0
window7_info:	dc.b 'Graphics ½ RABEARIVELO Solofonirina using NEON 
3D',0
even
	;-------------------------------------------
objet_fenetre8:	dc.w %0100111111111111		; FLAGS
		dc.w 0			; STATUS
		dc.w %0000000000000000		; PROPERTIES
		dc.w 0			; TOPABLE_STATE
		dc.l window8_name,window8_info	; NAME,INFO
		dc.l 0			; ICON_WIND_PTR
		dc.l 0			; TOOLBAR_SPEC_PTR
		dc.w 0			; TOOLBAR_HEIGHT
		dc.l 0			; MENU_SPEC_PTR
		dc.w 0			; MENU_HEIGHT
		dc.l 0			; KEY_TABLE

		dc.w 10,10			; FIRST_X,FIRST_Y
		dc.w 160,100		; FIRST_W,FIRST_H
		dc.w 0,0			; INTERNAL_MAX_W,INTERNAL_MAX_H

		dc.w -1			; GEM_HANDLE
		dcb.w 10,0			; 
EXTERNAL_X,EXTERNAL_Y,EXTERNAL_W,EXTERNAL_H,INTERNAL_X,INTERNAL_Y,INTERNAL_W,INTERNAL_H,EXTERNAL_MAX_W,EXTERNAL_MAX_H
		dc.w 1000,1000,1000,1000	; 
SLIDER_V_POS,SLIDER_V_SIZE,SLIDER_H_POS,SLIDER_H_SIZE

		dc.w 4			; TYPE
		dc.l spec_wind8_bitmap		; SPEC_PTR
		dcb.l 2,0			; USER_PTR1,USER_PTR2

		; START_EVNT_LIST

		dc.w WM_AFTER+WM_CLOSED		; START_EVNT_LIST
		dc.l event_window_bitmap_closed

		dc.w -1


spec_wind8_bitmap:	dc.w 0,0			; IMG_WIDTH,IMG_HEIGHT
		dc.l 0			; DATA_PTR
		dc.l 0			; PAL_PTR
		dc.w 0			; NBR_BITPLANES
		dc.w 0,0			; AFF_DX, AFF_DY

window8_name:	dc.b 'Window bitmap 8 TC, name',0
window8_info:	dc.b 'Graphics ½ RABEARIVELO Solofonirina using NEON 
3D',0
even
	;-------------------------------------------
objet_fenetre9:	dc.w %0100111111111111		; FLAGS
		dc.w 0			; STATUS
		dc.w %0001001100000000		; PROPERTIES
		dc.w 0			; TOPABLE_STATE
		dc.l window9_name,window9_info	; NAME,INFO
		dc.l 0			; ICON_WIND_PTR
		dc.l 0			; TOOLBAR_SPEC_PTR
		dc.w 0			; TOOLBAR_HEIGHT
		dc.l 0			; MENU_SPEC_PTR
		dc.w 0			; MENU_HEIGHT
		dc.l 0			; KEY_TABLE

		dc.w 10,10			; FIRST_X,FIRST_Y
		dc.w 160,100		; FIRST_W,FIRST_H
		dc.w 0,0			; INTERNAL_MAX_W,INTERNAL_MAX_H

		dc.w -1			; GEM_HANDLE
		dcb.w 10,0			; 
EXTERNAL_X,EXTERNAL_Y,EXTERNAL_W,EXTERNAL_H,INTERNAL_X,INTERNAL_Y,INTERNAL_W,INTERNAL_H,EXTERNAL_MAX_W,EXTERNAL_MAX_H
		dc.w 1000,1000,1000,1000	; 
SLIDER_V_POS,SLIDER_V_SIZE,SLIDER_H_POS,SLIDER_H_SIZE

		dc.w 4			; TYPE
		dc.l spec_wind9_bitmap		; SPEC_PTR
		dcb.l 2,0			; USER_PTR1,USER_PTR2

		; START_EVNT_LIST
		dc.w -1

spec_wind9_bitmap:	dc.w 0,0			; IMG_WIDTH,IMG_HEIGHT
		dc.l 0			; DATA_PTR
		dc.l 0			; PAL_PTR
		dc.w 0			; NBR_BITPLANES
		dc.w 0,0			; AFF_DX, AFF_DY

window9_name:	dc.b 'Window bitmap 9 256c, name',0
window9_info:	dc.b 'Graphics ½ RABEARIVELO Solofonirina using NEON 
3D',0
even


	16.4 Le fichier START.S

	output d:\assemble\visual40\start\start.acx

OPT_FULL_PATHNAMES	; pour avoir le chemin complet du ressource pendant le 
d‚bug

	lea objet_application,a1

	include start.def
	include visual40.s
	include start.hs
	include start.obj

	comment HEAD=7
	section TEXT

*--------------------------------------------------------------------------*
	; Ceci est le programme de r‚f‚rence pour le Visual Assembleur 4.0
	; Il utilise presque toutes les fonctionnalit‚s de base (pas les librairies)
	; C'est celui que les concepteurs du V.A testent en premier quand ils
	; intŠgrent une nouvelle fonctionalit‚.

my_inits:
	lea objet_fenetre5,a0
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND

	move #CAUTION,d0
	move #3,d1
	bsr RSC_ALERT_BOX

	rts

		*--------------------------*

app_term:
menu_quit:
	bra VISUAL40_END

		*--------------------------*

information:move.w #FORM_GENERAL,d0
	bsr GWVA_PRG_MODAL_FORM
	rts

		*--------------------------*

acc_open:	lea texte,a0		; 35 chars max.
	lea mask,a1			; 18 caracteres max
	lea 0,a2			; pas de s‚lection par d‚faut
	bsr FILE_SELECTOR
	tst d0
	ble.s .annule		; annule ou erreur ?

	move #ALERT1,d0		; exemple d'alerte dans le ressource
	move #2,d1
	bsr RSC_ALERT_BOX

.annule:	rts

		*--------------------------*

acc_close:	rts

		*--------------------------*

other_message:
	rts

		*--------------------------*

menu_wind1:
	; Attention cette fenˆtre a TOPABLE_STATE = 1
	; elle est donc untopable : jamais en premier plan !
	; quand on l'ouvre : elle se met derriŠre (untop) toute seule!

	lea objet_fenetre1,a0
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	rts

	; REMARQUE GENERALE : optimisation, on peut remplacer 	; un BSR label 
suivi d'un RTS par un BRA
	; c'est moins lisible ... a vous de voir

menu_wind2:
	; Attention : cette fenˆtre est d‚clar‚e CUSTOM
	; mais on ne gŠre aucun des messages de redraw
	; contrairement … le fenˆtre 1 !
	; r‚sultat : le contenu est erratique
	; int‚ressant malgr‚ tout pour voir comment fat le GEM !

	lea objet_fenetre2,a0
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	rts

menu_wind3:	lea objet_fenetre3,a0
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	rts

menu_wind4:
	; Attention cette fenˆtre a TOPABLE_STATE = -1
	; elle est donc un-untopable : jamais au second plan !
	; quand on ouvre une autre fenˆtre, elle se re-top toute seule

	lea objet_fenetre4,a0
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	rts

menu_wind5:	lea objet_fenetre5,a0
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	rts

menu_wind6:	lea objet_fenetre6,a0
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	; si elle existe d‚j… elle ne sera pas cr‚ee

	lea objet_fenetre6,a0
	lea montexte,a1
	bsr GWVA_WTEXT_OBJ_PRG_WRITE_IN_WINDOW
	; met le texte dans la fenˆtre et l'affiche
	rts

DATA
montexte:	dc.b "C'est nous les plus meilleurs du monde enti‚ !",0
	even
TEXT
		*--------------------------*

menu_wind7:	lea objet_fenetre7,a0
	bsr GWVA_WIND_OBJ_PRG_TEST_IF_WIND_CREATED
	tst d7
	bpl.s .no

	lea image1,a0
	move #RAM_TT_ST,d0		; TT de pr‚f‚rence sinon ST
	bsr LOAD_FILE_IN_MEM
	tst.l d0
	ble.s .no

	; Image 16 couleurs
	; on charge un fichier avec l'image au format ‚cran en premier
	; taille : 640*480 * 4 bits
	; puis la palette : 16 couleurs = 16*32 bits

	move.l a0,a2		; adresse de chargement
	lea objet_fenetre7,a0
	move.l GWVA_WIND_OBJ_SPEC_PTR(a0),a1
	move #640,GWVA_WBITM_OBJ_IMG_WIDTH(a1)
	move #480,GWVA_WBITM_OBJ_IMG_HEIGHT(a1)
	move #640,GWVA_WIND_OBJ_FIRST_W(a0)
	move #480,GWVA_WIND_OBJ_FIRST_H(a0)	: mise … jour des 
champs en direct
	move.l a2,GWVA_WBITM_OBJ_DATA_PTR(a1)
	add.l #640*480/2,a2		; taille de l'image en octets
	move.l a2,GWVA_WBITM_OBJ_PAL_PTR(a1)
	move #4,GWVA_WBITM_OBJ_NBR_BITPLANES(a1)

	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	lea objet_fenetre7,a0
	tst d7
	bmi event_window_bitmap_closed

.no:	rts

		*--------------------------*

menu_wind9:	lea objet_fenetre8,a0
	bsr GWVA_WIND_OBJ_PRG_TEST_IF_WIND_CREATED
	tst d7
	bpl.s .no

	lea image2,a0
	move #RAM_TT_ST,d0		; TT de pr‚f‚rence sinon ST
	bsr LOAD_FILE_IN_MEM
	tst.l d0
	ble.s .no

	; Image TRUE-COLOR (65536 couleurs)
	; on charge un fichier avec l'image au format ‚cran en premier
	; taille : 320*240 * 16 bits
	; pas de palette !

	move.l a0,a2
	lea objet_fenetre8,a0
	move.l GWVA_WIND_OBJ_SPEC_PTR(a0),a1
	move #320,GWVA_WBITM_OBJ_IMG_WIDTH(a1)
	move #240,GWVA_WBITM_OBJ_IMG_HEIGHT(a1)
	move.l a2,GWVA_WBITM_OBJ_DATA_PTR(a1)
	move #16,GWVA_WBITM_OBJ_NBR_BITPLANES(a1)
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	lea objet_fenetre8,a0
	tst d7
	bmi.s event_window_bitmap_closed

.no:	rts

		*--------------------------*

menu_wind8:	lea objet_fenetre9,a0
	bsr GWVA_WIND_OBJ_PRG_TEST_IF_WIND_CREATED
	tst d7
	bpl.s .no

	lea image3,a0
	move #RAM_TT_ST,d0		; TT de pr‚f‚rence sinon ST
	bsr LOAD_FILE_IN_MEM
	tst.l d0
	ble.s .no

	; Image 256 couleurs
	; on charge un fichier avec l'image au format ‚cran en premier
	; taille : 320*240 * 8 bits
	; puis la palette : 256 couleurs = 256*32 bits

	move.l a0,a2
	lea objet_fenetre9,a0
	move.l GWVA_WIND_OBJ_SPEC_PTR(a0),a1
	move #320,GWVA_WBITM_OBJ_IMG_WIDTH(a1)
	move #240,GWVA_WBITM_OBJ_IMG_HEIGHT(a1)
	move.l a2,GWVA_WBITM_OBJ_DATA_PTR(a1)
	add.l #320*240,a2
	move.l a2,GWVA_WBITM_OBJ_PAL_PTR(a1)
	move #8,GWVA_WBITM_OBJ_NBR_BITPLANES(a1)
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	lea objet_fenetre9,a0
	tst d7
	bmi.s event_window_bitmap_closed

.no:	rts

		*--------------------------*

event_window_bitmap_closed:
	; Il n'y a qu'un seul malloc pour l'image et la palette
	; donc on ne fait qu'une lib‚ration

	bsr GWVA_WIND_OBJ_PRG_DELETE_ONE_WIND
	move.l GWVA_WIND_OBJ_SPEC_PTR(a0),a1
	MFREE GWVA_WBITM_OBJ_DATA_PTR(a1)
	rts

event_window_bitmap_fulled:
	; sur cette fenˆtre on veut faire un traitement particulier :
	; un ALT+fenˆtre FULL donne une namification (action sp‚cifique V.A)
	; on demande donc … ˆtre averti des EVNT_WIND_FULL avant leur traitement
	; (pour l'annuler) et on teste ici l'‚tat des touches sp‚ciales qui sont
	; dans GWVA_APP_OBJ_EVNT_MULTI_KS

	move GWVA_APP_OBJ_EVNT_MULTI_KS,d0
	and.w #%1000,d0			; touche ALT enfon‡‚e ?
	beq.s .pas_alt

	bsr GWVA_WIND_OBJ_PRG_NAMIFY_UNAMIFY_ONE_WIND	; a0=ptr
	; c'est une fonction flip / flop

	moveq #-1,d7
	; bien sur il ne faut pas faire de FULL de la fenˆtre !
	rts

.pas_alt:	clr d7
	rts

		*--------------------------*

event_window1_closed:
	; Ceci est … but didactique
	; on aurait pu le faire automatiquement en changeant les
	; propri‚t‚s de la fenˆtre ... GWVA_WIN_BIT_AUTODEL

	lea objet_fenetre1,a0
	bsr GWVA_WIND_OBJ_PRG_DELETE_ONE_WIND
	rts

event_window1_redraw:
	; Cette fenˆtre ‚tant CUSTOM la prise en charge du redraw doit ˆtre
	; faite par le programmeur.
	; les coodonn‚es sont pass‚es dans GWVA_WIND_OBJ_REDRAW_CLIP & 
d0-d3.w

	vswr_mode #MD_REPLACE
	vsf_color #0		; blanc
	v_bar 
GWVA_WIND_OBJ_REDRAW_CLIP,GWVA_WIND_OBJ_REDRAW_CLIP+2,GWVA_WIND_OBJ_REDRAW_CLIP+4,GWVA_WIND_OBJ_REDRAW_CLIP+6
	; une fenˆtre blanche pour l'exemple ...

	rts

event_window1_moved:
	clr d7	; confirmer l'ordre de mouvement de l'utilisateur ? OUI !
	rts

wind1_tool_obj1_click:
	; Ceci est … but didactique

	; on est averti que l'utilisateur a cliqu‚ un bouton de la toolbar
	; on recoit dans d0 son num‚ro

	rts

fenetre1_control_c:
	; Ceci est … but didactique

	; si on est ici c'est que CTRL+C a ‚t‚ press‚ ... on peut d‚finir ainsi
	; une liste de raccourcis et y associer facilement une action sp‚ciale.

	rts

		*--------------------------*

event_window3_created:		; WM_BEFORE !
	clr d7		; mettre -1 pour empŠcher la cr‚ation
	rts

event_window3_opened:
	; On sauve l'aspect du formulaire pour le restaurer si l'utilisateur
	; fait cancel

	save.l a0
	move #FORMULAIRE3,d0
	move #%1111,d1		; sauver l'apparence & textes
	move.l #0,a0		; r‚server un malloc !
	bsr GWVA_WFORM_OBJ_PRG_SAVE_FORM
	move.l a0,a1
	load.l a0
	tst d7
	bmi.s .erreur	; annule l'ouverture si pas pu sauver
	move.l a1,GWVA_WIND_OBJ_USER_PTR1(a0)
	clr d7
.erreur:	rts

wind3_bton_cancel_click:
	; l'utilisateur a cliqu‚ sur Cancel on remet l'apparence pr‚c‚dente !

	save.l a0
	move.l GWVA_WIND_OBJ_USER_PTR1(a0),a0
	move #FORMULAIRE3,d0
	move #%1111,d1		; restaurer l'apparence & les textes
	bsr GWVA_WFORM_OBJ_PRG_RESTORE_FORM
	load.l a0

	move #0,d0			; premier objet 0 : le pŠre
	move #7,d1			; profondeur 7
	clr d2			; l'int‚rieur
	bra GWVA_FORM_WIND_OBJ_PRG_REDRAW_PART	; bsr+rts = bra

event_window3_closed:
	; on rend le malloc o— est la sauvegarde de l'apparence du formulaire

	save.l a0
	MFREE GWVA_WIND_OBJ_USER_PTR1(a0)
	load.l a0
	clr.l GWVA_WIND_OBJ_USER_PTR1(a0)
	clr d7			; confirmer la fermeture
	rts

event_window3_redraw:
	clr d7
	rts

wind3_bton_ok_click:
	; Sur un OK dans le fenˆtre 3 on ouvre la 1 qui est sp‚ciale ...

	; on ne teste pas si elle est d‚j… ouverte, dans ce cas on nous
	; renerra un message d'erreur et l'action sera annul‚e.

	lea objet_fenetre1,a0
	bsr GWVA_WIND_OBJ_PRG_CREATE_OPEN_ONE_WIND
	rts

popup1_changed:
	; Ceci est … but didactique

	; on est averti que l'utilisateur a chang‚ la s‚lection du popup1
	; dans le fenˆtre 3.
	; on recoit dans d1 ... la nouvelle s‚lection

	rts

radio_bton_click:
	; Ceci est … but didactique

	; on est averti que l'utilisateur a cliqu‚ un nouveau bouton
	; dans le fenˆtre 3.
	; on recoit dans d1 ... la nouvelle s‚lection

	rts

w3_option1_unselct:
	; Ceci est … but didactique

	; on est averti que l'utilisateur a cliqu‚ sur un bouton s‚lectionnable
	; mais non exit (donc pas d'‚vŠnement CLICK) et plus sp‚cialement que ce
	; bouton vient de remonter ! cool !

	rts

		*--------------------------*

event_window6_arrowed:
	; exemple de message pas trŠs int‚ressant mais bon ... c'est possible

	rts

		*--------------------------*

	section DATA

texte:	dc.b 'Genuwax for the best : ',0

	ifnd OPT_FULL_PATHNAMES
image1:	dc.b 'start16.raw',0
	else
image1:	dc.b 'd:\assemble\visual40\start\start16.raw',0
	endc

	ifnd OPT_FULL_PATHNAMES
image2:	dc.b 'start32k.raw',0
	else
image2:	dc.b 'd:\assemble\visual40\start\start32k.raw',0
	endc

	ifnd OPT_FULL_PATHNAMES
image3:	dc.b 'start256.raw',0
	else
image3:	dc.b 'd:\assemble\visual40\start\start256.raw',0
	endc

mask:	dc.b '*.S,*.BAK',0
even

END
