MAGICFFI
========

MAGICFFI is a CFFI interface to libmagic(3), the file type
determination library using ``magic'' numbers.

Homepage is http://common-lisp.net/project/magicffi.

Download
--------

To check out the git repository, run:

----------------------------------------------------------------------
$ git clone git://github.com/dochang/magicffi.git
----------------------------------------------------------------------

To browse code online, go to:

http://github.com/dochang/magicffi

You can also download the repo's snapshot.

Zipball::

http://github.com/dochang/magicffi/zipball/master

Tarball::

http://github.com/dochang/magicffi/tarball/master

Installation
------------

MAGICFFI depends on the following lisp libraries:

- CFFI
- CL-PPCRE (used by the internal flags generator)

The following system packages are also required:

- libmagic-dev
- libc6-dev
- gcc

You have to install them on your system before loading magicffi.

Tutorial
--------

----------------------------------------------------------------------
> (asdf:oos 'asdf:load-op :magicffi)
> (use-package :magicffi)
> (with-open-magic (magic '(:mime-type :symlink))
    (magic-load magic)
    (magic-file magic #P"magicffi.asd"))
"text/plain"
----------------------------------------------------------------------

Documentation
-------------

All external symbols of the package `MAGICFFI` are listed in
`package.lisp`.  Check out their docstrings for help.

Magic Flags
~~~~~~~~~~~

You can use either constants or keyword list as magic flags.  I.e.,

----------------------------------------------------------------------
(magic-open (logxor +magic-mime-type+ +magic-symlink+))
----------------------------------------------------------------------

is equivalent to

----------------------------------------------------------------------
(magic-open '(:mime-type :symlink))
----------------------------------------------------------------------

The constant name and keyword name of a flag are based on its C name.
See the following table for the pattern:

.Magic flags naming convension
|==========================================
|C name       |Lisp constant  |Lisp keyword
|`MAGIC_NONE` |`+MAGIC-NONE+` |`:NONE`
|==========================================

All constant names are exported.

Support and mailing lists
-------------------------

If you have questions, bug reports, feature requests and patches, send
your email to the magicffi-devel mailing list.  Please visit:

http://common-lisp.net/cgi-bin/mailman/listinfo/magicffi-devel