SUBROUTINE OPN(UNIT,FILE,ACTION,ERR) INTEGER UNIT,ERR BYTE FILE(1),ACTION,PFIL(40) PARAMETER PUICSZ = 9 DATA PFIL/'S','P','0',':','[','1',',','4',']',31*0/ C C OPN - DO OPEN PROCESSING C IF ACTION = R THEN OPEN FOR READING C IF ACTION = W THEN OPEN FOR WRITING C IF ACTION = F THEN OPEN FOR WRITING WITH CARRIAGECONTROL=LIST C IF ACTION = A THEN OPEN FOR APPENDING C IF ACTION = X THEN OPEN FOR READING WITH DELETE CAPABILITY C IF ACTION = P THEN OPEN FOR PRINTING C ERR = 1 IF (ACTION .NE. 1HR) GOTO 10 OPEN(UNIT=UNIT,NAME=FILE,TYPE='OLD',READONLY,SHARED,ERR=99) GOTO 1000 10 CONTINUE IF (ACTION .NE. 1HW) GOTO 20 OPEN(UNIT=UNIT,NAME=FILE,TYPE='NEW',CARRIAGECONTROL='LIST', * DISPOSE='DELETE',ERR=99) GOTO 1000 20 CONTINUE IF (ACTION .NE. 1HA) GOTO 30 OPEN(UNIT=UNIT,NAME=FILE,TYPE='UNKNOWN', * ACCESS='APPEND',ERR=99) GOTO 1000 30 CONTINUE IF (ACTION .NE. 1HX) GOTO 40 OPEN(UNIT=UNIT,NAME=FILE,TYPE='OLD',ERR=99) GOTO 1000 40 CONTINUE IF (ACTION .NE. 1HP) GOTO 50 I = 0 45 CONTINUE I = I+1 PFIL(I+PUICSZ) = FILE(I) IF (FILE(I) .NE. 0) GOTO 45 OPEN(UNIT=UNIT,NAME=PFIL,TYPE='NEW',CARRIAGECONTROL='LIST', * DISPOSE='PRINT',ERR=99) GOTO 1000 50 CONTINUE IF (ACTION .NE. 1HF) GOTO 99 OPEN(UNIT=UNIT,NAME=FILE,TYPE='NEW',CARRIAGECONTROL='FORTRAN', * DISPOSE='DELETE',ERR=99) GOTO 1000 1000 CONTINUE ERR = 0 99 CONTINUE RETURN END