Normalement on lance MENU02.PRG pour compiler un programme GFA
On peut aussi sous GFABASIC.PRG 
lancer COMPGFA/MENU.GFA pour compiler un autre programme GFA

Petit problème sous Hatari: quand on veut compiler CELA.GFA
Le complialteur cherche CELA.GFA.GFA et ne le trouve pas.

Paliatif: 
1-copier le programme à compiler CELA.GFA et lui retirer son .GFA
On obtient  deux fichiers: CELA et CELA.GFA
2-lancer avec GFABASIC.PRG le COMPGFA/MENUO1.GFA et lui donner CELA
La compilation s'attaque à CELA.GFA et le tour est joué

J'ai juste modifié la ligne 307 de MENU.GFA 
dans la procedure do_fsel IF INSTR(f$,".")=0 f$=f$+x$
rend f$+x$  (x$=GFA). je lui fait rendre f$ seulement ...

Le programme obtenu s'appellera toujours TEST.PRG
******************** UTILISATION COURANTE **********************************

I-CONTENU DU DISQUE:
* MENU.PRG: le programme a lancer: Shell ecrivant les commandes de GFA_BCOM
* GFA_BCOM.PRG: programme compilateur principal recevant des commandes codees
* GL.PRG: Linker: donne au compilateur les fonctions GFA dont il a besoin
* GFA3BLIB: bibliotheques des fonctions source du GFA pour le Linker
* GFA3BLIB.NDX: index des fonctions disponibles, pour le Linker
Ne compile pas TROFF TRON TRACE$ DEFLIST DUMP LOAD SAVE PSAVE LIST LLIST
Ne compile que le GFA3.0. Exemple: cliquer MENU.PRG/Fichier/Source faire F10
On obtient TEST.PRG lancable par Fichier/Test


II-UTILISATION: MENU/Fichiers
Editeur     CTRL+E : lance l'interpreteur GFA3.0  Tapez un programme...
RCS :       permet d'appeller RCS2 si on a besoin de fichier .RSC ...
Compilateur CTRL+C : compilation du programme .GFA qui produit TEST.O ...
Linker      CTRL+L : linkage de TEST.O qui produit TEST.PRG...
Tester      CTRL+T : lance TEST.PRG
F10=Compile+Linke    "Source" choisit un programme GFA a traiter
"Executer" lance un programme a cliquer, "Quitter" finit


III-CONFIGURATION: MENU/Selection
G3WAIT W : a activer pour pouvoir echanger les disques "Compilateur"
           et "Source"(.GFA) et "Destination"(.O et .PRG) pendant la compilation
           Sinon tout doit etre sur le meme .... et y a pas la place !
G3MOVE M:  prend le temps d'economiser la RAM pendant la compilation.
           Inutile sauf si gros programme et petite RAM....
PRG=GFA F2 : le .PRG produit prend comme nom celui du source .GFA
Externe  E : pour donner le nom des fichiers .O a lier avec celui en cours           
G3OBJ O et G3PRG P : permettent de modifier les noms des fichier TEST.O et .PRG
G3LIB L : permet d'utiliser une autre bibliotheque que G3LIB
On peut en profiter pour modifier le chemin de directory et par exemple
faire chercher les programmes de compilation sur le dique B ou C...

IV-ACCESSOIRES :
Les programmes .ACC doivent se reserver une place limitee en RAM:
Donc faire MENU/Memoire ou glisser $m[taille] au debut du programme .GFA
Les programmes .ACC sont geres par le GEM. Quatre fonctions GEM surtout:
ap_id&=APPL_INIT() !APPL_INIT rend le numero du programme en cours pour GEM
                   !Si ce numero=0, le programme en cours n'est pas un ACC.
me_id1=MENU_REGISTER(ap_id&,"nom accessoire") !donne le nom indique et
                   !rend le numero d'accessoire.(-1 si impossible car 6 ACC)
EVNT_MESAG(0)      !Doit etre dans une boucle sans fin ou revient toujours le
                   !programme (pas de END ni QUIT etc...) Demande a GEM de
                   !remplir MENU(1) a MENU(8), variables reservees de .ACC
IF MENU(1)=40      !Indique que l'utilisateur vient de cliquer le .ACC
Ce sont les .ACC et non GEM qui doivent restaurer l'ecran apres leur travail.


V-PLANTAGES:
- Mettre $I+ et $U+ au debut du programme .GFA si on veut pouvoir sortir
  par ALT+SHIFT+CTRL et si on y utilise EVERY/AFTER/RESUME
- Il est conseille de definir les couleurs et la forme de la souris au
  debut des programmes a compiler, si on ne veut pas se trouver avec une
  abeille sur un fond blanc
- Ne pas trop s'inquieter si le compilateur signale plein d'erreurs. C'est
  par zele car les programmes obtenus tournent en general quand meme
- On signale des plantages dans la gestion des fenetres
- Le compilateur ne verifie pas les depassements d'indice de tableau, ni
  de valeur selon le type de variables.

******************** POUR ALLER PLUS LOIN *********************************

