# [dicts.h] Type: Dictionary Iterator

## contents

#include "standard.h"

## The Type

       The dictionary iterator provides sequentiell, platform-independant access to
       a specified part of the file system.
       Supported platforms are Unix and Windows.

DII | Abstract dictionary iterator type

## Create & Drop

    DII DII_make
        (
          c_string PathName, c_string Pattern,
          c_bool recursive, c_bool skipErr
        )
| creates a ['recursive'] dictionary iterator for directory 'PathName' and file 'Pattern' 'skipErr' --> error message on open failure, otherwise the program aborts
    void DII_drop(DII dii)
| drops dictionary iterator 'dii'

## Dictionary iterator access

    c_bool DII_empty(DII dii)
| empty dictionary iterator ?
    void DII_next(DII dii)
| next dictionary entry
    c_bool DII_isFile(DII dii)
| dictionary entry = file ?
    c_bool DII_isDir(DII dii)
| dictionary entry = directory ?
    c_bool DII_isCDev(DII dii)
| dictionary entry = character device ?
    c_bool DII_isBDev(DII dii)
| dictionary entry = block device ?
    c_bool DII_isFifo(DII dii)
| dictionary entry = FIFO ?
    c_string DII_get_file(DII dii)
| filename of dictionary entry; allocs memory
    c_string DII_get_base(DII dii)
| basename of dictionary entry; allocs memory
    c_string DII_get_ext(DII dii)
| extension of dictionary entry; allocs memory
    c_string DII_get_path(DII dii)
| path of dictionary entry; allocs memory

## Convenient iterator macros

    #define DII_FORALL(dii,Path,Pattern)           \
    for (dii = DII_make(Path,Pattern,C_False,C_False); \
    DII_empty(dii)?DII_drop(dii),C_False:C_True; DII_next(dii))

    #define DII_FORALL_R(dii,Path,Pattern)        \
    for (dii = DII_make(Path,Pattern,C_True,C_False); \
    DII_empty(dii)?DII_drop(dii),C_False:C_True; DII_next(dii))

    #define DII_SFORALL(dii,Path,Pattern)         \
    for (dii = DII_make(Path,Pattern,C_False,C_True); \
    DII_empty(dii)?DII_drop(dii),C_False:C_True; DII_next(dii))

    #define DII_SFORALL_R(dii,Path,Pattern)      \
    for (dii = DII_make(Path,Pattern,C_True,C_True); \
    DII_empty(dii)?DII_drop(dii),C_False:C_True; DII_next(dii))