From 34827a892c05ce5634b3c0dbb3d0502c249c80d1 Mon Sep 17 00:00:00 2001
From: Jeff Lenk <jeff@jefflenk.com>
Date: Mon, 26 Sep 2011 09:15:12 -0500
Subject: [PATCH] fix fs_cli for windows after recent changes - may need more
 work

---
 libs/esl/fs_cli.c          | 25 ++++++++++++++++++++-----
 libs/esl/src/include/esl.h | 16 +++++++++++++---
 2 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/libs/esl/fs_cli.c b/libs/esl/fs_cli.c
index 4dc2c5c6eb..775cf9e4b6 100644
--- a/libs/esl/fs_cli.c
+++ b/libs/esl/fs_cli.c
@@ -40,7 +40,7 @@
 #define KEY_INSERT 8
 #define PROMPT_OP 9
 static int console_bufferInput (char *buf, int len, char *cmd, int key);
-static unsigned char esl_console_complete(const char *buffer, const char *cursor);
+static unsigned char esl_console_complete(const char *buffer, const char *cursor, const char *lastchar);
 #endif
 
 #ifdef HAVE_EDITLINE
@@ -68,9 +68,9 @@ static int allow_ctl_c = 0;
 static char bare_prompt_str[512] = "";
 static int bare_prompt_str_len = 0;
 static char prompt_str[512] = "";
-static char prompt_color[12] = ESL_SEQ_DEFAULT_COLOR;
-static char input_text_color[12] = ESL_SEQ_DEFAULT_COLOR;
-static char output_text_color[12] = ESL_SEQ_DEFAULT_COLOR;
+static char prompt_color[12] = {ESL_SEQ_DEFAULT_COLOR};
+static char input_text_color[12] = {ESL_SEQ_DEFAULT_COLOR};
+static char output_text_color[12] = {ESL_SEQ_DEFAULT_COLOR};
 static cli_profile_t profiles[128] = {{{0}}};
 static cli_profile_t internal_profile = {{ 0 }};
 static int pcount = 0;
@@ -79,9 +79,11 @@ static cli_profile_t *global_profile;
 static int running = 1;
 static int thread_running = 0;
 static char *filter_uuid;
+#ifndef WIN32
 static EditLine *el;
 static History *myhistory;
 static HistEvent ev;
+#endif
 
 static void _sleep_ns(int secs, long nsecs) {
 #ifndef WIN32
@@ -234,7 +236,7 @@ static int console_bufferInput (char *addchars, int len, char *cmd, int key)
 		return 0;
 	}
 	if (key == KEY_TAB) {
-		esl_console_complete(cmd, cmd+iCmdBuffer);
+		esl_console_complete(cmd, cmd+iCmdBuffer, &cmd[iCmdBuffer-1]);
 		return 0;
 	}
 	if (key == KEY_UP || key == KEY_DOWN || key == CLEAR_OP) {
@@ -583,6 +585,8 @@ static void clear_line(void)
 
 static void redisplay(void)
 {
+#ifdef WIN32
+#else
 	const LineInfo *lf = el_line(el);
 	const char *c = lf->buffer;
 	printf("%s",prompt_str);
@@ -598,6 +602,7 @@ static void redisplay(void)
 	}
 	fflush(stdout);
 	return;
+#endif
 }
 
 static int output_printf(const char *fmt, ...)
@@ -605,7 +610,9 @@ static int output_printf(const char *fmt, ...)
 	va_list ap;
 	int r;
 	va_start(ap, fmt);
+#ifndef WIN32
 	printf("%s", output_text_color);
+#endif
 	r = vprintf(fmt, ap);
 	va_end(ap);
 	return r;
@@ -984,7 +991,11 @@ static const char* match_color(const char *s) {
 		}
 		map++;
 	}
+#ifdef WIN32
+	return "white";
+#else
 	return ESL_SEQ_DEFAULT_COLOR;
+#endif
 }
 
 static void read_config(const char *dft_cfile, const char *cfile) {
@@ -1240,7 +1251,11 @@ int main(int argc, char *argv[])
 		snprintf(bare_prompt_str, sizeof(bare_prompt_str), "freeswitch@%s> ", profile->name);
 	}
 	bare_prompt_str_len = strlen(bare_prompt_str);
+#ifdef WIN32
+	snprintf(prompt_str, sizeof(prompt_str), "%s", bare_prompt_str); /* Not supporting this for now */
+#else
 	snprintf(prompt_str, sizeof(prompt_str), "%s%s%s", prompt_color, bare_prompt_str, input_text_color);
+#endif
  connect:
 	connected = 0;
 	while (--loops > 0) {
diff --git a/libs/esl/src/include/esl.h b/libs/esl/src/include/esl.h
index a9e5df140b..74fd2342a5 100644
--- a/libs/esl/src/include/esl.h
+++ b/libs/esl/src/include/esl.h
@@ -61,12 +61,22 @@ typedef enum {
 
 #ifdef WIN32
 #define ESL_SEQ_FWHITE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY
+#define ESL_SEQ_BWHITE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE
 #define ESL_SEQ_FRED FOREGROUND_RED | FOREGROUND_INTENSITY
-#define ESL_SEQ_FMAGEN FOREGROUND_BLUE | FOREGROUND_RED
-#define ESL_SEQ_FCYAN FOREGROUND_GREEN | FOREGROUND_BLUE
-#define ESL_SEQ_FGREEN FOREGROUND_GREEN
+#define ESL_SEQ_BRED FOREGROUND_RED
+#define ESL_SEQ_FMAGEN FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY
+#define ESL_SEQ_BMAGEN FOREGROUND_BLUE | FOREGROUND_RED
+#define ESL_SEQ_FCYAN FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY
+#define ESL_SEQ_BCYAN FOREGROUND_GREEN | FOREGROUND_BLUE
+#define ESL_SEQ_FGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY
+#define ESL_SEQ_BGREEN FOREGROUND_GREEN 
 #define ESL_SEQ_FYELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
+#define ESL_SEQ_BYELLOW FOREGROUND_RED | FOREGROUND_GREEN
 #define ESL_SEQ_DEFAULT_COLOR ESL_SEQ_FWHITE
+#define ESL_SEQ_FBLUE FOREGROUND_BLUE | FOREGROUND_INTENSITY
+#define ESL_SEQ_BBLUE FOREGROUND_BLUE 
+#define ESL_SEQ_FBLACK 0 | FOREGROUND_INTENSITY
+#define ESL_SEQ_BBLACK 0 
 #else
 #define ESL_SEQ_ESC "\033["
 /* Ansi Control character suffixes */