;*********************************
;* ADDREL: ADD BLOCKS TO RELATIVE*
;*         FILE.                 *
;*   VARS:                       *
;*   REGS:                       *
;*                               *
;*********************************
;
ADDREL
 JSR ADRELS ;DO SET UP
 JSR FNDREL ;CALC SS PTRS
ADDR1 ;ENTRANCE FROM COPY
 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
;
; <BIG FILES CHANGE>
;
 LDA #0 ;SET SS NUM =0
 STA SSNUM ;*
 INC GRPNUM ;BUMP THE GROUP #
 BNE AR25 ;BRA
;   <END>
;
;
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
;
;  <BIG FILE CHANGE>
;
 STA T3 ;# SS INDICES (DATA SECTORS * 2)
 LDA SSNUM ;GET DESIRED SSNUM
 SBC R0 ;SUB CURRENT LAST SS
 BCS AR30A ;BR IF DESIRED IS GREATER
 INC R3 ;BUMP CURNT GROUP #
 ADC #6 ;CALC # SS NEEDED
AR30A
 STA T4 ;SAVE # WHOLE SS NEEDED
 LDA GRPNUM ;DESIRED GROUP #
 SEC
 SBC R3 ;CALC # WHOLE GROUPS NEEDED
 STA R3 ;*
 JSR SSCALC ;CALC TOTAL SECTORS NEEDED
 LDA RESULT+1 ;CHK IF ENOUGH LEFT
 BNE AR35 ;BR IF > 256 NEEDED
 LDX RESULT ;CHK IF > 1 NEEDED
 BNE AR30B ;BR IF SOME NEEDED
 RTS ;EXIT (NONE NEEDED)
AR30B
 DEX ;*
 BNE AR35 ;BR IF > 1 NEEDED
 INC R2 ;SET SINGLE BLOCK SWITCH
;  <END>
;
AR35
 CMP NBTEMP+1
 BCC AR40 ;OK!!
 BNE AR20
 LDA NBTEMP
 CMP RESULT
 BCC AR20 ;NOT ENUF BLOCKS
AR40
 LDA #1
 JSR DRDBYT ;LOOK AT ADDR OF LAST BYTE
 CLC
 ADC #1 ;+1 IS NR
 LDX LINDX
 STA NR,X
 JSR GETHDR ;SET UP T&S FOR NEAR BY ALLOC
 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 (NEW DATA SECTOR)
 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
 LDA SECTOR ;CHK END OF CHAIN <HD>
 CMP #255 ;<HD>
 BEQ AR65 ;S=255: THAT'S ALL!!<HD>
;
;
;  <BIG FILE CHANGE>
;
 LDA R5 ;AT RIGHT GROUP YET?
 CMP GRPNUM ;*
 BCC AR45 ;BR IF NOT
;  <END>
;
 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 ;GET THE SS BUFR PTR
 PHA
 LDA #0
 JSR SSDIR
 LDY #0 ;<HD>
 LDA #255 ;<HD>
 STA (DIRBUF),Y ;FLAG LAST SS AS EOF
 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
;
; ADD BLOCKS SET UP ROUTINE
;
ADRELS
 JSR SETDRN
 JSR SSEND ;SET UP END OF FILE
 JSR POSBUF
;
; <BIG FILE CHANGE>
;
 LDA GRPNUM ;SAVE LAST GROUP #
 STA R5 ;*
 STA R3 ;*
;   <END>
;
 LDA SSIND
 STA R1 ;SAVE SS INDEX
 LDA SSNUM
 STA R0 ;SAVE SS NUMBER
 LDA #0
 STA R2 ;CLEAR FLAG FOR ONE BLOCK
;
 STA RECPTR ;CLEAR FOR 1ST BYTE
 RTS ;EXIT
 .END
