#include "config.h" #include #include #include #include static const char * aliases[] = { "-o", "--save", "--output", "--save", NULL, NULL, }; static pipi_command_t const *list; int main(int argc, char *argv[]) { pipi_context_t *ctx; ctx = pipi_create_context(); list = pipi_get_command_list(); while(*++argv) { pipi_command_t const *cmd; char const * const *flag; char const * arg; int i; arg = argv[0]; for(flag = aliases; flag[0]; flag += 2) if(!strcmp(arg, flag[0])) arg = flag[1]; if(!strncmp(arg, "--", 2)) { for(cmd = list; cmd->name; cmd++) if(!strcmp(arg + 2, cmd->name)) break; if(!cmd->name) { fprintf(stderr, "unknown command %s\n", argv[0]); return EXIT_FAILURE; } for(i = 1; i <= cmd->argc; i++) if(argv[i] == NULL) { fprintf(stderr, "too few arguments for %s\n", argv[0]); return EXIT_FAILURE; } switch(cmd->argc) { case 0: if(pipi_command(ctx, cmd->name) != 0) { fprintf(stderr, "command %s failed\n", argv[0]); return EXIT_FAILURE; } break; case 1: if(pipi_command(ctx, cmd->name, argv[1]) != 0) { fprintf(stderr, "command %s failed\n", argv[0]); return EXIT_FAILURE; } break; default: /* Can’t handle that argument count */ return EXIT_FAILURE; } argv += cmd->argc; } else { if(pipi_command(ctx, "load", arg) != 0) { fprintf(stderr, "could not load `%s'\n", argv[0]); return EXIT_FAILURE; } } } pipi_destroy_context(ctx); return EXIT_SUCCESS; }