mirror of
https://github.com/fadden/ciderpress.git
synced 2024-12-22 05:29:43 +00:00
180 lines
6.9 KiB
Markdown
180 lines
6.9 KiB
Markdown
CiderPress
|
|
==========
|
|
|
|
A Windows utility for managing Apple II file archives and disk images.
|
|
Visit the web site at http://a2ciderpress.com/.
|
|
|
|
CiderPress was initially sold by faddenSoft, LLC as a shareware product,
|
|
starting in March 2003. In March 2007, the program was released as
|
|
open source under the BSD license.
|
|
|
|
Why Bother?
|
|
-----------
|
|
|
|
Back in 2002 I decided it was time to learn how to write an application
|
|
for Microsoft Windows. I had been a professional software engineer for
|
|
many years -- including 2.5 years at Microsoft! -- but had never written
|
|
a Windows program more complex than "Hello, world!".
|
|
|
|
I decided to write a Windows version of GS/ShrinkIt. I had already written
|
|
NufxLib, which handled all of the ShrinkIt stuff, so I could focus on
|
|
writing the Windows user interface code.
|
|
|
|
Somewhere in the early stages of the project, it occurred to me that a
|
|
disk image isn't substantially different from a file archive. They're
|
|
both just collections of files laid out in a well-defined manner. The
|
|
decision to handle disk images as well as ShrinkIt archives seemed like
|
|
a simple improvement at the time. The rest is history.
|
|
|
|
CiderPress has allowed me to explore a variety of interesting
|
|
technologies. It has five different ways of reading a block from physical
|
|
media, depending on your operating system and what sort of device you're
|
|
reading from. I was able to take what I learned from a digital signal
|
|
processing textbook and apply it to a real-world problem (decoding Apple
|
|
II cassette data). It is also my first Shareware product, not to mention
|
|
the initial product of my first small business venture (faddenSoft, LLC).
|
|
|
|
I could have written other things. No doubt they would have made more
|
|
money. CiderPress is something that I find very useful, however, in the
|
|
pursuit of my Apple II hobby.
|
|
|
|
Above all, this has been a labor of love. I have tried to get the details
|
|
right, because in the end it's the little things that mean the difference
|
|
between "good" and merely "good enough".
|
|
|
|
|
|
Source License
|
|
--------------
|
|
|
|
The source code to CiderPress is available under the BSD license. See
|
|
the file [LICENSE.txt](LICENSE.txt) for details.
|
|
|
|
CiderPress requires three other libraries, all of which are included as
|
|
source code:
|
|
|
|
- NufxLib, also available under the BSD license.
|
|
- Zlib, available under the Zlib license.
|
|
- libhfs, available under the GPL license.
|
|
|
|
The license allows you to do a great many things. For example, you could
|
|
take the source code to CiderPress, compile it, and sell it. I'm not sure
|
|
why anyone would buy it, but you're legally allowed to do so, as long as
|
|
you retain the appropriate copyright notice.
|
|
|
|
If you retain libhfs, any changes you make to any part of CiderPress must
|
|
be made available, due to the "viral" nature of the GPL license. If this
|
|
is not acceptable, you can remove HFS disk image support from CiderPress
|
|
(look for "EXCISE_GPL_CODE" in DiskImg.h).
|
|
|
|
|
|
Building the Sources
|
|
--------------------
|
|
|
|
The current version of CiderPress is targeted for Visual Studio 2013,
|
|
using the WinXP compatibility Platform Toolset to allow installation on
|
|
Windows XP systems. You should be able to select Debug or Release and
|
|
just build the entire thing.
|
|
|
|
If you want to use the static analyzer, you will need to change the
|
|
Platform Toolset to straight Visual Studio 2013.
|
|
|
|
A pre-compiled .CHM file, with the help text and pop-up messages,
|
|
is provided. The source files are all included, but generation of the
|
|
.CHM is not part of the build. If you want to update the help files,
|
|
you will need to download the HTML Help Workshop from Microsoft, and use
|
|
that to compile the help project in the app/Help directory.
|
|
|
|
The installer binary is created with [DeployMaster](http://deploymaster.com/).
|
|
|
|
|
|
Building for Linux
|
|
------------------
|
|
|
|
The NuFX archive and disk image manipulation libraries can be used from
|
|
Linux. See the [Linux README](README-linux.md).
|
|
|
|
|
|
Source Notes
|
|
------------
|
|
|
|
Some notes on what you'll find in the various directories.
|
|
|
|
#### Main Application ####
|
|
|
|
This is highly Windows-centric. My goal was to learn how to write a
|
|
Windows application, so I made no pretense at portability. For better
|
|
or worse, I avoided the Visual Studio "wizards" for the dialogs.
|
|
|
|
Much of the user interface text is in the resource file. Much is not,
|
|
especially when it comes to error messages. This will need to be addressed
|
|
if internationalization is attempted.
|
|
|
|
It may be possible to convert this for use with wxWidgets, which uses an
|
|
MFC-like structure, and runs on Mac and Linux as well. The greatest barrier
|
|
to entry is probably the heavy reliance on the Rich Edit control. Despite
|
|
its bug-ridden history, the Rich Edit control allowed me to let Windows
|
|
deal with a lot of text formatting and image display stuff.
|
|
|
|
#### MDC Application ####
|
|
|
|
MDC (Multi-Disk Catalog) was written as a simple demonstration of the
|
|
value of having the DiskImg code in a DLL instead of meshed with the main
|
|
application. There's not much to it, and it hasn't changed substantially
|
|
since it was first written.
|
|
|
|
#### DiskImg Library ####
|
|
|
|
This library provides access to disk images. It automatically handles
|
|
a wide variety of formats.
|
|
|
|
This library can be built under Linux or Windows. One of my key motivations
|
|
for making it work under Linux was the availability of "valgrind". Similar
|
|
tools for Windows usually very expensive or inferior (or both).
|
|
|
|
An overview of the library can be found in the
|
|
[DiskImg README](diskimg/README.md).
|
|
|
|
The library depends on NufxLib and zlib for access to compressed images.
|
|
|
|
#### Reformat Library ####
|
|
|
|
This is probably the most "fun" component of CiderPress. It converts
|
|
Apple II files to more easily accessible Windows equivalents.
|
|
|
|
Start in Reformat.h and ReformatBase.h. There are two basic kinds of
|
|
reformatter: text and graphics. Everything else is a sub-class of one of
|
|
the two basic types.
|
|
|
|
The general idea is to allow the reformatter to decide whether or
|
|
not it is capable of reformatting a file. To this end, the file type
|
|
information and file contents are presented to the "examine" function
|
|
of each reformatter in turn. The level of confidence is specified in a
|
|
range. If it's better than "no", it is presented to the user as an option,
|
|
ordered by the strength of its convictions. If chosen, the "process"
|
|
function is called to convert the data.
|
|
|
|
Bear in mind that reformatters may be disabled from the preferences menu.
|
|
Also, when extracting files for easy access in Windows, the "best"
|
|
reformatter is employed by the extraction code.
|
|
|
|
Most of the code should be portable, though some of it uses the MFC
|
|
CString class. This could probably be altered to use STL strings or plain.
|
|
|
|
#### Util Library ####
|
|
|
|
Miscellaneous utility functions.
|
|
|
|
#### NufxLib and zlib ####
|
|
|
|
These are source snapshots from [NufxLib](http://github.com/fadden/nulib2)
|
|
and [zlib](http://www.zlib.org).
|
|
|
|
#### DIST ####
|
|
|
|
Files used when making a distribution, notably:
|
|
|
|
- the DeployMaster configuration file
|
|
- the license and README files that are included in the installer
|
|
- redistributable Windows runtime libraries (only needed on WinXP?)
|
|
- NiftyList data file
|