	ACCESSOIRES ET PROGRAMMES AUTO EN FORTH
	***************************************


	Le TOS reconnat trois type de fichiers excutables: les
programmes que vous lancez depuis le bureau, ceux qui se lancent depuis le
dossier AUTO et finalement les accessoires. Chaque programme doit
respecter un certain nombre d'initialisations et de contraintes selon son
type. Souvent, le dveloppeur n'a prvu qu'une utilisation possible sur
trois et son programme ne tournera pas dans les autres cas.
	Cet article vous montre comment un mme excutable peut s'adapter
aux trois cas lors de l'initialisation et ainsi utiliser la mme routine
principale qu'il soit un accessoire, un programme AUTO ou lanc
normalement depuis le bureau. Pour cela, le FORTH amne quelques
facilits.


CAHIER DES CHARGES
------------------

	Le programme utilisera la VDI pour afficher un texte graphique au
centre de l'cran ou de la fentre ouverte. Aprs avoir activ la souris,
il attendra un clic puis rendra la main.
	Vous pourrez constater que la VDI est accessible mme dans un
programme AUTO: on a alors accs  la souris, aux lignes, rectangles,
remplissages, etc...


LANCONS NOUS!
-------------

	Comme il se peut qu'il devienne un accessoire, il faut absolument
limiter la mmoire rserve. A cet effet, le mot "reserve" est celui qu'il
nous faut:

5 0 reserve

>comp

	Cette ligne commande la rservation de 0% de la mmoire libre plus
5Ko. Ensuite, ils nous faut la chaine  afficher, et, au cas encore ou
l'ont ait un accessoire, la chaine de titre (pour le menu) ainsi que le
buffer de l'AES pour les vnements:


40 string TEXTE
20 string TITRE
16 allot constant AES_BUF

	Vient ensuite la partie qui va dcider du type de programme. Le
mot "vq_aes" vaut 0 si l'AES est disponible et -1 dans le cas contraire
(cas o le programme est lanc au boot depuis le dossier AUTO).
	De mme, le mot "_app" vaut 0 si le programme est un accessoire,
une valeur non nulle dans le cas contraire. Ceci est amplement suffisant
pour dterminer la valeur de MODE (j'ai choisi 0=ACC,1=APP et 2=AUTO)
ainsi que la chaine  afficher:


vq_aes if
   " Je suis un programme AUTO"
   2
   else
      _app if
         " Je suis une application du bureau"
         1
      else
         "  Forth TEST" TITRE $!
         appl_init
         intout w@ TITRE menu_register
         intout w@ constant ACC_ID
         " Je suis un accessoire"
         0
      then
   then
constant MODE
TEXTE $!

>comp

	Vous remarquerez que l'accessoire demande une initialisation
supplmentaire: appl_init renvoit le numro de l'application dans intout,
valeur rcupre pour enregistrer l'accessoire dans le menu par
"menu_register" qui lui encore nous renvoit dans "intout" le numro de
l'accessoire qu'on conserve dans ACC_ID pour ragir aux entres du menu.

LE TRONC COMMUN
---------------

	Voici la routine centrale qui est la mme quelque soit le mode.
Par "fastopen" elle ouvre soit une fentre (APP ou ACC), soit la station
VDI physique sur tout l'cran (AUTO). Aprs un clipping, "vst_alignment"
indique que les coordonnes du texte seront celles de son centre. Par pure
fantaisie, "vst_effects" utilise la valeur MODE pour modifier le texte
(0=normal pour l'accessoire, 1=gras pour l'application et 2=clair pour le
programme AUTO).
	Ensuite, le mot "page0" pointe sur les coordonnes de l'espace
disponible et en calcule le point central (x+largeur/2 et y+hauteur/2) qui
est envoy  "v_gtext" pour afficher le texte graphique.
	La boucle finale attend un clic de la souris puis referme la
fentre (APP, ACC) ou la station physique (AUTO).

: commun
   fastopen drop
   pageclip
   absolute
   1 0 vst_alignment
   MODE vst_effects
   page0 w@
   page0 4 + w@ 2/ +
   page0 2+ w@
   page0 6 + w@ 2/ +
   TEXTE
   v_gtext
   0 v_show_c
   begin
      vq_mouse
      intout w@
   until
   v_hide_c
   fastclose
;

>comp

GERER L'EVENEMENT
-----------------

	Etape indispensable pour l'accessoire, compltement superflue pour
les deux autres cas. La boucle principale "begin/until" n'est utilise que
si le MODE est nul: c'est le cas de l'accessoire. Si MODE est non nul, le
programme "commun" n'est donc excut qu'une seule fois (comme en
politique).
	De mme, la partie "if/then" n'est utile qu' l'accessoire:
attente d'un vnement (evnt_mesag), vrification qu'il s'agit du numro
40 (entre d'un menu) et qu'on appelle bien mon accessoire (numro dans
ACC_ID).

begin
   MODE 0= if
      1 v_show_c
      begin
         AES_BUF evnt_mesag
         AES_BUF w@ 40 =
         AES_BUF 8 + w@ ACC_ID = and
      until
      v_hide_c
   then
   commun
   MODE
until


LE COMPILATEUR
--------------

	Si vous excutez ce programme  partir de l'interprteur, il vous
renverra systmatiquement "Je suis une application du bureau" et serait
d'un intrt limit (Aide: le programme ferme la fentre du FORTH sous
l'interprteur, tapez alors "fastopen drop" pour pouvoir continuer 
travailler!). Il faut donc gnrer un fichier excutable indpendant qu'on
pourra utiliser  sa guise:

	Tapez le programme sous FORTH ou FORTHSTE et sauvez-le sous le nom
"MULTIMOD.FOR". Lancez ensuite COMP ou COMPSTE et slectionnez
MULTIMOD.FOR comme fichier source. Une fois la compilation termine,
sauvez le programme sous "MULTIMOD.PRG".

	Lanc depuis le bureau: "Je suis une application du bureau"
apparait en gras.
	Copi dans votre dossier AUTO: "Je suis un programme AUTO" apparait
en clair lors du boot.
	Renomm MULTIMOD.ACC  la racine de votre disque de boot,
l'accessoire doit se trouver dans le menu "Bureau" sous le nom "Forth
TEST". En cliquant dessus apparait "Je suis un accessoire" en texte
normal.

CONCLUSION
----------

	J'ai quelques exemples: Kobold tourne aussi bien en accessoire
(pratique!) qu'en PRG (pour les petites confis). Des "boot managers"
basculent sur une boite de configuration si ils sont lancs depuis le
bureau (un seul programme pour configurer ou excuter).
	Sachez donc que l'adpatation  l'environnement peut amener un plus
 vos crations. Par ailleurs, l'utilisation de la VDI au sein mme du
dossier AUTO assure une bonne compatibilit et une meilleure prsentation
de vos utilitaires: par exemple, le petit programme "A_LIRE.PRG" dans de
nombreuses disquettes ST Mag tourne galement sur ma carte graphique!

	D'ici la prochaine fois, j'espre que cette srie aura t utile
aux presques quarante Ataristes s'tant lancs dans le FORTH.

	Guillaume Tello
	gtello@wanadoo.fr





