Les variables d'environnement

par Dominique Béréziat

L'AES possède un buffer dans lequel il stocke des variables d'environnement de la même façon que DOS ou UNIX. Chaque programme GEM peut acceder à ces informations. Longtemps ignorées, ces variables sont maintenant largement utilisées par les programmes récents.

Attention, il ne faut pas confondre les variables d'environnements de l'AES avec ceux de la chaine d'environnement passé aux programmes appelés (dans un interpréteur de commande par exemple). Cette chaine correspond au paramètre envp de la fonction main:

main(int argc, char *argv[], char *envp[]).
En effet ce sont deux entitées différentes. Les variables de l'AES sont disponible à tout momment par n'importe quelle application GEM alors que la chaine d'environnement est propre à chaques applications (qui n'ont pas besoin d'être GEM pour cela). C'est le programme qui lance des applications qui se charge de passer éventuellement une chaine d'environnement (voir Pexec() et shel_write()).

Utilisation

Suivant le système que vous utilisez, il est plus ou moins facile d'installer des variables d'environnements.

Les appels AES

Plusieurs fonctions sont dédiées à la gestion des variables d'environnements : shel_envrn() , shel_find() et shel_write(). La fonction importante c'est shel_envrn() qui permet de chercher une variable d'environnement dans le buffer de l'AES :
int shel_envrn( char **value, char *name ) 
shel_find() permet facilement de chercher un fichier dans la liste des répertoires indiqué par la variable 'PATH'. On donne le nom d'un fichier en paramètre à cette fonction et celle ci retourne le chemin complet du fichier.
int shel_find( char * buf )
La fonction shel_write() est probablement la plus complexe de l'AES. Elle possède plein de fonctionnalité surtout depuis la version 4.0 de l'AES. Sa tâche première est de lancer des applications mais elle sait aussi manipuler les variables d'environnements, la partie que nous allons étudier. Attention ceci n'est valable que pour les versions AES l'intégrant (AES 4.0 ou plus, Magic, Geneva, Naes).
int shel_write( int mode, int wisgr, int wiscr, char *cmd, char *tail ) 

Conseils de programmation

Il est recommandé d'utiliser les variables d'environnements dans vos programmes. L'AES utilise shel_find() (donc la variable 'PATH') pour localiser ses fichiers ressources. Si vous codez vos propres routines de chargements de ressource, elles devraient utiliser shel_find()! De même, les autres fichiers utiles a votre progamme devrait être localisé avec shel_find() comme par exemple un fichier d'aide. Mais cela ne concerne pas les fichiers de données ou de réglage.

Une autre variable d'environnement utile est la variable 'HOME'. Cette variable sert à indiquer le répertoire de l'utilisateur. Cela permet de créer un environnement multi-utilisateur où chacun possède son répertoires personnels et où les programmes utilisant cette variable, ils sont de plus en plus nombreux, sauvent leur réglages. Cette pratique est donc hautement recommandé.

Les variables permettent surtout de paramétrer facilement les programmes, surtout les application sans interface ou d'indiquer des ressources disponible. Ainsi, le programme BubbleGEM utilise une variable d'environnement qui indique son chemin complet. Ainsi, une application peut lancer Bubble a tout momment et utiliser ses bulles d'aides.

Voir aussi

La programmation GEM