CiderPress Apple II archive utility for Windows
Go to file
Andy McFadden b79498da50 Improve filename handling when adding files
Most of this change is a conversion of the old FileDetails struct
into a new LocalFileDetails class.  The new class keeps the
members private, and keeps the Unicode and MOR representations of
the string separate.

The NuFX and DiskImg libraries don't support UTF-16 filenames,
so we stil can't add files with non-CP-1252 filenames, but we're
a step closer.

Also, update NufxLib with a couple of fixes from the main project.

Also, fix handling of "%00" when adding files.

Also, mark most of the A2FileDOS fields private.  Not sure why
they weren't.
2015-01-08 14:16:20 -08:00
DIST Specify a custom class name for main frame 2014-12-17 08:55:20 -08:00
app Improve filename handling when adding files 2015-01-08 14:16:20 -08:00
diskimg Improve filename handling when adding files 2015-01-08 14:16:20 -08:00
linux gcc/linux updates 2014-12-11 16:36:40 -08:00
mdc Update NufxLib snapshot to v3.0.0d2 2015-01-04 11:29:51 -08:00
nufxlib Improve filename handling when adding files 2015-01-08 14:16:20 -08:00
reformat Tweak AWGS/Teach output 2014-12-18 18:35:30 -08:00
util Improve filename handling when adding files 2015-01-08 14:16:20 -08:00
zlib WinXP compatibility update 2014-12-10 11:57:41 -08:00
.gitignore Move file association handling back into the app 2014-12-15 21:57:09 -08:00
CP.sln Large set of changes to restore CiderPress build. 2014-11-16 21:01:53 -08:00
LICENSE.txt CP/M: added support for Microsoft Softcard "data only" disks. 2009-01-03 19:02:13 +00:00
README-linux.md Update the ReadMe files 2014-12-11 20:14:31 -08:00
README.md Update README.md 2014-12-16 15:55:16 -08:00

README.md

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 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.

Building for Linux

The NuFX archive and disk image manipulation libraries can be used from Linux. See the Linux README.

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.

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 and zlib.

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