&2Arial.#4%2(D           Excellent!(=%1#/
#2%2(:           by Dominique Brziat, 1998 all rights reserved(:%1#/

        AHProgrammation des modules@

	(Attention, documentation en chantier)

HMatriel@

Les  modules  utilisent  le  concept  des  Librairies  Gem  Dynamiques
dvelopp par D.Brziat et O.Landemarre. Pour programmer de  nouveaux
modules vous aurez besoin :

   d'un compilateur C (Gcc ou Pure C),
   de la librairie LDG,
   de la librarie MT_AES (si vous faites des appels  l'AES)
  
Les fichiers LDG sont fournit dans le package  d'Excellent!. La librairie
MT_AES, galement fournie, permet de faire des appels  l'AES en 
multi-thread. Si vous utilisez les libraries GEM traditionnelles, vous 
risquez de faire planter l'AES.

HPrincipe@

Chaque module se compose d'un ensemble de fonctions qui seront appeles
par Excellent! et d'une partie  principale fixe qui gre le  protocole
LDG. Les fontions doivent avoir  toujours le mme prototype car  elles
sont directement excut par Excellent!.

Prototype d'une fonction :

	int Function( WINDOW *in, BUFFER **out, MOD_DATA *data);
	
Paramtres :
	in   : adresse du descripteur de la fentre courante (celle  
		   partir de laquelle la fonction  t invoqu).
	out  : adresse d'un ventuel nouveau buffer.
	data : adresse de routines que fournit Excellent!.
	retour : code d'action pour Excellent!

Une fonction reoit un descripteur de fentre WinDom comme entre.  Ce
paramtre contient toutes les informations relatif  la fentre et  au
buffer sur lequelles a t appliqu la fonction :

  	le champ 'in->data' ponte sur un structure BUFFER qui dcrit le
  	buffer sur lequel la commande a t dclench. Comme ce champ n'est
  	pas typ, pour accder au buffer, il faut faire rfrence  :
  		((BUFFER *)in->data);
  		
   pour les autres champs consult la documentation de WinDom (la
  	librarie GEM qui gre le sytme de fentrage d'Excellent!).

Le paramtre 'out' est le buffer de sortie si la fonction doit
crer un nouveau buffer ou NULL sinon.

Le paramtre 'data' est un pointeur sur une structure qui fournit des
fonctions pour la plupart esserntielles au bon fonctionnenent de votre
fonction.

Valeur de retour:
La fonction retourne un code qu'Excellent! examine pour effectuer 
certaines actions. Ce code est un masque de bits sur :

   0    : aucune action,
  	0x1  : redraw de la fentre,
   0x2  : mise  jour des sliders,
   0x4  : le buffer de sortie est ouvert dans une nouvelle fentre,
   0x8  : mise  jour de la barre d'information


HLe paramtre data@

Ce paramtre est un pointeur sur une structure MOD_DATA. Cette 
structure, fournit par Excellent!, vous offre un ensemble de fonction
et de donnes qui vous seront utile pour coder vos modules.

  	void *(*_realloc)(void *,size_t) 
	
	Cette fonction est la fonction realloc() fournit par Excellent!.
	Vous devez l'utiliser au lieu de  realloc() car sinon lorsque le 
	module se terminera, GemDos liberera la mmoire allou par realloc
	alors qu'Excellent! l'utilise toujours. Les macros REALLOC(), 
	MALLOC() et FREE() utilise directement ce pointeur de fonction.

   int (*_conf)( char *name, char *format, ...) 

  	Cette fonction est en faite la fonction ConfInquire() de la librairie
  	WinDom. Elle vous permet de lire des informations dans le fichier
	WINDOM.CNF (section d'Excellent!).

   void (*_init_edit)( BUFFER *buffer, char *name, char *defaut, int mode)

	Cette fonction permet de passer en dition de paramtre. Elle sert
	 saisir les paramtres utiles au fonctionnnement de la fonction.

   void (*_exit_edit)( BUFFER *)
  
  	Cette fonction termine le mode d'dition dclench avec la fonction
  	prcdente.

   BUFFER *(*_load)( char *)
  
  	Cette fonction vous permet de charger dans un buffer un fichier.

   BUFFER *(*_creat)( char *name, char *mode, int flag, int lsize, long maxline)

	Cette fonction cr un buffer vide de 'maxline' lignes prt a tre 
	remplit. Chaque ligne peut faire jusqu' 'lsize' octet de long.

   int	(*_gem_exec)( char *, char *, void *, int , int )

	Cette fonction excute une application GEM ou TOS. Notez que vous
	pouvez aussi utiliser Pexec() ou mt_shel_write(). Toutefois
	cette fonction est plus puissante et permet de lancer facilement
	une application quelquesoit son type, et quelquesoit le systme
	d'exploitation employ.

   void *env

	Ce champ est un pointeur sur la zone mmoire des variables
	d'environnemment d'Excellent!. Il sera utilis avec la fonction
	shelenv() de la librairie utilitaire des modules.

HExemple@

	1 . Sans cration de buffer
	2 . Avec cration de buffer
	3 . Avec saisie de paramtre


HExemple complet (avec gestion des LDG)@

Dans cette exemple,  nous montrons  comment utiliser les  LDG dans  le
module. Pour  plus d'information  sur les  LDG vous  devrez  nanmoins
consulter la documentation hypertexte 'LDG.HYP'.

