LOCK011.AA! LOCK011.A:BACK/BLOCK=8192/TRUNC *.* DC:[VMS94A.NET94A]LOCK011.A/SAVE EVERHART  lV5.5 _ARISIA::  _ARISIA$DCA0: V5.5-2  D*[EVERHART.XFR]AAAREADME.TXT;1+,J ./ 4N-|0123KPWO56r 7%289GHJ/[GENDYN] General Dynamics Data Systems Division4I am including 3 items this Symposium (Spring 1987):HAn update to the LOCK utility, which allows DCL processes to synchroniseFusing the Distributed Lock Manager. There is a minor technical changeIin this one; namely, it now complains if it finds a reserved logical nameIthat it didn't create. LOCK has also been registered with Digital, so itIis guaranteed unique as a command - that is, Digital will never release aHproduct that conflicts with it, and will never allow a registered vendorIproduct to do so, although unregistered products might. LOCK is includedFas a VMSINSTAL installation kit, and I have included the source in thekit, if you're interested.HA program which will differentiate between a VT220 and a VT240 or VT241.DVT200_KIND creates a local DCL symbol stating which type of terminalLthe process is using. This obviously has limited usefulness; it was writtenEto supplement SET TERMINAL /INQUIRE, which is getting smarter all the.time, but hasn't reached this granularity yet.KThirdly, an object module which will allow applications to add another lineJto the output from CTRL/T. Link the LIBMESSAGE.OBJ module into your code,and call it with3 ret-status.wlc.v = LIB_SET_MESSAGE ([msgtxt.rt.d])LIf called from a non-interactive job, the return status will be SHR$_NOTTERM (warning).HWhenever CTRL/T is typed, your text will be displayed on a separate lineFfrom DCL's output - however, the order in which your message and DCL'sKwill appear IS NOT 100% PREDICTABLE, due to the use of $BRKTHRU. If passedMa null parameter (NOT a null string!), any existing message will be disabled.:Each call replaces any existing message with the new text.NI'm not including sources for this one, as it is not my best code, and doesn'tIconform to the Modular Programing Standard. When it does, I will include the source.6For more information about these items, please contact Ken A L Coar Data Systems Division General Dynamics 12101 Woodcrest Executive Drive Creve Coeur, MO 63141Phone: (314) 851.4003Digital Village: COAR DCS: COAREM/OS: COAR,KA*[EVERHART.XFR]AAA_READ_ME.LIS;1+,5./ 4N-|0123KPWO5 678289GHJ /[GENDYN] General Dynamics Data Systems Division4I am including 3 items this Symposium (Spring 1987):HAn update to the LOCK utility, which allows DCL processes to synchroniseFusing the Distributed Lock Manager. There is a minor technical changeIin this one; namely, it now complains if it finds a reserved logical nameIthat it didn't create. LOCK has also been registered with Digital, so itIis guaranteed unique as a command - that is, Digital will never release aHproduct that conflicts with it, and will never allow a registered vendorIproduct to do so, although unregistered products might. LOCK is includedFas a VMSINSTAL installation kit, and I have included the source in thekit, if you're interested.HA program which will differentiate between a VT220 and a VT240 or VT241.DVT200_KIND creates a local DCL symbol stating which type of terminalLthe process is using. This obviously has limited usefulness; it was writtenEto supplement SET TERMINAL /INQUIRE, which is getting smarter all the.time, but hasn't reached this granularity yet.KThirdly, an object module which will allow applications to add another lineJto the output from CTRL/T. Link the LIBMESSAGE.OBJ module into your code,and call it with3 ret-status.wlc.v = LIB_SET_MESSAGE ([msgtxt.rt.d])LIf called from a non-interactive job, the return status will be SHR$_NOTTERM (warning).HWhenever CTRL/T is typed, your text will be displayed on a separate lineFfrom DCL's output - however, the order in which your message and DCL'sKwill appear IS NOT 100% PREDICTABLE, due to the use of $BRKTHRU. If passedMa null parameter (NOT a null string!), any existing message will be disabled.:Each call replaces any existing message with the new text.NI'm not including sources for this one, as it is not my best code, and doesn'tIconform to the Modular Programing Standard. When it does, I will include the source.6For more information about these items, please contact Ken A L Coar Data Systems Division General Dynamics 12101 Woodcrest Executive Drive Creve Coeur, MO 63141Phone: (314) 851.4003Digital Village: COAR DCS: COAREM/OS: COAR,KA*[EVERHART.XFR]CLILOCK.CLD;5+,e./ 4L-|0123KPWO5 6 ͎7@,A289GHJDEFINE 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))*[EVERHART.XFR]HLPLOCK.HLP;1+,g./ 4C-|0123KPWO 5 6p͎7`H289GHJ _ LOCK011.Ag|VERHART.XFR]HLPLOCK.HLP;1C1 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.  *[EVERHART.XFR]HLPLOCK.RNH;7+,n ./ 4N-|0123KPWO 5 6]u͎7nP289GHJ .lm 1.rm 65.flags capital .i -1;1 LOCK.breakHThe ?,?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_8 LOCK011.A|[EVERHART.XFR]KENLIB.L32;106PX 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_NOSYSFUNC @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_MGMT) LOCK011.A|[EVERHART.XFR]KENLIB.L32;106PŇBUG @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_NODE_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 _QUADWORDzw LOCK011.A|[EVERHART.XFR]KENLIB.L32;106Pam+ @: 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_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 i LOCK011.A|[EVERHART.XFR]KENLIB.L32;106P:%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, )=^ -^ ;& = ;%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.z LOCK011.A|[EVERHART.XFR]KENLIB.L32;106PtI%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]*[EVERHART.XFR]KENLIB.L32;101+,.R/ 4RO4-|0123KPWOP5 6֎7@ 89GHJVAX-11 Bliss-32 V4.1-74614-Apr-1986 09:57:12T 0 p  ( `   8   4    $|(p,dTP|d@T8|d|@X,`t(T0\ t!!`""#|##$P$$$$l%%,&T&&&''(L(t((D))D**<++,,,X--l.//0T0141T11223344$5|5566777T88t99P: ;;;;<===t>?(?P?h????@@@ @@AxAAB-hBB$CC,DDpEEETF$GpGGHHHNICE_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 M LOCK011.A|[EVERHART.XFR]KENLIB.L32;101RY_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 @ 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 bMDL_BIT @NICE_C_NODE_LOOPWITH @NICE_K_RET_UNRECFUNC @@NICE_M_ITEM_IMAGE 0{%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 Du 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_NOSYSFUNC @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 | __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 l|_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 STRUCT_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 yCHECK@ BBH$W_APPLIC @@ BSA$K_DEVNAM@ ITEM_W_CODE @ NFB$C_DB_CRI @ NICE_K_ERROR_MIRRORDISCONNECTED ̋ 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_PL [ LOCK011.A|[EVERHART.XFR]KENLIB.L32;101RI @ 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 DYvDESCR@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 D&s_DATA @BSA$K_VOLSTRUCT MDL__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@ ITEM_W_SIZE @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 y_QUAD @KEY_K_FS@NICE_B_NODE_FMT @NICE_K_LDT_BY_NODE @NICE_K_NODE_NSPVER @NICE_K_RET_SUCCESS@NICE_V_READ_ENTITY _LKSB @KEY_C_SO @KEY_K_GS @NICE_K_ENTITY_LINE @NICE_K_NODE_HOSTRO@ NICE_R_LDT_DATA ֜_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 f 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_BKTSIZEVpBBLOCK @ 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 ySCHECK @NICE_K_NODE_SUBADDR  _LKVALBLK @ BSA$K_VOLCHAR @ BSA$K_VOLDATE @ BSA$S_DRIVEID @NICE_K_NODE_ADDRESS @NICE_K_RET_INVFILECONT@[ BBH$B_D |[EVERHART.XFR]KENLIB.L)0#166 PPCt`HEW'-YmY[6jX}!eB.~I|m/X5b $',1Zea d%KXDkCH]veu[ ^(,Kjgv>f! g}n\Y4?dQ EPfW{?a/OtIi7,QB ]2~k3' P! G,=EQXR\`o[ fnd5 Xv.%zKUsH J[RN}US ed4P Z%YA\9CjDA 1XnI~T: M|^PbC"`SCsXL)X3) *+MExo]2,RFOK$C^FP\Wzw-R\*R\|3xd&p(AYBZW) ~1&7PtA$\+ETX"~W&_yE-xVEx?IDG QApq0^#S}V )a4<,mo0UΕF}^5\Q =xH]Q(mC"Eg!ys1T'l v B;|c|}toKs]3B<^3u5S!NEEsG\]4<-w:7TH@D|in>Sc2?bq)hv@C'!_g vc_?(x3r_ WWӼ i] ׁ^~Kze is9@&]?SuejN8yސnJ3Z*tY99ADZuLD:LNM4~~!jbf ɁNa9=V\%AtNl,# 4uk\{Ap40hJ>+OJ``XqIiϏ^a56j(ebw1V$:{;9E :6.Q1i/ v jN /576W_.vV*oO#:!V54iI)O+"yaNq-.2z-xo*0eDfp%q>X.kyiu3Cj 99y|ܹЊkNd4TMEO cjL,l(5!JPQ u n7/YQSQPI_^9HZR V(VjFD!u yv )3sgv #H` Q`A  wLaPVrrN+dHSIb(X^~rR&Cw?CkLrW揑B9V^/_0m DVC"'^lLJ&c"SOUjW)[e.~vs0;Qu 0 ]D^{qq*4" S[0$I@[jF-QOdTV[cH Z.E{)Pp`V^Jh LT tQyrBoU/+ DJq H'}CG Fi?Tųo$IiV9=H@&Pcqqf6Yj92O4qK R_-]* f]X PPn\QyR6cSBaYEZ =q v*%'`R _ 1TY O @ Fv Kf(Zr&J1r(} (s0ғD%,{<*hsV:Dv ;k{UD.gqqm g5J 2W_Tj>X`Z]ZAV*YJ&H[4[XGXuK}VAl P>~mN$ , ZYX"1}`*Җ?#jTOQrcyK_h+ `iьR|7k~2\]73z-eb;aj@yTn!VEJbKNPsa@C Bh'ar& $eB!?J?hsnVo1+NdAbv%JHjVV&m7]DAB7DQ tBQV)\3mWC2u~7,:3R)LC18_J.N2*no)=VLV*}AT\?c5k`9OUr( O\y JSl~VFOWbx_r-5t!%m[Q!A-RUcDD ?J(X\?76<>+egts,$l{Y{o OD] AyE`*`J_WWBw%o.1qdFA(- zOT ]*z^OaHW:)VY_5pKKm '6\\3xBAE2Y%B\5`!hpB aqbMek I@ $/V#@e mYw[WEUk C _OQ+yY%]N.LrIBUdi?9l~\4>]mz9?jA7L>FK^$R DGIEUFA&GL] v !Ba}p]p[~q OqH(1zsY5Q3DS V2GSL=PF>qdbn1dd 4eYv3K^&PK+E$\3 1|P*FZ P?Op25;#O[}tiHQlD#FmMXajK09s m"5o'V*]S  @I ' Z"@/հvBNl}qK?RSREX'hODvEe9SCSE͋kv8(\UwF&0;H'*`6lnSȇא9.fT e B6`f%iHxvDTGXX&PXv&^NeCCW_ EDK[%'5 EU`BMR"tu{F hCS7XLwJN(L##ϘW@L;enj-jyI|H[:"<#[=zwV$(Z7qo6reCOXuLd,6qdHfx_y7KV+EK"VocL\n.KC|\&,z}aD^#!}YC)144rS&ypb +pn"'  _M_5Xl!(tT&o1Njx[1v"&$5r`Fa8F{*zN `f@Izxb8 _5ҐSPo9_z5%5 ;R]*oeN噃]>vRU-5+h. Vzi*_cz 9 ; Y0T/HK(+*0[>J7S{}k n(&?(%h )kT:*C/lg6L?cI$KkCP|kQkDcwa98c}N$Ba`*K7($0=a5t"iw$f~")? J>)OslV\W0 kbR*%&>jygbEXVUjJ2R&ajv_h]xKdTw0qgZ "*)TVd f"A2zq} d#pIv:asv|@TlY1{T񿗓ʟjJ;#cRSXubؽ?fVWPW[yCp?!`ysbep*8w~.8.2*Uc~N}"[7=9p$c6xc;c4*_p^h:wt-*GD1,$b)6Gb-Cbo ")qXzsB2C3-!c&_]oޔP|N&dfNOLU0a_)4t1MPD;QX ,Jvq,+Dprv-afX*}?g +#yO2s?U-8MpPUj},bg3 6!v Fb8jNZ'j P2u+s&ƿt3Z#0{fJwgvjA>:"EWdIV1Y' wCYA9xƙ:;VKdN9&erM!E>N|OVVV>0"ai~_:&-3n-?NlpUWS/6sta>^)| (6A C;L]7\r0&^%Rng Vtw.0jQRq{,MTEi&yJeZBng|2k,C^\ G(F#u{[@qZPz^fAZSw .JRE/ڮ,RW bUucCCer5vGd;ikkrGB9^EG.dnFX{B.Duw$B"V.:2sXyԗw<y@~@ WWi4 6GC-"W?ZT8l'SElK0)aՁEaW Q/UaD ][PMErP)n5[]C=[Kt/?ryeihy)t'9roh"})Ny~/;sQOHZrB $R/{9*!V5+w!7zwwgwt.W2 S(6l|udQ`vw 0 LDV\TU8WA^ YZO,# z@ @?xOqSW,cc{" ilQS8hr{{:.M \EU[OZ=JA7U0azazz9al} rx)|Z&v?*xq&>/&x$c`{7Ks5,3!<#gz`&ȫa+3(&{zmyy&6"s%3?%mfbmz_jў0>rxas+T^.WZ7z+;~(}!t*ڰUTB~yZL#l!tfUH"~Z1OF 1v!t!cWC$?{)J.)v,k$r(0cgkh4 k%3`rh"J}5RqV|3k:%\9rk`I~:,hiuOkU`no#hb':0?}w*ca&mc?wv>\d-7:*{dנ{*I%1*$ yYE?pBXZCLj7G]{bn#[3QrӞ% j( :ca y8uawQgzaw+Ut9C89m_BAL/WX\-BP[:o,AQ~wQ //%72dR^R y"B ;\V_]Wf ]OT?LBU/N\/6hGZb uiY0,B#[Q^ocnHI7 ?q"TB;H`a3ED)8뇅z=l>/LbXy xZ^T MVwhPNB׬H`qR 1pbB?O.KP|U|P>S|?\Rf.dni=$n6'>{GFVOkfZ/qCTi{v\G S^t9\Wr\"FvW/ WVBqFRYKTOV\CQ^|]G)IJ(;4J0'i}@Qn Y]^Hf9P5ODq,}Ap|~:7]BMfV_h@Nb. ( `m)AgVX?+7!D!v/:hID_VG.w9t.?{;JGJ+*&QUb%Typt?:C PASKk^IR0Q*LCVLOQYC &jxK4QL~QR5kKG%uX~ QUtҐbA2 ]yzbt "I7&d&6TҸH%s?b{nO9V-_ aoNK- qBuZ. Z@5 HTC&ܴC37O DTtw/ˈ_`#HmE|HYNUil҅"Y54Z=yH8UQWZdHhxv|49mw8S+ M3VC$WUh\<%OR`m39%+;O} ~|S=A[L[R9RHUj[)x jdI\2u_ϯHPUDOHwm=tZIe *Gy!TQ4,@r%GƆ[  },|ZrQOrK"zFe 1^9CܠX)v8dOj.7w2?ː%KKF>-q#xm~3~4\ah-ܚz_I)>jm}:95xzlC9k$^*+}#^jf'x2$>p{zGyx) !bU nh");o+[zi2c2R,:izrg2Mex2<#xnfVkoq!c+w 0D?:%m`4#Jz+3~aq`3i)iqjב2i+/3>ubdG)mgßc"o&l kQp(u'ch;6E !w7[?>"#lH-5@Iu:^*b A c%B_ۖ -uW|.liCop c.{ } vLNCr%`554Fq~H`,deF. %ke2j1z,XwnB';_r$]4Pt'nl2#k:qKkasWjzm8i4b@ftWH0ax>վ=g4$dr0HHa= DP, f}x]os,[57;;(7ahz$3:2v#yXˣ[U 1jI319(Fc48f$_\yjp>$$E cFjxpt}pWt;;("5Sum|L,<+> , _g&;-?7msl2t 9;#y An*rrs^51-V9rDfa/bF}viH#dubgjvKq4Lo;{:l%{S!" %VmpI"#N!00ɁHW'2{wEb>_`pK:'{n*cG>t Q;X9bIPdiv%p rl~aMsqg;-i4}gl¯$|y6{K<3zXcnD(?-v*_$bV5dc)VHx_xp/`i7="+|asw~[ Cee+q%od7oM]!jg*~~x#v-*W<.s+B3#~"5.6{ :i~#h4+.$h$:{a$,0*7(y{b3P&՗(cc( jqv*925n`Y)3myk*G\dN7&un:1br 0+w:l/x|. Oef lf\ nk}7M? |p 'x/s.%7F&l-$51/pD ojo("m&9Q&<>?1(;!3&q0dq9{CzX%_>j7v`=dLf- #opJMvVUK f C I?jJ>4vl ~$qusr&X+n33ezUA:rp^'-y*ill&} M^k3kd"Ms3ia1ec|`%(vl1T+,J%00`prk\apj(+s`h:o*W Y4<.#0(tea119@c/fhB\"=,rB>"sbW^S2s6u=J!n`zMj(4q (kndl$(1d4{R .q`ԓhy\쏴8+u,dq%>!v3.qQlBrx$szq?{6#.k- rs|c=mvn7}";N>z?({8yFI+M8kh)G$|A+^.~1V &<=3}{n2hu(kL,f 6,M1u[-MlaHnr9!GO#LM X7Tx1JLMf3f+p6ST tq\|z#;EgaH+P}AggE17'kcpYL ~7(bX]i:xZe.=b\b{wJ5|jw\vGq ]}R(0]KV1NF nIXK\W}ky ZXZ8O.E,tG;FUQH(_jRYqAh; h{%Tn;[0JcpBO CL;lY@kN,TDETtO_Y!+VXp.h8%GMGB( iIWN[^&3PsS@ ѭ#7'Q<u=VX V 3V LOCK011.A|[EVERHART.XFR]KENLIB.L32;101R&&ID_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 | $$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 y _QUADWORD @: BSA$K_SECTORS @ KEY_K_DEL @ KEY_K_DLE 7 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 { $KEY_TABLE @ KEY_C_SOH @ KEY_C_SUB @NICE_M_NODE_EXEC @NFB$C_DECLNAME z%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_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 وMDL__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 @NFB$C_DISCLINK @ ɏ LOCK011.A|[EVERHART.XFR]KENLIB.L32;101Ri5NICE_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 @ BSA$S_NODENAME@ ITEM_L_BUFFER @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 yFSCHECK @ 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 ry DESCRIPTOR @NICE_C_OBJECT_NUMBER @NICE_K_ERROR_MIRRORINVNODE @NICE_K_READ_CHARACTERISTICS ( WORD_RELATIVE) (GENERAL) 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, )=^ -^ ;& = ;%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_E5 LOCK011.A|[EVERHART.XFR]KENLIB.L32;101RUD_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]*[EVERHART.XFR]KITINSTAL.COM;3+,. / 4O -|0123KPWO 56@7k289GHJ $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 - SET - 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 - "''PRO4p? LOCK011.A|[EVERHART.XFR]KITINSTAL.COM;3O MPT'" - 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*[EVERHART.XFR]LIBMESSAGE.OBJ;13+,N./ 4-|0123KPWO56 M7s289GHJ 9 LIB_MESSAGE1-00024-Apr-1987 10:1924-Apr-1987 10:19VAX-11 Bliss-32 V4.1-7463 LIB_MESSAGELIB___DISPLAY_MESSAGE$P'Q  LIB$FREE_EF LIB$FREE_VM LIB$GET_EF LIB$GET_VM LIB$SYS_FAO STR$FREE1_DX STR___HANDLER SYS$BRKTHRUWpPR nR LIB$GET_EFP(|~}~} ~ b SYS$BRKTHRUWR LIB$FREE_EFP  r!z STATUSDTTDMSG IOSTAT BRKTHRU_EF ___STATUS!JdLIB_SET_MESSAGEQW SYS$GETJPIW SYS$ASSIGNSYS$QIOW SYS$DASSGN dLIB_SET_MESSAGE LIB$FREE_EFZ LIB$GET_EFYXW^~Ԯ(0,,h0ngP1 iPv|~H|~ݮ$ SYS$GETJPIWP jPP<@ЮPPEnV<PV(|~4 SYS$ASSIGNP$,ngЏs9WgV(V0 iPa|~|~|~`<#~<0~ݮ8 SYS$QIOWP j<@ЮPP1Ps9W<Plլ<~ SYS$DASSGNP-,ng ЬQ ! 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 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 KE Y LOCK011.AT|[EVERHART.XFR]LOCK.B32;27N"RNEL_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_FAO (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 foK[8 LOCK011.AT|[EVERHART.XFR]LOCK.B32;27N"[&r 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*[EVERHART.XFR]LOCK.LIS;3+,_J.V/ 4VV-|0123KPWOW56`7289GHJ 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 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,C LOCK011.A_J|[EVERHART.XFR]LOCK.LIS;3V&g ', 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 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-Apr3Z LOCK011.A_J|[EVERHART.XFR]LOCK.LIS;3Vk-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 !A LOCK011.A_J|[EVERHART.XFR]LOCK.LIS;3Vm* 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 KeyWWUT lO~} 3,W&gT fC/xF!_#PB/%{,^ y`qc<^Q L7xs_Α&-0d^9 Yo;nC}G&.f@<SCuAiw23N2jT  kyBayP&yISmfUwGjW)=X Vm*C[Lo!C.#G>JQ]D)mv!<|0(ZM-:N>OGY.nF(lFd =z4/ enJH46_^9DYs4P} EpvPMQ CQ@rE%!wL(AJ`Hx 9 _J `z$8@ y/3E>FQgG!pfAX b},fZEO056}R9tSdGy[K][/1gg4!\'%V&~(GvJ!x0eoW2\0UR_C37 /#cZ;SB/s IP0 ((05mSJAeHL0s`YWBm"n5(li?fs Gf~a;i*,)/w5 Tg$c(G>f$pui/bdA)MbIaHa>N)ck7IpSaXTQ:RY^,$h\]i#- s(#Qq.gx6=#AvYF>^ ~,1B3}jm a @w EjsW,>C-{ylHpXn<*FZ4VlYkX"D>xcGRI4Ce_uGK0])>}$ +/2E+_$| HU@s^,WAg\5F9y[ ql97(-CkE^`A- ~FIS)IennJ!7ZxiEhxeV0UBTbIQO].i@Rw>&2z,bMJWC>q'$I%[lCsZ:q+o"v{K% .Q\Zd,S;i w`>-6xl<\!^Zt`R0F Q~Tfz_ im}%i,[ !^3>?;( \(VWiKEiECy~6%_qY@H=4fh_PB]G YhwP$6H:!d Cs- 8s3nh#/[>"cph,C1`qOYG~k ^Ukf@B#Gf)Sk>WO>IG+hv /M y#y.h XE_=v4 Qw <86W:%P|$]O$A i99 ooLl K.<j$Um1rr^[AU:}S?k f0tQ=hw-:*@suKeA~ Y_[)W(=y0 ˭UGvB6 =Obr\9BNZOm(qX GnXj9*Xu Om\N7Ml'!.e}>}48nP%"k;GN;iRhc8 V&29{J2-MD.SE  ]EqO X=m~D{D3T+ {^|.%T4AN{"azmByE^8Xji EK_#F\\>lx-[v 1u&!>^+(-Z9"~cw 9*r %YR.YTD I Gwy{`wb:PQIU3&y0)\>vP#`NN'}-%e^ 2?xb>DkFT_@ w `Wt ^!28+{A= 6l< Ri(zY@P3H1VDx>O%;@9 rFkpBA?(WzN %:nD=6 M4b+@]97!y+GR}5F"yZH02(-T ^Rv;,@Xu0t<\Wt!@}5(RIKB4bRWE4({5OuC?WEYCad'F3V_{R;sA#TdTL^z6vAB)& 1muig2^qdbynlTI~" hFg1?+x1McR?z1 {/c>>a1-_4h,_Ch5EV1)A 0$'%O9KXEYShq"<8"/1m>^YiN % 4+A#c4&MmGg& WOZCTrIS|dK 9{Rhe'8|YE-l`y iyfkbZ.=6%&AOXGo"~],Tmtu p]YM)X.lh?ndZqx JQE_Xd jt,-+j6 SlPzlCZo$R~B BJZP"DR) N!1Ih3{ 3d?HsHU=.oIb@]&[oHf6H] +ZV\/dMNv)hE#h"kAZ1D ~T3(3!"U<+`&=289I7Bxi(% k?NGU ,]%9xIDsw]f9{$vS.]@0C0.p"tu6t.ds(%#*b72Y> [OdVu8Xa}U7llpBX)mw !Qkrl3`]y9a?9ff/yW'd>$,v%o%n.)$"WYE^M^*xR6ESA9x,SY7 :CFM=n!~AnAyeTP/!cOUH[Au6 85i X%;gPp E"}q:98$R|iA)g9PI?elye-38 U`*F;z9VPtwOHq0D]IHA2+m[\\ )"7;b 26&| 0CgE;^j8@yu2aAHG-})9n)*[&O0uTGE K:>wu}iP`,TpQ]8z|``,`U`^.1*LOXz>oFz$c- bnM! G +Xb;\N'wxPdtmu'Mad7CDB#T/n9,qy>u|h/r1,?MiyiBCe)m?NORlp0, ,JV 5WGn[?0&z=cUj>^VEjQ#bDJ 4=! >>5S mm,R Y`-o.b)tM!lIAxq$xR qj4$CWXLg,\)4` -Jm~ d|@WmfG ShNm{/D5!f  }A_31O]3W9:(Ap|c IiEXnxS IE* X@#3RV 0[^Skk/J&bK55v%_3vV rR~]iVtepIF?~ 0KDz5B:X; EWd _1 j;R;I7BI@j[ rFdrW= PZh>_:mjOz, egXM^K)#S:uKrxS%H^{I[O\;gq4A]Di?pnVsaH/hb>:&;URP~W?`n:U!ehRDk,58[N4K28D{?`SrMj;2Pw! &a5-}m.(= p+,Hr~>f`"u]o |Wv;c5uN)L_R)9FaGIXX>> -,k[7RXHH_rqUc Tj){o s[z >MoTG 0 d?r ?1_sqmC95Q+*y`3[1r~a>w`wB'9pf^Vyb@UJ &wX4M7N_?*"DG8\uRxmu$nXN3uS%vt mB$q$ )Kj #h!ls0j_gkjvwhy nc.4KDoG%dVC{~?"mIe (n.@CXVtJ_U|S | 7cQ3yXD" KyBL$/g57T*foiIeU.T s)9ffecS: 31Ee|t|E FOx` ~VYbw:iz$H:)`nb,c>f *@~t Jmbem^IH .@XW1 h842by5&ud.0 Z5z B:_5Uw4;N1S5{+ 28G;RJB?v G@2MU 5"Pu( <"5 yhH&] U`mbmp&W Qou \^d0YTA5 (DF{WN U3(QzlOj2mCJdNk^v:Q~ZvfOYw4e@&2JiT>pQTuL@V:Wy.b#j{#! 59bo]a0y(C8;oq|7>R|w7P,ֹ~)pEj;_eM5HlW̨jUchZ8E+&= g$.v`Rh'i/}xzv[ :yL\dNP4HHBi}6k\<*Ej[c:W[y)r IpX N &CQg!9lnr%uk@D_kKCE|UceY;kYS,}.pt 9xtO "wV^ nv@ F|;kZdu?hrE|uX-J!qaj5Xch]a={o v~p"^0_U#= M J0^mRrlgjq3w^T0b@23R GzziEL,"3ES9s}xIo)u3Y3,;j'A3~NrG2Am6V.ÈGY gid=j&"ZM-3-tp.5&rOvoA$9ys V! lT'{xgNMso/A)`:b*QWSZO(r.:jmj oY4KE2A;<:g\ZcBv?fcx1=1+ ns,!ƥ Ք:JRS/GhHsU0O6hrA',LG*ZHC :0%nj|~>24_NxR%G\H*m1 VaaLjX_tԖ"by!C;[s?*`wI\)oZAbgcΌ:VW%2Mm Pv7U7i+J~(k74\CKH1a(LVI<'S?rB|LiݻgL\%&m,ݵ*k&%>jID|Mne˗q& zZ-~%3JwYSE>x3L4[ rT9Hcj("ym+Knfu}%*,223bUQ\G_mvMe|E\!ќzHr{kNkXYcXJ&[k4!1*&DS{$fhQ~ &4;xx`XWB`xQ){KT٬Owx_hcYe o w%ELsaLUuC J$;tPx>CXn\cyGFmM/RWwlRApU?BPqKO(v~M`It]R18J,u:v1{~Ne2!EawvpD iG6-P vuT59's:OK,R5xci~<;G~viB3jc@"C^*o{)#os-WH/9jkte \kcSBFg9>^BF\1s-"rd4DD9(&UZgz2)uQP0{. FX@s ho\="t<' )tOp~y}`-T/ggBB? 7if.2n}(SDPS&o%??!WcLd`Es;tD$WDt2KrTgRYA @E"4.5{iiO.Y4+/)}=H `7W@1]T0h60h ~jI$fSISdO&+K#jTzl_p%L ft*zvG7"&^yCRl5fG[:%^eO^m#Q=_w8q.e $a*4U/8Jc'8m<;#[mg>o-zk |2E]0dcrq Y2:)u=e_,H+ARJ"a;/REzu~rgkg_t@@ (x +gQo."s+UX 3p$c~u@$h~,j1j=R}8Aw6]+y3c#3wD_-KD .z0^/jM~`w(SYh8 a%#6VRBj QsjzzgXtlwj52T Q-;8O(99T#v.L8nhu%7HF(:&H&+/mR \I0.N;%1gp[}S jop!M~I0m,4:43"~$FD):qU|9?*Pz #PjEeA`_lyN%eITC!b"J~$vSV5w%0! f /ol[$E+)^n+F{+/Fes/h?HPA!YVmEN`#W)yzW Onm'M| $x2 PoTh3\]zCR'@&ag/iNSXrGu:DAU(/+ K敾"j4YCZ8' l XnNNtkc!o*B'5G$GyW6MwZn3PT1BtOfd=3aD;] bk7BRvx&ZHu$2V h&_mv.v&E0-FXG/r1 L= < \i:]< :_sp,u@3Mj`a/i}U4`%mp\2@!jYTaa+/(h)Fq1Cf`^"<;ztk$Rȅ-5PCUFhJN1IhN /Tc\Z8TyZPC= 9f-;FmC7i ]rj X$Huce[qEHm8GD!F:/0qL=Cw}/7+AJf%w|D9$.:e@1E\Z_$9z`2MZBj]f ~-6i2l*`87"l:k>[l}*1$.[a>A+UCpxPN~B*X#o{cxRx)}8MZeHsT!)pJ[M/ LOCK011.A_J|[EVERHART.XFR]LOCK.LIS;3VT9Macr 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 rEDSC$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 LOCK011.A_J|[EVERHART.XFR]LOCK.LIS;3VeH_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 $STRUCT_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 Complete6\ LOCK011.Ah$+|VERHART.XFR]LOCK.MARLIS;1ilA*[EVERHART.XFR]LOCK.MARLIS;1+,h$+.l/ 4ilk-|0123 KPWOm56ѐ7289GHJ; 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; WARN#050 ..........1 L1:00566; Name already declared in this block: NFB$C_LOGEVENT; WARN#050 ..........1 L1:00563; Name already declared in this block: NFB$B_FLAGS; WARN#050 ..........1 L1:00563; Name already declared in this block: NFB$_ERR_P1; WARN#050 ..........1 L1:00563; Name already declared in this block: NFB$_ERR_P2; WARN#050 ..........1 L1:00563; Name already declared in this block: NFB$_ERR_P3; WARN#050 ..........1 L1:00563; Name already declared in this block: NFB$_ERR_P4; WARN#050 ..........1 L1:00563; Name already declared in this block: NFB$_ERR_DB; WARN#050 ..........1 L1:00567; Name already declared in this block: NFB$C_FC_DELETE; WARN#050 ..........1 L1:00567; Name already declared in this block: NFB$C_READEVENT; WARN#050 ..........1 L1:00567; Name already declared in this block: NFB$C_ENDOFLIST; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XD5; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_EFI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XD9; WARN#050 ..........1 L1:00567; Name already declared in this block: NFB$C_OP_FNDMIN; WARN#050 ..........1 L1:00567; Name already declared in this block: NFB$C_OP_FNDMAX; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_OBI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_NDI; WARN#050 ..........1 L1:00567; Name already declared in this block: NFB$C_FC_ZERCOU; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_CRI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XS5; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_ESI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_LLI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_LNI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XS9; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_PLI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XDI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_MAX; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XGI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_FC_MAX; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XNI; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_FC_SET; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XTI; WARN#050 ..........1 L1:00561; Name already declared in this block: NFB$B_FCT; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_OP_NEQ; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$_ERR_FCT; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XTT; WARN#050 ..........1 L1:00564; Name already declared in this block: NFB$C_DB_XXX; WARN#050 ..........1 L1:00565; Name already declared in this block: NFB$C_DECLOBJ; WARN#050 ..........1 L1:00565; Name already declared in this block: NFB$_ERR_CELL; WARN#050 ..........1 L1:00565; Name already declared in this block: NFB$C_FC_SHOW; WARN#050 ..........1 L1:00566; Name already declared in this block: NFB$B_DATABASE; WARN#050 ..........1 L1:00562; Name already declared in this block: NFB$B_OPER; WARN#050 ..........1 L1:00565; Name already declared in this block: NFB$_ERR_SRCH; WARN#050 ..........1 L1:00566; Name already declared in this block: NFB$C_DECLNAME; WARN#050 ..........1 L1:00565; Name already declared in this block: NFB$_ERR_OPER; WARN#050 ..........1 L1:00565; Name already declared in this block: NFB$C_OP_GTRU; WARN#050 ..........1 L1:00565; Name already declared in this block: NFB$C_OP_LSSU; WARN#050 ..........1 L1:00566; Name already declared in this block: NFB$C_WILDCARD; WARN#050 ..........1 L1:00566; Name already declared in this block: NFB$C_FC_CLEAR ; 0057 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)j LOCK011.Ah$+|VERHART.XFR]LOCK.MARLIS;1il 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 1 MASK, ,; P 0111 1 (CONVERT, ),; P 0112 1 (QUEUED, ),; P 0113 1 (SYSLOCK, ),; P 0114 1 (RELEASE, ),; 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); 0172 1 );B; 0174 1 %SBTTL'EXIT_HANDLER - Cancel request on program abort'"; 0175 1 ROUTINE EXIT_HANDLER; 0176 1 : INTERNAL_CALL =; 0177 1 !++'; 0178 1 ! FUNCTIONAL DESCRIPTION:; 0179 1 !Q; 0180 1 ! This routine is called as an exit handler when the program abortsO; 0181 1 ! unexpectedly. His task is to cancel an outstanding $ENQ requestU; 0182 1 ! in kernel mode so it doesn't complete after the program has run down.; 0183 1 !!; 0184 1 ! CALLING SEQUENCE:; 0185 1 !; 0186 1 ! EXIT_HANDLER (); 0187 1 !"; 0188 1 ! FORMAL PARAMETERS:; 0189 1 !; 0190 1 ! NONE.; 0191 1 ! ; 0192 1 ! IMPLICIT INPUTS:; 0193 1 !U; 0194 1 ! OP control block describes how far we've gotten and what we're doing.; 0195 1 !!; 0196 1 ! IMPLICIT OUTPUTS:; 0197 1 !; 0198 1 ! NONE.; 0199 1 !"; 0200 1 ! COMPLETION STATUS:; 0201 1 !1; 0202 1 ! SS$_NORMAL successful completion; 0203 1 !; 0204 1 ! SIDE EFFECTS:; 0205 1 !9; 0206 1 ! Any outstanding lock request gets canned.; 0207 1 !; 0208 1 !--; 0209 2 BEGIN; 0210 2 LOCAL ; 0211 2 STATUS : LONG;@; 0212 2 IF NOT .OP [OP_V_QUEUED] THEN RETURN SS$_NORMAL;A; 0213 2 %CHECK (STATUS = $CMKRNL (ROUTIN=KERNEL_CANCEL));; 0214 2 !R; 0215 2 ! Now, it's possible that the request was granted in the meantime,V; 0216 2 ! so we shouldn't display the 'cancelled' message. We should, however,Q; 0217 2 ! ensure that the logical name gets defined, because it obviouslyC; 0218 2 ! hasn't if QUEUED is set and the lock was granted.; 0219 2 !J; 0220 2 IF .STATUS EQL SS$_CANCELGRANT THEN RETURN KERNEL_POST ();; 0221 2 !Q; 0222 2 ! All right, we really cancelled an outstanding request. Tell theF; 0223 2 ! user about it, and exit with the appropriate status.; 0224 2 ! ; 0225 2 MESSAGE [0] = 4;.; 0226 2 MESSAGE [1] = LOCK__CANCELLED; ; 0227 2 MESSAGE [2] = 2; ; 0228 2 MESSAGE [3] = 0;(; 0229 2 MESSAGE [4] = DRESOURCE;); 0230 2 $PUTMSG (MSGVEC=MESSAGE);D; 0231 2 RETURN $EXIT (CODE=.MESSAGE [1] OR STS$M_INHIB_MSG);; 0232 1 END;2 .TITLE LOCK Lock resource at DCL level .IDENT \1-002\+ .PSECT _LOCK_DATA,NOEXE, PIC,0 00# 00000 ;OP) U.6: .BYTE 0[9] ; 00009 .BLKB 3 0000C ;LKSTAT U.7: .BLKB 8 00014 ;ESTATUS U.8: .BLKB 4 00# 00018 ;EBLOCK) U.9: .BYTE 0[4] ;3 00000000' 0001C .ADDRESS U.1 ;0 00000001 00020 .LONG 1 ;3 00000000' 00024 .ADDRESS U.8 ; 0000 00028 ;DSCR' U.10: .WORD 0 ;3 02 00 0002A .BYTE 0, 2 ;0 00000000 0002C .LONG 0 ;" 0000 00030 ;DRESOURCE' U.11: .WORD 0 ;3 02 00 00032 .BYTE 0, 2 ;0 00000000 00034 .LONG 0 ; 0000 00038 ;DLNAME' U.12: .WORD 0 ;3 02 00 0003A .BYTE 0, 2 ;0 00000000 0003C .LONG 0 ; 0000 00040 ;DMODE' U.13: .WORD 0 ;3 02 00 00042 .BYTE 0, 2 ;0 00000000 00044 .LONG 0 ; 0000 00048 ;DOMODE' U.14: .WORD 0 ;3 02 00 0004A .BYTE 0, 2 ;0 00000000 0004C .LONG 0 ; 00050 ;MESSAGE U.15: .BLKB 401 .PSECT _LOCK_CODE,NOWRT, SHR, PIC,0D 00 00 31 50 00000 P.AAB: .ASCII \P1\<0><0> ;; 010E0002 00004 P.AAA: .LONG 17694722 ;4 00000000' 00008 .ADDRESS P.AAB ;W 00 00 00 45 50 4F 43 53 0000C P.AAD: .ASCII \SCOPE\<0><0><0> ;; 010E0005 00014 P.AAC: .LONG 17694725 ;4 00000000' 00018 .ADDRESS P.AAD ;@ 45 44 4F 4D 0001C P.AAF: .ASCII \MODE\ ;; 010E0004 00020 P.AAE: .LONG 17694724 ;4 00000000' 00024 .ADDRESS P.AAF ;T 00 45 53 41 45 4C 45 52 00028 P.AAH: .ASCII \RELEASE\<0> ;; 010E0007 00030 P.AAG: .LONG 17694727 ;4 00000000' 00034 .ADDRESS P.AAH ;@ 54 49 41 57 00038 P.AAJ: .ASCII \WAIT\ ;; 010E0004 0003C P.AAI: .LONG 17694724 ;4 00000000' 00040 .ADDRESS P.AAJ ;B 00 47 4F 4C 00044 P.AAL: .ASCII \LOG\<0> ;; 010E0003 00048 P.AAK: .LONG 17694723 ;4 00000000' 0004C .ADDRESS P.AAL ;R /X LOCK011.Ah$+|VERHART.XFR]LOCK.MARLIS;1il2 53 41 21 5F 4B 43 4F 4C 00050 P.AAN: .ASCII \LOCK_!AS\ ;; 010E0008 00058 P.AAM: .LONG 17694728 ;4 00000000' 0005C .ADDRESS P.AAN ;e 00 53 53 45 43 4F 52 50 24 4D 4E 4C 00060 P.AAP: .ASCII \LNM$PROCESS\<0> ;; 010E000B 0006C P.AAO: .LONG 17694731 ;4 00000000' 00070 .ADDRESS P.AAP ;B 00 46 41 21 00074 P.AAR: .ASCII \!AF\<0> ;; 010E0003 00078 P.AAQ: .LONG 17694723 ;4 00000000' 0007C .ADDRESS P.AAR ;W 00 00 44 41 45 52 43 05 00080 P.AAT: .ASCII <5>\CREAD\<0><0> ;U 00 45 54 49 52 57 43 06 00088 P.AAU: .ASCII <6>\CWRITE\<0> ;i 00 00 45 56 49 53 55 4C 43 58 45 09 00090 P.AAV: .ASCII <9>\EXCLUSIVE\<0><0> ;Y 00 00 00 4C 4C 55 4E 04 0009C P.AAW: .ASCII <4>\NULL\<0><0><0> ;W 00 00 44 41 45 52 50 05 000A4 P.AAX: .ASCII <5>\PREAD\<0><0> ;U 00 45 54 49 52 57 50 06 000AC P.AAY: .ASCII <6>\PWRITE\<0> ;6 0000000C 000B4 P.AAS: .LONG 12 ;4 00000000' 000B8 .ADDRESS P.AAT ;0 00000001 000BC .LONG 1 ;4 00000000' 000C0 .ADDRESS P.AAU ;0 00000002 000C4 .LONG 2 ;4 00000000' 000C8 .ADDRESS P.AAV ;0 00000005 000CC .LONG 5 ;4 00000000' 000D0 .ADDRESS P.AAW ;0 00000000 000D4 .LONG 0 ;4 00000000' 000D8 .ADDRESS P.AAX ;0 00000003 000DC .LONG 3 ;4 00000000' 000E0 .ADDRESS P.AAY ;0 00000004 000E4 .LONG 4 ;W 00 00 50 55 4F 52 47 05 000E8 P.ABA: .ASCII <5>\GROUP\<0><0> ;U 00 4D 45 54 53 59 53 06 000F0 P.ABB: .ASCII <6>\SYSTEM\<0> ;5 00000004 000F8 P.AAZ: .LONG 4 ;4 00000000' 000FC .ADDRESS P.ABA ;0 00000000 00100 .LONG 0 ;4 00000000' 00104 .ADDRESS P.ABB ;0 00000001 00108 .LONG 1 ; U.16= P.AAA U.17= P.AAC U.18= P.AAE U.19= P.AAG U.20= P.AAI U.21= P.AAK U.22= P.AAM U.23= P.AAO U.24= P.AAQ U.25= P.AAS U.26= P.AAZ- .EXTRN CLI$GET_VALUE, CLI$PRESENT- .EXTRN LIB$GET_EF, LIB$LOOKUP_KEY2 .EXTRN LIB$SYS_FAO, LIB_CLI_SIG_TO_RET" .EXTRN LOCK__CANCELLED" .EXTRN LOCK__CONVERTED$ .EXTRN LOCK__LNMCONFLICT" .EXTRN LOCK__NOTLOCKED/ .EXTRN LOCK__NOWAIT, LOCK__OBTAINED- .EXTRN LOCK__RELEASED, LOCK__WAIT) .EXTRN SYS$CMKRNL, SYS$PUTMSG .EXTRN SYS$EXIT% 0004 00000 ;EXIT_HANDLER0 U.1: .WORD Save R2 ; 0175D 52 00000000' EF 9E 00002 MOVAB U.15, R2 ;O 04 B0 A2 01 E0 00009 BBS #1, OP, 1$ ; 0212< 50 01 D0 0000E MOVL #1, R0 ;( 04 00011 RET ;< 7E D4 00012 1$: CLRL -(SP) ; 02139 0000V CF 9F 00014 PUSHAB U.2 ;J 00000000G 00 02 FB 00018 CALLS #2, SYS$CMKRNL ;F 51 50 D0 0001F MOVL STATUS, ___STATUS ;C 04 51 E8 00022 BLBS ___STATUS, 2$ ;C 50 51 D0 00025 MOVL ___STATUS, R0 ;( 04 00028 RET ;R 00000E2A 8F 50 D1 00029 2$: CMPL STATUS, #3626 ; 02201 06 12 00030 BNEQ 3$ ;= 0000V CF 00 FB 00032 CALLS #0, U.4 ;( 04 00037 RET ;I 62 04 D0 00038 3$: MOVL #4, MESSAGE ; 0225Z 04 A2 00000000G 8F D0 0003B MOVL #LOCK__CANCELLED, MESSAGE+4 ; 0226H 08 A2 02 7D 00043 MOVQ #2, MESSAGE+8 ; 0228O 10 A2 E0 A2 9E 00047 MOVAB DRESOURCE, MESSAGE+16 ; 02299 7E 7C 0004C CLRQ -(SP) ; 02304 7E D4 0004E CLRL -(SP) ;1 52 DD 00050 PUSHL R2 ;J 00000000G 00 04 FB 00052 CALLS #4, SYS$PUTMSG ;e 7E 04 A2 10000000 8F C9 00059 BISL3 #268435456, MESSAGE+4, -(SP) ; 0231I 00000000G 00 01 FB 00062 CALLS #1, SYS$EXIT ;( 04 00069 RET ;?; Routine Size: 106 bytes, Routine Base: _LOCK_CODE + 010C>; 0234 1 %SBTTL'KERNEL_CANCEL - Cancel outstanding request'#; 0235 1 ROUTINE KERNEL_CANCEL; 0236 1 : INTERNAL_CALL =; 0237 1 !++'; 0238 1 ! FUNCTIONAL DESCRIPTION:; 0239 1 !R; 0240 1 ! This routine executes in kernel mode, and dequeues any outstandingT; 0241 1 ! request on the lock block. We have to run in a higher mode than userC; 0242 1 ! because the locks are requested in supervisor mode.; 0243 1 !!; 0244 1 ! CALLING SEQUENCE:; 0245 1 !.; 0246 1 ! $CMKRNL (ROUTIN=KERNEL_CANCEL); 0247 1 !"; 0248 1 ! FORMAL PARAMETERS:; 0249 1 !; 0250 1 ! NONE.; 0251 1 ! ; 0252 1 ! IMPLICIT INPUTS:; 0253 1 !); 0254 1 ! LKSTAT is the lock block.; 0255 1 !!; 0256 1 ! IMPLICIT OUTPUTS:; 0257 1 !; 0258 1 ! NONE.; 0259 1 !"; 0260 1 ! COMPLETION STATUS:; 0261 1 !1; 0262 1 ! SS$_NORMAL successful completionJ; 0263 1 ! SS$_CANCELGRANT success; lock was granted before we could$; 0264 1 ! abort the request; 0265 1 !; 0266 1 ! SIDE EFFECTS:; 0267 1 !<; 0268 1 ! Any outstanding lock requests are cancelled.; 0269 1 !; 0270 1 !--; 0271 2 BEGIN; P 0272 2 RETURN $DEQ(+; P 0273 2 LKID=.LKSTAT [LKSB_L_LOCKID],!; P 0274 2 ACMODE=PSL$C_SUPER, ; P 0275 2 FLAGS=LCK$M_CANCEL; 0276 2 );; 0277 1 END; .EXTRN SYS$DEQ& 0000 00000 ;KERNEL_CANCEL5 U.2: .WORD Save nothing ; 02356 02 DD 00002 PUSHL #2 ; 02751 02 DD 00004 PUSHL #2 ;4 7E D4 00006 CLRL -(SP) ;; 00000000' EF DD 00008 PUSHL U.7+4 ;H 00000000G 00 04 FB 0000E CALLS #4, SYS$DEQ ;- 04 00015 RET ; 0272>; Routine Size: 22 bytes, Routine Base: _LOCK_CODE + 01762; 0279 1 %SBTTL'KERNEL_ENQ - Workhorse routine' ; 0280 1 ROUTINE KERNEL_ENQ; 0281 1 : INTERNAL_CALL =; 0282 1 !++'; 0283 1 ! FUNCTIONAL DESCRIPTION:; 0284 1 !R; 0285 1 ! This routine is called by the main program once all the parametersT; 0286 1 ! have been determined. We don't have to run in kernel mode, but sinceO; 0287 1 ! that's the way we're protecting the logical name containing the.; 0288 1 ! lock block, it's just as well.; 0289 1 !U; 0290 1 ! We do an $ENQ rather than an $ENQW because we want to be able to tell4; 0291 1 ! the user we're waiting for his lˑ LOCK011.Ah$+|VERHART.XFR]LOCK.MARLIS;1ilM>-ock.; 0292 1 !!; 0293 1 ! CALLING SEQUENCE:; 0294 1 !+; 0295 1 ! $CMKRNL (ROUTIN=KERNEL_ENQ); 0296 1 !"; 0297 1 ! FORMAL PARAMETERS:; 0298 1 !; 0299 1 ! NONE.; 0300 1 ! ; 0301 1 ! IMPLICIT INPUTS:; 0302 1 !0; 0303 1 ! OP control block contains flags.; 0304 1 !!; 0305 1 ! IMPLICIT OUTPUTS:; 0306 1 !; 0307 1 ! NONE.; 0308 1 !"; 0309 1 ! COMPLETION STATUS:; 0310 1 !1; 0311 1 ! SS$_NORMAL successful completion0; 0312 1 ! other status from $DEQ or $ENQ; 0313 1 !; 0314 1 ! SIDE EFFECTS:; 0315 1 !; 0316 1 ! NONE.; 0317 1 !; 0318 1 !--; 0319 2 BEGIN; 0320 2 LOCAL.; 0321 2 ENQFLAGS : LONG INITIAL (0), ; 0322 2 STATUS : LONG;"; 0323 2 IF .OP [OP_V_WAIT];; 0324 2 THEN ENQFLAGS = .ENQFLAGS OR LCK$M_SYNCSTS<; 0325 2 ELSE ENQFLAGS = .ENQFLAGS OR LCK$M_NOQUEUE;P; 0326 2 IF .OP [OP_V_SYSLOCK] THEN ENQFLAGS = .ENQFLAGS OR LCK$M_SYSTEM;Q; 0327 2 IF .OP [OP_V_CONVERT] THEN ENQFLAGS = .ENQFLAGS OR LCK$M_CONVERT;%; 0328 2 IF .OP [OP_V_RELEASE]V; 0329 3 THEN STATUS = $DEQ (LKID=.LKSTAT [LKSB_L_LOCKID], ACMODE=PSL$C_SUPER); 0330 2 ELSE; 0331 3 BEGIN!; P 0332 3 STATUS = $ENQ(!; P 0333 3 EFN=.OP [OP_L_EF],&; P 0334 3 LKMODE=.OP [OP_B_MODE],; P 0335 3 LKSB=LKSTAT,!; P 0336 3 FLAGS = .ENQFLAGS,; P 0337 3 RESNAM=DLNAME,!; P 0338 3 ACMODE=PSL$C_SUPER; 0339 3 );(; 0340 3 OP [OP_V_QUEUED] = 1;; 0341 2 END;; 0342 2 RETURN .STATUS;; 0343 1 END; .EXTRN SYS$ENQ# 000C 00000 ;KERNEL_ENQ3 U.3: .WORD Save R2,R3 ; 0280C 53 00000000' EF 9E 00002 MOVAB U.6, R3 ;; 52 D4 00009 CLRL ENQFLAGS ; 0321O 05 63 04 E1 0000B BBC #4, OP, 1$ ; 0323G 52 08 88 0000F BISB2 #8, ENQFLAGS ; 03241 03 11 00012 BRB 2$ ;J 52 04 88 00014 1$: BISB2 #4, ENQFLAGS ; 0325R 03 63 02 E1 00017 2$: BBC #2, OP, 3$ ; 0326C 52 10 88 0001B BISB2 #16, ENQFLAGS ;D 03 63 E9 0001E 3$: BLBC OP, 4$ ; 0327B 52 02 88 00021 BISB2 #2, ENQFLAGS ;R 10 63 03 E1 00024 4$: BBC #3, OP, 5$ ; 0328D 7E 02 7D 00028 MOVQ #2, -(SP) ; 03294 7E D4 0002B CLRL -(SP) ;6 10 A3 DD 0002D PUSHL LKSTAT+4 ;H 00000000G 00 04 FB 00030 CALLS #4, SYS$DEQ ;( 04 00037 RET ;< 7E 7C 00038 5$: CLRQ -(SP) ; 0338? 7E 02 7D 0003A MOVQ #2, -(SP) ;4 7E 7C 0003D CLRQ -(SP) ;4 7E 7C 0003F CLRQ -(SP) ;4 38 A3 9F 00041 PUSHAB DLNAME ;6 52 DD 00044 PUSHL ENQFLAGS ;4 0C A3 9F 00046 PUSHAB LKSTAT ;A 7E 04 A3 9A 00049 MOVZBL OP+4, -(SP) ;3 05 A3 DD 0004D PUSHL OP+5 ;I 00000000G 00 0D FB 00050 CALLS #13, SYS$ENQ ;A 63 02 88 00057 BISB2 #2, OP ; 0340- 04 0005A RET ; 0342>; Routine Size: 91 bytes, Routine Base: _LOCK_CODE + 018C;; 0345 1 %SBTTL'KERNEL_POST - Post process logical name'!; 0346 1 ROUTINE KERNEL_POST; 0347 1 : INTERNAL_CALL =; 0348 1 !++'; 0349 1 ! FUNCTIONAL DESCRIPTION:; 0350 1 !N; 0351 1 ! This routine is called to either (re)set or remove the logical6; 0352 1 ! name containing the lock status block.; 0353 1 !!; 0354 1 ! CALLING SEQUENCE:; 0355 1 !,; 0356 1 ! $CMKRNL (ROUTIN=KERNEL_POST); 0357 1 !"; 0358 1 ! FORMAL PARAMETERS:; 0359 1 !; 0360 1 ! NONE.; 0361 1 ! ; 0362 1 ! IMPLICIT INPUTS:; 0363 1 !A; 0364 1 ! OP control block, DLNAME descriptor of lock name.; 0365 1 !!; 0366 1 ! IMPLICIT OUTPUTS:; 0367 1 !; 0368 1 ! NONE.; 0369 1 !"; 0370 1 ! COMPLETION STATUS:; 0371 1 !1; 0372 1 ! SS$_NORMAL successful completion; 0373 1 !; 0374 1 ! SIDE EFFECTS:; 0375 1 !D; 0376 1 ! Logical name described by DLNAME changed or deleted.; 0377 1 !; 0378 1 !--; 0379 2 BEGIN; 0380 2 LOCALD; 0381 2 LNMLST : BBLOCK [28] INITIAL (REP 28 OF BYTE (0));*; 0382 2 IF .OP [OP_V_RELEASE] THEN ; P 0383 2 RETURN $DELLNM( ; P 0384 2 TABNAM=KD_LTABLE,; P 0385 2 LOGNAM=DLNAME,(; P 0386 2 ACMODE=%REF(PSL$C_KERNEL); 0387 2 );2; 0388 2 LNMLST [0,0,16,0] = LKSB_K_LENGTH;0; 0389 2 LNMLST [2,0,16,0] = LNM$_STRING;+; 0390 2 LNMLST [4,0,32,0] = LKSTAT;2; 0391 2 LNMLST [8,0,32,0] = LKSB_K_LENGTH;;; 0392 2 LNMLST [12,0,16,0] = .DMODE [DSC$W_LENGTH];1; 0393 2 LNMLST [14,0,16,0] = LNM$_STRING;<; 0394 2 LNMLST [16,0,32,0] = .DMODE [DSC$A_POINTER];; P 0395 2 RETURN $CRELNM(; P 0396 2 ATTR=%REF("; P 0397 2 LNM$M_NO_ALIAS OR; P 0398 2 LNM$M_CONFINE; P 0399 2 ), ; P 0400 2 TABNAM=KD_LTABLE,; P 0401 2 LOGNAM=DLNAME,); P 0402 2 ACMODE=%REF(PSL$C_KERNEL),; P 0403 2 ITMLST=LNMLST; 0404 2 );; 0405 1 END; 001E7 .BLKB 12 00# 001E8 P.ABC: .BYTE 0[28] ;) .EXTRN SYS$DELLNM, SYS$CRELNM$ 00FC 00000 ;KERNEL_POST= U.4: .WORD Save R2,R3,R4,R5,R6,R7 ; 0346D 57 FE62 CF 9E 00002 MOVAB U.23, R7 ;D 56 00000000' EF 9E 00007 MOVAB U.12, R6 ;= 5E 24 C2 0000E SUBL2 #36, SP ;V 08 AE 017C C7 1C 28 00011 MOVC3 #28, P.ABC, LNMLST ; 0381O 12 C8 A6 03 E1 00018 BBC #3, OP, 1$ ; 03829 04 AE D4 0001D CLRL 4(SP) ; 03864 04 AE 9F 00020 PUSHAB 4(SP) ;1 56 DD 00023 PUSHL R6 ;1 57 DD 00025 PUSHL R7 ;J 00000000G 00 03 FB 00027 CALLS #3, SYS$DELLNM ;( 04 0002E RET ;R 08 AE 00020008 8F D0 0002F 1$: MOVL #131080, LNMLST ; 0389J 0C AE D4 A6 9E 00037 MOVAB LKSTAT, LNMLST+4 ; 0390G 10 AE 08 D0 0003C MOVL #8, LNMLST+8 ; 0391J 14 AE 08 A6 B0 00040 MOVW DMODE, LNMLST+12 ; 0392H 16 AE 02 B0 00045 MOVW #2, LNMLST+14 ; 0393L 18 AE 0C A6 D0 00049 MOVL DMODE+4, LNMLST+16 ; 03949 08 AE 9F 0004E PUSHAB LNMLST ; 04034 08 AE D4 00051 CLRL 8(SP) ;4 08 AE 9F 00054 PUSHAB 8(SP) ;1 56 DD 00057 PUSHL R6 ;1 57 DD 00059 PUSHL R7 ;@ 10 AE 03 D0 0005B MOVL #3, 16(SP) ;4 10 AE 9F 0005F PUSHAB 16(SPF LOCK011.Ah$+|VERHART.XFR]LOCK.MARLIS;1ilЧ <) ;J 00000000G 00 05 FB 00062 CALLS #5, SYS$CRELNM ;- 04 00069 RET ; 0395?; Routine Size: 106 bytes, Routine Base: _LOCK_CODE + 0204'; 0407 1 %SBTTL'LOCK - Main program'!; 0408 1 GLOBAL ROUTINE LOCK; 0409 1 : EXTERNAL_CALL =; 0410 1 !++'; 0411 1 ! FUNCTIONAL DESCRIPTION:; 0412 1 !V; 0413 1 ! This is the main program. It interrogates the command line to find outH; 0414 1 ! what needs to be done, and calls routines appropriately.; 0415 1 !!; 0416 1 ! CALLING SEQUENCE:; 0417 1 !.; 0418 1 ! Called as main routine by DCL.; 0419 1 !"; 0420 1 ! FORMAL PARAMETERS:; 0421 1 !; 0422 1 ! NONE.; 0423 1 ! ; 0424 1 ! IMPLICIT INPUTS:; 0425 1 !>; 0426 1 ! Must be running under DCL command interpreter.; 0427 1 !!; 0428 1 ! IMPLICIT OUTPUTS:; 0429 1 !; 0430 1 ! NONE.; 0431 1 !"; 0432 1 ! COMPLETION STATUS:; 0433 1 !@; 0434 1 ! LOCK__OBTAINED success; requested lock obtained:; 0435 1 ! LOCK__RELEASED success; lock relinquished;; 0436 1 ! LOCK__CONVERTED success; lock mode changedI; 0437 1 ! LOCK__NOWAIT failure; /NOWAIT was specified and lock was-; 0438 1 ! not immediately obtainableN; 0439 1 ! LOCK__CANCELLED failure; program was aborted (possibly by ^Y)>; 0440 1 ! before the lock was granted. Note that this@; 0441 1 ! is returned by EXIT_HANDLER, not the mainline; 0442 1 ! code.; 0443 1 !; 0444 1 ! SIDE EFFECTS:; 0445 1 !P; 0446 1 ! Lock at the appropriate mode either taken out or released on the1; 0447 1 ! specified resource, or no change.; 0448 1 !; 0449 1 !--; 0450 2 BEGIN; 0451 2 LOCALD; 0452 2 LNMLST : BBLOCK [40] INITIAL (REP 40 OF BYTE (0)),(; 0453 2 LNMEQV : BBLOCK [255], ; 0454 2 LNMLEN : WORD,*; 0455 2 LNMOMODE : BBLOCK [255],!; 0456 2 LNMMLEN : WORD, ; 0457 2 STATUS : LONG;*; 0458 2 ENABLE LIB_CLI_SIG_TO_RET;; 0459 2 !P; 0460 2 ! Get the resource name, and build up the internal name from it.; 0461 2 !1; 0462 2 %CHECK ($DCLEXH (DESBLK=EBLOCK));:; 0463 2 %CHECK (CLI$GET_VALUE (KD_P1, DRESOURCE));F; 0464 2 %CHECK (LIB$SYS_FAO (KD_LNAME, 0, DLNAME, DRESOURCE));; 0465 2 !M; 0466 2 A ! See if this is an existing resource we already have locked.; 0467 2 !(; 0468 2 LNMLST [0,0,16,0] = 255;0; 0469 2 LNMLST [2,0,16,0] = LNM$_STRING;+; 0470 2 LNMLST [4,0,32,0] = LNMEQV;+; 0471 2 LNMLST [8,0,32,0] = LNMLEN;'; 0472 2 LNMLST [12,0,16,0] = 4;0; 0473 2 LNMLST [14,0,16,0] = LNM$_INDEX;/; 0474 2 LNMLST [16,0,32,0] = UPLIT (1);); 0475 2 LNMLST [24,0,16,0] = 255;1; 0476 2 LNMLST [26,0,16,0] = LNM$_STRING;.; 0477 2 LNMLST [28,0,32,0] = LNMOMODE;-; 0478 2 LNMLST [32,0,32,0] = LNMMLEN;!; P 0479 2 STATUS = $TRNLNM( ; P 0480 2 TABNAM=KD_LTABLE,; P 0481 2 LOGNAM=DLNAME,); P 0482 2 ACMODE=%REF(PSL$C_KERNEL),; P 0483 2 ITMLST=LNMLST; 0484 2 );0; 0485 2 IF .STATUS NEQ SS$_NOLOGNAM THEN; 0486 3 BEGIN; 0487 3 %CHECK ();; 0488 3 !W; 0489 3 ! If the length of the equivalence name is not equal to the size of aX; 0490 3 ! lock block, then *we* didn't define the name and we must abort. NoteX; 0491 3 ! that this is unlikely, since the name must also be defined in KERNEL; 0492 3 ! mode.; 0493 3 !3; 0494 3 IF .LNMLEN NEQ LKSB_K_LENGTH THEN; 0495 4 BEGIN; 0496 4 LOCAL(; 0497 4 MESSAGE : VECTOR [6, LONG]; 0498 4 PRESET(; 0499 4 [0] = 5,$; 0500 4 [1] = SS$_BUGCHECK,); 0501 4 [2] = LOCK__LNMCONFLICT,; 0502 4 [3] = 1,; 0503 4 [4] = DLNAME; 0504 4 );/; 0505 4 %CHECK ($PUTMSG (MSGVEC=MESSAGE));4; 0506 4 RETURN SS$_BUGCHECK OR STS$M_INHIB_MSG;; 0507 3 END;; 0508 3 !Z; 0509 3 ! Copy the lock block from the logical name into real storage for future; 0510 3 ! reference.; 0511 3 !:; 0512 3 CH$MOVE (LKSB_K_LENGTH, LNMEQV, LKSTAT);; 0513 3 !Z; 0514 3 ! Store the name of the mode it is currently locked at; if this is NOT aW; 0515 3 ! release request, we will note the change in modes in the conversion; 0516 3 ! message.; 0517 3 !N; 0518 3 %CHECK (LIB$SYS_FAO (KD_AF, 0, DOMODE, .LNMMLEN, LNMOMODE));(; 0519 3 OP [OP_V_CONVERT] = 1;; 0520 2 END;; 0521 2 !U; 0522 2 ! Get flags from the command qualifiers. Note that no assumptions areU; 0523 2 ! made in the program; what actions are default are determined SOLELY,; 0524 2 ! by the command definition.; 0525 2 !3; 0526 2 %CHECK (LIB$GET_EF (OP [OP_L_EF]));5; 0527 2 OP [OP_V_LOG] = CLI$PRESENT (KD_LOG);=; 0528 2 OP [OP_V_RELEASE] = CLI$PRESENT (KD_RELEASE);; 0529 2 !V; 0530 2 ! We have to tell him about his mistake if he tries to release what he; 0531 2 ! doesn't have.; 0532 2 !G; 0533 2 IF .OP [OP_V_RELEASE] AND (NOT .OP [OP_V_CONVERT]) THEN; 0534 3 BEGIN"; 0535 3 MESSAGE [0] = 3;0; 0536 3 MESSAGE [1] = LOCK__NOTLOCKED;"; 0537 3 MESSAGE [2] = 1;*; 0538 3 MESSAGE [3] = DRESOURCE;+; 0539 3 $PUTMSG (MSGVEC=MESSAGE);9; 0540 3 RETURN .MESSAGE [1] OR STS$M_INHIB_MSG;; 0541 2 END;; 0542 2 !M; 0543 2 ! Special actions if he's trying to release an existing lock.; 0544 2 !.; 0545 2 IF NOT .OP [OP_V_RELEASE] THEN; 0546 3 BEGIN9; 0547 3 OP [OP_V_WAIT] = CLI$PRESENT (KD_WAIT);:; 0548 3 %CHECK (CLI$GET_VALUE (KD_MODE, DMODE));K; 0549 3 %CHECK (LIB$LOOKUP_KEY (DMODE, KR_MODES, STATUS, DMODE));+; 0550 3 OP [OP_B_MODE] = .STATUS;:; 0551 3 %CHECK (CLI$GET_VALUE (KD_SCOPE, DSCR));J; 0552 3 %CHECK (LIB$LOOKUP_KEY (DSCR, KR_SCOPES, STATUS, DSCR));.; 0553 3 OP [OP_V_SYSLOCK] = .STATUS;; 0554 2 END;; 0555 2 !S; 0556 2 ! Setup all done; change to kernel mode (to get locks at supervisor9; 0557 2 ! mode) and twiddle things appropriately.; 0558 2 !5; 0559 2 STATUS = $CMKRNL (ROUTIN=KERNEL_ENQ);; 0560 2 !/; 0561 2 ! Now handle the return status.; 0562 2 !; 0563 2 !V; 0564 2 ! We'll get the NOTQUEUED status only if he specified /NOWAIT; we haveO; 0565 2 ! no other interest in anything at all, since we were obviously; 0566 2 ! unsuccessful.; 0567 2 !1; 0568 2 IF .STATUS EQL SS$_NOTQUEUED THEN; 0569 3 BEGIN"; 0570 3 MESSAGE [0] = 4;-; 0571 3 MESSAGE [1] = LOCK__NOWAIT;"; 0572 3 MESSAGE [2] = 2;"; 0573 3 MESSAGE [3] = 0;*; 0574 3 MESSAGE [4] = DRESOURCE;+; 0575 3 $PUTMSG (MSGVEC=MESSAGE);9; 0576 3 RETURN .MESSAGE [1] OR STS$M_INHIB_MSG;; 0577 2 END;; 0578 2 !X; 0579 2 ! Now for the hard part. If there was an error doing a $DEQ, we WILL NOT:; 0580 2 ! doHc LOCK011.Ah$+|VERHART.XFR]LOCK.MARLIS;1iltMK anything special about displaying it.; 0581 2 !%; 0582 2 IF .OP [OP_V_RELEASE]; 0583 2 THEN; 0584 3 BEGIN; 0585 3 !P; 0586 3 ! See if there was an error. On a release, we just return the#; 0587 3 ! error message.; 0588 3 !; 0589 3 %CHECK ();#; 0590 3 MESSAGE [0] = 5;0; 0591 3 MESSAGE [1] = LOCK__RELEASED;#; 0592 3 MESSAGE [2] = 3;#; 0593 3 MESSAGE [3] = 0;(; 0594 3 MESSAGE [4] = DOMODE;+; 0595 3 MESSAGE [5] = DRESOURCE;; 0596 3 END; 0597 2 ELSE; 0598 3 BEGING; 0599 3 IF (.STATUS EQL SS$_NORMAL) AND .OP [OP_V_WAIT] THEN; 0600 4 BEGIN; 0601 4 !N; 0602 4 ! If he wanted to wait for his lock, and he wanted to know if weK; 0603 4 ! had to do so (/LOG present), then tell him what he wants to; 0604 4 ! know.; 0605 4 !%; 0606 4 MESSAGE [0] = 4;.; 0607 4 MESSAGE [1] = LOCK__WAIT;%; 0608 4 MESSAGE [2] = 2;; 0609 4 MESSAGE [3] = 0;-; 0610 4 MESSAGE [4] = DRESOURCE;E; 0611 4 IF .OP [OP_V_LOG] THEN $PUTMSG (MSGVEC=MESSAGE);; 0612 4 !N; 0613 4 ! No do like we said we were going to, and wait for his request.; 0614 4 !=; 0615 4 $SYNCH (EFN=.OP [OP_L_EF], IOSB=LKSTAT);; 0616 3 END;; 0617 3 !S; 0618 3 ! When we get here, we have succeeded. We have either gotten theP; 0619 3 ! lock, converted it, or released it. Say the right things toL; 0620 3 ! the l'user. We basically just set up the message vectorQ; 0621 3 ! specific to each case. It will be displayed, if appropriate,1; 0622 3 ! at the end of this sequence.; 0623 3 !(; 0624 3 IF .OP [OP_V_CONVERT]; 0625 3 THEN; 0626 4 BEGIN&; 0627 4 MESSAGE [0] = 6;4; 0628 4 MESSAGE [1] = LOCK__CONVERTED;&; 0629 4 MESSAGE [2] = 4;; 0630 4 MESSAGE [3] = 0;+; 0631 4 MESSAGE [4] = DOMODE;.; 0632 4 MESSAGE [5] = DRESOURCE;*; 0633 4 MESSAGE [6] = DMODE;; 0634 4 END; 0635 3 ELSE; 0636 4 BEGIN&; 0637 4 MESSAGE [0] = 5;3; 0638 4 MESSAGE [1] = LOCK__OBTAINED;&; 0639 4 MESSAGE [2] = 3;; 0640 4 MESSAGE [3] = 0;*; 0641 4 MESSAGE [4] = DMODE;.; 0642 4 MESSAGE [5] = DRESOURCE;; 0643 3 END;; 0644 2 END;@; 0645 2 IF .OP [OP_V_LOG] THEN $PUTMSG (MSGVEC=MESSAGE);6; 0646 2 %CHECK ($CMKRNL (ROUTIN=KERNEL_POST));; 0647 2 !Y; 0648 2 ! Turn off the QUEUED flag because we've completed everything. Otherwise,Y; 0649 2 ! the exit handler will be given confusing instructions. We only want himB; 0650 2 ! to do things if we fell out before getting here.; 0651 2 !%; 0652 2 OP [OP_V_QUEUED] = 0;7; 0653 2 RETURN .MESSAGE [1] OR STS$M_INHIB_MSG;; 0654 1 END; 0026E .BLKB 22 00# 00270 P.ABD: .BYTE 0[40] ;5 00000001 00298 P.ABE: .LONG 1 ;@ 000002A4 00000005 0029C P.ABF: .LONG 5, 676 ;> 00000000G 002A4 .LONG LOCK__LNMCONFLICT ;0 00000001 002A8 .LONG 1 ;4 00000000' 002AC .ADDRESS U.12 ;) .EXTRN SYS$DCLEXH, SYS$TRNLNM .EXTRN SYS$SYNCH U.5:U 0FFC 00000 .ENTRY LOCK, Save R2,R3,R4,R5,R6,R7,R8,R9,R10,R11 ; 0408K 5B 00000000G 00 9E 00002 MOVAB LIB$SYS_FAO, R11 ;K 5A 00000000G 00 9E 00009 MOVAB CLI$PRESENT, R10 ;L 59 00000000G 00 9E 00010 MOVAB CLI$GET_VALUE, R9 ;I 58 00000000G 00 9E 00017 MOVAB SYS$PUTMSG, R8 ;? 57 9F AF 9E 0001E MOVAB P.ABD, R7 ;C 56 00000000' EF 9E 00022 MOVAB U.6, R6 ;H 5E FDB0 CE 9E 00029 MOVAB -592(SP), SP ;J 6D 027F CF DE 0002E MOVAL 25$, (FP) ; 0458V D8 AD 67 28 28 00033 MOVC3 #40, P.ABD, LNMLST ; 04529 18 A6 9F 00038 PUSHAB EBLOCK ; 0462J 00000000G 00 01 FB 0003B CALLS #1, SYS$DCLEXH ;C 7C 50 E9 00042 BLBC ___STATUS, 1$ ;< 30 A6 9F 00045 PUSHAB DRESOURCE ; 0463; FD94 C7 9F 00048 PUSHAB KD_P1 ;F 69 02 FB 0004C CALLS #2, CLI$GET_VALUE ;C 6F 50 E9 0004F BLBC ___STATUS, 1$ ;< 30 A6 9F 00052 PUSHAB DRESOURCE ; 04644 38 A6 9F 00055 PUSHAB DLNAME ;4 7E D4 00058 CLRL -(SP) ;= FDE8 C7 9F 0005A PUSHAB KD_LNAME ;D 6B 04 FB 0005E CALLS #4, LIB$SYS_FAO ;C 78 50 E9 00061 BLBC ___STATUS, 2$ ;O D8 AD 000200FF 8F D0 00064 MOVL #131327, LNMLST ; 0469P DC AD FED8 CD 9E 0006C MOVAB LNMEQV, LNMLST+4 ; 0470J E0 AD 04 AE 9E 00072 MOVAB LNMLEN, LNMLST+8 ; 0471Q E4 AD 00010004 8F D0 00077 MOVL #65540, LNMLST+12 ; 0473J E8 AD 28 A7 9E 0007F MOVAB P.ABE, LNMLST+16 ; 0474R F0 AD 000200FF 8F D0 00084 MOVL #131327, LNMLST+24 ; 0476M F4 AD 28 AE 9E 0008C MOVAB LNMOMODE, LNMLST+28 ; 0477L F8 AD 08 AE 9E 00091 MOVAB LNMMLEN, LNMLST+32 ; 04789 D8 AD 9F 00096 PUSHAB LNMLST ; 04834 04 AE D4 00099 CLRL 4(SP) ;4 04 AE 9F 0009C PUSHAB 4(SP) ;4 38 A6 9F 0009F PUSHAB DLNAME ;> FDFC C7 9F 000A2 PUSHAB KD_LTABLE ;4 7E D4 000A6 CLRL -(SP) ;J 00000000G 00 05 FB 000A8 CALLS #5, SYS$TRNLNM ;@ 0C AE 50 D0 000AF MOVL R0, STATUS ;N 000001BC 8F 0C AE D1 000B3 CMPL STATUS, #444 ; 04851 4A 13 000BB BEQL 4$ ;K 50 0C AE D0 000BD MOVL STATUS, ___STATUS ; 0487F 4D 50 E9 000C1 1$: BLBC ___STATUS, 5$ ;E 08 04 AE B1 000C4 CMPW LNMLEN, #8 ; 04941 1D 13 000C8 BEQL 3$ ;d 18 00 2C A7 14 2C 000CA MOVC5 #20, P.ABF, #0, #24, MESSAGE ; 0503% 10 AE 000D0 ;9 7E 7C 000D2 CLRQ -(SP) ; 05054 7E D4 000D4 CLRL -(SP) ;5 1C AE 9F 000D6 PUSHAB MESSAGE ;C 68 04 FB 000D9 CALLS #4, SYS$PUTMSG ;F 32 50 E9 000DC 2$: BLBC ___STATUS, 5$ ;N 50 100002A4 8F D0 000DF MOVL #268436132, R0 ; 0506( 04 000E6 RET ;Y 0C A6 FED8 CD 08 28 000E7 3$: MOVC3 #8, LNMEQV, LKSTAT ; 0512; 28 AE 9F 000EE PUSHAB LNMOMODE ; 0518C 7E 0C AE 3C 000F1 MOVZWL LNMMLEN, -(SP) ;4 48 A6 9F 000F5 P3k LOCK011.Ah$+|VERHART.XFR]LOCK.MARLIS;1ilZUSHAB DOMODE ;4 7E D4 000F8 CLRL -(SP) ;; FE08 C7 9F 000FA PUSHAB KD_AF ;D 6B 05 FB 000FE CALLS #5, LIB$SYS_FAO ;C 78 50 E9 00101 BLBC ___STATUS, 8$ ;A 66 01 88 00104 BISB2 #1, OP ; 0519; 05 A6 9F 00107 4$: PUSHAB OP+5 ; 0526J 00000000G 00 01 FB 0010A CALLS #1, LIB$GET_EF ;F 7A 50 E9 00111 5$: BLBC ___STATUS, 9$ ;@ FDD8 C7 9F 00114 PUSHAB KD_LOG ; 0527D 6A 01 FB 00118 CALLS #1, CLI$PRESENT ;R 66 01 05 50 F0 0011B INSV R0, #5, #1, OP ;D FDC0 C7 9F 00120 PUSHAB KD_RELEASE ; 0528D 6A 01 FB 00124 CALLS #1, CLI$PRESENT ;R 66 01 03 50 F0 00127 INSV R0, #3, #1, OP ;O 1F 66 03 E1 0012C BBC #3, OP, 7$ ; 0533< 18 66 E8 00130 BLBS OP, 6$ ;F 50 A6 03 D0 00133 MOVL #3, MESSAGE ; 0535Z 54 A6 00000000G 8F D0 00137 MOVL #LOCK__NOTLOCKED, MESSAGE+4 ; 0536H 58 A6 01 D0 0013F MOVL #1, MESSAGE+8 ; 0537O 5C A6 30 A6 9E 00143 MOVAB DRESOURCE, MESSAGE+12 ; 05387 0093 31 00148 BRW 12$ ; 0539S 5F 66 03 E0 0014B 6$: BBS #3, OP, 11$ ; 0545D FDCC C7 9F 0014F 7$: PUSHAB KD_WAIT ; 0547D 6A 01 FB 00153 CALLS #1, CLI$PRESENT ;R 66 01 04 50 F0 00156 INSV R0, #4, #1, OP ;9 40 A6 9F 0015B PUSHAB DMODE ; 0548< FDB0 C7 9F 0015E PUSHAB KD_MODE ;F 69 02 FB 00162 CALLS #2, CLI$GET_VALUE ;C 3D 50 E9 00165 BLBC ___STATUS, 10$ ;9 40 A6 9F 00168 PUSHAB DMODE ; 05494 10 AE 9F 0016B PUSHAB STATUS ;= FE44 C7 9F 0016E PUSHAB KR_MODES ;4 40 A6 9F 00172 PUSHAB DMODE ;N 00000000G 00 04 FB 00175 CALLS #4, LIB$LOOKUP_KEY ;F 74 50 E9 0017C 8$: BLBC ___STATUS, 14$ ;G 04 A6 0C AE 90 0017F MOVB STATUS, OP+4 ; 05508 28 A6 9F 00184 PUSHAB DSCR ; 0551= FDA4 C7 9F 00187 PUSHAB KD_SCOPE ;F 69 02 FB 0018B CALLS #2, CLI$GET_VALUE ;F 62 50 E9 0018E 9$: BLBC ___STATUS, 14$ ;8 28 A6 9F 00191 PUSHAB DSCR ; 05524 10 AE 9F 00194 PUSHAB STATUS ;> FE88 C7 9F 00197 PUSHAB KR_SCOPES ;3 28 A6 9F 0019B PUSHAB DSCR ;N 00000000G 00 04 FB 0019E CALLS #4, LIB$LOOKUP_KEY ;G 4B 50 E9 001A5 10$: BLBC ___STATUS, 14$ ;[ 66 01 02 0C AE F0 001A8 INSV STATUS, #2, #1, OP ; 0553= 7E D4 001AE 11$: CLRL -(SP) ; 05599 FD28 CF 9F 001B0 PUSHAB U.3 ;J 00000000G 00 02 FB 001B4 CALLS #2, SYS$CMKRNL ;@ 0C AE 50 D0 001BB MOVL R0, STATUS ;O 000009B8 8F 0C AE D1 001BF CMPL STATUS, #2488 ; 05682 22 12 001C7 BNEQ 13$ ;F 50 A6 04 D0 001C9 MOVL #4, MESSAGE ; 0570W 54 A6 00000000G 8F D0 001CD MOVL #LOCK__NOWAIT, MESSAGE+4 ; 0571H 58 A6 02 7D 001D5 MOVQ #2, MESSAGE+8 ; 0573O 60 A6 30 A6 9E 001D9 MOVAB DRESOURCE, MESSAGE+16 ; 0574= 7E 7C 001DE 12$: CLRQ -(SP) ; 05754 7E D4 001E0 CLRL -(SP) ;5 50 A6 9F 001E2 PUSHAB MESSAGE ;C 68 04 FB 001E5 CALLS #4, SYS$PUTMSG ;7 00BC 31 001E8 BRW 23$ ; 0576T 1F 66 03 E1 001EB 13$: BBC #3, OP, 16$ ; 0582K 50 0C AE D0 001EF MOVL STATUS, ___STATUS ; 0589G 01 50 E8 001F3 14$: BLBS ___STATUS, 15$ ;( 04 001F6 RET ;J 50 A6 05 D0 001F7 15$: MOVL #5, MESSAGE ; 0590Y 54 A6 00000000G 8F D0 001FB MOVL #LOCK__RELEASED, MESSAGE+4 ; 0591H 58 A6 03 7D 00203 MOVQ #3, MESSAGE+8 ; 0593L 60 A6 48 A6 9E 00207 MOVAB DOMODE, MESSAGE+16 ; 05947 73 11 0020C BRB 20$ ; 0595I 01 0C AE D1 0020E 16$: CMPL STATUS, #1 ; 05992 34 12 00212 BNEQ 18$ ;K 30 66 04 E1 00214 BBC #4, OP, 18$ ;F 50 A6 04 D0 00218 MOVL #4, MESSAGE ; 0606U 54 A6 00000000G 8F D0 0021C MOVL #LOCK__WAIT, MESSAGE+4 ; 0607H 58 A6 02 7D 00224 MOVQ #2, MESSAGE+8 ; 0609O 60 A6 30 A6 9E 00228 MOVAB DRESOURCE, MESSAGE+16 ; 0610P 0A 66 05 E1 0022D BBC #5, OP, 17$ ; 06114 7E 7C 00231 CLRQ -(SP) ;4 7E D4 00233 CLRL -(SP) ;5 50 A6 9F 00235 PUSHAB MESSAGE ;C 68 04 FB 00238 CALLS #4, SYS$PUTMSG ;= 0C A6 9F 0023B 17$: PUSHAB LKSTAT ; 06153 05 A6 DD 0023E PUSHL OP+5 ;J 00000000G 00 02 FB 00241 CALLS #2, SYS$SYNCH ;F 21 66 E9 00248 18$: BLBC OP, 19$ ; 0624F 50 A6 06 D0 0024B MOVL #6, MESSAGE ; 0627Z 54 A6 00000000G 8F D0 0024F MOVL #LOCK__CONVERTED, MESSAGE+4 ; 0628H 58 A6 04 7D 00257 MOVQ #4, MESSAGE+8 ; 0630L 60 A6 48 A6 9E 0025B MOVAB DOMODE, MESSAGE+16 ; 0631O 64 A6 30 A6 9E 00260 MOVAB DRESOURCE, MESSAGE+20 ; 0632K 68 A6 40 A6 9E 00265 MOVAB DMODE, MESSAGE+24 ; 06332 1A 11 0026A BRB 21$ ;J 50 A6 05 D0 0026C 19$: MOVL #5, MESSAGE ; 0637Y 54 A6 00000000G 8F D0 00270 MOVL #LOCK__OBTAINED, MESSAGE+4 ; 0638H 58 A6 03 7D 00278 MOVQ #3, MESSAGE+8 ; 0640K 60 A6 40 A6 9E 0027C MOVAB DMODE, MESSAGE+16 ; 0641S 64 A6 30 A6 9E 00281 20$: MOVAB DRESOURCE, MESSAGE+20 ; 0642T 0A 66 05 E1 00286 21$: BBC #5, OP, 22$ ; 06454 7E 7C 0028A CLRQ -(SP) ;4 7E D4 0028C CLRL -(SP) ;5 50 A6 9F 0028E PUSHAB MESSAGE ;C 68 04 FB 00291 CALLS #4, SYS$PUTMSG ;= 7E D4 00294 22$: CLRL -(SP) ; 06469 FCBA CF 9F 00296 PUSHAB U.4 ;J 00000000G 00 02 FB 0029A CALLS #2, SYS$CMKRNL ;C 0C 50 E9 002A1 BLBC ___STATUS, 24$ ;A 66 02 8A 002A4 BICB2 #2, OP ; 0652f  \ LOCK011.Ah$+|VERHART.XFR]LOCK.MARLIS;1ili 50 54 A6 10000000 8F C9 002A7 23$: BISL3 #268435456, MESSAGE+4, R0 ; 0653, 04 002B0 24$: RET ;> 0000 002B1 25$: .WORD Save nothing ;4 7E D4 002B3 CLRL -(SP) ;1 5E DD 002B5 PUSHL SP ;B 7E 04 AC 7D 002B7 MOVQ 4(AP), -(SP) ;Q 00000000G 00 03 FB 002BB CALLS #3, LIB_CLI_SIG_TO_RET ;( 04 002C2 RET ;?; Routine Size: 707 bytes, Routine Base: _LOCK_CODE + 02B0 ; 0655 1 ; 0656 1 END; 0657 0 ELUDOM; PSECT SUMMARY;#; Name Bytes Attributes;Y; _LOCK_DATA 120 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON, PIC,ALIGN(0)Y; _LOCK_CODE 1395 NOVEC,NOWRT, RD , EXE, SHR, LCL, REL, CON, PIC,ALIGN(0); Library Statistics;9; -------- Symbols -------- Pages Processing9; File Total Loaded Percent Mapped Time;Z; SYS$COMMON:[SYSLIB]LIB.L32;1 48415 90 0 2654 00:01.9a; USR$ROOT:[EVERHART.XFR]KENLIB.L32;106 1011 73 7 78 00:01.4; Information: 0; Warnings: 49 ; Errors: 0; COMMAND QUALIFIERSI; BLISS/LIST:ASSEMBLER/SOURCE:NOHEADER/MACHINE_CODE:UNIQUE_NAMES LOCK.B32; Compilation Complete*[EVERHART.XFR]LOCK.OBJ;17+,!y./ 4 n-|0123KPWO5 6P̎7289GHJ2LOCK1-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`|~~Ph1fЮ 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!:_ [A5`u}: _E>Ef\G?2;`Oj eag8e1x=be.}M8ltWp++-((>O{YN M8- ^~ 0:hXw)!*YC3It*c# q;:nX-g<&[ck3" wAr$ !#;{,1S,=-Z%]~U+haAx@$#($RD6%}9oag?$pBnl8cCY^~)WwpL5&}7w 5D@]d-AJ?W4[yrbiy#R(xxmN`t|)Argm23;p?0Z5>fdjenA*2?]`kC 8;h'8 &t7:@4zJRON){\Q"t;V%U%*Xw-?_|j|UAvg 19% }7=0}""]|ZOf,M)l4YX%+D58 gVx*r<@e yz;RP_+c qr]]dUj[uJ)=V]qMILbV F9Wzs{<49dJioNxooBL|,S0tXj,qrN".4+B$k`2_@@p>#C,Jw 5K#Fk3t&{evk/-VV=o OXm\3!60]G ^LK~|Op 5fQ-6pR5n+2OA#*l-S Gi>( Zx)9I_uE=?X.6J_]Ao7'nh}@{U_I2R]u'iN~pM@jf]jUoP4EPEdR'3 }?rq/lTQJO(OzyS:!(9%bucOr76\3 5o )A$G/lGtGRr-lNbpLwPMT~]I%f97l+4Z=k{v$+zZkP(0F}q: |`%YFk*I;)ksXmv_SR"=#ocl,&W1t%T'",~RK5CbFRwWCYy<#NF*CHq-Hs"{K/L=Z7F:br@LGCD"~h}LH,{Ad5!Y>sFZ?,"i5JRdT#2r(V]w6Qz J,P] 0'L]]N9{&-VTuGVJpfYJaZ'&O?|6)D7w.|8{?E s;!!v:7i4`u27q[/(=uz[UAU6dBsjN_@WGK[YL/Ou(Lo RQAdh[1QEda:avbY3+i'+#SJgkU}~qbt^XZ~Iv|PR]+]0Z3Eo^&RmkGLbpmI$/uD}LM^}>nYHZC:E^Hs1]@[d@: lh {B{K#<.^ &43A.x~a]ZxW0#SQFlo}:vwg lRs)2zAm9ATg\w[bTmW2 1TWmbuq#k>LjJc8&B{Esm{#{F *X[G:]_1 9!G]P9](_T)-8U7 Cgg{:62' Y_5Us%Di&*MM4h]az}$^*""ZdJM4eO-KBX/'6 8dA*1$`LKrR!G53Vow T,ezMUIez]6b]TK52W\("=t_fQR`K-e/brF,YLz"nT{,tVL(A>vmq -/Px)Bn=NK{7waUg>{"8>eVYv1vT ELc} [@t`grPGq Vtv)SgS6vXkq`,,BpO} w *tbJ`%*;iacCAt7oTLl< (*.gKma#!qjcG4X#`Y"!n H1SO :(IGO|yU]%eN*~pgJKuK 8.`K52Xo15ftiu*%~E~]Ycj@O2wpnxwv5;1{!&{[wsQ8;`HD'{}GCGKDFKS_U3&}+9v<&dcYUY'a pXXP #yHA%pjM/hG9%pcp'1])N{8|kL sJq!h= tPB1!Le A7MOze1\ M :|z]\hs=)CLVBS@3 +p( Tuՠ5n4sVsDNo kgU]e96]k2(4K;F_xgw!QN#{Fp)^BIqz=8!X;!HPn IDYEkWMM|y2Ax-.C&97T)zЕzw!vZJI jȯ1\EƤTs1`F!frR'?2 +ϣ)9w]_E=)4aB\|0C:~c{a"{K\(t UVwlt:4N+xŔ=IWeVȚ ^DI ߭={D{HHyN:u  q}cjjܙ(L+îvS,3,0|UrkW!CnKn`DyC._|"ZsJA r`f3oJ|D6W%OOmmZ+1 >&Qrxs$d 4 (a;uZa;gR&S#('Tr/=Pf]h_:2lgjrOaa&b;g%^UpPcukuw >_ҧ<]GNH6W -S3Fsj0r'A{<[+ZV'Gt1d.}xJs`u|p"/64F Xn1@ ~H4?tK%4Xa4@aW,NA0WQwFF~0CK73;(/_A1sJ$řwwHx:Ώw:]7u:僢]I9ÍD:_Ob6dB(}ҸAcah|h >Fs,Tu՞Y 2^ 9)控cbLu7!u^!U} 2.E->L)|;(w"*IqDgcx&0,E9*G=󊴂'^o0:xYF1Xۀ/dOߝraGx}E}'/}^MU_礜PalWvfh_3h7{:R$7i]s^=@*?7](GUUR;wE0_Z3v`p*AjeV(q Yvxg 1lvKXZ'o?[sqv1c;X?D1@U1i8 8%nQ]19 ! ?#cu =6O:4LYx;Wt pnHR\ tB=ZMWLO8>{,5W:90mTx{+9=COPmR9Av1{; f|hM5482?4ju{"d2|Au0/*1 Ya6%!D<2VcqG9"aKiqioCp9u-FBM_AtvF,`w&N5UG!a[z Vn2E=nH, -.zgw #):},Ad|\MIdpxn*lWKX3!2J wmt$4s+bf ~C=L)STVHB,Bt^\_h(;z!5eS, 4WOXE 3fzt*N0J hmclk WvrPA^"J\dg6AXb-L[j3ux%w+x|~H> p$@tGySCEzV=6Z.b /N #d3jsU[qC {$L l ^[2nQy`G[WGap=~B>3SIZy$+zruQLCP%kIe%gk]4 jI@wF!$VY$'uwG^H,Xs 1xc)Zy Z|W|$y$5?:fZF;EQ;DK8h (0s#esaJOI2e0M+: 5 iKCVKt?y9H~ _2 mw1q}CwY3H^f< wS!LCsI6g~ha|uX8UDnTX|lz!=v:: n=;uA*]2>y-}JMu %)aY;SQ[1~M ?9|cH,bu@ ^ro]#<5i4N@zZO &XfuTJ` X5#1F-PcDiwLqR,-vK]{3oUh[H2\zl)f~+0pl#ocG LdakTR(DVr4\82D03 GH T#rK8( Nozi/%QD-UzGid?'qnEQ`A}-II3K-$F:sW@c$#Jk)V ]H!KXE, F& c{KDfd Q"PPGM5oM3[mpSTjy/Y9'.cP|!{)c rw(4s^XQq>&jjMu:J:vi X HFF@7BjOhW>f5u@j _4Rn@^9"5!U@Wj/&4EGxU$  $6RO0X>mS@< DFh-kDCY  y"vWw8+8Zb|Fr]":XUO V5('eg`Ay8 e_cy;Q3]`m(}]P(DXZU A2 I0Gli2{U.oz|8wv) tY(1?i1dy `C1a2Y:_:v.0oF F 7>B1RQ#X4t=0!,u3 7=) K*(2KjP0@}fL4{\3a3/zN&(m% hJ8vx/K\Wcnri e8*1&!6Z*/We#}$*]{;h9SC0NLG0eS/FUF|2 (0:16wc@ ~,O0pkd9~8 a31j]Ue/7=k[ 4P.IZ,DudR2{7O'RM4$:EC:" JA[z[?~VJ 9!|SGOxtXm<.#!)Gt\  *9,'"8B Tz%o'8:]3_ sX-|OjPgJltZ @unIN$ CJo:-' >KxN9t1g('R^6~k{ls d+9j Kxrm&V@%5EHTGE}<~D;kMMbc !:v7* 1i;'D mv_$5|&#"2 D|~VIJ{aU6M45g N\ yH m!#CBlA(yi(48WyKNb?y}oMVUo~"rhNap@PXr<580 2 ! do"=} LOCK011.A!y|[EVERHART.XFR]LOCK.OBJ;17h _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*[EVERHART.XFR]LOCK011.MEM;1+,/". / 4J :-|0123KPWO 56x7#289GHJ   : 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 a s 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 in 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.  *[EVERHART.XFR]LOCK011.RNO;1+,e"p./ 4P-|0123KPWO 567@s289GHJ.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 d#] LOCK011.Ae"p|VERHART.XFR]LOCK011.RNO;1Pefault 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*[EVERHART.XFR]LOCKIVP.COM;7+,"./ 4(L-|0123KPWO56ʸ^7289GHJ $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*[EVERHART.XFR]LOCKRTL.OBJ;1+,"./ 4-|0123KPWO5 6͎7289GHJ@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 *[EVERHART.XFR]MSGLOCK.MSG;4+,""./ 4A<-|0123KPWO56@7289GHJ! .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*[EVERHART.XFR]VT200_KIND.B32;10+,8X./ 4M-|0123KPWO56@,iij7`289GHJMODULE VT200_KIND ( MAIN = VT200_KIND,$ %TITLE'Is terminal VT200 or VT240' IDENT = '1-0.0' ) = BEGIN !++ ! FACILITY: User utilities ! ! ABSTRACT: !E ! This program solicits the terminal for detailed information aboutI ! itself. If the VAX says it is a VT200 series terminal, the secondaryD ! Device Attributes (DA) request is made, and a determination madeA ! based upon the report. The result is set into the DCL symbolC ! VT_KIND, and will be the string "VT220", "VT240", or "UNKNOWN". != ! Note that the typeahead buffer is purged by this program. !0 ! ENVIRONMENT: User mode, attached to terminal ! ! AUTHOR: Ken A L Coar ! ! MODIFIED BY: !& ! KLC0259 Ken Coar 20-JAN-1987 08:524 ! Original. Developed because of DECUS DCS need. !-- %SBTTL'Declarations' ! ! SWITCHES: ! SWITCHESE ADDRESSING_MODE (EXTERNAL = GENERAL, NONEXTERNAL = WORD_RELATIVE); ! ! LINKAGES: ! ! NONE. $ G LOCK011.A8X|[EVERHART.XFR]VT200_KIND.B32;10M! ! ! INCLUDE FILES: !0 LIBRARY 'SYS$LIBRARY:LIB'; ! LIB plus STARLET5 LIBRARY 'KEN_LIBRARY:KENLIB'; ! Local declarations ! ! FORWARD ROUTINES: ! FORWARD ROUTINE VT200_KIND : EXTERNAL_CALL; ! ! EXTERNAL REFERENCES: ! EXTERNAL ROUTINE LIB$FREE_EF, LIB$GET_EF, LIB$SET_SYMBOL, STR$COPY_DX; ! ! MACROS: ! ! NONE. ! ! ! EQUATED SYMBOLS: ! LITERAL K_CSI = %X'9B', K_ESC = %X'1B', K_TTBUF_SIZE = 128; ! ! FIELDS: ! ! NONE. ! ! ! PSECTS: ! RTL_PSECTS (FACILITY=DCS); ! ! OWN STORAGE: ! OWN$ DSYMBOL : DESCR (CLASS=DYNAMIC), DC : LONG, DVILST : _ITMLST( DVI$_, (4, DEVCLASS, DC, 0) ),( TTBUF : VECTOR [K_TTBUF_SIZE, BYTE], TTCHAN : WORD, REQEF : LONG, REQSTAT : _IOSB, !J ! Note that the following must be done at run-time to be pretty becauseG ! it needs bit %C'c' (63 hex) set, and it is very ugly to do that in ! a BIND statement. !I ! Also, since all the other bits need to be clear, we have to fill theF ! structure with zero bytes. BLISS-32 no longer lets you have bothE ! an INITIAL and a PRESET on the same structure, which is a shame. ! R_TRM_BYTES : BBLOCK [16]! INITIAL (REP 16 OF BYTE (0)); BIND! KD_SYMNAME = %ASCID'VT_KIND', KD_VT220 = %ASCID'VT220', KD_VT240 = %ASCID'VT240',! KD_UNKNOWN = %ASCID'UNKNOWN', KD_INPUT_SOURCE = UPLIT LONG( %ASCID'SYS$INPUT', %ASCID'SYS$OUTPUT', %ASCID'SYS$COMMAND', %ASCID'TT', 0 ) : VECTOR [, LONG], !H ! Notice that we use an escape in the report request string. This isF ! because even the terminals in 8-bit mode recognise that sequence,E ! whereas those in 7-bit mode might not understand the CSI prefix. !6 KD_PROMPT = %ASCID %STRING (%CHAR (K_ESC), '[>0c') : BBLOCK, KR_TERMINATORS = UPLIT( WORD (16), WORD (0), LONG (R_TRM_BYTES) ); -%SBTTL'FIND_SOURCE - Locate the terminal LNM' ROUTINE FIND_SOURCE : INTERNAL_CALL = !++ ! FUNCTIONAL DESCRIPTION: !C ! This routine steps through the list of input sources defined byG ! KD_INPUT_SOURCE until it reaches a zero, or finds one that $GETDVIWF ! reports is defined by the VAX as a terminal. It assigns a channel> ! to the terminal, if found; otherwise, it returns an error. ! ! CALLING SEQUENCE: !& ! ret-status.wlc.v = FIND_SOURCE (); ! ! FORMAL PARAMETERS: ! ! NONE. ! ! IMPLICIT INPUTS: !@ ! KD_INPUT_SOURCE list of descriptor addresses, terminated by3 ! a longword of zero. The descriptors contain0 ! device or logical names to be checked for ! terminal-ness. ! ! REQSTAT IOSB for $GETDVIW. !0 ! REQEF longword containing EF for $GETDVIW. ! ! IMPLICIT OUTPUTS: !8 ! TTCHAN word to receive the channel number assigned! ! to the terminal, if found. ! ! COMPLETION STATUS: !7 ! SS$_NORMAL successful completion, channel assigned< ! SHR$_NOTTERM warning; none of the specified sources was& ! known as a terminal by the VAX.5 ! SS$_xxx status returned by $GETDVIW or $ASSIGN. ! ! SIDE EFFECTS: !* ! Channel assigned if terminal is found. ! !-- BEGIN LOCAL IDX : LONG INITIAL (0), SOURCE : LONG, STATUS : LONG;5 WHILE (SOURCE = .KD_INPUT_SOURCE [.IDX]) NEQ 0 DO BEGIN STATUS = $GETDVIW( DEVNAM=.SOURCE, EFN=.REQEF, IOSB=REQSTAT, ITMLST=DVILST );8 IF .STATUS THEN STATUS = .REQSTAT [IOSB_W_STATUS]; %CHECK (.STATUS);( IF .DC EQL DC$_TERM THEN EXITLOOP; IDX = .IDX + 1; END;. IF .SOURCE EQL 0 THEN RETURN SHR$_NOTTERM;3 %CHECK ($ASSIGN (CHAN=TTCHAN, DEVNAM=.SOURCE)); RETURN SS$_NORMAL; END; !%SBTTL'VT200_KIND - Main program' GLOBAL ROUTINE VT200_KIND : EXTERNAL_CALL = !++ ! FUNCTIONAL DESCRIPTION: !J ! This is the main program. It calls FIND_SOURCE to locate the terminalH ! (if there is one), and then sends a secondary DA request to it. TheG ! response, if there is one, is parsed, and the KD_SYMNAME symbol set ! accordingly. != ! Note that the typeahead buffer is purged by this program. ! ! CALLING SEQUENCE: !& ! Called by DCL as main entry point. ! ! FORMAL PARAMETERS: ! ! NONE. ! ! IMPLICIT INPUTS: ! ! NONE. ! ! IMPLICIT OUTPUTS: != ! [KD_SYMNAME] Local DCL symbol whose name is specified by6 ! this identifier is defined as "VT220", "VT240",1 ! or "UNKNOWN", if a terminal can be found.. ! ! COMPLETION STATUS: !% ! SS$_NORMAL successful completion> ! SHR$_NOTTERM warning; no terminal found with this process2 ! other error from LIB$GET_EF, LIB$FREE_EF, or ! FIND_SOURCE (q.v.). ! ! SIDE EFFECTS: !E ! If no errors are encountered, a local DCL symbol will be defined. ! !-- BEGIN LABEL PARSE_LOAD; LOCAL TYPE_OFFSET : BYTE, SYMVAL : LONG, STATUS : LONG; %CHECK (LIB$GET_EF (REQEF)); %CHECK (FIND_SOURCE ()); !G ! Now set up the terminator mask by setting the %C'c' bit (63 hex).B ! This needs to be done at run-time because of megagrossity in* ! readability if done at compile-time. !3 R_TRM_BYTES [%C'c' / 8, %C'c' MOD 8, 1, 0] = 1; !K ! If we've gotten this far, we can interrogate the terminal. Note thatM ! anything the user has typed up to this point will be discarded from the ! typeahead buffer. ! STATUS = $QIOW( EFN=.REQEF, CHAN=.TTCHAN, IOSB=REQSTAT, FUNC=( IO$_TTYREADPALL OR IO$M_PURGE OR IO$M_NOECHO OR IO$M_TIMED ), P1=TTBUF, P2=K_TTBUF_SIZE, P3=3, P4=KR_TERMINATORS,! P5=.KD_PROMPT [DSC$A_POINTER], P6=.KD_PROMPT [DSC$W_LENGTH] ); !. ! The response to the above will be one of !@ ! A timeout (terminal too slow, or didn't understand query)/ ! CSI > n ; ... c 8-bit terminal response0 ! ESC [ > n ; ... c 7-bit terminal response !K ! In the last two above, the spaces between characters are for clarity;I ! they are not actually part of the response. The `n' is either `1,'5 ! indicating a VT220, or `2,' indicating a VT240. !H ! If the response does not comply to either of the above formats, we ! don't know what it is. !6 IF .STATUS THEN STATUS = .REQSTAT [IOSB_W_STATUS]; SYMVAL = KD_UNKNOWN; PARSE_LOAD: BEGIN7 IF .STATUS EQL SS$_TIMEOUT THEN LEAVE PARSE_LOAD; SELECTONE .TTBUF [0] OF SET !> ! If first character is a CSI, set the offset to the position ! of the identifying character. ! [K_CSI] : TYPE_OFFSET = 2; !< ! If it's an escape, increase the offset because the prefix8 ! is two characters (ESC [) rather than just one (CSI). ! [K_ESC] : TYPE_OFFSET = 3; !@ ! If the prefix isn't one of these, the user probably responded, ! with text on a non-VT200 series terminal. ! [OTHERWISE] : LEAVE PARSE_LOAD; TES;( SELECTONE .TTBUF [.TYPE_OFFSET] OF SET [%C'1'] : SYMVAL = KD_VT220; [%C'2'] : SYMVAL = KD_VT240; !A ! If it wasn't one of the above, we don't know what the response ! is, so ignore it. ! [OTHERWISE] : LEAVE PARSE_LOAD; %K LOCK011.A8X|[EVERHART.XFR]VT200_KIND.B32;10Msw TES; END; %( BLOCK PARSE_LOAD )% !5 ! Set the symbol according to the above analysis. !2 %CHECK (LIB$SET_SYMBOL (KD_SYMNAME, .SYMVAL)); !J ! We don't need the channel or event flag anymore, so let's get rid ofJ ! them. Note that we do this AFTER the symbol definition, so an error4 ! won't prevent the symbol from being available. !! %CHECK (LIB$FREE_EF (REQEF));$ %CHECK ($DASSGN (CHAN=.TTCHAN)); RETURN SS$_NORMAL; END; ENDELUDOM*[EVERHART.XFR]VT200_KIND.LIS;9+,0 .,/ 4{,+&-|0123KPWO-56 Qk֏7389GHJ B 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 1G 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (1); 0001 0 MODULE VT200_KIND; 0002 0 ( ; 0003 0 MAIN = VT200_KIND,0; 0004 0 %TITLE'Is terminal VT200 or VT240'; 0005 0 IDENT = '1-0.0'; 0006 0 ) = ; 0007 0 ; 0008 1 BEGIN; 0009 1 !++); 0010 1 ! FACILITY: User utilities; 0011 1 !; 0012 1 ! ABSTRACT:; 0013 1 !Q; 0014 1 ! This program solicits the terminal for detailed information aboutU; 0015 1 ! itself. If the VAX says it is a VT200 series terminal, the secondaryP; 0016 1 ! Device Attributes (DA) request is made, and a determination madeM; 0017 1 ! based upon the report. The result is set into the DCL symbolO; 0018 1 ! VT_KIND, and will be the string "VT220", "VT240", or "UNKNOWN".; 0019 1 !I; 0020 1 ! Note that the typeahead buffer is purged by this program.; 0021 1 !<; 0022 1 ! ENVIRONMENT: User mode, attached to terminal; 0023 1 !%; 0024 1 ! AUTHOR: Ken A L Coar; 0025 1 !; 0026 1 ! MODIFIED BY:; 0027 1 !2; 0028 1 ! KLC0259 Ken Coar 20-JAN-1987 08:52@; 0029 1 ! Original. Developed because of DECUS DCS need.; 0030 1 !-- ; 0031 1 "; 0032 1 %SBTTL'Declarations' ; 0033 1 ; 0034 1 !; 0035 1 ! SWITCHES:; 0036 1 ! ; 0037 1 ; 0038 1 SWITCHESQ; 0039 1 ADDRESSING_MODE (EXTERNAL = GENERAL, NONEXTERNAL = WORD_RELATIVE); ; 0040 1 ; 0041 1 !; 0042 1 ! LINKAGES:; 0043 1 !; 0044 1 ! NONE.; 0045 1 ! ; 0046 1 ; 0047 1 !; 0048 1 ! INCLUDE FILES:; 0049 1 ! ; 0050 1 <; 0051 1 LIBRARY 'SYS$LIBRARY:LIB'; ! LIB plus STARLETA; 0052 1 LIBRARY 'KEN_LIBRARY:KENLIB'; ! Local declarations ; 0053 1 ; 0054 1 !!; 0055 1 ! FORWARD ROUTINES:; 0056 1 ! ; 0057 1  bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 2W1-0.0 Declarations 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (1); 0058 1 FORWARD ROUTINE,; 0059 1 VT200_KIND : EXTERNAL_CALL; ; 0060 1 ; 0061 1 !$; 0062 1 ! EXTERNAL REFERENCES:; 0063 1 ! ; 0064 1 ; 0065 1 EXTERNAL ROUTINE; 0066 1 LIB$FREE_EF,; 0067 1 LIB$GET_EF,; 0068 1 LIB$SET_SYMBOL,; 0069 1 STR$COPY_DX; ; 0070 1 ; 0071 1 !; 0072 1 ! MACROS:; 0073 1 !; 0074 1 ! NONE.; 0075 1 ! ; 0076 1 ; 0077 1 ! ; 0078 1 ! EQUATED SYMBOLS:; 0079 1 ! ; 0080 1 ; 0081 1 LITERAL ; 0082 1 K_CSI = %X'9B', ; 0083 1 K_ESC = %X'1B',$; 0084 1 K_TTBUF_SIZE = 128; ; 0085 1 ; 0086 1 !; 0087 1 ! FIELDS:; 0088 1 !; 0089 1 ! NONE.; 0090 1 ! ; 0091 1 ; 0092 1 !; 0093 1 ! PSECTS:; 0094 1 ! ; 0095 1 (; 0096 1 RTL_PSECTS (FACILITY=DCS); ; 0097 1 ; 0098 1 !; 0099 1 ! OWN STORAGE:; 0100 1 ! ; 0101 1 ; 0102 1 OWN0; 0103 1 DSYMBOL : DESCR (CLASS=DYNAMIC),; 0104 1 DC : LONG,!; P 0105 1 DVILST : _ITMLST(; P 0106 1 DVI$_,%; P 0107 1 (4, DEVCLASS, DC, 0); 0108 1 ),4; 0109 1 TTBUF : VECTOR [K_TTBUF_SIZE, BYTE],; 0110 1 TTCHAN : WORD,; 0111 1 REQEF : LONG, ; 0112 1 REQSTAT : _IOSB,; 0113 1 !V; 0114 1 ! Note that the following must be done at run-time to be pretty because bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 3W1-0.0 Declarations 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (1)S; 0115 1 ! it needs bit %C'c' (63 hex) set, and it is very ugly to do that in"; 0116 1 ! a BIND statement.; 0117 1 !U; 0118 1 ! Also, since all the other bits need to be clear, we have to fill theR; 0119 1 ! structure with zero bytes. BLISS-32 no longer lets you have bothQ; 0120 1 ! an INITIAL and a PRESET on the same structure, which is a shame.; 0121 1 !); 0122 1 R_TRM_BYTES : BBLOCK [16]-; 0123 1 INITIAL (REP 16 OF BYTE (0)); ; 0124 1 ; 0125 1 BIND-; 0126 1 KD_SYMNAME = %ASCID'VT_KIND',); 0127 1 KD_VT220 = %ASCID'VT220',); 0128 1 KD_VT240 = %ASCID'VT240',-; 0129 1 KD_UNKNOWN = %ASCID'UNKNOWN',,; 0130 1 KD_INPUT_SOURCE = UPLIT LONG($; 0131 1 %ASCID'SYS$INPUT',%; 0132 1 %ASCID'SYS$OUTPUT',&; 0133 1 %ASCID'SYS$COMMAND',; 0134 1 %ASCID'TT',; 0135 1 0; 0136 1 )!; 0137 1 : VECTOR [, LONG],; 0138 1 !T; 0139 1 ! Notice that we use an escape in the report request string. This isR; 0140 1 ! because even the terminals in 8-bit mode recognise that sequence,Q; 0141 1 ! whereas those in 7-bit mode might not understand the CSI prefix.; 0142 1 !B; 0143 1 KD_PROMPT = %ASCID %STRING (%CHAR (K_ESC), '[>0c'); 0144 1 : BBLOCK,&; 0145 1 KR_TERMINATORS = UPLIT(; 0146 1 WORD (16),; 0147 1 WORD (0),#; 0148 1 LONG (R_TRM_BYTES); 0149 1 ); bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 4m1-0.0 FIND_SOURCE - Locate the terminal LNM 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (2)9; 0150 1 %SBTTL'FIND_SOURCE - Locate the terminal LNM'!; 0151 1 ROUTINE FIND_SOURCE; 0152 1 : INTERNAL_CALL =; 0153 1 !++'; 0154 1 ! FUNCTIONAL DESCRIPTION:; 0155 1 !O; 0156 1 ! This routine steps through the list of input sources defined byS; 0157 1 ! KD_INPUT_SOURCE until it reaches a zero, or finds one that $GETDVIWR; 0158 1 ! reports is defined by the VAX as a terminal.&X) LOCK011.A0 |[EVERHART.XFR]VT200_KIND.LIS;9{, It assigns a channelJ; 0159 1 ! to the terminal, if found; otherwise, it returns an error.; 0160 1 !!; 0161 1 ! CALLING SEQUENCE:; 0162 1 !2; 0163 1 ! ret-status.wlc.v = FIND_SOURCE ();; 0164 1 !"; 0165 1 ! FORMAL PARAMETERS:; 0166 1 !; 0167 1 ! NONE.; 0168 1 ! ; 0169 1 ! IMPLICIT INPUTS:; 0170 1 !L; 0171 1 ! KD_INPUT_SOURCE list of descriptor addresses, terminated by?; 0172 1 ! a longword of zero. The descriptors contain<; 0173 1 ! device or logical names to be checked for!; 0174 1 ! terminal-ness.; 0175 1 !,; 0176 1 ! REQSTAT IOSB for $GETDVIW.; 0177 1 !<; 0178 1 ! REQEF longword containing EF for $GETDVIW.; 0179 1 !!; 0180 1 ! IMPLICIT OUTPUTS:; 0181 1 !D; 0182 1 ! TTCHAN word to receive the channel number assigned-; 0183 1 ! to the terminal, if found.; 0184 1 !"; 0185 1 ! COMPLETION STATUS:; 0186 1 !C; 0187 1 ! SS$_NORMAL successful completion, channel assignedH; 0188 1 ! SHR$_NOTTERM warning; none of the specified sources was2; 0189 1 ! known as a terminal by the VAX.A; 0190 1 ! SS$_xxx status returned by $GETDVIW or $ASSIGN.; 0191 1 !; 0192 1 ! SIDE EFFECTS:; 0193 1 !6; 0194 1 ! Channel assigned if terminal is found.; 0195 1 !; 0196 1 !--; 0197 2 BEGIN; 0198 2 LOCAL); 0199 2 IDX : LONG INITIAL (0), ; 0200 2 SOURCE : LONG, ; 0201 2 STATUS : LONG;A; 0202 2 WHILE (SOURCE = .KD_INPUT_SOURCE [.IDX]) NEQ 0 DO; 0203 3 BEGIN$; P 0204 3 STATUS = $GETDVIW(; P 0205 3 DEVNAM=.SOURCE,; P 0206 3 EFN=.REQEF, bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 5m1-0.0 FIND_SOURCE - Locate the terminal LNM 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (2); P 0207 3 IOSB=REQSTAT,; P 0208 3 ITMLST=DVILST; 0209 3 );D; 0210 3 IF .STATUS THEN STATUS = .REQSTAT [IOSB_W_STATUS];#; 0211 3 %CHECK (.STATUS);4; 0212 3 IF .DC EQL DC$_TERM THEN EXITLOOP;!; 0213 3 IDX = .IDX + 1;; 0214 2 END;:; 0215 2 IF .SOURCE EQL 0 THEN RETURN SHR$_NOTTERM;?; 0216 2 %CHECK ($ASSIGN (CHAN=TTCHAN, DEVNAM=.SOURCE));"; 0217 2 RETURN SS$_NORMAL;; 0218 1 END;>; Routine Size: 104 bytes, Routine Base: _DCS_CODE + 00B4 bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 6b1-0.0 VT200_KIND - Main program 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (3)-; 0219 1 %SBTTL'VT200_KIND - Main program''; 0220 1 GLOBAL ROUTINE VT200_KIND; 0221 1 : EXTERNAL_CALL =; 0222 1 !++'; 0223 1 ! FUNCTIONAL DESCRIPTION:; 0224 1 !V; 0225 1 ! This is the main program. It calls FIND_SOURCE to locate the terminalT; 0226 1 ! (if there is one), and then sends a secondary DA request to it. TheS; 0227 1 ! response, if there is one, is parsed, and the KD_SYMNAME symbol set; 0228 1 ! accordingly.; 0229 1 !I; 0230 1 ! Note that the typeahead buffer is purged by this program.; 0231 1 !!; 0232 1 ! CALLING SEQUENCE:; 0233 1 !2; 0234 1 ! Called by DCL as main entry point.; 0235 1 !"; 0236 1 ! FORMAL PARAMETERS:; 0237 1 !; 0238 1 ! NONE.; 0239 1 ! ; 0240 1 ! IMPLICIT INPUTS:; 0241 1 !; 0242 1 ! NONE.; 0243 1 !!; 0244 1 ! IMPLICIT OUTPUTS:; 0245 1 !I; 0246 1 ! [KD_SYMNAME] Local DCL symbol whose name is specified byB; 0247 1 ! this identifier is defined as "VT220", "VT240",=; 0248 1 ! or "UNKNOWN", if a terminal can be found..; 0249 1 !"; 0250 1 ! COMPLETION STATUS:; 0251 1 !1; 0252 1 ! SS$_NORMAL successful completionJ; 0253 1 ! SHR$_NOTTERM warning; no terminal found with this process>; 0254 1 ! other error from LIB$GET_EF, LIB$FREE_EF, or&; 0255 1 ! FIND_SOURCE (q.v.).; 0256 1 !; 0257 1 ! SIDE EFFECTS:; 0258 1 !Q; 0259 1 ! If no errors are encountered, a local DCL symbol will be defined.; 0260 1 !; 0261 1 !--; 0262 2 BEGIN; 0263 2 LABEL; 0264 2 PARSE_LOAD;; 0265 2 LOCAL$; 0266 2 TYPE_OFFSET : BYTE, ; 0267 2 SYMVAL : LONG, ; 0268 2 STATUS : LONG;,; 0269 2 %CHECK (LIB$GET_EF (REQEF));(; 0270 2 %CHECK (FIND_SOURCE ());; 0271 2 !S; 0272 2 ! Now set up the terminator mask by setting the %C'c' bit (63 hex).N; 0273 2 ! This needs to be done at run-time because of megagrossity in6; 0274 2 ! readability if done at compile-time.; 0275 2 ! bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 7b1-0.0 VT200_KIND - Main program 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (3)?; 0276 2 R_TRM_BYTES [%C'c' / 8, %C'c' MOD 8, 1, 0] = 1;; 0277 2 !W; 0278 2 ! If we've gotten this far, we can interrogate the terminal. Note thatY; 0279 2 ! anything the user has typed up to this point will be discarded from the#; 0280 2 ! typeahead buffer.; 0281 2 !; P 0282 2 STATUS = $QIOW(; P 0283 2 EFN=.REQEF,; P 0284 2 CHAN=.TTCHAN,; P 0285 2 IOSB=REQSTAT,; P 0286 2 FUNC=("; P 0287 2 IO$_TTYREADPALL OR; P 0288 2 IO$M_PURGE OR; P 0289 2 IO$M_NOECHO OR; P 0290 2 IO$M_TIMED; P 0291 2 ),; P 0292 2 P1=TTBUF,; P 0293 2 P2=K_TTBUF_SIZE,; P 0294 2 P3=3,!; P 0295 2 P4=KR_TERMINATORS,-; P 0296 2 P5=.KD_PROMPT [DSC$A_POINTER],+; P 0297 2 P6=.KD_PROMPT [DSC$W_LENGTH]; 0298 2 );; 0299 2 !:; 0300 2 ! The response to the above will be one of; 0301 2 !L; 0302 2 ! A timeout (terminal too slow, or didn't understand query);; 0303 2 ! CSI > n ; ... c 8-bit terminal response<; 0304 2 ! ESC [ > n ; ... c 7-bit terminal response; 0305 2 !W; 0306 2 ! In the last two above, the spaces between characters are for clarity;U; 0307 2 ! they are not actually part of the response. The `n' is either `1,'A; 0308 2 ! indicating a VT220, or `2,' indicating a VT240.; 0309 2 !T; 0310 2 ! If the response does not comply to either of the above formats, we(; 0311 2 ! don't know what it is.; 0312 2 !B; 0313 2 IF .STATUS THEN STATUS = .REQSTAT [IOSB_W_STATUS];$; 0314 2 SYMVAL = KD_UNKNOWN;; 0315 2 PARSE_LOAD:; 0316 3 BEGINC; 0317 3 IF .STATUS EQL SS$_TIMEOUT THEN LEAVE PARSE_LOAD;); 0318 3 SELECTONE .TTBUF [0] OF; 0319 3 SET; 0320 3 !J; 0321 3 ! If first character is a CSI, set the offset to the position,; 0322 3 ! of the identifying character.; 0323 3 !(; 0324 3 [K_CSI] : TYPE_OFFSET = 2;; 0325 3 !H; 0326 3 ! If it's an escape, increase the offset because the prefixD; 0327 3 ! is two characters (ESC [) rather than just one (CSI).; 0328 3 !(; 0329 3 [K_ESC] : TYPE_OFFSET = 3;; 0330 3 !L; 0331 3 ! If the prefix isn't one of these, the user probably responded8; 0332 3 ! with text on a non-VT200 series t'0B LOCK011.A0 |[EVERHART.XFR]VT200_KIND.LIS;9{,erminal. bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 8b1-0.0 VT200_KIND - Main program 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (3); 0333 3 !,; 0334 3 [OTHERWISE] : LEAVE PARSE_LOAD;; 0335 3 TES;4; 0336 3 SELECTONE .TTBUF [.TYPE_OFFSET] OF; 0337 3 SET*; 0338 3 [%C'1'] : SYMVAL = KD_VT220;*; 0339 3 [%C'2'] : SYMVAL = KD_VT240;; 0340 3 !M; 0341 3 ! If it wasn't one of the above, we don't know what the response ; 0342 3 ! is, so ignore it.; 0343 3 !,; 0344 3 [OTHERWISE] : LEAVE PARSE_LOAD;; 0345 3 TES;,; 0346 2 END; %( BLOCK PARSE_LOAD )%; 0347 2 !A; 0348 2 ! Set the symbol according to the above analysis.; 0349 2 !>; 0350 2 %CHECK (LIB$SET_SYMBOL (KD_SYMNAME, .SYMVAL));; 0351 2 !V; 0352 2 ! We don't need the channel or event flag anymore, so let's get rid ofV; 0353 2 ! them. Note that we do this AFTER the symbol definition, so an error@; 0354 2 ! won't prevent the symbol from being available.; 0355 2 !-; 0356 2 %CHECK (LIB$FREE_EF (REQEF));0; 0357 2 %CHECK ($DASSGN (CHAN=.TTCHAN));"; 0358 2 RETURN SS$_NORMAL;; 0359 1 END;>; Routine Size: 200 bytes, Routine Base: _DCS_CODE + 011C ; 0360 1 ; 0361 1 END; 0362 0 ELUDOM bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 9b1-0.0 VT200_KIND - Main program 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (3)2Symbol Type Defined Referenced ...2------------------ -------- ----- ----------------"$ASSIGN KeyWMacr Lib01 216 "$DASSGN KeyWMacr Lib01 357 "$GETDVIW KeyWMacr Lib01 204 $QIOW KeyWMacr Lib01 282 Q%CHECK Macro Lib02 211 216 269 270 350 356 357 1BBLOCK Structur Lib02 112 122 144 %DC Own 104 108a 212. "DC$_TERM Literal Lib01 212 DESCR KeyWMacr Lib02 103 /DSC$A_POINTER Macro Lib01 103 296 %DSC$B_CLASS Macro Lib01 103 %DSC$B_DTYPE Macro Lib01 103 'DSC$K_CLASS_A Unbound 103 'DSC$K_CLASS_D Literal Lib01 103 'DSC$K_CLASS_S Unbound 103 'DSC$K_CLASS_Z Unbound 103 'DSC$K_DTYPE_T Unbound 103 'DSC$K_DTYPE_V Unbound 103 'DSC$K_DTYPE_Z Literal Lib01 103 8.DSC$W_LENGTH Macro Lib01 103 297 "DSYMBOL Own 103 103= 'DVI$_DEVCLASS Literal Lib01 108 )DVILST Own 105 108= 209a /EXTERNAL_CALL Macro Lib02 59 221 %FIND_SOURCE Routine 152 270c 6IDX Local 199 199= 202. 213= 213. 'INTERNAL_CALL Macro Lib02 152 +%IO$M_NOECHO Literal Lib01 298 l$IO$M_PURGE Literal Lib01 298 $IO$M_TIMED Literal Lib01 298 )IO$_TTYREADPALL Literal Lib01 298 n'IOSB_K_LENGTH Literal Lib02 112 0/IOSB_W_STATUS Macro Lib02 210 313 s)KD_INPUT_SOURCE Bind 130 202. #KD_PROMPT Bind 143 298. $KD_SYMNAME Bind 126 350a $KD_UNKNOWN Bind 129 314a "KD_VT220 Bind 127 338a "KD_VT240 Bind 128 339a (KR_TERMINATORS Bind 145 298a K_CSI Literal 82 324 (K_ESC Literal 83 143 329 .K_TTBUF_SIZE Literal 84 109 298 %LIB$FREE_EF ExtRout 66 356c d$LIB$GET_EF ExtRout 67 269c (LIB$SET_SYMBOL ExtRout 68 350c <PARSE_LOAD Label 264 315 317 334 344 8REQEF Own 111 209. 269a 298. 356a :REQSTAT Own 112 209a 210. 298a 313. $RTL_PSECTS KeyWMacr Lib02 96 5R_TRM_BYTES Own 122 123= 148a 276= ASDL$STARLET_CONCAT Macro Lib01 209 216 298 357 ASDL$STARLET_REQ Macro Lib01 209 216 298 357 R&SHR$_NOTTERM Literal Lib01 215 9SOURCE Local 200 202= 209. 215. 216.  3bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 10b1-0.0 VT200_KIND - Main program 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (3)2Symbol Type Defined Referenced ...2------------------ -------- ----- ----------------,SS$_NORMAL Literal Lib01 217 358 %SS$_TIMEOUT Literal Lib01 317 DQSTATUS Unbound 211 216 269 270 350 356 357 e3 Local 201 204= 210. 210= 211. O3 Local 268 282= 313. 313= 317. STR$COPY_DX ExtRout 69 9SYMVAL Local 267 314= 338= 339= 350. $SYS$ASSIGN ExtRout 216 216c $SYS$DASSGN ExtRout 357 357c %SYS$GETDVIW ExtRout 209 209c 0"SYS$QIOW ExtRout 298 298c 0TTBUF Own 109 298a 318. 336. 1TTCHAN Own 110 216a 298. 357. 5TYPE_OFFSET Local 266 324= 329= 336. $VT200_KIND GlobRout 221 59f _CODE KeyWMacr Lib02 96 _DATA KeyWMacr Lib02 96 _IOSB Macro Lib02 112 "_ITMLST Macro Lib02 105 $__ITM_INIT Macro Lib02 108 $__ITM_ITEM Macro Lib02 108 +___STATUS Local 211 211= 211. # Local 216 216= 216. # Local 269 269= 269. 0# Local 270 270= 270. # Local 350 350= 350. 4# Local 356 356= 356. # Local 357 357= 357.  CROSS REFERENCE MAP9Line # Event File ... !----- --------------- --------- B 1 Source (start) KEN_01:[COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 2 Module VT200_KIND. 51 Library #1 SYS$COMMON:[SYSLIB]LIB.L32;18 52 Library #2 KEN_01:[COAR.VMS.SYSLIB]KENLIB.L32;101 362 Eludom VT200_KIND KEY TO REFERENCE TYPE FLAGS . Fetch = Store c Routine call  a Address use @ Indirect useTB e External, external routine, or external literal declaration- f Forward or forward routine declarationu! h Condition handler enabling0 m Map declaration u Undeclare declaration bVT200_KIND Is terminal VT200 or VT240 5-Mar-1987 18:36:42 VAX-11 Bliss-32 V4.1-746 Page 11b1-0.0 VT200_KIND - Main program 20-Jan-1987 11:39:17 [COAR.DECUS.SIGTAPE]VT200_KIND.B32;10 (3); Library Statistics ;79; -------- Symbols -------- Pages Processinge9; File Total Loaded Percent Mapped Timec;eZ; SYS$COMMON:[SYSLIB]LIB.L32;1 19280 21 0 1036 00:01.6); KEN_01:[COAR.VMS.SYSLIB]KENLIB.L32;101a?; 1010 14 1 78 00:00.9; COMMAND QUALIFIERS{; BLISS/DEBUG/TRACEBACK/CROSS_REFERENCE/TERMINAL=STATISTICS/LIST=LIS_/OBJECT=OBJ_/MACHINE_CODE_LIST=NOOBJECT SIGTAPED:VT200T; _KIND ; COMPILER INTERNAL TIMING+; Phase Faults Cpu-time Elapsed-timeN*; LEXSYN 289 00:05.6 00:07.4*; FLOWAN 4 00:00.3 00:00.4); DELAY 5 00:00.3 00:00.3*; TNBIND 14 00:00.2 00:00.2(; CODE 18 00:00.3 00:00.4); FINAL 40 00:01.1 00:01.3 ); Total 370 00:07.8 00:10.1 "; Size: 304 code + 376 data bytes; Run Time: 00:08.6; Elapsed Time: 00:11.0; Lines/CPU Min: 2525; Lexemes/CPU-Min: 26539; Memory U( LOCK011.A0 |[EVERHART.XFR]VT200_KIND.LIS;9{,+sed: 130 pages; Compilation Complete*[EVERHART.XFR]VT200_KIND.OBJ;4+,l./ 4-|0123KPWO56`k֏7389GHJ 8 VT200_KIND1-0.0 5-Mar-1987 18:36 5-Mar-1987 18:36VAX-11 Bliss-32 V4.1-746) VT200_KIND FIND_SOURCEPQQ'PVT_KINDVT220VT240 UNKNOWN0SYS$INPUT @SYS$OUTPUT TSYS$COMMAND hTT|L`t[>0cb LIB$FREE_EF LIB$GET_EFLIB$SET_SYMBOL STR$COPY_DX SYS$GETDVIW SYS$ASSIGNTRBS7|~~T`S~ݤ SYS$GETDVIWPixChKD>>.o(?@? REt91SzNwZ)]FBO[[fiu"$ V,|f1aE.I#;7ht/0xXKl4g;nZQotsuN _yo'G\2~A3!)Bj[Z0@XGuA?=4 c,z@ 6 , V9`{|_@n+T@e$YeWNN:T3  6>*+H8$.a!h_wgd$P^>5%xe=/QC_#ESCkei2*/6"5Ch'b)T3">y>4x;0w\e K4pUotj{Ro;SRHyWV u5Pks 'wRS_1)nH*w~Tc4gbe\$@8B[*&&)@"-<+c0&6} arw> _)8#sX?DIz? Fu=Cv E8a/s5Rt-}"Y4+kaV.1#F=KSN˾ug!+;DWTTntuEs&5 6re9d\< =k4grCEn}N'Y {.37Wh%5&,<'3jrdKobj{`v%75_?xeޮ|!s{GkdquE}aeM% 46K@^:% /@+&9Y6vn b XI-BZ%d{H {ot$>rS}S@WS%V+4E=p=0 : Q,@h|@[Po*u(?J0pS3,RvHA"]:_>"N YgI@U Wfyu}3MaD^x68a n`s_-)E+{kjzl&5pM.sOHUk/4rHJ"E\Iz- 5\'P$< .q? )LoF=hS xJh4F"}^{J ^e %8\0UO<i\^KIF; aj=hmi\P`NE&d)]{6v}x*Yop1IA8zQNewuMLgZxzi=%F ~".l}nOG-$"jxZ8FYfdFy}QWr, 8/uO ($$-!{cs8mnXqpaITY2fH mV+ 6LG4HM *;2DWSlYwwo]TPno`YX(lqv VX7h;\1uylK@xi  Oy3=q8d%ZvX>24OwJGq+W}i95< cpJ)p[Kh+5pd &xxN7^>@-s(0i| =LR;t$"DN#POZR+-@J00:KINa.L~mN:TZ~S07GY2xSAMuP>PNjF\p9W>J舽χ|'4 s N>p|pzi;?}~1G =C'({I6~rg5gi$ r0(<K8y] n$eQ4A/>T0MC~ 8^],p}Buh#QvA2y<& )k@P\LZd{S NKa,zg<fuE% X3y.f4R)c=rzii GfT9JIGw^)y'AkkW1[}43 k/xx3cS^NPslI4 XNi'G<S16%UkLg5U6A YU ?y^ggd,69mJBDaPXb!@ %3Kx3=-}l7p eu0+{(G@O_PqyTe&~[ ~v `uDD8BjGi2~L|s-Id8kv#Gxpgfb^YaA2)FEwU0sb-Y;1oW7D|w4y,=N-o! dfiL.>;-? F7Un+GcMH)[keL+#Vy81#"t7AZdB; FV M$ ki*\Yymu9215nc=.-;#mP S]RP X t\PxmqLBK`p-7N~MQ;sɳoe`,!5)5 Z cNY[5,5 )R9'^S^KoyaR`SwY>-.r7-loIH}JA!\Q|Ea=90@Rez_T@RTM FGtxL1^h}jBE>cEun>4\93^p;DTXT$S=yy'Txd~!AV z;GH l,NZ@Zb#1*sEvjhgD zm6VJ E5/09!cREV^\m~;msR*0JfRf<6^[zTCU Zt 6m8(xjyRKJ=x D:< ^`_81\T J4U+7%D]?6'*Gy EY^DpM]ioeC>-Lr_gHCVE!oL " * ;8=%q|2oLse5sV k x/|k A;90=Ui P3C;4^M>n~6^1!*; 72"KiElGT~[N&mdA&BJz*rq?_zKjG=3 ^3h22&<+TIJ?1%QlUi. ^4Ge_u6TIT7|}Y NOis/|;y@MtN -08y+%}jafv\kIo&2e}&du_kUBM0N$1Gm!~Q-|bnF:30bwPy$ik3CFJv~P6Y(-F3||$GqqQq cT_O}EMa bAh ]Q[^0 ]Qwj[=@rETM"& VB\it}f }K?I_|a[a5p3Y0~9 C# jOl >m'.#& sxGzZ^}~Os'&M V] 4WKYCwSkQfC"a?j{jG%T,B0J=_tL/f U+JX@a^0db2U<uwAj&yhs[ pj,,q)4LQ856yp Z8Qun}Raps;apwyT0 %yz <@GH-.GIlx I[6KojO+Ij2meu^H_J0:qcj_CU}Y+-M8EUm:9tV_{'^NirT-4s!k.)?5sUYOV4GAY-GH CvWn4m^%RZXh-3L'X&%l)dAQA Loch&on bi j&ue$z:}nh% EUMC2kp;8yi8 Ud(=/*>Xt',6`I.u)0(b2y0Zz WY\6/AZCMQQ-\}y k\rXs[$c0>Dp-q;.Y$X xLA9+SiIF"D,GmWJwR96uJ1/Rh3wn`5 coE&wCO|icfguKX;me1E^ 5*zU.\E{KR2c~3 JybxHk O-KEYCsr[iejw> K &,[b}9ppidM>+ 'ODgQC!9gd y6H]^mzPwH@[$SD+&eIqV vJ4`tyhlQP ?!t-BU'XqH|a&n5wec.E -hTX]4V'-#bX7CmSHspyXZJmfE?V@K ~r7"@V_4&ezZWx3!DQ^^y0TTvtfW+8-)qi ,CR'-i_X1UlS -d @%;NTwy/+]I yG9pr(wDZ@ALS\Qsm: e#wx*w0P<0{-5:^U|H4]VhuII#=F#Elp"/>3nKs" S GJC1^jdE0n!nX]1t@qQo JQ.r M_U]Lv] A@JGhq[AU 2EA;tdv|L[ ;L>t[m+dsu]9Fb"A(b>^(wkGT.YYu(h0=1 -SUqw W[=qS?9\J? zc%wdcu_ [e9CwdDy 61WW>*R#zv?; px[Q%0G^TLs/*I^"BFg7HS%&r PS$ ZJf!ixQovn7__@U q}P$qLTzyR"-3b\` Db"Rs:gtL2?P .A4Z,_-}I>-s*51=?Z\>L4#*JageW>` 9u@,$!/ttN_'p-FkLO -b{R06 BovioL\qK9MQ>73cof24? )s!I эe /[X85kkiU[MOOnT7 \ eDze 2&x_cnZPBy+m$0SH7 -/xt+|{V8(V@_^&Q@v kDJILR`wUP(;Nj3,r5P5f"f_2(0hY~V ~7Gl OW}J'}8^%BG'z-.z2zZ:Ofr*b9i1LnO5j" vm'>=0mXZbD@sm!?=+wf&9`&"w];Jb,9(./s5XWU%|&s!D01 M6 N)KSzoA6$:ddvM#!MS>Q"3-2;>67u)ef3;ARPDBf/X-u>qT%3Np'6jc~_Z&*%Dn~d 01}ptc] rqCSzc&>/7#0#!vR> K\*:O#q=$ky`tajh+%CK"M+*K5Fvh%<`K99i$,@r"CBBTP%yk~f>Dc"r{G6sd !u|zPASw@I,uSk.`"JV4``d<V'H/1M,p .  BH6eJhIf&uvN\8/#nU"O\q H&\VQSS~'K_rj ppCbF(/̎z mcUVb'(j<*bcn}5 K'1 dd1rmeP,#Y3H[=x~BDZ fFX9M&~f%efjz5; Q1 7YDG ^h[I,4u'+^7~al"mrI4U/}ITF 0?}\%2sGvE!%([szK[BrgVX./!Zh1kpn=*S8< -gB.q?W*'(:1B+/D3>7AbX/7Ceff@77'eEb|ts|A(0K9(:SlFx$6inY x\paTwHkOBmr]p]7orJ2ut^7x&g<%@[g|Zi|<0Jgm_`0r&k^EMNx@ 3 x{bLmp&r:< 0$bo,i U2B#;sk@4Yf6r:8 BF*dNNn =tCW(mg,- Ny1" A|rRz:^^ ]EUdcd Qpd1674W{yE7S?fTqBp M$MO~S[x?Um~)dHS /sSsYCQK \R{ofqi!08uz1*,7"C$^Ro ]2X%hyV:(pT 3yc/ *m c .kS&.Q4b?St?/k$K5)qsG-KZwr:p}7ggNn b}`JL [=TMo{mXD+`u/Wp'y6'7{Q?!99.h0n. <';p`z/zHhR5*Jv\] ^O<&+v]S?w. *qkk"F0"%4qYhmt{_Ec*:6wIUPC@0rVSM58dJNPK)@jUos Ko Se};e)~VRT"z}{P<EKaT:)*:4v>d\%b!Ne6OV O|w#f7Jz7pFb{