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.
- Magic, MagicicMac, MagicPC:
le fichier MAGX.INF permet d'installer facilement les variables d'environnements. Il suffit d'ajouter une ligne du type '#_ENV NOM=valeur' dans l'entête du fichier. Par exemple:
#_ENV HOME=c:\user\Dom
- MultiTos, Geneva:
Lors du chargement de l'AES, le système lit le fichier GEM.CNF dans le répertoire C:\MINT ou C:\MULTITOS. Dans ce fichier, il faut placer des lignes du type
'setenv NOM valeur'. Par exemple:
setenv HOME c:\user\Dom
- Naes:
Lors du boot, Naes lit le fichier N_AES.CNF dans le répertoire de Naes.
Dans ce fichier, il faut placer des lignes du type
'setenv NOM valeur'. Par exemple:
setenv HOME c:\user\Dom
- TOS:
C'est bien évident sous TOS qu'il est plus difficile de placer des variables
d'environnement. Pour cela, il faut utiliser des patches que l'on place dans
le répertoire AUTO. Citons GEMENV ou GEMRAM, ces deux programmes se trouvent
facilement sur les sites ftp consacré à Atari.
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 )
- value: adresse retourné qui contient la variable, ou NULL si la variable
n'existe pas.
- name: le nom de la variable d'environnement à chercher,
- valeur de retour: toujours 1
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 )
- buf: pointeur sur une chaine d'au moins 128 caractères,
- valeur de retour: retourne 0 si le fichier a été trouvé, une autre valeur
sinon.
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 )
- mode: mode de la fonction, dans notre contexte, c'est SWM_ENVIRON (8),
- wisgr: sous-mode de la fonction:
- ENVIRON_SIZE (0): retourne la taille de la chaine d'environnement,
- ENVIRON_CHANGE (1): insère ou modifie une variable d'environnement. Le paramètre
cmd est utilisé à cette fin, le format étant: name=value. ex: cmd = "USER=Dom",
- ENVIRON_COPY (2): copie le contenue de la chaîne d'environnement dans un buffer
pointé par cmd. La fonction retourne le nombre d'octet non copié.
- wiscr: inutilisé dans ce mode,
- cmd: dépend de wisgr,
- tail: inutilisé dans ce mode,
- valeur de retour: valeur dépendant de wisgr.
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