[Contents] [Index] [Help] [Retrace] [browse <] [Browse >]

        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