Несмотря на некоторые трудности, возникшие у меня в последнее время, я решил больше не откладывать написание этой статьи (благо смена 31-го декабря позволяет спокойно выполнить задуманное). |
Для начала, наверное, следует сказать, что MPTMON имеет средства для хранения, извлечения и выполнения команд, находящихся в файлах. Сами файлы могут располагаться как на жестких дисках, так и на ленте и магнитооптических дисках. С помощью всего этого можно организовать автоматическое выполнение команд, сохранять, а затем восстанавливать тестовое окружение (идентификаторы и макросы) и проч. Далее дано описание команд использующихся для этих целей, я не буду рассматривать команду INC VAX, т.к. я не представляю себе как ее практически можно использовать на типичной станции.
Команда позволяет сохранить в файл все идентификаторы (symbols) и макросы, которые на момент выполнения команды находятся в памяти. При записи, в начале записываются все идентификаторы в виде DEF .имя_идентиф = значение, впрочем, тут же выполняется и другое форматирование (например, если значение идентификатора является указателем). Делается это для последующего извлечения этих идентификаторов из файла. После идентификаторов записываются макросы. При удачном открытии файла выводится символ '[', каждый удачно записанный блок отмечается выводом символа '&', а при удачном закрытии файла выводится символ ']'.
Для записи предусмотрены т.н. Save/Retrieve файлы с идентификаторами с 950 по 959. Длина записи этих файлов равна одному байту, а размер 32767 записей, и того 32767 байт. Если при задании команды был опущен второй параметр, то по умолчанию будет использован файл 950. В MPTMON USER MANUAL не рекомендуется использовать двойное устройство (т.е. желательно использовать не 1032, а 1 и 2), мотивируется это снижением скорости выполнения команды при той же надежности.
Ради эксперимента, я попытался осуществить запись в файлы с идентификаторами отличными от 950-959 (я понимаю, что практического смысла это не имеет, всегда можно "раскидать" файлы по разным устройствам). Как видно ниже в логе, мне удалось осуществить задуманное только с файлами 960 и 971, у которых в FDB совпадали параметры авторизации и размер записи, а запись в библиотечный файл (969Т) не удалась по причине выполняющейся проверки на то, что идентификатор файла находится в пределах от 0 до 5000 и не входит в диапазон с 961 по 969 включительно (мне не понятно, почему из этого диапазона выпал 960-й файл, вероятно, это ошибка, но чья?).
>SAV 4021T,4999T *** ERROR: IOS OPEN ERROR ERROR CODE 030D - HARD_ERROR: UNAUTHORISED ACCESS >SAV 4021T,899T *** ERROR: INVALID RECORD SIZE >SAV 4021T,970T *** ERROR: IOS OPEN ERROR ERROR CODE 030B - HARD_ERROR: FILE NOT DEFINED >SAV 4021T,971T [&&&&&&&&&&&&&&&&&&&&&] >SAV 4021T,969T *** ERROR: INVALID FILE ID >SAV 4021T,960T [&&&&&&&&&&&&&&&&&&&&&] >MM OPTS-3 PECHORA 2001-12-31 11:58:28 MO 001 0130/0006/0001 <DISPLAY-FDB:LFILID=950. SEQ=7662.011231 9002 COM=0395 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-31 11:58:48 MO 001 0130/0006/0001 SEQ=7662.011231 00336 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY FDB SUCCESSFUL ----------------------------------------------------------------------- LFILID = 950 LFILNAME = A950AA01 RECORLEN = 1 FILELEN = 32767 AUTHREAD = AR AUTHWRIT = JR AUTHMDFY = SR TRSLFRMT = NOTRANS ACCATTR = SEQMDFY RCVATTR = OFF FILETYPE = SYS DATATYPE = ASCII TIMRST = TOTOPEN TIMCLASS = MEDIUM ----------------------------------------------------------------------- PFILNAME = MPTM*M*S*S0--SYST DEVLIST = B'11111000 DISK: ALOCSIZE = 0 CAT = DYNAMIC LR TAPE: BLOCKLEN = 0 GENNBR = 1 ACCESS = VDU: INPTDELM = > LAST REPORT NO = 00336 >MM OPTS-3 PECHORA 2001-12-31 11:59:09 MO 001 0130/0006/0001 <DISPLAY-FDB:LFILID=971. SEQ=7663.011231 9002 COM=0395 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-31 11:59:17 MO 001 0130/0006/0001 SEQ=7663.011231 00336 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY FDB SUCCESSFUL ----------------------------------------------------------------------- LFILID = 971 LFILNAME = A971AA01 RECORLEN = 1 FILELEN = 32767 AUTHREAD = AR AUTHWRIT = JR AUTHMDFY = SR TRSLFRMT = NOTRANS ACCATTR = SEQWRITE RCVATTR = OFF FILETYPE = SYS DATATYPE = ASCII TIMRST = TOTOPEN TIMCLASS = LONG ----------------------------------------------------------------------- PFILNAME = MPTM*LISTF---SYST DEVLIST = B'11011000 DISK: ALOCSIZE = 0 CAT = DYNAMIC LR TAPE: BLOCKLEN = 0 GENNBR = 1 ACCESS = VDU: INPTDELM = LAST REPORT NO = 00336 |
Команда извлекает из файлов информацию (идентификаторы и макросы) записанную командой SAV [IOS] и помещает ее в память. При чтении происходит выполнение MPTMON команд, если они встречаются в потоке, соответственно, определяются или изменяют своё значение идентификаторы и заново определяются макросы. Поэтому при попытке повторного определения макроса происходит ошибка и чтение из файла прекращается, что видно на приведенном ниже примере.
>RET 4021T,971T [&&&&&&&&&&&&&] >DIR I V F VDN CEIDS LPTMNEM RID REL DTTRACER RTTRACER PATCHK1 PATCHK OPEN READ CLOSE IOERR MAKEDUR >RET 4021T,960T [& *** ERROR: MACRO ALREADY DEFINED - DEF MAC I ] > |
Команда читает и выполняет MPTMON команды из файла, чтение происходит до первой встреченной ошибки или до конца файла. В силу того, что и INC и RET работают с файлами одной структуры (только текст в ASCII коде без управляющей информации), команду INC можно использовать вместо RET (что и продемонстрировано ниже). Так же с помощью этой команды можно организовать автоматическое выполнение последовательности команд предварительно записанной в файл.
>REM MAC >REM SYM >INC 1,950T >DIR CEIDS LPTMNEM RID REL DTTRACER RTTRACER PATCHK1 PATCHK OPEN READ CLOSE IOERR MAKEDUR > |
Не знаю как у вас на станции, а у нас часть файлов (950-959) присутствует на диске. Содержимое некоторых файлов очень любопытное и местами полезное, поэтому, если вы еще не просмотрели содержимое этих файлов, то я вам рекомендую это сделать. Честно говоря, я сам эти файлы в полной мере никогда не использовал, я лишь пользуюсь некоторыми, найденными в них, макросами. Чего и вам желаю.
Всем удачи 2002-м году!
Максим Осташов Размещено на www.s12most.mailru.com 31 декабря 2001 |