SUBROUTINE GETFIL(DBLK,ICHAN,IBLK,IERR) C C C C SUBROUTINE TO CREATE A FILE C C C C DBLK - 2 WORD NAME ARRAY C C ICHAN - COMMUNICATIONS CHANNEL C C IBLK - BLOCK LENGTH C C IERR - ERROR CODE RETURNED C C WRITTEN BY NWR SPRING 1976 C IMPROVED BY NWR SPRING 1978 C ENHANCED AND COMMENTED BY JCD NOVEMBER 1978 C C_____________________________________________________ C C REAL DBLK(2) INTEGER ASCII(7) C C C.ASK RT-11 FOR A CHANNEL C ICHAN=IGETC() IF(ICHAN.LT.0) GO TO 800 C C C.LOAD THE NECESSARY HANDLER INTO MEMORY C IDUM=IFETCH(DBLK) IF(IDUM.NE.0) GO TO 810 C C C.REQUEST THE NEW FILE C IDUM=IENTER(ICHAN,DBLK,IBLK) IF(IDUM.LT.0) GO TO 820 C C C.NO ERROR RETURN C IERR=0 RETURN C C C.GOT A RT-11 CHANNEL ALLOCATION ERROR C 800 IF(IERR.EQ.10)GO TO 805 CALL R50ASC(12,DBLK,ASCII) CALL FILL(ASCII) WRITE(7,9000)ASCII 805 IERR = -1 RETURN C C C.GOT AN ERROR TRYING TO GET THE DRIVER C 810 IF(IERR.EQ.10)GO TO 815 CALL R50ASC(12,DBLK,ASCII) CALL FILL(ASCII) IF(IDUM.EQ.1)WRITE(7,9010)ASCII IF(IDUM.EQ.2)WRITE(7,9020)ASCII IF(IDUM.EQ.3)WRITE(7,9030)ASCII 815 IERR=-1 I=IFREEC(ICHAN) RETURN C C C.GOT AN ERROR TRYING TO CREATE FILE C 820 IF(IERR.EQ.10)GO TO 825 CALL R50ASC(12,DBLK,ASCII) CALL FILL(ASCII) IF(IDUM.EQ.-1)WRITE(7,9040)ASCII IF(IDUM.EQ.-2)WRITE(7,9050)ASCII IF(IDUM.EQ.-3)WRITE(7,9060)ASCII 825 IERR=-1 I=IFREEC(ICHAN) RETURN C C 9000 FORMAT(' ?GETFIL-F-no RT-11 chan avail for ',7A2) 9010 FORMAT(' ?GETFIL-F-unkown device for ',7A2) 9020 FORMAT(' ?GETFIL-F-handler too big for ',7A2) 9030 FORMAT(' ?GETFIL-F-no handler on SY for ',7A2) 9040 FORMAT(' ?GETFIL-F-chan already in use opening ',7A2) 9050 FORMAT(' ?GETFIL-F-no space avail for ',7A2) 9060 FORMAT(' ?GETFIL-F-device busy for file ',7A2) END SUBROUTINE OPENFL(DBLK,ICHAN,IERR) C C C C SUBROUTINE TO OPEN AN EXISTING FILE ON RK0 C C C C DBLK - 2 WORD NAME ARRAY OF THE FILE C C ICHAN - COMMUNICATIONS CHANNEL C C IERR - RETURNED ERROR CODE c FEED A 10 TO TURN OFF MESSAGES C C WRITTEN BY NWR SPRING 1976 C IMPROVED BY NWR SPRING 1978 C ENHANCED BY JCD NOVEMBER 1978 C______________________________________________________________ C C REAL DBLK(2) INTEGER ASCII(7) C C C.GET A RT-11 CHANNEL C ICHAN=IGETC() IF(ICHAN.LT.0) GO TO 800 C C C.FETCH DRIVER INTO MEMORY C IDUM=IFETCH(DBLK) IF(IDUM.NE.0) GO TO 810 C C C.FIND FILE C IDUM=LOOKUP(ICHAN,DBLK) IF(IDUM.LT.0) GO TO 820 C C C.NO ERROR RETURN C IERR=0 RETURN C C C.GOT A RT-11 CHANNEL ALLOCATION ERROR C 800 IF(IERR.EQ.10)GO TO 805 CALL R50ASC(12,DBLK,ASCII) CALL FILL(ASCII) WRITE(7,9000)ASCII 805 IERR = -1 RETURN C C C.GOT AN ERROR TRYING TO GET THE DRIVER C 810 IF(IERR.EQ.10)GO TO 815 CALL R50ASC(12,DBLK,ASCII) CALL FILL(ASCII) IF(IDUM.EQ.1)WRITE(7,9010)ASCII IF(IDUM.EQ.2)WRITE(7,9020)ASCII IF(IDUM.EQ.3)WRITE(7,9030)ASCII 815 IERR=-1 I=IFREEC(ICHAN) RETURN C C C.GOT AN ERROR TRYING TO OPEN FILE C 820 IF(IERR.EQ.10)GO TO 825 CALL R50ASC(12,DBLK,ASCII) CALL FILL(ASCII) IF(IDUM.EQ.-1)WRITE(7,9040)ASCII IF(IDUM.EQ.-2)WRITE(7,9050)ASCII IF(IDUM.EQ.-3)WRITE(7,9060)ASCII 825 IERR=-1 I=IFREEC(ICHAN) RETURN 9000 FORMAT(' ?OPENFL-F-no RT-11 chan avail for ',7A2) 9010 FORMAT(' ?OPENFL-F-unkown device for ',7A2) 9020 FORMAT(' ?OPENFL-F-handler too big for ',7A2) 9030 FORMAT(' ?OPENFL-F-no handler on SY for ',7A2) 9040 FORMAT(' ?OPENFL-F-chan in use opening ',7A2) 9050 FORMAT(' ?OPENFL-F-file not found ',7A2) 9060 FORMAT(' ?OPENFL-F-device busy for file ',7A2) END SUBROUTINE CLOSFL(ICHAN) C C C SUBROUTINE TO CLOSE A FILE AND RETURN THE C CHANNEL NUMBER TO THE SYSTEM C C C ICHAN = CHANNEL NUMBER ASSOCIATED WITH THE C OPENED FILE C C WRITTEN BY NWR SPRING 1978 C ENHANCED BY JCD NOVEMBER 1978 C CALL CLOSEC(ICHAN) I= IFREEC(ICHAN) IF(I.EQ.1)WRITE(7,9000) RETURN 9000 FORMAT(' ?CLOSFL-W-tried to free a free chan') END SUBROUTINE FILL(ASCII) C C C ROUTINE TO PARSE AND FILL AN ASCII FILE NAME STRING C C C LOGICAL*1 ASCII(1),TEMP(14) J=0 DO 10 I=1,12 J=J+1 TEMP(J)=ASCII(I) IF(J.EQ.3)J=J+1 IF(J.EQ.10)J=J+1 10 CONTINUE TEMP(4)=1H: TEMP(11)=1H. J=0 DO 20 I=1,14 IF(TEMP(I).EQ.1H )GO TO 20 J=J+1 ASCII(J)=TEMP(I) 20 CONTINUE J=J+1 IF(J.GT.14)RETURN DO 30 I=J,14 ASCII(I)=1H 30 CONTINUE RETURN END