Subversion Repositories NedoOS

Rev

Rev 878 | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
8 dimkam 1
compareattrib
2
        push hl
3
        push de
23 dimkam 4
        ld bc,FCB_FATTRIB
8 dimkam 5
        ex de,hl
6
        add hl,bc
7
        ex de,hl
8
        add hl,bc
9
        ld a,(hl)
878 alone 10
        and FATTRIB_DIR|0x80 ;0x80=".."
8 dimkam 11
        ld c,a
658 alone 12
        ld a,(de)
878 alone 13
        and FATTRIB_DIR|0x80
8 dimkam 14
        cp c
15
findmin_ccf=$
16
        ccf
17
        pop de  
18
        pop hl
19
        ret
20
 
21
comparedate
22
        call compareattrib
23
        ret nz
23 dimkam 24
        ld bc,FCB_FDATE+1
8 dimkam 25
        ex de,hl
26
        add hl,bc
27
        ex de,hl
28
        add hl,bc
29
        ld a,(de)
30
        cp (hl)
31
        ret nz
32
        dec hl
33
        dec de
34
        ld a,(de)
35
        cp (hl)
36
        ret nz
37
 
23 dimkam 38
        ld bc,FCB_FTIME+1-FCB_FDATE
8 dimkam 39
        ex de,hl
40
        add hl,bc
41
        ex de,hl
42
        add hl,bc
43
        ld a,(de)
44
        cp (hl)
45
        ret nz
46
        dec hl
47
        dec de
48
        ld a,(de)
49
        cp (hl)
50
        ret nz
51
 
23 dimkam 52
        ld bc,-FCB_FTIME
8 dimkam 53
        ex de,hl
54
        add hl,bc
55
        ex de,hl
56
        add hl,bc
57
        jr compareext_go
58
 
59
comparesize
60
        call compareattrib
61
        ret nz
23 dimkam 62
        ld bc,FCB_FSIZE+3
8 dimkam 63
        ex de,hl
64
        add hl,bc
65
        ex de,hl
66
        add hl,bc
67
        ld a,(de)
68
        cp (hl)
69
        ret nz
70
        dec hl
71
        dec de
72
        ld a,(de)
73
        cp (hl)
74
        ret nz
75
        dec hl
76
        dec de
77
        ld a,(de)
78
        cp (hl)
79
        ret nz
80
        dec hl
81
        dec de
82
        ld a,(de)
83
        cp (hl)
84
        ret nz
23 dimkam 85
        ld bc,-FCB_FSIZE
8 dimkam 86
        ex de,hl
87
        add hl,bc
88
        ex de,hl
89
        add hl,bc
90
        jr compareext_go
91
 
92
compareext
93
        call compareattrib
94
        ret nz
95
compareext_go
96
        ld bc,8
97
        ex de,hl
98
        add hl,bc
99
        ex de,hl
100
        add hl,bc
101
        ld b,3
102
compareext0
103
        inc hl
104
        inc de
105
        ld a,(de)
106
        cp (hl)
658 alone 107
        jr nz,casecompareext;ret nz
108
casecompareextq
8 dimkam 109
        djnz compareext0
110
        ld bc,-11
111
        ex de,hl
112
        add hl,bc
113
        ex de,hl
114
        add hl,bc
115
        ld b,8
116
        jp comparefilename0
117
 
658 alone 118
casecompareext
119
        ld a,(de)
120
        ld c,(hl)
121
        or 0x20
122
        set 5,c
123
        cp c
124
        jr z,casecompareextq
125
        ret
126
 
8 dimkam 127
comparefilename
128
;hl=fcb1
658 alone 129
;de=fcb2
8 dimkam 130
;out: NC = *de>=*hl 
131
        call compareattrib
658 alone 132
        ret nz
8 dimkam 133
        ld b,11
134
comparefilename0
135
        inc hl
136
        inc de
137
        ld a,(de)
138
        cp (hl)
658 alone 139
        jr nz,casecompare;ret nz
140
casecompareq
8 dimkam 141
        djnz comparefilename0
142
        ret
658 alone 143
 
144
casecompare
145
        ld a,(de)
146
        ld c,(hl)
147
        or 0x20
148
        set 5,c
149
        cp c
150
        jr z,casecompareq
151
        ret
152
 
8 dimkam 153
compareempty
154
        scf
155
        ret
156
 
109 demige 157
comparer
158
;hl = FCB1, de = FCB2
8 dimkam 159
findmin_proc=$+1
160
        call compareext
161
;NC = *de>=*hl
109 demige 162
findmin_ccf2=$
163
        ccf ;/nop
164
        ret
8 dimkam 165
 
166
sortfiles
167
;ix=panel
168
        ld l,(ix+PANEL.dirsortproc)
169
        ld h,(ix+PANEL.dirsortproc+1)
170
        ld (findmin_proc),hl
171
 
172
        ld a,(ix+PANEL.dirsortmode)
