It appears that some programs, notably Copy ][+ and the GS/OS FST,
expect that the first block of a sparse file will always be
allocated, even if it's just 512 zeroes. I've only seen this fail
in cases where the first entry in the master index block of a "tree"
file is zero, because the first 128KB are sparse, but rumor has it
that the issue can affect "sapling" files as well.
This changes CiderPress to work the way ProDOS does: always allocate
a block to hold the first 512 bytes of the file. The only exception
to this is a file that is nothing but zeroes (perhaps populated by
creating a file and setting its EOF to something large), which can
be stored as a seedling.
(for issues #15 and #49)
This updates the project to use the VS2019 toolchain (v142). Note
this breaks WinXP compatibility.
The MFC and VC runtime DLLs have been updated from v120 to v140.
The program version has been updated to v4.1.0-d1.
The ProDOS code was assuming that the volume directory was 4 blocks
long. Some disks, such as the ProDOS 2.4.2 distribution disk, only
use the first two blocks. CiderPress now scans the volume directory
to determine the actual length.
Fixes issue #32.
32-bit * 32-bit = 32-bit, so disk images with partitions whose size
exceeded the capacity of a 32-bit int were coming out wrong.
Updated version to 4.0.3-a1.
When initially opened in Visual Studio 2015 Community Edition, the
project was updated to use the v140_xp toolset. When the program
was run under WinXP it complained about a missing runtime DLL. When
the DLL was provided, it complained about another one (with a
slightly strange name). So I reverted the tools to v120_xp, i.e.
Visual Studio 2013. (I don't know if this works because the tools
are included with VS2015, or because I have VS2013 installed and it
managed to find them.)
Whatever the case, it now builds for me with either IDE, and seems
to work fine on Windows XP, but I'd like to figure out why the XP
build isn't working with the v140_xp tools.
Fix some %ld message in log messages, and update the Linux sample
code to match recent changes in NufxLib and DiskImgLib.
Also, bump MDC version to 3.0.0 to match Windows version.
Changed the two IsWin9x() functions to always return false.
Eventually we'll want to roll this up, removing the Win9x branch
of the code that called these.
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.
For some reason there was a "minimum version" with no "subsystem".
I'm not really sure what this is all about, but all the other
projects have this value, and it seems happier now.
The Gutenberg_Jr1_f1.dsk image wasn't recognized, so I fiddled with
the code a bit. Still doesn't look quite right, and I don't really
know anything about Gutenberg disks, so I'm leaving the new version
disabled for the moment.
Many updates to format strings, largely as a result of changing
various "long" variables to uint32_t.
Fixed the diskimg debug macros for gcc, which requires an extra
"##" to remove the "," when there are no arguments. (Apparently
Visual Studio just strips this away for you.)
Stripped out a couple of dead variables spotted by gcc. Return
the actual error in a couple of HFS file functions.
This changes the Platform Toolset configuration from "Visual Studio
2013 (v120)" to "Visual Studio 2013 - Windows XP (v120_xp)". Without
this change, executables built by VS2013 will not run on WinXP.
To actually run on WinXP, we also need to install the redistributable
msvcr120.dll and mfc120u.dll, both of which are fairly large. The
installation package has more than doubled in size.
At some point we may want to drop WinXP support -- Microsoft declared
end-of-life on April 8 2014 -- but if the only penalty is a 2MB increase
in installer size, we might as well keep supporting WinXP users.
Focusing on the diskimg library this time, which deals with a lot of
filesystem structures that have specific widths.
This is still a bit lax in places, e.g. using "long" for lengths.
Should either specify a bit width or use di_off_t.
Also, added "override" keyword where appropriate.
Also, bumped library version to 5.0.0.
The OpenImage method had an overload that took void*. This turns out
to be a bad idea, because void* matches any pointer type that didn't
match something else. So the WCHAR* filenames were going to the "open
from buffer" method rather than the "open from file" variant.
A less important issue is whether open-from-buffer should take a const
or non-const pointer. If the "readOnly" boolean flag is not set, then
the contents can be altered and const is inappropriate. The best course
seems to be to drop the boolean flag as an argument, and just have two
different methods.
This moves method comments from the .cpp file to the .h file,
where users of the methods can find them. This also makes it
possible for the IDE to show the comments when you mouse-hover over
the method name, though Visual Studio is a bit weak in this regard.
Also, added "override" keywords on overridden methods. Reasonably
current versions of popular compilers seem to support this.
Also, don't have the return type on a separate line in the .cpp file.
The motivation for the practice -- quickly finding a method definition
with "^name" -- is less useful in C++ than C, and modern IDEs provide
more convenient ways to do the same thing.
Also, do some more conversion from unsigned types to uintXX_t.
This commit is primarily for the "app" directory.
Much of what the "reformat" code does involves processing data that is
8, 16, or 32 bits. We want to use size-specific types from stdint.h
(e.g. uint16_t) rather than "unsigned short".
This was a quick pass to replace the various "unsigned" declarations.
More can be done here and elsewhere.
There's probably some value in using the "secure" versions of the
various string functions, but I don't want to deal with it right
now. We won't use them for the stuff that builds under Linux
anyway (diskimg, nufxlib).
This largely eliminates warnings from VC++.
Mostly a bulk conversion of debug messages, primarily with sed:
sed -e 's/\(WMSG[0-9]\)\(.*\)\(\\n"\)/LOGI\2"/'
This removes the '\n' from the end of the log messages, and sets
them all to "info" severity.
We want to prefix each line with file/line and/or a timestamp,
so it doesn't make sense to have a partial line, and there's no
value in embedding the '\n' in every string.
Visual Studio figured out variadic macros around 2005, so we can
finally replace the explicit-arg-count debug log macros.
Also, fixed some include guards.
Also, bumped version to 4.0.0d1.
CiderPress and MDC now compile, and execute far enough to open
their respective "about" boxes, but I doubt they'll do much
more than that.
* Switch from MBCS to UNICODE APIs
Microsoft switched to UTF-16 (by way of UCS-2) a long time ago,
and the support for MBCS seems to be getting phased out. So it's
time to switch to wide strings.
This is a bit awkward for CiderPress because it works with disk
and file archives with 8-bit filenames, and I want NufxLib and
DiskImgLib to continue to work on Linux (which has largely taken
the UTF-8 approach to Unicode). The libraries will continue to
work with 8-bit filenames, with CiderPress/MDC doing the
conversion at the appropriate point.
There were a couple of places where strings from a structure
handed back by one of the libraries were used directly in the UI,
or vice-versa, which is a problem because we have nowhere to
store the result of the conversion. These currently have fixed
place-holder "xyzzy" strings.
All UI strings are now wide.
Various format strings now use "%ls" and "%hs" to explicitly
specify wide and narrow. This doesn't play well with gcc, so
only the Windows-specific parts use those.
* Various updates to vcxproj files
The project-file conversion had some cruft that is now largely
gone. The build now has a common output directory for the EXEs
and libraries, avoiding the old post-build copy steps.
* Added zlib 1.2.8 and nufxlib 2.2.2 source snapshots
The old "prebuilts" directory is now gone. The libraries are now
built as part of building the apps.
I added a minimal set of files for zlib, and a full set for nufxlib.
The Linux-specific nufxlib goodies are included for the benefit of
the Linux utilities, which are currently broken (don't build).
* Replace symbols used for include guards
Symbols with a leading "__" are reserved.
This updates all source files to use spaces instead of tabs for
indentation. It also normalizes the end-of-line markers to be
Windows-style CRLF, and ensures that all files end with EOL.
No substantive changes were made; "diff -w" is empty.
This updates the project files for Visual Studio 2013, and removes
the old Visual Studio 6 (1998) project files. The update tool had
a number of complaints (see UpgradeLog.htm) that may need to be
addressed.
Also, replaced .cvsignore with .gitignore.
Visual Studio reports 1886 build errors, nearly all of them due to
the switch from MBCS to Unicode. The former is no longer
supported "out of the box", and its use is discouraged, so we're
going to bite the bullet and use wide characters in the UI.