X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-ui%2Fcurs_lib.c;h=aa029ed082cf2b6125f8aa62980d401b53f1b68a;hp=ee53578bde42f56290c069826b0f52b4670aed85;hb=e7a772dca1b86e4036d25038ee67aa34dd217c07;hpb=97677c08933e16e25ecb3c12473ef1efdab7962b diff --git a/lib-ui/curs_lib.c b/lib-ui/curs_lib.c index ee53578..aa029ed 100644 --- a/lib-ui/curs_lib.c +++ b/lib-ui/curs_lib.c @@ -11,30 +11,12 @@ * please see the file GPL in the top level source directory. */ -#if HAVE_CONFIG_H -# include "config.h" -#endif +#include -#include #include -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_LANGINFO_YESEXPR #include -#endif - -#include -#include -#include -#include -#include +#include #include #include @@ -44,14 +26,14 @@ #include "mutt.h" #include "pager.h" -#include "mbyte.h" +#include "charset.h" /* not possible to unget more than one char under some curses libs, and it * is impossible to unget function keys in SLang, so roll our own input * buffering routines. */ -size_t UngetCount = 0; -static size_t UngetBufLen = 0; +ssize_t UngetCount = 0; +static ssize_t UngetBufLen = 0; static event_t *KeyEvent; void mutt_refresh (void) @@ -115,7 +97,7 @@ event_t mutt_getch (void) return (ch == ctrl ('G') ? err : ret); } -int _mutt_get_field ( const char *field, char *buf, size_t buflen, +int _mutt_get_field ( const char *field, char *buf, ssize_t buflen, int complete, int multiple, char ***files, int *numfiles) { int ret; @@ -128,18 +110,16 @@ int _mutt_get_field ( const char *field, char *buf, size_t buflen, addstr (field); mutt_refresh (); getyx (stdscr, y, x); - ret = - _mutt_enter_string (buf, buflen, y, x, complete, multiple, files, - numfiles, es); - } - while (ret == 1); + ret = _mutt_enter_string(buf, buflen, y, x, complete, multiple, files, + numfiles, es); + } while (ret == 1); CLEARLINE (LINES - 1); mutt_free_enter_state (&es); return (ret); } -int mutt_get_field_unbuffered (char *msg, char *buf, size_t buflen, int flags) +int mutt_get_field_unbuffered (char *msg, char *buf, ssize_t buflen, int flags) { int rc; @@ -157,12 +137,12 @@ void mutt_clear_error (void) CLEARLINE (LINES - 1); } -void mutt_edit_file (const char *editor, const char *data) +void mutt_edit_file(const char *data) { char cmd[LONG_STRING]; mutt_endwin (NULL); - mutt_expand_file_fmt (cmd, sizeof (cmd), editor, data); + m_quotefile_fmt(cmd, sizeof (cmd), MCore.editor, data); if (mutt_system (cmd) == -1) mutt_error (_("Error running \"%s\"!"), cmd); keypad (stdscr, TRUE); @@ -172,12 +152,10 @@ void mutt_edit_file (const char *editor, const char *data) int mutt_yesorno (const char *msg, int def) { event_t ch; - char *yes = _("yes"); - char *no = _("no"); + const char *yes = _("yes"); + const char *no = _("no"); char *answer_string; - size_t answer_string_len; - -#ifdef HAVE_LANGINFO_YESEXPR + ssize_t answer_string_len; char *expr; regex_t reyes; regex_t reno; @@ -191,7 +169,6 @@ int mutt_yesorno (const char *msg, int def) !regcomp (&reyes, expr, REG_NOSUB | REG_EXTENDED); reno_ok = (expr = nl_langinfo (NOEXPR)) && expr[0] == '^' && !regcomp (&reno, expr, REG_NOSUB | REG_EXTENDED); -#endif CLEARLINE (LINES - 1); @@ -218,35 +195,26 @@ int mutt_yesorno (const char *msg, int def) break; } -#ifdef HAVE_LANGINFO_YESEXPR answer[0] = ch.ch; - if (reyes_ok ? (regexec (&reyes, answer, 0, 0, 0) == 0) : -#else - if ( -#endif - (tolower (ch.ch) == *yes)) { + if (reyes_ok ? (regexec (&reyes, answer, 0, 0, 0) == 0) : tolower (ch.ch) == *yes) + { def = M_YES; break; } else if ( -#ifdef HAVE_LANGINFO_YESEXPR reno_ok ? (regexec (&reno, answer, 0, 0, 0) == 0) : -#endif (tolower (ch.ch) == *no)) { def = M_NO; break; - } - else { + } else { BEEP (); } } -#ifdef HAVE_LANGINFO_YESEXPR if (reyes_ok) regfree (&reyes); if (reno_ok) regfree (&reno); -#endif if (def != -1) { addstr ((char *) (def == M_YES ? yes : no)); @@ -280,7 +248,6 @@ void mutt_curses_error (const char *fmt, ...) vsnprintf (Errorbuf, sizeof (Errorbuf), fmt, ap); va_end (ap); - debug_print (1, ("%s\n", Errorbuf)); mutt_format_string (TmpErrorbuf, sizeof (TmpErrorbuf), 0, COLS - 2, 0, 0, Errorbuf, sizeof (Errorbuf), 0); snprintf (Errorbuf, sizeof (Errorbuf), "%s", TmpErrorbuf); /* overkill */ @@ -298,7 +265,7 @@ void mutt_curses_error (const char *fmt, ...) } void mutt_progress_bar (progress_t* progress, long pos) { - char posstr[SHORT_STRING]; + char posstr[STRING]; if (!pos) { if (!NetInc) @@ -379,8 +346,6 @@ void mutt_endwin (const char *msg) void _mutt_perror (const char *s, const char* filename, int line) { char *p = strerror (errno); - - debug_print (1, ("%s: %s (errno = %d)\n", s, p ? p : "unknown error", errno)); mutt_error ("%s: %s (errno = %d) from %s:%i", s, p ? p : _("unknown error"), errno, filename, line); } @@ -412,31 +377,7 @@ int mutt_any_key_to_continue (const char *s) return (ch); } -int mutt_do_pager (const char *banner, - const char *tempfile, int do_color, pager_t * info) -{ - int rc; - - if (!Pager || m_strcmp(Pager, "builtin") == 0) - rc = mutt_pager (banner, tempfile, do_color, info); - else { - char cmd[STRING]; - - mutt_endwin (NULL); - mutt_expand_file_fmt (cmd, sizeof (cmd), Pager, tempfile); - if (mutt_system (cmd) == -1) { - mutt_error (_("Error running \"%s\"!"), cmd); - rc = -1; - } - else - rc = 0; - mutt_unlink (tempfile); - } - - return rc; -} - -int _mutt_enter_fname (const char *prompt, char *buf, size_t blen, +int _mutt_enter_fname (const char *prompt, char *buf, ssize_t blen, int *redraw, int buffy, int multiple, char ***files, int *numfiles) { @@ -464,7 +405,7 @@ int _mutt_enter_fname (const char *prompt, char *buf, size_t blen, else { char *pc = p_new(char, m_strlen(prompt) + 3); - sprintf (pc, "%s: ", prompt); /* __SPRINTF_CHECKED__ */ + sprintf(pc, "%s: ", prompt); mutt_ungetch (ch.op ? 0 : ch.ch, ch.op ? ch.op : 0); if (_mutt_get_field (pc, buf, blen, (buffy ? M_EFILE : M_FILE) | M_CLEAR, multiple, files, @@ -519,7 +460,7 @@ void mutt_curs_set (int cursor) } #endif -int mutt_multi_choice (char *prompt, char *letters) +int mutt_multi_choice (const char *prompt, const char *letters) { event_t ch; int choice; @@ -561,16 +502,34 @@ int mutt_addwch (wchar_t wc) { char buf[MB_LEN_MAX * 2]; mbstate_t mbstate; - size_t n1, n2; + ssize_t n1, n2; p_clear(&mbstate, 1); - if ((n1 = wcrtomb (buf, wc, &mbstate)) == (size_t) (-1) || - (n2 = wcrtomb (buf + n1, 0, &mbstate)) == (size_t) (-1)) + if ((n1 = wcrtomb(buf, wc, &mbstate)) == -1 || + (n2 = wcrtomb(buf + n1, 0, &mbstate)) == -1) return -1; /* ERR */ else return addstr (buf); } +ssize_t mutt_pretty_size(char *s, ssize_t len, ssize_t n) +{ + if (n == 0) + return m_strcpy(s, len, "0K"); + + if (n < 10189) /* 0.1K - 9.9K */ + return snprintf(s, len, "%3.1fK", (n < 103) ? 0.1 : n / 1024.0); + + if (n < 1023949) /* 10K - 999K */ + /* 51 is magic which causes 10189/10240 to be rounded up to 10 */ + return snprintf(s, len, "%ldK", (n + 51) / 1024); + + if (n < 10433332) /* 1.0M - 9.9M */ + return snprintf(s, len, "%3.1fM", n / 1048576.0); + + /* (10433332 + 52428) / 1048576 = 10 */ + return snprintf (s, len, "%ldM", (n + 52428) / 1048576); +} /* * This formats a string, a bit like @@ -598,12 +557,12 @@ void mutt_format_string (char *dest, ssize_t destlen, for (; n && (k = mbrtowc (&wc, s, n, &mbstate1)); s += k, n -= k) { if (k == -1 || k == -2) { k = (k == -1) ? 1 : n; - wc = replacement_char (); + wc = CharsetReplacement; } if (arboreal && wc < M_TREE_MAX) w = 1; /* hack */ else { - if (!IsWPrint (wc)) + if (!iswprint(wc)) wc = '?'; w = wcwidth (wc); } @@ -612,7 +571,7 @@ void mutt_format_string (char *dest, ssize_t destlen, break; min_width -= w; max_width -= w; - strncpy (p, scratch, k2); + m_strncpy(p, destlen, scratch, k2); p += k2; destlen -= k2; } @@ -642,8 +601,7 @@ void mutt_format_string (char *dest, ssize_t destlen, * the number of character cells when printed. */ -static void mutt_format_s_x (char *dest, - size_t destlen, +static void mutt_format_s_x (char *dest, ssize_t destlen, const char *prefix, const char *s, int arboreal) { int right_justify = 1; @@ -665,14 +623,14 @@ static void mutt_format_s_x (char *dest, right_justify, ' ', s, m_strlen(s), arboreal); } -void mutt_format_s (char *dest, - size_t destlen, const char *prefix, const char *s) +void mutt_format_s (char *dest, ssize_t destlen, + const char *prefix, const char *s) { mutt_format_s_x (dest, destlen, prefix, s, 0); } -void mutt_format_s_tree (char *dest, - size_t destlen, const char *prefix, const char *s) +void mutt_format_s_tree (char *dest, ssize_t destlen, + const char *prefix, const char *s) { mutt_format_s_x (dest, destlen, prefix, s, 1); } @@ -686,17 +644,17 @@ void mutt_paddstr (int n, const char *s) { wchar_t wc; int w; - size_t k; - size_t len = m_strlen(s); + ssize_t k; + ssize_t len = m_strlen(s); mbstate_t mbstate; p_clear(&mbstate, 1); for (; len && (k = mbrtowc (&wc, s, len, &mbstate)); s += k, len -= k) { - if (k == (size_t) (-1) || k == (size_t) (-2)) { - k = (k == (size_t) (-1)) ? 1 : len; - wc = replacement_char (); + if (k == -1 || k == -2) { + k = (k == -1) ? 1 : len; + wc = CharsetReplacement; } - if (!IsWPrint (wc)) + if (!iswprint(wc)) wc = '?'; w = wcwidth (wc); if (w >= 0) { @@ -710,32 +668,3 @@ void mutt_paddstr (int n, const char *s) addch (' '); } -/* - * mutt_strwidth is like m_strlenexcept that it returns the width - * refering to the number of characters cells. - */ - -int mutt_strwidth (const char *s) -{ - wchar_t wc; - int w; - size_t k, n; - mbstate_t mbstate; - - if (!s) - return 0; - - n = m_strlen(s); - - p_clear(&mbstate, 1); - for (w = 0; n && (k = mbrtowc (&wc, s, n, &mbstate)); s += k, n -= k) { - if (k == (size_t) (-1) || k == (size_t) (-2)) { - k = (k == (size_t) (-1)) ? 1 : n; - wc = replacement_char (); - } - if (!IsWPrint (wc)) - wc = '?'; - w += wcwidth (wc); - } - return w; -}