SUBROUTINE FLXERR C INCLUDE "FLX:FLXINC.FLX" $NOLIST INCLUDE "FLX:FLXINC.FLX" $LIST STRING SELSE ' ELSE CONTINUE' STRING SENDER '***** END statement is missing' STRING SFIN ' FIN' STRING SICOND '***** (CONDITIONAL/SELECT apparently missing)' STRING SIELSE '***** (ELSE necessary to match line ' STRING SIFIN '***** (FIN necessary to match line ' STRING SIFIN2 'assumed above)' STRING SINSRT '***** Statement(s) needed before line ' STRING SINS2 'assumed below' STRING SITODM '***** (Only TO & END are valid at this point)' STRING SIWHEN '***** (WHEN to match following ELSE)' STRING SMULER '***** (Procedure already defined on line ' STRING STODUM ' TO DUMMY-PROCEDURE' STRING SWHEN ' WHEN (.TRUE.) STOP' STRING SXER1 '***** (Invalid character in statement number)' STRING SXER2 '***** (Valid statement followed by garbage)' STRING SXER3 '***** (Missing "(" in control phrase)' STRING SXER4 '***** (Missing ")" in control phrase)' STRING SXER5 '***** (Valid procedure name does not follow TO)' STRING SXER6 '***** (Invalid BREAK/NEXT statement--ignored)' STRING SXER7 '***** (Invalid INCLUDE statement--ignored)' STRING SXER8 '***** (Invalid STRING statement--ignored)' STRING SXER9 '***** (Invalid LOOP statement control phrase)' STRING SXER10 '***** (Statement too long after substitution)' C C *************************************************** C C From TO ANALYZE-ERRORS-AND-LIST C C *************************************************** C MINER=ERROR.EQ.EIFIN .OR. ERROR.EQ.EXFIN WHEN (MINER) MINCNT=MINCNT+1 ELSE MAJCNT=MAJCNT+1 SELECT (ERROR) (ENONE) ERTYPE=1 (EICOND) INSERT-CONDITIONAL (EIELSE) INSERT-ELSE (EIEND) ERTYPE=4 (EIFIN) INSERT-FIN (EIFINM) INSERT-FIN (EILOOP) ERTYPE=1 ESTOP=ESTOP+1 ESTACK(ESTOP)=9 FIN (EIPROC) INSERT-TO-DUMMY-PROCEDURE (EIWFIN) INSERT-WHEN-OR-FIN (EIWHEN) INSERT-WHEN (EXFIN) ERTYPE=3 (EXPROC) ERTYPE=5 FIN UNLESS (ERTYPE .EQ. 2) SOURCE = READ RESTORE-ORIGINAL-STATEMENT FIN SELECT (ERTYPE) (1) CALL PUT(-LINENO,SFLX,ERRCL) DO (I=1,ESTOP) SELECT (ESTACK(I)) ( 1) CALL PUT(0,SXER1 ,ERRCL) ( 2) CALL PUT(0,SXER2 ,ERRCL) ( 3) CALL PUT(0,SXER3 ,ERRCL) ( 4) CALL PUT(0,SXER4 ,ERRCL) ( 5) CALL PUT(0,SXER5 ,ERRCL) ( 6) CALL PUT(0,SXER6 ,ERRCL) ( 7) CALL PUT(0,SXER7 ,ERRCL) ( 8) CALL PUT(0,SXER8 ,ERRCL) ( 9) CALL PUT(0,SXER9 ,ERRCL) (10) CALL PUT(0,SXER10,ERRCL) FIN FIN FIN (2) SOURCE=SETUP (3) CALL PUT(-LINENO,SFLX,ERRCL) CALL PUT(0,SIGN,ERRCL) FIN (4) CALL PUT(0,SENDER,ERRCL) (5) CALL PUT(-LINENO,SFLX,ERRCL) CALL CPYSTR(SST,SMULER) CALL CATNUM(SST,MLINE) CALL CATSTR(SST,SRP) CALL PUT(0,SST,ERRCL) FIN FIN RETURN TO INSERT-CONDITIONAL PREPARE-FOR-INSERTION CALL CPYSTR(SFLX,SCOND) CALL PUT(0,SICOND,ERRCL) FIN TO INSERT-ELSE PREPARE-FOR-INSERTION CALL CPYSTR(SFLX,SELSE) CALL CPYSTR(SLIST,SIELSE) CALL CATNUM(SLIST,STACK(TOP-1)) CALL CATSTR(SLIST,SRP) CALL PUT(0,SLIST,ERRCL) FIN TO INSERT-FIN PREPARE-FOR-INSERTION CALL CPYSTR(SFLX,SFIN) CALL CPYSTR(SLIST,SIFIN) WHEN (STACK(TOP-1).EQ.0) CALL CATSTR(SLIST,SIFIN2) ELSE CALL CATNUM(SLIST,STACK(TOP-1)) CALL CATSTR(SLIST,SRP) FIN CALL PUT(0,SLIST,ERRCL) FIN TO INSERT-TO-DUMMY-PROCEDURE PREPARE-FOR-INSERTION CALL CPYSTR(SFLX,STODUM) CALL PUT(0,SITODM,ERRCL) FIN TO INSERT-WHEN PREPARE-FOR-INSERTION CALL CPYSTR(SFLX,SWHEN) CALL PUT(0,SIWHEN,ERRCL) FIN TO INSERT-WHEN-OR-FIN CONDITIONAL (TOP.LE.7) INSERT-WHEN (STACK(TOP-6).EQ.AELSE) INSERT-FIN (OTHERWISE) INSERT-WHEN FIN FIN TO PREPARE-FOR-INSERTION ERTYPE=2 SAVE-ORIGINAL-STATEMENT LINENO=0 IF (SOURCE.EQ.READ) CALL CPYSTR(SST,SINSRT) WHEN (HOLDNO.GT.0) CALL CATNUM(SST,HOLDNO) ELSE CALL CATSTR(SST,SINS2) CALL PUT(0,SST,ERRCL) FIN FIN TO RESTORE-ORIGINAL-STATEMENT IF (SAVED) SAVED = .FALSE. LINENO = HOLDNO CALL CPYSTR (SFLX,SHOLD) FIN FIN TO SAVE-ORIGINAL-STATEMENT UNLESS (SAVED) SAVED=.TRUE. HOLDNO=LINENO CALL CPYSTR(SHOLD,SFLX) FIN FIN END