IGETOPT (3I)     version 4.6.9     March 2022

User Intro    Prog Intro    Liste des programmes    Liste des manuels
Table of Contents


NAME

igetopt, igetopt0, igetopt0x, igetopt1, igetopt2, igetopt2v, itoggleopt, kdopts_, hlpopt_ - traitement des options d'une application..

SYNOPSIS

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;

DESCRIPTION

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.

EXEMPLES

Soit la commande
essai -D -x 2 1.5 -N=10 image
ou, en mode KHOROS
essai -khoros 0 -D 1 -x "2 1.5" -N= 10 -i1 image

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);

BUGS

Il existe encore malheureusement, pour des raisons historiques, un programme getopt identique à igetopt et complètement incompatible avec getopt du C standard.

SEE ALSO

Inrimage(1i) pour les options générales.
tstopts(3i) , inr_init(3i) , fileopt(3i) , ialloc(3i) .