Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=fwsetup-ng.git;a=commitdiff;h=3664b34992f1ad11b689cabd56f6159675fda292

commit 3664b34992f1ad11b689cabd56f6159675fda292
Author: James Buren <[email protected]>
Date:   Sat Aug 11 11:45:55 2012 -0500

add get_text_size() function. it measures screen dimensions needed
to properly display the text block on the terminal.

diff --git a/fwsetup.h b/fwsetup.h
index 4e77bb6..e91924e 100644
--- a/fwsetup.h
+++ b/fwsetup.h
@@ -27,6 +27,8 @@ struct database
int window_x;
int window_y;
};
+
+extern bool get_text_size(const char *text,int *width,int *height);
#else
#error "No known user interface is defined."
#endif
diff --git a/utility.c b/utility.c
index 42b0149..b236ec7 100644
--- a/utility.c
+++ b/utility.c
@@ -13,4 +13,73 @@ extern void eprintf(const char *s,...)
va_end(args);
}

+#ifdef NEWT
+extern bool get_text_size(const char *text,int *width,int *height)
+{
+  assert(text != 0);
+  assert(width != 0);
+  assert(height != 0);
+
+  wchar_t wc = 0;
+  size_t n = 0;
+  size_t len = strlen(text);
+  mbstate_t mbs;
+  int cw = 0;
+  int w = 0;
+  int h = 0;
+  int i = 0;
+
+  memzero(&mbs,sizeof(mbstate_t));
+
+  while(true)
+  {
+    n = mbrtowc(&wc,text,len,&mbs);
+
+    if(n == (size_t) -1 || n == (size_t) -2)
+      return false;
+
+    if(n == 0)
+      break;
+
+    switch(wc)
+    {
+      case L'\n':
+        if(cw > w)
+          w = cw;
+        cw = 0;
+        ++h;
+        break;
+
+      case L'\t':
+        cw += 8;
+        break;
+
+      default:
+        i = wcwidth(wc);
+        if(i > 0)
+          cw += i;
+        break;
+    }
+
+    text += n;
+
+    len -= n;
+  }
+
+  if(w == 0 && cw > 0)
+    w = cw;
+  else if(w == 0)
+    w = 1;
+
+  if(h == 0)
+    h = 1;
+
+  *width = w;
+
+  *height = h;
+
+  return true;
+}
+#endif
+
// -%- strip: yes; add-newline: yes; use-tabs: no; indent-width: 2; tab-width: 
2; -%-
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to