 .PAGE 'ADDREL'
;*********************************
;* ADDREL: ADD BLOCKS TO RELATIVE*
;*         FILE.                 *
;*   VARS:                       *
;*   REGS:                       *
;*                               *
;*********************************
;
ADDREL
 JSR SETDRN
 JSR SSEND ;SET UP END OF FILE
 JSR POSBUF
 LDA SSIND
 STA R1 ;SAVE SS INDEX
 LDA SSNUM
 STA R0 ;SAVE SS NUMBER
 LDA #0
 STA R2 ;CLEAR FLAG FOR ONE BLOCK
;
 LDA #0 ;CLEAR FOR CALCULATION...
 STA RECPTR ;...TO 1ST BYTE IN RECORD
 JSR FNDREL ;CALC SS PTRS
 JSR NUMFRE ;CALC AVAILABLE...
;
 LDY LINDX ;RECORD SPAN?
 LDX RS,Y
 DEX
 TXA
 CLC
 ADC RELPTR
 BCC AR10 ;NO SPAN
;
 INC SSIND ;INC SS PTRS & CHECK
 INC SSIND ;INC SS PTRS & CHECK
 BNE AR10
 INC SSNUM
 LDA #SSIOFF
 STA SSIND
AR10
 LDA R1
 CLC
 ADC #2
 JSR SETSSP
;
 LDA SSNUM
 CMP #NSSL
 BCC AR25 ;VALID RANGE
;
AR20
 LDA #BIGFIL
 JSR CMDERR ;TOO MANY SS'S
AR25
 LDA SSIND ;CALC # BLOCKS NEEDED...
 SEC ;...& CHECK AGAINST AVAIL.
 SBC R1
 BCS AR30
 SBC #SSIOFF-1
 CLC
AR30
 STA T3 ;# SS INDICES
 LDA SSNUM
 SBC R0
 STA T4 ;# SS NEEDED
;
 LDX #0 ;CLEAR ACCUM.
 STX T1
 STX T2
 TAX ;.X=# SS
 JSR SSCALC ;CALC # OF BLOCKS NEEDED
;
 LDA T2
 BNE AR35
 LDX T1
 DEX
 BNE AR35
;
 INC R2
AR35
 CMP NBTEMP+1
 BCC AR40 ;OK!!
 BNE AR20
 LDA NBTEMP
 CMP T1
 BCC AR20 ;NOT ENUF BLOCKS
AR40
 LDA #1
 JSR DRDBYT ;LOOK AT SECTOR LINK
 CLC
 ADC #1 ;+1 IS NR
 LDX LINDX
 STA NR,X
 JSR NXTTS ;GET NEXT BLOCK...
 JSR SETLNK ;...& SET LINK.
 LDA R2
 BNE AR50 ;ADD ONE BLOCK
;
 JSR WRTOUT ;WRITE CURRENT LAST REC
AR45
 JSR DBLBUF ;SWITCH BUFS
 JSR SETHDR ;SET HDR FROM T & S
 JSR NXTTS ;GET ANOTHER
 JSR SETLNK ;SET UP LINK
 JSR NULBUF ;CLEAN IT OUT
 JMP AR55
AR50
 JSR DBLBUF ;SWITCH BUFS
 JSR SETHDR ;SET HDR FROM T & S
 JSR NULBUF ;CLEAN BUFFER
 JSR NULLNK ;LAST BLOCK =0,LSTCHR
AR55
 JSR WRTOUT ;WRITE BUFFER
 JSR GETLNK ;GET T&S FROM LINK
 LDA TRACK
 PHA ;SAVE 'EM
 LDA SECTOR
 PHA
 JSR GETHDR ;NOW GET HDR T&S
 LDA SECTOR
 PHA ;SAVE 'EM
 LDA TRACK
 PHA
 JSR GSSPNT ;CHECK SS PTR
 TAX
 BNE AR60
;
 JSR NEWSS ;NEED ANOTHER SS
 LDA #SSIOFF
 JSR SETSSP ;.A=BT VAL
 INC R0 ;ADVANCE SS COUNT
AR60
 PLA
 JSR PUTSS ;RECORD T&S...
 PLA
 JSR PUTSS ;...IN SS.
 PLA ;GET T&S FROM LINK
 STA SECTOR
 PLA
 STA TRACK
 BEQ AR65 ;T=0: THAT'S ALL!!
;
 LDA R0
 CMP SSNUM
 BNE AR45 ;NOT EVEN DONE YET
;
 JSR GSSPNT
 CMP SSIND
 BCC AR45 ;ALMOST DONE
 BEQ AR50 ;ONE MORE BLOCK LEFT
AR65
 JSR GSSPNT
 PHA
 LDA #0
 JSR SSDIR
 LDA #0
 TAY
 STA (DIRBUF),Y
 INY
 PLA
 SEC
 SBC #1
 STA (DIRBUF),Y
 JSR WRTSS ;WRITE SS
 JSR WATJOB
 JSR MAPOUT
 JSR FNDREL
 JSR DBLBUF ;GET BACK TO LEADING BUFFER
 JSR SSPOS
 BVS AR70
 JMP POSITN
AR70
 LDA #LRF
 JSR SETFLG
 LDA #NOREC
 JSR CMDERR
 .END
 JSR DBLBUF
