Explorar el Código

🧑‍💻 Extend LCD string substitution (#24278)

Scott Lahteine hace 2 años
padre
commit
8aca38351c
No account linked to committer's email address
Se han modificado 83 ficheros con 1068 adiciones y 1312 borrados
  1. 0
    1
      Marlin/src/feature/dac/stepper_dac.cpp
  2. 5
    5
      Marlin/src/lcd/HD44780/lcdprint_hd44780.cpp
  3. 12
    11
      Marlin/src/lcd/HD44780/marlinui_HD44780.cpp
  4. 5
    5
      Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp
  5. 73
    69
      Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp
  6. 3
    3
      Marlin/src/lcd/dogm/lcdprint_u8g.cpp
  7. 19
    19
      Marlin/src/lcd/dogm/marlinui_DOGM.cpp
  8. 1
    1
      Marlin/src/lcd/dogm/u8g_fontutf8.cpp
  9. 3
    3
      Marlin/src/lcd/dogm/u8g_fontutf8.h
  10. 5
    5
      Marlin/src/lcd/e3v2/jyersui/dwin.cpp
  11. 31
    29
      Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp
  12. 66
    27
      Marlin/src/lcd/e3v2/marlinui/dwin_string.h
  13. 20
    21
      Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp
  14. 18
    20
      Marlin/src/lcd/e3v2/marlinui/ui_common.cpp
  15. 4
    6
      Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp
  16. 5
    5
      Marlin/src/lcd/e3v2/proui/dwin.cpp
  17. 1
    1
      Marlin/src/lcd/e3v2/proui/dwin_lcd.cpp
  18. 1
    1
      Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/advanced_settings.cpp
  19. 1
    1
      Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/advanced_settings_menu.cpp
  20. 1
    1
      Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/advanced_settings_menu.cpp
  21. 1
    1
      Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_velocity_screen.cpp
  22. 2
    0
      Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language.h
  23. 127
    127
      Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h
  24. 4
    9
      Marlin/src/lcd/fontutils.cpp
  25. 8
    4
      Marlin/src/lcd/fontutils.h
  26. 5
    8
      Marlin/src/lcd/language/language_an.h
  27. 3
    4
      Marlin/src/lcd/language/language_bg.h
  28. 5
    6
      Marlin/src/lcd/language/language_ca.h
  29. 10
    23
      Marlin/src/lcd/language/language_cz.h
  30. 2
    8
      Marlin/src/lcd/language/language_da.h
  31. 12
    42
      Marlin/src/lcd/language/language_de.h
  32. 6
    14
      Marlin/src/lcd/language/language_el.h
  33. 6
    14
      Marlin/src/lcd/language/language_el_gr.h
  34. 19
    79
      Marlin/src/lcd/language/language_en.h
  35. 14
    27
      Marlin/src/lcd/language/language_es.h
  36. 5
    14
      Marlin/src/lcd/language/language_eu.h
  37. 1
    1
      Marlin/src/lcd/language/language_fi.h
  38. 11
    32
      Marlin/src/lcd/language/language_fr.h
  39. 13
    27
      Marlin/src/lcd/language/language_gl.h
  40. 1
    1
      Marlin/src/lcd/language/language_hr.h
  41. 11
    32
      Marlin/src/lcd/language/language_hu.h
  42. 13
    66
      Marlin/src/lcd/language/language_it.h
  43. 6
    16
      Marlin/src/lcd/language/language_jp_kana.h
  44. 2
    1
      Marlin/src/lcd/language/language_nl.h
  45. 7
    18
      Marlin/src/lcd/language/language_pl.h
  46. 2
    4
      Marlin/src/lcd/language/language_pt.h
  47. 5
    8
      Marlin/src/lcd/language/language_pt_br.h
  48. 16
    29
      Marlin/src/lcd/language/language_ro.h
  49. 10
    34
      Marlin/src/lcd/language/language_ru.h
  50. 19
    47
      Marlin/src/lcd/language/language_sk.h
  51. 10
    23
      Marlin/src/lcd/language/language_sv.h
  52. 10
    23
      Marlin/src/lcd/language/language_tr.h
  53. 10
    34
      Marlin/src/lcd/language/language_uk.h
  54. 9
    22
      Marlin/src/lcd/language/language_vi.h
  55. 9
    23
      Marlin/src/lcd/language/language_zh_CN.h
  56. 9
    23
      Marlin/src/lcd/language/language_zh_TW.h
  57. 11
    8
      Marlin/src/lcd/lcdprint.cpp
  58. 109
    25
      Marlin/src/lcd/lcdprint.h
  59. 3
    2
      Marlin/src/lcd/marlinui.cpp
  60. 4
    3
      Marlin/src/lcd/menu/menu.cpp
  61. 12
    10
      Marlin/src/lcd/menu/menu.h
  62. 20
    28
      Marlin/src/lcd/menu/menu_advanced.cpp
  63. 1
    1
      Marlin/src/lcd/menu/menu_backlash.cpp
  64. 1
    1
      Marlin/src/lcd/menu/menu_configuration.cpp
  65. 10
    10
      Marlin/src/lcd/menu/menu_filament.cpp
  66. 71
    9
      Marlin/src/lcd/menu/menu_item.h
  67. 4
    16
      Marlin/src/lcd/menu/menu_motion.cpp
  68. 2
    15
      Marlin/src/lcd/menu/menu_probe_offset.cpp
  69. 12
    12
      Marlin/src/lcd/menu/menu_temperature.cpp
  70. 5
    3
      Marlin/src/lcd/menu/menu_tune.cpp
  71. 3
    3
      Marlin/src/lcd/menu/menu_ubl.cpp
  72. 1
    10
      Marlin/src/lcd/menu/menu_x_twist.cpp
  73. 1
    1
      Marlin/src/lcd/tft/tft.h
  74. 2
    2
      Marlin/src/lcd/tft/tft_queue.cpp
  75. 4
    1
      Marlin/src/lcd/tft/tft_queue.h
  76. 19
    19
      Marlin/src/lcd/tft/tft_string.cpp
  77. 67
    26
      Marlin/src/lcd/tft/tft_string.h
  78. 5
    5
      Marlin/src/lcd/tft/ui_1024x600.cpp
  79. 5
    5
      Marlin/src/lcd/tft/ui_320x240.cpp
  80. 5
    5
      Marlin/src/lcd/tft/ui_480x320.cpp
  81. 12
    12
      Marlin/src/lcd/tft/ui_common.cpp
  82. 1
    1
      Marlin/src/libs/L64XX/L64XX_Marlin.cpp
  83. 1
    1
      buildroot/share/fonts/genpages.c

+ 0
- 1
Marlin/src/feature/dac/stepper_dac.cpp Ver fichero

@@ -29,7 +29,6 @@
29 29
 #if HAS_MOTOR_CURRENT_DAC
30 30
 
31 31
 #include "stepper_dac.h"
32
-#include "../../MarlinCore.h" // for SP_X_LBL...
33 32
 
34 33
 bool dac_present = false;
35 34
 constexpr xyze_uint8_t dac_order = DAC_STEPPER_ORDER;

+ 5
- 5
Marlin/src/lcd/HD44780/lcdprint_hd44780.cpp Ver fichero

@@ -992,7 +992,7 @@ void lcd_put_int(const int i) { lcd.print(i); }
992 992
 
993 993
 // return < 0 on error
994 994
 // return the advanced cols
995
-int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
995
+int lcd_put_wchar_max(const wchar_t c, const pixel_len_t max_length) {
996 996
 
997 997
   // find the HD44780 internal ROM first
998 998
   int ret;
@@ -1047,9 +1047,9 @@ int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
1047 1047
  *
1048 1048
  * Draw a UTF-8 string
1049 1049
  */
1050
-static int lcd_put_u8str_max_cb(const char * utf8_str, uint8_t (*cb_read_byte)(uint8_t * str), pixel_len_t max_length) {
1050
+static int lcd_put_u8str_max_cb(const char * utf8_str, read_byte_cb_t cb_read_byte, const pixel_len_t max_length) {
1051 1051
   pixel_len_t ret = 0;
1052
-  uint8_t *p = (uint8_t *)utf8_str;
1052
+  const uint8_t *p = (uint8_t *)utf8_str;
1053 1053
   while (ret < max_length) {
1054 1054
     wchar_t ch = 0;
1055 1055
     p = get_utf8_value_cb(p, cb_read_byte, &ch);
@@ -1059,11 +1059,11 @@ static int lcd_put_u8str_max_cb(const char * utf8_str, uint8_t (*cb_read_byte)(u
1059 1059
   return (int)ret;
1060 1060
 }
1061 1061
 
1062
-int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length) {
1062
+int lcd_put_u8str_max(const char * utf8_str, const pixel_len_t max_length) {
1063 1063
   return lcd_put_u8str_max_cb(utf8_str, read_byte_ram, max_length);
1064 1064
 }
1065 1065
 
1066
-int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
1066
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, const pixel_len_t max_length) {
1067 1067
   return lcd_put_u8str_max_cb(utf8_pstr, read_byte_rom, max_length);
1068 1068
 }
1069 1069
 

+ 12
- 11
Marlin/src/lcd/HD44780/marlinui_HD44780.cpp Ver fichero

@@ -495,12 +495,13 @@ void MarlinUI::clear_lcd() { lcd.clear(); }
495 495
 #endif // SHOW_BOOTSCREEN
496 496
 
497 497
 void MarlinUI::draw_kill_screen() {
498
-  lcd_put_u8str(0, 0, status_message);
499
-  lcd_uint_t y = 2;
498
+  lcd_uint_t x = 0, y = 0;
499
+  lcd_put_u8str(x, y, status_message);
500
+  y = 2;
500 501
   #if LCD_HEIGHT >= 4
501
-    lcd_put_u8str(0, y++, GET_TEXT_F(MSG_HALTED));
502
+    lcd_put_u8str(x, y++, GET_TEXT_F(MSG_HALTED));
502 503
   #endif
503
-  lcd_put_u8str(0, y, GET_TEXT_F(MSG_PLEASE_RESET));
504
+  lcd_put_u8str(x, y, GET_TEXT_F(MSG_PLEASE_RESET));
504 505
 }
505 506
 
506 507
 //
@@ -1076,24 +1077,24 @@ void MarlinUI::draw_status_screen() {
1076 1077
       int8_t pad = (LCD_WIDTH - plen - vlen) / 2;
1077 1078
       while (--pad >= 0) { lcd_put_wchar(' '); n--; }
1078 1079
     }
1079
-    if (plen) n = lcd_put_u8str_ind(fstr, itemIndex, itemString, n);
1080
+    if (plen) n = lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, n);
1080 1081
     if (vlen) n -= lcd_put_u8str_max(vstr, n);
1081 1082
     for (; n > 0; --n) lcd_put_wchar(' ');
1082 1083
   }
1083 1084
 
1084 1085
   // Draw a generic menu item with pre_char (if selected) and post_char
1085
-  void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char pre_char, const char post_char) {
1086
+  void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char pre_char, const char post_char) {
1086 1087
     lcd_put_wchar(0, row, sel ? pre_char : ' ');
1087
-    uint8_t n = lcd_put_u8str_ind(fstr, itemIndex, itemString, LCD_WIDTH - 2);
1088
+    uint8_t n = lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, LCD_WIDTH - 2);
1088 1089
     for (; n; --n) lcd_put_wchar(' ');
1089 1090
     lcd_put_wchar(post_char);
1090 1091
   }
1091 1092
 
1092 1093
   // Draw a menu item with a (potentially) editable value
1093
-  void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const inStr, const bool pgm) {
1094
+  void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
1094 1095
     const uint8_t vlen = inStr ? (pgm ? utf8_strlen_P(inStr) : utf8_strlen(inStr)) : 0;
1095 1096
     lcd_put_wchar(0, row, sel ? LCD_STR_ARROW_RIGHT[0] : ' ');
1096
-    uint8_t n = lcd_put_u8str_ind(fstr, itemIndex, itemString, LCD_WIDTH - 2 - vlen);
1097
+    uint8_t n = lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, LCD_WIDTH - 2 - vlen);
1097 1098
     if (vlen) {
1098 1099
       lcd_put_wchar(':');
1099 1100
       for (; n; --n) lcd_put_wchar(' ');
@@ -1102,9 +1103,9 @@ void MarlinUI::draw_status_screen() {
1102 1103
   }
1103 1104
 
1104 1105
   // Low-level draw_edit_screen can be used to draw an edit screen from anyplace
1105
-  void MenuEditItemBase::draw_edit_screen(FSTR_P const fstr, const char * const value/*=nullptr*/) {
1106
+  void MenuEditItemBase::draw_edit_screen(FSTR_P const ftpl, const char * const value/*=nullptr*/) {
1106 1107
     ui.encoder_direction_normal();
1107
-    uint8_t n = lcd_put_u8str_ind(0, 1, fstr, itemIndex, itemString, LCD_WIDTH - 1);
1108
+    uint8_t n = lcd_put_u8str(0, 1, ftpl, itemIndex, itemStringC, itemStringF, LCD_WIDTH - 1);
1108 1109
     if (value) {
1109 1110
       lcd_put_wchar(':'); n--;
1110 1111
       const uint8_t len = utf8_strlen(value) + 1;   // Plus one for a leading space

+ 5
- 5
Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp Ver fichero

@@ -991,7 +991,7 @@ void lcd_put_int(const int i) {
991 991
 
992 992
 // return < 0 on error
993 993
 // return the advanced cols
994
-int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
994
+int lcd_put_wchar_max(const wchar_t c, const pixel_len_t max_length) {
995 995
 
996 996
   // find the HD44780 internal ROM first
997 997
   int ret;
@@ -1045,9 +1045,9 @@ int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
1045 1045
  *
1046 1046
  * Draw a UTF-8 string
1047 1047
  */
1048
-static int lcd_put_u8str_max_cb(const char * utf8_str, uint8_t (*cb_read_byte)(uint8_t * str), pixel_len_t max_length) {
1048
+static int lcd_put_u8str_max_cb(const char * utf8_str, read_byte_cb_t cb_read_byte, const pixel_len_t max_length) {
1049 1049
   pixel_len_t ret = 0;
1050
-  uint8_t *p = (uint8_t *)utf8_str;
1050
+  const uint8_t *p = (uint8_t *)utf8_str;
1051 1051
   while (ret < max_length) {
1052 1052
     wchar_t ch = 0;
1053 1053
     p = get_utf8_value_cb(p, cb_read_byte, &ch);
@@ -1057,11 +1057,11 @@ static int lcd_put_u8str_max_cb(const char * utf8_str, uint8_t (*cb_read_byte)(u
1057 1057
   return (int)ret;
1058 1058
 }
1059 1059
 
1060
-int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length) {
1060
+int lcd_put_u8str_max(const char * utf8_str, const pixel_len_t max_length) {
1061 1061
   return lcd_put_u8str_max_cb(utf8_str, read_byte_ram, max_length);
1062 1062
 }
1063 1063
 
1064
-int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
1064
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, const pixel_len_t max_length) {
1065 1065
   return lcd_put_u8str_max_cb(utf8_pstr, read_byte_rom, max_length);
1066 1066
 }
1067 1067
 

+ 73
- 69
Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp Ver fichero

@@ -380,9 +380,13 @@ void MarlinUI::clear_lcd() {
380 380
   void MarlinUI::_set_contrast() { lcd.setContrast(contrast); }
381 381
 #endif
382 382
 
383
+#if !IS_TFTGLCD_PANEL
384
+  void lcd_moveto(const uint8_t col, const uint8_t row) { lcd.setCursor(col, row); }
385
+#endif
386
+
383 387
 static void center_text(FSTR_P const fstart, const uint8_t y) {
384 388
   const uint8_t len = utf8_strlen(fstart);
385
-  lcd.setCursor(len < LCD_WIDTH ? (LCD_WIDTH - len) / 2 : 0, y);
389
+  lcd_moveto(len < LCD_WIDTH ? (LCD_WIDTH - len) / 2 : 0, y);
386 390
   lcd_put_u8str(fstart);
387 391
 }
388 392
 
@@ -396,9 +400,9 @@ static void center_text(FSTR_P const fstart, const uint8_t y) {
396 400
     uint8_t indent = (LCD_WIDTH - 8) / 2;
397 401
     // symbols 217 (bottom right corner) and 218 (top left corner) are using for letters in some languages
398 402
     // and they should be moved to beginning ASCII table as special symbols
399
-    lcd.setCursor(indent, 0); lcd.write(TLC); lcd_put_u8str(F("------"));  lcd.write(TRC);
400
-    lcd.setCursor(indent, 1); lcd.write(LR);  lcd_put_u8str(F("Marlin"));  lcd.write(LR);
401
-    lcd.setCursor(indent, 2); lcd.write(BLC); lcd_put_u8str(F("------"));  lcd.write(BRC);
403
+    lcd_moveto(indent, 0); lcd.write(TLC); lcd_put_u8str(F("------")); lcd.write(TRC);
404
+    lcd_moveto(indent, 1); lcd.write(LR);  lcd_put_u8str(F("Marlin")); lcd.write(LR);
405
+    lcd_moveto(indent, 2); lcd.write(BLC); lcd_put_u8str(F("------")); lcd.write(BRC);
402 406
     center_text(F(SHORT_BUILD_VERSION), 3);
403 407
     center_text(F(MARLIN_WEBSITE_URL), 4);
404 408
     picBits = ICON_LOGO;
@@ -414,8 +418,8 @@ static void center_text(FSTR_P const fstart, const uint8_t y) {
414 418
 void MarlinUI::draw_kill_screen() {
415 419
   if (!PanelDetected) return;
416 420
   lcd.clear_buffer();
417
-  lcd.setCursor(0, 3);  lcd.write(COLOR_ERROR);
418
-  lcd.setCursor((LCD_WIDTH - utf8_strlen(status_message)) / 2 + 1, 3);
421
+  lcd_moveto(0, 3); lcd.write(COLOR_ERROR);
422
+  lcd_moveto((LCD_WIDTH - utf8_strlen(status_message)) / 2 + 1, 3);
419 423
   lcd_put_u8str(status_message);
420 424
   center_text(GET_TEXT_F(MSG_HALTED), 5);
421 425
   center_text(GET_TEXT_F(MSG_PLEASE_RESET), 6);
@@ -453,25 +457,25 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
453 457
 
454 458
     #if HOTENDS < 2
455 459
       if (heater_id == H_E0) {
456
-        lcd.setCursor(2, 5);  lcd.print(prefix); //HE
457
-        lcd.setCursor(1, 6);  lcd.print(i16tostr3rj(t1));
458
-        lcd.setCursor(1, 7);
460
+        lcd_moveto(2, 5); lcd.print(prefix); //HE
461
+        lcd_moveto(1, 6); lcd.print(i16tostr3rj(t1));
462
+        lcd_moveto(1, 7);
459 463
       }
460 464
       else {
461
-        lcd.setCursor(6, 5);  lcd.print(prefix); //BED
462
-        lcd.setCursor(6, 6);  lcd.print(i16tostr3rj(t1));
463
-        lcd.setCursor(6, 7);
465
+        lcd_moveto(6, 5); lcd.print(prefix); //BED
466
+        lcd_moveto(6, 6); lcd.print(i16tostr3rj(t1));
467
+        lcd_moveto(6, 7);
464 468
       }
465 469
     #else
466 470
       if (heater_id > H_BED) {
467
-        lcd.setCursor(heater_id * 4, 5);  lcd.print(prefix); // HE1 or HE2 or HE3
468
-        lcd.setCursor(heater_id * 4, 6);  lcd.print(i16tostr3rj(t1));
469
-        lcd.setCursor(heater_id * 4, 7);
471
+        lcd_moveto(heater_id * 4, 5); lcd.print(prefix); // HE1 or HE2 or HE3
472
+        lcd_moveto(heater_id * 4, 6); lcd.print(i16tostr3rj(t1));
473
+        lcd_moveto(heater_id * 4, 7);
470 474
       }
471 475
       else {
472
-        lcd.setCursor(13, 5);  lcd.print(prefix); //BED
473
-        lcd.setCursor(13, 6);  lcd.print(i16tostr3rj(t1));
474
-        lcd.setCursor(13, 7);
476
+        lcd_moveto(13, 5); lcd.print(prefix); //BED
477
+        lcd_moveto(13, 6); lcd.print(i16tostr3rj(t1));
478
+        lcd_moveto(13, 7);
475 479
       }
476 480
     #endif // HOTENDS <= 1
477 481
 
@@ -512,9 +516,9 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
512 516
   FORCE_INLINE void _draw_cooler_status(const bool blink) {
513 517
     const celsius_t t2 = thermalManager.degTargetCooler();
514 518
 
515
-    lcd.setCursor(0, 5); lcd_put_u8str(F("COOL"));
516
-    lcd.setCursor(1, 6); lcd_put_u8str(i16tostr3rj(thermalManager.wholeDegCooler()));
517
-    lcd.setCursor(1, 7);
519
+    lcd_moveto(0, 5); lcd_put_u8str(F("COOL"));
520
+    lcd_moveto(1, 6); lcd_put_u8str(i16tostr3rj(thermalManager.wholeDegCooler()));
521
+    lcd_moveto(1, 7);
518 522
 
519 523
     #if !HEATER_IDLE_HANDLER
520 524
       UNUSED(blink);
@@ -540,9 +544,9 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
540 544
 #if ENABLED(LASER_COOLANT_FLOW_METER)
541 545
 
542 546
   FORCE_INLINE void _draw_flowmeter_status() {
543
-    lcd.setCursor(5, 5); lcd_put_u8str(F("FLOW"));
544
-    lcd.setCursor(7, 6); lcd_put_wchar('L');
545
-    lcd.setCursor(6, 7); lcd_put_u8str(ftostr11ns(cooler.flowrate));
547
+    lcd_moveto(5, 5); lcd_put_u8str(F("FLOW"));
548
+    lcd_moveto(7, 6); lcd_put_wchar('L');
549
+    lcd_moveto(6, 7); lcd_put_u8str(ftostr11ns(cooler.flowrate));
546 550
 
547 551
     if (cooler.flowrate)  picBits |= ICON_FAN;
548 552
     else                  picBits &= ~ICON_FAN;
@@ -553,18 +557,18 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
553 557
 #if ENABLED(I2C_AMMETER)
554 558
 
555 559
   FORCE_INLINE void _draw_ammeter_status() {
556
-    lcd.setCursor(10, 5); lcd_put_u8str(F("ILAZ"));
560
+    lcd_moveto(10, 5); lcd_put_u8str(F("ILAZ"));
557 561
     ammeter.read();
558
-    lcd.setCursor(11, 6);
562
+    lcd_moveto(11, 6);
559 563
     if (ammeter.current <= 0.999f)
560 564
     {
561 565
       lcd_put_u8str("mA");
562
-      lcd.setCursor(10, 7);
566
+      lcd_moveto(10, 7);
563 567
       lcd_put_wchar(' '); lcd_put_u8str(ui16tostr3rj(uint16_t(ammeter.current * 1000 + 0.5f)));
564 568
     }
565 569
     else {
566 570
       lcd_put_u8str(" A");
567
-      lcd.setCursor(10, 7);
571
+      lcd_moveto(10, 7);
568 572
       lcd_put_u8str(ftostr12ns(ammeter.current));
569 573
     }
570 574
 
@@ -577,16 +581,16 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
577 581
 #if HAS_CUTTER
578 582
 
579 583
   FORCE_INLINE void _draw_cutter_status() {
580
-    lcd.setCursor(15, 5);  lcd_put_u8str(F("CUTT"));
584
+    lcd_moveto(15, 5);  lcd_put_u8str(F("CUTT"));
581 585
     #if CUTTER_UNIT_IS(RPM)
582
-      lcd.setCursor(16, 6);  lcd_put_u8str(F("RPM"));
583
-      lcd.setCursor(15, 7);  lcd_put_u8str(ftostr31ns(float(cutter.unitPower) / 1000));
586
+      lcd_moveto(16, 6);  lcd_put_u8str(F("RPM"));
587
+      lcd_moveto(15, 7);  lcd_put_u8str(ftostr31ns(float(cutter.unitPower) / 1000));
584 588
       lcd_put_wchar('K');
585 589
     #elif CUTTER_UNIT_IS(PERCENT)
586
-      lcd.setCursor(17, 6);  lcd_put_wchar('%');
587
-      lcd.setCursor(18, 7);  lcd_put_u8str(cutter_power2str(cutter.unitPower));
590
+      lcd_moveto(17, 6);  lcd_put_wchar('%');
591
+      lcd_moveto(18, 7);  lcd_put_u8str(cutter_power2str(cutter.unitPower));
588 592
     #else
589
-      lcd.setCursor(17, 7);  lcd_put_u8str(cutter_power2str(cutter.unitPower));
593
+      lcd_moveto(17, 7);  lcd_put_u8str(cutter_power2str(cutter.unitPower));
590 594
     #endif
591 595
 
592 596
     if (cutter.unitPower) picBits |= ICON_HOT;
@@ -622,10 +626,10 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
622 626
       lcd.write('%'); lcd.write(percent);
623 627
     }
624 628
     else { // For progress bar test
625
-      lcd.setCursor(LCD_WIDTH / 2 - 2, MIDDLE_Y);
626
-      lcd.print(i16tostr3rj(percent));  lcd.write('%');
629
+      lcd_moveto(LCD_WIDTH / 2 - 2, MIDDLE_Y);
630
+      lcd.print(i16tostr3rj(percent)); lcd.write('%');
627 631
       lcd.print_line();
628
-      lcd.setCursor(0, MIDDLE_Y + 1);
632
+      lcd_moveto(0, MIDDLE_Y + 1);
629 633
       lcd.write('%'); lcd.write(percent);
630 634
       lcd.print_line();
631 635
     }
@@ -635,7 +639,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
635 639
 
636 640
 void MarlinUI::draw_status_message(const bool blink) {
637 641
   if (!PanelDetected) return;
638
-  lcd.setCursor(0, 3);
642
+  lcd_moveto(0, 3);
639 643
   #if BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT)
640 644
 
641 645
     // Alternate Status message and Filament display
@@ -784,7 +788,7 @@ void MarlinUI::draw_status_screen() {
784 788
   // Line 1 - XYZ coordinates
785 789
   //
786 790
 
787
-  lcd.setCursor(0, 0);
791
+  lcd_moveto(0, 0);
788 792
   const xyz_pos_t lpos = current_position.asLogical();
789 793
   _draw_axis_value(X_AXIS, ftostr4sign(lpos.x), blink); lcd.write(' ');
790 794
   _draw_axis_value(Y_AXIS, ftostr4sign(lpos.y), blink); lcd.write(' ');
@@ -798,11 +802,11 @@ void MarlinUI::draw_status_screen() {
798 802
   // Line 2 - feedrate, , time
799 803
   //
800 804
 
801
-  lcd.setCursor(0, 1);
805
+  lcd_moveto(0, 1);
802 806
   lcd_put_u8str(F("FR")); lcd.print(i16tostr3rj(feedrate_percentage)); lcd.write('%');
803 807
 
804 808
   #if BOTH(SDSUPPORT, HAS_PRINT_PROGRESS)
805
-    lcd.setCursor(LCD_WIDTH / 2 - 3, 1);
809
+    lcd_moveto(LCD_WIDTH / 2 - 3, 1);
806 810
     _draw_print_progress();
807 811
   #endif
808 812
 
@@ -810,14 +814,14 @@ void MarlinUI::draw_status_screen() {
810 814
   duration_t elapsed = print_job_timer.duration();
811 815
   uint8_t len = elapsed.toDigital(buffer);
812 816
 
813
-  lcd.setCursor((LCD_WIDTH - 1) - len, 1);
817
+  lcd_moveto((LCD_WIDTH - 1) - len, 1);
814 818
   lcd.write(LCD_STR_CLOCK[0]); lcd.print(buffer);
815 819
 
816 820
   //
817 821
   // Line 3 - progressbar
818 822
   //
819 823
 
820
-  lcd.setCursor(0, 2);
824
+  lcd_moveto(0, 2);
821 825
   #if ENABLED(LCD_PROGRESS_BAR)
822 826
     draw_progress_bar(_get_progress());
823 827
   #else
@@ -836,7 +840,7 @@ void MarlinUI::draw_status_screen() {
836 840
 
837 841
   #if HOTENDS <= 1 || (HOTENDS <= 2 && !HAS_HEATED_BED)
838 842
     #if DUAL_MIXING_EXTRUDER
839
-      lcd.setCursor(0, 4);
843
+      lcd_moveto(0, 4);
840 844
       // Two-component mix / gradient instead of XY
841 845
       char mixer_messages[12];
842 846
       const char *mix_label;
@@ -892,9 +896,9 @@ void MarlinUI::draw_status_screen() {
892 896
       #else
893 897
         #define FANX 17
894 898
       #endif
895
-      lcd.setCursor(FANX, 5); lcd_put_u8str(F("FAN"));
896
-      lcd.setCursor(FANX + 1, 6); lcd.write('%');
897
-      lcd.setCursor(FANX, 7);
899
+      lcd_moveto(FANX, 5); lcd_put_u8str(F("FAN"));
900
+      lcd_moveto(FANX + 1, 6); lcd.write('%');
901
+      lcd_moveto(FANX, 7);
898 902
       lcd.print(i16tostr3rj(per));
899 903
 
900 904
       if (TERN0(HAS_FAN0, thermalManager.fan_speed[0]) || TERN0(HAS_FAN1, thermalManager.fan_speed[1]) || TERN0(HAS_FAN2, thermalManager.fan_speed[2]))
@@ -927,7 +931,7 @@ void MarlinUI::draw_status_screen() {
927 931
 
928 932
     void MarlinUI::draw_hotend_status(const uint8_t row, const uint8_t extruder) {
929 933
       if (!PanelDetected) return;
930
-      lcd.setCursor((LCD_WIDTH - 14) / 2, row + 1);
934
+      lcd_moveto((LCD_WIDTH - 14) / 2, row + 1);
931 935
       lcd.write(LCD_STR_THERMOMETER[0]); lcd_put_u8str(F(" E")); lcd.write('1' + extruder); lcd.write(' ');
932 936
       lcd.print(i16tostr3rj(thermalManager.wholeDegHotend(extruder))); lcd.write(LCD_STR_DEGREE[0]); lcd.write('/');
933 937
       lcd.print(i16tostr3rj(thermalManager.degTargetHotend(extruder))); lcd.write(LCD_STR_DEGREE[0]);
@@ -940,12 +944,12 @@ void MarlinUI::draw_status_screen() {
940 944
   void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char * const valstr/*=nullptr*/) {
941 945
     if (!PanelDetected) return;
942 946
     uint8_t n = LCD_WIDTH;
943
-    lcd.setCursor(0, row);
947
+    lcd_moveto(0, row);
944 948
     if ((style & SS_CENTER) && !valstr) {
945 949
       int8_t pad = (LCD_WIDTH - utf8_strlen(fstr)) / 2;
946 950
       while (--pad >= 0) { lcd.write(' '); n--; }
947 951
     }
948
-    n = lcd_put_u8str_ind(fstr, itemIndex, itemString, n);
952
+    n = lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, n);
949 953
     if (valstr) n -= lcd_put_u8str_max(valstr, n);
950 954
     for (; n; --n) lcd.write(' ');
951 955
     lcd.print_line();
@@ -954,25 +958,25 @@ void MarlinUI::draw_status_screen() {
954 958
   // Draw a generic menu item with pre_char (if selected) and post_char
955 959
   void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char pre_char, const char post_char) {
956 960
     if (!PanelDetected) return;
957
-    lcd.setCursor(0, row);
961
+    lcd_moveto(0, row);
958 962
     lcd.write(sel ? pre_char : ' ');
959
-    uint8_t n = lcd_put_u8str_ind(fstr, itemIndex, itemString, LCD_WIDTH - 2);
963
+    uint8_t n = lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, LCD_WIDTH - 2);
960 964
     for (; n; --n) lcd.write(' ');
961 965
     lcd.write(post_char);
962 966
     lcd.print_line();
963 967
   }
964 968
 
965 969
   // Draw a menu item with a (potentially) editable value
966
-  void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const data, const bool pgm) {
970
+  void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const inStr, const bool pgm) {
967 971
     if (!PanelDetected) return;
968
-    const uint8_t vlen = data ? (pgm ? utf8_strlen_P(data) : utf8_strlen(data)) : 0;
969
-    lcd.setCursor(0, row);
972
+    const uint8_t vlen = inStr ? (pgm ? utf8_strlen_P(inStr) : utf8_strlen(inStr)) : 0;
973
+    lcd_moveto(0, row);
970 974
     lcd.write(sel ? LCD_STR_ARROW_RIGHT[0] : ' ');
971
-    uint8_t n = lcd_put_u8str_ind(fstr, itemIndex, itemString, LCD_WIDTH - 2 - vlen);
975
+    uint8_t n = lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, LCD_WIDTH - 2 - vlen);
972 976
     if (vlen) {
973 977
       lcd.write(':');
974 978
       for (; n; --n) lcd.write(' ');
975
-      if (pgm) lcd_put_u8str_P(data); else lcd_put_u8str(data);
979
+      if (pgm) lcd_put_u8str_P(inStr); else lcd_put_u8str(inStr);
976 980
     }
977 981
     lcd.print_line();
978 982
   }
@@ -983,12 +987,12 @@ void MarlinUI::draw_status_screen() {
983 987
     if (!PanelDetected) return;
984 988
     ui.encoder_direction_normal();
985 989
     const uint8_t y = TERN0(AUTO_BED_LEVELING_UBL, ui.external_control) ? LCD_HEIGHT - 1 : MIDDLE_Y;
986
-    lcd.setCursor(0, y);
990
+    lcd_moveto(0, y);
987 991
     lcd.write(COLOR_EDIT);
988 992
     lcd_put_u8str(fstr);
989 993
     if (value) {
990 994
       lcd.write(':');
991
-      lcd.setCursor((LCD_WIDTH - 1) - (utf8_strlen(value) + 1), y); // Right-justified, padded by spaces
995
+      lcd_moveto((LCD_WIDTH - 1) - (utf8_strlen(value) + 1), y); // Right-justified, padded by spaces
992 996
       lcd.write(' ');                                               // Overwrite char if value gets shorter
993 997
       lcd.print(value);
994 998
       lcd.write(' ');
@@ -1002,11 +1006,11 @@ void MarlinUI::draw_status_screen() {
1002 1006
     ui.draw_select_screen_prompt(pref, string, suff);
1003 1007
     lcd.write(COLOR_EDIT);
1004 1008
     if (no) {
1005
-      lcd.setCursor(0, MIDDLE_Y);
1009
+      lcd_moveto(0, MIDDLE_Y);
1006 1010
       lcd.write(yesno ? ' ' : '['); lcd_put_u8str(no); lcd.write(yesno ? ' ' : ']');
1007 1011
     }
1008 1012
     if (yes) {
1009
-      lcd.setCursor(LCD_WIDTH - utf8_strlen(yes) - 3, MIDDLE_Y);
1013
+      lcd_moveto(LCD_WIDTH - utf8_strlen(yes) - 3, MIDDLE_Y);
1010 1014
       lcd.write(yesno ? '[' : ' '); lcd_put_u8str(yes); lcd.write(yesno ? ']' : ' ');
1011 1015
     }
1012 1016
     lcd.print_line();
@@ -1016,7 +1020,7 @@ void MarlinUI::draw_status_screen() {
1016 1020
 
1017 1021
     void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) {
1018 1022
       if (!PanelDetected) return;
1019
-      lcd.setCursor(0, row);
1023
+      lcd_moveto(0, row);
1020 1024
       lcd.write(sel ? LCD_STR_ARROW_RIGHT[0] : ' ');
1021 1025
       constexpr uint8_t maxlen = LCD_WIDTH - 2;
1022 1026
       uint8_t n = maxlen - lcd_put_u8str_max(ui.scrolled_filename(theCard, maxlen, row, sel), maxlen);
@@ -1055,23 +1059,23 @@ void MarlinUI::draw_status_screen() {
1055 1059
       lcd.clear_buffer();
1056 1060
 
1057 1061
       //print only top left corner. All frame with grid points will be printed by panel
1058
-      lcd.setCursor(0, 0);
1062
+      lcd_moveto(0, 0);
1059 1063
       *fb++ = TLC;   //top left corner - marker for plot parameters
1060 1064
       *fb = (GRID_MAX_POINTS_X << 4) + GRID_MAX_POINTS_Y; //set mesh size
1061 1065
 
1062 1066
       // Print plot position
1063
-      lcd.setCursor(_LCD_W_POS, 0);
1064
-      *fb++ = '(';  lcd.print(i16tostr3left(x_plot));
1065
-      *fb++ = ',';  lcd.print(i16tostr3left(y_plot)); *fb = ')';
1067
+      lcd_moveto(_LCD_W_POS, 0);
1068
+      *fb++ = '('; lcd.print(i16tostr3left(x_plot));
1069
+      *fb++ = ','; lcd.print(i16tostr3left(y_plot)); *fb = ')';
1066 1070
 
1067 1071
       // Show all values
1068
-      lcd.setCursor(_LCD_W_POS, 1); lcd_put_u8str(F("X:"));
1072
+      lcd_moveto(_LCD_W_POS, 1); lcd_put_u8str(F("X:"));
1069 1073
       lcd.print(ftostr52(LOGICAL_X_POSITION(pgm_read_float(&bedlevel._mesh_index_to_xpos[x_plot]))));
1070
-      lcd.setCursor(_LCD_W_POS, 2); lcd_put_u8str(F("Y:"));
1074
+      lcd_moveto(_LCD_W_POS, 2); lcd_put_u8str(F("Y:"));
1071 1075
       lcd.print(ftostr52(LOGICAL_Y_POSITION(pgm_read_float(&bedlevel._mesh_index_to_ypos[y_plot]))));
1072 1076
 
1073 1077
       // Show the location value
1074
-      lcd.setCursor(_LCD_W_POS, 3); lcd_put_u8str(F("Z:"));
1078
+      lcd_moveto(_LCD_W_POS, 3); lcd_put_u8str(F("Z:"));
1075 1079
 
1076 1080
       if (!isnan(bedlevel.z_values[x_plot][y_plot]))
1077 1081
         lcd.print(ftostr43sign(bedlevel.z_values[x_plot][y_plot]));

+ 3
- 3
Marlin/src/lcd/dogm/lcdprint_u8g.cpp Ver fichero

@@ -28,7 +28,7 @@ void lcd_put_int(const int i) { u8g.print(i); }
28 28
 
29 29
 // return < 0 on error
30 30
 // return the advanced pixels
31
-int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
31
+int lcd_put_wchar_max(const wchar_t c, const pixel_len_t max_length) {
32 32
   if (c < 256) {
33 33
     u8g.print((char)c);
34 34
     return u8g_GetFontBBXWidth(u8g.getU8g());
@@ -39,14 +39,14 @@ int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
39 39
   return ret;
40 40
 }
41 41
 
42
-int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length) {
42
+int lcd_put_u8str_max(const char * utf8_str, const pixel_len_t max_length) {
43 43
   u8g_uint_t x = u8g.getPrintCol(), y = u8g.getPrintRow(),
44 44
            ret = uxg_DrawUtf8Str(u8g.getU8g(), x, y, utf8_str, max_length);
45 45
   u8g.setPrintPos(x + ret, y);
46 46
   return ret;
47 47
 }
48 48
 
49
-int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
49
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, const pixel_len_t max_length) {
50 50
   u8g_uint_t x = u8g.getPrintCol(), y = u8g.getPrintRow(),
51 51
            ret = uxg_DrawUtf8StrP(u8g.getU8g(), x, y, utf8_pstr, max_length);
52 52
   u8g.setPrintPos(x + ret, y);

+ 19
- 19
Marlin/src/lcd/dogm/marlinui_DOGM.cpp Ver fichero

@@ -330,13 +330,13 @@ void MarlinUI::update_language_font() {
330 330
 // The kill screen is displayed for unrecoverable conditions
331 331
 void MarlinUI::draw_kill_screen() {
332 332
   TERN_(LIGHTWEIGHT_UI, ST7920_Lite_Status_Screen::clear_text_buffer());
333
-  const u8g_uint_t h4 = u8g.getHeight() / 4;
333
+  const u8g_uint_t x = 0, h4 = u8g.getHeight() / 4;
334 334
   u8g.firstPage();
335 335
   do {
336 336
     set_font(FONT_MENU);
337
-    lcd_put_u8str(0, h4 * 1, status_message);
338
-    lcd_put_u8str(0, h4 * 2, GET_TEXT_F(MSG_HALTED));
339
-    lcd_put_u8str(0, h4 * 3, GET_TEXT_F(MSG_PLEASE_RESET));
337
+    lcd_put_u8str(x, h4 * 1, status_message);
338
+    lcd_put_u8str(x, h4 * 2, GET_TEXT_F(MSG_HALTED));
339
+    lcd_put_u8str(x, h4 * 3, GET_TEXT_F(MSG_PLEASE_RESET));
340 340
   } while (u8g.nextPage());
341 341
 }
342 342
 
@@ -412,28 +412,28 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
412 412
   }
413 413
 
414 414
   // Draw a static line of text in the same idiom as a menu item
415
-  void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) {
415
+  void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) {
416 416
 
417 417
     if (mark_as_selected(row, style & SS_INVERT)) {
418 418
       pixel_len_t n = LCD_PIXEL_WIDTH; // pixel width of string allowed
419 419
 
420
-      const int plen = fstr ? calculateWidth(FTOP(fstr)) : 0,
420
+      const int plen = ftpl ? calculateWidth(ftpl) : 0,
421 421
                 vlen = vstr ? utf8_strlen(vstr) : 0;
422 422
       if (style & SS_CENTER) {
423 423
         int pad = (LCD_PIXEL_WIDTH - plen - vlen * MENU_FONT_WIDTH) / MENU_FONT_WIDTH / 2;
424 424
         while (--pad >= 0) n -= lcd_put_wchar(' ');
425 425
       }
426 426
 
427
-      if (plen) n = lcd_put_u8str_ind(fstr, itemIndex, itemString, n / (MENU_FONT_WIDTH)) * (MENU_FONT_WIDTH);
427
+      if (plen) n = lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, n / (MENU_FONT_WIDTH)) * (MENU_FONT_WIDTH);
428 428
       if (vlen) n -= lcd_put_u8str_max(vstr, n);
429 429
       while (n > MENU_FONT_WIDTH) n -= lcd_put_wchar(' ');
430 430
     }
431 431
   }
432 432
 
433 433
   // Draw a generic menu item
434
-  void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char, const char post_char) {
434
+  void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char, const char post_char) {
435 435
     if (mark_as_selected(row, sel)) {
436
-      pixel_len_t n = lcd_put_u8str_ind(fstr, itemIndex, itemString, LCD_WIDTH - 1) * (MENU_FONT_WIDTH);
436
+      pixel_len_t n = lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, LCD_WIDTH - 1) * (MENU_FONT_WIDTH);
437 437
       while (n > MENU_FONT_WIDTH) n -= lcd_put_wchar(' ');
438 438
       lcd_put_wchar(LCD_PIXEL_WIDTH - (MENU_FONT_WIDTH), row_y2, post_char);
439 439
       lcd_put_wchar(' ');
@@ -441,27 +441,27 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
441 441
   }
442 442
 
443 443
   // Draw a menu item with an editable value
444
-  void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const inStr, const bool pgm) {
444
+  void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
445 445
     if (mark_as_selected(row, sel)) {
446
-      const uint8_t vallen = (pgm ? utf8_strlen_P(inStr) : utf8_strlen((char*)inStr)),
447
-                    pixelwidth = (pgm ? uxg_GetUtf8StrPixelWidthP(u8g.getU8g(), inStr) : uxg_GetUtf8StrPixelWidth(u8g.getU8g(), (char*)inStr));
446
+      const uint8_t vallen = (pgm ? utf8_strlen_P(inStr) : utf8_strlen(inStr)),
447
+                    pixelwidth = (pgm ? uxg_GetUtf8StrPixelWidthP(u8g.getU8g(), inStr) : uxg_GetUtf8StrPixelWidth(u8g.getU8g(), inStr));
448 448
       const u8g_uint_t prop = USE_WIDE_GLYPH ? 2 : 1;
449 449
 
450
-      pixel_len_t n = lcd_put_u8str_ind(fstr, itemIndex, itemString, LCD_WIDTH - 2 - vallen * prop) * (MENU_FONT_WIDTH);
450
+      pixel_len_t n = lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, LCD_WIDTH - 2 - vallen * prop) * (MENU_FONT_WIDTH);
451 451
       if (vallen) {
452 452
         lcd_put_wchar(':');
453 453
         while (n > MENU_FONT_WIDTH) n -= lcd_put_wchar(' ');
454 454
         lcd_moveto(LCD_PIXEL_WIDTH - _MAX((MENU_FONT_WIDTH) * vallen, pixelwidth + 2), row_y2);
455
-        if (pgm) lcd_put_u8str_P(inStr); else lcd_put_u8str((char*)inStr);
455
+        if (pgm) lcd_put_u8str_P(inStr); else lcd_put_u8str(inStr);
456 456
       }
457 457
     }
458 458
   }
459 459
 
460
-  void MenuEditItemBase::draw_edit_screen(FSTR_P const fstr, const char * const value/*=nullptr*/) {
460
+  void MenuEditItemBase::draw_edit_screen(FSTR_P const ftpl, const char * const value/*=nullptr*/) {
461 461
     ui.encoder_direction_normal();
462 462
 
463 463
     const u8g_uint_t prop = USE_WIDE_GLYPH ? 2 : 1;
464
-    const u8g_uint_t labellen = utf8_strlen(fstr), vallen = utf8_strlen(value);
464
+    const u8g_uint_t labellen = utf8_strlen(ftpl), vallen = utf8_strlen(value);
465 465
     bool extra_row = labellen * prop > LCD_WIDTH - 2 - vallen * prop;
466 466
 
467 467
     #if ENABLED(USE_BIG_EDIT_FONT)
@@ -490,7 +490,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
490 490
 
491 491
     // Assume the label is alpha-numeric (with a descender)
492 492
     bool onpage = PAGE_CONTAINS(baseline - (EDIT_FONT_ASCENT - 1), baseline + EDIT_FONT_DESCENT);
493
-    if (onpage) lcd_put_u8str_ind(0, baseline, fstr, itemIndex, itemString);
493
+    if (onpage) lcd_put_u8str(0, baseline, ftpl, itemIndex, itemStringC, itemStringF);
494 494
 
495 495
     // If a value is included, print a colon, then print the value right-justified
496 496
     if (value) {
@@ -522,8 +522,8 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
522 522
     if (inv) u8g.setColorIndex(1);
523 523
   }
524 524
 
525
-  void MenuItem_confirm::draw_select_screen(FSTR_P const yes, FSTR_P const no, const bool yesno, FSTR_P const pref, const char * const string/*=nullptr*/, FSTR_P const suff/*=nullptr*/) {
526
-    ui.draw_select_screen_prompt(pref, string, suff);
525
+  void MenuItem_confirm::draw_select_screen(FSTR_P const yes, FSTR_P const no, const bool yesno, FSTR_P const fpre, const char * const string/*=nullptr*/, FSTR_P const suff/*=nullptr*/) {
526
+    ui.draw_select_screen_prompt(fpre, string, suff);
527 527
     if (no)  draw_boxed_string(1, LCD_HEIGHT - 1, no, !yesno);
528 528
     if (yes) draw_boxed_string(LCD_WIDTH - (utf8_strlen(yes) * (USE_WIDE_GLYPH ? 2 : 1) + 1), LCD_HEIGHT - 1, yes, yesno);
529 529
   }

+ 1
- 1
Marlin/src/lcd/dogm/u8g_fontutf8.cpp Ver fichero

@@ -104,7 +104,7 @@ static void fontgroup_drawwchar(font_group_t *group, const font_t *fnt_default,
104 104
  * Get the screen pixel width of a ROM UTF-8 string
105 105
  */
106 106
 static void fontgroup_drawstring(font_group_t *group, const font_t *fnt_default, const char *utf8_msg, read_byte_cb_t cb_read_byte, void * userdata, fontgroup_cb_draw_t cb_draw_ram) {
107
-  uint8_t *p = (uint8_t*)utf8_msg;
107
+  const uint8_t *p = (uint8_t*)utf8_msg;
108 108
   for (;;) {
109 109
     wchar_t val = 0;
110 110
     p = get_utf8_value_cb(p, cb_read_byte, &val);

+ 3
- 3
Marlin/src/lcd/dogm/u8g_fontutf8.h Ver fichero

@@ -26,10 +26,10 @@ typedef struct _uxg_fontinfo_t {
26 26
 
27 27
 int uxg_SetUtf8Fonts(const uxg_fontinfo_t * fntinfo, int number); // fntinfo is type of PROGMEM
28 28
 
29
-unsigned int uxg_DrawWchar(u8g_t *pu8g, unsigned int x, unsigned int y, wchar_t ch, pixel_len_t max_length);
29
+unsigned int uxg_DrawWchar(u8g_t *pu8g, unsigned int x, unsigned int y, wchar_t ch, const pixel_len_t max_length);
30 30
 
31
-unsigned int uxg_DrawUtf8Str(u8g_t *pu8g, unsigned int x, unsigned int y, const char *utf8_msg, pixel_len_t max_length);
32
-unsigned int uxg_DrawUtf8StrP(u8g_t *pu8g, unsigned int x, unsigned int y, PGM_P utf8_msg, pixel_len_t max_length);
31
+unsigned int uxg_DrawUtf8Str(u8g_t *pu8g, unsigned int x, unsigned int y, const char *utf8_msg, const pixel_len_t max_length);
32
+unsigned int uxg_DrawUtf8StrP(u8g_t *pu8g, unsigned int x, unsigned int y, PGM_P utf8_msg, const pixel_len_t max_length);
33 33
 
34 34
 int uxg_GetUtf8StrPixelWidth(u8g_t *pu8g, const char *utf8_msg);
35 35
 int uxg_GetUtf8StrPixelWidthP(u8g_t *pu8g, PGM_P utf8_msg);

+ 5
- 5
Marlin/src/lcd/e3v2/jyersui/dwin.cpp Ver fichero

@@ -4280,14 +4280,14 @@ void CrealityDWINClass::Print_Screen_Control() {
4280 4280
               card.startOrResumeFilePrinting();
4281 4281
               TERN_(POWER_LOSS_RECOVERY, recovery.prepare());
4282 4282
             #else
4283
-              char cmnd[20];
4283
+              char cmd[20];
4284 4284
               #if HAS_HEATED_BED
4285
-                cmnd[sprintf_P(cmnd, PSTR("M140 S%i"), pausebed)] = '\0';
4286
-                gcode.process_subcommands_now(cmnd);
4285
+                sprintf_P(cmd, PSTR("M140 S%i"), pausebed);
4286
+                gcode.process_subcommands_now(cmd);
4287 4287
               #endif
4288 4288
               #if HAS_EXTRUDERS
4289
-                cmnd[sprintf_P(cmnd, PSTR("M109 S%i"), pausetemp)] = '\0';
4290
-                gcode.process_subcommands_now(cmnd);
4289
+                sprintf_P(cmd, PSTR("M109 S%i"), pausetemp);
4290
+                gcode.process_subcommands_now(cmd);
4291 4291
               #endif
4292 4292
               TERN_(HAS_FAN, thermalManager.fan_speed[0] = pausefan);
4293 4293
               planner.synchronize();

+ 31
- 29
Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp Ver fichero

@@ -27,35 +27,35 @@
27 27
 #include "dwin_string.h"
28 28
 //#include "../../fontutils.h"
29 29
 
30
-uint8_t DWIN_String::data[];
30
+char DWIN_String::data[];
31 31
 uint16_t DWIN_String::span;
32
-uint8_t DWIN_String::len;
32
+uint8_t DWIN_String::length;
33 33
 
34 34
 void DWIN_String::set() {
35 35
   //*data = 0x00;
36 36
   memset(data, 0x00, sizeof(data));
37 37
   span = 0;
38
-  len = 0;
38
+  length = 0;
39 39
 }
40 40
 
41
-uint8_t read_byte(uint8_t *byte) { return *byte; }
41
+uint8_t read_byte(const uint8_t *byte) { return *byte; }
42 42
 
43 43
 /**
44 44
  * Add a string, applying substitutions for the following characters:
45 45
  *
46
- *   $ displays the clipped C-string given by the inStr argument
46
+ *   $ displays the clipped string given by fstr or cstr
47 47
  *   = displays  '0'....'10' for indexes 0 - 10
48 48
  *   ~ displays  '1'....'11' for indexes 0 - 10
49 49
  *   * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
50 50
  *   @ displays an axis name such as XYZUVW, or E for an extruder
51 51
  */
52
-void DWIN_String::add(uint8_t *string, const int8_t index, uint8_t *inStr/*=nullptr*/) {
52
+void DWIN_String::add(const char *tpl, const int8_t index, const char *cstr/*=nullptr*/, FSTR_P const fstr/*=nullptr*/) {
53 53
   wchar_t wchar;
54 54
 
55
-  while (*string) {
56
-    string = get_utf8_value_cb(string, read_byte, &wchar);
55
+  while (*tpl) {
56
+    tpl = get_utf8_value_cb(tpl, read_byte, &wchar);
57 57
     if (wchar > 255) wchar |= 0x0080;
58
-    uint8_t ch = uint8_t(wchar & 0x00FF);
58
+    const uint8_t ch = uint8_t(wchar & 0x00FF);
59 59
 
60 60
     if (ch == '=' || ch == '~' || ch == '*') {
61 61
       if (index >= 0) {
@@ -65,10 +65,12 @@ void DWIN_String::add(uint8_t *string, const int8_t index, uint8_t *inStr/*=null
65 65
         add_character('0' + inum);
66 66
       }
67 67
       else
68
-        add(index == -2 ? GET_TEXT(MSG_CHAMBER) : GET_TEXT(MSG_BED));
68
+        add(index == -2 ? GET_TEXT_F(MSG_CHAMBER) : GET_TEXT_F(MSG_BED));
69 69
     }
70
-    else if (ch == '$' && inStr)
71
-      add(inStr);
70
+    else if (ch == '$' && fstr)
71
+      add(fstr);
72
+    else if (ch == '$' && cstr)
73
+      add(cstr);
72 74
     else if (ch == '@')
73 75
       add_character(AXIS_CHAR(index));
74 76
     else
@@ -77,10 +79,10 @@ void DWIN_String::add(uint8_t *string, const int8_t index, uint8_t *inStr/*=null
77 79
   eol();
78 80
 }
79 81
 
80
-void DWIN_String::add(uint8_t *string, uint8_t max_len) {
82
+void DWIN_String::add(const char *cstr, uint8_t max_len/*=MAX_STRING_LENGTH*/) {
81 83
   wchar_t wchar;
82
-  while (*string && max_len) {
83
-    string = get_utf8_value_cb(string, read_byte, &wchar);
84
+  while (*cstr && max_len) {
85
+    cstr = get_utf8_value_cb(cstr, read_byte, &wchar);
84 86
     /*
85 87
     if (wchar > 255) wchar |= 0x0080;
86 88
     uint8_t ch = uint8_t(wchar & 0x00FF);
@@ -92,7 +94,7 @@ void DWIN_String::add(uint8_t *string, uint8_t max_len) {
92 94
   eol();
93 95
 }
94 96
 
95
-void DWIN_String::add(wchar_t character) {
97
+void DWIN_String::add(const wchar_t character) {
96 98
   int ret;
97 99
   size_t idx = 0;
98 100
   dwin_charmap_t pinval;
@@ -127,18 +129,18 @@ void DWIN_String::add(wchar_t character) {
127 129
   if (str[1]) add_character(str[1]);
128 130
 }
129 131
 
130
-void DWIN_String::add_character(const uint8_t character) {
131
-  if (len < MAX_STRING_LENGTH) {
132
-    data[len] = character;
133
-    len++;
132
+void DWIN_String::add_character(const char character) {
133
+  if (length < MAX_STRING_LENGTH) {
134
+    data[length] = character;
135
+    length++;
134 136
     //span += glyph(character)->DWidth;
135 137
   }
136 138
 }
137 139
 
138
-void DWIN_String::rtrim(const uint8_t character) {
139
-  while (len) {
140
-    if (data[len - 1] == 0x20 || data[len - 1] == character) {
141
-      len--;
140
+void DWIN_String::rtrim(const char character) {
141
+  while (length) {
142
+    if (data[length - 1] == 0x20 || data[length - 1] == character) {
143
+      length--;
142 144
       //span -= glyph(data[length])->DWidth;
143 145
       eol();
144 146
     }
@@ -147,18 +149,18 @@ void DWIN_String::rtrim(const uint8_t character) {
147 149
   }
148 150
 }
149 151
 
150
-void DWIN_String::ltrim(const uint8_t character) {
152
+void DWIN_String::ltrim(const char character) {
151 153
   uint16_t i, j;
152
-  for (i = 0; (i < len) && (data[i] == 0x20 || data[i] == character); i++) {
154
+  for (i = 0; (i < length) && (data[i] == 0x20 || data[i] == character); i++) {
153 155
     //span -= glyph(data[i])->DWidth;
154 156
   }
155 157
   if (i == 0) return;
156
-  for (j = 0; i < len; data[j++] = data[i++]);
157
-  len = j;
158
+  for (j = 0; i < length; data[j++] = data[i++]);
159
+  length = j;
158 160
   eol();
159 161
 }
160 162
 
161
-void DWIN_String::trim(const uint8_t character) {
163
+void DWIN_String::trim(const char character) {
162 164
   rtrim(character);
163 165
   ltrim(character);
164 166
 }

+ 66
- 27
Marlin/src/lcd/e3v2/marlinui/dwin_string.h Ver fichero

@@ -21,6 +21,8 @@
21 21
  */
22 22
 #pragma once
23 23
 
24
+// TODO: Make AVR-compatible with separate ROM / RAM string methods
25
+
24 26
 #include "../../fontutils.h"
25 27
 #include "../../marlinui.h"
26 28
 
@@ -41,14 +43,14 @@ class DWIN_String {
41 43
     //static glyph_t *glyphs[256];
42 44
     //static font_t *font_header;
43 45
 
44
-    static uint8_t data[MAX_STRING_LENGTH + 1];
46
+    static char data[MAX_STRING_LENGTH + 1];
45 47
     static uint16_t span;   // in pixels
46
-    static uint8_t len;  // in characters
47 48
 
48
-    static void add_character(const uint8_t character);
49
-    static void eol() { data[len] = 0x00; }
49
+    static void add_character(const char character);
50
+    static void eol() { data[length] = 0x00; }
50 51
 
51 52
   public:
53
+    static uint8_t length;  // in characters
52 54
     //static void set_font(const uint8_t *font);
53 55
     //static void add_glyphs(const uint8_t *font);
54 56
 
@@ -57,34 +59,71 @@ class DWIN_String {
57 59
     //static glyph_t *glyph(uint8_t character) { return glyphs[character] ?: glyphs[0x3F]; }  /* Use '?' for unknown glyphs */
58 60
     //static glyph_t *glyph(uint8_t *character) { return glyph(*character); }
59 61
 
62
+    /**
63
+     * @brief Set the string empty
64
+     */
60 65
     static void set();
61
-    //static void add(uint8_t character) { add_character(character); eol(); }
62
-    static void add(wchar_t character);
63
-    static void add(uint8_t *string, uint8_t max_len=MAX_STRING_LENGTH);
64
-    static void add(uint8_t *string, const int8_t index, uint8_t *inStr=nullptr);
65
-    static void set(uint8_t *string)   { set(); add(string); }
66
-    static void set(wchar_t character) { set(); add(character); }
67
-    static void set(uint8_t *string, int8_t index, const char *inStr=nullptr) { set(); add(string, index, (uint8_t *)inStr); }
68
-    static void set(const char *string) { set((uint8_t *)string); }
69
-    static void set(const char *string, int8_t index, const char *inStr=nullptr) { set((uint8_t *)string, index, inStr); }
70
-    static void add(const char *string) { add((uint8_t *)string); }
71 66
 
72
-    static void add(FSTR_P const string, uint8_t max_len=MAX_STRING_LENGTH) { add((uint8_t *)FTOP(string), max_len); }
73
-    static void add(FSTR_P const string, int8_t index, uint8_t *inStr=nullptr) { add((uint8_t *)FTOP(string), index, inStr); }
74
-    static void set(FSTR_P const string) { set((uint8_t *)FTOP(string)); }
75
-    static void set(FSTR_P const string, int8_t index, const char *inStr=nullptr) { set((uint8_t *)FTOP(string), index, inStr); }
76
-    static void add(FSTR_P const string) { add((uint8_t *)FTOP(string)); }
67
+    //static void add(const char character) { add_character(character); eol(); }
77 68
 
78
-    static void trim(const uint8_t character=0x20);
79
-    static void rtrim(const uint8_t character=0x20);
80
-    static void ltrim(const uint8_t character=0x20);
81
-
82
-    static void truncate(uint8_t maxlen) { if (len > maxlen) { len = maxlen; eol(); } }
69
+    /**
70
+     * @brief Append a UTF-8 character
71
+     *
72
+     * @param character The UTF-8 character
73
+     */
74
+    static void add(wchar_t character);
75
+    static void set(wchar_t character) { set(); add(character); }
83 76
 
84
-    static uint8_t length() { return len; }
77
+    /**
78
+     * @brief Append / Set C-string
79
+     *
80
+     * @param cstr The string
81
+     * @param max_len Character limit
82
+     */
83
+    static void add(const char *cstr, uint8_t max_len=MAX_STRING_LENGTH);
84
+    static void set(const char *cstr) { set(); add(cstr); }
85
+
86
+    /**
87
+     * @brief Append / Set F-string
88
+     *
89
+     * @param fstr The string
90
+     * @param max_len Character limit
91
+     */
92
+    static void add(FSTR_P const fstr, uint8_t max_len=MAX_STRING_LENGTH) { add(FTOP(fstr), max_len); }
93
+    static void set(FSTR_P const fstr) { set(FTOP(fstr)); }
94
+
95
+    /**
96
+     * @brief Append / Set C-string with optional substitution
97
+     *
98
+     * @param tpl A string with optional substitution
99
+     * @param index An index
100
+     * @param cstr An SRAM C-string to use for $ substitution
101
+     * @param fstr A ROM F-string to use for $ substitution
102
+     */
103
+    static void add(const char *tpl, const int8_t index, const char *cstr=nullptr, FSTR_P const fstr=nullptr);
104
+    static void set(const char *tpl, const int8_t index, const char *cstr=nullptr, FSTR_P const fstr=nullptr) { set(); add(tpl, index, cstr, fstr); }
105
+
106
+    /**
107
+     * @brief Append / Set F-string with optional substitution
108
+     *
109
+     * @param ftpl A ROM F-string with optional substitution
110
+     * @param index An index
111
+     * @param cstr An SRAM C-string to use for $ substitution
112
+     * @param fstr A ROM F-string to use for $ substitution
113
+     */
114
+    static void add(FSTR_P const ftpl, const int8_t index, const char *cstr=nullptr, FSTR_P const fstr=nullptr) { add(FTOP(ftpl), index, cstr, fstr); }
115
+    static void set(FSTR_P const ftpl, const int8_t index, const char *cstr=nullptr, FSTR_P const fstr=nullptr) { set(); add(ftpl, index, cstr, fstr); }
116
+
117
+    // Common string ops
118
+    static void trim(const char character=' ');
119
+    static void rtrim(const char character=' ');
120
+    static void ltrim(const char character=' ');
121
+    static void truncate(const uint8_t maxlen) { if (length > maxlen) { length = maxlen; eol(); } }
122
+
123
+    // Accessors
124
+    static char *string() { return data; }
85 125
     static uint16_t width() { return span; }
86
-    static uint8_t *string() { return data; }
87
-    static uint16_t center(uint16_t width) { return span > width ? 0 : (width - span) / 2; }
126
+    static uint16_t center(const uint16_t width) { return span > width ? 0 : (width - span) / 2; }
88 127
 };
89 128
 
90 129
 int dwin_charmap_compare(dwin_charmap_t *v1, dwin_charmap_t *v2);

+ 20
- 21
Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp Ver fichero

@@ -56,20 +56,20 @@ void lcd_put_int(const int i) {
56 56
 }
57 57
 
58 58
 int lcd_put_dwin_string() {
59
-  DWIN_Draw_String(dwin_font.solid, dwin_font.index, dwin_font.fg, dwin_font.bg, cursor.x, cursor.y, (char*)dwin_string.string());
60
-  lcd_advance_cursor(dwin_string.length());
61
-  return dwin_string.length();
59
+  DWIN_Draw_String(dwin_font.solid, dwin_font.index, dwin_font.fg, dwin_font.bg, cursor.x, cursor.y, dwin_string.string());
60
+  lcd_advance_cursor(dwin_string.length);
61
+  return dwin_string.length;
62 62
 }
63 63
 
64 64
 // return < 0 on error
65 65
 // return the advanced cols
66
-int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
66
+int lcd_put_wchar_max(const wchar_t c, const pixel_len_t max_length) {
67 67
   dwin_string.set(c);
68 68
   dwin_string.truncate(max_length);
69 69
   // Draw the char(s) at the cursor and advance the cursor
70
-  DWIN_Draw_String(dwin_font.solid, dwin_font.index, dwin_font.fg, dwin_font.bg, cursor.x, cursor.y, (char*)dwin_string.string());
71
-  lcd_advance_cursor(dwin_string.length());
72
-  return dwin_string.length();
70
+  DWIN_Draw_String(dwin_font.solid, dwin_font.index, dwin_font.fg, dwin_font.bg, cursor.x, cursor.y, dwin_string.string());
71
+  lcd_advance_cursor(dwin_string.length);
72
+  return dwin_string.length;
73 73
 }
74 74
 
75 75
 /**
@@ -83,35 +83,34 @@ int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
83 83
  *
84 84
  * Draw a UTF-8 string
85 85
  */
86
-static int lcd_put_u8str_max_cb(const char * utf8_str, uint8_t (*cb_read_byte)(uint8_t * str), pixel_len_t max_length) {
87
-  uint8_t *p = (uint8_t *)utf8_str;
86
+static int lcd_put_u8str_max_cb(const char * utf8_str, read_byte_cb_t cb_read_byte, const pixel_len_t max_length) {
87
+  const uint8_t *p = (uint8_t *)utf8_str;
88 88
   dwin_string.set();
89
-  while (dwin_string.length() < max_length) {
89
+  while (dwin_string.length < max_length) {
90 90
     wchar_t ch = 0;
91 91
     p = get_utf8_value_cb(p, cb_read_byte, &ch);
92 92
     if (!ch) break;
93 93
     dwin_string.add(ch);
94 94
   }
95
-  DWIN_Draw_String(dwin_font.solid, dwin_font.index, dwin_font.fg, dwin_font.bg, cursor.x, cursor.y, (char*)dwin_string.string());
96
-  lcd_advance_cursor(dwin_string.length());
97
-  return dwin_string.length();
95
+  DWIN_Draw_String(dwin_font.solid, dwin_font.index, dwin_font.fg, dwin_font.bg, cursor.x, cursor.y, dwin_string.string());
96
+  lcd_advance_cursor(dwin_string.length);
97
+  return dwin_string.length;
98 98
 }
99 99
 
100
-int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length) {
100
+int lcd_put_u8str_max(const char * utf8_str, const pixel_len_t max_length) {
101 101
   return lcd_put_u8str_max_cb(utf8_str, read_byte_ram, max_length);
102 102
 }
103 103
 
104
-int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
104
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, const pixel_len_t max_length) {
105 105
   return lcd_put_u8str_max_cb(utf8_pstr, read_byte_rom, max_length);
106 106
 }
107 107
 
108
-lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
109
-  dwin_string.set();
110
-  dwin_string.add((uint8_t*)pstr, ind, (uint8_t*)inStr);
108
+lcd_uint_t lcd_put_u8str_P(PGM_P const ptpl, const int8_t ind, const char * const cstr/*=nullptr*/, FSTR_P const fstr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
109
+  dwin_string.set(ptpl, ind, cstr, fstr);
111 110
   dwin_string.truncate(maxlen);
112
-  DWIN_Draw_String(dwin_font.solid, dwin_font.index, dwin_font.fg, dwin_font.bg, cursor.x, cursor.y, (char*)dwin_string.string());
113
-  lcd_advance_cursor(dwin_string.length());
114
-  return dwin_string.length();
111
+  DWIN_Draw_String(dwin_font.solid, dwin_font.index, dwin_font.fg, dwin_font.bg, cursor.x, cursor.y, dwin_string.string());
112
+  lcd_advance_cursor(dwin_string.length);
113
+  return dwin_string.length;
115 114
 }
116 115
 
117 116
 #if ENABLED(DEBUG_LCDPRINT)

+ 18
- 20
Marlin/src/lcd/e3v2/marlinui/ui_common.cpp Ver fichero

@@ -110,7 +110,7 @@ void MarlinUI::clear_lcd() {
110 110
       #define VERSION_Y   84
111 111
     #endif
112 112
 
113
-    DWIN_Draw_String(false, font10x20, Color_Yellow, Color_Bg_Black, INFO_CENTER - (dwin_string.length() * 10) / 2, VERSION_Y, S(dwin_string.string()));
113
+    DWIN_Draw_String(false, font10x20, Color_Yellow, Color_Bg_Black, INFO_CENTER - (dwin_string.length * 10) / 2, VERSION_Y, S(dwin_string.string()));
114 114
     TERN_(SHOW_CUSTOM_BOOTSCREEN, safe_delay(CUSTOM_BOOTSCREEN_TIMEOUT));
115 115
     clear_lcd();
116 116
 
@@ -127,7 +127,7 @@ void MarlinUI::clear_lcd() {
127 127
       DWIN_ICON_Show(BOOT_ICON, ICON_MarlinURL,  INFO_CENTER - 100 / 2, 152);
128 128
       DWIN_ICON_Show(BOOT_ICON, ICON_Copyright,  INFO_CENTER - 126 / 2, 200);
129 129
     #endif
130
-    DWIN_Draw_String(false, font10x20, Color_Yellow, Color_Bg_Black, INFO_CENTER - (dwin_string.length() * 10) / 2, VERSION_Y, S(dwin_string.string()));
130
+    DWIN_Draw_String(false, font10x20, Color_Yellow, Color_Bg_Black, INFO_CENTER - (dwin_string.length * 10) / 2, VERSION_Y, S(dwin_string.string()));
131 131
     DWIN_UpdateLCD();
132 132
   }
133 133
 
@@ -284,7 +284,7 @@ void MarlinUI::draw_status_message(const bool blink) {
284 284
       else
285 285
         dwin_string.add(PSTR("    "));
286 286
 
287
-      lcd_moveto(LCD_WIDTH - dwin_string.length(), row);
287
+      lcd_moveto(LCD_WIDTH - dwin_string.length, row);
288 288
       lcd_put_dwin_string();
289 289
     }
290 290
 
@@ -311,7 +311,7 @@ void MarlinUI::draw_status_message(const bool blink) {
311 311
 
312 312
   // Draw a static line of text in the same idiom as a menu item
313 313
 
314
-  void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) {
314
+  void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) {
315 315
     // Call mark_as_selected to draw a bigger selection box
316 316
     // and draw the text without a background
317 317
     if (mark_as_selected(row, (bool)(style & SS_INVERT), true)) {
@@ -320,15 +320,15 @@ void MarlinUI::draw_status_message(const bool blink) {
320 320
       dwin_font.fg = Color_White;
321 321
 
322 322
       dwin_string.set();
323
-      const int8_t plen = fstr ? utf8_strlen(fstr) : 0,
323
+      const int8_t plen = ftpl ? utf8_strlen(ftpl) : 0,
324 324
                    vlen = vstr ? utf8_strlen(vstr) : 0;
325 325
       if (style & SS_CENTER) {
326 326
         int8_t pad = (LCD_WIDTH - 1 - plen - vlen) / 2;
327 327
         while (--pad) dwin_string.add(' ');
328 328
       }
329 329
 
330
-      if (plen) dwin_string.add((uint8_t*)FTOP(fstr), itemIndex, (uint8_t*)FTOP(itemString));
331
-      if (vlen) dwin_string.add((uint8_t*)vstr);
330
+      if (plen) dwin_string.add(ftpl, itemIndex, itemStringC, itemStringF);
331
+      if (vlen) dwin_string.add(vstr);
332 332
       if (style & SS_CENTER) {
333 333
         int8_t pad = (LCD_WIDTH - 1 - plen - vlen) / 2;
334 334
         while (--pad) dwin_string.add(' ');
@@ -340,15 +340,15 @@ void MarlinUI::draw_status_message(const bool blink) {
340 340
   }
341 341
 
342 342
   // Draw a generic menu item
343
-  void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char, const char post_char) {
343
+  void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char, const char post_char) {
344 344
     if (mark_as_selected(row, sel)) {
345 345
       ui.set_font(DWIN_FONT_MENU);
346 346
       dwin_font.solid = false;
347 347
       dwin_font.fg = Color_White;
348 348
 
349
-      dwin_string.set(fstr, itemIndex, FTOP(itemString));
349
+      dwin_string.set(ftpl, itemIndex, itemStringC, itemStringF);
350 350
 
351
-      pixel_len_t n = LCD_WIDTH - 1 - dwin_string.length();
351
+      pixel_len_t n = LCD_WIDTH - 1 - dwin_string.length;
352 352
       while (--n > 1) dwin_string.add(' ');
353 353
 
354 354
       dwin_string.add(post_char);
@@ -361,7 +361,7 @@ void MarlinUI::draw_status_message(const bool blink) {
361 361
   //
362 362
   // Draw a menu item with an editable value
363 363
   //
364
-  void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const inStr, const bool pgm) {
364
+  void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
365 365
     if (mark_as_selected(row, sel)) {
366 366
       ui.set_font(DWIN_FONT_MENU);
367 367
       dwin_font.solid = false;
@@ -369,7 +369,7 @@ void MarlinUI::draw_status_message(const bool blink) {
369 369
 
370 370
       const uint8_t vallen = (pgm ? utf8_strlen_P(inStr) : utf8_strlen(S(inStr)));
371 371
 
372
-      dwin_string.set(fstr, itemIndex, FTOP(itemString));
372
+      dwin_string.set(ftpl, itemIndex, itemStringC, itemStringF);
373 373
       if (vallen) dwin_string.add(':');
374 374
 
375 375
       lcd_moveto(1, row);
@@ -392,8 +392,7 @@ void MarlinUI::draw_status_message(const bool blink) {
392 392
 
393 393
     const dwin_coord_t labellen = utf8_strlen(fstr), vallen = utf8_strlen(value);
394 394
 
395
-    dwin_string.set();
396
-    dwin_string.add((uint8_t*)FTOP(fstr), itemIndex);
395
+    dwin_string.set(FTOP(fstr), itemIndex);
397 396
     if (vallen) dwin_string.add(':');  // If a value is included, add a colon
398 397
 
399 398
     // Assume the label is alpha-numeric (with a descender)
@@ -406,8 +405,7 @@ void MarlinUI::draw_status_message(const bool blink) {
406 405
 
407 406
     // If a value is included, print the value in larger text below the label
408 407
     if (vallen) {
409
-      dwin_string.set();
410
-      dwin_string.add(value);
408
+      dwin_string.set(value);
411 409
 
412 410
       const dwin_coord_t by = (row * MENU_LINE_HEIGHT) + MENU_FONT_HEIGHT + EXTRA_ROW_HEIGHT / 2;
413 411
       DWIN_Draw_String(true, font16x32, Color_Yellow, Color_Bg_Black, (LCD_PIXEL_WIDTH - vallen * 16) / 2, by, S(dwin_string.string()));
@@ -464,8 +462,8 @@ void MarlinUI::draw_status_message(const bool blink) {
464 462
           maxlen -= 2;
465 463
         }
466 464
 
467
-        dwin_string.add((uint8_t*)ui.scrolled_filename(theCard, maxlen, row, sel), maxlen);
468
-        uint8_t n = maxlen - dwin_string.length();
465
+        dwin_string.add(ui.scrolled_filename(theCard, maxlen, row, sel), maxlen);
466
+        uint8_t n = maxlen - dwin_string.length;
469 467
         while (n > 0) { dwin_string.add(' '); --n; }
470 468
         lcd_moveto(1, row);
471 469
         lcd_put_dwin_string();
@@ -548,7 +546,7 @@ void MarlinUI::draw_status_message(const bool blink) {
548 546
       dwin_string.add(i8tostr3rj(y_plot));
549 547
       dwin_string.add(")");
550 548
       lcd_moveto(
551
-        TERN(DWIN_MARLINUI_LANDSCAPE, ((x_offset + x_map_pixels) / MENU_FONT_WIDTH) + 2, LCD_WIDTH - dwin_string.length()),
549
+        TERN(DWIN_MARLINUI_LANDSCAPE, ((x_offset + x_map_pixels) / MENU_FONT_WIDTH) + 2, LCD_WIDTH - dwin_string.length),
552 550
         TERN(DWIN_MARLINUI_LANDSCAPE, LCD_HEIGHT - 2, ((y_offset + y_map_pixels) / MENU_LINE_HEIGHT) + 1)
553 551
       );
554 552
       lcd_put_dwin_string();
@@ -560,7 +558,7 @@ void MarlinUI::draw_status_message(const bool blink) {
560 558
       else
561 559
         dwin_string.add(PSTR(" -----"));
562 560
       lcd_moveto(
563
-        TERN(DWIN_MARLINUI_LANDSCAPE, ((x_offset + x_map_pixels) / MENU_FONT_WIDTH) + 2, LCD_WIDTH - dwin_string.length()),
561
+        TERN(DWIN_MARLINUI_LANDSCAPE, ((x_offset + x_map_pixels) / MENU_FONT_WIDTH) + 2, LCD_WIDTH - dwin_string.length),
564 562
         TERN(DWIN_MARLINUI_LANDSCAPE, LCD_HEIGHT - 1, ((y_offset + y_map_pixels) / MENU_LINE_HEIGHT) + 2)
565 563
       );
566 564
       lcd_put_dwin_string();

+ 4
- 6
Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp Ver fichero

@@ -72,8 +72,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
72 72
 
73 73
     uint8_t vallen = utf8_strlen(value);
74 74
     if (!ui.did_first_redraw) {
75
-      dwin_string.set();
76
-      dwin_string.add('X' + axis);
75
+      dwin_string.set('X' + axis);
77 76
       DWIN_Draw_String(true, font16x32, Color_IconBlue, Color_Bg_Black, x + (vallen * 14 - 14) / 2, y + 2, S(dwin_string.string()));
78 77
     }
79 78
 
@@ -96,8 +95,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
96 95
   #else // !DWIN_MARLINUI_PORTRAIT
97 96
 
98 97
     if (!ui.did_first_redraw || ui.old_is_printing != print_job_timer.isRunning()) {
99
-      dwin_string.set();
100
-      dwin_string.add('X' + axis);
98
+      dwin_string.set('X' + axis);
101 99
       DWIN_Draw_String(true, font16x32, Color_IconBlue, Color_Bg_Black, x, y, S(dwin_string.string()));
102 100
     }
103 101
 
@@ -391,7 +389,7 @@ void MarlinUI::draw_status_screen() {
391 389
     time.toDigital(buffer);
392 390
     dwin_string.add(prefix);
393 391
     dwin_string.add(buffer);
394
-    DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, (LCD_PIXEL_WIDTH - ((dwin_string.length() + 1) * 14)), 290, S(dwin_string.string()));
392
+    DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, (LCD_PIXEL_WIDTH - ((dwin_string.length + 1) * 14)), 290, S(dwin_string.string()));
395 393
 
396 394
   #else
397 395
 
@@ -454,7 +452,7 @@ void MarlinUI::draw_status_screen() {
454 452
         dwin_string.add(PSTR("%"));
455 453
         DWIN_Draw_String(
456 454
           false, font16x32, Percent_Color, Color_Bg_Black,
457
-          pb_left + (pb_width - dwin_string.length() * 16) / 2,
455
+          pb_left + (pb_width - dwin_string.length * 16) / 2,
458 456
           pb_top + (pb_height - 32) / 2,
459 457
           S(dwin_string.string())
460 458
         );

+ 5
- 5
Marlin/src/lcd/e3v2/proui/dwin.cpp Ver fichero

@@ -3509,14 +3509,14 @@ void Draw_MaxSpeed_Menu() {
3509 3509
   if (!MaxSpeedMenu) MaxSpeedMenu = new MenuClass();
3510 3510
   if (CurrentMenu != MaxSpeedMenu) {
3511 3511
     CurrentMenu = MaxSpeedMenu;
3512
-    SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MAXSPEED));
3512
+    SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MAX_SPEED));
3513 3513
     MenuItemsPrepare(5);
3514 3514
     BACK_ITEM(Draw_Motion_Menu);
3515
-    EDIT_ITEM_F(ICON_MaxSpeedX, MSG_MAXSPEED_X, onDrawMaxSpeedX, SetMaxSpeedX, &planner.settings.max_feedrate_mm_s[X_AXIS]);
3516
-    EDIT_ITEM_F(ICON_MaxSpeedY, MSG_MAXSPEED_Y, onDrawMaxSpeedY, SetMaxSpeedY, &planner.settings.max_feedrate_mm_s[Y_AXIS]);
3517
-    EDIT_ITEM_F(ICON_MaxSpeedZ, MSG_MAXSPEED_Z, onDrawMaxSpeedZ, SetMaxSpeedZ, &planner.settings.max_feedrate_mm_s[Z_AXIS]);
3515
+    EDIT_ITEM_F(ICON_MaxSpeedX, MSG_VMAX_A, onDrawMaxSpeedX, SetMaxSpeedX, &planner.settings.max_feedrate_mm_s[X_AXIS]);
3516
+    EDIT_ITEM_F(ICON_MaxSpeedY, MSG_VMAX_B, onDrawMaxSpeedY, SetMaxSpeedY, &planner.settings.max_feedrate_mm_s[Y_AXIS]);
3517
+    EDIT_ITEM_F(ICON_MaxSpeedZ, MSG_VMAX_C, onDrawMaxSpeedZ, SetMaxSpeedZ, &planner.settings.max_feedrate_mm_s[Z_AXIS]);
3518 3518
     #if HAS_HOTEND
3519
-      EDIT_ITEM_F(ICON_MaxSpeedE, MSG_MAXSPEED_E, onDrawMaxSpeedE, SetMaxSpeedE, &planner.settings.max_feedrate_mm_s[E_AXIS]);
3519
+      EDIT_ITEM_F(ICON_MaxSpeedE, MSG_VMAX_E, onDrawMaxSpeedE, SetMaxSpeedE, &planner.settings.max_feedrate_mm_s[E_AXIS]);
3520 3520
     #endif
3521 3521
   }
3522 3522
   CurrentMenu->draw();

+ 1
- 1
Marlin/src/lcd/e3v2/proui/dwin_lcd.cpp Ver fichero

@@ -147,7 +147,7 @@ void DWIN_SRAMToPic(uint8_t picID) {
147 147
 
148 148
 //--------------------------Test area -------------------------
149 149
 
150
-//void DWIN_ReadSRAM(uint16_t addr, uint8_t length, const char * const data) {
150
+//void DWIN_ReadSRAM(uint16_t addr, const uint8_t length, const char * const data) {
151 151
 //  size_t i = 0;
152 152
 //  DWIN_Byte(i, 0x32);
153 153
 //  DWIN_Byte(i, 0x5A);  // 0x5A Read from SRAM - 0xA5 Read from Flash

+ 1
- 1
Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/advanced_settings.cpp Ver fichero

@@ -54,7 +54,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
54 54
 
55 55
 
56 56
       .tag(7) .button(BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXT_F(MSG_STEPS_PER_MM))
57
-      .tag(8) .button(BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(MSG_VELOCITY))
57
+      .tag(8) .button(BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(MSG_MAX_SPEED))
58 58
       .tag(9) .button(BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_ACCELERATION))
59 59
       .tag(10) .button(BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXT_F(TERN(HAS_JUNCTION_DEVIATION, MSG_JUNCTION_DEVIATION, MSG_JERK)))
60 60
                .enabled(ENABLED(BACKLASH_GCODE))

+ 1
- 1
Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/advanced_settings_menu.cpp Ver fichero

@@ -59,7 +59,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
59 59
       .tag(3) .button(TMC_CURRENT_POS,        GET_TEXT_F(MSG_TMC_CURRENT))
60 60
               .enabled(ENABLED(LIN_ADVANCE))
61 61
       .tag(4) .button(LIN_ADVANCE_POS,         GET_TEXT_F(MSG_LINEAR_ADVANCE))
62
-      .tag(5) .button(VELOCITY_POS,           GET_TEXT_F(MSG_VELOCITY))
62
+      .tag(5) .button(VELOCITY_POS,           GET_TEXT_F(MSG_MAX_SPEED))
63 63
       .tag(6) .button(ACCELERATION_POS,       GET_TEXT_F(MSG_ACCELERATION))
64 64
       .tag(7) .button(JERK_POS,               GET_TEXT_F(TERN(HAS_JUNCTION_DEVIATION, MSG_JUNCTION_DEVIATION, MSG_JERK)))
65 65
       .tag(8) .button(ENDSTOPS_POS,           GET_TEXT_F(MSG_LCD_ENDSTOPS))

+ 1
- 1
Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/advanced_settings_menu.cpp Ver fichero

@@ -105,7 +105,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
105 105
       .tag(15).button(DISPLAY_POS,            GET_TEXT_F(MSG_DISPLAY_MENU))
106 106
       .tag(9) .button(INTERFACE_POS,          GET_TEXT_F(MSG_INTERFACE))
107 107
       .tag(10).button(RESTORE_DEFAULTS_POS,   GET_TEXT_F(MSG_RESTORE_DEFAULTS))
108
-      .tag(5) .button(VELOCITY_POS,           GET_TEXT_F(MSG_VELOCITY))
108
+      .tag(5) .button(VELOCITY_POS,           GET_TEXT_F(MSG_MAX_SPEED))
109 109
       .tag(6) .button(ACCELERATION_POS,       GET_TEXT_F(MSG_ACCELERATION))
110 110
       .tag(7) .button(JERK_POS,               GET_TEXT_F(TERN(HAS_JUNCTION_DEVIATION, MSG_JUNCTION_DEVIATION, MSG_JERK)))
111 111
       .enabled(ENABLED(BACKLASH_GCODE))

+ 1
- 1
Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_velocity_screen.cpp Ver fichero

@@ -34,7 +34,7 @@ void MaxVelocityScreen::onRedraw(draw_mode_t what) {
34 34
   widgets_t w(what);
35 35
   w.precision(0);
36 36
   w.units(GET_TEXT_F(MSG_UNITS_MM_S));
37
-  w.heading(                        GET_TEXT_F(MSG_VELOCITY));
37
+  w.heading(                        GET_TEXT_F(MSG_MAX_SPEED));
38 38
   w.color(x_axis)    .adjuster(  2, GET_TEXT_F(MSG_VMAX_X), getAxisMaxFeedrate_mm_s(X) );
39 39
   w.color(y_axis)    .adjuster(  4, GET_TEXT_F(MSG_VMAX_Y), getAxisMaxFeedrate_mm_s(Y) );
40 40
   w.color(z_axis)    .adjuster(  6, GET_TEXT_F(MSG_VMAX_Z), getAxisMaxFeedrate_mm_s(Z) );

+ 2
- 0
Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language.h Ver fichero

@@ -20,4 +20,6 @@
20 20
  ****************************************************************************/
21 21
 #pragma once
22 22
 
23
+#define LSTR PROGMEM Language_Str
24
+
23 25
 #include "language_en.h"

+ 127
- 127
Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h Ver fichero

@@ -36,142 +36,142 @@
36 36
 #endif
37 37
 
38 38
 namespace Language_en {
39
-  PROGMEM Language_Str MSG_BUTTON_OKAY              = u8"Okay";
40
-  PROGMEM Language_Str MSG_BUTTON_MENU              = u8"Menu";
41
-  PROGMEM Language_Str MSG_BUTTON_MEDIA             = u8"Media";
42
-  PROGMEM Language_Str MSG_BUTTON_OPEN              = u8"Open";
43
-  PROGMEM Language_Str MSG_CLEAN_NOZZLE             = u8"Clean Nozzle";
44
-  PROGMEM Language_Str MSG_VMAX_X                   = u8"Vmax X";
45
-  PROGMEM Language_Str MSG_VMAX_Y                   = u8"Vmax Y";
46
-  PROGMEM Language_Str MSG_VMAX_Z                   = u8"Vmax Z";
47
-  PROGMEM Language_Str MSG_ACCEL_PRINTING           = u8"Printing";
48
-  PROGMEM Language_Str MSG_ACCEL_TRAVEL             = u8"Travel";
49
-  PROGMEM Language_Str MSG_ACCEL_RETRACT            = u8"Retraction";
50
-  PROGMEM Language_Str MSG_AMAX_X                   = u8"Amax X";
51
-  PROGMEM Language_Str MSG_AMAX_Y                   = u8"Amax Y";
52
-  PROGMEM Language_Str MSG_AMAX_Z                   = u8"Amax Z";
53
-  PROGMEM Language_Str MSG_AXIS_X                   = u8"X";
54
-  PROGMEM Language_Str MSG_AXIS_X2                  = u8"X2";
55
-  PROGMEM Language_Str MSG_AXIS_Y                   = u8"Y";
56
-  PROGMEM Language_Str MSG_AXIS_Y2                  = u8"Y2";
57
-  PROGMEM Language_Str MSG_AXIS_Z                   = u8"Z";
58
-  PROGMEM Language_Str MSG_AXIS_Z2                  = u8"Z2";
59
-  PROGMEM Language_Str MSG_AXIS_E                   = u8"E";
60
-  PROGMEM Language_Str MSG_AXIS_E1                  = u8"E1";
61
-  PROGMEM Language_Str MSG_AXIS_E2                  = u8"E2";
62
-  PROGMEM Language_Str MSG_AXIS_E3                  = u8"E3";
63
-  PROGMEM Language_Str MSG_AXIS_E4                  = u8"E4";
64
-  PROGMEM Language_Str MSG_AXIS_ALL                 = u8"All";
65
-  PROGMEM Language_Str MSG_HOME                     = u8"Home";
66
-  PROGMEM Language_Str MSG_PRINT_STARTING           = u8"Print starting";
67
-  PROGMEM Language_Str MSG_PRINT_FINISHED           = u8"Print finished";
68
-  PROGMEM Language_Str MSG_PRINT_ERROR              = u8"Print error";
69
-  PROGMEM Language_Str MSG_ABOUT_TOUCH_PANEL_1      = u8"Color Touch Panel";
70
-  PROGMEM Language_Str MSG_ABOUT_TOUCH_PANEL_2      = WEBSITE_URL;
71
-  PROGMEM Language_Str MSG_LICENSE                  = u8"This program is free software: you can redistribute it and/or modify it under the terms of "
39
+  LSTR MSG_BUTTON_OKAY              = u8"Okay";
40
+  LSTR MSG_BUTTON_MENU              = u8"Menu";
41
+  LSTR MSG_BUTTON_MEDIA             = u8"Media";
42
+  LSTR MSG_BUTTON_OPEN              = u8"Open";
43
+  LSTR MSG_CLEAN_NOZZLE             = u8"Clean Nozzle";
44
+  LSTR MSG_VMAX_X                   = u8"Max X Speed";
45
+  LSTR MSG_VMAX_Y                   = u8"Max Y Speed";
46
+  LSTR MSG_VMAX_Z                   = u8"Max Z Speed";
47
+  LSTR MSG_ACCEL_PRINTING           = u8"Printing";
48
+  LSTR MSG_ACCEL_TRAVEL             = u8"Travel";
49
+  LSTR MSG_ACCEL_RETRACT            = u8"Retraction";
50
+  LSTR MSG_AMAX_X                   = u8"Max X Accel.";
51
+  LSTR MSG_AMAX_Y                   = u8"Max Y Accel.";
52
+  LSTR MSG_AMAX_Z                   = u8"Max Z Accel.";
53
+  LSTR MSG_AXIS_X                   = u8"X";
54
+  LSTR MSG_AXIS_X2                  = u8"X2";
55
+  LSTR MSG_AXIS_Y                   = u8"Y";
56
+  LSTR MSG_AXIS_Y2                  = u8"Y2";
57
+  LSTR MSG_AXIS_Z                   = u8"Z";
58
+  LSTR MSG_AXIS_Z2                  = u8"Z2";
59
+  LSTR MSG_AXIS_E                   = u8"E";
60
+  LSTR MSG_AXIS_E1                  = u8"E1";
61
+  LSTR MSG_AXIS_E2                  = u8"E2";
62
+  LSTR MSG_AXIS_E3                  = u8"E3";
63
+  LSTR MSG_AXIS_E4                  = u8"E4";
64
+  LSTR MSG_AXIS_ALL                 = u8"All";
65
+  LSTR MSG_HOME                     = u8"Home";
66
+  LSTR MSG_PRINT_STARTING           = u8"Print starting";
67
+  LSTR MSG_PRINT_FINISHED           = u8"Print finished";
68
+  LSTR MSG_PRINT_ERROR              = u8"Print error";
69
+  LSTR MSG_ABOUT_TOUCH_PANEL_1      = u8"Color Touch Panel";
70
+  LSTR MSG_ABOUT_TOUCH_PANEL_2      = WEBSITE_URL;
71
+  LSTR MSG_LICENSE                  = u8"This program is free software: you can redistribute it and/or modify it under the terms of "
72 72
                                                         "the GNU General Public License as published by the Free Software Foundation, either version 3 "
73 73
                                                         "of the License, or (at your option) any later version. To view a copy of the GNU General "
74 74
                                                         "Public License, go to the following location: https://www.gnu.org/licenses.";
75
-  PROGMEM Language_Str MSG_RUNOUT_1                 = u8"Runout 1";
76
-  PROGMEM Language_Str MSG_RUNOUT_2                 = u8"Runout 2";
77
-  PROGMEM Language_Str MSG_DISPLAY_MENU             = u8"Display";
78
-  PROGMEM Language_Str MSG_INTERFACE                = u8"Interface";
79
-  PROGMEM Language_Str MSG_MEASURE_AUTOMATICALLY    = u8"Measure automatically";
80
-  PROGMEM Language_Str MSG_H_OFFSET                 = u8"H Offset";
81
-  PROGMEM Language_Str MSG_V_OFFSET                 = u8"V Offset";
82
-  PROGMEM Language_Str MSG_TOUCH_SCREEN             = u8"Touch Screen";
83
-  PROGMEM Language_Str MSG_CALIBRATE                = u8"Calibrate";
84
-  PROGMEM Language_Str MSG_UNITS_MILLIAMP           = u8"mA";
85
-  PROGMEM Language_Str MSG_UNITS_MM                 = u8"mm";
86
-  PROGMEM Language_Str MSG_UNITS_MM_S               = u8"mm/s";
87
-  PROGMEM Language_Str MSG_UNITS_MM_S2              = u8"mm/s" SUPERSCRIPT_TWO;
88
-  PROGMEM Language_Str MSG_UNITS_STEP_MM            = u8"st/mm";
89
-  PROGMEM Language_Str MSG_UNITS_PERCENT            = u8"%";
90
-  PROGMEM Language_Str MSG_UNITS_C                  = DEGREE_SIGN u8"C";
91
-  PROGMEM Language_Str MSG_IDLE                     = u8"idle";
92
-  PROGMEM Language_Str MSG_SET_MAXIMUM              = u8"Set Maximum";
93
-  PROGMEM Language_Str MSG_PRINT_SPEED              = u8"Print Speed";
94
-  PROGMEM Language_Str MSG_LINEAR_ADVANCE           = u8"Linear Advance";
95
-  PROGMEM Language_Str MSG_LINEAR_ADVANCE_K         = u8"K";
96
-  PROGMEM Language_Str MSG_LINEAR_ADVANCE_K1        = u8"K E1";
97
-  PROGMEM Language_Str MSG_LINEAR_ADVANCE_K2        = u8"K E2";
98
-  PROGMEM Language_Str MSG_LINEAR_ADVANCE_K3        = u8"K E3";
99
-  PROGMEM Language_Str MSG_LINEAR_ADVANCE_K4        = u8"K E4";
100
-  PROGMEM Language_Str MSG_NUDGE_NOZZLE             = u8"Nudge Nozzle";
101
-  PROGMEM Language_Str MSG_ADJUST_BOTH_NOZZLES      = u8"Adjust Both Nozzles";
102
-  PROGMEM Language_Str MSG_SHOW_OFFSETS             = u8"Show Offsets";
103
-  PROGMEM Language_Str MSG_INCREMENT                = u8"Increment";
104
-  PROGMEM Language_Str MSG_ERASE_FLASH_WARNING      = u8"Are you sure? SPI flash will be erased.";
105
-  PROGMEM Language_Str MSG_ERASING                  = u8"Erasing...";
106
-  PROGMEM Language_Str MSG_ERASED                   = u8"SPI flash erased";
107
-  PROGMEM Language_Str MSG_CALIBRATION_WARNING      = u8"For best results, unload the filament and clean the hotend prior to starting calibration. Continue?";
108
-  PROGMEM Language_Str MSG_START_PRINT_CONFIRMATION = u8"Start printing %s?";
109
-  PROGMEM Language_Str MSG_ABORT_WARNING            = u8"Are you sure you want to cancel the print?";
110
-  PROGMEM Language_Str MSG_EXTRUDER_SELECTION       = u8"Extruder Selection";
111
-  PROGMEM Language_Str MSG_CURRENT_TEMPERATURE      = u8"Current Temp";
112
-  PROGMEM Language_Str MSG_REMOVAL_TEMPERATURE      = u8"Removal Temp";
113
-  PROGMEM Language_Str MSG_CAUTION                  = u8"Caution:";
114
-  PROGMEM Language_Str MSG_HOT                      = u8"Hot!";
115
-  PROGMEM Language_Str MSG_UNLOAD_FILAMENT          = u8"Unload/Retract";
116
-  PROGMEM Language_Str MSG_LOAD_FILAMENT            = u8"Load/Extrude";
117
-  PROGMEM Language_Str MSG_MOMENTARY                = u8"Momentary";
118
-  PROGMEM Language_Str MSG_CONTINUOUS               = u8"Continuous";
119
-  PROGMEM Language_Str MSG_PRINT_MENU               = u8"Print Menu";
120
-  PROGMEM Language_Str MSG_FINE_MOTION              = u8"Fine motion";
121
-  PROGMEM Language_Str MSG_ENABLE_MEDIA             = u8"Enable Media";
122
-  PROGMEM Language_Str MSG_INSERT_MEDIA             = u8"Insert Media...";
123
-  PROGMEM Language_Str MSG_LCD_BRIGHTNESS           = u8"LCD brightness";
124
-  PROGMEM Language_Str MSG_SOUND_VOLUME             = u8"Sound volume";
125
-  PROGMEM Language_Str MSG_SCREEN_LOCK              = u8"Screen lock";
126
-  PROGMEM Language_Str MSG_BOOT_SCREEN              = u8"Boot screen";
127
-  PROGMEM Language_Str MSG_SOUNDS                   = u8"Sounds";
128
-  PROGMEM Language_Str MSG_CLICK_SOUNDS             = u8"Click sounds";
129
-  PROGMEM Language_Str MSG_EEPROM_RESTORED          = u8"Settings restored from backup";
130
-  PROGMEM Language_Str MSG_EEPROM_RESET             = u8"Settings restored to default";
131
-  PROGMEM Language_Str MSG_EEPROM_SAVED             = u8"Settings saved!";
132
-  PROGMEM Language_Str MSG_EEPROM_SAVE_PROMPT       = u8"Settings applied. Save these settings for next power-on?";
133
-  PROGMEM Language_Str MSG_EEPROM_RESET_WARNING     = u8"Are you sure? Customizations will be lost.";
75
+  LSTR MSG_RUNOUT_1                 = u8"Runout 1";
76
+  LSTR MSG_RUNOUT_2                 = u8"Runout 2";
77
+  LSTR MSG_DISPLAY_MENU             = u8"Display";
78
+  LSTR MSG_INTERFACE                = u8"Interface";
79
+  LSTR MSG_MEASURE_AUTOMATICALLY    = u8"Measure automatically";
80
+  LSTR MSG_H_OFFSET                 = u8"H Offset";
81
+  LSTR MSG_V_OFFSET                 = u8"V Offset";
82
+  LSTR MSG_TOUCH_SCREEN             = u8"Touch Screen";
83
+  LSTR MSG_CALIBRATE                = u8"Calibrate";
84
+  LSTR MSG_UNITS_MILLIAMP           = u8"mA";
85
+  LSTR MSG_UNITS_MM                 = u8"mm";
86
+  LSTR MSG_UNITS_MM_S               = u8"mm/s";
87
+  LSTR MSG_UNITS_MM_S2              = u8"mm/s" SUPERSCRIPT_TWO;
88
+  LSTR MSG_UNITS_STEP_MM            = u8"st/mm";
89
+  LSTR MSG_UNITS_PERCENT            = u8"%";
90
+  LSTR MSG_UNITS_C                  = DEGREE_SIGN u8"C";
91
+  LSTR MSG_IDLE                     = u8"idle";
92
+  LSTR MSG_SET_MAXIMUM              = u8"Set Maximum";
93
+  LSTR MSG_PRINT_SPEED              = u8"Print Speed";
94
+  LSTR MSG_LINEAR_ADVANCE           = u8"Linear Advance";
95
+  LSTR MSG_LINEAR_ADVANCE_K         = u8"K";
96
+  LSTR MSG_LINEAR_ADVANCE_K1        = u8"K E1";
97
+  LSTR MSG_LINEAR_ADVANCE_K2        = u8"K E2";
98
+  LSTR MSG_LINEAR_ADVANCE_K3        = u8"K E3";
99
+  LSTR MSG_LINEAR_ADVANCE_K4        = u8"K E4";
100
+  LSTR MSG_NUDGE_NOZZLE             = u8"Nudge Nozzle";
101
+  LSTR MSG_ADJUST_BOTH_NOZZLES      = u8"Adjust Both Nozzles";
102
+  LSTR MSG_SHOW_OFFSETS             = u8"Show Offsets";
103
+  LSTR MSG_INCREMENT                = u8"Increment";
104
+  LSTR MSG_ERASE_FLASH_WARNING      = u8"Are you sure? SPI flash will be erased.";
105
+  LSTR MSG_ERASING                  = u8"Erasing...";
106
+  LSTR MSG_ERASED                   = u8"SPI flash erased";
107
+  LSTR MSG_CALIBRATION_WARNING      = u8"For best results, unload the filament and clean the hotend prior to starting calibration. Continue?";
108
+  LSTR MSG_START_PRINT_CONFIRMATION = u8"Start printing %s?";
109
+  LSTR MSG_ABORT_WARNING            = u8"Are you sure you want to cancel the print?";
110
+  LSTR MSG_EXTRUDER_SELECTION       = u8"Extruder Selection";
111
+  LSTR MSG_CURRENT_TEMPERATURE      = u8"Current Temp";
112
+  LSTR MSG_REMOVAL_TEMPERATURE      = u8"Removal Temp";
113
+  LSTR MSG_CAUTION                  = u8"Caution:";
114
+  LSTR MSG_HOT                      = u8"Hot!";
115
+  LSTR MSG_UNLOAD_FILAMENT          = u8"Unload/Retract";
116
+  LSTR MSG_LOAD_FILAMENT            = u8"Load/Extrude";
117
+  LSTR MSG_MOMENTARY                = u8"Momentary";
118
+  LSTR MSG_CONTINUOUS               = u8"Continuous";
119
+  LSTR MSG_PRINT_MENU               = u8"Print Menu";
120
+  LSTR MSG_FINE_MOTION              = u8"Fine motion";
121
+  LSTR MSG_ENABLE_MEDIA             = u8"Enable Media";
122
+  LSTR MSG_INSERT_MEDIA             = u8"Insert Media...";
123
+  LSTR MSG_LCD_BRIGHTNESS           = u8"LCD brightness";
124
+  LSTR MSG_SOUND_VOLUME             = u8"Sound volume";
125
+  LSTR MSG_SCREEN_LOCK              = u8"Screen lock";
126
+  LSTR MSG_BOOT_SCREEN              = u8"Boot screen";
127
+  LSTR MSG_SOUNDS                   = u8"Sounds";
128
+  LSTR MSG_CLICK_SOUNDS             = u8"Click sounds";
129
+  LSTR MSG_EEPROM_RESTORED          = u8"Settings restored from backup";
130
+  LSTR MSG_EEPROM_RESET             = u8"Settings restored to default";
131
+  LSTR MSG_EEPROM_SAVED             = u8"Settings saved!";
132
+  LSTR MSG_EEPROM_SAVE_PROMPT       = u8"Settings applied. Save these settings for next power-on?";
133
+  LSTR MSG_EEPROM_RESET_WARNING     = u8"Are you sure? Customizations will be lost.";
134 134
 
135
-  PROGMEM Language_Str MSG_PASSCODE_REJECTED        = u8"Wrong passcode!";
136
-  PROGMEM Language_Str MSG_PASSCODE_ACCEPTED        = u8"Passcode accepted!";
137
-  PROGMEM Language_Str MSG_PASSCODE_SELECT          = u8"Select Passcode:";
138
-  PROGMEM Language_Str MSG_PASSCODE_REQUEST         = u8"Enter Passcode:";
135
+  LSTR MSG_PASSCODE_REJECTED        = u8"Wrong passcode!";
136
+  LSTR MSG_PASSCODE_ACCEPTED        = u8"Passcode accepted!";
137
+  LSTR MSG_PASSCODE_SELECT          = u8"Select Passcode:";
138
+  LSTR MSG_PASSCODE_REQUEST         = u8"Enter Passcode:";
139 139
 
140
-  PROGMEM Language_Str MSG_TOUCH_CALIBRATION_START  = u8"Release to begin screen calibration";
141
-  PROGMEM Language_Str MSG_TOUCH_CALIBRATION_PROMPT = u8"Touch the dots to calibrate";
142
-  PROGMEM Language_Str MSG_BED_MAPPING_DONE         = u8"Bed mapping finished";
143
-  PROGMEM Language_Str MSG_BED_MAPPING_INCOMPLETE   = u8"Not all points probed";
144
-  PROGMEM Language_Str MSG_LEVELING                 = u8"Leveling";
145
-  PROGMEM Language_Str MSG_AXIS_LEVELING            = u8"Axis Leveling";
146
-  PROGMEM Language_Str MSG_PROBE_BED                = u8"Probe Mesh";
147
-  PROGMEM Language_Str MSG_PRINT_TEST               = u8"Print Test (PLA)";
148
-  PROGMEM Language_Str MSG_MOVE_Z_TO_TOP            = u8"Raise Z to Top";
140
+  LSTR MSG_TOUCH_CALIBRATION_START  = u8"Release to begin screen calibration";
141
+  LSTR MSG_TOUCH_CALIBRATION_PROMPT = u8"Touch the dots to calibrate";
142
+  LSTR MSG_BED_MAPPING_DONE         = u8"Bed mapping finished";
143
+  LSTR MSG_BED_MAPPING_INCOMPLETE   = u8"Not all points probed";
144
+  LSTR MSG_LEVELING                 = u8"Leveling";
145
+  LSTR MSG_AXIS_LEVELING            = u8"Axis Leveling";
146
+  LSTR MSG_PROBE_BED                = u8"Probe Mesh";
147
+  LSTR MSG_PRINT_TEST               = u8"Print Test (PLA)";
148
+  LSTR MSG_MOVE_Z_TO_TOP            = u8"Raise Z to Top";
149 149
 
150 150
   #if ENABLED(TOUCH_UI_LULZBOT_BIO)
151
-    PROGMEM Language_Str MSG_MOVE_TO_HOME           = u8"Move to Home";
152
-    PROGMEM Language_Str MSG_RAISE_PLUNGER          = u8"Raise Plunger";
153
-    PROGMEM Language_Str MSG_RELEASE_XY_AXIS        = u8"Release X and Y Axis";
154
-    PROGMEM Language_Str MSG_BED_TEMPERATURE        = u8"Bed Temperature";
155
-    PROGMEM Language_Str MSG_HOME_XYZ_WARNING       = u8"About to move to home position. Ensure the top and the bed of the printer are clear.\n\nContinue?";
156
-    PROGMEM Language_Str MSG_HOME_E_WARNING         = u8"About to re-home plunger and auto-level. Remove syringe prior to proceeding.\n\nContinue?";
151
+    LSTR MSG_MOVE_TO_HOME           = u8"Move to Home";
152
+    LSTR MSG_RAISE_PLUNGER          = u8"Raise Plunger";
153
+    LSTR MSG_RELEASE_XY_AXIS        = u8"Release X and Y Axis";
154
+    LSTR MSG_BED_TEMPERATURE        = u8"Bed Temperature";
155
+    LSTR MSG_HOME_XYZ_WARNING       = u8"About to move to home position. Ensure the top and the bed of the printer are clear.\n\nContinue?";
156
+    LSTR MSG_HOME_E_WARNING         = u8"About to re-home plunger and auto-level. Remove syringe prior to proceeding.\n\nContinue?";
157 157
   #endif
158 158
 
159 159
   #ifdef TOUCH_UI_COCOA_PRESS
160
-    PROGMEM Language_Str MSG_BODY                   = u8"Body";
161
-    PROGMEM Language_Str MSG_SELECT_CHOCOLATE_TYPE  = u8"Select Chocolate Type";
162
-    PROGMEM Language_Str MSG_EXTERNAL               = u8"External";
163
-    PROGMEM Language_Str MSG_CHOCOLATE              = u8"Chocolate";
164
-    PROGMEM Language_Str MSG_UNLOAD_CARTRIDGE       = u8"Unload Cartridge";
165
-    PROGMEM Language_Str MSG_LOAD_UNLOAD            = u8"Load/Unload";
166
-    PROGMEM Language_Str MSG_FULL_LOAD              = u8"Full Load";
167
-    PROGMEM Language_Str MSG_FULL_UNLOAD            = u8"Full Unload";
168
-    PROGMEM Language_Str MSG_PREHEAT_CHOCOLATE      = u8"Preheat Chocolate";
169
-    PROGMEM Language_Str MSG_PREHEAT_FINISHED       = u8"Preheat finished";
170
-    PROGMEM Language_Str MSG_PREHEAT                = u8"Preheat";
171
-    PROGMEM Language_Str MSG_BUTTON_PAUSE           = u8"Pause";
172
-    PROGMEM Language_Str MSG_BUTTON_RESUME          = u8"Resume";
173
-    PROGMEM Language_Str MSG_ELAPSED_PRINT          = u8"Elapsed Print";
174
-    PROGMEM Language_Str MSG_XYZ_MOVE               = u8"XYZ Move";
175
-    PROGMEM Language_Str MSG_E_MOVE                 = u8"Extrusion Move";
160
+    LSTR MSG_BODY                   = u8"Body";
161
+    LSTR MSG_SELECT_CHOCOLATE_TYPE  = u8"Select Chocolate Type";
162
+    LSTR MSG_EXTERNAL               = u8"External";
163
+    LSTR MSG_CHOCOLATE              = u8"Chocolate";
164
+    LSTR MSG_UNLOAD_CARTRIDGE       = u8"Unload Cartridge";
165
+    LSTR MSG_LOAD_UNLOAD            = u8"Load/Unload";
166
+    LSTR MSG_FULL_LOAD              = u8"Full Load";
167
+    LSTR MSG_FULL_UNLOAD            = u8"Full Unload";
168
+    LSTR MSG_PREHEAT_CHOCOLATE      = u8"Preheat Chocolate";
169
+    LSTR MSG_PREHEAT_FINISHED       = u8"Preheat finished";
170
+    LSTR MSG_PREHEAT                = u8"Preheat";
171
+    LSTR MSG_BUTTON_PAUSE           = u8"Pause";
172
+    LSTR MSG_BUTTON_RESUME          = u8"Resume";
173
+    LSTR MSG_ELAPSED_PRINT          = u8"Elapsed Print";
174
+    LSTR MSG_XYZ_MOVE               = u8"XYZ Move";
175
+    LSTR MSG_E_MOVE                 = u8"Extrusion Move";
176 176
   #endif
177 177
 }; // namespace Language_en

+ 4
- 9
Marlin/src/lcd/fontutils.cpp Ver fichero

@@ -40,13 +40,8 @@
40 40
 
41 41
 #include "fontutils.h"
42 42
 
43
-uint8_t read_byte_ram(uint8_t * str) {
44
-  return *str;
45
-}
46
-
47
-uint8_t read_byte_rom(uint8_t * str) {
48
-  return pgm_read_byte(str);
49
-}
43
+uint8_t read_byte_ram(const uint8_t *str) { return *str; }
44
+uint8_t read_byte_rom(const uint8_t *str) { return pgm_read_byte(str); }
50 45
 
51 46
 /**
52 47
  * @brief Using binary search to find the position by data_pin
@@ -104,9 +99,9 @@ static inline bool utf8_is_start_byte_of_char(const uint8_t b) {
104 99
 
105 100
 /* This function gets the character at the pstart position, interpreting UTF8 multibyte sequences
106 101
    and returns the pointer to the next character */
107
-uint8_t* get_utf8_value_cb(uint8_t *pstart, read_byte_cb_t cb_read_byte, wchar_t *pval) {
102
+const uint8_t* get_utf8_value_cb(const uint8_t *pstart, read_byte_cb_t cb_read_byte, wchar_t *pval) {
108 103
   uint32_t val = 0;
109
-  uint8_t *p = pstart;
104
+  const uint8_t *p = pstart;
110 105
 
111 106
   #define NEXT_6_BITS() do{ val <<= 6; p++; valcur = cb_read_byte(p); val |= (valcur & 0x3F); }while(0)
112 107
 

+ 8
- 4
Marlin/src/lcd/fontutils.h Ver fichero

@@ -38,10 +38,10 @@
38 38
 #include "../core/macros.h"
39 39
 
40 40
 // read a byte from ROM or RAM
41
-typedef uint8_t (*read_byte_cb_t)(uint8_t * str);
41
+typedef uint8_t (*read_byte_cb_t)(const uint8_t * str);
42 42
 
43
-uint8_t read_byte_ram(uint8_t * str);
44
-uint8_t read_byte_rom(uint8_t * str);
43
+uint8_t read_byte_ram(const uint8_t *str);
44
+uint8_t read_byte_rom(const uint8_t *str);
45 45
 
46 46
 // there's overflow of the wchar_t due to the 2-byte size in Arduino
47 47
 // sizeof(wchar_t)=2; sizeof(size_t)=2; sizeof(uint32_t)=4;
@@ -58,7 +58,11 @@ typedef int (* pf_bsearch_cb_comp_t)(void *userdata, size_t idx, void * data_pin
58 58
 int pf_bsearch_r(void *userdata, size_t num_data, pf_bsearch_cb_comp_t cb_comp, void *data_pinpoint, size_t *ret_idx);
59 59
 
60 60
 /* Get the character, decoding multibyte UTF8 characters and returning a pointer to the start of the next UTF8 character */
61
-uint8_t* get_utf8_value_cb(uint8_t *pstart, read_byte_cb_t cb_read_byte, wchar_t *pval);
61
+const uint8_t* get_utf8_value_cb(const uint8_t *pstart, read_byte_cb_t cb_read_byte, wchar_t *pval);
62
+
63
+inline const char* get_utf8_value_cb(const char *pstart, read_byte_cb_t cb_read_byte, wchar_t *pval) {
64
+  return (const char *)get_utf8_value_cb((const uint8_t *)pstart, cb_read_byte, pval);
65
+}
62 66
 
63 67
 /* Returns length of string in CHARACTERS, NOT BYTES */
64 68
 uint8_t utf8_strlen(const char *pstart);

+ 5
- 8
Marlin/src/lcd/language/language_an.h Ver fichero

@@ -85,7 +85,7 @@ namespace Language_an {
85 85
   LSTR MSG_MOVE_Z                         = _UxGT("Mover Z");
86 86
   LSTR MSG_MOVE_E                         = _UxGT("Extrusor");
87 87
   LSTR MSG_MOVE_EN                        = _UxGT("Extrusor *");
88
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover %smm");
88
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
89 89
   LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
90 90
   LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
91 91
   LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
@@ -109,10 +109,8 @@ namespace Language_an {
109 109
   LSTR MSG_AMAX_A                         = _UxGT("Acel. max ") STR_A;
110 110
   LSTR MSG_AMAX_B                         = _UxGT("Acel. max ") STR_B;
111 111
   LSTR MSG_AMAX_C                         = _UxGT("Acel. max ") STR_C;
112
-  LSTR MSG_AMAX_I                         = _UxGT("Acel. max ") STR_I;
113
-  LSTR MSG_AMAX_J                         = _UxGT("Acel. max ") STR_J;
114
-  LSTR MSG_AMAX_K                         = _UxGT("Acel. max ") STR_K;
115
-  LSTR MSG_AMAX_E                         = _UxGT("Acel. max ") STR_E;
112
+  LSTR MSG_AMAX_N                         = _UxGT("Acel. max @");
113
+  LSTR MSG_AMAX_E                         = _UxGT("Acel. max E");
116 114
   LSTR MSG_AMAX_EN                        = _UxGT("Acel. max *");
117 115
   LSTR MSG_A_RETRACT                      = _UxGT("Acel. retrac.");
118 116
   LSTR MSG_A_TRAVEL                       = _UxGT("Acel. Viaje");
@@ -120,9 +118,7 @@ namespace Language_an {
120 118
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" trangos/mm");
121 119
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" trangos/mm");
122 120
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" trangos/mm");
123
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" trangos/mm");
124
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" trangos/mm");
125
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" trangos/mm");
121
+  LSTR MSG_N_STEPS                        = _UxGT("@ trangos/mm");
126 122
   LSTR MSG_E_STEPS                        = _UxGT("E trangos/mm");
127 123
   LSTR MSG_EN_STEPS                       = _UxGT("* trangos/mm");
128 124
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatura");
@@ -168,6 +164,7 @@ namespace Language_an {
168 164
   LSTR MSG_BABYSTEP_X                     = _UxGT("Micropaso X");
169 165
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Micropaso Y");
170 166
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Micropaso Z");
167
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Micropaso @");
171 168
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Cancelado - Endstop");
172 169
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Error: en calentar");
173 170
   LSTR MSG_ERR_REDUNDANT_TEMP             = _UxGT("Error: temperatura");

+ 3
- 4
Marlin/src/lcd/language/language_bg.h Ver fichero

@@ -74,7 +74,7 @@ namespace Language_bg {
74 74
   LSTR MSG_MOVE_Z                         = _UxGT("Движение по Z");
75 75
   LSTR MSG_MOVE_E                         = _UxGT("Екструдер");
76 76
   LSTR MSG_MOVE_EN                        = _UxGT("Екструдер *");
77
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Премести с %smm");
77
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Премести с $mm");
78 78
   LSTR MSG_MOVE_01MM                      = _UxGT("Премести с 0.1mm");
79 79
   LSTR MSG_MOVE_1MM                       = _UxGT("Премести с 1mm");
80 80
   LSTR MSG_MOVE_10MM                      = _UxGT("Премести с 10mm");
@@ -101,9 +101,7 @@ namespace Language_bg {
101 101
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" стъпки/mm");
102 102
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" стъпки/mm");
103 103
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" стъпки/mm");
104
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" стъпки/mm");
105
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" стъпки/mm");
106
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" стъпки/mm");
104
+  LSTR MSG_N_STEPS                        = _UxGT("@ стъпки/mm");
107 105
   LSTR MSG_E_STEPS                        = _UxGT("E стъпки/mm");
108 106
   LSTR MSG_EN_STEPS                       = _UxGT("* стъпки/mm");
109 107
   LSTR MSG_TEMPERATURE                    = _UxGT("Температура");
@@ -148,6 +146,7 @@ namespace Language_bg {
148 146
   LSTR MSG_BABYSTEP_X                     = _UxGT("Министъпка X");
149 147
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Министъпка Y");
150 148
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Министъпка Z");
149
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Министъпка @");
151 150
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Стоп Кр.Изключватели");
152 151
   LSTR MSG_DELTA_CALIBRATE                = _UxGT("Делта Калибровка");
153 152
   LSTR MSG_DELTA_CALIBRATE_X              = _UxGT("Калибровка X");

+ 5
- 6
Marlin/src/lcd/language/language_ca.h Ver fichero

@@ -85,7 +85,7 @@ namespace Language_ca {
85 85
   LSTR MSG_MOVE_Z                         = _UxGT("Mou Z");
86 86
   LSTR MSG_MOVE_E                         = _UxGT("Extrusor");
87 87
   LSTR MSG_MOVE_EN                        = _UxGT("Extrusor *");
88
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Mou %smm");
88
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Mou $mm");
89 89
   LSTR MSG_MOVE_01MM                      = _UxGT("Mou 0.1mm");
90 90
   LSTR MSG_MOVE_1MM                       = _UxGT("Mou 1mm");
91 91
   LSTR MSG_MOVE_10MM                      = _UxGT("Mou 10mm");
@@ -107,11 +107,9 @@ namespace Language_ca {
107 107
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" passos/mm");
108 108
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" passos/mm");
109 109
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" passos/mm");
110
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" passos/mm");
111
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" passos/mm");
112
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" passos/mm");
113
-  LSTR MSG_E_STEPS                        = _UxGT("Epassos/mm");
114
-  LSTR MSG_EN_STEPS                       = _UxGT("*passos/mm");
110
+  LSTR MSG_E_STEPS                        = _UxGT("@ passos/mm");
111
+  LSTR MSG_N_STEPS                        = _UxGT("E passos/mm");
112
+  LSTR MSG_EN_STEPS                       = _UxGT("* passos/mm");
115 113
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatura");
116 114
   LSTR MSG_MOTION                         = _UxGT("Moviment");
117 115
   LSTR MSG_FILAMENT                       = _UxGT("Filament");
@@ -156,6 +154,7 @@ namespace Language_ca {
156 154
   LSTR MSG_BABYSTEP_X                     = _UxGT("Micropas X");
157 155
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Micropas Y");
158 156
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Micropas Z");
157
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Micropas @");
159 158
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Cancel. Endstop");
160 159
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Error al escalfar");
161 160
   LSTR MSG_ERR_REDUNDANT_TEMP             = _UxGT("Err: TEMP REDUNDANT");

+ 10
- 23
Marlin/src/lcd/language/language_cz.h Ver fichero

@@ -235,7 +235,7 @@ namespace Language_cz {
235 235
   LSTR MSG_MOVE_E                         = _UxGT("Extrudér");
236 236
   LSTR MSG_MOVE_EN                        = _UxGT("Extrudér *");
237 237
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend je studený");
238
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Posunout o %smm");
238
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Posunout o $mm");
239 239
   LSTR MSG_MOVE_01MM                      = _UxGT("Posunout o 0,1mm");
240 240
   LSTR MSG_MOVE_1MM                       = _UxGT("Posunout o 1mm");
241 241
   LSTR MSG_MOVE_10MM                      = _UxGT("Posunout o 10mm");
@@ -269,19 +269,15 @@ namespace Language_cz {
269 269
   LSTR MSG_VA_JERK                        = _UxGT("Max ") STR_A _UxGT(" Jerk");
270 270
   LSTR MSG_VB_JERK                        = _UxGT("Max ") STR_B _UxGT(" Jerk");
271 271
   LSTR MSG_VC_JERK                        = _UxGT("Max ") STR_C _UxGT(" Jerk");
272
-  LSTR MSG_VI_JERK                        = _UxGT("Max ") STR_I _UxGT(" Jerk");
273
-  LSTR MSG_VJ_JERK                        = _UxGT("Max ") STR_J _UxGT(" Jerk");
274
-  LSTR MSG_VK_JERK                        = _UxGT("Max ") STR_K _UxGT(" Jerk");
272
+  LSTR MSG_VN_JERK                        = _UxGT("Max @ Jerk");
275 273
   LSTR MSG_VE_JERK                        = _UxGT("Max E Jerk");
276 274
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Odchylka spoje");
277
-  LSTR MSG_VELOCITY                       = _UxGT("Rychlost");
275
+  LSTR MSG_MAX_SPEED                      = _UxGT("Max Rychlost");
278 276
   LSTR MSG_VMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Rychlost");
279 277
   LSTR MSG_VMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Rychlost");
280 278
   LSTR MSG_VMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Rychlost");
281
-  LSTR MSG_VMAX_I                         = _UxGT("Max ") STR_I _UxGT(" Rychlost");
282
-  LSTR MSG_VMAX_J                         = _UxGT("Max ") STR_J _UxGT(" Rychlost");
283
-  LSTR MSG_VMAX_K                         = _UxGT("Max ") STR_K _UxGT(" Rychlost");
284
-  LSTR MSG_VMAX_E                         = _UxGT("Max ") STR_E _UxGT(" Rychlost");
279
+  LSTR MSG_VMAX_N                         = _UxGT("Max @ Rychlost");
280
+  LSTR MSG_VMAX_E                         = _UxGT("Max E Rychlost");
285 281
   LSTR MSG_VMAX_EN                        = _UxGT("Max * Rychlost");
286 282
   LSTR MSG_VMIN                           = _UxGT("Vmin");
287 283
   LSTR MSG_VTRAV_MIN                      = _UxGT("VTrav Min");
@@ -289,10 +285,8 @@ namespace Language_cz {
289 285
   LSTR MSG_AMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Akcel");
290 286
   LSTR MSG_AMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Akcel");
291 287
   LSTR MSG_AMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Akcel");
292
-  LSTR MSG_AMAX_I                         = _UxGT("Max ") STR_I _UxGT(" Akcel");
293
-  LSTR MSG_AMAX_J                         = _UxGT("Max ") STR_J _UxGT(" Akcel");
294
-  LSTR MSG_AMAX_K                         = _UxGT("Max ") STR_K _UxGT(" Akcel");
295
-  LSTR MSG_AMAX_E                         = _UxGT("Max ") STR_E _UxGT(" Akcel");
288
+  LSTR MSG_AMAX_N                         = _UxGT("Max @ Akcel");
289
+  LSTR MSG_AMAX_E                         = _UxGT("Max E Akcel");
296 290
   LSTR MSG_AMAX_EN                        = _UxGT("Max * Akcel");
297 291
   LSTR MSG_A_RETRACT                      = _UxGT("A-retrakt");
298 292
   LSTR MSG_A_TRAVEL                       = _UxGT("A-přejezd");
@@ -300,9 +294,7 @@ namespace Language_cz {
300 294
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" kroků/mm");
301 295
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" kroků/mm");
302 296
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" kroků/mm");
303
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" kroků/mm");
304
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" kroků/mm");
305
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" kroků/mm");
297
+  LSTR MSG_N_STEPS                        = _UxGT("@ kroků/mm");
306 298
   LSTR MSG_E_STEPS                        = _UxGT("E kroků/mm");
307 299
   LSTR MSG_EN_STEPS                       = _UxGT("* kroků/mm");
308 300
   LSTR MSG_TEMPERATURE                    = _UxGT("Teplota");
@@ -407,6 +399,7 @@ namespace Language_cz {
407 399
   LSTR MSG_BABYSTEP_X                     = _UxGT("Babystep X");
408 400
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Babystep Y");
409 401
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Babystep Z");
402
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Babystep @");
410 403
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Celkem");
411 404
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Endstop abort");
412 405
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Chyba zahřívání");
@@ -482,13 +475,7 @@ namespace Language_cz {
482 475
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Teplota max");
483 476
   LSTR MSG_INFO_PSU                       = _UxGT("Nap. zdroj");
484 477
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Buzení motorů");
485
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Motor %");
486
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Motor %");
487
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Motor %");
488
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Motor %");
489
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Motor %");
490
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Motor %");
491
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Motor %");
478
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Motor %");
492 479
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("DAC uložit EEPROM");
493 480
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC CHYBA SPOJENÍ");
494 481
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("VÝMĚNA FILAMENTU");

+ 2
- 8
Marlin/src/lcd/language/language_da.h Ver fichero

@@ -74,7 +74,7 @@ namespace Language_da {
74 74
   LSTR MSG_MOVE_X                         = _UxGT("Flyt X");
75 75
   LSTR MSG_MOVE_Y                         = _UxGT("Flyt Y");
76 76
   LSTR MSG_MOVE_Z                         = _UxGT("Flyt Z");
77
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Flyt %smm");
77
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Flyt $mm");
78 78
   LSTR MSG_MOVE_01MM                      = _UxGT("Flyt 0.1mm");
79 79
   LSTR MSG_MOVE_1MM                       = _UxGT("Flyt 1mm");
80 80
   LSTR MSG_MOVE_10MM                      = _UxGT("Flyt 10mm");
@@ -172,13 +172,7 @@ namespace Language_da {
172 172
   LSTR MSG_INFO_PSU                       = _UxGT("Strømfors.");
173 173
 
174 174
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Driv Styrke");
175
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Driv %");
176
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Driv %");
177
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Driv %");
178
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Driv %");
179
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Driv %");
180
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Driv %");
181
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Driv %");
175
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Driv %");
182 176
 
183 177
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("DAC EEPROM Skriv");
184 178
 

+ 12
- 42
Marlin/src/lcd/language/language_de.h Ver fichero

@@ -84,12 +84,6 @@ namespace Language_de {
84 84
   LSTR MSG_HOME_OFFSET_X                  = _UxGT("Homeversatz X");
85 85
   LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Homeversatz Y");
86 86
   LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Homeversatz Z");
87
-  LSTR MSG_HOME_OFFSET_I                  = _UxGT("Homeversatz ") STR_I;
88
-  LSTR MSG_HOME_OFFSET_J                  = _UxGT("Homeversatz ") STR_J;
89
-  LSTR MSG_HOME_OFFSET_K                  = _UxGT("Homeversatz ") STR_K;
90
-  LSTR MSG_HOME_OFFSET_U                  = _UxGT("Homeversatz ") STR_U;
91
-  LSTR MSG_HOME_OFFSET_V                  = _UxGT("Homeversatz ") STR_V;
92
-  LSTR MSG_HOME_OFFSET_W                  = _UxGT("Homeversatz ") STR_W;
93 87
   LSTR MSG_HOME_OFFSETS_APPLIED           = _UxGT("Homeversatz aktiv");
94 88
   LSTR MSG_TRAMMING_WIZARD                = _UxGT("Tramming Assistent");
95 89
   LSTR MSG_SELECT_ORIGIN                  = _UxGT("Wählen Sie Ursprung");
@@ -273,13 +267,11 @@ namespace Language_de {
273 267
   LSTR MSG_MOVE_X                         = _UxGT("Bewege X");
274 268
   LSTR MSG_MOVE_Y                         = _UxGT("Bewege Y");
275 269
   LSTR MSG_MOVE_Z                         = _UxGT("Bewege Z");
276
-  LSTR MSG_MOVE_I                         = _UxGT("Bewege ") STR_I;
277
-  LSTR MSG_MOVE_J                         = _UxGT("Bewege ") STR_J;
278
-  LSTR MSG_MOVE_K                         = _UxGT("Bewege ") STR_K;
270
+  LSTR MSG_MOVE_N                         = _UxGT("Bewege @");
279 271
   LSTR MSG_MOVE_E                         = _UxGT("Bewege Extruder");
280 272
   LSTR MSG_MOVE_EN                        = _UxGT("Bewege Extruder *");
281 273
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend zu kalt");
282
-  LSTR MSG_MOVE_N_MM                      = _UxGT(" %s mm");
274
+  LSTR MSG_MOVE_N_MM                      = _UxGT(" $ mm");
283 275
   LSTR MSG_MOVE_01MM                      = _UxGT("  0,1  mm");
284 276
   LSTR MSG_MOVE_1MM                       = _UxGT("  1,0  mm");
285 277
   LSTR MSG_MOVE_10MM                      = _UxGT(" 10,0  mm");
@@ -289,12 +281,6 @@ namespace Language_de {
289 281
   LSTR MSG_MOVE_01IN                      = _UxGT("0.100 in");
290 282
   LSTR MSG_MOVE_1IN                       = _UxGT("1.000 in");
291 283
   LSTR MSG_SPEED                          = _UxGT("Geschw.");
292
-  LSTR MSG_MAXSPEED                       = _UxGT("Max Geschw. (mm/s)");
293
-  LSTR MSG_MAXSPEED_X                     = _UxGT("Max ") STR_A _UxGT(" Geschw.");
294
-  LSTR MSG_MAXSPEED_Y                     = _UxGT("Max ") STR_B _UxGT(" Geschw.");
295
-  LSTR MSG_MAXSPEED_Z                     = _UxGT("Max ") STR_C _UxGT(" Geschw.");
296
-  LSTR MSG_MAXSPEED_E                     = _UxGT("Max ") STR_E _UxGT(" Geschw.");
297
-  LSTR MSG_MAXSPEED_A                     = _UxGT("Max @ Geschw.");
298 284
   LSTR MSG_BED_Z                          = _UxGT("Bett Z");
299 285
   LSTR MSG_NOZZLE                         = _UxGT("Düse");
300 286
   LSTR MSG_NOZZLE_N                       = _UxGT("Düse ~");
@@ -347,19 +333,15 @@ namespace Language_de {
347 333
   LSTR MSG_VA_JERK                        = _UxGT("Max ") STR_A _UxGT(" Jerk");
348 334
   LSTR MSG_VB_JERK                        = _UxGT("Max ") STR_B _UxGT(" Jerk");
349 335
   LSTR MSG_VC_JERK                        = _UxGT("Max ") STR_C _UxGT(" Jerk");
350
-  LSTR MSG_VI_JERK                        = _UxGT("Max ") STR_I _UxGT(" Jerk");
351
-  LSTR MSG_VJ_JERK                        = _UxGT("Max ") STR_J _UxGT(" Jerk");
352
-  LSTR MSG_VK_JERK                        = _UxGT("Max ") STR_K _UxGT(" Jerk");
336
+  LSTR MSG_VN_JERK                        = _UxGT("Max @ Jerk");
353 337
   LSTR MSG_VE_JERK                        = _UxGT("Max E Jerk");
354 338
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Junction Dev");
355
-  LSTR MSG_VELOCITY                       = _UxGT("Geschwindigkeit");
339
+  LSTR MSG_MAX_SPEED                      = _UxGT("Max Geschw. (mm/s)");
356 340
   LSTR MSG_VMAX_A                         = _UxGT("V max ") STR_A;
357 341
   LSTR MSG_VMAX_B                         = _UxGT("V max ") STR_B;
358 342
   LSTR MSG_VMAX_C                         = _UxGT("V max ") STR_C;
359
-  LSTR MSG_VMAX_I                         = _UxGT("V max ") STR_I;
360
-  LSTR MSG_VMAX_J                         = _UxGT("V max ") STR_J;
361
-  LSTR MSG_VMAX_K                         = _UxGT("V max ") STR_K;
362
-  LSTR MSG_VMAX_E                         = _UxGT("V max ") STR_E;
343
+  LSTR MSG_VMAX_N                         = _UxGT("V max @");
344
+  LSTR MSG_VMAX_E                         = _UxGT("V max E");
363 345
   LSTR MSG_VMAX_EN                        = _UxGT("V max *");
364 346
   LSTR MSG_VMIN                           = _UxGT("V min ");
365 347
   LSTR MSG_VTRAV_MIN                      = _UxGT("V min Leerfahrt");
@@ -367,10 +349,8 @@ namespace Language_de {
367 349
   LSTR MSG_AMAX_A                         = _UxGT("A max ") STR_A;
368 350
   LSTR MSG_AMAX_B                         = _UxGT("A max ") STR_B;
369 351
   LSTR MSG_AMAX_C                         = _UxGT("A max ") STR_C;
370
-  LSTR MSG_AMAX_I                         = _UxGT("A max ") STR_I;
371
-  LSTR MSG_AMAX_J                         = _UxGT("A max ") STR_J;
372
-  LSTR MSG_AMAX_K                         = _UxGT("A max ") STR_K;
373
-  LSTR MSG_AMAX_E                         = _UxGT("A max ") STR_E;
352
+  LSTR MSG_AMAX_N                         = _UxGT("A max @");
353
+  LSTR MSG_AMAX_E                         = _UxGT("A max E");
374 354
   LSTR MSG_AMAX_EN                        = _UxGT("A max *");
375 355
   LSTR MSG_A_RETRACT                      = _UxGT("A Einzug");
376 356
   LSTR MSG_A_TRAVEL                       = _UxGT("A Leerfahrt");
@@ -380,10 +360,8 @@ namespace Language_de {
380 360
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" Steps/mm");
381 361
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" Steps/mm");
382 362
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" Steps/mm");
383
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" Steps/mm");
384
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" Steps/mm");
385
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" Steps/mm");
386
-  LSTR MSG_E_STEPS                        = STR_E _UxGT(" Steps/mm");
363
+  LSTR MSG_N_STEPS                        = _UxGT("@ Steps/mm");
364
+  LSTR MSG_E_STEPS                        = _UxGT("E Steps/mm");
387 365
   LSTR MSG_EN_STEPS                       = _UxGT("* Steps/mm");
388 366
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatur");
389 367
   LSTR MSG_MOTION                         = _UxGT("Bewegung");
@@ -533,9 +511,7 @@ namespace Language_de {
533 511
   LSTR MSG_BABYSTEP_X                     = _UxGT("Babystep X");
534 512
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Babystep Y");
535 513
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Babystep Z");
536
-  LSTR MSG_BABYSTEP_I                     = _UxGT("Babystep ") STR_I;
537
-  LSTR MSG_BABYSTEP_J                     = _UxGT("Babystep ") STR_J;
538
-  LSTR MSG_BABYSTEP_K                     = _UxGT("Babystep ") STR_K;
514
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Babystep @");
539 515
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Total");
540 516
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Abbr. mit Endstopp");
541 517
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("HEIZEN ERFOLGLOS");
@@ -629,13 +605,7 @@ namespace Language_de {
629 605
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Max Temp");
630 606
   LSTR MSG_INFO_PSU                       = _UxGT("Netzteil");
631 607
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Motorleistung");
632
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Treiber %");
633
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Treiber %");
634
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Treiber %");
635
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Treiber %");
636
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Treiber %");
637
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Treiber %");
638
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Treiber %");
608
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Treiber %");
639 609
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC Verbindungsfehler");
640 610
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("Werte speichern");
641 611
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("FILAMENT WECHSEL");

+ 6
- 14
Marlin/src/lcd/language/language_el.h Ver fichero

@@ -119,17 +119,13 @@ namespace Language_el {
119 119
   LSTR MSG_VA_JERK                        = _UxGT("Vαντίδραση ") STR_A;
120 120
   LSTR MSG_VB_JERK                        = _UxGT("Vαντίδραση ") STR_B;
121 121
   LSTR MSG_VC_JERK                        = _UxGT("Vαντίδραση ") STR_C;
122
-  LSTR MSG_VI_JERK                        = _UxGT("Vαντίδραση ") STR_I;
123
-  LSTR MSG_VJ_JERK                        = _UxGT("Vαντίδραση ") STR_J;
124
-  LSTR MSG_VK_JERK                        = _UxGT("Vαντίδραση ") STR_K;
122
+  LSTR MSG_VN_JERK                        = _UxGT("Vαντίδραση @");
125 123
   LSTR MSG_VE_JERK                        = _UxGT("Vαντίδραση E");
126 124
   LSTR MSG_VMAX_A                         = _UxGT("V Μέγιστο") STR_A;
127 125
   LSTR MSG_VMAX_B                         = _UxGT("V Μέγιστο") STR_B;
128 126
   LSTR MSG_VMAX_C                         = _UxGT("V Μέγιστο") STR_C;
129
-  LSTR MSG_VMAX_I                         = _UxGT("V Μέγιστο") STR_I;
130
-  LSTR MSG_VMAX_J                         = _UxGT("V Μέγιστο") STR_J;
131
-  LSTR MSG_VMAX_K                         = _UxGT("V Μέγιστο") STR_K;
132
-  LSTR MSG_VMAX_E                         = _UxGT("V Μέγιστο") STR_E;
127
+  LSTR MSG_VMAX_N                         = _UxGT("V Μέγιστο@");
128
+  LSTR MSG_VMAX_E                         = _UxGT("V ΜέγιστοE");
133 129
   LSTR MSG_VMAX_EN                        = _UxGT("V Μέγιστο *");
134 130
   LSTR MSG_VMIN                           = _UxGT("V Ελάχιστο");
135 131
   LSTR MSG_VTRAV_MIN                      = _UxGT("Vελάχ. μετατόπιση");
@@ -137,10 +133,8 @@ namespace Language_el {
137 133
   LSTR MSG_AMAX_A                         = _UxGT("Aμεγ ") STR_A;
138 134
   LSTR MSG_AMAX_B                         = _UxGT("Aμεγ ") STR_B;
139 135
   LSTR MSG_AMAX_C                         = _UxGT("Aμεγ ") STR_C;
140
-  LSTR MSG_AMAX_I                         = _UxGT("Aμεγ ") STR_I;
141
-  LSTR MSG_AMAX_J                         = _UxGT("Aμεγ ") STR_J;
142
-  LSTR MSG_AMAX_K                         = _UxGT("Aμεγ ") STR_K;
143
-  LSTR MSG_AMAX_E                         = _UxGT("Aμεγ ") STR_E;
136
+  LSTR MSG_AMAX_N                         = _UxGT("Aμεγ @");
137
+  LSTR MSG_AMAX_E                         = _UxGT("Aμεγ E");
144 138
   LSTR MSG_AMAX_EN                        = _UxGT("Aμεγ *");
145 139
   LSTR MSG_A_RETRACT                      = _UxGT("Α-ανάσυρση");
146 140
   LSTR MSG_A_TRAVEL                       = _UxGT("Α-μετατόπιση");
@@ -148,9 +142,7 @@ namespace Language_el {
148 142
   LSTR MSG_A_STEPS                        = _UxGT("Bήματα ") STR_A _UxGT(" ανά μμ");
149 143
   LSTR MSG_B_STEPS                        = _UxGT("Bήματα ") STR_B _UxGT(" ανά μμ");
150 144
   LSTR MSG_C_STEPS                        = _UxGT("Bήματα ") STR_C _UxGT(" ανά μμ");
151
-  LSTR MSG_I_STEPS                        = _UxGT("Bήματα ") STR_I _UxGT(" ανά μμ");
152
-  LSTR MSG_J_STEPS                        = _UxGT("Bήματα ") STR_J _UxGT(" ανά μμ");
153
-  LSTR MSG_K_STEPS                        = _UxGT("Bήματα ") STR_K _UxGT(" ανά μμ");
145
+  LSTR MSG_N_STEPS                        = _UxGT("Bήματα @ ανά μμ");
154 146
   LSTR MSG_E_STEPS                        = _UxGT("Bήματα Ε ανά μμ");
155 147
   LSTR MSG_EN_STEPS                       = _UxGT("Bήματα * ανά μμ");
156 148
   LSTR MSG_TEMPERATURE                    = _UxGT("Θερμοκρασία");

+ 6
- 14
Marlin/src/lcd/language/language_el_gr.h Ver fichero

@@ -109,17 +109,13 @@ namespace Language_el_gr {
109 109
   LSTR MSG_VA_JERK                        = _UxGT("Vαντίδραση ") STR_A;
110 110
   LSTR MSG_VB_JERK                        = _UxGT("Vαντίδραση ") STR_B;
111 111
   LSTR MSG_VC_JERK                        = _UxGT("Vαντίδραση ") STR_C;
112
-  LSTR MSG_VI_JERK                        = _UxGT("Vαντίδραση ") STR_I;
113
-  LSTR MSG_VJ_JERK                        = _UxGT("Vαντίδραση ") STR_J;
114
-  LSTR MSG_VK_JERK                        = _UxGT("Vαντίδραση ") STR_K;
112
+  LSTR MSG_VN_JERK                        = _UxGT("Vαντίδραση @");
115 113
   LSTR MSG_VE_JERK                        = _UxGT("Vαντίδραση E");
116 114
   LSTR MSG_VMAX_A                         = _UxGT("Vμεγ ") STR_A;
117 115
   LSTR MSG_VMAX_B                         = _UxGT("Vμεγ ") STR_B;
118 116
   LSTR MSG_VMAX_C                         = _UxGT("Vμεγ ") STR_C;
119
-  LSTR MSG_VMAX_I                         = _UxGT("Vμεγ ") STR_I;
120
-  LSTR MSG_VMAX_J                         = _UxGT("Vμεγ ") STR_J;
121
-  LSTR MSG_VMAX_K                         = _UxGT("Vμεγ ") STR_K;
122
-  LSTR MSG_VMAX_E                         = _UxGT("Vμεγ ") STR_E;
117
+  LSTR MSG_VMAX_N                         = _UxGT("Vμεγ @");
118
+  LSTR MSG_VMAX_E                         = _UxGT("Vμεγ E");
123 119
   LSTR MSG_VMAX_EN                        = _UxGT("Vμεγ *");
124 120
   LSTR MSG_VMIN                           = _UxGT("Vελαχ");
125 121
   LSTR MSG_VTRAV_MIN                      = _UxGT("Vελάχ. μετατόπιση");
@@ -127,10 +123,8 @@ namespace Language_el_gr {
127 123
   LSTR MSG_AMAX_A                         = _UxGT("Aμεγ ") STR_A;
128 124
   LSTR MSG_AMAX_B                         = _UxGT("Aμεγ ") STR_B;
129 125
   LSTR MSG_AMAX_C                         = _UxGT("Aμεγ ") STR_C;
130
-  LSTR MSG_AMAX_I                         = _UxGT("Aμεγ ") STR_I;
131
-  LSTR MSG_AMAX_J                         = _UxGT("Aμεγ ") STR_J;
132
-  LSTR MSG_AMAX_K                         = _UxGT("Aμεγ ") STR_K;
133
-  LSTR MSG_AMAX_E                         = _UxGT("Aμεγ ") STR_E;
126
+  LSTR MSG_AMAX_N                         = _UxGT("Aμεγ @");
127
+  LSTR MSG_AMAX_E                         = _UxGT("Aμεγ E");
134 128
   LSTR MSG_AMAX_EN                        = _UxGT("Aμεγ *");
135 129
   LSTR MSG_A_RETRACT                      = _UxGT("Α-ανάσυρση");
136 130
   LSTR MSG_A_TRAVEL                       = _UxGT("Α-μετατόπιση");
@@ -138,9 +132,7 @@ namespace Language_el_gr {
138 132
   LSTR MSG_A_STEPS                        = _UxGT("Bήματα ") STR_A _UxGT(" ανά μμ");
139 133
   LSTR MSG_B_STEPS                        = _UxGT("Bήματα ") STR_B _UxGT(" ανά μμ");
140 134
   LSTR MSG_C_STEPS                        = _UxGT("Bήματα ") STR_C _UxGT(" ανά μμ");
141
-  LSTR MSG_I_STEPS                        = _UxGT("Bήματα ") STR_I _UxGT(" ανά μμ");
142
-  LSTR MSG_J_STEPS                        = _UxGT("Bήματα ") STR_J _UxGT(" ανά μμ");
143
-  LSTR MSG_K_STEPS                        = _UxGT("Bήματα ") STR_K _UxGT(" ανά μμ");
135
+  LSTR MSG_N_STEPS                        = _UxGT("Bήματα @ ανά μμ");
144 136
   LSTR MSG_E_STEPS                        = _UxGT("Bήματα Ε ανά μμ");
145 137
   LSTR MSG_EN_STEPS                       = _UxGT("Bήματα * ανά μμ");
146 138
   LSTR MSG_TEMPERATURE                    = _UxGT("Θερμοκρασία");

+ 19
- 79
Marlin/src/lcd/language/language_en.h Ver fichero

@@ -27,10 +27,9 @@
27 27
  * LCD Menu Messages
28 28
  * See also https://marlinfw.org/docs/development/lcd_language.html
29 29
  *
30
- * Substitutions are applied for the following characters when used
31
- * in menu items that call lcd_put_u8str_ind_P with an index:
30
+ * Substitutions are applied for the following characters when used in menu items titles:
32 31
  *
33
- *   $ displays an inserted C-string
32
+ *   $ displays an inserted string
34 33
  *   = displays  '0'....'10' for indexes 0 - 10
35 34
  *   ~ displays  '1'....'11' for indexes 0 - 10
36 35
  *   * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
@@ -106,12 +105,6 @@ namespace Language_en {
106 105
   LSTR MSG_HOME_OFFSET_X                  = _UxGT("Home Offset X");
107 106
   LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Home Offset Y");
108 107
   LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Home Offset Z");
109
-  LSTR MSG_HOME_OFFSET_I                  = _UxGT("Home Offset ") STR_I;
110
-  LSTR MSG_HOME_OFFSET_J                  = _UxGT("Home Offset ") STR_J;
111
-  LSTR MSG_HOME_OFFSET_K                  = _UxGT("Home Offset ") STR_K;
112
-  LSTR MSG_HOME_OFFSET_U                  = _UxGT("Home Offset ") STR_U;
113
-  LSTR MSG_HOME_OFFSET_V                  = _UxGT("Home Offset ") STR_V;
114
-  LSTR MSG_HOME_OFFSET_W                  = _UxGT("Home Offset ") STR_W;
115 108
   LSTR MSG_HOME_OFFSETS_APPLIED           = _UxGT("Offsets Applied");
116 109
   LSTR MSG_TRAMMING_WIZARD                = _UxGT("Tramming Wizard");
117 110
   LSTR MSG_SELECT_ORIGIN                  = _UxGT("Select Origin");
@@ -314,16 +307,11 @@ namespace Language_en {
314 307
   LSTR MSG_MOVE_X                         = _UxGT("Move X"); // Used by draw_edit_screen
315 308
   LSTR MSG_MOVE_Y                         = _UxGT("Move Y");
316 309
   LSTR MSG_MOVE_Z                         = _UxGT("Move Z");
317
-  LSTR MSG_MOVE_I                         = _UxGT("Move ") STR_I;
318
-  LSTR MSG_MOVE_J                         = _UxGT("Move ") STR_J;
319
-  LSTR MSG_MOVE_K                         = _UxGT("Move ") STR_K;
320
-  LSTR MSG_MOVE_U                         = _UxGT("Move ") STR_U;
321
-  LSTR MSG_MOVE_V                         = _UxGT("Move ") STR_V;
322
-  LSTR MSG_MOVE_W                         = _UxGT("Move ") STR_W;
310
+  LSTR MSG_MOVE_N                         = _UxGT("Move @");
323 311
   LSTR MSG_MOVE_E                         = _UxGT("Move Extruder");
324 312
   LSTR MSG_MOVE_EN                        = _UxGT("Move E*");
325 313
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend too cold");
326
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Move %smm");
314
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Move $mm");
327 315
   LSTR MSG_MOVE_01MM                      = _UxGT("Move 0.1mm");
328 316
   LSTR MSG_MOVE_1MM                       = _UxGT("Move 1mm");
329 317
   LSTR MSG_MOVE_10MM                      = _UxGT("Move 10mm");
@@ -333,12 +321,6 @@ namespace Language_en {
333 321
   LSTR MSG_MOVE_01IN                      = _UxGT("Move 0.1in");
334 322
   LSTR MSG_MOVE_1IN                       = _UxGT("Move 1.0in");
335 323
   LSTR MSG_SPEED                          = _UxGT("Speed");
336
-  LSTR MSG_MAXSPEED                       = _UxGT("Max Speed (mm/s)");
337
-  LSTR MSG_MAXSPEED_X                     = _UxGT("Max ") STR_A _UxGT(" Speed");
338
-  LSTR MSG_MAXSPEED_Y                     = _UxGT("Max ") STR_B _UxGT(" Speed");
339
-  LSTR MSG_MAXSPEED_Z                     = _UxGT("Max ") STR_C _UxGT(" Speed");
340
-  LSTR MSG_MAXSPEED_E                     = _UxGT("Max ") STR_E _UxGT(" Speed");
341
-  LSTR MSG_MAXSPEED_A                     = _UxGT("Max @ Speed");
342 324
   LSTR MSG_BED_Z                          = _UxGT("Bed Z");
343 325
   LSTR MSG_NOZZLE                         = _UxGT("Nozzle");
344 326
   LSTR MSG_NOZZLE_N                       = _UxGT("Nozzle ~");
@@ -395,39 +377,24 @@ namespace Language_en {
395 377
   LSTR MSG_VA_JERK                        = _UxGT("Max ") STR_A _UxGT(" Jerk");
396 378
   LSTR MSG_VB_JERK                        = _UxGT("Max ") STR_B _UxGT(" Jerk");
397 379
   LSTR MSG_VC_JERK                        = _UxGT("Max ") STR_C _UxGT(" Jerk");
398
-  LSTR MSG_VI_JERK                        = _UxGT("Max ") STR_I _UxGT(" Jerk");
399
-  LSTR MSG_VJ_JERK                        = _UxGT("Max ") STR_J _UxGT(" Jerk");
400
-  LSTR MSG_VK_JERK                        = _UxGT("Max ") STR_K _UxGT(" Jerk");
401
-  LSTR MSG_VU_JERK                        = _UxGT("Max ") STR_U _UxGT(" Jerk");
402
-  LSTR MSG_VV_JERK                        = _UxGT("Max ") STR_V _UxGT(" Jerk");
403
-  LSTR MSG_VW_JERK                        = _UxGT("Max ") STR_W _UxGT(" Jerk");
380
+  LSTR MSG_VN_JERK                        = _UxGT("Max @ Jerk");
404 381
   LSTR MSG_VE_JERK                        = _UxGT("Max E Jerk");
405 382
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Junction Dev");
406
-  LSTR MSG_VELOCITY                       = _UxGT("Velocity");
407
-  LSTR MSG_VMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Vel");
408
-  LSTR MSG_VMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Vel");
409
-  LSTR MSG_VMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Vel");
410
-  LSTR MSG_VMAX_I                         = _UxGT("Max ") STR_I _UxGT(" Vel");
411
-  LSTR MSG_VMAX_J                         = _UxGT("Max ") STR_J _UxGT(" Vel");
412
-  LSTR MSG_VMAX_K                         = _UxGT("Max ") STR_K _UxGT(" Vel");
413
-  LSTR MSG_VMAX_U                         = _UxGT("Max ") STR_U _UxGT(" Vel");
414
-  LSTR MSG_VMAX_V                         = _UxGT("Max ") STR_V _UxGT(" Vel");
415
-  LSTR MSG_VMAX_W                         = _UxGT("Max ") STR_W _UxGT(" Vel");
416
-  LSTR MSG_VMAX_E                         = _UxGT("Max ") STR_E _UxGT(" Vel");
417
-  LSTR MSG_VMAX_EN                        = _UxGT("Max * Vel");
383
+  LSTR MSG_MAX_SPEED                      = _UxGT("Max Speed (mm/s)");
384
+  LSTR MSG_VMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Speed");
385
+  LSTR MSG_VMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Speed");
386
+  LSTR MSG_VMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Speed");
387
+  LSTR MSG_VMAX_N                         = _UxGT("Max @ Speed");
388
+  LSTR MSG_VMAX_E                         = _UxGT("Max E Speed");
389
+  LSTR MSG_VMAX_EN                        = _UxGT("Max * Speed");
418 390
   LSTR MSG_VMIN                           = _UxGT("Min Velocity");
419
-  LSTR MSG_VTRAV_MIN                      = _UxGT("Min Travel Vel");
391
+  LSTR MSG_VTRAV_MIN                      = _UxGT("Min Travel Speed");
420 392
   LSTR MSG_ACCELERATION                   = _UxGT("Acceleration");
421 393
   LSTR MSG_AMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Accel");
422 394
   LSTR MSG_AMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Accel");
423 395
   LSTR MSG_AMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Accel");
424
-  LSTR MSG_AMAX_I                         = _UxGT("Max ") STR_I _UxGT(" Accel");
425
-  LSTR MSG_AMAX_J                         = _UxGT("Max ") STR_J _UxGT(" Accel");
426
-  LSTR MSG_AMAX_K                         = _UxGT("Max ") STR_K _UxGT(" Accel");
427
-  LSTR MSG_AMAX_U                         = _UxGT("Max ") STR_U _UxGT(" Accel");
428
-  LSTR MSG_AMAX_V                         = _UxGT("Max ") STR_V _UxGT(" Accel");
429
-  LSTR MSG_AMAX_W                         = _UxGT("Max ") STR_W _UxGT(" Accel");
430
-  LSTR MSG_AMAX_E                         = _UxGT("Max ") STR_E _UxGT(" Accel");
396
+  LSTR MSG_AMAX_N                         = _UxGT("Max @ Accel");
397
+  LSTR MSG_AMAX_E                         = _UxGT("Max E Accel");
431 398
   LSTR MSG_AMAX_EN                        = _UxGT("Max * Accel");
432 399
   LSTR MSG_A_RETRACT                      = _UxGT("Retract Accel");
433 400
   LSTR MSG_A_TRAVEL                       = _UxGT("Travel Accel");
@@ -437,12 +404,7 @@ namespace Language_en {
437 404
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" Steps/mm");
438 405
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" Steps/mm");
439 406
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" Steps/mm");
440
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" Steps/mm");
441
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" Steps/mm");
442
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" Steps/mm");
443
-  LSTR MSG_U_STEPS                        = STR_U _UxGT(" Steps/mm");
444
-  LSTR MSG_V_STEPS                        = STR_V _UxGT(" Steps/mm");
445
-  LSTR MSG_W_STEPS                        = STR_W _UxGT(" Steps/mm");
407
+  LSTR MSG_N_STEPS                        = _UxGT("@ steps/mm");
446 408
   LSTR MSG_E_STEPS                        = _UxGT("E steps/mm");
447 409
   LSTR MSG_EN_STEPS                       = _UxGT("* Steps/mm");
448 410
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperature");
@@ -605,12 +567,7 @@ namespace Language_en {
605 567
   LSTR MSG_BABYSTEP_X                     = _UxGT("Babystep X");
606 568
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Babystep Y");
607 569
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Babystep Z");
608
-  LSTR MSG_BABYSTEP_I                     = _UxGT("Babystep ") STR_I;
609
-  LSTR MSG_BABYSTEP_J                     = _UxGT("Babystep ") STR_J;
610
-  LSTR MSG_BABYSTEP_K                     = _UxGT("Babystep ") STR_K;
611
-  LSTR MSG_BABYSTEP_U                     = _UxGT("Babystep ") STR_U;
612
-  LSTR MSG_BABYSTEP_V                     = _UxGT("Babystep ") STR_V;
613
-  LSTR MSG_BABYSTEP_W                     = _UxGT("Babystep ") STR_W;
570
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Babystep @");
614 571
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Total");
615 572
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Endstop Abort");
616 573
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Heating Failed");
@@ -707,16 +664,7 @@ namespace Language_en {
707 664
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Max Temp");
708 665
   LSTR MSG_INFO_PSU                       = _UxGT("PSU");
709 666
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Drive Strength");
710
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Driver %");
711
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Driver %");
712
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Driver %");
713
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Driver %");
714
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Driver %");
715
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Driver %");
716
-  LSTR MSG_DAC_PERCENT_U                  = STR_U _UxGT(" Driver %");
717
-  LSTR MSG_DAC_PERCENT_V                  = STR_V _UxGT(" Driver %");
718
-  LSTR MSG_DAC_PERCENT_W                  = STR_W _UxGT(" Driver %");
719
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Driver %");
667
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Driver %");
720 668
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC CONNECTION ERROR");
721 669
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("DAC EEPROM Write");
722 670
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("FILAMENT CHANGE");
@@ -889,15 +837,7 @@ namespace Language_en {
889 837
   LSTR MSG_PID_C_E                        = _UxGT("PID-C *");
890 838
   LSTR MSG_PID_F                          = _UxGT("PID-F");
891 839
   LSTR MSG_PID_F_E                        = _UxGT("PID-F *");
892
-  LSTR MSG_BACKLASH_A                     = STR_A;
893
-  LSTR MSG_BACKLASH_B                     = STR_B;
894
-  LSTR MSG_BACKLASH_C                     = STR_C;
895
-  LSTR MSG_BACKLASH_I                     = STR_I;
896
-  LSTR MSG_BACKLASH_J                     = STR_J;
897
-  LSTR MSG_BACKLASH_K                     = STR_K;
898
-  LSTR MSG_BACKLASH_U                     = STR_U;
899
-  LSTR MSG_BACKLASH_V                     = STR_V;
900
-  LSTR MSG_BACKLASH_W                     = STR_W;
840
+  LSTR MSG_BACKLASH_N                     = _UxGT("@");
901 841
 }
902 842
 
903 843
 #if FAN_COUNT == 1

+ 14
- 27
Marlin/src/lcd/language/language_es.h Ver fichero

@@ -229,7 +229,7 @@ namespace Language_es {
229 229
   LSTR MSG_MOVE_E                         = _UxGT("Extrusor");
230 230
   LSTR MSG_MOVE_EN                        = _UxGT("Extrusor *");
231 231
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend muy frio");
232
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover %smm");
232
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
233 233
   LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
234 234
   LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
235 235
   LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
@@ -270,30 +270,24 @@ namespace Language_es {
270 270
   LSTR MSG_VA_JERK                        = _UxGT("Max ") STR_A _UxGT(" Jerk");
271 271
   LSTR MSG_VB_JERK                        = _UxGT("Max ") STR_B _UxGT(" Jerk");
272 272
   LSTR MSG_VC_JERK                        = _UxGT("Max ") STR_C _UxGT(" Jerk");
273
-  LSTR MSG_VI_JERK                        = _UxGT("Max ") STR_I _UxGT(" Jerk");
274
-  LSTR MSG_VJ_JERK                        = _UxGT("Max ") STR_J _UxGT(" Jerk");
275
-  LSTR MSG_VK_JERK                        = _UxGT("Max ") STR_K _UxGT(" Jerk");
273
+  LSTR MSG_VN_JERK                        = _UxGT("Max @ Jerk");
276 274
   LSTR MSG_VE_JERK                        = _UxGT("Max E Jerk");
277 275
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Desvi. Unión");
278
-  LSTR MSG_VELOCITY                       = _UxGT("Velocidad");
279
-  LSTR MSG_VMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Vel");
280
-  LSTR MSG_VMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Vel");
281
-  LSTR MSG_VMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Vel");
282
-  LSTR MSG_VMAX_I                         = _UxGT("Max ") STR_I _UxGT(" Vel");
283
-  LSTR MSG_VMAX_J                         = _UxGT("Max ") STR_J _UxGT(" Vel");
284
-  LSTR MSG_VMAX_K                         = _UxGT("Max ") STR_K _UxGT(" Vel");
285
-  LSTR MSG_VMAX_E                         = _UxGT("Max ") STR_E _UxGT(" Vel");
286
-  LSTR MSG_VMAX_EN                        = _UxGT("Max * Vel");
276
+  LSTR MSG_MAX_SPEED                      = _UxGT("Max Velocidad");
277
+  LSTR MSG_VMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Speed");
278
+  LSTR MSG_VMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Speed");
279
+  LSTR MSG_VMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Speed");
280
+  LSTR MSG_VMAX_N                         = _UxGT("Max @ Speed");
281
+  LSTR MSG_VMAX_E                         = _UxGT("Max E Speed");
282
+  LSTR MSG_VMAX_EN                        = _UxGT("Max * Speed");
287 283
   LSTR MSG_VMIN                           = _UxGT("Vmin");
288 284
   LSTR MSG_VTRAV_MIN                      = _UxGT("Vel. viaje min");
289 285
   LSTR MSG_ACCELERATION                   = _UxGT("Acceleración");
290 286
   LSTR MSG_AMAX_A                         = _UxGT("Acel. max") STR_A;
291 287
   LSTR MSG_AMAX_B                         = _UxGT("Acel. max") STR_B;
292 288
   LSTR MSG_AMAX_C                         = _UxGT("Acel. max") STR_C;
293
-  LSTR MSG_AMAX_I                         = _UxGT("Acel. max") STR_I;
294
-  LSTR MSG_AMAX_J                         = _UxGT("Acel. max") STR_J;
295
-  LSTR MSG_AMAX_K                         = _UxGT("Acel. max") STR_K;
296
-  LSTR MSG_AMAX_E                         = _UxGT("Acel. max") STR_E;
289
+  LSTR MSG_AMAX_N                         = _UxGT("Acel. max@");
290
+  LSTR MSG_AMAX_E                         = _UxGT("Acel. maxE");
297 291
   LSTR MSG_AMAX_EN                        = _UxGT("Acel. max *");
298 292
   LSTR MSG_A_RETRACT                      = _UxGT("Acel. retrac.");
299 293
   LSTR MSG_A_TRAVEL                       = _UxGT("Acel. Viaje");
@@ -301,9 +295,7 @@ namespace Language_es {
301 295
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" pasos/mm");
302 296
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" pasos/mm");
303 297
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" pasos/mm");
304
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" pasos/mm");
305
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" pasos/mm");
306
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" pasos/mm");
298
+  LSTR MSG_N_STEPS                        = _UxGT("@ pasos/mm");
307 299
   LSTR MSG_E_STEPS                        = _UxGT("E pasos/mm");
308 300
   LSTR MSG_EN_STEPS                       = _UxGT("* pasos/mm");
309 301
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatura");
@@ -413,6 +405,7 @@ namespace Language_es {
413 405
   LSTR MSG_BABYSTEP_X                     = _UxGT("Micropaso X");
414 406
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Micropaso Y");
415 407
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Micropaso Z");
408
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Micropaso @");
416 409
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Total");
417 410
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Cancelado - Endstop");
418 411
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Calent. fallido");
@@ -480,13 +473,7 @@ namespace Language_es {
480 473
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Temp. Máxima");
481 474
   LSTR MSG_INFO_PSU                       = _UxGT("F. Aliment.");
482 475
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Fuerza de empuje");
483
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Driver %");
484
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Driver %");
485
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Driver %");
486
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Driver %");
487
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Driver %");
488
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Driver %");
489
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Driver %");
476
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Driver %");
490 477
   LSTR MSG_ERROR_TMC                      = _UxGT("ERROR CONEX. TMC");
491 478
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("Escribe DAC EEPROM");
492 479
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("CAMBIAR FILAMENTO");

+ 5
- 14
Marlin/src/lcd/language/language_eu.h Ver fichero

@@ -138,7 +138,7 @@ namespace Language_eu {
138 138
   LSTR MSG_MOVE_Z                         = _UxGT("Mugitu Z");
139 139
   LSTR MSG_MOVE_E                         = _UxGT("Estrusorea");
140 140
   LSTR MSG_MOVE_EN                        = _UxGT("Estrusorea *");
141
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Mugitu %smm");
141
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Mugitu $mm");
142 142
   LSTR MSG_MOVE_01MM                      = _UxGT("Mugitu 0.1mm");
143 143
   LSTR MSG_MOVE_1MM                       = _UxGT("Mugitu 1mm");
144 144
   LSTR MSG_MOVE_10MM                      = _UxGT("Mugitu 10mm");
@@ -166,9 +166,7 @@ namespace Language_eu {
166 166
   LSTR MSG_VA_JERK                        = _UxGT("V") STR_A _UxGT("-astindua");
167 167
   LSTR MSG_VB_JERK                        = _UxGT("V") STR_B _UxGT("-astindua");
168 168
   LSTR MSG_VC_JERK                        = _UxGT("V") STR_C _UxGT("-astindua");
169
-  LSTR MSG_VI_JERK                        = _UxGT("V") STR_I _UxGT("-astindua");
170
-  LSTR MSG_VJ_JERK                        = _UxGT("V") STR_J _UxGT("-astindua");
171
-  LSTR MSG_VK_JERK                        = _UxGT("V") STR_K _UxGT("-astindua");
169
+  LSTR MSG_VN_JERK                        = _UxGT("V@-astindua");
172 170
   LSTR MSG_VE_JERK                        = _UxGT("Ve-astindua");
173 171
   LSTR MSG_VTRAV_MIN                      = _UxGT("VBidaia min");
174 172
   LSTR MSG_A_RETRACT                      = _UxGT("A-retrakt");
@@ -177,9 +175,7 @@ namespace Language_eu {
177 175
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" pausoak/mm");
178 176
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" pausoak/mm");
179 177
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" pausoak/mm");
180
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" pausoak/mm");
181
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" pausoak/mm");
182
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" pausoak/mm");
178
+  LSTR MSG_N_STEPS                        = _UxGT("@ pausoak/mm");
183 179
   LSTR MSG_E_STEPS                        = _UxGT("E pausoak/mm");
184 180
   LSTR MSG_EN_STEPS                       = _UxGT("* pausoak/mm");
185 181
   LSTR MSG_TEMPERATURE                    = _UxGT("Tenperatura");
@@ -243,6 +239,7 @@ namespace Language_eu {
243 239
   LSTR MSG_BABYSTEP_X                     = _UxGT("Mikro-urratsa X");
244 240
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Mikro-urratsa Y");
245 241
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Mikro-urratsa Z");
242
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Mikro-urratsa @");
246 243
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Endstop deusezta.");
247 244
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Err: Beroketa");
248 245
   LSTR MSG_ERR_REDUNDANT_TEMP             = _UxGT("Err: Tenperatura");
@@ -296,13 +293,7 @@ namespace Language_eu {
296 293
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Tenp. Maximoa");
297 294
   LSTR MSG_INFO_PSU                       = _UxGT("Elikadura-iturria");
298 295
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Driver-aren potentzia");
299
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Driver %");
300
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Driver %");
301
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Driver %");
302
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Driver %");
303
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Driver %");
304
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Driver %");
305
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Driver %");
296
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Driver %");
306 297
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("Idatzi DAC EEPROM");
307 298
   LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE   = _UxGT("HARIZPIA ALDATU");
308 299
   LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD    = _UxGT("HARIZPIA KARGATU");

+ 1
- 1
Marlin/src/lcd/language/language_fi.h Ver fichero

@@ -71,7 +71,7 @@ namespace Language_fi {
71 71
   LSTR MSG_MOVE_Z                         = _UxGT("Liikuta Z");
72 72
   LSTR MSG_MOVE_E                         = _UxGT("Extruder");
73 73
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
74
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Liikuta %smm");
74
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Liikuta $mm");
75 75
   LSTR MSG_MOVE_01MM                      = _UxGT("Liikuta 0.1mm");
76 76
   LSTR MSG_MOVE_1MM                       = _UxGT("Liikuta 1mm");
77 77
   LSTR MSG_MOVE_10MM                      = _UxGT("Liikuta 10mm");

+ 11
- 32
Marlin/src/lcd/language/language_fr.h Ver fichero

@@ -72,9 +72,6 @@ namespace Language_fr {
72 72
   LSTR MSG_HOME_OFFSET_X                  = _UxGT("Décal. origine X");
73 73
   LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Décal. origine Y");
74 74
   LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Décal. origine Z");
75
-  LSTR MSG_HOME_OFFSET_I                  = _UxGT("Décal. origine ") STR_I;
76
-  LSTR MSG_HOME_OFFSET_J                  = _UxGT("Décal. origine ") STR_J;
77
-  LSTR MSG_HOME_OFFSET_K                  = _UxGT("Décal. origine ") STR_K;
78 75
   LSTR MSG_HOME_OFFSETS_APPLIED           = _UxGT("Décalages appliqués");
79 76
   LSTR MSG_TRAMMING_WIZARD                = _UxGT("Assistant Molettes");
80 77
   LSTR MSG_SELECT_ORIGIN                  = _UxGT("Molette du lit"); // Not a selection of the origin
@@ -233,13 +230,11 @@ namespace Language_fr {
233 230
   LSTR MSG_MOVE_X                         = _UxGT("Déplacer X");
234 231
   LSTR MSG_MOVE_Y                         = _UxGT("Déplacer Y");
235 232
   LSTR MSG_MOVE_Z                         = _UxGT("Déplacer Z");
236
-  LSTR MSG_MOVE_I                         = _UxGT("Déplacer ") STR_I;
237
-  LSTR MSG_MOVE_J                         = _UxGT("Déplacer ") STR_J;
238
-  LSTR MSG_MOVE_K                         = _UxGT("Déplacer ") STR_K;
233
+  LSTR MSG_MOVE_N                         = _UxGT("Déplacer @");
239 234
   LSTR MSG_MOVE_E                         = _UxGT("Extruder");
240 235
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
241 236
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Buse trop froide");
242
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Déplacer %smm");
237
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Déplacer $mm");
243 238
   LSTR MSG_MOVE_01MM                      = _UxGT("Déplacer 0.1mm");
244 239
   LSTR MSG_MOVE_1MM                       = _UxGT("Déplacer 1mm");
245 240
   LSTR MSG_MOVE_10MM                      = _UxGT("Déplacer 10mm");
@@ -282,18 +277,14 @@ namespace Language_fr {
282 277
   LSTR MSG_VA_JERK                        = _UxGT("V") STR_A _UxGT(" jerk");
283 278
   LSTR MSG_VB_JERK                        = _UxGT("V") STR_B _UxGT(" jerk");
284 279
   LSTR MSG_VC_JERK                        = _UxGT("V") STR_C _UxGT(" jerk");
285
-  LSTR MSG_VI_JERK                        = _UxGT("V") STR_I _UxGT(" jerk");
286
-  LSTR MSG_VJ_JERK                        = _UxGT("V") STR_J _UxGT(" jerk");
287
-  LSTR MSG_VK_JERK                        = _UxGT("V") STR_K _UxGT(" jerk");
280
+  LSTR MSG_VN_JERK                        = _UxGT("V@ jerk");
288 281
   LSTR MSG_VE_JERK                        = _UxGT("Ve jerk");
289
-  LSTR MSG_VELOCITY                       = _UxGT("Vélocité");
282
+  LSTR MSG_MAX_SPEED                      = _UxGT("Max Vélocité");
290 283
   LSTR MSG_VMAX_A                         = _UxGT("Vit. Max ") STR_A;
291 284
   LSTR MSG_VMAX_B                         = _UxGT("Vit. Max ") STR_B;
292 285
   LSTR MSG_VMAX_C                         = _UxGT("Vit. Max ") STR_C;
293
-  LSTR MSG_VMAX_I                         = _UxGT("Vit. Max ") STR_I;
294
-  LSTR MSG_VMAX_J                         = _UxGT("Vit. Max ") STR_J;
295
-  LSTR MSG_VMAX_K                         = _UxGT("Vit. Max ") STR_K;
296
-  LSTR MSG_VMAX_E                         = _UxGT("Vit. Max ") STR_E;
286
+  LSTR MSG_VMAX_N                         = _UxGT("Vit. Max @");
287
+  LSTR MSG_VMAX_E                         = _UxGT("Vit. Max E");
297 288
   LSTR MSG_VMAX_EN                        = _UxGT("Vit. Max *");
298 289
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Déviat. jonct.");
299 290
   LSTR MSG_VMIN                           = _UxGT("Vit. Min");
@@ -302,10 +293,8 @@ namespace Language_fr {
302 293
   LSTR MSG_AMAX_A                         = _UxGT("Max Accél. ") STR_A;
303 294
   LSTR MSG_AMAX_B                         = _UxGT("Max Accél. ") STR_B;
304 295
   LSTR MSG_AMAX_C                         = _UxGT("Max Accél. ") STR_C;
305
-  LSTR MSG_AMAX_I                         = _UxGT("Max Accél. ") STR_I;
306
-  LSTR MSG_AMAX_J                         = _UxGT("Max Accél. ") STR_J;
307
-  LSTR MSG_AMAX_K                         = _UxGT("Max Accél. ") STR_K;
308
-  LSTR MSG_AMAX_E                         = _UxGT("Max Accél. ") STR_E;
296
+  LSTR MSG_AMAX_N                         = _UxGT("Max Accél. @");
297
+  LSTR MSG_AMAX_E                         = _UxGT("Max Accél. E");
309 298
   LSTR MSG_AMAX_EN                        = _UxGT("Max Accél. *");
310 299
   LSTR MSG_A_RETRACT                      = _UxGT("Acc.rétraction");
311 300
   LSTR MSG_A_TRAVEL                       = _UxGT("Acc.course");
@@ -315,9 +304,7 @@ namespace Language_fr {
315 304
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" pas/mm");
316 305
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" pas/mm");
317 306
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" pas/mm");
318
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" pas/mm");
319
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" pas/mm");
320
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" pas/mm");
307
+  LSTR MSG_N_STEPS                        = _UxGT("@ pas/mm");
321 308
   LSTR MSG_E_STEPS                        = _UxGT("E pas/mm");
322 309
   LSTR MSG_EN_STEPS                       = _UxGT("* pas/mm");
323 310
   LSTR MSG_TEMPERATURE                    = _UxGT("Température");
@@ -443,9 +430,7 @@ namespace Language_fr {
443 430
   LSTR MSG_BABYSTEP_X                     = _UxGT("Babystep X");
444 431
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Babystep Y");
445 432
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Babystep Z");
446
-  LSTR MSG_BABYSTEP_I                     = _UxGT("Babystep ") STR_I;
447
-  LSTR MSG_BABYSTEP_J                     = _UxGT("Babystep ") STR_J;
448
-  LSTR MSG_BABYSTEP_K                     = _UxGT("Babystep ") STR_K;
433
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Babystep @");
449 434
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Total");
450 435
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Butée abandon");
451 436
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Err de chauffe");
@@ -521,13 +506,7 @@ namespace Language_fr {
521 506
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Temp Max");
522 507
   LSTR MSG_INFO_PSU                       = _UxGT("Alim.");
523 508
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Puiss. moteur ");
524
-  LSTR MSG_DAC_PERCENT_A                  = _UxGT("Driver ") STR_A _UxGT(" %");
525
-  LSTR MSG_DAC_PERCENT_B                  = _UxGT("Driver ") STR_B _UxGT(" %");
526
-  LSTR MSG_DAC_PERCENT_C                  = _UxGT("Driver ") STR_C _UxGT(" %");
527
-  LSTR MSG_DAC_PERCENT_I                  = _UxGT("Driver ") STR_I _UxGT(" %");
528
-  LSTR MSG_DAC_PERCENT_J                  = _UxGT("Driver ") STR_J _UxGT(" %");
529
-  LSTR MSG_DAC_PERCENT_K                  = _UxGT("Driver ") STR_K _UxGT(" %");
530
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("Driver E %");
509
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("Driver @ %");
531 510
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("DAC EEPROM sauv.");
532 511
   LSTR MSG_ERROR_TMC                      = _UxGT("ERREUR CONNEXION TMC");
533 512
 

+ 13
- 27
Marlin/src/lcd/language/language_gl.h Ver fichero

@@ -226,7 +226,7 @@ namespace Language_gl {
226 226
   LSTR MSG_MOVE_E                         = _UxGT("Extrusor");
227 227
   LSTR MSG_MOVE_EN                        = _UxGT("Extrusor *");
228 228
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Bico moi frío");
229
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover %smm");
229
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
230 230
   LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
231 231
   LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
232 232
   LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
@@ -271,30 +271,23 @@ namespace Language_gl {
271 271
   LSTR MSG_VA_JERK                        = _UxGT("Max ") STR_A _UxGT(" Jerk");
272 272
   LSTR MSG_VB_JERK                        = _UxGT("Max ") STR_B _UxGT(" Jerk");
273 273
   LSTR MSG_VC_JERK                        = _UxGT("Max ") STR_C _UxGT(" Jerk");
274
-  LSTR MSG_VI_JERK                        = _UxGT("Max ") STR_I _UxGT(" Jerk");
275
-  LSTR MSG_VJ_JERK                        = _UxGT("Max ") STR_J _UxGT(" Jerk");
276
-  LSTR MSG_VK_JERK                        = _UxGT("Max ") STR_K _UxGT(" Jerk");
274
+  LSTR MSG_VN_JERK                        = _UxGT("Max @ Jerk");
277 275
   LSTR MSG_VE_JERK                        = _UxGT("Max E Jerk");
278 276
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Desvío Unión");
279
-  LSTR MSG_VELOCITY                       = _UxGT("Velocidade");
280
-  LSTR MSG_VMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Vel");
281
-  LSTR MSG_VMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Vel");
282
-  LSTR MSG_VMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Vel");
283
-  LSTR MSG_VMAX_I                         = _UxGT("Max ") STR_I _UxGT(" Vel");
284
-  LSTR MSG_VMAX_J                         = _UxGT("Max ") STR_J _UxGT(" Vel");
285
-  LSTR MSG_VMAX_K                         = _UxGT("Max ") STR_K _UxGT(" Vel");
286
-  LSTR MSG_VMAX_E                         = _UxGT("Max ") STR_E _UxGT(" Vel");
287
-  LSTR MSG_VMAX_EN                        = _UxGT("Max * Vel");
277
+  LSTR MSG_MAX_SPEED                      = _UxGT("Max Velocidade");
278
+  LSTR MSG_VMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Speed");
279
+  LSTR MSG_VMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Speed");
280
+  LSTR MSG_VMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Speed");
281
+  LSTR MSG_VMAX_N                         = _UxGT("Max @ Speed");
282
+  LSTR MSG_VMAX_E                         = _UxGT("Max E Speed");
283
+  LSTR MSG_VMAX_EN                        = _UxGT("Max * Speed");
288 284
   LSTR MSG_VMIN                           = _UxGT("Vmin");
289 285
   LSTR MSG_VTRAV_MIN                      = _UxGT("V-viaxe min");
290 286
   LSTR MSG_ACCELERATION                   = _UxGT("Aceleración");
291 287
   LSTR MSG_AMAX_A                         = _UxGT("Max ") STR_A _UxGT(" Accel");
292 288
   LSTR MSG_AMAX_B                         = _UxGT("Max ") STR_B _UxGT(" Accel");
293 289
   LSTR MSG_AMAX_C                         = _UxGT("Max ") STR_C _UxGT(" Accel");
294
-  LSTR MSG_AMAX_I                         = _UxGT("Max ") STR_I _UxGT(" Accel");
295
-  LSTR MSG_AMAX_J                         = _UxGT("Max ") STR_J _UxGT(" Accel");
296
-  LSTR MSG_AMAX_K                         = _UxGT("Max ") STR_K _UxGT(" Accel");
297
-  LSTR MSG_AMAX_E                         = _UxGT("Max ") STR_E _UxGT(" Accel");
290
+  LSTR MSG_AMAX_E                         = _UxGT("Max E Accel");
298 291
   LSTR MSG_AMAX_EN                        = _UxGT("Max * Accel");
299 292
   LSTR MSG_A_RETRACT                      = _UxGT("A-retrac.");
300 293
   LSTR MSG_A_TRAVEL                       = _UxGT("A-viaxe");
@@ -304,9 +297,7 @@ namespace Language_gl {
304 297
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" pasos/mm");
305 298
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" pasos/mm");
306 299
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" pasos/mm");
307
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" pasos/mm");
308
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" pasos/mm");
309
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" pasos/mm");
300
+  LSTR MSG_N_STEPS                        = _UxGT("@ pasos/mm");
310 301
   LSTR MSG_E_STEPS                        = _UxGT("E pasos/mm");
311 302
   LSTR MSG_EN_STEPS                       = _UxGT("* pasos/mm");
312 303
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatura");
@@ -429,6 +420,7 @@ namespace Language_gl {
429 420
   LSTR MSG_BABYSTEP_X                     = _UxGT("Micropaso X");
430 421
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Micropaso Y");
431 422
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Micropaso Z");
423
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Micropaso @");
432 424
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Total");
433 425
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Erro FinCarro");
434 426
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Fallo Quentando");
@@ -496,13 +488,7 @@ namespace Language_gl {
496 488
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Temp Máx");
497 489
   LSTR MSG_INFO_PSU                       = _UxGT("Fonte Alimentación");
498 490
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Forza do Motor");
499
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Driver %");
500
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Driver %");
501
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Driver %");
502
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Driver %");
503
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Driver %");
504
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Driver %");
505
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Driver %");
491
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Driver %");
506 492
   LSTR MSG_ERROR_TMC                      = _UxGT("ERRO CONEX. TMC");
507 493
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("Escribe DAC EEPROM");
508 494
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("CAMBIAR FILAMENTO");

+ 1
- 1
Marlin/src/lcd/language/language_hr.h Ver fichero

@@ -78,7 +78,7 @@ namespace Language_hr {
78 78
   LSTR MSG_LEVEL_BED                      = _UxGT("Niveliraj bed");
79 79
   LSTR MSG_MOVE_X                         = _UxGT("Miči X");
80 80
   LSTR MSG_MOVE_Y                         = _UxGT("Miči Y");
81
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Miči %smm");
81
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Miči $mm");
82 82
   LSTR MSG_MOVE_01MM                      = _UxGT("Miči 0.1mm");
83 83
   LSTR MSG_MOVE_1MM                       = _UxGT("Miči 1mm");
84 84
   LSTR MSG_MOVE_10MM                      = _UxGT("Miči 10mm");

+ 11
- 32
Marlin/src/lcd/language/language_hu.h Ver fichero

@@ -79,9 +79,6 @@ namespace Language_hu {
79 79
   LSTR MSG_HOME_OFFSET_X                  = _UxGT("X Kezdö eltol.");
80 80
   LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Y Kezdö eltol.");
81 81
   LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Z Kezdö eltol.");
82
-  LSTR MSG_HOME_OFFSET_I                  = _UxGT("Kezdö eltol. ") STR_I;
83
-  LSTR MSG_HOME_OFFSET_J                  = _UxGT("Kezdö eltol. ") STR_J;
84
-  LSTR MSG_HOME_OFFSET_K                  = _UxGT("Kezdö eltol. ") STR_K;
85 82
   LSTR MSG_HOME_OFFSETS_APPLIED           = _UxGT("Eltolás beállítva.");
86 83
   LSTR MSG_TRAMMING_WIZARD                = _UxGT("Elektromos varázsló");
87 84
   LSTR MSG_SELECT_ORIGIN                  = _UxGT("Eredeti választása");
@@ -259,13 +256,11 @@ namespace Language_hu {
259 256
   LSTR MSG_MOVE_X                         = _UxGT("X mozgás");
260 257
   LSTR MSG_MOVE_Y                         = _UxGT("Y mozgás");
261 258
   LSTR MSG_MOVE_Z                         = _UxGT("Z mozgás");
262
-  LSTR MSG_MOVE_I                         = _UxGT("Mozgás ") STR_I;
263
-  LSTR MSG_MOVE_J                         = _UxGT("Mozgás ") STR_J;
264
-  LSTR MSG_MOVE_K                         = _UxGT("Mozgás ") STR_K;
259
+  LSTR MSG_MOVE_N                         = _UxGT("@ mozgás");
265 260
   LSTR MSG_MOVE_E                         = _UxGT("Adagoló");
266 261
   LSTR MSG_MOVE_EN                        = _UxGT("Adagoló *");
267 262
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("A fej túl hideg");
268
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Mozgás %smm");
263
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Mozgás $mm");
269 264
   LSTR MSG_MOVE_01MM                      = _UxGT("Mozgás 0.1mm");
270 265
   LSTR MSG_MOVE_1MM                       = _UxGT("Mozgás 1mm");
271 266
   LSTR MSG_MOVE_10MM                      = _UxGT("Mozgás 10mm");
@@ -319,19 +314,15 @@ namespace Language_hu {
319 314
   LSTR MSG_VA_JERK                        = _UxGT("Seb.") STR_A _UxGT("-Rántás");
320 315
   LSTR MSG_VB_JERK                        = _UxGT("Seb.") STR_B _UxGT("-Rántás");
321 316
   LSTR MSG_VC_JERK                        = _UxGT("Seb.") STR_C _UxGT("-Rántás");
322
-  LSTR MSG_VI_JERK                        = _UxGT("Seb.") STR_I _UxGT("-Rántás");
323
-  LSTR MSG_VJ_JERK                        = _UxGT("Seb.") STR_J _UxGT("-Rántás");
324
-  LSTR MSG_VK_JERK                        = _UxGT("Seb.") STR_K _UxGT("-Rántás");
317
+  LSTR MSG_VN_JERK                        = _UxGT("Seb.@-Rántás");
325 318
   LSTR MSG_VE_JERK                        = _UxGT("E ránt. seb.");
326 319
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Csomopont eltérés");
327
-  LSTR MSG_VELOCITY                       = _UxGT("Sebesség");
320
+  LSTR MSG_MAX_SPEED                      = _UxGT("Max Sebesség (mm/s)");
328 321
   LSTR MSG_VMAX_A                         = _UxGT("Max Seb. ") STR_A;
329 322
   LSTR MSG_VMAX_B                         = _UxGT("Max Seb. ") STR_B;
330 323
   LSTR MSG_VMAX_C                         = _UxGT("Max Seb. ") STR_C;
331
-  LSTR MSG_VMAX_I                         = _UxGT("Max Seb. ") STR_I;
332
-  LSTR MSG_VMAX_J                         = _UxGT("Max Seb. ") STR_J;
333
-  LSTR MSG_VMAX_K                         = _UxGT("Max Seb. ") STR_K;
334
-  LSTR MSG_VMAX_E                         = _UxGT("Max Seb. ") STR_E;
324
+  LSTR MSG_VMAX_N                         = _UxGT("Max Seb. @");
325
+  LSTR MSG_VMAX_E                         = _UxGT("Max Seb. E");
335 326
   LSTR MSG_VMAX_EN                        = _UxGT("Max sebesség *");
336 327
   LSTR MSG_VMIN                           = _UxGT("Min sebesség");
337 328
   LSTR MSG_VTRAV_MIN                      = _UxGT("Min utazó.seb.");
@@ -339,10 +330,8 @@ namespace Language_hu {
339 330
   LSTR MSG_AMAX_A                         = _UxGT("Max gyors. ") STR_A;
340 331
   LSTR MSG_AMAX_B                         = _UxGT("Max gyors. ") STR_B;
341 332
   LSTR MSG_AMAX_C                         = _UxGT("Max gyors. ") STR_C;
342
-  LSTR MSG_AMAX_I                         = _UxGT("Max gyors. ") STR_I;
343
-  LSTR MSG_AMAX_J                         = _UxGT("Max gyors. ") STR_J;
344
-  LSTR MSG_AMAX_K                         = _UxGT("Max gyors. ") STR_K;
345
-  LSTR MSG_AMAX_E                         = _UxGT("Max gyors. ") STR_E;
333
+  LSTR MSG_AMAX_N                         = _UxGT("Max gyors. @");
334
+  LSTR MSG_AMAX_E                         = _UxGT("Max gyors. E");
346 335
   LSTR MSG_AMAX_EN                        = _UxGT("Max gyorsulás *");
347 336
   LSTR MSG_A_RETRACT                      = _UxGT("Visszahúzás");
348 337
   LSTR MSG_A_TRAVEL                       = _UxGT("Utazás");
@@ -352,9 +341,7 @@ namespace Language_hu {
352 341
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" Lépés/mm");
353 342
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" Lépés/mm");
354 343
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" Lépés/mm");
355
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" Lépés/mm");
356
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" Lépés/mm");
357
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" Lépés/mm");
344
+  LSTR MSG_N_STEPS                        = _UxGT("@ lépés/mm");
358 345
   LSTR MSG_E_STEPS                        = _UxGT("E lépés/mm");
359 346
   LSTR MSG_EN_STEPS                       = _UxGT("*Lépés/mm");
360 347
   LSTR MSG_TEMPERATURE                    = _UxGT("Höfok");
@@ -488,9 +475,7 @@ namespace Language_hu {
488 475
   LSTR MSG_BABYSTEP_X                     = _UxGT("Mikrolépés X");
489 476
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Mikrolépés Y");
490 477
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Mikrolépés Z");
491
-  LSTR MSG_BABYSTEP_I                     = _UxGT("Mikrolépés ") STR_I;
492
-  LSTR MSG_BABYSTEP_J                     = _UxGT("Mikrolépés ") STR_J;
493
-  LSTR MSG_BABYSTEP_K                     = _UxGT("Mikrolépés ") STR_K;
478
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Mikrolépés @");
494 479
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Teljes");
495 480
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Végállás megszakítva!");
496 481
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Fütés hiba!");
@@ -568,13 +553,7 @@ namespace Language_hu {
568 553
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Max höfok");
569 554
   LSTR MSG_INFO_PSU                       = _UxGT("PSU");
570 555
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Meghajtási erö");
571
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Meghajtó %");
572
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Meghajtó %");
573
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Meghajtó %");
574
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Meghajtó %");
575
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Meghajtó %");
576
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Meghajtó %");
577
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E meghajtó %");
556
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ meghajtó %");
578 557
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC CSATLAKOZÁSI HIBA");
579 558
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("DAC EEPROM írása");
580 559
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("NYOMTATÓSZÁL CSERE");

+ 13
- 66
Marlin/src/lcd/language/language_it.h Ver fichero

@@ -27,10 +27,9 @@
27 27
  * LCD Menu Messages
28 28
  * See also https://marlinfw.org/docs/development/lcd_language.html
29 29
  *
30
- * Substitutions are applied for the following characters when used
31
- * in menu items that call lcd_put_u8str_ind_P with an index:
30
+ * Substitutions are applied for the following characters when used in menu items titles:
32 31
  *
33
- *   $ displays an inserted C-string
32
+ *   $ displays an inserted string
34 33
  *   = displays  '0'....'10' for indexes 0 - 10
35 34
  *   ~ displays  '1'....'11' for indexes 0 - 10
36 35
  *   * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
@@ -95,12 +94,6 @@ namespace Language_it {
95 94
   LSTR MSG_HOME_OFFSET_X                  = _UxGT("Offset home X");
96 95
   LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Offset home Y");
97 96
   LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Offset home Z");
98
-  LSTR MSG_HOME_OFFSET_I                  = _UxGT("Offset home ") STR_I;
99
-  LSTR MSG_HOME_OFFSET_J                  = _UxGT("Offset home ") STR_J;
100
-  LSTR MSG_HOME_OFFSET_K                  = _UxGT("Offset home ") STR_K;
101
-  LSTR MSG_HOME_OFFSET_U                  = _UxGT("Offset home ") STR_U;
102
-  LSTR MSG_HOME_OFFSET_V                  = _UxGT("Offset home ") STR_V;
103
-  LSTR MSG_HOME_OFFSET_W                  = _UxGT("Offset home ") STR_W;
104 97
   LSTR MSG_HOME_OFFSETS_APPLIED           = _UxGT("Offset applicato");
105 98
   LSTR MSG_TRAMMING_WIZARD                = _UxGT("Wizard Tramming");
106 99
   LSTR MSG_SELECT_ORIGIN                  = _UxGT("Selez. origine");
@@ -284,16 +277,11 @@ namespace Language_it {
284 277
   LSTR MSG_MOVE_X                         = _UxGT("Muovi X");
285 278
   LSTR MSG_MOVE_Y                         = _UxGT("Muovi Y");
286 279
   LSTR MSG_MOVE_Z                         = _UxGT("Muovi Z");
287
-  LSTR MSG_MOVE_I                         = _UxGT("Muovi ") STR_I;
288
-  LSTR MSG_MOVE_J                         = _UxGT("Muovi ") STR_J;
289
-  LSTR MSG_MOVE_K                         = _UxGT("Muovi ") STR_K;
290
-  LSTR MSG_MOVE_U                         = _UxGT("Muovi ") STR_U;
291
-  LSTR MSG_MOVE_V                         = _UxGT("Muovi ") STR_V;
292
-  LSTR MSG_MOVE_W                         = _UxGT("Muovi ") STR_W;
280
+  LSTR MSG_MOVE_N                         = _UxGT("Muovi @");
293 281
   LSTR MSG_MOVE_E                         = _UxGT("Estrusore");
294 282
   LSTR MSG_MOVE_EN                        = _UxGT("Estrusore *");
295 283
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Ugello freddo");
296
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Muovi di %smm");
284
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Muovi di $mm");
297 285
   LSTR MSG_MOVE_01MM                      = _UxGT("Muovi di 0.1mm");
298 286
   LSTR MSG_MOVE_1MM                       = _UxGT("Muovi di 1mm");
299 287
   LSTR MSG_MOVE_10MM                      = _UxGT("Muovi di 10mm");
@@ -302,13 +290,6 @@ namespace Language_it {
302 290
   LSTR MSG_MOVE_001IN                     = _UxGT("Muovi di 0.01\"");
303 291
   LSTR MSG_MOVE_01IN                      = _UxGT("Muovi di 0.1\"");
304 292
   LSTR MSG_MOVE_1IN                       = _UxGT("Muovi di 1\"");
305
-  LSTR MSG_SPEED                          = _UxGT("Velocità");
306
-  LSTR MSG_MAXSPEED                       = _UxGT("Vel.massima (mm/s)");
307
-  LSTR MSG_MAXSPEED_X                     = _UxGT("Vel.massima ") STR_A;
308
-  LSTR MSG_MAXSPEED_Y                     = _UxGT("Vel.massima ") STR_B;
309
-  LSTR MSG_MAXSPEED_Z                     = _UxGT("Vel.massima ") STR_C;
310
-  LSTR MSG_MAXSPEED_E                     = _UxGT("Vel.massima ") STR_E;
311
-  LSTR MSG_MAXSPEED_A                     = _UxGT("Vel.massima @");
312 293
   LSTR MSG_BED_Z                          = _UxGT("Piatto Z");
313 294
   LSTR MSG_NOZZLE                         = _UxGT("Ugello");
314 295
   LSTR MSG_NOZZLE_N                       = _UxGT("Ugello ~");
@@ -361,25 +342,15 @@ namespace Language_it {
361 342
   LSTR MSG_VA_JERK                        = _UxGT("Max Jerk ") STR_A;
362 343
   LSTR MSG_VB_JERK                        = _UxGT("Max Jerk ") STR_B;
363 344
   LSTR MSG_VC_JERK                        = _UxGT("Max Jerk ") STR_C;
364
-  LSTR MSG_VI_JERK                        = _UxGT("Max Jerk ") STR_I;
365
-  LSTR MSG_VJ_JERK                        = _UxGT("Max Jerk ") STR_J;
366
-  LSTR MSG_VK_JERK                        = _UxGT("Max Jerk ") STR_K;
367
-  LSTR MSG_VU_JERK                        = _UxGT("Max Jerk ") STR_U;
368
-  LSTR MSG_VV_JERK                        = _UxGT("Max Jerk ") STR_V;
369
-  LSTR MSG_VW_JERK                        = _UxGT("Max Jerk ") STR_W;
345
+  LSTR MSG_VN_JERK                        = _UxGT("Max Jerk @");
370 346
   LSTR MSG_VE_JERK                        = _UxGT("Max Jerk E");
371 347
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Deviaz. giunzioni");
372
-  LSTR MSG_VELOCITY                       = _UxGT("Velocità");
348
+  LSTR MSG_MAX_SPEED                      = _UxGT("Vel.massima (mm/s)");
373 349
   LSTR MSG_VMAX_A                         = _UxGT("Vel.Massima ") STR_A;
374 350
   LSTR MSG_VMAX_B                         = _UxGT("Vel.Massima ") STR_B;
375 351
   LSTR MSG_VMAX_C                         = _UxGT("Vel.Massima ") STR_C;
376
-  LSTR MSG_VMAX_I                         = _UxGT("Vel.Massima ") STR_I;
377
-  LSTR MSG_VMAX_J                         = _UxGT("Vel.Massima ") STR_J;
378
-  LSTR MSG_VMAX_K                         = _UxGT("Vel.Massima ") STR_K;
379
-  LSTR MSG_VMAX_U                         = _UxGT("Vel.Massima ") STR_U;
380
-  LSTR MSG_VMAX_V                         = _UxGT("Vel.Massima ") STR_V;
381
-  LSTR MSG_VMAX_W                         = _UxGT("Vel.Massima ") STR_W;
382
-  LSTR MSG_VMAX_E                         = _UxGT("Vel.Massima ") STR_E;
352
+  LSTR MSG_VMAX_N                         = _UxGT("Vel.Massima @");
353
+  LSTR MSG_VMAX_E                         = _UxGT("Vel.Massima E");
383 354
   LSTR MSG_VMAX_EN                        = _UxGT("Vel.Massima *");
384 355
   LSTR MSG_VMIN                           = _UxGT("Vel.Minima");
385 356
   LSTR MSG_VTRAV_MIN                      = _UxGT("Vel.Min spostam.");
@@ -387,13 +358,8 @@ namespace Language_it {
387 358
   LSTR MSG_AMAX_A                         = _UxGT("Acc.Massima ") STR_A;
388 359
   LSTR MSG_AMAX_B                         = _UxGT("Acc.Massima ") STR_B;
389 360
   LSTR MSG_AMAX_C                         = _UxGT("Acc.Massima ") STR_C;
390
-  LSTR MSG_AMAX_I                         = _UxGT("Acc.Massima ") STR_I;
391
-  LSTR MSG_AMAX_J                         = _UxGT("Acc.Massima ") STR_J;
392
-  LSTR MSG_AMAX_K                         = _UxGT("Acc.Massima ") STR_K;
393
-  LSTR MSG_AMAX_E                         = _UxGT("Acc.Massima ") STR_E;
394
-  LSTR MSG_AMAX_U                         = _UxGT("Acc.Massima ") STR_U;
395
-  LSTR MSG_AMAX_V                         = _UxGT("Acc.Massima ") STR_V;
396
-  LSTR MSG_AMAX_W                         = _UxGT("Acc.Massima ") STR_W;
361
+  LSTR MSG_AMAX_N                         = _UxGT("Acc.Massima @");
362
+  LSTR MSG_AMAX_E                         = _UxGT("Acc.Massima E");
397 363
   LSTR MSG_AMAX_EN                        = _UxGT("Acc.Massima *");
398 364
   LSTR MSG_A_RETRACT                      = _UxGT("A-Ritrazione");
399 365
   LSTR MSG_A_TRAVEL                       = _UxGT("A-Spostamento");
@@ -403,12 +369,7 @@ namespace Language_it {
403 369
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" passi/mm");
404 370
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" passi/mm");
405 371
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" passi/mm");
406
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" passi/mm");
407
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" passi/mm");
408
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" passi/mm");
409
-  LSTR MSG_U_STEPS                        = STR_U _UxGT(" passi/mm");
410
-  LSTR MSG_V_STEPS                        = STR_V _UxGT(" passi/mm");
411
-  LSTR MSG_W_STEPS                        = STR_W _UxGT(" passi/mm");
372
+  LSTR MSG_N_STEPS                        = _UxGT("@ passi/mm");
412 373
   LSTR MSG_E_STEPS                        = _UxGT("E passi/mm");
413 374
   LSTR MSG_EN_STEPS                       = _UxGT("* passi/mm");
414 375
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatura");
@@ -560,12 +521,7 @@ namespace Language_it {
560 521
   LSTR MSG_BABYSTEP_X                     = _UxGT("Babystep X");
561 522
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Babystep Y");
562 523
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Babystep Z");
563
-  LSTR MSG_BABYSTEP_I                     = _UxGT("Babystep ") STR_I;
564
-  LSTR MSG_BABYSTEP_J                     = _UxGT("Babystep ") STR_J;
565
-  LSTR MSG_BABYSTEP_K                     = _UxGT("Babystep ") STR_K;
566
-  LSTR MSG_BABYSTEP_U                     = _UxGT("Babystep ") STR_U;
567
-  LSTR MSG_BABYSTEP_V                     = _UxGT("Babystep ") STR_V;
568
-  LSTR MSG_BABYSTEP_W                     = _UxGT("Babystep ") STR_W;
524
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Babystep @");
569 525
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Totali");
570 526
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Interrompi se FC");
571 527
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Risc.Fallito");   // Max 12 characters
@@ -658,16 +614,7 @@ namespace Language_it {
658 614
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Temp max");
659 615
   LSTR MSG_INFO_PSU                       = _UxGT("Alimentatore");
660 616
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Potenza Drive");
661
-  LSTR MSG_DAC_PERCENT_A                  = _UxGT("Driver ") STR_A _UxGT(" %");
662
-  LSTR MSG_DAC_PERCENT_B                  = _UxGT("Driver ") STR_B _UxGT(" %");
663
-  LSTR MSG_DAC_PERCENT_C                  = _UxGT("Driver ") STR_C _UxGT(" %");
664
-  LSTR MSG_DAC_PERCENT_I                  = _UxGT("Driver ") STR_I _UxGT(" %");
665
-  LSTR MSG_DAC_PERCENT_J                  = _UxGT("Driver ") STR_J _UxGT(" %");
666
-  LSTR MSG_DAC_PERCENT_K                  = _UxGT("Driver ") STR_K _UxGT(" %");
667
-  LSTR MSG_DAC_PERCENT_U                  = _UxGT("Driver ") STR_U _UxGT(" %");
668
-  LSTR MSG_DAC_PERCENT_V                  = _UxGT("Driver ") STR_V _UxGT(" %");
669
-  LSTR MSG_DAC_PERCENT_W                  = _UxGT("Driver ") STR_W _UxGT(" %");
670
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("Driver E %");
617
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("Driver @ %");
671 618
   LSTR MSG_ERROR_TMC                      = _UxGT("ERR.CONNESSIONE TMC");
672 619
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("Scrivi DAC EEPROM");
673 620
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("CAMBIO FILAMENTO");

+ 6
- 16
Marlin/src/lcd/language/language_jp_kana.h Ver fichero

@@ -93,7 +93,7 @@ namespace Language_jp_kana {
93 93
   LSTR MSG_MOVE_Y                         = _UxGT("Yジク イドウ");                  // "Move Y"
94 94
   LSTR MSG_MOVE_Z                         = _UxGT("Zジク イドウ");                  // "Move Z"
95 95
   LSTR MSG_MOVE_E                         = _UxGT("エクストルーダー");                // "Extruder"
96
-  LSTR MSG_MOVE_N_MM                      = _UxGT("%smm イドウ");                  // "Move 0.025mm"
96
+  LSTR MSG_MOVE_N_MM                      = _UxGT("$mm イドウ");                    // "Move 0.025mm"
97 97
   LSTR MSG_MOVE_01MM                      = _UxGT("0.1mm イドウ");                 // "Move 0.1mm"
98 98
   LSTR MSG_MOVE_1MM                       = _UxGT("  1mm イドウ");                 // "Move 1mm"
99 99
   LSTR MSG_MOVE_10MM                      = _UxGT(" 10mm イドウ");                 // "Move 10mm"
@@ -118,20 +118,16 @@ namespace Language_jp_kana {
118 118
   LSTR MSG_VA_JERK                        = _UxGT("ジク ヤクドウ mm/s") STR_A;             // "Va-jerk"
119 119
   LSTR MSG_VB_JERK                        = _UxGT("ジク ヤクドウ mm/s") STR_B;             // "Vb-jerk"
120 120
   LSTR MSG_VC_JERK                        = _UxGT("ジク ヤクドウ mm/s") STR_C;             // "Vc-jerk"
121
-  LSTR MSG_VI_JERK                        = _UxGT("ジク ヤクドウ mm/s") STR_I;             // "Va-jerk"
122
-  LSTR MSG_VJ_JERK                        = _UxGT("ジク ヤクドウ mm/s") STR_J;             // "Vb-jerk"
123
-  LSTR MSG_VK_JERK                        = _UxGT("ジク ヤクドウ mm/s") STR_K;             // "Vc-jerk"
121
+  LSTR MSG_VN_JERK                        = _UxGT("ジク ヤクドウ mm/s@");                  // "V@-jerk"
124 122
   LSTR MSG_A_STEPS                        = STR_A _UxGT("ステップ/mm");
125 123
   LSTR MSG_B_STEPS                        = STR_B _UxGT("ステップ/mm");
126 124
   LSTR MSG_C_STEPS                        = STR_C _UxGT("ステップ/mm");
125
+  LSTR MSG_N_STEPS                        = _UxGT("@ステップ/mm");
127 126
   LSTR MSG_VE_JERK                        = _UxGT("エクストルーダー ヤクド");          // "Ve-jerk"
128 127
   LSTR MSG_VMAX_A                         = _UxGT("サイダイオクリソクド ") STR_A;  // "Vmax A"
129 128
   LSTR MSG_VMAX_B                         = _UxGT("サイダイオクリソクド ") STR_B;  // "Vmax B"
130 129
   LSTR MSG_VMAX_C                         = _UxGT("サイダイオクリソクド ") STR_C;  // "Vmax C"
131
-  LSTR MSG_VMAX_I                         = _UxGT("サイダイオクリソクド ") STR_I;  // "Vmax I"
132
-  LSTR MSG_VMAX_J                         = _UxGT("サイダイオクリソクド ") STR_J;  // "Vmax J"
133
-  LSTR MSG_VMAX_K                         = _UxGT("サイダイオクリソクド ") STR_K;  // "Vmax K"
134
-  LSTR MSG_VMAX_E                         = _UxGT("サイダイオクリソクド ") STR_E;  // "Vmax E"
130
+  LSTR MSG_VMAX_E                         = _UxGT("サイダイオクリソクド E");  // "Vmax E"
135 131
   LSTR MSG_VMAX_EN                        = _UxGT("サイダイオクリソクド *");  // "Vmax E1"
136 132
   LSTR MSG_VMIN                           = _UxGT("サイショウオクリソクド");           // "Vmin"
137 133
   LSTR MSG_VTRAV_MIN                      = _UxGT("サイショウイドウソクド");           // "VTrav min"
@@ -215,13 +211,7 @@ namespace Language_jp_kana {
215 211
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("セッテイサイコウオン");              // "Max Temp"
216 212
   LSTR MSG_INFO_PSU                       = _UxGT("デンゲンシュベツ");                // "Power Supply"
217 213
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("モータークドウリョク");              // "Drive Strength"
218
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" DACシュツリョク %");      // "X Driver %"
219
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" DACシュツリョク %");      // "Y Driver %"
220
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" DACシュツリョク %");      // "Z Driver %"
221
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" DACシュツリョク %");      // "I Driver %"
222
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" DACシュツリョク %");      // "J Driver %"
223
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" DACシュツリョク %");      // "K Driver %"
224
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E DACシュツリョク %");               // "E Driver %"
214
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ DACシュツリョク %");               // "@ Driver %"
225 215
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("EEPROMヘホゾン");               // "Store memory"
226 216
   LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE   = _UxGT("イチジテイシ");
227 217
   LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME  = _UxGT("プリントサイカイ");                // "Resume print"
@@ -249,7 +239,7 @@ namespace Language_jp_kana {
249 239
   LSTR MSG_YES                            = _UxGT("ハイ");
250 240
   LSTR MSG_NO                             = _UxGT("イイエ");
251 241
   LSTR MSG_BACK                           = _UxGT("モドリ");
252
-  LSTR MSG_VELOCITY                       = _UxGT("ソクド");
242
+  LSTR MSG_MAX_SPEED                      = _UxGT("ソクド");
253 243
   LSTR MSG_STEPS_PER_MM                   = _UxGT("ステップ/mm");
254 244
   LSTR MSG_CUSTOM_COMMANDS                = _UxGT("ユーザーコマンド");
255 245
   LSTR MSG_PRINT_PAUSED                   = _UxGT("プリントガイチジテイシサレマシタ");

+ 2
- 1
Marlin/src/lcd/language/language_nl.h Ver fichero

@@ -86,7 +86,7 @@ namespace Language_nl {
86 86
   LSTR MSG_MOVE_Z                         = _UxGT("Verplaats Z");
87 87
   LSTR MSG_MOVE_E                         = _UxGT("Extruder");
88 88
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
89
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Verplaats %smm");
89
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Verplaats $mm");
90 90
   LSTR MSG_MOVE_01MM                      = _UxGT("Verplaats 0.1mm");
91 91
   LSTR MSG_MOVE_1MM                       = _UxGT("Verplaats 1mm");
92 92
   LSTR MSG_MOVE_10MM                      = _UxGT("Verplaats 10mm");
@@ -157,6 +157,7 @@ namespace Language_nl {
157 157
   LSTR MSG_BABYSTEP_X                     = _UxGT("Babystap X");
158 158
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Babystap Y");
159 159
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Babystap Z");
160
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Babystap @");
160 161
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Endstop afbr.");
161 162
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Voorverw. fout");
162 163
   LSTR MSG_ERR_REDUNDANT_TEMP             = _UxGT("Redun. temp fout");

+ 7
- 18
Marlin/src/lcd/language/language_pl.h Ver fichero

@@ -27,10 +27,9 @@
27 27
  * LCD Menu Messages
28 28
  * See also https://marlinfw.org/docs/development/lcd_language.html
29 29
  *
30
- * Substitutions are applied for the following characters when used
31
- * in menu items that call lcd_put_u8str_ind_P with an index:
30
+ * Substitutions are applied for the following characters when used in menu items titles:
32 31
  *
33
- *   $ displays an inserted C-string
32
+ *   $ displays an inserted string
34 33
  *   = displays  '0'....'10' for indexes 0 - 10
35 34
  *   ~ displays  '1'....'11' for indexes 0 - 10
36 35
  *   * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
@@ -239,7 +238,7 @@ namespace Language_pl {
239 238
   LSTR MSG_MOVE_E                         = _UxGT("Ekstruzja (os E)");
240 239
   LSTR MSG_MOVE_EN                        = _UxGT("Ekstruzja (os E) *");
241 240
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Dysza za zimna");
242
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Przesuń co %s mm");
241
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Przesuń co $ mm");
243 242
   LSTR MSG_MOVE_01MM                      = _UxGT("Przesuń co .1 mm");
244 243
   LSTR MSG_MOVE_1MM                       = _UxGT("Przesuń co 1 mm");
245 244
   LSTR MSG_MOVE_10MM                      = _UxGT("Przesuń co 10 mm");
@@ -276,11 +275,9 @@ namespace Language_pl {
276 275
   LSTR MSG_VA_JERK                        = _UxGT("Zryw V") STR_A;
277 276
   LSTR MSG_VB_JERK                        = _UxGT("Zryw V") STR_B;
278 277
   LSTR MSG_VC_JERK                        = _UxGT("Zryw V") STR_C;
279
-  LSTR MSG_VI_JERK                        = _UxGT("Zryw V") STR_I;
280
-  LSTR MSG_VJ_JERK                        = _UxGT("Zryw V") STR_J;
281
-  LSTR MSG_VK_JERK                        = _UxGT("Zryw V") STR_K;
278
+  LSTR MSG_VN_JERK                        = _UxGT("Zryw V@");
282 279
   LSTR MSG_VE_JERK                        = _UxGT("Zryw Ve");
283
-  LSTR MSG_VELOCITY                       = _UxGT("Prędkość (V)");
280
+  LSTR MSG_MAX_SPEED                      = _UxGT("Prędkość (V)");
284 281
 
285 282
   LSTR MSG_VTRAV_MIN                      = _UxGT("Vskok min");
286 283
   LSTR MSG_ACCELERATION                   = _UxGT("Przyspieszenie (A)");
@@ -292,9 +289,7 @@ namespace Language_pl {
292 289
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" kroki/mm");
293 290
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" kroki/mm");
294 291
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" kroki/mm");
295
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" kroki/mm");
296
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" kroki/mm");
297
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" kroki/mm");
292
+  LSTR MSG_N_STEPS                        = _UxGT("@ kroki/mm");
298 293
   LSTR MSG_E_STEPS                        = _UxGT("E kroki/mm");
299 294
   LSTR MSG_EN_STEPS                       = _UxGT("* kroki/mm");
300 295
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatura");
@@ -445,13 +440,7 @@ namespace Language_pl {
445 440
 
446 441
   LSTR MSG_INFO_PSU                       = _UxGT("Zasilacz");
447 442
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Siła silnika");
448
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Siła %");
449
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Siła %");
450
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Siła %");
451
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Siła %");
452
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Siła %");
453
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Siła %");
454
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Siła %");
443
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Siła %");
455 444
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC BŁĄD POŁĄCZENIA");
456 445
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("Zapisz DAC EEPROM");
457 446
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("ZMIEŃ FILAMENT");

+ 2
- 4
Marlin/src/lcd/language/language_pt.h Ver fichero

@@ -80,7 +80,7 @@ namespace Language_pt {
80 80
   LSTR MSG_MOVE_Z                         = _UxGT("Mover Z");
81 81
   LSTR MSG_MOVE_E                         = _UxGT("Mover Extrusor");
82 82
   LSTR MSG_MOVE_EN                        = _UxGT("Mover Extrusor *");
83
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover %smm");
83
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
84 84
   LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
85 85
   LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
86 86
   LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
@@ -104,9 +104,7 @@ namespace Language_pt {
104 104
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" passo/mm");
105 105
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" passo/mm");
106 106
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" passo/mm");
107
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" passo/mm");
108
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" passo/mm");
109
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" passo/mm");
107
+  LSTR MSG_N_STEPS                        = _UxGT("@ passo/mm");
110 108
   LSTR MSG_E_STEPS                        = _UxGT("E passo/mm");
111 109
   LSTR MSG_EN_STEPS                       = _UxGT("* passo/mm");
112 110
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatura");

+ 5
- 8
Marlin/src/lcd/language/language_pt_br.h Ver fichero

@@ -212,7 +212,7 @@ namespace Language_pt_br {
212 212
   LSTR MSG_MOVE_E                         = _UxGT("Mover Extrusor");
213 213
   LSTR MSG_MOVE_EN                        = _UxGT("Mover Extrusor *");
214 214
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Extrus. mto fria");
215
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover %smm");
215
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
216 216
   LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
217 217
   LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
218 218
   LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
@@ -242,12 +242,10 @@ namespace Language_pt_br {
242 242
   LSTR MSG_VA_JERK                        = _UxGT("arrancada V") STR_A;
243 243
   LSTR MSG_VB_JERK                        = _UxGT("arrancada V") STR_B;
244 244
   LSTR MSG_VC_JERK                        = _UxGT("arrancada V") STR_C;
245
-  LSTR MSG_VI_JERK                        = _UxGT("arrancada V") STR_I;
246
-  LSTR MSG_VJ_JERK                        = _UxGT("arrancada V") STR_J;
247
-  LSTR MSG_VK_JERK                        = _UxGT("arrancada V") STR_K;
245
+  LSTR MSG_VN_JERK                        = _UxGT("arrancada V@");
248 246
   LSTR MSG_VE_JERK                        = _UxGT("arrancada VE");
249 247
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Desv. Junção");
250
-  LSTR MSG_VELOCITY                       = _UxGT("Velocidade");
248
+  LSTR MSG_MAX_SPEED                      = _UxGT("Velocidade");
251 249
   LSTR MSG_VTRAV_MIN                      = _UxGT("VDeslocamento min");
252 250
   LSTR MSG_ACCELERATION                   = _UxGT("Aceleração");
253 251
   LSTR MSG_A_RETRACT                      = _UxGT("Retrair A");
@@ -256,9 +254,7 @@ namespace Language_pt_br {
256 254
   LSTR MSG_A_STEPS                        = _UxGT("Passo ") STR_A _UxGT("/mm");
257 255
   LSTR MSG_B_STEPS                        = _UxGT("Passo ") STR_B _UxGT("/mm");
258 256
   LSTR MSG_C_STEPS                        = _UxGT("Passo ") STR_C _UxGT("/mm");
259
-  LSTR MSG_I_STEPS                        = _UxGT("Passo ") STR_I _UxGT("/mm");
260
-  LSTR MSG_J_STEPS                        = _UxGT("Passo ") STR_J _UxGT("/mm");
261
-  LSTR MSG_K_STEPS                        = _UxGT("Passo ") STR_K _UxGT("/mm");
257
+  LSTR MSG_N_STEPS                        = _UxGT("Passo @/mm");
262 258
   LSTR MSG_E_STEPS                        = _UxGT("E/mm");
263 259
   LSTR MSG_EN_STEPS                       = _UxGT("*/mm");
264 260
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatura");
@@ -352,6 +348,7 @@ namespace Language_pt_br {
352 348
   LSTR MSG_BABYSTEP_X                     = _UxGT("Passinho X");
353 349
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Passinho Y");
354 350
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Passinho Z");
351
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Passinho @");
355 352
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Total");
356 353
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Abortar Fim de Curso");
357 354
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Aquecimento falhou");

+ 16
- 29
Marlin/src/lcd/language/language_ro.h Ver fichero

@@ -225,7 +225,7 @@ namespace Language_ro {
225 225
   LSTR MSG_MOVE_E                         = _UxGT("Extruder");
226 226
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
227 227
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Capat Prea Rece");
228
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Move %smm");
228
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Move $mm");
229 229
   LSTR MSG_MOVE_01MM                      = _UxGT("Move 0.1mm");
230 230
   LSTR MSG_MOVE_1MM                       = _UxGT("Move 1mm");
231 231
   LSTR MSG_MOVE_10MM                      = _UxGT("Move 10mm");
@@ -270,30 +270,24 @@ namespace Language_ro {
270 270
   LSTR MSG_VA_JERK                        = _UxGT("V") STR_A _UxGT("-Jerk");
271 271
   LSTR MSG_VB_JERK                        = _UxGT("V") STR_B _UxGT("-Jerk");
272 272
   LSTR MSG_VC_JERK                        = _UxGT("V") STR_C _UxGT("-Jerk");
273
-  LSTR MSG_VI_JERK                        = _UxGT("V") STR_I _UxGT("-Jerk");
274
-  LSTR MSG_VJ_JERK                        = _UxGT("V") STR_J _UxGT("-Jerk");
275
-  LSTR MSG_VK_JERK                        = _UxGT("V") STR_K _UxGT("-Jerk");
273
+  LSTR MSG_VN_JERK                        = _UxGT("V@-Jerk");
276 274
   LSTR MSG_VE_JERK                        = _UxGT("Ve-Jerk");
277 275
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Junction Dev");
278
-  LSTR MSG_VELOCITY                       = _UxGT("Velocity");
279
-  LSTR MSG_VMAX_A                         = _UxGT("Vmax ") STR_A;
280
-  LSTR MSG_VMAX_B                         = _UxGT("Vmax ") STR_B;
281
-  LSTR MSG_VMAX_C                         = _UxGT("Vmax ") STR_C;
282
-  LSTR MSG_VMAX_I                         = _UxGT("Vmax ") STR_I;
283
-  LSTR MSG_VMAX_J                         = _UxGT("Vmax ") STR_J;
284
-  LSTR MSG_VMAX_K                         = _UxGT("Vmax ") STR_K;
285
-  LSTR MSG_VMAX_E                         = _UxGT("Vmax ") STR_E;
286
-  LSTR MSG_VMAX_EN                        = _UxGT("Vmax *");
276
+  LSTR MSG_MAX_SPEED                      = _UxGT("Max Speed");
277
+  LSTR MSG_VMAX_A                         = _UxGT("Max Speed ") STR_A;
278
+  LSTR MSG_VMAX_B                         = _UxGT("Max Speed ") STR_B;
279
+  LSTR MSG_VMAX_C                         = _UxGT("Max Speed ") STR_C;
280
+  LSTR MSG_VMAX_N                         = _UxGT("Max Speed @");
281
+  LSTR MSG_VMAX_E                         = _UxGT("Max Speed E");
282
+  LSTR MSG_VMAX_EN                        = _UxGT("Max Speed *");
287 283
   LSTR MSG_VMIN                           = _UxGT("Vmin");
288 284
   LSTR MSG_VTRAV_MIN                      = _UxGT("VTrav Min");
289 285
   LSTR MSG_ACCELERATION                   = _UxGT("Acceleration");
290 286
   LSTR MSG_AMAX_A                         = _UxGT("Amax ") STR_A;
291 287
   LSTR MSG_AMAX_B                         = _UxGT("Amax ") STR_B;
292 288
   LSTR MSG_AMAX_C                         = _UxGT("Amax ") STR_C;
293
-  LSTR MSG_AMAX_I                         = _UxGT("Amax ") STR_I;
294
-  LSTR MSG_AMAX_J                         = _UxGT("Amax ") STR_J;
295
-  LSTR MSG_AMAX_K                         = _UxGT("Amax ") STR_K;
296
-  LSTR MSG_AMAX_E                         = _UxGT("Amax ") STR_E;
289
+  LSTR MSG_AMAX_N                         = _UxGT("Amax @");
290
+  LSTR MSG_AMAX_E                         = _UxGT("Amax E");
297 291
   LSTR MSG_AMAX_EN                        = _UxGT("Amax *");
298 292
   LSTR MSG_A_RETRACT                      = _UxGT("A-Retract");
299 293
   LSTR MSG_A_TRAVEL                       = _UxGT("A-Travel");
@@ -303,11 +297,9 @@ namespace Language_ro {
303 297
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" steps/mm");
304 298
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" steps/mm");
305 299
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" steps/mm");
306
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" steps/mm");
307
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" steps/mm");
308
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" steps/mm");
309
-  LSTR MSG_E_STEPS                        = _UxGT("Esteps/mm");
310
-  LSTR MSG_EN_STEPS                       = _UxGT("*steps/mm");
300
+  LSTR MSG_N_STEPS                        = _UxGT("@ steps/mm");
301
+  LSTR MSG_E_STEPS                        = _UxGT("E steps/mm");
302
+  LSTR MSG_EN_STEPS                       = _UxGT("* steps/mm");
311 303
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperature");
312 304
   LSTR MSG_MOTION                         = _UxGT("Motion");
313 305
   LSTR MSG_FILAMENT                       = _UxGT("Filament");
@@ -435,6 +427,7 @@ namespace Language_ro {
435 427
   LSTR MSG_BABYSTEP_X                     = _UxGT("Babystep X");
436 428
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Babystep Y");
437 429
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Babystep Z");
430
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Babystep @");
438 431
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Total");
439 432
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Endstop Abort");
440 433
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Heating Failed");
@@ -503,13 +496,7 @@ namespace Language_ro {
503 496
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Temperatura Maxima");
504 497
   LSTR MSG_INFO_PSU                       = _UxGT("PSU");
505 498
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Drive Strength");
506
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Driver %");
507
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Driver %");
508
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Driver %");
509
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Driver %");
510
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Driver %");
511
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Driver %");
512
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Driver %");
499
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Driver %");
513 500
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC CONNECTION ERROR");
514 501
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("DAC EEPROM Write");
515 502
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("FILAMENT CHANGE");

+ 10
- 34
Marlin/src/lcd/language/language_ru.h Ver fichero

@@ -84,17 +84,11 @@ namespace Language_ru {
84 84
     LSTR MSG_HOME_OFFSET_X                  = _UxGT("Смещение дома X");
85 85
     LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Смещение дома Y");
86 86
     LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Смещение дома Z");
87
-    LSTR MSG_HOME_OFFSET_I                  = _UxGT("Смещение дома ") STR_I;
88
-    LSTR MSG_HOME_OFFSET_J                  = _UxGT("Смещение дома ") STR_J;
89
-    LSTR MSG_HOME_OFFSET_K                  = _UxGT("Смещение дома ") STR_K;
90 87
   #else
91 88
     LSTR MSG_SET_HOME_OFFSETS               = _UxGT("Установ.смещ.дома");
92 89
     LSTR MSG_HOME_OFFSET_X                  = _UxGT("Смещ. дома X");
93 90
     LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Смещ. дома Y");
94 91
     LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Смещ. дома Z");
95
-    LSTR MSG_HOME_OFFSET_I                  = _UxGT("Смещ. дома ") STR_I;
96
-    LSTR MSG_HOME_OFFSET_J                  = _UxGT("Смещ. дома ") STR_J;
97
-    LSTR MSG_HOME_OFFSET_K                  = _UxGT("Смещ. дома ") STR_K;
98 92
   #endif
99 93
   LSTR MSG_HOME_OFFSETS_APPLIED             = _UxGT("Смещения применены");
100 94
   LSTR MSG_SELECT_ORIGIN                    = _UxGT("Выберите ноль");
@@ -338,9 +332,7 @@ namespace Language_ru {
338 332
   LSTR MSG_MOVE_X                           = _UxGT("Движение по X");
339 333
   LSTR MSG_MOVE_Y                           = _UxGT("Движение по Y");
340 334
   LSTR MSG_MOVE_Z                           = _UxGT("Движение по Z");
341
-  LSTR MSG_MOVE_I                           = _UxGT("Движение по ") STR_I;
342
-  LSTR MSG_MOVE_J                           = _UxGT("Движение по ") STR_J;
343
-  LSTR MSG_MOVE_K                           = _UxGT("Движение по ") STR_K;
335
+  LSTR MSG_MOVE_N                           = _UxGT("Движение по @");
344 336
   LSTR MSG_MOVE_E                           = _UxGT("Экструдер");
345 337
   LSTR MSG_MOVE_EN                          = _UxGT("Экструдер *");
346 338
   LSTR MSG_HOTEND_TOO_COLD                  = _UxGT("Сопло не нагрето");
@@ -401,23 +393,19 @@ namespace Language_ru {
401 393
   LSTR MSG_VA_JERK                          = _UxGT("V") STR_A _UxGT("-рывок");
402 394
   LSTR MSG_VB_JERK                          = _UxGT("V") STR_B _UxGT("-рывок");
403 395
   LSTR MSG_VC_JERK                          = _UxGT("V") STR_C _UxGT("-рывок");
404
-  LSTR MSG_VI_JERK                          = _UxGT("V") STR_I _UxGT("-рывок");
405
-  LSTR MSG_VJ_JERK                          = _UxGT("V") STR_J _UxGT("-рывок");
406
-  LSTR MSG_VK_JERK                          = _UxGT("V") STR_K _UxGT("-рывок");
396
+  LSTR MSG_VN_JERK                          = _UxGT("V@-рывок");
407 397
   LSTR MSG_VE_JERK                          = _UxGT("Ve-рывок");
408 398
   #if LCD_WIDTH > 21 || HAS_DWIN_E3V2
409 399
     LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Отклонение узла");
410 400
   #else
411 401
     LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Отклон. узла");
412 402
   #endif
413
-  LSTR MSG_VELOCITY                         = _UxGT("Скорость, мм/с");
403
+  LSTR MSG_MAX_SPEED                        = _UxGT("Скорость, мм/с");
414 404
   LSTR MSG_VMAX_A                           = _UxGT("Скор.макс ") STR_A;
415 405
   LSTR MSG_VMAX_B                           = _UxGT("Скор.макс ") STR_B;
416 406
   LSTR MSG_VMAX_C                           = _UxGT("Скор.макс ") STR_C;
417
-  LSTR MSG_VMAX_I                           = _UxGT("Скор.макс ") STR_I;
418
-  LSTR MSG_VMAX_J                           = _UxGT("Скор.макс ") STR_J;
419
-  LSTR MSG_VMAX_K                           = _UxGT("Скор.макс ") STR_K;
420
-  LSTR MSG_VMAX_E                           = _UxGT("Скор.макс ") STR_E;
407
+  LSTR MSG_VMAX_N                           = _UxGT("Скор.макс @");
408
+  LSTR MSG_VMAX_E                           = _UxGT("Скор.макс E");
421 409
   LSTR MSG_VMAX_EN                          = _UxGT("Скор.макс *");
422 410
   LSTR MSG_VMIN                             = _UxGT("Скор.мин");
423 411
   LSTR MSG_VTRAV_MIN                        = _UxGT("Перемещение мин");
@@ -425,10 +413,8 @@ namespace Language_ru {
425 413
   LSTR MSG_AMAX_A                           = _UxGT("Ускор.макс ") STR_A;
426 414
   LSTR MSG_AMAX_B                           = _UxGT("Ускор.макс ") STR_B;
427 415
   LSTR MSG_AMAX_C                           = _UxGT("Ускор.макс ") STR_C;
428
-  LSTR MSG_AMAX_I                           = _UxGT("Ускор.макс ") STR_I;
429
-  LSTR MSG_AMAX_J                           = _UxGT("Ускор.макс ") STR_J;
430
-  LSTR MSG_AMAX_K                           = _UxGT("Ускор.макс ") STR_K;
431
-  LSTR MSG_AMAX_E                           = _UxGT("Ускор.макс ") STR_E;
416
+  LSTR MSG_AMAX_N                           = _UxGT("Ускор.макс @");
417
+  LSTR MSG_AMAX_E                           = _UxGT("Ускор.макс E");
432 418
   LSTR MSG_AMAX_EN                          = _UxGT("Ускор.макс *");
433 419
   LSTR MSG_A_RETRACT                        = _UxGT("Ускор.втягив.");
434 420
   LSTR MSG_A_TRAVEL                         = _UxGT("Ускор.путеш.");
@@ -438,9 +424,7 @@ namespace Language_ru {
438 424
   LSTR MSG_A_STEPS                          = STR_A _UxGT(" шаг/мм");
439 425
   LSTR MSG_B_STEPS                          = STR_B _UxGT(" шаг/мм");
440 426
   LSTR MSG_C_STEPS                          = STR_C _UxGT(" шаг/мм");
441
-  LSTR MSG_I_STEPS                          = STR_I _UxGT(" шаг/мм");
442
-  LSTR MSG_J_STEPS                          = STR_J _UxGT(" шаг/мм");
443
-  LSTR MSG_K_STEPS                          = STR_K _UxGT(" шаг/мм");
427
+  LSTR MSG_N_STEPS                          = _UxGT("@ шаг/мм");
444 428
   LSTR MSG_E_STEPS                          = _UxGT("E шаг/мм");
445 429
   LSTR MSG_EN_STEPS                         = _UxGT("* шаг/мм");
446 430
   LSTR MSG_TEMPERATURE                      = _UxGT("Температура");
@@ -611,9 +595,7 @@ namespace Language_ru {
611 595
   LSTR MSG_BABYSTEP_X                       = _UxGT("Микрошаг X");
612 596
   LSTR MSG_BABYSTEP_Y                       = _UxGT("Микрошаг Y");
613 597
   LSTR MSG_BABYSTEP_Z                       = _UxGT("Микрошаг Z");
614
-  LSTR MSG_BABYSTEP_I                       = _UxGT("Микрошаг ") STR_I;
615
-  LSTR MSG_BABYSTEP_J                       = _UxGT("Микрошаг ") STR_J;
616
-  LSTR MSG_BABYSTEP_K                       = _UxGT("Микрошаг ") STR_K;
598
+  LSTR MSG_BABYSTEP_N                       = _UxGT("Микрошаг @");
617 599
   LSTR MSG_BABYSTEP_TOTAL                   = _UxGT("Сумарно");
618 600
   LSTR MSG_ENDSTOP_ABORT                    = _UxGT("Сработал концевик");
619 601
   LSTR MSG_HEATING_FAILED_LCD               = _UxGT("Разогрев не удался");
@@ -710,13 +692,7 @@ namespace Language_ru {
710 692
   LSTR MSG_INFO_MAX_TEMP                    = _UxGT("Макс. ") LCD_STR_THERMOMETER;
711 693
   LSTR MSG_INFO_PSU                         = _UxGT("БП");
712 694
   LSTR MSG_DRIVE_STRENGTH                   = _UxGT("Сила привода");
713
-  LSTR MSG_DAC_PERCENT_A                    = STR_A _UxGT(" Привод, %");
714
-  LSTR MSG_DAC_PERCENT_B                    = STR_B _UxGT(" Привод, %");
715
-  LSTR MSG_DAC_PERCENT_C                    = STR_C _UxGT(" Привод, %");
716
-  LSTR MSG_DAC_PERCENT_I                    = STR_I _UxGT(" Привод, %");
717
-  LSTR MSG_DAC_PERCENT_J                    = STR_J _UxGT(" Привод, %");
718
-  LSTR MSG_DAC_PERCENT_K                    = STR_K _UxGT(" Привод, %");
719
-  LSTR MSG_DAC_PERCENT_E                    = _UxGT("E Привод, %");
695
+  LSTR MSG_DAC_PERCENT_N                    = _UxGT("@ Привод, %");
720 696
   LSTR MSG_ERROR_TMC                        = _UxGT("СБОЙ СВЯЗИ С TMC");
721 697
   LSTR MSG_DAC_EEPROM_WRITE                 = _UxGT("Запись DAC в EEPROM");
722 698
   LSTR MSG_FILAMENT_CHANGE_HEADER           = _UxGT("ЗАМЕНА ФИЛАМЕНТА");

+ 19
- 47
Marlin/src/lcd/language/language_sk.h Ver fichero

@@ -31,10 +31,9 @@
31 31
  * Translated by Michal Holeš, Farma MaM
32 32
  * https://www.facebook.com/farmamam
33 33
  *
34
- * Substitutions are applied for the following characters when used
35
- * in menu items that call lcd_put_u8str_ind_P with an index:
34
+ * Substitutions are applied for the following characters when used in menu items titles:
36 35
  *
37
- *   $ displays an inserted C-string
36
+ *   $ displays an inserted string
38 37
  *   = displays  '0'....'10' for indexes 0 - 10
39 38
  *   ~ displays  '1'....'11' for indexes 0 - 10
40 39
  *   * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
@@ -98,9 +97,6 @@ namespace Language_sk {
98 97
   LSTR MSG_HOME_OFFSET_X                  = _UxGT("X Ofset");
99 98
   LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Y Ofset");
100 99
   LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Z Ofset");
101
-  LSTR MSG_HOME_OFFSET_I                  = STR_I _UxGT(" Ofset");
102
-  LSTR MSG_HOME_OFFSET_J                  = STR_J _UxGT(" Ofset");
103
-  LSTR MSG_HOME_OFFSET_K                  = STR_K _UxGT(" Ofset");
104 100
   LSTR MSG_HOME_OFFSETS_APPLIED           = _UxGT("Ofsety nastavené");
105 101
   LSTR MSG_TRAMMING_WIZARD                = _UxGT("Spriev. vyrovn.");
106 102
   LSTR MSG_SELECT_ORIGIN                  = _UxGT("Vyberte začiatok");
@@ -281,13 +277,11 @@ namespace Language_sk {
281 277
   LSTR MSG_MOVE_X                         = _UxGT("Posunúť X");
282 278
   LSTR MSG_MOVE_Y                         = _UxGT("Posunúť Y");
283 279
   LSTR MSG_MOVE_Z                         = _UxGT("Posunúť Z");
284
-  LSTR MSG_MOVE_I                         = _UxGT("Posunúť ") STR_I;
285
-  LSTR MSG_MOVE_J                         = _UxGT("Posunúť ") STR_J;
286
-  LSTR MSG_MOVE_K                         = _UxGT("Posunúť ") STR_K;
280
+  LSTR MSG_MOVE_N                         = _UxGT("Posunúť @");
287 281
   LSTR MSG_MOVE_E                         = _UxGT("Extrudér");
288 282
   LSTR MSG_MOVE_EN                        = _UxGT("Extrudér *");
289 283
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend je studený");
290
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Posunúť o %smm");
284
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Posunúť o $mm");
291 285
   LSTR MSG_MOVE_01MM                      = _UxGT("Posunúť o 0,1mm");
292 286
   LSTR MSG_MOVE_1MM                       = _UxGT("Posunúť o 1mm");
293 287
   LSTR MSG_MOVE_10MM                      = _UxGT("Posunúť o 10mm");
@@ -297,12 +291,6 @@ namespace Language_sk {
297 291
   LSTR MSG_MOVE_01IN                      = _UxGT("Posunúť o 0,1in");
298 292
   LSTR MSG_MOVE_1IN                       = _UxGT("Posunúť o 1,0in");
299 293
   LSTR MSG_SPEED                          = _UxGT("Rýchlosť");
300
-  LSTR MSG_MAXSPEED                       = _UxGT("Max rýchl. (mm/s)");
301
-  LSTR MSG_MAXSPEED_X                     = _UxGT("Max rýchl. ") STR_A;
302
-  LSTR MSG_MAXSPEED_Y                     = _UxGT("Max rýchl. ") STR_B;
303
-  LSTR MSG_MAXSPEED_Z                     = _UxGT("Max rýchl. ") STR_C;
304
-  LSTR MSG_MAXSPEED_E                     = _UxGT("Max rýchl. ") STR_E;
305
-  LSTR MSG_MAXSPEED_A                     = _UxGT("Max rýchl. @");
306 294
   LSTR MSG_BED_Z                          = _UxGT("Výška podl.");
307 295
   LSTR MSG_NOZZLE                         = _UxGT("Tryska");
308 296
   LSTR MSG_NOZZLE_N                       = _UxGT("Tryska ~");
@@ -347,30 +335,24 @@ namespace Language_sk {
347 335
   LSTR MSG_VA_JERK                        = _UxGT("V") STR_A _UxGT("-skok");
348 336
   LSTR MSG_VB_JERK                        = _UxGT("V") STR_B _UxGT("-skok");
349 337
   LSTR MSG_VC_JERK                        = _UxGT("V") STR_C _UxGT("-skok");
350
-  LSTR MSG_VI_JERK                        = _UxGT("V") STR_I _UxGT("-skok");
351
-  LSTR MSG_VJ_JERK                        = _UxGT("V") STR_J _UxGT("-skok");
352
-  LSTR MSG_VK_JERK                        = _UxGT("V") STR_K _UxGT("-skok");
338
+  LSTR MSG_VN_JERK                        = _UxGT("V@-skok");
353 339
   LSTR MSG_VE_JERK                        = _UxGT("Ve-skok");
354 340
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Junction Dev");
355
-  LSTR MSG_VELOCITY                       = _UxGT("Rýchlosť");
356
-  LSTR MSG_VMAX_A                         = _UxGT("Vmax ") STR_A;
357
-  LSTR MSG_VMAX_B                         = _UxGT("Vmax ") STR_B;
358
-  LSTR MSG_VMAX_C                         = _UxGT("Vmax ") STR_C;
359
-  LSTR MSG_VMAX_I                         = _UxGT("Vmax ") STR_I;
360
-  LSTR MSG_VMAX_J                         = _UxGT("Vmax ") STR_J;
361
-  LSTR MSG_VMAX_K                         = _UxGT("Vmax ") STR_K;
362
-  LSTR MSG_VMAX_E                         = _UxGT("Vmax ") STR_E;
363
-  LSTR MSG_VMAX_EN                        = _UxGT("Vmax *");
341
+  LSTR MSG_MAX_SPEED                      = _UxGT("Max rýchl. (mm/s)");
342
+  LSTR MSG_VMAX_A                         = _UxGT("Max rýchl. ") STR_A;
343
+  LSTR MSG_VMAX_B                         = _UxGT("Max rýchl. ") STR_B;
344
+  LSTR MSG_VMAX_C                         = _UxGT("Max rýchl. ") STR_C;
345
+  LSTR MSG_VMAX_N                         = _UxGT("Max rýchl. @");
346
+  LSTR MSG_VMAX_E                         = _UxGT("Max rýchl. E");
347
+  LSTR MSG_VMAX_EN                        = _UxGT("Max rýchl. *");
364 348
   LSTR MSG_VMIN                           = _UxGT("Vmin");
365 349
   LSTR MSG_VTRAV_MIN                      = _UxGT("VPrej Min");
366 350
   LSTR MSG_ACCELERATION                   = _UxGT("Akcelerácia");
367 351
   LSTR MSG_AMAX_A                         = _UxGT("Amax ") STR_A;
368 352
   LSTR MSG_AMAX_B                         = _UxGT("Amax ") STR_B;
369 353
   LSTR MSG_AMAX_C                         = _UxGT("Amax ") STR_C;
370
-  LSTR MSG_AMAX_I                         = _UxGT("Amax ") STR_I;
371
-  LSTR MSG_AMAX_J                         = _UxGT("Amax ") STR_J;
372
-  LSTR MSG_AMAX_K                         = _UxGT("Amax ") STR_K;
373
-  LSTR MSG_AMAX_E                         = _UxGT("Amax ") STR_E;
354
+  LSTR MSG_AMAX_N                         = _UxGT("Amax @");
355
+  LSTR MSG_AMAX_E                         = _UxGT("Amax E");
374 356
   LSTR MSG_AMAX_EN                        = _UxGT("Amax *");
375 357
   LSTR MSG_A_RETRACT                      = _UxGT("A-retrakt");
376 358
   LSTR MSG_A_TRAVEL                       = _UxGT("A-prejazd");
@@ -380,11 +362,9 @@ namespace Language_sk {
380 362
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" krokov/mm");
381 363
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" krokov/mm");
382 364
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" krokov/mm");
383
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" krokov/mm");
384
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" krokov/mm");
385
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" krokov/mm");
386
-  LSTR MSG_E_STEPS                        = _UxGT("Ekrokov/mm");
387
-  LSTR MSG_EN_STEPS                       = _UxGT("*krokov/mm");
365
+  LSTR MSG_N_STEPS                        = _UxGT("@ krokov/mm");
366
+  LSTR MSG_E_STEPS                        = _UxGT("E krokov/mm");
367
+  LSTR MSG_EN_STEPS                       = _UxGT("* krokov/mm");
388 368
   LSTR MSG_TEMPERATURE                    = _UxGT("Teplota");
389 369
   LSTR MSG_MOTION                         = _UxGT("Pohyb");
390 370
   LSTR MSG_FILAMENT                       = _UxGT("Filament");
@@ -527,9 +507,7 @@ namespace Language_sk {
527 507
   LSTR MSG_BABYSTEP_X                     = _UxGT("Babystep X");
528 508
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Babystep Y");
529 509
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Babystep Z");
530
-  LSTR MSG_BABYSTEP_I                     = _UxGT("Babystep ") STR_I;
531
-  LSTR MSG_BABYSTEP_J                     = _UxGT("Babystep ") STR_J;
532
-  LSTR MSG_BABYSTEP_K                     = _UxGT("Babystep ") STR_K;
510
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Babystep @");
533 511
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Celkom");
534 512
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Zastavenie Endstop");
535 513
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Chyba ohrevu");
@@ -624,13 +602,7 @@ namespace Language_sk {
624 602
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Teplota max");
625 603
   LSTR MSG_INFO_PSU                       = _UxGT("Nap. zdroj");
626 604
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Budenie motorov");
627
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Motor %");
628
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Motor %");
629
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Motor %");
630
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Motor %");
631
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Motor %");
632
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Motor %");
633
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Motor %");
605
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Motor %");
634 606
   LSTR MSG_ERROR_TMC                      = _UxGT("CHYBA KOMUNIKÁ. TMC");
635 607
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("Uložiť do EEPROM");
636 608
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("VÝMENA FILAMENTU");

+ 10
- 23
Marlin/src/lcd/language/language_sv.h Ver fichero

@@ -252,7 +252,7 @@ namespace Language_sv {
252 252
   LSTR MSG_MOVE_E                         = _UxGT("Extruder");
253 253
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
254 254
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hetände för kall");
255
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Flytta %smm");
255
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Flytta $mm");
256 256
   LSTR MSG_MOVE_01MM                      = _UxGT("Flytta 0.1mm");
257 257
   LSTR MSG_MOVE_1MM                       = _UxGT("Flytta 1mm");
258 258
   LSTR MSG_MOVE_10MM                      = _UxGT("Flytta 10mm");
@@ -300,19 +300,15 @@ namespace Language_sv {
300 300
   LSTR MSG_VA_JERK                        = _UxGT("V") STR_A _UxGT("-Ryck");
301 301
   LSTR MSG_VB_JERK                        = _UxGT("V") STR_B _UxGT("-Ryck");
302 302
   LSTR MSG_VC_JERK                        = _UxGT("V") STR_C _UxGT("-Ryck");
303
-  LSTR MSG_VI_JERK                        = _UxGT("V") STR_I _UxGT("-Ryck");
304
-  LSTR MSG_VJ_JERK                        = _UxGT("V") STR_J _UxGT("-Ryck");
305
-  LSTR MSG_VK_JERK                        = _UxGT("V") STR_K _UxGT("-Ryck");
303
+  LSTR MSG_VN_JERK                        = _UxGT("V@-Ryck");
306 304
   LSTR MSG_VE_JERK                        = _UxGT("Ve-Ryck");
307 305
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Knutpunkt Avv");
308
-  LSTR MSG_VELOCITY                       = _UxGT("Hastighet");
306
+  LSTR MSG_MAX_SPEED                      = _UxGT("Hastighet");
309 307
   LSTR MSG_VMAX_A                         = _UxGT("Vmax ") STR_A;
310 308
   LSTR MSG_VMAX_B                         = _UxGT("Vmax ") STR_B;
311 309
   LSTR MSG_VMAX_C                         = _UxGT("Vmax ") STR_C;
312
-  LSTR MSG_VMAX_I                         = _UxGT("Vmax ") STR_I;
313
-  LSTR MSG_VMAX_J                         = _UxGT("Vmax ") STR_J;
314
-  LSTR MSG_VMAX_K                         = _UxGT("Vmax ") STR_K;
315
-  LSTR MSG_VMAX_E                         = _UxGT("Vmax ") STR_E;
310
+  LSTR MSG_VMAX_N                         = _UxGT("Vmax @");
311
+  LSTR MSG_VMAX_E                         = _UxGT("Vmax E");
316 312
   LSTR MSG_VMAX_EN                        = _UxGT("Vmax *");
317 313
   LSTR MSG_VMIN                           = _UxGT("Vmin");
318 314
   LSTR MSG_VTRAV_MIN                      = _UxGT("VTrav Min");
@@ -320,10 +316,8 @@ namespace Language_sv {
320 316
   LSTR MSG_AMAX_A                         = _UxGT("Amax ") STR_A;
321 317
   LSTR MSG_AMAX_B                         = _UxGT("Amax ") STR_B;
322 318
   LSTR MSG_AMAX_C                         = _UxGT("Amax ") STR_C;
323
-  LSTR MSG_AMAX_I                         = _UxGT("Amax ") STR_I;
324
-  LSTR MSG_AMAX_J                         = _UxGT("Amax ") STR_J;
325
-  LSTR MSG_AMAX_K                         = _UxGT("Amax ") STR_K;
326
-  LSTR MSG_AMAX_E                         = _UxGT("Amax ") STR_E;
319
+  LSTR MSG_AMAX_N                         = _UxGT("Amax @");
320
+  LSTR MSG_AMAX_E                         = _UxGT("Amax E");
327 321
   LSTR MSG_AMAX_EN                        = _UxGT("Amax *");
328 322
   LSTR MSG_A_RETRACT                      = _UxGT("A-Dra tillbaka");
329 323
   LSTR MSG_A_TRAVEL                       = _UxGT("A-Färdas");
@@ -333,9 +327,7 @@ namespace Language_sv {
333 327
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" Steg/mm");
334 328
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" Steg/mm");
335 329
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" Steg/mm");
336
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" Steg/mm");
337
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" Steg/mm");
338
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" Steg/mm");
330
+  LSTR MSG_N_STEPS                        = _UxGT("@ Steg/mm");
339 331
   LSTR MSG_E_STEPS                        = _UxGT("E Steg/mm");
340 332
   LSTR MSG_EN_STEPS                       = _UxGT("* Steg/mm");
341 333
   LSTR MSG_TEMPERATURE                    = _UxGT("Temperatur");
@@ -469,6 +461,7 @@ namespace Language_sv {
469 461
   LSTR MSG_BABYSTEP_X                     = _UxGT("Småsteg X");
470 462
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Småsteg Y");
471 463
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Småsteg Z");
464
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Småsteg @");
472 465
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Total");
473 466
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Slutstopp Avbrott");
474 467
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Värma Misslyckad");
@@ -540,13 +533,7 @@ namespace Language_sv {
540 533
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Max Temp");
541 534
   LSTR MSG_INFO_PSU                       = _UxGT("PSU");
542 535
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Driv Styrka");
543
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Driver %");
544
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Driver %");
545
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Driver %");
546
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Driver %");
547
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Driver %");
548
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Driver %");
549
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Driver %");
536
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Driver %");
550 537
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC KOPPLNINGSFEL");
551 538
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("DAC EEPROM Skriv");
552 539
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("TRÅDBYTE");

+ 10
- 23
Marlin/src/lcd/language/language_tr.h Ver fichero

@@ -228,7 +228,7 @@ namespace Language_tr {
228 228
   LSTR MSG_MOVE_E                         = _UxGT("Ekstruder");
229 229
   LSTR MSG_MOVE_EN                        = _UxGT("Ekstruder *");
230 230
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Nozul Çok Soğuk");
231
-  LSTR MSG_MOVE_N_MM                      = _UxGT("%smm");
231
+  LSTR MSG_MOVE_N_MM                      = _UxGT("$mm");
232 232
   LSTR MSG_MOVE_01MM                      = _UxGT("0.1mm");
233 233
   LSTR MSG_MOVE_1MM                       = _UxGT("1mm");
234 234
   LSTR MSG_MOVE_10MM                      = _UxGT("10mm");
@@ -263,19 +263,15 @@ namespace Language_tr {
263 263
   LSTR MSG_VA_JERK                        = _UxGT("V") STR_A _UxGT("-Sarsım");
264 264
   LSTR MSG_VB_JERK                        = _UxGT("V") STR_B _UxGT("-Sarsım");
265 265
   LSTR MSG_VC_JERK                        = _UxGT("V") STR_C _UxGT("-Sarsım");
266
-  LSTR MSG_VI_JERK                        = _UxGT("V") STR_I _UxGT("-Sarsım");
267
-  LSTR MSG_VJ_JERK                        = _UxGT("V") STR_J _UxGT("-Sarsım");
268
-  LSTR MSG_VK_JERK                        = _UxGT("V") STR_K _UxGT("-Sarsım");
266
+  LSTR MSG_VN_JERK                        = _UxGT("V@-Sarsım");
269 267
   LSTR MSG_VE_JERK                        = _UxGT("Ve-Sarsım");
270 268
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Jonksiyon Sapması");
271
-  LSTR MSG_VELOCITY                       = _UxGT("Hız Vektörü");
269
+  LSTR MSG_MAX_SPEED                      = _UxGT("Hız Vektörü");
272 270
   LSTR MSG_VMAX_A                         = _UxGT("HızVektör.max ") STR_A;
273 271
   LSTR MSG_VMAX_B                         = _UxGT("HızVektör.max ") STR_B;
274 272
   LSTR MSG_VMAX_C                         = _UxGT("HızVektör.max ") STR_C;
275
-  LSTR MSG_VMAX_I                         = _UxGT("HızVektör.max ") STR_I;
276
-  LSTR MSG_VMAX_J                         = _UxGT("HızVektör.max ") STR_J;
277
-  LSTR MSG_VMAX_K                         = _UxGT("HızVektör.max ") STR_K;
278
-  LSTR MSG_VMAX_E                         = _UxGT("HızVektör.max ") STR_E;
273
+  LSTR MSG_VMAX_N                         = _UxGT("HızVektör.max @");
274
+  LSTR MSG_VMAX_E                         = _UxGT("HızVektör.max E");
279 275
   LSTR MSG_VMAX_EN                        = _UxGT("HızVektör.max *");
280 276
   LSTR MSG_VMIN                           = _UxGT("HızVektör.min");
281 277
   LSTR MSG_VTRAV_MIN                      = _UxGT("HV.gezinme min");
@@ -283,10 +279,8 @@ namespace Language_tr {
283 279
   LSTR MSG_AMAX_A                         = _UxGT("Max. ivme ") STR_A;
284 280
   LSTR MSG_AMAX_B                         = _UxGT("Max. ivme ") STR_B;
285 281
   LSTR MSG_AMAX_C                         = _UxGT("Max. ivme ") STR_C;
286
-  LSTR MSG_AMAX_I                         = _UxGT("Max. ivme ") STR_I;
287
-  LSTR MSG_AMAX_J                         = _UxGT("Max. ivme ") STR_J;
288
-  LSTR MSG_AMAX_K                         = _UxGT("Max. ivme ") STR_K;
289
-  LSTR MSG_AMAX_E                         = _UxGT("Max. ivme ") STR_E;
282
+  LSTR MSG_AMAX_N                         = _UxGT("Max. ivme @");
283
+  LSTR MSG_AMAX_E                         = _UxGT("Max. ivme E");
290 284
   LSTR MSG_AMAX_EN                        = _UxGT("Max. ivme *");
291 285
   LSTR MSG_A_RETRACT                      = _UxGT("Ivme-geri çekme");
292 286
   LSTR MSG_A_TRAVEL                       = _UxGT("Ivme-gezinme");
@@ -294,9 +288,7 @@ namespace Language_tr {
294 288
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" adım/mm");
295 289
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" adım/mm");
296 290
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" adım/mm");
297
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" adım/mm");
298
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" adım/mm");
299
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" adım/mm");
291
+  LSTR MSG_N_STEPS                        = _UxGT("@ adım/mm");
300 292
   LSTR MSG_E_STEPS                        = _UxGT("E adım/mm");
301 293
   LSTR MSG_EN_STEPS                       = _UxGT("* adım/mm");
302 294
   LSTR MSG_TEMPERATURE                    = _UxGT("Sıcaklık");
@@ -406,6 +398,7 @@ namespace Language_tr {
406 398
   LSTR MSG_BABYSTEP_X                     = _UxGT("Miniadım X");
407 399
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Miniadım Y");
408 400
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Miniadım Z");
401
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Miniadım @");
409 402
   LSTR MSG_BABYSTEP_TOTAL                 = _UxGT("Toplam");
410 403
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Endstop iptal");
411 404
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Isınma başarısız");
@@ -473,13 +466,7 @@ namespace Language_tr {
473 466
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Max Sıc.");
474 467
   LSTR MSG_INFO_PSU                       = _UxGT("Güç Kaynağı");
475 468
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Sürücü Gücü");
476
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" Sürücü %");
477
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" Sürücü %");
478
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" Sürücü %");
479
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" Sürücü %");
480
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" Sürücü %");
481
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" Sürücü %");
482
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E Sürücü %");
469
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ Sürücü %");
483 470
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC BAĞLANTI HATASI");
484 471
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("DAC EEPROM Yaz");
485 472
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("FILAMAN DEGISTIR");

+ 10
- 34
Marlin/src/lcd/language/language_uk.h Ver fichero

@@ -86,17 +86,11 @@ namespace Language_uk {
86 86
     LSTR MSG_HOME_OFFSET_X                  = _UxGT("Зміщення дому X");
87 87
     LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Зміщення дому Y");
88 88
     LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Зміщення дому Z");
89
-    LSTR MSG_HOME_OFFSET_I                  = _UxGT("Зміщення дому ") STR_I;
90
-    LSTR MSG_HOME_OFFSET_J                  = _UxGT("Зміщення дому ") STR_J;
91
-    LSTR MSG_HOME_OFFSET_K                  = _UxGT("Зміщення дому ") STR_K;
92 89
   #else
93 90
     LSTR MSG_SET_HOME_OFFSETS               = _UxGT("Встан. зміщ. дому");
94 91
     LSTR MSG_HOME_OFFSET_X                  = _UxGT("Зміщ. дому X");
95 92
     LSTR MSG_HOME_OFFSET_Y                  = _UxGT("Зміщ. дому Y");
96 93
     LSTR MSG_HOME_OFFSET_Z                  = _UxGT("Зміщ. дому Z");
97
-    LSTR MSG_HOME_OFFSET_I                  = _UxGT("Зміщ. дому ") STR_I;
98
-    LSTR MSG_HOME_OFFSET_J                  = _UxGT("Зміщ. дому ") STR_J;
99
-    LSTR MSG_HOME_OFFSET_K                  = _UxGT("Зміщ. дому ") STR_K;
100 94
   #endif
101 95
   LSTR MSG_HOME_OFFSETS_APPLIED             = _UxGT("Зміщення прийняті");
102 96
   LSTR MSG_SELECT_ORIGIN                    = _UxGT("Оберіть нуль");
@@ -339,9 +333,7 @@ namespace Language_uk {
339 333
   LSTR MSG_MOVE_X                           = _UxGT("Рух по X");
340 334
   LSTR MSG_MOVE_Y                           = _UxGT("Рух по Y");
341 335
   LSTR MSG_MOVE_Z                           = _UxGT("Рух по Z");
342
-  LSTR MSG_MOVE_I                           = _UxGT("Рух по ") STR_I;
343
-  LSTR MSG_MOVE_J                           = _UxGT("Рух по ") STR_J;
344
-  LSTR MSG_MOVE_K                           = _UxGT("Рух по ") STR_K;
336
+  LSTR MSG_MOVE_N                           = _UxGT("Рух по @");
345 337
   LSTR MSG_MOVE_E                           = _UxGT("Екструдер");
346 338
   LSTR MSG_MOVE_EN                          = _UxGT("Екструдер *");
347 339
   LSTR MSG_HOTEND_TOO_COLD                  = _UxGT("Сопло дуже холодне");
@@ -406,23 +398,19 @@ namespace Language_uk {
406 398
   LSTR MSG_VA_JERK                          = _UxGT("V") STR_A _UxGT("-ривок");
407 399
   LSTR MSG_VB_JERK                          = _UxGT("V") STR_B _UxGT("-ривок");
408 400
   LSTR MSG_VC_JERK                          = _UxGT("V") STR_C _UxGT("-ривок");
409
-  LSTR MSG_VI_JERK                          = _UxGT("V") STR_I _UxGT("-ривок");
410
-  LSTR MSG_VJ_JERK                          = _UxGT("V") STR_J _UxGT("-ривок");
411
-  LSTR MSG_VK_JERK                          = _UxGT("V") STR_K _UxGT("-ривок");
401
+  LSTR MSG_VN_JERK                          = _UxGT("V@-ривок");
412 402
   LSTR MSG_VE_JERK                          = _UxGT("Ve-ривок");
413 403
   #if LCD_WIDTH > 21 || HAS_DWIN_E3V2
414 404
     LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Відхилення вузла");
415 405
   #else
416 406
     LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Відхил.вузла");
417 407
   #endif
418
-  LSTR MSG_VELOCITY                         = _UxGT("Швидкість, мм/с");
408
+  LSTR MSG_MAX_SPEED                        = _UxGT("Швидкість, мм/с");
419 409
   LSTR MSG_VMAX_A                           = _UxGT("Швидк.макс ") STR_A;
420 410
   LSTR MSG_VMAX_B                           = _UxGT("Швидк.макс ") STR_B;
421 411
   LSTR MSG_VMAX_C                           = _UxGT("Швидк.макс ") STR_C;
422
-  LSTR MSG_VMAX_I                           = _UxGT("Швидк.макс ") STR_I;
423
-  LSTR MSG_VMAX_J                           = _UxGT("Швидк.макс ") STR_J;
424
-  LSTR MSG_VMAX_K                           = _UxGT("Швидк.макс ") STR_K;
425
-  LSTR MSG_VMAX_E                           = _UxGT("Швидк.макс ") STR_E;
412
+  LSTR MSG_VMAX_N                           = _UxGT("Швидк.макс @");
413
+  LSTR MSG_VMAX_E                           = _UxGT("Швидк.макс E");
426 414
   LSTR MSG_VMAX_EN                          = _UxGT("Швидк.макс *");
427 415
   LSTR MSG_VMIN                             = _UxGT("Швидк. мін");
428 416
   #if LCD_WIDTH > 21 || HAS_DWIN_E3V2
@@ -434,10 +422,8 @@ namespace Language_uk {
434 422
   LSTR MSG_AMAX_A                           = _UxGT("Приск.макс ") STR_A;
435 423
   LSTR MSG_AMAX_B                           = _UxGT("Приск.макс ") STR_B;
436 424
   LSTR MSG_AMAX_C                           = _UxGT("Приск.макс ") STR_C;
437
-  LSTR MSG_AMAX_I                           = _UxGT("Приск.макс ") STR_I;
438
-  LSTR MSG_AMAX_J                           = _UxGT("Приск.макс ") STR_J;
439
-  LSTR MSG_AMAX_K                           = _UxGT("Приск.макс ") STR_K;
440
-  LSTR MSG_AMAX_E                           = _UxGT("Приск.макс ") STR_E;
425
+  LSTR MSG_AMAX_N                           = _UxGT("Приск.макс @");
426
+  LSTR MSG_AMAX_E                           = _UxGT("Приск.макс E");
441 427
   LSTR MSG_AMAX_EN                          = _UxGT("Приск.макс *");
442 428
   LSTR MSG_A_RETRACT                        = _UxGT("Приск.втягув.");
443 429
   LSTR MSG_A_TRAVEL                         = _UxGT("Приск.переміщ.");
@@ -447,9 +433,7 @@ namespace Language_uk {
447 433
   LSTR MSG_A_STEPS                          = STR_A _UxGT(" кроків/мм");
448 434
   LSTR MSG_B_STEPS                          = STR_B _UxGT(" кроків/мм");
449 435
   LSTR MSG_C_STEPS                          = STR_C _UxGT(" кроків/мм");
450
-  LSTR MSG_I_STEPS                          = STR_I _UxGT(" кроків/мм");
451
-  LSTR MSG_J_STEPS                          = STR_J _UxGT(" кроків/мм");
452
-  LSTR MSG_K_STEPS                          = STR_K _UxGT(" кроків/мм");
436
+  LSTR MSG_N_STEPS                          = _UxGT("@ кроків/мм");
453 437
   LSTR MSG_E_STEPS                          = _UxGT("E кроків/мм");
454 438
   LSTR MSG_EN_STEPS                         = _UxGT("* кроків/мм");
455 439
   LSTR MSG_TEMPERATURE                      = _UxGT("Температура");
@@ -624,9 +608,7 @@ namespace Language_uk {
624 608
   LSTR MSG_BABYSTEP_X                       = _UxGT("Мікрокрок X");
625 609
   LSTR MSG_BABYSTEP_Y                       = _UxGT("Мікрокрок Y");
626 610
   LSTR MSG_BABYSTEP_Z                       = _UxGT("Мікрокрок Z");
627
-  LSTR MSG_BABYSTEP_I                       = _UxGT("Мікрокрок ") STR_I;
628
-  LSTR MSG_BABYSTEP_J                       = _UxGT("Мікрокрок ") STR_J;
629
-  LSTR MSG_BABYSTEP_K                       = _UxGT("Мікрокрок ") STR_K;
611
+  LSTR MSG_BABYSTEP_N                       = _UxGT("Мікрокрок @");
630 612
   LSTR MSG_BABYSTEP_TOTAL                   = _UxGT("Сумарно");
631 613
   LSTR MSG_ENDSTOP_ABORT                    = _UxGT("Кінцевик спрацював");
632 614
   LSTR MSG_HEATING_FAILED_LCD               = _UxGT("Збій нагріву");
@@ -749,13 +731,7 @@ namespace Language_uk {
749 731
   LSTR MSG_INFO_MAX_TEMP                    = _UxGT("Макс. ") LCD_STR_THERMOMETER;
750 732
   LSTR MSG_INFO_PSU                         = _UxGT("Блок жив-ня");
751 733
   LSTR MSG_DRIVE_STRENGTH                   = _UxGT("Сила мотору");
752
-  LSTR MSG_DAC_PERCENT_A                    = _UxGT("Драйвер ") STR_A _UxGT(", %");
753
-  LSTR MSG_DAC_PERCENT_B                    = _UxGT("Драйвер ") STR_B _UxGT(", %");
754
-  LSTR MSG_DAC_PERCENT_C                    = _UxGT("Драйвер ") STR_C _UxGT(", %");
755
-  LSTR MSG_DAC_PERCENT_I                    = _UxGT("Драйвер ") STR_I _UxGT(", %");
756
-  LSTR MSG_DAC_PERCENT_J                    = _UxGT("Драйвер ") STR_J _UxGT(", %");
757
-  LSTR MSG_DAC_PERCENT_K                    = _UxGT("Драйвер ") STR_K _UxGT(", %");
758
-  LSTR MSG_DAC_PERCENT_E                    = _UxGT("Драйвер E, %");
734
+  LSTR MSG_DAC_PERCENT_N                    = _UxGT("Драйвер @, %");
759 735
   LSTR MSG_ERROR_TMC                        = _UxGT("ЗБІЙ ЗВ'ЯЗКУ З TMC");
760 736
   LSTR MSG_DAC_EEPROM_WRITE                 = _UxGT("Запис ЦАП у EEPROM");
761 737
   LSTR MSG_FILAMENT_CHANGE_HEADER           = _UxGT("ЗАМІНА ПРУТКА");

+ 9
- 22
Marlin/src/lcd/language/language_vi.h Ver fichero

@@ -230,19 +230,15 @@ namespace Language_vi {
230 230
   LSTR MSG_VA_JERK                        = _UxGT("Giật-V") STR_A;
231 231
   LSTR MSG_VB_JERK                        = _UxGT("Giật-V") STR_B;
232 232
   LSTR MSG_VC_JERK                        = _UxGT("Giật-V") STR_C;
233
-  LSTR MSG_VI_JERK                        = _UxGT("Giật-V") STR_I;
234
-  LSTR MSG_VJ_JERK                        = _UxGT("Giật-V") STR_J;
235
-  LSTR MSG_VK_JERK                        = _UxGT("Giật-V") STR_K;
233
+  LSTR MSG_VN_JERK                        = _UxGT("Giật-V@");
236 234
   LSTR MSG_VE_JERK                        = _UxGT("Giật-Ve");
237 235
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("Độ Lệch Chỗ Giao");                    // Junction Dev
238
-  LSTR MSG_VELOCITY                       = _UxGT("Vận tốc");                              // velocity
236
+  LSTR MSG_MAX_SPEED                      = _UxGT("Vận tốc");                              // velocity
239 237
   LSTR MSG_VMAX_A                         = _UxGT("Vđa") STR_A;                        // Vmax
240 238
   LSTR MSG_VMAX_B                         = _UxGT("Vđa") STR_B;
241 239
   LSTR MSG_VMAX_C                         = _UxGT("Vđa") STR_C;
242
-  LSTR MSG_VMAX_I                         = _UxGT("Vđa") STR_I;
243
-  LSTR MSG_VMAX_J                         = _UxGT("Vđa") STR_J;
244
-  LSTR MSG_VMAX_K                         = _UxGT("Vđa") STR_K;
245
-  LSTR MSG_VMAX_E                         = _UxGT("Vđa") STR_E;
240
+  LSTR MSG_VMAX_N                         = _UxGT("Vđa@");
241
+  LSTR MSG_VMAX_E                         = _UxGT("VđaE");
246 242
   LSTR MSG_VMAX_EN                        = _UxGT("Vđa *");
247 243
   LSTR MSG_VMIN                           = _UxGT("Vthiểu");                               // Vmin
248 244
   LSTR MSG_VTRAV_MIN                      = _UxGT("Vchuyển thiểu");                        // VTrav min
@@ -250,10 +246,8 @@ namespace Language_vi {
250 246
   LSTR MSG_AMAX_A                         = _UxGT("Tăng tốc ca") STR_A;                // Amax
251 247
   LSTR MSG_AMAX_B                         = _UxGT("Tăng tốc ca") STR_B;
252 248
   LSTR MSG_AMAX_C                         = _UxGT("Tăng tốc ca") STR_C;
253
-  LSTR MSG_AMAX_I                         = _UxGT("Tăng tốc ca") STR_I;                // Amax
254
-  LSTR MSG_AMAX_J                         = _UxGT("Tăng tốc ca") STR_J;
255
-  LSTR MSG_AMAX_K                         = _UxGT("Tăng tốc ca") STR_K;
256
-  LSTR MSG_AMAX_E                         = _UxGT("Tăng tốc ca") STR_E;
249
+  LSTR MSG_AMAX_N                         = _UxGT("Tăng tốc ca@");
250
+  LSTR MSG_AMAX_E                         = _UxGT("Tăng tốc caE");
257 251
   LSTR MSG_AMAX_EN                        = _UxGT("Tăng tốc ca *");
258 252
   LSTR MSG_A_RETRACT                      = _UxGT("TT-Rút");                               // A-retract
259 253
   LSTR MSG_A_TRAVEL                       = _UxGT("TT-Chuyển");                            // A-travel
@@ -261,9 +255,7 @@ namespace Language_vi {
261 255
   LSTR MSG_A_STEPS                        = _UxGT("Bước") STR_A _UxGT("/mm");          // Steps/mm
262 256
   LSTR MSG_B_STEPS                        = _UxGT("Bước") STR_B _UxGT("/mm");
263 257
   LSTR MSG_C_STEPS                        = _UxGT("Bước") STR_C _UxGT("/mm");
264
-  LSTR MSG_I_STEPS                        = _UxGT("Bước") STR_I _UxGT("/mm");          // Steps/mm
265
-  LSTR MSG_J_STEPS                        = _UxGT("Bước") STR_J _UxGT("/mm");
266
-  LSTR MSG_K_STEPS                        = _UxGT("Bước") STR_K _UxGT("/mm");
258
+  LSTR MSG_N_STEPS                        = _UxGT("Bước@/mm");
267 259
   LSTR MSG_E_STEPS                        = _UxGT("BướcE/mm");
268 260
   LSTR MSG_EN_STEPS                       = _UxGT("Bước */mm");
269 261
   LSTR MSG_TEMPERATURE                    = _UxGT("Nhiệt độ");                             // Temperature
@@ -339,6 +331,7 @@ namespace Language_vi {
339 331
   LSTR MSG_BABYSTEP_X                     = _UxGT("Nhít X");                               // Babystep X
340 332
   LSTR MSG_BABYSTEP_Y                     = _UxGT("Nhít Y");
341 333
   LSTR MSG_BABYSTEP_Z                     = _UxGT("Nhít Z");
334
+  LSTR MSG_BABYSTEP_N                     = _UxGT("Nhít @");
342 335
   LSTR MSG_ENDSTOP_ABORT                  = _UxGT("Hủy bỏ công tắc");                      // Endstop abort
343 336
   LSTR MSG_HEATING_FAILED_LCD             = _UxGT("Sưởi đầu phun không thành công");       // Heating failed
344 337
   LSTR MSG_ERR_REDUNDANT_TEMP             = _UxGT("Điều sai: nhiệt độ dư");                // Err: REDUNDANT TEMP
@@ -399,13 +392,7 @@ namespace Language_vi {
399 392
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("Nhiệt độ tối đa");                      // Max temp
400 393
   LSTR MSG_INFO_PSU                       = _UxGT("Bộ nguồn");                             // PSU
401 394
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("Sức mạnh ổ đĩa");                       // Drive Strength
402
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" % trình điều khiển");        // X Driver %
403
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" % trình điều khiển");
404
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" % trình điều khiển");
405
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" % trình điều khiển");
406
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" % trình điều khiển");
407
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" % trình điều khiển");
408
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E % trình điều khiển");
395
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ % trình điều khiển");
409 396
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("Ghi DAC EEPROM");                       // DAC EEPROM Write
410 397
   LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE   = _UxGT("In tạm dừng");                          // PRINT PAUSED
411 398
   LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD    = _UxGT("Nạp dây nhựa");

+ 9
- 23
Marlin/src/lcd/language/language_zh_CN.h Ver fichero

@@ -225,7 +225,7 @@ namespace Language_zh_CN {
225 225
   LSTR MSG_MOVE_E                         = _UxGT("挤出机");     // "Extruder"
226 226
   LSTR MSG_MOVE_EN                        = _UxGT("挤出机 *");     // "Extruder"
227 227
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("热端太冷");
228
-  LSTR MSG_MOVE_N_MM                      = _UxGT("移动 %s mm");     // "Move 0.025mm"
228
+  LSTR MSG_MOVE_N_MM                      = _UxGT("移动 $ mm");      // "Move 0.025mm"
229 229
   LSTR MSG_MOVE_01MM                      = _UxGT("移动 0.1 mm");     // "Move 0.1mm"
230 230
   LSTR MSG_MOVE_1MM                       = _UxGT("移动 1 mm");     // "Move 1mm"
231 231
   LSTR MSG_MOVE_10MM                      = _UxGT("移动 10 mm");     // "Move 10mm"
@@ -270,19 +270,15 @@ namespace Language_zh_CN {
270 270
   LSTR MSG_VA_JERK                        = _UxGT("轴抖动速率") STR_A;     // "Va-jerk"
271 271
   LSTR MSG_VB_JERK                        = _UxGT("轴抖动速率") STR_B;     // "Vb-jerk"
272 272
   LSTR MSG_VC_JERK                        = _UxGT("轴抖动速率") STR_C;     // "Vc-jerk"
273
-  LSTR MSG_VI_JERK                        = _UxGT("轴抖动速率") STR_I;     // "Vi-jerk"
274
-  LSTR MSG_VJ_JERK                        = _UxGT("轴抖动速率") STR_J;     // "Vj-jerk"
275
-  LSTR MSG_VK_JERK                        = _UxGT("轴抖动速率") STR_K;     // "Vk-jerk"
273
+  LSTR MSG_VN_JERK                        = _UxGT("轴抖动速率@");          // "V@-jerk"
276 274
   LSTR MSG_VE_JERK                        = _UxGT("挤出机抖动速率");     // "Ve-jerk"
277 275
   LSTR MSG_JUNCTION_DEVIATION             = _UxGT("接点差");
278
-  LSTR MSG_VELOCITY                       = _UxGT("速度");     // "Velocity"
276
+  LSTR MSG_MAX_SPEED                      = _UxGT("速度");     // "Velocity"
279 277
   LSTR MSG_VMAX_A                         = _UxGT("最大进料速率") STR_A;     // "Vmax " max_feedrate_mm_s
280 278
   LSTR MSG_VMAX_B                         = _UxGT("最大进料速率") STR_B;
281 279
   LSTR MSG_VMAX_C                         = _UxGT("最大进料速率") STR_C;
282
-  LSTR MSG_VMAX_I                         = _UxGT("最大进料速率") STR_I;
283
-  LSTR MSG_VMAX_J                         = _UxGT("最大进料速率") STR_J;
284
-  LSTR MSG_VMAX_K                         = _UxGT("最大进料速率") STR_K;
285
-  LSTR MSG_VMAX_E                         = _UxGT("最大进料速率") STR_E;
280
+  LSTR MSG_VMAX_N                         = _UxGT("最大进料速率@");
281
+  LSTR MSG_VMAX_E                         = _UxGT("最大进料速率E");
286 282
   LSTR MSG_VMAX_EN                        = _UxGT("最大进料速率 *");
287 283
   LSTR MSG_VMIN                           = _UxGT("最小进料速率");     // "Vmin"  min_feedrate_mm_s
288 284
   LSTR MSG_VTRAV_MIN                      = _UxGT("最小移动速率");     // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
@@ -290,10 +286,8 @@ namespace Language_zh_CN {
290 286
   LSTR MSG_AMAX_A                         = _UxGT("最大打印加速度") STR_A;     // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
291 287
   LSTR MSG_AMAX_B                         = _UxGT("最大打印加速度") STR_B;
292 288
   LSTR MSG_AMAX_C                         = _UxGT("最大打印加速度") STR_C;
293
-  LSTR MSG_AMAX_I                         = _UxGT("最大打印加速度") STR_I;
294
-  LSTR MSG_AMAX_J                         = _UxGT("最大打印加速度") STR_J;
295
-  LSTR MSG_AMAX_K                         = _UxGT("最大打印加速度") STR_K;
296
-  LSTR MSG_AMAX_E                         = _UxGT("最大打印加速度") STR_E;
289
+  LSTR MSG_AMAX_N                         = _UxGT("最大打印加速度@");
290
+  LSTR MSG_AMAX_E                         = _UxGT("最大打印加速度E");
297 291
   LSTR MSG_AMAX_EN                        = _UxGT("最大打印加速度 *");
298 292
   LSTR MSG_A_RETRACT                      = _UxGT("收进加速度");     // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
299 293
   LSTR MSG_A_TRAVEL                       = _UxGT("非打印移动加速度");     // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
@@ -303,9 +297,7 @@ namespace Language_zh_CN {
303 297
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" 步数/mm");     // "Asteps/mm"
304 298
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" 步数/mm");
305 299
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" 步数/mm");
306
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" 步数/mm");
307
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" 步数/mm");
308
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" 步数/mm");
300
+  LSTR MSG_N_STEPS                        = _UxGT("@ 步数/mm");
309 301
   LSTR MSG_E_STEPS                        = _UxGT("E 步数/mm");     // "Esteps/mm"
310 302
   LSTR MSG_EN_STEPS                       = _UxGT("* 步数/mm");
311 303
   LSTR MSG_TEMPERATURE                    = _UxGT("温度");     // "Temperature"
@@ -507,13 +499,7 @@ namespace Language_zh_CN {
507 499
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("最高温度");     // "Max Temp"
508 500
   LSTR MSG_INFO_PSU                       = _UxGT("电源供应");     // "Power Supply"
509 501
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("驱动力度");     // "Drive Strength"
510
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" 驱动 %");     // "X Driver %"
511
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" 驱动 %");
512
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" 驱动 %");
513
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" 驱动 %");
514
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" 驱动 %");
515
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" 驱动 %");
516
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E 驱动 %");     // "E Driver %"
502
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ 驱动 %");     // "E Driver %"
517 503
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC 连接错误");
518 504
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("保存驱动设置");     // "DAC EEPROM Write"
519 505
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("更换料");

+ 9
- 23
Marlin/src/lcd/language/language_zh_TW.h Ver fichero

@@ -221,7 +221,7 @@ namespace Language_zh_TW {
221 221
   LSTR MSG_MOVE_E                         = _UxGT("擠出機");     // "Extruder"
222 222
   LSTR MSG_MOVE_EN                        = _UxGT("擠出機 *");       // "Extruder *"
223 223
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("噴嘴溫度不夠");   // "Hotend too cold"
224
-  LSTR MSG_MOVE_N_MM                      = _UxGT("移動 %s mm");     // "Move 0.025mm"
224
+  LSTR MSG_MOVE_N_MM                      = _UxGT("移動 $ mm");      // "Move 0.025mm"
225 225
   LSTR MSG_MOVE_01MM                      = _UxGT("移動 0.1 mm");    // "Move 0.1mm"
226 226
   LSTR MSG_MOVE_1MM                       = _UxGT("移動 1 mm");      // "Move 1mm"
227 227
   LSTR MSG_MOVE_10MM                      = _UxGT("移動 10 mm");     // "Move 10mm"
@@ -254,19 +254,15 @@ namespace Language_zh_TW {
254 254
   LSTR MSG_VA_JERK                        = _UxGT("軸抖動速率") STR_A;     // "Va-jerk"
255 255
   LSTR MSG_VB_JERK                        = _UxGT("軸抖動速率") STR_B;
256 256
   LSTR MSG_VC_JERK                        = _UxGT("軸抖動速率") STR_C;
257
-  LSTR MSG_VI_JERK                        = _UxGT("軸抖動速率") STR_I;
258
-  LSTR MSG_VJ_JERK                        = _UxGT("軸抖動速率") STR_J;
259
-  LSTR MSG_VK_JERK                        = _UxGT("軸抖動速率") STR_K;
257
+  LSTR MSG_VN_JERK                        = _UxGT("軸抖動速率@");
260 258
   LSTR MSG_VE_JERK                        = _UxGT("擠出機抖動速率");
261 259
 
262
-  LSTR MSG_VELOCITY                       = _UxGT("速度");     // "Velocity"
260
+  LSTR MSG_MAX_SPEED                      = _UxGT("速度");     // "Velocity"
263 261
   LSTR MSG_VMAX_A                         = _UxGT("最大進料速率") STR_A;     // "Vmax " max_feedrate_mm_s
264 262
   LSTR MSG_VMAX_B                         = _UxGT("最大進料速率") STR_B;
265 263
   LSTR MSG_VMAX_C                         = _UxGT("最大進料速率") STR_C;
266
-  LSTR MSG_VMAX_I                         = _UxGT("最大進料速率") STR_I;
267
-  LSTR MSG_VMAX_J                         = _UxGT("最大進料速率") STR_J;
268
-  LSTR MSG_VMAX_K                         = _UxGT("最大進料速率") STR_K;
269
-  LSTR MSG_VMAX_E                         = _UxGT("最大進料速率") STR_E;
264
+  LSTR MSG_VMAX_N                         = _UxGT("最大進料速率@");
265
+  LSTR MSG_VMAX_E                         = _UxGT("最大進料速率E");
270 266
   LSTR MSG_VMAX_EN                        = _UxGT("最大進料速率 *");     // "Vmax " max_feedrate_mm_s
271 267
   LSTR MSG_VMIN                           = _UxGT("最小進料速率");     // "Vmin"  min_feedrate_mm_s
272 268
   LSTR MSG_VTRAV_MIN                      = _UxGT("最小移動速率");     // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
@@ -274,10 +270,8 @@ namespace Language_zh_TW {
274 270
   LSTR MSG_AMAX_A                         = _UxGT("最大列印加速度") STR_A;     // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
275 271
   LSTR MSG_AMAX_B                         = _UxGT("最大列印加速度") STR_B;
276 272
   LSTR MSG_AMAX_C                         = _UxGT("最大列印加速度") STR_C;
277
-  LSTR MSG_AMAX_I                         = _UxGT("最大列印加速度") STR_I;
278
-  LSTR MSG_AMAX_J                         = _UxGT("最大列印加速度") STR_J;
279
-  LSTR MSG_AMAX_K                         = _UxGT("最大列印加速度") STR_K;
280
-  LSTR MSG_AMAX_E                         = _UxGT("最大列印加速度") STR_E;
273
+  LSTR MSG_AMAX_N                         = _UxGT("最大列印加速度@");
274
+  LSTR MSG_AMAX_E                         = _UxGT("最大列印加速度E");
281 275
   LSTR MSG_AMAX_EN                        = _UxGT("最大列印加速度 *");     // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
282 276
   LSTR MSG_A_RETRACT                      = _UxGT("回縮加速度");     // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
283 277
   LSTR MSG_A_TRAVEL                       = _UxGT("非列印移動加速度");     // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
@@ -285,9 +279,7 @@ namespace Language_zh_TW {
285 279
   LSTR MSG_A_STEPS                        = STR_A _UxGT(" 軸步數/mm");     // "Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92
286 280
   LSTR MSG_B_STEPS                        = STR_B _UxGT(" 軸步數/mm");
287 281
   LSTR MSG_C_STEPS                        = STR_C _UxGT(" 軸步數/mm");
288
-  LSTR MSG_I_STEPS                        = STR_I _UxGT(" 軸步數/mm");
289
-  LSTR MSG_J_STEPS                        = STR_J _UxGT(" 軸步數/mm");
290
-  LSTR MSG_K_STEPS                        = STR_K _UxGT(" 軸步數/mm");
282
+  LSTR MSG_N_STEPS                        = _UxGT("@ 軸步數/mm");
291 283
   LSTR MSG_E_STEPS                        = _UxGT("擠出機步數/mm");     // "Esteps/mm"
292 284
   LSTR MSG_EN_STEPS                       = _UxGT("擠出機~步數/mm");
293 285
   LSTR MSG_TEMPERATURE                    = _UxGT("溫度");     // "Temperature"
@@ -454,13 +446,7 @@ namespace Language_zh_TW {
454 446
   LSTR MSG_INFO_MAX_TEMP                  = _UxGT("最高溫度");     // "Max Temp"
455 447
   LSTR MSG_INFO_PSU                       = _UxGT("電源供應");     // "Power Supply"
456 448
   LSTR MSG_DRIVE_STRENGTH                 = _UxGT("驅動力度");     // "Drive Strength"
457
-  LSTR MSG_DAC_PERCENT_A                  = STR_A _UxGT(" 驅動 %");    // X Driver %
458
-  LSTR MSG_DAC_PERCENT_B                  = STR_B _UxGT(" 驅動 %");    // Y Driver %
459
-  LSTR MSG_DAC_PERCENT_C                  = STR_C _UxGT(" 驅動 %");    // Z Driver %
460
-  LSTR MSG_DAC_PERCENT_I                  = STR_I _UxGT(" 驅動 %");    // I Driver %
461
-  LSTR MSG_DAC_PERCENT_J                  = STR_J _UxGT(" 驅動 %");    // J Driver %
462
-  LSTR MSG_DAC_PERCENT_K                  = STR_K _UxGT(" 驅動 %");    // K Driver %
463
-  LSTR MSG_DAC_PERCENT_E                  = _UxGT("E 驅動 %");    //E Driver %
449
+  LSTR MSG_DAC_PERCENT_N                  = _UxGT("@ 驅動 %");    //E Driver %
464 450
   LSTR MSG_ERROR_TMC                      = _UxGT("TMC連接錯誤");   // "TMC CONNECTION ERROR"
465 451
   LSTR MSG_DAC_EEPROM_WRITE               = _UxGT("保存驅動設置");     // "DAC EEPROM Write"
466 452
   LSTR MSG_FILAMENT_CHANGE_HEADER         = _UxGT("更換絲料");   // "FILAMENT CHANGE"

+ 11
- 8
Marlin/src/lcd/lcdprint.cpp Ver fichero

@@ -32,19 +32,19 @@
32 32
 #include "lcdprint.h"
33 33
 
34 34
 /**
35
- * lcd_put_u8str_ind_P
35
+ * lcd_put_u8str_P
36 36
  *
37
- * Print a string with an index substituted within it:
37
+ * Print a string with optional substitutions:
38 38
  *
39
- *   $ displays the clipped C-string given by the inStr argument
39
+ *   $ displays the clipped string given by fstr or cstr
40 40
  *   = displays  '0'....'10' for indexes 0 - 10
41 41
  *   ~ displays  '1'....'11' for indexes 0 - 10
42 42
  *   * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
43 43
  *   @ displays an axis name such as XYZUVW, or E for an extruder
44 44
  */
45
-lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
45
+lcd_uint_t lcd_put_u8str_P(PGM_P const ptpl, const int8_t ind, const char *cstr/*=nullptr*/, FSTR_P const fstr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
46 46
   const uint8_t prop = USE_WIDE_GLYPH ? 2 : 1;
47
-  uint8_t *p = (uint8_t*)pstr;
47
+  const uint8_t *p = (uint8_t*)ptpl;
48 48
   int8_t n = maxlen;
49 49
   while (n > 0) {
50 50
     wchar_t ch;
@@ -71,8 +71,11 @@ lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const i
71 71
         break;
72 72
       }
73 73
     }
74
-    else if (ch == '$' && inStr) {
75
-      n -= lcd_put_u8str_max_P(inStr, n * (MENU_FONT_WIDTH)) / (MENU_FONT_WIDTH);
74
+    else if (ch == '$' && fstr) {
75
+      n -= lcd_put_u8str_max_P(FTOP(fstr), n * (MENU_FONT_WIDTH)) / (MENU_FONT_WIDTH);
76
+    }
77
+    else if (ch == '$' && cstr) {
78
+      n -= lcd_put_u8str_max(cstr, n * (MENU_FONT_WIDTH)) / (MENU_FONT_WIDTH);
76 79
     }
77 80
     else if (ch == '@') {
78 81
       lcd_put_wchar(AXIS_CHAR(ind));
@@ -90,7 +93,7 @@ lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const i
90 93
 int calculateWidth(PGM_P const pstr) {
91 94
   if (!USE_WIDE_GLYPH) return utf8_strlen_P(pstr) * MENU_FONT_WIDTH;
92 95
   const uint8_t prop = 2;
93
-  uint8_t *p = (uint8_t*)pstr;
96
+  const uint8_t *p = (uint8_t*)pstr;
94 97
   int n = 0;
95 98
 
96 99
   do {

+ 109
- 25
Marlin/src/lcd/lcdprint.h Ver fichero

@@ -130,83 +130,167 @@
130 130
 
131 131
 int lcd_glyph_height();
132 132
 
133
-int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length);
133
+/**
134
+ * @brief Draw a UTF-8 character
135
+ *
136
+ * @param utf8_str : the UTF-8 character
137
+ * @param max_length : the output width limit (in pixels on GLCD)
138
+ *
139
+ * @return the output width (in pixels on GLCD)
140
+ */
141
+int lcd_put_wchar_max(const wchar_t c, const pixel_len_t max_length);
134 142
 
135 143
 /**
136
- * @brief Draw a UTF-8 string
144
+ * @brief Draw a SRAM UTF-8 string
137 145
  *
138 146
  * @param utf8_str : the UTF-8 string
139
- * @param max_length : the pixel length of the string allowed (or number of slots in HD44780)
140
- *
141
- * @return the pixel width
147
+ * @param max_length : the output width limit (in pixels on GLCD)
142 148
  *
143
- * Draw a UTF-8 string
149
+ * @return the output width (in pixels on GLCD)
144 150
  */
145
-int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length);
151
+int lcd_put_u8str_max(const char *utf8_str, const pixel_len_t max_length);
146 152
 
147 153
 /**
148
- * Set the print baseline position
154
+ * Change the print cursor position
149 155
  */
150 156
 void lcd_moveto(const lcd_uint_t col, const lcd_uint_t row);
151 157
 
152 158
 /**
153 159
  * @brief Draw a ROM UTF-8 string
154 160
  *
155
- * @param utf8_pstr : the ROM UTF-8 string
156
- * @param max_length : the pixel length of the string allowed (or number of slots in HD44780)
161
+ * @param pstr : the ROM UTF-8 string
162
+ * @param max_length : the output width limit (in pixels on GLCD)
157 163
  *
158
- * @return the pixel width
159
- *
160
- * Draw a ROM UTF-8 string
164
+ * @return the output width (in pixels on GLCD)
161 165
  */
162
-int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length);
163
-inline int lcd_put_u8str_max_P(const lcd_uint_t col, const lcd_uint_t row, PGM_P utf8_pstr, pixel_len_t max_length) {
166
+int lcd_put_u8str_max_P(PGM_P pstr, const pixel_len_t max_length);
167
+inline int lcd_put_u8str_max_P(const lcd_uint_t col, const lcd_uint_t row, PGM_P pstr, const pixel_len_t max_length) {
164 168
   lcd_moveto(col, row);
165
-  return lcd_put_u8str_max_P(utf8_pstr, max_length);
169
+  return lcd_put_u8str_max_P(pstr, max_length);
166 170
 }
167
-inline int lcd_put_u8str_max(const lcd_uint_t col, const lcd_uint_t row, FSTR_P const utf8_fstr, pixel_len_t max_length) {
168
-  return lcd_put_u8str_max_P(col, row, FTOP(utf8_fstr), max_length);
171
+inline int lcd_put_u8str_max(const lcd_uint_t col, const lcd_uint_t row, FSTR_P const fstr, const pixel_len_t max_length) {
172
+  return lcd_put_u8str_max_P(col, row, FTOP(fstr), max_length);
169 173
 }
170 174
 
175
+/**
176
+ * @brief Draw an integer, left-justified
177
+ *
178
+ * @param i : the integer
179
+ */
171 180
 void lcd_put_int(const int i);
172 181
 inline void lcd_put_int(const lcd_uint_t col, const lcd_uint_t row, const int i) {
173 182
   lcd_moveto(col, row);
174 183
   lcd_put_int(i);
175 184
 }
176 185
 
186
+/**
187
+ * @brief Draw a ROM UTF-8 string
188
+ *
189
+ * @param i : the integer
190
+ */
177 191
 inline int lcd_put_u8str_P(PGM_P const pstr) { return lcd_put_u8str_max_P(pstr, PIXEL_LEN_NOLIMIT); }
178 192
 inline int lcd_put_u8str_P(const lcd_uint_t col, const lcd_uint_t row, PGM_P const pstr) {
179 193
   lcd_moveto(col, row);
180 194
   return lcd_put_u8str_P(pstr);
181 195
 }
182 196
 
197
+/**
198
+ * @brief Draw a ROM UTF-8 F-string
199
+ *
200
+ * @param fstr The F-string pointer
201
+ * @return the output width (in pixels on GLCD)
202
+ */
183 203
 inline int lcd_put_u8str(FSTR_P const fstr) { return lcd_put_u8str_P(FTOP(fstr)); }
184 204
 inline int lcd_put_u8str(const lcd_uint_t col, const lcd_uint_t row, FSTR_P const fstr) {
185 205
   return lcd_put_u8str_P(col, row, FTOP(fstr));
186 206
 }
187 207
 
188
-lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH);
189
-inline lcd_uint_t lcd_put_u8str_ind_P(const lcd_uint_t col, const lcd_uint_t row, PGM_P const pstr, const int8_t ind, PGM_P const inStr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH) {
208
+/**
209
+ * @brief Draw a string with optional substitution
210
+ * @details Print a string with optional substitutions:
211
+ *   $ displays the clipped string given by fstr or cstr
212
+ *   = displays  '0'....'10' for indexes 0 - 10
213
+ *   ~ displays  '1'....'11' for indexes 0 - 10
214
+ *   * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
215
+ *   @ displays an axis name such as XYZUVW, or E for an extruder
216
+ *
217
+ * @param ptpl A ROM string (template)
218
+ * @param ind An index value to use for = ~ * substitution
219
+ * @param cstr An SRAM C-string to use for $ substitution
220
+ * @param fstr A ROM F-string to use for $ substitution
221
+ * @param maxlen The maximum size of the string (in pixels on GLCD)
222
+ * @return the output width (in pixels on GLCD)
223
+ */
224
+lcd_uint_t lcd_put_u8str_P(PGM_P const ptpl, const int8_t ind, const char *cstr=nullptr, FSTR_P const fstr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH);
225
+inline lcd_uint_t lcd_put_u8str_P(const lcd_uint_t col, const lcd_uint_t row, PGM_P const ptpl, const int8_t ind, const char *cstr=nullptr, FSTR_P const fstr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH) {
190 226
   lcd_moveto(col, row);
191
-  return lcd_put_u8str_ind_P(pstr, ind, inStr, maxlen);
227
+  return lcd_put_u8str_P(ptpl, ind, cstr, fstr, maxlen);
192 228
 }
193
-inline lcd_uint_t lcd_put_u8str_ind(FSTR_P const fstr, const int8_t ind, FSTR_P const inFstr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH) {
194
-  return lcd_put_u8str_ind_P(FTOP(fstr), ind, FTOP(inFstr), maxlen);
229
+/**
230
+ * @brief Draw a ROM UTF-8 F-string with optional substitution
231
+ * @details (See above)
232
+ *
233
+ * @param ftpl A ROM F-string (template)
234
+ * @param ind An index value to use for = ~ * substitution
235
+ * @param cstr An SRAM C-string to use for $ substitution
236
+ * @param fstr A ROM F-string to use for $ substitution
237
+ * @param maxlen The maximum size of the string (in pixels on GLCD)
238
+ * @return the output width (in pixels on GLCD)
239
+ */
240
+inline lcd_uint_t lcd_put_u8str(FSTR_P const ftpl, const int8_t ind, const char *cstr=nullptr, FSTR_P const fstr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH) {
241
+  return lcd_put_u8str_P(FTOP(ftpl), ind, cstr, fstr, maxlen);
195 242
 }
196
-inline lcd_uint_t lcd_put_u8str_ind(const lcd_uint_t col, const lcd_uint_t row, FSTR_P const fstr, const int8_t ind, FSTR_P const inFstr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH) {
197
-  return lcd_put_u8str_ind_P(col, row, FTOP(fstr), ind, FTOP(inFstr), maxlen);
243
+/**
244
+ * @param col
245
+ * @param row
246
+ */
247
+inline lcd_uint_t lcd_put_u8str(const lcd_uint_t col, const lcd_uint_t row, FSTR_P const ftpl, const int8_t ind, const char *cstr=nullptr, FSTR_P const fstr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH) {
248
+  return lcd_put_u8str_P(col, row, FTOP(ftpl), ind, cstr, fstr, maxlen);
198 249
 }
199 250
 
251
+/**
252
+ * @brief Draw a SRAM string with no width limit
253
+ *
254
+ * @param str The UTF-8 string
255
+ * @return the output width (in pixels on GLCD)
256
+ */
200 257
 inline int lcd_put_u8str(const char * const str) { return lcd_put_u8str_max(str, PIXEL_LEN_NOLIMIT); }
258
+/**
259
+ * @param col
260
+ * @param row
261
+ */
201 262
 inline int lcd_put_u8str(const lcd_uint_t col, const lcd_uint_t row, const char * const str) {
202 263
   lcd_moveto(col, row);
203 264
   return lcd_put_u8str(str);
204 265
 }
205 266
 
267
+/**
268
+ * @brief Draw a UTF-8 character with no width limit
269
+ *
270
+ * @param c The wchar to draw
271
+ * @return the output width (in pixels on GLCD)
272
+ */
206 273
 inline int lcd_put_wchar(const wchar_t c) { return lcd_put_wchar_max(c, PIXEL_LEN_NOLIMIT); }
274
+/**
275
+ * @param col
276
+ * @param row
277
+ */
207 278
 inline int lcd_put_wchar(const lcd_uint_t col, const lcd_uint_t row, const wchar_t c) {
208 279
   lcd_moveto(col, row);
209 280
   return lcd_put_wchar(c);
210 281
 }
211 282
 
283
+/**
284
+ * @brief Calculate the width of a ROM UTF-8 string (in pixels on GLCD)
285
+ *
286
+ * @param pstr The ROM-based UTF-8 string
287
+ * @return the string width (in pixels on GLCD)
288
+ */
212 289
 int calculateWidth(PGM_P const pstr);
290
+/**
291
+ * @brief Calculate the width of a ROM UTF-8 string (in pixels on GLCD)
292
+ *
293
+ * @param pstr The ROM-based UTF-8 string
294
+ * @return the string width (in pixels on GLCD)
295
+ */
296
+inline int calculateWidth(FSTR_P const fstr) { return calculateWidth(FTOP(fstr)); }

+ 3
- 2
Marlin/src/lcd/marlinui.cpp Ver fichero

@@ -416,10 +416,11 @@ void MarlinUI::init() {
416 416
           SETCURSOR(0, row);              // Simulate carriage return
417 417
         };
418 418
 
419
-        uint8_t *p = (uint8_t*)string;
419
+        const uint8_t *p = (uint8_t*)string;
420 420
         wchar_t ch;
421 421
         if (wordwrap) {
422
-          uint8_t *wrd = nullptr, c = 0;
422
+          const uint8_t *wrd = nullptr;
423
+          uint8_t c = 0;
423 424
           // find the end of the part
424 425
           for (;;) {
425 426
             if (!wrd) wrd = p;            // Get word start /before/ advancing

+ 4
- 3
Marlin/src/lcd/menu/menu.cpp Ver fichero

@@ -68,9 +68,10 @@ typedef struct {
68 68
 menuPosition screen_history[6];
69 69
 uint8_t screen_history_depth = 0;
70 70
 
71
-int8_t MenuItemBase::itemIndex;   // Index number for draw and action
72
-FSTR_P MenuItemBase::itemString;  // A string for substitution
73
-chimera_t editable;               // Value Editing
71
+int8_t MenuItemBase::itemIndex;         // Index number for draw and action
72
+FSTR_P MenuItemBase::itemStringF;       // A string for substitution
73
+const char *MenuItemBase::itemStringC;
74
+chimera_t editable;                     // Value Editing
74 75
 
75 76
 // Menu Edit Items
76 77
 FSTR_P       MenuEditItemBase::editLabel;

+ 12
- 10
Marlin/src/lcd/menu/menu.h Ver fichero

@@ -53,15 +53,17 @@ class MenuItemBase {
53 53
     // Index to interject in the item label and/or for use by its action.
54 54
     static int8_t itemIndex;
55 55
 
56
-    // An optional pointer for use in display or by the action
57
-    static FSTR_P itemString;
56
+    // Optional pointers for use in display or by the action
57
+    static FSTR_P itemStringF;
58
+    static const char* itemStringC;
58 59
 
59
-    // Store the index of the item ahead of use by indexed items
60
-    FORCE_INLINE static void init(const int8_t ind=0, FSTR_P const fstr=nullptr) { itemIndex = ind; itemString = fstr; }
60
+    // Store an index and string for later substitution
61
+    FORCE_INLINE static void init(const int8_t ind=0, FSTR_P const fstr=nullptr) { itemIndex = ind; itemStringF = fstr; itemStringC = nullptr; }
62
+    FORCE_INLINE static void init(const int8_t ind, const char * const cstr) { itemIndex = ind; itemStringC = cstr; itemStringF = nullptr; }
61 63
 
62 64
     // Implementation-specific:
63 65
     // Draw an item either selected (pre_char) or not (space) with post_char
64
-    // Menus may set up itemIndex, itemString and pass them to string-building or string-emitting functions
66
+    // Menus may set up itemIndex, itemStringC/F and pass them to string-building or string-emitting functions
65 67
     static void _draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char pre_char, const char post_char);
66 68
 
67 69
     // Draw an item either selected ('>') or not (space) with post_char
@@ -90,8 +92,8 @@ class MenuItem_back : public MenuItemBase {
90 92
 // YESNO_ITEM(LABEL,FY,FN,...)
91 93
 class MenuItem_confirm : public MenuItemBase {
92 94
   public:
93
-    FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, ...) {
94
-      _draw(sel, row, fstr, '>', LCD_STR_ARROW_RIGHT[0]);
95
+    FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const ftpl, ...) {
96
+      _draw(sel, row, ftpl, '>', LCD_STR_ARROW_RIGHT[0]);
95 97
     }
96 98
     // Implemented for HD44780 and DOGM
97 99
     // Draw the prompt, buttons, and state
@@ -170,10 +172,10 @@ class MenuEditItemBase : public MenuItemBase {
170 172
   public:
171 173
     // Implementation-specific:
172 174
     // Draw the current item at specified row with edit data
173
-    static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const inStr, const bool pgm=false);
175
+    static void draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm=false);
174 176
 
175
-    static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, FSTR_P const inStr) {
176
-      draw(sel, row, fstr, FTOP(inStr), true);
177
+    static void draw(const bool sel, const uint8_t row, FSTR_P const ftpl, FSTR_P const fstr) {
178
+      draw(sel, row, ftpl, FTOP(fstr), true);
177 179
     }
178 180
 
179 181
     // Implementation-specific:

+ 20
- 28
Marlin/src/lcd/menu/menu_advanced.cpp Ver fichero

@@ -68,8 +68,10 @@ void menu_backlash();
68 68
     LOOP_LOGICAL_AXES(i) driverPercent[i] = stepper_dac.get_current_percent((AxisEnum)i);
69 69
     START_MENU();
70 70
     BACK_ITEM(MSG_ADVANCED_SETTINGS);
71
-    #define EDIT_DAC_PERCENT(A) EDIT_ITEM(uint8, MSG_DAC_PERCENT_##A, &driverPercent[_AXIS(A)], 0, 100, []{ stepper_dac.set_current_percents(driverPercent); });
72
-    MAP(EDIT_DAC_PERCENT, LOGICAL_AXIS_LIST(E, A, B, C, I, J, K, U, V, W));
71
+
72
+    LOOP_LOGICAL_AXES(a)
73
+      EDIT_ITEM_N(uint8, a, MSG_DAC_PERCENT_N, &driverPercent[a], 0, 100, []{ stepper_dac.set_current_percents(driverPercent); });
74
+
73 75
     ACTION_ITEM(MSG_DAC_EEPROM_WRITE, stepper_dac.commit_eeprom);
74 76
     END_MENU();
75 77
   }
@@ -427,11 +429,11 @@ void menu_backlash();
427 429
     START_MENU();
428 430
     BACK_ITEM(MSG_ADVANCED_SETTINGS);
429 431
 
430
-    #define EDIT_VMAX(N) EDIT_ITEM_FAST(float5, MSG_VMAX_##N, &planner.settings.max_feedrate_mm_s[_AXIS(N)], 1, max_fr_edit_scaled[_AXIS(N)]);
431
-    MAP(EDIT_VMAX, NUM_AXIS_LIST(A, B, C, I, J, K, U, V, W));
432
+    LOOP_NUM_AXES(a)
433
+      EDIT_ITEM_FAST_N(float5, a, MSG_VMAX_N, &planner.settings.max_feedrate_mm_s[a], 1, max_fr_edit_scaled[a]);
432 434
 
433 435
     #if E_STEPPERS
434
-      EDIT_ITEM_FAST(float5, MSG_VMAX_E, &planner.settings.max_feedrate_mm_s[E_AXIS_N(active_extruder)], 1, max_fr_edit_scaled.e);
436
+      EDIT_ITEM_FAST_N(float5, E_AXIS, MSG_VMAX_N, &planner.settings.max_feedrate_mm_s[E_AXIS_N(active_extruder)], 1, max_fr_edit_scaled.e);
435 437
     #endif
436 438
     #if ENABLED(DISTINCT_E_FACTORS)
437 439
       LOOP_L_N(n, E_STEPPERS)
@@ -515,11 +517,9 @@ void menu_backlash();
515 517
       BACK_ITEM(MSG_ADVANCED_SETTINGS);
516 518
 
517 519
       #if HAS_JUNCTION_DEVIATION
518
-        #if ENABLED(LIN_ADVANCE)
519
-          EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.3f, planner.recalculate_max_e_jerk);
520
-        #else
521
-          EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.5f);
522
-        #endif
520
+        EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, TERN(LIN_ADVANCE, 0.3f, 0.5f)
521
+          OPTARG(LIN_ADVANCE, planner.recalculate_max_e_jerk)
522
+        );
523 523
       #endif
524 524
 
525 525
       constexpr xyze_float_t max_jerk_edit =
@@ -532,21 +532,13 @@ void menu_backlash();
532 532
           LOGICAL_AXIS_ARRAY_1(990)
533 533
         #endif
534 534
       ;
535
-      #define EDIT_JERK(N) EDIT_ITEM_FAST(float3, MSG_V##N##_JERK, &planner.max_jerk[_AXIS(N)], 1, max_jerk_edit[_AXIS(N)])
536
-      #if ENABLED(DELTA)
537
-        #define EDIT_JERK_C() EDIT_JERK(C)
538
-      #else
539
-        #define EDIT_JERK_C() EDIT_ITEM_FAST(float52sign, MSG_VC_JERK, &planner.max_jerk.c, 0.1f, max_jerk_edit.c)
540
-      #endif
541
-      NUM_AXIS_CODE(
542
-        EDIT_JERK(A), EDIT_JERK(B), EDIT_JERK_C(),
543
-        EDIT_JERK(I), EDIT_JERK(J), EDIT_JERK(K),
544
-        EDIT_JERK(U), EDIT_JERK(V), EDIT_JERK(W)
545
-      );
546 535
 
547
-      #if HAS_EXTRUDERS
548
-        EDIT_ITEM_FAST(float52sign, MSG_VE_JERK, &planner.max_jerk.e, 0.1f, max_jerk_edit.e);
549
-      #endif
536
+      LOOP_LOGICAL_AXES(a) {
537
+        if (a == C_AXIS || TERN0(HAS_EXTRUDERS, a == E_AXIS))
538
+          EDIT_ITEM_FAST_N(float52sign, a, MSG_VN_JERK, &planner.max_jerk[a], 0.1f, max_jerk_edit[a]);
539
+        else
540
+          EDIT_ITEM_FAST_N(float3, a, MSG_VN_JERK, &planner.max_jerk[a], 1.0f, max_jerk_edit[a]);
541
+      }
550 542
 
551 543
       END_MENU();
552 544
     }
@@ -583,8 +575,8 @@ void menu_advanced_steps_per_mm() {
583 575
   START_MENU();
584 576
   BACK_ITEM(MSG_ADVANCED_SETTINGS);
585 577
 
586
-  #define EDIT_QSTEPS(Q) EDIT_ITEM_FAST(float61, MSG_##Q##_STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, []{ planner.refresh_positioning(); });
587
-  MAP(EDIT_QSTEPS, NUM_AXIS_LIST(A, B, C, I, J, K, U, V, W));
578
+  LOOP_NUM_AXES(a)
579
+    EDIT_ITEM_FAST_N(float61, a, MSG_N_STEPS, &planner.settings.axis_steps_per_mm[a], 5, 9999, []{ planner.refresh_positioning(); });
588 580
 
589 581
   #if ENABLED(DISTINCT_E_FACTORS)
590 582
     LOOP_L_N(n, E_STEPPERS)
@@ -596,7 +588,7 @@ void menu_advanced_steps_per_mm() {
596 588
           planner.mm_per_step[E_AXIS_N(e)] = 1.0f / planner.settings.axis_steps_per_mm[E_AXIS_N(e)];
597 589
       });
598 590
   #elif E_STEPPERS
599
-    EDIT_ITEM_FAST(float61, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, []{ planner.refresh_positioning(); });
591
+    EDIT_ITEM_FAST_N(float61, E_AXIS, MSG_N_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, []{ planner.refresh_positioning(); });
600 592
   #endif
601 593
 
602 594
   END_MENU();
@@ -622,7 +614,7 @@ void menu_advanced_settings() {
622 614
     #endif
623 615
 
624 616
     // M203 / M205 - Feedrate items
625
-    SUBMENU(MSG_VELOCITY, menu_advanced_velocity);
617
+    SUBMENU(MSG_MAX_SPEED, menu_advanced_velocity);
626 618
 
627 619
     // M201 - Acceleration items
628 620
     SUBMENU(MSG_ACCELERATION, menu_advanced_acceleration);

+ 1
- 1
Marlin/src/lcd/menu/menu_backlash.cpp Ver fichero

@@ -47,7 +47,7 @@ void menu_backlash() {
47 47
 
48 48
   #define EDIT_BACKLASH_DISTANCE(N) do { \
49 49
     editable.decimal = backlash.get_distance_mm(_AXIS(N)); \
50
-    EDIT_ITEM_FAST(float43, MSG_BACKLASH_##N, &editable.decimal, 0.0f, 9.9f, []{ backlash.set_distance_mm(_AXIS(N), editable.decimal); }); \
50
+    EDIT_ITEM_FAST_N(float43, _AXIS(N), MSG_BACKLASH_N, &editable.decimal, 0.0f, 9.9f, []{ backlash.set_distance_mm(_AXIS(N), editable.decimal); }); \
51 51
   } while (0);
52 52
 
53 53
   if (_CAN_CALI(A)) EDIT_BACKLASH_DISTANCE(A);

+ 1
- 1
Marlin/src/lcd/menu/menu_configuration.cpp Ver fichero

@@ -572,7 +572,7 @@ void menu_configuration() {
572 572
   // Preheat configurations
573 573
   #if HAS_PREHEAT && DISABLED(SLIM_LCD_MENUS)
574 574
     LOOP_L_N(m, PREHEAT_COUNT)
575
-      SUBMENU_N_S(m, ui.get_preheat_label(m), MSG_PREHEAT_M_SETTINGS, _menu_configuration_preheat_settings);
575
+      SUBMENU_N_f(m, ui.get_preheat_label(m), MSG_PREHEAT_M_SETTINGS, _menu_configuration_preheat_settings);
576 576
   #endif
577 577
 
578 578
   #if ENABLED(SOUND_MENU_ITEM)

+ 10
- 10
Marlin/src/lcd/menu/menu_filament.cpp Ver fichero

@@ -95,7 +95,7 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
95 95
   BACK_ITEM(MSG_BACK);
96 96
   #if HAS_PREHEAT
97 97
     LOOP_L_N(m, PREHEAT_COUNT)
98
-      ACTION_ITEM_N_S(m, ui.get_preheat_label(m), MSG_PREHEAT_M, _change_filament_with_preset);
98
+      ACTION_ITEM_N_f(m, ui.get_preheat_label(m), MSG_PREHEAT_M, _change_filament_with_preset);
99 99
   #endif
100 100
   EDIT_ITEM_FAST_N(int3, extruder, MSG_PREHEAT_CUSTOM, &thermalManager.temp_hotend[extruder].target,
101 101
     EXTRUDE_MINTEMP, thermalManager.hotend_max_target(extruder),
@@ -132,18 +132,18 @@ void menu_change_filament() {
132 132
 
133 133
     // Change filament
134 134
     #if E_STEPPERS == 1
135
-      FSTR_P const msg = GET_TEXT_F(MSG_FILAMENTCHANGE);
135
+      FSTR_P const fmsg = GET_TEXT_F(MSG_FILAMENTCHANGE);
136 136
       if (thermalManager.targetTooColdToExtrude(active_extruder))
137
-        SUBMENU_F(msg, []{ _menu_temp_filament_op(PAUSE_MODE_CHANGE_FILAMENT, 0); });
137
+        SUBMENU_F(fmsg, []{ _menu_temp_filament_op(PAUSE_MODE_CHANGE_FILAMENT, 0); });
138 138
       else
139
-        GCODES_ITEM_F(msg, F("M600 B0"));
139
+        GCODES_ITEM_F(fmsg, F("M600 B0"));
140 140
     #else
141
-      FSTR_P const msg = GET_TEXT_F(MSG_FILAMENTCHANGE_E);
141
+      FSTR_P const fmsg = GET_TEXT_F(MSG_FILAMENTCHANGE_E);
142 142
       LOOP_L_N(s, E_STEPPERS) {
143 143
         if (thermalManager.targetTooColdToExtrude(s))
144
-          SUBMENU_N_F(s, msg, []{ _menu_temp_filament_op(PAUSE_MODE_CHANGE_FILAMENT, MenuItemBase::itemIndex); });
144
+          SUBMENU_N_F(s, fmsg, []{ _menu_temp_filament_op(PAUSE_MODE_CHANGE_FILAMENT, MenuItemBase::itemIndex); });
145 145
         else {
146
-          ACTION_ITEM_N_F(s, msg, []{
146
+          ACTION_ITEM_N_F(s, fmsg, []{
147 147
             PGM_P const cmdpstr = PSTR("M600 B0 T%i");
148 148
             char cmd[strlen_P(cmdpstr) + 3 + 1];
149 149
             sprintf_P(cmd, cmdpstr, int(MenuItemBase::itemIndex));
@@ -271,10 +271,10 @@ void menu_pause_option() {
271 271
 //
272 272
 // ADVANCED_PAUSE_FEATURE message screens
273 273
 //
274
-// Warning: msg must have three null bytes to delimit lines!
274
+// Warning: fmsg must have three null bytes to delimit lines!
275 275
 //
276
-void _lcd_pause_message(FSTR_P const msg) {
277
-  PGM_P const msg1 = FTOP(msg);
276
+void _lcd_pause_message(FSTR_P const fmsg) {
277
+  PGM_P const msg1 = FTOP(fmsg);
278 278
   PGM_P const msg2 = msg1 + strlen_P(msg1) + 1;
279 279
   PGM_P const msg3 = msg2 + strlen_P(msg2) + 1;
280 280
   const bool has2 = msg2[0], has3 = msg3[0],

+ 71
- 9
Marlin/src/lcd/menu/menu_item.h Ver fichero

@@ -268,7 +268,7 @@ class MenuItem_bool : public MenuEditItemBase {
268 268
   #define _MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER)
269 269
 #endif
270 270
 
271
-#define _MENU_INNER_P(TYPE, USE_MULTIPLIER, FLABEL, V...) do { \
271
+#define _MENU_INNER_F(TYPE, USE_MULTIPLIER, FLABEL, V...) do { \
272 272
   FSTR_P const flabel = FLABEL;                                \
273 273
   if (encoderLine == _thisItemNr && ui.use_click()) {          \
274 274
     _MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER);               \
@@ -280,30 +280,41 @@ class MenuItem_bool : public MenuEditItemBase {
280 280
       (encoderLine == _thisItemNr, _lcdLineNr, flabel, ##V);   \
281 281
 }while(0)
282 282
 
283
+// Item with optional data
283 284
 #define _MENU_ITEM_F(TYPE, V...) do { \
284 285
   if (_menuLineNr == _thisItemNr) {   \
285 286
     _skipStatic = false;              \
286
-    _MENU_INNER_P(TYPE, ##V);         \
287
+    _MENU_INNER_F(TYPE, ##V);         \
287 288
   }                                   \
288 289
   NEXT_ITEM();                        \
289 290
 }while(0)
290 291
 
291
-// Indexed items set a global index value and optional data
292
+// Item with index value, C-string, and optional data
292 293
 #define _MENU_ITEM_N_S_F(TYPE, N, S, V...) do{ \
293 294
   if (_menuLineNr == _thisItemNr) {            \
294 295
     _skipStatic = false;                       \
295 296
     MenuItemBase::init(N, S);                  \
296
-    _MENU_INNER_P(TYPE, ##V);                  \
297
+    _MENU_INNER_F(TYPE, ##V);                  \
297 298
   }                                            \
298 299
   NEXT_ITEM();                                 \
299 300
 }while(0)
300 301
 
301
-// Indexed items set a global index value
302
+// Item with index value and F-string
303
+#define _MENU_ITEM_N_f_F(TYPE, N, f, V...) do{ \
304
+  if (_menuLineNr == _thisItemNr) {            \
305
+    _skipStatic = false;                       \
306
+    MenuItemBase::init(N, f);                  \
307
+    _MENU_INNER_F(TYPE, ##V);                  \
308
+  }                                            \
309
+  NEXT_ITEM();                                 \
310
+}while(0)
311
+
312
+// Item with index value
302 313
 #define _MENU_ITEM_N_F(TYPE, N, V...) do{ \
303 314
   if (_menuLineNr == _thisItemNr) {       \
304 315
     _skipStatic = false;                  \
305
-    MenuItemBase::itemIndex = N;          \
306
-    _MENU_INNER_P(TYPE, ##V);             \
316
+    MenuItemBase::init(N);                \
317
+    _MENU_INNER_F(TYPE, ##V);             \
307 318
   }                                       \
308 319
   NEXT_ITEM();                            \
309 320
 }while(0)
@@ -312,8 +323,18 @@ class MenuItem_bool : public MenuEditItemBase {
312 323
 #define _MENU_ITEM_S_F(TYPE, S, V...) do{ \
313 324
   if (_menuLineNr == _thisItemNr) {       \
314 325
     _skipStatic = false;                  \
315
-    MenuItemBase::itemString = S;         \
316
-    _MENU_INNER_P(TYPE, ##V);             \
326
+    MenuItemBase::init(0, S);             \
327
+    _MENU_INNER_F(TYPE, ##V);             \
328
+  }                                       \
329
+  NEXT_ITEM();                            \
330
+}while(0)
331
+
332
+// Items with a unique F-string
333
+#define _MENU_ITEM_f_F(TYPE, f, V...) do{ \
334
+  if (_menuLineNr == _thisItemNr) {       \
335
+    _skipStatic = false;                  \
336
+    MenuItemBase::init(0, f);             \
337
+    _MENU_INNER_F(TYPE, ##V);             \
317 338
   }                                       \
318 339
   NEXT_ITEM();                            \
319 340
 }while(0)
@@ -361,15 +382,24 @@ class MenuItem_bool : public MenuEditItemBase {
361 382
 #define STATIC_ITEM(LABEL, V...)                       STATIC_ITEM_F(GET_TEXT_F(LABEL), ##V)
362 383
 #define STATIC_ITEM_N(LABEL, N, V...)                STATIC_ITEM_N_F(GET_TEXT_F(LABEL), N, ##V)
363 384
 
385
+// Menu item with index and composed C-string substitution
364 386
 #define MENU_ITEM_N_S_F(TYPE, N, S, FLABEL, V...)   _MENU_ITEM_N_S_F(TYPE, N, S, false, FLABEL, ##V)
365 387
 #define MENU_ITEM_N_S(TYPE, N, S, LABEL, V...)       MENU_ITEM_N_S_F(TYPE, N, S, GET_TEXT_F(LABEL), ##V)
388
+
389
+// Menu item with composed C-string substitution
366 390
 #define MENU_ITEM_S_F(TYPE, S, FLABEL, V...)          _MENU_ITEM_S_F(TYPE, S, false, FLABEL, ##V)
367 391
 #define MENU_ITEM_S(TYPE, S, LABEL, V...)              MENU_ITEM_S_F(TYPE, S, GET_TEXT_F(LABEL), ##V)
392
+
393
+// Menu item substitution, indexed
368 394
 #define MENU_ITEM_N_F(TYPE, N, FLABEL, V...)          _MENU_ITEM_N_F(TYPE, N, false, FLABEL, ##V)
369 395
 #define MENU_ITEM_N(TYPE, N, LABEL, V...)              MENU_ITEM_N_F(TYPE, N, GET_TEXT_F(LABEL), ##V)
396
+
397
+// Basic menu items, no substitution
370 398
 #define MENU_ITEM_F(TYPE, FLABEL, V...)                 _MENU_ITEM_F(TYPE, false, FLABEL, ##V)
371 399
 #define MENU_ITEM(TYPE, LABEL, V...)                     MENU_ITEM_F(TYPE, GET_TEXT_F(LABEL), ##V)
372 400
 
401
+// Predefined menu item types //
402
+
373 403
 #define BACK_ITEM_F(FLABEL)                              MENU_ITEM_F(back, FLABEL)
374 404
 #define BACK_ITEM(LABEL)                                   MENU_ITEM(back, LABEL)
375 405
 
@@ -418,6 +448,38 @@ class MenuItem_bool : public MenuEditItemBase {
418 448
 #define EDIT_ITEM_FAST_F(TYPE, FLABEL, V...)                _MENU_ITEM_F(TYPE, true, FLABEL, ##V)
419 449
 #define EDIT_ITEM_FAST(TYPE, LABEL, V...)               EDIT_ITEM_FAST_F(TYPE, GET_TEXT_F(LABEL), ##V)
420 450
 
451
+// F-string substitution instead of C-string //
452
+
453
+#define MENU_ITEM_N_f_F(TYPE, N, f, FLABEL, V...)   _MENU_ITEM_N_f_F(TYPE, N, f, false, FLABEL, ##V)
454
+#define MENU_ITEM_N_f(TYPE, N, f, LABEL, V...)       MENU_ITEM_N_f_F(TYPE, N, f, GET_TEXT_F(LABEL), ##V)
455
+#define MENU_ITEM_f_F(TYPE, f, FLABEL, V...)          _MENU_ITEM_f_F(TYPE, f, false, FLABEL, ##V)
456
+#define MENU_ITEM_f(TYPE, f, LABEL, V...)              MENU_ITEM_f_F(TYPE, f, GET_TEXT_F(LABEL), ##V)
457
+
458
+#define ACTION_ITEM_N_f_F(N, f, FLABEL, ACTION)      MENU_ITEM_N_f_F(function, N, f, FLABEL, ACTION)
459
+#define ACTION_ITEM_N_f(N, f, LABEL, ACTION)       ACTION_ITEM_N_f_F(N, f, GET_TEXT_F(LABEL), ACTION)
460
+#define ACTION_ITEM_f_F(f, FLABEL, ACTION)             MENU_ITEM_f_F(function, f, FLABEL, ACTION)
461
+#define ACTION_ITEM_f(f, LABEL, ACTION)              ACTION_ITEM_f_F(f, GET_TEXT_F(LABEL), ACTION)
462
+
463
+#define GCODES_ITEM_N_f_F(N, f, FLABEL, GCODES)      MENU_ITEM_N_f_F(gcode, N, f, FLABEL, GCODES)
464
+#define GCODES_ITEM_N_f(N, f, LABEL, GCODES)       GCODES_ITEM_N_f_F(N, f, GET_TEXT_F(LABEL), GCODES)
465
+#define GCODES_ITEM_f_F(f, FLABEL, GCODES)             MENU_ITEM_f_F(gcode, f, FLABEL, GCODES)
466
+#define GCODES_ITEM_f(f, LABEL, GCODES)              GCODES_ITEM_f_F(f, GET_TEXT_F(LABEL), GCODES)
467
+
468
+#define SUBMENU_N_f_F(N, f, FLABEL, DEST)            MENU_ITEM_N_f_F(submenu, N, f, FLABEL, DEST)
469
+#define SUBMENU_N_f(N, f, LABEL, DEST)                 SUBMENU_N_f_F(N, f, GET_TEXT_F(LABEL), DEST)
470
+#define SUBMENU_f_F(f, FLABEL, DEST)                   MENU_ITEM_f_F(submenu, f, FLABEL, DEST)
471
+#define SUBMENU_f(f, LABEL, DEST)                        SUBMENU_f_F(f, GET_TEXT_F(LABEL), DEST)
472
+
473
+#define EDIT_ITEM_N_f_F(TYPE, N, f, FLABEL, V...)    MENU_ITEM_N_f_F(TYPE, N, f, FLABEL, ##V)
474
+#define EDIT_ITEM_N_f(TYPE, N, f, LABEL, V...)       EDIT_ITEM_N_f_F(TYPE, N, f, GET_TEXT_F(LABEL), ##V)
475
+#define EDIT_ITEM_f_F(TYPE, f, FLABEL, V...)           MENU_ITEM_f_F(TYPE, f, FLABEL, ##V)
476
+#define EDIT_ITEM_f(TYPE, f, LABEL, V...)              EDIT_ITEM_f_F(TYPE, f, GET_TEXT_F(LABEL), ##V)
477
+
478
+#define EDIT_ITEM_FAST_N_f_F(TYPE, N, f, FLABEL, V...)  _MENU_ITEM_N_f_F(TYPE, N, f, true, FLABEL, ##V)
479
+#define EDIT_ITEM_FAST_N_f(TYPE, N, f, LABEL, V...) EDIT_ITEM_FAST_N_f_F(TYPE, N, f, true, GET_TEXT_F(LABEL), ##V)
480
+#define EDIT_ITEM_FAST_f_F(TYPE, f, FLABEL, V...)         _MENU_ITEM_f_F(TYPE, f, true, FLABEL, ##V)
481
+#define EDIT_ITEM_FAST_f(TYPE, f, LABEL, V...)        EDIT_ITEM_FAST_f_F(TYPE, f, GET_TEXT_F(LABEL), ##V)
482
+
421 483
 #define _CONFIRM_ITEM_INNER_F(FLABEL, V...) do {             \
422 484
   if (encoderLine == _thisItemNr && ui.use_click()) {        \
423 485
     ui.push_current_screen();                                \

+ 4
- 16
Marlin/src/lcd/menu/menu_motion.cpp Ver fichero

@@ -54,6 +54,8 @@
54 54
 // "Motion" > "Move Axis" submenu
55 55
 //
56 56
 
57
+// TODO: Use substitution here with MSG_MOVE_N
58
+
57 59
 static void _lcd_move_xyz(FSTR_P const name, const AxisEnum axis) {
58 60
   if (ui.use_click()) return ui.goto_previous_screen_no_defer();
59 61
   if (ui.encoderPosition && !ui.manual_move.processing) {
@@ -192,22 +194,8 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
192 194
     SUBMENU(MSG_MOVE_10MM, []{ _goto_manual_move(10);    });
193 195
     SUBMENU(MSG_MOVE_1MM,  []{ _goto_manual_move( 1);    });
194 196
     SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
195
-    if (axis == Z_AXIS && (FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f) {
196
-      // Determine digits needed right of decimal
197
-      constexpr uint8_t digs = !UNEAR_ZERO((FINE_MANUAL_MOVE) * 1000 - int((FINE_MANUAL_MOVE) * 1000)) ? 4 :
198
-                               !UNEAR_ZERO((FINE_MANUAL_MOVE) *  100 - int((FINE_MANUAL_MOVE) *  100)) ? 3 : 2;
199
-      PGM_P const label = GET_TEXT(MSG_MOVE_N_MM);
200
-      char tmp[strlen_P(label) + 10 + 1], numstr[10];
201
-      sprintf_P(tmp, label, dtostrf(FINE_MANUAL_MOVE, 1, digs, numstr));
202
-      #if DISABLED(HAS_GRAPHICAL_TFT)
203
-        SUBMENU_F(FPSTR(NUL_STR), []{ _goto_manual_move(float(FINE_MANUAL_MOVE)); });
204
-        MENU_ITEM_ADDON_START(0 + ENABLED(HAS_MARLINUI_HD44780));
205
-        lcd_put_u8str(tmp);
206
-        MENU_ITEM_ADDON_END();
207
-      #else
208
-        SUBMENU_F(FPSTR(tmp), []{ _goto_manual_move(float(FINE_MANUAL_MOVE)); });
209
-      #endif
210
-    }
197
+    if (axis == Z_AXIS && (FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f)
198
+      SUBMENU_f(F(STRINGIFY(FINE_MANUAL_MOVE)), MSG_MOVE_N_MM, []{ _goto_manual_move(float(FINE_MANUAL_MOVE)); });
211 199
   }
212 200
   END_MENU();
213 201
 }

+ 2
- 15
Marlin/src/lcd/menu/menu_probe_offset.cpp Ver fichero

@@ -68,21 +68,8 @@ void probe_offset_wizard_menu() {
68 68
   SUBMENU(MSG_MOVE_1MM,  []{ _goto_manual_move_z( 1);    });
69 69
   SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move_z( 0.1f); });
70 70
 
71
-  if ((FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f) {
72
-    char tmp[20], numstr[10];
73
-    // Determine digits needed right of decimal
74
-    const uint8_t digs = !UNEAR_ZERO((FINE_MANUAL_MOVE) * 1000 - int((FINE_MANUAL_MOVE) * 1000)) ? 4 :
75
-                         !UNEAR_ZERO((FINE_MANUAL_MOVE) *  100 - int((FINE_MANUAL_MOVE) *  100)) ? 3 : 2;
76
-    sprintf_P(tmp, GET_TEXT(MSG_MOVE_N_MM), dtostrf(FINE_MANUAL_MOVE, 1, digs, numstr));
77
-    #if DISABLED(HAS_GRAPHICAL_TFT)
78
-      SUBMENU_F(FPSTR(NUL_STR), []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
79
-      MENU_ITEM_ADDON_START(0 + ENABLED(HAS_MARLINUI_HD44780));
80
-      lcd_put_u8str(tmp);
81
-      MENU_ITEM_ADDON_END();
82
-    #else
83
-      SUBMENU_F(tmp, []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
84
-    #endif
85
-  }
71
+  if ((FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f)
72
+    SUBMENU_f(F(STRINGIFY(FINE_MANUAL_MOVE)), MSG_MOVE_N_MM, []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
86 73
 
87 74
   ACTION_ITEM(MSG_BUTTON_DONE, []{
88 75
     set_offset_and_go_back(calculated_z_offset);

+ 12
- 12
Marlin/src/lcd/menu/menu_temperature.cpp Ver fichero

@@ -88,14 +88,14 @@ void Temperature::lcd_preheat(const uint8_t e, const int8_t indh, const int8_t i
88 88
 
89 89
     // Indexed "Preheat ABC" and "Heat Bed" items
90 90
     #define PREHEAT_ITEMS(M,E) do{ \
91
-      ACTION_ITEM_N_S(E, ui.get_preheat_label(M), MSG_PREHEAT_M_H, []{ _preheat_both(M, MenuItemBase::itemIndex); }); \
92
-      ACTION_ITEM_N_S(E, ui.get_preheat_label(M), MSG_PREHEAT_M_END_E, []{ _preheat_end(M, MenuItemBase::itemIndex); }); \
91
+      ACTION_ITEM_N_f(E, ui.get_preheat_label(M), MSG_PREHEAT_M_H, []{ _preheat_both(M, MenuItemBase::itemIndex); }); \
92
+      ACTION_ITEM_N_f(E, ui.get_preheat_label(M), MSG_PREHEAT_M_END_E, []{ _preheat_end(M, MenuItemBase::itemIndex); }); \
93 93
     }while(0)
94 94
 
95 95
   #elif HAS_MULTI_HOTEND
96 96
 
97 97
     // No heated bed, so just indexed "Preheat ABC" items
98
-    #define PREHEAT_ITEMS(M,E) ACTION_ITEM_N_S(E, ui.get_preheat_label(M), MSG_PREHEAT_M_H, []{ _preheat_end(M, MenuItemBase::itemIndex); })
98
+    #define PREHEAT_ITEMS(M,E) ACTION_ITEM_N_f(E, ui.get_preheat_label(M), MSG_PREHEAT_M_H, []{ _preheat_end(M, MenuItemBase::itemIndex); })
99 99
 
100 100
   #endif
101 101
 
@@ -112,16 +112,16 @@ void Temperature::lcd_preheat(const uint8_t e, const int8_t indh, const int8_t i
112 112
       #if HOTENDS == 1
113 113
 
114 114
         #if HAS_HEATED_BED
115
-          ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M, []{ _preheat_both(editable.int8, 0); });
116
-          ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M_END, do_preheat_end_m);
115
+          ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M, []{ _preheat_both(editable.int8, 0); });
116
+          ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M_END, do_preheat_end_m);
117 117
         #else
118
-          ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m);
118
+          ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m);
119 119
         #endif
120 120
 
121 121
       #elif HAS_MULTI_HOTEND
122 122
 
123 123
         HOTEND_LOOP() PREHEAT_ITEMS(editable.int8, e);
124
-        ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M_ALL, []() {
124
+        ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M_ALL, []() {
125 125
           const celsius_t t = ui.material_preset[editable.int8].hotend_temp;
126 126
           HOTEND_LOOP() thermalManager.setTargetHotend(t, e);
127 127
           TERN(HAS_HEATED_BED, _preheat_bed(editable.int8), ui.return_to_status());
@@ -130,7 +130,7 @@ void Temperature::lcd_preheat(const uint8_t e, const int8_t indh, const int8_t i
130 130
       #endif
131 131
 
132 132
       #if HAS_HEATED_BED
133
-        ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M_BEDONLY, []{ _preheat_bed(editable.int8); });
133
+        ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M_BEDONLY, []{ _preheat_bed(editable.int8); });
134 134
       #endif
135 135
 
136 136
       END_MENU();
@@ -269,9 +269,9 @@ void menu_temperature() {
269 269
     LOOP_L_N(m, PREHEAT_COUNT) {
270 270
       editable.int8 = m;
271 271
       #if HAS_MULTI_HOTEND || HAS_HEATED_BED
272
-        SUBMENU_S(ui.get_preheat_label(m), MSG_PREHEAT_M, menu_preheat_m);
272
+        SUBMENU_f(ui.get_preheat_label(m), MSG_PREHEAT_M, menu_preheat_m);
273 273
       #elif HAS_HOTEND
274
-        ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m);
274
+        ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m);
275 275
       #endif
276 276
     }
277 277
   #endif
@@ -296,9 +296,9 @@ void menu_temperature() {
296 296
     LOOP_L_N(m, PREHEAT_COUNT) {
297 297
       editable.int8 = m;
298 298
       #if HAS_MULTI_HOTEND || HAS_HEATED_BED
299
-        SUBMENU_S(ui.get_preheat_label(m), MSG_PREHEAT_M, menu_preheat_m);
299
+        SUBMENU_f(ui.get_preheat_label(m), MSG_PREHEAT_M, menu_preheat_m);
300 300
       #else
301
-        ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m);
301
+        ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m);
302 302
       #endif
303 303
     }
304 304
 

+ 5
- 3
Marlin/src/lcd/menu/menu_tune.cpp Ver fichero

@@ -50,6 +50,8 @@
50 50
     #include "../dogm/marlinui_DOGM.h"
51 51
   #endif
52 52
 
53
+  // TODO: Replace fmsg with MSG_BABYSTEP_N and index substitution
54
+
53 55
   void _lcd_babystep(const AxisEnum axis, FSTR_P const fmsg) {
54 56
     if (ui.use_click()) return ui.goto_previous_screen_no_defer();
55 57
     if (ui.encoderPosition) {
@@ -223,13 +225,13 @@ void menu_tune() {
223 225
   //
224 226
   #if ENABLED(BABYSTEPPING)
225 227
     #if ENABLED(BABYSTEP_XY)
226
-      SUBMENU(MSG_BABYSTEP_X, []{ _lcd_babystep_go(_lcd_babystep_x); });
227
-      SUBMENU(MSG_BABYSTEP_Y, []{ _lcd_babystep_go(_lcd_babystep_y); });
228
+      SUBMENU_N(X_AXIS, MSG_BABYSTEP_N, []{ _lcd_babystep_go(_lcd_babystep_x); });
229
+      SUBMENU_N(Y_AXIS, MSG_BABYSTEP_N, []{ _lcd_babystep_go(_lcd_babystep_y); });
228 230
     #endif
229 231
     #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
230 232
       SUBMENU(MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
231 233
     #else
232
-      SUBMENU(MSG_BABYSTEP_Z, lcd_babystep_z);
234
+      SUBMENU_N(Z_AXIS, MSG_BABYSTEP_N, lcd_babystep_z);
233 235
     #endif
234 236
   #endif
235 237
 

+ 3
- 3
Marlin/src/lcd/menu/menu_ubl.cpp Ver fichero

@@ -211,10 +211,10 @@ void _lcd_ubl_edit_mesh() {
211 211
     #if HAS_PREHEAT
212 212
       #if HAS_HEATED_BED
213 213
         #define VALIDATE_MESH_GCODE_ITEM(M) \
214
-          GCODES_ITEM_N_S(M, ui.get_preheat_label(M), MSG_UBL_VALIDATE_MESH_M, F("G28\nG26CPI" STRINGIFY(M)));
214
+          GCODES_ITEM_N_f(M, ui.get_preheat_label(M), MSG_UBL_VALIDATE_MESH_M, F("G28\nG26CPI" STRINGIFY(M)));
215 215
       #else
216 216
         #define VALIDATE_MESH_GCODE_ITEM(M) \
217
-          GCODES_ITEM_N_S(M, ui.get_preheat_label(M), MSG_UBL_VALIDATE_MESH_M, F("G28\nG26CPB0I" STRINGIFY(M)));
217
+          GCODES_ITEM_N_f(M, ui.get_preheat_label(M), MSG_UBL_VALIDATE_MESH_M, F("G28\nG26CPB0I" STRINGIFY(M)));
218 218
       #endif
219 219
       REPEAT(PREHEAT_COUNT, VALIDATE_MESH_GCODE_ITEM)
220 220
     #endif
@@ -317,7 +317,7 @@ void _lcd_ubl_build_mesh() {
317 317
     #else
318 318
       #define PREHEAT_BED_GCODE(M) ""
319 319
     #endif
320
-    #define BUILD_MESH_GCODE_ITEM(M) GCODES_ITEM_S(ui.get_preheat_label(M), MSG_UBL_BUILD_MESH_M, \
320
+    #define BUILD_MESH_GCODE_ITEM(M) GCODES_ITEM_f(ui.get_preheat_label(M), MSG_UBL_BUILD_MESH_M, \
321 321
       F( \
322 322
         "G28\n" \
323 323
         PREHEAT_BED_GCODE(M) \

+ 1
- 10
Marlin/src/lcd/menu/menu_x_twist.cpp Ver fichero

@@ -100,19 +100,10 @@ void xatc_wizard_menu() {
100 100
   SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move_z( 0.1f); });
101 101
 
102 102
   if ((FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f) {
103
-    char tmp[20], numstr[10];
104 103
     // Determine digits needed right of decimal
105 104
     const uint8_t digs = !UNEAR_ZERO((FINE_MANUAL_MOVE) * 1000 - int((FINE_MANUAL_MOVE) * 1000)) ? 4 :
106 105
                          !UNEAR_ZERO((FINE_MANUAL_MOVE) *  100 - int((FINE_MANUAL_MOVE) *  100)) ? 3 : 2;
107
-    sprintf_P(tmp, GET_TEXT(MSG_MOVE_N_MM), dtostrf(FINE_MANUAL_MOVE, 1, digs, numstr));
108
-    #if DISABLED(HAS_GRAPHICAL_TFT)
109
-      SUBMENU_F(FPSTR(NUL_STR), []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
110
-      MENU_ITEM_ADDON_START(0 + ENABLED(HAS_MARLINUI_HD44780));
111
-      lcd_put_u8str(tmp);
112
-      MENU_ITEM_ADDON_END();
113
-    #else
114
-      SUBMENU_F(FPSTR(tmp), []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
115
-    #endif
106
+    SUBMENU_f(F(STRINGIFY(FINE_MANUAL_MOVE)), MSG_MOVE_N_MM, []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
116 107
   }
117 108
 
118 109
   ACTION_ITEM(MSG_BUTTON_DONE, xatc_wizard_set_offset_and_go_to_next_point);

+ 1
- 1
Marlin/src/lcd/tft/tft.h Ver fichero

@@ -94,7 +94,7 @@ class TFT {
94 94
     static void canvas(uint16_t x, uint16_t y, uint16_t width, uint16_t height) { queue.canvas(x, y, width, height); }
95 95
     static void set_background(uint16_t color) { queue.set_background(color); }
96 96
     static void add_text(uint16_t x, uint16_t y, uint16_t color, TFT_String tft_string, uint16_t maxWidth = 0) { queue.add_text(x, y, color, tft_string.string(), maxWidth); }
97
-    static void add_text(uint16_t x, uint16_t y, uint16_t color, const char *string, uint16_t maxWidth = 0) { queue.add_text(x, y, color, (uint8_t *)string, maxWidth); }
97
+    static void add_text(uint16_t x, uint16_t y, uint16_t color, const char *string, uint16_t maxWidth = 0) { queue.add_text(x, y, color, string, maxWidth); }
98 98
     static void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t *colors) { queue.add_image(x, y, image, colors); }
99 99
     static void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t color_main = COLOR_WHITE, uint16_t color_background = COLOR_BACKGROUND, uint16_t color_shadow = COLOR_BLACK) { queue.add_image(x, y, image, color_main,  color_background, color_shadow); }
100 100
     static void add_bar(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.add_bar(x, y, width, height, color); }

+ 2
- 2
Marlin/src/lcd/tft/tft_queue.cpp Ver fichero

@@ -215,13 +215,13 @@ void TFT_Queue::handle_queue_overflow(uint16_t sizeNeeded) {
215 215
   }
216 216
 }
217 217
 
218
-void TFT_Queue::add_text(uint16_t x, uint16_t y, uint16_t color, uint8_t *string, uint16_t maxWidth) {
218
+void TFT_Queue::add_text(uint16_t x, uint16_t y, uint16_t color, const uint8_t *string, uint16_t maxWidth) {
219 219
   handle_queue_overflow(sizeof(parametersCanvasText_t) + maxWidth);
220 220
   parametersCanvas_t *task_parameters = (parametersCanvas_t *)(((uint8_t *)last_task) + sizeof(queueTask_t));
221 221
   parametersCanvasText_t *parameters = (parametersCanvasText_t *)end_of_queue;
222 222
   last_parameter = end_of_queue;
223 223
 
224
-  uint8_t *pointer = string;
224
+  const uint8_t *pointer = string;
225 225
 
226 226
   parameters->type = CANVAS_ADD_TEXT;
227 227
   parameters->x = x;

+ 4
- 1
Marlin/src/lcd/tft/tft_queue.h Ver fichero

@@ -139,7 +139,10 @@ class TFT_Queue {
139 139
     static void fill(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color);
140 140
     static void canvas(uint16_t x, uint16_t y, uint16_t width, uint16_t height);
141 141
     static void set_background(uint16_t color);
142
-    static void add_text(uint16_t x, uint16_t y, uint16_t color, uint8_t *string, uint16_t maxWidth);
142
+    static void add_text(uint16_t x, uint16_t y, uint16_t color, const uint8_t *string, uint16_t maxWidth);
143
+    static void add_text(uint16_t x, uint16_t y, uint16_t color, const char *string, uint16_t maxWidth) {
144
+      add_text(x, y, color, (uint8_t *)string, maxWidth);
145
+    }
143 146
 
144 147
     static void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t *colors);
145 148
     static void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t color_main, uint16_t color_background, uint16_t color_shadow);

+ 19
- 19
Marlin/src/lcd/tft/tft_string.cpp Ver fichero

@@ -35,7 +35,7 @@
35 35
 glyph_t *TFT_String::glyphs[256];
36 36
 font_t *TFT_String::font_header;
37 37
 
38
-uint8_t TFT_String::data[];
38
+char TFT_String::data[];
39 39
 uint16_t TFT_String::span;
40 40
 uint8_t TFT_String::length;
41 41
 
@@ -84,24 +84,22 @@ void TFT_String::set() {
84 84
   length = 0;
85 85
 }
86 86
 
87
-uint8_t read_byte(uint8_t *byte) { return *byte; }
88
-
89 87
 /**
90 88
  * Add a string, applying substitutions for the following characters:
91 89
  *
92
- *   $ displays an inserted C-string given by the inStr parameter
90
+ *   $ displays the string given by fstr or cstr
93 91
  *   = displays  '0'....'10' for indexes 0 - 10
94 92
  *   ~ displays  '1'....'11' for indexes 0 - 10
95 93
  *   * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
96 94
  *   @ displays an axis name such as XYZUVW, or E for an extruder
97 95
  */
98
-void TFT_String::add(uint8_t *string, int8_t index, uint8_t *inStr/*=nullptr*/) {
96
+void TFT_String::add(const char *tpl, const int8_t index, const char *cstr/*=nullptr*/, FSTR_P const fstr/*=nullptr*/) {
99 97
   wchar_t wchar;
100 98
 
101
-  while (*string) {
102
-    string = get_utf8_value_cb(string, read_byte, &wchar);
99
+  while (*tpl) {
100
+    tpl = get_utf8_value_cb(tpl, read_byte_ram, &wchar);
103 101
     if (wchar > 255) wchar |= 0x0080;
104
-    uint8_t ch = uint8_t(wchar & 0x00FF);
102
+    const uint8_t ch = uint8_t(wchar & 0x00FF);
105 103
 
106 104
     if (ch == '=' || ch == '~' || ch == '*') {
107 105
       if (index >= 0) {
@@ -111,10 +109,12 @@ void TFT_String::add(uint8_t *string, int8_t index, uint8_t *inStr/*=nullptr*/)
111 109
         add_character('0' + inum);
112 110
       }
113 111
       else
114
-        add(index == -2 ? GET_TEXT(MSG_CHAMBER) : GET_TEXT(MSG_BED));
112
+        add(index == -2 ? GET_TEXT_F(MSG_CHAMBER) : GET_TEXT_F(MSG_BED));
115 113
     }
116
-    else if (ch == '$' && inStr)
117
-      add(inStr);
114
+    else if (ch == '$' && fstr)
115
+      add(fstr);
116
+    else if (ch == '$' && cstr)
117
+      add(cstr);
118 118
     else if (ch == '@')
119 119
       add_character(AXIS_CHAR(index));
120 120
     else
@@ -123,19 +123,19 @@ void TFT_String::add(uint8_t *string, int8_t index, uint8_t *inStr/*=nullptr*/)
123 123
   eol();
124 124
 }
125 125
 
126
-void TFT_String::add(uint8_t *string, uint8_t max_len) {
126
+void TFT_String::add(const char *cstr, uint8_t max_len/*=MAX_STRING_LENGTH*/) {
127 127
   wchar_t wchar;
128
-  while (*string && max_len) {
129
-    string = get_utf8_value_cb(string, read_byte, &wchar);
128
+  while (*cstr && max_len) {
129
+    cstr = get_utf8_value_cb(cstr, read_byte_ram, &wchar);
130 130
     if (wchar > 255) wchar |= 0x0080;
131
-    uint8_t ch = uint8_t(wchar & 0x00FF);
131
+    const uint8_t ch = uint8_t(wchar & 0x00FF);
132 132
     add_character(ch);
133 133
     max_len--;
134 134
   }
135 135
   eol();
136 136
 }
137 137
 
138
-void TFT_String::add_character(uint8_t character) {
138
+void TFT_String::add_character(const char character) {
139 139
   if (length < MAX_STRING_LENGTH) {
140 140
     data[length] = character;
141 141
     length++;
@@ -143,7 +143,7 @@ void TFT_String::add_character(uint8_t character) {
143 143
   }
144 144
 }
145 145
 
146
-void TFT_String::rtrim(uint8_t character) {
146
+void TFT_String::rtrim(const char character) {
147 147
   while (length) {
148 148
     if (data[length - 1] == 0x20 || data[length - 1] == character) {
149 149
       length--;
@@ -155,7 +155,7 @@ void TFT_String::rtrim(uint8_t character) {
155 155
   }
156 156
 }
157 157
 
158
-void TFT_String::ltrim(uint8_t character) {
158
+void TFT_String::ltrim(const char character) {
159 159
   uint16_t i, j;
160 160
   for (i = 0; (i < length) && (data[i] == 0x20 || data[i] == character); i++) {
161 161
     span -= glyph(data[i])->DWidth;
@@ -166,7 +166,7 @@ void TFT_String::ltrim(uint8_t character) {
166 166
   eol();
167 167
 }
168 168
 
169
-void TFT_String::trim(uint8_t character) {
169
+void TFT_String::trim(const char character) {
170 170
   rtrim(character);
171 171
   ltrim(character);
172 172
 }

+ 67
- 26
Marlin/src/lcd/tft/tft_string.h Ver fichero

@@ -21,6 +21,8 @@
21 21
  */
22 22
 #pragma once
23 23
 
24
+// TODO: Make AVR-compatible with separate ROM / RAM string methods
25
+
24 26
 #include <stdint.h>
25 27
 
26 28
 extern const uint8_t ISO10646_1_5x7[];
@@ -67,14 +69,15 @@ class TFT_String {
67 69
     static glyph_t *glyphs[256];
68 70
     static font_t *font_header;
69 71
 
70
-    static uint8_t data[MAX_STRING_LENGTH + 1];
72
+    static char data[MAX_STRING_LENGTH + 1];
71 73
     static uint16_t span;   // in pixels
72
-    static uint8_t length;  // in characters
73 74
 
74
-    static void add_character(uint8_t character);
75
-    static void eol() { data[length] = 0x00; }
75
+    static void add_character(const char character);
76
+    static void eol() { data[length] = '\0'; }
76 77
 
77 78
   public:
79
+    static uint8_t length;  // in characters
80
+
78 81
     static void set_font(const uint8_t *font);
79 82
     static void add_glyphs(const uint8_t *font);
80 83
 
@@ -83,31 +86,69 @@ class TFT_String {
83 86
     static glyph_t *glyph(uint8_t character) { return glyphs[character] ?: glyphs[0x3F]; }  /* Use '?' for unknown glyphs */
84 87
     static glyph_t *glyph(uint8_t *character) { return glyph(*character); }
85 88
 
89
+    /**
90
+     * @brief Set the string empty
91
+     */
86 92
     static void set();
87
-    static void add(uint8_t character) { add_character(character); eol(); }
88
-    static void add(uint8_t *string, uint8_t max_len=MAX_STRING_LENGTH);
89
-    static void add(uint8_t *string, int8_t index, uint8_t *inStr=nullptr);
90
-    static void set(uint8_t *string) { set(); add(string); };
91
-    static void set(uint8_t *string, int8_t index, const char *inStr=nullptr) { set(); add(string, index, (uint8_t *)inStr); };
92
-    static void set(const char *string) { set((uint8_t *)string); }
93
-    static void set(const char *string, int8_t index, const char *inStr=nullptr) { set((uint8_t *)string, index, inStr); }
94
-    static void add(const char *string) { add((uint8_t *)string); }
95
-
96
-    static void add(FSTR_P const string, uint8_t max_len=MAX_STRING_LENGTH) { add((uint8_t *)FTOP(string), max_len); }
97
-    static void add(FSTR_P const string, int8_t index, uint8_t *inStr=nullptr) { add((uint8_t *)FTOP(string), index, inStr); }
98
-    static void set(FSTR_P const string) { set((uint8_t *)FTOP(string)); }
99
-    static void set(FSTR_P const string, int8_t index, const char *inStr=nullptr) { set((uint8_t *)FTOP(string), index, inStr); }
100
-    static void add(FSTR_P const string) { add((uint8_t *)FTOP(string)); }
101
-
102
-    static void trim(uint8_t character=0x20);
103
-    static void rtrim(uint8_t character=0x20);
104
-    static void ltrim(uint8_t character=0x20);
105
-
106
-    static void truncate(uint8_t maxlen) { if (length > maxlen) { length = maxlen; eol(); } }
107 93
 
94
+    /**
95
+     * @brief Append an ASCII character and EOL
96
+     *
97
+     * @param character The ASCII character
98
+     */
99
+    static void add(const char character) { add_character(character); eol(); }
100
+    static void set(wchar_t character) { set(); add(character); }
101
+
102
+    /**
103
+     * @brief Append / Set C-string
104
+     *
105
+     * @param cstr The string
106
+     * @param max_len Character limit
107
+     */
108
+    static void add(const char *cstr, uint8_t max_len=MAX_STRING_LENGTH);
109
+    static void set(const char *cstr, uint8_t max_len=MAX_STRING_LENGTH) { set(); add(cstr, max_len); }
110
+
111
+    /**
112
+     * @brief Append / Set F-string
113
+     *
114
+     * @param fstr The string
115
+     * @param max_len Character limit
116
+     */
117
+    static void add(FSTR_P const fstr, uint8_t max_len=MAX_STRING_LENGTH) { add(FTOP(fstr), max_len); }
118
+    static void set(FSTR_P const fstr, uint8_t max_len=MAX_STRING_LENGTH) { set(FTOP(fstr), max_len); }
119
+
120
+    /**
121
+     * @brief Append / Set C-string with optional substitution
122
+     *
123
+     * @param tpl A string with optional substitution
124
+     * @param index An index
125
+     * @param cstr An SRAM C-string to use for $ substitution
126
+     * @param fstr A ROM F-string to use for $ substitution
127
+     */
128
+    static void add(const char *tpl, const int8_t index, const char *cstr=nullptr, FSTR_P const fstr=nullptr);
129
+    static void set(const char *tpl, const int8_t index, const char *cstr=nullptr, FSTR_P const fstr=nullptr) { set(); add(tpl, index, cstr, fstr); }
130
+
131
+    /**
132
+     * @brief Append / Set F-string with optional substitution
133
+     *
134
+     * @param ftpl A ROM F-string with optional substitution
135
+     * @param index An index
136
+     * @param cstr An SRAM C-string to use for $ substitution
137
+     * @param fstr A ROM F-string to use for $ substitution
138
+     */
139
+    static void add(FSTR_P const ftpl, const int8_t index, const char *cstr=nullptr, FSTR_P const fstr=nullptr) { add(FTOP(ftpl), index, cstr, fstr); }
140
+    static void set(FSTR_P const ftpl, const int8_t index, const char *cstr=nullptr, FSTR_P const fstr=nullptr) { set(); add(ftpl, index, cstr, fstr); }
141
+
142
+    // Common string ops
143
+    static void trim(const char character=' ');
144
+    static void rtrim(const char character=' ');
145
+    static void ltrim(const char character=' ');
146
+    static void truncate(const uint8_t maxlen) { if (length > maxlen) { length = maxlen; eol(); } }
147
+
148
+    // Accessors
149
+    static char *string() { return data; }
108 150
     static uint16_t width() { return span; }
109
-    static uint8_t *string() { return data; }
110
-    static uint16_t center(uint16_t width) { return span > width ? 0 : (width - span) / 2; }
151
+    static uint16_t center(const uint16_t width) { return span > width ? 0 : (width - span) / 2; }
111 152
 };
112 153
 
113 154
 extern TFT_String tft_string;

+ 5
- 5
Marlin/src/lcd/tft/ui_1024x600.cpp Ver fichero

@@ -181,13 +181,13 @@ void draw_heater_status(uint16_t x, uint16_t y, const int8_t Heater) {
181 181
 
182 182
   tft.add_image(8, 28, image, Color);
183 183
 
184
-  tft_string.set((uint8_t *)i16tostr3rj(currentTemperature));
184
+  tft_string.set(i16tostr3rj(currentTemperature));
185 185
   tft_string.add(LCD_STR_DEGREE);
186 186
   tft_string.trim();
187 187
   tft.add_text(tft_string.center(80) + 2, 82, Color, tft_string);
188 188
 
189 189
   if (targetTemperature >= 0) {
190
-    tft_string.set((uint8_t *)i16tostr3rj(targetTemperature));
190
+    tft_string.set(i16tostr3rj(targetTemperature));
191 191
     tft_string.add(LCD_STR_DEGREE);
192 192
     tft_string.trim();
193 193
     tft.add_text(tft_string.center(80) + 2, 8, Color, tft_string);
@@ -211,7 +211,7 @@ void draw_fan_status(uint16_t x, uint16_t y, const bool blink) {
211 211
 
212 212
   tft.add_image(8, 20, image, COLOR_FAN);
213 213
 
214
-  tft_string.set((uint8_t *)ui8tostr4pctrj(thermalManager.fan_speed[0]));
214
+  tft_string.set(ui8tostr4pctrj(thermalManager.fan_speed[0]));
215 215
   tft_string.trim();
216 216
   tft.add_text(tft_string.center(80) + 6, 82, COLOR_FAN, tft_string);
217 217
 }
@@ -359,7 +359,7 @@ void MenuEditItemBase::draw_edit_screen(FSTR_P const fstr, const char * const va
359 359
   uint16_t line = 1;
360 360
 
361 361
   menu_line(line++);
362
-  tft_string.set(FTOP(fstr), itemIndex, FTOP(itemString));
362
+  tft_string.set(fstr, itemIndex, itemStringC, itemStringF);
363 363
   tft_string.trim();
364 364
   tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
365 365
 
@@ -606,7 +606,7 @@ static void quick_feedback() {
606 606
 
607 607
 #define CUR_STEP_VALUE_WIDTH 104
608 608
 static void drawCurStepValue() {
609
-  tft_string.set((uint8_t *)ftostr52sp(motionAxisState.currentStepSize));
609
+  tft_string.set(ftostr52sp(motionAxisState.currentStepSize));
610 610
   tft_string.add("mm");
611 611
   tft.canvas(motionAxisState.stepValuePos.x, motionAxisState.stepValuePos.y, CUR_STEP_VALUE_WIDTH, BTN_HEIGHT);
612 612
   tft.set_background(COLOR_BACKGROUND);

+ 5
- 5
Marlin/src/lcd/tft/ui_320x240.cpp Ver fichero

@@ -181,13 +181,13 @@ void draw_heater_status(uint16_t x, uint16_t y, const int8_t Heater) {
181 181
 
182 182
   tft.add_image(0, 18, image, Color);
183 183
 
184
-  tft_string.set((uint8_t *)i16tostr3rj(currentTemperature));
184
+  tft_string.set(i16tostr3rj(currentTemperature));
185 185
   tft_string.add(LCD_STR_DEGREE);
186 186
   tft_string.trim();
187 187
   tft.add_text(tft_string.center(64) + 2, 72, Color, tft_string);
188 188
 
189 189
   if (targetTemperature >= 0) {
190
-    tft_string.set((uint8_t *)i16tostr3rj(targetTemperature));
190
+    tft_string.set(i16tostr3rj(targetTemperature));
191 191
     tft_string.add(LCD_STR_DEGREE);
192 192
     tft_string.trim();
193 193
     tft.add_text(tft_string.center(64) + 2, 8, Color, tft_string);
@@ -211,7 +211,7 @@ void draw_fan_status(uint16_t x, uint16_t y, const bool blink) {
211 211
 
212 212
   tft.add_image(0, 10, image, COLOR_FAN);
213 213
 
214
-  tft_string.set((uint8_t *)ui8tostr4pctrj(thermalManager.fan_speed[0]));
214
+  tft_string.set(ui8tostr4pctrj(thermalManager.fan_speed[0]));
215 215
   tft_string.trim();
216 216
   tft.add_text(tft_string.center(64) + 6, 72, COLOR_FAN, tft_string);
217 217
 }
@@ -354,7 +354,7 @@ void MenuEditItemBase::draw_edit_screen(FSTR_P const fstr, const char * const va
354 354
   uint16_t line = 1;
355 355
 
356 356
   menu_line(line++);
357
-  tft_string.set(FTOP(fstr), itemIndex, FTOP(itemString));
357
+  tft_string.set(fstr, itemIndex, itemStringC, itemStringF);
358 358
   tft_string.trim();
359 359
   tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
360 360
 
@@ -588,7 +588,7 @@ static void quick_feedback() {
588 588
 
589 589
 #define CUR_STEP_VALUE_WIDTH 38
590 590
 static void drawCurStepValue() {
591
-  tft_string.set((uint8_t *)ftostr52sp(motionAxisState.currentStepSize));
591
+  tft_string.set(ftostr52sp(motionAxisState.currentStepSize));
592 592
   tft.canvas(motionAxisState.stepValuePos.x, motionAxisState.stepValuePos.y, CUR_STEP_VALUE_WIDTH, 20);
593 593
   tft.set_background(COLOR_BACKGROUND);
594 594
   tft.add_text(CUR_STEP_VALUE_WIDTH - tft_string.width(), 0, COLOR_AXIS_HOMED, tft_string);

+ 5
- 5
Marlin/src/lcd/tft/ui_480x320.cpp Ver fichero

@@ -181,13 +181,13 @@ void draw_heater_status(uint16_t x, uint16_t y, const int8_t Heater) {
181 181
 
182 182
   tft.add_image(8, 28, image, Color);
183 183
 
184
-  tft_string.set((uint8_t *)i16tostr3rj(currentTemperature));
184
+  tft_string.set(i16tostr3rj(currentTemperature));
185 185
   tft_string.add(LCD_STR_DEGREE);
186 186
   tft_string.trim();
187 187
   tft.add_text(tft_string.center(80) + 2, 82, Color, tft_string);
188 188
 
189 189
   if (targetTemperature >= 0) {
190
-    tft_string.set((uint8_t *)i16tostr3rj(targetTemperature));
190
+    tft_string.set(i16tostr3rj(targetTemperature));
191 191
     tft_string.add(LCD_STR_DEGREE);
192 192
     tft_string.trim();
193 193
     tft.add_text(tft_string.center(80) + 2, 8, Color, tft_string);
@@ -211,7 +211,7 @@ void draw_fan_status(uint16_t x, uint16_t y, const bool blink) {
211 211
 
212 212
   tft.add_image(8, 20, image, COLOR_FAN);
213 213
 
214
-  tft_string.set((uint8_t *)ui8tostr4pctrj(thermalManager.fan_speed[0]));
214
+  tft_string.set(ui8tostr4pctrj(thermalManager.fan_speed[0]));
215 215
   tft_string.trim();
216 216
   tft.add_text(tft_string.center(80) + 6, 82, COLOR_FAN, tft_string);
217 217
 }
@@ -359,7 +359,7 @@ void MenuEditItemBase::draw_edit_screen(FSTR_P const fstr, const char * const va
359 359
   uint16_t line = 1;
360 360
 
361 361
   menu_line(line++);
362
-  tft_string.set(FTOP(fstr), itemIndex, FTOP(itemString));
362
+  tft_string.set(fstr, itemIndex, itemStringC, itemStringF);
363 363
   tft_string.trim();
364 364
   tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
365 365
 
@@ -593,7 +593,7 @@ static void quick_feedback() {
593 593
 
594 594
 #define CUR_STEP_VALUE_WIDTH 104
595 595
 static void drawCurStepValue() {
596
-  tft_string.set((uint8_t *)ftostr52sp(motionAxisState.currentStepSize));
596
+  tft_string.set(ftostr52sp(motionAxisState.currentStepSize));
597 597
   tft_string.add("mm");
598 598
   tft.canvas(motionAxisState.stepValuePos.x, motionAxisState.stepValuePos.y, CUR_STEP_VALUE_WIDTH, BTN_HEIGHT);
599 599
   tft.set_background(COLOR_BACKGROUND);

+ 12
- 12
Marlin/src/lcd/tft/ui_common.cpp Ver fichero

@@ -96,16 +96,15 @@ void lcd_moveto(const lcd_uint_t col, const lcd_uint_t row) {
96 96
   lcd_gotopixel(int(col) * (TFT_COL_WIDTH), int(row) * MENU_LINE_HEIGHT);
97 97
 }
98 98
 
99
-int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
99
+int lcd_put_wchar_max(const wchar_t c, const pixel_len_t max_length) {
100 100
   if (max_length < 1) return 0;
101
-  tft_string.set();
102
-  tft_string.add(c);
101
+  tft_string.set(c);
103 102
   tft.add_text(MENU_TEXT_X_OFFSET, MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
104 103
   lcd_gotopixel((cursor.x + 1) * (TFT_COL_WIDTH) + tft_string.width(), cursor.y * MENU_LINE_HEIGHT);
105 104
   return tft_string.width();
106 105
 }
107 106
 
108
-int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
107
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, const pixel_len_t max_length) {
109 108
   if (max_length < 1) return 0;
110 109
   tft_string.set(utf8_pstr);
111 110
   tft_string.trim();
@@ -115,7 +114,7 @@ int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
115 114
   return tft_string.width();
116 115
 }
117 116
 
118
-int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length) {
117
+int lcd_put_u8str_max(const char * utf8_str, const pixel_len_t max_length) {
119 118
   return lcd_put_u8str_max_P(utf8_str, max_length);
120 119
 }
121 120
 
@@ -133,7 +132,7 @@ void lcd_put_int(const int i) {
133 132
 void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char pre_char, const char post_char) {
134 133
   menu_item(row, sel);
135 134
 
136
-  uint8_t *string = (uint8_t *)FTOP(fstr);
135
+  const char *string = FTOP(fstr);
137 136
   MarlinImage image = noImage;
138 137
   switch (*string) {
139 138
     case 0x01: image = imgRefresh; break;  // LCD_STR_REFRESH
@@ -147,18 +146,19 @@ void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const fstr, c
147 146
     tft.add_image(MENU_ITEM_ICON_X, MENU_ITEM_ICON_Y, image, COLOR_MENU_TEXT, sel ? COLOR_SELECTION_BG : COLOR_BACKGROUND);
148 147
   }
149 148
 
150
-  tft_string.set(string, itemIndex, FTOP(itemString));
149
+  tft_string.set(string, itemIndex, itemStringC, itemStringF);
150
+
151 151
   tft.add_text(offset, MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
152 152
 }
153 153
 
154 154
 // Draw a menu item with a (potentially) editable value
155
-void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const data, const bool pgm) {
155
+void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const inStr, const bool pgm) {
156 156
   menu_item(row, sel);
157 157
 
158
-  tft_string.set(FTOP(fstr), itemIndex, FTOP(itemString));
158
+  tft_string.set(fstr, itemIndex, itemStringC, itemStringF);
159 159
   tft.add_text(MENU_TEXT_X_OFFSET, MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
160
-  if (data) {
161
-    tft_string.set(data);
160
+  if (inStr) {
161
+    tft_string.set(inStr);
162 162
     tft.add_text(TFT_WIDTH - MENU_TEXT_X_OFFSET - tft_string.width(), MENU_TEXT_Y_OFFSET, COLOR_MENU_VALUE, tft_string);
163 163
   }
164 164
 }
@@ -166,7 +166,7 @@ void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr
166 166
 // Draw a static item with no left-right margin required. Centered by default.
167 167
 void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) {
168 168
   menu_item(row);
169
-  tft_string.set(FTOP(fstr), itemIndex, FTOP(itemString));
169
+  tft_string.set(fstr, itemIndex, itemStringC, itemStringF);
170 170
   if (vstr) tft_string.add(vstr);
171 171
   tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_YELLOW, tft_string);
172 172
 }

+ 1
- 1
Marlin/src/libs/L64XX/L64XX_Marlin.cpp Ver fichero

@@ -38,7 +38,7 @@ L64XX_Marlin L64xxManager;
38 38
 #include "../../HAL/shared/Delay.h"
39 39
 
40 40
 static const char NUM_AXIS_LIST(
41
-                   str_X[] PROGMEM = "X ",          str_Y[] PROGMEM = "Y ",          str_Z[] PROGMEM = "Z ",
41
+                   str_X[] PROGMEM = "X ",      str_Y[] PROGMEM = "Y ",      str_Z[] PROGMEM = "Z ",
42 42
                    str_I[] PROGMEM = STR_I " ", str_J[] PROGMEM = STR_J " ", str_K[] PROGMEM = STR_K " "
43 43
                  ),
44 44
                  str_X2[] PROGMEM = "X2", str_Y2[] PROGMEM = "Y2",

+ 1
- 1
buildroot/share/fonts/genpages.c Ver fichero

@@ -66,7 +66,7 @@ wchar_t get_val_utf82uni(uint8_t *pstart) {
66 66
  */
67 67
 uint8_t* get_utf8_value(uint8_t *pstart, wchar_t *pval) {
68 68
   uint32_t val = 0;
69
-  uint8_t *p = pstart;
69
+  const uint8_t *p = pstart;
70 70
   /*size_t maxlen = strlen(pstart);*/
71 71
 
72 72
   assert(NULL != pstart);

Loading…
Cancelar
Guardar