            Writing scripts for Midnight Commander's external vfs

IMPORTANT NOTE: extfs is not officialy released and fully bug free
in 3.0! You have been warned. If you would really like to try it,
you can (by typing make install.extfs in the vfs directory).

Starting with version 3.1, the Midnight Commander comes with so called
extfs, which is one of the virtual filesystems. This system makes it
possible to create new virtual filesystems for the GNU MC very easily.

Such work has two basic steps:
Editing $(libdir)/extfs/extfs.ini.
Creating a shell script/program to handle requests.
(Note: $(libdir) should be substituted for actual libdir path stored when
configured or compiled, like /usr/local/lib/mc or /usr/lib/mc).

The first one is very easy:
You assign a vfs prefix and vfs extensions to your vfs. Both will be used in
vfs pseudoURL names, like if you assign prefix zip and extensions .zip,
.ZIP, then URLs will look like
zip:anypath/my.zip/some_path/in_the/archive
Then you add a line to the end of the [extfs] section:
prefix=space_separated_extensions
e.g.
zip=.zip .ZIP

The second one my require some your knowledges of shell/c programming:
You have to create a program (with executable permissions) prefix
in $(libdir)/extfs (in our example $(libdir)/extfs/zip), which should do
following:

If called
$(libdir)/extfs/prefix list archivename
then it should list the complete archive content in the following format
(a little modified ls -l listing):
AAAAAAA NNN OOOOOOOO GGGGGGGG SSSSSSSS DATETIME [PATH/]FILENAME [-> [PATH/]FILENAME[/]]]
where (things in [] are optional):
AAAAAAA is permission string like in ls -l
NNN is a number of links
OOOOOOOO is owner (either UID or name)
GGGGGGGG is group (either GID or name)
SSSSSSSS is file size
FILENAME is name of the file
PATH is a path from archive's root without the leading slash (/)
DATETIME has one of the following formats:
Mon DD hh:mm
Mon DD YYYY
Mon DD YYYY hh:mm
MM-DD-YY hh:mm
where Mon is a three digit english month name, DD day 1-31, MM month 01-12,
YY two digit year, YYYY four digit year, hh hour and mm minute.
If the -> [PATH/]FILENAME part is present, it means:
If permissions start with an l (ell), then it is the name that symlink
points to. (If this PATH starts with a MC vfs prefix, then it is a symlink
somewhere to the other virtual filesystem (if you want to specify path from
the local root, use local:/path_name instead of /path_name, since /path_name
means from root of the archive listed).
If permissions do not start with l, but number of links is greater than one,
then it says that this file should be a hardlinked with the other file.

If called
$(libdir)/extfs/prefix copyout archivename storedfilename extractto
then it should extract from archive archivename file storedfilename (possibly
with path if not located in archive's root) to file extractto.

Important note: archivename may not have the extension you are expecting to
have, like it may happen that archivename will be something like
/tmp/f43513254 or just anything. Some archivers do not like it, so you'll have
to find some workaround.

extfs is ro by now, so no more commands are used at this moment.

