From 184e19dd604b3a6977623981ad6a814df8162e0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 12 Nov 2022 20:18:22 +0000 Subject: [PATCH] further optimise lcdui_print_status_line We can use lcd_print_pad to determine whether the end of the file name was reached lcd_print_pad now returns the last character pointed to. If the end of the string was reached, it will be the null delimeter which evaluates to "false" in an if statment (same as NULL). Else "true" means the end of the string was not reached. Change in memory: Flash: -42 bytes SRAM: 0 bytes --- Firmware/lcd.cpp | 3 ++- Firmware/lcd.h | 2 +- Firmware/ultralcd.cpp | 15 +++------------ 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/Firmware/lcd.cpp b/Firmware/lcd.cpp index 2ba71a726..3e7225397 100644 --- a/Firmware/lcd.cpp +++ b/Firmware/lcd.cpp @@ -528,13 +528,14 @@ void lcd_print(const char* s) while (*s) lcd_write(*(s++)); } -void lcd_print_pad(const char* s, uint8_t len) +char lcd_print_pad(const char* s, uint8_t len) { while (len && *s) { lcd_write(*(s++)); --len; } lcd_space(len); + return *s; } void lcd_print(char c, int base) diff --git a/Firmware/lcd.h b/Firmware/lcd.h index b7a8d2836..fd209b755 100644 --- a/Firmware/lcd.h +++ b/Firmware/lcd.h @@ -53,7 +53,7 @@ extern void lcd_printNumber(unsigned long n, uint8_t base); extern void lcd_printFloat(double number, uint8_t digits); extern void lcd_print(const char*); -extern void lcd_print_pad(const char*, uint8_t len); +extern char lcd_print_pad(const char* s, uint8_t len); extern void lcd_print(char, int = 0); extern void lcd_print(unsigned char, int = 0); extern void lcd_print(int, int = 10); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index d636a0a14..eccbf8deb 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -585,20 +585,11 @@ void lcdui_print_status_line(void) { { // If printing from SD, show what we are printing const char* longFilenameOLD = (card.longFilename[0] ? card.longFilename : card.filename); - if(strlen(longFilenameOLD) > LCD_WIDTH) { - uint8_t gh = scrollstuff; - while (((gh - scrollstuff) < LCD_WIDTH)) { - lcd_putc_at(gh - scrollstuff, 3, longFilenameOLD[gh - 1]); - if (longFilenameOLD[gh] == '\0') { - scrollstuff = 0; - break; // Exit while loop - } else { - gh++; - } - } + if( lcd_print_pad(&longFilenameOLD[scrollstuff], LCD_WIDTH) ) + { scrollstuff++; } else { - lcd_print_pad(longFilenameOLD, LCD_WIDTH); + scrollstuff = 0; } } else { // Otherwise check for other special events switch (custom_message_type) {