Пример обработки команд |
Пример простейшей программы, использующей обработку команд графического интерфейса пользователя ЭКВМ.
Программа состоит из инициатора графического интерфейса, обработчика команд графического интерфейса, обработчика нажатия клавиш.
Инициатор разрешает работу автозапуска (Р9048), интерфейса (Р9200), задаёт адрес главной таблицы меню (Р9201), номер начальной формы (Р9202) и элемента (Р9203), и перерисовывает форму.
Обработчик результатов выполнения операции считывает код из регистра Р9209, при успешном выполнении операции переходит к обработчику нажатий клавиш. При необходимости обработки команд, запускается простейший обработчик команд, который извлекает число из регистра Р8, инвертирует число и записывает его обратно в регистр Р8. Далее происходит перерисовка экрана.
Обработчик нажатий клавиш определяет нажатие клавиш, если нажата клавиша "Выход" при нулевой текущей форме, останавливает программу и отключает автозапуск, иначе - передаёт код клавиши в регистр команд интерфейса (Р9208).
Главная таблица меню ссылается на основную форму интерфейса, форма начинается с заголовка.
Таблица флагов разрешает только команду "ВВОД" с признаком ввода, при этом обработка команды производится программой пользователя.
Таблица переходов по команде "ВВОД" ссылается на пустую форму. Таблица переходов по командам "ВЫХОД", "ВЫБОР ВЛЕВО" и "ВЫБОР ВПРАВО" ссылается на основную форму, но выход организован основной программой.
Программа основной формы задаёт шрифт, позицию вывода и выводит число из регистра Р8.
Запускаем программу: В/О, С/П:
При нажатии на клавишу "Ввод" число на экране инвертируется:
При нажатии на клавишу "Выход" происходит остановка программы:
Программа занимает всего одну страницу памяти. Программа является незначительной доработкой программы ввода чисел.
0000 0Dh CX ;
0001 02h 2 ;
0002 F4h PP M 9048 ;Разрешаем
0003 90h ;автозапуск
0004 48h ;
0005 01h 1 ;
0006 F4h PP M 9200 ;Разрешаем работу
0007 92h ;интерфейса
0008 00h ;
0009 07h 7 ;Адрес главной
0010 00h 0 ;таблицы меню
0011 F4h PP M 9201 ;
0012 92h ;
0013 01h ;
0014 0Dh CX ;
0015 F4h PP M 9202 ;Нулевая форма
0016 92h ;
0017 02h ;
0018 F4h PP M 9203 ;Нулевой элемент
0019 92h ;
0020 03h ;
0021 06h 6 ;Команда перерисовки
0022 04h 4 ;экрана
0023 F4h PP M 9208 ;Вводим команду в
0024 92h ;форму
0025 08h ;
0026 F6h PP RM 9209 ;Получаем код
0027 92h ;результата
0028 09h ;выполнения операции
0029 57h F X!=0 40 ;0 - успешно
0030 40h ;
0031 01h 1 ;1 - требуется
0032 11h - ;принудительная
0033 5Eh F X=0 61 ;обработка команды
0034 61h ;иначе - ошибка
0035 68h RM 8 ;Извлекаем число
0036 3Ah K NOT ;Инвертируем
0037 48h M 8 ;Пишем обратно
0038 51h GOTO 21 ;Переходим к
0039 21h ;перерисовке экрана
0040 F6h PP RM 9029 ;Проверяем нажатие
0041 90h ;клавиш
0042 29h ;
0043 47h M 7 ;Если клавиша не
0044 3Ah K NOT ;нажата,
0045 57h F X!=0 40 ;продолжим проверку
0046 40h ;
0047 67h RM 7 ;
0048 03h 3 ;Если нажата клавиша
0049 02h 2 ;"Выход"
0050 11h - ;
0051 31h K ABS ;и текущая форма
0052 F6h PP RM 9202 ;нулевая, то
0053 92h ;
0054 02h ;
0055 38h K OR ;
0056 57h F X!=0 65 ;Переходим к
0057 65h ;останову программы
0058 67h RM 7 ;Иначе, передаём код
0059 51h GOTO 23 ;клавиши в форму
0060 23h ;
0061 0Dh CX ;
0062 F4h PP M 9048 ;Отключаем
0063 90h ;автозапуск
0064 48h ;
0065 F6h PP RM 9209 ;Извлекаем код
0066 92h ;ошибки
0067 09h ;
0068 50h R/S ;Останов программы
0069 51h GOTO 00 ;Переход на начало
0070 00h ;Главная таблица
0071 00h 0 ;меню
0072 74h K X!=0 4 ;
0073 FFh .DB 0FFh ;
0074 00h 0 ;Заголовок формы
0075 08h 8 ;
0076 0Bh +/- ;
0077 09h 9 ;
0078 09h 9 ;
0079 09h 9 ;
0080 0Eh ENT ;
0081 0Dh CX ;
0082 0Ch EE ;Таблица флагов
0083 00h 0 ;Таблица переходов
0084 00h 0 ;
0085 00h 0 ;Пустая форма
0086 00h 0 ;
0087 17h F LG ;
0088 65h RM 5 ;Основная программа
0089 01h 1 ;Выбор 1-го шрифта
0090 60h RM 0 ;Позиция вывода
0091 14h <-> ;Координаты вывода
0092 18h F LN ;X0 - 14, Y0 - 18
0093 5Ch F X<0 00 ;Вывод числа из
0094 00h ;регистра Р8
0095 00h 0 ;
0096 08h 8 ;
0097 FFh .DB 0FFh ;Конец программы,
0098 FFh .DB 0FFh ;программа-заглушка
0099 FFh .DB 0FFh ;элемента