! !======================================================================! !++ ! +-------------------------------------+ ! I I ! I C K O P R T I ! I - - - - - - I ! I I ! +-------------------------------------+ ! ! PURPOSE: ! ! UTILITY MODULE TO CHECK OPEN RETURN FOR ERROR ! ! CALLING SEQUENCE: CALL CKOPRT(RETURN) ! ! INPUT: ! ! RETURN - (B) RETURN CONDITION FROM OPEN ROUTINE ! ! OUTPUT: NONE ! !-- !======================================================================! ! SUBROUTINE CKOPRT(RETURN) ! ! DECLARATIONS ! BYTE RETURN,ERRS(20,4),ERRNUM DATA ERRS / & 29,13,'N','o',' ','s','u','c','h',' ','f','i','l','e','.',5*0, & 30,13,'O','p','e','n',' ','f','a','i','l','u','r','e','.',5*0, & 42,18,'D','e','v','i','c','e',' ','n','o','t',' ','u','s', & 'a','b','l','e','.', & 43,14,'B','a','d',' ','f','i','l','e',' ','n','a','m','e','.', & 4*0/ ! ! PROCEDURE BODY ! ! $WHEN (RETURN.NE.0) IF (RETURN.EQ.0) GOTO 19 ERRNUM=1 ! $WHILE (ERRNUM.LE.4 .AND. ERRS(1,ERRNUM).NE.RETURN) 20 IF (ERRNUM.GT.4 .OR. ERRS(1,ERRNUM).EQ.RETURN) GOTO 29 ERRNUM=ERRNUM+1 GOTO 20 29 CONTINUE ! $ENDWHILE ! $WHEN (ERRNUM.GT.4) IF (ERRNUM.LE.4) GOTO 39 ! $TYPE (X,'Error in open =',I4) RETURN TYPE 1,RETURN 1 FORMAT (X,'Error in open =',I4) GOTO 35 ! $ELSE 39 CONTINUE ! $TYPE (X,A1) (ERRS(I,ERRNUM),I=3, ! & ERRS(2,ERRNUM)+2) TYPE 2,(ERRS(I,ERRNUM),I=3,ERRS(2,ERRNUM)+2) 2 FORMAT (X,A1) 35 CONTINUE ! $ENDWHEN 19 CONTINUE ! $ENDWHEN RETURN END LOGICAL*1 FUNCTION CNFRM(PROMPT) INTEGER*2 PRLEN BYTE PROMPT(1),ANSWER ! PRLEN=0 100 IF (PROMPT(PRLEN+1).EQ.0) GOTO 200 PRLEN=PRLEN+1 GOTO 100 200 IF (PRLEN.LE.0) GOTO 210 TYPE 10,(PROMPT(I),I=1,PRLEN) 10 FORMAT (X,A1,'? ',$) 210 READ (5,20,END=310) ANSWER 20 FORMAT (A1) CNFRM=ANSWER.EQ.'Y'.OR.ANSWER.EQ.'y' IF (CNFRM) RETURN CNFRM=ANSWER.NE.'N'.AND.ANSWER.NE.'n' IF (.NOT.CNFRM) RETURN 300 TYPE 30 30 FORMAT (X,'Answer yes or no.') GOTO 200 310 CLOSE (UNIT=5) OPEN (UNIT=5) GOTO 300 END ! ! 29 NO SUCH FILE ! 30 OPEN FAILURE ! 32 INVALID LOGICAL UNIT NUMBER ! 34 UNIT ALREADY OPEN ! 37 INCONSISTENT RECORD LENGTH ! 41 NO FCS BUFFER ROOM ! 42 DEVICE HANDLER NOT RESIDENT ! 43 FILE NAME SPECIFICATION ERROR ! 44 RECORDSIZE TO BIG FOR 'MAXBUF' ! SUBROUTINE OPERST INTEGER*2 ERRNUM(9),I DATA ERRNUM /29,30,32,34,37,41,42,43,44/ DO 10 I=1,9 10 CALL ERRSET(ERRNUM(I),,,,.FALSE.) RETURN END LOGICAL*1 FUNCTION OPSQIN(UNIT,NAME,RETURN) BYTE NAME,RETURN INTEGER*2 UNIT,TMPRET CALL ERRSNS OPEN (UNIT=UNIT,NAME=NAME,TYPE='OLD',READONLY,ERR=10) 10 CALL ERRSNS(TMPRET) RETURN=TMPRET OPSQIN=RETURN.EQ.0 RETURN END LOGICAL*1 FUNCTION OPSQOT(UNIT,NAME,RETURN) BYTE NAME,RETURN INTEGER*2 UNIT,TMPRET CALL ERRSNS OPEN (UNIT=UNIT,NAME=NAME,TYPE='NEW',CARRIAGECONTROL='LIST', & ERR=10) 10 CALL ERRSNS(TMPRET) RETURN=TMPRET OPSQOT=RETURN.EQ.0 RETURN END INTEGER*2 FUNCTION RANDOM(MAX) INTEGER*2 MAX,SEED1,SEED2 REAL REARAN,REAMAX,TEMP LOGICAL*1 REPEAT EQUIVALENCE (REARAN,TEMP) DATA REPEAT /.FALSE./ ! IF (REPEAT) GOTO 10 REPEAT=.TRUE. TEMP=SECNDS(0.0) TEMP=TEMP-AINT(TEMP) SEED1=INT(10000.0*TEMP) TEMP=SECNDS(0.0)/TEMP TEMP=TEMP-AINT(TEMP) SEED2=INT(10000.0*TEMP) ! 10 REAMAX=FLOAT(MAX) REARAN=RAN(SEED1,SEED2) RANDOM=IFIX(1.0+(REAMAX*REARAN)) RETURN END LOGICAL FUNCTION RDSQLN(UNIT,BUFFER,LENGTH,RETURN) BYTE BUFFER(LENGTH),RETURN INTEGER*2 UNIT,LENGTH,TMPRET,NEWLEN ! CALL ERRSNS READ (UNIT,1,END=20,ERR=10) NEWLEN,BUFFER 1 FORMAT (Q,A1) 10 CALL ERRSNS(TMPRET) RETURN=TMPRET IF (RETURN.NE.0) GOTO 29 IF (LENGTH.LT.NEWLEN) GOTO 39 LENGTH=NEWLEN GOTO 30 39 CONTINUE RETURN=22 30 CONTINUE 29 CONTINUE RDSQLN=RETURN.EQ.0 RETURN ! 20 RETURN=24 LENGTH=0 RDSQLN=.FALSE. RETURN END INTEGER FUNCTION SIZE(NUMBER) INTEGER TEMP,COUNT TEMP=IABS(NUMBER) COUNT=1 IF ( NUMBER.LT.0 ) COUNT=2 10 IF ( TEMP.LT.10 ) GOTO 19 TEMP=TEMP/10 COUNT=COUNT+1 GOTO 10 19 CONTINUE SIZE=COUNT RETURN END LOGICAL*1 FUNCTION WRSQLN(UNIT,BUFFER,LENGTH,RETURN) ! BYTE BUFFER(1),RETURN INTEGER*2 UNIT,LENGTH,TMPRET ! CALL ERRSNS IF (LENGTH.GT.0) GOTO 1001 WRITE (UNIT,10,ERR=99) 10 FORMAT () GOTO 1099 1001 CONTINUE WRITE (UNIT,20,ERR=99) (BUFFER(I),I=1,LENGTH) 20 FORMAT (A1) 1099 CONTINUE 99 CALL ERRSNS(TMPRET) RETURN=TMPRET WRSQLN=RETURN.EQ.0 RETURN END