diff options
Diffstat (limited to 'lcd.c')
-rw-r--r-- | lcd.c | 56 |
1 files changed, 43 insertions, 13 deletions
@@ -18,12 +18,15 @@ char LCD_Data[LCD_rows][LCD_cols]; /* shadow copy of LCD display in local RAM, t static void break_up_string (char *in_string, int N, char **str1, char **str2, char **str3) { + int i; + gchar** words = g_strsplit(in_string, " ", -1); GString* rows[3]; - rows[0] = g_string_new(NULL); - rows[1] = g_string_new(NULL); - rows[2] = g_string_new(NULL); + + for (i = 0; i<3; i++) { + rows[i] = g_string_new(NULL); + } int row = 0; int col = 0; @@ -32,22 +35,49 @@ static void break_up_string (char *in_string, int N, char **str1, char **str2, c for (word = words; *word != NULL; word++) { int wordlen = strlen(*word); - if (col + wordlen > N) { - col = 0; - row++; - } + if (wordlen > N) { + // model numbers can be up to 64 chars + + int remainder = col + wordlen - N; + if (row < 3) { + g_string_append(rows[row], *word); + col = 0; + row++; + } + + if (row < 3) { + g_string_append(rows[row], *word + (wordlen - remainder)); + col += remainder; + } - if (row < 3) { - g_string_append(rows[row], *word); + } else { - col += wordlen; + if (col + wordlen > N) { + col = 0; + row++; + } - if (col != 0 && (col + 1) < N) { - g_string_append(rows[row], " "); - col++; + if (row < 3) { + g_string_append(rows[row], *word); + col += wordlen; } } + + if ((row < 3) && (col != 0) && (col < N)) { + g_string_append(rows[row], " "); + col++; + } + + if (col >= N) { + col = 0; + row++; + } + } + + for (i = 0; i<3; i++) { + g_string_truncate (rows[i], N); } + *str1 = g_string_free(rows[0], FALSE); *str2 = g_string_free(rows[1], FALSE); *str3 = g_string_free(rows[2], FALSE); |