home *** CD-ROM | disk | FTP | other *** search
- MODULE 'exec/libraries',
- 'exec/lists',
- 'dos/dos'
-
- /***********************************************************************
- ************************ PATTERN MATCHING ******************************
- ************************************************************************
-
- * structure expected by MatchFirst, MatchNext.
- * Allocate this structure and initialize it as follows:
- *
- * Set ap_BreakBits to the signal bits (CDEF) that you want to take a
- * break on, or NULL, if you don't want to convenience the user.
- *
- * If you want to have the FULL PATH NAME of the files you found,
- * allocate a buffer at the END of this structure, and put the size of
- * it into ap_Strlen. If you don't want the full path name, make sure
- * you set ap_Strlen to zero. In this case, the name of the file, and stats
- * are available in the ap_Info, as per usual.
- *
- * Then call MatchFirst() and then afterwards, MatchNext() with this structure.
- * You should check the return value each time (see below) and take the
- * appropriate action, ultimately calling MatchEnd() when there are
- * no more files and you are done. You can tell when you are done by
- * checking for the normal AmigaDOS return code ERROR_NO_MORE_ENTRIES.
- *
- */
-
- OBJECT AnchorPath
- Base|First:PTR TO AChain, /* pointer to first anchor */
- Last|Current:PTR TO AChain, /* pointer to last anchor */
- BreakBits:LONG, /* Bits we want to break on */
- FoundBreak:LONG, /* Bits we broke on. Also returns ERROR_BREAK */
- Flags|Length:BYTE, /* New use for extra word. */
- Reserved:BYTE,
- Strlen:WORD, /* This is what ap_Length used to be */
- Info:FileInfoBlock,
- Buf[1]:UBYTE /* Buffer for path name, allocated by user */
- /* FIX! */
-
-
- #define APB_DOWILD 0 /* User option ALL */
- #define APF_DOWILD 1
-
- #define APB_ITSWILD 1 /* Set by MatchFirst, used by MatchNext */
- #define APF_ITSWILD 2 /* Application can test APB_ITSWILD, too */
- /* (means that there's a wildcard */
- /* in the pattern after calling */
- /* MatchFirst). */
-
- #define APB_DODIR 2 /* Bit is SET if a DIR node should be */
- #define APF_DODIR 4 /* entered. Application can RESET this */
- /* bit after MatchFirst/MatchNext to AVOID */
- /* entering a dir. */
-
- #define APB_DIDDIR 3 /* Bit is SET for an "expired" dir node. */
- #define APF_DIDDIR 8
-
- #define APB_NOMEMERR 4 /* Set on memory error */
- #define APF_NOMEMERR 16
-
- #define APB_DODOT 5 /* If set, allow conversion of '.' to */
- #define APF_DODOT 32 /* CurrentDir */
-
- #define APB_DirChanged 6 /* ap_Current->an_Lock changed */
- #define APF_DirChanged 64 /* since last MatchNext call */
-
- #define APB_FollowHLinks 7 /* follow hardlinks on DODIR - defaults */
- #define APF_FollowHLinks 128 /* to not following hardlinks on a DODIR. */
-
-
- OBJECT AChain
- Child:PTR TO AChain,
- Parent:PTR TO AChain,
- Lock:BPTR,
- Info:FileInfoBlock,
- Flags:UBYTE,
- String[1]:UBYTE /* FIX!! */
-
- #define DDB_PatternBit 0
- #define DDF_PatternBit 1
- #define DDB_ExaminedBit 1
- #define DDF_ExaminedBit 2
- #define DDB_Completed 2
- #define DDF_Completed 4
- #define DDB_AllBit 3
- #define DDF_AllBit 8
- #define DDB_Single 4
- #define DDF_Single 16
-
- /*
- * Constants used by wildcard routines, these are the pre-parsed tokens
- * referred to by pattern match. It is not necessary for you to do
- * anything about these, MatchFirst() MatchNext() handle all these for you.
- */
-
- #define P_ANY $80 /* Token for '*' or '#? */
- #define P_SINGLE $81 /* Token for '?' */
- #define P_ORSTART $82 /* Token for '(' */
- #define P_ORNEXT $83 /* Token for '|' */
- #define P_OREND $84 /* Token for ')' */
- #define P_NOT $85 /* Token for '~' */
- #define P_NOTEND $86 /* Token for */
- #define P_NOTCLASS $87 /* Token for '^' */
- #define P_CLASS $88 /* Token for '[]' */
- #define P_REPBEG $89 /* Token for '[' */
- #define P_REPEND $8A /* Token for ']' */
- #define P_STOP $8B /* token to force end of evaluation */
-
- /* Values for an_Status, NOTE: These are the actual bit numbers */
-
- #define COMPLEX_BIT 1 /* Parsing complex pattern */
- #define EXAMINE_BIT 2 /* Searching directory */
-
- /*
- * Returns from MatchFirst(), MatchNext()
- * You can also get dos error returns, such as ERROR_NO_MORE_ENTRIES,
- * these are in the dos.h file.
- */
-
- #define ERROR_BUFFER_OVERFLOW 303 /* User or internal buffer overflow */
- #define ERROR_BREAK 304 /* A break character was received */
- #define ERROR_NOT_EXECUTABLE 305 /* A file has E bit cleared */
-