Changeset 4677 for libcaca


Ignore:
Timestamp:
Oct 7, 2010, 11:03:34 PM (8 years ago)
Author:
Sam Hocevar
Message:

Move mygetopt() directly into libcaca, for use by other programs.

Location:
libcaca/trunk
Files:
1 deleted
6 edited
1 moved

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/Makefile.am

    r4333 r4677  
    4646        time.c \
    4747        prof.c \
     48        getopt.c \
    4849        $(codec_source) \
    4950        $(driver_source) \
  • libcaca/trunk/caca/caca.h

    r4333 r4677  
    137137    uint8_t padding[16];
    138138#endif
     139};
     140
     141/** \brief Option parsing.
     142 *
     143 * This structure contains commandline parsing information for systems
     144 * where getopt_long() is unavailable.
     145 */
     146struct caca_option
     147{
     148    char const *name;
     149    int has_arg;
     150    int *flag;
     151    int val;
    139152};
    140153
     
    507520__extern int caca_get_event_resize_width(caca_event_t const *);
    508521__extern int caca_get_event_resize_height(caca_event_t const *);
     522/*  @} */
     523
     524/** \defgroup caca_process libcaca process management
     525 *
     526 *  These functions help with various process handling tasks such as
     527 *  option parsing, DLL injection.
     528 *
     529 *  @{ */
     530__extern int caca_optind;
     531__extern char *caca_optarg;
     532__extern int caca_getopt(int, char * const[], char const *,
     533                         struct caca_option const *, int *);
    509534/*  @} */
    510535
  • libcaca/trunk/caca/getopt.c

    • Property svn:keywords set to Id
    r4644 r4677  
    1212
    1313/*
    14  *  mygetopt.c: getopt_long reimplementation
     14 *  getopt.c: getopt_long reimplementation
    1515 */
    1616
    1717#include "config.h"
    1818
    19 #if defined HAVE_STDINT_H
    20 #   include <stdint.h>
    21 #elif defined HAVE_INTTYPES_H
    22 #   include <inttypes.h>
     19#if !defined __KERNEL__
     20#   include <stdio.h>
     21#   include <string.h>
     22#   if defined HAVE_GETOPT_H && defined HAVE_GETOPT_LONG
     23#       include <getopt.h>
     24#   endif
    2325#endif
    2426
    25 #include <stdio.h>
    26 #include <string.h>
     27#include "caca.h"
     28#include "caca_internals.h"
    2729
    28 #include "mygetopt.h"
     30int   caca_optind = 1;
     31char *caca_optarg = NULL;
    2932
    30 int   myoptind = 1;
    31 char *myoptarg = NULL;
     33int caca_getopt(int argc, char * const _argv[], char const *optstring,
     34                struct caca_option const *longopts, int *longindex)
     35{
     36#if defined HAVE_GETOPT_LONG
     37    int ret;
     38    optind = caca_optind;
     39    optarg = caca_optarg;
     40    ret = getopt_long(argc, _argv, optstring,
     41                      (struct option const *)longopts, longindex);
     42    caca_optind = optind;
     43    caca_optarg = optarg;
     44    return ret;
    3245
    33 /* XXX: this getopt_long implementation should not be trusted for other
    34  * applications without any serious peer reviewing. It “just works” with
    35  * zzuf but may fail miserably in other programs. */
    36 int mygetopt(int argc, char * const _argv[], const char *optstring,
    37              const struct myoption *longopts, int *longindex)
    38 {
     46#else
     47    /* XXX: this getopt_long implementation should not be trusted for other
     48     * applications without any serious peer reviewing. It “just works” with
     49     * zzuf and a few libcaca programs but may fail miserably in other
     50     * programs. */
    3951    char **argv = (char **)(uintptr_t)_argv;
    4052    char *flag;
    4153    int i;
    4254
    43     if(myoptind >= argc)
     55    if(caca_optind >= argc)
    4456        return -1;
    4557
    46     flag = argv[myoptind];
     58    flag = argv[caca_optind];
    4759
    4860    if(flag[0] == '-' && flag[1] != '-')
     
    5870            return '?';
    5971
    60         myoptind++;
     72        caca_optind++;
    6173        if(tmp[1] == ':')
    6274        {
    6375            if(flag[2] != '\0')
    64                 myoptarg = flag + 2;
     76                caca_optarg = flag + 2;
    6577            else
    66                 myoptarg = argv[myoptind++];
     78                caca_optarg = argv[caca_optind++];
    6779            return ret;
    6880        }
     
    7183        {
    7284            flag[1] = '-';
    73             myoptind--;
    74             argv[myoptind]++;
     85            caca_optind--;
     86            argv[caca_optind]++;
    7587        }
    7688
     
    97109                if(longindex)
    98110                    *longindex = i;
    99                 myoptind++;
    100                 myoptarg = flag + 2 + l + 1;
     111                caca_optind++;
     112                caca_optarg = flag + 2 + l + 1;
    101113                return longopts[i].val;
    102114            case '\0':
    103115                if(longindex)
    104116                    *longindex = i;
    105                 myoptind++;
     117                caca_optind++;
    106118                if(longopts[i].has_arg)
    107                     myoptarg = argv[myoptind++];
     119                    caca_optarg = argv[caca_optind++];
    108120                return longopts[i].val;
    109121            default:
     
    117129
    118130    return -1;
     131#endif
    119132}
    120133
  • libcaca/trunk/caca/libcaca.vcproj

    r4395 r4677  
    470470                </File>
    471471                <File
     472                        RelativePath="getopt.c"
     473                        >
     474                </File>
     475                <File
    472476                        RelativePath="graphics.c"
    473477                        >
  • libcaca/trunk/configure.ac

    r4398 r4677  
    133133  AC_DEFINE(HAVE_GETOPT_LONG, 1, Define to 1 if you have the ‘getopt_long’ function.)
    134134fi
    135 AM_CONDITIONAL(NEED_GETOPT_LONG, test "$ac_cv_have_getopt_long" = "no")
    136135AC_SUBST(GETOPT_LIBS)
    137136
  • libcaca/trunk/src/Makefile.am

    r4333 r4677  
    4141endif
    4242
    43 if NEED_GETOPT_LONG
    44 GETOPT = mygetopt.c mygetopt.h
    45 endif
    46 
    4743echo-sources: ; echo $(SOURCES)
    4844
  • libcaca/trunk/src/img2txt.c

    r4369 r4677  
    1818#   include <string.h>
    1919#   include <stdlib.h>
    20 #endif
    21 
    22 #if !defined HAVE_GETOPT_LONG
    23 #   include "mygetopt.h"
    24 #elif defined HAVE_GETOPT_H
    25 #   include <getopt.h>
    26 #endif
    27 #if defined HAVE_GETOPT_LONG
    28 #   define mygetopt getopt_long
    29 #   define myoptind optind
    30 #   define myoptarg optarg
    31 #   define myoption option
    3220#endif
    3321
     
    11199    {
    112100        int option_index = 0;
    113         static struct myoption long_options[] =
     101        static struct caca_option long_options[] =
    114102        {
    115103            { "width",       1, NULL, 'W' },
     
    125113            { "version",     0, NULL, 'v' },
    126114        };
    127         int c = mygetopt(argc, argv, "W:H:f:d:g:b:c:hvx:y:", long_options, &option_index);
     115        int c = caca_getopt(argc, argv, "W:H:f:d:g:b:c:hvx:y:",
     116                            long_options, &option_index);
    128117        if(c == -1)
    129118            break;
     
    132121        {
    133122        case 'W': /* --width */
    134             cols = atoi(myoptarg);
     123            cols = atoi(caca_optarg);
    135124            break;
    136125        case 'H': /* --height */
    137             lines = atoi(myoptarg);
     126            lines = atoi(caca_optarg);
    138127            break;
    139128        case 'x': /* --width */
    140             font_width = atoi(myoptarg);
     129            font_width = atoi(caca_optarg);
    141130            break;
    142131        case 'y': /* --height */
    143             font_height = atoi(myoptarg);
     132            font_height = atoi(caca_optarg);
    144133            break;
    145134        case 'f': /* --format */
    146             format = myoptarg;
     135            format = caca_optarg;
    147136            break;
    148137        case 'd': /* --dither */
    149             dither = myoptarg;
     138            dither = caca_optarg;
    150139            break;
    151140        case 'g': /* --gamma */
    152             gamma = atof(myoptarg);
     141            gamma = atof(caca_optarg);
    153142            break;
    154143        case 'b': /* --brightness */
    155             brightness = atof(myoptarg);
     144            brightness = atof(caca_optarg);
    156145            break;
    157146        case 'c': /* --contrast */
    158             contrast = atof(myoptarg);
     147            contrast = atof(caca_optarg);
    159148            break;
    160149        case 'h': /* --help */
Note: See TracChangeset for help on using the changeset viewer.