173
        or a
658 alone 174
        ld bc,0x3f38
8 dimkam 175
        jr z,$+5
658 alone 176
        ld bc,0x0030
109 demige 177
        ;ld a,c
178
        ;ld (findmin_jrc),a
8 dimkam 179
        ld a,b
180
        ld (findmin_ccf),a
109 demige 181
        ld (findmin_ccf2),a
182
 
183
        ;jp (ix)
184
 
185
sorter2
186
        ;jr $
658 alone 187
        call HPSRT_init
109 demige 188
 
189
        ld c,(ix+PANEL.files)
190
        ld b,(ix+PANEL.files+1)
191
        ld a,b
192
        or c
193
        ret z
194
        ;ld l,(ix+PANEL.pointers)
195
        ;ld h,(ix+PANEL.pointers+1)
196
        ld e,(ix+PANEL.catbuf)
197
        ld d,(ix+PANEL.catbuf+1)
198
sorter2_add0
199
        push bc
200
        push de
201
        ;call getfilepointer_de_fromhl
202
        ;push hl ;hl=next pointer
203
;de=fcb (mangled addr)
204
        ;exd
205
        ;push hl
206
        ;ld d,h
207
        ;ld e,l
208
        ;res 6,d
209
        ;ld a,3 ;TODO remove copy
210
        ;PGW2strpg
344 alone 211
; c000 PANEL.pg
109 demige 212
        ;ld bc,32
213
        ;ldir
214
        ;pop hl
215
        ;ld     de,0
216
;hl=addr to add
217
        ;exd
658 alone 218
        call HPSRT_add
109 demige 219
        ;pop hl
220
        pop de
221
        ex de,hl
222
        ld bc,32
223
        add hl,bc
224
        ex hl,de
225
         jr nc,$+3
226
         inc de ;next page
227
         set 7,d
228
         set 6,d
229
        pop bc
230
        dec bc
231
        ld a,b
232
        or c
233
        jr nz,sorter2_add0
234
 
235
        jp HPSRT_sort
236
 
237
        if 1==0
238
sorter1
239
 
73 Alone 240
        ;ld a,(ix+PANEL.pg)
1410 alone 241
        ;SETPGC000
8 dimkam 242
 
243
        ld c,(ix+PANEL.files)
244
        ld b,(ix+PANEL.files+1)
245
        ld a,b
246
        or c
247
        ret z
248
        ld l,(ix+PANEL.pointers)
249
        ld h,(ix+PANEL.pointers+1)
344 alone 250
; ⭮ ஢  ० " ஢"   室   ᯨ᪠   䠩,   ᫥饬    । 砫, .. ⠭  ⭮ 浪  멤
8 dimkam 251
sortfiles_pass0
252
        push bc
73 Alone 253
        push hl ;hl=start (in pointers)
8 dimkam 254
;bc=files!=0
255
        call findmin
256
;de=min (pointer)
257
         ld hl,(findmin_proc)
258
         ld bc,compareempty
259
         or a
260
         sbc hl,bc
73 Alone 261
        pop hl ;hl=start (in pointers)
8 dimkam 262
;copy pointer into hl, move to next pointer
73 Alone 263
        push af
264
        call swapfilepointers_hl_de ;out: hl=next pointer
265
        pop af
8 dimkam 266
        pop bc
267
         jr nz,$+6 ;not compareempty
344 alone 268
         dec bc ;᫨ compareempty
8 dimkam 269
         ld a,b
270
         or c
271
         ret z
272
        dec bc
273
        ld a,b
274
        or c
275
        jr nz,sortfiles_pass0
276
        ret
109 demige 277
 
278
findmin
279
;hl=start (in pointers)
280
;bc=files!=0
281
;out: de=min (pointer)
282
        ld e,l
283
        ld d,h ;de=current min (pointer)
284
findmin0
285
;de=current min (pointer)
286
        dec bc
287
        ld a,b
288
        or c
289
        ret z
290
        inc hl
291
        inc hl
292
 
293
        push bc
294
        push de ;de=current min (pointer)
295
        push hl
296
 
297
        push de ;de=current min (pointer)
298
        call getfilepointer_de_fromhl
1410 alone 299
         SETPG8000 ;  ᥩ  current min 砥 PGC000
109 demige 300
         res 6,d
301
        ex de,hl ;hl=FCB
302
        ex (sp),hl ;hl=current min (pointer)
303
        call getfilepointer_de_fromhl
304
 
305
;de=current min (FCB)
306
        pop hl ;hl=FCB
307
 
308
        call comparer
309
 
310
        pop hl
311
        pop de ;de=current min (pointer)
312
        pop bc
313
;NC = *de>=*hl
314
;findmin_jrc=$
315
        jr nc,findmin0;findmin_nomin
316
        ld e,l
317
        ld d,h ;de=current min (pointer)
318
findmin_nomin
319
        jr findmin0
320
 
658 alone 321
        endif