extract-xiso v2.0 by in <in@fishtank.com>

    Greets to Project-X!


*	Now creates *OPTIMIZED* xISO files!

    - Every XBox xISO creation tool (except this one) is based on GDFIMAGE.EXE,
      the Microsoft xISO creation tool.  That tool (and all that followed) make
      xISO's that when burned to disc give the *WORST POSSIBLE PERFORMANCE* for
      looking up files!!  I suspect Microsoft did this intentionally to prevent
      developers from burning unsigned games that seek quickly, but that's just
      my theory...

      At any rate, the XBox DVD filesystem structure is designed so that
      directory entries can be stored as a binary tree, a data structure that
      provides massively faster search times when reading discs.  I have
      implemented my creation code around an AVL (height balanced) binary tree.

      This creates xISO's that when burned to disc provide *BEST POSSIBLE
      PERFORMANCE* at all times.

      To get an idea for how bad the performance is with GDFIMAGE.EXE and the
      like, take an xISO with say 4,000 files.  On average (meaning half the
      time it's WORSE), the directory entries have to be read 2,000 times to
      find *ANY* file!  In the worst case you have to read the directory
      entries 4,000 times!!  Ever wonder why your backups run slower than your
      "normal" games?  This is why!  With a height balanced AVL tree and an
      xISO with 4,000 files, on *AVERAGE* the directory entries have to be read
      11 times, and at WORST they have to be read 12 times.  Now that's fast
      (and *OPTIMIZED* ;-)!

      Note that if you are just extracting xISO's to a hard disk there is no
      performance gain.  It only matters if you burn it to a CD or DVD.

*	Rewrites existing xISO's in one operation as *OPTIMIZED* xISO's!

*	Creates *OPTIMIZED* xISO's from an FTP server.

*	Extracts both optimized xISO and non-optimized (normal) xISO files to
    either the local filesystem or to a directory on an FTP server.

*	Massive optimizations to the decoding algorithm.

*	Many compatibility bug fixes to the underlying FTP library.

*	Currently runs as a command-line tool on Linux, MacOS-X, and FreeBSD.

*	100% open source software which uses *NO* Microsoft code whatsoever

---- TO USE ----

Read the readme.txt for the 1.0-1.4 versions (below), or just run extract-xiso
on the command line for help text.  Please note that I *CANNOT* provide
technical support for this software to people who do not know how to use a
command line (there simply isn't enough time in the day), but please do send bug
reports or feature requests to the email above.


May 10, 2003

---- OLD README'S ----

This is extract-xiso v1.4 by in <in@fishtank.com>

Hey, it's a new version!

First, read the readme for version 1.1 to get an idea of what the program does:


This is extract-xiso v1.1 by in <in@fishtank.com>

This tool will extract an xdvdfs (xbox iso) image into the current directory,
unless the -d <directory> option is given, in which case it will first change to
the specified directory and then extract.

The top level directory for any extracted xiso will be the name of the iso image
minus any (case-insensitive) '.iso' extension.

Passing the -q option (for quiet) will suppress any output.  Passing the -l
option (for list) will list the contents of the image but not extract.

Any number of iso files may be specified on the command line for extraction. Run
the extract-xiso command with no parameters for help text.

Currently there are three versions:

For darwin/MacOS-X, there is a dynamically linked binary called 'extract-xiso'.

For linux there are two versions, a dynamically linked ELF binary which should
run with libc6 called 'extract-xiso', and a statically linked binary called
'extract-xiso-static' which you should use if you get runtime errors (unresolved
symbols and so on) when you try to run the dynamically linked version.

Finally, if you unzip these files and they won't execute, you might try setting
the execute bit(s) on the file with a command like this from your shell prompt
(represented below by unix:~$):

unix:~$ chmod a+rx extract-xiso


in - March 11, 2003

README.TXT for version 1.4:

v1.4 adds support for FreeBSD and an optimization to the runtime memory usage.


v1.3 is a maintenance release only--fixed a critical bug in the offset
calculation that was causing a core dump on a few xiso's.  Should work fine on
all xiso's now.


Before we get going, let me first say to everyone, don't you *DARE* send me an
email until you've *at least* read this file in its entirety.  I wrote it to
help you, so check it out.

That having been said, I'll outline the new features/changes and then I'll have
a section for newbies who have questions.

New features for version 1.2:

extract-xiso now supports direct-to-ftp-server extraction.  This is a real boon
for those of you who, like me, are really lazy.  The new switches are:

-f <ftp_server>

Specifying -f and then a hostname or IP address will cause extract-xiso to
connect to the supplied server name as the target of the extraction.

-u <user name> -p <password>

Since you probably have your ftp server set up to use a username and password,
you can specify these options to set those values.

-d <directory>

This option used to set the directory to extract to if you were inclined to
extract to someplace besides the current directory.  It still does this in
normal "extract to local filesystem" mode, but if extract-xiso is running in
upload (-f <ftp_server>) context it will change to the directory on the remote
server prior to uploading.  You'll pretty much want to use this switch whenever
you're using ftp.  Please note that in no case will extract-xiso try and create
the directory specified here.  I put this in as a safety measure because I
thought it was a good idea ;-)

Other than these changes, there isn't anything new other than a few bug fixes
and some optimizations to how it traverses the directory structure.  Things that
would probably bore you to tears, honestly :)

