![]() |
||||||
SCR/AL1 - TOME III. Les librairies utilitaires
Syntax
A_check(args, adef)
char **args;
ADEF *adef;
Description
Vérifie à partir d'une structure ADEF que les arguments sont corrects. Le tableau des arguments est normalement créé par la fonction A_initv() ou A_init().
La vérification s'effectue en plusieurs étapes. Chacune est décrite ci-dessous.
Vérification par ligne du tableau ADEF
Chacun des arguments définis (certaines lignes peuvent ne pas avoir d'arugment, mais avoir du sens pour l'exécution) est vérifié comme suit :
Vérification qu'il n'y a pas d'argument indéfini
La fonction vérifie ensuite que tous les arguments sont définis dans la table ADEF.
En cas d'erreur, la fonction A_error est appelée avec un des messages suivants :
"A_check : '-arg' : incorrect argument(s)"
"A_check : '-arg' required, or incorrect nbr of parameters"
De plus, le processus de vérification s'arrête et la fonction retourne -1. Si aucune erreur n'est détectée, la fonction retourne 0.
La fonction de vérification
A chaque argument, une fonction d'erreur peut être définie pour permettre d'en vérifier le type, le nombre ou tout autre vérification utile. Cette fonction est appelée avec comme arguments deux valeurs semblables à celles reçue par le programme main() : le nombre d'arguments et un pointeur vers le premier. Le premier argument est toujours du type "-arg" et est compris dans le nombre.
Des fonctions type sont définies dans la librairie et peuvent être utilisées dans la définition de la structure ADEF. Leur code est défini ci-dessous. On peut s'en inspirer pour construire ses propres fonctions de check.
Fonction de vérification que les paramètres sont numériques
A_check_int(argc, argv)
int argc;
char *argv[];
{
int i;
for(i = 1 ; i < argc ; i++)
if(A_check_int_1(argv[i])) return(-1);
return(0);
}
A_check_int_1(parm)
char *parm;
{
int i;
for(i = 0 ; parm[i] ; i++)
if(parm[i] < '0' || parm[i] > '9') return(-1);
return(0);
}
Fonction de vérification de l'existence de fichiers
A_check_access(argc, argv)
int argc;
char *argv[];
{
int i;
for(i = 1 ; i < argc ; i++)
if(access(argv[i], 0)) return(-1);
return(0);
}
Exemple
ADEF adef[3] = {
{"-pr", "printer", "printer name", 0, 1, 1,
0, setprinter, "prn"},
{"-l", "file ...", "filenames", 1, 1, 100,
A_check_exist, printfiles, 0},
{NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL}
};
main(argc, argv)
int argc;
char *argv[];
{
char **args;
args = A_initv(argv);
if(A_check(args, adef)) exit(1);
...
}
Voir également
A_init(), A_help(), A_usage()
A_check(args, adef)
Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be