|
#define NO_MENU 0
#define MAIN_MENU 1
#define SUBMENU_1 2
#define SUBMENU_2 3
//.......#define CODE_1 0x55
#define CODE_2 0xaatypedef unsigned char MENUSTATE;
typedef struct _menu_data {
char isKeyPressed;
char KeyCode;
} MENUDATA,*PMENUDATA;
typedef MENUSTATE (__cdecl *MENUITEMPROC)(PMENUDATA);extern "C" {
MENUSTATE __cdecl NoMenuProc(PMENUDATA);
MENUSTATE __cdecl MainMenuProc(PMENUDATA);
MENUSTATE __cdecl SubMenu1Proc(PMENUDATA);
MENUSTATE __cdecl SubMenu2Proc(PMENUDATA);
//.....
}
MENUITEMPROC FSM[]={ NoMenuProc,
MainMenuProc,
SubMenu1Proc,
SubMenu2Proc };
void main(void) {
// ........MENUSTATE state=NO_MENU;
MENUDATA md;while (1) {
// .......
state = FSM[state](&md);
}}
//------------------
MENUSTATE __cdecl NoMenuProc(PMENUDATA pmd) {
if (!pmd->isKeyPressed) return NO_MENU; else {
switch(pmd->KeyCode) {
case CODE_1:
//.....
// Go to main menu
return MAIN_MENU;
case CODE_2:
//.....
// Go to directly to submenu 1
return SUBMENU_1;
default:
return NO_MENU;
}
}
}
E-mail: info@telesys.ru