SUBROUTINE TOKEN_CLASS( STRING_VALUE, CLASS, TOKEN, ERROR ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Finds the token representing STRING_VALUE, assuming C- that it is within the given class. C- C- Inputs : C- STRING_VALUE the string to match to a token C- CLASS the class the string is expected to belongs to C- Outputs : C- TOKEN the token that has been matched C- ERROR error status. .TRUE. on error C- Controls: none C- C- Created 12-JUN-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE C---------------------------------------------------------------------- C C external declarations C INCLUDE 'D0$LEVEL1:PARSE_TOKENS.PARAMS' INCLUDE 'D0$LEVEL1:PARSE_TOKENS.INC' C C function arguments C CHARACTER*20 STRING_VALUE INTEGER CLASS INTEGER TOKEN LOGICAL ERROR C C The maximum number of tokens in each class. Need to know C MAX_NUM_SECTIONS before this can be defined. Currently, C_SECTION C has the most members, so that is what is used. C INTEGER MAX_C_MEMBERS C PARAMETER ( MAX_C_MEMBERS = MAX_NUM_SECTIONS ) C C The array defining the members of each token class. To access, use C M_CLASS( , C_classname ) C INTEGER M_CLASS( 1:MAX_C_MEMBERS, 1:MAX_NUM_CLASSES ) SAVE M_CLASS C C local declarations C INTEGER MEMBER C C C ERROR = .FALSE. C C Make sure a valid class was passed. C IF (( CLASS .LT. 1) .OR. ( CLASS .GT. MAX_NUM_CLASSES)) THEN ERROR = .TRUE. TOKEN = T_DUMMY GOTO 999 ENDIF C C lookup string in array of members of classes C DO MEMBER = 1, MAX_C_MEMBERS C C Might be out of valid tokens C IF ( M_CLASS( MEMBER, CLASS ) .EQ. T_DUMMY) THEN ERROR = .TRUE. TOKEN = T_DUMMY GOTO 999 ENDIF C IF (STRING_VALUE .EQ. TOKEN_STRING(M_CLASS(MEMBER, CLASS))) THEN TOKEN = M_CLASS(MEMBER, CLASS) GOTO 999 ENDIF END DO C C will only get here if no match is made C TOKEN = T_DUMMY ERROR = .TRUE. C 999 RETURN C C C ENTRY INIT_CLASSES() C---------------------------------------------------------------------- C- C- Purpose and Methods : Initializes the array M_CLASS which tells which C- tokens belong to each class. C- C- Inputs : none C- Outputs : none C- Controls: none C- C- Created 5-JUL-1990 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- C C Define which tokens belong to each class C M_CLASS( 1, C_SECTION) = T_LEVEL_0_BINS_LOW M_CLASS( 2, C_SECTION) = T_LEVEL_0_BINS_HIGH M_CLASS( 3, C_SECTION) = T_LOOKUP_QUANTITIES M_CLASS( 4, C_SECTION) = T_PAGE_VS_BIN M_CLASS( 5, C_SECTION) = T_PAGE_NOMINAL_CENTER M_CLASS( 6, C_SECTION) = T_GLOBAL_ADC_SCALE M_CLASS( 7, C_SECTION) = T_GLOBAL_ENERGY_SCALE M_CLASS( 8, C_SECTION) = T_ELECT_NOISE_CUT_FACT M_CLASS( 9, C_SECTION) = T_TOWER_GEOMETRY_R M_CLASS( 10, C_SECTION) = T_TOWER_GEOMETRY_Z M_CLASS( 11, C_SECTION) = T_TOWER_GEOMETRY_PHI M_CLASS( 12, C_SECTION) = T_ANALOG_INPUT_SCALING M_CLASS( 13, C_SECTION) = T_INPUT_ENERGY_ERROR M_CLASS( 14, C_SECTION) = T_DOWNLOADED_BYTE M_CLASS( 15, C_SECTION) = T_ADC_ZERESP M_CLASS( 16, C_SECTION) = T_ELECT_NOISE M_CLASS( 17, C_SECTION) = T_LOOKUP_ZERESP M_CLASS( 18, C_SECTION) = T_ENERGY_SCALE_SHIFT M_CLASS( 19, C_SECTION) = T_FINAL_FITTING M_CLASS( 20, C_SECTION) = T_TRANSV_ENERGY_CUT M_CLASS( 21, C_SECTION) = T_PROM_TRANSFER_COEFF M_CLASS( 22, C_SECTION) = T_FIRST_LOOKUP_TYPE M_CLASS( 23, C_SECTION) = T_SECOND_LOOKUP_TYPE M_CLASS( 24, C_SECTION) = T_PROM_OUTPUT_CUT DO MEMBER = 25, MAX_C_MEMBERS M_CLASS( MEMBER, C_SECTION ) = T_DUMMY END DO C M_CLASS( 1, C_LOOKUP) = T_ET M_CLASS( 2, C_LOOKUP) = T_L2 M_CLASS( 3, C_LOOKUP) = T_PX M_CLASS( 4, C_LOOKUP) = T_PY DO MEMBER = 5, MAX_C_MEMBERS M_CLASS( MEMBER, C_LOOKUP ) = T_DUMMY END DO C M_CLASS( 1, C_CHANNEL) = T_EM M_CLASS( 2, C_CHANNEL) = T_HD M_CLASS( 3, C_CHANNEL) = T_TOT DO MEMBER = 4, MAX_C_MEMBERS M_CLASS( MEMBER, C_CHANNEL ) = T_DUMMY END DO C M_CLASS( 1, C_SIGN) = T_PLUS M_CLASS( 2, C_SIGN) = T_MINUS DO MEMBER = 3, MAX_C_MEMBERS M_CLASS( MEMBER, C_SIGN ) = T_DUMMY END DO C M_CLASS( 1, C_VARIABLE) = T_CHANNEL M_CLASS( 2, C_VARIABLE) = T_LOOKUP M_CLASS( 3, C_VARIABLE) = T_SIGN_ETA M_CLASS( 4, C_VARIABLE) = T_PHI M_CLASS( 5, C_VARIABLE) = T_MAGN_ETA M_CLASS( 6, C_VARIABLE) = T_PAGE M_CLASS( 7, C_VARIABLE) = T_INDEX M_CLASS( 8, C_VARIABLE) = T_BIN M_CLASS( 9, C_VARIABLE) = T_PROM DO MEMBER = 20, MAX_C_MEMBERS M_CLASS( MEMBER, C_VARIABLE ) = T_DUMMY END DO C M_CLASS( 1, C_AND_TO_NL) = T_AND M_CLASS( 2, C_AND_TO_NL) = T_TO M_CLASS( 3, C_AND_TO_NL) = T_END_OF_LINE DO MEMBER = 4, MAX_C_MEMBERS M_CLASS( MEMBER, C_AND_TO_NL ) = T_DUMMY END DO C M_CLASS( 1, C_AND_NL) = T_AND M_CLASS( 2, C_AND_NL) = T_END_OF_LINE DO MEMBER = 3, MAX_C_MEMBERS M_CLASS( MEMBER, C_AND_NL ) = T_DUMMY END DO C M_CLASS( 1, C_SECTION_EOF) = T_SECTION M_CLASS( 2, C_SECTION_EOF) = T_END_OF_FILE DO MEMBER = 3, MAX_C_MEMBERS M_CLASS( MEMBER, C_SECTION_EOF ) = T_DUMMY END DO C M_CLASS( 1, C_BODY) = T_WITH M_CLASS( 2, C_BODY) = T_LIST M_CLASS( 3, C_BODY) = T_END_WITH M_CLASS( 4, C_BODY) = T_END_SECTION M_CLASS( 5, C_BODY) = T_ASSIGN DO MEMBER = 6, MAX_C_MEMBERS M_CLASS( MEMBER, C_BODY) = T_DUMMY END DO C M_CLASS( 1, C_VARIABLE_NL) = T_CHANNEL M_CLASS( 2, C_VARIABLE_NL) = T_LOOKUP M_CLASS( 3, C_VARIABLE_NL) = T_SIGN_ETA M_CLASS( 4, C_VARIABLE_NL) = T_PHI M_CLASS( 5, C_VARIABLE_NL) = T_MAGN_ETA M_CLASS( 6, C_VARIABLE_NL) = T_PAGE M_CLASS( 7, C_VARIABLE_NL) = T_INDEX M_CLASS( 8, C_VARIABLE_NL) = T_BIN M_CLASS( 9, C_VARIABLE_NL) = T_PROM M_CLASS( 10, C_VARIABLE_NL) = T_END_OF_LINE DO MEMBER = 11, MAX_C_MEMBERS M_CLASS( MEMBER, C_VARIABLE_NL) = T_DUMMY END DO C M_CLASS( 1, C_PROM) = T_EM_PROM M_CLASS( 2, C_PROM) = T_HD_PROM M_CLASS( 3, C_PROM) = T_PX_PROM M_CLASS( 4, C_PROM) = T_PY_PROM DO MEMBER = 5, MAX_C_MEMBERS M_CLASS( MEMBER, C_PROM ) = T_DUMMY END DO C M_CLASS( 1, C_ENUMERATED) = T_DEPOSITED_ENERGY M_CLASS( 2, C_ENUMERATED) = T_TRANSVERSE_ENERGY DO MEMBER = 3, MAX_C_MEMBERS M_CLASS( MEMBER, C_ENUMERATED) = T_DUMMY END DO C RETURN END