source: libpipi/trunk/src/pipi.c @ 2857

Last change on this file since 2857 was 2857, checked in by Sam Hocevar, 11 years ago

Hide the list of available commands in pipi/context.c, so that the
pipi source code doesn't need to know about them.

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