95 lines
2.2 KiB

  1. #include "config.h"
  2. #include "common.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <pipi.h>
  7. static const char * aliases[] =
  8. {
  9. "-o", "--save",
  10. "--output", "--save",
  11. NULL, NULL,
  12. };
  13. static pipi_command_t const *list;
  14. int main(int argc, char *argv[])
  15. {
  16. pipi_context_t *ctx;
  17. ctx = pipi_create_context();
  18. list = pipi_get_command_list();
  19. while(*++argv)
  20. {
  21. pipi_command_t const *cmd;
  22. char const * const *flag;
  23. char const * arg;
  24. int i;
  25. arg = argv[0];
  26. for(flag = aliases; flag[0]; flag += 2)
  27. if(!strcmp(arg, flag[0]))
  28. arg = flag[1];
  29. if(!strncmp(arg, "--", 2))
  30. {
  31. for(cmd = list; cmd->name; cmd++)
  32. if(!strcmp(arg + 2, cmd->name))
  33. break;
  34. if(!cmd->name)
  35. {
  36. fprintf(stderr, "unknown command %s\n", argv[0]);
  37. return EXIT_FAILURE;
  38. }
  39. for(i = 1; i <= cmd->argc; i++)
  40. if(argv[i] == NULL)
  41. {
  42. fprintf(stderr, "too few arguments for %s\n", argv[0]);
  43. return EXIT_FAILURE;
  44. }
  45. switch(cmd->argc)
  46. {
  47. case 0:
  48. if(pipi_command(ctx, cmd->name) != 0)
  49. {
  50. fprintf(stderr, "command %s failed\n", argv[0]);
  51. return EXIT_FAILURE;
  52. }
  53. break;
  54. case 1:
  55. if(pipi_command(ctx, cmd->name, argv[1]) != 0)
  56. {
  57. fprintf(stderr, "command %s failed\n", argv[0]);
  58. return EXIT_FAILURE;
  59. }
  60. break;
  61. default:
  62. /* Can’t handle that argument count */
  63. return EXIT_FAILURE;
  64. }
  65. argv += cmd->argc;
  66. }
  67. else
  68. {
  69. if(pipi_command(ctx, "load", arg) != 0)
  70. {
  71. fprintf(stderr, "could not load `%s'\n", argv[0]);
  72. return EXIT_FAILURE;
  73. }
  74. }
  75. }
  76. pipi_destroy_context(ctx);
  77. return EXIT_SUCCESS;
  78. }