 .PAGE 'RECORD'
;*********************************
;* RECORD: POSITION RELATIVE     *
;*         POINTERS TO GIVEN     *
;*         RECORD NUMBER OR TO   *
;*         LAST RECORD IF OUT OF *
;*         RANGE.                *
;*********************************
;
RECORD
 JSR CMDSET ;INIT TABLES, PTRS
 LDA CMDBUF+1
 STA SA
 JSR FNDRCH
 BCC R20 ;GOT CHANNEL'S LINDEX
;
 LDA #NOCHNL ;NO VALID CHANNEL
 JSR CMDERR
R20
 LDA #LRF+GETFLG+OVRFLO
 JSR CLRFLG
 JSR TYPFIL ;GET FILE TYPE
 BEQ R30 ;IT IS RELATIVE FILE
;
 LDA #MISTYP ;WRONG TYPE
 JSR CMDERR
R30
 LDA FILTYP,X
 AND #1
 STA DRVNUM
 LDA CMDBUF+2
 STA RECL,X ;GET RECORD #
 LDA CMDBUF+3
 STA RECH,X
 LDX LINDX ;CLEAR CHNRDY TO RNDRDY
 LDA #RNDRDY
 STA CHNRDY,X
;
 LDA CMDBUF+4 ;GET OFFSET
 BEQ R40
 SEC
 SBC #1
 BEQ R40
 CMP RS,X
 BCC R35
;
 LDA #RECOVF
 STA ERWORD
 LDA #0
R35
R40
 STA RECPTR ;SET OFFSET
 JSR FNDREL ;CALC SS STUFF
 JSR SSPOS ;SET SS PTRS
 BVC R50
;
 LDA #LRF ;BEYOND THE END
 JSR SETFLG ;SET LAST REC FLAG
 JMP RD05
R50
 JSR POSITN ;POSITION TO RECORD
 LDA #LRF
 JSR TSTFLG
 BEQ R60
 JMP RD05
R60
 JMP ENDCMD ;THAT'S ALL
;
;*********************************
;* POSITN: POSITION RELATIVE     *
;*         DATA BLOCK INTO ACTIVE*
;*         BUFFER & NEXT BLOCK   *
;*         INTO INACTIVE BUFFER. *
;*********************************
;
POSITN
; JSR RESTOR    ;RESTORE BUFFER AREAS
 JSR POSBUF ;POSITION BUFFERS
 LDA RELPTR
 JSR SETPNT ;SET PTR FROM FNDREL
;
 LDX LINDX
 LDA RS,X
 SEC ;CALC THE OFFSET
 SBC RECPTR
 BCS P2
 JMP BREAK ;SHOULD NOT BE NEEDED
P2
 CLC
 ADC RELPTR
 BCC P30
 ADC #1
 SEC
P30
 JSR NXOUT ;SET NR
 JMP RD15
;*********************************
;* POSBUF: POSITION PROPER DATA  *
;*         BLOCKS INTO BUFFERS   *
;*********************************
;
POSBUF
 LDA DIRBUF
 STA R3
 LDA DIRBUF+1
 STA R4
 JSR BHERE ;IS BUFFER IN?
 BEQ P20 ;YES!
;
 JSR SCRUB ;CLEAN BUFFER
 JSR GETLNK
 LDA TRACK
 BEQ P80
 JSR DBLBUF ;TRY INACTIVE BUFFER
 JSR BHERE ;IS IT THIS BUFFER?
 BNE P80 ;NO!
;
 JSR GETLNK
 LDA TRACK
 BEQ P20
;
 JSR DBLBUF
 JSR RDAB ;READ IN NEXT BUFFER
 JSR DBLBUF
P20
 RTS
;
P80
 LDY #0 ;GET PROPER BLOCK
 LDA (R3)Y
 STA TRACK
 INY
 LDA (R3)Y
 STA SECTOR
 JMP STRDBL ;GET NEXT BLOCK, TOO.
 ;RTS
;
BHERE
 JSR GETHDR ;GET THE HEADER
 LDY #0
 LDA (R3)Y
 CMP TRACK
 BEQ BH10 ;TEST SECTOR, TOO.
 RTS
BH10
 INY
 LDA (R3)Y
 CMP SECTOR ;SET .Z
 RTS
;
 .END
