				Le compilateur
				**************

	Ce programme s‚par‚ permet, avec la librairie FORTH.LIB, de g‚n‚rer un
programme ex‚cutable ind‚pendant … partir d'un fichier source cr‚‚ sous
l'interpr‚teur FORTH.

1 Installation
**************

	Il faut pour cela disposer de:
	COMP.PRG		le compilateur
	FORTH.LIB		la librairie
	COMP.INF		quelques paramŠtres g‚n‚raux

comp.inf
--------
	fichier texte de 4 lignes contenant les infos suivantes:
	PremiŠre ligne
	Taille … r‚server pour la compilation (le source+FORTH.LIB+la table
de relogement+la partie compil‚e elle mˆme) au format:
	%xxx+ (ou -)yyyyy, c'est … dire xxx% de la m‚moire libre plus (ou
moins) yyyyy Ko. Par exemple %100-400 r‚servera tout moins 400Ko. Si le
code contient la commande >exec (appel d'un programme externe), il
faudra absolument laisser de la place.

	DeuxiŠme ligne
	chemin d'accŠs aux fichiers sources *.FOR

	TroisiŠme ligne
	chemin complet d'accŠs … forth.lib

	QuatriŠme ligne
	chemin d'accŠs au r‚pertoire des ex‚cutables (*.PRG) g‚n‚r‚s.

	Un fichier possible est:

	%50+100
	F:\FORTH\SOURCES\*.FOR
	F:\FORTH\FORTH.LIB
	F:\FORTH\PROGRAMS\*.PRG

2 Utilisation
*************

	Pour compiler un programme, il suffit d'avoir cr‚‚ un fichier source
sous l'interpr‚teur (*.FOR) et de lancer COMP:
	1) dans le s‚lecteur, choisissez le fichier source … compiler
	2) dans la fenˆtre s'inscrivent les op‚rations r‚alis‚es:
		- si une erreur se produit elle est signal‚e et le traitement
interrompu
		- si tout va bien, un s‚lecteur s'ouvre … nouveau
	3) indiquez le nom et le chemin pour le programme … ‚crire
	Le programme est maintenant disponible sur disque. Il ne faut pas
s'inqui‚ter de sa taille impressionnante pour un source de quelques lignes, la
taille augmente peu par la suite avec un source plus gros.
	Attention: Sous le compilateur, on ne peut pas utiliser les fichiers
*.TXT obtenus avec export, il faut imp‚rativement utiliser les fichiers *.FOR
obtenus avec saveb ou append.

3 PiŠges … ‚viter
*****************

	Un programme tournant parfaitement sous l'interpr‚teur peut parfois
avoir un comportement surprenant une fois compil‚. Voici des erreurs
classiques:

1ø)	J'‚cris sous l'‚diteur ceci:
	: plus
		fastopen drop
		1 2 + .
		key drop ;
	Je le compile avec compilb puis je le lance, il m'affiche bien 3 sous
l'interpr‚teur. Je le passe … COMP et le programme ex‚cutable ne fait rien
(retour imm‚diat au bureau).
	Ce qui manque … mon source, c'est l'op‚ration 'lancer le mot plus' que
j'ex‚cutais … part sous l'interpr‚teur. Il faut donc ajouter … mon source une
ligne contenant le mot … ex‚cuter:

	plus

	En fait un programme compil‚ r‚agit comme l'interpr‚teur, et ce
source ne comportait aucune partie ex‚cutable, seulement une d‚finition. De
ce fait, le programme s'est content‚ d'enr‚gistrer la d‚finition et n'a rien
trouv‚ … ex‚cuter!

2ø)	Le compilateur (ainsi que l'interpr‚teur) ne s'occupent que des lignes
valid‚es par Enter, il faut donc qu'il y ait une ligne vide qui suive la derniŠre
ligne de texte. En l'absence de cette ligne fant“me, les derniers ordres du
programme pourraient ˆtre oubli‚s.

3ø)	Sous l'interpr‚teur il existe toujours une fenˆtre ouverte, l'utilisation
de Fastopen n'est donc pas n‚cessaire, par contre pour un programme
ind‚pendant ceci est indispensable avant toute sortie graphique (textes ou
autres), de plus Fastopen renvoit le handle de la fenˆtre, ce qui permet de la
personnaliser (en changeant le titre par exemple avec wind_set).

4 Programmes "normaux"
**********************

	On dira qu'un programme est "normal" lorsqu'il est ex‚cut‚ … partir du
bureau et non … partir du dossier AUTO ou en tant qu'accessoire. Dans ce cas
une station VDI interne est ouverte (pour les sorties textes simples) ainsi
qu'une station externe pour l'utilisateur avec l'identificateur dans la variable
mot handle.
	Dans ce cas, fastopen ouvre une fenˆtre semblable … celle de
l'interpr‚teur FORTH et fastclose la referme (inutile en fin de programme,
car la routine de sortie assure la fermeture avant de revenir au bureau).
	En g‚n‚ral, la taille de la zone r‚serv‚e au dictionnaire est suffisante
