diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/support.c | 38 | ||||
-rw-r--r-- | src/support.h | 9 |
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); |