IFND DOS_DOSASL_I DOS_DOSASL_I SET 1 ** ** $Filename: dos/dosasl.i $ ** $Release: 2.04 Includes, V37.4 $ ** $Revision: 36.19 $ ** $Date: 91/05/02 $ ** ** pattern-matching structure definitions ** ** (C) Copyright 1989-1999 Amiga, Inc. ** All Rights Reserved ** IFND EXEC_LIBRARIES_I INCLUDE "exec/libraries.i" ENDC IFND EXEC_LISTS_I INCLUDE "exec/lists.i" ENDC IFND DOS_DOS_I INCLUDE "dos/dos.i" ENDC ************************************************************************ ************************ 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. * STRUCTURE AnchorPath,0 LABEL ap_First CPTR ap_Base ; pointer to first anchor LABEL ap_Current CPTR ap_Last ; pointer to last anchor LONG ap_BreakBits ; Bits we want to break on LONG ap_FoundBreak ; Bits we broke on. Also returns ERROR_BREAK LABEL ap_Length ; Old compatability for LONGWORD ap_Length BYTE ap_Flags ; New use for extra word. BYTE ap_Reserved WORD ap_Strlen ; This is what ap_Length used to be STRUCT ap_Info,fib_SIZEOF ; FileInfoBlock LABEL ap_Buf ; Buffer for path name, allocated by user LABEL ap_SIZEOF BITDEF AP,DOWILD,0 ; User option ALL BITDEF AP,ITSWILD,1 ; Set by MatchFirst, used by MatchNext ; Application can test APB_ITSWILD, ; too (means that there's a wildcard ; in the pattern after calling ; MatchFirst). BITDEF AP,DODIR,2 ; Bit is SET if a DIR node should be ; entered. Application can RESET this ; bit after MatchFirst/MatchNext to ; AVOID entering a dir. BITDEF AP,DIDDIR,3 ; Bit is SET for an "expired" dir node. BITDEF AP,NOMEMERR,4 ; Set on memory error BITDEF AP,DODOT,5 ; If set, allow conversion of '.' to ; CurrentDir BITDEF AP,DirChanged,6 ; ap_Current->an_Lock changed ; since last MatchNext call BITDEF AP,FollowHLinks,7 ; follow hardlinks on DODIR - defaults ; to not following hardlinks on a DODIR. STRUCTURE AChain,0 CPTR an_Child CPTR an_Parent LONG an_Lock STRUCT an_Info,fib_SIZEOF ; FileInfoBlock BYTE an_Flags LABEL an_String LABEL an_SIZEOF BITDEF DD,PatternBit,0 BITDEF DD,ExaminedBit,1 BITDEF DD,Completed,2 BITDEF DD,AllBit,3 BITDEF DD,SINGLE,4 * 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. P_ANY EQU $80 ; Token for '*' or '#? P_SINGLE EQU $81 ; Token for '?' P_ORSTART EQU $82 ; Token for '(' P_ORNEXT EQU $83 ; Token for '|' P_OREND EQU $84 ; Token for ')' P_NOT EQU $85 ; Token for '~' P_NOTEND EQU $86 ; Token for P_NOTCLASS EQU $87 ; Token for '^' P_CLASS EQU $88 ; Token for '[]' P_REPBEG EQU $89 ; Token for '[' P_REPEND EQU $8A ; Token for ']' P_STOP EQU $8B ; token to force end of evaluation * Values for an_Status, NOTE: These are the actual bit numbers COMPLEX_BIT EQU 1 ; Parsing complex pattern EXAMINE_BIT EQU 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. * ERROR_BUFFER_OVERFLOW EQU 303 ; User or internal buffer overflow ERROR_BREAK EQU 304 ; A break character was received ERROR_NOT_EXECUTABLE EQU 305 ; A file has E bit cleared ENDC ; DOS_DOSASL_I