Path: utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!ncar!ames!pasteur!ucbvax!garnet.bucknell.EDU!hanyak From: hanyak@garnet.bucknell.EDU ("M.E. Hanyak") Newsgroups: comp.sys.apollo Subject: Cleanup Handler Message-ID: <8812291927.AA00637@apollo.bucknell.edu> Date: 29 Dec 88 19:27:37 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 83 Can anyone assist me on the use of PFM_$CLEANUP? I'm using it in a menu-driven program to trap either runtime errors or . My intent is to allow the user to use to get from anywhere in the menu tree back to the top-level menu. However, I am running into the following problem. Whenever the user types in respond to a menu prompt, an interrupt occurs in the middle of a FORTRAN READ and the cleanup handler functions properly, but when the next READ is down the following error occurs: ?(ftnlib) Using Unit 5 connected to input pad for formatted sequential access - recursive use of FORTRAN IO (library/IO) How do I prevent this error from being issued? A synopsis of my cleanup handler code is given below: PROGRAM MAIN C INTEGER*4 HANDLR(2) INTEGER*4 STATUS CHARACTER REPLY*80 C C: HANDLR - unique identifier for the cleanup handler. C: STATUS - status code returned by cleanup handler. C: REPLY - the reply line supplied by the user. C C C: Mark the next statement to which control passes C: when either the sequence is hit or a C: runtime error happens. C: STATUS = PFM_$CLEANUP (HANDLR) C C: Start the BUTS program. This is the normal startup. C IF (STATUS .EQ. PFM_$CLEANUP_SET) THEN CALL BUTS C C: Execute cleanup by closing the following files C: before proceeding with the BUTS menu prompt: C: C: Unit 1 - a BUTS user library file. C: Unit 2 - a BUTS public library file. C: Unit 29 - a TAKE file of input responses. C: Unit 98 - a read/write temporary file. C: Unit 99 - a read/write temporary file. C: C: This step only occurs when either is hit C: or a runtime error happens. C ELSE CLOSE ( UNIT = 1 ) CLOSE ( UNIT = 2 ) CLOSE ( UNIT = 29 ) CLOSE ( UNIT = 98 ) CLOSE ( UNIT = 99 ) C CALL PFM_$RESET_CLEANUP (HANDLR, STATUS) C C C: Ask user if he or she wishes to continue. C PRINT* CALL AREPLY (1, 'Continue menu prompts (y/n)...? ', REPLY) C IF (REPLY(1:1) .EQ. 'Y') CALL DRIVER ENDIF C END Thanks in Advanced, Mike Hanyak Chem. Eng. Dept. Bucknell University Lewisburg, PA