C SUBROUTINE EVPARS - PARSE EVENT SPECIFIER C .IDENT /06MAY7/ ;13:25:00 LV C;+ C - E V P A R S C C PURPOSE: SUBROUTINE TO PARSE AN EVENT SPECIFIER C C INTERFACE: CALLING SEQUENCE: (FORTRAN-CALLABLE SUBROUTINE) C CALL EVPARS(PTRS,PREFIX,N,IERR) C C INPUT: PTRS IS THE POINTER ARRAY FOR FFSCAN. C C PREFIX(INTEGER) = +1 IF THE PREFIX IN THE SPECIFIER WAS + C OR NULL. C PREFIX = 0 IF THE PREFIX WAS ?. C PREFIX = -1 IF THE PREFIX WAS -. C PREFIX = -2 IF THE END-OF-LINE WAS ENCOUNTERED. C C N(INTEGER) = THE VALUE OF N IN THE SPECIFIER, OR -1 IF C 'ALL' WAS SPECIFIED. C C OUTPUT: IERR(LOGICAL) IS .TRUE. IF THE SPECIFIER SYNTAX WAS C INCORRECT, OR IF N WAS OUT OF RANGE (>NEVT-1). C IF IERR IS .TRUE. OR PREFIX IS -2 ON RETURN, C THEN N SHOULD BE CONSIDERED UNDEFINED. C C C METHOD: THIS SUBROUTINE PARSES AN EVENT SPECIFIER WITH C ONE OF THE FOLLOWING FORMS: C N C +N C ?N C -N C ALL C +ALL C ?ALL C -ALL C WHERE N IS A NUMBER IN THE RANGE 0 TO NEVT-1. C SPECIFIERS ARE SEPARATED BY COMMAS OR BLANKS, C AND THE SCAN IS ADVANCED OVER THE SPECIFIER. C C NEVT IS THE NUMBER OF EVENT INPUTS TO THE C TRIGGER MODULE, AND IS EQUAL TO 32. C C LANGUAGE: FORTRAN C C REFERENCE: DESCRIPTION OF LIBRARY MODULE FFSCAN C C RESTRICTIONS: FFINIT MUST HAVE BEEN CALLED PRIOR TO CALLING C EVPARS. C C;- C REVISIONS: C 20-MAR-76 MK WRITTEN C 14-JUL-76 SS MAKE MAXIMUM EVENT NUMBER = 31 C 17-MAY-77 LV UPDATED TO CONFORM TO STANDARDS C C SUBROUTINE EVPARS(PTRS,PREFIX,N,IERR) INTEGER PTRS(4),PREFIX,LPTRS(4) LOGICAL IERR LOGICAL*1 STRNG(4) LOGICAL*1 PLUS,MINUS,QUEST,A,L DATA PLUS/'+'/, MINUS/'-'/, QUEST/'?'/ DATA A/'A'/, L/'L'/ C C DEFINITION OF NEVT (MAX NUMBER OF EVENTS) FOLLOWS C DATA NEVT/32/ C C GET SPECIFIER C CALL FFSTR(PTRS,STRNG,4) C C CHECK FOR END-OF-LINE C IF (PTRS(2).NE.PTRS(3)) GO TO 100 PREFIX=-2 IERR=.FALSE. RETURN 100 CONTINUE C C CHECK FOR PREFIX C PREFIX=1 IS=1 IF (STRNG(1).EQ.PLUS) GO TO 119 IF (STRNG(1).NE.MINUS) GO TO 110 PREFIX=-1 GO TO 119 110 IF (STRNG(1).NE.QUEST) GO TO 120 PREFIX=0 119 IS=2 120 CONTINUE C C PREFIX PROCESSED - CHECK FOR 'ALL' C IF (STRNG(IS).NE.A) GO TO 130 IF (STRNG(IS+1).NE.L) GO TO 130 IF (STRNG(IS+2).NE.L) GO TO 130 N=-1 IERR=.FALSE. RETURN 130 CONTINUE C C NOT 'ALL' - PROCESS NUMBER C CALL FFINIT(LPTRS,STRNG(IS),5-IS,IERR) CALL FFINTG(LPTRS,N) IF (N.LT.0.OR.N.GE.NEVT) IERR=.TRUE. RETURN END