q$ LOCK011.Ajg@ LOCK011.ABACKUP/COMMENT=VAX/VMS SPKITBLD Procedure/INTER/LOG/VERIFY KITD:*.*; KEN_01:[COAR.DECUS.SIGTAPE]LOCK011.A/LABEL=(LOCK)/SAVE/BLOCK=9000/GROUP=25VAX/VMS SPKITBLD Procedure COAR `V4.5 _COPRGM:: O _HSC000$DUA1: V4.5 $&*[COAR.WORK.KIT_BUILD.KIT]CLILOCK.CLD;5+,5 ./ 4L->0123KPWO5 6 ͎7@#89@GHJDEFINE TYPE TYP_LOCK_SCOPE KEYWORD GROUP, DEFAULT KEYWORD SYSTEMDEFINE TYPE TYP_LOCK_MODE KEYWORD EXCLUSIVE, DEFAULT KEYWORD NULL KEYWORD PREAD KEYWORD PWRITE KEYWORD CREAD KEYWORD CWRITEDEFINE VERB LOCK IMAGE "IMAGE_DIRECTORY:LOCK" PARAMETER P1 VALUE (REQUIRED) PROMPT="Resource" QUALIFIER SCOPE VALUE (TYPE=TYP_LOCK_SCOPE) DEFAULT QUALIFIER MODE VALUE (TYPE=TYP_LOCK_MODE) DEFAULT QUALIFIER WAIT DEFAULT QUALIFIER RELEASE NONNEGATABLE QUALIFIER LOG DEFAULT DISALLOW (RELEASE AND (WAIT OR MODE))&*[COAR.WORK.KIT_BUILD.KIT]HLPLOCK.HLP;1+,G./ 4C->0123KPWO 5 6p͎7`C89@GHJ1 LOCK C The LOCK command allows access to the Distributed Lock Manager C from DCL command level. This functionality allows multiple C processes to synchronise at the command level, without the need C for extensive application programing. Note that locks are C cluster-wide, so processes on different CPUs in a cluster may synchronise via this command.  Format:   LOCK resource-name  C The user privilege SYSLCK is required to access system-wide locks.  2 Parameter  resource-name C The name of the virtual resource upon which to request a lock. C Note that resources are a fiction of convenience, and C synchronisation by their usage requires that all parties agree + upon the name and scope of the resource.  C The resource name may be any text string up to 31 characters in C length. If special characters or blanks are desired, enclose : the resource-name in quotation marks ("resource-name").  2 Command_qualifiers /SCOPE   /SCOPE=access-scope  C The scope of a resource refers to what category of users may . access it. Possible values for /SCOPE are:  C GROUP Access to this resource is limited to other processes : in the same UIC group as the current process.  C SYSTEM Access to this resource is unlimited; any process in 2 the system may request locks upon it.  C /SCOPE=GROUP is the default, both by omitting /SCOPE altogether, ! and by specifying only /SCOPE.  C The same resource-name may not be accessed simultaneously by a C single process as both a system and a group resource. The scope C of the first reference controls how future references will be C resolved until the process releases it. If RES1 is locked as a C system resource, all future references to RES1 (even with C /SCOPE=GROUP) will access the system-wide resource until it is C released, at which point the group resource RES1 may be accessed = by issuing a new LOCK command and specifying /SCOPE=GROUP.  > The user privilege SYSLCK is required to use /SCOPE=SYSTEM.  /MODE   /MODE=lock-mode  C Specifies the desired mode for the lock being requested. Valid  values are:  ; EXCLUSIVE Allows no other accessors except NULL locks.  C PWRITE Protected write. Allows access by other processes at CREAD or NULL.  C PREAD Protected read. Allows access at CREAD, PREAD, or  NULL mode.  C CWRITE Concurrent write. Allows other processes to access = the resource at CWRITE, CREAD, and NULL modes.  C CREAD Concurrent read. Access is allowed to other C processes requesting locks at PWRITE, PREAD, CWRITE, % CREAD, and NULL modes.  @ NULL Allows access to all other requests, at any mode.  C See the VAX/VMS System Services Reference Manual chapter on Lock , Management Services for more information.  /WAIT   /WAIT (D) /NOWAIT  C Indicates whether the requesting process should suspend C processing until the resource is available. If /NOWAIT is C specified and the requested lock cannot be granted immediately, C LOCK will issue a fatal error message and exit. Otherwise, LOCK ; will suspend all activity until the lock can be granted.  /LOG  /LOG (D) /NOLOG  C Indicates whether LOCK should issue informational messages about C the state of the lock request. If /LOG is specified (either C explicitly or by default), all messages will include the date * and time for synchronisation debugging.  /RELEASE  C Causes LOCK to relinquish all interest in the specified C resource. Any locks which have been granted for the resource  are released.  &*[COAR.WORK.KIT_BUILD.KIT]HLPLOCK.RNH;7+,R./ 4N->0123KPWO 5 6]u͎7 }89GHJ .lm 1.rm 65.flags capital .i -1;1 LOCK.breakHThe &[COAR.WORK.KIT_BUILD.KIT]HLPLOCK.RNH;7N /Protected read. Allows access at 0123KPWOQ56@7H89GHJVAX-11 Bliss-32 V4.1-746 3-Apr-1987 09:43:41Y 0 p  ( `   8   4    $|(pD|lh|Xl0P|(XpDx@lH0t !!x"" ###4$h$$$$%%D&l&&&''4(d(()\))\**T++4,,,p-..4//40l0 1L1l120223445<555 66777X88x99T:$;;;;< ===x>?,?T?l????@@@ @DA|AAB-lBB(CC0DDtEEEXF(GtGG HHH@IpIIdJ|JJ KK8LLLXMM dN @OPNICE_C_NODE_NEXTNODE@ BRH$L_RESERVED @NICE_M_TEST_TYPE @ BSA$S_LABEL @ BSA$S_USERNAME @NICE_C_NODE_MAXLINKS  MDL__MACRO @NICE_K_NODE_LOOPNODE @&BSA$K_TOTFILES @NICE_C_READ_COUNTERS @NICE_K_NODE_DELAYWGT@ BBH$B_STRUCVER @KBSA$K_VERLIMIT @NICE_K_NODE_LOOPHELP @SITESPEC_M_INVISIBLE @ BBH$M_NOCRC @BSA$S_FILEPROT @NICE_K_NODE_MAXBRDRT @NICE_C_RET_MIRDISCON @NICE_C_STRING_ACTIVE @>NICE_K_NODE_NEXTNODE @5BSA$K_REVISION MDL_END @NICE_C_RET_UNRECFUNC@STRUCT_SAVE_LKSB_LOCKID @YNICE_C_NODE_DELAY @NICE_K_NODE_MAXLINKS@NICE_V_TEST_TYPE@BJL$B_STRUCLEV @NFB$C_SHOW_ALL @BSA$S_TOTFILES @NICE_C_STRING_SIGNIF @NICE_K_READ_COUNTERS @3 BSA$K_UCHAR@ ITEM_W_BUFSIZ @ NICE_C_OS_VMS @NICE_C_RET_UNRECPARM @NICE_M_ITEM_CODED@ BRH$L_FLAGS @BSA$S_VERLIMIT @NICE_C_ERROR_MIRRORUNRECOBJECT @HBSA$K_DIR_FPRO@SITESPEC_V_INVISIBLE@, BBH$V_NOCRC @NICE_K_RET_MIRDISCON @NICE_K_STRING_ACTIVE@BJL$B_STRUCVER @BSA$S_REVISION ܛMDL_BIT @NICE_C_NODE_LOOPWITH @NICE_K_RET_UNRECFUNC @@NICE_M_ITEM_IMAGE {%FSCHECK @+BSA$K_STRUCLEV@NICE_B_OBJECT_FMT @NICE_C_NODE_ROUTIMER @YNICE_K_NODE_DELAY @ KEY_C_XOFF@ BBH$W_STRUCLEV @BJL$K_STRUCLEV @NFB$C_SHOW_ONE @NICE_C_NODE_OUTTIMER @ NICE_C_OS_RSX @NICE_K_STRING_SIGNIF @ BSA$S_UCHAR @ NICE_K_OS_VMS @NICE_K_RET_UNRECPARM @BSA$K_VOLOWNER @NICE_K_ERROR_MIRRORUNRECOBJECT@ NICE_R_ALTER_DATA@NICE_V_ITEM_CODED @BSA$S_DIR_FPRO  MDL_STRUCT | $$KEY_ENTRY @ NFB$_ERR_P1 @NICE_C_ENTITY_MODULE @NICE_C_NODE_STATE_ON @STR$K_CLASS_DB @ NFB$_ERR_P2 @}NICE_C_NODE_SOFTTYPE @NICE_K_NODE_LOOPWITH DJv RTL_PSECTS @BSA$S_STRUCLEV @ NFB$_ERR_P3 @NICE_C_DTYPE_SDEC @NICE_K_NODE_ROUTIMER@NICE_V_ITEM_IMAGE@ BBH$B_RTYPE @ KEY_K_XOFF@ LKSB_W_STATUS @ NFB$_ERR_P4 @NICE_C_AREA_KNOWN @NICE_C_RET_INVMSGFMT @NICE_C_RET_OPFAIL@ IOSB_W_STATUS @NICE_C_DTYPE_UDEC @NICE_C_NODE_LOOPASSTPHYADDR @NICE_C_NODE_STATE @NICE_K_NODE_OUTTIMER @ NICE_K_OS_RSX @ NFB$_ERR_DB @BSA$K_BACKFILES @BSA$S_VOLOWNER@BSA$W_STRUCLEV@BJL$W_STRUCLEV @NICE_C_ERROR_MIRRORREJECTED @NICE_K_ENTITY_MODULE @NICE_K_NODE_STATE_ON @}NICE_K_NODE_SOFTTYPE & MDL___BITS @ NFB$M_NOUPD @NICE_K_DTYPE_SDEC @NBSA$K_NUM_ATRS @NICE_K_AREA_KNOWN @NICE_K_RET_INVMSGFMT @NICE_K_RET_OPFAIL @NICE_K_DTYPE_UDEC @NICE_K_NODE_LOOPASSTPHYADDR @NICE_K_NODE_STATE @NICE_M_LDT_METHOD @BSA$S_BACKFILES@NICE_W_RET_DETAIL @dNICE_C_NODE_ID @NICE_C_NODE_KNOWN @NICE_C_RET_NOSYSFUNĀ$ LOCK011.A>'[COAR.WORK.KIT_BUILD.KIT]KENLIB.L32;106P"C @NICE_K_ERROR_MIRRORREJECTED@ BBH$W_RSIZE@NICE_B_ITEM_DTYPE @BBH$S_RESERVED2@BBH$T_RESERVED2  MDL___SIZE@ NFB$V_NOUPD @NICE_M_ALTER_PERM @ BSA$K_NVOLS @NFB$C_GETLOCNAM @NICE_C_RQ_TRIGGER @SITESPEC_M_INFORM R} __ITM_ITEM @!NFB$C_FC_DELETE@NICE_V_LDT_METHOD@ NICE_B_AREA @NFB$C_GETNODNAM @SITESPEC_M_ULOGIN ֍ MDL___UNIT @NFB$C_READEVENT @dNICE_K_NODE_ID @NICE_K_NODE_KNOWN @NICE_K_RET_NOSYSFUNC @NFB$C_GETLINNAM /} __ITM_INIT @NFB$C_UPDOBJECT@NICE_B_STRING_FMT |_ITMLST @FBSA$K_PLACEMENT @ BSA$S_NVOLS @NICE_C_RQ_READ @NICE_K_RQ_TRIGGER @0NICE_M_ITEM_DTYPE@NICE_V_ALTER_PERM @NICE_M_ITEM_BYTES @NICE_M_TEST_ACTRL@SITESPEC_V_INFORM @NICE_C_NODE_LOOPASSTNODE @NICE_C_OS_COMSERV@( BBH$L_BLOCKSIZE @NICE_C_NODE_INACTIMER @?NICE_M_ITEM_COUNT @ BSA$K_OPSYS @ NFB$C_GETLOCSTA @NICE_C_ERROR_FILE_PERMDB @NICE_C_RQ_LOAD@SITESPEC_V_ULOGIN @ BBH$K_LEVEL1@ BRH$W_RSIZE @DBSA$K_BOOTBLOCK @NFB$C_GETLNBYND @ NFB$C_GETLOCCTR @ NFB$C_GETLOGLNK @NFB$C_GETNDBYLN @@NICE_M_ITEM_MULTI@ BBH$W_OPSYS @ NFB$C_CLRLOCCTR @NFB$C_ENDOFLIST @NICE_C_RET_NOROOM @BSA$S_PLACEMENT  MDL__DEFINE @NICE_K_RQ_READ @BSA$K_PLC_PLACE @NFB$C_GETLINSTA @oNICE_C_NODE_SRVPW@NICE_V_ITEM_DTYPE kSTRUCT_SAVED_1 @NFB$C_GETLINCTR @NFB$C_GETNAMNUM @NFB$C_GETNUMNAM @NICE_C_RET_NOPRIV @NICE_K_NODE_LOOPASSTNODE @NICE_K_OS_COMSERV@NICE_V_ITEM_BYTES@NICE_V_TEST_ACTRL @STR$K_CLASS_XT @NFB$C_CLRLINCTR @NICE_K_NODE_INACTIMER@ BRH$W_RTYPE @ BSA$K_BLOCKSIZE @ BSA$S_OPSYS@NICE_B_SYSSPEC_OS @NICE_K_ERROR_FILE_PERMDB @NICE_K_RQ_LOAD@NICE_V_ITEM_COUNT @LBSA$K_RETAINMIN @BSA$S_BOOTBLOCK @NICE_C_ERROR_MIRRORRESOURCE @NICE_C_RQ_SYSSPEC @NICE_K_RET_NOROOM@NICE_V_ITEM_MULTI @MBSA$K_RETAINMAX@NICE_B_RET_STATUS@NICE_B_RQ_OPTIONS @NICE_C_ERROR_MIRROREXECSHUT @ NFB$C_SETLOCSTA @ NICE_C_ERROR_MIRRORNODESHUT @ BJL$K_LEVEL1 @BSA$S_PLC_PLACE @ NFB$C_DELETE @oNICE_K_NODE_SRVPW @BSA$K_OWNERNAME @NICE_K_RET_NOPRIV @<BSA$K_CYLINDERS @NFB$C_UPDREMOTE @BSA$S_BLOCKSIZE @ NFB$C_DB_XD5 @BSA$S_RETAINMIN @NFB$C_SETLINSTA @ BBH$C_LENGTH @)BSA$K_SERIALNUM @NICE_C_AREA_ACTIVE @NICE_K_ERROR_MIRRORRESOURCE @NICE_K_RQ_SYSSPEC @(BSA$K_MAXFILNUM @BSA$S_RETAINMAX @ NFB$C_DB_EFI @NICE_K_ERROR_MIRROREXECSHUT @ NFB$C_DB_XD9 @NFB$C_OP_FNDMIN @ NICE_K_ERROR_MIRRORNODESHUT @ NICE_C_ERROR_MIRRORDISCONNECTED @ BSA$S_OWNERNAME @NFB$C_OP_FNDMAX @NICE_C_RQ_DUMP @BSA$S_CYLINDERS @6NICE_C_NODE_CIRCUITRO @BSA$K_PLC_PLLBN@ LKSB_L_LKID @ BBH$C_COMMON @BJL$K_DIRECTORY@BSA$W_PLC_HILBN @ NFB$C_DB_OBI @NICE_C_NODE_COUNTIMER @ BBH$K_LENGTH @BSA$S_SERIALNUM @ NFB$C_DB_NDI @%NFB$C_FC_ZERCOU @NICE_C_RET_MIRCONNECT @NICE_K_AREA_ACTIVE @BSA$K_VOLSETNAM @BSA$S_MAXFILNUM @ BSA$C_LENGTH "zCHECK@ BBH$W_APPLIC @@ BSA$K_DEVNAM@ ITEM_W_CODE @ NFB$C_DB_CRI @ NICE_K_ERROR_MIRRORDISCONNECTED F MDL_RESTORE @NICE_C_NODE_STATE_OFF @NICE_K_RQ_DUMP @BRH$M_DIRECTORY @ NFB$C_DB_XS5 @NICE_C_AREA_NUMBER @NICE_C_NODE_ACTIVE @6NICE_K_NODE_CIRCUITRO @ BSA$S_PLC_PLLBN @ NFB$C_DB_ESI @ NFB$C_DB_LLI @NICE_C_RQ_TEST @NICE_C_RQ_ZERO @ BBH$K_COMMON @NICE_C_ENTITY_LOGGING @NICE_K_NODE_COUNTIMER@ BBH$L_NUMBER @ BRH$C_LENGTH @? BSA$K_SERIAL @ NFB$C_DB_LNI @NICE_C_NODE_DUMPCOUNT @NICE_K_RET_MIRCONNECT @ BSA$S_VOLSETNAM@BSA$W_PLC_LOLBN @ NFB$C_DB_XS9 @NICE_C_NODE_SIGNIF@NICE_W_RANGE_BEGIN@ BBH$W_MAXREC @ BSA$K_LENGTH @ NFB$C_DB_PLI @ NFB$C_DB_XDI @@ BSA$S_DEVNAM @ NFB$C_DB_MAX @NICE_C_OS_TOPS @NICE_S_OBJECT_NAME @NICE_K_NODE_STATE_OFF @@NICE_M_ALTER_CLEAR@NICE_T_OBJECT_NAME @ BBH$S_SSNAME @ NFB$C_DB_XGI @ NFB$C_GETVER @NICE_K_AREA_NUMBER @NICE_K_NODE_ACTIVE@0 BBH$T_SSNAME@BRH$V_DIRECTORY @% NFB$C_FC_MAX @NICE_C_RET_INVPARMVAL @NICE_K_RQ_TEST @NICE_K_RQ_ZERO @BSA$K_PLC_COUNT @ BSA$K_SSNAME@BSA$W_FID_COUNT MDL_SAVE @NICE_K_ENTITY_LOGGING@ BJL$W_VOLNUMBER @ BRH$K_LENGTH @! BSA$K_EXTEND @; BSA$K_TRACKS@ BSA$L_PLC_COUNT @ BSA$S_SERIAL @NICE_K_NODE_DUMPCOUNT @BJL$C_STRUC_LEN @ BJL$K_SSNAME @ BSA$K_FORMAT @NICE_C_NODE_MAXVISITS @NICE_C_OS_RSTS @NICE_K_NODE_SIGNIF @NICE_C_ERROR_FILE_VOLATILEDB @~NICE_C_NODE_SOFTID @sNICE_C_NODE_SRVNODVER @NICE_C_ENTITY_CIRCUIT @NICE_K_OS_TOPS @ NFB$C_DB_XNI @# NFB$C_FC_SET @ NICE_C_ERROR_MIRRORENTFAILED @NICE_C_LDT_BY_CIRCUIT @NICE_C_READ_EVENTS @NICE_C_RET_INVPARMGRP DvDESCR@NICE_V_ALTER_CLEAR @NICE_K_RET_INVPARMVAL@$ BBH$L_CRC @ BBH$S_DID @BSA$S_PLC_COUNT @ BSA$S_SSNAME @NICE_C_RET_FILEERR @NICE_C_RET_MSGTOOLONG @ BSA$S_EXTEND @ BSA$S_TRACKS @ BBH$S_FID @BJL$K_STRUC_LEN @ BJL$S_SSNAME @ BSA$S_FORMAT @NICE_C_ENTITY_AREA @NICE_K_NODE_MAXVISITS @NICE_K_OS_RSTS @NICE_M_ITEM_BITMAP@ BJL$T_SSNAME @ KEY_C_FF @ NFB$C_DB_XTI @NICE_K_ERROR_FILE_VOLATILEDB @~NICE_K_NODE_SOFTID @sNICE_K_NODE_SRVNODVER@V BBH$W_DID @, BSA$K_FID @NICE_C_RET_PARTIAL @NICE_K_ENTITY_CIRCUIT@ NFB$B_FCT @NICE_C_DTYPE_OCTAL @NICE_C_RET_WRONGSTATE @ NICE_K_ERROR_MIRRORENTFAILED @NICE_K_LDT_BY_CIRCUIT @NICE_K_READ_EVENTS @NICE_K_RET_INVPARMGRP@P BBH$W_FID Ds_DATA @BSA$K_VOLSTRUCT wMDL__BIT Dp_CODE @NICE_C_RET_LINEERR @NICE_K_RET_FILEERR @NICE_K_RET_MSGTOOLONG @ BSA$K_WINDOW @KEY_C_EM @ KEY_C_LF @ BRH$K_FID @NICE_C_RET_MGMTBUG @NICE_K_ENTITY_AREA @ BJL$K_VOLUME @ KEY_K_FF @ NFB$C_OP_NEQ @ NFB$_ERR_FCT@NICE_B_AREA_FMT @NICE_C_NODE_STATE_RESTRICTED@ NICE_V_ITEM_BITMAP @ BSA$S_FID @KEY_C_BS @ KEY_C_CR @pNICE_C_NODE_SRVDEV @NICE_C_READ_STATUS @NICE_K_RET_PARTIAL@NICE_W_ITEM_BITMAP @> BSA$K_DEVTYP @NICE_K_DTYPE_OCTAL @NICE_K_RET_WRONGSTATE @ NFB$C_DB_XTT @ BRH$K_VOLUME @BSA$S_VOLSTRUCT @NICE_C_ENTITY_NODE @NICE_M_READ_ENTITY z%CHECK @KEY_C_FS @NICE_C_LDT_BY_NODE @NICE_C_NODE_NSPVER @NICE_C_RET_SUCCESS @NICE_K_RET_LINEERR @ BSA$S_WINDOW @KEY_C_GS @KEY_K_EM @ KEY_K_LF @NICE_C_ENTITY_LINE @NICE_C_NODE_HOSTRO @/ BSA$K_UIC @KEY_C_RI @ NFB$C_OP_EQU @NICE_C_RET_OPENERR @NICE_K_RET_MGMTBUG @ BRH$K_LBN @ KEY_C_HT @KEY_C_SI @NICE_K_NODE_STATE_RESTRICTED@" BBH$W_VOLNUM @KEY_C_PM @KEY_K_BS @ KEY_K_CR@NICE_B_RQ_FUNCTION @NICE_C_ERROR_MIRRORUNRECNODE @pNICE_K_NODE_SRVDEV @NICE_K_READ_STATUS @ BSA$S_DEVTYP @ NFB$C_SET @NICE_C_ERROR_MIRRORINVOBJECT @*NICE_C_NODE_TYPERO @ NFB$C_DB_XXX @NICE_K_ENTITY_NODE z_QUAD @KEY_K_FS@NICE_B_NODEZ=$ LOCK011.A>'[COAR.WORK.KIT_BUILD.KIT]KENLIB.L32;106P"_FMT @NICE_K_LDT_BY_NODE @NICE_K_NODE_NSPVER @NICE_K_RET_SUCCESS@NICE_V_READ_ENTITY v_LKSB @KEY_C_SO @KEY_K_GS @NICE_K_ENTITY_LINE @NICE_K_NODE_HOSTRO@ NICE_R_LDT_DATA P_IOSB @ BRH$M_BADDATA @ BSA$S_UIC @ KEY_C_SP @KEY_K_RI @qNICE_C_NODE_CPU @NICE_K_RET_OPENERR @KEY_C_MW @ KEY_K_HT @KEY_K_SI @ NFB$M_KNO@ BBH$W_SUBSYS @KEY_C_RS @KEY_K_PM @ NFB$C_DECLOBJ @ NFB$M_UPD @NICE_K_ERROR_MIRRORUNRECNODE @ BRH$K_VBN @9 BSA$K_BAKDATE @ BSA$K_SYSVER @NICE_C_RET_DONE @NICE_K_ERROR_MIRRORINVOBJECT @*NICE_K_NODE_TYPERO @KEY_C_ST @ BSA$K_SIR @KEY_C_US@ NICE_R_RET_DATA @ KEY_C_VT @KEY_K_SO @ KEY_K_SP @qNICE_K_NODE_CPU@ BRH$V_BADDATA @KEY_K_MW @KEY_K_RS@ NFB$V_KNO @ BSA$S_BAKDATE @ BSA$S_SYSVER@ NFB$V_UPD @NICE_C_NODE_MAXBUFFERS @NICE_K_RET_DONE @KEY_K_ST @ BSA$K_RVN @ BSA$S_SIR @KEY_K_US @NICE_C_RQ_ALTER @6 BSA$K_CREDATE @ KEY_K_VT @NICE_C_NODE_SEGBUFSIZE @ LKSB_C_FIXED @NICE_C_ERROR_FILE_DIAG @NICE_C_NODE_SECNDRYDMP @yNICE_C_NODE_SECNDRYLDR @NICE_C_NODE_STATE_UNREACHABLE @NICE_C_RET_PARMVALTOOLONG @2 BSA$K_ACLEVEL  MDL_FIELD @ NFB$C_COLLATE @NICE_K_NODE_MAXBUFFERS @ BSA$K_BACKVER @ BSA$S_RVN @ KEY_C_DC1 @NICE_K_RQ_ALTER @(BJL$C_SSNAME_LEN @ BSA$K_COMMAND @ KEY_C_DC2 @NICE_C_RET_ACCEPTED@ BJL$Q_CREDATE @ BSA$S_CREDATE @ KEY_C_DC3 @NICE_C_NODE_MAXAREA @NICE_K_NODE_SEGBUFSIZE @ KEY_C_DC4 @ LKSB_K_FIXED @NICE_C_RET_BADLOOPRESP @NICE_C_RET_HARDFAIL @NICE_K_ERROR_FILE_DIAG @ BJL$S_CREDATE  MDL_CONSTANT @NICE_C_NODE_MAXADDR @NICE_K_NODE_SECNDRYDMP @NICE_M_ZERO_ENTITY@ NICE_R_ITEM_CTR  MDL_ALIGN @NICE_C_ERROR_MIRRORNONODE @yNICE_K_NODE_SECNDRYLDR @NICE_K_NODE_STATE_UNREACHABLE @NICE_K_RET_PARMVALTOOLONG @ BSA$S_ACLEVEL  MDL__LITERAL @NICE_C_ERROR_FILE_LOAD@ BBH$B_RATTRIB@NICE_W_ITEM_FMT @ BSA$S_BACKVER @ KEY_K_DC1 @NICE_C_NODE_SUBADDR@ NICE_R_STRING_TEXT@ BBH$B_VFCSIZE @(BJL$K_SSNAME_LEN @ BSA$K_DRIVEID @ BSA$S_COMMAND @ KEY_K_DC2 @NICE_C_NODE_ADDRESS @NICE_C_RET_INVFILECONT @NICE_K_RET_ACCEPTED @ KEY_K_DC3 @NICE_C_NODE_MAXCIRC @NICE_K_NODE_MAXAREA@ BBH$B_BKTSIZEpBBLOCK @ KEY_K_DC4 @NICE_K_RET_BADLOOPRESP @NICE_K_RET_HARDFAIL @O BJL$S_DIRNAME @NICE_K_NODE_MAXADDR@ BJL$T_DIRNAME @8 BSA$K_EXPDATE @7 BSA$K_REVDATE @NICE_K_ERROR_MIRRORNONODE@NICE_V_ZERO_ENTITY @NICE_K_ERROR_FILE_LOAD@ BRH$L_ADDRESS @ BSA$K_BUFFERS @JBSA$K_DIR_VERLIM @ NICE_C_NODE_PHYADDR @zSCHECK @NICE_K_NODE_SUBADDR _LKVALBLK @ BSA$K_VOLCHAR @ BSA$K_VOLDATE @ BSA$S_DRIVEID @NICE_K_NODE_ADDRESS @NICE_K_RET_INVFILECONT@[ BBH$B_DID_NMX @BJL$C_VOLUME_LEN @NICE_C_RET_MISSINGPARM @NICE_K_NODE_MAXCIRC @ BSA$K_PLC_FID@U BBH$B_FID_NMX @ BSA$K_VOLNAME@Z BBH$B_DID_RVN@ BJL$B_DATA @ BSA$K_COMMENT @ BSA$S_EXPDATE @ BSA$S_REVDATE @ KEY_C_CCH @NICE_C_NODE_CIRCUIT @ NICE_C_OS_CT @NICE_C_RET_PARMNOTAPPL@T BBH$B_FID_RVN @4 BSA$K_RECATTR @ BSA$S_BUFFERS @BSA$S_DIR_VERLIM @ KEY_C_ACK @NICE_C_READ_CHAR @ NICE_K_NODE_PHYADDR @O BJL$C_DIR_LEN @ BSA$S_VOLCHAR @ BSA$S_VOLDATE @ NICE_C_ERROR_MIRRORNORESP @BJL$K_VOLUME_LEN @ KEY_C_CAN @NICE_K_RET_MISSINGPARM @ BSA$S_PLC_FID @ KEY_C_BEL @NICE_C_NODE_BUFSIZE @NICE_C_NODE_INTIMER @E BSA$K_BOOTVBN @ BSA$S_VOLNAME @ KEY_C_APC @NICE_C_ERROR_FILE_DUMP @NICE_C_NODE_LOOPLEN@X BBH$W_DID_SEQ@ BSA$L_PLC_LBN @ BSA$S_COMMENT @ KEY_C_DEL @ KEY_C_DLE@NICE_W_NODE_ADDRESS @ BJL$S_VOLNAME@ BSA$B_FID_NMX @ KEY_C_EPA @ KEY_C_PU1 @ KEY_K_CCH @NICE_C_NODE_ADDR @NICE_K_NODE_CIRCUIT @ NICE_K_OS_CT @NICE_K_RET_PARMNOTAPPL@R BBH$W_FID_SEQ@ BJL$T_VOLNAME @ BSA$S_RECATTR @ KEY_C_PU2 @ KEY_C_TAB @ KEY_K_ACK @ NFB$_ERR_CELL @nNICE_C_NODE_SRVCIRC @NICE_K_READ_CHAR @ BSA$K_DATE @ KEY_C_SS2 @O BJL$K_DIR_LEN@ BSA$B_FID_RVN @G BSA$K_DIR_UIC @ BSA$K_RECPROT @ KEY_C_ESA @ KEY_C_SS3 @ NICE_K_ERROR_MIRRORNORESP z| $$KEY_INIT @ BSA$K_USERUIC @ KEY_C_DCS @ KEY_C_NAK @ KEY_K_CAN @NICE_C_NODE_LOOPCNT @NICE_C_NODE_MAXCOST @NICE_C_RET_UNRECENTITY@ NICE_R_READ_DATA @ BSA$K_PROTECT @ KEY_C_ESC @ KEY_C_ETB @ KEY_C_IND @ KEY_K_BEL @" NFB$C_FC_SHOW @NICE_C_ITEM_BIT8 @NICE_C_NODE_MAXHOPS @NICE_C_RET_INCOMPAT @NICE_K_NODE_BUFSIZE @NICE_K_NODE_INTIMER@V BBH$W_DID_NUM @ BJL$K_FILE @" BSA$K_CLUSTER @IBSA$K_DIR_STATUS @ BSA$S_BOOTVBN@ IOSB_L_DEVDEPEND @ KEY_K_APC @NICE_C_NODE_NAME @zNICE_C_NODE_TERTLDR @NICE_K_ERROR_FILE_DUMP @NICE_K_NODE_LOOPLEN z _QUADWORD @: BSA$K_SECTORS @ KEY_K_DEL @ KEY_K_DLE  MDL__MASK @eNICE_C_NODE_MGMTVER @ NICE_C_OS_RT@P BBH$W_FID_NUM @ KEY_K_EPA @ KEY_K_PU1 @ NFB$C_CHG_SRV @NICE_K_NODE_ADDR @ KEY_C_CSI @ KEY_C_NEL @ KEY_K_PU2 @ KEY_K_TAB @NICE_C_NODE_STATE_SHUT @NICE_C_READ_SUMMARY @nNICE_K_NODE_SRVCIRC @ BRH$K_FILE @ BSA$S_DATE @ KEY_C_PLD @ KEY_K_SS2 @ BSA$S_DIR_UIC @ BSA$S_RECPROT@ BSA$W_FID_SEQ@ IOSB_W_COUNT @ KEY_K_ESA @ KEY_K_SS3@Z BBH$W_DID_RVN @ BSA$S_USERUIC @ KEY_K_DCS @ KEY_K_NAK @NICE_K_NODE_LOOPCNT @NICE_K_NODE_MAXCOST @NICE_K_RET_UNRECENTITY @ BSA$S_PROTECT @ KEY_K_ESC @ KEY_K_ETB @ KEY_K_IND @NICE_K_ITEM_BIT8 @NICE_K_NODE_MAXHOPS @NICE_K_RET_INCOMPAT@T BBH$W_FID_RVN @ BSA$S_CLUSTER @BSA$S_DIR_STATUS @ KEY_C_ENQ @ KEY_C_SPA @NICE_K_NODE_NAME @zNICE_K_NODE_TERTLDR @ BSA$S_SECTORS @ KEY_C_OSC @eNICE_K_NODE_MGMTVER @ NICE_K_OS_RT @$ BSA$K_VOLSIZE @ KEY_C_HTJ@NFB$B_DATABASE @NICE_M_NODE_NAME @ KEY_C_SSA @ KEY_K_CSI @ KEY_K_NEL@ NFB$B_OPER @ NFB$_ERR_SRCH @NICE_K_NODE_STATE_SHUT @NICE_K_READ_SUMMARY @pNICE_M_READ_INFO pSETIPL@ BSA$W_FID_NUM @ KEY_C_EOT @ KEY_K_PLD @NICE_C_RET_RESOURCE @NICE_C_TEST_CIRCUIT@ NICE_R_SYSSPEC_DATA @NICE_C_NODE_DELAYFACTOR A| $KEY_TABLE @ KEY_C_SOH @ KEY_C_SUB @NICE_M_NODE_EXEC @NFB$C_DECLNAME {%SCHECK @BBSA$K_BADBLOCK @% BSA$K_TOTSIZE @ KEY_K_ENQ @ KEY_K_SPA@ NICE_B_OBJECT @NICE_S_NODE_NAME @ KEY_K_OSC @ NFB$_ERR_OPER@NICE_T_NODE_NAME@NICE_W_RANGE_END@ BJL$B_SIZE @ BRH$K_SUMMARY @ BSA$K_LRU_LIM @ BSA$K_XORSIZE @ BSA$S_VOLSIZE@ BSA$W_FID_RVN p INTERNAL_CALL @ KEY_K_HTJ @NICE_M_ITEM_COUNTER @ KEY_C_HTS @ KEY_C_NUL @ KEY_K_SSA @NICE_M_READ_PERM@NICE_V_NODE_NAME @ KEY_K_EOT @NICE_C_ERROR_FILE_LOAD2 @{NICE_C_NODE_DIAGFILE @NICE_K_RET_RESOURCE @NICE_K_TEST^Y$ LOCK011.A>'[COAR.WORK.KIT_BUILD.KIT]KENLIB.L32;106PCQ"0_CIRCUIT@NICE_V_READ_INFO @0 BSA$K_FPRO @ KEY_C_ETX @ KEY_C_PLU @NICE_C_ERROR_FILE_LOAD3 @NICE_K_NODE_DELAYFACTOR @ KEY_K_SOH @ KEY_K_SUB @ NFB$C_OP_GTRU @NICE_C_NODE_ROUTVER @NICE_C_RET_PROTOCOL @`NICE_M_ITEM_CTRSIZE SMDL__ERASE_SAVED @ NFB$C_SHOW @NICE_C_NODE_AREAMAXCOST@NICE_V_NODE_EXEC @BSA$S_BADBLOCK @ BSA$S_TOTSIZE p EXTERNAL_CALL @ NICE_C_ERROR_MIRROROBJECTBUSY @NICE_C_NODE_AREAMAXHOPS @4NICE_C_NODE_COST @NICE_M_ALTER_ENTITY @ STR$K_CLASS_B@ BJL$B_TYPE @ BRH$K_PHYSVOL @ KEY_C_XON @NICE_C_NODE_ADJACENT @5NICE_C_NODE_HOPS @NICE_C_NODE_LOOP @ BSA$S_LRU_LIM @ BSA$S_XORSIZE @ STR$K_CLASS_D@ BBH$W_SIZE @ KEY_K_HTS @ KEY_K_NUL @ NFB$C_OP_LSSU@NICE_V_ITEM_COUNTER @XNICE_C_NODE_ACTIVELINKS @NICE_C_NODE_RETRANSFACT @NICE_K_ERROR_FILE_LOAD2 @{NICE_K_NODE_DIAGFILE@NICE_V_READ_PERM @ STR$K_CLASS_F @BBH$S_FILENAME @-BSA$K_BACKLINK @ BSA$S_FPRO @ KEY_K_ETX @ KEY_K_PLU @NICE_C_NODE_HOST @NICE_C_STRING_KNOWN @NICE_K_ERROR_FILE_LOAD3@\BBH$T_FILENAME@ BSA$W_PLC_PTR @ KEY_C_STS @ KEY_C_SYN @NICE_C_RET_INVID @NICE_K_NODE_ROUTVER @NICE_K_RET_PROTOCOL @ BRH$K_NULL @*BSA$K_FILENAME @NICE_C_ERROR_MIRRORABORTED @xNICE_C_NODE_LOADFILE @NICE_C_TEST_NODE @NICE_K_NODE_AREAMAXCOST @NICE_M_ZERO_READ@ NICE_V_ITEM_CTRSIZE @NFB$C_WILDCARD @ NICE_K_ERROR_MIRROROBJECTBUSY @NICE_K_NODE_AREAMAXHOPS @4NICE_K_NODE_COST @1 BSA$K_RPRO @ KEY_C_VTS @ KEY_K_XON @NICE_C_NODE_TYPE @NICE_C_TEST_LINE @NICE_K_NODE_ADJACENT @5NICE_K_NODE_HOPS @NICE_K_NODE_LOOP@NICE_V_ALTER_ENTITY@ NICE_R_TEST_DATA @ KEY_C_STX @ LKSB_C_VALBLK @NICE_C_DTYPE_HEX @XNICE_K_NODE_ACTIVELINKS @NICE_K_NODE_RETRANSFACT @ BSA$K_NODENAME @BSA$S_BACKLINK@ BSA$W_SIZE @$NFB$C_FC_CLEAR @NICE_K_NODE_HOST @NICE_K_STRING_KNOWN @ KEY_K_STS @ KEY_K_SYN@ LKSB_L_LOCKID @NICE_K_RET_INVID @BSA$S_FILENAME@ ITEM_L_BUFADR @NFB$C_DISCLINK @NICE_K_ERROR_MIRRORABORTED @xNICE_K_NODE_LOADFILE @NICE_K_TEST_NODE@ NICE_R_ITEM_PARM @ NFB$_ERR_STRT@NICE_V_ZERO_READ @BJL$S_FILENAME @ BSA$S_RPRO @ KEY_K_VTS @ LKSB_C_LENGTH @NICE_C_ERROR_MIRRORTHIRDPARTY @NICE_K_NODE_TYPE @NICE_K_TEST_LINE@BJL$T_FILENAME @BSA$K_BACKSIZE @ IOSB_C_LENGTH @NICE_C_ERROR_FILE_DUMP2 @ KEY_K_STX @ LKSB_K_VALBLK@ BSA$W_TYPE @ ITEM_C_LENGTH @NICE_C_ITEM_BIT32 @NICE_K_DTYPE_HEX &p%ASSUME @ BSA$S_NODENAME @NICE_C_ITEM_BIT16 @NICE_C_NODE_BRDROUTIMER @NICE_C_NODE_MAXBRDNONRT @=BSA$K_MAXBLOCK @rNICE_C_NODE_HDWRADDR@ BBH$L_FILESIZE @NICE_C_NODE_DUMPADDR @ STR$K_CLASS_Z ezFSCHECK @ LKSB_K_LENGTH @NICE_C_ERROR_MIRRORINVNODE @NICE_C_READ_CHARACTERISTICS @NICE_K_ERROR_MIRRORTHIRDPARTY @CBSA$K_INDEXLBN @BSA$S_BACKSIZE @ IOSB_K_LENGTH@ LKSB_R_VALBLK @ NFB$C_P2STRLNG @ NFB$C_READ_CLR @NICE_K_ERROR_FILE_DUMP2@BBH$W_CHECKSUM @ LKSB_S_VALBLK ]~$DVILST }$JPILST @ ITEM_K_LENGTH @NICE_K_ITEM_BIT32 @NICE_M_ITEM_TYPE @NICE_C_NODE_DUMPFILE @BJL$C_FILE_LEN @NICE_C_NODE_STATE_REACHABLE @NICE_K_ITEM_BIT16 @NICE_K_NODE_BRDROUTIMER @NICE_K_NODE_MAXBRDNONRT @'BSA$K_MAXFILES @BSA$S_MAXBLOCK @rNICE_K_NODE_HDWRADDR  MDL_LENGTH @NICE_C_ERROR_MIRRORUNREACHABLE @NICE_K_NODE_DUMPADDR @.BSA$K_FILESIZE y DESCRIPTOR @NICE_C_OBJECT_NUMBER @NICE_K_ERROR_MIRRORINVNODE @NICE_K_READ_CHARACTERISTICS ( WORD_RELATIVE) (GENERAL)%IF(   )%THEN %ERRORMACRO(Invalid assumption: ", , , , , ,")%FI gMTPR;MTPR(%REF( ),PR$_IPL);>?(+)<,,>>Y%NAME(_, ,_CODE)(READ,NOWRITE,EXECUTE,SHARE,PIC, CONCATENATE, (GENERAL),\(%IF %IDENTICAL(%STRING( ),BYTE)%THEN%ELSE%IF %IDENTICAL(%STRING( ),WORD)%THEN%ELSE%IF %IDENTICAL(%STRING( ),LONG)%THEN%ELSE%IF %IDENTICAL(%STRING( ),LONGWORD)%THEN%ELSE%IF %IDENTICAL(%STRING( ),QUAD)%THEN%ELSE%IF %IDENTICAL(%STRING( ),QUADWORD)%THEN%ELSE%IF %IDENTICAL(%STRING( ),PAGE)%THEN %ELSE %FI%FI%FI%FI%FI%FI%FI))FACILITYLIB ALIGNMENT`Y%NAME(_, ,_DATA)(READ,WRITE, NOEXECUTE,NOSHARE,PIC, CONCATENATE, ( LONG_RELATIVE),\(%IF %IDENTICAL(%STRING( ),BYTE)%THEN%ELSE%IF %IDENTICAL(%STRING( ),WORD)%THEN%ELSE%IF %IDENTICAL(%STRING( ),LONG)%THEN%ELSE%IF %IDENTICAL(%STRING( ),LONGWORD)%THEN%ELSE%IF %IDENTICAL(%STRING( ),QUAD)%THEN%ELSE%IF %IDENTICAL(%STRING( ),QUADWORD)%THEN%ELSE%IF %IDENTICAL(%STRING( ),PAGE)%THEN %ELSE %FI%FI%FI%FI%FI%FI%FI))FACILITYLIB ALIGNMENT`TCODE=_CODE(FACILITY= ),V=_CODE(FACILITY= ),1=_DATA(FACILITY= ),2=_DATA(FACILITY= )FACILITYLIB\BLOCK[,`]r([ DSC$W_LENGTH]= ,[ DSC$B_CLASS]=%IF %IDENTICAL(%STRING( ),DYNAMIC)%THEN DSC$K_CLASS_D%ELSE%IF %IDENTICAL(%STRING( ),FIXED)%THEN DSC$K_CLASS_S%ELSE%IF %IDENTICAL(%STRING( ),UNKNOWN)%THEN DSC$K_CLASS_Z%ELSE%IF %IDENTICAL(%STRING( ),ARRAY)%THEN DSC$K_CLASS_A%ELSE %FI%FI%FI%FI,[ DSC$B_DTYPE]=%IF %IDENTICAL(%STRING( ),UNKNOWN)%THEN DSC$K_DTYPE_Z%ELSE%IF %IDENTICAL(%STRING( ),STRING)%THEN DSC$K_DTYPE_T%ELSE%IF %IDENTICAL(%STRING( ), BITSTRING)%THEN DSC$K_DTYPE_V%ELSE %FI%FI%FI,[ DSC$A_POINTER]= )LENGTHCLASSUNKNOWNDTYPEUNKNOWNBUFFERBLOCK[,`]BLOCK[,`] _QUADWORD.STATUSB.STATUS.STATUSSIGNAL(.STATUS).STATUS SIGNAL_STOP(.STATUS)8 ___STATUS:s; ___STATUS=%IF%NULL( )%THEN.STATUS%ELSE( )%FI;. ___STATUSB. ___STATUS;. ___STATUS;8 ___STATUS:s; ___STATUS=%IF%NULL( )%THEN.STATUS%ELSE( )%FI;. ___STATUSSIGNAL(. ___STATUS);. ___STATUS;8 ___STATUS:s; ___STATUS=%IF%NULL( )%THEN.STATUS%ELSE( )%FI;. ___STATUS SIGNAL_STOP(. ___STATUS);. ___STATUS; j((*%LENGTH) $$KEY_INIT( , %REMAINING)) $$KEY_ENTRY(%REMOVE( )) $$KEY_INIT( %REMAINING) ,j(%ASCIC%STRING( )), %REMAINING BLOCK[*%LENGTH,s]_( __ITM_INIT( , %REMAINING),) __ITM_ITEM( ,%REMOVE( ))n( ,%NAME(%STRING( ), )),s( , ) %IF%NULL( %REMAINING)%THEN_ITMLST(JPI$_, )%ELSE_ITMLST(JPI$_, , %REMAINING)%FI %IF%NULL( %REMAINING)%THEN_ITMLST(MNT$_, )%ELSE_ITMLST(MNT$_, , %REMAINING)%FI %IF %DECLARED(DVILST$K_SECONDARY)%THEN%IF%NULL( %REMAINING)%THEN_ITMLST(DVI$C_SECONDARY OR DVI$_, )%ELSE_ITMLST(DVI$C_SECONDARY OR DVI$_, , %REMAINING)%FI%ELSE%IF%NULL( %REMAINING)%THEN_ITMLST(DVI$_, )%ELSE_ITMLST(DVI$_, , %REMAINING)%FI%FI9 = , , , % &%NAME( STRUCT_NAME,_M_, STRUCT_PREFIX, )=^ -^ ;^1$ LOCK011.A>'[COAR.WORK.KIT_BUILD.KIT]KENLIB.L32;106PA& = ;%IF %DECLARED( STRUCT_BYTE)%THENG STRUCT_BYTE=,STRUCT_SUBBYTE=, STRUCT_BIT=,STRUCT_BITWIDTH=, STRUCT_NEXT_K=, STRUCT_INCR_K=,STRUCT_SCRATCH=, STRUCT_MASK=, STRUCT_SAVED=;& STRUCT_K_R=, STRUCT_K_B=, STRUCT_K_T=, STRUCT_K_W=, STRUCT_K_=, STRUCT_K_L=, STRUCT_K_A=, STRUCT_K_G=, STRUCT_K_Q=, STRUCT_SIZE_B=, STRUCT_SIZE_R= , STRUCT_SIZE_T=, STRUCT_SIZE_W=, STRUCT_SIZE_= , STRUCT_SIZE_L= , STRUCT_SIZE_A= , STRUCT_SIZE_G= , STRUCT_SIZE_Q=;%ELSE%ASSIGN( STRUCT_BYTE,)%ASSIGN(STRUCT_SUBBYTE,)%ASSIGN( STRUCT_BIT,)%ASSIGN( STRUCT_NEXT_K,)%ASSIGN( STRUCT_INCR_K,)%ASSIGN(STRUCT_SCRATCH,)%ASSIGN( STRUCT_MASK,)%ASSIGN( STRUCT_SAVED,)%FI%IF %DECLARED(%QUOTE STRUCT_NAME)%THENA%QUOTE STRUCT_NAME;%FI9%QUOTE STRUCT_NAME=%STRING( )%;%IF %DECLARED(%QUOTE STRUCT_PREFIX)%THENA%QUOTE STRUCT_PREFIX;%FI9%QUOTE STRUCT_PREFIX=%;%IF %DECLARED(%QUOTE MDL__PARM1)%THENA%QUOTE MDL__PARM1;%FI9%QUOTE MDL__PARM1(P1,P2)=P1%;%IF %DECLARED(%QUOTE MDL__PARM2)%THENA%QUOTE MDL__PARM2;%FI9%QUOTE MDL__PARM2(P1,P2)=P2%;%IF %DECLARED(%QUOTE MDL__PARMN)%THENA%QUOTE MDL__PARMN;%FI9%QUOTE MDL__PARMN(P1,P2)= %REMAINING%;%IF %DECLARED(%QUOTE MDL__NULL1)%THENA%QUOTE MDL__NULL1;%FI9%QUOTE MDL__NULL1(P1,P2)=%NULL(P1)%;%IF %DECLARED(%QUOTE MDL__NULL2)%THENA%QUOTE MDL__NULL2;%FI9%QUOTE MDL__NULL2(P1,P2)=%NULL(P2)%;%IF %DECLARED(%QUOTE MDL__NULLN)%THENA%QUOTE MDL__NULLN;%FI9%QUOTE MDL__NULLN(P1,P2)=%NULL( %REMAINING)%;%IF %DECLARED(%QUOTE MDL__CLEANUP)%THENA%QUOTE MDL__CLEANUP;%FI9 MDL__CLEANUP=%QUOTEMDL__ERASE_SAVED() STRUCT_BYTE,STRUCT_SUBBYTE, STRUCT_BIT,STRUCT_BITWIDTH, STRUCT_NEXT_K, STRUCT_INCR_K,STRUCT_SCRATCH, STRUCT_MASK, STRUCT_SAVED, STRUCT_K_R, STRUCT_K_B, STRUCT_K_T, STRUCT_K_W, STRUCT_K_, STRUCT_K_L, STRUCT_K_A, STRUCT_K_G, STRUCT_K_Q, STRUCT_SIZE_B, STRUCT_SIZE_R, STRUCT_SIZE_T, STRUCT_SIZE_W, STRUCT_SIZE_, STRUCT_SIZE_L, STRUCT_SIZE_A, STRUCT_SIZE_G, STRUCT_SIZE_Q%%IF ! STRUCT_SAVED%THEN %QUOTENAME( STRUCT_SAVE_, STRUCT_NAME,_,%NAME( STRUCT_SAVED_, )), %QUOTENAME( STRUCT_SAVED_, ),%FI%IF   STRUCT_SAVED%THEN%ASSIGN(STRUCT_SCRATCH, +)MDL__ERASE_SAVED(%NUMBER(STRUCT_SCRATCH))%FI%IF %DECLARED( STRUCT_BYTE)%THENA MDL__CLEANUP,%QUOTE STRUCT_NAME,%QUOTE MDL__PARM1,%QUOTE MDL__PARM2,%QUOTE MDL__PARMN,%QUOTE MDL__NULL1,%QUOTE MDL__NULL2,%QUOTE MDL__NULLN,%QUOTE STRUCT_PREFIX,%QUOTE MDL__CLEANUP;%FIG%NAME( STRUCT_SAVE_, STRUCT_NAME,_, )= STRUCT_BYTE;%ASSIGN( STRUCT_SAVED, STRUCT_SAVED+)9%NAME( STRUCT_SAVED_,%NUMBER( STRUCT_SAVED))= %&%IF %DECLARED(%NAME( STRUCT_SAVE_, STRUCT_NAME,_, ))%THEN%ERROR(No saved position named , ,!)%ELSE%ASSIGN( STRUCT_BYTE,%NAME( STRUCT_SAVE_, STRUCT_NAME,_, ))%ASSIGN(STRUCT_SUBBYTE, STRUCT_BYTE)%ASSIGN( STRUCT_NEXT_K,)%ASSIGN( STRUCT_INCR_K,)%ASSIGN( STRUCT_MASK,)%ASSIGN( STRUCT_BIT,)%FI MDL__PARM1(%EXPLODE( ))P%IF MDL___UNIT( )"B%THEN%ELSE%IF MDL___UNIT( )"T%THEN%ELSE%IF MDL___UNIT( )"W%THEN%ELSE%IF MDL___UNIT( )"L%THEN%ELSE%IF MDL___UNIT( )"A%THEN%ELSE%IF MDL___UNIT( )"G%THEN%ELSE%IF%NULL( )%THEN%ELSE%IF MDL___UNIT( )"Q%THEN%ELSE%IF MDL___UNIT( )"P%THEN%ELSE%FI%FI%FI%FI%FI%FI%FI%FI%FIp%IF%STRING( MDL__PARM1(%EXPLODE( )))"B%THEN%ELSE%IF%STRING( MDL__PARM1(%EXPLODE( )))"T%THEN%ELSE%IF%STRING( MDL__PARM1(%EXPLODE( )))"W%THEN%ELSE%IF%STRING( MDL__PARM1(%EXPLODE( )))"L%THEN %ELSE%IF%STRING( MDL__PARM1(%EXPLODE( )))"A%THEN %ELSE%IF%STRING( MDL__PARM1(%EXPLODE( )))"R%THEN %ELSE%IF%STRING( MDL__PARM1(%EXPLODE( )))"G%THEN %ELSE%IF%NULL( )%THEN %ELSE%IF%STRING( MDL__PARM1(%EXPLODE( )))"Q%THEN%ELSE%FI%FI%FI%FI%FI%FI%FI%FI%FI,G MDL___BYTES=;%ASSIGN( MDL___BYTES, MDL___SIZE( ))%IF MDL___BYTES#%THEN%ASSIGN( MDL___BYTES,((( STRUCT_BYTE+ MDL___BYTES-)/ MDL___BYTES)* MDL___BYTES))%IF MDL___BYTES#%THEN%ASSIGN( MDL___BYTES,( MDL___BYTES- STRUCT_BYTE)) MDL_FIELD(,B,%NUMBER( MDL___BYTES))%FI%FIA MDL___BYTES;}%IF%NULL( )%THEN MDL__MACRO(%NAME( STRUCT_NAME,_,%IF%NULL( )%THENL%ELSE %FI,_, ),%NUMBER( STRUCT_BYTE),,%NUMBER(%NAME( STRUCT_SIZE_, )),%IF%NULL( %REMAINING)%THEN%ELSE%FI)%FI%ASSIGN(STRUCT_SUBBYTE, STRUCT_BYTE)%ASSIGN(STRUCT_BITWIDTH,%NAME( STRUCT_SIZE_, ))%ASSIGN( STRUCT_BYTE, STRUCT_BYTE+%IF%NULL( )%THEN%ELSE %FI*%NAME( STRUCT_K_, ))%ASSIGN(STRUCT_SCRATCH,( STRUCT_BYTE-STRUCT_SUBBYTE))%IF %IDENTICAL( ,R)( %IDENTICAL(%NUMBER( ),))%THEN%ASSIGN(STRUCT_SCRATCH,%NUMBER( ))%FI%IF(%NULL( ))(( %IDENTICAL(%NUMBER( ),)) %IDENTICAL( ,T) %IDENTICAL( ,Q))%THEN;&%NAME( STRUCT_NAME,_S_, )=%NUMBER(STRUCT_SCRATCH)%FI%ASSIGN( STRUCT_BIT,)%NAME( STRUCT_NAME,_K_, , )=%IF%NULL( )%THEN STRUCT_NEXT_K%ELSE %FI,%NAME( STRUCT_NAME,_C_, , )=%IF%NULL( )%THEN STRUCT_NEXT_K%ELSE %FI'%IF%COUNT"%THEN%ASSIGN( STRUCT_NEXT_K,%IF%NULL( )%THEN%ELSE %FI)%FI& MDL__DEFINE( ,%REMOVE( ))%ASSIGN( STRUCT_NEXT_K,%IF MDL__NULL2 %THEN STRUCT_NEXT_K%ELSE MDL__PARM2 %FI+%IF%NULL( )%THEN%ELSE %FI) MDL_CONSTANT(,,,(%IF%NULL( )%THENLENGTH%ELSE %FI,%NUMBER( STRUCT_BYTE)))0%IF%NULL( )%THEN MDL__MACRO(%NAME( STRUCT_NAME,_V_, , ),%NUMBER(STRUCT_SUBBYTE),%NUMBER( STRUCT_BIT),%NUMBER(%IF%NULL( )%THEN%ELSE %FI),)%IF%NULL( %REMAINING)%THEN;&%NAME( STRUCT_NAME,_M_, , )=^%NUMBER(STRUCT_SCRATCH)-^%NUMBER( STRUCT_BIT)%FI%FI&%IF STRUCT_BIT+%NUMBER( MDL__PARM2 )$STRUCT_BITWIDTH%THEN %ERRORMACRO(Bit field exceeds ,STRUCT_BITWIDTH, -bit boundary)%FI%ASSIGN(STRUCT_SCRATCH, STRUCT_BIT+%IF MDL__NULL2 %THEN%ELSE MDL__PARM2 %FI)MDL__BIT( ,%REMOVE( )%IF%NULL( )%THEN, %FI)%ASSIGN( STRUCT_BIT,STRUCT_SCRATCH)BBLOCK[ IOSB_K_LENGTH]LOCKIDBBLOCK[ LKSB_K_LENGTH]BBLOCK[ LKSB_K_VALBLK](*[COAR.WORK.KIT_BUILD.KIT]KITINSTAL.COM;3+,. / 4O ->0123KPWO 56@7 89GHJ $KITINSTAL:$!)$! Installation kit for the LOCK command.$!#$ ON ERROR THEN $GOTO EXIT_ERROR,$ ON CONTROL_Y THEN VMI$CALLBACK CONTROL_Y0$ IF P1 .EQS. "VMI$_INSTALL" THEN $GOTO INSTALL($ IF P1 .EQS. "VMI$_IVP" THEN $GOTO IVP$ EXIT VMI$_UNSUPPORTED$! $EXIT_ERROR:/$ IF F$TRNLNM ("LOCK_EDIT_CMD") .NES. "" THEN - $CLOSE LOCK_EDIT_CMD$ EXIT VMI$_FAILURE$!$EXIT_SUCCESS:$ EXIT VMI$_SUCCESS$! $INSTALL:$ VMI$CALLBACK - SET - PURGE - ASK$!$ VMI$CALLBACK - S$ LOCK011.A>([COAR.WORK.KIT_BUILD.KIT]KITINSTAL.COM;3O ET - IVP - ASK$!$ VMI$CALLBACK - ASK - LOCK_USEDEC -< "Do you want to install LOCK in the Digital directories" - NO - B,H -O "Installation of non-DEC products in the [SYSxxx] directories is UNSUPPORTED"$!'$ IF LOCK_USEDEC THEN $GOTO DONE_ASK$!$ VMI$CALLBACK - ASK - LOCK_EXE -# "Where should the image reside" - VMI$ROOT:[SYSEXE] - S,D$!>$ PROMPT = F$FAO ("Insert the help text into what library!/ ")$ VMI$CALLBACK - ASK - LOCK_HELP - "''PROMPT'" - VMI$ROOT:[SYSHLP]HELPLIB.HLB - S -@ "Specify the complete file specification of the help library."$!E$ PROMPT = F$FAO ("Insert the LOCK verb into which command table!/ ")$ VMI$CALLBACK - ASK - LOCK_CMD - "''PROMPT'" -" VMI$ROOT:[SYSLIB]DCLTABLES.EXE - S -A "Specify the complete file specification of the command table."$! $DONE_ASK:$ TYPE SYS$INPUTF All questions concerning the installation have been asked. The9 installation will continue for another 5 minutes.I Please read the release notes to see what changes need to be made0 to your site-specific startup procedure.$!$ VMI$CALLBACK - PROVIDE_FILE - LOCK_ - LOCK011.MEM - VMI$ROOT:[SYSUPD]$!$ VMI$CALLBACK - MESSAGE - I - RELNOTES -< "release notes have been placed in SYS$UPDATE:LOCK011.MEM"$!$ VMI$CALLBACK - FIND_FILE - LOCK_ - MESSAGE - VMI$ROOT:[SYSEXE].EXE; - S - FOUND$ IF FOUND .NES. "" THEN -) $MESSAGE /OBJECT=VMI$KWD VMI$KWD:MSGLOCKF$ LINK /NOTRACEBACK /EXECUTABLE=VMI$KWD VMI$KWD:LOCK, MSGLOCK, LOCKRTL$!,$ IF .NOT. LOCK_USEDEC THEN $GOTO CUSTOMISE$!$ VMI$NO_OUTPUT0$ EDIT /NOJOURNAL /NOCOMMAND VMI$KWD:CLILOCK.CLD$SUBSTITUTE /IMAGE_DIRECTORY:// WHOLEEXIT$!$ VMI$CALLBACK - PROVIDE_DCL_COMMAND - CLILOCK.CLD$!$ VMI$CALLBACK - PROVIDE_DCL_HELP - HLPLOCK.HLP$!$ VMI$CALLBACK - PROVIDE_IMAGE - LOCK_ - LOCK.EXE; - VMI$ROOT:[SYSEXE]$!$ GOTO EXIT_SUCCESS$! $CUSTOMISE:D$ LOCK_EXE_DD= F$PARSE ("X.Y;42", LOCK_EXE, "VMI$ROOT:[SYSEXE]") - - "X.Y;42"@$ LOCK_CMD= F$PARSE (LOCK_CMD, "VMI$ROOT:[SYSLIB]DCLTABLES.EXE")3$ LOCK_CMD_DD= F$PARSE (LOCK_CMD, , , "DEVICE") + -& F$PARSE (LOCK_CMD, , , "DIRECTORY")%$ LOCK_CMD_NT= LOCK_CMD - LOCK_CMD_DD@$ LOCK_HELP= F$PARSE (LOCK_HELP, "VMI$ROOT:[SYSHLP]HELPLIB.HLB")5$ LOCK_HELP_DD= F$PARSE (LOCK_HELP, , , "DEVICE") + -' F$PARSE (LOCK_HELP, , , "DIRECTORY")($ LOCK_HELP_NT= LOCK_HELP - LOCK_HELP_DD$!0$ OPEN /WRITE LOCK_EDIT_CMD VMI$KWD:EDITCLD.COMH$ WRITE LOCK_EDIT_CMD "EDIT /NOJOURNAL /NOCOMMAND VMI$KWD:CLILOCK.CLD":$ WRITE LOCK_EDIT_CMD "SUBSTITUTE /IMAGE_DIRECTORY:/", - LOCK_EXE_DD, "/ WHOLE"$ WRITE LOCK_EDIT_CMD "EXIT"$ CLOSE LOCK_EDIT_CMD!$ @VMI$KWD:EDITCLD /OUTPUT=_NLA0:$!:$ BACKUP 'LOCK_HELP' /IGNORE=(INTERLOCK, NOBACKUP) VMI$KWD$ VMI$CALLBACK - UPDATE_LIBRARY - LOCK_ -% 'F$PARSE ("VMI$KWD:", LOCK_HELP)' - HELP - "/REPLACE" - VMI$KWD:HLPLOCK.HLP$ VMI$CALLBACK - PROVIDE_FILE - LOCK_ - 'LOCK_HELP_NT' - 'LOCK_HELP_DD'$!9$ BACKUP 'LOCK_CMD' /IGNORE=(INTERLOCK, NOBACKUP) VMI$KWD$ SET COMMAND VMI$KWD:CLILOCK -+ /TABLE='F$PARSE ("VMI$KWD:", LOCK_CMD)' -* /OUTPUT='F$PARSE ("VMI$KWD:", LOCK_CMD)'$ VMI$CALLBACK - PROVIDE_IMAGE - LOCK_ - 'LOCK_CMD_NT' - 'LOCK_CMD_DD'$!$ VMI$CALLBACK - PROVIDE_IMAGE - LOCK_ - LOCK.EXE - 'LOCK_EXE_DD'$!$ GOTO EXIT_SUCCESS$!$IVP:$ WRITE SYS$OUTPUT ""?$ WRITE SYS$OUTPUT " . . . Beginning the IVP at ", F$TIME (), - " . . ."$ WRITE SYS$OUTPUT ""$ TYPE SYS$INPUTIMessages from the master lock process have the full message text enabled,Kwhile messages from the slave lock process have the facility text disabled.$ SET MESSAGE - /FACILITY - /SEVERITY - /IDENTIFICATION - /TEXT$ SET COMMAND VMI$KWD:CLILOCK$$ LOCK IVP_LOCK /MODE=EXCLUSIVE /LOG3$ IF F$SEARCH ("VMI$KWD:SLAVE.GO;") .NES. "" THEN - $DELETE VMI$KWD:SLAVE.GO;* $ SPAWN - /NOLOG - /NOWAIT - @VMI$KWD:LOCKIVP $IVP_10$:$ WAIT 00:00:05?$ IF F$SEARCH ("VMI$KWD:SLAVE.GO;") .EQS. "" THEN $GOTO IVP_10$$!!$ LOCK IVP_LOCK /MODE=CWRITE /LOG$ LOCK IVP_LOCK /RELEASE /LOG$ EXIT VMI$_SUCCESS$*[COAR.WORK.KIT_BUILD.KIT]LOCK.B32;27+,z."/ 4N"!x->0123KPWO#56@r7k?89GHJ MODULE LOCK ( MAIN = LOCK,$ %TITLE'Lock resource at DCL level' IDENT = '1-002' ) = BEGIN !++ ! FACILITY: User utilities ! ! ABSTRACT: !H ! This program allows the user to lock resources using supervisor-mode9 ! locks, which will not be dequeued upon image rundown. !9 ! ENVIRONMENT: User mode, kernel mode, CMKRNL required, ! possibly SYSLCK ! ! AUTHOR: Ken A L Coar ! ! MODIFIED BY: !& ! KLC0292 Ken Coar 23-APR-1987 13:41> ! Changed message identifiers to reflect Modular Programing= ! Standard, now that this utility has been registered with ! Digital. !& ! KLC0265 Ken Coar 26-JAN-1987 11:56' ! Cleaned up documentation a little. !& ! KLC0178 Ken Coar 1-APR-1986 08:22 ! Genesis. !-- %SBTTL'Declarations' ! ! SWITCHES: ! SWITCHESE ADDRESSING_MODE (EXTERNAL = GENERAL, NONEXTERNAL = WORD_RELATIVE); ! ! LINKAGES: ! ! NONE. ! ! ! INCLUDE FILES: !0 LIBRARY 'SYS$LIBRARY:LIB'; ! LIB plus STARLET5 LIBRARY 'KEN_LIBRARY:KENLIB'; ! Local declarations ! ! FORWARD ROUTINES: ! FORWARD ROUTINE" EXIT_HANDLER : INTERNAL_CALL," KERNEL_CANCEL : INTERNAL_CALL, KERNEL_ENQ : INTERNAL_CALL,! KERNEL_POST : INTERNAL_CALL, LOCK : EXTERNAL_CALL; ! ! EXTERNAL REFERENCES: ! EXTERNAL ROUTINE CLI$GET_VALUE, CLI$PRESENT, LIB$GET_EF, LIB$LOOKUP_KEY, LIB$SYS_FAO, LIB_CLI_SIG_TO_RET; EXTERNAL LITERAL LOCK__CANCELLED, LOCK__CONVERTED, LOCK__LNMCONFLICT, LOCK__NOTLOCKED, LOCK__NOWAIT, LOCK__OBTAINED, LOCK__RELEASED, LOCK__WAIT; ! ! MACROS: ! ! NONE. ! ! ! EQUATED SYMBOLS: ! ! NONE. ! ! ! FIELDS: ! MDL_STRUCT (OP); MDL_FIELD (FLAGS, L, ); MDL_BIT( MASK, , (CONVERT, ), (QUEUED, ), (SYSLOCK, ), (RELEASE, ), (WAIT, ), (LOG, ) ); MDL_FIELD (MODE, B, ); MDL_FIELD (EF, L, ); MDL_LENGTH (LENGTH); MDL_END; ! ! PSECTS: ! RTL_PSECTS (FACILITY=LOCK); ! ! OWN STORAGE: ! OWN OP : BBLOCK [OP_K_LENGTH]* INITIAL (REP OP_K_LENGTH OF BYTE (0)), LKSTAT : _LKSB, ESTATUS : LONG, EBLOCK : VECTOR [4, LONG] PRESET( [1] = EXIT_HANDLER, [2] = 1, [3] = ESTATUS )," DSCR : DESCR (CLASS=DYNAMIC),& DRESOURCE : DESCR (CLASS=DYNAMIC),# DLNAME : DESCR (CLASS=DYNAMIC)," DMODE : DESCR (CLASS=DYNAMIC),# DOMODE : DESCR (CLASS=DYNAMIC), MESSAGE : VECTOR [10, LONG]; BIND KD_P1 = %ASCID'P1', KD_SCOPE = %ASCID'SCOPE', KD_MODE = %ASCID'MODE',! KD_RELEASE = %ASCID'RELEASE', KD_WAIT = %ASCID'WAIT', KD_LOG = %ASCID'LOG', KD_LNAME = %ASCID'LOCK_!AS',$ KD_LTABLE = %ASCID'LNM$PROCESS', KD_AF = %ASCID'!AF', KR_MODES = $KEY_TABLE( ('CREAD', LCK$K_CRMODE), ('CWRITE', LCK$K_CWMODE)," ('EXCLUSIVE', LCK$K_EXMODE), ('NULL', LCK$K_NLMODE), ('PREAD', LCK$K_PRMODE), ('PWRITE', LCK$K_PWMODE) ), KR_SCOPES = $KEY_TABLE( ('GROUP', 0), ('SYSTEM', 1) ); 6%SBTTL'EXIT_HANDLER - Cancel request on program abort' ROUTINE EXIT_HANDLER : INTERNAL_CALL = !++ ! FUNCTIONAL DESCRIPTION: !E ! This routine is called as an exit handler when the program abortsC ! unexpectedly. His task is to cancel an outstanding $ENQ .$ LOCK011.Az>$[COAR.WORK.KIT_BUILD.KIT]LOCK.B32;27106N""requestI ! in kernel mode so it doesn't complete after the program has run down. ! ! CALLING SEQUENCE: ! ! EXIT_HANDLER () ! ! FORMAL PARAMETERS: ! ! NONE. ! ! IMPLICIT INPUTS: !I ! OP control block describes how far we've gotten and what we're doing. ! ! IMPLICIT OUTPUTS: ! ! NONE. ! ! COMPLETION STATUS: !% ! SS$_NORMAL successful completion ! ! SIDE EFFECTS: !- ! Any outstanding lock request gets canned. ! !-- BEGIN LOCAL STATUS : LONG;4 IF NOT .OP [OP_V_QUEUED] THEN RETURN SS$_NORMAL;5 %CHECK (STATUS = $CMKRNL (ROUTIN=KERNEL_CANCEL)); !F ! Now, it's possible that the request was granted in the meantime,J ! so we shouldn't display the 'cancelled' message. We should, however,E ! ensure that the logical name gets defined, because it obviously7 ! hasn't if QUEUED is set and the lock was granted. !> IF .STATUS EQL SS$_CANCELGRANT THEN RETURN KERNEL_POST (); !E ! All right, we really cancelled an outstanding request. Tell the: ! user about it, and exit with the appropriate status. ! MESSAGE [0] = 4;" MESSAGE [1] = LOCK__CANCELLED; MESSAGE [2] = 2; MESSAGE [3] = 0; MESSAGE [4] = DRESOURCE; $PUTMSG (MSGVEC=MESSAGE);8 RETURN $EXIT (CODE=.MESSAGE [1] OR STS$M_INHIB_MSG); END; 2%SBTTL'KERNEL_CANCEL - Cancel outstanding request' ROUTINE KERNEL_CANCEL : INTERNAL_CALL = !++ ! FUNCTIONAL DESCRIPTION: !F ! This routine executes in kernel mode, and dequeues any outstandingH ! request on the lock block. We have to run in a higher mode than user7 ! because the locks are requested in supervisor mode. ! ! CALLING SEQUENCE: !" ! $CMKRNL (ROUTIN=KERNEL_CANCEL) ! ! FORMAL PARAMETERS: ! ! NONE. ! ! IMPLICIT INPUTS: ! ! LKSTAT is the lock block. ! ! IMPLICIT OUTPUTS: ! ! NONE. ! ! COMPLETION STATUS: !% ! SS$_NORMAL successful completion> ! SS$_CANCELGRANT success; lock was granted before we could ! abort the request ! ! SIDE EFFECTS: !0 ! Any outstanding lock requests are cancelled. ! !-- BEGIN RETURN $DEQ( LKID=.LKSTAT [LKSB_L_LOCKID], ACMODE=PSL$C_SUPER, FLAGS=LCK$M_CANCEL ); END; &%SBTTL'KERNEL_ENQ - Workhorse routine' ROUTINE KERNEL_ENQ : INTERNAL_CALL = !++ ! FUNCTIONAL DESCRIPTION: !F ! This routine is called by the main program once all the parametersH ! have been determined. We don't have to run in kernel mode, but sinceC ! that's the way we're protecting the logical name containing the" ! lock block, it's just as well. !I ! We do an $ENQ rather than an $ENQW because we want to be able to tell( ! the user we're waiting for his lock. ! ! CALLING SEQUENCE: ! ! $CMKRNL (ROUTIN=KERNEL_ENQ) ! ! FORMAL PARAMETERS: ! ! NONE. ! ! IMPLICIT INPUTS: !$ ! OP control block contains flags. ! ! IMPLICIT OUTPUTS: ! ! NONE. ! ! COMPLETION STATUS: !% ! SS$_NORMAL successful completion$ ! other status from $DEQ or $ENQ ! ! SIDE EFFECTS: ! ! NONE. ! !-- BEGIN LOCAL" ENQFLAGS : LONG INITIAL (0), STATUS : LONG; IF .OP [OP_V_WAIT]/ THEN ENQFLAGS = .ENQFLAGS OR LCK$M_SYNCSTS0 ELSE ENQFLAGS = .ENQFLAGS OR LCK$M_NOQUEUE;D IF .OP [OP_V_SYSLOCK] THEN ENQFLAGS = .ENQFLAGS OR LCK$M_SYSTEM;E IF .OP [OP_V_CONVERT] THEN ENQFLAGS = .ENQFLAGS OR LCK$M_CONVERT; IF .OP [OP_V_RELEASE]J THEN STATUS = $DEQ (LKID=.LKSTAT [LKSB_L_LOCKID], ACMODE=PSL$C_SUPER) ELSE BEGIN STATUS = $ENQ( EFN=.OP [OP_L_EF], LKMODE=.OP [OP_B_MODE], LKSB=LKSTAT, FLAGS = .ENQFLAGS, RESNAM=DLNAME, ACMODE=PSL$C_SUPER ); OP [OP_V_QUEUED] = 1; END; RETURN .STATUS; END; /%SBTTL'KERNEL_POST - Post process logical name' ROUTINE KERNEL_POST : INTERNAL_CALL = !++ ! FUNCTIONAL DESCRIPTION: !B ! This routine is called to either (re)set or remove the logical* ! name containing the lock status block. ! ! CALLING SEQUENCE: ! ! $CMKRNL (ROUTIN=KERNEL_POST) ! ! FORMAL PARAMETERS: ! ! NONE. ! ! IMPLICIT INPUTS: !5 ! OP control block, DLNAME descriptor of lock name. ! ! IMPLICIT OUTPUTS: ! ! NONE. ! ! COMPLETION STATUS: !% ! SS$_NORMAL successful completion ! ! SIDE EFFECTS: !8 ! Logical name described by DLNAME changed or deleted. ! !-- BEGIN LOCAL8 LNMLST : BBLOCK [28] INITIAL (REP 28 OF BYTE (0)); IF .OP [OP_V_RELEASE] THEN RETURN $DELLNM( TABNAM=KD_LTABLE, LOGNAM=DLNAME, ACMODE=%REF(PSL$C_KERNEL) );& LNMLST [0,0,16,0] = LKSB_K_LENGTH;$ LNMLST [2,0,16,0] = LNM$_STRING; LNMLST [4,0,32,0] = LKSTAT;& LNMLST [8,0,32,0] = LKSB_K_LENGTH;/ LNMLST [12,0,16,0] = .DMODE [DSC$W_LENGTH];% LNMLST [14,0,16,0] = LNM$_STRING;0 LNMLST [16,0,32,0] = .DMODE [DSC$A_POINTER]; RETURN $CRELNM( ATTR=%REF( LNM$M_NO_ALIAS OR LNM$M_CONFINE ), TABNAM=KD_LTABLE, LOGNAM=DLNAME, ACMODE=%REF(PSL$C_KERNEL), ITMLST=LNMLST ); END; %SBTTL'LOCK - Main program' GLOBAL ROUTINE LOCK : EXTERNAL_CALL = !++ ! FUNCTIONAL DESCRIPTION: !J ! This is the main program. It interrogates the command line to find out< ! what needs to be done, and calls routines appropriately. ! ! CALLING SEQUENCE: !" ! Called as main routine by DCL. ! ! FORMAL PARAMETERS: ! ! NONE. ! ! IMPLICIT INPUTS: !2 ! Must be running under DCL command interpreter. ! ! IMPLICIT OUTPUTS: ! ! NONE. ! ! COMPLETION STATUS: !4 ! LOCK__OBTAINED success; requested lock obtained. ! LOCK__RELEASED success; lock relinquished/ ! LOCK__CONVERTED success; lock mode changed= ! LOCK__NOWAIT failure; /NOWAIT was specified and lock was! ! not immediately obtainableB ! LOCK__CANCELLED failure; program was aborted (possibly by ^Y)2 ! before the lock was granted. Note that this4 ! is returned by EXIT_HANDLER, not the mainline ! code. ! ! SIDE EFFECTS: !D ! Lock at the appropriate mode either taken out or released on the% ! specified resource, or no change. ! !-- BEGIN LOCAL8 LNMLST : BBLOCK [40] INITIAL (REP 40 OF BYTE (0)), LNMEQV : BBLOCK [255], LNMLEN : WORD, LNMOMODE : BBLOCK [255], LNMMLEN : WORD, STATUS : LONG; ENABLE LIB_CLI_SIG_TO_RET; !D ! Get the resource name, and build up the internal name from it. !% %CHECK ($DCLEXH (DESBLK=EBLOCK));. %CHECK (CLI$GET_VALUE (KD_P1, DRESOURCE));: %CHECK (LIB$SYS_FAO (KD_LNAME, 0, DLNAME, DRESOURCE)); !A ! See if this is an existing resource we already have locked. ! LNMLST [0,0,16,0] = 255;$ LNMLST [2,0,16,0] = LNM$_STRING; LNMLST [4,0,32,0] = LNMEQV; LNMLST [8,0,32,0] = LNMLEN; LNMLST [12,0,16,0] = 4;$ LNMLST [14,0,16,0] = LNM$_INDEX;# LNMLST [16,0,32,0] = UPLIT (1); LNMLST [24,0,16,0] = 255;% LNMLST [26,0,16,0] = LNM$_STRING;" LNMLST [28,0,32,0] = LNMOMODE;! LNMLST [32,0,32,0] = LNMMLEN; STATUS = $TRNLNM( TABNAM=KD_LTABLE, LOGNAM=DLNAME, ACMODE=%REF(PSL$C_KERNEL), ITMLST=LNMLST );$ IF .STATUS NEQ SS$_NOLOGNAM THEN BEGIN %CHECK (); !K ! If the length of the equivalence name is not equal to the size of aL ! lock block, then *we* didn't define the name and we must abort. NoteL ! that this is unlikely, since the name must also be defined in KERNEL ! mode. !' IF .LNMLEN NEQ LKSB_K_LENGTH THEN BEGIN LOCAL MESSAGE : VECTOR [6, LONG] PRESET( [0] = 5, [1] = SS$_BUGCHECK, [2] = LOCK__LNMCONFLICT, [3] = 1, [4] = DLNAME );# %CHECK ($PUTMSG (MSGVEC=MESSAGE));( RETURN SS$_BUGCHECK OR STS$M_INHIB_MSG; END; !N ! Copy the lock block from the logical name into real storage for future ! reference. !. CH$MOVE (LKSB_K_LENGTH, LNMEQV, LKSTAT); !N ! Store the name of the mode it is currently locked at; if this is NOT aK ! release request, we will note the change in modes in the conversion ! message. !B %CHECK (LIB$SYS_FA \C$ LOCK011.Az>$[COAR.WORK.KIT_BUILD.KIT]LOCK.B32;27106N"XyO (KD_AF, 0, DOMODE, .LNMMLEN, LNMOMODE)); OP [OP_V_CONVERT] = 1; END; !I ! Get flags from the command qualifiers. Note that no assumptions areI ! made in the program; what actions are default are determined SOLELY ! by the command definition. !' %CHECK (LIB$GET_EF (OP [OP_L_EF]));) OP [OP_V_LOG] = CLI$PRESENT (KD_LOG);1 OP [OP_V_RELEASE] = CLI$PRESENT (KD_RELEASE); !J ! We have to tell him about his mistake if he tries to release what he ! doesn't have. !; IF .OP [OP_V_RELEASE] AND (NOT .OP [OP_V_CONVERT]) THEN BEGIN MESSAGE [0] = 3;$ MESSAGE [1] = LOCK__NOTLOCKED; MESSAGE [2] = 1; MESSAGE [3] = DRESOURCE; $PUTMSG (MSGVEC=MESSAGE);- RETURN .MESSAGE [1] OR STS$M_INHIB_MSG; END; !A ! Special actions if he's trying to release an existing lock. !" IF NOT .OP [OP_V_RELEASE] THEN BEGIN- OP [OP_V_WAIT] = CLI$PRESENT (KD_WAIT);. %CHECK (CLI$GET_VALUE (KD_MODE, DMODE));? %CHECK (LIB$LOOKUP_KEY (DMODE, KR_MODES, STATUS, DMODE)); OP [OP_B_MODE] = .STATUS;. %CHECK (CLI$GET_VALUE (KD_SCOPE, DSCR));> %CHECK (LIB$LOOKUP_KEY (DSCR, KR_SCOPES, STATUS, DSCR));" OP [OP_V_SYSLOCK] = .STATUS; END; !G ! Setup all done; change to kernel mode (to get locks at supervisor- ! mode) and twiddle things appropriately. !) STATUS = $CMKRNL (ROUTIN=KERNEL_ENQ); !# ! Now handle the return status. ! !J ! We'll get the NOTQUEUED status only if he specified /NOWAIT; we haveC ! no other interest in anything at all, since we were obviously ! unsuccessful. !% IF .STATUS EQL SS$_NOTQUEUED THEN BEGIN MESSAGE [0] = 4;! MESSAGE [1] = LOCK__NOWAIT; MESSAGE [2] = 2; MESSAGE [3] = 0; MESSAGE [4] = DRESOURCE; $PUTMSG (MSGVEC=MESSAGE);- RETURN .MESSAGE [1] OR STS$M_INHIB_MSG; END; !L ! Now for the hard part. If there was an error doing a $DEQ, we WILL NOT. ! do anything special about displaying it. ! IF .OP [OP_V_RELEASE] THEN BEGIN !D ! See if there was an error. On a release, we just return the ! error message. ! %CHECK (); MESSAGE [0] = 5;$ MESSAGE [1] = LOCK__RELEASED; MESSAGE [2] = 3; MESSAGE [3] = 0; MESSAGE [4] = DOMODE; MESSAGE [5] = DRESOURCE; END ELSE BEGIN; IF (.STATUS EQL SS$_NORMAL) AND .OP [OP_V_WAIT] THEN BEGIN !B ! If he wanted to wait for his lock, and he wanted to know if we? ! had to do so (/LOG present), then tell him what he wants to ! know. ! MESSAGE [0] = 4;" MESSAGE [1] = LOCK__WAIT; MESSAGE [2] = 2; MESSAGE [3] = 0;! MESSAGE [4] = DRESOURCE;9 IF .OP [OP_V_LOG] THEN $PUTMSG (MSGVEC=MESSAGE); !B ! No do like we said we were going to, and wait for his request. !1 $SYNCH (EFN=.OP [OP_L_EF], IOSB=LKSTAT); END; !G ! When we get here, we have succeeded. We have either gotten theD ! lock, converted it, or released it. Say the right things to@ ! the l'user. We basically just set up the message vectorE ! specific to each case. It will be displayed, if appropriate,% ! at the end of this sequence. ! IF .OP [OP_V_CONVERT] THEN BEGIN MESSAGE [0] = 6;( MESSAGE [1] = LOCK__CONVERTED; MESSAGE [2] = 4; MESSAGE [3] = 0; MESSAGE [4] = DOMODE;" MESSAGE [5] = DRESOURCE; MESSAGE [6] = DMODE; END ELSE BEGIN MESSAGE [0] = 5;' MESSAGE [1] = LOCK__OBTAINED; MESSAGE [2] = 3; MESSAGE [3] = 0; MESSAGE [4] = DMODE;" MESSAGE [5] = DRESOURCE; END; END;4 IF .OP [OP_V_LOG] THEN $PUTMSG (MSGVEC=MESSAGE);* %CHECK ($CMKRNL (ROUTIN=KERNEL_POST)); !eM ! Turn off the QUEUED flag because we've completed everything. Otherwise, M ! the exit handler will be given confusing instructions. We only want himt6 ! to do things if we fell out before getting here. !o OP [OP_V_QUEUED] = 0;n+ RETURN .MESSAGE [1] OR STS$M_INHIB_MSG;n END;C ENDELUDOM#*[COAR.WORK.KIT_BUILD.KIT]LOCK.LIS;3+, .V/ 4VV->0123KPWOW56`7Z89GHJ B 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 1G 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (1); 0001 0 MODULE LOCK; 0002 0 (; 0003 0 MAIN = LOCK,0; 0004 0 %TITLE'Lock resource at DCL level'; 0005 0 IDENT = '1-002'; 0006 0 ) = ; 0007 0 ; 0008 1 BEGIN; 0009 1 !++); 0010 1 ! FACILITY: User utilities; 0011 1 !; 0012 1 ! ABSTRACT:; 0013 1 !T; 0014 1 ! This program allows the user to lock resources using supervisor-modeE; 0015 1 ! locks, which will not be dequeued upon image rundown.; 0016 1 !E; 0017 1 ! ENVIRONMENT: User mode, kernel mode, CMKRNL required,!; 0018 1 ! possibly SYSLCK; 0019 1 !%; 0020 1 ! AUTHOR: Ken A L Coar; 0021 1 !; 0022 1 ! MODIFIED BY:; 0023 1 !2; 0024 1 ! KLC0292 Ken Coar 23-APR-1987 13:41J; 0025 1 ! Changed message identifiers to reflect Modular ProgramingI; 0026 1 ! Standard, now that this utility has been registered with; 0027 1 ! Digital.; 0028 1 !2; 0029 1 ! KLC0265 Ken Coar 26-JAN-1987 11:563; 0030 1 ! Cleaned up documentation a little.; 0031 1 !2; 0032 1 ! KLC0178 Ken Coar 1-APR-1986 08:22; 0033 1 ! Genesis.; 0034 1 !-- ; 0035 1 "; 0036 1 %SBTTL'Declarations' ; 0037 1 ; 0038 1 !; 0039 1 ! SWITCHES:; 0040 1 ! ; 0041 1 ; 0042 1 SWITCHESQ; 0043 1 ADDRESSING_MODE (EXTERNAL = GENERAL, NONEXTERNAL = WORD_RELATIVE); ; 0044 1 ; 0045 1 !; 0046 1 ! LINKAGES:; 0047 1 !; 0048 1 ! NONE.; 0049 1 ! ; 0050 1 ; 0051 1 !; 0052 1 ! INCLUDE FILES:; 0053 1 ! ; 0054 1 <; 0055 1 LIBRARY 'SYS$LIBRARY:LIB'; ! LIB plus STARLETA; 0056 1 LIBRARY 'KEN_LIBRARY:KENLIB'; ! Local declarations ; 0057 1  ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 2W1-002 Declarations 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (1); 0058 1 !!; 0059 1 ! FORWARD ROUTINES:; 0060 1 ! ; 0061 1 ; 0062 1 FORWARD ROUTINE.; 0063 1 EXIT_HANDLER : INTERNAL_CALL,.; 0064 1 KERNEL_CANCEL : INTERNAL_CALL,,; 0065 1 KERNEL_ENQ : INTERNAL_CALL,-; 0066 1 KERNEL_POST : INTERNAL_CALL,'; 0067 1 LOCK : EXTERNAL_CALL; ; 0068 1 ; 0069 1 !$; 0070 1 ! EXTERNAL REFERENCES:; 0071 1 ! ; 0072 1 ; 0073 1 EXTERNAL ROUTINE; 0074 1 CLI$GET_VALUE,; 0075 1 CLI$PRESENT,; 0076 1 LIB$GET_EF,; 0077 1 LIB$LOOKUP_KEY,; 0078 1 LIB$SYS_FAO,"; 0079 1 LIB_CLI_SIG_TO_RET; ; 0080 1 ; 0081 1 EXTERNAL LITERAL; 0082 1 LOCK__CANCELLED,; 0083 1 LOCK__CONVERTED,!; 0084 1 LOCK__LNMCONFLICT,; 0085 1 LOCK__NOTLOCKED,; 0086 1 LOCK__NOWAIT,; 0087 1 LOCK__OBTAINED,; 0088 1 LOCK__RELEASED,; 0089 1 LOCK__WAIT; ; 0090 1 ; 0091 1 !; 0092 1 ! MACROS:; 0093 1 !; 0094 1 ! NONE.; 0095 1 ! ; 0096 1 ; 0097 1 ! ; 0098 1 ! EQUATED SYMBOLS:; 0099 1 !; 0100 1 ! NONE.; 0101 1 ! ; 0102 1 ; 0103 1 !; 0104 1 ! FIELDS:; 0105 1 ! ; 0106 1 ; 0107 1 MDL_STRUCT (OP);%; 0108 1 MDL_FIELD (FLAGS, L, );; P 0109 1 MDL_BIT(; P 0110  +ۻ$ LOCK011.A >#[COAR.WORK.KIT_BUILD.KIT]LOCK.LIS;3COM;3V"1 MASK, ,; P 0111 1 (CONVERT, ),; P 0112 1 (QUEUED, ),; P 0113 1 (SYSLOCK, ),; P 0114 1 (RELEASE, ), ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 3W1-002 Declarations 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (1); P 0115 1 (WAIT, ),; P 0116 1 (LOG, ); 0117 1 );$; 0118 1 MDL_FIELD (MODE, B, );"; 0119 1 MDL_FIELD (EF, L, );"; 0120 1 MDL_LENGTH (LENGTH);; 0121 1 MDL_END; ; 0122 1 ; 0123 1 !; 0124 1 ! PSECTS:; 0125 1 ! ; 0126 1 ); 0127 1 RTL_PSECTS (FACILITY=LOCK); ; 0128 1 ; 0129 1 !; 0130 1 ! OWN STORAGE:; 0131 1 ! ; 0132 1 ; 0133 1 OWN*; 0134 1 OP : BBLOCK [OP_K_LENGTH]6; 0135 1 INITIAL (REP OP_K_LENGTH OF BYTE (0)),; 0136 1 LKSTAT : _LKSB,; 0137 1 ESTATUS : LONG,); 0138 1 EBLOCK : VECTOR [4, LONG]; 0139 1 PRESET($; 0140 1 [1] = EXIT_HANDLER,; 0141 1 [2] = 1,; 0142 1 [3] = ESTATUS; 0143 1 ),.; 0144 1 DSCR : DESCR (CLASS=DYNAMIC),2; 0145 1 DRESOURCE : DESCR (CLASS=DYNAMIC),/; 0146 1 DLNAME : DESCR (CLASS=DYNAMIC),.; 0147 1 DMODE : DESCR (CLASS=DYNAMIC),/; 0148 1 DOMODE : DESCR (CLASS=DYNAMIC),,; 0149 1 MESSAGE : VECTOR [10, LONG]; ; 0150 1 ; 0151 1 BIND#; 0152 1 KD_P1 = %ASCID'P1',); 0153 1 KD_SCOPE = %ASCID'SCOPE','; 0154 1 KD_MODE = %ASCID'MODE',-; 0155 1 KD_RELEASE = %ASCID'RELEASE','; 0156 1 KD_WAIT = %ASCID'WAIT',%; 0157 1 KD_LOG = %ASCID'LOG',,; 0158 1 KD_LNAME = %ASCID'LOCK_!AS',0; 0159 1 KD_LTABLE = %ASCID'LNM$PROCESS',$; 0160 1 KD_AF = %ASCID'!AF',&; P 0161 1 KR_MODES = $KEY_TABLE(*; P 0162 1 ('CREAD', LCK$K_CRMODE),+; P 0163 1 ('CWRITE', LCK$K_CWMODE),.; P 0164 1 ('EXCLUSIVE', LCK$K_EXMODE),); P 0165 1 ('NULL', LCK$K_NLMODE),*; P 0166 1 ('PREAD', LCK$K_PRMODE),*; P 0167 1 ('PWRITE', LCK$K_PWMODE); 0168 1 ),'; P 0169 1 KR_SCOPES = $KEY_TABLE(; P 0170 1 ('GROUP', 0),; P 0171 1 ('SYSTEM', 1) ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 4W1-002 Declarations 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (1); 0172 1 ); ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 5u1-002 EXIT_HANDLER - Cancel request on program abort 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (2)B; 0173 1 %SBTTL'EXIT_HANDLER - Cancel request on program abort'"; 0174 1 ROUTINE EXIT_HANDLER; 0175 1 : INTERNAL_CALL =; 0176 1 !++'; 0177 1 ! FUNCTIONAL DESCRIPTION:; 0178 1 !Q; 0179 1 ! This routine is called as an exit handler when the program abortsO; 0180 1 ! unexpectedly. His task is to cancel an outstanding $ENQ requestU; 0181 1 ! in kernel mode so it doesn't complete after the program has run down.; 0182 1 !!; 0183 1 ! CALLING SEQUENCE:; 0184 1 !; 0185 1 ! EXIT_HANDLER (); 0186 1 !"; 0187 1 ! FORMAL PARAMETERS:; 0188 1 !; 0189 1 ! NONE.; 0190 1 ! ; 0191 1 ! IMPLICIT INPUTS:; 0192 1 !U; 0193 1 ! OP control block describes how far we've gotten and what we're doing.; 0194 1 !!; 0195 1 ! IMPLICIT OUTPUTS:; 0196 1 !; 0197 1 ! NONE.; 0198 1 !"; 0199 1 ! COMPLETION STATUS:; 0200 1 !1; 0201 1 ! SS$_NORMAL successful completion; 0202 1 !; 0203 1 ! SIDE EFFECTS:; 0204 1 !9; 0205 1 ! Any outstanding lock request gets canned.; 0206 1 !; 0207 1 !--; 0208 2 BEGIN; 0209 2 LOCAL ; 0210 2 STATUS : LONG;@; 0211 2 IF NOT .OP [OP_V_QUEUED] THEN RETURN SS$_NORMAL;A; 0212 2 %CHECK (STATUS = $CMKRNL (ROUTIN=KERNEL_CANCEL));; 0213 2 !R; 0214 2 ! Now, it's possible that the request was granted in the meantime,V; 0215 2 ! so we shouldn't display the 'cancelled' message. We should, however,Q; 0216 2 ! ensure that the logical name gets defined, because it obviouslyC; 0217 2 ! hasn't if QUEUED is set and the lock was granted.; 0218 2 !J; 0219 2 IF .STATUS EQL SS$_CANCELGRANT THEN RETURN KERNEL_POST ();; 0220 2 !Q; 0221 2 ! All right, we really cancelled an outstanding request. Tell theF; 0222 2 ! user about it, and exit with the appropriate status.; 0223 2 ! ; 0224 2 MESSAGE [0] = 4;.; 0225 2 MESSAGE [1] = LOCK__CANCELLED; ; 0226 2 MESSAGE [2] = 2; ; 0227 2 MESSAGE [3] = 0;(; 0228 2 MESSAGE [4] = DRESOURCE;); 0229 2 $PUTMSG (MSGVEC=MESSAGE); ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 6u1-002 EXIT_HANDLER - Cancel request on program abort 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (2)D; 0230 2 RETURN $EXIT (CODE=.MESSAGE [1] OR STS$M_INHIB_MSG);; 0231 1 END;?; Routine Size: 106 bytes, Routine Base: _LOCK_CODE + 010C ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 7q1-002 KERNEL_CANCEL - Cancel outstanding request 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (3)>; 0232 1 %SBTTL'KERNEL_CANCEL - Cancel outstanding request'#; 0233 1 ROUTINE KERNEL_CANCEL; 0234 1 : INTERNAL_CALL =; 0235 1 !++'; 0236 1 ! FUNCTIONAL DESCRIPTION:; 0237 1 !R; 0238 1 ! This routine executes in kernel mode, and dequeues any outstandingT; 0239 1 ! request on the lock block. We have to run in a higher mode than userC; 0240 1 ! because the locks are requested in supervisor mode.; 0241 1 !!; 0242 1 ! CALLING SEQUENCE:; 0243 1 !.; 0244 1 ! $CMKRNL (ROUTIN=KERNEL_CANCEL); 0245 1 !"; 0246 1 ! FORMAL PARAMETERS:; 0247 1 !; 0248 1 ! NONE.; 0249 1 ! ; 0250 1 ! IMPLICIT INPUTS:; 0251 1 !); 0252 1 ! LKSTAT is the lock block.; 0253 1 !!; 0254 1 ! IMPLICIT OUTPUTS:; 0255 1 !; 0256 1 ! NONE.; 0257 1 !"; 0258 1 ! COMPLETION STATUS:; 0259 1 !1; 0260 1 ! SS$_NORMAL successful completionJ; 0261 1 ! SS$_CANCELGRANT success; lock was granted before we could$; 0262 1 ! abort the request; 0263 1 !; 0264 1 ! SIDE EFFECTS:; 0265 1 !<; 0266 1 ! Any outstanding lock requests are cancelled.; 0267 1 !; 0268 1 !--; 0269 2 BEGIN; P 0270 2 RETURN $DEQ(+; P 0271 2 LKID=.LKSTAT [LKSB_L_LOCKID],!; P 0272 2 ACMODE=PSL$C_SUPER, ; P 0273 2 FLAGS=LCK$M_CANCEL; 0274 2 );; 0275 1 END;>; Routine Size: 22 bytes, Routine Base: _LOCK_CODE + 0176 ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 8g1-002 KERNEL_ENQ - Workhorse routine 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (4)2; 0276 1 %SBTTL'KERNEL_ENQ - Workhorse routine' ; 0277 1 ROUTINE KERNEL_ENQ; 0278 1 : INTERNAL_CALL =; 0279 1 !++'; 0280 1 ! FUNCTIONAL DESCRIPTION:; 0281 1 !R; 0282 1 ! This routine is called by the main program once all the parametersT; 0283 1 ! have been determined. We don't have to run in kernel mode, but sinceO; 0284 1 ! that's the way we're protecting the logical name containing the.; 0285 1 ! lock block, it's just as well.; 0286 1 !U; 0287 1 ! We do an $ENQ rather than an $ENQW because we want to be able to tell4; 0288 1 ! the user we're waiting for his lock.; 0289 1 !!; 0290 1 ! CALLING SEQUENCE:; 0291 1 !+; 0292 1 ! $CMKRNL (ROUTIN=KERNEL_ENQ); 0293 1 !"; 0294 1 ! FORMAL PARAMETERS:; 0295 1 !; 0296 1 ! NONE.; 0297 1 ! ; 0298 1 ! IMPLICIT INPUTS:; 0299 1 !0; 0300 1 ! OP control block contains flags.; 0301 1 !!; 0302 1 ! IMPLICIT OUTPUTS:; 0303 1 !; 0304 1 ! NONE.; 0305 1 !"; 0306 1 ! COMPLETION STATUS:; 0307 1 !1; 0308 1 ! SS$_NORMAL successful completion0; 0309 1 ! other status from $DEQ or $ENQ; 0310 1 !; 0311 E~$ LOCK011.A >#[COAR.WORK.KIT_BUILD.KIT]LOCK.LIS;37106VD" 1 ! SIDE EFFECTS:; 0312 1 !; 0313 1 ! NONE.; 0314 1 !; 0315 1 !--; 0316 2 BEGIN; 0317 2 LOCAL.; 0318 2 ENQFLAGS : LONG INITIAL (0), ; 0319 2 STATUS : LONG;"; 0320 2 IF .OP [OP_V_WAIT];; 0321 2 THEN ENQFLAGS = .ENQFLAGS OR LCK$M_SYNCSTS<; 0322 2 ELSE ENQFLAGS = .ENQFLAGS OR LCK$M_NOQUEUE;P; 0323 2 IF .OP [OP_V_SYSLOCK] THEN ENQFLAGS = .ENQFLAGS OR LCK$M_SYSTEM;Q; 0324 2 IF .OP [OP_V_CONVERT] THEN ENQFLAGS = .ENQFLAGS OR LCK$M_CONVERT;%; 0325 2 IF .OP [OP_V_RELEASE]V; 0326 3 THEN STATUS = $DEQ (LKID=.LKSTAT [LKSB_L_LOCKID], ACMODE=PSL$C_SUPER); 0327 2 ELSE; 0328 3 BEGIN!; P 0329 3 STATUS = $ENQ(!; P 0330 3 EFN=.OP [OP_L_EF],&; P 0331 3 LKMODE=.OP [OP_B_MODE],; P 0332 3 LKSB=LKSTAT, ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 9g1-002 KERNEL_ENQ - Workhorse routine 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (4)!; P 0333 3 FLAGS = .ENQFLAGS,; P 0334 3 RESNAM=DLNAME,!; P 0335 3 ACMODE=PSL$C_SUPER; 0336 3 );(; 0337 3 OP [OP_V_QUEUED] = 1;; 0338 2 END;; 0339 2 RETURN .STATUS;; 0340 1 END;>; Routine Size: 89 bytes, Routine Base: _LOCK_CODE + 018C ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 10o1-002 KERNEL_POST - Post process logical name 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (5);; 0341 1 %SBTTL'KERNEL_POST - Post process logical name'!; 0342 1 ROUTINE KERNEL_POST; 0343 1 : INTERNAL_CALL =; 0344 1 !++'; 0345 1 ! FUNCTIONAL DESCRIPTION:; 0346 1 !N; 0347 1 ! This routine is called to either (re)set or remove the logical6; 0348 1 ! name containing the lock status block.; 0349 1 !!; 0350 1 ! CALLING SEQUENCE:; 0351 1 !,; 0352 1 ! $CMKRNL (ROUTIN=KERNEL_POST); 0353 1 !"; 0354 1 ! FORMAL PARAMETERS:; 0355 1 !; 0356 1 ! NONE.; 0357 1 ! ; 0358 1 ! IMPLICIT INPUTS:; 0359 1 !A; 0360 1 ! OP control block, DLNAME descriptor of lock name.; 0361 1 !!; 0362 1 ! IMPLICIT OUTPUTS:; 0363 1 !; 0364 1 ! NONE.; 0365 1 !"; 0366 1 ! COMPLETION STATUS:; 0367 1 !1; 0368 1 ! SS$_NORMAL successful completion; 0369 1 !; 0370 1 ! SIDE EFFECTS:; 0371 1 !D; 0372 1 ! Logical name described by DLNAME changed or deleted.; 0373 1 !; 0374 1 !--; 0375 2 BEGIN; 0376 2 LOCALD; 0377 2 LNMLST : BBLOCK [28] INITIAL (REP 28 OF BYTE (0));*; 0378 2 IF .OP [OP_V_RELEASE] THEN ; P 0379 2 RETURN $DELLNM( ; P 0380 2 TABNAM=KD_LTABLE,; P 0381 2 LOGNAM=DLNAME,(; P 0382 2 ACMODE=%REF(PSL$C_KERNEL); 0383 2 );2; 0384 2 LNMLST [0,0,16,0] = LKSB_K_LENGTH;0; 0385 2 LNMLST [2,0,16,0] = LNM$_STRING;+; 0386 2 LNMLST [4,0,32,0] = LKSTAT;2; 0387 2 LNMLST [8,0,32,0] = LKSB_K_LENGTH;;; 0388 2 LNMLST [12,0,16,0] = .DMODE [DSC$W_LENGTH];1; 0389 2 LNMLST [14,0,16,0] = LNM$_STRING;<; 0390 2 LNMLST [16,0,32,0] = .DMODE [DSC$A_POINTER];; P 0391 2 RETURN $CRELNM(; P 0392 2 ATTR=%REF("; P 0393 2 LNM$M_NO_ALIAS OR; P 0394 2 LNM$M_CONFINE; P 0395 2 ), ; P 0396 2 TABNAM=KD_LTABLE,; P 0397 2 LOGNAM=DLNAME, ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 11o1-002 KERNEL_POST - Post process logical name 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (5)); P 0398 2 ACMODE=%REF(PSL$C_KERNEL),; P 0399 2 ITMLST=LNMLST; 0400 2 );; 0401 1 END;?; Routine Size: 106 bytes, Routine Base: _LOCK_CODE + 0204 ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 12V]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6)C'; 0402 1 %SBTTL'LOCK - Main program'!; 0403 1 GLOBAL ROUTINE LOCK=; 0404 1 : EXTERNAL_CALL = ; 0405 1 !++e'; 0406 1 ! FUNCTIONAL DESCRIPTION:0; 0407 1 !0V; 0408 1 ! This is the main program. It interrogates the command line to find outH; 0409 1 ! what needs to be done, and calls routines appropriately.; 0410 1 !o!; 0411 1 ! CALLING SEQUENCE:c; 0412 1 !o.; 0413 1 ! Called as main routine by DCL.; 0414 1 !a"; 0415 1 ! FORMAL PARAMETERS:; 0416 1 !O; 0417 1 ! NONE.l; 0418 1 !u ; 0419 1 ! IMPLICIT INPUTS:; 0420 1 !9>; 0421 1 ! Must be running under DCL command interpreter.; 0422 1 ! !; 0423 1 ! IMPLICIT OUTPUTS: ; 0424 1 !0; 0425 1 ! NONE.7; 0426 1 ! "; 0427 1 ! COMPLETION STATUS:; 0428 1 ! @; 0429 1 ! LOCK__OBTAINED success; requested lock obtained:; 0430 1 ! LOCK__RELEASED success; lock relinquished;; 0431 1 ! LOCK__CONVERTED success; lock mode changed I; 0432 1 ! LOCK__NOWAIT failure; /NOWAIT was specified and lock was0-; 0433 1 ! not immediately obtainable N; 0434 1 ! LOCK__CANCELLED failure; program was aborted (possibly by ^Y)>; 0435 1 ! before the lock was granted. Note that this@; 0436 1 ! is returned by EXIT_HANDLER, not the mainline; 0437 1 ! code.; 0438 1 !=; 0439 1 ! SIDE EFFECTS:L; 0440 1 !4P; 0441 1 ! Lock at the appropriate mode either taken out or released on the1; 0442 1 ! specified resource, or no change.1; 0443 1 !2; 0444 1 !--E; 0445 2 BEGIN; 0446 2 LOCAL D; 0447 2 LNMLST : BBLOCK [40] INITIAL (REP 40 OF BYTE (0)),(; 0448 2 LNMEQV : BBLOCK [255], ; 0449 2 LNMLEN : WORD,*; 0450 2 LNMOMODE : BBLOCK [255],!; 0451 2 LNMMLEN : WORD,g ; 0452 2 STATUS : LONG;*; 0453 2 ENABLE LIB_CLI_SIG_TO_RET;; 0454 2 !P; 0455 2 ! Get the resource name, and build up the internal name from it.; 0456 2 ! 1; 0457 2 %CHECK ($DCLEXH (DESBLK=EBLOCK));N:; 0458 2 %CHECK (CLI$GET_VALUE (KD_P1, DRESOURCE)); ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 13 ]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6)RF; 0459 2 %CHECK (LIB$SYS_FAO (KD_LNAME, 0, DLNAME, DRESOURCE));; 0460 2 !IM; 0461 2 ! See if this is an existing resource we already have locked.7; 0462 2 !E(; 0463 2 LNMLST [0,0,16,0] = 255;0; 0464 2 LNMLST [2,0,16,0] = LNM$_STRING;+; 0465 2 LNMLST [4,0,32,0] = LNMEQV;C+; 0466 2 LNMLST [8,0,32,0] = LNMLEN;'; 0467 2 LNMLST [12,0,16,0] = 4;00; 0468 2 LNMLST [14,0,16,0] = LNM$_INDEX;/; 0469 2 LNMLST [16,0,32,0] = UPLIT (1); ); 0470 2 LNMLST [24,0,16,0] = 255;W1; 0471 2 LNMLST [26,0,16,0] = LNM$_STRING; .; 0472 2 LNMLST [28,0,32,0] = LNMOMODE;-; 0473 2 LNMLST [32,0,32,0] = LNMMLEN; !; P 0474 2 STATUS = $TRNLNM(B ; P 0475 2 TABNAM=KD_LTABLE,; P 0476 2 LOGNAM=DLNAME,); P 0477 2 ACMODE=%REF(PSL$C_KERNEL), ; P 0478 2 ITMLST=LNMLST; 0479 2 );0; 0480 2 IF .STATUS NEQ SS$_NOLOGNAM THEN; 0481 3 BEGIN; 0482 3 %CHECK ();; 0483 3 ! W; 0484 3 ! If the length of the equivalence name is not equal to the size of aLX; 0485 3 ! lock block, then *we* didn't define the name and we must abort. NoteX; 0486 3 ! that this is unlikely, since the name must also be defined in KERNEL; 0487 3 ! mode.1; 0488 3 ! 3; 0489 3 IF .LNMLEN NEQ LKSB_K_LENGTH THEN ; 0490 4 BEGIN; 0491 4 LOCAL(; 0492 4 MESSAGE : VECTOR [6, LONG]; 0493 4 PRESET(_; 0494 4 [0] = 5,3$; 0495 4 [1] = SS$_BUGCHECK,); 0496 4 [2] = LOCK__LNMCONFLICT, ; 0497 4 [3] = 1,; 0498 4 [4] = DLNAME; 0499 4 );/; 0500 4 %CHECK ($PUTMSG (MSGVEC=MESSAGE)); 4; 0501 4 RETURN SS$_BUGCHECK OR STS$M_INHIB_MSG;; 0502 3 END;P; 0503 3 !(Z; 0504 3 ! Copy the lock block from the logical name into real storage for future; 0505 3 ! reference.; 0506 3 ! :; 0507 3  Fc)$ LOCK011.A >#[COAR.WORK.KIT_BUILD.KIT]LOCK.LIS;37106V"* CH$MOVE (LKSB_K_LENGTH, LNMEQV, LKSTAT);; 0508 3 ![Z; 0509 3 ! Store the name of the mode it is currently locked at; if this is NOT aW; 0510 3 ! release request, we will note the change in modes in the conversionA; 0511 3 ! message.; 0512 3 !CN; 0513 3 %CHECK (LIB$SYS_FAO (KD_AF, 0, DOMODE, .LNMMLEN, LNMOMODE));(; 0514 3 OP [OP_V_CONVERT] = 1;; 0515 2 END;  K]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 14C]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6)I; 0516 2 !KU; 0517 2 ! Get flags from the command qualifiers. Note that no assumptions are_U; 0518 2 ! made in the program; what actions are default are determined SOLELY_,; 0519 2 ! by the command definition.; 0520 2 !3; 0521 2 %CHECK (LIB$GET_EF (OP [OP_L_EF]));45; 0522 2 OP [OP_V_LOG] = CLI$PRESENT (KD_LOG); =; 0523 2 OP [OP_V_RELEASE] = CLI$PRESENT (KD_RELEASE);R; 0524 2 ! V; 0525 2 ! We have to tell him about his mistake if he tries to release what he; 0526 2 ! doesn't have.U; 0527 2 ! G; 0528 2 IF .OP [OP_V_RELEASE] AND (NOT .OP [OP_V_CONVERT]) THEN7; 0529 3 BEGIN"; 0530 3 MESSAGE [0] = 3;0; 0531 3 MESSAGE [1] = LOCK__NOTLOCKED;"; 0532 3 MESSAGE [2] = 1;*; 0533 3 MESSAGE [3] = DRESOURCE;+; 0534 3 $PUTMSG (MSGVEC=MESSAGE);i9; 0535 3 RETURN .MESSAGE [1] OR STS$M_INHIB_MSG;r; 0536 2 END; ; 0537 2 !6M; 0538 2 ! Special actions if he's trying to release an existing lock. ; 0539 2 ! .; 0540 2 IF NOT .OP [OP_V_RELEASE] THEN; 0541 3 BEGIN9; 0542 3 OP [OP_V_WAIT] = CLI$PRESENT (KD_WAIT);L:; 0543 3 %CHECK (CLI$GET_VALUE (KD_MODE, DMODE));K; 0544 3 %CHECK (LIB$LOOKUP_KEY (DMODE, KR_MODES, STATUS, DMODE));x+; 0545 3 OP [OP_B_MODE] = .STATUS;g:; 0546 3 %CHECK (CLI$GET_VALUE (KD_SCOPE, DSCR));J; 0547 3 %CHECK (LIB$LOOKUP_KEY (DSCR, KR_SCOPES, STATUS, DSCR));.; 0548 3 OP [OP_V_SYSLOCK] = .STATUS;; 0549 2 END;; 0550 2 !S; 0551 2 ! Setup all done; change to kernel mode (to get locks at supervisor09; 0552 2 ! mode) and twiddle things appropriately.; 0553 2 !P5; 0554 2 STATUS = $CMKRNL (ROUTIN=KERNEL_ENQ);w; 0555 2 !1/; 0556 2 ! Now handle the return status. ; 0557 2 ! ; 0558 2 !V; 0559 2 ! We'll get the NOTQUEUED status only if he specified /NOWAIT; we haveO; 0560 2 ! no other interest in anything at all, since we were obviouslyS; 0561 2 ! unsuccessful. ; 0562 2 ! 1; 0563 2 IF .STATUS EQL SS$_NOTQUEUED THEN2; 0564 3 BEGIN"; 0565 3 MESSAGE [0] = 4;-; 0566 3 MESSAGE [1] = LOCK__NOWAIT; "; 0567 3 MESSAGE [2] = 2;"; 0568 3 MESSAGE [3] = 0;*; 0569 3 MESSAGE [4] = DRESOURCE;+; 0570 3 $PUTMSG (MSGVEC=MESSAGE);,9; 0571 3 RETURN .MESSAGE [1] OR STS$M_INHIB_MSG;,; 0572 2 END;w h]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 15 ]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6) ; 0573 2 !X; 0574 2 ! Now for the hard part. If there was an error doing a $DEQ, we WILL NOT:; 0575 2 ! do anything special about displaying it.; 0576 2 ! %; 0577 2 IF .OP [OP_V_RELEASE]2; 0578 2 THEN,; 0579 3 BEGINr; 0580 3 !P; 0581 3 ! See if there was an error. On a release, we just return the#; 0582 3 ! error message.2; 0583 3 !; 0584 3 %CHECK (); #; 0585 3 MESSAGE [0] = 5;90; 0586 3 MESSAGE [1] = LOCK__RELEASED;#; 0587 3 MESSAGE [2] = 3;1#; 0588 3 MESSAGE [3] = 0;P(; 0589 3 MESSAGE [4] = DOMODE;+; 0590 3 MESSAGE [5] = DRESOURCE;N; 0591 3 ENDL; 0592 2 ELSE ; 0593 3 BEGIN(G; 0594 3 IF (.STATUS EQL SS$_NORMAL) AND .OP [OP_V_WAIT] THEN ; 0595 4 BEGINe; 0596 4 !EN; 0597 4 ! If he wanted to wait for his lock, and he wanted to know if weK; 0598 4 ! had to do so (/LOG present), then tell him what he wants tou; 0599 4 ! know.6; 0600 4 !R%; 0601 4 MESSAGE [0] = 4; .; 0602 4 MESSAGE [1] = LOCK__WAIT;%; 0603 4 MESSAGE [2] = 2;E; 0604 4 MESSAGE [3] = 0;-; 0605 4 MESSAGE [4] = DRESOURCE;IE; 0606 4 IF .OP [OP_V_LOG] THEN $PUTMSG (MSGVEC=MESSAGE);u; 0607 4 !eN; 0608 4 ! No do like we said we were going to, and wait for his request.; 0609 4 !g=; 0610 4 $SYNCH (EFN=.OP [OP_L_EF], IOSB=LKSTAT);s; 0611 3 END;; 0612 3 !S; 0613 3 ! When we get here, we have succeeded. We have either gotten theNP; 0614 3 ! lock, converted it, or released it. Say the right things toL; 0615 3 ! the l'user. We basically just set up the message vectorQ; 0616 3 ! specific to each case. It will be displayed, if appropriate, 1; 0617 3 ! at the end of this sequence. ; 0618 3 !(; 0619 3 IF .OP [OP_V_CONVERT]; 0620 3 THEN; 0621 4 BEGIN&; 0622 4 MESSAGE [0] = 6;4; 0623 4 MESSAGE [1] = LOCK__CONVERTED;&; 0624 4 MESSAGE [2] = 4;; 0625 4 MESSAGE [3] = 0;4+; 0626 4 MESSAGE [4] = DOMODE; .; 0627 4 MESSAGE [5] = DRESOURCE;*; 0628 4 MESSAGE [6] = DMODE;; 0629 4 END ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 16L]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6) ; 0630 3 ELSE; 0631 4 BEGIN&; 0632 4 MESSAGE [0] = 5;3; 0633 4 MESSAGE [1] = LOCK__OBTAINED; &; 0634 4 MESSAGE [2] = 3;; 0635 4 MESSAGE [3] = 0;6*; 0636 4 MESSAGE [4] = DMODE;.; 0637 4 MESSAGE [5] = DRESOURCE;; 0638 3 END;N; 0639 2 END;@; 0640 2 IF .OP [OP_V_LOG] THEN $PUTMSG (MSGVEC=MESSAGE);6; 0641 2 %CHECK ($CMKRNL (ROUTIN=KERNEL_POST));; 0642 2 !dY; 0643 2 ! Turn off the QUEUED flag because we've completed everything. Otherwise,tY; 0644 2 ! the exit handler will be given confusing instructions. We only want him B; 0645 2 ! to do things if we fell out before getting here.; 0646 2 ! %; 0647 2 OP [OP_V_QUEUED] = 0;a7; 0648 2 RETURN .MESSAGE [1] OR STS$M_INHIB_MSG; ; 0649 1 END;r?; Routine Size: 707 bytes, Routine Base: _LOCK_CODE + 02B0L ; 0650 1 ; 0651 1 END; 0652 0 ELUDOM2Symbol Type Defined Referenced ...2------------------ -------- ----- -----------------$$KEY_ENTRY Macro Lib02 168 172 M,$$KEY_INIT Macro Lib02 168 172 2$CMKRNL KeyWMacr Lib01 212 554 641 "$CRELNM KeyWMacr Lib01 391 "$DCLEXH KeyWMacr Lib01 457 "$DELLNM KeyWMacr Lib01 379 '$DEQ KeyWMacr Lib01 270 326 $ENQ KeyWMacr Lib01 329 u $EXIT KeyWMacr Lib01 230 ,$KEY_TABLE Macro Lib02 161 169 J$PUTMSG KeyWMacr Lib01 229 500 534 570 606 640 !$SYNCH KeyWMacr Lib01 610 "$TRNLNM KeyWMacr Lib01 474 y%CHECK Macro Lib02 212 457 458 459 482 500 513 521 543 544 546 547 P 584 641 IBBLOCK Structur Lib02 134 136 377 447 448 450 N7CLI$GET_VALUE ExtRout 74 458c 543c 546c .5CLI$PRESENT ExtRout 75 522c 523c 542c S@DESCR KeyWMacr Lib02 144 145 146 147 148 QDLNAME Own 146 146= 336a 383a 400a 459a 479a 498a EPDMODE Own 147 147= 388. 390. 543a 544a 628a 636a 9DOMODE Own 148 148= 513a 589a 626a UkDRESOURCE Own 145 145= 228a 458a 459a 533a 569a 590a 605a 627a 637a KODSC$A_POINTER Macro Lib01 144 145 146 147 148 390 3EDSC$B_CLASS Macro Lib01 144 145 146 147 148 r $ LOCK011.A >#[COAR.WORK.KIT_BUILD.KIT]LOCK.LIS;3COM;3VM";EDSC$B_DTYPE Macro Lib01 144 145 146 147 148  ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 173]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6) 2Symbol Type Defined Referenced ...2------------------ -------- ----- ----------------GDSC$K_CLASS_A Unbound 144 145 146 147 148 iGDSC$K_CLASS_D Literal Lib01 144 145 146 147 148 aGDSC$K_CLASS_S Unbound 144 145 146 147 148 GDSC$K_CLASS_Z Unbound 144 145 146 147 148 GDSC$K_DTYPE_T Unbound 144 145 146 147 148 GDSC$K_DTYPE_V Unbound 144 145 146 147 148 GDSC$K_DTYPE_Z Literal Lib01 144 145 146 147 148 3NDSC$W_LENGTH Macro Lib01 144 145 146 147 148 388 /DSCR Own 144 144= 546a 547a 29EBLOCK Own 138 140= 141= 142= 457a jENQFLAGS Local 318 318= 321= 321. 322= 322. 323= 323. 324= 324. 336. "ESTATUS Own 137 142a .EXIT_HANDLER Routine 175 63f 140a /EXTERNAL_CALL Macro Lib02 67 404 _INTERNAL_CALL Macro Lib02 63 64 65 66 175 234 278 343 KD_AF Bind 160 513a "KD_LNAME Bind 158 459a !KD_LOG Bind 157 522a 3KD_LTABLE Bind 159 383a 400a 479a "KD_MODE Bind 154 543a KD_P1 Bind 152 458a $KD_RELEASE Bind 155 523a "KD_SCOPE Bind 153 546a "KD_WAIT Bind 156 542a /KERNEL_CANCEL Routine 234 64f 212a 3,KERNEL_ENQ Routine 278 65f 554a 5KERNEL_POST Routine 343 66f 219c 641a L"KR_MODES Bind 161 544a #KR_SCOPES Bind 169 547a E&LCK$K_CRMODE Literal Lib01 168 &LCK$K_CWMODE Literal Lib01 168 &LCK$K_EXMODE Literal Lib01 168 &LCK$K_NLMODE Literal Lib01 168 &LCK$K_PRMODE Literal Lib01 168 &LCK$K_PWMODE Literal Lib01 168 &LCK$M_CANCEL Literal Lib01 274 'LCK$M_CONVERT Literal Lib01 324 ]'LCK$M_NOQUEUE Literal Lib01 322 ['LCK$M_SYNCSTS Literal Lib01 321 &LCK$M_SYSTEM Literal Lib01 323 $LIB$GET_EF ExtRout 76 521c 0LIB$LOOKUP_KEY ExtRout 77 544c 547c -LIB$SYS_FAO ExtRout 78 459c 513c A)LIB_CLI_SIG_TO_RET ExtRout 79 453h OGLKSB_K_LENGTH Literal Lib02 136 384 387 489 507 1/LKSB_L_LOCKID Macro Lib02 271 326 cILKSTAT Own 136 274. 326. 336a 386a 507= 610a 7'LNM$M_CONFINE Literal Lib01 400 C(LNM$M_NO_ALIAS Literal Lib01 400 $LNM$_INDEX Literal Lib01 468 =LNM$_STRING Literal Lib01 385 389 464 471 +)LNMEQV Local 448 465a 507. v)LNMLEN Local 449 466a 489. 4aLNMLST Local 377 377= 384= 385= 386= 387= 388= 389= 390= 400a Ls Local 447 447= 463= 464= 465= 466= 467= 468= 469= 470= 471= 472= 473= E L]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 184]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6) 2Symbol Type Defined Referenced ...2------------------ -------- ----- ---------------- 479a 2*LNMMLEN Local 451 473a 513. *LNMOMODE Local 450 472a 513a LOCK GlobRout 404 67f )LOCK__CANCELLED ExtLit 82 225a )LOCK__CONVERTED ExtLit 83 623a )LOCK__LNMCONFLICT ExtLit 84 496a n)LOCK__NOTLOCKED ExtLit 85 531a &LOCK__NOWAIT ExtLit 86 566a (LOCK__OBTAINED ExtLit 87 633a (LOCK__RELEASED ExtLit 88 586a $LOCK__WAIT ExtLit 89 602a "MDL_BIT Macro Lib02 109 &MDL_CONSTANT Macro Lib02 120 "MDL_END Macro Lib02 121 3MDL_FIELD Macro Lib02 108 118 119 o$MDL_LENGTH Macro Lib02 120 $MDL_STRUCT Macro Lib02 107 "MDL__BIT Macro Lib02 117 &MDL__CLEANUP Unbound 107  Macro 107 121u e%MDL__DEFINE Macro Lib02 120 1MDL__ERASE_SAVED Unbound 107 121 e Macro Lib02 121 <MDL__MACRO Macro Lib02 108 117 118 119 $MDL__NULL1 Unbound 107  Macro 107 121u 4$MDL__NULL2 Unbound 107 + Macro 107 117 120 121u e$MDL__NULLN Unbound 107  Macro 107 121u 4$MDL__PARM1 Unbound 107  Macro 107 121u ,MDL__PARM2 Unbound 107 117 + Macro 107 117 120 121u $MDL__PARMN Unbound 107  Macro 107 121u zMESSAGE Own 149 224= 225= 226= 227= 228= 229a 230. 530= 531= 532= 533= 534a e 535. 565= 566= 567= 568= 569= 570a 571. 585= 586= 587= 588= e 589= 590= 601= 602= 603= 604= 605= 606a 622= 623= 624= 625= ] 626= 627= 628= 632= 633= 634= 635= 636= 637= 640a 648. 2K Local 492 494= 495= 496= 497= 498= 499= 500a nOP Unbound 107 6s Own 134 135= 211. 320. 323. 324. 325. 336. 337= 378. 514= 521a 522= ;e 523= 528. 540. 542= 545= 548= 577. 594. 606. 610. 619. 640. 647= E+OP_B_MODE Macro 118 331 545 OP_C_LENGTH Literal 120 -OP_K_LENGTH Literal 120 134 135 02OP_L_EF Macro 119 330 521 610 OP_L_FLAGS Macro 108OP_M_CONVERT Literal 117OP_M_LOG Literal 117OP_M_QUEUED Literal 117TOP_M_RELEASE Literal 117 0]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 192]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6)42Symbol Type Defined Referenced ...2------------------ -------- ----- ----------------OP_M_SYSLOCK Literal 117OP_M_WAIT Literal 117>OP_V_CONVERT Macro 117 324 514 528 619 2OP_V_LOG Macro 117 522 606 640 5OP_V_QUEUED Macro 117 211 337 647 tNOP_V_RELEASE Macro 117 325 378 523 528 540 577 .OP_V_SYSLOCK Macro 117 323 548 3OP_V_WAIT Macro 117 320 542 594 tP1 MacrForm 107 107  MacrForm 107i MacrForm 107  MacrForm 107 107  MacrForm 107  MacrForm 107SP2 MacrForm 1074 MacrForm 107 107  MacrForm 107  MacrForm 107, MacrForm 107 107 T MacrForm 107[6PSL$C_KERNEL Literal Lib01 383 400 479 5PSL$C_SUPER Literal Lib01 274 326 336 ]$RTL_PSECTS KeyWMacr Lib02 127 SDL$STARLET_CONCAT Macro Lib01 212 229 230 274 326 336 383 400 457 479 500 534 5 554 570 606 610 640 641 4SDL$STARLET_REQ Macro Lib01 212 229 336 383 400 457 479 500 534 554 570 606  640 641 .SS$_BUGCHECK Literal Lib01 495 501 )SS$_CANCELGRANT Literal Lib01 219 h&SS$_NOLOGNAM Literal Lib01 480 ,SS$_NORMAL Literal Lib01 211 594 'SS$_NOTQUEUED Literal Lib01 563 ySTATUS Unbound 212 457 458 459 500 513 521 543 544 546 547 641 # Local 210 212= 219. + Local 319 326= 329= 339. 5k Local 452 474= 480. 482. 544a 545. 547a 548. 554= 563. 584. 594. $STRUCT_BIT Unbound 107 # Comptime 107 117 121u E1STRUCT_BITWIDTH Unbound 107 117 # Comptime 107 117 121u a%STRUCT_BYTE Unbound 107 ; Comptime 107 108 118 119 120 121u 'STRUCT_INCR_K Unbound 107  Comptime 107 121u t#STRUCT_K_ Unbound 107  Literal 107 121u P$STRUCT_K_A Unbound 107  Literal 107 121u $STRU($ LOCK011.A >#[COAR.WORK.KIT_BUILD.KIT]LOCK.LIS;37106VLCT_K_B Unbound 107 # Literal 107 118 121u $STRUCT_K_G Unbound 107  Literal 107 121u h$STRUCT_K_L Unbound 107 + Literal 107 108 119 121u $STRUCT_K_Q Unbound 107  N]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 205]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6) 2Symbol Type Defined Referenced ...2------------------ -------- ----- ---------------- Literal 107 121u $STRUCT_K_R Unbound 107  Literal 107 121u $STRUCT_K_T Unbound 107  Literal 107 121u $STRUCT_K_W Unbound 107  Literal 107 121u %STRUCT_MASK Unbound 107 I Comptime 107 121u ESTRUCT_NAME Unbound 107 108 118 119 121 C Macro 107 108 117 118 119 120 121u /STRUCT_NEXT_K Unbound 107 120 6 Comptime 107 121u U'STRUCT_PREFIX Unbound 107 C Macro 107 121u R&STRUCT_SAVED Unbound 107  Comptime 107 121u UHSTRUCT_SCRATCH Unbound 107 108 118 119 121 # Comptime 107 117 121u &STRUCT_SIZE_ Unbound 107  Literal 107 121u o'STRUCT_SIZE_A Unbound 107  Literal 107 121u N'STRUCT_SIZE_B Unbound 107 5# Literal 107 118 121u t'STRUCT_SIZE_G Unbound 107  Literal 107 121u e'STRUCT_SIZE_L Unbound 107 e+ Literal 107 108 119 121u r'STRUCT_SIZE_Q Unbound 107 r Literal 107 121u 'STRUCT_SIZE_R Unbound 107  Literal 107 121u $'STRUCT_SIZE_T Unbound 107  Literal 107 121u 'STRUCT_SIZE_W Unbound 107 K Literal 107 121u (STRUCT_SUBBYTE Unbound 107 ; Comptime 107 108 117 118 119 121u 5ISTS$M_INHIB_MSG Literal Lib01 230 501 535 571 648 1DSYS$CMKRNL ExtRout 212 212c 554e 554c 641e 641c $SYS$CRELNM ExtRout 400 400c $SYS$DCLEXH ExtRout 457 457c $SYS$DELLNM ExtRout 383 383c 2SYS$DEQ ExtRout 274 274c 326e 326c "SYS$ENQ ExtRout 336 336c "SYS$EXIT ExtRout 230 230c tSYS$PUTMSG ExtRout 229 229c 500e 500c 534e 534c 570e 570c 606e 606c 640e 640c #SYS$SYNCH ExtRout 610 610c V$SYS$TRNLNM ExtRout 479 479c _CODE KeyWMacr Lib02 127 _DATA KeyWMacr Lib02 127 _LKSB Macro Lib02 136 +___STATUS Local 212 212= 212. !# Local 457 457= 457. ! ]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 21[]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6)P2Symbol Type Defined Referenced ...2------------------ -------- ----- ----------------# Local 458 458= 458. 5# Local 459 459= 459. # Local 482 482= 482. [# Local 500 500= 500. # Local 513 513= 513. # Local 521 521= 521. ,# Local 543 543= 543. 8# Local 544 544= 544. t# Local 546 546= 546. 5# Local 547 547= 547. # Local 584 584= 584. # Local 641 641= 641. C CROSS REFERENCE MAP Line # Event File ... !----- --------------- --------- ; 1 Source (start) KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27O 2 Module LOCK/ 55 Library #1 SYS$SYSROOT:[SYSLIB]LIB.L32;2 8 56 Library #2 KEN_01:[COAR.VMS.SYSLIB]KENLIB.L32;106 652 Eludom LOCK KEY TO REFERENCE TYPE FLAGS . Fetch = Store c Routine call  a Address use @ Indirect use6B e External, external routine, or external literal declaration- f Forward or forward routine declarationd! h Condition handler enablingt m Map declaration u Undeclare declaration; Library Statisticst;9; -------- Symbols -------- Pages Processingl9; File Total Loaded Percent Mapped Timet; Z; SYS$SYSROOT:[SYSLIB]LIB.L32;2 20450 41 0 1101 00:01.7); KEN_01:[COAR.VMS.SYSLIB]KENLIB.L32;1066?; 1011 24 2 78 00:00.91 E]LOCK Lock resource at DCL level 23-Apr-1987 14:22:03 VAX-11 Bliss-32 V4.1-746 Page 22 ]1-002 LOCK - Main program 23-Apr-1987 13:42:36 KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 (6) ; COMMAND QUALIFIERSq; BLISS/DEBUG/TRACEBACK/CROSS_REFERENCE/TERMINAL=STATISTICS/LIST=LIS_/OBJECT=OBJ_/MACHINE_CODE_LIST=NOOBJECT LOCK1; COMPILER INTERNAL TIMING+; Phase Faults Cpu-time Elapsed-timeL*; LEXSYN 662 00:12.3 00:33.0*; FLOWAN 19 00:01.1 00:02.7); DELAY 18 00:00.7 00:00.9 *; TNBIND 35 00:00.6 00:01.4(; CODE 43 00:01.0 00:02.8); FINAL 135 00:03.6 00:10.0 ); Total 912 00:19.2 00:50.8 #; Size: 1030 code + 485 data bytes ; Run Time: 00:20.8; Elapsed Time: 00:55.5; Lines/CPU Min: 1880; Lexemes/CPU-Min: 42147; Memory Used: 295 pages; Compilation Complete$*[COAR.WORK.KIT_BUILD.KIT]LOCK.OBJ;17+,./ 4 n->0123KPWOM5 6P̎7@2m89@GHJ 2LOCK1-00223-Apr-1987 14:2223-Apr-1987 14:22VAX-11 Bliss-32 V4.1-746$ LOCK  EXIT_HANDLERP 'Q' PP1SCOPE MODERELEASE(WAIT8LOGDLOCK_!ASPLNM$PROCESS `!AFtCREADCWRITE EXCLUSIVENULLPREADPWRITE GROUPSYSTEM CLI$GET_VALUE CLI$PRESENT LIB$GET_EFLIB$LOOKUP_KEY LIB$SYS_FAOLIB_CLI_SIG_TO_RETLOCK__CANCELLEDLOCK__CONVERTEDLOCK__LNMCONFLICTLOCK__NOTLOCKED LOCK__NOWAITLOCK__OBTAINEDNLOCK__RELEASED LOCK__WAIT SYS$CMKRNL SYS$PUTMSGSYS$EXITPRP~ SYS$CMKRNLPQQQPP*bЏLOCK__CANCELLED}|~~R SYS$PUTMSGɏ~SYS$EXIT'   #! STATUS ___STATUS jv KERNEL_CANCEL SYS$DEQ~SYS$DEQ3 v ' KERNEL_ENQSYS$DEQSYS$ENQh SRcRRcRcRc}~~ݣSYS$DEQ}~|~|~8R ~ݣ SYS$ENQc)  %  STATUSENQFLAGSY KERNEL_POSTQ' SYS$DELLNM SYS$CRELNMbW8V$^(|ԮVW SYS$DELLNMЏԮ Ц ԮVW SYS$CRELNM(  U! P.ABC LNMLSTj LOCK8Q('LOCK__LNMCONFLICT8 SYS$DCLEXH SYS$TRNLNM SYS$PUTMSG SYS$PUTMSG SYS$CMKRNL SYS$PUTMSG SYS$PUTMSG SYS$SYNCH SYS$PUTMSG SYS$CMKRNL LOCK LIB$SYS_FAO[ CLI$PRESENTZ CLI$GET_VALUEY SYS$PUTMSGXWVΰ^m((g؟ SYS$DCLEXHP|0ǔiPo08~kPxЏ؞ܞЏ䞧(Џ(Ԯ8~ SYS$TRNLNMP Ѯ JЮ PPM,,|~~hP2ЏP( (< ~H~kPxf LIB$GET_EFPzjPfjPfffPЏLOCK__NOTLOCKEDƦTX0\1f_jPf@ǰiP=@D@LIB$LOOKUP_KEYPt (ǤiPb(Lj(LIB$LOOKUP_KEYPK f~( SYS$CMKRNLP Ѯ "PЏ LOCK__NOWAIT֦T}X0`|~~P>$ LOCK011.A>$[COAR.WORK.KIT_BUILD.KIT]LOCK.OBJ;17106ѫh1fЮ PPPЏLOCK__RELEASEDT}XH`sѮ 4f0PЏ LOCK__WAITߦT}X0`f |~~Ph ݦ SYS$SYNCHf!PЏLOCK__CONVERTEDT}XH`0d@hPЏLOCK__OBTAINEDڦT}X@`0df |~~Ph~Ϻ SYS$CMKRNLP fɏTP~^}~LIB_CLI_SIG_TO_RET  * j   P.ABE ټSTATUSٸLNMMLENLNMOMODE ٴLNMLEN LNMEQV pP.ABD LNMLST ___STATUS ___STATUS ___STATUS ___STATUS ___STATUS ___STATUS ___STATUS ___STATUS P.ABFMESSAGE ___STATUS ___STATUS ___STATUS ___STATUS ___STATUS  SS$_NOTQUEUED SS$_BUGCHECK SS$_NOLOGNAM LNM$_INDEX LNM$M_CONFINELNM$M_NO_ALIAS LNM$_STRING PSL$C_KERNEL LCK$M_CONVERT LCK$M_SYSTEM LCK$M_NOQUEUE LCK$M_SYNCSTS LCK$M_CANCEL PSL$C_SUPER$ LKSB_L_LOCKID STS$M_INHIB_MSG*SS$_CANCELGRANT SS$_NORMAL P.ABB P.ABA P.AAZ KR_SCOPES P.AAY P.AAX P.AAW P.AAV P.AAU P.AAT P.AAS LCK$K_PWMODE LCK$K_PRMODE LCK$K_NLMODE LCK$K_EXMODE LCK$K_CWMODE LCK$K_CRMODEKR_MODES tP.AAR xP.AAQ xKD_AF `P.AAP lP.AAOl KD_LTABLE PP.AAN XP.AAMXKD_LNAME DP.AAL HP.AAK HKD_LOG 8P.AAJ <P.AAI<KD_WAIT (P.AAH 0P.AAG0 KD_RELEASE P.AAF  P.AAE KD_MODE  P.AAD P.AACKD_SCOPE P.AAB P.AAA KD_P1 PMESSAGE(HDOMODE@DMODE8DLNAME0 DRESOURCE$ DSC$A_POINTER  DSC$K_DTYPE_Z" DSC$B_DTYPE DSC$K_CLASS_D" DSC$B_CLASS# DSC$W_LENGTH(DSCREBLOCKESTATUS LKSB_K_LENGTH  LKSTAT OP OP_C_LENGTH OP_K_LENGTHOP_L_EF  OP_B_MODE OP_M_LOGOP_V_LOG OP_M_WAIT  OP_V_WAIT OP_M_RELEASE# OP_V_RELEASE OP_M_SYSLOCK# OP_V_SYSLOCK OP_M_QUEUED" OP_V_QUEUED OP_M_CONVERT# OP_V_CONVERT! OP_L_FLAGS  STRUCT_SIZE_Q STRUCT_SIZE_G STRUCT_SIZE_A STRUCT_SIZE_L STRUCT_SIZE_ STRUCT_SIZE_W STRUCT_SIZE_T STRUCT_SIZE_R STRUCT_SIZE_B STRUCT_K_Q STRUCT_K_G STRUCT_K_A STRUCT_K_L STRUCT_K_ STRUCT_K_W STRUCT_K_T STRUCT_K_B STRUCT_K_R STRUCT_SAVED STRUCT_MASKSTRUCT_SCRATCH STRUCT_INCR_K STRUCT_NEXT_K STRUCT_BITWIDTH STRUCT_BITSTRUCT_SUBBYTE STRUCT_BYTEx _LOCK_DATA _LOCK_DATAxs _LOCK_CODE _LOCK_CODEsKH9@r!x%KEN_01:[COAR.SOURCE.BLISS]LOCK.B32;27 QQv&*[COAR.WORK.KIT_BUILD.KIT]LOCK011.MEM;1+,. / 4J :->0123KPWOA56x7 }89GHJ   : LOCK V1.1 Technical Release Notes    6 Changes from Version 1.0  J The LOCK utility has been registered with DIGITAL, which J means that Digital guarantees that no DEC product, or vendor J product registered with DEC, will conflict with LOCK. LOCK's J logical names, command verb, and facility number are unique, and J will not be reassigned. For more information about registering J products with Digital, look in the November 1986 issue of the J PageSwapper Newsletter. If you do not have a copy of the J newsletter, contact your LUG steering committee, or LUG J Administration at DECUS National Headquarters in Marlborough, J MA. Someone in a LUG near you is almost certain to have a copy  of the newsletter.  J LOCK now reports a conflict when it finds a logical name J using its reserved format, and which was not created by the LOCK  command.    8 LOCK 1.1 Implementation Notes  J All information necessary to use LOCK is available in the H help text. This file describes aspects of the implementation.   J LOCK is installed using the VMSINSTAL procedure. Treat it J in a manner similar to Digital layered products you install J using VMSINSTAL. However, since LOCK is not a Digital product, J it does not automatically get put in the same places as Digital  installations.  J During the installation, you will be asked whether or not J you wish to install LOCK as though it came from Digital. If you J answer in the affirmative, LOCK will be added to the default J command tables, help library, and SYS$SYSTEM. If you answer 'N' J to the question, you will be asked for each storage area as the J installation procedure comes to it. The defaults will be the J Digital areas (i.e., SYS$SYSTEM, SYS$HELP:HELPLIB.HLB, and J SYS$SHARE:DCLTABLES.EXE), but you may override them and supply J your site-specific locations. Note that the command table and J help library must already exist - the installation will NOT 3 create them if they aren't already there.  J The IVP should output a series of messages. The header 7 text of these messages should look like this:  & %LOCK-S-OBTAINED  %F-LOCKED  %I-LOCKED ! 1 %S-OBTAINED  H Page 2   ' 1 %LOCK-S-CONVERTED & 2 %LOCK-S-RELEASED ! 2 %S-RELEASED  J Those messages marked '1' above may come out in the J opposite order, as may those marked with a '2.' This is normal, J and not a cause for concern. It stems from a race condition J between the master and slave processes trying to write their 3 respective messages to the output stream.   J In order to work properly, LOCK must either be installed J with CMKRNL privilege or all processes which will be using it J must possess that privilege. In addition, the same holds true J for the SYSLCK privilege if system-wide locks are to be used. J Appropriate changes may need to be made to your site-specific  startup procedure(s).     J LOCK works by taking out locks at supervisor mode. J Continuity is maintained by storing the contents of the lock J status block in a protected logical name. LOCK must be J installed with the CMKRNL privilege both because of the manner J invn$ LOCK011.A>&[COAR.WORK.KIT_BUILD.KIT]LOCK011.MEM;1;3J 7< which it protects this logical name (process table, kernel J mode, NO_ALIAS and CONFINE attributes - which means that only a J program in kernel mode can change or delete it) and because it J changes to kernel mode to access resources with supervisor-mode  locks.  &*[COAR.WORK.KIT_BUILD.KIT]LOCK011.RNO;1+,./ 4P->0123KPWOE567Ď89GHJ.lm 8.rm 72.autoparagraph).centre;LOCK V1.1 Technical Release Notes.skip 3 .centre;Changes from Version 1.0L The LOCK utility has been registered with DIGITAL, which means that DigitalKguarantees that no DEC product, or vendor product registered with DEC, willLconflict with LOCK. LOCK's logical names, command verb, and facility numberOare unique, and will not be reassigned. For more information about registeringIproducts with Digital, look in the November 1986 issue of the PageSwapperJNewsletter. If you do not have a copy of the newsletter, contact your LUGKsteering committee, or LUG Administration at DECUS National Headquarters inGMarlborough, MA. Someone in a LUG near you is almost certain to have acopy of the newsletter.L LOCK now reports a conflict when it finds a logical name using its reserved6format, and which was not created by the LOCK command..skip 3%.centre;LOCK 1.1 Implementation NotesP All information necessary to use LOCK is available in the help text. This file(describes aspects of the implementation..skip 1O LOCK is installed using the VMSINSTAL procedure. Treat it in a manner similarMto Digital layered products you install using VMSINSTAL. However, since LOCKNis not a Digital product, it does not automatically get put in the same placesas Digital installations.N During the installation, you will be asked whether or not you wish to installLLOCK as though it came from Digital. If you answer in the affirmative, LOCKNwill be added to the default command tables, help library, and SYS$SYSTEM. IfNyou answer 'N' to the question, you will be asked for each storage area as theKinstallation procedure comes to it. The defaults will be the Digital areasN(i.e., SYS$SYSTEM, SYS$HELP:HELPLIB.HLB, and SYS$SHARE:DCLTABLES.EXE), but youImay override them and supply your site-specific locations. Note that theMcommand table and help library must already exist - the installation will NOT)create them if they aren't already there.O The IVP should output a series of messages. The header text of these messagesshould look like this:.skip 1.lm +8.literal %LOCK-S-OBTAINED %F-LOCKED %I-LOCKED1 %S-OBTAINED1 %LOCK-S-CONVERTED2 %LOCK-S-RELEASED2 %S-RELEASED .end literal.lm -8K Those messages marked '1' above may come out in the opposite order, as mayJthose marked with a '2.' This is normal, and not a cause for concern. ItLstems from a race condition between the master and slave processes trying to5write their respective messages to the output stream..skip 1O In order to work properly, LOCK must either be installed with CMKRNL privilegeHor all processes which will be using it must possess that privilege. InOaddition, the same holds true for the SYSLCK privilege if system-wide locks areJto be used. Appropriate changes may need to be made to your site-specificstartup procedure(s)..skip 3M LOCK works by taking out locks at supervisor mode. Continuity is maintainedMby storing the contents of the lock status block in a protected logical name.KLOCK must be installed with the CMKRNL privilege both because of the mannerMin which it protects this logical name (process table, kernel mode, NO__ALIASKand CONFINE attributes - which means that only a program in kernel mode canDchange or delete it) and because it changes to kernel mode to access%resources with supervisor-mode locks..skip 1&*[COAR.WORK.KIT_BUILD.KIT]LOCKIVP.COM;7+, ./ 4(L->0123KPWO56ʸ^7@;89@GHJ $LOCKIVP:$!($! Slave process procedure for LOCK IVP.$! $ SET NOON$ SET MESSAGE - /NOFACILITY - /SEVERITY - /IDENTIFICATION - /TEXT$ SET COMMAND VMI$KWD:CLILOCK($ LOCK IVP_LOCK /MODE=CREAD /NOWAIT /LOG$ CREATE VMI$KWD:SLAVE.GO&$ LOCK IVP_LOCK /MODE=CREAD /WAIT /LOG$ LOCK IVP_LOCK /RELEASE /LOG&*[COAR.WORK.KIT_BUILD.KIT]LOCKRTL.OBJ;1+,vI./ 4->0123KPWO56͎7Ȟ89@GHJ@LIB_CLI_SIG_TO_RET1-0.0 6-May-1985 15:08 6-May-1985 15:08VAX-11 Bliss-32 V4.0-7427LIB_CLI_SIG_TO_RETLIB_CLI_SIG_TO_RET1 CLI$_FACILITY LIB_CLI_SIG_TO_RET:PЬPРQ Q CLI$_FACILITY< PЬPQ P  ] +LMCHARGSSIGARGS SIGNALMCHARGSSIGARGS ' SS$_CONTINUE&CHF$L_MCH_SAVR0  SS$_RESIGNAL# STS$V_FAC_NO %CHF$L_SIG_NAME ' _LIB_CODE _LIB_CODE'ZWH@^cɍ4DISK$GENDYN00:[STAFF.COAR.WORK.SHARE]LIBCLISIG.B32;3 &*[COAR.WORK.KIT_BUILD.KIT]MSGLOCK.MSG;4+,./ 4A<->0123KPWO56@7ޞ89GHJ! .TITLE LOCK DCL-level $ENQ/$DEQ .IDENT /1-002/% .FACILITY LOCK, ^D695 /PREFIX=LOCK__!++A! FACILITY: LOCK - DCL command access to Distributed Lock Manager! ! ABSTRACT:!<! This module defines the messages used by the LOCK utility.>! The Facility Code has been registered with, and the Facility4! Number assigned by, Digital Equipment Corporation.!! ENVIRONMENT: DCL!! AUTHOR: Ken A L Coar!! MODIFIED BY:!$! KLC0291 Ken Coar 23-APR-1987 13:33?! Changed facility number to reflect that assigned by Digital.<! Also cleaned up documentation, and brought message format2! into line with the Modular Programing Standard.!$! KLC0266 Ken Coar 26-JAN-1987 12:15+! Added LNMCONFLICT and cleaned up format.!--!! DECLARATIONS!! EQUATED SYMBOLS:!#.LITERAL K_MSGBASE_SUCCESS = ^X0000!.LITERAL K_MSGBASE_INFO = ^X0200#.LITERAL K_MSGBASE_WARNING = ^X0400".LITERAL K_MSGBASE_ERROR = ^X0600".LITERAL K_MSGBASE_FATAL = ^X0800.SEVERITY SUCCESS.BASE K_MSGBASE_SUCCESS)OBTAINED - /FAO_COUNT=3)RELEASED - /FAO_COUNT=32CONVERTED - /FAO_COUNT=4.SEVERITY INFORMATIONAL.BASE K_MSGBASE_INFO:WAIT - /FAO_COUNT=2 - /IDENTIFICATION=LOCKED.SEVERITY WARNING.BASE K_MSGBASE_WARNING%NOTLOCKED - /FAO_COUNT=1.SEVERITY ERROR.BASE K_MSGBASE_ERROR/CANCELLED - /FAO_COUNT=2.SEVERITY FATAL.BASE K_MSGBASE_FATAL=NOWAIT - /FAO_COUNT=2 - /IDENTIFICATION=LOCKED=LNMCONFLICT - /FAO_COUNT=1.END`$>/[COAR.WORK.KIT_BUILD.KIT]OJGN1"%XS'FOK6P=m@6I> d+"Nfj@NzU3@O}Q,Na\)ØB^Xt6{A\)])P%d_Z<|dDV_Qr KKW]h6g`U(|A R 8KCEie{(sykeT eKmclR1,b 4\Vh_ J$H"\YL \Tq&xPy#}DHL|N{*s $cxğLdNl4X(Q`Ovu((6rh<.V+ HuP^FOXWX.&,Wi7)IUSNl{#xBJWа!@#Mٌq(Xn ;Pf1zbNܘp @tfla!ص1sA:" 1~[}1C~cW館QxmEQ =E0Q]A8H~搓EX]) &<qBUAr,(mrK@UQ2\KC6RmFtCvؚj K *߻%w JZkwm# yzW]?? RnO` nD{FM?]Kzf/s;[Zn/Ѩg(XJQ+ZUwWTL?_Wu-2 Dk8 0\R=vKF9*ktd P&|R %1?j/t9[57 \nrq%3 EB^$*ZPW.tݕw%i~>/(~PS-BL51 G)/F(W8 9mDG*td/&=8:"?$~pm;5tYc0Mfn4;Rz<_WOd{4|37/1?<0 wBBT) W$[a"bqu8/]l|b% 5{jo/Sjp1El$jq f3xM \p1d!TE.-eM #EFc9j$6yC`mYN 0 {cZ)zI,G!wh.WS7,^3nkuz^rXB?>o;R D&aHJ24Ck{}f )JLjo&fp]{)64G0 |'b/'' @nU1m T+'&ndx<90l1Nif8n'3?]nNUQ"k#[Xl,R*! 4ie1K6'8Qb H!IV&{pPcrQ_*tIw$D3+l)'^ETYs.WNL}q.Z mZX+j[>-?0]/x* rI^q\?ajnSQ[#K ~m GQC?:BfOmH*Oi`]1`x@dtm{!L-~=>YIbX-!X/tB\uJ(&w t.WXN^M,FӭAq/4tZ%,fe0cnV#_G-stpw˜il+'B%K%bF1eLGF&aOB/JKn0D^:H9 ~PM|1zDRPo3j>&7%Rb-g,W tm"C5MG*V| |-vs* 7jhw?tjf7Q\S cs#F 8-TiH2?-bT&vCW%$UM4;}F{<]h oW6k*z06H\03f O8(Uq\37 "s8o5sL1l.CF i?L@JK):Q:Ƥxcs*a[Kkr2G~a+NU[6AP2pV_>4L&z-dR\!0np6-*q~(?e<Xr 05 Y#B$kP3MJ2HSg,コ7H66F l),}{Obq=uPlo~ A->{SdD$ZbMZUr+"k(< 8|WM'w:Xy"d\|$Vq#beZkKelg{#M&>5 ,o[7P{:a'w$L#)[8BI%E`fN30 z YBZN?K]W SWa\_>gf)h$;Mg}k(Ny#QCcqk4{6l\oN+f:E_Yx~X|).S"G46A ]R>q$#HRY^C؉b-7hu|:yhjT7,/rr"Y 3$ OE$@me*Xw IlX{* 22D_t_(>nSMQO9g]:X0$D1`jy]yOV2r8&%VyWKc8& GZV3o{BouSx? Qg;)NK.Gf !g#Ix.{$\ [?bdjw[plz[D , C+Nfh% 5N)ytpw:+iTB)Ank EvfuQE#DBgN!vC^&=k4l*=*c@pHG?_K[5er,]CWBa9pt.5!_1T6֒DTwHm f&|b2{\0UTLpLvC*Rs.5pAGbRZT"]WO:=."O9{Qs{!n%1XzF#,~@`EwK(H>Dz-L  S`5UJ$nr4OB)W_ %mE en|Jh)Kw,1~\?= bL~8es7qc.:\iC od  _A qlC,3@aEJx\k:Wsb)1#e[S 3-{Ww3<%-x]AB[5mfmk#^|<1>='KKpYCl!X=T29o[kra}  Xl/^ H_O9asskX~ zvQ4(DcwyBZb w?RQeQ&lwF?B%Sl,:2(oR, %#f (t* U Hj p&xn2+_<wK,U} (LuOUMY|lq49 _: p*u`{&2_4xx S~\4P,cF*Vngl{bc>-]MZhT4' G>M!n='YKfsux 3XB4jEAMA;V;B@ [HD<::{,C^`add\'mq,%17FBQ"Gk2@&Lao,\$$9jxwRu{@;k,e)/qؖjm>-$m( )!ckIQQ;9/@,dl=BDt7&_?md"$2E^K;#BGh\*B >>J>%Nl!M{ {MeG h&hhuPo\n7XXm ]A U5{{D~X;bTDt(s="2Iy6,8-){VRGI= #ZDoLvO!UO'gHy6+J[S+AP`dWP}M)qEb] R,l$ t\gdM|Xf*(QVnP&;3EDPbYjta$;f)&A[oY4AGG 9ydrYLN7|[(3.ZŮ\!;@U1Ѐ?;M/4M8:@OV'BG!D\6yOf#5}`mN6Cwz^@UG8NW|\Xml0OJ8fSid%-rN EvJH3{oU98ATk#xX?0]9c5LQ6nC=.ge9[n :73 B3tR6sD%8pN~ifk":TDau">b-Sg}65G?~3} K`}-!Pba*<6)1q>*DQ.'< ^0K-Oi@[`>OQ8{W5l Z/QǜPrkFPZ&4'ٔT5n6$lK?22;LpIb~ׇssI(6~{]P 7 ,U:L_/xqb,A&Lcem0oI2,HRSk fq0HEV 49.>1>d`:({(oq7eg{tuD8O ln&/Akj(^{OL )Brmco }!'#8j;>zzB4:_=N*jdwbd@X;Go$o-(jV]I97IYjlFdgENf+*wqc@{M0zc67%'D{cx=m9mq' hIPegc~5RY5RBpKOFpxA 9Mc ae%P9+X||lgWk"AKm_ @)5%t b%p=#7u U'C^ W3c\f#{\95NjcZ-"^x3{8xA=(f@Sh.!U78%47{kTn|?t!FdS6 ??n#@`<Qjk#vX`$][HK mqqHBn>aa3S*k}fXm]ci ?Al:4\4/ YQC_T |z\kvgFCa}M$djos]H?*mB`@z%%o.c O;>tX%NXrd:5h~oN4U}R5lK`4p l X #P.X-dms:y|U<(TdwjC)G{P3r]FE3cEFg\9L-)XqUdTYOM\Ts`E[Wb'zva8A^D0MuQ9``sIe6R[/vРJ3w;2Y=J4w`.6MDWt}4{'5 nWfrx(g[LK㶿нki]F825Gd9V:X&bArk@@!d{35yS\a{qWM=fE0\ PETBfsd`@P];Nk9cKCL=$13b8pQ={h9m=p=k98*4dE]x9?) kuS[xnneQ/|;F27x7H!AZ2m(eA/i"??eMjP@}>0Xy(Ij>.="~T3q{}Os<)( AU^!&T"? /g`&WtU2ToBrte[bY2gc\3LcHK.&o@':@|?%> -1 p KiჇsc )Qh=u ZX6cI+~ѳhzvo?) EmRp:hU|&7$8" aPoDZ7dHl:8At;;+!uRc*=z$3mdXV{58kE%~\ AB5%B2 U(#9&E;Kr :!"\b[6VQf=DEz (. "_CP9G54 J][$]Z (sPPoo&?Nj |;*EX *#aPt:KcMn-4EQj _4">;k[f9cxjC'L;D$OZHgzo2<@_]acSA^^({ , h0i5HpKHCzf-f4Wz?IhV#IQY~/-'/*i&.q%)T[^rDCn0eJ&3yH@8#J9_:kw j2idu}oqrq?8eSH?x 50+vBCO;&\`1'MaCM8C0P~B 5wvhxo\?dK'WF~_zfEPMR19eEr`Kc.U$4r=>ezQs|;RzinE)H^I[In9j. Z v_jW%h7,V[X@tY`/bMh^i6`#AR@\Tvj0T5d=Z{0}Jz%>  ؘO C/N[avlN gWkz+Vep+B;tvݚ.uI36Q$K4UN0x!KzE܂LWC_)h6D|m91g< |{Lhh0;we2Jmh9g47~,d2Colu0UD#gq r 5c9YpD95o9yYf^{c&ۻmL|qu 8.982! :i ""f!!|BSE/ 3 Ps/ӚmFNR[G^#iE4K!LP~na0LNsyV*0fy'UYeSGYOf@i.O EQh 48K<3prbv!vNk45lkS _L4!^_8EPeq. (q"&)4Z4}K3Ck$ R aBP] яeWE[ 6tFu٩%J9G}&l4YM8P iQʲbI`r,VDM_Mg?-,*p=jms4#9`:ybb%{2vI9̉G6OҘZ<::N!tYّ,n a$쀫WUT6K#M_Uli)&; zbP(uA14he^$}$v-Y+phze #+twDOw12m&\w 1J-nA7[c,FU78~*kb%htA_6KdQ`hngGK9_4fzM?5|*s5PyV9]tsX<&A xbnW ]=KJ;D՘ʯ|Vx4k)$n)6%1 =\N H7I4)yf7w`V|C%4DZSyo6ZallsQ[ ?sfaPs)P:<~{RA 3jY B QY)`l7uI'̛æc/uy CksziE Nn{.-* vv8p+m X@3G %R_m$`4?=/fUt*|oΓj Ԟx߲|b %\qdZGO壼Z ٣޺㡶 ëq dz~g7ֱ!xОΊQ/ѡ.dQoy9 &{).ZgAr-31Vd>z|.¾,R(AWfL{H\e;* _2sa Uջ.iASLIe&;~u0, 8 N!b62E !SuG}"vQa/з[o=e0chy$-Hlp`$^QpeOh"Ml|K.gև V _EowNta*|=i-!;lJmx&B[tmYgs|@eMGG@^y=\\ʈ.o!*e~9I@E S vMa,p:lk>k$J 8no y{>HJ k0yb 5s_-WG>knro]`6侬>{.|<{?(Me=$u$MW)X_*@#LK*w2DAU|_Jg&@AY=6:HT"DVFQdyUf_-[-J0'" i^vIW#W#0hcfG 'jF3C _+4& 1r5}$QyV~[.`*cnn1& ~E%W{Ts1V1dW&Kvmp2QwXWBk#`wd(f^(}vIQq }dao6)@