РУКОВОДСТВО ПРОГРАММИСТА II. ДИАЛОГОВЫЙ КОМАНДНЫЙ РЕЖИМ (окончание) 4. ОПИСАНИЕ ВСТРОЕННЫХ ДИРЕКТИВ Все встроенные директивы имеют английские названия. Для каждой директивы приводятся полные списки возможных ключей и параметров, формат требуемых параметров во входной строке. Установка во вспомогательных целях других ключей, парамет- ров и переменных не оговаривается. 4.1. Универсальные ключи поиска Ряд ключей имеет единый смысл для различных директив и служит для управления режимом поиска файлов по подкаталогам при разборе путей доступа. Ключ X - поиск в глубину. Обычно поиск целевых файлов проводится по целевому каталогу (см. 3.5) без спуска в его подкаталоги. По ключу X поиск целевых файлов идет по всем подкаталогам целевого каталога. Ключ D - поиск подкаталогов. При поиске находятся только целевые файлы-подкаталоги. Ключ F - поиск файлов. При поиске находятся только целе- вые файлы-некаталоги. Одновременное указание ключей X и D означает поиск всех каталогов в глубину по целевому каталогу. Шаблон при этом игнорируется. Ключ F при поиске в глубину смысла не имеет. Ключ N - без подтверждения. Отменяет пофайловый запрос подтверждений на обработку, если в качестве целевого файла указана группа файлов (шаблон). Ключ Q - без подтверждения и вывода имен. Аналогичен /N, но не выдает имен обработанных файлов. Ключ P - с приостановом. Организует выдачу информации на экран порциями с запросом продолжения. Размер порции равен размеру окна. Продолжение выдачи - нажатие любой клавиши на запрос (кроме РЕД - конец выдачи). Приостановить выдачу можно в любой момент нажатием пробела. Ключ H - с обработкой скрытых файлов. При поиске по ка- талогу будут находиться все файлы, в т.ч. с установленными атрибутами H (спрятан), S (системный), B (копия). Для про- грамм ключ H имеет смысл "выдать подсказку". 4.2. Универсальные параметры фрагмента файла Ряд параметров имеет единый смысл для различных дирек- тив и служит для определения вырезки фрагмента файла для обработки и адреса его размещения в памяти. Параметр P - начальная позиция. Определяет байтовое сме- щение начала фрагмента относительно начала файла. По умол- чанию равен 0. Параметр L - длина фрагмента. Определяет байтовую длину фрагмента файла. По умолчанию равен разности длины файла и начальной позиции фрагмента. Параметр A - адрес фрагмента. Задает адрес в памяти, ку- да загружается или откуда записывается фрагмент файла. По умолчанию (где оно допустимо) равен стартовому адресу файла (в основном, для двоичных программ и данных), если таковой не определен - стандартному адресу загрузки 1800. Параметр S - стартовый адрес файла. Задает стартовый ад- рес файла (обычно для двоичных данных, записываемых из Ко- мандера), или подменяет при загрузке стартовый адрес из файла новым значением. По умолчанию совпадает с адресом, заданным параметром A. Если директива обрабатывает несколько файлов по шабло- ну, параметры фрагмента относятся к каждому файлу. 4.3. Вывод каталога DIR путь-шаблон ключи: D F Q X L W P H Вывод списка файлов из указанного подкаталога, удовлет- воряющих шаблону. Для каждого файла выдаются: защита, тип, имя, число за- нимаемых блоков памяти и дата записи каждого файла. В конце выводятся общее число выданных файлов и размер свободной памяти тома. Неопределенная дата (00.00.80) не выводится. Ключ L - вывод 16-чных длин файлов в байтах вместо дат. Ключ W - вывод только имен файлов. Ключ H - показ "спрятанных" файлов, т.е. файлов с уста- новленным атрибутом скрытия. Ключ X - вывод содержимого всех подкаталогов. При этом в поле типа файла выводится относительный уровень вложенно- сти, а поле имени сдвигается вправо на величину этого уров- ня. При указании этого ключа файлы и подкаталоги внутри каждого каталога группируются отдельно. Ключ D здесь означает выдачу всех подкаталогов. При запросе подтверждения обработки в других директивах для каждого файла выдается соответствующая ему строка ката- лога в описанном выше формате; этот формат можно менять,как сказано выше, ключами L и W. В конце каталога выдается общее число блоков, занятых выданными файлами, и число свободных блоков на носителе. 4.4. Вывод и установка даты DATE [ дата ] Дата задается в виде ЧЧ.ММ.ГГ . Осмысленные значения да- ют десятичные значения ЧЧ от 1 до 31, ММ от 1 до 12 и ГГ от 81 до 99; контроль корректности даты не проводится, задание других значений вырабатывает некоторую бессмысленную дату. Если дата указана, то она записывается на диск в поле даты корневого каталога. При загрузке системы эта дата бу- дет автоматически установлена текущей. Текущей датой поме- чаются все создаваемые и изменяемые файлы. Если дата не указана, выводится текущая дата. Неустановленной датой считается 00.00.80; при выводе ка- талога у помеченных ею файлов дата не выдается. 4.5. Установка и снятие защиты файлов по записи LOCK путь-шаблон ключи: D F Q X L W N H UNLOCK -""- Установка и сброс атрибута защиты от записи, переимено- вания и уничтожения указанного файла или группы файлов, в т.ч. каталогов. При выводе каталога файлы, закрытые на запись, отмечают- ся '*' в позиции защиты. Закрытие на запись каталога предохраняет от изменения файлы во всех его подкаталогах. 4.6. Уничтожение файлов DEL путь-шаблон ключи: Q X L W N H Этой директивой уничтожаются только файлы данных, но не каталоги; они и все их надкаталоги должны быть открыты на запись, иначе будет выдана ошибка. 4.7. Уничтожение каталогов RD путь-шаблон ключи: D F Q X L W N H Этой директивой уничтожаются и файлы, и каталоги. Унич- тожение выполняется с погружением во все подкаталоги с по- файловым запросом (если нет ключа N). Каталоги, в которых остались файлы, не уничтожаются и выдается ошибка. Атрибут X здесь, как и везде, относится только к поиску целевого каталога. На полное уничтожение подкаталогов его отсутствие не влияет. Атрибут D здесь позволяет уничтожить только каталоги, оставив файлы данных, соответствующие шаблону. 4.8. Переименование файлов REN путь-шаблон шаблон ключи: D F Q X L W N H Переименовывает в каталоге файлы, подходящие под первый шаблон, в соответствии со вторым. Правила переименования таковы: - имя файла подгоняется под шаблон поиска (первое имя), при этом каждой '*' сопоставляется некоторая подстрока; - в шаблоне замены i-й по порядку знак '*' или '?' заменя- ется, соответственно: '*' - на подстроку, сопоставлен- ную i-й '*' в шаблоне поиска; '?' - на пустую подстро- ку; лишние '*' в обоих шаблонах сопоставляются пустым подстрокам. Примеры: имя шаблон поиска шаблон замены результат EDITOR.PRG *.* *1.*X EDITOR1.PRGX COM.MAIN.ASM *.*.* *.?* COM.ASM CROCODILE *O*O* *AB*DE CRABCDE Замечание: данная директива не ведет отслеживания дубли- рования имен файлов в каталоге. При возникновении коллизий нужный файл всегда можно переименовать, используя режим ра- боты с подтверждением. 4.9. Запись фрагмента памяти в файл SAVE путь-файл,адрес,длина параметры: A L P S H Адрес и длина фрагмента (обязательные параметры A и L), а также позиция фрагмента P и стартовый адрес S определяют- ся по правилам 4.2. Имя файла не должно быть шаблоном. Файл всегда перезаписывается, т.е. старое содержимое пе- ред записью уничтожается. Ключ S позволяет при необходимости записать стартовый адрес, отличный от начального адреса фрагмента. Замечание. Если при записи в "спрятанный" файл не ука- зать ключ H, то будет создан другой файл с тем же именем, но не спрятанный! 4.10. Загрузка файлов в память LOAD путь-шаблон ключи: X L W N H Q A параметры: A L P Загрузка фрагментов (или целиком) указанных файлов по стартовым адресам в памяти или по адресу A-параметра, если он указан (один для всех файлов, если их несколько!). Если указан КЛЮЧ A, то файл загружается по указанному адресу целиком; в противном случае при загрузке данных в память контролируется невыход за верхнюю границу пользова- тельской памяти (HIMEM): запись в область адресов, больших чем ее адрес (включительно), игнорируется. 4.11. Текстовый вывод файлов TYPE путь-шаблон ключи: X L W N H Q параметры: A L P Выдача содержимого фрагмента файла(ов) в текстовом виде. Все символы файла выводятся через драйвер текущего уст- ройства вывода с отработкой, если надо, управляющих симво- лов. Специальные символы, например, конец текста, выводятся на общем основании. Прерывание вывода - клавиша РЕД. Фрагмент (файл) загружается в память обычным образом (см.директиву LOAD). 4.12. Байтовый дамп файлов DUMP путь-шаблон ключи: X L W N S H Q параметры: A L P S Выдача содержимого фрагмента файла(ов) в шестнадцатерич- ном байтовом виде. Вывод идет строками по 8 байтов с указанием адреса каж- дой восьмерки. Базовый адрес равен A-параметру (см. 4.2 про умолчания), т.е. адресу загрузки фрагмента в память. Если указаны ключ или параметр S, выводится еще и вторая, параллельная адресация, показывающая расположение данных в файле, как если бы он был загружен с некоторого адреса. Этот адрес совпадает со стартовым адресом файла, если нет S-параметра, но есть S-ключ, и с S-параметром, если он есть (S-ключ в этом случае не важен). В начале вывода к этому адресу прибавляется начальная позиция фрагмента (P-пара- метр). Например, если стартовый адрес файла - 3000, то вызовы: DUMP FILE,A=5555,S=0,P=20,L=10 DUMP/S FILE,A=5555,P=37,L=10 выдадут, соответственно: 0020/5555: XX XX .. 3037/5555: XX XX .. 0028/555D: XX XX .. 303F/555D: XX XX .. что соответствует относительному смещению данных в файле и их "родному" местоположению. 4.13. Текстовый вывод фрагмента памяти : нач_адрес,кон_адрес Выдача в текстовом виде фрагмента памяти между указанны- ми адресами, аналогично директиве ТYPE. Здесь адреса задаются не параметрами в обычном виде, а числовыми выражениями, и могут разделяться запятой, точкой или пробелом. 4.14. Байтовый дамп фрагмента памяти - нач_адрес,кон_адрес ключи: S Выдача в шестнадцатеричном байтовом виде фрагмента памя- ти между указанными адресами, аналогично директиве DUМР. Параметр S вводит вторую, виртуальную, адресацию фраг- мента. Два основных адреса задаются числовыми выражениями, как в директиве ':'. Все параметры могут разделяться запятыми, точками или пробелами. 4.15. Установка текущего каталога CD путь-каталог Действия директивы эквивалентны выполнению команды уста- новки текущего каталога по пути доступа. 4.16. Копирование файлов COPY путь-шаблон_ист,путь-файл/каталог_адр ключи: D F Q X T L W N H параметры: A L P S Копирование файлов и каталогов из целевого каталога-ис- точника (1 путь) в целевой каталог-адресат (2 путь). Режим поиска копируемых файлов задается ключами D,X и N по общим правилам и шаблоном поиска. Режим их чтения зада- ется параметрами или их отсутствием по общим правилам. Режим записи найденных файлов в каталог-адресат опреде- ляется правилами: - файл копируется в файл, каталог - целиком в каталог той же структуры и состава; - если указан ключ T, все файлы копируются в целевой ката- лог-адресат непосредственно, без учета уровня их вло- женности, в каталог-источник (содержимое каталогов ко- пируется в них самих по предыдущему правилу); - ключ X автоматически включает ключ T, т.е. файлы, най- денные на разных уровнях, копируются в целевой каталог; - файлы копируются под своими именами, если адресатом ука- зан каталог; если адресат - файл, первый файл копирует- ся под указанным именем, последующие - под своими; ад- ресат-шаблон недопустим; - контроль существования в каталоге-адресате файлов с име- нами копируемых файлов не ведется (кроме копирования файла на место каталога и наоборот). Копирование группы файлов происходит через пользователь- скую память, порциями, с записью по мере ее заполнения. 4.17. Переключение экрана SCRN [экран] [режим] параметры: A M Переключение экрана и режима вывода. Номер начальной страницы экрана задается параметром A, а код режима - пара- метром M во входной строке. Номер страницы приводится к ближайшему кратному 8 снизу, нулевой номер или отсутствие параметра A не меняют адрес экрана. Код режима соответствует значению системной ячейки режи- ма отображения INVFLG ($32): 7 бит = 0/1 - режим 32/64 символа в строке; 5,3 биты = 00,01,10 - инверсный,мерцающий, нормальный фон для цветного экрана; 2-0 биты - цвет изображения для цветного экрана. Нулевой код или отсутствие параметра M не меняют текущий режим. Если сменился либо код режима, либо адрес экрана, экран очищается; в других случаях (например, при вызове директивы без параметров) просто включается его отображение: так мож- но восстановить показ экрана, если в результате выполнения программы или сбоя изображение сбилось. Текущие адрес начальной страницы экрана и режим сохраня- ются в переменной #D среды диалога: соответственно, в стар- шем и младшем байтах. Допускается записывать туда новые значения непосредственно (в любом списке параметров): при этом экран переустанавливается, однако проверка нулевых значений и приведение экрана не производятся. 4.18. Перезапуск системы и выход из нее BOOT [ номер_разъема ] Директива без параметра осуществляет "холодный старт" ПЭВМ - для перезапуска ОС "Спрайт" или другой системы. Если указан номер разъема, выполняется запуск с устрой- ства, подключенного к данному разъему ПЭВМ (если оно есть и в состоянии выполнить запуск) - фактически переход по ад- ресу CN00. 4.19. Выдача переменных среды диалога ? выражение { , выражение } Выдача значений числовых выражений, заданных списком, в шестнадцатеричном виде. В выражениях могут участвовать пе- ременные среды диалога и константы, соединенные знаками '+' и '-'. 4.20. Условная директива WHEN ИЛИ_условие командная_строка ИЛИ_условие ::= условие { , условие } условие ::= [ ! ] выражение знак выражение знак ::= < | = | > | ? Выполнение командной строки, если истинно хотя бы одно из условий, записанных через запятую. Условие задано над значениями выражений, указанных операндами, в зависимости от знака: = - сравнение на равенство, < - сравнение на меньше, > - сравнение на больше ИЛИ РАВНО, ? - выделение бита первого числа и сравнение его с 1; номер бита (0-F) задан вторым операндом, биты нумеруются от младшего разряда к старшему. Знак '!' в начале условия обозначает операцию логическо- го отрицания. 4.21. Условное исполнение Упр-@ IF ИЛИ_условие Упр-@ ELIF ИЛИ_условие Упр-@ ELSE Упр-@ ENDIF Задание фрагментов командного файла, исполняемых в зави- симости от истинности определенных условий. Синтаксис и се- мантика ИЛИ_условия приведены в 4.20. Эти директивы образуют операторные скобки, аналогичо ус- ловному оператору в языках программирования, с традиционной семантикой ('ELIF' - сокращение от 'ELSE IF': условие про- веряется только при невыполнении условия в предыдущем 'IF' или 'ELIF'; использование 'ELIF' вместо вложенной последо- вательности 'ELSE, IF' позволяет сократить один 'ENDIF'. Допускается вложенность условных конструкций друг в друга. Вместе с тем, несмотря на аналогию, эти директивы неза- висимы и, в принципе, могут встречаться в любом порядке, не приводя к ошибке. Собственная семантика каждой директивы такова: - имеется счетчик вложенности неисполняемых фрагментов S, равный 0 для исполняемого фрагмента и >0 для неисполня- емого; - 'IF': если условие ложно, S:=S+1; - 'ENDIF': если S>0, S:=S-1; - 'ELSE': если S=1, S:=0; если S=0, S:=1; - 'ELIF': дйствия 'ELSE', затем, если S=0, действия 'IF'. Например, последовательность 'ELSE..ENDIF' без предшест- вующего 'IF' может быть использована для безусловного про- пуска фрагмента, а "лишние" 'ENDIF' ничего не делают и не приводят к ошибке. Т.к. командный файл может содержать команды другой при- кладной программы, дающей доступ к директивам Командера (пример - Отладчик), возникает проблема с распознаванием директив условного исполнения Командера в потоке, возможно, инородной управляющей информации. Поэтому в начало строки командного файла, содержащей директиву условного исполне- ния, следует вставлять символ 'Упр-@'. Фактически, именно он служит ограничителем неисполняемого фрагмента для преды- дущей директивы. Начинать с 'Упр-@' другие директивы Коман- дера и других программ не рекомендуется. Директивы условного исполнения имеют смысл только внутри командного файла, ввод их в прямом диалоге приводит к объ- яснимому, но странному эффекту: игнорированию ввода до на- жатия 'Упр-@'. 4.22. Пропуск исполнения фрагмента EXIT [ метка ] метка ::= символ Действие этой директивы аналогично действию директив ус- ловного исполнения: по ней прекращается исполнение директив командного файла до определенного места. Это место опреде- ляется параметром директивы: - если метка не указана - до конца текущего командного файла; - если указана метка '#' - до конца всей цепочки исполняе- мых в данный момент командных файлов и возврата в диа- лог; - если указана любая другая метка - до поступления на ввод пары 'Упр-^'+метка, которая может указываться и в дру- гом командном файле. Данная директива позволяет быстро завершать исполнение файлов, условных структур, выполнять переход внутрь других условных структур (с отслеживанием порядка исполнения),при- чем даже в других файлах - главное, что вперед в последова- тельности ввода командных строк. Эта возможность позволяет задавать обработку различных исключительных ситуаций при исполнении (например, обработку кодов возврата программ). Это достигается образованием в командных файлах фрагментов, недоступных при прямом испол- нении, переход в которые по меткам осуществляется лишь при срабатывании некоторого условия. Пример: APPLICATION ; вызов прикладной программы WHEN !#Q=0 EXIT X ; если код завершения ненулевой, ... ; перейти в аварийный блок, EXIT ; иначе продолжение и выход ^X ; маркер и метка аварийного блока ?#Q ; выдать код возврата WHEN #Q?7 ERRPROC ; спецобработка по флагу в 7 бите 4.23. Задание путей поиска командных и программных файлов PATH путь { , путь } Директива определяет список подкаталогов, в которых Ко- мандер будет искать запускаемый командный или программный файл при его отсутствии в текущем каталоге. Более точно алгоритм поиска таков: 1. Если запускаемый на исполнение файл не найден в целевом каталоге, он ищется поочередно в текущем списке подка- талогов; первый найденный файл запускается; при отсут- ствии файла во всех подкаталогах списка выдается ошибка 'ФАЙЛ НЕ НАЙДЕН'. 2. Поиск файла по списку подкаталогов выполняется только в том случае, когда его имя указано без префикса; иначе поиск ведется только по пути, указанному в командной строке. При загрузке системы устанавливается префикс '\SYSTEM\' для облегчения запуска файлов из каталога SYSTEM, в котором собраны системные программы. 4.24. Установка режима контроля записи VFY ключ: N Включение и выключение (ключ N) режима контроля записи на диск. При включенном контроле после записи каждого блока на диск (или другое устройство, обслуживаемое ДОС) выполня- ется контрольное считывание этого блока. 5. СООБЩЕНИЯ КОМАНДЕРА Приведенные ниже сообщения соответствуют ошибкам, выда- ваемым файловой подсистемой ОС, которые могут возникать как при отработке директив Командера, так и при выполнении про- грамм. 'СТОП ПО АДРЕСУ XXXX' - выполнение машинной команды BRK по указанному адресу в программе или системный сбой. 'ПЕРЕСТАВЛЕН ДИСК' - переставлен носитель данных с контро- лируемой библиотекой; сопровождается запросом на отказ или продолжение, перед ответом на который можно устано- вить требуемый диск. 'ОШИБКА ОБМЕНА' - ошибка физического доступа к устройству; означает невозможность чтения-записи блока данных из-за отсутствия или неисправности устройства или носителя; сопровождается запросом отказа или продолжения работы, однако, при продолжении корректность отработки не гаран- тируется. 'ДИСК ЗАЩИЩЕН' - попытка записи на защищенный носитель дан- ных; сопровождается запросом на отказ или продолжение, перед ответом на который можно снять защиту. 'УСТРОЙСТВО В РАБОТЕ' - попытка переопределения имени уст- ройства, на котором существуют открытые файлы. 'НЕТ МЕСТА НА ДИСКЕ' - нет свободной памяти для записи дан- ных на носителе. 'ОШИБКА ВО VТОС' - ошибка в формате таблицы свободной памя- ти носителя: возможна дезынтеграция данных - следует провести восстановление носителя специальной утилитой. 'МНОГО ОТКРЫТЫХ ФАЙЛОВ' - превышен допустимый предел числа одновременно открытых файлов в системе. 'ФАЙЛ/КАТАЛОГ ЗАЩИЩЕН' - попытка изменения или уничтожения защищенного файла или файла в защищенном каталоге. 'ФАЙЛ ОТКРЫТ:КОНФЛИКТ ПО ДОСТУПУ ' - несоответствие ранга повторного доступа к уже открытому файлу; выдается в следующих случаях: - повторное открытие файла, ранее открытого на запись; - открытие на запись файла, ранее открытого на чтение; - уничтожение, переименование, смена атрибутов открытого файла или каталога из открытой цепочки доступа. 'ФАЙЛ НЕ НАЙДЕН' - попытка доступа к несуществующему файлу. 'МНОГО ФАЙЛОВ' - в каталоге не может быть более 256 файлов. 'ОШИБКА В ИМЕНИ' - в имени создаваемого файла указаны сим- волы умолчания '*' или '?'. 'НЕТ УСТРОЙСТВА' - неверное имя устройства. 'ЧУЖОЙ ДИСК: НЕТ DРВ' - доступ к носителю, не содержащему файловой разметки ОС "Спрайт": поиск файлов невозможен. 'НЕ ОТКРЫТ ФАЙЛ/КАТАЛОГ' - попытка доступа к неоткрытому устройству или каталогу, а также чтения-записи неоткры- того файла. 'НЕВЕРНЫЙ ТИП ФАЙЛА' - попытка выполнения обработки, специ- фической для каталога, над файлом данных или наоборот; например: поиск файлов по файлу, установка файла текущим каталогом и т.д. 'ФК НЕ ПУСТ' - при уничтожения каталога в нем остались неу- ничтоженные файлы. 'ОШИБКА В КОМАНДЕ' - неверный формат входной строки Коман- дера. 'ОТКАЗ,ПОВТОР,ДАЛЬШЕ?' - запрос отказа, повторения или про- должения обработки при ошибке физического уровня (чте- ние-запись блока данных); отказ означает генерацию ошиб- ки 'ОШИБКА ОБМЕНА', повторение - повторную попытку вы- полнить операцию чтения-записи, продолжение - отказ от выполнения операции чтения-записи с продолжением работы (не гарантируются ее корректность и безошибочность, а также целостность информации на носителе при ошибке за- писи). 'МАЛО ПАМЯТИ' - при загрузке программы, не помещающейся в доступной Командеру памяти; это означает, что верхняя граница памяти (HIMEM) опущена слишком низко (например, из-за большого количества инсталлированных резидентных модулей), либо же данную программу надо запускать с при- знаком самонастройки (запятая после имени при запуске).