В предыдущей статье, среди прочих, были упомянуты команды, которые используются для работы с библиотеками. На этот раз, я попытаюсь дать более полное описание этих команд. |
С помощью команды можно извлечь один или несколько макросов из дисковой библиотеки в память. Про макрос GET, которым можно воспользоваться в том случае, если выполнение команды было безрезультатным, рассказано в предыдущей статье.
Команда служит для выбора библиотеки. В том случае если будет выполняться команда, требующая обращения к макросу, например, его выполнение или просмотр, поиск макроса, если он не будет найден в памяти, будет осуществляться на диске, в выбранной этой командой библиотеке. После рестарта или перезагрузки, по умолчанию выбирается библиотека 969Т на устройстве 1032Т.
Выводит содержимое библиотеки. В каждой строке выводится по 8 элементов библиотеки (хотя, это может зависеть от настроек терминальной программы, например, при использовании SPEICON'а такое количество будет, если в его настройках установлено 80 символов в строке). В отличие от команды DIR, где содержимое каталога выводится в порядке добавления элементов, здесь содержимое выводится в алфавитном порядке (см. ниже). В том случае, если библиотека содержит большое количество элементов, содержимое будет разбито на части, в каждой по 409 элемента.
>DIR ; смотрим в памяти V I D >DIR LIB ; и смотрим на диске DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1T [] D I V > |
С помощью этой команды запрещается автоматическое извлечение макроса из дисковой библиотеки. Как можно видеть ниже, эта команда не влияет на принудительное извлечение макроса командой GET MAC.
>SEL LIB 1, 961T >DIR LIB ; смотрим содержимое дисковой библиотеки DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1T [] D I V >DIS LIB ; запрещаем автоматическое извлечение >V:SLIF,0,1,ALL,1 *** ERROR: MACRO NOT DEFINED >MAC V *** ERROR: MACRO NOT DEFINED >GET V >DIR V >MAC V ; на это раз команда проходит, т.к. макрос уже в памяти DEF MAC V ; IF %N<4 ' PERFORM OPERATOR VERIFY ON SELECTED SBLTYPE & EV. CONFIRMS' ' P0 = SBLTYPE' ' P1 = NA' ' P2 = NBR' ' P3 = TSEGMENT' ' P4 = NBRLOOPS' ENDI ; ;:DCON <14:SBLTYPE=%0,NA=H'%1,NBR=%2,WTC=0,TSEGMENT=%3,ITRCL=2, <ITRFM=1&1&1,NBRLOOPS=%4; SET ERR\SET MEN VER REP 'CONFIRM' DE.IEC=IEC\DE.JSQ=JSQ\BAS=T\RES ERR\RES MEN IF.IEC=0 <GO:1=%(.JSQ),2=3; EN\BAS=H EM |
В случае, когда макрос вызывается из другого макроса во избежание проблем лучше использовать команду CAL, ниже это продемонстрировано на примере трех макросов. Для начала создаем макрос Х, который будет выводить текст WORKING MACRO X и помещаем его в библиотеку, после чего запрещаем автоматическое извлечение из библиотеки и удаляем макрос из памяти. Создаем два новых макроса, которые будут вызывать первый, но делать будут это каждый по-своему. Как можно видеть успешно выполняется только тот макрос, в котором для вызова используется команда CAL.
>DEF MAC X .>WRI 'WORKING MACRO X' .>EM >PUT MAC X [&] >DIR LIB DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1T [] D I V X >DIR V X >REM MAC X >DIS LIB >DIR V >X: ; пытаемся выполнить макрос *** ERROR: MACRO NOT DEFINED >DEF MAC Y .>:X .>EM >Y: *** ERROR: MACRO NOT DEFINED - :X >DEF MAC Z .>CAL X .>EM >Z: WORKING MACRO X > |
Команда выполняет инициализацию указанной библиотеки на указанном диске (возможности работать с МО дисками я не испытывал). В результате чего все содержимое библиотеки удаляется. Команду можно выполнять для отдельного диска (1 или 2), либо для дуплексного (1032Т). Выполнение команды защищено паролем. Ниже приведен пример, в котором для начала просматривается текущий размер библиотеки, затем выполняется её инициализация и в конце вновь отображается размер и содержимое.
OPTS-3 PECHORA 2001-12-11 14:47:28 TU 001 0130/0006/0001 <268:1=1,2=961. SEQ=3840.011211 9002 COM=0268 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-11 14:47:37 TU 001 0130/0006/0001 SEQ=3840.011211 00222 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY-DISK-FILE SUCCESSFUL -------------------------------------------------------------- LOGICAL DEVICE = 1 FILE NUMBER = 961 MAXIMUM FILE LENGTH = 32767 CURRENT FILE LENGTH = 5821 RECORD LENGTH = 16 TOTAL NUMBER OF CLUSTERS = 2 LAST REPORT NO = 00222 > >INI LIB 1,961T PASSWORD: [] > >MMC OPTS-3 PECHORA 2001-12-11 14:56:30 TU 001 0130/0006/0001 <268:1=1,2=961. SEQ=3842.011211 9002 COM=0268 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-11 14:56:39 TU 001 0130/0006/0001 SEQ=3842.011211 00222 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY-DISK-FILE SUCCESSFUL -------------------------------------------------------------- LOGICAL DEVICE = 1 FILE NUMBER = 961 MAXIMUM FILE LENGTH = 32767 CURRENT FILE LENGTH = 256 RECORD LENGTH = 16 TOTAL NUMBER OF CLUSTERS = 1 LAST REPORT NO = 00222 >SEL LIB 1,961T >DIR LIB DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1T [] >SEL LIB 1032T, 961T >DIR LIB DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1032T [] >SEL LIB 2, 961T >DIR LIB DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 2T [] BAS_SERV BILLING BYTREV CALLBUF CALLBUF2 CALLBUF3 CALLBUF4 CELL CELL1 CF_1 CF_2 CF_3 CF_DEST CF_PROF CLM CNFDCB2 CNFINFO CONFDCB CONFSYM DA DASSALL DASSCB DASSINFO DASSTKT DCMDATA DDN DICOMLI DIDID DIDIDCO DIDIDIN DIDIDSY DIDIGPR DIRCDEP1 DIRCDEP2 DIRCDEP3 DIRCDEP4 DIRTINF DIRTMAP DISLTCO DISP_CF DTB16 FTNST HULIGAN IDN L LABVP2 LCALBUF1 LCALLBUF LCB LCGJOB LEGST LEGST1 LEGSTAT LINETRAC LPOOLS LTACB LTACB1 LTLSIN02 LTLSTAT NEXT_IDX PAANAL PACPX PADACC PANBR PAORG PAPAT PARSLT PASINF PASLCT PASYM PATSKIP RBP REL2 RESET RSIGTRC SCB SHOWLEGS TAR TARDOP TELDEV TEST TESTTAB TIM TKTCHG TRA VDN WHO XMITQ > |
Как можно видеть, после инициализации размер библиотеки не равен нулю, а равен максимальному количеству элементов для этой библиотеки, но самих макросов нет. Обратите так же внимание на тот случай, когда выбрана библиотека на двойном диске, содержимое не отображается.
С помощью этой команды можно поместить макрос из памяти в библиотеку на диске. Имя макроса должно быть уникальным. В случае если макрос с таким именем уже существует, будет задан вопрос о перезаписи уже существующего элемента библиотеки. Для каждого удачно записанного макроса выводится символ ’&’, т.о. при удачном выполнении операции количество этих символов должно совпадать с количеством записанных макросов.
>SEL LIB 1, 961T >PUT V, I, D [&&&] >MM OPTS-3 PECHORA 2001-12-15 09:09:54 SA 001 0130/0006/0001 <268:1=1,2=961. SEQ=4611.011215 9002 COM=0268 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-15 09:09:56 SA 001 0130/0006/0001 SEQ=4611.011215 00222 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY-DISK-FILE SUCCESSFUL -------------------------------------------------------------- LOGICAL DEVICE = 1 FILE NUMBER = 961 MAXIMUM FILE LENGTH = 32767 CURRENT FILE LENGTH = 315 RECORD LENGTH = 16 TOTAL NUMBER OF CLUSTERS = 1 LAST REPORT NO = 00222 >PUT V, I, D [ REPLACE MEMBER? (Y):Y & REPLACE MEMBER? (Y):Y & REPLACE MEMBER? (Y):Y &] >MM OPTS-3 PECHORA 2001-12-15 09:10:36 SA 001 0130/0006/0001 <268:1=1,2=961. SEQ=4612.011215 9002 COM=0268 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-15 09:10:38 SA 001 0130/0006/0001 SEQ=4612.011215 00222 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY-DISK-FILE SUCCESSFUL -------------------------------------------------------------- LOGICAL DEVICE = 1 FILE NUMBER = 961 MAXIMUM FILE LENGTH = 32767 CURRENT FILE LENGTH = 374 RECORD LENGTH = 16 TOTAL NUMBER OF CLUSTERS = 1 LAST REPORT NO = 00222 |
В приведенном выше примере в пустую библиотеку (размер 256 записей) были помещены три макроса, после чего размер библиотеки увеличился на 315-256=59 записей. Затем, макросы были помещены повторно, размер библиотеки увеличился на те же 374-315=59 записей. Т.о. при помещении обновленных версий макросов в библиотеку, старые версии из нее не удаляются, что приводит к не рациональному использованию места, но с этим можно бороться командой COM LIB, приведенной ниже.
Эта команда удаляет макрос с указанным именем в дисковой библиотеке, но удаление происходит только из каталога библиотеки, в то время как место не освобождается. Случайно удаленный макрос можно восстановить командой GET MAC. В приведенном ниже примере сначала инициализируется библиотека, потом в нее помещаются два макроса, которые, после просмотра размера библиотеки, удаляются из нее. Как можно видеть, размер библиотеки до и после удаления макросов одинаков. Напоследок производим "восстановление" макросов, их содержимое помещается в память, но в библиотеке они не восстанавливаются.
>INI LIB 1, 961T PASSWORD: [] >PUT V, I [&&] >MM OPTS-3 PECHORA 2001-12-15 14:31:07 SA 001 0130/0006/0001 <268:1=1,2=961. SEQ=4635.011215 9002 COM=0268 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-15 14:31:08 SA 001 0130/0006/0001 SEQ=4635.011215 00222 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY-DISK-FILE SUCCESSFUL -------------------------------------------------------------- LOGICAL DEVICE = 1 FILE NUMBER = 961 MAXIMUM FILE LENGTH = 32767 CURRENT FILE LENGTH = 298 RECORD LENGTH = 16 TOTAL NUMBER OF CLUSTERS = 1 LAST REPORT NO = 00222 >DIR LIB DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1T [] I V >DEL I [] >DEL V [] >REM MAC >DIR LIB DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1T [] >MM OPTS-3 PECHORA 2001-12-15 14:33:03 SA 001 0130/0006/0001 <268:1=1,2=961. SEQ=4636.011215 9002 COM=0268 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-15 14:33:07 SA 001 0130/0006/0001 SEQ=4636.011215 00222 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY-DISK-FILE SUCCESSFUL -------------------------------------------------------------- LOGICAL DEVICE = 1 FILE NUMBER = 961 MAXIMUM FILE LENGTH = 32767 CURRENT FILE LENGTH = 298 RECORD LENGTH = 16 TOTAL NUMBER OF CLUSTERS = 1 LAST REPORT NO = 00222 >GET I >GET V >DIR I V >DIR LIB DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1T [] > |
С помощью этой команды производится сжатие выбранной библиотеки. Для этой цели используется временное устройство (оптический диск или лента), которое и указывается в качестве параметра команды. После выполнения команды, сжатая (скорее оптимизированная) библиотека будет находиться на этом устройстве. После чего остается только выполнить обратное копирование ММС командой COPY-FILE. Естественно, следует копировать библиотеку обратно только в случае успешного выполнения команды. Во время выполнения команды, каждый удачно записанный блок отмечается символом '&' на экране. Выполнение команды защищено паролем.
>MM OPTS-3 PECHORA 2001-12-15 12:01:54 SA 001 0130/0006/0001 <268:1=1,2=968. SEQ=4618.011215 9002 COM=0268 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-15 12:02:00 SA 001 0130/0006/0001 SEQ=4618.011215 00222 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY-DISK-FILE SUCCESSFUL -------------------------------------------------------------- LOGICAL DEVICE = 1 FILE NUMBER = 968 MAXIMUM FILE LENGTH = 32767 CURRENT FILE LENGTH = 31424 RECORD LENGTH = 16 TOTAL NUMBER OF CLUSTERS = 1 LAST REPORT NO = 00222 >SEL LIB 1, 968T >DIR LIB DIRECTORY OF LIBRARY FILE: 968T ON DEVICE: 1T [] [] AA ABF ABF1 ABFASCII ABFCOM ACE ACTC ACTFCS ACTTRAC ALLDEV ARM ARM_B ARM_C ARM_E ASCII BDH BOOTMSG CALSCHED CAU CEID CEIDS CETYPE CHECKNA CLDEC CLIST CLOSE CLOSE1 CMI CMIINIT CNSTRNG COL COND CONSTR CONT COPYUTIL COUNTRY COU_ACE COU_SONS CPULOAD CRH_SYM D386 DBERR DBERR0 DBERR1 DBERR2 DBERR3 DBERR4 DBERR5 DBERR6 DBERR7 DBINFO DBSOS DBSOS2 DBU DCRMSG DEAL DESC DEVDATA DFTRCSEL DIS DISKINFO DISKMAC DISPDO DISPREL DISP_ERR DMCACMD DMCARES DOMS DORIA DORIA1 DTB DTB15 DTPATCH DTPATCH1 DTPATCH2 DTPATCH3 DTPATCH4 DTPATCH5 DTPATCH6 DTPATCH7 DTPATCH8 DUMP DUMP1 DUMP2 ENDUB ERR ERRCLASS ESCPRIM FCB FCBLIST FCBS FCREF FD FDREQ FDSS1 FDSTAT FDT FET FETSSM FILEINFO FILELIST FILESIZE FILESZE1 FILESZE2 FILESZE3 FINDMSG FINDPAT FINDPID FINDSTK FINPARA FLAGS FMMNAME FMMPCB FTYPES G GDT GET GET386 GETBL GETFMMID GETGLSID GETREGS GETREL GETTRACE GETVVM GLS GLSFILE GLSNAME GOS GPHNAME GSM HARDTRC IBRP IDS ILINK INIT1BID INIT1VMI INIT2BID INIT2VMI INIT3BID INIT4BID INIT5BID INIT6BID INTQ INTUR1VF IOCSYM IODEVST IOERR IOTEST ISOL J KILL KILLFMM KILLMSG KILLOV KO LCLMSG LDC_SONS LDEV LDT LEV LEVCSYNT LEVEL LEVSYNTX LEV_B LEV_C LEV_E LFPRES LFPRES1 LOAD LOAD1 LPT LPTMNEM MBID MDPARTID MFMM MINI MINT MMSGTRAC MMSIZE MNEM MNEMJST MONI MONINIT1 MONINIT2 MONINIT3 MONINIT4 MONIREST MONP MONT MSG MSGMNEM MSGTRACE MSGTRANS MTU MTUCMP NAMES NHSTAT NHSTAT1 NH_SYM OBCGLS OCB OCBS OM OM1 ONT ONT_B ONT_E OPEN OPEN1 OPT OSNSTAT OSNSTAT1 OSNSTAT2 OSNTASYM OSN_SYM OUTSET OVATAB OVLCSYM OVLOAD OVSCAN PATCHK PATCHK1 PATODK PB PB1 PB2 PCB PCBRES PCBRESH1 PCBRESH2 PCI PDEV PFMM PFUN PLANT PM PRAM PRI_CERR PRI_ERR PUTBL Q R2RUS RB RBC RBC2 RBC3 RBC4 RDOBC RDOBCM RDVOL READ READ1 RECBLK REG REL1 REL2 RELINFDO RELINFO RELINFO1 RELINFO2 RELINFO3 RELINFO4 RELINFO5 RELINFOD REMBP REPORT RESTART RFSL RGSM_SYM RIA RIA1 RID RMTMSG ROUTE RST RTB RTC RTC2 RTCM RTCM2 RTCP RTCR RTSH R_FEAT R_RES2TA R_REST S SAVETRAC SCB SELTRAC SGDIR SHUTTEST SHUTUP SIGNDATE SIMPRIM SINPRIM SKIP SMEM SN7CHRG SONSBUFF SOSELT SSDEF SSMNAME SST STACK START STARTUP STOPERR SVCE TACB TAIL TAILTA TCB TIME TIMLIS TI_SYM TNCB TNST TNST1 TRACEDIA TRACEINI TRANSLP TRBUF TRCREL TRDEF TRDEF1 TRF TRF_B TRF_E TRI TRICSYNT TRISYNTX TRI_B TRI_C TRI_E TRTUT TSS TTCE TTMSSM TYPE VMI VPCB WAIT WAITS WPMAP WRFR7 WRITE WRITE1 WRITEBID >COM LIB 4020T PASSWORD: [[&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& COMPRESS PROCEEDING &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& COMPRESS PROCEEDING &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& COMPRESS PROCEEDING &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& COMPRESS PROCEEDING &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& COMPRESS PROCEEDING &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& COMPRESS PROCEEDING &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& COMPRESS PROCEEDING ]] >MM OPTS-3 PECHORA 2001-12-15 12:07:42 SA 001 0130/0006/0001 <COPY-FILE:SRCDEV=4020,DESTDEV=1032,LFILID=968. SEQ=4619.011215 9002 COM=0405 JOB SUBMITTED 9000 RESULT FOLLOWS >$ OPTS-3 PECHORA 2001-12-15 12:09:00 SA 001 0130/0006/0001 SEQ=4619.011215 07818 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF COPY-FILE SUCCESSFUL ----------------------------------------------------------------------- SOURCE DEVICE = DKA2P0 DESTINATION DEVICE = DA1B1SL1 LOGICAL FILE ID = 968 LAST REPORT NO = 07818 >MM OPTS-3 PECHORA 2001-12-15 12:09:16 SA 001 0130/0006/0001 <268:1=1,2=968. SEQ=4620.011215 9002 COM=0268 JOB SUBMITTED 9000 RESULT FOLLOWS OPTS-3 PECHORA 2001-12-15 12:09:18 SA 001 0130/0006/0001 SEQ=4620.011215 00222 P6M802 PERIPHERAL SERVICE ROUTINES REPORT OF DISPLAY-DISK-FILE SUCCESSFUL -------------------------------------------------------------- LOGICAL DEVICE = 1 FILE NUMBER = 968 MAXIMUM FILE LENGTH = 32767 CURRENT FILE LENGTH = 28843 RECORD LENGTH = 16 TOTAL NUMBER OF CLUSTERS = 1 LAST REPORT NO = 00222 > |
Как можно видеть, размер библиотеки сократился на 31424-28843=2581 запись, что совсем не плохо, причем эту библиотеку станционный персонал не модифицировал ни коим образом, в каком виде (не оптимизированном) она была помещена на диск при последней смене пакета, в таком виде и подверглась сжатию (для библиотеки 969Т цифры были следующими: 32421-29358=3063).
Помещает идентификаторы (symbols), находящиеся на момент выполнения в памяти, на диск в библиотеку макросов, в таблицу (symbol table) с указанным именем.
Извлекает идентификаторы из библиотеки в память.
Удаляет таблицу идентификаторов с указанным именем из библиотеки макросов. Ниже приведен пример использования всех команд для работы с таблицами идентификаторов (symbol table).
>REM SYM ; удаляем все текущие идентификаторы >DEF .X=1 ; и добавляем новые >DEF .Y=2 >DEF .Z=3 >SYM ; смотрим, что у нас в памяти .X = 0001 .Y = 0002 .Z = 0003 >SEL LIB 1, 961T ; выбираем библиотеку макросов >PUT SYM SYMTAB ; помещаем все идентификаторы в библиотеку [&] >DIR LIB ; просматриваем её DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1T [] SYMTAB >REM SYM ; удаляем все идентификаторы из памяти >SYM >GET SYM SYMTAB ; загружаем таблицу идентификаторов >SYM ; смотрим содержимое памяти .X = 0001 .Y = 0002 .Z = 0003 >DEL SYM SYMTAB ; удаляем таблицу из библиотеки [] >DIR LIB DIRECTORY OF LIBRARY FILE: 961T ON DEVICE: 1T [] > |
И так, в материале были рассмотрены все команды, связанные с обработкой библиотечных файлов. Но как было сказано раньше, файлы библиотек (с 961 по 969) не единственные, где могут храниться макросы и идентификаторы. Вот об этом, я и намерен повести разговор в следующий раз.
Всем удачи!
Максим Осташов Размещено на www.s12most.mailru.com 15 декабря 2001 |