Changeset 4347


Ignore:
Timestamp:
Feb 9, 2010, 12:56:33 AM (8 years ago)
Author:
Sam Hocevar
Message:

Add mygetopt.c to the project. Fixes #42.

Location:
toilet/trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • toilet/trunk/configure.ac

    r4344 r4347  
    2828AC_CHECK_HEADERS(getopt.h sys/ioctl.h zlib.h)
    2929
     30ac_cv_have_getopt_long="no"
    3031AC_CHECK_FUNCS(getopt_long,
    31  [AC_DEFINE(HAVE_GETOPT_LONG, 1, Define to 1 if you have the `getopt_long' function.)],
     32 [ac_cv_have_getopt_long="yes"],
    3233 [AC_CHECK_LIB(gnugetopt, getopt_long,
    33    [AC_DEFINE(HAVE_GETOPT_LONG, 1, Define to 1 if you have the `getopt_long' function.)
     34   [ac_cv_have_getopt_long="yes"
    3435    GETOPT_LIBS="${GETOPT_LIBS} -lgnugetopt"])])
     36if test "$ac_cv_have_getopt_long" != "no"; then
     37  AC_DEFINE(HAVE_GETOPT_LONG, 1, Define to 1 if you have the ‘getopt_long’ function.)
     38fi
     39AM_CONDITIONAL(NEED_GETOPT_LONG, test "$ac_cv_have_getopt_long" = "no")
    3540AC_SUBST(GETOPT_LIBS)
    3641
  • toilet/trunk/src/Makefile.am

    r4136 r4347  
    33
    44toilet_SOURCES = main.c toilet.h \
    5         render.c render.h \
    6         filter.c filter.h \
    7         export.c export.h \
    8         term.c figlet.c
     5                 render.c render.h \
     6                 filter.c filter.h \
     7                 export.c export.h \
     8                 term.c figlet.c \
     9                 $(GETOPT)
     10
    911toilet_CPPFLAGS = -DFONTDIR=\"$(datadir)/figlet\"
    1012toilet_CFLAGS = @CACA_CFLAGS@
    1113toilet_LDADD = @CACA_LIBS@ @GETOPT_LIBS@ @ZLIB_LIBS@
    1214
     15if NEED_GETOPT_LONG
     16GETOPT = mygetopt.c mygetopt.h
     17endif
     18
    1319echo-sources: ; echo $(SOURCES)
    1420
  • toilet/trunk/src/main.c

    r4135 r4347  
    2222#   include <inttypes.h>
    2323#endif
    24 #if defined HAVE_GETOPT_H
     24#if !defined HAVE_GETOPT_LONG
     25#   include "mygetopt.h"
     26#elif defined HAVE_GETOPT_H
    2527#   include <getopt.h>
    2628#endif
     
    3840#include "export.h"
    3941
     42#if defined HAVE_GETOPT_LONG
     43#   define mygetopt getopt_long
     44#   define myoptind optind
     45#   define myoptarg optarg
     46#   define myoption option
     47#endif
     48
    4049static void version(void);
    41 #if defined HAVE_GETOPT_H
    4250static void usage(void);
    43 #endif
    4451
    4552int main(int argc, char *argv[])
     
    6168    cx->nfilters = 0;
    6269
    63 #if defined HAVE_GETOPT_H
    6470    for(;;)
    6571    {
    66 #   ifdef HAVE_GETOPT_LONG
    67 #       define MOREINFO "Try `%s --help' for more information.\n"
     72#define MOREINFO "Try `%s --help' for more information.\n"
    6873        int option_index = 0;
    69         static struct option long_options[] =
     74        static struct myoption long_options[] =
    7075        {
    7176            /* Long option, needs arg, flag, short option */
     
    8691        };
    8792
    88         int c = getopt_long(argc, argv, "f:d:w:tsSkWoF:E:hI:v",
    89                             long_options, &option_index);
    90 #   else
    91 #       define MOREINFO "Try `%s -h' for more information.\n"
    92         int c = getopt(argc, argv, "f:d:w:tsSkWoF:E:hI:v");
    93 #   endif
     93        int c = mygetopt(argc, argv, "f:d:w:tsSkWoF:E:hI:v",
     94                         long_options, &option_index);
    9495        if(c == -1)
    9596            break;
     
    101102            return 0;
    102103        case 'I': /* --infocode */
    103             infocode = atoi(optarg);
     104            infocode = atoi(myoptarg);
    104105            break;
    105106        case 'v': /* --version */
     
    107108            return 0;
    108109        case 'f': /* --font */
    109             cx->font = optarg;
     110            cx->font = myoptarg;
    110111            break;
    111112        case 'd': /* --directory */
    112             cx->dir = optarg;
     113            cx->dir = myoptarg;
    113114            break;
    114115        case 'F': /* --filter */
    115             if(!strcmp(optarg, "list"))
     116            if(!strcmp(myoptarg, "list"))
    116117                return filter_list();
    117             if(filter_add(cx, optarg) < 0)
     118            if(filter_add(cx, myoptarg) < 0)
    118119                return -1;
    119120            break;
     
    125126            break;
    126127        case 'w': /* --width */
    127             cx->term_width = atoi(optarg);
     128            cx->term_width = atoi(myoptarg);
    128129            break;
    129130        case 't': /* --termwidth */
     
    155156            break;
    156157        case 'E': /* --export */
    157             if(!strcmp(optarg, "list"))
     158            if(!strcmp(myoptarg, "list"))
    158159                return export_list();
    159             if(export_set(cx, optarg) < 0)
     160            if(export_set(cx, myoptarg) < 0)
    160161                return -1;
    161162            break;
     
    175176        }
    176177    }
    177 #else
    178 #   define MOREINFO "Usage: %s message...\n"
    179     int optind = 1;
    180 #endif
    181178
    182179    switch(infocode)
     
    206203        return -1;
    207204
    208     if(optind >= argc)
     205    if(myoptind >= argc)
    209206        render_stdin(cx);
    210207    else
    211         render_list(cx, argc - optind, argv + optind);
     208        render_list(cx, argc - myoptind, argv + myoptind);
    212209
    213210    render_end(cx);
     
    217214}
    218215
    219 #if defined HAVE_GETOPT_H
    220 #   define USAGE \
     216#define USAGE \
    221217    "Usage: toilet [ -hkostvSW ] [ -d fontdirectory ]\n" \
    222218    "              [ -f fontfile ] [ -F filter ] [ -w outputwidth ]\n" \
    223219    "              [ -I infocode ] [ -E format ] [ message ]\n"
    224 #else
    225 #   define USAGE ""
    226 #endif
    227 
    228 #if defined HAVE_GETOPT_LONG
    229 #   define HELP \
     220
     221#define HELP \
    230222    "  -f, --font <name>        select the font\n" \
    231223    "  -d, --directory <dir>    specify font directory\n" \
     
    245237    "  -I, --infocode <code>    print FIGlet-compatible infocode\n" \
    246238    "  -v, --version            output version information and exit\n"
    247 #else
    248 #   define HELP \
    249     "  -f <name>           select the font\n" \
    250     "  -d <dir>            specify font directory\n" \
    251     "  -s, -S, -k, -W, -o  render mode (default, force smushing,\n" \
    252     "                      kerning, full width, overlap)\n" \
    253     "  -w <width>          set output width\n" \
    254     "  -t                  adapt to terminal's width\n" \
    255     "  -F <filters>        apply one or several filters to the text\n" \
    256     "  -F list             list available filters\n" \
    257     "  -E <format>         select export format\n" \
    258     "  -E list             list available export formats\n" \
    259     "  -h                  display this help and exit\n" \
    260     "  -I <code>           print FIGlet-compatible infocode\n" \
    261     "  -v                  output version information and exit\n"
    262 #endif
    263239
    264240static void version(void)
     
    279255}
    280256
    281 #if defined HAVE_GETOPT_H
    282257static void usage(void)
    283258{
    284259    printf("%s%s", HELP, USAGE);
    285260}
    286 #endif
    287 
     261
Note: See TracChangeset for help on using the changeset viewer.