diff --git a/contrib/saucer/Makefile.in b/contrib/saucer/Makefile.in index 2dbac4e8993377cea0a006535048c87511beb014..39aa66577a0526e5a690ced6c8e116ecc490f591 100644 --- a/contrib/saucer/Makefile.in +++ b/contrib/saucer/Makefile.in @@ -6,8 +6,10 @@ OBJS= main.o LDAP_INCDIR= ../../include LDAP_LIBDIR= ../../libraries +READLINE_LIBS = @READLINE_LIBS@ + XLIBS = -lldap -llber -llutil -XXLIBS = $(KRB_LIBS) $(LUTIL_LIBS) +XXLIBS = $(KRB_LIBS) $(LUTIL_LIBS) $(READLINE_LIBS) $(TERMCAP_LIBS) saucer: ${OBJS} $(LDAP_LIBDEPEND) $(LTLINK) -o $@ $(OBJS) $(LIBS) diff --git a/contrib/saucer/main.c b/contrib/saucer/main.c index 12d967a3b6a8d2dc04bca40c7c20f30bd29bcfd2..cc52dee482e811f04cd1b7ef56b37cb6f6c128e5 100644 --- a/contrib/saucer/main.c +++ b/contrib/saucer/main.c @@ -13,6 +13,8 @@ * 'saucer' LDAP command-line client source code. * * Author: Eric Rosenquist, 1994. + * + * 07-Mar-1999 readline support added: O. Steffensen (oddbjorn@tricknology.org) */ #include "portable.h" @@ -20,6 +22,13 @@ #include <stdio.h> #include <stdlib.h> +#ifdef HAVE_READLINE +# include <readline/readline.h> +# ifdef HAVE_READLINE_HISTORY_H +# include <readline/history.h> +# endif +#endif + #include <ac/ctype.h> #include <ac/string.h> #include <ac/unistd.h> @@ -528,13 +537,39 @@ void do_commands(FILE *file) { char cmd_buf[BUFSIZ]; int tty = isatty(fileno(file)); + char *buf = cmd_buf; + int status; for (;;) { if (tty) - printf("Cmd? "); - if (!fgets(cmd_buf, sizeof(cmd_buf), file)) - break; - if (do_command(cmd_buf)) + { + char prompt[40]; + sprintf(prompt, (strlen(default_dn) < 18 + ? "saucer dn=%s> " + : "saucer dn=%.15s..> "), default_dn); +#ifndef HAVE_READLINE + fputs (prompt, stdout); +#else + buf = readline (prompt); + if (!buf) + break; + add_history (buf); +#endif + } +#ifdef HAVE_READLINE + else +#endif + { + if (!fgets(cmd_buf, sizeof(cmd_buf), file)) + break; + } + + status = do_command(buf); +#ifdef HAVE_READLINE + if (tty) + free(buf); +#endif + if (status) break; } }