Skip to content

โ† Home ยท AmigaDOS

Pattern Matching โ€” ParsePattern, MatchPattern

Overview

AmigaDOS provides built-in wildcard/pattern matching for file operations. Patterns are compiled into token streams via ParsePattern and matched via MatchPattern.


Wildcard Syntax

Pattern Meaning Example
? Match exactly one character file?.txt matches file1.txt
# Match zero or more of the following #?.info matches anything ending in .info
#? Match any string (equivalent to *) #? matches everything
(a\|b) Alternation โ€” match a or b (read\|write)
~ Negation โ€” match if NOT ~(#?.info) matches non-info files
[abc] Character class [abc] matches a, b, or c
[a-z] Character range [0-9] matches digits
' Quote next character literally '# matches literal #

API

/* dos/dos.h โ€” NDK39 */

/* Compile a pattern into tokenised form: */
LONG ParsePattern(STRPTR pat, STRPTR buf, LONG buflen);
/* Returns: 1 = pattern has wildcards, 0 = plain string, -1 = error */

/* Test a name against a compiled pattern: */
BOOL MatchPattern(STRPTR pat_compiled, STRPTR name);

/* Case-insensitive variants: */
LONG ParsePatternNoCase(STRPTR pat, STRPTR buf, LONG buflen);
BOOL MatchPatternNoCase(STRPTR pat_compiled, STRPTR name);

Usage Example

char pat[256], buf[256];
LONG is_wild;

is_wild = ParsePatternNoCase("#?.txt", pat, sizeof(pat));
if (is_wild >= 0) {
    if (MatchPatternNoCase(pat, "readme.txt"))
        Printf("Match!\n");
    if (!MatchPatternNoCase(pat, "readme.doc"))
        Printf("No match\n");
}

Common Patterns

Pattern Matches
#? Everything (wildcard all)
#?.info All .info icon files
~(#?.info) Everything except .info files
(#?.c\|#?.h) All C source and header files
file[0-9] file0 through file9

References

  • NDK39: dos/dos.h
  • ADCD 2.1: ParsePattern, MatchPattern