C.. DINOUT.FTN BOHDEN K. CMAYLO JAN 1982 SUBROUTINE DINOUT(IERR,IUNIT,MSG,INPUT) C.. C.. THIS ROUTINE ASSIGNS A FILE TO A FORTRAN UNIT NUMBER C.. C.. IERR=- IF DINOUT 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.. MSG = 'IN ' IF EXISTS, 'OUT ' IF DOESNT EXIST, C.. '*' 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),MSG(80),II(2),IO(3),IASTER,IAP(3) DATA INCR,IPR/5,5/ DATA IASTER,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) GO TO 6 IERR=-1 RETURN 6 IC=0 C..CHECK FOR IN (OLD) IF(MSG(1).EQ.II(1).AND.MSG(2).EQ.II(2))IC=3 C..CHECK FOR OUT (NEW) IF(MSG(1).EQ.IO(1).AND.MSG(2).EQ.IO(2).AND.MSG(3).EQ.IO(3))IC=4 IF(IC.GT.0) GO TO 1 IERR=-2 C.. C.. CHECK FOR END OF MESSAGE C.. 1 DO 7 I=IC,80 IF(MSG(I).EQ.'='.OR.MSG(I).EQ.'?') GO TO 40 7 CONTINUE IERR=-3 RETURN C.. C.. CHECK FOR ASTERIC C.. 40 IX=I IF(MSG(IC).NE.IASTER) GO TO 2 C.. C.. ARRANGE IQ FOR INPUT PRINTING C.. DO 22 JX=1,30 IF(INPUT(JX).EQ.0.OR.INPUT(JX).EQ.' ') GO TO 23 22 CONTINUE IERR=-4 RETURN 23 IQ=JX-1 GO TO 24 C.. C.. PRINT PROMPT C.. 2 IF(IUNIT.GT.0) WRITE(IPR,3)(MSG(J),J=IC,I) 3 FORMAT(1H$,80A1) C.. C.. READ IN INFO C.. READ (INCR,4,END=9)IQ,(INPUT(I),I=1,IQ) 4 FORMAT(Q,80A1) C..CHECK FOR NO TRAILING BLANKS 35 IF(INPUT(IQ).NE.' ') GO TO 36 IQ=IQ-1 IF(IQ.GT.0) GO TO 35 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)) GO TO 34 INPUT(I)=' ' IA=IA+1 33 CONTINUE 34 CONTINUE C.. C.. CHECK FOR SY: IN FRONT OF INPUT C.. 24 CALL SY('SY:',INPUT,IQ) C.. C.. PRINT OUT RESPONSE (IF WANTED) C.. IF(IUNIT.GT.0) WRITE(IPR,5)(MSG(I),I=IC,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,FORM='UNFORMATTED',TYPE='NEW' 1,ACCESS='DIRECT',CARRIAGECONTROL='NONE',RECORDSIZE=128) C.. CHECK IF OLD FILE 'IN' OPTION SPECIFIED IF(IC.EQ.3.AND.IA.NE.3) 1 OPEN(UNIT=KUNIT,NAME=INPUT,FORM='UNFORMATTED',TYPE='OLD' 1,ACCESS='DIRECT',CARRIAGECONTROL='NONE',RECORDSIZE=128) IF(IA.EQ.3) 1 OPEN(UNIT=KUNIT,NAME=INPUT,FORM='UNFORMATTED',TYPE='OLD' 1,ACCESS='DIRECT',CARRIAGECONTROL='NONE',RECORDSIZE=128) CALL ERRSNS(IERR) RETURN C.. C.. EOF ERROR C.. 9 WRITE(IPR,99) 99 FORMAT('0*** ERROR *** FATAL ERROR *** END FILE DINOUT ***') CALL EXIT END