aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/support.c38
-rw-r--r--src/support.h9
2 files changed, 47 insertions, 0 deletions
diff --git a/src/support.c b/src/support.c
index 6ba261213..23b67d3e7 100644
--- a/src/support.c
+++ b/src/support.c
@@ -116,6 +116,44 @@ strcasestr(const char *haystack, const char *needle)
}
#endif /* HAVE_STRCASESTR */
+char *
+strscroll(char *str, char *separator, int width, scroll_state_t *st)
+{
+ char *tmp, *buf;
+ size_t len;
+
+ if( st->offset==0 )
+ {
+ st->offset++;
+ return g_strdup(str);
+ }
+
+ /* create a buffer containing the string and the separator */
+ tmp = g_malloc(strlen(str)+strlen(separator)+1);
+ strcpy(tmp, str);
+ strcat(tmp, separator);
+ len = strlen(tmp);
+
+ if( st->offset >= len )
+ st->offset = 0;
+
+ /* create the new scrolled string */
+ buf = g_malloc(width+1);
+ strncpy(buf, tmp+st->offset, width);
+ if( strlen(buf) < width )
+ strncat(buf, tmp, width-strlen(buf));
+
+ if( time(NULL)-st->t >= 1 )
+ {
+ st->t = time(NULL);
+ st->offset++;
+ }
+ g_free(tmp);
+ return buf;
+
+}
+
+
void
charset_init(gboolean disable)
{
diff --git a/src/support.h b/src/support.h
index 2b79e3aef..fce9aac28 100644
--- a/src/support.h
+++ b/src/support.h
@@ -16,6 +16,15 @@ char *remove_trailing_slash(char *path);
char *lowerstr(char *str);
char *strcasestr(const char *haystack, const char *needle);
+typedef struct
+{
+ int offset;
+ time_t t;
+
+} scroll_state_t;
+
+char *strscroll(char *str, char *separator, int width, scroll_state_t *st);
+
void charset_init(gboolean disable);
char *utf8_to_locale(char *str);
char *locale_to_utf8(char *str);