|  | @@ -768,7 +768,7 @@ void lcdui_print_status_line(void)
 | 
	
		
			
				|  |  |  			heating_status_counter = 0;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		lcd_set_cursor(7, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(PSTR("             "));
 | 
	
		
			
				|  |  | +		lcd_space(13);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		for (unsigned int dots = 0; dots < heating_status_counter; dots++)
 | 
	
		
			
				|  |  |  		{
 | 
	
	
		
			
				|  | @@ -778,22 +778,18 @@ void lcdui_print_status_line(void)
 | 
	
		
			
				|  |  |  		switch (heating_status)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  		case 1:
 | 
	
		
			
				|  |  | -			lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -			lcd_puts_P(_T(MSG_HEATING));
 | 
	
		
			
				|  |  | +			lcd_puts_at_P(0, 3, _T(MSG_HEATING));
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		case 2:
 | 
	
		
			
				|  |  | -			lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -			lcd_puts_P(_T(MSG_HEATING_COMPLETE));
 | 
	
		
			
				|  |  | +			lcd_puts_at_P(0, 3, _T(MSG_HEATING_COMPLETE));
 | 
	
		
			
				|  |  |  			heating_status = 0;
 | 
	
		
			
				|  |  |  			heating_status_counter = 0;
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		case 3:
 | 
	
		
			
				|  |  | -			lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -			lcd_puts_P(_T(MSG_BED_HEATING));
 | 
	
		
			
				|  |  | +			lcd_puts_at_P(0, 3, _T(MSG_BED_HEATING));
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		case 4:
 | 
	
		
			
				|  |  | -			lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -			lcd_puts_P(_T(MSG_BED_DONE));
 | 
	
		
			
				|  |  | +			lcd_puts_at_P(0, 3, _T(MSG_BED_DONE));
 | 
	
		
			
				|  |  |  			heating_status = 0;
 | 
	
		
			
				|  |  |  			heating_status_counter = 0;
 | 
	
		
			
				|  |  |  			break;
 | 
	
	
		
			
				|  | @@ -842,9 +838,8 @@ void lcdui_print_status_line(void)
 | 
	
		
			
				|  |  |  			if (custom_message_state > 10)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  |  				lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -				lcd_puts_P(PSTR("                    "));
 | 
	
		
			
				|  |  | -				lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -				lcd_puts_P(_T(MSG_CALIBRATE_Z_AUTO));
 | 
	
		
			
				|  |  | +				lcd_space(20);
 | 
	
		
			
				|  |  | +				lcd_puts_at_P(0, 3, _T(MSG_CALIBRATE_Z_AUTO));
 | 
	
		
			
				|  |  |  				lcd_puts_P(PSTR(" : "));
 | 
	
		
			
				|  |  |  				lcd_print(custom_message_state-10);
 | 
	
		
			
				|  |  |  			}
 | 
	
	
		
			
				|  | @@ -859,9 +854,8 @@ void lcdui_print_status_line(void)
 | 
	
		
			
				|  |  |  				if (custom_message_state > 3 && custom_message_state <= 10 )
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  |  					lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -					lcd_puts_P(PSTR("                   "));
 | 
	
		
			
				|  |  | -					lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -					lcd_puts_P(_i("Calibration done"));////MSG_HOMEYZ_DONE
 | 
	
		
			
				|  |  | +					lcd_space(19);
 | 
	
		
			
				|  |  | +					lcd_puts_at_P(0, 3, _i("Calibration done"));////MSG_HOMEYZ_DONE
 | 
	
		
			
				|  |  |  					custom_message_state--;
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
	
		
			
				|  | @@ -891,8 +885,7 @@ void lcdui_print_status_line(void)
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		case CustomMsg::TempCompPreheat: // temp compensation preheat
 | 
	
		
			
				|  |  | -			lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -			lcd_puts_P(_i("PINDA Heating"));////MSG_PINDA_PREHEAT c=20 r=1
 | 
	
		
			
				|  |  | +			lcd_puts_at_P(0, 3, _i("PINDA Heating"));////MSG_PINDA_PREHEAT c=20 r=1
 | 
	
		
			
				|  |  |  			if (custom_message_state <= PINDA_HEAT_T)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  |  				lcd_puts_P(PSTR(": "));
 | 
	
	
		
			
				|  | @@ -2281,8 +2274,7 @@ uint8_t nLevel;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  lcd_set_cursor(0,0);
 | 
	
		
			
				|  |  |  lcdui_print_temp(LCD_STR_THERMOMETER[0],(int)degHotend(0),(int)degTargetHotend(0));
 | 
	
		
			
				|  |  | -lcd_set_cursor(0,2);
 | 
	
		
			
				|  |  | -lcd_puts_P(_i("Press the knob"));                 ////MSG_ c=20 r=1
 | 
	
		
			
				|  |  | +lcd_puts_at_P(0,2, _i("Press the knob"));                 ////MSG_ c=20 r=1
 | 
	
		
			
				|  |  |  lcd_set_cursor(0,3);
 | 
	
		
			
				|  |  |  switch(eFilamentAction)
 | 
	
		
			
				|  |  |       {
 | 
	
	
		
			
				|  | @@ -2461,8 +2453,7 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
 | 
	
		
			
				|  |  |                  // handled earlier
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -            lcd_puts_P(_i(">Cancel"));                   ////MSG_ c=20 r=1
 | 
	
		
			
				|  |  | +            lcd_puts_at_P(0, 3, _i(">Cancel"));                   ////MSG_ c=20 r=1
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (lcd_clicked())
 | 
	
	
		
			
				|  | @@ -2619,8 +2610,7 @@ void lcd_wait_interact() {
 | 
	
		
			
				|  |  |    lcd_puts_P(_i("Insert filament"));////MSG_INSERT_FILAMENT c=20
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |    if (!fsensor_autoload_enabled) {
 | 
	
		
			
				|  |  | -	  lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -	  lcd_puts_P(_i("and press the knob"));////MSG_PRESS c=20 r=2
 | 
	
		
			
				|  |  | +	  lcd_puts_at_P(0, 2, _i("and press the knob"));////MSG_PRESS c=20 r=2
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2629,9 +2619,7 @@ void lcd_change_success() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    lcd_clear();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  lcd_puts_P(_i("Change success!"));////MSG_CHANGE_SUCCESS
 | 
	
		
			
				|  |  | +  lcd_puts_at_P(0, 2, _i("Change success!"));////MSG_CHANGE_SUCCESS
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -2654,11 +2642,8 @@ void lcd_loading_color() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    lcd_clear();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  lcd_set_cursor(0, 0);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  lcd_puts_P(_i("Loading color"));////MSG_LOADING_COLOR
 | 
	
		
			
				|  |  | -  lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -  lcd_puts_P(_T(MSG_PLEASE_WAIT));
 | 
	
		
			
				|  |  | +  lcd_puts_at_P(0, 0, _i("Loading color"));////MSG_LOADING_COLOR
 | 
	
		
			
				|  |  | +  lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT));
 | 
	
		
			
				|  |  |    lcd_loading_progress_bar((FILAMENTCHANGE_FINALFEED * 1000ul) / FILAMENTCHANGE_EFEED_FINAL); //show progress bar during filament loading slow sequence
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2668,11 +2653,8 @@ void lcd_loading_filament() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    lcd_clear();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  lcd_set_cursor(0, 0);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  lcd_puts_P(_T(MSG_LOADING_FILAMENT));
 | 
	
		
			
				|  |  | -  lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -  lcd_puts_P(_T(MSG_PLEASE_WAIT));
 | 
	
		
			
				|  |  | +  lcd_puts_at_P(0, 0, _T(MSG_LOADING_FILAMENT));
 | 
	
		
			
				|  |  | +  lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT));
 | 
	
		
			
				|  |  |  #ifdef SNMM
 | 
	
		
			
				|  |  |    for (int i = 0; i < 20; i++) {
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2706,23 +2688,10 @@ void lcd_alright() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    lcd_clear();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  lcd_set_cursor(0, 0);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  lcd_puts_P(_i("Changed correctly?"));////MSG_CORRECTLY c=20
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  lcd_set_cursor(1, 1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  lcd_puts_P(_T(MSG_YES));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  lcd_set_cursor(1, 2);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  lcd_puts_P(_i("Filament not loaded"));////MSG_NOT_LOADED c=19
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  lcd_set_cursor(1, 3);
 | 
	
		
			
				|  |  | -  lcd_puts_P(_i("Color not correct"));////MSG_NOT_COLOR
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  lcd_puts_at_P(0, 0, _i("Changed correctly?"));////MSG_CORRECTLY c=20
 | 
	
		
			
				|  |  | +  lcd_puts_at_P(1, 1, _T(MSG_YES));
 | 
	
		
			
				|  |  | +  lcd_puts_at_P(1, 2, _i("Filament not loaded"));////MSG_NOT_LOADED c=19
 | 
	
		
			
				|  |  | +  lcd_puts_at_P(1, 3, _i("Color not correct"));////MSG_NOT_COLOR
 | 
	
		
			
				|  |  |    lcd_set_cursor(0, 1);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    lcd_print('>');
 | 
	
	
		
			
				|  | @@ -2791,10 +2760,8 @@ void lcd_alright() {
 | 
	
		
			
				|  |  |  void show_preheat_nozzle_warning()
 | 
	
		
			
				|  |  |  {	
 | 
	
		
			
				|  |  |      lcd_clear();
 | 
	
		
			
				|  |  | -    lcd_set_cursor(0, 0);
 | 
	
		
			
				|  |  | -    lcd_puts_P(_T(MSG_ERROR));
 | 
	
		
			
				|  |  | -    lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -    lcd_puts_P(_T(MSG_PREHEAT_NOZZLE));
 | 
	
		
			
				|  |  | +    lcd_puts_at_P(0, 0, _T(MSG_ERROR));
 | 
	
		
			
				|  |  | +    lcd_puts_at_P(0, 2, _T(MSG_PREHEAT_NOZZLE));
 | 
	
		
			
				|  |  |      _delay(2000);
 | 
	
		
			
				|  |  |      lcd_clear();
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -3055,8 +3022,7 @@ static void lcd_menu_xyz_skew()
 | 
	
		
			
				|  |  |  		lcd_printf_P(_N("%3.2f\x01"), _deg(angleDiff));
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	else{
 | 
	
		
			
				|  |  | -		lcd_set_cursor(15,0);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_NA));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(15,0, _T(MSG_NA));
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |      if (lcd_clicked())
 | 
	
		
			
				|  |  |          menu_goto(lcd_menu_xyz_offset, 0, true, true);
 | 
	
	
		
			
				|  | @@ -3074,8 +3040,7 @@ static void lcd_menu_xyz_skew()
 | 
	
		
			
				|  |  |  //! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 | 
	
		
			
				|  |  |  static void lcd_menu_xyz_offset()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    lcd_set_cursor(0,0);
 | 
	
		
			
				|  |  | -    lcd_puts_P(_i("[0;0] point offset"));////MSG_MEASURED_OFFSET
 | 
	
		
			
				|  |  | +    lcd_puts_at_P(0, 0, _i("[0;0] point offset"));////MSG_MEASURED_OFFSET
 | 
	
		
			
				|  |  |      lcd_puts_at_P(0, 1, separator);
 | 
	
		
			
				|  |  |      lcd_puts_at_P(0, 2, PSTR("X"));  ////c=10 r=1
 | 
	
		
			
				|  |  |      lcd_puts_at_P(0, 3, PSTR("Y"));  ////c=10 r=1
 | 
	
	
		
			
				|  | @@ -3296,8 +3261,7 @@ void lcd_adjust_bed(void)
 | 
	
		
			
				|  |  |  void pid_extruder()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	lcd_clear();
 | 
	
		
			
				|  |  | -	lcd_set_cursor(1, 0);
 | 
	
		
			
				|  |  | -	lcd_puts_P(_i("Set temperature:"));////MSG_SET_TEMPERATURE c=19 r=1
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(1, 0, _i("Set temperature:"));////MSG_SET_TEMPERATURE c=19 r=1
 | 
	
		
			
				|  |  |  	pid_temp += int(lcd_encoder);
 | 
	
		
			
				|  |  |  	if (pid_temp > HEATER_0_MAXTEMP) pid_temp = HEATER_0_MAXTEMP;
 | 
	
		
			
				|  |  |  	if (pid_temp < HEATER_0_MINTEMP) pid_temp = HEATER_0_MINTEMP;
 | 
	
	
		
			
				|  | @@ -3791,12 +3755,10 @@ int8_t lcd_show_multiscreen_message_two_choices_and_wait_P(const char *msg, bool
 | 
	
		
			
				|  |  |  		if (msg_next == NULL) {
 | 
	
		
			
				|  |  |  			lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  |  			if (yes) lcd_print('>');
 | 
	
		
			
				|  |  | -			lcd_set_cursor(1, 3);
 | 
	
		
			
				|  |  | -			lcd_puts_P(first_choice);
 | 
	
		
			
				|  |  | +			lcd_puts_at_P(1, 3, first_choice);
 | 
	
		
			
				|  |  |  			lcd_set_cursor(7, 3);
 | 
	
		
			
				|  |  |  			if (!yes) lcd_print('>');
 | 
	
		
			
				|  |  | -			lcd_set_cursor(8, 3);
 | 
	
		
			
				|  |  | -			lcd_puts_P(second_choice);
 | 
	
		
			
				|  |  | +			lcd_puts_at_P(8, 3, second_choice);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -3817,12 +3779,10 @@ int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow
 | 
	
		
			
				|  |  |  		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  |  		lcd_print('>');
 | 
	
		
			
				|  |  |  		lcd_puts_P(_T(MSG_YES));
 | 
	
		
			
				|  |  | -		lcd_set_cursor(1, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_NO));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(1, 3, _T(MSG_NO));
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	else {
 | 
	
		
			
				|  |  | -		lcd_set_cursor(1, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_YES));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(1, 2, _T(MSG_YES));
 | 
	
		
			
				|  |  |  		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  |  		lcd_print('>');
 | 
	
		
			
				|  |  |  		lcd_puts_P(_T(MSG_NO));
 | 
	
	
		
			
				|  | @@ -3951,14 +3911,10 @@ void lcd_temp_cal_show_result(bool result) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void lcd_show_end_stops() {
 | 
	
		
			
				|  |  | -	lcd_set_cursor(0, 0);
 | 
	
		
			
				|  |  | -	lcd_puts_P((PSTR("End stops diag")));
 | 
	
		
			
				|  |  | -	lcd_set_cursor(0, 1);
 | 
	
		
			
				|  |  | -	lcd_puts_P((READ(X_MIN_PIN) ^ (bool)X_MIN_ENDSTOP_INVERTING) ? (PSTR("X1")) : (PSTR("X0")));
 | 
	
		
			
				|  |  | -	lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -	lcd_puts_P((READ(Y_MIN_PIN) ^ (bool)Y_MIN_ENDSTOP_INVERTING) ? (PSTR("Y1")) : (PSTR("Y0")));
 | 
	
		
			
				|  |  | -	lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -	lcd_puts_P((READ(Z_MIN_PIN) ^ (bool)Z_MIN_ENDSTOP_INVERTING) ? (PSTR("Z1")) : (PSTR("Z0")));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(0, 0, (PSTR("End stops diag")));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(0, 1, (READ(X_MIN_PIN) ^ (bool)X_MIN_ENDSTOP_INVERTING) ? (PSTR("X1")) : (PSTR("X0")));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(0, 2, (READ(Y_MIN_PIN) ^ (bool)Y_MIN_ENDSTOP_INVERTING) ? (PSTR("Y1")) : (PSTR("Y0")));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(0, 3, (READ(Z_MIN_PIN) ^ (bool)Z_MIN_ENDSTOP_INVERTING) ? (PSTR("Z1")) : (PSTR("Z0")));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef TMC2130
 | 
	
	
		
			
				|  | @@ -5940,8 +5896,7 @@ void bowden_menu() {
 | 
	
		
			
				|  |  |  	lcd_set_cursor(0, 0);
 | 
	
		
			
				|  |  |  	lcd_print('>');
 | 
	
		
			
				|  |  |  	for (uint_least8_t i = 0; i < 4; i++) {
 | 
	
		
			
				|  |  | -		lcd_set_cursor(1, i);
 | 
	
		
			
				|  |  | -		lcd_print("Extruder ");
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(1, i, PSTR("Extruder "));
 | 
	
		
			
				|  |  |  		lcd_print(i);
 | 
	
		
			
				|  |  |  		lcd_print(": ");
 | 
	
		
			
				|  |  |  		EEPROM_read_B(EEPROM_BOWDEN_LENGTH + i * 2, &bowden_length[i]);
 | 
	
	
		
			
				|  | @@ -5998,8 +5953,7 @@ void bowden_menu() {
 | 
	
		
			
				|  |  |  				manage_heater();
 | 
	
		
			
				|  |  |  				manage_inactivity(true);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -				lcd_set_cursor(1, 1);
 | 
	
		
			
				|  |  | -				lcd_print("Extruder ");
 | 
	
		
			
				|  |  | +				lcd_puts_at_P(1, 1, PSTR("Extruder "));
 | 
	
		
			
				|  |  |  				lcd_print(cursor_pos);
 | 
	
		
			
				|  |  |  				lcd_print(": ");
 | 
	
		
			
				|  |  |  				lcd_set_cursor(13, 1);
 | 
	
	
		
			
				|  | @@ -6031,8 +5985,7 @@ void bowden_menu() {
 | 
	
		
			
				|  |  |  						lcd_set_cursor(0, cursor_pos);
 | 
	
		
			
				|  |  |  						lcd_print('>');
 | 
	
		
			
				|  |  |  						for (uint_least8_t i = 0; i < 4; i++) {
 | 
	
		
			
				|  |  | -							lcd_set_cursor(1, i);
 | 
	
		
			
				|  |  | -							lcd_print("Extruder ");
 | 
	
		
			
				|  |  | +							lcd_puts_at_P(1, i, PSTR("Extruder "));
 | 
	
		
			
				|  |  |  							lcd_print(i);
 | 
	
		
			
				|  |  |  							lcd_print(": ");
 | 
	
		
			
				|  |  |  							EEPROM_read_B(EEPROM_BOWDEN_LENGTH + i * 2, &bowden_length[i]);
 | 
	
	
		
			
				|  | @@ -6222,8 +6175,10 @@ char reset_menu() {
 | 
	
		
			
				|  |  |      static const char iSt[] PROGMEM = "Statistics";
 | 
	
		
			
				|  |  |      static const char iSh[] PROGMEM = "Shipping prep";
 | 
	
		
			
				|  |  |      static const char iAl[] PROGMEM = "All Data";
 | 
	
		
			
				|  |  | +#ifdef SNMM
 | 
	
		
			
				|  |  |      static const char iBl[] PROGMEM = "Bowden length";
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  |      static const char *const item [items_no] PROGMEM = { iLa, iSt, iSh, iAl
 | 
	
		
			
				|  |  |  #ifdef SNMM
 | 
	
		
			
				|  |  |          , iBl
 | 
	
	
		
			
				|  | @@ -6238,8 +6193,7 @@ char reset_menu() {
 | 
	
		
			
				|  |  |  	while (1) {		
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		for (uint_least8_t i = 0; i < 4; i++) {
 | 
	
		
			
				|  |  | -			lcd_set_cursor(1, i);
 | 
	
		
			
				|  |  | -            lcd_puts_P(item[first + i]);
 | 
	
		
			
				|  |  | +			lcd_puts_at_P(1, i, item[first + i]);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		manage_heater();
 | 
	
	
		
			
				|  | @@ -6662,12 +6616,10 @@ void lcd_confirm_print()
 | 
	
		
			
				|  |  |  		if (cursor_pos > 2) { cursor_pos = 2; }
 | 
	
		
			
				|  |  |  		if (cursor_pos < 1) { cursor_pos = 1; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2); lcd_print("          ");
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3); lcd_print("          ");
 | 
	
		
			
				|  |  | -		lcd_set_cursor(2, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_YES));
 | 
	
		
			
				|  |  | -		lcd_set_cursor(2, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_NO));
 | 
	
		
			
				|  |  | +		lcd_set_cursor(0, 2); lcd_space(10);
 | 
	
		
			
				|  |  | +		lcd_set_cursor(0, 3); lcd_space(10);
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(2, 2, _T(MSG_YES));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(2, 3, _T(MSG_NO));
 | 
	
		
			
				|  |  |  		lcd_set_cursor(0, 1 + cursor_pos);
 | 
	
		
			
				|  |  |  		lcd_print('>');
 | 
	
		
			
				|  |  |  		_delay(100);
 | 
	
	
		
			
				|  | @@ -7443,12 +7395,9 @@ void lcd_print_stop()
 | 
	
		
			
				|  |  |  void lcd_sdcard_stop()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	lcd_set_cursor(0, 0);
 | 
	
		
			
				|  |  | -	lcd_puts_P(_T(MSG_STOP_PRINT));
 | 
	
		
			
				|  |  | -	lcd_set_cursor(2, 2);
 | 
	
		
			
				|  |  | -	lcd_puts_P(_T(MSG_NO));
 | 
	
		
			
				|  |  | -	lcd_set_cursor(2, 3);
 | 
	
		
			
				|  |  | -	lcd_puts_P(_T(MSG_YES));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(0, 0, _T(MSG_STOP_PRINT));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(2, 2, _T(MSG_NO));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(2, 3, _T(MSG_YES));
 | 
	
		
			
				|  |  |  	lcd_set_cursor(0, 2); lcd_print(' ');
 | 
	
		
			
				|  |  |  	lcd_set_cursor(0, 3); lcd_print(' ');
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -7654,7 +7603,7 @@ bool lcd_selftest()
 | 
	
		
			
				|  |  |  #endif //IR_SENSOR_ANALOG
 | 
	
		
			
				|  |  |  	lcd_wait_for_cool_down();
 | 
	
		
			
				|  |  |  	lcd_clear();
 | 
	
		
			
				|  |  | -	lcd_set_cursor(0, 0); lcd_puts_P(_i("Self test start  "));////MSG_SELFTEST_START c=20
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(0, 0, _i("Self test start  "));////MSG_SELFTEST_START c=20
 | 
	
		
			
				|  |  |  	#ifdef TMC2130
 | 
	
		
			
				|  |  |  	  FORCE_HIGH_POWER_START;
 | 
	
		
			
				|  |  |  	#endif // TMC2130
 | 
	
	
		
			
				|  | @@ -8328,106 +8277,79 @@ static void lcd_selftest_error(TestError testError, const char *_error_1, const
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	lcd_clear();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	lcd_set_cursor(0, 0);
 | 
	
		
			
				|  |  | -	lcd_puts_P(_i("Selftest error !"));////MSG_SELFTEST_ERROR
 | 
	
		
			
				|  |  | -	lcd_set_cursor(0, 1);
 | 
	
		
			
				|  |  | -	lcd_puts_P(_i("Please check :"));////MSG_SELFTEST_PLEASECHECK
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(0, 0, _i("Selftest error !"));////MSG_SELFTEST_ERROR
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(0, 1, _i("Please check :"));////MSG_SELFTEST_PLEASECHECK
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	switch (testError)
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  	case TestError::Heater:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Heater/Thermistor"));////MSG_SELFTEST_HEATERTHERMISTOR
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Not connected"));////MSG_SELFTEST_NOTCONNECTED
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _i("Heater/Thermistor"));////MSG_SELFTEST_HEATERTHERMISTOR
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _i("Not connected"));////MSG_SELFTEST_NOTCONNECTED
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::Bed:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Bed / Heater"));////MSG_SELFTEST_BEDHEATER
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _i("Bed / Heater"));////MSG_SELFTEST_BEDHEATER
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::Endstops:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Endstops"));////MSG_SELFTEST_ENDSTOPS
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _i("Endstops"));////MSG_SELFTEST_ENDSTOPS
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  |  		lcd_set_cursor(17, 3);
 | 
	
		
			
				|  |  |  		lcd_print(_error_1);
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::Motor:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_MOTOR));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _T(MSG_SELFTEST_MOTOR));
 | 
	
		
			
				|  |  |  		lcd_set_cursor(18, 2);
 | 
	
		
			
				|  |  |  		lcd_print(_error_1);
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Endstop"));////MSG_SELFTEST_ENDSTOP
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _i("Endstop"));////MSG_SELFTEST_ENDSTOP
 | 
	
		
			
				|  |  |  		lcd_set_cursor(18, 3);
 | 
	
		
			
				|  |  |  		lcd_print(_error_2);
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::Endstop:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Endstop not hit"));////MSG_SELFTEST_ENDSTOP_NOTHIT c=20
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_MOTOR));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _i("Endstop not hit"));////MSG_SELFTEST_ENDSTOP_NOTHIT c=20
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _T(MSG_SELFTEST_MOTOR));
 | 
	
		
			
				|  |  |  		lcd_set_cursor(18, 3);
 | 
	
		
			
				|  |  |  		lcd_print(_error_1);
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::PrintFan:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_COOLING_FAN));
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _T(MSG_SELFTEST_COOLING_FAN));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  |  		lcd_set_cursor(18, 3);
 | 
	
		
			
				|  |  |  		lcd_print(_error_1);
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::ExtruderFan:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_EXTRUDER_FAN));
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _T(MSG_SELFTEST_EXTRUDER_FAN));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  |  		lcd_set_cursor(18, 3);
 | 
	
		
			
				|  |  |  		lcd_print(_error_1);
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::Pulley:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Loose pulley"));////MSG_LOOSE_PULLEY c=20 r=1
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_MOTOR));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _i("Loose pulley"));////MSG_LOOSE_PULLEY c=20 r=1
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _T(MSG_SELFTEST_MOTOR));
 | 
	
		
			
				|  |  |  		lcd_set_cursor(18, 3);
 | 
	
		
			
				|  |  |  		lcd_print(_error_1);
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::Axis:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Axis length"));////MSG_SELFTEST_AXIS_LENGTH
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Axis"));////MSG_SELFTEST_AXIS
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _i("Axis length"));////MSG_SELFTEST_AXIS_LENGTH
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _i("Axis"));////MSG_SELFTEST_AXIS
 | 
	
		
			
				|  |  |  		lcd_set_cursor(18, 3);
 | 
	
		
			
				|  |  |  		lcd_print(_error_1);
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::SwappedFan:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Front/left fans"));////MSG_SELFTEST_FANS
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_i("Swapped"));////MSG_SELFTEST_SWAPPED
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _i("Front/left fans"));////MSG_SELFTEST_FANS
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _i("Swapped"));////MSG_SELFTEST_SWAPPED
 | 
	
		
			
				|  |  |  		lcd_set_cursor(18, 3);
 | 
	
		
			
				|  |  |  		lcd_print(_error_1);
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::WiringFsensor:
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_FILAMENT_SENSOR));
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -		lcd_puts_P(_T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 2, _T(MSG_SELFTEST_FILAMENT_SENSOR));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 3, _T(MSG_SELFTEST_WIRINGERROR));
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case TestError::TriggeringFsensor:
 | 
	
		
			
				|  |  | -          lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -          lcd_puts_P(_T(MSG_SELFTEST_FILAMENT_SENSOR));
 | 
	
		
			
				|  |  | -          lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  | -          lcd_puts_P(_i("False triggering"));////c=20
 | 
	
		
			
				|  |  | +          lcd_puts_at_P(0, 2, _T(MSG_SELFTEST_FILAMENT_SENSOR));
 | 
	
		
			
				|  |  | +          lcd_puts_at_P(0, 3, _i("False triggering"));////c=20
 | 
	
		
			
				|  |  |            break;
 | 
	
		
			
				|  |  |  	case TestError::FsensorLevel:
 | 
	
		
			
				|  |  | -          lcd_set_cursor(0, 2);
 | 
	
		
			
				|  |  | -          lcd_puts_P(_T(MSG_SELFTEST_FILAMENT_SENSOR));
 | 
	
		
			
				|  |  | +          lcd_puts_at_P(0, 2, _T(MSG_SELFTEST_FILAMENT_SENSOR));
 | 
	
		
			
				|  |  |            lcd_set_cursor(0, 3);
 | 
	
		
			
				|  |  |            lcd_printf_P(_i("%s level expected"),_error_1);////c=20
 | 
	
		
			
				|  |  |            break;
 | 
	
	
		
			
				|  | @@ -8536,22 +8458,18 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite,
 | 
	
		
			
				|  |  |  	bool _result = check_opposite;
 | 
	
		
			
				|  |  |  	lcd_clear();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	lcd_set_cursor(0, 0); lcd_puts_P(_T(MSG_SELFTEST_FAN));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(0, 0, _T(MSG_SELFTEST_FAN));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	switch (_fan)
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  	case 0:
 | 
	
		
			
				|  |  |  		// extruder cooling fan
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 1);
 | 
	
		
			
				|  |  | -		if(check_opposite == true) lcd_puts_P(_T(MSG_SELFTEST_COOLING_FAN)); 
 | 
	
		
			
				|  |  | -		else lcd_puts_P(_T(MSG_SELFTEST_EXTRUDER_FAN));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 1, check_opposite ? _T(MSG_SELFTEST_COOLING_FAN) : _T(MSG_SELFTEST_EXTRUDER_FAN));
 | 
	
		
			
				|  |  |  		setExtruderAutoFanState(3);
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case 1:
 | 
	
		
			
				|  |  |  		// object cooling fan
 | 
	
		
			
				|  |  | -		lcd_set_cursor(0, 1);
 | 
	
		
			
				|  |  | -		if (check_opposite == true) lcd_puts_P(_T(MSG_SELFTEST_EXTRUDER_FAN));
 | 
	
		
			
				|  |  | -		else lcd_puts_P(_T(MSG_SELFTEST_COOLING_FAN));
 | 
	
		
			
				|  |  | +		lcd_puts_at_P(0, 1, check_opposite ? _T(MSG_SELFTEST_EXTRUDER_FAN) : _T(MSG_SELFTEST_COOLING_FAN));
 | 
	
		
			
				|  |  |  		SET_OUTPUT(FAN_PIN);
 | 
	
		
			
				|  |  |  #ifdef FAN_SOFT_PWM
 | 
	
		
			
				|  |  |  		fanSpeedSoftPwm = 255;
 | 
	
	
		
			
				|  | @@ -8563,9 +8481,9 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite,
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	_delay(500);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	lcd_set_cursor(1, 2); lcd_puts_P(_T(MSG_SELFTEST_FAN_YES));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(1, 2, _T(MSG_SELFTEST_FAN_YES));
 | 
	
		
			
				|  |  |  	lcd_set_cursor(0, 3); lcd_print('>');
 | 
	
		
			
				|  |  | -	lcd_set_cursor(1, 3); lcd_puts_P(_T(MSG_SELFTEST_FAN_NO));
 | 
	
		
			
				|  |  | +	lcd_puts_at_P(1, 3, _T(MSG_SELFTEST_FAN_NO));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	int8_t enc_dif = int(_default)*3;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -8578,17 +8496,17 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite,
 | 
	
		
			
				|  |  |  			if (enc_dif > lcd_encoder_diff) {
 | 
	
		
			
				|  |  |  				_result = !check_opposite;
 | 
	
		
			
				|  |  |  				lcd_set_cursor(0, 2); lcd_print('>');
 | 
	
		
			
				|  |  | -				lcd_set_cursor(1, 2); lcd_puts_P(_T(MSG_SELFTEST_FAN_YES));
 | 
	
		
			
				|  |  | +				lcd_puts_at_P(1, 2, _T(MSG_SELFTEST_FAN_YES));
 | 
	
		
			
				|  |  |  				lcd_set_cursor(0, 3); lcd_print(' ');
 | 
	
		
			
				|  |  | -				lcd_set_cursor(1, 3); lcd_puts_P(_T(MSG_SELFTEST_FAN_NO));
 | 
	
		
			
				|  |  | +				lcd_puts_at_P(1, 3, _T(MSG_SELFTEST_FAN_NO));
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			if (enc_dif < lcd_encoder_diff) {
 | 
	
		
			
				|  |  |  				_result = check_opposite;
 | 
	
		
			
				|  |  |  				lcd_set_cursor(0, 2); lcd_print(' ');
 | 
	
		
			
				|  |  | -				lcd_set_cursor(1, 2); lcd_puts_P(_T(MSG_SELFTEST_FAN_YES));
 | 
	
		
			
				|  |  | +				lcd_puts_at_P(1, 2, _T(MSG_SELFTEST_FAN_YES));
 | 
	
		
			
				|  |  |  				lcd_set_cursor(0, 3); lcd_print('>');
 | 
	
		
			
				|  |  | -				lcd_set_cursor(1, 3); lcd_puts_P(_T(MSG_SELFTEST_FAN_NO));
 | 
	
		
			
				|  |  | +				lcd_puts_at_P(1, 3, _T(MSG_SELFTEST_FAN_NO));
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			enc_dif = 0;
 | 
	
		
			
				|  |  |  			lcd_encoder_diff = 0;
 |