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

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

Support C99 types on Win32 through the same hacks as in libcaca.

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