Provided by: hfsutils-tcltk_3.2.6-14_amd64 bug


       hfssh - Tcl interpreter with HFS extensions


       hfssh [script]


       hfssh  is  a  Tcl  interpreter  like  tclsh(1)  but  which  also  implements the following
       extensions to support manipulation of Macintosh HFS media:

       hfs mount path [partno]
              Mounts the indicated HFS partition from the given path.  An HFS  volume  handle  is
              returned, which may be used for further volume commands described below.

       hfs zero path nparts
              The  given  path  is  overwritten  with  a  Macintosh partition structure which can
              accommodate up to nparts partitions. All space on the medium is initially allocated
              to  an  empty partition, from which new partitions can be created using hfs mkpart.
              The number of blocks in this empty space available for partitioning is returned.

       hfs mkpart path nblocks
              A new HFS partition is created from the  available  free  space  on  the  specified
              Macintosh-partitioned medium. The partition is created with a size of nblocks.  Any
              remaining free blocks left in the empty partition space can be further allocated to
              other new partitions, as long as there are enough partition slots remaining.

              N.B.  When the last remaining partition slot is used, all remaining free space must
              be allocated to it. It is therefore best to consider this when  initially  creating
              the total number of partition slots with hfs zero.

       hfs nparts path
              This  command  returns  the  number of HFS partitions which exist on the Macintosh-
              formatted medium specified by path.  If path does not appear to  have  a  Macintosh
              partition  map,  or  if an error occurs, this command will return -1. Otherwise, it
              will return a number greater than or equal to 0.

       hfs format path partno vname [bblist]
              This command creates a new HFS volume by formatting the given  path  and  partition
              partno and giving it a volume label vname.

              If  it  is  desired to "spare" some blocks from being used by the volume, a list of
              "bad block" numbers can be given, relative to the beginning of the  partition.  The
              given  blocks will be mapped out of use (if possible) and the size of the resulting
              volume will be decreased.

       hfs flushall
              All pending changes to all open volumes are flushed immediately.  This is useful to
              do  periodically  to  avoid  accidental loss of data when volumes are open for long
              periods of time.

       hfs chartrans fromset toset string
              This command translates the given string from the  fromset  character  set  to  the
              toset  set.  Both  fromset  and toset can be one of latin1 (ISO 8859-1) or macroman
              (MacOS Standard Roman).  A new (translated) string is returned.

              The translation is not necessarily reversible, since the two character sets do  not
              have a complete one-to-one mapping.

       hfs version
              The current running version of hfsutils is returned.

       hfs copyright
              A copyright notice is returned.

       hfs author
              The name and email address of the author of hfsutils is returned.

       hfs license
              A license statement for hfsutils is returned.

       vol vname
              The  volume  name of the given vol handle is returned. This is also the name of the
              volume's root directory, needed to construct absolute pathnames on the volume.

       vol size
              A list of two numbers is returned; the first is the total size of the given vol (in
              bytes), and the second is the number of free bytes that are currently available.

       vol crdate
              The  creation  date  of the given vol is returned, expressed as a number of seconds
              since 00:00:00 01-Jan-1970 UTC.

       vol mddate
              The last modification date of the given vol is returned, expressed as a  number  of
              seconds since 00:00:00 01-Jan-1970 UTC.

       vol islocked
              A  boolean  value  (either  1  or  0) is returned, indicating whether the given vol
              handle is locked for read-only access. It may  be  locked  because  the  medium  is
              physically  locked through hardware, or because the medium was opened read-only for
              special reasons (such as another process also has the medium open).

       vol umount
              The indicated vol is unmounted, flushing any unsaved data to the volume and closing
              the  access  path  to  the  medium. The vol handle subsequently becomes invalid for
              further use.

       vol cwd
              A numeric value is returned indicating the catalog node ID (CNID)  of  the  current
              working  directory  on  the  given vol.  This value can be passed to vol dirinfo to
              learn the directory's name and parent CNID.

       vol path
              A list of directory names is returned, representing the hierarchy between the  root
              and  the  current  directory. These names can be joined with vol sepchar characters
              (:) to construct an absolute pathname to the current directory.

              The same information can be acquired by  traversing  the  CNIDs  from  the  current
              directory  to the root using vol dirinfo.  (The root directory always has a CNID of

       vol dir [path]
              A list is returned describing the contents of the given directory path  (defaulting
              to the current directory) on the given vol.  Each element of the list describes one
              entry, and contains a set of attribute/value pairs  represented  as  another  list,
              suitable for assignment to a Tcl array using array set.

       vol flush
              All pending changes to the given volume are flushed immediately.

       vol sepchar
              The HFS path separator character ":" is returned.

       vol cd path
       vol chdir path
              The  current working directory on the given volume is changed to path, which may be
              either an absolute or relative path.

       vol dirinfo cnid
              A two-element list describing the directory having the given cnid on the given  vol
              is returned. The first element contains the name of the directory, while the second
              element contains the CNID of the directory's parent. Two CNID values  are  special:
              the root directory of the volume has CNID 2, and the "parent" of the root directory
              is returned with CNID 1.

       vol open path
              The file on vol having the given path is opened. An HFS file  handle  is  returned,
              which may be used for further file commands described below.

       vol stat path
              Information  about  the file or directory having the given path is returned in much
              the same way as vol dir except that only the single argument is described (not  its

       vol mkdir path
              A  new  directory  on  vol  having  the  given  path  is created. All of the parent
              directories leading to path must already exist, but path itself must not.

       vol rmdir path
              The directory on vol with the given path is removed. The directory must be empty.

       vol delete path
              The file on vol with the given path is removed. Both resource and data forks of the
              file are deleted.

       vol touch path
              The  modification time for the file or directory specified by path on the given vol
              is updated to the current time.

       vol glob pattern
              The given pattern is treated as a list of globbing patterns, each of which  may  be
              expanded  to  the  names  of files or directories on the given vol according to the
              globbing rules described in the hfsutils(1) documentation.  The resulting pathnames
              are  returned  in a (possibly longer) list. If a pattern does not match any file or
              directory name, it is returned in the resulting list unchanged.

       vol bless path
              The folder named by the given path is "blessed" as the MacOS  System  Folder.   For
              this  to  be  useful,  the  folder should contain valid Macintosh System and Finder

       vol rename oldpath newpath
              The existing oldpath on the given vol is renamed to newpath, possibly changing  its
              location  at  the same time. If newpath already exists, it must be a directory, and
              the item will simply be moved into it keeping the same name. (In the  latter  case,
              there  must not be another file or directory already with the same name; in no case
              will another file or directory be overwritten.)

       vol create path type creator
              A new, empty file is created on vol having the given path, and an HFS  file  handle
              is  returned in the same manner as vol open.  The file is given the specified MacOS
              type and creator codes, which must be 4 character strings.

       vol copy srcpath dstvol dstpath
              The given file srcpath located on vol is copied to dstpath located on dstvol (which
              may  be  the  same  as  vol).   The file and its attributes are copied verbatim; no
              translation is performed.

       vol copyin mode srcpath dstpath
              The specified local (UNIX) srcpath is copied into the given vol as  a  file  having
              the specified (HFS) dstpath.  A translation mode must be given as one of macbinary,
              binhex, text, or raw.

       vol copyout mode srcpath dstpath
              The specified (HFS) srcpath on the given vol is copied out as a local  file  having
              the  specified  (UNIX)  dstpath.   A  translation  mode  must  be  given  as one of
              macbinary, binhex, text, or raw.

       file close
              The indicated file is closed, all pending changes to the file are flushed, and  the
              file handle becomes invalid for any subsequent operation.

       file tell
              A  numeric index is returned indicating the character position within file at which
              the next read or write operation will occur.

       file stat
              Information about the given file is returned in much the same way as vol stat.

       file getfork
              If the given file is currently performing I/O on its data fork, the  string  "data"
              is returned.  Otherwise, the string "rsrc" is returned. When files are opened, they
              will default to read/write on their data fork. The current fork may be changed with
              file setfork.

       file setfork fork
              The  current  fork  of  the given file is set to fork (which must be one of data or
              rsrc), and the current read/write position is reset to the beginning of the file.

       file seek pos [from]
              The character position for the next read or  write  on  file  is  changed  to  pos,
              relative  to  the  indicated from position, which must be one of start, current, or
              end.  The default is to position relative to the start of the file.

       file read length
              length bytes are read from the current read/write position in file, and these bytes
              are  returned  as  a  string.  This  string  may  be  shorter  than  length in some
              circumstances, or may even be empty, indicating  the  end  of  the  file  has  been

       file write string
              The  given string is written to file at the current read/write position. The number
              of bytes actually written to the file is returned, and may be less than the  length
              of the string in unusual circumstances (such as when the volume is full).


       hfsutils(1), hfs(1), tclsh(1)


       Precautions  are taken to ensure all open files and mounted volumes are cleanly closed and
       unmounted before exiting  the  shell,  however  abnormal  termination  (e.g.  CTRL-C)  can
       circumvent  this,  potentially  leaving volumes in an inconsistent state. Judicious use of
       hfs flushall may help reduce this risk.


       Tcl does not provide a  mechanism  for  manipulating  arbitrary  binary  data.   Therefore
       caution  should be used when reading or writing files containing anything other than plain


       Robert Leslie <>