using stls should not enable new CAPAs
[apps/madmutt.git] / lib-ui / enter.c
index dcd5bcf..8fe60ed 100644 (file)
@@ -8,11 +8,10 @@
  * please see the file GPL in the top level source directory.
  */
 
-#include <lib-lib/lib-lib.h>
+#include <lib-ui/lib-ui.h>
 
-#include "curses.h"
-#include "enter.h"
 #include "menu.h"
+#include "browser.h"
 
 #include "mutt.h"
 #include "alias.h"
 #include "history.h"
 #include "buffy.h"
 
+typedef struct {
+  wchar_t *wbuf;
+  size_t wbuflen;
+  size_t lastchar;
+  size_t curpos;
+  size_t begin;
+  int tabs;
+} ENTER_STATE;
+
 /* redraw flags for mutt_enter_string() */
 enum {
   M_REDRAW_INIT = 1,            /* go to end of line and redraw */
@@ -56,7 +64,7 @@ static int my_addwch (wchar_t wc)
   int n = wcwidth (wc);
 
   if (iswprint(wc) && n > 0)
-    return mutt_addwch (wc);
+    return waddwch(stdscr, wc);
   if (!(wc & ~0x7f))
     return wprintw (stdscr, "^%c", ((int) wc + 0x40) & 0x7f);
   if (!(wc & ~0xffff))
@@ -165,26 +173,10 @@ static void replace_part (ENTER_STATE *state, size_t from, const char *buf)
   p_delete(&savebuf);
 }
 
-/*
- * Returns:
- *        1 need to redraw the screen and call me again
- *        0 if input was given
- *         -1 if abort.
- */
-
-int mutt_enter_string (char *buf, size_t buflen, int y, int x, int flags)
-{
-  int rv;
-  ENTER_STATE *es = mutt_new_enter_state ();
-
-  rv = _mutt_enter_string(buf, buflen, y, x, flags, 0, NULL, NULL, es);
-  mutt_free_enter_state (&es);
-  return rv;
-}
-
-int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
-                        int flags, int multiple, char ***files, int *numfiles,
-                        ENTER_STATE * state)
+static int
+mutt_enter_string(char *buf, size_t buflen, int y, int x, int flags,
+                  int multiple, char ***files, int *numfiles,
+                  ENTER_STATE *state)
 {
   int width = COLS - x - 1;
   int redraw;
@@ -663,13 +655,27 @@ bye:
   return rv;
 }
 
-void mutt_free_enter_state (ENTER_STATE ** esp)
+int _mutt_get_field(const char *field, char *buf, ssize_t buflen, int flags,
+                    int multiple, char ***files, int *numfiles)
 {
-  if (!esp)
-    return;
+  int ret;
+  int x, y;
+  ENTER_STATE es;
+
+  p_clear(&es, 1);
 
-  p_delete(&(*esp)->wbuf);
-  p_delete(esp);
+  do {
+    CLEARLINE(stdscr, LINES - 1);
+    waddstr (stdscr, field);
+    mutt_refresh ();
+    getyx (stdscr, y, x);
+    ret = mutt_enter_string(buf, buflen, y, x, flags, multiple, files,
+                            numfiles, &es);
+  } while (ret == 1);
+  CLEARLINE(stdscr, LINES - 1);
+
+  p_delete(&es.wbuf);
+  return ret;
 }
 
 /*