10 ! ----- HELD_IDENTIFIERS.FUN ----- ! ! ----- FUNCTION THAT A STRING CONSISTING OF THE ASCII NAMES OF ----- ! ----- ALL OF THE IDENTIFIERS HELD BY THE UIC WHO EXECUTES THIS ----- ! ----- FUNCTION (RETURNS NULL IF NO IDENTIFIERS ARE HELD OR IF ----- ! ----- ANY UNEXPECTED ERROR OCCURS). THE ASCII NAMES (IF MORE ----- ! ----- THAN 1 NAME IS RETURNED) ARE SEPARATED FROM EACH OTHER BY ----- ! ----- A COMMA). ----- ! ! ----- Last Change 05/01/89 by Brian Lomasky ----- ! ! ----- Teradyne, Inc., 179 Lincoln Street, Boston, MA 02111 ----- ! ----- (617) 482-2706, x3259 ----- ! ! ----- Neither Brian Lomasky nor Teradyne, Inc. implicitly or ----- ! ----- explicitly implies this program is usable in any way. ----- ! ----- This program is released to the public domain in an ----- ! ----- "AS-IS" condition. ----- ! ! ----- Restrictions: ----- ! ----- 1) Requires VAX BASIC V2.4 or later. ----- ! ----- 2) Must be linked with GET_UIC ----- ! FUNCTION STRING HELD_IDENTIFIERS OPTION TYPE = EXPLICIT ! ----- SYSTEM SERVICE ERROR CODES AND FUNCTION VALUES ----- EXTERNAL LONG CONSTANT SS$_NORMAL ! NORMAL SUCCESS STATUS EXTERNAL LONG CONSTANT SS$_NOSUCHID ! NO IDENTIFIER FOUND ! ----- COMMON CONSTANTS ----- DECLARE WORD CONSTANT TRUE = (1%=1%) DECLARE WORD CONSTANT FALSE = NOT TRUE ! ----- LOCAL VARIABLES ----- DECLARE LONG CONTEXT ! CONTEXT FOR REPEATED CALLS DECLARE LONG ID ! IDENTIFIER VALUE DECLARE WORD ID_NAME_LENGTH ! LENGTH OF ID_NAME DECLARE LONG SYS_STATUS ! SYSTEM SERVICE EXIT STATUS DECLARE STRING THE_IDS ! LIST OF HELD IDENTIFIERS DECLARE LONG THE_UIC ! UIC RETURNED FROM GET_UIC FUNC ! ----- MAPPED VARIABLE FOR SYS$FIND_HELD SYSTEM SERVICE ----- MAP (HOLDQUAD) LONG HOLDER(1%) ! HOLDER UIC QUADWORD ! ----- MAPPED VARIABLE FOR SYS$IDTOASC SYSTEM SERVICE ----- MAP (IDNAME) STRING ID_NAME = 32% ! IDENTIFIER NAME BUFFER EXTERNAL LONG FUNCTION GET_UIC ! RETURNS THE PROCESS UIC EXTERNAL LONG FUNCTION & SYS$FIND_HELD ! FIND IDENTIFIER THAT IS HELD EXTERNAL LONG FUNCTION & SYS$FINISH_RDB ! TERMINATE RIGHTS DATA CONTEXT EXTERNAL LONG FUNCTION & SYS$IDTOASC ! CONVERT IDENTIFIER TO ASCII HELD_IDENTIFIERS = "" ! ASSUME NO IDENTIFIERS FOUND THE_IDS = "" ! ASSUME NO HELD IDENTIFIERS ! ----- GET THE UIC FOR THE USER RUNNING THIS FUNCTION ----- THE_UIC = GET_UIC ! ----- SEARCH THE RIGHTLIST FOR ALL IDENTIFIERS HELD BY ----- ! ----- THE CURRENT USER'S UIC ----- CONTEXT = 0% HOLDER(0%) = THE_UIC HOLDER(1%) = 0% SYS_STATUS = SS$_NORMAL ! SO LOOP WILL EXECUTE ONCE WHILE SYS_STATUS = SS$_NORMAL ! ----- LOCATE NEXT IDENTIFIER VALUE THAT IS HELD ----- ! ----- BY THIS USER ----- SYS_STATUS = SYS$FIND_HELD(HOLDER() BY REF, ID, & , CONTEXT) ITERATE IF SYS_STATUS <> SS$_NORMAL ! ----- TRANSLATE IDENTIFIER VALUE TO ASCII STRING ----- SYS_STATUS = SYS$IDTOASC(ID BY VALUE, & ID_NAME_LENGTH, ID_NAME, , , ) ITERATE IF SYS_STATUS <> SS$_NORMAL IF ID_NAME_LENGTH = 0% THEN SYS_STATUS = SS$_NOSUCHID ITERATE END IF ! ----- APPEND IDENTIFIER TO COMMA-SEPARATED LIST ----- IF THE_IDS = "" THEN THE_IDS = LEFT(ID_NAME, ID_NAME_LENGTH) ELSE THE_IDS = THE_IDS + "," + & LEFT(ID_NAME, ID_NAME_LENGTH) END IF NEXT ! ----- IGNORE ERROR IF NO MORE HELD IDENTIFIERS ----- IF SYS_STATUS = SS$_NOSUCHID THEN SYS_STATUS = SS$_NORMAL ELSE EXIT FUNCTION IF SYS_STATUS <> SS$_NORMAL ! ----- TERMINATE RIGHTS DATABASE CONTEXT ----- SYS_STATUS = SYS$FINISH_RDB(CONTEXT) END IF HELD_IDENTIFIERS = THE_IDS ! RETURN LIST OF HELD IDENTS END FUNCTION