Ответ A ля СУБД(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено abivan 20 марта 2003 г. 10:57
В ответ на: Знатоки Ц подскажите как сделать выход из подпрограммы. отправлено vilkin 19 марта 2003 г. 22:57

попробую ответить. Хотя кратко может и не выйдет.
Смысл в том, что обработчик меню это одна подпрограмма,
выполняющая те или иные действия с текущим пунктом меню.
Все пункты меню имеют тип, согласно которого над
ним выполняется действо.(switch по типу)

Само меню может храниться где угодно, я храню во внешнем EEPROM.


структура меню следующая:

+-----+------+----+----- --+-----+
| int | BYTE |BYTE|char[n] | int |
+-----+------+----+--------+-----+
|BaseC|bParID|TYPE| sName |iPntr|
+-----+------+----+--------+-----+
BP | | | | | |
>------- |WidId |ITEM|"16/9" | 0 |
| | | | |SUBL|"Звук" |(-xx)----+
| | | | |LIST|"Каналы"|(+xx)| |
| - | | | | | | |
| | | | | +--------------->
+---------------------------------------+ указатель на список
| | | | | | | каналов
+------ | |ITEM|"БАСЫ" | |
P1 | | | | | | | |
| | | | | | | |
| - | | | | |
+-----+------+----+--------+-----+

Вы входите в программу меню через точку BP. Вычитываете запись.
Индицируете название. Если нажат Enter обрабатывете запись по типу.
Если подменю, то как бы снова входите в туже программу(просто новая загрузка
и продолжить, но с другой точки входа. Возврат на уровень выше понятен.
Пройдя по кольцу до последнего элемента(это отрицательный индекс в поле
BaseC) Вы грузите предыдущую запись(это звук в примере).
И опять кнопками <> ходите по предыдущему уровню.
А выход из меню можно сделать когда угодно с любого уровня,
просто выйдя из программы.

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

Если что не понятно спрашивай.

Всего, Иван.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru