замена символов в выводе на их "правильные" адреса в самопальном шрифте

EwigeDreamer
Offline
Зарегистрирован: 18.10.2015

здравствуйте. в общем, хочу русифицировать свой принтер (128х64, Marlin)

вот сюда...

http://arduino.ru/forum/programmirovanie/kak-vyvesti-russkie-bukvy-na-lcd-st7920

...меня не посылать, я прямиком от туда.

в общем. модернизировал я 2 шрифта (6х9 и 6х10), что были в принтере. сделал проверку на вывод (вывел все символы) - отображается корректно.

теперь задача - заменить всю кириллицу на их новые адреса в кодировке. в LiquidCrystalRus.cpp не полез. не осилю. решил дополнить файлик language_ru.h "дефайнами" (ну, яжпрограммист, не зря курс учился в вузе в Visual studio на C++ что-то калякать). получилость вот это непотребство:

/**
 * Russian
 *
 * LCD Menu Messages
 * Please note these are limited to 17 characters!
 *
 */
#define А A
#define Б \xBF
#define В B
#define Г \xC0
#define Д \xC1
#define Е E
#define Ё \xCB
#define Ж \xC2
#define З \xC3
#define И \xC4
#define Й \xC5
#define К K
#define Л \xC6
#define М M
#define Н H
#define О O
#define П \xC7
#define Р P
#define С C
#define Т T
#define У \xC8
#define Ф \xC9
#define Х X
#define Ц \xCA
#define Ч \xCC
#define Ш \xCD
#define Щ \xCE
#define Ъ \xCF
#define Ы \xD0
#define Ь \xD1
#define Э \xD2
#define Ю \xD3
#define Я \xD4

#define а a
#define б \xD5
#define в \xD6
#define г \xD9
#define д \xDA
#define е e
#define ё \xEB
#define ж \xDB
#define з \xDC
#define и \xDD
#define й \xDE
#define к \xDF
#define л \xE0
#define м \xE1
#define н \xE2
#define о o
#define п \xE3
#define р p
#define с c
#define т \xE4
#define у y
#define ф \xE5
#define х x
#define ц \xE6
#define ч \xE7
#define ш \xE8
#define щ \xE9
#define ъ \xEA
#define ы \xEC
#define ь \xED
#define э \xEE
#define ю \xF1
#define я \xF2

#ifndef LANGUAGE_RU_H
#define LANGUAGE_RU_H

#define LANGUAGE_RU

#define WELCOME_MSG                         MACHINE_NAME "Готов."
#define MSG_SD_INSERTED                     "Карта вставлена"
#define MSG_SD_REMOVED                      "Карта извлечена"
#define MSG_MAIN                            "Меню \003"
#define MSG_AUTOSTART                       "Автостарт"
#define MSG_DISABLE_STEPPERS                "Выкл. двигатели"
#define MSG_AUTO_HOME                       "Парковка"

... и так далее

(кириллицу, похожую на латиницу, я латиницей же и заменил)

в общем, соль: компилятор ругается НА КАЖДЫЙ мой #дефайн:

Arduino: 1.6.5 (Windows 8.1), Плата"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from language.h:156:0,
                 from cardreader.cpp:6:
language_ru.h:11: error: macro names must be identifiers
 #define Рђ A
         ^
language_ru.h:12: error: macro names must be identifiers
 #define Р‘ \xBF
         ^
language_ru.h:13: error: macro names must be identifiers
 #define Р’ B
         ^
language_ru.h:14: error: macro names must be identifiers
 #define Р“ \xC0
         ^
language_ru.h:15: error: macro names must be identifiers
 #define Р” \xC1
         ^
language_ru.h:16: error: macro names must be identifiers
 #define Р• E
         ^
language_ru.h:17: error: macro names must be identifiers
 #define РЃ \xCB
         ^
language_ru.h:18: error: macro names must be identifiers
 #define Р– \xC2
         ^
language_ru.h:19: error: macro names must be identifiers
 #define Р— \xC3
         ^
language_ru.h:20: error: macro names must be identifiers
 #define Р? \xC4
         ^
language_ru.h:21: error: macro names must be identifiers
 #define Р™ \xC5
         ^
language_ru.h:22: error: macro names must be identifiers
 #define Рљ K
         ^
language_ru.h:23: error: macro names must be identifiers
 #define Р› \xC6
         ^
language_ru.h:24: error: macro names must be identifiers
 #define Рњ M
         ^
