From 81c4e187f5823626b8f54c7f8000fa5a28daa4eb Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Mon, 31 Oct 2005 23:07:58 +0000
Subject: [PATCH] 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
---
 ChangeLog   |  2 ++
 src/proto.h |  8 +++----
 src/utils.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/winio.c | 65 ---------------------------------------------------
 4 files changed, 73 insertions(+), 69 deletions(-)

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)
-- 
GitLab