X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/212ef3a04d19bcb5299c38fd153ee434e0f26efd..36f05880545d24cc53533c57709fdbf61bad12ba:/client/ui.c

diff --git a/client/ui.c b/client/ui.c
index da21049e..09479620 100644
--- a/client/ui.c
+++ b/client/ui.c
@@ -10,19 +10,23 @@
 //-----------------------------------------------------------------------------
 
 #include <stdarg.h>
+#include <stdlib.h>
 #include <stdio.h>
 #include <time.h>
+#include <readline/readline.h>
 
 #include "ui.h"
 
 double CursorScaleFactor;
-int PlotGridX, PlotGridY;
+int PlotGridX, PlotGridY, PlotGridXdefault= 64, PlotGridYdefault= 64;
 int offline;
 
 static char *logfilename = "proxmark3.log";
 
 void PrintAndLog(char *fmt, ...)
 {
+	char *saved_line;
+	int saved_point;
   va_list argptr, argptr2;
   static FILE *logfile = NULL;
   static int logging=1;
@@ -34,12 +38,32 @@ void PrintAndLog(char *fmt, ...)
       logging=0;
     }
   }
+	
+	int need_hack = (rl_readline_state & RL_STATE_READCMD) > 0;
 
+	if (need_hack) {
+		saved_point = rl_point;
+		saved_line = rl_copy_text(0, rl_end);
+		rl_save_prompt();
+		rl_replace_line("", 0);
+		rl_redisplay();
+	}
+	
   va_start(argptr, fmt);
   va_copy(argptr2, argptr);
   vprintf(fmt, argptr);
+  printf("          "); // cleaning prompt
   va_end(argptr);
   printf("\n");
+
+	if (need_hack) {
+		rl_restore_prompt();
+		rl_replace_line(saved_line, 0);
+		rl_point = saved_point;
+		rl_redisplay();
+		free(saved_line);
+	}
+	
   if (logging && logfile) {
     vfprintf(logfile, fmt, argptr2);
     fprintf(logfile,"\n");