Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- readfnos
- ld a,mem.fat_p
- ld bc,mem.b1
- out (c),a
- WIN_GETPAGES a
- ld (.num),a
- ld b,high mem.b2
- out (c),a
- ld de,0xc000
- ld (ix+txt.FWIN.fno_1),de
- ld (ix+txt.FWIN.p_fno_1),a
- MEM_SET 0x8000,0,0x20
- ld a,(ix+txt.FWIN.drive):add a,0x30:ld (curdir),a
- ld de,dir
- ld bc,curdir
- F_OPDIR
- .l2 ld bc,0x8000
- .l1 ld de,dir
- F_RDIR
- push bc:pop iy
- ld a,FILINFO.FNAME:add c:ld c,a
- LD A,(BC):or a:ret z
- dec c
- sub 0x2e:or (iy+FILINFO.FNAME+1)
- jr z,.l2 ;пропускаем точку
- ld a,(bc):and 0x10:jr nz,.cat
- ld a,0x20
- .cat ld (bc),a
- ld d,b,e,c
- push bc
- call fno_sort
- pop bc
- ADDBC8 0x18
- bit 6,b:jr z,.l1
- ld hl,.num:inc (hl)
- ld bc,mem.b2:ld a,(hl)
- out (c),a
- ld bc,0x8000
- jr .l1
- .num word 0
- fno_sort
- xor a:ld hl,0x8008:sbc hl,de:jp z,.first
- ld a,(ix+txt.FWIN.p_fno_1)
- ld bc,mem.b3
- out (c),a
- ld (.num),a
- ld a,(ix+txt.FWIN.fno_1):ld h,(ix+txt.FWIN.fno_1+1)
- add FILINFO.FATTRIB:ld l,a
- .l3 ld a,(de):cp (hl):jr .cat
- .l2 inc l,e
- ld a,(de):or (hl):jr z,.prev
- ld a,(de):cp (hl)
- .cat jr z,.l2
- jr c,.prev
- ld a,l
- and %11100000:or FILINFO.NEXT:ld l,a ;get fno
- ld c,(hl):inc hl:ld b,(hl):inc hl:ld a,(hl)
- or a:jr z,.new
- ld hl,FILINFO.FNAME-1 ; -4000+9
- add hl,bc
- ld bc,mem.b3:out (c),a
- ld (.num),a
- ld a,e:and %11100000
- or FILINFO.FATTRIB:ld e,a ;взад на имя
- jr .l3
- .new ;добавим после текущего
- ld a,l:and %11100000:ld l,a ;смещение в ноль
- push hl:ex (sp),ix ;в индексный
- push iy:pop de:set 6,d
- xor a
- ld (iy+FILINFO.NEXTP),a ;устанавливаем следующий фно zero
- ld a,(.num)
- ld (iy+FILINFO.PREVP),a ;устанавливаем предыдущий
- ld (iy+FILINFO.PREV),hl
- ld (ix+FILINFO.NEXT),de ;устанавливаем следующий
- ld a,(readfnos.num)
- ld (ix+FILINFO.NEXTP),a
- pop ix:ret
- .prev ;вставим перед текущим
- ld a,l:and %11100000:ld l,a ;смещение в ноль
- push hl:ex (sp),ix ;в индексный
- push iy:pop de:set 6,d
- ld a,(.num)
- ld (iy+FILINFO.NEXTP),a
- ld (iy+FILINFO.NEXT),hl ;устанавливаем следующий фно
- ld hl,(ix+FILINFO.PREV) ;берём предыдущий фно
- ld (iy+FILINFO.PREV),hl ;устанавливаем предыдущий
- ld (ix+FILINFO.PREV),de ;устанавливаем предыдущий
- ld a,(readfnos.num):ld b,a
- ld a,(ix+FILINFO.PREVP)
- ld (ix+FILINFO.PREVP),b
- ld (iy+FILINFO.PREVP),a
- pop ix
- or a:jr z,.firstfno ;если ноль то первый элемент списка
- ld bc,mem.b3:out (c),a
- push hl:pop iy
- ld (iy+FILINFO.NEXT),de ;установим следующим
- ld a,(readfnos.num)
- ld (iy+FILINFO.NEXTP),a
- ret
- .first
- push iy:pop de:set 6,d
- xor a
- ld (iy+FILINFO.PREVP),a
- ld (iy+FILINFO.NEXTP),a
- .firstfno
- ld (ix+txt.FWIN.fno_1),de ;запомним первый элемент списка
- ld a,(readfnos.num)
- ld (ix+txt.FWIN.p_fno_1),a
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement