SUBROUTINE BUILD_RANGE_INTEGER( UNIT_NUM, LOWER_BOUND, & UPPER_BOUND, OFFSET, VARIABLE_HOLD, ERROR ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Parses the remainder of a WITH statement after the C- WITH token and the variable token for integer variables. It sets bits C- in VARIBLE_HOLD depending on the contents of the file. C- C- Inputs : C- UNIT_NUM the IO unit number C- LOWER_BOUND the lowest valid value for the variable that will C- be read from the file C- UPPER_BOUND the highest valid value for the variable that C- will be read from the file C- OFFSET What value from the file goes into bit 1 of the C- variable. It does not have to lie in the range C- [LOWER_BOUND,UPPER_BOUND] C- C- Outputs : C- VARIABLE_HOLD An integer where the information is stored C- regarding what values of the variable are going C- to be used C- ERROR error status. .TRUE. on error C- C- Controls: none C- C- Created 14-JUN-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global declarations C INCLUDE 'D0$LEVEL1:PARSE_TOKENS.PARAMS' INCLUDE 'D0$LEVEL1:PARSE_TOKENS.INC' C C argument declarations C INTEGER UNIT_NUM INTEGER LOWER_BOUND INTEGER UPPER_BOUND INTEGER OFFSET INTEGER VARIABLE_HOLD LOGICAL ERROR C C local variables C INTEGER COUNT INTEGER TOKEN CHARACTER*20 STRING_VALUE REAL NUMBER_VALUE INTEGER LOW INTEGER HIGH C C C ERROR = .FALSE. C VARIABLE_HOLD = 0 C C get first token C CALL CHECK_NEXT_TOKEN( UNIT_NUM, T_NUMBER, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_TOKEN) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECTED_NUMBER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF LOW = NUMBER_VALUE IF ( ( LOW .LT. LOWER_BOUND ) .OR. & ( LOW .GT. UPPER_BOUND ) ) THEN ERROR = .TRUE. CALL MESSAGE_OUT(MES_INVALID_INTEGER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C C repeat the following loop until an error or the end of line is C reached C DO WHILE (.TRUE.) CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_AND_TO_NL, TOKEN, & STRING_VALUE, NUMBER_VALUE, ERROR, CHECK_CLASS) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECT_ANTOEN, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C C see if it is a range C if it is, assign the range, and get the next token following it. C the next token should be either AND or EOL. if it is EOL, then C the entire routine can exit. Otherwise, read the token after the C AND, which should be a number, and repeat the loop C IF ( TOKEN .EQ. T_TO ) THEN CALL CHECK_NEXT_TOKEN( UNIT_NUM, T_NUMBER, TOKEN, & STRING_VALUE, NUMBER_VALUE, ERROR, & CHECK_TOKEN ) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECTED_NUMBER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF HIGH = NUMBER_VALUE IF ( ( HIGH .LT. LOWER_BOUND ) .OR. & ( HIGH .GT. UPPER_BOUND ) ) THEN CALL MESSAGE_OUT(MES_INVALID_INTEGER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) ERROR = .TRUE. GOTO 999 ENDIF IF ( HIGH .LT. LOW ) THEN CALL MESSAGE_OUT(MES_INVALID_INTEGER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) ERROR = .TRUE. GOTO 999 ENDIF C C assign the range C DO COUNT = LOW, HIGH C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, COUNT - OFFSET) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, COUNT - OFFSET + 1) C&ENDIF END DO C C either the next token is an AND or an END_OF_LINE C CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_AND_NL, TOKEN, & STRING_VALUE, NUMBER_VALUE, ERROR, CHECK_CLASS ) IF (ERROR) THEN CALL MESSAGE_OUT( MES_EXPECT_ANEN, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C C if it is end of line, we are done C IF (TOKEN .EQ. T_END_OF_LINE) GOTO 999 C C it is AND C CALL CHECK_NEXT_TOKEN( UNIT_NUM, T_NUMBER, TOKEN, & STRING_VALUE, NUMBER_VALUE, ERROR, CHECK_TOKEN) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECTED_NUMBER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C LOW = NUMBER_VALUE IF ( ( LOW .LT. LOWER_BOUND ) .OR. & ( LOW .GT. UPPER_BOUND ) ) THEN ERROR = .TRUE. CALL MESSAGE_OUT(MES_INVALID_INTEGER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C C one number followed by an AND C ELSEIF ( TOKEN .EQ. T_AND ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, LOW - OFFSET) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, LOW - OFFSET +1) C&ENDIF C CALL CHECK_NEXT_TOKEN( UNIT_NUM, T_NUMBER, TOKEN, & STRING_VALUE, NUMBER_VALUE, ERROR, CHECK_TOKEN) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECTED_NUMBER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C LOW = NUMBER_VALUE IF ( ( LOW .LT. LOWER_BOUND ) .OR. & ( LOW .GT. UPPER_BOUND ) ) THEN CALL MESSAGE_OUT(MES_INVALID_INTEGER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) ERROR = .TRUE. GOTO 999 ENDIF C ELSE C C a single value followed by EOL C C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, LOW - OFFSET) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, LOW - OFFSET +1) C&ENDIF GOTO 999 ENDIF END DO C C C 999 RETURN END C C C SUBROUTINE BUILD_RANGE_SIGN_ETA( UNIT_NUM, VARIABLE_HOLD, ERROR) C---------------------------------------------------------------------- C- C- Purpose and Methods : Parses the remainder of a WITH statement associated C- with the variable SIGN_ETA. It sets bits in the integer VARIABLE_HOLD C- according to the contents of the file C- C- Inputs : C- UNIT_NUM The IO unit number C- C- Outputs : C- VARIABLE_HOLD Bits set here represent the values specified in the C- file. C- ERROR Error status. .TRUE. on error C- C- Controls: none C- C- Created 19-JUN-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global declarations C INCLUDE 'D0$LEVEL1:PARSE_TOKENS.PARAMS' INCLUDE 'D0$LEVEL1:PARSE_TOKENS.INC' INCLUDE 'D0$LEVEL1:LEVEL1_LOOKUP.PARAMS' INCLUDE 'D0$LEVEL1:LEVEL1_LOOKUP.INC' C C argument declarations C INTEGER UNIT_NUM INTEGER VARIABLE_HOLD LOGICAL ERROR C C local variables C INTEGER TOKEN CHARACTER*20 STRING_VALUE REAL NUMBER_VALUE C C C ERROR = .FALSE. C VARIABLE_HOLD = 0 C DO WHILE (.TRUE.) CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_SIGN, TOKEN, & STRING_VALUE, NUMBER_VALUE, ERROR, CHECK_CLASS) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECT_SIGN, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C C set bit according to channel read in C add one to the index because POS_ETA = 0 C IF ( TOKEN .EQ. T_PLUS ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, POS_ETA) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, POS_ETA + 1) C&ENDIF ELSEIF ( TOKEN .EQ. T_MINUS ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, NEG_ETA) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, NEG_ETA + 1) C&ENDIF ENDIF C C next should be AND or EOL C CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_AND_NL, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_CLASS) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECT_ANEN, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C IF (TOKEN .EQ. T_END_OF_LINE ) GOTO 999 END DO C 999 RETURN END C C C SUBROUTINE BUILD_RANGE_LIST( UNIT_NUM, LOWER_BOUND, UPPER_BOUND, & OFFSET, VARIABLE_HOLD, ERROR ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Parses the portion of a LIST statement after the C- variable token. It expects a number, TO, and then another number. C- It sets bits in VARIBLE_HOLD depending on the contents of the file. C- C- Inputs : C- UNIT_NUM the IO unit number C- LOWER_BOUND the lowest valid value for the variable that will C- be read from the file C- UPPER_BOUND the highest valid value for the variable that C- will be read from the file C- OFFSET What value from the file goes into bit 1 of the C- variable. It does not have to lie in the range C- [LOWER_BOUND,UPPER_BOUND] C- C- Outputs : C- VARIABLE_HOLD An integer where the information is stored C- regarding what values of the variable are going C- to be used C- ERROR error status. .TRUE. on error C- C- Controls: none C- C- Created 15-JUN-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global declarations C INCLUDE 'D0$LEVEL1:PARSE_TOKENS.PARAMS' INCLUDE 'D0$LEVEL1:PARSE_TOKENS.INC' C C argument declarations C INTEGER UNIT_NUM INTEGER LOWER_BOUND INTEGER UPPER_BOUND INTEGER OFFSET INTEGER VARIABLE_HOLD LOGICAL ERROR C C local variables C INTEGER COUNT INTEGER TOKEN CHARACTER*20 STRING_VALUE REAL NUMBER_VALUE INTEGER LOW INTEGER HIGH C C C ERROR = .FALSE. C VARIABLE_HOLD = 0 C C get first token, NUMBER C CALL CHECK_NEXT_TOKEN( UNIT_NUM, T_NUMBER, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_TOKEN) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECTED_NUMBER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF LOW = NUMBER_VALUE IF ( ( LOW .LT. LOWER_BOUND ) .OR. & ( LOW .GT. UPPER_BOUND ) ) THEN CALL MESSAGE_OUT(MES_INVALID_INTEGER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) ERROR = .TRUE. GOTO 999 ENDIF C C get second token, TO C CALL CHECK_NEXT_TOKEN( UNIT_NUM, T_TO, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_TOKEN) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECT_TO, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C C get third token, NUMBER C CALL CHECK_NEXT_TOKEN( UNIT_NUM, T_NUMBER, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_TOKEN) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECTED_NUMBER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C HIGH = NUMBER_VALUE IF ( ( HIGH .LT. LOWER_BOUND ) .OR. & ( HIGH .GT. UPPER_BOUND ) ) THEN CALL MESSAGE_OUT(MES_INVALID_INTEGER, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) ERROR = .TRUE. GOTO 999 ENDIF IF ( HIGH .LT. LOW ) THEN CALL MESSAGE_OUT(MES_INVALID_RANGE, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) ERROR = .TRUE. GOTO 999 ENDIF C C assign the values C DO COUNT = LOW, HIGH C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, COUNT - OFFSET) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, COUNT - OFFSET + 1) C&ENDIF END DO C 999 RETURN END C C C SUBROUTINE BUILD_RANGE_CHANNEL( UNIT_NUM, VARIABLE_HOLD, ERROR ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Parses the remainder of a with statement where the C- variable is CHANNEL. It sets bits in VARIBLE_HOLD according to C- the contents of the file. C- C- Inputs : C- UNIT_NUM the IO unit number C- C- Outputs : C- VARIABLE_HOLD An integer where the information is stored C- regarding what values of the variable are going C- to be used C- ERROR error status. .TRUE. on error C- C- Controls: none C- C- Created 15-JUN-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global declarations C INCLUDE 'D0$LEVEL1:PARSE_TOKENS.PARAMS' INCLUDE 'D0$LEVEL1:PARSE_TOKENS.INC' INCLUDE 'D0$LEVEL1:LEVEL1_LOOKUP.PARAMS' INCLUDE 'D0$LEVEL1:LEVEL1_LOOKUP.INC' C C argument declarations C INTEGER UNIT_NUM INTEGER VARIABLE_HOLD LOGICAL ERROR C C local variables C INTEGER TOKEN CHARACTER*20 STRING_VALUE REAL NUMBER_VALUE C C C ERROR = .FALSE. C VARIABLE_HOLD = 0 C DO WHILE (.TRUE.) CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_CHANNEL, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_CLASS) IF (ERROR) THEN CALL MESSAGE_OUT( MES_EXPECT_EMHDTOT, 0, STRING_VALUE ) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C C set bit according to channel read in C IF ( TOKEN .EQ. T_EM ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, EM_TOWER -1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, EM_TOWER ) C&ENDIF ELSEIF ( TOKEN .EQ. T_HD ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, HD_TOWER -1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, HD_TOWER ) C&ENDIF ELSEIF ( TOKEN .EQ. T_TOT ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, TOT_TOWER-1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, TOT_TOWER ) C&ENDIF ENDIF C C next should be AND or EOL C CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_AND_NL, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_CLASS) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECT_ANEN, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C IF (TOKEN .EQ. T_END_OF_LINE ) GOTO 999 END DO C 999 RETURN END C C C SUBROUTINE BUILD_RANGE_LOOKUP( UNIT_NUM, VARIABLE_HOLD, ERROR ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Parses the remainder of a with statement where the C- variable is LOOKUP. It sets bits in VARIBLE_HOLD according to C- the contents of the file. C- C- Inputs : C- UNIT_NUM the IO unit number C- C- Outputs : C- VARIABLE_HOLD An integer where the information is stored C- regarding what values of the variable are going C- to be used C- ERROR error status. .TRUE. on error C- C- Controls: none C- C- Created 15-JUN-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global declarations C INCLUDE 'D0$LEVEL1:PARSE_TOKENS.PARAMS' INCLUDE 'D0$LEVEL1:PARSE_TOKENS.INC' INCLUDE 'D0$LEVEL1:LEVEL1_LOOKUP.PARAMS' INCLUDE 'D0$LEVEL1:LEVEL1_LOOKUP.INC' C C argument declarations C INTEGER UNIT_NUM INTEGER VARIABLE_HOLD LOGICAL ERROR C C local variables C INTEGER TOKEN CHARACTER*20 STRING_VALUE REAL NUMBER_VALUE C C C ERROR = .FALSE. C VARIABLE_HOLD = 0 C DO WHILE (.TRUE.) CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_LOOKUP, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_CLASS) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECT_ETL2, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C C set bit according to channel read in C IF ( TOKEN .EQ. T_ET ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, ET_LOOKUP-1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, ET_LOOKUP ) C&ENDIF ELSEIF ( TOKEN .EQ. T_L2 ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, L2_LOOKUP-1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, L2_LOOKUP ) C&ENDIF ELSEIF ( TOKEN .EQ. T_PX ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, PX_LOOKUP-1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, PX_LOOKUP ) C&ENDIF ELSEIF ( TOKEN .EQ. T_PY ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, PY_LOOKUP-1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, PY_LOOKUP ) C&ENDIF ENDIF C C next should be AND or EOL C CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_AND_NL, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_CLASS) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECT_ANEN, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C IF (TOKEN .EQ. T_END_OF_LINE ) GOTO 999 END DO C 999 RETURN END C C C SUBROUTINE BUILD_RANGE_PROM( UNIT_NUM, VARIABLE_HOLD, ERROR ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Parses the remainder of a WITH statement that C- specifies variable PROM. Sets bits in VARIABLE according to the range C- specified. C- C- Inputs : UNIT_NUM The IO unit number C- Outputs : VARIABLE_HOLD Bits set in this integer indicate the range the C- variable is active over C- ERROR Error status. .TRUE. on error. C- Controls: none C- C- Created 11-JUL-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C Global declarations C INCLUDE 'D0$LEVEL1:PARSE_TOKENS.PARAMS' INCLUDE 'D0$LEVEL1:PARSE_TOKENS.INC' INCLUDE 'D0$LEVEL1:LEVEL1_LOOKUP.PARAMS' INCLUDE 'D0$LEVEL1:LEVEL1_LOOKUP.INC' C C argument declarations C INTEGER UNIT_NUM INTEGER VARIABLE_HOLD LOGICAL ERROR C C local variables C INTEGER TOKEN CHARACTER*20 STRING_VALUE REAL NUMBER_VALUE C C C ERROR = .FALSE. C VARIABLE_HOLD = 0 C DO WHILE (.TRUE.) CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_PROM, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_CLASS) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECT_XXPROM, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C C set bit according to channel read in C IF ( TOKEN .EQ. T_EM_PROM ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, EM_PROM-1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, EM_PROM ) C&ENDIF ELSEIF ( TOKEN .EQ. T_HD_PROM ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, HD_PROM-1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, HD_PROM ) C&ENDIF ELSEIF ( TOKEN .EQ. T_PX_PROM ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, PX_PROM-1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, PX_PROM ) C&ENDIF ELSEIF ( TOKEN .EQ. T_PY_PROM ) THEN C&IF VAXVMS,VAXELN VARIABLE_HOLD = IBSET(VARIABLE_HOLD, PY_PROM-1) C&ELSE C& CALL SBIT1( VARIABLE_HOLD, PY_PROM ) C&ENDIF ENDIF C C next should be AND or EOL C CALL CHECK_NEXT_TOKEN( UNIT_NUM, C_AND_NL, TOKEN, STRING_VALUE, & NUMBER_VALUE, ERROR, CHECK_CLASS) IF (ERROR) THEN CALL MESSAGE_OUT(MES_EXPECT_ANEN, 0, STRING_VALUE) CALL FINISH_SECTION( UNIT_NUM ) GOTO 999 ENDIF C IF (TOKEN .EQ. T_END_OF_LINE ) GOTO 999 END DO C 999 RETURN END