//////////////////////////////////////////////////////////////////////// ;Входные значения: ; C - #19 ; HL - указатель на файловую спецификацию ; DE - рабочий буфер 44 байта, если B=0, иначе 256 байт ; ;!!!!! на самом деле сейчас если B=1, рабочий буфер 46 байт ; A - атрибуты, используемые при поиске ; B = 0 - имя найденного файла в формате 11 байт "FilenameExt" ; B = 1 - имя найденного файла в формате DOS "filename.ext",0 ;Выходные значения: ; A - код ошибки, если CF=1 //////////////////////////////////////////////////////////////////////// F_FIRST: ; Current Dir [x] 15/10/23 ; LD C,A ; PUSH HL ; PUSH DE ; PUSH BC ; CALL DIR_PATH_CHECK ; POP BC ; POP DE ; POP HL ; RET C ; LD A,C ; ; LD (.TMP),A LD (.DTABUF),DE LD A,B LD (.FNDMODE),A PUSH HL ;!TEST Current Dir ;[x] 15/10/23 CALL DIR_PATH_CHECK RET C ; CALL LOADDIR POP HL CALL GETWORD RET C CALL MASK RET C LD A,(.TMP) CALL SEARCH.Custom RET C LD HL,MASKARE .DTABUF+1: LD DE,0 LD BC,11 ;!HARDCODE LDIR .TMP+1: LD A,0 LD (DE),A .FIND_S: INC DE LD BC,#0020 ADD IX,BC LD (F_NEXT.CURHND),IX LD HL,HANDBUF+12 ;!HARDCODE LD BC,HANDBUF.SIZE-12 ;????? метку вместо числа? LDIR LD A,(HANDBUF+11) LD (DE),A INC DE LD HL,HANDBUF .FNDMODE+1: LD A,0 OR A JR NZ,.FIND_M2 LD BC,11 ;!HARDCODE LDIR LD A,F_NEXT.NO_NEXT.NO LD (F_NEXT.NO_NEXT),A XOR A RET .FIND_M2: CALL GetName LD A,F_NEXT.NO_NEXT.NO LD (F_NEXT.NO_NEXT),A XOR A RET //////////////////////////////////////////////////////////////////////// ; ; //////////////////////////////////////////////////////////////////////// F_NEXT: .NO_NEXT.YES EQU 0 .NO_NEXT.NO EQU #FF .NO_NEXT+1: LD A,0 OR A LD A,DSS_Error.sys.INVALID_ACCESS SCF RET Z LD (F_FIRST.DTABUF),DE EX DE,HL LD DE,MASKARE LD BC,11 ;!HARDCODE LDIR XOR A ; F_NEXT.NO_NEXT.YES LD (F_NEXT.NO_NEXT),A LD A,(HL) PUSH HL CALL .NSEARCH POP DE RET C JP F_FIRST.FIND_S .NSEARCH: EX AF,AF' SET_PAGE_X DIRPAGE ;PUSH AF EX AF,AF' CPL LD C,A ;TEST 9/11/23 ; EXX ; LD DE,0 ; EXX ; .CURHND+2: LD IX,0 LD A,XH OR XL JP Z,SEARCH.error_too_many_files JP SEARCH.loop ;