From 8e1c71529c2bf38a04d4a117e625e59044a0785a Mon Sep 17 00:00:00 2001
From: Denis Vlasenko <vda.linux@googlemail.com>
Date: Mon, 22 Jan 2007 07:21:38 +0000
Subject: Convert cmdedit into more generic line input facility (make history
 and completion optional at runtime). Use it for fdisk, as an example. Some
 unrelated fixes in fdisk are also here.

---
 include/libbb.h | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

(limited to 'include')

diff --git a/include/libbb.h b/include/libbb.h
index 0b066d1bd..f990b0ebd 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -583,6 +583,42 @@ extern unsigned long long bb_makedev(unsigned int major, unsigned int minor);
 #endif
 
 
+#if ENABLE_FEATURE_COMMAND_EDITING
+/* It's NOT just ENABLEd or disabled. It's a number: */
+#ifdef CONFIG_FEATURE_COMMAND_HISTORY
+#define MAX_HISTORY (CONFIG_FEATURE_COMMAND_HISTORY + 0)
+#else
+#define MAX_HISTORY 0
+#endif
+struct line_input_t {
+	int flags;
+	const char *path_lookup;
+#if MAX_HISTORY
+	int cnt_history;
+	int cur_history;
+	USE_FEATURE_COMMAND_SAVEHISTORY(const char *hist_file;)
+	char *history[MAX_HISTORY + 1];
+#endif
+};
+enum {
+	DO_HISTORY = 1 * (MAX_HISTORY > 0),
+	SAVE_HISTORY = 2 * (MAX_HISTORY > 0) * ENABLE_FEATURE_COMMAND_SAVEHISTORY,
+	TAB_COMPLETION = 4 * ENABLE_FEATURE_COMMAND_TAB_COMPLETION,
+	USERNAME_COMPLETION = 8 * ENABLE_FEATURE_COMMAND_USERNAME_COMPLETION,
+	VI_MODE = 0x10 * ENABLE_FEATURE_COMMAND_EDITING_VI,
+	WITH_PATH_LOOKUP = 0x20,
+	FOR_SHELL = DO_HISTORY | SAVE_HISTORY | TAB_COMPLETION | USERNAME_COMPLETION,
+};
+typedef struct line_input_t line_input_t;
+line_input_t *new_line_input_t(int flags);
+int read_line_input(const char* prompt, char* command, int maxsize, line_input_t *state);
+#else
+int read_line_input(const char* prompt, char* command, int maxsize);
+#define read_line_input(prompt, command, maxsize, state) \
+	read_line_input(prompt, command, maxsize)
+#endif
+
+
 #ifndef COMM_LEN
 #ifdef TASK_COMM_LEN
 enum { COMM_LEN = TASK_COMM_LEN };
-- 
cgit v1.2.3