int igetopt0(opt)
char *opt;
int igetopt0x(opt,fopt,varopt)
char *opt, *fopt;int *varopt;
int igetopt1(opt,f1,v1)
char *opt, *f1;int *v1;
int igetopt2(opt,f1,v1,f2,v2)
char *opt, *f1, *f2;int *v1, *v2;
int igetopt2v(opt,f1,v1,f2,v2)
char *opt, *f1, *f2;int *v1, *v2;
int itoggleopt(opt,table,n)
char *opt;char **table;int n;
int igetopt(opt,fopt,varopt,f1,v1,f2,v2)
char *opt, *fopt, *f1, *f2;int *varopt, *v1 *v2;
subroutine kdopts
kdopts_()
hlpopt_(ucmd,udetail)
char *ucmd, *udetail;
igetopt0 cherche l'option, sans argument, de nom opt, et renvoie 1 en cas de succès, 0 sinon.
igetopt0x
cherche l'option commençant par opt, et renvoie dans le buffer ou la variable
pointée par varopt, la valeur, décodée selon le format scanf
fopt, du reste du mot.
Le code retour est
1 en cas de succès, 0 sinon.
Par exemple igetopt0x("-typ=","%d",&val) mettra la valeur 5 dans val
si l'option lue est -typ=5.
igetopt1
cherche l'option de nom opt, et renvoie dans le buffer ou la variable
pointée par v1, la valeur, décodée selon le format scanf
f1, de l'argument suivant.
Le code retour est
1 en cas de succès, 0 sinon.
Par exemple igetopt1("-typ","%d",&val) mettra la valeur 5 dans val
si l'option lue est -typ 5.
igetopt2
cherche l'option de nom opt, et renvoie dans les buffer ou variables
pointées par v1 et v2, les valeurs, décodées selon les formats
scanf f1 et f2, des 2 arguments suivants..
Le code retour est
positif (2) en cas de succès, 0 sinon.
Par exemple igetopt2("-typ","%d",&v1,"%f",&v2) mettra la valeur 5 dans
v1 et la valeur 1. dans v2
si l'option lue est -typ 5 1..
igetopt2v
cherche l'option de nom opt, et renvoie dans les buffer ou variables
pointées par v1 et v2, les valeurs, décodées selon les formats
scanf f1 et f2, des 2 arguments suivants..
Le code retour est 0 si l'option n'existe pas, et
0, 1 ou 2 selon que l'on a trouvé 0 1 ou 2 arguments valides.
Par exemple igetopt2v("-typ","%d",&v1,"%d",&v2) mettra la valeur 5 dans
v1 retournera 1
si la commande est de la forme ... -typ 5 xx.
itoggleopt cherche une et une seule option sans argument, parmi n. table est un tableau de n chaines de caractères correspondant aux options possibles. La variable opt n'est utilisée qu'en mode KHOROS (dans ce cas on teste l'argument qui suit l'option opt). Le programme renvoie l'indice de l'option trouvée ou -1. Une erreur fatale se produit (appel à imerror) s'il y a plus d'une option.
igetopt
cherche une option, et ses paramètres éventuels, dans la liste
des arguments non encore utilisés d'une commande,
et renvoie 1 s'il trouve, 0 sinon.
Les variables globales xargc et xargv doivent avoir
été initialisées à partir des arguments argc,argv, dans
le cas d'un main en langage C (utilisation de inr_init).
opt
pointe sur la chaine de caractères qui caractérise l'option.
fopt, f1, f2
pointent sur des chaines de caractères, éventuellements vides, qui
ont une syntaxe de format de sscanf à zéro ou un argumnent.
Ces formats doivent bien correspondre aux types des variables
(utiliser %ld pour une variable de type long).
varopt, v1, v2
pointeurs, éventuellement nuls, sur les variables de chacun des 3
sscanf possibles.
Si opt est une chaine vide, alors on prendra la
première option qui peut être un nom, c'est-à-dire
soit "-", soit un mot ne commençant ni par '-' ni par un chiffre.
Si opt n'est pas vide, on prendra le premier argument
égal à opt si fopt est vide,
et dont le début est égal à opt et la fin correspond à
ce que dècrit fopt (voir exemples).
Une fois que l'option est trouvée, on prend les 0, 1 ou 2 arguments
suivants pour satisfaire à f1 et f2
N.B. si un format est égal à %s, l'argument est copié tel quel,
sans utiliser sscanf, afin d'accepter les chaines contenant des espaces.
kdopts (kdopts_())
cherche les options -vers, -D, -k octets
et -.ext et
initialise en conséquence les variables globales
debug_ et inr_dballoc (pour -D), koctet_ (pour -k) et le tableau inr_force_ext (pour -.).
Si l'option -k est absente, la variable koctet_ est initialisée
avec la valeur de la variable d'environnement INR_KBMEM,
ou à défaut par une valeur prédéfinie à la compilation
(1000K sur ksr, 500K sur Dec-alpha, 300k ailleurs).
Si l'option -vers est trouvée, le programme imprime, sur stderr,
le nom de la commande exécutée, si possible son numéro de version
(c'est-à-dire si le pointeur inr_progvers n'est pas nul), et
le message de version Inrimage.
Il est conseillé de ne pas appeler kdopts_ directement, et
d'utiliser de préférence inr_init.
hlpopt (hlpopt_ en C)
cherche les options -Help et -help et fait imprimer
les messages ucmd et udetail par iusage_.
ucmd doit contenir la liste des arguments du programme (sans son nom)
et udetail des informations succintes sur ces arguments.
Avec -Help, seul le message ucmd est imprimé.
Rappelons que iusage_ envoie les messages sur stderr
et termine le programme avec code 100 (exit(100)).
Ce programme est appelé directement par inr_init.
En mode KHOROS (variable globale khoros_mode non nulle), le comportement de ces programmes est modifié. Chaque option requiert un et un seul argument. Pour les options sans argument (lues par igetopt0) on attend un argument qui doit être 0 ou 1 (options KHOROS de type logical). Les options à argument accolé (lues par igetopt0x) sont traitées comme des options à 1 argument. Pour les options à 2 arguments on attend les 2 valeurs regroupées en un seul de type chaine de caractères.
Le programme correspondant serait de la forme :
static char Ucmd[]= "[-D] [-x n1 n2] [-N=10] image";
static char Udetail[]= ".....";
main(argc , argv)
int argc;char **argv; inr_init(argc,argv,"2.0",Ucmd,Udetail); infileopt(nom); igetopt0x("-N=","%d",%i2); igetopt2("-x","%d",&i1,"%f",&r1);
inr_init (par appel à kdopts_) reconnait "-D" (donc debug_ = 1). On aura "image" dans nom, 10 dans i2, 2 dans i1 et 1.5 dans r1.
Pour lire des noms de fichiers qui ne sont pas des image Inrimage (et qui
peuvent commencer par des chiffres), il faut impérativement
utiliser des options du type "-f=..." ce qui ce fait avec
igetopt0x() (voir exemple précédent) ou bien avec la fonction
igetopt() :
essai -rd=1.txt
Ce qui correspondrait au programme suivant:
static char Ucmd[]= "[-f=file] [-rdfile]";
static char Udetail[]= ".....";
main(argc , argv)
int argc;char **argv; inr_init(argc,argv,"2.0",Ucmd,Udetail); igetopt("-rd=","",0,"%s",name,"",0);
Il existe encore malheureusement, pour des raisons historiques, un programme getopt identique à igetopt et complètement incompatible avec getopt du C standard.
![]()
![]()
BUGS
Inrimage(1i) pour les options générales.
![]()
SEE ALSO
tstopts(3i) , inr_init(3i) , fileopt(3i) , ialloc(3i) .