diff options
Diffstat (limited to 'roms/openbios/fs/hfs/include')
| -rw-r--r-- | roms/openbios/fs/hfs/include/apple.h | 273 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/block.h | 41 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/btree.h | 34 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/data.h | 57 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/file.h | 46 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/hfs.h | 180 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/libhfs.h | 225 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/low.h | 45 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/medium.h | 43 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/node.h | 35 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/record.h | 48 | ||||
| -rw-r--r-- | roms/openbios/fs/hfs/include/volume.h | 71 | 
12 files changed, 1098 insertions, 0 deletions
| diff --git a/roms/openbios/fs/hfs/include/apple.h b/roms/openbios/fs/hfs/include/apple.h new file mode 100644 index 00000000..3de581d8 --- /dev/null +++ b/roms/openbios/fs/hfs/include/apple.h @@ -0,0 +1,273 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: apple.h,v 1.1 1998/04/11 08:27:11 rob Exp $ + */ + +typedef signed char	Char; +typedef unsigned char	UChar; +typedef signed char	SignedByte; +typedef signed short	Integer; +typedef unsigned short	UInteger; +typedef signed long	LongInt; +typedef unsigned long	ULongInt; +typedef char		Str15[16]; +typedef char		Str31[32]; +typedef long		OSType; + +typedef struct { +  Integer	sbSig;		/* device signature (should be 0x4552) */ +  Integer	sbBlkSize;	/* block size of the device (in bytes) */ +  LongInt	sbBlkCount;	/* number of blocks on the device */ +  Integer	sbDevType;	/* reserved */ +  Integer	sbDevId;	/* reserved */ +  LongInt	sbData;		/* reserved */ +  Integer	sbDrvrCount;	/* number of driver descriptor entries */ +  LongInt	ddBlock;	/* first driver's starting block */ +  Integer	ddSize;		/* size of the driver, in 512-byte blocks */ +  Integer	ddType;		/* driver operating system type (MacOS = 1) */ +  Integer	ddPad[243];	/* additional drivers, if any */ +} Block0; + +typedef struct { +  Integer	pmSig;		/* partition signature (0x504d or 0x5453) */ +  Integer	pmSigPad;	/* reserved */ +  LongInt	pmMapBlkCnt;	/* number of blocks in partition map */ +  LongInt	pmPyPartStart;	/* first physical block of partition */ +  LongInt	pmPartBlkCnt;	/* number of blocks in partition */ +  Char		pmPartName[33];	/* partition name */ +  Char		pmParType[33];	/* partition type */ +  LongInt	pmLgDataStart;	/* first logical block of data area */ +  LongInt	pmDataCnt;	/* number of blocks in data area */ +  LongInt	pmPartStatus;	/* partition status information */ +  LongInt	pmLgBootStart;	/* first logical block of boot code */ +  LongInt	pmBootSize;	/* size of boot code, in bytes */ +  LongInt	pmBootAddr;	/* boot code load address */ +  LongInt	pmBootAddr2;	/* reserved */ +  LongInt	pmBootEntry;	/* boot code entry point */ +  LongInt	pmBootEntry2;	/* reserved */ +  LongInt	pmBootCksum;	/* boot code checksum */ +  Char		pmProcessor[17];/* processor type */ +  Integer	pmPad[188];	/* reserved */ +} Partition; + +typedef struct { +  Integer	bbID;		/* boot blocks signature */ +  LongInt	bbEntry;	/* entry point to boot code */ +  Integer	bbVersion;	/* boot blocks version number */ +  Integer	bbPageFlags;	/* used internally */ +  Str15		bbSysName;	/* System filename */ +  Str15		bbShellName;	/* Finder filename */ +  Str15		bbDbg1Name;	/* debugger filename */ +  Str15		bbDbg2Name;	/* debugger filename */ +  Str15		bbScreenName;	/* name of startup screen */ +  Str15		bbHelloName;	/* name of startup program */ +  Str15		bbScrapName;	/* name of system scrap file */ +  Integer	bbCntFCBs;	/* number of FCBs to allocate */ +  Integer	bbCntEvts;	/* number of event queue elements */ +  LongInt	bb128KSHeap;	/* system heap size on 128K Mac */ +  LongInt	bb256KSHeap;	/* used internally */ +  LongInt	bbSysHeapSize;	/* system heap size on all machines */ +  Integer	filler;		/* reserved */ +  LongInt	bbSysHeapExtra;	/* additional system heap space */ +  LongInt	bbSysHeapFract;	/* fraction of RAM for system heap */ +} BootBlkHdr; + +typedef struct { +  UInteger	xdrStABN;	/* first allocation block */ +  UInteger	xdrNumABlks;	/* number of allocation blocks */ +} ExtDescriptor; + +typedef ExtDescriptor ExtDataRec[3]; + +typedef struct { +  SignedByte	xkrKeyLen;	/* key length */ +  SignedByte	xkrFkType;	/* fork type (0x00/0xff == data/resource */ +  ULongInt	xkrFNum;	/* file number */ +  UInteger	xkrFABN;	/* starting file allocation block */ +} ExtKeyRec; + +typedef struct { +  SignedByte	ckrKeyLen;	/* key length */ +  SignedByte	ckrResrv1;	/* reserved */ +  ULongInt	ckrParID;	/* parent directory ID */ +  Str31		ckrCName;	/* catalog node name */ +} CatKeyRec; + +typedef struct { +  Integer	v;		/* vertical coordinate */ +  Integer	h;		/* horizontal coordinate */ +} Point; + +typedef struct { +  Integer	top;		/* top edge of rectangle */ +  Integer	left;		/* left edge */ +  Integer	bottom;		/* bottom edge */ +  Integer	right;		/* right edge */ +} Rect; + +typedef struct { +  Rect		frRect;		/* folder's rectangle */ +  Integer	frFlags;	/* flags */ +  Point		frLocation;	/* folder's location */ +  Integer	frView;		/* folder's view */ +} DInfo; + +typedef struct { +  Point		frScroll;	/* scroll position */ +  LongInt	frOpenChain;	/* directory ID chain of open folders */ +  Integer	frUnused;	/* reserved */ +  Integer	frComment;	/* comment ID */ +  LongInt	frPutAway;	/* directory ID */ +} DXInfo; + +typedef struct { +  OSType	fdType;		/* file type */ +  OSType	fdCreator;	/* file's creator */ +  Integer	fdFlags;	/* flags */ +  Point		fdLocation;	/* file's location */ +  Integer	fdFldr;		/* file's window */ +} FInfo; + +typedef struct { +  Integer	fdIconID;	/* icon ID */ +  Integer	fdUnused[4];	/* reserved */ +  Integer	fdComment;	/* comment ID */ +  LongInt	fdPutAway;	/* home directory ID */ +} FXInfo; + +typedef struct { +  Integer	drSigWord;	/* volume signature (0x4244 for HFS) */ +  LongInt	drCrDate;	/* date and time of volume creation */ +  LongInt	drLsMod;	/* date and time of last modification */ +  Integer	drAtrb;		/* volume attributes */ +  UInteger	drNmFls;	/* number of files in root directory */ +  UInteger	drVBMSt;	/* first block of volume bit map (always 3) */ +  UInteger	drAllocPtr;	/* start of next allocation search */ +  UInteger	drNmAlBlks;	/* number of allocation blocks in volume */ +  ULongInt	drAlBlkSiz;	/* size (in bytes) of allocation blocks */ +  ULongInt	drClpSiz;	/* default clump size */ +  UInteger	drAlBlSt;	/* first allocation block in volume */ +  LongInt	drNxtCNID;	/* next unused catalog node ID (dir/file ID) */ +  UInteger	drFreeBks;	/* number of unused allocation blocks */ +  char		drVN[28];	/* volume name (1-27 chars) */ +  LongInt	drVolBkUp;	/* date and time of last backup */ +  Integer	drVSeqNum;	/* volume backup sequence number */ +  ULongInt	drWrCnt;	/* volume write count */ +  ULongInt	drXTClpSiz;	/* clump size for extents overflow file */ +  ULongInt	drCTClpSiz;	/* clump size for catalog file */ +  UInteger	drNmRtDirs;	/* number of directories in root directory */ +  ULongInt	drFilCnt;	/* number of files in volume */ +  ULongInt	drDirCnt;	/* number of directories in volume */ +  LongInt	drFndrInfo[8];	/* information used by the Finder */ +  UInteger	drEmbedSigWord;	/* type of embedded volume */ +  ExtDescriptor	drEmbedExtent;	/* location of embedded volume */ +  ULongInt	drXTFlSize;	/* size (in bytes) of extents overflow file */ +  ExtDataRec	drXTExtRec;	/* first extent record for extents file */ +  ULongInt	drCTFlSize;	/* size (in bytes) of catalog file */ +  ExtDataRec	drCTExtRec;	/* first extent record for catalog file */ +} MDB; + +typedef enum { +  cdrDirRec  = 1, +  cdrFilRec  = 2, +  cdrThdRec  = 3, +  cdrFThdRec = 4 +} CatDataType; + +typedef struct { +  SignedByte	cdrType;	/* record type */ +  SignedByte	cdrResrv2;	/* reserved */ +  union { +    struct {  /* cdrDirRec */ +      Integer	dirFlags;	/* directory flags */ +      UInteger	dirVal;		/* directory valence */ +      ULongInt	dirDirID;	/* directory ID */ +      LongInt	dirCrDat;	/* date and time of creation */ +      LongInt	dirMdDat;	/* date and time of last modification */ +      LongInt	dirBkDat;	/* date and time of last backup */ +      DInfo	dirUsrInfo;	/* Finder information */ +      DXInfo	dirFndrInfo;	/* additional Finder information */ +      LongInt	dirResrv[4];	/* reserved */ +    } dir; +    struct {  /* cdrFilRec */ +      SignedByte +		filFlags;	/* file flags */ +      SignedByte +		filTyp;		/* file type */ +      FInfo	filUsrWds;	/* Finder information */ +      ULongInt	filFlNum;	/* file ID */ +      UInteger	filStBlk;	/* first alloc block of data fork */ +      ULongInt	filLgLen;	/* logical EOF of data fork */ +      ULongInt	filPyLen;	/* physical EOF of data fork */ +      UInteger	filRStBlk;	/* first alloc block of resource fork */ +      ULongInt	filRLgLen;	/* logical EOF of resource fork */ +      ULongInt	filRPyLen;	/* physical EOF of resource fork */ +      LongInt	filCrDat;	/* date and time of creation */ +      LongInt	filMdDat;	/* date and time of last modification */ +      LongInt	filBkDat;	/* date and time of last backup */ +      FXInfo	filFndrInfo;	/* additional Finder information */ +      UInteger	filClpSize;	/* file clump size */ +      ExtDataRec +		filExtRec;	/* first data fork extent record */ +      ExtDataRec +		filRExtRec;	/* first resource fork extent record */ +      LongInt	filResrv;	/* reserved */ +    } fil; +    struct {  /* cdrThdRec */ +      LongInt	thdResrv[2];	/* reserved */ +      ULongInt	thdParID;	/* parent ID for this directory */ +      Str31	thdCName;	/* name of this directory */ +    } dthd; +    struct {  /* cdrFThdRec */ +      LongInt	fthdResrv[2];	/* reserved */ +      ULongInt	fthdParID;	/* parent ID for this file */ +      Str31	fthdCName;	/* name of this file */ +    } fthd; +  } u; +} CatDataRec; + +typedef struct { +  ULongInt	ndFLink;	/* forward link */ +  ULongInt	ndBLink;	/* backward link */ +  SignedByte	ndType;		/* node type */ +  SignedByte	ndNHeight;	/* node level */ +  UInteger	ndNRecs;	/* number of records in node */ +  Integer	ndResv2;	/* reserved */ +} NodeDescriptor; + +enum { +  ndIndxNode = (SignedByte) 0x00, +  ndHdrNode  = (SignedByte) 0x01, +  ndMapNode  = (SignedByte) 0x02, +  ndLeafNode = (SignedByte) 0xff +}; + +typedef struct { +  UInteger	bthDepth;	/* current depth of tree */ +  ULongInt	bthRoot;	/* number of root node */ +  ULongInt	bthNRecs;	/* number of leaf records in tree */ +  ULongInt	bthFNode;	/* number of first leaf node */ +  ULongInt	bthLNode;	/* number of last leaf node */ +  UInteger	bthNodeSize;	/* size of a node */ +  UInteger	bthKeyLen;	/* maximum length of a key */ +  ULongInt	bthNNodes;	/* total number of nodes in tree */ +  ULongInt	bthFree;	/* number of free nodes */ +  SignedByte	bthResv[76];	/* reserved */ +} BTHdrRec; diff --git a/roms/openbios/fs/hfs/include/block.h b/roms/openbios/fs/hfs/include/block.h new file mode 100644 index 00000000..d7e76451 --- /dev/null +++ b/roms/openbios/fs/hfs/include/block.h @@ -0,0 +1,41 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: block.h,v 1.10 1998/11/02 22:08:53 rob Exp $ + */ + +int b_init(hfsvol *); +int b_flush(hfsvol *); +int b_finish(hfsvol *); + +int b_readpb(hfsvol *, unsigned long, block *, unsigned int); +int b_writepb(hfsvol *, unsigned long, const block *, unsigned int); + +int b_readlb(hfsvol *, unsigned long, block *); +int b_writelb(hfsvol *, unsigned long, const block *); + +int b_readab(hfsvol *, unsigned int, unsigned int, block *); +int b_writeab(hfsvol *, unsigned int, unsigned int, const block *); + +unsigned long b_size(hfsvol *); + +# ifdef DEBUG +void b_showstats(const bcache *); +void b_dumpcache(const bcache *); +# endif diff --git a/roms/openbios/fs/hfs/include/btree.h b/roms/openbios/fs/hfs/include/btree.h new file mode 100644 index 00000000..36660f53 --- /dev/null +++ b/roms/openbios/fs/hfs/include/btree.h @@ -0,0 +1,34 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: btree.h,v 1.8 1998/11/02 22:08:55 rob Exp $ + */ + +int bt_getnode(node *, btree *, unsigned long); +int bt_putnode(node *); + +int bt_readhdr(btree *); +int bt_writehdr(btree *); + +int bt_space(btree *, unsigned int); + +int bt_insert(btree *, const byte *, unsigned int); +int bt_delete(btree *, const byte *); + +int bt_search(btree *, const byte *, node *); diff --git a/roms/openbios/fs/hfs/include/data.h b/roms/openbios/fs/hfs/include/data.h new file mode 100644 index 00000000..f3e20008 --- /dev/null +++ b/roms/openbios/fs/hfs/include/data.h @@ -0,0 +1,57 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: data.h,v 1.7 1998/11/02 22:08:58 rob Exp $ + */ + +  signed  char d_getsb(register const unsigned char *); +unsigned  char d_getub(register const unsigned char *); +  signed short d_getsw(register const unsigned char *); +unsigned short d_getuw(register const unsigned char *); +  signed  long d_getsl(register const unsigned char *); +unsigned  long d_getul(register const unsigned char *); + +void d_putsb(register unsigned char *, register   signed  char); +void d_putub(register unsigned char *, register unsigned  char); +void d_putsw(register unsigned char *, register   signed short); +void d_putuw(register unsigned char *, register unsigned short); +void d_putsl(register unsigned char *, register   signed  long); +void d_putul(register unsigned char *, register unsigned  long); + +void d_fetchsb(register const unsigned char **, register   signed  char *); +void d_fetchub(register const unsigned char **, register unsigned  char *); +void d_fetchsw(register const unsigned char **, register   signed short *); +void d_fetchuw(register const unsigned char **, register unsigned short *); +void d_fetchsl(register const unsigned char **, register   signed  long *); +void d_fetchul(register const unsigned char **, register unsigned  long *); + +void d_storesb(register unsigned char **, register   signed  char); +void d_storeub(register unsigned char **, register unsigned  char); +void d_storesw(register unsigned char **, register   signed short); +void d_storeuw(register unsigned char **, register unsigned short); +void d_storesl(register unsigned char **, register   signed  long); +void d_storeul(register unsigned char **, register unsigned  long); + +void d_fetchstr(const unsigned char **, char *, unsigned); +void d_storestr(unsigned char **, const char *, unsigned); + +int d_relstring(const char *, const char *); + +time_t d_ltime(unsigned long); +unsigned long d_mtime(time_t); diff --git a/roms/openbios/fs/hfs/include/file.h b/roms/openbios/fs/hfs/include/file.h new file mode 100644 index 00000000..dacdc480 --- /dev/null +++ b/roms/openbios/fs/hfs/include/file.h @@ -0,0 +1,46 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: file.h,v 1.6 1998/04/11 08:27:12 rob Exp $ + */ + +enum { +  fkData = 0x00, +  fkRsrc = 0xff +}; + +void f_init(hfsfile *, hfsvol *, long, const char *); +void f_selectfork(hfsfile *, int); +void f_getptrs(hfsfile *, ExtDataRec **, unsigned long **, unsigned long **); + +int f_doblock(hfsfile *, unsigned long, block *, +	      int (*)(hfsvol *, unsigned int, unsigned int, block *)); + +# define f_getblock(file, num, bp)  \ +    f_doblock((file), (num), (bp), b_readab) +# define f_putblock(file, num, bp)  \ +    f_doblock((file), (num), (bp),  \ +	      (int (*)(hfsvol *, unsigned int, unsigned int, block *))  \ +	      b_writeab) + +int f_addextent(hfsfile *, ExtDescriptor *); +long f_alloc(hfsfile *); + +int f_trunc(hfsfile *); +int f_flush(hfsfile *); diff --git a/roms/openbios/fs/hfs/include/hfs.h b/roms/openbios/fs/hfs/include/hfs.h new file mode 100644 index 00000000..9996cc8d --- /dev/null +++ b/roms/openbios/fs/hfs/include/hfs.h @@ -0,0 +1,180 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: hfs.h,v 1.11 1998/11/02 22:09:01 rob Exp $ + */ + +# define HFS_BLOCKSZ		512 +# define HFS_BLOCKSZ_BITS	9 + +# define HFS_MAX_FLEN		31 +# define HFS_MAX_VLEN		27 + +typedef struct _hfsvol_  hfsvol; +typedef struct _hfsfile_ hfsfile; +typedef struct _hfsdir_  hfsdir; + +typedef struct { +  char name[HFS_MAX_VLEN + 1];	/* name of volume (MacOS Standard Roman) */ +  int flags;			/* volume flags */ + +  unsigned long totbytes;	/* total bytes on volume */ +  unsigned long freebytes;	/* free bytes on volume */ + +  unsigned long alblocksz;	/* volume allocation block size */ +  unsigned long clumpsz;	/* default file clump size */ + +  unsigned long numfiles;	/* number of files in volume */ +  unsigned long numdirs;	/* number of directories in volume */ + +  time_t crdate;		/* volume creation date */ +  time_t mddate;		/* last volume modification date */ +  time_t bkdate;		/* last volume backup date */ + +  unsigned long blessed;	/* CNID of MacOS System Folder */ +} hfsvolent; + +typedef struct { +  char name[HFS_MAX_FLEN + 1];	/* catalog name (MacOS Standard Roman) */ +  int flags;			/* bit flags */ +  unsigned long cnid;		/* catalog node id (CNID) */ +  unsigned long parid;		/* CNID of parent directory */ + +  time_t crdate;		/* date of creation */ +  time_t mddate;		/* date of last modification */ +  time_t bkdate;		/* date of last backup */ + +  short fdflags;		/* Macintosh Finder flags */ + +  struct { +    signed short v;		/* Finder icon vertical coordinate */ +    signed short h;		/* horizontal coordinate */ +  } fdlocation; + +  union { +    struct { +      unsigned long dsize;	/* size of data fork */ +      unsigned long rsize;	/* size of resource fork */ + +      char type[5];		/* file type code (plus null) */ +      char creator[5];		/* file creator code (plus null) */ +    } file; + +    struct { +      unsigned short valence;	/* number of items in directory */ + +      struct { +	signed short top;	/* top edge of folder's rectangle */ +	signed short left;	/* left edge */ +	signed short bottom;	/* bottom edge */ +	signed short right;	/* right edge */ +      } rect; +    } dir; +  } u; +} hfsdirent; + +# define HFS_ISDIR		0x0001 +# define HFS_ISLOCKED		0x0002 + +# define HFS_CNID_ROOTPAR	1 +# define HFS_CNID_ROOTDIR	2 +# define HFS_CNID_EXT		3 +# define HFS_CNID_CAT		4 +# define HFS_CNID_BADALLOC	5 + +# define HFS_FNDR_ISONDESK		(1 <<  0) +# define HFS_FNDR_COLOR			0x0e +# define HFS_FNDR_COLORRESERVED		(1 <<  4) +# define HFS_FNDR_REQUIRESSWITCHLAUNCH	(1 <<  5) +# define HFS_FNDR_ISSHARED		(1 <<  6) +# define HFS_FNDR_HASNOINITS		(1 <<  7) +# define HFS_FNDR_HASBEENINITED		(1 <<  8) +# define HFS_FNDR_RESERVED		(1 <<  9) +# define HFS_FNDR_HASCUSTOMICON		(1 << 10) +# define HFS_FNDR_ISSTATIONERY		(1 << 11) +# define HFS_FNDR_NAMELOCKED		(1 << 12) +# define HFS_FNDR_HASBUNDLE		(1 << 13) +# define HFS_FNDR_ISINVISIBLE		(1 << 14) +# define HFS_FNDR_ISALIAS		(1 << 15) + +extern const char *hfs_error; +extern const unsigned char hfs_charorder[]; + +# define HFS_MODE_RDONLY	0 +# define HFS_MODE_RDWR		1 +# define HFS_MODE_ANY		2 + +# define HFS_MODE_MASK		0x0003 + +# define HFS_OPT_NOCACHE	0x0100 +# define HFS_OPT_2048		0x0200 +# define HFS_OPT_ZERO		0x0400 + +# define HFS_SEEK_SET		0 +# define HFS_SEEK_CUR		1 +# define HFS_SEEK_END		2 + +hfsvol *hfs_mount( int os_fd, int); +int hfs_flush(hfsvol *); +void hfs_flushall(void); +int hfs_umount(hfsvol *); +void hfs_umountall(void); +hfsvol *hfs_getvol(const char *); +void hfs_setvol(hfsvol *); + +int hfs_vstat(hfsvol *, hfsvolent *); +int hfs_vsetattr(hfsvol *, hfsvolent *); + +int hfs_chdir(hfsvol *, const char *); +unsigned long hfs_getcwd(hfsvol *); +int hfs_setcwd(hfsvol *, unsigned long); +int hfs_dirinfo(hfsvol *, unsigned long *, char *); + +hfsdir *hfs_opendir(hfsvol *, const char *); +int hfs_readdir(hfsdir *, hfsdirent *); +int hfs_closedir(hfsdir *); + +hfsfile *hfs_create(hfsvol *, const char *, const char *, const char *); +hfsfile *hfs_open(hfsvol *, const char *); +int hfs_setfork(hfsfile *, int); +int hfs_getfork(hfsfile *); +unsigned long hfs_read(hfsfile *, void *, unsigned long); +unsigned long hfs_write(hfsfile *, const void *, unsigned long); +int hfs_truncate(hfsfile *, unsigned long); +unsigned long hfs_seek(hfsfile *, long, int); +int hfs_close(hfsfile *); + +int hfs_stat(hfsvol *, const char *, hfsdirent *); +int hfs_fstat(hfsfile *, hfsdirent *); +int hfs_setattr(hfsvol *, const char *, const hfsdirent *); +int hfs_fsetattr(hfsfile *, const hfsdirent *); + +int hfs_mkdir(hfsvol *, const char *); +int hfs_rmdir(hfsvol *, const char *); + +int hfs_delete(hfsvol *, const char *); +int hfs_rename(hfsvol *, const char *, const char *); + +int hfs_zero(const char *, unsigned int, unsigned long *); +int hfs_mkpart(const char *, unsigned long); +int hfs_nparts(const char *); + +int hfs_format(const char *, int, int, +	       const char *, unsigned int, const unsigned long []); +int hfs_probe(int fd, long long offset); diff --git a/roms/openbios/fs/hfs/include/libhfs.h b/roms/openbios/fs/hfs/include/libhfs.h new file mode 100644 index 00000000..f46f4383 --- /dev/null +++ b/roms/openbios/fs/hfs/include/libhfs.h @@ -0,0 +1,225 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: libhfs.h,v 1.7 1998/11/02 22:09:02 rob Exp $ + */ + +# include "hfs.h" +# include "apple.h" + +# define ERROR(code, str)  \ +    do { hfs_error = (str), errno = (code); goto fail; } while (0) + +# ifdef DEBUG +#  define ASSERT(cond)	do { if (! (cond)) abort(); } while (0) +# else +#  define ASSERT(cond)	/* nothing */ +# endif + +# define SIZE(type, n)		((size_t) (sizeof(type) * (n))) +# define ALLOC(type, n)		((type *) malloc(SIZE(type, n))) +# define ALLOCX(type, n)	((n) ? ALLOC(type, n) : (type *) 0) +# define FREE(ptr)		((ptr) ? (void) free((void *) ptr) : (void) 0) + +# define REALLOC(ptr, type, n)  \ +    ((type *) ((ptr) ? realloc(ptr, SIZE(type, n)) : malloc(SIZE(type, n)))) +# define REALLOCX(ptr, type, n)  \ +    ((n) ? REALLOC(ptr, type, n) : (FREE(ptr), (type *) 0)) + +# define BMTST(bm, num)  \ +    (((const byte *) (bm))[(num) >> 3]  &  (0x80 >> ((num) & 0x07))) +# define BMSET(bm, num)  \ +          (((byte *) (bm))[(num) >> 3] |=  (0x80 >> ((num) & 0x07))) +# define BMCLR(bm, num)  \ +          (((byte *) (bm))[(num) >> 3] &= ~(0x80 >> ((num) & 0x07))) + +# define STRINGIZE(x)		#x +# define STR(x)			STRINGIZE(x) + +typedef unsigned char byte; +typedef byte block[HFS_BLOCKSZ]; + +typedef struct _bucket_ { +  int flags;			/* bit flags */ +  unsigned int count;		/* number of times this block is requested */ + +  unsigned long bnum;		/* logical block number */ +  block *data;			/* pointer to block contents */ + +  struct _bucket_ *cnext;	/* next bucket in cache chain */ +  struct _bucket_ *cprev;	/* previous bucket in cache chain */ + +  struct _bucket_ *hnext;	/* next bucket in hash chain */ +  struct _bucket_ **hprev;	/* previous bucket's pointer to this bucket */ +} bucket; + +# define HFS_BUCKET_INUSE	0x01 +# define HFS_BUCKET_DIRTY	0x02 + +# define HFS_CACHESZ		128 +# define HFS_HASHSZ		32 +# define HFS_BLOCKBUFSZ		16 + +typedef struct { +  struct _hfsvol_ *vol;		/* volume to which cache belongs */ +  bucket *tail;			/* end of bucket chain */ + +  unsigned int hits;		/* number of cache hits */ +  unsigned int misses;		/* number of cache misses */ + +  bucket chain[HFS_CACHESZ];	/* cache bucket chain */ +  bucket *hash[HFS_HASHSZ];	/* hash table for bucket chain */ + +  block pool[HFS_CACHESZ];	/* physical blocks in cache */ +} bcache; + +# define HFS_MAP1SZ  256 +# define HFS_MAPXSZ  492 + +# define HFS_NODEREC(nd, rnum)	((nd).data + (nd).roff[rnum]) +# define HFS_RECLEN(nd, rnum)	((nd).roff[(rnum) + 1] - (nd).roff[rnum]) + +# define HFS_RECKEYLEN(ptr)	(*(const byte *) (ptr)) +# define HFS_RECKEYSKIP(ptr)	((size_t) ((1 + HFS_RECKEYLEN(ptr) + 1) & ~1)) +# define HFS_RECDATA(ptr)	((ptr) + HFS_RECKEYSKIP(ptr)) + +# define HFS_SETKEYLEN(ptr, x)	(*(byte *) (ptr) = (x)) + +# define HFS_CATDATALEN		sizeof(CatDataRec) +# define HFS_EXTDATALEN		sizeof(ExtDataRec) +# define HFS_MAX_DATALEN	(HFS_CATDATALEN > HFS_EXTDATALEN ?  \ +				 HFS_CATDATALEN : HFS_EXTDATALEN) + +# define HFS_CATKEYLEN		sizeof(CatKeyRec) +# define HFS_EXTKEYLEN		sizeof(ExtKeyRec) +# define HFS_MAX_KEYLEN		(HFS_CATKEYLEN > HFS_EXTKEYLEN ?  \ +				 HFS_CATKEYLEN : HFS_EXTKEYLEN) + +# define HFS_MAX_CATRECLEN	(HFS_CATKEYLEN + HFS_CATDATALEN) +# define HFS_MAX_EXTRECLEN	(HFS_EXTKEYLEN + HFS_EXTDATALEN) +# define HFS_MAX_RECLEN		(HFS_MAX_KEYLEN + HFS_MAX_DATALEN) + +# define HFS_SIGWORD		0x4244 +# define HFS_SIGWORD_MFS	((Integer) 0xd2d7) + +# define HFS_ATRB_BUSY		(1 <<  6) +# define HFS_ATRB_HLOCKED	(1 <<  7) +# define HFS_ATRB_UMOUNTED	(1 <<  8) +# define HFS_ATRB_BBSPARED	(1 <<  9) +# define HFS_ATRB_BVINCONSIS	(1 << 11) +# define HFS_ATRB_COPYPROT	(1 << 14) +# define HFS_ATRB_SLOCKED	(1 << 15) + +struct _hfsfile_ { +  struct _hfsvol_ *vol;		/* pointer to volume descriptor */ +  unsigned long parid;		/* parent directory ID of this file */ +  char name[HFS_MAX_FLEN + 1];	/* catalog name of this file */ +  CatDataRec cat;		/* catalog information */ +  ExtDataRec ext;		/* current extent record */ +  unsigned int fabn;		/* starting file allocation block number */ +  int fork;			/* current selected fork for I/O */ +  unsigned long pos;		/* current file seek pointer */ +  int flags;			/* bit flags */ + +  struct _hfsfile_ *prev; +  struct _hfsfile_ *next; +}; + +# define HFS_FILE_UPDATE_CATREC	0x01 + +# define HFS_MAX_NRECS	35	/* maximum based on minimum record size */ + +typedef struct _node_ { +  struct _btree_ *bt;		/* btree to which this node belongs */ +  unsigned long nnum;		/* node index */ +  NodeDescriptor nd;		/* node descriptor */ +  int rnum;			/* current record index */ +  UInteger roff[HFS_MAX_NRECS + 1]; +				/* record offsets */ +  block data;			/* raw contents of node */ +} node; + +struct _hfsdir_ { +  struct _hfsvol_ *vol;		/* associated volume */ +  unsigned long dirid;		/* directory ID of interest (or 0) */ + +  node n;			/* current B*-tree node */ +  struct _hfsvol_ *vptr;	/* current volume pointer */ + +  struct _hfsdir_ *prev; +  struct _hfsdir_ *next; +}; + +typedef void (*keyunpackfunc)(const byte *, void *); +typedef int (*keycomparefunc)(const void *, const void *); + +typedef struct _btree_ { +  hfsfile f;			/* subset file information */ +  node hdrnd;			/* header node */ +  BTHdrRec hdr;			/* header record */ +  byte *map;			/* usage bitmap */ +  unsigned long mapsz;		/* number of bytes in bitmap */ +  int flags;			/* bit flags */ + +  keyunpackfunc keyunpack;	/* key unpacking function */ +  keycomparefunc keycompare;	/* key comparison function */ +} btree; + +# define HFS_BT_UPDATE_HDR	0x01 + +struct _hfsvol_ { +  int os_fd;		/* OS-dependent private descriptor data */ +  int flags;		/* bit flags */ + +  int pnum;		/* ordinal HFS partition number */ +  unsigned long vstart;	/* logical block offset to start of volume */ +  unsigned long vlen;	/* number of logical blocks in volume */ +  unsigned int lpa;	/* number of logical blocks per allocation block */ + +  bcache *cache;	/* cache of recently used blocks */ + +  MDB mdb;		/* master directory block */ +  block *vbm;		/* volume bitmap */ +  unsigned short vbmsz;	/* number of blocks in bitmap */ + +  btree ext;		/* B*-tree control block for extents overflow file */ +  btree cat;		/* B*-tree control block for catalog file */ + +  unsigned long cwd;	/* directory id of current working directory */ + +  int refs;		/* number of external references to this volume */ +  hfsfile *files;	/* list of open files */ +  hfsdir *dirs;		/* list of open directories */ + +  struct _hfsvol_ *prev; +  struct _hfsvol_ *next; +}; + +# define HFS_VOL_OPEN		0x0001 +# define HFS_VOL_MOUNTED	0x0002 +# define HFS_VOL_READONLY	0x0004 +# define HFS_VOL_USINGCACHE	0x0008 + +# define HFS_VOL_UPDATE_MDB	0x0010 +# define HFS_VOL_UPDATE_ALTMDB	0x0020 +# define HFS_VOL_UPDATE_VBM	0x0040 + +# define HFS_VOL_OPT_MASK	0xff00 + +extern hfsvol *hfs_mounts; diff --git a/roms/openbios/fs/hfs/include/low.h b/roms/openbios/fs/hfs/include/low.h new file mode 100644 index 00000000..56d049a8 --- /dev/null +++ b/roms/openbios/fs/hfs/include/low.h @@ -0,0 +1,45 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: low.h,v 1.6 1998/04/11 08:27:13 rob Exp $ + */ + +# define HFS_DDR_SIGWORD	0x4552 + +# define HFS_PM_SIGWORD		0x504d +# define HFS_PM_SIGWORD_OLD	0x5453 + +# define HFS_BB_SIGWORD		0x4c4b + +# define HFS_BOOTCODE1LEN	(HFS_BLOCKSZ - 148) +# define HFS_BOOTCODE2LEN	HFS_BLOCKSZ + +# define HFS_BOOTCODELEN	(HFS_BOOTCODE1LEN + HFS_BOOTCODE2LEN) + +int l_getddr(hfsvol *, Block0 *); +int l_putddr(hfsvol *, const Block0 *); + +int l_getpmentry(hfsvol *, Partition *, unsigned long); +int l_putpmentry(hfsvol *, const Partition *, unsigned long); + +int l_getbb(hfsvol *, BootBlkHdr *, byte *); +int l_putbb(hfsvol *, const BootBlkHdr *, const byte *); + +int l_getmdb(hfsvol *, MDB *, int); +int l_putmdb(hfsvol *, const MDB *, int); diff --git a/roms/openbios/fs/hfs/include/medium.h b/roms/openbios/fs/hfs/include/medium.h new file mode 100644 index 00000000..29d97a4e --- /dev/null +++ b/roms/openbios/fs/hfs/include/medium.h @@ -0,0 +1,43 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: medium.h,v 1.3 1998/04/11 08:27:13 rob Exp $ + */ + +/* + * Partition Types: + * + * "Apple_partition_map"	partition map + * "Apple_Driver"		device driver + * "Apple_Driver43"		SCSI Manager 4.3 device driver + * "Apple_MFS"			Macintosh 64K ROM filesystem + * "Apple_HFS"			Macintosh hierarchical filesystem + * "Apple_Unix_SVR2"		Unix filesystem + * "Apple_PRODOS"		ProDOS filesystem + * "Apple_Free"			unused + * "Apple_Scratch"		empty + */ + +int m_zeroddr(hfsvol *); + +int m_zeropm(hfsvol *, unsigned int); +int m_findpmentry(hfsvol *, const char *, Partition *, unsigned long *); +int m_mkpart(hfsvol *, const char *, const char *, unsigned long); + +int m_zerobb(hfsvol *); diff --git a/roms/openbios/fs/hfs/include/node.h b/roms/openbios/fs/hfs/include/node.h new file mode 100644 index 00000000..d7367fd5 --- /dev/null +++ b/roms/openbios/fs/hfs/include/node.h @@ -0,0 +1,35 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: node.h,v 1.7 1998/11/02 22:09:06 rob Exp $ + */ + +void n_init(node *, btree *, int, int); + +int n_new(node *); +int n_free(node *); + +int n_search(node *, const byte *); + +void n_index(const node *, byte *, unsigned int *); + +void n_insertx(node *, const byte *, unsigned int); +int n_insert(node *, byte *, unsigned int *); + +int n_delete(node *, byte *, int *); diff --git a/roms/openbios/fs/hfs/include/record.h b/roms/openbios/fs/hfs/include/record.h new file mode 100644 index 00000000..283e809f --- /dev/null +++ b/roms/openbios/fs/hfs/include/record.h @@ -0,0 +1,48 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: record.h,v 1.7 1998/11/02 22:09:08 rob Exp $ + */ + +void r_packcatkey(const CatKeyRec *, byte *, unsigned int *); +void r_unpackcatkey(const byte *, CatKeyRec *); + +void r_packextkey(const ExtKeyRec *, byte *, unsigned int *); +void r_unpackextkey(const byte *, ExtKeyRec *); + +int r_comparecatkeys(const CatKeyRec *, const CatKeyRec *); +int r_compareextkeys(const ExtKeyRec *, const ExtKeyRec *); + +void r_packcatdata(const CatDataRec *, byte *, unsigned int *); +void r_unpackcatdata(const byte *, CatDataRec *); + +void r_packextdata(const ExtDataRec *, byte *, unsigned int *); +void r_unpackextdata(const byte *, ExtDataRec *); + +void r_makecatkey(CatKeyRec *, unsigned long, const char *); +void r_makeextkey(ExtKeyRec *, int, unsigned long, unsigned int); + +void r_packcatrec(const CatKeyRec *, const CatDataRec *, +		  byte *, unsigned int *); +void r_packextrec(const ExtKeyRec *, const ExtDataRec *, +		  byte *, unsigned int *); + +void r_packdirent(CatDataRec *, const hfsdirent *); +void r_unpackdirent(unsigned long, const char *, +		    const CatDataRec *, hfsdirent *); diff --git a/roms/openbios/fs/hfs/include/volume.h b/roms/openbios/fs/hfs/include/volume.h new file mode 100644 index 00000000..562c2d19 --- /dev/null +++ b/roms/openbios/fs/hfs/include/volume.h @@ -0,0 +1,71 @@ +/* + * libhfs - library for reading and writing Macintosh HFS volumes + * Copyright (C) 1996-1998 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id: volume.h,v 1.7 1998/11/02 22:09:12 rob Exp $ + */ + +#ifndef _H_VOLUME +#define _H_VOLUME + +void v_init(hfsvol *, int); + +int v_open(hfsvol *, int os_fd); +int v_flush(hfsvol *); +int v_close(hfsvol *); + +int v_same(hfsvol *, int os_fd); +int v_geometry(hfsvol *, int); + +int v_readmdb(hfsvol *); +int v_writemdb(hfsvol *); + +int v_readvbm(hfsvol *); +int v_writevbm(hfsvol *); + +int v_mount(hfsvol *); +int v_dirty(hfsvol *); + +int v_catsearch(hfsvol *, unsigned long, const char *, +		CatDataRec *, char *, node *); +int v_extsearch(hfsfile *, unsigned int, ExtDataRec *, node *); + +int v_getthread(hfsvol *, unsigned long, CatDataRec *, node *, int); + +# define v_getdthread(vol, id, thread, np)  \ +    v_getthread(vol, id, thread, np, cdrThdRec) +# define v_getfthread(vol, id, thread, np)  \ +    v_getthread(vol, id, thread, np, cdrFThdRec) + +int v_putcatrec(const CatDataRec *, node *); +int v_putextrec(const ExtDataRec *, node *); + +int v_allocblocks(hfsvol *, ExtDescriptor *); +int v_freeblocks(hfsvol *, const ExtDescriptor *); + +int v_resolve(hfsvol **vol, const char *path, +              CatDataRec *data, unsigned long *parid, char *fname, node *np); + +int v_adjvalence(hfsvol *, unsigned long, int, int); +int v_mkdir(hfsvol *, unsigned long, const char *); + +int v_scavenge(hfsvol *); + +int v_probe(int fd, long long offset); + +#endif   /* _H_VOLUME */ | 