Now a few words about emailing me!

My email address is in here for those people that are interested in the

1)  Requesting new features 2)  Reporting bugs 3)  Asking development-related
questions 4)  Telling me how much you like the program

I *DO NOT* have time to answer technical support questions.  If you think this
is *just* the program you've been looking for, but you don't know how to operate
a unix command line, please *DO NOT* waste my time asking me how to use this
program.  I'm sure there are numerous book stores in your area which have
beginner books on Unix and I know there are thousands (millions?) of web sites
dedicated to the topic.  Please help yourself to some of this information, I
assure you it will be worth your time.

Now, since I have received several emails asking the same question ("HOW DO I
USE THIS?") I'll give you the best answer I can:


First, this will be targeted at MacOS X users, I'll assume you kids with linux
boxes know what you're doing...

Second, I'm going to assume you know nothing about unix here so pardon me if any
of this is redundant.

Third, I'll also assume you're using an xiso image of public domain software, I
don't/can't/won't condone software piracy, I'm sure you understand.

Fourth, I'll assume you've downloaded the stuffit file and extracted it to your


You first need to make sure the extract-xiso file itself is executable.  It
should be if you extract the archive with stuffit, but to make sure, open the
terminal and type:

cd ~/Desktop/macos-x

This will change to the folder on your Desktop that the extract-xiso file is in.

Now type:

ls -l extract-xiso

You should see that the file is executable (it'll have 'x' characters in the
permission string, as in:

-rwxr-xr-x    1 in       staff         21k Mar 14 15:05 extract-xiso*

If it doesn't have any x's, type:

chmod a+x extract_xiso

That'll make it executable (if you want, you can type this command anyway just
to make sure, it won't hurt anything).

Next, copy the file you want to extract to your Desktop.  You can do that in the
Finder.  Just move it to your Desktop from wherever it is now.

Now go back to your open Terminal window which has ~/Desktop/macos-x as the
current directory and type:

./extract-xiso ~/Desktop/file.iso

That's it!  You should see a bunch of files extract and when you click on your
Desktop you'll see a new folder with your files in it.

Now, let's say you wanted to extract directly to a ftp server of some sort... 
Here is how that might work:

Let's say you have an ftp server running at, for which your username
is "xbox" and your password is "xbox", and you also have an xiso file called
"my_files.iso".  Let's further surmise that your ftp server has a /f/ directory
which you want to upload the contents of the xiso to.  You would then type
something like this on your command line:

extract-xiso -f -u xbox -p xbox -d /f my_files.iso

And away it would go.  Now for those of you who are *really* new to this, and
who are intending to upload to an ftp server which uses some sort of MS-DOS-like
directory nomenclature (like EvoX for instance ;-), don't worry about
backslashes versus forward slashes, just use a leading forward slash, convert
the backslashes to forward slashes, and omit the colons.

So if the path looks like it should be F:\ or F:\GAMES\ or somesuch, you'll just
use (for the -d argument, remember??) /f/ (or /f) and /f/games/ (or /f/games)
respectively.  Got it?

Until next time,

March 30, 2003