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 @@ | |||
24 | #include <stdarg.h> | 24 | #include <stdarg.h> |
25 | #include <ctype.h> | 25 | #include <ctype.h> |
26 | 26 | ||
27 | #define ARG_UNUSED __attribute__ ((__unused__)) | ||
28 | |||
27 | /* Position in input file */ | 29 | /* Position in input file */ |
28 | struct point | 30 | struct point |
29 | { | 31 | { |
@@ -94,7 +96,7 @@ void lerror (struct locus *loc, const char *fmt, ...); | |||
94 | 96 | ||
95 | void terror (const char *fmt, ...); | 97 | void terror (const char *fmt, ...); |
96 | 98 | ||
97 | void print_prompt (void); | 99 | char *make_prompt (void); |
98 | 100 | ||
99 | int setsource (const char *filename, int intr); | 101 | int setsource (const char *filename, int intr); |
100 | 102 | ||
@@ -104,6 +106,17 @@ extern int open_mode; | |||
104 | 106 | ||
105 | #define GDBMTOOLRC ".gdbmtoolrc" | 107 | #define GDBMTOOLRC ".gdbmtoolrc" |
106 | #define GDBMTOOL_DEFFILE "junk.gdbm" | 108 | #define GDBMTOOL_DEFFILE "junk.gdbm" |
109 | |||
110 | ssize_t input_read (FILE *fp, char *buf, size_t size); | ||
111 | void input_init (void); | ||
112 | void input_done (void); | ||
113 | |||
114 | struct handler_param; | ||
115 | void input_history_handler (struct handler_param *param); | ||
116 | int input_history_begin (struct handler_param *param, size_t *exp_count); | ||
117 | |||
118 | void print_prompt_at_bol (void); | ||
119 | char *command_generator (const char *text, int state); | ||
107 | 120 | ||
108 | 121 | ||
109 | struct slist | 122 | struct slist |
@@ -112,8 +125,11 @@ struct slist | |||
112 | char *str; | 125 | char *str; |
113 | }; | 126 | }; |
114 | 127 | ||
115 | struct slist *slist_new (char *s); | 128 | struct slist *slist_new (char const *s); |
129 | struct slist *slist_new_s (char *s); | ||
130 | struct slist *slist_new_l (char const *s, size_t l); | ||
116 | void slist_free (struct slist *); | 131 | void slist_free (struct slist *); |
132 | void slist_insert (struct slist **where, struct slist *what); | ||
117 | 133 | ||
118 | #define KV_STRING 0 | 134 | #define KV_STRING 0 |
119 | #define KV_LIST 1 | 135 | #define KV_LIST 1 |
@@ -161,6 +177,14 @@ struct gdbmarglist | |||
161 | struct gdbmarg *head, *tail; | 177 | struct gdbmarg *head, *tail; |
162 | }; | 178 | }; |
163 | 179 | ||
180 | struct handler_param | ||
181 | { | ||
182 | int argc; | ||
183 | struct gdbmarg **argv; | ||
184 | FILE *fp; | ||
185 | void *data; | ||
186 | }; | ||
187 | |||
164 | void gdbmarglist_init (struct gdbmarglist *, struct gdbmarg *); | 188 | void gdbmarglist_init (struct gdbmarglist *, struct gdbmarg *); |
165 | void gdbmarglist_add (struct gdbmarglist *, struct gdbmarg *); | 189 | void gdbmarglist_add (struct gdbmarglist *, struct gdbmarg *); |
166 | void gdbmarglist_free (struct gdbmarglist *lst); | 190 | void gdbmarglist_free (struct gdbmarglist *lst); |
@@ -262,3 +286,6 @@ char *mkfilename (const char *dir, const char *file, const char *suf); | |||
262 | char *tildexpand (char *s); | 286 | char *tildexpand (char *s); |
263 | int vgetyn (const char *prompt, va_list ap); | 287 | int vgetyn (const char *prompt, va_list ap); |
264 | int getyn (const char *prompt, ...); | 288 | int getyn (const char *prompt, ...); |
289 | |||
290 | int getnum (int *pnum, char *arg, char **endp); | ||
291 | int get_screen_lines (void); | ||