Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - TOME III. Les librairies utilitaires

2. Le groupe s_args

2.7 A_check (file s_acheck.c:115)

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

2.7.1 File s_acheck.c

A_check(args, adef)

Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be