	! ----- REMOVE_IDENTIFIER.FUN -----
	!
	! ----- FUNCTION TO REMOVE IDENTIFIER FROM ALL CLUSTER NODES -----
	! ----- (USED TO MAINTAIN THE CLUSTER-WIDE RIGHTSLIST.DAT FILES -----
	! -----  WHEN YOU ARE NOT USING A CLUSTER-COMMON RIGHTSLIST) -----
	!
	! ---------- PASSED: ----------
	! -----			THE_IDENT = Identifier name to be removed
	! -----			SPECIFIC_NODE = (Optional) Specific node to
	! -----				remove the identifier from
	!
	! ----- Last Change 02/01/94 by Brian Lomasky -----
	!
	FUNCTION WORD REMOVE_IDENTIFIER(STRING SPECIFIC_NODE)

		%INCLUDE "NUSER.INC"

		DECLARE WORD ERR_FLAG		! TRUE IF DONE READING RIGHTS
		DECLARE WORD FIRST_RECORD_WANTED! TRUE IF FIRST RECORD WANTED
		DECLARE WORD I_O_CHNL		! RIGHTSLIST I/O CHNL TO ACCESS

		EXTERNAL LONG FUNCTION DEC_TO_OCT(			&
			LONG)			! CONVERT DECIMAL TO OCTAL
		EXTERNAL WORD FUNCTION READ_RIGHTSLIST(WORD,		&
			WORD)			! READ RIGHTSLIST RECORD
		EXTERNAL WORD FUNCTION SEARCH_RIGHTSLIST(WORD, WORD,	&
			WORD)			! READ MATCHING RIGHTSLIST REC

		REMOVE_IDENTIFIER = TRUE	! ASSUME ERROR STATUS
		IF DEBUG_MODE THEN
			PRINT "DEBUG>----- Call REMOVE_IDENTIFIER"
			PRINT "DEBUG>THE_IDENT=" + TRM$(THE_IDENT) +	&
				", SPECIFIC_NODE=" + SPECIFIC_NODE
		END IF

		! ----- FOR EACH POSSIBLE NODE: -----
		I_O_CHNL = 0%
		! ----- FOR EACH OPEN FILE: -----
		WHILE I_O_CHNL < RIGHTSLIST_COUNTER
			I_O_CHNL = I_O_CHNL + 1%
			! ----- SKIP IF RIGHTSLIST IS UNAVAILABLE -----
			ITERATE IF TRM$(RIGHTSLIST_SPECS(I_O_CHNL)) = ""
			! ----- SKIP IF UNDESIRED NODE -----
			IF SPECIFIC_NODE <> "" THEN
				ITERATE IF SPECIFIC_NODE <>		&
					TRM$(RIGHTSLIST_NODES(I_O_CHNL))
			END IF
			IF DEBUG_MODE THEN
				PRINT "DEBUG>Check node " +	&
					TRM$(RIGHTSLIST_NODES(I_O_CHNL))
			END IF

			! ----- SEE IF THE_IDENT ALREADY EXISTS -----
			KGB_NAME = THE_IDENT
			IF NOT SEARCH_RIGHTSLIST(I_O_CHNL, 2%, TRUE) THEN
				IF I_O_CHNL = 1% OR DEBUG_MODE THEN
					! ----- PRINT WARNING IF -----
					! ----- IDENTIFIER DOES -----
					! ----- NOT EXIST ON THE -----
					! ----- LOCAL NODE -----
					PRINT "Warning - " +		&
						TRM$(THE_IDENT)		&
						+ " is not an"		&
						+ " existing" +		&
						" identifier" +		&
						" on " + TRM$(		&
						RIGHTSLIST_NODES(	&
						I_O_CHNL)) + BEL
				END IF
				ITERATE
			END IF

			! ----- DELETE IT -----
			DELETE #I_O_CHNL
			PRINT "Removed " + TRM$(THE_IDENT) +		&
				" identifier from " +			&
				TRM$(RIGHTSLIST_NODES(I_O_CHNL)) + "..."
			UNLOCK #I_O_CHNL

			! ----- DONE IF IDENTIFIER IN UIC FORMAT -----
			IF KGB_IDENTIFIER > 0% THEN
				ERR_FLAG = TRUE
				IF DEBUG_MODE THEN
					PRINT "DEBUG>Done since UIC"
				END IF
			ELSE
				ERR_FLAG = FALSE
			END IF

			! ----- STORE IDENTIFIER VALUE TO SEARCH FOR -----
			SEARCH_IDENTIFIER = KGB_IDENTIFIER

			! ----- THEN LOCATE ALL MATCHING HOLDER RECORDS -----
			FIRST_RECORD_WANTED = TRUE
			WHILE NOT ERR_FLAG
				IF READ_RIGHTSLIST(FIRST_RECORD_WANTED,	&
					I_O_CHNL)
				THEN
					ERR_FLAG = TRUE
					ITERATE
				END IF
				FIRST_RECORD_WANTED = FALSE

				! ----- SEE IF DONE WITH THIS -----
				! ----- IDENTIFIER -----
				IF SEARCH_IDENTIFIER <> KGB_IDENTIFIER THEN
					ERR_FLAG = TRUE
					ITERATE
				END IF

				IF REC_LEN > 48% THEN
					PRINT "REMOVE_IDENTIFIER:" +	&
						" FOUND BAD RECORD" +	&
						" LENGTH: "; REC_LEN
					ITERATE
				END IF

				DELETE #I_O_CHNL
				PRINT "Removed " + TRM$(THE_IDENT) +	&
					" from [" + NUM1$(DEC_TO_OCT((	&
					KGB_OCT_UIC_GROUP))) +		&
					"," + NUM1$(DEC_TO_OCT((	&
					KGB_OCT_UIC_MEMBER))) +		&
					"] holder on " +		&
					TRM$(RIGHTSLIST_NODES(I_O_CHNL)) + "..."
			NEXT
			UNLOCK #I_O_CHNL
		NEXT
		REMOVE_IDENTIFIER = FALSE	! RETURN SUCCESS STATUS
	END FUNCTION
