Vladimir Ljaschko (17.04.2013 15:52, просмотров: 248) ответил fk0 на Протоколирование работы ПО, пример в приложенном архиве. Сделать получилось очень через ()() и собственно о том вопрос, как это можно сделать более удобным образом. А суть весьма интересная (для пик-контроллеров проф. уровня) и заключается в
Я не умею распаковывать. Что касается макросов, то использую вот такое, уже подобное кажется приводил. // файл списка сообщений
MLMESSAGE (mlExitSave , "A+B - exit, Enter - save" , "Ja = "ENTER" , Abbrechen = A+B" ,"A+B - выход,"ENTER" = save" )
MLMESSAGE (mlChangesNotSaved , " Changes are not saved! " , "Daten nicht gespeichert " ,"Данные не сохранен" )
// хедер - нумерация сообщений
#ifndef K_TEXTS
#define K_TEXTS
enum {
#define MLMESSAGE( num, engl, germ, rus) num,
#include "h__ml.h"
#undef MLMESSAGE
MLM_QTY };
extern const char * const mlm[MLM_QTY][LANG_QTY];
const char * GetMessageName(uchar sindex);
#endif
// собственно массив сообщений и работа с ним
const char * const mlm[MLM_QTY][LANG_QTY]= {
#define MLMESSAGE( num, engl, germ, rus) {engl,germ,rus},
#include "h__ml.h"
#undef MLMESSAGE
};
const char * GetStateName(uchar sindex)
{ const char * const * my_ptr1 = &stn[sindex][ENGLISH];
const char * const * my_ptr2 = &stn[sindex][se.Lang];
if (se.Lang==ENGLISH)
return *my_ptr1;
if (**my_ptr2)
return *my_ptr2;
return *my_ptr1;
}
const char * GetMessageName(uchar sindex)
{ const char * const * my_ptr1 = &mlm[sindex][ENGLISH];
const char * const * my_ptr2 = &mlm[sindex][se.Lang];
if (se.Lang==ENGLISH)
return *my_ptr1;
if (**my_ptr2)
return *my_ptr2;
return *my_ptr1;
}
Файлы покоцаны для упрощения, на неточностях не ловите.
Система допиливается за 5 минут до отправки номера сообщения в канал, соответственно приема там и разворачивания.
Если использовать тот же файл, то изменения учитываются практически мгновенно, но PC-ный софт нужно компильнуть.