(libc.info.gz) Example of Parsing
Info Catalog
(libc.info.gz) Parsing a Template String
(libc.info.gz) Formatted Output
12.12.11 Example of Parsing a Template String
---------------------------------------------
Here is an example of decoding argument types for a format string. We
assume this is part of an interpreter which contains arguments of type
'NUMBER', 'CHAR', 'STRING' and 'STRUCTURE' (and perhaps others which are
not valid here).
/* Test whether the NARGS specified objects
in the vector ARGS are valid
for the format string FORMAT:
if so, return 1.
If not, return 0 after printing an error message. */
int
validate_args (char *format, int nargs, OBJECT *args)
{
int *argtypes;
int nwanted;
/* Get the information about the arguments.
Each conversion specification must be at least two characters
long, so there cannot be more specifications than half the
length of the string. */
argtypes = (int *) alloca (strlen (format) / 2 * sizeof (int));
nwanted = parse_printf_format (string, nelts, argtypes);
/* Check the number of arguments. */
if (nwanted > nargs)
{
error ("too few arguments (at least %d required)", nwanted);
return 0;
}
/* Check the C type wanted for each argument
and see if the object given is suitable. */
for (i = 0; i < nwanted; i++)
{
int wanted;
if (argtypes[i] & PA_FLAG_PTR)
wanted = STRUCTURE;
else
switch (argtypes[i] & ~PA_FLAG_MASK)
{
case PA_INT:
case PA_FLOAT:
case PA_DOUBLE:
wanted = NUMBER;
break;
case PA_CHAR:
wanted = CHAR;
break;
case PA_STRING:
wanted = STRING;
break;
case PA_POINTER:
wanted = STRUCTURE;
break;
}
if (TYPE (args[i]) != wanted)
{
error ("type mismatch for arg number %d", i);
return 0;
}
}
return 1;
}
Info Catalog
(libc.info.gz) Parsing a Template String
(libc.info.gz) Formatted Output
automatically generated by
info2html