\section{Introduction} 
\label{intro}

\subsection{Motivation}   

With the large and growing number of Apple Macintosh computers in use,
accessing data stored on Macintosh volumes has become important.
Although Apple and other vendors provide software to read and write
DOS FAT volumes and there are a number of products that implement the
FTP protocol on Macintosh systems, both of these methods for accessing
Macintosh data require physical access to a Macintosh and neither has
the immediacy of directly using a Macintosh diskette or SCSI hard disk
on one's machine of choice.  Clearly, a Macintosh file system for
non-Macintoshes is a useful thing.

Further, the broad range of ``non-Macintoshes'' (Unix workstations, DOS
and OS/2 based PCs, etc) motivates a portable library approach.
Instead of ``reinventing the wheel'' with each new platform, our
portable library requires only that two low level routines
(read/write sectors and some of the mount code) be written.  The
library provides a consistent programming interface over which such
things as a user level API, a Unix VFS, or an OS/2 IFS can be built.

\subsection{Goals} 

Our first goal was to define a programming interface for MacFS that
could support a a variety of applications such as a user level library
for accessing Macintosh volumes and a Unix Virtual File System (VFS).
\cite{VFS} We demonstrated that we fulfilled this goal by creating a
robust user level library and utility programs, and an experimental
VFS.  Secondly, we wanted to make our implementation as portable as
possible and to minimize and partition platform-specific code.  Our
implementation has only two small platform-specific modules and has
been tested on a DEC Station/5000 and on an Intel 486 system.

Finally, we decided that our implementation had to properly handle the
per-file Finder Information (see section \ref{description}), which,
although not strictly a part of the file system, is nonetheless
important in maintaining the ``visual metaphor'' that Macintosh users
expect.  We accomplished this by maintaining Finder Information on
existing files, supplying reasonable information when creating
files, and providing a mechanism for changing it.

\subsection{Organization}

In section \ref{description} we begin by describing the Macintosh
Hierarchical File System (MHFS) in some detail.  Section
\ref{interface} defines the programming interface of our library and
our user level interface.  Section \ref{implementation} is a detailed
description of our implementation.  We discuss some of the issues that
arise out of the complexity of MHFS in section \ref{issues}.  Section
\ref{perf} presents performance data on our user level implementation
and comments on our VFS implementation.  Finally, we conclude in
section \ref{conc}.

