-
Notifications
You must be signed in to change notification settings - Fork 82
/
hdaddrel
218 lines (218 loc) · 4.12 KB
/
hdaddrel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
;*********************************
;* 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