[an error occurred while processing this directive]
|
typedef
struct _menuItem { // Пункт меню
char flash *itemText; // Текст
void (*itemFunction)(char); // Функция меню
char itemArg; // и ее аргумент
}
MenuItem;static flash char _read[] = "Read device ",
_program[] = "Program device ",
_set[] = "Set device ",
_insert[] = "Insert ",
_edit[] = "Edit buffer ",
_clear[] = "Clear buffer ",
_append[] = "Append ",
_run[] = "Run ",
_stop[] = "Stop ";static MenuItem __flash
MenuItems[] = {
_set, SetType, 0,
_read, 0, 0,
_program, 0, 0,
_insert, Edit, INSERT_BUFFER,
_edit, Edit, EDIT_BUFFER,
_clear, Edit, CLEAR_BUFFER,
_append, Edit, APPEND_BUFFER,
_run, Run, 0,
_stop, Stop, 0
};
//
// ** Menu -- the main menu fuction
//
void Menu(void)
{
MenuItem __flash *_mptr = MenuItems;
static __flash char _unKnown[] = "Unknown device";for (;;)
{
Clear_LCD();
puts_P(_mptr->itemText);
switch (getchar())
{
case '+': // Next item
if (++_mptr > &MenuItems[(sizeof MenuItems)/(sizeof (struct _menuItem)) - 1]) // Set pointer to the last item
_mptr = MenuItems;
break;
case '-': // Previous item
if (--_mptr < MenuItems) // Set pointer to the last item
_mptr = &MenuItems[(sizeof MenuItems)/(sizeof (struct _menuItem)) - 1];
break;
case '!': // Do the selected menu item
if (Device->_devType==UNKNOWN_TYPE && _mptr->itemFunction!=SetType)
{
LCD_MoveCurs2(0); // Move the LCD cursor
puts_P(_unKnown); // Put the message
getchar();
break;
}
(*_mptr->itemFunction)(_mptr->itemArg); // Do the selected item
}
}
}
E-mail: info@telesys.ru