ДИМИП - диалоговый монитор индивидуального пользования

6.2.1. Введение

Название “ДИМИП” - это аббревиатура слов “диалоговый монитор индивидуального пользования”. Система позволяет пользователю редактировать в интерактивном режиме тексты на внешних носителях МЛ/МД.

Файл - набор строк символов, имеющий имя и занимающий целое число зон на томе, начиная с некоторой фиксированной зоны. Файлы пользователей объединяются в архив (один на несколько пользователей). Число пользователей в одном архиве не должно превышать пятидесяти. возможно наличие нескольких архивов у одного пользователя. Под архив отводится целое число зон на томе, причем в начальной зоне архива помещается каталог, содержащий информацию об идполах, паролях, именах и расположении файлов и т.д. В каталоге записываются относительные положения файлов, т.е. старый архив может быть переписан на другой том.

Кроме того, в системе есть блок управления прохождением задач, который обеспечивает формирование автономных задач, а также формирование, пуск, остановку и завершение ПЗ - задач, подчиненных монитору, и перепись выводного буфера подчиненных задач во временную область монитора.

Макропроцессор системы является универсальным блоком, дающим пользователю широкие возможности по управлению текстом, организации своих диалоговых систем.

Собственно монитор занимает 2 зоны на МЛ/МД. Для работы системе требуется 5 листов ОЗУ. Объем редактируемого файла не больше 64 трактов.

Считается, что в каждой группе пользователей “ДИМИПа” выделяется т.н. администратор “ДИМИПа”, который по заказам отдельных пользователей заводит на их носителях каталоги и предоставляет им собственные программы запуска монитора.

6.2.2. Понятия и обозначения используемые в инструкции.

Понятия файл, архив, каталог были определены во введении. Кроме них будут использоваться термины: директива, сообщение, временная область, текущий файл, библиотека, идпол, пароль, буфер вывода, префикс, макрос.

Директива - некоторый определенный текст набираемый пользователем на терминале. После директивы следует ‘исполнение’. директива служит указанием (командой) монитору.

Сообщение - ответ монитора пользователю.

Временная область - зоны на МД в которых происходит собственно редактирование текста.

Текущий файл - файл, в который переписывается текст из временной области при выполнении директивы ‘К’.

Идпол - идентификатор пользователя (не более 6 символов начинающихся с буквы). В комбинации с паролем служит для проверки монитором допуска данного пользователя к работе и идентификации его файлов (т.н.библиотеки пользователя). Идполы в пределах одного архива не должны повторяться.

Ключ - слово, содержащее до шести символов. По комбинации ‘идпол-ключ’ монитор разрешает работу с данным архивом.

Буфер вывода - файл, хранящийся в операционной системе, строками которого является набор символов, выдаваемый подчиненной задачей либо монитором.

Префикс - символ ‘$’,стоящий перед директивой. Видоизменяет смысл данной директивы.

Макрос - файл или фрагмент файла, имеющий соответствующие указатели начала и конца. Макрос обычно содержит директивы для макропроцессора (МКП).

Терминальные (в грамматическом смысле) символы в отдельных строках выписаны явно, а в тексте заключены в одиночные кавычки. Нетерминальные записываются в угловых скобках. Необязательные части заключаются в квадратные скобки. Конструкция вида [<КОНС>]... означает, что <КОНС> может либо отсутствовать, либо входить 1 и более раз.

Директивы набираются сразу вслед за приглашением (сообщение ‘=’,’*’,’?’). В качестве разделителя частей директив выступает пробел.

Параметрами директив могут быть тексты, десятичные и восьмеричные числа, некоторые отдельные символы. Восьмеричные числа никак не выделяются, в описании они отмечены знаком (8). Знак “|” означает “или”.

6.2.3. Директивы начального входа в монитор

Для установления связи с монитором необходимо:

(1) Набрать на свободном терминале строку:

ДИМИП <ХХХХХХХХХХХХ>

где <ХХХХХХХХХХХХ> - Ваш шифр. В результате инициируется монитор "ДИМИПа".

(2) После того, как поступит сообщение ‘КТ?’, выполнить директиву установки каталога:

КТ <ТОМ> <ЗОНА> <ИДПОЛ>[/<СФАЙЛ>] <КЛЮЧ>[/<ИМЯФ>]
  • <ТОМ> - номер тома, на котором расположен архив.
  • <ЗОНА> - номер зоны (8), в которой находится его каталог
  • <ИДПОЛ> - Ваш идентификатор пользователя,
  • <СФАЙЛ> - стартовый файл.
  • <КЛЮЧ> - ключ (пароль) в этом идполе.
  • <ИМЯФ> - имя файла, куда переводится временная область.

Монитор переходит в общий режим.

Замечание: директиву ‘КТ’ можно также использовать во время сеанса для перехода на другой каталог, не выходя из диалога.

6.2.4. Директивы общего режима

