Fix an issue with menu_draw_item_puts_P

Change in memory:
Flash: +16 bytes
SRAM: 0 bytes
This commit is contained in:
Guðni Már Gilbert 2023-01-14 13:50:05 +00:00 committed by DRracer
parent 4f4153175c
commit 730bb3708e
3 changed files with 13 additions and 8 deletions

View File

@ -538,14 +538,14 @@ char lcd_print_pad(const char* s, uint8_t len)
return *s;
}
char lcd_print_pad_P(const char* s, uint8_t len)
uint8_t lcd_print_pad_P(const char* s, uint8_t len)
{
while (len && pgm_read_byte(s)) {
lcd_write(pgm_read_byte(s++));
--len;
}
lcd_space(len);
return *s;
return len;
}
void lcd_print(char c, int base)

View File

@ -54,7 +54,12 @@ extern void lcd_printFloat(double number, uint8_t digits);
extern void lcd_print(const char*);
extern char lcd_print_pad(const char* s, uint8_t len);
char lcd_print_pad_P(const char* s, uint8_t len);
/// @brief print a string from PROGMEM with left-adjusted padding
/// @param s string from PROGMEM.
/// @param len maximum number of characters to print, including padding. Ranges from 0 to LCD_WIDTH.
/// @return number of padded bytes. 0 means there was no padding.
uint8_t lcd_print_pad_P(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);

View File

@ -242,11 +242,11 @@ static void menu_draw_item_puts_E(char type_char, const Sheet &sheet)
static void menu_draw_item_puts_P(char type_char, const char* str, char num)
{
lcd_set_cursor(0, menu_row);
lcd_putc(menu_selection_mark());
lcd_print_pad_P(str, LCD_WIDTH - 3);
lcd_putc(num);
lcd_putc(type_char);
const uint8_t max_strlen = LCD_WIDTH - 3;
lcd_putc_at(0, menu_row, menu_selection_mark());
uint8_t len = lcd_print_pad_P(str, max_strlen);
lcd_putc_at((max_strlen - len) + 2, menu_row, num);
lcd_putc_at(LCD_WIDTH - 1, menu_row, type_char);
}
void menu_item_dummy(void)