195 lines
7.7 KiB
Plaintext
195 lines
7.7 KiB
Plaintext
YankIt v1.2 README
|
|
Copyright (C) 1992 by Andy McFadden
|
|
All Rights Reserved
|
|
|
|
This program is Freeware - distribute freely, do not sell
|
|
_______________________________________________________________________________
|
|
|
|
Usage: yankit t[vs]|x[vs]|i[vs] archive.shk [file1 file2 ...]
|
|
|
|
Options:
|
|
t - just get a table of contents on the archive
|
|
x - extract files
|
|
i - integrity check; looks like it's extracting, but doesn't write anything
|
|
|
|
v - verbose mode; combine with one of the first three
|
|
f - force overwrite of existing files (doesn't prompt)
|
|
s - don't use GS/OS sessions
|
|
|
|
|
|
If "archive.shk" is "-", then YankIt will read from stdin instead of a file.
|
|
|
|
v1.2 changes:
|
|
- (very slightly) more speed
|
|
- misc tweaks
|
|
|
|
v1.1 changes:
|
|
- new 'f' flag
|
|
- fixes two bugs in LZW uncompression
|
|
|
|
v1.0 features:
|
|
- supports uncompressed, LZW-I, and LZW-II storage
|
|
- extracts forked files
|
|
- works under APW/Orca, Gno, and ProSel-16 shells
|
|
- handles other compression methods and non-file archives (e.g. disk archives)
|
|
in a reasonable manner
|
|
- silently ignores Binary II headers, so it will extract .BXY files
|
|
- "usually" faster than GS/ShrinkIt (see benchmarks for discussion)
|
|
- uses only two pages of DP space, making it ideal for running in the
|
|
background
|
|
|
|
_______________________________________________________________________________
|
|
|
|
Info
|
|
|
|
The "read from stdin" feature allows you to do things like:
|
|
|
|
cat foo.shk | yankit tv -
|
|
or
|
|
yankit tv - < foo.shk
|
|
|
|
under Gno to get a listing of the files in foo.shk (why you'd want to do this
|
|
is beyond me, but I imagine situations will arise).
|
|
|
|
** NOTE: the current version of the GNO shell doesn't appear to support
|
|
this correctly. YankIt will appear to hang, but is actually trying
|
|
to read from the keyboard. If this happens, just hold down a key
|
|
until it quits (it's trying to read 48 characters). Orca I/O
|
|
redirection appears to work, but supposedly pipes will not because
|
|
they don't work correctly with binary data.
|
|
|
|
YankIt will always prompt you before overwriting existing files. YankIt
|
|
prompts are of the form
|
|
|
|
message (Y/N/Q)? N
|
|
|
|
Pressing 'Y' or 'N' does something appropriate. Pressing RETURN accepts
|
|
the default (which will appear under the cursor; in this case it's 'N').
|
|
Pressing 'Q' or ESCAPE will answer 'N' to the question and then exit the
|
|
program. Note that you don't need to hit RETURN; YankIt (which uses the
|
|
console driver in raw mode) reacts to the first key hit.
|
|
|
|
Other prompts will appear when you try to extract files compressed in a format
|
|
that YankIt doesn't handle (such as UNIX compress), and when you try to
|
|
extract a disk archive. In both cases, you will be given the option of
|
|
ignoring the record or to extracting it into a file. If the problem is the
|
|
compression format, it will be extracted as raw data (which could then be
|
|
passed to a utility like "uncompress").
|
|
|
|
(note: YankIt does not and never will extract a disk archive to a disk. Use
|
|
GSHK or P8 ShrinkIt to do disks.)
|
|
|
|
_______________________________________________________________________________
|
|
|
|
Comparison with NuLib
|
|
|
|
YankIt has features that NuLib doesn't, including:
|
|
- ability to handle resource forks
|
|
- the integrity check actually does something useful (NuLib's doesn't verify
|
|
the CRCs)
|
|
- smaller and MUCH faster (100% assembly)
|
|
|
|
However, NuLib has features like:
|
|
- can create NuFX archives and compress as well as uncompress
|
|
- handles Binary II
|
|
- SQ/USQ uncompression and UNIX 16-bit compression/uncompression
|
|
- variety of display modes
|
|
- lots of other misc features, like the ability to delete files from
|
|
archives, extract based on partial filename matches, and view files
|
|
without having to extract them into a file.
|
|
- available as source code, and very portable
|
|
|
|
YankIt is intended as a quick & dirty way to extract files from archives
|
|
created by ShrinkIt. It is not intended to replace ShrinkIt nor is it a
|
|
prelude to a Super Duper New and Improved compression program. It was
|
|
written primarily with Gno in mind.
|
|
|
|
If you ask me to add a new feature, be prepared to answer the question,
|
|
"why can't you just use GS/ShrinkIt to do that?"
|
|
|
|
_______________________________________________________________________________
|
|
|
|
Some (rather crude) benchmarks (Apple //gs at 2.5MHz, GS/OS 5.0.4, GSHK 1.0.4,
|
|
ZipGS 8/16K, and a development version of YankIt):
|
|
|
|
Moria GS is:
|
|
MORIA 1134 block shell executable
|
|
MORIA.CONFIG 6 block text file
|
|
MORIA.DOC 129 block text file
|
|
MORIA.IIGS.INFO 10 block text file
|
|
|
|
YankIt was timed with "show time; yankit ... ; show time". GS/ShrinkIt was
|
|
timed with a stopwatch. All times should be considered +/- 2 seconds.
|
|
|
|
Unpacking Moria GS packed with LZW-I (368K) from /ram5 to /ram5:
|
|
GS/Shrinkit 1:42 With Zip: 0:51
|
|
YankIt 1:10 0:38
|
|
|
|
Unpacking Moria GS packed with LZW-II (348K) from /ram5 to /ram5:
|
|
GS/ShrinkIt 1:38
|
|
YankIt 1:07
|
|
|
|
Unpacking Moria GS packed with LZW-I (368K) from an InnerDrive to /ram5:
|
|
GS/Shrinkit 1:41 With Zip: 0:50
|
|
YankIt 1:09 0:37
|
|
|
|
(and now the interesting one...)
|
|
Unpacking Moria GS packed with LZW-I (368K) from AppleDisk 3.5" to /ram5:
|
|
GS/Shrinkit 1:49 With Zip: 1:00
|
|
YankIt 1:36 1:05
|
|
|
|
YankIt's uncompress routines are faster than GSHK's, but GSHK will read the
|
|
entire archive into memory if it can instead of grabbing 32K chunks. This
|
|
makes it faster than YankIt when I/O with a slow device is involved (especially
|
|
if that device's I/O causes the processor to slow down to 1MHz temporarily).
|
|
|
|
On the other hand, YankIt's total memory usage is known at load time
|
|
(somewhere in the neighborhood of 80K for buffers and code). It also uses
|
|
very little DP space, and doesn't require any tools that aren't resident
|
|
in ROM. Generally, YankIt is a win when you need to conserve memory and
|
|
you're running off of a fast hard drive (which should be a common situation
|
|
for people using Gno).
|
|
|
|
_______________________________________________________________________________
|
|
|
|
Known bugs/glitches:
|
|
|
|
ShrinkIt has never done the same thing twice when it comes to disk archives.
|
|
Some versions set the uncompressed thread EOF, some set it to an apparently
|
|
meaningless value, some don't set it at all. ShrinkIt v3.03 didn't follow
|
|
the NuFX spec as far as setting the value of storage_type properly. GSHK
|
|
sets the file_sys_id, P8 ShrinkIt doesn't.
|
|
|
|
Rather than try to deal with this in an elegant way, I have settled on dealing
|
|
with it as best I can and just warning you that you may see something like:
|
|
|
|
Name Kind Typ AuxTyp Archived Format Size Un-Length
|
|
------------------- ------ --- ------ ---------------- ------ ---- ---------
|
|
SHELL Disk --- 800k 13-Feb-92 21:38 LZW-II 97% 395264
|
|
|
|
|
|
Note that YankIt does not attempt to convert pathnames to something appropriate
|
|
for the target file system (so don't unpack HFS archives onto ProDOS disks).
|
|
This will likely be fixed with the System 6.0 JudgeName call once the system
|
|
software becomes commonly used.
|
|
|
|
|
|
YankIt and ECP-16 don't get along (I'm using v0.18). I don't know why.
|
|
|
|
_______________________________________________________________________________
|
|
|
|
Bug me at fadden@uts.amdahl.com.
|
|
|
|
NuLib is available (for now) on the OCF disaster cluster: tornado, avalanche,
|
|
plague, monsoon, and headcrash.berkeley.edu via anonymous FTP in pub/Apple2.
|
|
|
|
For the statistically minded, YankIt is about 6000 lines of heavily commented
|
|
65816 assembly. Not a major undertaking, but hardly a trifle.
|
|
|
|
Thanks go to the volunteer guinea^H^H^H^H^H^H^Hbeta testers (you know who
|
|
you are). Special commendation to Jerry Penner, Bug Hunter Extraordinaire,
|
|
for finding a couple of nasty ones.
|
|
|
|
That's all, folks...
|
|
|