diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-12 12:41:15 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-07-12 14:34:16 +0300 |
commit | 89f200b55b309aa67c1fbfc11d4de211725348f4 (patch) | |
tree | 39e2e43f29766cbebbdf61f160b5d062ea63c996 /src/gdbmtool.h | |
parent | e8cad816f36b1cad11bb67c96f0ce878cf30844e (diff) | |
download | gdbm-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.h | 31 |
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); |