Програмная часть: элементы пользовательского интерфейсаПользовательский интерфейс плейера образован тремя группами модулей: 1) низкоуровневые "кирпичики" (описаны на этой странице); 2) модули режимов; 3) координатор режимов. К низкоуровневым относятся следующие: Модуль выбора файлов (path_changer.asm.inc)Этот модуль, взаимодействуя с уровнем файловой системы, позволяет, используя полноэкранное меню, выбирать пользователю нужный файл. Пользователь может выбирать глубину управления (root-каталог или подкаталог заданного уровня - стрелки вверх/вниз) и элемент на заданной глубине (стрелки вправо-влево). Путь модифицируется непосредственно в памяти файлового уровня. Модуль требует инициализации вызовом процедуры pc_Init при включении питания. В случае, если глубина пути превышает число экранных строк, возможно вертикальное скролирование информации. Модуль селекторов (user_router.asm.inc)Этот модуль содержит две основные процедуры. Экранное меню (процедура ur_Menu)В качестве аргумента эта процедура получает адрес таблицы (не более 6 строк), в которой перечислены строки меню и их аттрибуты. Меню выводится на экран, после чего процедура может либо закончить работу по запросу пользователя либо вызывать различные процедуры, связанные с выбранной строкой, в зависимости от действий пользователя. Для каждой строки описываются: текст строки; дополнительная процедура вывода текста (вызывается сразу после вывода строки); процедуры, вызываемые при нажатии стрелки вправо, влево или клавиши подтверждения; дополнительные флаги. Скроллинг меню не предусмотрен, поэтому число пунктов ограничивается числом экранных строк - 6. Расширенный анализатор клавиатуры (процедура ur_KeybRoute)В качестве аргумента эта процедура получает таблицу комбинаций клавиш, флагов и обработчиков. Когда управление передаётся ur_KeybRoute, она проверяет состояние клавиатуры и если оно соответствует одной из комбинаций, указанных в таблице, управление передаётся соответствующей процедуре. ur_KeybRoute используется в плейере очень широко, так как существует много различных состояний кода, в каждом их которых плейер может реагировать на многие клавиши и их комбинации. Писать для каждого случая длинный список команд cpi/breq очень скучно :). |