language_ru.h:25: error: macro names must be identifiers
 #define Рќ H
         ^
language_ru.h:26: error: macro names must be identifiers
 #define Рћ O
         ^
language_ru.h:27: error: macro names must be identifiers
 #define Рџ \xC7
         ^
language_ru.h:28: error: macro names must be identifiers
 #define Р  P
         ^
language_ru.h:29: error: macro names must be identifiers
 #define РЎ C
         ^
language_ru.h:30: error: macro names must be identifiers
 #define Рў T
         ^
language_ru.h:31: error: macro names must be identifiers
 #define РЈ \xC8
         ^
language_ru.h:32: error: macro names must be identifiers
 #define Р¤ \xC9
         ^
language_ru.h:33: error: macro names must be identifiers
 #define РҐ X
         ^
language_ru.h:34: error: macro names must be identifiers
 #define Р¦ \xCA
         ^
language_ru.h:35: error: macro names must be identifiers
 #define Р§ \xCC
         ^
language_ru.h:36: error: macro names must be identifiers
 #define РЁ \xCD
         ^
language_ru.h:37: error: macro names must be identifiers
 #define Р© \xCE
         ^
language_ru.h:38: error: macro names must be identifiers
 #define РЄ \xCF
         ^
language_ru.h:39: error: macro names must be identifiers
 #define Р« \xD0
         ^
language_ru.h:40: error: macro names must be identifiers
 #define Р¬ \xD1
         ^
language_ru.h:41: error: macro names must be identifiers
 #define Р­ \xD2
         ^
language_ru.h:42: error: macro names must be identifiers
 #define Р® \xD3
         ^
language_ru.h:43: error: macro names must be identifiers
 #define РЇ \xD4
         ^
language_ru.h:45: error: macro names must be identifiers
 #define Р° a
         ^
language_ru.h:46: error: macro names must be identifiers
 #define Р± \xD5
         ^
language_ru.h:47: error: macro names must be identifiers
 #define РІ \xD6
         ^
language_ru.h:48: error: macro names must be identifiers
 #define Рі \xD9
         ^
language_ru.h:49: error: macro names must be identifiers
 #define Рґ \xDA
         ^
language_ru.h:50: error: macro names must be identifiers
 #define Рµ e
         ^
language_ru.h:51: error: macro names must be identifiers
 #define С‘ \xEB
         ^
language_ru.h:52: error: macro names must be identifiers
 #define Р¶ \xDB
         ^
language_ru.h:53: error: macro names must be identifiers
 #define Р· \xDC
         ^
language_ru.h:54: error: macro names must be identifiers
 #define Рё \xDD
         ^
language_ru.h:55: error: macro names must be identifiers
 #define Р№ \xDE
         ^
language_ru.h:56: error: macro names must be identifiers
 #define Рє \xDF
         ^
language_ru.h:57: error: macro names must be identifiers
 #define Р» \xE0
         ^
language_ru.h:58: error: macro names must be identifiers
 #define Рј \xE1
         ^
language_ru.h:59: error: macro names must be identifiers
 #define РЅ \xE2
         ^
language_ru.h:60: error: macro names must be identifiers
 #define Рѕ o
         ^
language_ru.h:61: error: macro names must be identifiers
 #define Рї \xE3
         ^
language_ru.h:62: error: macro names must be identifiers
 #define СЂ p
         ^
language_ru.h:63: error: macro names must be identifiers
 #define СЃ c
         ^
language_ru.h:64: error: macro names must be identifiers
 #define С‚ \xE4
         ^
language_ru.h:65: error: macro names must be identifiers
 #define Сѓ y
         ^
language_ru.h:66: error: macro names must be identifiers
 #define С„ \xE5
         ^
language_ru.h:67: error: macro names must be identifiers
 #define С… x
         ^
language_ru.h:68: error: macro names must be identifiers
 #define С† \xE6
         ^
language_ru.h:69: error: macro names must be identifiers
 #define С‡ \xE7
         ^
language_ru.h:70: error: macro names must be identifiers
 #define С€ \xE8
         ^
language_ru.h:71: error: macro names must be identifiers
 #define С‰ \xE9
         ^
language_ru.h:72: error: macro names must be identifiers
 #define СЉ \xEA
         ^
language_ru.h:73: error: macro names must be identifiers
 #define С‹ \xEC
         ^
language_ru.h:74: error: macro names must be identifiers
 #define СЊ \xED
         ^