VI-OPTIONS DE COMPILATION: MENU/Options
Permettent de speeder ou raccourcir le programme compile.
Les codes speciaux (%0 *& etc...) sont envoyes par MENU au compilateur.
Mais on peut les mettre dans le source, precedes de $ ($%0 $*&), pour
limiter leur effet a une partie du programme seulement.

IntDiv ALT+/ : %3 garde seulement la partie entiere du resultat des divisions
               %0 ne le fait que si le resultat n'est pas utilise ensuite
               ( evidement, %3 donne un code 10 fois plus rapide )
IntMul ALT+* : *& multiplie des entiers% reduits a la fourchette +-32767
               *% multiplie des entiers % de taille normale (4 octets)
               ( evidement, *& speede comme une bete )
Memoire ALT+M : m50000 indique que le programme compile n'utilisera que 50000
                octets en RAM pour tourner. Indispensable pour faire des .ACC
Fonctions ALT+F    : F< empeche la detection de l'erreur "ENDFUNC" (quand une
                     fonction s'est deroulee sans RETURN jusqu'a la fin)
Procedures ALT+P   : P< compile les fonctions et procedures sans reconnaitre
                     ni parametres, ni variables locales, ni RESUME. Rapide.
Interruption ALT+I : I- supprime l'action de EVERY et AFTER mais aussi:
                     le Break par CTRL+ALT+SHIFT, les entrees ALT+code ASCII
Select ALT+S  S S< : S optimise la taille, S< optimise le temps d'execution
                     pour les branchements SELECT/CASE/DEFAULT
Erreur ALT+E E# E$ : Les messages d'erreur seront en chiffre ou en texte
Autres options qu'on peut mettre dans le listing:
 $F% en premiere ligne d'une fonction lui fait rendre un nombre sans decimale
 $RC& et $RC% racourcissent ou pas les valurs utilisees par RC_INTERSECT
$B+ donne des numeros d'erreur au lieu de bombes. Interdit en .ACC
Si les interruptions sont actives
 $U+ permet un break par CTRL+SHIFT+ALT a chaque instruction
 $U- empeche le break
 $U permet le Break a l'endroit ou on le met seulement
 Important: on doit mettre $U a l'INTERIEUR des boucles pour les arreter 
            Ces instructions permettent aussi les RESUME/NEXT


VII-OPTIONS DE LINKAGE :
Elles permettent de desassembler facilement le code obtenu, ou d'ajouter
des fonctions suplementaires ecrites dans d'autres langages.
-s : le programme compile aura une table des symboles: les 7 premieres
     lettres du nom des procedures sera affiche par le desassembleur
+LIBRX : linke avec la librairie LIBRX (nom au choix) au lieu de GFA3LIB 
         En pratique, il faut ajouter les nouvelles bibliotheques a GFA3LIB
         Pour ca, copier dans LIBRX GFA3LIB sauf les 2 derniers octets et
         ajouter les autres bibliotheques sauf leurs 2 premiers octets.
       Creer ensuite le fichier LIBRX.NDX avec le gestionaire de librairie
       du GFA assembleur ou DOINDEX (sic). Il ne doit pas y avoir 2 noms
       semblables dans les deux bibliotheques. Conseillee: Bibli. Turbo-C
NOM    indique qu'il faudra tirer des routines d'un fichier NOM.O (ci-dessous) 
$Xnom  :En premiere ligne d'une procedure, indique au linker d'inserer lÖ 
        une routine nom tiree d'un fichier .O au format DR (Digital Research)
    Ex: PROCEDURE lolo(adr%,n&) !GFA met ses parametres sur la pile
        $XroutineC              !La routine recoit ses parametres sur la pile
        La suite de la procedure sera supprime au linkage. En pratique il
        suffit d'ecrire les parametres de la routineC  en ordre inverse:
        void cedcl routineC(n,adr) (cedcl pour recevoir les parametres
        dans la pile, en C)
- (en assembleur:) il faut rendre A3 A4 A5 A6 et SP inchanges. Une pile de
   4K seulement est reservee pour les routines linkees.  
   $C+(ou $C) permet de sauvegarder ces registres avant un CALL ou un C:
- UNPACK.GFA transforme un programme compile TEST.O en TESTX.O au format DR



VIII-EN VRAC :
- CHAIN efface le programme compile (appelant) de la memoire et lance le
  programme appele par la fonction AES shel_write en lui transmettant
  la ligne de commande situee a BASEPAGE+128 s'il en veut.
- FILESELECT demande un minimum de 32500 oct encore libres
- Dans MENU.PRG, Undo nettoie l'ecran et Help affiche les parametres en cours
- On peut reconfigurer les options par defaut de  MENU.PRG en editant MENU.GFA
  puis en le compilant. La ligne INLINE irq%,&HD6 contient la routine qui
  affiche le numero de la ligne compilee pendant la compilation.
  Aller dessus, faire Help et la sauver comme MENU.INL.
  La ligne {irq%+2}=V:a& permet d'afficher a& pendant la compilation.
  BYTE{irq%+6}=32+35 et BYTE{irq%+7}=32+1 affiche en (35,1) pendant """"
- On peut utiliser d'autres Shell que MENU. Mais il faut respecter l'ordre
  des parametres. Ex: sous Shell DOS:
  gfa_bcom nom S& %3                                   gl -s c_tst +libx


  



