From 8d69394ae15c793f5b4dad693f4f5ed614edd7ee Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 31 May 2017 22:08:13 -0500 Subject: [PATCH] Fix LCD printing of progmem strings --- Marlin/ultralcd_impl_DOGM.h | 14 ++++++-------- Marlin/ultralcd_impl_HD44780.h | 14 ++++++-------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/Marlin/ultralcd_impl_DOGM.h b/Marlin/ultralcd_impl_DOGM.h index c7c5eb309..57165c33f 100644 --- a/Marlin/ultralcd_impl_DOGM.h +++ b/Marlin/ultralcd_impl_DOGM.h @@ -239,19 +239,17 @@ char lcd_print_and_count(const char c) { * On DOGM all strings go through a filter for utf * But only use lcd_print_utf and lcd_printPGM_utf for translated text */ -void lcd_print(const char* const str) { for (uint8_t i = 0; char c = str[i]; ++i) lcd_print(c); } -void lcd_printPGM(const char* str) { for (; char c = pgm_read_byte(str); ++str) lcd_print(c); } +void lcd_print(const char *str) { while (*str) lcd_print(*str++); } +void lcd_printPGM(const char *str) { while (const char c = pgm_read_byte(str)) lcd_print(c), ++str; } -void lcd_print_utf(const char* const str, const uint8_t maxLength=LCD_WIDTH) { +void lcd_print_utf(const char *str, uint8_t n=LCD_WIDTH) { char c; - for (uint8_t i = 0, n = maxLength; n && (c = str[i]); ++i) - n -= charset_mapper(c); + while (n && (c = *str)) n -= charset_mapper(c), ++str; } -void lcd_printPGM_utf(const char* str, const uint8_t maxLength=LCD_WIDTH) { +void lcd_printPGM_utf(const char *str, uint8_t n=LCD_WIDTH) { char c; - for (uint8_t i = 0, n = maxLength; n && (c = str[i]); ++i) - n -= charset_mapper(c); + while (n && (c = pgm_read_byte(str))) n -= charset_mapper(c), ++str; } // Initialize or re-initialize the LCD diff --git a/Marlin/ultralcd_impl_HD44780.h b/Marlin/ultralcd_impl_HD44780.h index 909271d77..2dc93ef53 100644 --- a/Marlin/ultralcd_impl_HD44780.h +++ b/Marlin/ultralcd_impl_HD44780.h @@ -382,19 +382,17 @@ void lcd_implementation_clear() { lcd.clear(); } void lcd_print(const char c) { charset_mapper(c); } -void lcd_print(const char * const str) { for (uint8_t i = 0; char c = str[i]; ++i) lcd.print(c); } -void lcd_printPGM(const char* str) { for (; char c = pgm_read_byte(str); ++str) lcd.print(c); } +void lcd_print(const char *str) { while (*str) lcd.print(*str++); } +void lcd_printPGM(const char *str) { while (const char c = pgm_read_byte(str)) lcd.print(c), ++str; } -void lcd_print_utf(const char * const str, const uint8_t maxLength=LCD_WIDTH) { +void lcd_print_utf(const char *str, uint8_t n=LCD_WIDTH) { char c; - for (uint8_t i = 0, n = maxLength; n && (c = str[i]); ++i) - n -= charset_mapper(c); + while (n && (c = *str)) n -= charset_mapper(c), ++str; } -void lcd_printPGM_utf(const char* str, const uint8_t maxLength=LCD_WIDTH) { +void lcd_printPGM_utf(const char *str, uint8_t n=LCD_WIDTH) { char c; - for (uint8_t i = 0, n = maxLength; n && (c = str[i]); ++i) - n -= charset_mapper(c); + while (n && (c = pgm_read_byte(str))) n -= charset_mapper(c), ++str; } #if ENABLED(SHOW_BOOTSCREEN)