aboutsummaryrefslogtreecommitdiff
path: root/src/gdbmtool.h
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2016-07-12 12:41:15 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2016-07-12 14:34:16 +0300
commit89f200b55b309aa67c1fbfc11d4de211725348f4 (patch)
tree39e2e43f29766cbebbdf61f160b5d062ea63c996 /src/gdbmtool.h
parente8cad816f36b1cad11bb67c96f0ce878cf30844e (diff)
downloadgdbm-89f200b55b309aa67c1fbfc11d4de211725348f4.tar.gz
gdbm-89f200b55b309aa67c1fbfc11d4de211725348f4.tar.bz2
Line-editing support in gdbmtool
* configure.ac: Check if GNU Readline is available. * src/Makefile.am: Add new files. * src/input-rl.c: New file. * src/input-std.c: New file. * src/gdbmtool.c (handler_param): Move declaration to the header file. (quit_handler): Call input_done. (command_tab): Add the "history" command. (command_generator): New function. (slist_new_s, slist_new_l) (slist_insert): New functions. (main): Call input_init and input_done. * src/gdbmtool.h: New protos. * src/gram.y: Use slist_insert to construct string lists. * src/lex.l (read_input): Remove. Use input_read instead. (print_prompt_at_bol): New function. (print_prompt): Remove. (make_prompt): New function. * NEWS: Document changes. * README: Document readline support. * doc/gdbm.texi: Document line editing in gdbmtool. * doc/gdbmtool.1: Likewise.
Diffstat (limited to 'src/gdbmtool.h')
-rw-r--r--src/gdbmtool.h31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/gdbmtool.h b/src/gdbmtool.h
index 84f1409..d0e9aa0 100644
--- a/src/gdbmtool.h
+++ b/src/gdbmtool.h
@@ -24,6 +24,8 @@
#include <stdarg.h>
#include <ctype.h>
+#define ARG_UNUSED __attribute__ ((__unused__))
+
/* Position in input file */
struct point
{
@@ -94,7 +96,7 @@ void lerror (struct locus *loc, const char *fmt, ...);
void terror (const char *fmt, ...);
-void print_prompt (void);
+char *make_prompt (void);
int setsource (const char *filename, int intr);
@@ -105,6 +107,17 @@ extern int open_mode;
#define GDBMTOOLRC ".gdbmtoolrc"
#define GDBMTOOL_DEFFILE "junk.gdbm"
+ssize_t input_read (FILE *fp, char *buf, size_t size);
+void input_init (void);
+void input_done (void);
+
+struct handler_param;
+void input_history_handler (struct handler_param *param);
+int input_history_begin (struct handler_param *param, size_t *exp_count);
+
+void print_prompt_at_bol (void);
+char *command_generator (const char *text, int state);
+
struct slist
{
@@ -112,8 +125,11 @@ struct slist
char *str;
};
-struct slist *slist_new (char *s);
+struct slist *slist_new (char const *s);
+struct slist *slist_new_s (char *s);
+struct slist *slist_new_l (char const *s, size_t l);
void slist_free (struct slist *);
+void slist_insert (struct slist **where, struct slist *what);
#define KV_STRING 0
#define KV_LIST 1
@@ -161,6 +177,14 @@ struct gdbmarglist
struct gdbmarg *head, *tail;
};
+struct handler_param
+{
+ int argc;
+ struct gdbmarg **argv;
+ FILE *fp;
+ void *data;
+};
+
void gdbmarglist_init (struct gdbmarglist *, struct gdbmarg *);
void gdbmarglist_add (struct gdbmarglist *, struct gdbmarg *);
void gdbmarglist_free (struct gdbmarglist *lst);
@@ -262,3 +286,6 @@ char *mkfilename (const char *dir, const char *file, const char *suf);
char *tildexpand (char *s);
int vgetyn (const char *prompt, va_list ap);
int getyn (const char *prompt, ...);
+
+int getnum (int *pnum, char *arg, char **endp);
+int get_screen_lines (void);

Return to:

Send suggestions and report system problems to the System administrator.