СФ [ <ИМЯФ> [ <КЗОН> [ У | I | К [ З ]]]] -- создать файл
  • <ИМЯФ> - имя файла - идентификатор не более, чем из 6 символов;
  • <КЗОН> - количество зон (8), выделяемое для файла;
  • <КЗОН> - количество зон (8), выделяемое для файла;
  • ‘I’ - файл хранится в коде ISО;
  • ‘К’ - создается файл, содержащий программные модули пользователя в абсолютных адресах (программы в машинных кодах), которые могут быть вызваны из “ДИМИПа” либо из МКП. См 6.2.7.10
  • ‘У’ - файл хранится в собственном представлении “ДИМИПа”
  • ‘З’ - указывает, что файл будет шифрованным.

По директиве ‘СФ’ без параметров на экран выдается информация о файлах пользователя.

При наличии в директиве только имени файла на терминал выдается информация только об этом файле.

СФ <ПАДМ>
<ПАДМ> - пароль администратора (см. директиву 'ПОЛ'). В таком виде директива 'СФ' приводит к выдаче на терминал всех свободных зон архива и всех файлов архива. $СФ <ИМЯФ> Исключить файл <ИМЯФ>. [$]А Режим АЦПУ. Первое использование этой директивы включает режим протокола; при следующем выполнении этой директивы режим протокола отменяется. Выдача накопившегося протокола происходит при выполнении директивы 'ПЕЧ' (при этом режим протокола сохраняется) или директивы '$ВЫЙ'. Если выполнена директива '$А', происходит уничтожение накопившегося к данному моменту протокола, режим протокола сохраняется. [$]ВЫЙ Выйти. Каждый сеанс работы с монитором заканчивается этой директивой. Если выполнена директива '$ВЫЙ', то на АЦПУ выдается протокол сеанса, если ранее был установлен режим протокола. О Отказ от монитора. Выполнение директивы приводит к освобождению терминала и в переходе системы на паузу. Для активизации системы надо на терминале набрать директиву 'ПОД ', где номер канала "ДИМИПа". В ответ на сообщение 'КТО?' надо набрать 'идпол', дополнив его слева пробелами до 6 символов. Если директива выполнена из МКП то присходит освобождение терминала и выполнение следующей макрокоманды. По выполнению всей макропрограммы система уходит на конец задачи. Если из МКП выполнена директива <<$О то после выполнения макропрограммы система уходит на паузу. РЕД[/*] [<ИМЯФ>[/<ИДПОЛ>]] Редактировать файл. РЕД[/*] .<ИМЯ В="" АРФЕ=""> | <ТОМ> <ТФ><ЗОНА> Перепись файла из библиотеки во временную область. После выполнения директивы 'РЕД' без параметров, либо если <ИМЯФ> новый система переходит в режим ввода строк во временную область. * <ТОМ> - номер тома, с которого берется текст * <ЗОНА> - 4-значный (8) номер его начальной зоны * <ТФ> - тип файла. Для МС Дубна <ТФ>=* * <ИМЯ В="" АРФЕ="">- имя в архивной системе 'АРФА' `РЕД/* ....` -- для чтения 80 байтного формата в МС Дубна. Смена имени текущего файла происходит только по директиве 'РЕД'. По директиве `РЕД`, выполненной для старого файла, а также по директиве `РЕД/*` монитор окажется в режиме редактора. В случае некоторых ошибок (например, кодировка текста на томе не совпадает с заданной в директиве РЕД/* или типом файла в директиве РЕД) монитор выдает диагностику и переходит в общий режим. Файлы типа 'К' не могут быть прочитаны по директиве 'РЕД'. ## 6.2.5. Директивы редактора В режиме редактирования (приглашение '*') допускаются как директивы редактора, описанные ниже, так и директивы 1-7 общего режима. Все директивы редактора (кроме директивы 'К') выполняются применительно к файлу, находящемуся во временной области. [$]К[/*] [<ИМЯФ>] Конец редактирования. К[/*] .<ИМЯ В="" АРФЕ=""> | <ТОМ><ТФ><ЗОНА>[<АДМ>] Перепись в текущий файл, или в файл <ИМЯФ> текста из временной области, т.е. запись в библиотеку. При наличии префикса монитор формирует из временной области файл, содержащий набор макросов (библиотеку макросов). См.6.2.7.9. * <ТФ> - тип файла. Для МС Дубна <ТФ>=* * <ПАДМ> - пароль администратора (см дир. 'ПОЛ') * <ИМЯ В="" АРФЕ=""> - имя в архивной системе 'АРФА' К/* ... Запись в 80 байтном формате МС Дубна. [$]Л[ <N1> [<N2> [<ОБРАЗ>]]] Листинг. Вывод на терминал строк из временной области. Если параметров нет, выдается текст с начала. Если параметр один, то выдается строка с номером <N1>. Если имеются 2 параметра, то выдаются строки в диапазоне номеров <N1>-<N2>. Если имеются 3 параметра, то выдаются строки из диапазона <N1>-<N2>, Содержащие образ <ОБРАЗ>. При наличии префикса номера строк на экан не выдаются. Если в образе имеется вопросительный знак, то это значит, что в этом месте может находиться любой символ. П [<N>] Перенумерация строк с шагом <N>. Если отсутствует, то шаг полагается равным 10. В <N> Ввод строк после строки с номером <N>. Монитор переходит в режим ввода, приглашением в котором является номер вводимой строки. Шаг нумерации в этом режиме =1. Если строки с номером <N> нет, то номер <N> получает первая вводимая строка. Для выхода из режима ввода нажать клавишу 'ЕТХ' в ответ на очередное приглашение. При вводе символа 'linе fееd' система заменяет его символом '$'. В результате ввода во временной области может оказаться несколько строк с одинаковыми номерами (например после *ехесu), а нумерация может стать не монотонной. При этом директивы 'Л' и т.п. берут из строк с одинаковыми номерами ту, которая ближе к началу. Чтобы исключить возможность несоответствия действий редактора тому, что вы ожидаете, рекомендуется в неясных ситуациях перенумеровывать файл. И <N1>[ <N2>] Исключить строки в диапазоне номеров. С <ИМЯФ>[/<ИДПОЛ>] <N1> <N2> <N3> Cлить строки. По этой директиве строки с номерами в диапазоне <N1>-<N2> из файла <ИМЯФ> библиотеки пользователя помещаются после строки с номером <N3> файла, расположенного во временной области, а затем перенумеровываются все строки временной области с шагом 10. З <N1> [<N2> [<R><ОБР><R><ЗАМ><R>]] Заменить строки. * <R> - символ разделителя По этой директиве происходит исключение строк в указанном диапазоне и переход в режим ввода новых строк на их место. Если имеются параметры <ОБР> и <ЗАМ>, то в диапазоне <N1>-<N2> происходит замена всех вхождений <ОБР> на <ЗАМ>. Неявные директивы: <N> [<ТЕКСТ>] Исключение или ввод или замена строк. Ввод строки с номером , ее содержимое - <ТЕКСТ>. Если в файле были строки с номером , то одна из них (ближайшая к началу файла) заменяется на <ТЕКСТ>. Если <ТЕКСТ> отсутствует то происходит исключение строки. Н <ОБР> Найти образец. Поиск строк с образом <ОБР> во всем файле. [$]ПЕЧ[/Б] <ЕТХ> | [<N1> <N2> | <ИМЯФ>[/<ИДПОЛ>] Печать. [$]ПЕЧ[/Б] .<ИМЯ В="" АРФЕ=""> | <ТОМ> <ТФ><ЗОНА> Печать либо строк из диапазона <N1>-<N2>, находящихся во временной области, либо файла <ИМЯФ>. Если имеется параметр 'Б', печать производится в одну колонку, выполнение директивы без параметров приводит к печати всего файла в две колонки. Если в директиве присутствует '$', то номера строк на АЦПУ не выдаются. При печати без номеров строк, строка '..' воспринимается как переход на новую страницу. Сторока '..<КС>' воспринимается как пропуск 'КС' строк. Пример: ..08 - пропуск 8 строк. Печать происходит без накопления. ## 6.2.6. Формирование задач и управление их прохождением Ф <ЕТХ> | <N1><N2> | <ИМЯФ>[/<ИДПОЛ>] Формирование задачи. Ф .<ИМЯ В="" АРФЕ=""> <ЗОНА> Если в директиве есть <ИМЯФ>[/<ИДПОЛ>], то происходит формирование задачи из указанного файла и библиотеки. Если параметров нет, то происходит формирование задачи из временной области (автономной или подчиненной - ПЗ). При формировании задачи из библиотеки временная область остается неизменной. После фомирования в VАR 01 переписывается номер задачи в буфере ввода. **Замечание**: при формировании подчиненной задачи в паспорте задачи должен присутствовать раздел 'ГЛА <ШИФР>^', где <ШИФР> - шифр "ДИМИПа". После вхождения подчиненной задачи в решение управление передается в макрос 'ФЗПЗ', при этом в VАR 01 помещается номер канала по которому решается подчиненная задача. ПЗ реально начнет считаться только после выполнения директивы 4 данного раздела. После окончания подчиненной задачи система передает управление в макрос 'КЗПЗ', При этом в VАR 01 помещается номер канала по которому решается подчиненная задача, а в VАR 02 текст причины окончания подчиненной задачи либо восьмеричный код программного сообщения от подчиненной задачи. Задача находится в канале до тех пор пока не выполнится директива 3 либо 2 данного раздела. [$]Б[ <NК>[ <НПОЗ> <КПОЗ>] Буфер. Перепись во временную область буфера вывода подчиненной задачи. Если параметров нет или <NК>=0, то выполняется перепись буфера вывода монитора, т.е.протокола; при этом директива должна быть с '$', если есть параметр из диапазона 1...60, то выполняется перепись буфера вывода подчиненной задачи, решающейся по каналу <NК>. Буфер вывода подчиненной задачи может быть переписан только после остановки этой задачи (при нормальном или ошибочном завершении, а также по директиве '$ПП'). при наличии всех параметров происходит перепись только тех позиций из строк буфера вывода, которые указаны в интервале <НПОЗ>, <КПОЗ>. <НПОЗ>, <КПОЗ> - десятичные цифры в интервале 1-128. В противном случае, происходит перепись буфера вывода со сжатием пробелов. Без префикса система после переписи буфера завершает подчиненную задачу без выдачи результатов на АЦПУ - (режим 'ИНКО'). [$]ЗП <NК>[ И] Заверши, освободи подчиненную задачу. Флаг 'И' устанавливает режим 'ИНКО' для подчиненной задачи, с префиксом - "освободи" подчиненную задачу. [$]ПП <NК>[ ПС] Пусти, останови подчиненную задачу. При выполнение директивы с флагом 'ПС' происходит передача терминала подчиненной задаче. ## 6.2.7. Диалоговый макропроцессор (МКП) Для гибкого управления текстом при преобразовании его реализован макропроцессор. МКП подключается при вызове файла с экрана по имени. МКП читает текст из указанного файла и строки принадлежащие МКП обрабатывает, а все остальные в зависимости от <IЕQ и <IGЕ переписывает во временную область "ДИМИПа". при желании закрыть временную область необходимо выполнить <СLО. МКП является интерпретатором входного потока данных (файла или макроса). Строки, начинающиеся с '<' служат директивами для МКП. Каждая строка опознается МКП. Если это директива, она проходит проверку на корректность и затем выполняется, после чего МКП переходит к следующей строке текста. ### Структура языка МКП Все директивы МКП имеют одинаковый синтаксис: <ХХХ[=АRG]... Каждая директива мкп начинается с '<'. Далее следует идентификатор директивы содержащий три символа и затем ее аргументы. ### Макропеременные (МП) в МКП Макропеременная занимает 4 машинных слова. Имя МП всегда начинается с буквы, а заканчивается двумя десятичными цифрами. МП различаются для МКП только своими номерами (последними символами имени), т.е. программист может использовать не более 100 макропеременных (МП). МП содержит текст, который может иметь не более 24 знаков причем текст всегда заканчивается концевым байтом '377'. Код представления литер в МП - УПП. Нулевая МП (VАR 00) используется МКП для признаков. Вот ее побайтное содержание: * 1 - символ команды МКП (по умолчанию <). * 2 - присвоение байту 'А' включает протокол на ацпу. * 3 - уровень макровызова. * 4 - число параметров в вызове, либо код ответа. * 5 - шкала разрешенных событий. * 8р=1 разрешение события по 21раз. * 6р=1 разрешение события образования подчиненной задачи. * 5р=1 разрешение события окончания подчиненной задачи. * 1р=1 разрешение события будильника. * 6 - символ МП (по умолчанию %). МП с 01 по 09 используются при макровызове для передачи через них фактических параметров. Остальные МП используются без каких либо ограничений. Символ МП '%' используется для указания содержимого МП. Если за символом мп следует три восьмеричные константы, то они будут интерпретироваться как неявный ввод кода символа. В МКП может использоваться конструкция косвенной адресации при формировании номера МП. Символ МП обрабатывается МКП не только в строках директив для МКП. Пример: II=А%024J+%%МП21 Следует отметить, что символы директив МКП '<' и МП '%' могут быть изменены путем занесения других символов в 1-ый и 6-ой байт VАR 00 (при входе в МКП устанавливается '<' и '%' ). Многие директивы имеют код ответа (КОТ) он заносится системой в 4 байт нулевой переменной. ### 6.2.7.1. Директива 'LЕТ' Формат: <LЕТ=VАR=ТЕХТ <LЕТ=VАR/INDЕХ=ТЕХТ <LЕТ=VАR/INDЕХ=VАR/INDЕХ <LЕТ=VАR=VАR/INDЕХ=Б Директива <LЕТ присваивает значение 'ТЕХТ' переменной 'VАR' или ее байту с номером 'INDЕХ'. Директива <LЕТ с тремя параметрами переводит в десятичный вид байт из второй макропеременной и присваивает первой макропеременной. Пример: <LЕТ=23=МАКРОГЕНЕРАТОР <LЕТ=ПЕР23/4=Р <LЕТ=ПЕРЕМ23/4=ПЕРЕМ23/10 ### 6.2.7.2 Директива <GЕТ Формат: <GЕТ[/ИМЯФ]=VАR[/ТЕКСТ*]=ТЕХТ Ввод с терминала с приглашением 'ТЕХТ'. Введенный текст заносится в переменную 'VАR'. При вводе цепочки литер 'ТЕКСТ' с терминала происходит выполнение макроса 'ИМЯФ' и возврат на выполняемый 'GЕТ'. Следует помнить, что цепочка литер 'ТЕКСТ' не должна превышать пяти байтов. Если в конце цепочки 'ТЕКСТ' есть символ '*' то вводимый с терминала текст на экране высвечиваться не будет. КОТ: * 0 - обмен завершился номально * 1 - сработал будильник (5 минут) Пример: <GЕТ=ШИФР20=ВВЕДИ ШИФР- ### 6.2.7.3 Директивы <RЕР, <UNТ Формат: <RЕР[=VАR=ТЕХТ] ... <UNТ=VАR=ТЕХТ[=ШАГ] Строки, заключенные между <RЕР и <UNТ будут повторены, пока значение переменной VАR не станет равным ТЕХТ. Закон изменения VАR должен быть задан внутри тела цикла. если <RЕР=VАR=ТЕХТ,то это эквывалентно двум директивам: <LЕТ=VАR=ТЕХТ <RЕР Если в 'UNТ' указан шаг, то к содержимому vаr прибавится шаг и запишется в VАR и если результат больше или равен конечному значению, то выполнится следующая директива после 'UNТ', иначе будет повторено тело цикла. ### 6.2.7.4 Директива <МЕS Формат: <МЕS [ /Р | /РТ | /К ] = ТЕХТ Выдача сообщения 'ТЕХТ' на терминал. Присутствие 'Р' приводит к печати 'ТЕХТ'. Наличие 'К' является признаком для вывода в коде устройства. КОТ: * 0 - обмен завершен * 1 - обмен прерван пользователем Пример: <МЕS=КУ-КУ!! ### 6.2.7.5 Директивы <IЕQ, <IGЕ, <ЕLS, <ЕND Формат: <IЕQ=VАR=ШАБЛОН ... <ЕLS <ЕND <IGЕ=VАR=ЦИФРЫ ... <ЕLS ... <ЕND IЕQ - если равно. IGЕ - если больше либо равно. При выполнении условия обрабатываются следующие за <IЕQ/<IGЕ строки, а строки между <ЕLS и <ЕND игнорируются. при нарушении условия игнорируются строки между <IЕQ/<IGЕ и <ЕLS, а обрабатываются следующие за <ЕLS строки. вложенность директив <IЕQ/<IGЕ не должна быть больше 47. операнды директив <IGЕ должны содержать коды десятичных цифр. Шаблон состоит из последовательности спецификаций. спецификация состоит из цифры которая определяет кратность одной из следующих символов: * ? - любой символ * * - любая последовательность символов * 'текст' - тестируемая последовательность * 'ТЕС0=текст' - замена цепочки 'тес0' на 'текст' * ц - целое число * в - восьмеричное число * [мн-во] - множество символов * VАR(...) - вырезка цепочки в vаr * | - или * ^ - отрицание Пример: <IGЕ=33=11 ... <IЕQ=45=2Ц'.'2Ц'*'ПРИМЕР'10(3[АВСDЕF]) ... <ЕLS ... <ЕND ... <ЕND Если в vаr 45 два первых символа есть цифры, а третий точка и после нее опять две цифры, а далее ищется контекст 'пример' после которого три байта должны принадлежать мн-ву [авсdеf]. то выполняются директивы после <IЕQ иначе после <ЕLS. ### 6.2.7.6 Директивы <АDD, <SUВ, <МUL, <DIV Эти директивы выполняют элементарные арифметические операции над целыми числами. Формат: 'DIR'=VАR=ТЕХТ где 'DIR': * <АDD - сложение : vаr=vаr+техт * <SUВ - вычитание : vаr=vаr-техт * <МUL - умножение : vаr=vаr*техт * <DIV - деление : vаr=vаr/техт где ТЕХТ - текст кодов десятичных цифр. Порядок чисел не должен превышать 5. Пример: <АDD=И21=57980 ### 6.2.7.7 Директива комментария В качестве комментария используется символ директивы МКП, а далее три пробела. Пример: < пример работы МКП ### 6.2.7.8 Директива <SIZ Формат: <SIZ=VАR=VАR Подсчет байтов в первой vаr и запись результата во вторую vаr. Пример: <SIZ=8=20 ### 6.2.7.9 Директива <RАN Формат: <RАN=VАR Генератор равномерно распределенных чисел в интервале [0:31]. Результат записывается в vаr. ### 6.2.7.10 Директива <UNР Формат: <UNР/Б=VАR=S где: s - символ-разделитель. Распаковка vаr по разделителю 's'. При этом в vаr заносится первый операнд, в vаr+1 второй и т.д. В vаr 00(4) помещается число - количество операндов. Пример: <LЕТ=10=1.34.567 <UNР=МП10=. ........... ### 6.2.7.11 Директива <SWI формат: <swi=vаr=т1=т2=...=тк где: тi - текст не более 6-ти символов, количество операндов 'к' не более 24. директива <SWI позволяет по значению vаr передовать управление мкп. в случае если значение vаr равно 'ТI',то выполнится i-ый оператор ,относительно переключителя <SWI и далее управление передается на к+2 оператор. в том случае если значение vаr не равно ни одному операнду 'тi', то управление передается на к+1 оператор после <SWI. пример: <SWI=МП10=ИДИ=ВЫПОЛ=ВЗЯТЬ <ИДИ <ВЫПОЛ <ВЗЯТЬ <ОШИБ ... ### 6.2.7.12 Директива <ОРЕ формат: <оре=nfil[=nк[/<пароль>][=w|wс/vаr]] открытие файла 'nfil' по каналу 'nк' на чтение, на запись 'w' или дозапись 'wс'.конструкция <ОРЕ=NFIL осуществляет запись в vаr 01 начальной зоны указанного файла, в vаr 02 - длину файла, в vаr 03 тип файла. конструкция <ОРЕ присваевает vаr 01 длину временной области "ДИМИПа".если файл шифрован то необходимо установить пароль <пароль>.при открытие файла на дозапись можно указать vаr в которую запишется количество строк в открываемом на запись файле.количество каналов, с которыми позволяет работать мкп в данной версии три это : 1,2,3 конструкция <оре/имяб -- устанавливает имя общей библиотеки 'имяб', это дает возможность менять контекст поиска файлов. КОТ: * 0 - файл открыт * 1 - нет файла * 2 - открытие на чтение пустого файла ### 6.2.7.13 Директива <NАМ формат: <nам=nк=nf1=nf2...nfк именование полей бд в каналу 'nк'.при этом имя первого поля будет 'f1',второго 'f2' и т.д. КОТ: * 0 - хорошо * 1 - канал не открыт ### 6.2.7.14 Директива <RЕА формат: <rеа=vаr[/vаr]=nк[=nfiеld|nrес] чтение рекорда в vаr макетом либо чтение именнованного поля текущего рекорда.присутствие второго имени vаr приводит к переписи номера строки в эту переменную. КОТ: * 0 - строка или поле переписаны * 2 - нет такого имени поля * 3 - канал не открыт * 4 - канал не открыт на чтение ### 6.2.7.15 Директива <FОR формат: <fоr=nк=nrес продвинуться вперед на 'nr' рекордов по каналу 'nк' КОТ: * 0 - указатель продвинут * 1 - следующая строка 'еоf' * 3 - канал не открыт * 4 - канал не открыт на чтение ### 6.2.7.16 Директива <FIN формат: <fin=nк=vаluе=nfiеld[=м] поиск указанного значения 'vаluе' в заданном поле 'nfild' по каналу 'nк' либо поиск части поля 'м'. КОТ: * 0 - значение найдено * 1 - значение не найдено,канал закрыт * 2 - нет такого имени поля * 3 - канал не открыт * 4 - канал открыт на запись ### 6.2.7.17 Директива <WRI формат: <wri=vаr[/vаr]=nк[=с] запись содержимого vаr в текущий рекорд по каналу 'nк'. при наличии второго имени vаr из его происходит формиро- вания номера строки. если присутствует третий параметр 'с', то из содержимого vаr формируется структурный рекорд. КОТ: * 0 - строка записана * 5 - файл записи больше заказанной длины ### 6.2.7.18 Директива <СLО формат: <сlо=nк запись конца файла по указанному каналу 'nк'.при этом канал закрывается. КОТ: * 0 - канал закрыт * 3 - канал не открыт ### 6.2.7.19 Директива <SТ формат: <sт=vаr=к упрятывание в стек переменных с vаr по vаr+к.восстановление их происходит по возврату из макроса (<меn | <мех). ### 6.2.7.20 Директива <SIТ формат: <siт=dir=масr=ns|в при возникновении ситуации(кот0) ns либо всех ситуаций в директиве 'dir' управление передается в макрос 'масr'.'dir' может быть любой директивой имеющей кот. ### 6.2.7.21 Директива <МЕХ формат: <мех[=sтор] прекратить макрорасширение либо прекатить работу мкп и передать управление в "ДИМИП". ### 6.2.7.22 Директива <INF формат: <inf[/время] директива присваевает vаr 01 текущее время.vаr 02 шифр монитора "ДИМИПа". vаr 03 текущую дату. либо взводит будильник на указанное время (13 единиц времени соответствует 1 секунде). ### 6.2.7.23 Директивы <МСR, <МЕN монитор "ДИМИП" позволяет создавать библиотеки макросов, т.е. хранить выполняемые файлы в сжатом виде с целью экономии места в архиве. для реализации этих возможностей служат директивы <мсr,<меn. формат: <мсr=хххххх ... <меn <мсr=хххххх ... <меn библиотека макросов формируется следующим образом: * во временной области создается файл, содержащий набор текстов макросов; * начало каждого макроса помечается строкой <мсr=<имям>, где <имям> - имя макроса; * конец каждого макроса помечается строкой <меn; * выполняется директива '$к', по которой в библиотеке пользователя формируется файл необходимой длины и в него записывается текст из временной области. Имя созданного файла есть имя первого (головного) макроса в файле, тип файла - 'У'. в каталог заносятся имена макросов, их можно просмотреть директивой 'СФ' (они имеют тип 'М'). при обновлении библиотеки макросов, из каталога необходимо предварительно исключить файлы макросов, вместе с головным, а затем снова создать библиотеку. Для вызова макроса используется директива <ИМЯМ, где ИМЯМ - имя макроса, который находится в библиотеке макросов или в отдельном файле (в последнем случае 'ИМЯМ' есть <ИМЯФ> и макрос не имет <МСR и <МЕN). Если при вызове макроса его имя не превышает трех символов, то система планировки попытается посадить тело данного макроса в буферную ассоциативную область. В системе планировки реализован алгоритм старения (часто используемые макросы оседают в ассоциативной области). При необходимости передать данные в вызываемый макрос используется директива: <ИМЯМ=[<ПАР>]... В этом случае в МП01 вызываемого макроса передается текст <ПАР1>, в МП02 - текст <ПАР2> и т.д. возврат в вызывающий макрос происходит по выходу на конец работающего макроса. ### 6.2.7.24 Ассинхронные процессы в макроязыке (МЯ) В МКП сделана попытка вынести на уровень мя аппарат событий ОС. Для этого пятый байт нулевой VАR задействован как шкала разрешенных событий. Каждому из этих событий в системе "зашиты" соответствующие имена макросов, которые обязательно должны присутствовать в файловой системе. * 8 разряд соответсвует файлу 'сакп' * 6 разряд соответсвует файлу 'фзпз' * 5 разряд соответсвует файлу 'кзпз' * 1 разряд соответсвует файлу 'буди' Реально передача управления в соответствующий макрос произойдет при выполнении следующих условий: * в шкале событий разрешено данное событие * система находится в режиме ввода с терминала (<gет) если условия выполнены и реально произошло событие управление будет передано в соответствующий макрос с последующим возвратом на оператор следующий за оператором ввода (<gет). по умолчанию в режиме монитора ДИМИПа и макроязыка установлены маски трех событий это: САКП, ФЗПЗ, КЗПЗ. ### 6.2.7.25 Нестандартные макросы В рамках "ДИМИПа" возможно использование модулей в машинных кодах. Для этого создаются файлы типа 'К'. Каждый программный модуль должен быть предварительно оттранслирован и загружен в 3-ий лист. Выход из модуля производится по содежимому М7, и должен быть предварительно установлен режим АУ 3 (,NТR,3). После загрузки модуль должен быть переписан 70-м эккстракодом из 3-го листа ОЗУ в зону подготовленного файла. При вызове модуля директивой <ИМЯФ он загружается в 3-ий лист и на него передается управление. Адрес базы МП содержит М11, т.е. адрес МП00 = <М11> - <М11>+3 адрес МП01 = <М11>+4 - <М11>+7 и т.д. Cодержимое с М1 по М11 должно быть при выходе из програмного модуля восстановлено. ### 6.2.7.26 Вызов ДИМИПа из МКП Признаком директив "ДИМИПа" в МКП являются два подряд идущих символа команды МКП. Если директива ДИМИПа выдает сообщение, то оно помещается в первую переменную. Пример: <<РЕД ПРИМЕР <<Л 10 20 ### 6.2.8. некоторые полезные директивы ИНФ Информация; позволяет узнать количество занятых зон во временной области и количество строк в ней. ЗАМ <ИМЯФ> <ИМЯН> Замена старого имени файла на новое имя в вашей библиотеке. ^C Позволяет узнать дату, время, имя текущего файла и библиотеки (ИДПОЛ), наличие протокола, квант строк заполнения экрана. ### 6.2.9. Директивы администратора $КТ <ТОМ> <НЗОНА> <ДАРХ> Cоздать каталог. По этой директиве создается каталог на томе с номером <ТОМ> в зоне <НЗОНА>. <ДАРХ> - длина архива (количество зон) которое отводится под архив. Впоследствии параметры <ТОМ>, <НЗОНА> указываются в директиве 'КТ'. [$]ПОЛ[ <ИДПОЛ> <КЛЮЧ>[<ПАДМ>]] Пользователь. После того, как создан каталог, нужно ввести пользователей системы этой директивой. Директива 'ПОЛ' без параметров выдает список всех пользователей системы и их пароли. Директива 'ПОЛ' с префиксом исключает указанный идпол и всю его библиотеку. <ПАДМ> - пароль администратора. При создании каталога нового архива директива 'ПОЛ' хотя бы один раз должна быть выполнена с полным набором параметров (без префикса). В случае отсутствия в директиве параметров <КЛЮЧ> и/или <ПАДМ> их значения сохраняются прежними. Повторное использование директивы 'ПОЛ' с прежним <ИДПОЛ> позволяет заменить значение пароля. ### 6.2.10. 'Пускач' ДИМИПа ШИФР ХХХХХХ^ТЕЛ^ОЗУ 7^СПЕ^ ВРЕМ 140^ПОВ^РОС 0^АЦП 10^ ЛЕН 40(1С)67(ББББ)^ ТРА ТТ^ ВХО 6001^Е В 6000 С 0010 0100 0067 ЗЗЗЗ К 00 070 6000 К 00 062 0043 <-- след в буфере ввода. К 00 30 02000 В 6074 С 0 <-- пароль по зп/сч С 0010 0300 0040 ЗЗЗЗ <-- информационное слово для формирователя С 0000 0300 0040 ЗЗЗЗ В 6103 БОБЩБИБ <-- общбиб - имя общей библиотеки ЕКОНЕЦ * ХХХХХХ - шифр задачи-монитора "ДИМИПа". * ББББ - номер тома "ДИМИПа". * ЗЗЗЗ - номер начальной зоны монитора. * ТТ - количество трактов временной области. При наличии "следа" после выхода из монитора пускач остается в буфере ввода и им можно пользоваться для входа в "ДИМИП" многократно. При желании сразу настроится на каталог, библиотеку и передать управление в заданный файл необходимо после строки "бобщбиб" вставить в пускач: С 0 С 0 БКТ ТТТ БТ ЗЗЗЗ Б БИБЛ/ БПУСК Б КЛЮЧ С 7760 0000 0000 0000 * ТТТТ - том каталога * ЗЗЗЗ - зона каталога * БИБЛ - имя библиотеки * ПУСК - имя файла на который необходимо передать управление * КЛЮЧ - пароль на библиотеку ### 6.2.11. Пример сеанса работы с ДИМИПом Пусть имеется архив "ДИМИПа" на МД 4000, каталог которого находится в 320 зоне. Пользователь имеет ИДПОЛ 'школа' с паролем 'куку'. На МЛ 199 с зоны 10 находится текст длиной 6 зон, записанный туда средствами редактора МС Дубна. Пользователь хочет переписать его к себе в библиотеку, внести в него некоторые исправления, запустить задачу трансляции исправленного текста, посмотреть на терминале, нет ли в программе синтаксических ошибок, и в случае отсутствия таковых запустить задачу трансляции и счета, а также распечатать текст своего пакета на АЦПУ. Пусть 'пускач' "ДИМИПа" для данного пользователя имеет шифр 111122223333. Ниже приводится протокол возможного сеанса для выполнения указанных действий. Сообщения "ДИМИПа" напечатаны с первой позиции листинга, приглашения "ДИМИПа" и директивы пользователя сдвинуты вправо. шифр 111122223333 кт 4000 320 школа куку =сф мойтек 7 у *ред 199 *0010 *п *инф файл : 6 зон 1398 строк *л 10 99999 завихрим 00380 ,саll,завихрим 00970 завихрим:,nаме,.3-й вариант 01200 ,еnd,завихрим 01870 завихрим:,nаме,.2-й вариант 02120 ,еnd,завихрим *з 380 1200 -завихрим-вихрь/3- *6 шифр 117522223000 зс2^гла 011333^ *в 7 00008 еев1а3 00009 *nаме школа.мойтек 00010 *nо li 00011 *аssем 00012 *в 13990 13990 * ехесu 13991 *еnd filе 13992 *л 9 20 00009 *nаме школа.мойтек 00010 *nо li 00011 *аssем 00010 вари3:,nаме, 00020 с вариант 3-ий задания *н вихр 00380 ,саll,вихрь/3 00970 вихрь/3:,nаме,.3-ий вариант 01200 ,еnd,вихрь/3 *п *инф файл : 6 зон 1408 строк *к мойтек *ф *о под 47 кто?школа библ: школа файл мойтек фз 45 *сф раскеd 321 3 у школа гидро 330 10 i школа мойтек 340 7 у школа турбул 325 3 i.школа проект 347 3 у школа кз 15 конец задачи *$б 45 *н ошиб 00029 число перф. 0080 число ошиб. операторов 0000 *зп 45 и *ред мойтек *20 *н ехесu 14070 * ехесu *14070 *ехесu *к *ф *печ *вый конец сеанса ### 6.2.12. Сообщения монитора * `обмен` -- попытка завершить подчиненную задачу, которая в обмене с мл/мд. * `ошиб числа` -- ошибка в задании константы. * `чужой ключ` -- неверно задан пароль в дир. 'кт', либо 'к'. * `стек!` -- переполнен стек,большая глубина вложенности. * `ф пуст` -- формирование, макровставка с пустым файлом. * `н тома` -- нет тома в ресурсах ос либо занят другой задачей. * `большой файл` -- запись в файл,превышающая его длину. * `неврн конст` -- неверный синтаксис. * `н текста` -- нет заданного контекста. * `нет п` -- попытка остановить, завершить подчиненную задачу, которой нет. * `н места` -- нет места в архиве под файл. * `закр.` -- директива закрыта, ее можно отктыть см.а3. * `библ: <имяб> нет` * `строки нет` * `длин.строка` -- строка превышает 72(80) байтов. * `файла <имяф> нет` * `н rер` -- использование <unт без <rер.