/* Belirtilen narg adet nesne şablon dizgesi için
geçerli mi, değil mi?
Geçerliyse 1,
değilse 0 dönsün ve bir hata iletisi bassın. */
int
validate_args (char *sablon, int nargs, OBJECT *args)
{
int *argturleri;
int ngereken;
/* Argümanlar hakkında bilgi alalım.
Her dönüşüm belirtimi en az iki karakterlik olmalı,
o halde dizgenin yarı uzunluğundan daha fazla sayıda
belirtim olamaz. */
argturleri = (int *) alloca (strlen (sablon) / 2 * sizeof (int));
ngereken = parse_printf_format (sablon, nargs, argturleri);
/* Argüman sayısına bakalım. */
if (ngereken > nargs)
{
error ("argüman sayısı çok az (en az %d argüman gerekiyor)", ngereken);
return 0;
}
/* Her argüman için istenen C türüne bakalım
ve verilen nesne uygun mu görelim. */
for (i = 0; i < ngereken; i++)
{
int istenen;
if (argturleri[i] & PA_FLAG_PTR)
istenen = STRUCTURE;
else
switch (argturleri[i] & ~PA_FLAG_MASK)
{
case PA_INT:
case PA_FLOAT:
case PA_DOUBLE:
istenen = NUMBER;
break;
case PA_CHAR:
istenen = CHAR;
break;
case PA_STRING:
istenen = STRING;
break;
case PA_POINTER:
istenen = STRUCTURE;
break;
}
if (TYPE (args[i]) != istenen)
{
error ("%d. argümanın türü uygun değil", i);
return 0;
}
}
return 1;
}