|
В предыдущей статье, среди прочих, были упомянуты команды, которые используются для работы с библиотеками. На этот раз, я попытаюсь дать более полное описание этих команд. |
С помощью команды можно извлечь один или несколько макросов из дисковой библиотеки в память. Про макрос 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 |