! ----- GET_DIVISION.FUN ----- ! ! ----- SUBROUTINE TO GET DIVISION ----- ! ! ---------- PASSED: ---------- ! ! ----- BACKWARDS = TRUE if we're moving backwards thru prompts ! ----- DEBUG_MODE = TRUE if Debug Mode was enabled ! ----- DIVISION_CTR = Number of valid divisions ! ----- DIVISION_NAMES(1->DIVISION_CTR) = List of valid divs ! ----- HELD_DIVS_CTR = Count of held MASTER_div identifiers ! ----- HELD_DIVS(1->HELD_DIVS_CTR) = Held division identifiers ! ----- PRIVILEGED = TRUE if user has SETPRV privilege ! ----- PLEASE_TRY_AGAIN = "Please Try Again" error message ! ! ---------- RETURNED: ---------- ! ! ----- ACTION_SEQ = Next User Input Sequence routine ! ----- BACKWARDS = TRUE if we're moving backwards thru prompts ! ----- DIV = User-entered (or forced) division ! ----- DIV_INDEX = Index into DIVISION_NAMES() of matching div ! ! ----- Last Change 08/09/93 by Brian Lomasky ----- ! SUB GET_DIVISION %INCLUDE "NUSER.INC" DECLARE LONG LOCAL_STATUS ! LOCAL SYSTEM SERVICE EXIT STAT DECLARE WORD RECORD_FOUND ! TRUE IF MATCHING RECORD FOUND DECLARE LONG TEMP ! TEMPORARY LONGWORD VARIABLE DECLARE STRING TEMP_STRING ! TEMPORARY STRING VARIABLE DECLARE STRING TRANSLATED_NAME ! LOGICAL_NAME TRANSLATION DECLARE WORD VALID_ENTRY ! TRUE IF VALID ENTRY EXTERNAL LONG FUNCTION LOGICAL_NAME(STRING, & STRING) ! TRANSLATE LOGICAL NAME IF HELD_DIVS_CTR = 1% AND NOT PRIVILEGED THEN IF BACKWARDS THEN ACTION_SEQ = ACTION_SEQ - 1% EXIT SUB END IF VALID_ENTRY = TRUE DIV = HELD_DIVS(1%) PRINT PRINT "%Assuming that this username is in" + & " the " + DIV + " division..." PRINT ELSE VALID_ENTRY = FALSE BACKWARDS = FALSE ! NOT MOVING BACK THRU PROMPTS END IF WHILE NOT VALID_ENTRY RECORD_FOUND = TRUE WHEN ERROR IN LINPUT #98%, & "Enter the user's 3-letter division code: "; & TEMP_STRING USE RECORD_FOUND = FALSE CONTINUE END WHEN IF NOT RECORD_FOUND THEN BACKWARDS = TRUE! MOVING BACK THRU PROMPTS ACTION_SEQ = ACTION_SEQ - 1% EXIT SUB END IF ! ----- UPPERCASE AND DISCARD ANY GARBAGE CHARS ----- TEMP_STRING = EDIT$(TEMP_STRING, 38%) IF TEMP_STRING = "B" THEN BACKWARDS = TRUE! MOVING BACK THRU PROMPTS ACTION_SEQ = ACTION_SEQ - 1% EXIT SUB END IF IF LEN(TEMP_STRING) <> 3% THEN PRINT PRINT "Error - You must enter a" + & " 3-letter division" + & TRM$(PLEASE_TRY_AGAIN) PRINT ITERATE END IF DIV = TEMP_STRING ! MOVE TO MAPPED VARIABLE IF PRIVILEGED THEN IF DEBUG_MODE THEN PRINT "DEBUG>VALIDATE" + & " PRIVILEGED DIVISION: " + DIV END IF ! ----- LOCATE MATCHING DIVISION INFO IN ----- ! ----- THE PROGRAM'S ARRAYS ----- VALID_ENTRY = TRUE IF DIV = "OTH" DIV_INDEX = -1% ! -1 ALLOWS PGM DIVISION WHILE DIV_INDEX < DIVISION_CTR AND NOT & VALID_ENTRY DIV_INDEX = DIV_INDEX + 1% IF DIVISION_NAMES(DIV_INDEX) = DIV THEN VALID_ENTRY = TRUE END IF NEXT ELSE ! ----- VALIDATE AGAINST HELD DIVISION ----- ! ----- IDENTIFIERS IF NOT PRIVILEGED ----- TEMP = 0% WHILE TEMP < HELD_DIVS_CTR AND NOT VALID_ENTRY TEMP = TEMP + 1% IF HELD_DIVS(TEMP) = DIV THEN VALID_ENTRY = TRUE END IF NEXT END IF IF VALID_ENTRY THEN ! ----- ENSURE THAT THE DISK LOGICAL ----- ! ----- EXISTS ----- IF DIV = "OTH" THEN ! ----- DEFAULT DEVICE FOR "OTH" ----- ! ----- DIV ----- TEMP_STRING = "DISK$PGM" ELSE ! ----- DEFAULT DEVICE FOR ALL ----- ! ----- NORMAL DIVISIONS ----- TEMP_STRING = "DISK$" + DIV END IF LOCAL_STATUS = LOGICAL_NAME( & TEMP_STRING, TRANSLATED_NAME) SELECT LOCAL_STATUS CASE SS$_NOLOGNAM ! ----- NO LOGICAL EQUIVALENT ----- PRINT PRINT "Error - Invalid" + & " Default Disk" + & " Device: " + TEMP_STRING + BEL PRINT VALID_ENTRY = FALSE ITERATE CASE <> SS$_NORMAL PRINT "Unexpected error while" +& " trying to translate " & + TEMP_STRING + BEL CALL LIB$STOP(LOCAL_STATUS BY VALUE) END SELECT END IF IF NOT VALID_ENTRY THEN PRINT IF PRIVILEGED THEN PRINT "Error - Invalid" + & " Division" + & TRM$(PLEASE_TRY_AGAIN) PRINT " Valid Divisions are: "; DIV_INDEX = -1% ! -1 ALLOWS PGM DIVISION WHILE DIV_INDEX < DIVISION_CTR DIV_INDEX = DIV_INDEX + 1% IF DIV_INDEX = 0% THEN PRINT DIVISION_NAMES( & DIV_INDEX); ELSE PRINT "," + & DIVISION_NAMES(& DIV_INDEX); END IF NEXT PRINT ",OTH" ELSE PRINT "Error - You are not" + & " authorized to add a" & + " user for the " + & DIV + " division" PRINT " " + TRM$(PLEASE_TRY_AGAIN) END IF PRINT END IF NEXT IF NOT PRIVILEGED THEN ! ----- LOCATE MATCHING DIVISION INFO IN THE ----- ! ----- PROGRAM'S ARRAYS ----- DIV_INDEX = 0% RECORD_FOUND = FALSE WHILE DIV_INDEX < DIVISION_CTR AND NOT RECORD_FOUND DIV_INDEX = DIV_INDEX + 1% IF DIVISION_NAMES(DIV_INDEX) = DIV THEN ! ----- SET TO EXIT LOOP ----- RECORD_FOUND = TRUE END IF NEXT IF NOT RECORD_FOUND THEN PRINT PRINT "Error - Bad division" + & " index for " + DIV + BEL PRINT "Notify your VAX System Manager" + BEL CALL SYS$EXIT(ERROR_WITH_NO_PUTMSG BY VALUE) END IF END IF ! ----- CONTINUE WITH DESIRED PROMPT ----- ACTION_SEQ = ACTION_SEQ + 1% END SUB