Generic interface to filesystems

cwg@DeepEddy.Com cwg@DeepEddy.Com
Sun, 04 May 1997 17:13:26 -0500


--==_Exmh_1330521040P
Content-Type: text/plain; charset=us-ascii

I'd like to start this message by observing how often a mention of a good idea 
on this list seems to be followed by someone saying, "that's been done in xxx 
in such and such a way".  Therefore, it seems to me that the important thing 
that a LispOS project can provide is a way to make sure that all these great 
ideas that have been implmented (and will be implemented) work together.  
Therefore, we need to put some focus on how to define interfaces between the 
different pieces.

Now then...since I volunteered to write a mail reader/head a project to design 
and write a mail system, I've started to think about what hooks I'd like to 
have into the rest of the system.  Here's the first one:

I want a function that takes a path as an argument and returns an object 
corresponding to the file referenced by that path.  This object would not 
necesarily read the actual file at that time, but it would then have it's own
set of methods for doing whatever can be done with that kind of file.  It
would be critical to agree on methods for doing various generic 
things.

For example:

(read-object-from-path (parse-pathname "foobar.tar"))
#<tarball 12345>
(read-object-from-path (parse-pathname "/usr/local/src/README"))
#<textobject 54321>
(read-object-from-path (parse-pathname "/etc"))
#<directory 98765>
(read-object-from-path (parse-url "http://www.foo.com/"))
#<htmlobject 56789>
(read-object-from-path (parse-pathname "/var/spool/mail/cwg"))
#<mbox 24680>
(read-object-from-path (parse-pathname "~/Mail"))
#<mhfolder 86420>

There would need to be quite a bit of DWIM to figure out from extensions and 
other hints what each file is supposed to be (The MIME type, if read via HTTP; 
the extension for Unix files; the owner/type files for MacOS files; the fact 
that it's in /var/spool/mail or has name Mail; etc.).  There also should be a 
keyword parameter to overwrite the DWIM.

If we can agree on methods like "display", it would then be easy to write a 
filesystem browser that knows all about all the different objects (and I could 
embed my mail reader in this filesystem browser).  If the editor folks could 
agree on methods like "forward-item" to bind to c-m-F, it would be possible
to write an editor that handles *very* diverse objects.  It also allows the 
easy logical separation of the code that accesses the files from the code that 
processes the objects, so that a mail folder could be moved from the 
filesystem into a database without breaking anything.  If the implementor of 
the tarball were to use the same methods that are implemented for a directory, 
we could descend into a tarfile easily...and so on.

My task as the "mail guy" would then be:

a) A generic mixin for all mail folders which displays mail folders, allows
one to find subfolders and/or messages, and allows various other operations 
(moving messages, etc.)

b) A generic mixin for all mail messages which displays the message, allows 
one to reply to a message, etc, etc.

c) Mixins for various objects such as mhfolders, qmail Maildirs, babyl files, 
mbox files, which allows them to be accessed by the methods in the above 
mixins once they've been created by the read-object-from-path function.

So, in the spirit of my first paragraph, does this infrastructure already 
exist to be integrated into our system, or do we need to invent and design it
from scratch?

Chris

-- 
Chris Garrigues                    O-              cwg@DeepEddy.Com
  Deep Eddy Internet Consulting                     +1 512 432 4046
  609 Deep Eddy Avenue
  Austin, TX  78703-4513              http://www.DeepEddy.Com/~cwg/



--==_Exmh_1330521040P
Content-Type: application/pgp-signature

-----BEGIN PGP MESSAGE-----
Version: 2.6.2

iQB1AwUBM20J/5aQnaaFII2dAQG+XAL/WUthJAbo2izZxHp07KchDI8uUn8BPynP
vVJ71fUberCExtjQD/FLX3UGPGAZ89mghhYyLDAABULGd4F5hLJ7QNbTcl7Ud4W6
COB1p16/grEjIGV/xykIN2NQIzAS0R49
=9xgM
-----END PGP MESSAGE-----

--==_Exmh_1330521040P--