.TITLE MTBLOK- MAGTAPE BLOCK UTILITES .IDENT /04/ ; 02- 22-FEB-76 TO REVISE CALL SEQUENCES AND ADD WRITE ENTRY POINT ;03 25-FEB-76 TO ADD WRITE EOF. ;04 1-MAY-76 TO ADD REWIND/UNLOAD ; ; ; FORTRAN CALLABLE ROUTINES TO PERFORM FOREIGN MAGTAPE MANIPULATIONS ; .PSECT $IDAT7,D,LCL,CON ; ; DPBS FOR MAGTAPE I/O ; .MCALL DIR$,QIO$,ALUN$,WTSE$,CALL,RETURN ; MTLUN=0 ;LUN FOR MAGTAPE EFN=1 ;EVENT FLAG ; ; ALUN: ALUN$ MTLUN,MT,0 ;ASSIGN LUN QIOB: QIO$ 0 ,MTLUN,EFN,,STATUS,,<0,0,0,0,0,0> ;QIO DPB BLOCK WAITF: WTSE$ EFN ;WAITFOR ; STATUS: 0,0 ;STATUS BLOCK ; ; .PSECT $CODE7,I,CON ; ; FORTRAN ENTRY POINTS ; ; MTINIT(LUN,MTLUN,CHARAC,STATUS) .ENABL LSB ; MTINIT:: CMPB #4,(R5) ;VERIFY CALL FORM BEQ 5$ IOT ;CRASH 5$: MOV #ALUN,R0 ;GET ASSIGN LUN DPB MOV @2(R5),A.LULU(R0);SET LUN TO ASSIGN MOV @4(R5),A.LUNU(R0); SET MT UNIT NUMBER DIR$ R0 BCS 7$ MOV @6(R5),R1 ;SET FIRST PARAMETER MOV #IO.STC,R4 ;SET FUNCTION CALL DOQIO ;DO ONE 7$: MOV 10(R5),R3 ;SET STATUS RETURN ADDRESS BCS STARET ;RETURN STATUS IF ASSIGN ERROR BR 15$ ;BR TO REWIND ; ; ; MTWEOF(LUN,STATUS) WRIET EOF MARK ON TAPE ; MTWEOF:: MOV #IO.EOF,R4 ;SET FUNCTION CODE BR 8$ ;GO DO IT ; ; ; MTGETS(LUN,STATUS) RETURN STATUS(CHARACTERISTICS) ; MTGETS:: MOV #IO.SEC,R4 ;SET FUNCTION 8$: CMP #2,(R5) ;VERIFY ARGUMENTS BNE 9$ MOV 4(R5),R3 ;STATUS RETURN BR 17$ ;AND GO DO IT 9$: IOT ; ; MTREWD(LUN,STATUS) ; MTREWD:: CMPB #2,(R5) BEQ 10$ IOT 10$: MOV 4(R5),R3 ;SET STATUS RETURN 15$: MOV #IO.RWD,R4 ;SET FUNCTION 17$: CALL DOQIO BR STARET ;TAKE COMMON EXIT ; ; ; MTUNLD(LUN,STATUS) ; MTUNLD:: CMPB #2,(R5) ;MUST BE 2 ARGS BEQ 20$ IOT 20$: MOV 4(R5),R3 ;STATUS RETURN ADDRESS MOV #IO.RWU,R4 ;SET FUNCTION BR 17$ ;COMMON COMPLETION ; ; ; ; ; ; POSITION TAPE ENTRIES ; ; MTSKRF(LUN,STATUS) SKIP ONE RECORD FORWARD ; MTSKRB(LUN,STATUS) SKIP ONE RECORD BACKWARD ; MTSKFF(LUN,STATUS) SKIP ONE FILE FORWARD ; MTSKFB(LUN,STATUS) SKIP ONE FILE BACKWARD ; MTSKRF:: MOV #IO.SPB,R4 ;SET I/O FUNCTION BR 25$ ;VERIFY AND GO ; MTSKFF:: MOV #IO.SPF,R4 ;SET FUNCTION 25$: MOV #1,R1 ;SET COUNT BR 50$ ; MTSKRB:: MOV #IO.SPB,R4 ;SET FUNCTION BR 35$ ;SET COUNT AND GO VERIFY ; MTSKFB:: MOV #IO.SPF,R4 ;SET FUNCTION 35$: MOV #-1,R1 ;SET COUNT ; ; 50$: CMPB #2,(R5) ;VERIFY CALL FORM BEQ 55$ IOT 55$: CALL DOQIO MOV 4(R5),R3 ;SET STATUS RETURN BR STARET ;GO RETURN STATUS TO CALLER ; ; ; ; TRANSFER ENTRY POINTS ; ; MTREAD(LUN,BUFFER,MAXBC,STATUS) ; MTWRIT(LUN,BUFFER,BYTECT,STATUS) ; MTREAD:: MOV #IO.RLB,R4 ;SET FUNCTION BR 60$ ;GO GET ARGS ; MTWRIT:: MOV #IO.WLB,R4 ;SET FUNCTION ; 60$: CMPB #4,(R5) ;VERIFY CALL FORM BEQ 65$ IOT 65$: MOV 4(R5),R1 ;SET ADDRESS MOV @6(R5),R2 ;SET COUNT CALL DOQIO MOV 10(R5),R3 ;STATUS RETURN ; ; ; STATUS RETURN ROUTINE ; STARET: BCC 70$ MOV @#$DSW,(R3)+ ;IF DIRECTIVE ERROR, RETURN DSW MOV @#$DSW+2,(R3) RETURN 70$: MOV STATUS,(R3)+ MOV STATUS+2,(R3) RETURN ; DOQIO: MOV #QIOB,R0 ;DPB ADDRESS MOVB @2(R5),Q.IOLU(R0) ;SET LUN MOV R4,Q.IOFN(R0) ;SET FUNCTION MOV R1,Q.IOPL+0(R0) MOV R2,Q.IOPL+2(R0) ;SET PARAMETERS DIR$ R0 ;DO ONE BCS 80$ DIR$ #WAITF ;WAIT FOR COMPLETION 80$: RETURN ; .DSABL LSB .END