; ******************************************************* ; * * ; * THIS SOFTWARE WAS DEVELOPED WITH SUPPORT * ; * FROM THE NATIONAL INSTITUTES OF HEALTH: * ; * NIH CA06927 * ; * NIH CA22780 * ; * * ; * DIRECT INQUIRIES TO: * ; * COMPUTER CENTER * ; * THE INSTITUTE FOR CANCER RESEARCH * ; * 7701 BURHOLME AVENUE * ; * PHILADELPHIA, PENNSYLVANIA 19111 * ; * * ; * NO WARRANTY OR REPRESENTATION, EXPRESS OR * ; * IMPLIED, IS MADE WITH RESPECT TO THE * ; * CORRECTNESS, COMPLETENESS, OR USEFULNESS * ; * OF THIS SOFTWARE, NOR THAT USE OF THIS * ; * SOFTWARE MIGHT NOT INFRINGE PRIVATELY * ; * OWNED RIGHTS. * ; * * ; * NO LIABILITY IS ASSUMED WITH RESPECT TO * ; * THE USE OF, OR FOR DAMAGES RESULTING FROM * ; * THE USE OF THIS SOFTWARE * ; * * ; ******************************************************* ; * * ; * THIS SOFTWARE WAS DESIGNED FOR USE ON A * ; * PDP-11/70 OPERATING UNDER IAS V3.0 USING * ; * THE IAS PDP-11 MACRO ASSEMBLER. * ; * * ; ******************************************************* .TITLE SKPCOP FORTRAN SKIP/COPY INTERFACE .IDENT /ICR001/ ; .MCALL FDOF$L,FCSBT$,GET$S,PUT$S ; FDOF$L ;DEFINE FDB OFFSETS FCSBT$ ;DEFINE FDB BIT DEFINITIONS FFDBLN = 6*2 ;LENGTH OF FORTRAN FDB HEADER RECCNT = 4-FFDBLN ;OFFSET TO FORTRAN RECORD COUNT I4 ; .PSECT $MACOD,RW,I,LCL,CON GETFDB: MOV @2(R5),R2 ;GET LUN CALL $FCHNL ;GET ASSOCIATED FFDB BCS 100$ ;CS - ILLEGAL LUN ADD #FFDBLN,R0 ;OFFSET TO REAL FDB MOV SP,R1 SUB #14,SP ;MAKE ROOM FOR SAVE MOV (R1),(SP) ;SET UP FOR COROUTINE MOV F.URBD(R0),(R1) ;SAVE FORTRAN FDB AND FDB INFO MOV F.URBD+2(R0),-(R1) MOV F.NRBD(R0),-(R1) MOV F.NRBD+2(R0),-(R1) MOV F.RACC(R0),-(R1) MOV R0,-(R1) JSR PC,@(SP)+ ;CALL COROUTINE MOV (SP)+,R0 ;GET FORTRAN FDB ADDRESS MOV (SP)+,F.RACC(R0) ;AND RESTORE FDB MOV (SP)+,F.NRBD+2(R0) MOV (SP)+,F.NRBD(R0) MOV (SP)+,F.URBD+2(R0) MOV (SP)+,F.URBD(R0) RETURN 100$: CLR (R4)+ CLR (R4) TST (SP)+ RETURN ; ;SKIP - SKIP LOGICAL RECORD(S) IN A FILE ; CALL SKIP(LUN,I4COUNT,I4SKPED) ; SKIP:: MOV 6(R5),R4 CALL GETFDB ;GET FORTRAN FDB MOV 4(R5),R4 ;INTEGER*4 RECORD COUNT MOV 6(R5),R2 ;RETURN NUMBER SKIPPED MOV (R4)+,R3 ;LOW ORDER MOV R3,(R2)+ MOV (R4),R4 ;HIGH ORDER MOV R4,(R2) BIS #FD.PLC,F.RACC(R0) ;SET LOCATE MODE TST R3 BEQ 15$ 10$: GET$S ;GET A RECORD BCS 20$ ;SOME ERROR SOB R3,10$ ;LOW ORDER 15$: DEC R4 ;HIGH ORDER BGE 10$ CLR R4 20$: TST -(R2) SUB R3,(R2)+ ;LOW ORDER SBC (R2) SUB R4,(R2) ;HIGH ORDER ADD #RECCNT,R0 ;ADJUST FORTRAN RECORD COUNTER ADD -2(R2),(R0)+ ADC (R0) ADD (R2),(R0) RETURN ; ;COPY - COPY N LINES FROM ONE FILE TO ANOTHER ; CALL COPY(LUN1,LUN2,I4COUNT,I4COPED) ; COPY:: MOV 10(R5),R4 CALL GETFDB ;GET FORTRAN FDB (LUN1) MOV R0,(R4) ;SAVE FDB TST (R5)+ ;BUMP ARG LIST CALL GETFDB ;GET FORTRAN FDB (LUN2) TST -(R5) ;BUMP BACK ARG LIST MOV R0,R2 ;SAVE IT MOV (R4),R1 ;GET FIRST FDB MOV 6(R5),R0 ;GET LINE COUNT MOV 10(R5),R4 ;AND RETURN LINE COUNT MOV (R0)+,R3 ;LOW ORDER MOV R3,(R4)+ ;RETURN IT MOV (R0),(R4) ;HIGH ORDER MOV (R0),R4 ;RETURN IT BIS #FD.PLC,F.RACC(R1) ;SET LOCATE MODE FOR GET$S BIC #FD.PLC,F.RACC(R2) ;CLEAR LOCATE MODE FOR PUT$S TST R3 BEQ 35$ 30$: GET$S R1 ;GET A RECORD BCS 40$ PUT$S R2,F.NRBD+2(R1),F.NRBD(R1) ;PUT IT BCS 40$ SOB R3,30$ 35$: DEC R4 BGE 30$ CLR R4 40$: MOV 10(R5),R0 ;CALCULATE NUMBER COPIED SUB R3,(R0)+ ;LOW ORDER SBC (R0) SUB R4,(R0) ;HIGH ORDER ADD #RECCNT,R1 ;BUMP FORTRAN RECORD COUNT ADD #RECCNT,R2 ;... FOR BOTH LUNS ADD -(R0),(R1)+ ADC (R1) ADD (R0)+,(R2)+ ADC (R2) ADD (R0),(R1) ADD (R0),(R2) RETURN .END