pour toutes les applications, mais dans certains cas l'utilisation de "reserve"
pourra ˆtre n‚cessaire (voir le paragraphe suivant). Cette taille est ‚gale aux
trois quarts de la m‚moire libre.

5 Accessoires
*************

	Comme pour un programme normal, deux stations VDI sont ouvertes
et fastopen/fastclose ne gŠrent que la fenˆtre simple.
	Un accessoire, par nature, reste pr‚sent en m‚moire attendant qu'on
le r‚veille. De ce fait, si les 3/4 de la m‚moire lui sont allou‚s, il ne restera
pas grand chose pour les autres applications. Un mot g‚rant la taille du
dictionnaire est donc indispensable:

reserve
-------
	n  p  reserve  : fixe la taille du dictionnaire … p% de la m‚moire libre
plus n koctets. Par exemple:
	10  0  reserve		: r‚serve 10 ko
	0   100 reserve	: r‚serve toute la m‚moire
	-50  100 reserve	: toute la m‚moire moins 50Ko
	0  75  reserve		: les 3/4 de la m‚moire
	Renvoit sur la pile un code d'erreur GEMDOS (n‚gatif) ou la taille en
octets allou‚e (positif).
	Effet de bord: reserve re-alloue une table de gestion des variables
dynamiques de 1028 octets. Voir les structures et l'instruction settable. De ce fait il
faut au moins laisser 1028 octets libres avec reserve!

	En l'absence d'instruction reserve, les 3/4 de la m‚moire sont allou‚s
comme pour un programme normal. Si on utilise reserve, cette instruction
doit pr‚c‚der toutes celles utilisant le dictionnaire (d‚claration de variables,
cr‚ation de mots, instructions assembleur etc...), le plus simple est de mettre
reserve sur la premiŠre ligne du source!
	Pour d‚terminer la taille n‚cessaire, il suffit de lancer l'accessoire sans
reserve et, au moment ou vous jugez que l'utilisation qu'il fait du
dictionnaire est maximale, lui faire afficher la valeur de full (m‚moire
occup‚e dans le dictionnaire).

6 Les programmes AUTO
*********************

	Ce sont les programmes ex‚cut‚s … partir du dossier AUTO avant
l'installation de l'AES. De ce fait les instructions AES ne sont pas disponibles!
Lors du lancement, aucune station VDI n'est ouverte. C'est fastopen qui le
r‚alisera (une station physique interne pour les sorties de texte plus une
station virtuelle pour l'utilisateur). Ceci permet de modifier la r‚solution de
l'‚cran avant puis d'ouvrir proprement une station VDI aux nouvelles
dimensions. Fastopen ouvre la page0 sur tout l'‚cran et l'efface par la mˆme
occasion, pour l'instant, la valeur renvoy‚e par fastopen est toujours 1 dans
un programme AUTO, et donc inutile.
	Fastclose referme les deux stations (attention, plus d'instructions VDI
utilisables! plus de sorties de textes non plus (sauf avec les mots GEMDOS)).
Ceci permet par exemple de commencer un programme en basse r‚solution
puis de passer … la moyenne r‚solution, toujours en acc‚dant proprement au
VDI avec plusieurs couples fastopen et fastclose successifs. Fastclose n'est pas
n‚cessaire en fin de programme car la routine de sortie s'en charge.
	Rappelons que la souris (mousex, mousey, mousek, v_show_c,
v_hide_c) est g‚r‚e par le VDI, donc accessible dans un programme AUTO
dŠs que fastopen est appel‚.

7 Programmes STE ou TT/Falcon
*****************************

	En utilisant COMPSTE.PRG et FORTHSTE.LIB on g‚nŠrera des
programmes compatibles avec le STE (et peut-ˆtre avec le STF). C'est … dire
qui ‚vitent l'utilisation de codes r‚serv‚s au MC68030 et au coprocesseur
MC68882. Ces programmes tournent ‚galement sur TT et Falcon. Avec
COMP.PRG et FORTH.LIB les programmes ne tourneront que sur TT/Falcon.
	Il faudra ‚galement cr‚er des fichiers FORTHSTE.INF et
COMPSTE.INF pour fixer les paramŠtres g‚n‚raux.

8 Instructions compl‚mentaires
******************************

basepage
--------
	renvoie l'adresse de la Basepage du programme, sous l'‚diteur il s'agit
de la basepage du FORTH.

vq_aes
------
	renvoie 0 si l'AES est disponible et -1 si le programme est lanc‚ …
partir du dossier AUTO. Sous l'interpr‚teur on obtient toujours 0.

_app
----
	renvoie 0 si le programme est lanc‚ en tant qu'accessoire (ACC) et
une valeur non nulle si il est lanc‚ en tant qu'application (PRG, TOS, TTP...).
Sous l'interpr‚teur on obtient toujours une valeur non nulle.