-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy pathlookup
338 lines (338 loc) · 5.26 KB
/
lookup
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
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
.PAGE 'LOOKUP-OPTSCH'
;OPTSCH OPTIMAL SEARCH FOR LOOKUP
; AND FNDFIL
.SKIP
OPTSCH LDA #0 ;DETERMINE OPTIMAL SEARCH
STA TEMP ;INIT DRIVE MASK
STA DRVFLG
PHA
LDX F2CNT
OS10 PLA
ORA TEMP
PHA
LDA #1
STA TEMP
DEX
BMI OS30
LDA FILDAT,X
BPL OS15
ASL TEMP
ASL TEMP
.SKIP
OS15 LSR A
BCC OS10
ASL TEMP
BNE OS10 ;(BRANCH)
.SKIP
OS30 PLA
TAX
LDA SCHTBL-1,X
PHA
AND #3
STA DRVCNT
PLA
ASL A
BPL OS40
LDA FILDAT
OS35 AND #1
STA DRVNUM
;*RSR ADD FOR AUTO INIT
LDA AUTOFG
BNE OX0000
;
JSR AUTOIT
LDA DRVCNT
BEQ OX0000
LDA DRVNUM
PHA ;SAVE DRVNUM
EOR #1 ;FLIP DRVNUM
STA DRVNUM
JSR AUTOIT
PLA ;RESTORE DRVNUM
STA DRVNUM
;*
OX0000 JMP SETLDS
.SKIP
OS40 ROL A
JMP OS35
.SKIP
SCHTBL .BYT 0,$80,$41
.BYT 1,1,1,1
.BYT $81,$81,$81,$81
.BYT $42,$42,$42,$42
.PAGE 'LOOKUP/FNDFIL'
; LOOK UP ALL FILES IN STREAM
; AND FILL TABLES W/ INFO
.SKIP
LOOKUP JSR OPTSCH
LK05 LDA #0
STA DELIND
JSR SRCHST ;START SEARCH
BNE LK25
LK10 DEC DRVCNT
BPL LK15
RTS ;NO MORE DRIVE SEARCHES
LK15 LDA #1 ;TOGGLE DRIVE #
STA DRVFLG
JSR TOGDRV
JSR SETLDS ; TURN ON LED
BEQ LK05 ;(BRANCH)
BNE LK05
LK20 JSR SEARCH ;FIND VALID FN
BEQ LK30 ;END OF SEARCH
LK25 JSR COMPAR ;COMPARE DIR W/ TABLE
LDA FOUND ;FOUND FLAG
BEQ LK26 ;ALL FN'S NOT FOUND, YET
RTS
.SKIP
LK26 LDA ENTFND
BMI LK20
BPL LK25
.SKIP
LK30 LDA FOUND
BEQ LK10
RTS
.SKIP 2
; FIND NEXT FILE NAME MATCHING
; ANY FILE IN STREAM & RETURN
; WITH ENTRY FOUND STUFFED INTO
; TABLES
FFRE JSR SRRE ;FIND FILE RE-ENTRY
BEQ FF10
BNE FF25
.SKIP
FF15 LDA #1
STA DRVFLG
JSR TOGDRV
JSR SETLDS
.SKIP
FFST LDA #0 ;FIND FILE START ENTRY
STA DELIND
JSR SRCHST
BNE FF25
STA FOUND
FF10 LDA FOUND
BNE FF40
DEC DRVCNT
BPL FF15
RTS
.SKIP
FNDFIL JSR SEARCH ;FIND FILE CONTINUOUS...
BEQ FF10 ;... RE-ENTRY, NO CHANNEL ACTIVITY
FF25 JSR COMPAR ;COMPARE FILE NAMES
LDX ENTFND
BPL FF30
LDA FOUND
BEQ FNDFIL
BNE FF40
.SKIP
FF30 LDA TYPFLG
BEQ FF40 ;NO TYPE RESTRICTION
LDA FILDAT,X
AND #$1E
CMP TYPFLG
BNE FNDFIL
FF40 RTS
.PAGE 'LOOKUP-COMPAR'
;COMPARE ALL FILENAMES IN STREAM TABLE
; WITH EACH VALID ENTRY IN THE
; DIRECTORY. MATCHES ARE TABULATED
.SKIP
COMPAR LDX #$FF
STX ENTFND
INX
STX PATFLG
JSR CMPCHK
BEQ CP10
CP02 RTS ;ALL ARE FOUND
.SKIP
CP05 JSR CC10
BNE CP02
CP10 LDA DRVNUM
EOR FILDAT,X
LSR A
BCC CP20 ;RIGHT DRIVE
AND #$40
BEQ CP05 ;NO DEFAULT
LDA #2
CMP DRVCNT
BEQ CP05 ;DON'T USE DEFAULT
.SKIP
CP20 LDA FILTBL,X ;GOOD DRIVE MATCH
TAX
JSR FNDLMT
LDY #3
JMP CP33
CP30
LDA CMDBUF,X
CMP (DIRBUF)Y
BEQ CP32 ;CHARS ARE =
;
CMP #'?
BNE CP05 ;NO SINGLE PATTERN
LDA (DIRBUF)Y
CMP #$A0
BEQ CP05 ;END OF FILENAME
CP32
INX
INY
CP33
CPX LIMIT
BCS CP34 ;END OF PATTERN
;
LDA CMDBUF,X
CMP #'*
BEQ CP40 ;STAR MATCHES ALL
BNE CP30 ;KEEP CHECKING
CP34
CPY #19
BCS CP40 ;END OF FILENAME
;
LDA (DIRBUF)Y
CMP #$A0
BNE CP05
.SKIP
CP40 LDX F2PTR ;FILENAMES MATCH
STX ENTFND
LDA FILTRK,X ;STORE INFO IN TABLES
AND #$80
STA PATFLG
STA FILTRK,X
LDA INDEX
AND #$E0
STA TEMP
LDA SECTOR
ORA TEMP
STA FILENT,X
LDY #0
LDA (DIRBUF),Y
INY
PHA
AND #$40
STA TEMP
PLA
ASL A
AND #$1E
BCS CP42
ORA #$20
CP42 ORA TEMP
STA TEMP
LDA #$80
AND FILDAT,X
ORA DRVNUM
ORA TEMP
STA FILDAT,X
LDA (DIRBUF),Y
ORA FILTRK,X
STA FILTRK,X
INY
LDA (DIRBUF),Y
STA FILSEC,X
LDA REC
BNE CP50
LDY #21
LDA (DIRBUF)Y
STA REC
CP50
;JMP CMPCHK
;RTS
.SKIP
;CHECK TABLE FOR UNFOUND FILES
.SKIP
CMPCHK LDA #$FF
STA FOUND
LDA F2CNT
STA F2PTR
.SKIP
CC10 DEC F2PTR
BPL CC15
RTS ;TABLE EXHAUSTED
.SKIP
CC15 LDX F2PTR
LDA FILTRK,X
BMI CC20
BNE CC10
CC20 LDA #0
STA FOUND
RTS
.PAGE 'LOOKUP-SEARCH'
;SEARCH DIRECTORY
; RETURNS WITH VALID ENTRY W/ DELIND=0
; OR RETURNS W/ 1ST DELETED ENTRY
; W/ DELIND=1
;
; SRCHST WILL INITIATE A SEARCH
; SEARCH WILL CONTINUE A SEARCH
.SKIP
SRCHST LDY #0 ;INIT DELETED SECTOR
STY DELSEC
DEY
STY ENTFND
.SKIP
LDA #18 ;START SEARCH AT BEGINNING
STA TRACK
LDA #1
STA SECTOR
STA LSTBUF
JSR OPNIRD ;OPEN INTERNAL READ CHNL
.SKIP
SR10 LDA LSTBUF ;LAST BUFFER IF 0
BNE SR15
RTS ;(Z=1)
.SKIP
SR15 LDA #7
STA FILCNT
LDA #0 ;READ TRACK #
JSR DRDBYT
STA LSTBUF ;UPDATE END FLAG
.SKIP
SR20 JSR GETPNT
DEC FILCNT
LDY #0
LDA (DIRBUF),Y ;READ FILE TYPE
BNE SR30
.SKIP
LDA DELSEC ;DELETED ENTRY FOUND
BNE SEARCH ;DELETED ENTRY ALREADY FOUND
JSR CURBLK ;GET CURRENT SECTOR
LDA SECTOR
STA DELSEC
.SKIP
LDA DIRBUF ;GET CURRENT INDEX
LDX DELIND ;BIT1: WANT DELETED ENTRY
STA DELIND
BEQ SEARCH ;NEED VALID ENTRY
RTS ;(Z=0)
.SKIP
SR30 LDX #1
CPX DELIND ;?LOOKING FOR DELETED?
BNE SR50 ; NO!
BEQ SEARCH
.SKIP
SRRE LDA #18
STA TRACK
LDA DIRSEC
STA SECTOR
JSR OPNIRD
LDA INDEX
JSR SETPNT
.SKIP
SEARCH LDA #$FF
STA ENTFND
LDA FILCNT ;ADJUST FILE COUNT
BMI SR40
LDA #32 ;INCR BY 32
JSR INCPTR
JMP SR20
.SKIP
SR40 JSR NXTBUF ;NEW BUFFER
JMP SR10 ;(BRANCH)
.SKIP
SR50 LDA DIRBUF ;FOUND VALID ENTRY
STA INDEX ;SAVE INDEX
JSR CURBLK ;GET SECTOR
LDA SECTOR
STA DIRSEC
RTS ;(Z=0)
.SKIP
.END