File and compression routines
The following routines implement a fast buffered file I/O system, which
supports the reading and writing of compressed files using a ring buffer
algorithm based on the LZSS compressor by Haruhiko Okumura. This does not
achieve quite such good compression as programs like zip and lha, but
unpacking is very fast and it does not require much memory. Packed files
always begin with the 32-bit value F_PACK_MAGIC, and autodetect files with
the value F_NOPACK_MAGIC.
The following FA_* flags are guaranteed to work:
FA_NONE - Exclude files that have any attribute set
FA_RDONLY - Directory entries that are unwritable for current user
FA_HIDDEN - Hidden flag
FA_DIREC - Directories
FA_SYSTEM - Files with system flag set (DOS/Windows only)
FA_LABEL - Files with volume label flag set (DOS/Windows only)
FA_ARCH - Files with archive flag set (DOS/Windows only)
FA_ALL - Match all attributes
Do not use any other flags from DOS/Windows or your code will not compile on
FA_RDONLY is for directory entries with read-only flag on DOS-like systems or
unwritable by current user on Unix-like systems. Hidden files are directory
entries that have the hidden flag set (DOS/Windows) or have names starting with
'.' (UNIX, excluding '.' and '..').
Flags can be combined using '|' (binary OR operator).
When passed to the functions as the 'attrib' parameter, these flags
represent an upper set in which the actual flag set of a matching file must
be included. That is, in order for a file to be matching, its attributes
may contain any of the specified flags but must not contain any of the
unspecified flags. In other words, you explictly exclude
the flags that you
specify. Thus if you pass 'FA_DIREC | FA_RDONLY', normal files
and directories will be included as well as read-only files and
directories, but not hidden files and directories. Similarly, if you pass
'FA_ARCH' then both archived and non-archived files will be included. If
FA_NONE is passed all attributes are excluded and only files with no attributes
are returned. Conversely, if you pass FA_ALL, no attributes are excluded so all
files are returned (which is what you would usually want).
Functions which accept wildcards as file names support the meta characters
`*' (which means, zero or any quantity of characters) and `?' (which means
any character, but only one).