mirror of
https://github.com/fadden/nulib2.git
synced 2024-11-16 09:07:10 +00:00
e65d752c36
Updated API with type changes. Added notes about Unicode. Looks like Expression Web 4 did a bunch of touch-ups.
175 lines
9.7 KiB
HTML
175 lines
9.7 KiB
HTML
|
|
<html>
|
|
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
|
<meta http-equiv="Content-Language" content="en-us">
|
|
<title>NuLib Home Page</title>
|
|
<meta name="GENERATOR" content="Microsoft FrontPage 12.0">
|
|
<meta name="ProgId" content="FrontPage.Editor.Document">
|
|
<meta name="Microsoft Border" content>
|
|
|
|
<meta name="description"
|
|
content="Home page for NuLib, NuLib2, NufxLib, ShrinkIt, and NuFX (SHK) archives">
|
|
<meta name="keywords"
|
|
content="nulib, nulib2, nufxlib, shk, sdk, bxy, bse, shrinkit, nufx, apple, apple2, emulator">
|
|
</head>
|
|
|
|
<body bgcolor="#FFFFFF" text="#000000">
|
|
<h1 align="center">NuLib Home Page</h1>
|
|
<p align="center"><u><b>Shortcuts</b></u><br>
|
|
go to the <a href="downloads/index.htm">downloads</a> area<br>
|
|
read the <a href="nulib2-manual.htm"> NuLib2 manual</a><br>
|
|
see the <a href="nufxlibapi.htm">NufxLib library API</a> documentation<br>
|
|
<a href="bugs.htm">report a bug</a> in NufxLib or NuLib2<br>
|
|
check <a href="library/index.htm">the library</a> for old programs and misc docs</p>
|
|
<p> </p>
|
|
<p>This is the home page for NuLib, NuLib2, NufxLib, and various items related
|
|
to ShrinkIt and NuFX archives.</p>
|
|
<p> </p>
|
|
<h2>What is NuLib?</h2>
|
|
<p>NuLib is a disk and file archive program, similar in principle to PKZIP. Instead of ZIP
|
|
archives, it manipulates NuFX archives, which are usually identified with
|
|
".SHK", ".SDK", or ".BXY".</p>
|
|
<p>The ".SHK" file extension is derived from ShrinkIt, the de facto
|
|
archiving standard for Apple II computers. Both NuFX and ShrinkIt were developed by Andy Nicholas,
|
|
and were initially released in January of 1989.</p>
|
|
<p>In mid-1989, while a sophomore in college, I started playing around
|
|
with the file format. My goal was to write a simple program that could
|
|
list the contents of a NuFX file. I had recently finished my first class
|
|
on C programming, and wanted a small project to play around with. I never
|
|
intended to go any further with it than just being able to list files.</p>
|
|
<p>Three name changes (NuView to NuARC to CShrink to NuLib) and more than three
|
|
years later, NuLib was a full-featured archiver, and the code had finally settled down to where it could be left
|
|
alone. Except for a major overhaul by Devin Reade in late 1996, NuLib
|
|
hasn't changed much since.</p>
|
|
<h2>What is NuLib2?</h2>
|
|
<p>NuLib was functional, but had a number of flaws. It couldn't handle
|
|
resource forks, it was clumsy to use with BXY (ShrinkIt wrapped in Binary II)
|
|
archives, it used more memory than it needed to, and some features -- notably
|
|
the archive integrity test -- were entirely broken. Due to generally poor
|
|
architecture, it was difficult to fix problems and add features.</p>
|
|
<p>NuLib2 is a replacement for NuLib. It does pretty much everything the
|
|
original NuLib did, and adds a number of new features. NuLib2 is
|
|
distributed as source code, under the terms of the BSD License.</p>
|
|
<p>The <a href="nulib2-manual.htm">NuLib2 manual</a> has a quick comparison of
|
|
the two programs.</p>
|
|
|
|
<p>One additional "feature" of NuLib2: it was built on top of NufxLib.</p>
|
|
<h2>What is NufxLib?</h2>
|
|
<p>NufxLib is a NuFX file archive manipulation library. Unlike most other
|
|
compression library products, NufxLib goes beyond extracting and listing files.
|
|
Full support for additions, deletions, and renaming of archived files is
|
|
supported, with a transaction-oriented interface for maximum efficiency and
|
|
reliability.</p>
|
|
<p>A thorough description of the library's features and interface is available <a href="nufxlibapi.htm">here</a>.
|
|
NufxLib is distributed as source code under the terms of the BSD License.</p>
|
|
<p>Possible uses for NufxLib:</p>
|
|
<ul>
|
|
<li>Command-line applications like NuLib2.</li>
|
|
<li>GUI applications like <a href="http://www.faddensoft.com/ciderpress/">CiderPress</a>,
|
|
which can isolate ShrinkIt code in a DLL.</li>
|
|
<li>Automatic handling of .SHK archives in Apple II emulators and 2IMG
|
|
converters.</li>
|
|
<li>Possible inclusion of NuFX support in mainstream applications like WinZip.</li>
|
|
<li>Embedded applications, such as a filesystem driver that transparently
|
|
unpacks NuFX archives (a la "zipfolders").</li>
|
|
</ul>
|
|
<h2>Why did I do this?</h2>
|
|
<p>In late 1997, I cranked up my Apple IIgs for the first time in a long
|
|
while. It failed to boot. The old 100MB hard drive had seized up
|
|
from "stiction". A friend of mine and I managed to resurrect
|
|
that drive and a second 80MB hard drive that had also seized up, but it was
|
|
clear the drives' days were numbered.</p>
|
|
<p>I replaced the old ones with a new 2GB drive, which was the smallest I could
|
|
find in retail stores at the time. It occurred to me then that it would be
|
|
useful, as well as prudent, to have a complete file archive of the contents of
|
|
my hard drive. GS/ShrinkIt was capable of constructing such a thing, but
|
|
couldn't extract from it because the archive was too large. YankIt and NuLib could do the extraction, but
|
|
were too clumsy to be useful.</p>
|
|
<p>I resolved to write a program that could handle these archives. I
|
|
thought it would be best to write it as a Win32 GUI application. However,
|
|
I also wanted a better version of NuLib for UNIX. The NuLib sources are a
|
|
pile of dung, so adding the features I wanted would be most easily accomplished
|
|
by rewriting the whole thing from scratch.</p>
|
|
<p>Around the middle of 1998, I started fleshing out the API for something I
|
|
called "NufxLib". The library would do all the hard work for
|
|
both command line and GUI applications, and perhaps would be embedded into Apple
|
|
II emulators as well, allowing seamless access to ShrinkIt-compressed disk
|
|
images.</p>
|
|
<p>For the next 1.5 years, I would occasionally pick up the project and then
|
|
leave it alone for weeks at a time. This continued until I left a big
|
|
company for a small startup, and knew that my free time was about to evaporate
|
|
entirely. I decided to finish up what I could and make it available.
|
|
Version 1.0 was released in May of 2000.</p>
|
|
<p>In December of 2002, I decided it was time to learn how to write Windows
|
|
software. Learning a new system is easier when you're working with
|
|
something you know, so I decided to use NufxLib as the foundation of a Win32
|
|
application. The result, CiderPress, is available from
|
|
<a href="https://github.com/fadden/ciderpress">github</a>.</p>
|
|
<h2>Visible Changes in v1.1</h2>
|
|
<p>New stuff in NufxLib v1.1:</p>
|
|
<ul>
|
|
<li>Support for SQueeze and LZC compression. NufxLib now fully supports
|
|
all compression formats described in the NuFX specification.</li>
|
|
<li>Support for zlib "deflate" compression and libbz2 BWT
|
|
compression as extensions to the
|
|
NuFX standard.</li>
|
|
<li>Compression code may be disabled to reduce the size of the library.
|
|
A new "feature test" interface allows applications to determine
|
|
which methods are supported.</li>
|
|
<li>The "launder" program has been updated to allow selection of the
|
|
compression format to convert to. ("Launder" converts all
|
|
files and disks in an archive from one compression format to another.)</li>
|
|
</ul>
|
|
<p>New stuff in NuLib2 v1.1:</p>
|
|
<ul>
|
|
<li>Support for listing, testing, and extracting files from Binary II archives.</li>
|
|
<li>New "-z" flag to use "deflate" or "bzip2".</li>
|
|
<li>Extended help output with "-h" command.</li>
|
|
</ul>
|
|
<h2>Visible Changes in v2.0</h2>
|
|
<p>Version 2.0 is actually a rather small release. Some changes in NufxLib broke
|
|
binary compatibility, so it was necessary to increment the major version.</p>
|
|
<p>New stuff in NufxLib v2.0:</p>
|
|
<ul>
|
|
<li>Can be built as a Windows DLL.</li>
|
|
<li>NufxLib no longer tries to free memory allocated by the application (a
|
|
callback is used instead).</li>
|
|
<li>A high-ASCII text stripper is now available (useful for DOS text files and
|
|
Merlin 8 source code).</li>
|
|
</ul>
|
|
<p>New stuff in NuLib2 v2.0:</p>
|
|
<ul>
|
|
<li>Filename comparisons are now case-insensitive.</li>
|
|
<li>Can be built with NufxLib in a DLL.</li>
|
|
<li>Changed handling of reserved names like "AUX" so that the
|
|
original names are better preserved. This creates filenames with
|
|
"%00" in them, which could confuse older versions of NuLib2 (e.g.
|
|
"nulib2 -ae %00aux" will not work well in v1.x).</li>
|
|
<li>Files are now added with ':' as the pathname separator, regardless of
|
|
OS. Win32 handling now recognizes both '/' and '\' as path separators.</li>
|
|
<li>Disk images extracted with "-ee" now have ".PO" add to
|
|
their filenames. This should make it easier to load them in an Apple
|
|
II emulator.</li>
|
|
</ul>
|
|
<h2>Visible Changes in v3.0</h2>
|
|
<p>Version 3.0 was primarily a code refresh, updating the code for about 8 years
|
|
of progress in compilers and operating systems. The Windows and Mac OS X
|
|
builds were fixed, and proper handling of Mac OS Roman filenames was added to
|
|
Linux and Mac OS X. The version was bumped because of possibly
|
|
incompatible API changes.</p>
|
|
<p>A new test, "test-names", was added to check Unicode filename handling.</p>
|
|
<h2>Future Directions</h2>
|
|
<p>The code appears to be stable, so I'm going to leave it alone for a while.
|
|
If you're interested in developing applications with NufxLib, send a message to
|
|
fadden -at- fadden.com.</p>
|
|
<hr>
|
|
<p>NuLib, NuLib2, and NufxLib were written by <a href="http://www.fadden.com/">Andy
|
|
McFadden</a>. Please see the documentation for each product to
|
|
see a list of contributors.</p>
|
|
|
|
</body>
|
|
|
|
</html>
|