@@ -24,19 +24,7 @@ if test "$build" != "$host" -a "${PKG_CONFIG_LIBDIR}" = ""; then | |||
export PKG_CONFIG_LIBDIR=/dev/null | |||
fi | |||
AC_CHECK_HEADERS(getopt.h sys/ioctl.h) | |||
ac_cv_have_getopt_long="no" | |||
AC_CHECK_FUNCS(getopt_long, | |||
[ac_cv_have_getopt_long="yes"], | |||
[AC_CHECK_LIB(gnugetopt, getopt_long, | |||
[ac_cv_have_getopt_long="yes" | |||
GETOPT_LIBS="${GETOPT_LIBS} -lgnugetopt"])]) | |||
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_CHECK_HEADERS(sys/ioctl.h) | |||
AC_CACHE_CHECK([for TIOCGWINSZ], | |||
[ac_cv_have_tiocgwinsz], | |||
@@ -51,10 +39,10 @@ if test "${ac_cv_have_tiocgwinsz}" = "yes"; then | |||
fi | |||
CUCUL="no" | |||
PKG_CHECK_MODULES(CACA, caca >= 0.99.beta17, | |||
PKG_CHECK_MODULES(CACA, caca >= 0.99.beta18, | |||
[CUCUL="yes"], | |||
[AC_MSG_RESULT(no) | |||
AC_MSG_ERROR([you need libcaca version 0.99.beta17 or later])]) | |||
AC_MSG_ERROR([you need libcaca version 0.99.beta18 or later])]) | |||
AC_MSG_CHECKING([for release date]) | |||
tmp="${stamp%-*}" | |||
@@ -5,16 +5,11 @@ toilet_SOURCES = main.c toilet.h \ | |||
render.c render.h \ | |||
filter.c filter.h \ | |||
export.c export.h \ | |||
term.c figlet.c \ | |||
$(GETOPT) | |||
term.c figlet.c | |||
toilet_CPPFLAGS = -DFONTDIR=\"$(datadir)/figlet\" | |||
toilet_CFLAGS = @CACA_CFLAGS@ | |||
toilet_LDADD = @CACA_LIBS@ @GETOPT_LIBS@ | |||
if NEED_GETOPT_LONG | |||
GETOPT = mygetopt.c mygetopt.h | |||
endif | |||
toilet_LDADD = @CACA_LIBS@ | |||
echo-sources: ; echo $(SOURCES) | |||
@@ -19,11 +19,6 @@ | |||
#if defined HAVE_INTTYPES_H | |||
# include <inttypes.h> | |||
#endif | |||
#if !defined HAVE_GETOPT_LONG | |||
# include "mygetopt.h" | |||
#elif defined HAVE_GETOPT_H | |||
# include <getopt.h> | |||
#endif | |||
#if defined HAVE_SYS_IOCTL_H && defined HAVE_TIOCGWINSZ | |||
# include <sys/ioctl.h> | |||
#endif | |||
@@ -37,13 +32,6 @@ | |||
#include "filter.h" | |||
#include "export.h" | |||
#if defined HAVE_GETOPT_LONG | |||
# define mygetopt getopt_long | |||
# define myoptind optind | |||
# define myoptarg optarg | |||
# define myoption option | |||
#endif | |||
static void version(void); | |||
static void usage(void); | |||
@@ -69,7 +57,7 @@ int main(int argc, char *argv[]) | |||
{ | |||
#define MOREINFO "Try `%s --help' for more information.\n" | |||
int option_index = 0; | |||
static struct myoption long_options[] = | |||
static struct caca_option long_options[] = | |||
{ | |||
/* Long option, needs arg, flag, short option */ | |||
{ "font", 1, NULL, 'f' }, | |||
@@ -88,8 +76,8 @@ int main(int argc, char *argv[]) | |||
{ NULL, 0, NULL, 0 } | |||
}; | |||
int c = mygetopt(argc, argv, "f:d:w:tsSkWoF:E:hI:v", | |||
long_options, &option_index); | |||
int c = caca_getopt(argc, argv, "f:d:w:tsSkWoF:E:hI:v", | |||
long_options, &option_index); | |||
if(c == -1) | |||
break; | |||
@@ -99,21 +87,21 @@ int main(int argc, char *argv[]) | |||
usage(); | |||
return 0; | |||
case 'I': /* --infocode */ | |||
infocode = atoi(myoptarg); | |||
infocode = atoi(caca_optarg); | |||
break; | |||
case 'v': /* --version */ | |||
version(); | |||
return 0; | |||
case 'f': /* --font */ | |||
cx->font = myoptarg; | |||
cx->font = caca_optarg; | |||
break; | |||
case 'd': /* --directory */ | |||
cx->dir = myoptarg; | |||
cx->dir = caca_optarg; | |||
break; | |||
case 'F': /* --filter */ | |||
if(!strcmp(myoptarg, "list")) | |||
if(!strcmp(caca_optarg, "list")) | |||
return filter_list(); | |||
if(filter_add(cx, myoptarg) < 0) | |||
if(filter_add(cx, caca_optarg) < 0) | |||
return -1; | |||
break; | |||
case 130: /* --gay */ | |||
@@ -123,7 +111,7 @@ int main(int argc, char *argv[]) | |||
filter_add(cx, "metal"); | |||
break; | |||
case 'w': /* --width */ | |||
cx->term_width = atoi(myoptarg); | |||
cx->term_width = atoi(caca_optarg); | |||
break; | |||
case 't': /* --termwidth */ | |||
{ | |||
@@ -153,9 +141,9 @@ int main(int argc, char *argv[]) | |||
cx->hmode = H_OVERLAP; | |||
break; | |||
case 'E': /* --export */ | |||
if(!strcmp(myoptarg, "list")) | |||
if(!strcmp(caca_optarg, "list")) | |||
return export_list(); | |||
if(export_set(cx, myoptarg) < 0) | |||
if(export_set(cx, caca_optarg) < 0) | |||
return -1; | |||
break; | |||
case 140: /* --irc */ | |||
@@ -200,10 +188,10 @@ int main(int argc, char *argv[]) | |||
if(render_init(cx) < 0) | |||
return -1; | |||
if(myoptind >= argc) | |||
if(caca_optind >= argc) | |||
render_stdin(cx); | |||
else | |||
render_list(cx, argc - myoptind, argv + myoptind); | |||
render_list(cx, argc - caca_optind, argv + caca_optind); | |||
render_end(cx); | |||
filter_end(cx); | |||
@@ -1,120 +0,0 @@ | |||
/* | |||
* TOIlet The Other Implementation’s letters | |||
* 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.c: getopt_long reimplementation | |||
*/ | |||
#include "config.h" | |||
#if defined HAVE_STDINT_H | |||
# include <stdint.h> | |||
#elif defined HAVE_INTTYPES_H | |||
# include <inttypes.h> | |||
#endif | |||
#include <stdio.h> | |||
#include <string.h> | |||
#include "mygetopt.h" | |||
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) | |||
{ | |||
char **argv = (char **)(uintptr_t)_argv; | |||
char *flag; | |||
int i; | |||
if(myoptind >= argc) | |||
return -1; | |||
flag = argv[myoptind]; | |||
if(flag[0] == '-' && flag[1] != '-') | |||
{ | |||
char *tmp; | |||
int ret = flag[1]; | |||
if(ret == '\0') | |||
return -1; | |||
tmp = strchr(optstring, ret); | |||
if(!tmp || ret == ':') | |||
return '?'; | |||
myoptind++; | |||
if(tmp[1] == ':') | |||
{ | |||
if(flag[2] != '\0') | |||
myoptarg = flag + 2; | |||
else | |||
myoptarg = argv[myoptind++]; | |||
return ret; | |||
} | |||
if(flag[2] != '\0') | |||
{ | |||
flag[1] = '-'; | |||
myoptind--; | |||
argv[myoptind]++; | |||
} | |||
return ret; | |||
} | |||
if(flag[0] == '-' && flag[1] == '-') | |||
{ | |||
if(flag[2] == '\0') | |||
return -1; | |||
for(i = 0; longopts[i].name; i++) | |||
{ | |||
size_t l = strlen(longopts[i].name); | |||
if(strncmp(flag + 2, longopts[i].name, l)) | |||
continue; | |||
switch(flag[2 + l]) | |||
{ | |||
case '=': | |||
if(!longopts[i].has_arg) | |||
goto bad_opt; | |||
if(longindex) | |||
*longindex = i; | |||
myoptind++; | |||
myoptarg = flag + 2 + l + 1; | |||
return longopts[i].val; | |||
case '\0': | |||
if(longindex) | |||
*longindex = i; | |||
myoptind++; | |||
if(longopts[i].has_arg) | |||
myoptarg = argv[myoptind++]; | |||
return longopts[i].val; | |||
default: | |||
break; | |||
} | |||
} | |||
bad_opt: | |||
fprintf(stderr, "%s: unrecognized option `%s'\n", argv[0], flag); | |||
return '?'; | |||
} | |||
return -1; | |||
} | |||
@@ -1,29 +0,0 @@ | |||
/* | |||
* TOIlet The Other Implementation’s letters | |||
* 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 *); | |||