Dec 252017
Extract and run a file archived with ZOO archival program.
File LOOZ210.ZIP from The Programmer’s Corner in
Category Utilities for DOS and Windows Machines
Extract and run a file archived with ZOO archival program.
File Name File Size Zip Size Zip Type
LOOZ.DOC 13682 4747 deflated
LOOZ.EXE 9670 6035 deflated

Download File LOOZ210.ZIP Here

Contents of the LOOZ.DOC file

Looz 2.1 -- Ooz with List
(and Execute)
Zoo Extractor/Lister
Rahul Dhesi

Looz 2.1 is a Zoo archive extractor/lister/tester for computer systems
running MS-DOS version 2.x or greater. IBM-compatibility is not a

Looz 2.1 does not recognize all the advanced features available in current
Zoo archives, such as long filenames and directory names. All extracted files
go into the current directory. It can, however, extract and list all archives
created by all currently-existing versions of Zoo.

Looz can also give the directory listing of one or more Zoo archives
(optionally showing attached comments) or test their integrity.

Looz 2.1 is different from version 1.10 in the following ways: (a) It can
execute archived files; (b) It can present a fast columnized listing of the
contents of a zoo archive.

A detailed feature summary of Looz 2.1 is near the end of this document.


The command format is:

looz {lxt}[cpxf] archive[.zoo] [ file ... ] [ parameter ... ]

Choose one of the command characters `l', `x', or `t', and optionally a
modifier `c', `p', or `x'. These characters are case-sensitive. Looz ignores
any inappropriate modifier. The valid combinations are:

l list contents of archive(s)
lc list contents of archive(s) and show attached comments
lf list contents of archive(s) in fast multicolumn format
x extract file(s) from archive(s)
xp extract file(s) from archive(s), pipe to standard output
xx extract and execute file from archive
t test integrity of archive(s)

