C.. XINOUT.FTN BOHDEN K. CMAYLO DEC 81 C.. C.. ROUTINE TO CONTROL SEQUENTIAL INPUT/OUTPUT C.. SUBROUTINE XINOUT(IERR,IUNIT,M,INPUT) C.. C.. THIS ROUTINE ASSIGNS A FILE TO A FORTRAN UNIT NUMBER C.. C.. IERR=- IF XINOUT ERROR, + IF SYSTEM ERROR C.. -1=BAD UNIT NUMBER C.. -2='IN' OR 'OUT' MISSING C.. -3=NO '=' OR '?' FOR END OF MESSAGE C.. -4=ERROR IN INPUT STRING (NO BLANK) C.. IUNIT = 1-99 (- = NO PRINT RESPONSE) C.. M = 'IN ' IF EXISTS, 'OUT ' IF DOESNT EXIST, C.. '*' OR 'NO' FOLLOWS 'IN' OR 'OUT' IF NO READ DATA FRON INCR C.. INPUT=HOLDS NAME OF FILE TO ASSIGN C.. /AP = APPEND C.. BYTE INPUT(80),M(80),II(2),NO(2),IO(3),I0,I9,IA,IAP(3) DATA I0,I9,INCR,IPR/'0','9',5,5/ DATA NO,IAS/'N','O','*'/ DATA II,IO,IAP/'I','N','O','U','T','/','A','P'/ KUNIT=IUNIT IF(IUNIT.LT.0) KUNIT=-IUNIT IF(KUNIT.GE.1.AND.KUNIT.LE.99)GOTO6 IERR=-1 RETURN 6 IC=0 C..CHECK FOR IN (OLD) IF(M(1).EQ.II(1).AND.M(2).EQ.II(2))IC=3 C..CHECK FOR OUT (NEW) IF(M(1).EQ.IO(1).AND.M(2).EQ.IO(2).AND.M(3).EQ.IO(3))IC=4 IF(IC.GT.0)GOTO1 IERR=-2 C.. C.. CHECK FOR END OF MESSAGE C.. 1 DO 7 I=IC,80 IF(M(I).EQ.'='.OR.M(I).EQ.'?')GOTO40 7 CONTINUE IERR=-3 RETURN C.. C.. CHECK FOR ASTERIC OR 'NO' READ FILE NAME C.. 40 IX=I IF(M(IC).NE.IAS.AND.(M(IC).NE.NO(1).OR.M(IC+1).NE.NO(2)))GOTO2 C.. C.. ARRANGE IQ FOR INPUT PRINTING C.. DO 22 JX=1,30 IF(INPUT(JX).EQ.0.OR.INPUT(JX).EQ.' ')GOTO23 22 CONTINUE IERR=-4 RETURN 23 IQ=JX-1 GO TO 24 C.. C.. PRINT PROMPT C.. 2 CONTINUE IF(IUNIT.GT.0) IQ=IREADP(M(IC),INPUT) C..CHECK FOR NO TRAILING BLANKS 35 IF(INPUT(IQ).NE.' ')GOTO36 IQ=IQ-1 IF(IQ.GT.0)GOTO35 36 CONTINUE INPUT(IQ+1)=0 C..CHECK FOR APPEND (/AP) IA=0 IQX=IQ-2 DO 33 I=IQX,IQ IF(IAP(IA+1).NE.INPUT(I))GOTO34 INPUT(I)=0 IA=IA+1 33 CONTINUE 34 CONTINUE C.. C.. CHECK FOR SY: C.. 24 IQ=IQ+1 CALL SY('SY:',INPUT,IQ) IQ=IQ-1 C.. C.. PRINT OUT RESPONSE (IF WANTED) C.. ICC=IC IF(M(ICC).EQ.NO(1).AND.M(ICC+1).EQ.NO(2)) ICC=ICC+2 IF(M(ICC).GE.I0.AND.M(ICC).LE.I9) ICC=ICC+1 IF(IUNIT.GT.0) WRITE(IPR,5)(M(I),I=ICC,IX),(INPUT(I),I=1,IQ) 5 FORMAT(1X,131A1) C.. C.. CHECK OUT SYSTEM ERRORS C.. CALL ERRSNS IF(IC.NE.3.AND.IA.NE.3) 1 OPEN(UNIT=KUNIT,NAME=INPUT,CARRIAGECONTROL='LIST',TYPE='NEW') C.. CHECK IF OLD FILE 'IN' OPTION SPECIFIED IF(IC.EQ.3.AND.IA.NE.3) 1 OPEN(UNIT=KUNIT,NAME=INPUT,CARRIAGECONTROL='LIST',TYPE='OLD') IF(IA.EQ.3) 1 OPEN(UNIT=KUNIT,NAME=INPUT,CARRIAGECONTROL='LIST',TYPE='OLD' 2 ,ACCESS='APPEND') CALL ERRSNS(IERR) RETURN C.. C.. EOF ERROR C.. 9 WRITE(IPR,99) 99 FORMAT('0*** ERROR *** FATAL ERROR *** END FILE XINOUT ***') CALL EXIT END