Mercurial > hg > forks > yadex
changeset 37:5f366c1ed459
Add support for GNU readline library for easier editing of the commands.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 24 Sep 2011 17:54:36 +0300 |
parents | 50df08fdfb2c |
children | e5cd0f139fc1 |
files | GNUmakefile configure src/yadex.cc |
diffstat | 3 files changed, 74 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/GNUmakefile Sat Sep 24 17:25:34 2011 +0300 +++ b/GNUmakefile Sat Sep 24 17:54:36 2011 +0300 @@ -383,7 +383,7 @@ $(OBJDIR)/yadex: $(OBJ_CONFIG) $(OBJ_YADEX) $(OBJ_ATCLIB) $(MAKEFILE) @echo "** Linking Yadex" $(CXX) $(OBJ_CONFIG) $(OBJ_YADEX) $(OBJ_ATCLIB) -o $@ \ - -L$(X11LIBDIR) -lX11 -lm -lc $(LDFLAGS) + -L$(X11LIBDIR) -lX11 -lm -lc $(LDFLAGS) $(EXTRA_LDFLAGS) .PHONY: test test: @@ -498,7 +498,7 @@ $(DOBJDIR)/yadex: $(DOBJ_CONFIG) $(DOBJ_YADEX) $(DOBJ_ATCLIB) $(MAKEFILE) @echo "** Linking Yadex" $(CXX) $(DOBJ_CONFIG) $(DOBJ_YADEX) $(DOBJ_ATCLIB) -o $@ \ - -L$(X11LIBDIR) -lX11 -lm -lc $(DLDFLAGS) + -L$(X11LIBDIR) -lX11 -lm -lc $(DLDFLAGS) $(EXTRA_LDFLAGS) .PHONY: dtest dtest: @@ -586,6 +586,7 @@ @echo "HAVE_NANOSLEEP \"$(HAVE_NANOSLEEP)\"" @echo "HAVE_SNPRINTF \"$(HAVE_SNPRINTF)\"" @echo "HAVE_USLEEP \"$(HAVE_USLEEP)\"" + @echo "HAVE_READLINE \"$(HAVE_READLINE)\"" @echo "LDFLAGS \"$(LDFLAGS)\"" @echo "MANDIR \"$(MANDIR)\"" @echo "OS \"$(OS)\"" @@ -740,15 +741,15 @@ # To compile the modules of Atclib # (normal and debugging versions) $(OBJDIR_ATCLIB)/%.o: atclib/%.c $(HEADERS_ATCLIB) - $(CC) -c $(CFLAGS) $< -o $@ + $(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(DOBJDIR_ATCLIB)/%.o: atclib/%.c $(HEADERS_ATCLIB) - $(CC) -c $(DCFLAGS) $< -o $@ + $(CC) -c $(DCFLAGS) $(EXTRA_CFLAGS) $< -o $@ # To see the generated assembly code # for the modules of Yadex $(OBJDIR)/%.S: src/%.cc $(MAKEFILE) - $(CXX) $(CXXFLAGS) -S -fverbose-asm -Iatclib -Iboost -I$(X11INCLUDEDIR)\ + $(CXX) $(CXXFLAGS) $(EXTRA_CXXFLAGS) -S -fverbose-asm -Iatclib -Iboost -I$(X11INCLUDEDIR)\ $< -o $@ # A source file containing the credits
--- a/configure Sat Sep 24 17:25:34 2011 +0300 +++ b/configure Sat Sep 24 17:54:36 2011 +0300 @@ -26,6 +26,7 @@ CC= CXX= +HAVE_READLINE=auto HAVE_GETTIMEOFDAY= HAVE_NANOSLEEP= HAVE_SNPRINTF= @@ -45,7 +46,7 @@ printf '%s' "$3" >$cdir/$cbasename printf 'checking %s...' "$1" - if (cd $cdir && $CC -c $cbasename >$cout 2>&1) + if (cd $cdir && $CC -c $cbasename $4 $5 $6 >$cout 2>&1) then echo " yes" eval "$2=1" @@ -136,6 +137,7 @@ genbool NANOSLEEP genbool SNPRINTF genbool USLEEP + genbool READLINE echo echo 'extern const char *yadex_etc_path[];' echo 'extern const char *yadex_share_path[];' @@ -154,52 +156,32 @@ --help) echo "Usage:" echo " configure --help" - echo " configure [--prefix path] [--cc string] [--cxx string]" + echo " configure [--prefix=path] [--cc=string] [--cxx=string] [--with-readline=path] [--without-readline]" exit 0 ;; - --cc) - shift - if [ "$#" -lt 1 ] - then - echo "configure: --cc requires an argument" 1>&2 - exit 1 - fi - CC="$1" - ;; - --cc=*) CC=`expr "x$1" : 'x--cc=\(.*\)'` ;; - --cxx) - shift - if [ "$#" -lt 1 ] - then - echo "configure: --cxx requires an argument" 1>&2 - exit 1 - fi - CXX="$1" - ;; - --cxx=*) CXX=`expr "x$1" : 'x--cxx=\(.*\)'` ;; - --prefix) - shift - if [ "$#" -lt 1 ] - then - echo "configure: --prefix requires an argument" 1>&2 - exit 1 - fi - PREFIX="$1" - ;; - --prefix=*) PREFIX=`expr "x$1" : 'x--prefix=\(.*\)'` ;; + --with-readline=*) + READLINE_PREFIX=`expr "x$1" : 'x--with-readline=\(.*\)'` + HAVE_READLINE=yes + ;; + + --without-readline*) + HAVE_READLINE= + ;; + + -*) echo "configure: bad argument \"$1\"" 1>&2 exit 1 @@ -270,7 +252,7 @@ cdir=/tmp cbasename=${APPNAME}_$$.c cout=${APPNAME}_$$.out -printf "checking whether the C compiler works..." +echo -n "checking whether the C compiler works..." echo 'int n;' >$cdir/$cbasename if (cd $cdir && $CC -c $cbasename >$cout 2>&1) then @@ -339,6 +321,35 @@ ' || true # +# Do we have GNU readline? +# +READLINE_FLAGS= +if [ "x$HAVE_READLINE" = "xauto" -o "x$HAVE_READLINE" = "xyes" ] +then + if [ "x$HAVE_READLINE" = "xyes" ] + then + READLINE_FLAGS="-I$READLINE_PREFIX/include -L$READLINE_PREFIX/lib" + fi + + check "for readline" HAVE_READLINE ' +#include <stdio.h> +#include <readline/readline.h> +#include <readline/history.h> +int main (int argc, char *argv[]) +{ + char* input = readline("test"); + add_history(input); + return 0; +} + ' -lreadline $OPTS +fi + +if [ "x$HAVE_READLINE" != "x" ] +then + EXTRA_LDFLAGS="$EXTRA_LDFLAGS $READLINE_FLAGS -lreadline" +fi + +# # Look for a C++ compiler # # We try "g++" first, then "c++", then "cxx". @@ -455,11 +466,15 @@ echo "HAVE_NANOSLEEP = $HAVE_NANOSLEEP" echo "HAVE_SNPRINTF = $HAVE_SNPRINTF" echo "HAVE_USLEEP = $HAVE_USLEEP" + echo "HAVE_READLINE = $HAVE_READLINE" echo "INTERFACE = $INTERFACE" echo "MANDIR = $MANDIR" echo "PLATFORM = $PLATFORM" echo "SHAREDIR = $SHAREDIR" | sed "s/%v/$VERSION/g" echo "SHAREDIRNV = $SHAREDIRNV" + echo "EXTRA_CFLAGS = $EXTRA_CFLAGS" + echo "EXTRA_CXXFLAGS = $EXTRA_CXXFLAGS" + echo "EXTRA_LDFLAGS = $EXTRA_LDFLAGS" ) >$BUILDDIR/Makefile.config #
--- a/src/yadex.cc Sat Sep 24 17:25:34 2011 +0300 +++ b/src/yadex.cc Sat Sep 24 17:54:36 2011 +0300 @@ -55,6 +55,10 @@ #include "wadres.h" #include "wads2.h" +#ifdef Y_READLINE +#include <readline/readline.h> +#include <readline/history.h> +#endif /* * Constants (declared in yadex.h) @@ -571,13 +575,20 @@ static void MainLoop() { +#ifdef Y_READLINE + char *input = NULL; +#else char input[120]; +#endif char *com, *out; FILE *file, *raw; for (;;) { /* get the input */ +#ifdef Y_READLINE + input = readline("yadex: "); +#else printf("yadex: "); if (!fgets(input, sizeof input, stdin)) { @@ -588,6 +599,7 @@ /* Strip the trailing '\n' */ if (strlen(input) > 0 && input[strlen(input) - 1] == '\n') input[strlen(input) - 1] = '\0'; +#endif /* eat the white space and get the first command word */ com = strtok(input, " "); @@ -710,11 +722,10 @@ { printf("Level %s not found.", com); // Hint absent-minded users - if (tolower(*com) == 'e' && yg_level_name == YGLN_MAP01 - || tolower(*com) == 'm' && yg_level_name == YGLN_E1M1) + if ((tolower(*com) == 'e' && yg_level_name == YGLN_MAP01) || + (tolower(*com) == 'm' && yg_level_name == YGLN_E1M1)) printf(" You are in %s mode.", Game); - else if (tolower(*com) == 'e' && com[1] > '1' - && !Registered) + else if (tolower(*com) == 'e' && com[1] > '1' && !Registered) printf(" You have the shareware iwad."); putchar('\n'); continue; @@ -1142,6 +1153,11 @@ /* unknown command */ else printf("Unknown command \"%s\"!\n", com); + +#ifdef Y_READLINE + add_history(input); + free(input); +#endif } }