/* * Copyright 2015 (c) Anna Schumaker. */ #include #define O_SECONDS (1) #define O_MINUTES (60) #define O_HOURS (60 * O_MINUTES) #define O_DAYS (24 * O_HOURS) static unsigned int factor[4] = { O_DAYS, O_HOURS, O_MINUTES, O_SECONDS }; static const char *field[4] = { "day", "hour", "minute", "second" }; gchar *string_sec2str(unsigned int sec) { return g_strdup_printf("%u:%02u", sec / 60, sec % 60); } gchar *string_sec2str_long(unsigned int sec) { gchar *tmp; unsigned int val; gchar *res = g_strdup(""); for (unsigned int i = 0; i < 4; i++) { val = sec / factor[i]; sec %= factor[i]; if (val == 0) continue; tmp = g_strdup_printf("%s%u %s%s%s", res, val, field[i], (val > 1) ? "s" : "", (sec > 0) ? ", " : ""); g_free(res); res = tmp; } return res; } static void _drop_special(gchar *str) { unsigned int i, j = 0; for (i = 0; i < strlen(str); i++) { if (g_ascii_isalnum(str[i])) str[j++] = str[i]; else if ((j > 0) && (str[i] == ' ') && (str[j - 1] != ' ')) str[j++] = str[i]; } while (j < i) str[j++] = '\0'; } gchar *string_lowercase(const gchar *str) { gchar *res = g_ascii_strdown(str, -1); g_strdelimit(res, "\\/,;()_-~+\" ", ' '); _drop_special(res); g_strstrip(res); return res; } int string_compare(const gchar *lhs, const gchar *rhs) { if (strlen(lhs) == 0) { if (strlen(rhs) == 0) return 0; return 1; } if (strlen(rhs) == 0) return -1; return g_strcmp0(lhs, rhs); }