From: David Lawrence Ramsey Date: Mon, 31 Oct 2005 23:07:58 +0000 (+0000) Subject: move xplustabs(), actual_x(), strnlenpt(), and strlenpt() from winio.c X-Git-Tag: v1.3.10~182 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=81c4e187f5823626b8f54c7f8000fa5a28daa4eb;p=nano.git move xplustabs(), actual_x(), strnlenpt(), and strlenpt() from winio.c to utils.c, as they're really utility functions git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3064 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- diff --git a/ChangeLog b/ChangeLog index 80432903..6f889dcb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15,6 +15,8 @@ CVS code - that make use of a smaller number. Changes to window_init(), nanoget_repaint(), titlebar(), statusbar(), and get_page_start(). (DLR) + - Move xplustabs(), actual_x(), strnlenpt(), and strlenpt() from + winio.c to utils.c, as they're really utility functions. (DLR) - nano.h: - Readd MIN_EDITOR_COLS #define. (DLR) - winio.c: diff --git a/src/proto.h b/src/proto.h index 0a73aec4..955f8f25 100644 --- a/src/proto.h +++ b/src/proto.h @@ -565,6 +565,10 @@ void *nrealloc(void *ptr, size_t howmuch); char *mallocstrncpy(char *dest, const char *src, size_t n); char *mallocstrcpy(char *dest, const char *src); char *mallocstrassn(char *dest, char *src); +size_t xplustabs(void); +size_t actual_x(const char *s, size_t column); +size_t strnlenpt(const char *s, size_t maxlen); +size_t strlenpt(const char *s); void new_magicline(void); #ifndef NANO_SMALL void remove_magicline(void); @@ -634,10 +638,6 @@ bool do_statusbar_prev_word(bool allow_punct); void do_statusbar_verbatim_input(bool *got_enter); size_t statusbar_xplustabs(void); size_t get_statusbar_page_start(size_t start_col, size_t column); -size_t xplustabs(void); -size_t actual_x(const char *str, size_t xplus); -size_t strnlenpt(const char *buf, size_t size); -size_t strlenpt(const char *buf); void blank_line(WINDOW *win, int y, int x, int n); void blank_titlebar(void); void blank_topbar(void); diff --git a/src/utils.c b/src/utils.c index fa4cdf16..ff97788b 100644 --- a/src/utils.c +++ b/src/utils.c @@ -395,6 +395,73 @@ char *mallocstrassn(char *dest, char *src) return src; } +/* Return the placewewant associated with current_x, i.e, the zero-based + * column position of the cursor. The value will be no smaller than + * current_x. */ +size_t xplustabs(void) +{ + return strnlenpt(openfile->current->data, openfile->current_x); +} + +/* actual_x() gives the index in s of the character displayed at the + * given column. That is, actual_x() is the largest value such that + * strnlenpt(s, actual_x(s, column)) <= column. */ +size_t actual_x(const char *s, size_t column) +{ + size_t i = 0; + /* The position in s, returned. */ + size_t len = 0; + /* The screen display width to s[i]. */ + + assert(s != NULL); + + while (*s != '\0') { + int s_len = parse_mbchar(s, NULL, &len); + + if (len > column) + break; + + i += s_len; + s += s_len; + } + + return i; +} + +/* A strnlen() with tabs and multicolumn characters factored in, similar + * to xplustabs(). How many columns wide are the first maxlen characters + * of s? */ +size_t strnlenpt(const char *s, size_t maxlen) +{ + size_t len = 0; + /* The screen display width to s[i]. */ + + if (maxlen == 0) + return 0; + + assert(s != NULL); + + while (*s != '\0') { + int s_len = parse_mbchar(s, NULL, &len); + + s += s_len; + + if (maxlen <= s_len) + break; + + maxlen -= s_len; + } + + return len; +} + +/* A strlen() with tabs and multicolumn characters factored in, similar + * to xplustabs(). How many columns wide is s? */ +size_t strlenpt(const char *s) +{ + return strnlenpt(s, (size_t)-1); +} + /* Append a new magicline to filebot. */ void new_magicline(void) { diff --git a/src/winio.c b/src/winio.c index e59570f7..bef79c42 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2220,71 +2220,6 @@ size_t get_statusbar_page_start(size_t start_col, size_t column) start_col - 1); } -/* Return the placewewant associated with current_x, i.e, the zero-based - * column position of the cursor. The value will be no smaller than - * current_x. */ -size_t xplustabs(void) -{ - return strnlenpt(openfile->current->data, openfile->current_x); -} - -/* actual_x() gives the index in str of the character displayed at - * column xplus. That is, actual_x() is the largest value such that - * strnlenpt(str, actual_x(str, xplus)) <= xplus. */ -size_t actual_x(const char *str, size_t xplus) -{ - size_t i = 0; - /* The position in str, returned. */ - size_t length = 0; - /* The screen display width to str[i]. */ - - assert(str != NULL); - - while (*str != '\0') { - int str_len = parse_mbchar(str, NULL, &length); - - if (length > xplus) - break; - - i += str_len; - str += str_len; - } - - return i; -} - -/* A strlen() with tabs factored in, similar to xplustabs(). How many - * columns wide are the first size characters of str? */ -size_t strnlenpt(const char *str, size_t size) -{ - size_t length = 0; - /* The screen display width to str[i]. */ - - if (size == 0) - return 0; - - assert(str != NULL); - - while (*str != '\0') { - int str_len = parse_mbchar(str, NULL, &length); - - str += str_len; - - if (size <= str_len) - break; - - size -= str_len; - } - - return length; -} - -/* How many columns wide is buf? */ -size_t strlenpt(const char *buf) -{ - return strnlenpt(buf, (size_t)-1); -} - /* Move to (x, y) in win, and display a line of n spaces with the * current attributes. */ void blank_line(WINDOW *win, int y, int x, int n)