language_ru.h:75: error: macro names must be identifiers
 #define СЌ \xEE
         ^
language_ru.h:76: error: macro names must be identifiers
 #define СЋ \xF1
         ^
language_ru.h:77: error: macro names must be identifiers
 #define СЏ \xF2
         ^
macro names must be identifiers

  Это сообщение будет содержать больше информации чем
  "Отображать вывод во время компиляции"
  включено в Файл > Настройки

я явно что-то делаю не так.... помогите пожалуйста...

если кому вдруг понадобятся "годные" шрифты для Marlin (Марлиновские символы в конце не задеты, латиница стоит вместо всяких À,Á,Â,Ã,... и т.п.), то вот: тыкнуть ссылку на гугл-диск

вот, кстати, моя кодировка:

  0 1 2 3 4 5 6 7 8 9 A B C D E F
0                                
1                                
2   ! # $ % & ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; = ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~  
8                                
9                                
A   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯
B ° ± ² ³ ´ µ · ¸ ¹ º » ¼ ½ ¾ Б
C Г Д Ж З И Й Л П У Ф Ц Ë Ч Ш Щ Ъ
D Ы Ь Э Ю Я б в × Ø г д ж з и й к
E л м н п т ф ц ч ш щ ъ ë ы ь э ï
F ð ю я ó ô õ ö ÷ ø ù ú û ü ý þ ÿ

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

EwigeDreamer пишет:
я явно что-то делаю не так.... помогите пожалуйста...

Проблема даже не в том, что Вы что-то не то делаете, а в том, что неясно что же именно Вы хотели сделать. Если Вы хотите, чтобы при выводе заменялись символы, так при чём здесь define?

Надо лезть в language_ru.h и осиливать. Тем более, что Вы

EwigeDreamer пишет:

ж программист, не зря курс учился в вузе в Visual studio на C++ что-то калякать

 

EwigeDreamer
Offline
Зарегистрирован: 18.10.2015

ЕвгенийП пишет:

неясно что же именно Вы хотели сделать. Если Вы хотите, чтобы при выводе заменялись символы, так при чём здесь define?

EwigeDreamer пишет:

теперь задача - заменить всю кириллицу на их новые адреса в кодировке.

надеюсь, я не сильно смахиваю на пижона.

вроде все написал.. что в лангвич_ру.аш лезть? там кроме перевода ничего нет. или вы мне предлагаете вручную все заменить? не, я конечно могу это сделать. я надеялся услышать исправление моей ошибки, или альтернативный путь без замены каждого символа во всем переводе вручную.

arduinec
Offline
Зарегистрирован: 01.09.2015

EwigeDreamer пишет:

я надеялся услышать исправление моей ошибки

Дефинам не нравятся русские буквы.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

EwigeDreamer пишет:

я надеялся услышать исправление моей ошибки, или альтернативный путь без замены каждого символа во всем переводе вручную.

Не услышите потому что дело в не в ошибке, а подходе. Ну, допустим, что define съест русские буквы и всё у Вас скомпилируется. И что? Что это Вам даст? Как Вы собираетесь решать проблему?

Я Вам писал (правда имя файла не то указал случайно), что Вам надо не костыли городить, а лезть в библиотеку и осиливать. Тем более, что там осиливать-то особо нечего. Если Вы действительно программитс, конечно.

EwigeDreamer
Offline
Зарегистрирован: 18.10.2015

ЕвгенийП пишет:

 а лезть в библиотеку и осиливать.

не понял этого "осиливать"... а так у меня все получилось тупой ручной заменой (поиск-замена):

вот как-то так..)

EwigeDreamer
Offline
Зарегистрирован: 18.10.2015

arduinec пишет:

Дефинам не нравятся русские буквы.

Вот жешь сволочи...( абидно

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

EwigeDreamer пишет:

не понял этого "осиливать"... а так у меня все получилось тупой ручной заменой (поиск-замена):

Экой Вы непонятливый. Сами в первом посте написали "в LiquidCrystalRus.cpp не полез. не осилю", а теперь не понимаете :)))

Как видите, всё осилилось. С Победой Вас!

EwigeDreamer
Offline
Зарегистрирован: 18.10.2015

ЕвгенийП пишет:

LiquidCrystalRus.cpp 

аааа, а я думал в лангуич_ру.аш) я недопонял совсем оказывается) осилилось, но не так совсем) в кристал я не лез... там незнакомые операторы и я тупо не понимаю, что там происходит((( вдруг кто в курсе...