#include #include "irdr.h" #include "valist.h" #include "i-cmdline.h" #include "directive.h" typedef struct priv PRIV; struct priv { int ac; char **av; int ap; } ; static int n_filenames = 0; static char **filenames = 0; static void save_filename(char *fn) { filenames = realloc(filenames,(n_filenames+1)*sizeof(char *)); filenames[n_filenames++] = fn; } static void cmdline_init(void **privp, VALIST *args) { PRIV *p; p = malloc(sizeof(PRIV)); p->ac = va_arg(args->ap,int); p->av = va_arg(args->ap,char **); p->ap = 0; *privp = p; } static void cmdline_token(void *priv, TOKEN *tok) { PRIV *p; p = priv; if (p->ap >= p->ac) { tok->type = TT_EOF; } else { tok->type = TT_STR; tok->str = p->av[p->ap++]; } } static void cmdline_baddir(void *priv __attribute__((__unused__)), char *name) { save_filename(name); } static void cmdline_close(void *priv) { free(priv); } static void cmdline_err(void *priv, FILE *to) { fprintf(to," command line, arg %d\n",((PRIV *)priv)->ap); } int icmdline_nfiles(void) { return(n_filenames); } char *icmdline_file(int n) { if ((n < 0) || (n >= n_filenames)) abort(); return(filenames[n]); } IRDR i_cmdline = { &cmdline_init, &cmdline_token, &cmdline_baddir, &cmdline_close, &cmdline_err };