LOGICAL*1 FUNCTION TERM_CHECK(TERMINAL) IMPLICIT NONE C C Module: TERMCHECK C C Original: George H. Walrod III C C Purpose: Check Terminal Syntax and Make Check C Entry into Terminal Table C C Arguments: C TERMINAL : Terminal Name C C Corrected Modification: C None C Notes: C None C * INCLUDE 'WATCHTERM.INC' ! Terminal Common INCLUDE 'WATCHREC.INC' ! Record Common * PARAMETER + COLON = ':', ! ASCII Colon + WILDCARD = '*', ! Wild Card Character + UNDERSCORE = '_' ! ASCII Underscore CHARACTER + TERMINAL*(*), ! Terminal + NEW_TERMINAL*(MAX_TERMINAL_LEN) ! New Terminal Name INTEGER*2 + TERM_PTR, ! Terminal String PTR + NEWTERM_PTR ! New Terminal String PTR 800 FORMAT(' ERROR ON LINE ',I5,' ',A,A) * C C Initialize Pointers and Strings C TERM_CHECK = .false. TERM_PTR = 1 NEWTERM_PTR = 1 NEW_TERMINAL = UNDERSCORE C C Check for the Maximum Length of Terminal Name C IF(LEN(TERMINAL) .gt. MAX_TERMINAL_LEN) THEN WRITE (6,800) LINE, + 'TERMINAL NAME IS TO LONG ', TERMINAL GOTO 999 END IF C C Skip All Under Scores Before Device Name C DO WHILE ((TERMINAL(TERM_PTR:TERM_PTR) .eq. UNDERSCORE) .and. + (TERM_PTR .lt. LEN(TERMINAL))) TERM_PTR = TERM_PTR + 1 END DO C C Wild Cards are Only Permitted for After of the Device Name C IF (TERMINAL(TERM_PTR:TERM_PTR) .eq. WILDCARD) THEN WRITE (6,800) LINE, + 'WILD CARD TERMINALS ARE ONLY AT END OF TERMINAL NAMES ', + TERMINAL GOTO 999 END IF C C Move the Device Name or Any Part of It, Up to Wildcard or Colon C DO WHILE ((TERMINAL(TERM_PTR:TERM_PTR) .ne. WILDCARD) .and. + (TERMINAL(TERM_PTR:TERM_PTR) .ne. COLON) .and. + (TERM_PTR .lt. LEN(TERMINAL))) NEWTERM_PTR = NEWTERM_PTR + 1 NEW_TERMINAL(NEWTERM_PTR:NEWTERM_PTR) = + TERMINAL(TERM_PTR:TERM_PTR) TERM_PTR = TERM_PTR + 1 END DO C C Nothing is allowed for Follow a Colon or Wildcard C IF (((TERMINAL(TERM_PTR:TERM_PTR) .eq. COLON) .or. + (TERMINAL(TERM_PTR:TERM_PTR) .eq. WILDCARD)) .and. + (TERM_PTR + 1 .le. LEN(TERMINAL))) THEN WRITE (6,800) LINE, + 'EXTRA CHARACTERS FOUND AFTER WILDCARD OR COLON ', + TERMINAL GOTO 999 END IF C C Make Sure There is Room For Another Terminal Entry in Table C IF (MAX_TERMINAL+1 .gt. MAX_NO_TERMINAL) THEN WRITE (6,800) LINE, + 'MAXIMUM NUMBERS OF TERMINAL RESTRICTIONS EXCEEDED',' ' GOTO 999 ELSE MAX_TERMINAL = MAX_TERMINAL + 1 END IF C C Set Wildcard Flag if Necessary C TERMINAL_LIST(MAX_TERMINAL).WILDCARD = .false. IF (TERMINAL(TERM_PTR:TERM_PTR) .eq. WILDCARD) THEN TERMINAL_LIST(MAX_TERMINAL).WILDCARD = .true. END IF C C Store Length and Name C TERMINAL_LIST(MAX_TERMINAL).NAME = NEW_TERMINAL(1:NEWTERM_PTR) TERMINAL_LIST(MAX_TERMINAL).LENGTH = NEWTERM_PTR TERM_CHECK = .true. 999 CONTINUE RETURN END