The usual wildcard characters are accepted in both the archive name and in the
specified filenames: ? stands for any one character and * stands for any
sequence of zero or more characters. In addition, any filespec preceded by
the character ^ excludes matching files. The ^ exclusion character overrides
any other matches. (Note: ^ works only in filenames, not in the archive
name. Also, ^ is ineffective when looking for files to execute via the xx

Wildcard matching is case-insensitive.

Files extracted by `x' always go into the current directory; however, if an
extracted file is being executed, it is extracted directly into main memory
and never stored on disk.

The information listed by `l' is: The original length in bytes of the
archived file; the percentage by which its size decreased due to compression
(also known as "CF" or "compression factor"); its current size as stored in
the archive; its date and timestamps, preserved when archived; the character
"C" if the file has an attached comment; the character "D" if it is a deleted
file; and an MS-DOS format filename.

If appropriate, a "GRAND TOTAL" line summarizes statistics for all archives
and files that were listed.

When the xx command is used, the archive name and the file name may be
followed by parameters to be supplied to the program being executed.


Looz can extract and execute archived COM and EXE programs. BAT programs are
not currently supported. A file to be executed must not be longer than 65535


When executing an archived program, Looz itself needs about 60 kilobytes to
perform the extraction, and enough additional memory to hold the extracted
program. Thus if the executable program is 30 kilobytes long, there must be
about 90 kilobytes available.

However, before giving control to the program being executed, Looz removes
itself from memory. Thus there is no space penalty for executing an archived
file via Looz.

Looz extracts the program to be executed directly into memory. Thus there is
no need to create any temporary disk files at any time. Looz will therefore
execute archived programs with all disks write-protected.


When executing archived files, I/O redirection can be used normally. For

looz xx \bin\run sdir \bin\*.* >>dir.lst

will append the output of the command to the file dir.lst, exactly as would
the direct execution of sdir via the command:

sdir \bin\*.* >>dir.lst

Pipes can also be used normally. For example:

looz xx \bin\run sdir | list /s

The above command will extract and execute from the archive
\bin\run.zoo, and feed its output to In this case, must be
found on disk. However, if is also in the zoo archive, the following
pipeline will work:

looz xx \bin\run sdir | looz xx \bin\run list /s


A good way of avoiding disk fragmentation is to combine many small executable
programs into a single zoo archive. Programs that are used only occasionally
can be stored in compressed form. Programs that are frequently used should be
stored uncompressed so they may be executed without any uncompression delay.

It is also possible to put executable files into multiple zoo archives, and to
specify the archive name with a wildcard. Looz will search all matching
archive names for the specified executable file, and execute the first
matching file found. There may, however, be a delay of a second or so while
Looz searches for the archives on disk.

Another good way of using Looz to execute archived files is via a CED
synonym. CED is a public domain program written by Chris Dunford and is
available from bulletin boards. (Note that while Looz will run on any MS-DOS
system, CED requires an IBM-compatible computer system.) With CED installed
on your system, create a CED synonym by giving a command as follows:

ced syn run looz xx \bin\run

This creates a new command "run" that is equivalent to typing
"looz xx \bin\run". Executable programs may now be put in the zoo archive
\bin\run.zoo. Now any program in this archive can be extracted and executed
by giving the command "run program". For example, if \bin\run.zoo contains
the program, you can now run it by typing "run sdir" at the MS-DOS
prompt. Parameters can be supplied as usual, so typing "run sdir \doc\*.*"
will execute the archived copy of exactly as if you had typed
"sdir \doc\*.*" to MS-DOS.


Looz assumes default file extensions as follows.

If no file extension is specified for the name of the archive, an extension of
.zoo is assumed.

No assumptions are made about the extension of a file to be extracted, with
one exception: If the xx command is being used to extract and execute an
archived file, Looz looks for files with extensions .com and .exe and executes
the first file found whose name matches. Thus, for example, the command

looz xx \bin\programs *

searches the archive \bin\programs.zoo for any file matching *.com or *.exe
executes the first such file found. Similarly the command

looz xx \bin\programs show

extracts and executes a file called or show.exe. If the archive
contains both and show.exe, the first one encountered is executed.

A program name specified for execution must not be typed with an extension.
Thus "looz xx \bin\programs" will not work.


The command

looz l *r *a?b* *x* z*y ^*.c

will list all archives with filenames ending with `r' and with the extension
".zoo". Within these archives, the only files that will be listed are:
(a) those with names containing the characters `a' and `b' separated by any
one character; (b) those with names containing the character `x'; (c) those
with names beginning with `z' and ending with `y'. Note that since the dot is
not special, the filespec "*x*" will match the names "xyz.doc", "yxz", and
"doc.yzx". Regardless of the above, however, the pattern "^*.c" excludes all
files matching "*.c" so they will not be listed; thus "xyz.c" is excluded by
"^*.c", even though it matches "*x*".

The command

looz lc *r *a?b* *x* z*y ^*.c

is identical to the above but it will also show any comments attached to
archived files.

The command

looz lf *r *a?b* *x* z*y ^*.c

is identical to the above but it will list filenames in five columns,
allowing many more filenames to fit on a screen.

The command

looz t /new/vooz*2

will test the integrity of all Zoo archives in directory "/new" that have
names beginning with the characters `vooz' and ending with the character `2',
and with the default extension ".zoo". Matching archives might be
"voozexe2.zoo" and "voozsrc2.zoo".

The command

looz x /zoo/*l* *.c *doc ^looz.c ^looz.doc

will extract all "*.c" and "*doc" files (except "looz.c" and "looz.doc") from
all archives in the directory "/zoo" whose names contain the character `l',
with a default extension of ".zoo" assumed in the archive names.

The command

looz xp /zoo/*l* *.c *doc ^looz.c ^looz.doc

is identical to the above except that extracted data are piped to standard
output (normally the screen) and may be redirected to a file or device (e.g.
the printer) with the MS-DOS redirection characters ">" or ">>".

The command

looz xx /bin/r* *dir* *.doc

will search all zoo archives matching the name /bin/r*.zoo, and look in these
for all files matching *dir*.com and *dir*.exe, and execute the first such
file. Regardless of how many archive names and file names match the supplied
pattern, the xx command will only cause the execution of the first file found
with a matching name. The string "*.doc" will be supplied as an argument to
the executed program so that, for example, the result might be equivalent to
typing "sdir *.doc" at the MS-DOS prompt.

The command

looz xx run sdir /a *.doc

will search the archive run.zoo for a file called or sdir.exe. If
found, this file will be executed, with the parameters /a and *.doc being
supplied to it. The effect will the identical to typing

sdir /a *.doc

at the MS-DOS prompt.


The table below lists differences and similarities between Ooz 1.30, Looz
1.01, and Looz 2.1. (Symbols: "n/a" means "not applicable"; "[1]" means
"see item 1 in Notes below".)

Ooz 1.30 Looz 1.01 Looz 2.1
-------- --------- ---------

size on disk 10K 10K 10K

memory required 50K 96K 60K
for extraction

extract archive yes yes yes

execute archived filenonoyes

deleted file

extract no yes [1] yes [1]
deleted files

preserve file timestamp yes yes yes
when extracting

pipe extracted data no yes yes
to standard output

list archive no yes yes

multicolumn listing n/a no yes

flag deleted files n/a yes yes

flag files that have n/a yes yes

list comments n/a yes yes

test archive no yes yes

wildcards in no yes yes
archive name

wildcards in yes yes yes

character ranges yes no no
in filenames

file exclusion with ^ no yes yes [2]

dot is special
in wildcards yes no [3] no [3]

can aborting with control C no [4] yes yes
leave behind a partially-
extracted file?

corrects filename syntax no yes yes [5]
so files with invalid
names can be extracted


1. Deleted files are also extracted. If an archived file exists occurs
twice, perhaps both in deleted and not deleted form, answer "yes" or "no" to
the "Overwrite?" prompt according as you want the second or the first
occurrence of the file.

2. Filename exclusion does not apply to a filename specified for execution.

3. The dot IS special in wildcards in the archive name but is not special in
wildcards in filenames for selection of archived files.

4. Except on rare occasions.

5. Looz 1.01 incorrectly transformed an underscore in a filename into an "r"
during extraction. Later versions handle underscores normally, like any other
legal filename character.


Looz's wildcard handling is not identical to that of MS-DOS. The dot is not
special in filenames, so `*' will match all archived files but '*.*' will

Please double-check to make sure the correct files are matched.


Thanks are due to Michael E. Devore for hearing my request for information
about how to use the relocation table in EXE files and responding with a
nicely-written assembly language program. I wrote my relocation routine in C,
but his program was very useful in helping me figure out how to perform the

Looz 2.1 was written using Borland's Turbo C version 1.0 and the Microsoft
Macro Assembler version 4.00.

-- Rahul Dhesi 1987/08/08

 December 25, 2017  Add comments

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>