|  |  |  | @ -31,7 +31,7 @@ int absPreheatFanSpeed; | 
			
		
	
		
			
				
					|  |  |  |  | typedef void (*menuFunc_t)(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | uint8_t lcd_status_message_level; | 
			
		
	
		
			
				
					|  |  |  |  | char lcd_status_message[LCD_WIDTH+1] = WELCOME_MSG; | 
			
		
	
		
			
				
					|  |  |  |  | char lcd_status_message[3*LCD_WIDTH+1] = WELCOME_MSG; // worst case is kana with up to 3*LCD_WIDTH+1
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef DOGLCD | 
			
		
	
		
			
				
					|  |  |  |  |   #include "dogm_lcd_implementation.h" | 
			
		
	
	
		
			
				
					|  |  |  | @ -1402,13 +1402,6 @@ void lcd_ignore_click(bool b) { | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_finishstatus(bool persist=false) { | 
			
		
	
		
			
				
					|  |  |  |  |   int len = lcd_strlen(lcd_status_message); | 
			
		
	
		
			
				
					|  |  |  |  |   if (len > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |     while (len < LCD_WIDTH) { | 
			
		
	
		
			
				
					|  |  |  |  |       lcd_status_message[len++] = ' '; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_status_message[LCD_WIDTH] = '\0'; | 
			
		
	
		
			
				
					|  |  |  |  |   #ifdef LCD_PROGRESS_BAR | 
			
		
	
		
			
				
					|  |  |  |  |     progressBarTick = millis(); | 
			
		
	
		
			
				
					|  |  |  |  |     #if PROGRESS_MSG_EXPIRE > 0 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1426,15 +1419,27 @@ void lcd_finishstatus(bool persist=false) { | 
			
		
	
		
			
				
					|  |  |  |  |   void dontExpireStatus() { expireStatusMillis = 0; } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void set_utf_strlen(char *s, uint8_t n) { | 
			
		
	
		
			
				
					|  |  |  |  |   uint8_t i = 0, j = 0; | 
			
		
	
		
			
				
					|  |  |  |  |   while (s[i] && (j < n)) { | 
			
		
	
		
			
				
					|  |  |  |  |     if ((s[i] & 0xc0u) != 0x80u) j++; | 
			
		
	
		
			
				
					|  |  |  |  |     i++; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   while (j++ < n) s[i++] = ' '; | 
			
		
	
		
			
				
					|  |  |  |  |   s[i] = 0; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_setstatus(const char* message, bool persist) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (lcd_status_message_level > 0) return; | 
			
		
	
		
			
				
					|  |  |  |  |   strncpy(lcd_status_message, message, LCD_WIDTH); | 
			
		
	
		
			
				
					|  |  |  |  |   strncpy(lcd_status_message, message, 3*LCD_WIDTH); | 
			
		
	
		
			
				
					|  |  |  |  |   set_utf_strlen(lcd_status_message, LCD_WIDTH); | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_finishstatus(persist); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_setstatuspgm(const char* message, uint8_t level) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (level >= lcd_status_message_level) { | 
			
		
	
		
			
				
					|  |  |  |  |     strncpy_P(lcd_status_message, message, LCD_WIDTH); | 
			
		
	
		
			
				
					|  |  |  |  |     strncpy_P(lcd_status_message, message, 3*LCD_WIDTH); | 
			
		
	
		
			
				
					|  |  |  |  |     set_utf_strlen(lcd_status_message, LCD_WIDTH); | 
			
		
	
		
			
				
					|  |  |  |  |     lcd_status_message_level = level; | 
			
		
	
		
			
				
					|  |  |  |  |     lcd_finishstatus(level > 0); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |