Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
/*
|
|
|
|
* NuFX archive manipulation library
|
|
|
|
* Copyright (C) 2000-2007 by Andy McFadden, All Rights Reserved.
|
|
|
|
* This is free software; you can redistribute it and/or modify it under the
|
|
|
|
* terms of the BSD License, see the file COPYING-LIB.
|
|
|
|
*
|
|
|
|
* Expand a thread from an archive.
|
|
|
|
*/
|
|
|
|
#include "NufxLibPriv.h"
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* "Expand" an uncompressed thread.
|
|
|
|
*/
|
2015-01-04 19:29:51 +00:00
|
|
|
static NuError Nu_ExpandUncompressed(NuArchive* pArchive,
|
|
|
|
const NuRecord* pRecord, const NuThread* pThread, FILE* infp,
|
|
|
|
NuFunnel* pFunnel, uint16_t* pCrc)
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
{
|
|
|
|
NuError err;
|
2015-01-04 19:29:51 +00:00
|
|
|
/*uint8_t* buffer = NULL;*/
|
|
|
|
uint32_t count, getsize;
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
|
2015-01-04 19:29:51 +00:00
|
|
|
Assert(pArchive != NULL);
|
|
|
|
Assert(pThread != NULL);
|
|
|
|
Assert(infp != NULL);
|
|
|
|
Assert(pFunnel != NULL);
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
|
|
|
|
/* doesn't have to be same size as funnel, but it's not a bad idea */
|
|
|
|
/*buffer = Nu_Malloc(pArchive, kNuFunnelBufSize);*/
|
|
|
|
/*BailAlloc(buffer);*/
|
|
|
|
err = Nu_AllocCompressionBufferIFN(pArchive);
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
/* quick assert for bad archive that should have been caught earlier */
|
|
|
|
/* (filename threads are uncompressed, but compThreadEOF is buf len) */
|
|
|
|
if (pThread->thThreadClass == kNuThreadClassData)
|
|
|
|
Assert(pThread->actualThreadEOF == pThread->thCompThreadEOF);
|
|
|
|
|
|
|
|
count = pThread->actualThreadEOF;
|
|
|
|
|
|
|
|
while (count) {
|
|
|
|
getsize = (count > kNuGenCompBufSize) ? kNuGenCompBufSize : count;
|
|
|
|
|
|
|
|
err = Nu_FRead(infp, pArchive->compBuf, getsize);
|
|
|
|
BailError(err);
|
2015-01-04 19:29:51 +00:00
|
|
|
if (pCrc != NULL)
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
*pCrc = Nu_CalcCRC16(*pCrc, pArchive->compBuf, getsize);
|
|
|
|
err = Nu_FunnelWrite(pArchive, pFunnel, pArchive->compBuf, getsize);
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
count -= getsize;
|
|
|
|
}
|
|
|
|
|
|
|
|
err = Nu_FunnelFlush(pArchive, pFunnel);
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
bail:
|
|
|
|
/*Nu_Free(pArchive, buffer);*/
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Copy the "raw" data out of the thread. Unlike the preceeding function,
|
|
|
|
* this reads up to "thCompThreadEOF", and doesn't even try to compute a CRC.
|
|
|
|
*/
|
2015-01-04 19:29:51 +00:00
|
|
|
static NuError Nu_ExpandRaw(NuArchive* pArchive, const NuThread* pThread,
|
|
|
|
FILE* infp, NuFunnel* pFunnel)
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
{
|
|
|
|
NuError err;
|
2015-01-04 19:29:51 +00:00
|
|
|
/*uint8_t* buffer = NULL;*/
|
|
|
|
uint32_t count, getsize;
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
|
2015-01-04 19:29:51 +00:00
|
|
|
Assert(pArchive != NULL);
|
|
|
|
Assert(pThread != NULL);
|
|
|
|
Assert(infp != NULL);
|
|
|
|
Assert(pFunnel != NULL);
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
|
|
|
|
/* doesn't have to be same size as funnel, but it's not a bad idea */
|
|
|
|
/*buffer = Nu_Malloc(pArchive, kNuFunnelBufSize);*/
|
|
|
|
/*BailAlloc(buffer);*/
|
|
|
|
err = Nu_AllocCompressionBufferIFN(pArchive);
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
count = pThread->thCompThreadEOF;
|
|
|
|
|
|
|
|
while (count) {
|
|
|
|
getsize = (count > kNuGenCompBufSize) ? kNuGenCompBufSize : count;
|
|
|
|
|
|
|
|
err = Nu_FRead(infp, pArchive->compBuf, getsize);
|
|
|
|
BailError(err);
|
|
|
|
err = Nu_FunnelWrite(pArchive, pFunnel, pArchive->compBuf, getsize);
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
count -= getsize;
|
|
|
|
}
|
|
|
|
|
|
|
|
err = Nu_FunnelFlush(pArchive, pFunnel);
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
bail:
|
|
|
|
/*Nu_Free(pArchive, buffer);*/
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Expand a thread from "infp" to "pFunnel", using the compression
|
|
|
|
* and stream length specified by "pThread".
|
|
|
|
*/
|
2015-01-04 19:29:51 +00:00
|
|
|
NuError Nu_ExpandStream(NuArchive* pArchive, const NuRecord* pRecord,
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
const NuThread* pThread, FILE* infp, NuFunnel* pFunnel)
|
|
|
|
{
|
|
|
|
NuError err = kNuErrNone;
|
2015-01-04 19:29:51 +00:00
|
|
|
uint16_t calcCrc;
|
|
|
|
uint16_t* pCalcCrc;
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
|
|
|
|
if (!pThread->thThreadEOF && !pThread->thCompThreadEOF) {
|
|
|
|
/* somebody stored an empty file! */
|
|
|
|
goto done;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* A brief history of the "threadCRC" field in the thread header:
|
|
|
|
* record versions 0 and 1 didn't use the threadCRC field
|
|
|
|
* record version 2 put the CRC of the compressed data in threadCRC
|
|
|
|
* record version 3 put the CRC of the uncompressed data in threadCRC
|
|
|
|
*
|
|
|
|
* P8 ShrinkIt uses v1, GSHK uses v3. If something ever shipped with
|
|
|
|
* v2, it didn't last long enough to leave an impression, so I'm not
|
|
|
|
* going to support it. BTW, P8 ShrinkIt always uses LZW/1, which
|
|
|
|
* puts a CRC in the compressed stream. Your uncompressed data is,
|
|
|
|
* unfortunately, unprotected before v3.
|
|
|
|
*/
|
|
|
|
calcCrc = kNuInitialThreadCRC;
|
2015-01-04 19:29:51 +00:00
|
|
|
pCalcCrc = NULL;
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
if (Nu_ThreadHasCRC(pRecord->recVersionNumber, NuGetThreadID(pThread)) &&
|
|
|
|
!pArchive->valIgnoreCRC)
|
|
|
|
{
|
|
|
|
pCalcCrc = &calcCrc;
|
|
|
|
}
|
|
|
|
|
|
|
|
err = Nu_ProgressDataExpandPrep(pArchive, pFunnel, pThread);
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* If we're not expanding the data, use a simple copier.
|
|
|
|
*/
|
|
|
|
if (!Nu_FunnelGetDoExpand(pFunnel)) {
|
|
|
|
Nu_FunnelSetProgressState(pFunnel, kNuProgressCopying);
|
|
|
|
err = Nu_ExpandRaw(pArchive, pThread, infp, pFunnel);
|
|
|
|
BailError(err);
|
|
|
|
goto done;
|
|
|
|
}
|
|
|
|
|
|
|
|
Nu_FunnelSetProgressState(pFunnel, kNuProgressExpanding);
|
|
|
|
switch (pThread->thThreadFormat) {
|
|
|
|
case kNuThreadFormatUncompressed:
|
|
|
|
Nu_FunnelSetProgressState(pFunnel, kNuProgressCopying);
|
|
|
|
err = Nu_ExpandUncompressed(pArchive, pRecord, pThread, infp, pFunnel,
|
|
|
|
pCalcCrc);
|
|
|
|
break;
|
|
|
|
#ifdef ENABLE_SQ
|
|
|
|
case kNuThreadFormatHuffmanSQ:
|
|
|
|
err = Nu_ExpandHuffmanSQ(pArchive, pRecord, pThread, infp, pFunnel,
|
|
|
|
pCalcCrc);
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
#ifdef ENABLE_LZW
|
|
|
|
case kNuThreadFormatLZW1:
|
|
|
|
case kNuThreadFormatLZW2:
|
|
|
|
err = Nu_ExpandLZW(pArchive, pRecord, pThread, infp, pFunnel, pCalcCrc);
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
#ifdef ENABLE_LZC
|
|
|
|
case kNuThreadFormatLZC12:
|
|
|
|
case kNuThreadFormatLZC16:
|
|
|
|
err = Nu_ExpandLZC(pArchive, pRecord, pThread, infp, pFunnel, pCalcCrc);
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
#ifdef ENABLE_DEFLATE
|
|
|
|
case kNuThreadFormatDeflate:
|
|
|
|
err = Nu_ExpandDeflate(pArchive, pRecord, pThread, infp, pFunnel,
|
|
|
|
pCalcCrc);
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
#ifdef ENABLE_BZIP2
|
|
|
|
case kNuThreadFormatBzip2:
|
|
|
|
err = Nu_ExpandBzip2(pArchive, pRecord, pThread, infp, pFunnel,
|
|
|
|
pCalcCrc);
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
default:
|
|
|
|
err = kNuErrBadFormat;
|
|
|
|
Nu_ReportError(NU_BLOB, err,
|
|
|
|
"compression format %u not supported", pThread->thThreadFormat);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
err = Nu_FunnelFlush(pArchive, pFunnel);
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* If we have a CRC to check, check it.
|
|
|
|
*/
|
2015-01-04 19:29:51 +00:00
|
|
|
if (pCalcCrc != NULL) {
|
Large set of changes to restore CiderPress build.
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.
2014-11-10 23:32:55 +00:00
|
|
|
if (calcCrc != pThread->thThreadCRC) {
|
|
|
|
if (!Nu_ShouldIgnoreBadCRC(pArchive, pRecord, kNuErrBadThreadCRC)) {
|
|
|
|
err = kNuErrBadDataCRC;
|
|
|
|
Nu_ReportError(NU_BLOB, err, "expected 0x%04x, got 0x%04x",
|
|
|
|
pThread->thThreadCRC, calcCrc);
|
|
|
|
goto bail;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
DBUG(("--- thread CRCs match\n"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
done:
|
|
|
|
/* make sure we send a final "success" progress message at 100% */
|
|
|
|
(void) Nu_FunnelSetProgressState(pFunnel, kNuProgressDone);
|
|
|
|
err = Nu_FunnelSendProgressUpdate(pArchive, pFunnel);
|
|
|
|
BailError(err);
|
|
|
|
|
|
|
|
bail:
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|