old1: dw 0 ; полож. указателя old2: dw 0 ; смещ. списка old3: dw 0 ; число записей ; флаг смены тек. диска или пути change: db false ; 01/00 менялся/нет ; Сохранить полож. указателя и списка save_pos_list: ld hl,(cur_pointer) ; старое полож. указателя ld (old1),hl ld hl,(offset_list) ; старое смещ. списка ld (old2),hl ld hl,(all_files) ; старое число записей ld (old3),hl ret ; Установить полож. указателя и списка ; после нового чтения списка. set_newpos_list: ld a,(change) ; флаг смены тек. диска или пути or a jr nz,set_zero_pos ; менялся, сбр. полож. указателя ld de,(all_files) ; новое число записей ld hl,(old3) ; прежнее число записей and a sbc hl,de ; число записей изменилось ? jr nz,set_new_pos ; да set_old_pos: ld hl,(old1) ; прежнее полож. указателя ld (cur_pointer),hl ld hl,(old2) ; прежнее смещ. списка ld (offset_list),hl ret set_new_pos: ld hl,(old1) ; прежнее полож. указателя ld bc,(old2) ; прежнее смещ. списка add hl,bc and a sbc hl,de jr c,set_old_pos ; прежнее полож. указателя > нового числа записей jr set_to_end_list ; в конец списка ; сбросить полож. указателя и списка ; диск или путь менялся. set_zero_pos: xor a ld l,a ld h,a ld (change),a ; сбр. флаг смены тек. диска или пути ld (offset_list),hl ; смещ. списка set_zr: ld (cur_pointer),hl ; тек. полож. указателя ret ; уст. указатель на конец списка set_to_end_list: ld bc,(all_files) ; число записей ld hl,(cur_pointer) ld de,(offset_list) ; смещ. списка add hl,de inc hl ld a,l sub c ld a,h sbc a,b ret z ; указатель в конце списка ld de,(_0D01+1) ; размер страницы - 1 ld l,c ; hl=all_files ld h,b call cmphlde jr nc,set_end_lst2 ; число файлов меньше списка панели set_end_lst1: dec hl jr set_zr ; уст. тек. полож. указателя ; set_end_lst2: ld bc,-1 ; счетчик dec hl ; --all_files inc bc call cmphlde ; hl и "размер страницы - 1" jr nc,$-5 ld hl,(offset_list) ; смещ. списка and a sbc hl,bc jr c,set_end_lst3 ; указатель в пределах послед. страницы списка ex de,hl jr set_end_lst1 ; set_end_lst3: dec bc ld (offset_list),bc inc de ld (cur_pointer),de ret