MPTMON. Работа с файлами.

Несмотря на некоторые трудности, возникшие у меня в последнее время, я решил больше не откладывать написание этой статьи (благо смена 31-го декабря позволяет спокойно выполнить задуманное).

Для начала, наверное, следует сказать, что MPTMON имеет средства для хранения, извлечения и выполнения команд, находящихся в файлах. Сами файлы могут располагаться как на жестких дисках, так и на ленте и магнитооптических дисках. С помощью всего этого можно организовать автоматическое выполнение команд, сохранять, а затем восстанавливать тестовое окружение (идентификаторы и макросы) и проч. Далее дано описание команд использующихся для этих целей, я не буду рассматривать команду INC VAX, т.к. я не представляю себе как ее практически можно использовать на типичной станции.

SAV [IOS] устройство, файл

Команда позволяет сохранить в файл все идентификаторы (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

 

RET [IOS] устройство, файл

Команда извлекает из файлов информацию (идентификаторы и макросы) записанную командой 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
]
    >

 

INC [IOS] устройство, файл

Команда читает и выполняет 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
Есть вопросы или дополнения, конструктивная критика? Пишите!
Hosted by uCoz