Kaynağa Gözat

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

tags/v0.99.beta18
Sam Hocevar sam 14 yıl önce
ebeveyn
işleme
a1d0435da5
8 değiştirilmiş dosya ile 82 ekleme ve 84 silme
  1. +1
    -0
      caca/Makefile.am
  2. +25
    -0
      caca/caca.h
  3. +40
    -27
      caca/getopt.c
  4. +4
    -0
      caca/libcaca.vcproj
  5. +0
    -1
      configure.ac
  6. +0
    -4
      src/Makefile.am
  7. +12
    -23
      src/img2txt.c
  8. +0
    -29
      src/mygetopt.h

+ 1
- 0
caca/Makefile.am Dosyayı Görüntüle

@@ -45,6 +45,7 @@ libcaca_la_SOURCES = \
event.c \
time.c \
prof.c \
getopt.c \
$(codec_source) \
$(driver_source) \
$(NULL)


+ 25
- 0
caca/caca.h Dosyayı Görüntüle

@@ -138,6 +138,19 @@ struct caca_event
#endif
};

/** \brief Option parsing.
*
* This structure contains commandline parsing information for systems
* where getopt_long() is unavailable.
*/
struct caca_option
{
char const *name;
int has_arg;
int *flag;
int val;
};

/** \brief Special key values.
*
* Special key values returned by caca_get_event() for which there is no
@@ -508,6 +521,18 @@ __extern int caca_get_event_resize_width(caca_event_t const *);
__extern int caca_get_event_resize_height(caca_event_t const *);
/* @} */

/** \defgroup caca_process libcaca process management
*
* These functions help with various process handling tasks such as
* option parsing, DLL injection.
*
* @{ */
__extern int caca_optind;
__extern char *caca_optarg;
__extern int caca_getopt(int, char * const[], char const *,
struct caca_option const *, int *);
/* @} */

/** \brief DOS colours
*
* This enum lists the colour values for the DOS conio.h compatibility


src/mygetopt.c → caca/getopt.c Dosyayı Görüntüle

@@ -11,39 +11,51 @@
*/

/*
* mygetopt.c: getopt_long reimplementation
* getopt.c: getopt_long reimplementation
*/

#include "config.h"

#if defined HAVE_STDINT_H
# include <stdint.h>
#elif defined HAVE_INTTYPES_H
# include <inttypes.h>
#if !defined __KERNEL__
# include <stdio.h>
# include <string.h>
# if defined HAVE_GETOPT_H && defined HAVE_GETOPT_LONG
# include <getopt.h>
# endif
#endif

#include <stdio.h>
#include <string.h>
#include "caca.h"
#include "caca_internals.h"

#include "mygetopt.h"
int caca_optind = 1;
char *caca_optarg = NULL;

int myoptind = 1;
char *myoptarg = NULL;

