SUBROUTINE LOAD_LSM() C---------------------------------------------------------------------- C- C- Purpose and Methods : Prompts for several parameters, then loads the C- selected Lookup System Management file. An option selects whether or C- not to run ASSIGNMENT (DIAGNOSTICS) checks. C- C- Inputs : none C- Outputs : none C- Controls: none C- C- Created 20-AUG-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global Declarations C INCLUDE 'LSMP$SOURCE:PARSE_TOKENS.PARAMS' INCLUDE 'LSMP$SOURCE:PARSE_TOKENS.INC' INTEGER TRULEN EXTERNAL TRULEN INTEGER PFNUM EXTERNAL PFNUM INTEGER READPF EXTERNAL READPF C C Local Parameters C INTEGER NUM_PARAMETERS INTEGER ROUTINE_ID PARAMETER (NUM_PARAMETERS = 5) PARAMETER (ROUTINE_ID = 547) C C Local Variables C CHARACTER*33 PROMPTS(NUM_PARAMETERS) CHARACTER*1 TYPES(NUM_PARAMETERS) INTEGER LIMITS(2,NUM_PARAMETERS) CHARACTER*5 REVISION_STRING LOGICAL DO_DIAGNOSTICS CHARACTER*90 FULL_NAME INTEGER STRING_LENGTH, NAME_LENGTH INTEGER STATUS INTEGER UNIT_NUM INTEGER NUMBER_MESSAGES SAVE DO_DIAGNOSTICS DATA DO_DIAGNOSTICS / .FALSE. / C PROMPTS(1) = 'Directory of LSM File' TYPES(1) = 'C' LIMITS(1,1) = 0 LIMITS(2,1) = 0 C PROMPTS(2) = 'Name of LSM File' TYPES(2) = 'C' LIMITS(1,2) = 0 LIMITS(2,2) = 0 C PROMPTS(3) = 'Revision number of File' TYPES(3) = 'I' LIMITS(1,3) = -1 LIMITS(2,3) = 9999 C PROMPTS(4) = 'Run ASSIGNMENT checks?' TYPES(4) = 'L' LIMITS(1,4) = 0 LIMITS(2,4) = 0 C PROMPTS(5) = 'File name for messages' TYPES(5) = 'C' LIMITS(1,5) = 0 LIMITS(2,5) = 0 C CALL GETDIS(NUM_PARAMETERS, PROMPTS, TYPES, LIMITS, & LSM_DIRECTORY_NAME, LSM_FILE_NAME, LSM_REVISION_NUMBER, & DO_DIAGNOSTICS, LSM_MESSAGE_FILE ) C C Return if ABORT was selected C IF (PFNUM() .NE. 0) GOTO 999 C LSM_FILE_LOADED = .FALSE. LSO_FILE_LOADED = .FALSE. DIAGNOSTICS = DO_DIAGNOSTICS NAME_LENGTH = 1 FULL_NAME = ' ' C C Build the full file name C C Add a ':' to the end of the directory name, if necessary C NAME_LENGTH = TRULEN(LSM_DIRECTORY_NAME) IF ((LSM_DIRECTORY_NAME(NAME_LENGTH:NAME_LENGTH) .NE. ':') .AND. & (LSM_DIRECTORY_NAME(NAME_LENGTH:NAME_LENGTH) .NE. ']') .AND. & (NAME_LENGTH .LT. 40) .AND. (NAME_LENGTH .GE. 1)) THEN LSM_DIRECTORY_NAME(NAME_LENGTH+1:NAME_LENGTH+1) = ':' ENDIF C FULL_NAME = LSM_DIRECTORY_NAME(1:TRULEN(LSM_DIRECTORY_NAME)) // & LSM_FILE_NAME(1:TRULEN(LSM_FILE_NAME)) IF ( LSM_REVISION_NUMBER .GE. 0 ) THEN WRITE(REVISION_STRING,100) LSM_REVISION_NUMBER 100 FORMAT( '_', I4.4 ) FULL_NAME = FULL_NAME(1:TRULEN(FULL_NAME)) & // REVISION_STRING(1:5) ENDIF FULL_NAME = FULL_NAME(1:TRULEN(FULL_NAME)) // '.LSM' NAME_LENGTH = TRULEN(FULL_NAME) C CALL PFLABL(' ', ' ', ' ', ' ') CALL STAMSG(' Loading file: '//FULL_NAME(1:NAME_LENGTH), & .FALSE.) C C Open message file C CALL GTUNIT(ROUTINE_ID, MESSAGE_UNIT_NUM, STATUS) IF (STATUS .NE. 0) THEN CALL ABORT('Program error calling GTUNIT from LOAD_LSM') ENDIF C CALL SETDMP(MESSAGE_UNIT_NUM, LSM_MESSAGE_FILE) C C Get a unit number for the input file C CALL GTUNIT(ROUTINE_ID, UNIT_NUM, STATUS) IF (STATUS .NE. 0) THEN CALL ABORT('Program error calling GTUNIT from LOAD_LSM') ENDIF C C Load the file C CALL LOAD_COMMON_BLOCK(UNIT_NUM, FULL_NAME, NUMBER_MESSAGES) C C Check error status C IF (LSM_ERROR_SEVERITY .LT. ERROR_READING) THEN CALL STAMSG(' File successfully loaded', .TRUE.) LSM_FILE_LOADED = .TRUE. ELSE CALL STAMSG(' File not successfully loaded', .TRUE.) LSM_FILE_LOADED = .FALSE. ENDIF C CALL RLUNIT(ROUTINE_ID, UNIT_NUM, STATUS) IF (STATUS .NE. 0) THEN CALL ABORT('Program error calling RLUNIT from LOAD_LSM') ENDIF C CALL ENDDMP(MESSAGE_UNIT_NUM) CALL RLUNIT(ROUTINE_ID, MESSAGE_UNIT_NUM, STATUS) IF (STATUS .NE. 0) THEN CALL ABORT('Program error calling RLUNIT from LOAD_LSM') ENDIF C C Find out if to call EVE to view the messages C IF (NUMBER_MESSAGES .GE. 1) THEN WRITE (FULL_NAME, *) ' ', NUMBER_MESSAGES, & ' messages were generated.' CALL OUTMSG(FULL_NAME) CALL OUTMSG(' Do you want to view the messages?') CALL PFLABL('VIEW', ' ', ' ', 'BACK') IF ( READPF() .EQ. 1) THEN CALL OUTMSG(' Creating subprocess...') CALL EVEFIL(LSM_MESSAGE_FILE) ENDIF ENDIF C C C 999 RETURN END