mirror of
https://github.com/fadden/ciderpress.git
synced 2024-11-22 05:31:24 +00:00
Update the ReadMe files
This ports the contents of ReadMe.htm to Markdown, splitting the Linux information out into a separate file. Specific instructions for building the Linux utilities are now included.
This commit is contained in:
parent
29e64011e1
commit
205e3003f8
68
README-linux.md
Normal file
68
README-linux.md
Normal file
@ -0,0 +1,68 @@
|
||||
CiderPress Linux Utilities
|
||||
==========================
|
||||
|
||||
CiderPress is a Windows app, but the code for accessing NuFX (ShrinkIt)
|
||||
archives and disk images can be built as libraries on Linux and used
|
||||
from applications. A few samples are provided. Most are really just
|
||||
API demos, but they may come in handy.
|
||||
|
||||
You need to build NufxLib, the diskimg library, and then the samples.
|
||||
|
||||
Build Instructions
|
||||
------------------
|
||||
|
||||
1. Configure and build NufxLib library
|
||||
|
||||
cd nufxlib
|
||||
./configure
|
||||
make
|
||||
|
||||
2. build diskimg library
|
||||
|
||||
cd ../diskimg
|
||||
make
|
||||
|
||||
3. build libhfs library
|
||||
|
||||
cd libhfs
|
||||
make
|
||||
|
||||
4. build samples
|
||||
|
||||
cd ../../linux
|
||||
make
|
||||
|
||||
The build system could use some work.
|
||||
|
||||
|
||||
Sample Programs
|
||||
---------------
|
||||
|
||||
The current sample programs are:
|
||||
|
||||
`getfile disk-image filename` --
|
||||
Extract a file from a disk image The file is written to stdout.
|
||||
|
||||
`makedisk {dos|prodos|pascal} size image-filename.po file1 ...` --
|
||||
Create a new disk image, with the specified size and format, and copy the
|
||||
specified files onto it. The NON file type is used.
|
||||
|
||||
`mdc file1 ...` --
|
||||
This is a Linux port of the MDC utility that ships with CiderPress.
|
||||
It recursively scans all files and directories specified, displaying
|
||||
the contents of any disk images it finds.
|
||||
|
||||
|
||||
### Bonus Programs ###
|
||||
|
||||
`iconv infile outfile` --
|
||||
Convert an image from one format to another. This was used for testing.
|
||||
|
||||
`packddd infile outfile` --
|
||||
The DDD code was originally developed under Linux. This code is here
|
||||
for historical reasons.
|
||||
|
||||
`sstasm part1 part2` --
|
||||
The SST re-assembly code was originally developed under Linux. The code
|
||||
is here for historical reasons.
|
||||
|
210
README.md
210
README.md
@ -1,10 +1,208 @@
|
||||
UNDER CONSTRUCTION
|
||||
CiderPress
|
||||
==========
|
||||
|
||||
I'm in the process of updating CiderPress to work with newer tools (VS 2013) and operating systems.
|
||||
A Windows utility for managing Apple II file archives and disk images.
|
||||
|
||||
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.
|
||||
|
||||
- - -
|
||||
|
||||
**UNDER CONSTRUCTION**
|
||||
|
||||
I'm in the process of updating CiderPress to work with newer tools (VS
|
||||
2013) and operating systems.
|
||||
|
||||
Current status:
|
||||
- Win32 main application properly executes basic functions. Still some things missing. Not well tested.
|
||||
- Win32 main application properly executes basic functions. Not well tested.
|
||||
- MDC application seems to work; not well tested.
|
||||
- Linux code doesn't compile.
|
||||
- The web documentation has been moved to github (see the gh-pages branch) and is
|
||||
available from http://a2ciderpress.com/.
|
||||
- Linux code seems to work; not well tested.
|
||||
- The web documentation has been moved to github (see the gh-pages branch)
|
||||
and is available from http://a2ciderpress.com/.
|
||||
|
||||
- - -
|
||||
|
||||
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).
|
||||
|
||||
The basic classes, defined in DiskImg.h, are:
|
||||
|
||||
- DiskImg. This represents a single disk image, which may have sub-images.
|
||||
Operations on a DiskImg are roughly equivalent to a device driver:
|
||||
you can read and write blocks, detect image formats, and create new
|
||||
images.
|
||||
- DiskFS. Paired with a DiskImg, this is roughly equivalent to
|
||||
a GS/OS FST (FileSystem Translator). You can perform file operations
|
||||
like rename and delete, format disks, see how much space is available,
|
||||
and search for sub-volumes.
|
||||
- A2File. Represents a file on a DiskFS. This holds the file's name,
|
||||
attributes, track/sector or block lists, and provides a call to open
|
||||
a file.
|
||||
- A2FileDescr. Represents an open file. You can read or write data.
|
||||
Sub-classes are defined in DiskImgDetail.h. Most applications won't need
|
||||
to access this header file. Each Apple II filesystem defines sub-classes
|
||||
of DiskFS, A2File, and A2FileDescr.
|
||||
|
||||
In an ideal world, the code would mimic the GS/OS file operations.
|
||||
In practice, CiderPress didn't need the full range of capabilities,
|
||||
so the functions have some basic limitations:
|
||||
|
||||
- On ProDOS and HFS, you can only open one fork at a time. This allowed me to use simpler data structures.
|
||||
- Files are expected to be written in one large chunk. This reduced the complexity of the task enormously, because there's so much less that can go wrong.
|
||||
|
||||
Some things that could be improved:
|
||||
|
||||
- The overall structure of the filesystem handlers evolved over time. There is some amount of redundancy that could be factored out.
|
||||
- The API, especially in DiskImg, could probably be simplified.
|
||||
|
||||
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.
|
||||
|
||||
|
313
ReadMe.htm
313
ReadMe.htm
@ -1,313 +0,0 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
||||
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
|
||||
<meta name="ProgId" content="FrontPage.Editor.Document">
|
||||
<title>CiderPress Source README</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>CiderPress Source README</h1>
|
||||
Release notes for v3.0.0<br>
|
||||
Last updated: 25-Mar-2007
|
||||
|
||||
<h2>Contents:</h2>
|
||||
<ul>
|
||||
<li><a href="#intro">What's Ciderpress?</a>
|
||||
<li><a href="#build">Building the Sources</a>
|
||||
<li><a href="#notes">Source Notes</a>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<h2><a name="intro">What's CiderPress?</a></h2>
|
||||
<p>CiderPress is a Windows utility for manipulating Apple II disk images
|
||||
and file archives. It supports all major disk and archive formats used
|
||||
on the Apple II and by Apple II emulators.
|
||||
<p>CiderPress was sold by faddenSoft, LLC as a shareware product for about four
|
||||
years, starting in March 2003.
|
||||
|
||||
|
||||
<h3>Why Bother?</h3>
|
||||
|
||||
<p>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!".
|
||||
|
||||
<p>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.
|
||||
|
||||
<p>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.
|
||||
|
||||
<p>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).
|
||||
|
||||
<p>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.
|
||||
|
||||
<p>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".</p>
|
||||
|
||||
<h3>License</h3>
|
||||
|
||||
<p>The source code to CiderPress is being made available under the BSD license:</p>
|
||||
|
||||
<blockquote><code>
|
||||
Copyright (c) 2007, FaddenSoft, LLC<br>
|
||||
All rights reserved.
|
||||
|
||||
<p>Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
<ul>
|
||||
<li> Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
<li> Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
<li> Neither the name of FaddenSoft, LLC nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
</ul>
|
||||
<p>THIS SOFTWARE IS PROVIDED BY FaddenSoft, LLC ``AS IS'' AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL FaddenSoft, LLC BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
</code></blockquote>
|
||||
CiderPress requires three other libraries, all of which are included as either
|
||||
source or binaries:
|
||||
<ul>
|
||||
<li>NufxLib, also available under the BSD license.
|
||||
<li>Zlib, available under the Zlib license.
|
||||
<li>libhfs, available under the GPL license.
|
||||
</ul>
|
||||
<p>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.</p>
|
||||
<p>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).</p>
|
||||
|
||||
|
||||
<hr>
|
||||
<h2><a name="build">Building the Sources</a></h2>
|
||||
|
||||
<p>How to build your own copy of CiderPress.
|
||||
|
||||
<h3>Windows</h3>
|
||||
<p>The sources are distributed with the necessary project/solution files for
|
||||
Microsoft Visual Studio 6.0 and Microsoft Visual Studio 2003. All you
|
||||
really need is the C++ compiler. The free or student editions of the
|
||||
compilers will probably work.
|
||||
<p>I usually work on CiderPress in Visual C++ 6.0,
|
||||
and use that when building for distribution. I chose to stick with 6.0 for
|
||||
CiderPress because you need an additional MSVC DLL when you build with
|
||||
2003. Also, the newer tools cause the newer file selection dialogs to be
|
||||
used, and the custom dialog code gets all wonky.</p>
|
||||
|
||||
|
||||
<p>In 6.0, you need to select "app" as the build target (Build->Set
|
||||
active configuration), and hit F7. This will build everything except MDC,
|
||||
which you can then build by selecting "mdc" and hitting F7. You
|
||||
can also configure a batch build. In 2003 just select "build
|
||||
solution". The necessary prebuilt libraries should be there for both
|
||||
"debug" and "release" builds. (You can tell how it has
|
||||
been built by looking at the version string in the About box.)</p>
|
||||
|
||||
|
||||
<p>When the build completes, the necessary DLLs are copied around so you can
|
||||
execute the binary by launching it within Visual Studio (hit F5). You will
|
||||
get a warning about not being able to find the NiftyList data file unless you
|
||||
copy that from "DIST" into the app source directory.</p>
|
||||
|
||||
|
||||
<p>The distribution comes with prebuilt versions of NufxLib2 and zlib in DLL
|
||||
form. If you like, you can download and compile your own.</p>
|
||||
|
||||
|
||||
<p>There are two things you can't create with the standard tools:</p>
|
||||
|
||||
|
||||
<ul>
|
||||
<li>The help text was created with HelpMatic Pro. The source file is in a
|
||||
proprietary format. It should probably be converted to HTML Help.</li>
|
||||
<li>The installation packages are created with DeployMaster. The
|
||||
".deploy" file specifies how the package is built. </li>
|
||||
</ul>
|
||||
<p>Compiled help files are included, so you can still generate a new version of
|
||||
CiderPress even if you can't update the help. You don't strictly need the installer either, though it is
|
||||
quite handy, and the uninstaller will clean up the registry entries CiderPress
|
||||
creates.</p>
|
||||
<h3>Linux</h3>
|
||||
<p>The "linux" directory has a few command-line utilities and a simple
|
||||
makefile. It will build the diskimg and HFS libraries, then the sample utilities:</p>
|
||||
|
||||
|
||||
<ul>
|
||||
<li><code>getfile disk-image filename</code> -- extract a file from a disk
|
||||
image. The file is written to stdout.</li>
|
||||
<li><code>makedisk {dos|prodos|pascal} size image-filename.po file1 ...</code>
|
||||
-- create a new disk image, with the specified size and format, and copy the
|
||||
specified files onto it.</li>
|
||||
<li><code>mdc file1 ...</code> -- this is equivalent to the MDC application
|
||||
for Windows. It recursively scans all files and directories specified,
|
||||
displaying the contents of any disk images it finds.</li>
|
||||
</ul>
|
||||
<p>This are mostly intended for testing and illustration of the interfaces, but
|
||||
they can be useful as well. Some other code is also provided:</p>
|
||||
<ul>
|
||||
<li><code>iconv infile outfile</code> -- convert an image from one format to
|
||||
another. This was used for testing.</li>
|
||||
<li><code>packddd infile outfile</code> -- the DDD code was originally
|
||||
developed under Linux. This code is here for historical reasons.</li>
|
||||
<li><code>sstasm part1 part2</code> -- the SST re-assembly code was originally
|
||||
developed under Linux. The code is here for historical reasons.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>The "prebuilt" directory has a pre-built copy of NufxLib, so you
|
||||
don't have to build your own.</p>
|
||||
<p>If you're planning to hack on this stuff, use "make depend" before
|
||||
"make" to fill in the dependencies.</p>
|
||||
|
||||
|
||||
<hr>
|
||||
<h2><a name="notes">Source Notes</a></h2>
|
||||
|
||||
<p>Some notes on what you'll find in the various directories.
|
||||
|
||||
<h3>Main Application</h3>
|
||||
|
||||
<p>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.
|
||||
|
||||
<p>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.
|
||||
|
||||
<p>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.
|
||||
|
||||
|
||||
<h3>MDC Application</h3>
|
||||
|
||||
<p>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.
|
||||
|
||||
|
||||
<h3>DiskImg Library</h3>
|
||||
|
||||
<p>This library provides access to disk images. It automatically handles a
|
||||
wide variety of formats.
|
||||
|
||||
<p>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).
|
||||
|
||||
<p>The basic classes, defined in DiskImg.h, are:
|
||||
<ul>
|
||||
<li>DiskImg. This represents a single disk image, which may have
|
||||
sub-images. Operations on a DiskImg are roughly equivalent to a device
|
||||
driver: you can read and write blocks, detect image formats, and create new
|
||||
images.</li>
|
||||
<li>DiskFS. Paired with a DiskImg, this is roughly equivalent to a GS/OS
|
||||
FST (FileSystem Translator). You can perform file operations like
|
||||
rename and delete, format disks, see how much space is available, and search
|
||||
for sub-volumes.</li>
|
||||
<li>A2File. Represents a file on a DiskFS. This holds the file's
|
||||
name, attributes, track/sector or block lists, and provides a call to open a
|
||||
file.</li>
|
||||
<li>A2FileDescr. Represents an open file. You can read or write
|
||||
data.</li>
|
||||
</ul>
|
||||
<p>Sub-classes are defined in DiskImgDetail.h. Most applications won't
|
||||
need to access this header file. Each Apple II filesystem defines
|
||||
sub-classes of DiskFS, A2File, and A2FileDescr.</p>
|
||||
|
||||
<p>In an ideal world, the code would mimic the GS/OS file operations. In
|
||||
practice, CiderPress didn't need the full range of capabilities, so the
|
||||
functions have some basic limitations:
|
||||
<ul>
|
||||
<li>On ProDOS and HFS, you can only open one fork at a time. This allowed me
|
||||
to use simpler data structures.
|
||||
<li>Files are expected to be written in one large chunk. This reduced the
|
||||
complexity of the task enormously, because there's so much less that can
|
||||
go wrong.
|
||||
</ul>
|
||||
<p>Some things that can be improved:
|
||||
<ul>
|
||||
<li>The overall structure of the filesystem handlers evolved over time. There
|
||||
is some amount of redundancy that could be factored out.
|
||||
<li>The API, especially in DiskImg, could probably be simplified.
|
||||
</ul>
|
||||
|
||||
|
||||
<p>The library depends on NufxLib and zlib for access to compressed images.</p>
|
||||
|
||||
|
||||
<h3>Reformat Library</h3>
|
||||
<p>This is probably the most "fun" component of CiderPress. It converts Apple II files
|
||||
to more easily accessible Windows equivalents.
|
||||
|
||||
<p>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.
|
||||
|
||||
<p>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.
|
||||
|
||||
<p>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.<p>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.
|
||||
|
||||
|
||||
|
||||
<h3>Util Library</h3>
|
||||
|
||||
<p>Miscellaneous utility functions.
|
||||
|
||||
<p>For a good time, look at SelectFilesDialog.cpp.
|
||||
|
||||
<p>To enable debug logging for one of the applications, define _DEBUG_LOG in
|
||||
MyDebug.h in this library. You will see "_DEBUG_LOG" in the version string
|
||||
in the About box when this is defined. The log is written to C:\cplog.txt.
|
||||
An existing log file will be appended to if the previous log was written to
|
||||
less than 8 hours ago.</p>
|
||||
|
||||
<hr>
|
||||
<p>Enjoy!</p>
|
||||
<address>Andy McFadden</address>
|
||||
</body>
|
||||
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user