ЖК-меню петли безумие феерия - PullRequest
0 голосов
/ 25 января 2019

Helloooo!

Я написал симларский вопрос, но я изменил, как работает программа, и теперь я снова столкнулся с проблемой (я сделал одну большую ошибку и одну большую справочную таблицу вместо многих, чтобы сделать код чище) , но теперь это больше не работает .. Я новичок в программировании, поэтому, вероятно, простая ошибка .. (например, я сделал что-то не так, например =)

ниже мой код. это для ЖК-меню. активная строка меню в коде работает правильно. но пассивные строки меню (чтобы указать, где в меню вы находитесь) не работает. Я просто получаю строки в меню, которые не хочу отображать. количество строк в разных подменю определяется как "int rowcount;" и заявления случая (и это, кажется, работает хорошо).

но я получаю неправильный текст в меню. Я верю, что именно здесь я ошибаюсь (???): statetext2 = menu_state [(i + 1)% 2] .pText;

это работало, когда у меня было несколько циклов foor и несколько справочных таблиц, но, похоже, сейчас это не работает.

как мне сделать, чтобы эта работа? есть идеи?

        key = getkey();           // Read buttons
        memorykey = key;

        if (pStateFunc)
        {
            // When in this state, we must call the state function
            nextstate = (*pStateFunc) (key);
        }
        else if (key != KEY_NULL)
        {
            // Plain menu, clock the state machine
            nextstate = StateMachine(state, key);
        }

        if (nextstate != state)
        {
            state = nextstate;
            for (i=0; menu_state[i].state; i++)
            {

                if (menu_state[i].state == state)
                {

                 switch(menu_state[i].rowcount)
                     {
case 0://What case are picked depends on how many lines on the display that 
menu needs
        statetext1=  menu_state[i].pText;//"active menu line"                                                    
        statetext2=  menu_state[(i + 1) % 2].pText;//"passive" menu lines 
        statetext3=  emptyline; //do not print any text to statetext3   
        statetext4=  emptyline; //do not print any text to statetext4
        statetext5=  emptyline; //do not print any text to statetext5
        statetext6=  emptyline; //do not print any text to statetext6
                                                break;
case 1://depends on how many lines on the display that menu needs
        statetext1=  menu_state[i].pText;//"active menu line"
        statetext2=  menu_state[(i + 1) % 3].pText;//"passive" menu lines 
        statetext3=  menu_state[(i + 2) % 3].pText;//"passive" menu lines
        statetext4=  emptyline;
        statetext5=  emptyline;
        statetext6=  emptyline;
        break;
case 2://depends on how many lines on the display that menu needs
        statetext1=  menu_state[i].pText;
        statetext2=  menu_state[(i + 1) % 4].pText;
        statetext3=  menu_state[(i + 2) % 4].pText;
        statetext4=  menu_state[(i + 3) % 4].pText;
        statetext5=  emptyline;
        statetext6=  emptyline;
        break;
case 3://depends on how many lines on the display that menu needs
        statetext1= menu_state[i].pText;
        statetext2= menu_state[(i + 1) % 5].pText;
        statetext3= menu_state[(i + 2) % 5].pText;
        statetext4= menu_state[(i + 3) % 5].pText;
        statetext5= menu_state[(i + 4) % 5].pText;
        statetext6= emptyline;
        break;
case 4://depends on how many lines on the display that menu needs
        statetext1=  menu_state[i].pText;
        statetext2=  menu_state[(i + 1) % 6].pText;
        statetext3=  menu_state[(i + 2) % 6].pText;
        statetext4=  menu_state[(i + 3) % 6].pText;
        statetext5=  menu_state[(i + 4) % 6].pText;
        statetext6=  menu_state[(i + 5) % 6].pText;
        break;
        }

                    pStateFunc = menu_state[i].pFunc;
                    break;
                }
            }               
        }

} }


из h-файла:

typedef const struct
{
   unsigned char state;
   unsigned char key;  //input called before
   unsigned char nextstate;
} MENU_NEXTSTATE;

typedef const struct
{
  unsigned char state;
  char const *pText;
  char (*pFunc)(char key);  //char input called before
  int rowcount;
 } MENU_STATE;


const MENU_STATE menu_state[] = {
//  STATE   STATE TEXT    STATE_FUNC    (INDICATES WHAT SWITCH CASE TO USE 
       IN THE "if (nextstate != state)" foor loop)

{ST_A0,     SETTINGS,               NULL,   0},
{ST_A1,     MAINTENANCE,            NULL,   0},

{ST_B0,     FANDEL,                 NULL,   4},
{ST_B1,     AUTOMATIC,              NULL,   4},
{ST_B2,     TIMERCLEANTIME,         NULL,   4},
{ST_B3,     AMFANS,                 NULL,   4},
{ST_B4,     AMFANSWELD,             NULL,   4},
{ST_B5,     LANGUAGESET,            NULL,   4},

{ST_C0,     HEPAUP,                 NULL,   3},
{ST_C1,     RESETHEPA,              NULL,   3},
...