Changeset 2857 for libpipi/trunk


Ignore:
Timestamp:
Sep 30, 2008, 12:05:10 AM (12 years ago)
Author:
Sam Hocevar
Message:

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

Location:
libpipi/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libpipi/trunk/pipi/context.c

    r2846 r2857  
    4141{
    4242    free(ctx);
     43}
     44
     45pipi_command_t const *pipi_get_command_list(void)
     46{
     47    static pipi_command_t const list[] =
     48    {
     49        { "load", 1 },
     50        { "save", 1 },
     51
     52        { "dup", 0 },
     53        { "swap", 0 },
     54        { "roll", 1 },
     55
     56        { "gamma", 1 },
     57        { "scale", 1 },
     58        { "geometry", 1 },
     59        { "tile", 1 },
     60        { "dither", 1 },
     61        { "blur", 1 },
     62        { "boxblur", 1 },
     63        { "median", 1 },
     64        { "gray", 0 },
     65        { "brightness", 1 },
     66        { "contrast", 1 },
     67        { "autocontrast", 0 },
     68        { "order", 0 },
     69        { "hflip", 0 },
     70        { "vflip", 0 },
     71        { "rotate90", 0 },
     72        { "rotate180", 0 },
     73        { "rotate270", 0 },
     74        { "invert", 0 },
     75        { "threshold", 1 },
     76        { "dilate", 0 },
     77        { "erode", 0 },
     78        { "wrap", 0 },
     79        { "combine", 0 },
     80        { "split", 0 },
     81        { "mean", 0 },
     82        { "min", 0 },
     83        { "max", 0 },
     84        { "add", 0 },
     85        { "sub", 0 },
     86        { "difference", 0 },
     87        { "multiply", 0 },
     88        { "divide", 0 },
     89        { "screen", 0 },
     90        { "overlay", 0 },
     91        { "line", 1 },
     92
     93        /* End marker */
     94        { NULL, 0 }
     95    };
     96
     97    return list;
    4398}
    4499
  • libpipi/trunk/pipi/pipi.h

    r2846 r2857  
    105105typedef struct pipi_histogram pipi_histogram_t;
    106106
     107/* pipi_command_t: the command type */
     108typedef struct
     109{
     110    char const *name;
     111    int argc;
     112}
     113pipi_command_t;
     114
    107115extern pipi_pixel_t *pipi_get_color_from_string(const char* s);
    108116
     
    110118extern pipi_context_t *pipi_create_context(void);
    111119extern void pipi_destroy_context(pipi_context_t *);
     120extern pipi_command_t const *pipi_get_command_list(void);
    112121extern int pipi_command(pipi_context_t *, char const *, ...);
    113122
  • libpipi/trunk/src/pipi.c

    r2846 r2857  
    88#include <pipi.h>
    99
     10static const char * aliases[] =
     11{
     12    "-o", "--save",
     13    "--output", "--save",
     14    NULL, NULL,
     15};
     16
     17static pipi_command_t const *list;
     18
    1019int main(int argc, char *argv[])
    1120{
     
    1322
    1423    ctx = pipi_create_context();
     24    list = pipi_get_command_list();
    1525
    1626    while(*++argv)
    1727    {
    18         if(!strcmp(argv[0], "--dup"))
     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))
    1939        {
    20             if(pipi_command(ctx, "dup") != 0)
     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]);
    2147                return EXIT_FAILURE;
    22         }
    23         else if(!strcmp(argv[0], "--swap"))
    24         {
    25             if(pipi_command(ctx, "swap") != 0)
     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 */
    2675                return EXIT_FAILURE;
    27         }
    28         else if(!strcmp(argv[0], "--roll"))
    29         {
    30             if(argv[1] == NULL)
    31                 return EXIT_FAILURE;
    32             if(pipi_command(ctx, "roll", argv[1]) != 0)
    33                 return EXIT_FAILURE;
    34             argv++;
    35         }
    36         else if(!strcmp(argv[0], "--gamma"))
    37         {
    38             if(argv[1] == NULL)
    39                 return EXIT_FAILURE;
    40             if(pipi_command(ctx, "gamma", argv[1]) != 0)
    41                 return EXIT_FAILURE;
    42             argv++;
    43         }
    44         else if(!strcmp(argv[0], "--scale"))
    45         {
    46             if(argv[1] == NULL)
    47                 return EXIT_FAILURE;
    48             if(pipi_command(ctx, "scale", argv[1]) != 0)
    49                 return EXIT_FAILURE;
    50             argv++;
    51         }
    52         else if(!strcmp(argv[0], "--geometry"))
    53         {
    54             if(argv[1] == NULL)
    55                 return EXIT_FAILURE;
    56             if(pipi_command(ctx, "geometry", argv[1]) != 0)
    57                 return EXIT_FAILURE;
    58             argv++;
    59         }
    60         else if(!strcmp(argv[0], "--tile"))
    61         {
    62             if(argv[1] == NULL)
    63                 return EXIT_FAILURE;
    64             if(pipi_command(ctx, "tile", argv[1]) != 0)
    65                 return EXIT_FAILURE;
    66             argv++;
    67         }
    68         else if(!strcmp(argv[0], "--dither"))
    69         {
    70             if(argv[1] == NULL)
    71                 return EXIT_FAILURE;
    72             if(pipi_command(ctx, "dither", argv[1]) != 0)
    73                 return EXIT_FAILURE;
    74             argv++;
    75         }
    76         else if(!strcmp(argv[0], "--blur"))
    77         {
    78             if(argv[1] == NULL)
    79                 return EXIT_FAILURE;
    80             if(pipi_command(ctx, "blur", argv[1]) != 0)
    81                 return EXIT_FAILURE;
    82             argv++;
    83         }
    84         else if(!strcmp(argv[0], "--boxblur"))
    85         {
    86             if(argv[1] == NULL)
    87                 return EXIT_FAILURE;
    88             if(pipi_command(ctx, "boxblur", argv[1]) != 0)
    89                 return EXIT_FAILURE;
    90             argv++;
    91         }
    92         else if(!strcmp(argv[0], "--median"))
    93         {
    94             if(argv[1] == NULL)
    95                 return EXIT_FAILURE;
    96             if(pipi_command(ctx, "median", argv[1]) != 0)
    97                 return EXIT_FAILURE;
    98             argv++;
    99         }
    100         else if(!strcmp(argv[0], "--gray"))
    101         {
    102             if(pipi_command(ctx, "gray") != 0)
    103                 return EXIT_FAILURE;
    104         }
    105         else if(!strcmp(argv[0], "--brightness"))
    106         {
    107             if(argv[1] == NULL)
    108                 return EXIT_FAILURE;
    109             if(pipi_command(ctx, "brightness", argv[1]) != 0)
    110                 return EXIT_FAILURE;
    111             argv++;
    112         }
    113         else if(!strcmp(argv[0], "--contrast"))
    114         {
    115             if(argv[1] == NULL)
    116                 return EXIT_FAILURE;
    117             if(pipi_command(ctx, "contrast", argv[1]) != 0)
    118                 return EXIT_FAILURE;
    119             argv++;
    120         }
    121         else if(!strcmp(argv[0], "--autocontrast"))
    122         {
    123             if(pipi_command(ctx, "autocontrast") != 0)
    124                 return EXIT_FAILURE;
    125         }
    126         else if(!strcmp(argv[0], "--order"))
    127         {
    128             if(pipi_command(ctx, "order") != 0)
    129                 return EXIT_FAILURE;
    130         }
    131         else if(!strcmp(argv[0], "--hflip"))
    132         {
    133             if(pipi_command(ctx, "hflip") != 0)
    134                 return EXIT_FAILURE;
    135         }
    136         else if(!strcmp(argv[0], "--vflip"))
    137         {
    138             if(pipi_command(ctx, "vflip") != 0)
    139                 return EXIT_FAILURE;
    140         }
    141         else if(!strcmp(argv[0], "--rotate90"))
    142         {
    143             if(pipi_command(ctx, "rotate90") != 0)
    144                 return EXIT_FAILURE;
    145         }
    146         else if(!strcmp(argv[0], "--rotate180"))
    147         {
    148             if(pipi_command(ctx, "rotate180") != 0)
    149                 return EXIT_FAILURE;
    150         }
    151         else if(!strcmp(argv[0], "--rotate270"))
    152         {
    153             if(pipi_command(ctx, "rotate270") != 0)
    154                 return EXIT_FAILURE;
    155         }
    156         else if(!strcmp(argv[0], "--invert"))
    157         {
    158             if(pipi_command(ctx, "invert") != 0)
    159                 return EXIT_FAILURE;
    160         }
    161         else if(!strcmp(argv[0], "--threshold"))
    162         {
    163             if(argv[1] == NULL)
    164                 return EXIT_FAILURE;
    165             if(pipi_command(ctx, "threshold", argv[1]) != 0)
    166                 return EXIT_FAILURE;
    167             argv++;
    168         }
    169         else if(!strcmp(argv[0], "--dilate"))
    170         {
    171             if(pipi_command(ctx, "dilate") != 0)
    172                 return EXIT_FAILURE;
    173         }
    174         else if(!strcmp(argv[0], "--erode"))
    175         {
    176             if(pipi_command(ctx, "erode") != 0)
    177                 return EXIT_FAILURE;
    178         }
    179         else if(!strcmp(argv[0], "--wrap"))
    180         {
    181             if(pipi_command(ctx, "wrap") != 0)
    182                 return EXIT_FAILURE;
    183         }
    184         else if(!strcmp(argv[0], "--combine"))
    185         {
    186             if(pipi_command(ctx, "combine") != 0)
    187                 return EXIT_FAILURE;
    188         }
    189         else if(!strcmp(argv[0], "--split"))
    190         {
    191             if(pipi_command(ctx, "split") != 0)
    192                 return EXIT_FAILURE;
    193         }
    194         else if(!strcmp(argv[0], "--mean"))
    195         {
    196             if(pipi_command(ctx, "mean") != 0)
    197                 return EXIT_FAILURE;
    198         }
    199         else if(!strcmp(argv[0], "--min"))
    200         {
    201             if(pipi_command(ctx, "min") != 0)
    202                 return EXIT_FAILURE;
    203         }
    204         else if(!strcmp(argv[0], "--max"))
    205         {
    206             if(pipi_command(ctx, "max") != 0)
    207                 return EXIT_FAILURE;
    208         }
    209         else if(!strcmp(argv[0], "--add"))
    210         {
    211             if(pipi_command(ctx, "add") != 0)
    212                 return EXIT_FAILURE;
    213         }
    214         else if(!strcmp(argv[0], "--sub"))
    215         {
    216             if(pipi_command(ctx, "sub") != 0)
    217                 return EXIT_FAILURE;
    218         }
    219         else if(!strcmp(argv[0], "--difference"))
    220         {
    221             if(pipi_command(ctx, "difference") != 0)
    222                 return EXIT_FAILURE;
    223         }
    224         else if(!strcmp(argv[0], "--multiply"))
    225         {
    226             if(pipi_command(ctx, "multiply") != 0)
    227                 return EXIT_FAILURE;
    228         }
    229         else if(!strcmp(argv[0], "--divide"))
    230         {
    231             if(pipi_command(ctx, "divide") != 0)
    232                 return EXIT_FAILURE;
    233         }
    234         else if(!strcmp(argv[0], "--screen"))
    235         {
    236             if(pipi_command(ctx, "screen") != 0)
    237                 return EXIT_FAILURE;
    238         }
    239         else if(!strcmp(argv[0], "--overlay"))
    240         {
    241             if(pipi_command(ctx, "overlay") != 0)
    242                 return EXIT_FAILURE;
    243         }
    244         else if(!strcmp(argv[0], "--line"))
    245         {
    246             if(argv[6] == NULL)
    247                 return EXIT_FAILURE;
    248             if(pipi_command(ctx, "line", argv[1]) != 0)
    249                 return EXIT_FAILURE;
    250             argv++;
    251         }
    252         else if(!strcmp(argv[0], "--output") || !strcmp(argv[0], "-o"))
    253         {
    254             if(argv[1] == NULL)
    255                 return EXIT_FAILURE;
    256             if(pipi_command(ctx, "save", argv[1]) != 0)
    257                 return EXIT_FAILURE;
    258             argv++;
     76            }
     77
     78            argv += cmd->argc;
    25979        }
    26080        else
    26181        {
    262             if(pipi_command(ctx, "load", argv[0]) != 0)
     82            if(pipi_command(ctx, "load", arg) != 0)
     83            {
     84                fprintf(stderr, "could not load `%s'\n", argv[0]);
    26385                return EXIT_FAILURE;
     86            }
    26487        }
    26588    }
Note: See TracChangeset for help on using the changeset viewer.