8.2.2 ОПИСАНИЕ УРОВНЯ- DUD.SYS
СТРУКТУРА БЛОЧНОГО УСТРОЙСТВА
Каталоговое (блочное) устройство в системе iS-DOS может располагаться как на дисках, так и в дополнительной
памяти компьютера (т.н. "быстрый диск"). Файловая служба (уровень DUD.SYS) не делает различий между ними (тон-
костями занимаются уровень D0S.SYS и драйверы). Т.о. с точки зрения DUD.SYS блочное устройство представляет
собой набор блоков (размером 256 байт) с номерами от 0 до некоего максимального. В 0-ом блоке находится заго-
ловок тома (см. ПРИЛОЖЕНИЕ 1). В нем указаны размер устройства, полезная информация для драйвера и ссылка на
главный каталог устройства (для 80-дорожечного двухстороннего диска это обычно 3-ий блок). Все каталоги в
iS-DOS, включая и главный, представляют собой почти обычные файлы. Файл в iS-DOS - это набор блоков располага-
ющихся на устройстве подряд (непрерывные файлы) или состоящие из нескольких (от 1 до 85) непрерывных участков
("сегментов"). Сегментированные файлы имеют в своем 32-байтовом описателе, лежащем в каталоге, ссылку на спе-
циальный блок, описывающий сегментную структуру файла. Нулевой байт этого блока содержит количество сегментов
файла. Остальные 255 байт рассматриваются как 85 3-байтовых записей, каждая из которых описывает 1 сегмент
файла. Первые 2 байта записи - номер 0-го блока (адрес на устройстве) сегмента, а последний байт записи - раз-
мер сегмента в блоках. Файл 0-ой длины имеет заполненный нулями блок описателя сегментов. К сегментированным
файлам можно добавить блок или несколько в начало или середину, (а в конец даже с точностью до байта), а также
удалить блоки.
Непрерывные файлы и каталоги можно только укорачивать (процедурой ecut(#32)), зато доступ к ним - быстрее.
Если известны правила использования каталога, то его лучше делать непрерывным и нужного размера (см. функции).
32-байтовые описатели файлов располагаются в файле каталога подряд по 8 записей в блоке. Каталог - тоже
файл, но у него 2 описателя (кроме главного каталога устройства, у которого только 1: внутренний): внешний, в
старшем каталоге, и внутренний - 0-ой файл самого каталога. Вся информация о размерах, количестве файлов,
уровне вложенности хранится во внутреннем описателе. Именно этот описатель загружается в память при открытии
каталога процедурами openl(#21) и fopen(#25). Каталог, как и любой файл, может быть непрерывным или сегменти-
рованным. В первом случае при заполнении каталога файлами до предела (8 файлов на блок) Вы получите удовольст-
вие наблюдать сообщение об ошибке с кодом 105. Программа rename.com поможет Вам устранить неудобство передел-
кой каталога в сегментированный. Сегментированный каталог при его наполнении файлами сам увеличится до нужного
размера. Пределом будет лишь ограничение на 128 файлов в каталоге, вызванное несколько небесконечными размера-
ми памяти ZX-Spectrum, что однако, на наш взгляд, полностью компенсируется возможностью создавать подкаталоги
до 6-го уровня вложенности.
Переполнение блока описателя сегментов файла (ошибка 94) - еще одна неприятная ситуация, в которой можно
оказаться при бесконтрольном добавлении и удалении блоков в файлах большой (более 85 блоков) длины. При добав-
лении в конец файла с излишней сегментированностью файла легко справиться, добавляя к файлу по несколько бло-
ков сразу, и удаляя все лишнее по окончании рабочего процесса. Так делает, на пример, программа prt.com при
печати в файл, добавляя к файлу по 5 блоков. Если же программа добавляет блоки в середину файла, как к примеру
edit.com, то выход можно найти лишь в периодическом копировании файлов или разбиении большого файла на нес-
колько поменьше.
Еще одно маленькое неудобство для любителей всего большого: процедуры crfil(#23) и erf_(#ЗВ) обнуляют
старший байт длины, после чего получают число блоков файла округляя младшие 2 байта. В результате сходу Вы
сможете получить файл длиной от 0 до 65280 байт (255 блоков). Далее Вы можете воспользоваться процедурами до-
бавления fadd(#2F) или eadd(#31). В результате нехитрых комбинаций Вы получите файл до 21675 блоков длиной
(5548800 байт), что в 6 с лишним раз превышает вместимость дискеты. Если этот путь Вас по каким-либо причинам
не устраивает, то Вы можете напрямую обратиться к бит-карте диска (файл device.sys, блоки 1,2). 1 бит на блок,
0-му блоку диска соответствует 7-ой бит 0-го байта 1-го блока device.sys, 1-ому блоку - 6-ой бит, 8-ому блоку
- 7-ой бит 1-го байта и т.д.
ДИСКИ И ФАЙЛЫ
В главном каталоге первый файл, как правило, device.sys. Чтобы он не выбирался по маске, отметке и т.п. в
его регистре состояния подняты все биты. Т.е. он невидим, защищен и даже вроде как бы каталог. В нем находятся
заголовок тома и бит-карта блоков тома. Т.о пользователь получает к ним доступ через файл. Открыть файл можно
процедурой find(#34), а процедурой fopen(#25) и обращающимися к ней процедурами уровня СОМ в данном случае
пользоваться не рекомендуется. Если диск загрузочный, то в главном каталоге обязан присутствовать еще один
файл, защищенный подобным образом: boot.sys. Он также создается при инициализации тома программами format.com
и create.com. В нем программа BOOT.com размещает загрузчик системы.
На загрузочном диске также должен находится файл ????_dos.sys, представляющий собой выгруженную на диск па-
мять компьютера с системой iS-DOS. Сохранение на диске производит программа svsys.com. Пример: svsys smal.
Программа SVSYS при подобном обращении создаст файл smaldos.sys в текущем каталоге. Чтобы система загружалась
именно из этого файла, необходимо присоединить этот файл к тому программой CONNECT.com: connect smal.
При загрузке происходит автозапуск командного файла Sautoexec.bat. На системном диске необходимо наличие
файла S:extent.txt, определяющего действия системы в зависимости от расширения файла при нажатии клавиши Enter
на этом файле. Также обязательно наличие каталога S:SHELL и файлов extkey.txt, extview.txt и extprin.txt, оп-
ределяющих действия системы (строго говоря, уровня SHELL) при отработке всех функциональных клавиш. Все файлы
ищутся на диске Q - "quick", т.н. "быстром" диске. Им разумно назначить электронный диск, если у Вас имеется
дополнительная память и соответствующий драйвер. Для работы редактора необходим каталог Q:EDIT со всеми нужны-
ми редактору файлами.
8.3 #40. ИНТЕРПРЕТАТОР КОМАНДНОЙ СТРОКИ
= COM.SYS =
64(40):oparm - Открывает файл-параметр. Путь к файлу (полный или от текущего каталога) лежит в буфере ко-
мандной строки вместе с именем файла или его маской, (см. ПРИМЕЧАНИЯ 1,2) Выход: с обр. оши-
бок. Флаг NZ: нет заданного пути или ошибка в символьной строке.
65(41):fmrst - Восстанавливает первоначальное состояние среды, (устройство, каталог и файл, запоминаемые про-
цедурами работающими с командной строкой). Выход: с обр. ошибок, иначе сохраняет AF.
66(42):comstr - Разбирается с указанным путем и открывает данное устройство и каталог (файл не открывает!) или
снимает ключ. Вход: HL = адрес командной строки. Выход: флаг С: ошибка ввода/вывода (восста-
навливается прежняя среда);
NC,Z: А=0: HL'= 11-байтовый описатель/шаблон файла (если имя/маска файла не указано после пу-
ти, то шаблон из #FF)
А>0: HL'= адрес символа "/" (обнаружен ключ), А=первый символ после ключа.
NC,NZ: или пути нет, или ключа нет (пустая строка), или синтаксическая ошибка в командной
строке.
67(43):opcat - Аналогична процедуре comstr(#42), но работает с внутренним Буфером командной строки.
68(44):ехеbat - Запуск файла по пути и имени файла, находящегося во внутреннем буфере командной строки. Вход:
А=0: стандартная обработка типа файла, т.е. обращение к файлу S:extent.txt, А>0: DE = адрес
буфера с путем и именем текстового файла. Выход: CARRY SET - серьезная ошибка, иначе: Z -
O.K., NZ - какая-нибудь досадная мелочь типа отсутствия каталога или файла, (см. ПРИМЕЧАНИЯ
1.2)
69(45):gcom - Возвращает в HL' адрес внутреннего буфера командной строки. В отрицательную сторону расположен
вектор: -10(1) CSR ошибок строковых рестартов: 0:флаг С, FF:-NZ
-9(4) среда последнего exebat(#44)'a (run'a) (устройство(1),каталог(2)гфайл(1))
-5(2) указатель в командной строке
-3(2) дата
-1(1) номер bat-файлэ в рекурсивной цепочке.
DE'= 0(4) среда для fmrst(#41), -3(1) номер канала содержащего пути для дополнительного поиска
файлов для exebat(#44) и run (#48). (устанавливается утилитой path.com). Если 0, то "тропа" не
установлена.
70(46):trans - Преобразует имя файла и тип отделенный точкой ( либо маску ) в 11-байтовый описатель имени и
расширения (или шаблон в случае маски на входе). HL/DE = адреса входного/выходного буферов.
Входной буфер заканчивается кодом #0D или пробелом. Выход: флаг С - признак маски-шаблона.
Символы "*" и "?" преобразуются в код 255, пробел является разделителем. Используется для по-
иска по маске. Например: a*.h?p преобразуется в а.......h"p, где " означает код 255.
71(47):g_way - Формирует в заданном канале или буфере в символьном виде путь текущего подкаталога. (Неис-
пользованное пространство канала/буфера заполняется пробелами). А>0: А = номер канала А=0: в
буфере по адресу в HL, РЕ=размер буфера. Выход: если все O.K., то восстанавливает текущий ка-
талог (но не файл!). Регистр А не сохраняет.
72(48):тхх - = p_com(#49) + exebat(#44). (Выход см. exebat). Передаются регистры IX,В.
73(49):рсот - Заполнить внутренний буфер командной строки. HL = адрес строки, оканчивающейся кодом 13. При
длине строки более 128 символов возвращает ошибку (флаг С).
74(4А):dvtrn - Преобразует логическое имя устройства в физическое. Вход и выход в per.А. При отсутствии дан-
ного логического устройства возвращает флаг NZ.
75(4В):newcom - Аналогична comstr(#42), но для нового диска.
76(4С):newcat - Аналогична opcat(#40), но для нового диска.
Обе "new" процедуры используют процедуру binit(#0F). В случае ошибки среду не восстанавливают.
77(4D): rcdel - Удаление рекурсивно созданных каналов. В per.А - номер канала завершающего цепочку. Рекурсив-
ная цепочка состоит из каналов, ^4-ый байт которых содержит номер предыдущего канала. Если ка-
нал в цепочке первый, то данный байт равен 0.
78(4Е):cpir - Ищет в таблице по адресу DE слово, совпадающее с началом последовательности символов по адресу
HL, оканчивающихся на символ меньше "А"(#41 hex). Если нет, то NZ , иначе Z и в регистре А -
номер слова в таблице. Нумерация от 0. Первые 2 байта таблицы - длина таблицы без самой длины.
Далее слова длиной от 1 до 7 символов, оканчивающихся "13"(#D). Выход: HL'- продолжение текста
после искомой модели, DE'- продолжение таблицы после найденной модели.
79(4F):convr - Преобразует 11-байтовый описатель имени и расширения файла (в HL), в 13-байтовое имя файла с
расширением через точку и с "13" в конце (в DE). На выходе DE' - адрес #0D.
80(50):fncor - Проверяет на правильность имя файла или каталога. А: Если 5-ый бит установлен,то проверяется
каталог (при этом все маленькие буквы меняются на большие), если не установлен - то файл. Вы-
ход: флаг С - если есть запрещенные символы, HL' = адрес 11-байтового описателя имени. В имени
файла разрешены: латинские и русские буквы альтернативной кодировки ГОСТа (строчные и пропис-
ные), цифры а также 8 символов: #$&+-=_' (коды: 23,24,26,2В,2D,3D,5F,60).
81(51j:fndev - По имени в HL (8 букв) ищет установленный драйвер или резидентную задачу. А= номер канала, с
которого начинать поиск (#D8 для .res), В - число каналов перебора(#10). Выход: С" А=37 - не
нашла, NC - O.K.: А=номер канала, HL'= тело канала: 0(4) status: dev,cat,file (.res), 4(2) ад-
рес в памяти, 6(2) длина, 10(8) имя. (см. КАНАЛЫ и ПРИЛОЖЕНИЕ 8).
82(52):opres - Аналог opcat для .res, .key, .typ, .lpr, .blk (пробелы вместо типа = .res)(C,NZ -//-), но клю-
чей не снимает (пользуйтесь opcat). По имени и типу (через точку) в буфере командной строки
ищет установленную резидентную задачу или драйвер. "@" означает "bat.res". Выход с флагом Z
аналогичен fndev(#51).
83(53):exeres - Запуск резидентной задачи по номеру канала в А. (Для запуска по имени используйте run или
exebat). Передает резиденту все регистры, кроме AF, чем пользуются ch.res, ren.res и пр.
84(54):swrun - Запуск .com-файла с сохранением тек. среды (1Х-начало, DE-длина сохраняемой области, HL-строка
для run'а) в файле swapO.swp. По выходе из вызванного т.о. .com-файла восстанавливается сохра-
ненная среда.
ПРИМЕЧАНИЯ к уровню com.
1. Путь может быть задан как в символьном виде, так и в упакованном формате, т.е.: 0(1): код 8, 1(1): номер
устройства (диск), 2(2): каталог (см. g stat(#37)), 4(11): файл (имя и тип либо шаблон (см. trans(#46))).
2. Указатель в командной строке - адрес для обработки путей или ключей внутри буфера командной строки.
р_сот(#49) устанавливает указатель на начало буфера командной строки. Остальные рестарты ,использующие ко-
мандную строку, берут свои данные и устанавливают указатель на первый пробел или код 13 после данных.
0parm(#40), opcat(#43), exebat(#44) обрабатывают путь с текущего положения указателя.
3. Уровень поддерживает 3 внутренних команды установки дисков S,T,Q: L_S,L_T,L_Q, команду установки текущего
каталога CAT, и команду управления флагами ошибок ERR. Примеры: "L_T /В", "CAT S:SHELLHELP' "ERR /0": по
ошибке типа "нет пути/файла" рестарты opcat(#43), comstr(#42), exebat(#44), run(#48) выйдут с флагом NZ
(старый стандарт), "ERR /1": в подобной ситуации выдать флаг С и А=81 (новый стандарт).
8.4 #60. ОКОННАЯ ТЕХНОЛОГИЯ
= WIND.SYS =
97(61 J:wt - Вывод окна. Подфункция в per. А: А=0 окно с одинарной рамкой, А=1 без рамки, А=2 с двойной рам-
кой, А=3..127 без рамки, А=128..255 только подкраска. 1Х= вектор окна (см. ПРИЛОЖЕНИЕ 10:)
98(62):box - Рисование/стирание рамки окна. Вход: IX = адрес вектора, DE - отступ по Y и X от края окна; Ре-
гистр А: бит 7 - рисовать(0)/стирать(1), биты 0..3 - стороны: левая, правая, верх, низ.
99(63):avft - Подкрашивает строку внутри окна, с рамкой. Вход: IX = адрес вектора окна, А = номер строки, ко-
торую необходимо подсветить (нумерация от 1), В = цвет.
* 100(64):awtc - Подкрашивает строку внутри окна, не затрагивая рамку, 1Х=вектор окна, А=номер строки, В=цвет.
101(65): lwt - Распечатка заданного количества строк в окне:
А - номер строки (начала), IX - вектор окна, HL - адрес строк текста для печати, В - количество
строк, которое необходимо распечатать;
102(66):adrwt - Печать текста в окне. IX - вектор окна, после которого лежит текст окна (символ "13м служит в
качестве <ВК>, "3" - конец текста);
103(67): lenwt - Аналог adrwt, но в HL - адрес текста окна;
104(68):prstr - Распечатка строки в окне с несколькими подфункциями. Код подфункции в регистре Е:
Е=0 - prstr - Распечатка строки в окне по логическому имени с центровкой. IX - адрес вектора
окна, В -логическое имя строки, HL - адрес массива-анализатора, младшие 6 битов
регистра А - - смещение по координате Y в окне, старшие 2 бита - режим центров-
ки. 00 - без центровки, 10 - выравнивание по правому краю окна, 11 - выравнива-
ние по центру;
Е=1 - xystr - Распечатка строки в окне заданной длины с центровкой.IX - адрес вектора окна, В
- длина строки, HL - адрес строки, А - аналогично prstr
Е=2 - ..... - Находит строку с номером в регистре В. На входе: HL-адрес текста, В - номер
строки. Выход: HL -возвращает адрес, В - длину
Е=3 - tystr - Распечатка строки в окне по номеру в тексте с центровкой. IX - адрес вектора ок-
на, В - номер строки в тексте, HL - адрес текста строк, А - аналогично prstr
105(69):empty - не используется
106(6А):panel - Работа с панелью. Код подфункции в регистре А (см. ПРИЛОЖЕНИЕ 15.)
107(68):wtpos - Инициализирует системную переменную xypos, вычисляя ее значение по вектору IX и смещению в ок-
не в регистрах: Н - по Y (IX+1),L - по X (IX+6).
108(6С):str - Печать строки, кончающейся на "13",в текущей позиции. HL - адрес строки.
109(6D): lnstr - Печать строки. HL - адрес, в В - количество символов. Обращается в цикле к ttyout(#A). Коорди-
наты устанавливают следующие функции: typos(#C), wtpos(#6B), ttyout и т.д.;
110(6Е):smbgt - Строковый мобильный редактор. Сам печатает содержимое буфера. Вход: HL - адрес буфера, А - ши-
рина окна (X), В (биты 0..4) - высота окна (Y), Старшие биты регистра В:
бит 7: курсор позиционируется на первый пробел с конца(0)/начала(1),
бит 6: на конец(0)/начало(1) буфера,
бит 5: режим "overtype'V'ME" (очистка буфера по нажатии).
D - M~CSR, Е - K~CSR. (см.ПРИЛОЖЕНИЕ 2.) Выход: с обр. ош. Флаг С: ошибка ввода/вывода (нет
драйвера например ). Иначе (NC): флаг Z: Выход по клавише <Enter>, А = длина строки без <ВК>,
флаг NZ: Выход по одной из 5 спец. клавиш: CS/9, CS/SS, SS/A, SS/Space, SS/Enter (коды от #0Е
до #12), А= код клавиши.
lll(6F):empty - не используется
112(70):scrol - per. А=0: настройка процедуры скроллинга на вектор окна. А=1: скроллинг на 1 строку вверх.
А=2: вниз в IX адрес расширенного вектора окна во всех трех случаях (-1:1/2/4/8 - дискретность
скроллинга, -2:задержка), Н1.=крайн1ие байты заполнения. Рекомендуем: HL=0 для пробелов, HL=#5A0
для окна с двойной рамкой, HL=#180 для одинарной. Сдвигается область внутри рамки.
113(71):tylin - Распечатка строки по вектору для edstr от XS (позиции курсора) до конца видимой области. IX -
адрес вектора ( "ошибок быть не может")(см.ПРИЛОЖЕНИЯ 10..13)
114(72):gscr - Возвращение в регистре HL' адреса вектора экрана и Ьеер'а (см. ПРИЛОЖЕНИЕ 14.)
115(73):els - А=0: Очистка экрана с помощью переменных PAPER и B0RD (см. ПРИЛОЖЕНИЕ 14.), иначе: подкраска эк-
рана цветом А.
116(74):еmpty - не используется
117(75):empty - не используется
118(76):у_ - Включение мигающего курсора.
119(77):п_ - Выключение мигающего курсора.
120(78):empty - не используется
121(79):empty - не используется
122(7А):empty - не используется
123(7В):еmpty - не используется
124(7С):da - Преобразование целого числа в ASCII-строку. Вход: HL - адрес выходного ASCII-буфера, А = длина
буфера, Carry reset: DE - 2-байтовое число, Carry set: DE - адрес 4-байтового числа. В - основа-
ние системы счисления Выход с обр. ош. ( переполнение буфера )
125(7D):ad - преобразование строки ASCII-символов в 4-байтовое число. Ведущие пробелы игнорируются. HL - ад-
рес ASCII - буфера, А - длина буфера ( если А=0, то до кода 13 ), В - основание системы счисле-
ния по умолчанию (не более 16, В=0 понимается как 10). Система счисления может также определять-
ся по первому символу буфера: #,h,H - 16; .,d - 10; о,0 - 8; %,Ь,В - 2. Выход: 32-разрядное чис-
ло в DE'HL'. ВС' - продолжение ASCII-буфера. Возможные ошибки (флаг С): нецифровой символ (А=0),
переполнение (А=1).
126(7Е):analys - Передача управления подпрограмме по адресу из таблицы. HL - адрес таблицы, А - код команды.
Таблица состоит из записей по 3 байта: 0(1) код команды, 1(2) адрес процедуры. В последней
записи должен лежать байт #FF и адрес отработки ситуации "код не найден".
127(7F):edstr - Редактирование строки в тексте. Отрабатывает все печатные коды (символы) + 6 управляющих: кла-
виши 1,2,3,5,8,0 с Caps Shift'oM. IX - вектор, (на входе необходимо инициировать LNST, XS и
СОМ) Выход: CARRY - системная ошибка, (см. ПРИЛОЖЕНИЯ 10..13).
8.5 #80. ФАЙЛОВАЯ ОБОЛОЧКА
= SHELL.5Y5 =
128(80):shelO - Главный выход в оболочку: создание вирт. диска. (Размер: g_cnfg(#10):HL'-6)
129(81):shell - Выход с очисткой экрана, инициализацией ERDEV, QUEST (см. ПРИЛОЖЕНИЕ 3), USPNL, PAPER, B0RD
(см. ПРИЛОЖЕНИЕ 14), переключением на основное (0-ое) устройство печати /swtyp(#1В)/ в прямом
режиме /prcpl (#0В)/. В блочном драйвере устанавливается 7-ой бит в 9-ом байте (см. ПРИЛОЖЕНИЯ
3,6).
130(82):shel2 - Выход с перерисовкой и подкраской верхней строки подсказок и печатью обеих панелей.
Все 3 shel-рестарта перехватывают стек и принудительно задают pnCSR=%01010, nLOG=l (см. ПРИ-
ЛОЖЕНИЯ 16,17), причем shell является точкой входа в shelO, a shel2 - в shell.
131(83):pnview - Ожидает отпуска клавиш и возвращает в per. А код cshel2, если панели одинаковые. Иначе
A=cvwpnl. (см.ПРИЛОЖЕНИЕ 16.). Выход с обр.ош. (пользуется ф-цией stchn(22))
132(84):shout - Выход в оболочку с выполнением внутренней команды оболочки (номер в A). Carry set - обработка
ошибки (см.ПРИЛОЖЕНИЕ 16.)
133(85):p~csr - Устанавливает маску состояния файла в панели для пометки и проверки файла. Вход: А= маска.
По умолчанию маска=1, т.е. уровень SHELL метит файлы поднимая 0-ой бит.
134(86):~_csr - По номеру файла в каталоге (в per. Е) возвращает: A=(HL')= байт состояния отметки файла,
(HL'-1)= порядковый номер отметки.
135(87):gmpan - Запрос о состоянии текущей панели Выход: А - число отмеченных файлов на текущей панели, L' и
Н' - минимальный и максимальный номера файлов, а именно: L'=0, Н'= где-то между общим числом
файлов в каталоге, включая удаленные, но без каталогов, и числом неудаленных файлов, но с ка-
талогами. DE' - адрес вектрра рабочей панели -48, ВС' - адрес вектора оболочки, (см. ПРИЛОЖЕ-
НИЯ 17,18).
136(88):еddig - Редактирование десятичного числа в окне (для menu напр.). А - число цифр, DE - координаты для
wtpos, HL - начальное значение числа, IX - вектор окна. Выход: Флаг С: ошибка (переполнение
числа, ввода/вывода и пр.); NC,Z: HL'= новое значение числа; NC,NZ: выход по одной из 5 спец.
клавиш (см. smbgt(#6E).
137(89):mmenu - Перерисовка верхней строки подсказок оболочки с подкраской или без в зависимости от 0-го бита
riLOG (см. ПРИЛОЖЕНИЕ 17.)
138(8А):gcurs - Возвращает параметры панельного курсора. Выход: А=Е'= номер файла, D'= позиция Y в окне (=Н
для wtpos), В' - номер текущей панели (0 - левая, 1 - правая), HL' - адрес вектора окна пане-
ли. (ПРИЛОЖЕНИЯ 17,18.)
139(8B):mat - Пишет "Please Wait" на месте курсора
140(8С):g_dev - Переключение устройств. Ввод символа с клавиатуры с миганием курсора в окне. Вход: HL=CMene-
ние для wtpos, Carry Set: А=номер устройства, иначе: текущее. Флаг Z: Выход через RST
dvtrn(#4A), NZ: через smbgt(#6E).
142(8е):shsubr - Выполнение команд из прикладных задач. А- код команды. (ПРИЛОЖЕНИЕ 16)
143(8F):cpfil - Сравнение 11-байтового шаблона(ОЕ), (например результата RST trans(#46)), с 11-байтовым опи-
сателем^) файла (имя и расширение). Если равны то флаг Z иначе NZ.
144(90):shpanl - Выполнение команд работы с панелями : Per. В - регистр состояния pnCSR ( ПРИЛОЖЕНИЕ 17).
А=0 -аналог shelO, А=1 -аналог shell, А=2 -аналог shel2, А=3 - движение курсора по панели,
А=5 -pnDR - печать обеих панелей,А=6 -TYPNL- печать одной панели.
145(91):menu - Меню. Перепечатывает окно. После стандартного wt-окна необходимо положить буфер CSR строк
длиной исходя из расчета по 1 байту на строку. CSR: 0 - проскакивать строку, 1 - останавли-
ваться на ней.
Вход: IX - адрес вектора окна: байты 0..7 - стандартное окно.
В отрицательную сторону:
-12(1) Цвет курсора при отработке Enter
-11(1) Управляющий регистр меню. Биты 0/1:
0 - awt/awtc - Тип курсора
1 - старый/новый стандарт вектора.
(По новому стандарту: 8(2) - Адрес CSR-массива минус 1, 10(2) - Адрес текста.)
7 - Вызывать программу пользователя -6(2) до/после ожидания клавиши.
-10(1) Цвет курсора
-9(1) Позиция курсора (от 1)
-8(2) Адрес программы инициализации символьного массива, вызываемой при входе в меню и при
каждом выходе из строковой ф-ции с NZ,A=1.
-6(2) Адрес программы пользователя, выполняющейся при нажатии любой клавиши.
-4(2) Адрес списка дополнительных функций (т.н. "горячих клавиш"). Этот список должен состо-
ять из 3-байтовых значений: 0(1) код клавиши, 1(2) адрес дополнительной процедуры. В
этом случае на входе в процедуру В=код клавиши, курсор (IX-9) не перемещается. Если
2(1)=0, то 1(1) означает номер строки и данная клавиша обрабатывается как Enter на
строке с указанным номером, (IX-9) принимает соответствующее значение. Если адрес
списка доп. ф-ций в векторе = 0, то дополнительно отрабатываемых клавиш нет.
-2(2) Адрес списка функций отработки клавиши Enter. Список должен состоять из 2-байтовых ад-
ресов функций, количество которых должно соответствовать количеству строк в меню. Если
один из адресов функций или адрес всего списка = 0, то при нажатии ENTER ничего не
произойдет.
8(2) Адрес CSR-массива минус 1
10(2) Адрес текста (По новому стандарту)
(По старому стандарту с 8-го байта: CSR-строка, затем - текст окна.) Функции, выполняемые по
нажатию клавиши Enter могут управлять дальнейшими событиями флагом Z/NZ и содержимым регистра
A: Z: ничего не делать, NZ: А=255 - выйти из меню, А=1 - вызвать процедуру инициализации. Ес-
ли функция отработки доп. клавиш выходит с флагом Z, то выполнится та строка в меню, номер
которой будет на выходе в per.А (Если 0, то ничего не выполняется). При нажатии SS/A происхо-
дит выход из меню, причем происходит установка: per.А = 225 и флаг NZ.
146(92):funct - Выполнение ф-ций-утилит по текстовому файлу. Ш=путь файла, А=код ф-ции. Используется оболоч-
кой для отработки нажатых клавиш (файл S:SHELLextkey.txt). Среда сохраняется. Для обозначе-
ния служебных символов используется десятичное число, начинающееся с одиночной кавычки. Так
сама кавычка будет выглядеть как '39. путь и ключи ф-ции отделяются пробелом, (см.
extkey.hlp).
147(93):shexe - Выход в оболочку с запуском RST exebat(#44) с А=0. (см. ПРИЛОЖЕНИЕ 17)