diff --git a/src/dos_m65/utils/util_dir_filter.s b/src/dos_m65/utils/util_dir_filter.s index 9e20041b..181747b6 100644 --- a/src/dos_m65/utils/util_dir_filter.s +++ b/src/dos_m65/utils/util_dir_filter.s @@ -1,5 +1,5 @@ -; Check if file name matches the filter (if so - Zero flag set) +; Check if file name/type matches the filter (if so - Zero flag set) util_dir_filter: @@ -14,15 +14,78 @@ util_dir_filter: lda PAR_FPATTERN, y cmp #'*' - beq @done ; branch on wildcard + beq @asterisk ; branch on wildcard + + cmp #'?' + beq @lp1_next ; question mark substitutes any character cmp PAR_FNAME, y bne @done ; branch if does not match +@lp1_next: + iny cpy #$10 bne @lp1 ; next iteration if maximum length not reached +@done_match: + + lda #$00 + @done: rts + +@asterisk: + + iny ; check if the next character after asterisk is '=' + cpy #$10 + beq @done + lda PAR_FPATTERN, y + cmp #'=' + bne @done_match + + iny + cpy #$10 + beq @done + lda PAR_FPATTERN, y + + ; XXXthe comparisons below do not work; investigate, why + + cmp #$44 ; if 'D' - require a directory XXX document this + beq @require_dir + cmp #$50 ; if 'P' - require PRG file + beq @require_prg + cmp #$52 ; if 'R' - require REL file + beq @require_rel + cmp #$53 ; if 'S' - require SEQ file + beq @require_seq + cmp #$55 ; if 'U' - require USR file + bne @done + +@require_usr: + + lda #$03 + +skip_2_bytes_trash_nvz + +@require_seq: + + lda #$01 + +skip_2_bytes_trash_nvz + +@require_rel: + + lda #$04 + +skip_2_bytes_trash_nvz + +@require_prg: + + lda #$02 + +skip_2_bytes_trash_nvz + +@require_dir: + + lda #$05 + + cmp PAR_FTYPE + rts