.NLIST TTM,SYM .MCALL FDOFF$ .TITLE GETPOS -- REMEMBER POSITION IN A FILE FDOFF$ DEF$L ; ; FORTRAN CALL: ; CALL GETPOS(LUN,RECP) ; WHERE LUN = LOGICAL UNIT NUMBER ; RECP=A FOUR BYTE BUFFER IN WHICH THE ; FILE RECORD POSITION IS REMEMBERED ; ; THIS ROUINE "REMEMBERS" THE CURRENT POSITION IN ; A SEQUENTAL FILE BY RETURNING YOU THE CURRENT BLOCK NUMBER ; AND BYTE ADDRESS OF THE NEXT RECORD IN THE FILE. ; THE BLOCK AND POSITION VALUES ARE RETURNED ; IN ONE 4 WORD PARAMETER WHICH PROBABLY SHOULD BE A REAL*8 ; CALLING FORTRAN ROUTINE. THIS VALUE IS ONLY OF USE IN ; IN THE SEEK ROUTINE, SO DONT BOTHER TRYING TO PRINT IT. ; ; NOTE: ; THE FILE MUST BE OPEN FOR THIS ROUTINE TO WORK ; THIS MEANS YOU MUST HAVE READ OR WRITTEN IN THE ; FILE AT LEAST ONCE BEFORE USING GETPOS, OR YOU ; MUST HAVE OPENED THE FILE WITH THE OPEN COMMAND ; ; INVALID LUN'S WILL RESULT IN A FORTRAN ERROR TRAPPED BY ; THE FCHNL ROUTINE ; LUN=2 BUF=4 GETPOS:: MOV @LUN(R5),R2 ;GET LUN PARAMETER MOV @#$OTSV,R3 ;GET WORK AREA ADDRESS JSR PC,$FCHNL ;FIND FDB ADDRESS ADD #14,R0 ;GET TO RSX FDB CALL .MARK ;LET FCS FIGURE OUT BYTE POSITION FOR ME MOV BUF(R5),R4 ;GET ADDRESS TO PUT RESULT IN MOV #^RMRK,(R4)+ ;STORE MAGIC WORD TO REMEMBER ME BY MOV R1,(R4)+ ;GET HIGH BITS, MOV R2,(R4)+ ;AND LOW BITS OF VIRTUAL BLOCK NUMBER MOV R3,(R4)+ ;GET BYTE POSITION IN BLOCK RTS PC .END