/* XXX: this getopt_long implementation should not be trusted for other
* applications without any serious peer reviewing. It “just works” with
* zzuf but may fail miserably in other programs. */
int mygetopt(int argc, char * const _argv[], const char *optstring,
const struct myoption *longopts, int *longindex)
int caca_getopt(int argc, char * const _argv[], char const *optstring,
struct caca_option const *longopts, int *longindex)
{
#if defined HAVE_GETOPT_LONG
int ret;
optind = caca_optind;
optarg = caca_optarg;
ret = getopt_long(argc, _argv, optstring,
(struct option const *)longopts, longindex);
caca_optind = optind;
caca_optarg = optarg;
return ret;

#else
/* XXX: this getopt_long implementation should not be trusted for other
* applications without any serious peer reviewing. It “just works” with
* zzuf and a few libcaca programs but may fail miserably in other
* programs. */
char **argv = (char **)(uintptr_t)_argv;
char *flag;
int i;

if(myoptind >= argc)
if(caca_optind >= argc)
return -1;

flag = argv[myoptind];
flag = argv[caca_optind];

if(flag[0] == '-' && flag[1] != '-')
{
@@ -57,21 +69,21 @@ int mygetopt(int argc, char * const _argv[], const char *optstring,
if(!tmp || ret == ':')
return '?';

myoptind++;
caca_optind++;
if(tmp[1] == ':')
{
if(flag[2] != '\0')
myoptarg = flag + 2;
caca_optarg = flag + 2;
else
myoptarg = argv[myoptind++];
caca_optarg = argv[caca_optind++];
return ret;
}

if(flag[2] != '\0')
{
flag[1] = '-';
myoptind--;
argv[myoptind]++;
caca_optind--;
argv[caca_optind]++;
}

return ret;
@@ -96,15 +108,15 @@ int mygetopt(int argc, char * const _argv[], const char *optstring,
goto bad_opt;
if(longindex)
*longindex = i;
myoptind++;
myoptarg = flag + 2 + l + 1;
caca_optind++;
caca_optarg = flag + 2 + l + 1;
return longopts[i].val;
case '\0':
if(longindex)
*longindex = i;
myoptind++;
caca_optind++;
if(longopts[i].has_arg)
myoptarg = argv[myoptind++];
caca_optarg = argv[caca_optind++];
return longopts[i].val;
default:
break;
@@ -116,5 +128,6 @@ int mygetopt(int argc, char * const _argv[], const char *optstring,
}

return -1;
#endif
}


+ 4
- 0
caca/libcaca.vcproj Dosyayı Görüntüle

@@ -468,6 +468,10 @@
RelativePath="frame.c"
>
</File>
<File
RelativePath="getopt.c"
>
</File>
<File
RelativePath="graphics.c"
>


+ 0
- 1
configure.ac Dosyayı Görüntüle

@@ -132,7 +132,6 @@ AC_CHECK_FUNCS(getopt_long,
if test "$ac_cv_have_getopt_long" != "no"; then
AC_DEFINE(HAVE_GETOPT_LONG, 1, Define to 1 if you have the ‘getopt_long’ function.)
fi
AM_CONDITIONAL(NEED_GETOPT_LONG, test "$ac_cv_have_getopt_long" = "no")
AC_SUBST(GETOPT_LIBS)

AC_MSG_CHECKING(for Sleep)


+ 0
- 4
src/Makefile.am Dosyayı Görüntüle

@@ -40,9 +40,5 @@ else
fcntl_programs =
endif

if NEED_GETOPT_LONG
GETOPT = mygetopt.c mygetopt.h
endif

echo-sources: ; echo $(SOURCES)


+ 12
- 23
src/img2txt.c Dosyayı Görüntüle

@@ -19,18 +19,6 @@
# include <stdlib.h>
#endif

#if !defined HAVE_GETOPT_LONG
# include "mygetopt.h"
#elif defined HAVE_GETOPT_H
# include <getopt.h>
#endif
#if defined HAVE_GETOPT_LONG
# define mygetopt getopt_long
# define myoptind optind
# define myoptarg optarg
# define myoption option
#endif

#include "caca.h"

#include "common-image.h"
@@ -110,7 +98,7 @@ int main(int argc, char **argv)
for(;;)
{
int option_index = 0;
static struct myoption long_options[] =
static struct caca_option long_options[] =
{
{ "width", 1, NULL, 'W' },
{ "height", 1, NULL, 'H' },
@@ -124,38 +112,39 @@ int main(int argc, char **argv)
{ "help", 0, NULL, 'h' },
{ "version", 0, NULL, 'v' },
};
int c = mygetopt(argc, argv, "W:H:f:d:g:b:c:hvx:y:", long_options, &option_index);
int c = caca_getopt(argc, argv, "W:H:f:d:g:b:c:hvx:y:",
long_options, &option_index);
if(c == -1)
break;

switch(c)
{
case 'W': /* --width */
cols = atoi(myoptarg);
cols = atoi(caca_optarg);
break;
case 'H': /* --height */
lines = atoi(myoptarg);
lines = atoi(caca_optarg);
break;
case 'x': /* --width */
font_width = atoi(myoptarg);
font_width = atoi(caca_optarg);
break;
case 'y': /* --height */
font_height = atoi(myoptarg);
font_height = atoi(caca_optarg);
break;
case 'f': /* --format */
format = myoptarg;
format = caca_optarg;
break;
case 'd': /* --dither */
dither = myoptarg;
dither = caca_optarg;
break;
case 'g': /* --gamma */
gamma = atof(myoptarg);
gamma = atof(caca_optarg);
break;
case 'b': /* --brightness */
brightness = atof(myoptarg);
brightness = atof(caca_optarg);
break;
case 'c': /* --contrast */
contrast = atof(myoptarg);
contrast = atof(caca_optarg);
break;
case 'h': /* --help */
usage(argc, argv);


+ 0
- 29
src/mygetopt.h Dosyayı Görüntüle

@@ -1,29 +0,0 @@
/*
* libcaca Colour ASCII-Art library
* Copyright (c) 2002-2010 Sam Hocevar <sam@hocevar.net>
* All Rights Reserved
*
* This program is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What The Fuck You Want
* To Public License, Version 2, as published by Sam Hocevar. See
* http://sam.zoy.org/wtfpl/COPYING for more details.
*/

/*
* mygetopt.h: getopt_long reimplementation
*/

struct myoption
{
const char *name;
int has_arg;
int *flag;
int val;
};

extern int myoptind;
extern char *myoptarg;

int mygetopt(int, char * const[], const char *, const struct myoption *, int *);


Yükleniyor…
İptal
Kaydet