messages.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. //messages.c
  2. #include "language.h"
  3. #include "lcd.h" // Needed for LCD_STR_REFRESH
  4. //this is because we need include Configuration_prusa.h (CUSTOM_MENDEL_NAME)
  5. #include "Configuration_prusa.h"
  6. //internationalized messages
  7. const char MSG_AUTO_HOME[] PROGMEM_I1 = ISTR("Auto home"); ////c=18
  8. const char MSG_BABYSTEP_Z[] PROGMEM_I1 = ISTR("Live adjust Z"); ////c=18
  9. const char MSG_BABYSTEP_Z_NOT_SET[] PROGMEM_I1 = ISTR("Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration."); ////c=20 r=12
  10. const char MSG_BED[] PROGMEM_I1 = ISTR("Bed"); ////c=13
  11. const char MSG_BED_DONE[] PROGMEM_I1 = ISTR("Bed done"); ////c=20
  12. const char MSG_BED_HEATING[] PROGMEM_I1 = ISTR("Bed Heating"); ////c=20
  13. const char MSG_BED_LEVELING_FAILED_POINT_LOW[] PROGMEM_I1 = ISTR("Bed leveling failed. Sensor didn't trigger. Debris on nozzle? Waiting for reset."); ////c=20 r=6
  14. const char MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED[] PROGMEM_I1 = ISTR("XYZ calibration failed. Please consult the manual."); ////c=20 r=8
  15. const char MSG_BELT_STATUS[] PROGMEM_I1 = ISTR("Belt status");////c=18
  16. const char MSG_CANCEL[] PROGMEM_I1 = ISTR(">Cancel");////c=9
  17. const char MSG_CALIBRATE_Z_AUTO[] PROGMEM_I1 = ISTR("Calibrating Z"); ////c=20 r=2
  18. const char MSG_CARD_MENU[] PROGMEM_I1 = ISTR("Print from SD"); ////c=18
  19. const char MSG_CHECKING_X[] PROGMEM_I1 = ISTR("Checking X axis"); ////c=20
  20. const char MSG_CHECKING_Y[] PROGMEM_I1 = ISTR("Checking Y axis"); ////c=20
  21. const char MSG_COMMUNITY_MADE[] PROGMEM_I1 = ISTR("Community made"); ////c=18
  22. const char MSG_CONFIRM_NOZZLE_CLEAN[] PROGMEM_I1 = ISTR("Please clean the nozzle for calibration. Click when done."); ////c=20 r=8
  23. const char MSG_COOLDOWN[] PROGMEM_I1 = ISTR("Cooldown"); ////c=18
  24. const char MSG_CRASH[] PROGMEM_I1 = ISTR("Crash"); ////c=7
  25. const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=17 r=1
  26. const char MSG_CRASHDETECT[] PROGMEM_I1 = ISTR("Crash det."); ////c=13
  27. const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); ////c=10
  28. const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17
  29. const char MSG_FANS_CHECK[] PROGMEM_I1 = ISTR("Fans check"); ////c=13
  30. const char MSG_FIL_RUNOUTS[] PROGMEM_I1 = ISTR("Fil. runouts"); ////c=15
  31. const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17
  32. const char MSG_FAN_SPEED[] PROGMEM_I1 = ISTR("Fan speed"); ////c=14
  33. const char MSG_FILAMENT_CLEAN[] PROGMEM_I1 = ISTR("Filament extruding & with correct color?"); ////c=20 r=2
  34. const char MSG_FILAMENT_LOADED[] PROGMEM_I1 = ISTR("Is filament loaded?"); ////c=20 r=2
  35. const char MSG_FILAMENTCHANGE[] PROGMEM_I1 = ISTR("Change filament"); ////c=18
  36. const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1[] PROGMEM_I1 = ISTR("Searching bed calibration point"); ////c=20 r=3
  37. const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20
  38. const char MSG_FOLLOW_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8
  39. const char MSG_FOLLOW_Z_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=9
  40. const char MSG_FSENSOR_AUTOLOAD[] PROGMEM_I1 = ISTR("F. autoload"); ////c=13
  41. const char MSG_FSENSOR[] PROGMEM_I1 = ISTR("Fil. sensor"); ////c=12
  42. const char MSG_HEATING[] PROGMEM_I1 = ISTR("Heating"); ////c=20
  43. const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20
  44. const char MSG_HOMEYZ[] PROGMEM_I1 = ISTR("Calibrate Z"); ////c=18
  45. const char MSG_ITERATION[] PROGMEM_I1 = ISTR("Iteration"); ////c=12
  46. const char MSG_CHOOSE_EXTRUDER[] PROGMEM_I1 = ISTR("Choose extruder:"); ////c=20
  47. const char MSG_CHOOSE_FILAMENT[] PROGMEM_I1 = ISTR("Choose filament:"); ////c=20
  48. const char MSG_LAST_PRINT[] PROGMEM_I1 = ISTR("Last print"); ////c=18
  49. const char MSG_LAST_PRINT_FAILURES[] PROGMEM_I1 = ISTR("Last print failures"); ////c=20
  50. const char MSG_LOAD_FILAMENT[] PROGMEM_I1 = ISTR("Load filament"); //// Number 1 to 5 is added behind text e.g. "Load filament 1" c=16
  51. const char MSG_LOADING_FILAMENT[] PROGMEM_I1 = ISTR("Loading filament"); ////c=20
  52. const char MSG_EJECT_FILAMENT[] PROGMEM_I1 = ISTR("Eject filament"); //// Number 1 to 5 is added behind text e.g. "Eject filament 1" c=16
  53. const char MSG_CUT_FILAMENT[] PROGMEM_I1 = ISTR("Cut filament"); //// Number 1 to 5 is added behind text e.g. "Cut filament 1" c=16
  54. const char MSG_M117_V2_CALIBRATION[] PROGMEM_I1 = ISTR("M117 First layer cal."); ////c=25
  55. const char MSG_MAIN[] PROGMEM_I1 = ISTR("Main"); ////c=18
  56. const char MSG_BACK[] PROGMEM_I1 = ISTR("Back"); ////c=18
  57. const char MSG_SHEET[] PROGMEM_I1 = ISTR("Sheet"); ////c=10
  58. const char MSG_STEEL_SHEETS[] PROGMEM_I1 = ISTR("Steel sheets"); ////c=18
  59. const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1[] PROGMEM_I1 = ISTR("Measuring reference height of calibration point"); ////c=20 r=3
  60. const char MSG_MENU_CALIBRATION[] PROGMEM_I1 = ISTR("Calibration"); ////c=18
  61. const char MSG_MMU_FAILS[] PROGMEM_I1 = ISTR("MMU fails"); ////c=15
  62. const char MSG_MMU_LOAD_FAILS[] PROGMEM_I1 = ISTR("MMU load fails"); ////c=15
  63. const char MSG_NO[] PROGMEM_I1 = ISTR("No"); ////c=4
  64. const char MSG_NOZZLE[] PROGMEM_I1 = ISTR("Nozzle"); ////c=12
  65. const char MSG_PAPER[] PROGMEM_I1 = ISTR("Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."); ////c=20 r=10
  66. const char MSG_PAUSE_PRINT[] PROGMEM_I1 = ISTR("Pause print");////c=18
  67. const char MSG_PLACE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please place steel sheet on heatbed."); ////c=20 r=5
  68. const char MSG_PLEASE_WAIT[] PROGMEM_I1 = ISTR("Please wait"); ////c=20
  69. const char MSG_POWER_FAILURES[] PROGMEM_I1 = ISTR("Power failures"); ////c=15
  70. const char MSG_PREHEAT_NOZZLE[] PROGMEM_I1 = ISTR("Preheat the nozzle!"); ////c=20
  71. const char MSG_PRESS_TO_UNLOAD[] PROGMEM_I1 = ISTR("Please press the knob to unload filament"); ////c=20 r=4
  72. const char MSG_PRINT_ABORTED[] PROGMEM_I1 = ISTR("Print aborted"); ////c=20
  73. const char MSG_PULL_OUT_FILAMENT[] PROGMEM_I1 = ISTR("Please pull out filament immediately"); ////c=20 r=4
  74. const char MSG_RECOVER_PRINT[] PROGMEM_I1 = ISTR("Blackout occurred. Recover print?"); ////c=20 r=2
  75. const char MSG_REFRESH[] PROGMEM_I1 = ISTR(LCD_STR_REFRESH "Refresh"); ////c=18
  76. const char MSG_REMOVE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please remove steel sheet from heatbed."); ////c=20 r=4
  77. const char MSG_RESET[] PROGMEM_I1 = ISTR("Reset"); ////c=14
  78. const char MSG_RESUME_PRINT[] PROGMEM_I1 = ISTR("Resume print"); ////c=18
  79. const char MSG_RESUMING_PRINT[] PROGMEM_I1 = ISTR("Resuming print"); ////c=20
  80. const char MSG_SELFTEST_COOLING_FAN[] PROGMEM_I1 = ISTR("Front print fan?"); ////c=20
  81. const char MSG_SELFTEST_EXTRUDER_FAN[] PROGMEM_I1 = ISTR("Left hotend fan?"); ////c=20
  82. const char MSG_SELFTEST_FAILED[] PROGMEM_I1 = ISTR("Selftest failed"); ////c=20
  83. const char MSG_SELFTEST_FAN[] PROGMEM_I1 = ISTR("Fan test"); ////c=20
  84. const char MSG_SELFTEST_FAN_NO[] PROGMEM_I1 = ISTR("Not spinning"); ////c=19
  85. const char MSG_SELFTEST_FAN_YES[] PROGMEM_I1 = ISTR("Spinning"); ////c=19
  86. const char MSG_SELFTEST_CHECK_BED[] PROGMEM_I1 = ISTR("Checking bed"); ////c=20
  87. const char MSG_SELFTEST_CHECK_FSENSOR[] PROGMEM_I1 = ISTR("Checking sensors"); ////c=20
  88. const char MSG_SELFTEST_MOTOR[] PROGMEM_I1 = ISTR("Motor"); ////c=18
  89. const char MSG_SELFTEST_FILAMENT_SENSOR[] PROGMEM_I1 = ISTR("Filament sensor"); ////c=17
  90. const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); ////c=18
  91. const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); ////c=18
  92. const char MSG_TOTAL[] PROGMEM_I1 = ISTR("Total"); ////c=6
  93. const char MSG_TOTAL_FAILURES[] PROGMEM_I1 = ISTR("Total failures"); ////c=20
  94. const char MSG_HW_SETUP[] PROGMEM_I1 = ISTR("HW Setup"); ////c=18
  95. const char MSG_MODE[] PROGMEM_I1 = ISTR("Mode"); ////c=6
  96. const char MSG_HIGH_POWER[] PROGMEM_I1 = ISTR("High power"); ////c=10
  97. const char MSG_AUTO_POWER[] PROGMEM_I1 = ISTR("Auto power"); ////c=10
  98. const char MSG_SILENT[] PROGMEM_I1 = ISTR("Silent"); ////c=7
  99. const char MSG_NORMAL[] PROGMEM_I1 = ISTR("Normal"); ////c=7
  100. const char MSG_STEALTH[] PROGMEM_I1 = ISTR("Stealth"); ////c=7
  101. const char MSG_STEEL_SHEET_CHECK[] PROGMEM_I1 = ISTR("Is steel sheet on heatbed?"); ////c=20 r=2
  102. const char MSG_STOP_PRINT[] PROGMEM_I1 = ISTR("Stop print"); ////c=18
  103. const char MSG_STOPPED[] PROGMEM_I1 = ISTR("STOPPED."); ////c=20
  104. const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal."); ////c=14
  105. const char MSG_TEMP_CALIBRATION_DONE[] PROGMEM_I1 = ISTR("Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."); ////c=20 r=12
  106. const char MSG_UNLOAD_FILAMENT[] PROGMEM_I1 = ISTR("Unload filament"); ////Number 1 to 5 is added behind text e.g. "Unload filament" c=16
  107. const char MSG_UNLOADING_FILAMENT[] PROGMEM_I1 = ISTR("Unloading filament"); ////c=20
  108. const char MSG_WATCH[] PROGMEM_I1 = ISTR("Info screen"); ////c=18
  109. const char MSG_WIZARD_CALIBRATION_FAILED[] PROGMEM_I1 = ISTR("Please check our handbook and fix the problem. Then resume the Wizard by rebooting the printer."); ////c=20 r=8
  110. const char MSG_WIZARD_DONE[] PROGMEM_I1 = ISTR("All is done. Happy printing!"); ////c=20 r=8
  111. const char MSG_WIZARD_HEATING[] PROGMEM_I1 = ISTR("Preheating nozzle. Please wait."); ////c=20 r=3
  112. const char MSG_WIZARD_QUIT[] PROGMEM_I1 = ISTR("You can always resume the Wizard from Calibration -> Wizard."); ////c=20 r=8
  113. const char MSG_WIZARD_WELCOME[] PROGMEM_I1 = ISTR("Hi, I am your Original Prusa i3 printer. Would you like me to guide you through the setup process?"); //// c=20 r=7
  114. const char MSG_WIZARD_WELCOME_SHIPPING[] PROGMEM_I1 = ISTR("Hi, I am your Original Prusa i3 printer. I will guide you through a short setup process, in which the Z-axis will be calibrated. Then, you will be ready to print."); ////c=20 r=16
  115. const char MSG_YES[] PROGMEM_I1 = ISTR("Yes"); ////c=3
  116. const char MSG_V2_CALIBRATION[] PROGMEM_I1 = ISTR("First layer cal."); ////c=18
  117. const char MSG_OFF[] PROGMEM_I1 = ISTR("Off"); ////c=3
  118. const char MSG_ON[] PROGMEM_I1 = ISTR("On"); ////c=3
  119. const char MSG_NA[] PROGMEM_I1 = ISTR("N/A"); ////c=3
  120. const char MSG_CUTTER[] PROGMEM_I1 = ISTR("Cutter"); ////c=9
  121. const char MSG_NONE[] PROGMEM_I1 = ISTR("None"); ////c=8
  122. const char MSG_WARN[] PROGMEM_I1 = ISTR("Warn"); ////c=8
  123. const char MSG_STRICT[] PROGMEM_I1 = ISTR("Strict"); ////c=8
  124. const char MSG_MODEL[] PROGMEM_I1 = ISTR("Model"); ////c=8
  125. const char MSG_GCODE[] PROGMEM_I1 = ISTR("Gcode"); ////c=8
  126. const char MSG_GCODE_DIFF_PRINTER_CONTINUE[] PROGMEM_I1 = ISTR("G-code sliced for a different printer type. Continue?"); ////c=20 r=5
  127. const char MSG_GCODE_DIFF_PRINTER_CANCELLED[] PROGMEM_I1 =ISTR("G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."); ////c=20 r=8
  128. const char MSG_NOZZLE_DIAMETER[] PROGMEM_I1 = ISTR("Nozzle d."); ////c=10
  129. const char MSG_MMU_MODE[] PROGMEM_I1 = ISTR("MMU Mode"); ////c=8
  130. const char MSG_SD_CARD[] PROGMEM_I1 = ISTR("SD card"); ////c=8
  131. const char MSG_SORT[] PROGMEM_I1 = ISTR("Sort"); ////c=7
  132. const char MSG_SORT_TIME[] PROGMEM_I1 = ISTR("Time"); ////c=8
  133. const char MSG_SORT_ALPHA[] PROGMEM_I1 = ISTR("Alphabet"); ////c=8
  134. const char MSG_RPI_PORT[] PROGMEM_I1 = ISTR("RPi port"); ////c=13
  135. const char MSG_SOUND[] PROGMEM_I1 = ISTR("Sound"); ////c=9
  136. const char MSG_SOUND_LOUD[] PROGMEM_I1 = ISTR("Loud"); ////c=7
  137. const char MSG_SOUND_ONCE[] PROGMEM_I1 = ISTR("Once"); ////c=7
  138. const char MSG_SOUND_BLIND[] PROGMEM_I1 = ISTR("Assist"); ////c=7
  139. const char MSG_MESH[] PROGMEM_I1 = ISTR("Mesh"); ////c=12
  140. const char MSG_MESH_BED_LEVELING[] PROGMEM_I1 = ISTR("Mesh Bed Leveling"); ////c=18
  141. const char MSG_Z_PROBE_NR[] PROGMEM_I1 = ISTR("Z-probe nr."); ////c=14
  142. const char MSG_MAGNETS_COMP[] PROGMEM_I1 = ISTR("Magnets comp."); ////c=13
  143. const char MSG_FS_ACTION[] PROGMEM_I1 = ISTR("FS Action"); ////c=10
  144. const char MSG_FS_CONTINUE[] PROGMEM_I1 = ISTR("Cont."); ////c=5
  145. const char MSG_FS_PAUSE[] PROGMEM_I1 = ISTR("Pause"); ////c=5
  146. const char MSG_BRIGHTNESS[] PROGMEM_I1 = ISTR("Brightness"); ////c=18
  147. const char MSG_BL_HIGH[] PROGMEM_I1 = ISTR("Level Bright"); ////c=12
  148. const char MSG_BL_LOW[] PROGMEM_I1 = ISTR("Level Dimmed"); ////c=12
  149. const char MSG_TIMEOUT[] PROGMEM_I1 = ISTR("Timeout"); ////c=12
  150. const char MSG_BRIGHT[] PROGMEM_I1 = ISTR("Bright"); ////c=6
  151. const char MSG_DIM[] PROGMEM_I1 = ISTR("Dim"); ////c=6
  152. const char MSG_AUTO[] PROGMEM_I1 = ISTR("Auto"); ////c=6
  153. #ifdef IR_SENSOR_ANALOG
  154. // Beware - the space at the beginning is necessary since it is reused in LCD menu items which are to be with a space
  155. const char MSG_IR_04_OR_NEWER[] PROGMEM_I1 = ISTR(" 0.4 or newer");////c=18
  156. const char MSG_IR_03_OR_OLDER[] PROGMEM_I1 = ISTR(" 0.3 or older");////c=18
  157. const char MSG_IR_UNKNOWN[] PROGMEM_I1 = ISTR("unknown state");////c=18
  158. #endif
  159. //not internationalized messages
  160. const char MSG_AUTO_DEPLETE[] PROGMEM_N1 = ISTR("SpoolJoin"); ////c=13
  161. const char MSG_FIRMWARE[] PROGMEM_N1 = ISTR("Firmware"); ////c=8
  162. const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[] PROGMEM_N1 = ISTR("FlashAir"); ////c=8
  163. const char MSG_PINDA[] PROGMEM_N1 = ISTR("PINDA");////c=5
  164. const char MSG_WELCOME[] PROGMEM_N1 = WELCOME_MSG; ////c=20
  165. const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; ////
  166. const char MSG_BROWNOUT_RESET[] PROGMEM_N1 = " Brown out Reset"; ////
  167. const char MSG_EXTERNAL_RESET[] PROGMEM_N1 = " External Reset"; ////
  168. const char MSG_FILE_SAVED[] PROGMEM_N1 = "Done saving file."; ////
  169. const char MSG_POSITION_UNKNOWN[] PROGMEM_N1 = "Home X/Y before Z"; ////
  170. const char MSG_SOFTWARE_RESET[] PROGMEM_N1 = " Software Reset"; ////
  171. const char MSG_UNKNOWN_COMMAND[] PROGMEM_N1 = "Unknown command: \""; ////
  172. const char MSG_WATCHDOG_RESET[] PROGMEM_N1 = " Watchdog Reset"; ////
  173. const char MSG_Z_MAX[] PROGMEM_N1 = "z_max: "; ////
  174. const char MSG_Z_MIN[] PROGMEM_N1 = "z_min: "; ////
  175. const char MSG_ZPROBE_OUT[] PROGMEM_N1 = "Z probe out. bed"; ////
  176. const char MSG_ZPROBE_ZOFFSET[] PROGMEM_N1 = "Z Offset"; ////
  177. const char MSG_TMC_OVERTEMP[] PROGMEM_N1 = "TMC DRIVER OVERTEMP"; ////
  178. const char MSG_Enqueing[] PROGMEM_N1 = "enqueing \""; ////
  179. const char MSG_ENDSTOPS_HIT[] PROGMEM_N1 = "endstops hit: "; ////
  180. const char MSG_SD_ERR_WRITE_TO_FILE[] PROGMEM_N1 = "error writing to file"; ////
  181. const char MSG_OK[] PROGMEM_N1 = "ok"; ////
  182. const char MSG_SD_OPEN_FILE_FAIL[] PROGMEM_N1 = "open failed, File: "; ////
  183. const char MSG_ENDSTOP_OPEN[] PROGMEM_N1 = "open"; ////
  184. const char MSG_POWERUP[] PROGMEM_N1 = "PowerUp"; ////
  185. const char MSG_ERR_STOPPED[] PROGMEM_N1 = "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"; ////
  186. const char MSG_ENDSTOP_HIT[] PROGMEM_N1 = "TRIGGERED"; ////
  187. const char MSG_OCTOPRINT_PAUSE[] PROGMEM_N1 = "// action:pause"; ////
  188. const char MSG_OCTOPRINT_PAUSED[] PROGMEM_N1 = "// action:paused"; ////
  189. const char MSG_OCTOPRINT_RESUME[] PROGMEM_N1 = "// action:resume"; ////
  190. const char MSG_OCTOPRINT_RESUMED[] PROGMEM_N1 = "// action:resumed"; ////
  191. const char MSG_OCTOPRINT_CANCEL[] PROGMEM_N1 = "// action:cancel"; ////
  192. const char MSG_FANCHECK_EXTRUDER[] PROGMEM_N1 = "Err: EXTR. FAN ERROR"; ////c=20
  193. const char MSG_FANCHECK_PRINT[] PROGMEM_N1 = "Err: PRINT FAN ERROR"; ////c=20
  194. const char MSG_M112_KILL[] PROGMEM_N1 = "M112 called. Emergency Stop."; ////c=20
  195. const char MSG_ADVANCE_K[] PROGMEM_N1 = "Advance K:"; ////c=13
  196. const char MSG_POWERPANIC_DETECTED[] PROGMEM_N1 = "POWER PANIC DETECTED"; ////c=20
  197. const char MSG_LCD_STATUS_CHANGED[] PROGMEM_N1 = "LCD status changed";
  198. const char MSG_UNKNOWN_CODE[] PROGMEM_N1 = "Unknown %c code: %s\n";