From 4c7aee481528e0892d3fb6d9f92b0f88ec27aaa0 Mon Sep 17 00:00:00 2001 From: Andy McFadden Date: Fri, 6 Dec 2002 01:04:20 +0000 Subject: [PATCH] Made a number of changes to allow NufxLib to be used as a Win32 DLL. --- nufxlib-0/Entry.c | 108 ++--- nufxlib-0/Lzc.c | 4 +- nufxlib-0/Makefile.dll | 776 +++++++++++++++++++++++++++++++++ nufxlib-0/Makefile.msc | 14 +- nufxlib-0/NufxLib.h | 159 ++++--- nufxlib-0/README.txt | 21 + nufxlib-0/samples/Makefile.msc | 35 +- 7 files changed, 984 insertions(+), 133 deletions(-) create mode 100755 nufxlib-0/Makefile.dll diff --git a/nufxlib-0/Entry.c b/nufxlib-0/Entry.c index 141f8d4..6b0ba0b 100644 --- a/nufxlib-0/Entry.c +++ b/nufxlib-0/Entry.c @@ -104,7 +104,7 @@ Nu_ValidateNuArchive(const NuArchive* pArchive) * =========================================================================== */ -NuError +NUFXLIB_API NuError NuStreamOpenRO(FILE* infp, NuArchive** ppArchive) { NuError err; @@ -117,7 +117,7 @@ NuStreamOpenRO(FILE* infp, NuArchive** ppArchive) return err; } -NuError +NUFXLIB_API NuError NuContents(NuArchive* pArchive, NuCallback contentFunc) { NuError err; @@ -134,7 +134,7 @@ NuContents(NuArchive* pArchive, NuCallback contentFunc) return err; } -NuError +NUFXLIB_API NuError NuExtract(NuArchive* pArchive) { NuError err; @@ -151,7 +151,7 @@ NuExtract(NuArchive* pArchive) return err; } -NuError +NUFXLIB_API NuError NuTest(NuArchive* pArchive) { NuError err; @@ -175,7 +175,7 @@ NuTest(NuArchive* pArchive) * =========================================================================== */ -NuError +NUFXLIB_API NuError NuOpenRO(const char* filename, NuArchive** ppArchive) { NuError err; @@ -185,7 +185,7 @@ NuOpenRO(const char* filename, NuArchive** ppArchive) return err; } -NuError +NUFXLIB_API NuError NuExtractRecord(NuArchive* pArchive, NuRecordIdx recordIdx) { NuError err; @@ -199,7 +199,7 @@ NuExtractRecord(NuArchive* pArchive, NuRecordIdx recordIdx) return err; } -NuError +NUFXLIB_API NuError NuExtractThread(NuArchive* pArchive, NuThreadIdx threadIdx, NuDataSink* pDataSink) { @@ -214,7 +214,7 @@ NuExtractThread(NuArchive* pArchive, NuThreadIdx threadIdx, return err; } -NuError +NUFXLIB_API NuError NuGetRecord(NuArchive* pArchive, NuRecordIdx recordIdx, const NuRecord** ppRecord) { @@ -229,7 +229,7 @@ NuGetRecord(NuArchive* pArchive, NuRecordIdx recordIdx, return err; } -NuError +NUFXLIB_API NuError NuGetRecordIdxByName(NuArchive* pArchive, const char* name, NuRecordIdx* pRecordIdx) { @@ -244,7 +244,7 @@ NuGetRecordIdxByName(NuArchive* pArchive, const char* name, return err; } -NuError +NUFXLIB_API NuError NuGetRecordIdxByPosition(NuArchive* pArchive, unsigned long position, NuRecordIdx* pRecordIdx) { @@ -266,7 +266,7 @@ NuGetRecordIdxByPosition(NuArchive* pArchive, unsigned long position, * =========================================================================== */ -NuError +NUFXLIB_API NuError NuOpenRW(const char* archivePathname, const char* tmpPathname, unsigned long flags, NuArchive** ppArchive) { @@ -278,7 +278,7 @@ NuOpenRW(const char* archivePathname, const char* tmpPathname, return err; } -NuError +NUFXLIB_API NuError NuFlush(NuArchive* pArchive, long* pStatusFlags) { NuError err; @@ -292,7 +292,7 @@ NuFlush(NuArchive* pArchive, long* pStatusFlags) return err; } -NuError +NUFXLIB_API NuError NuAbort(NuArchive* pArchive) { NuError err; @@ -306,7 +306,7 @@ NuAbort(NuArchive* pArchive) return err; } -NuError +NUFXLIB_API NuError NuAddRecord(NuArchive* pArchive, const NuFileDetails* pFileDetails, NuRecordIdx* pRecordIdx) { @@ -321,7 +321,7 @@ NuAddRecord(NuArchive* pArchive, const NuFileDetails* pFileDetails, return err; } -NuError +NUFXLIB_API NuError NuAddThread(NuArchive* pArchive, NuRecordIdx recordIdx, NuThreadID threadID, NuDataSource* pDataSource, NuThreadIdx* pThreadIdx) { @@ -337,7 +337,7 @@ NuAddThread(NuArchive* pArchive, NuRecordIdx recordIdx, NuThreadID threadID, return err; } -NuError +NUFXLIB_API NuError NuAddFile(NuArchive* pArchive, const char* pathname, const NuFileDetails* pFileDetails, short isFromRsrcFork, NuRecordIdx* pRecordIdx) @@ -354,7 +354,7 @@ NuAddFile(NuArchive* pArchive, const char* pathname, return err; } -NuError +NUFXLIB_API NuError NuRename(NuArchive* pArchive, NuRecordIdx recordIdx, const char* pathname, char fssep) { @@ -370,7 +370,7 @@ NuRename(NuArchive* pArchive, NuRecordIdx recordIdx, const char* pathname, } -NuError +NUFXLIB_API NuError NuSetRecordAttr(NuArchive* pArchive, NuRecordIdx recordIdx, const NuRecordAttr* pRecordAttr) { @@ -385,7 +385,7 @@ NuSetRecordAttr(NuArchive* pArchive, NuRecordIdx recordIdx, return err; } -NuError +NUFXLIB_API NuError NuUpdatePresizedThread(NuArchive* pArchive, NuThreadIdx threadIdx, NuDataSource* pDataSource, long* pMaxLen) { @@ -401,7 +401,7 @@ NuUpdatePresizedThread(NuArchive* pArchive, NuThreadIdx threadIdx, return err; } -NuError +NUFXLIB_API NuError NuDelete(NuArchive* pArchive) { NuError err; @@ -415,7 +415,7 @@ NuDelete(NuArchive* pArchive) return err; } -NuError +NUFXLIB_API NuError NuDeleteRecord(NuArchive* pArchive, NuRecordIdx recordIdx) { NuError err; @@ -429,7 +429,7 @@ NuDeleteRecord(NuArchive* pArchive, NuRecordIdx recordIdx) return err; } -NuError +NUFXLIB_API NuError NuDeleteThread(NuArchive* pArchive, NuThreadIdx threadIdx) { NuError err; @@ -450,7 +450,7 @@ NuDeleteThread(NuArchive* pArchive, NuThreadIdx threadIdx) * =========================================================================== */ -NuError +NUFXLIB_API NuError NuClose(NuArchive* pArchive) { NuError err; @@ -466,7 +466,7 @@ NuClose(NuArchive* pArchive) return err; } -NuError +NUFXLIB_API NuError NuGetMasterHeader(NuArchive* pArchive, const NuMasterHeader** ppMasterHeader) { NuError err; @@ -477,7 +477,7 @@ NuGetMasterHeader(NuArchive* pArchive, const NuMasterHeader** ppMasterHeader) return err; } -NuError +NUFXLIB_API NuError NuGetExtraData(NuArchive* pArchive, void** ppData) { NuError err; @@ -490,7 +490,7 @@ NuGetExtraData(NuArchive* pArchive, void** ppData) return err; } -NuError +NUFXLIB_API NuError NuSetExtraData(NuArchive* pArchive, void* pData) { NuError err; @@ -501,7 +501,7 @@ NuSetExtraData(NuArchive* pArchive, void* pData) return err; } -NuError +NUFXLIB_API NuError NuGetValue(NuArchive* pArchive, NuValueID ident, NuValue* pValue) { NuError err; @@ -512,7 +512,7 @@ NuGetValue(NuArchive* pArchive, NuValueID ident, NuValue* pValue) return err; } -NuError +NUFXLIB_API NuError NuSetValue(NuArchive* pArchive, NuValueID ident, NuValue value) { NuError err; @@ -523,7 +523,7 @@ NuSetValue(NuArchive* pArchive, NuValueID ident, NuValue value) return err; } -NuError +NUFXLIB_API NuError NuGetAttr(NuArchive* pArchive, NuAttrID ident, NuAttr* pAttr) { NuError err; @@ -534,7 +534,7 @@ NuGetAttr(NuArchive* pArchive, NuAttrID ident, NuAttr* pAttr) return err; } -NuError +NUFXLIB_API NuError NuDebugDumpArchive(NuArchive* pArchive) { #if defined(DEBUG_MSGS) @@ -554,7 +554,7 @@ NuDebugDumpArchive(NuArchive* pArchive) * =========================================================================== */ -NuError +NUFXLIB_API NuError NuCreateDataSourceForFile(NuThreadFormat threadFormat, short doClose, unsigned long otherLen, const char* pathname, short isFromRsrcFork, NuDataSource** ppDataSource) @@ -563,7 +563,7 @@ NuCreateDataSourceForFile(NuThreadFormat threadFormat, short doClose, otherLen, pathname, (Boolean)(isFromRsrcFork != 0), ppDataSource); } -NuError +NUFXLIB_API NuError NuCreateDataSourceForFP(NuThreadFormat threadFormat, short doClose, unsigned long otherLen, FILE* fp, long offset, long length, NuDataSource** ppDataSource) @@ -572,7 +572,7 @@ NuCreateDataSourceForFP(NuThreadFormat threadFormat, short doClose, otherLen, fp, offset, length, ppDataSource); } -NuError +NUFXLIB_API NuError NuCreateDataSourceForBuffer(NuThreadFormat threadFormat, short doClose, unsigned long otherLen, const unsigned char* buffer, long offset, long length, NuDataSource** ppDataSource) @@ -581,13 +581,13 @@ NuCreateDataSourceForBuffer(NuThreadFormat threadFormat, short doClose, otherLen, buffer, offset, length, ppDataSource); } -NuError +NUFXLIB_API NuError NuFreeDataSource(NuDataSource* pDataSource) { return Nu_DataSourceFree(pDataSource); } -NuError +NUFXLIB_API NuError NuDataSourceSetRawCrc(NuDataSource* pDataSource, unsigned short crc) { if (pDataSource == nil) @@ -596,7 +596,7 @@ NuDataSourceSetRawCrc(NuDataSource* pDataSource, unsigned short crc) return kNuErrNone; } -NuError +NUFXLIB_API NuError NuCreateDataSinkForFile(short doExpand, NuValue convertEOL, const char* pathname, char fssep, NuDataSink** ppDataSink) { @@ -604,7 +604,7 @@ NuCreateDataSinkForFile(short doExpand, NuValue convertEOL, fssep, ppDataSink); } -NuError +NUFXLIB_API NuError NuCreateDataSinkForFP(short doExpand, NuValue convertEOL, FILE* fp, NuDataSink** ppDataSink) { @@ -612,7 +612,7 @@ NuCreateDataSinkForFP(short doExpand, NuValue convertEOL, FILE* fp, ppDataSink); } -NuError +NUFXLIB_API NuError NuCreateDataSinkForBuffer(short doExpand, NuValue convertEOL, unsigned char* buffer, unsigned long bufLen, NuDataSink** ppDataSink) { @@ -620,13 +620,13 @@ NuCreateDataSinkForBuffer(short doExpand, NuValue convertEOL, bufLen, ppDataSink); } -NuError +NUFXLIB_API NuError NuFreeDataSink(NuDataSink* pDataSink) { return Nu_DataSinkFree(pDataSink); } -NuError +NUFXLIB_API NuError NuDataSinkGetOutCount(NuDataSink* pDataSink, ulong* pOutCount) { if (pDataSink == nil || pOutCount == nil) @@ -643,13 +643,13 @@ NuDataSinkGetOutCount(NuDataSink* pDataSink, ulong* pOutCount) * =========================================================================== */ -const char* +NUFXLIB_API const char* NuStrError(NuError err) { return Nu_StrError(err); } -NuError +NUFXLIB_API NuError NuGetVersion(long* pMajorVersion, long* pMinorVersion, long* pBugVersion, const char** ppBuildDate, const char** ppBuildFlags) { @@ -657,7 +657,7 @@ NuGetVersion(long* pMajorVersion, long* pMinorVersion, long* pBugVersion, ppBuildDate, ppBuildFlags); } -NuError +NUFXLIB_API NuError NuTestFeature(NuFeature feature) { NuError err = kNuErrUnsupFeature; @@ -696,7 +696,7 @@ NuTestFeature(NuFeature feature) return err; } -void +NUFXLIB_API void NuRecordCopyAttr(NuRecordAttr* pRecordAttr, const NuRecord* pRecord) { pRecordAttr->fileSysID = pRecord->recFileSysID; @@ -709,7 +709,7 @@ NuRecordCopyAttr(NuRecordAttr* pRecordAttr, const NuRecord* pRecord) pRecordAttr->archiveWhen = pRecord->recArchiveWhen; } -NuError +NUFXLIB_API NuError NuRecordCopyThreads(const NuRecord* pNuRecord, NuThread** ppThreads) { if (pNuRecord == nil || ppThreads == nil) @@ -727,7 +727,7 @@ NuRecordCopyThreads(const NuRecord* pNuRecord, NuThread** ppThreads) return kNuErrNone; } -unsigned long +NUFXLIB_API unsigned long NuRecordGetNumThreads(const NuRecord* pNuRecord) { if (pNuRecord == nil) @@ -736,7 +736,7 @@ NuRecordGetNumThreads(const NuRecord* pNuRecord) return pNuRecord->recTotalThreads; } -const NuThread* +NUFXLIB_API const NuThread* NuThreadGetByIdx(const NuThread* pNuThread, long idx) { if (pNuThread == nil) @@ -744,7 +744,7 @@ NuThreadGetByIdx(const NuThread* pNuThread, long idx) return &pNuThread[idx]; /* can't range-check here */ } -short +NUFXLIB_API short NuIsPresizedThreadID(NuThreadID threadID) { return Nu_IsPresizedThreadID(threadID); @@ -757,7 +757,7 @@ NuIsPresizedThreadID(NuThreadID threadID) * =========================================================================== */ -NuError +NUFXLIB_API NuError NuSetSelectionFilter(NuArchive* pArchive, NuCallback filterFunc) { NuError err; @@ -770,7 +770,7 @@ NuSetSelectionFilter(NuArchive* pArchive, NuCallback filterFunc) return err; } -NuError +NUFXLIB_API NuError NuSetOutputPathnameFilter(NuArchive* pArchive, NuCallback filterFunc) { NuError err; @@ -783,7 +783,7 @@ NuSetOutputPathnameFilter(NuArchive* pArchive, NuCallback filterFunc) return err; } -NuError +NUFXLIB_API NuError NuSetProgressUpdater(NuArchive* pArchive, NuCallback updateFunc) { NuError err; @@ -796,7 +796,7 @@ NuSetProgressUpdater(NuArchive* pArchive, NuCallback updateFunc) return err; } -NuError +NUFXLIB_API NuError NuSetErrorHandler(NuArchive* pArchive, NuCallback errorFunc) { NuError err; @@ -809,7 +809,7 @@ NuSetErrorHandler(NuArchive* pArchive, NuCallback errorFunc) return err; } -NuError +NUFXLIB_API NuError NuSetErrorMessageHandler(NuArchive* pArchive, NuCallback messageHandlerFunc) { NuError err; @@ -822,7 +822,7 @@ NuSetErrorMessageHandler(NuArchive* pArchive, NuCallback messageHandlerFunc) return err; } -NuError +NUFXLIB_API NuError NuSetGlobalErrorMessageHandler(NuCallback messageHandlerFunc) { /*Assert(!((ulong)messageHandlerFunc % 4));*/ diff --git a/nufxlib-0/Lzc.c b/nufxlib-0/Lzc.c index be5f1b4..68edb91 100644 --- a/nufxlib-0/Lzc.c +++ b/nufxlib-0/Lzc.c @@ -37,7 +37,9 @@ typedef int FLAG; #endif #define CONST const -#define FAR +#ifndef FAR +# define FAR +#endif #define NULLPTR(type) ((type FAR *) NULL) #define ALLOCTYPE void diff --git a/nufxlib-0/Makefile.dll b/nufxlib-0/Makefile.dll new file mode 100755 index 0000000..66d7299 --- /dev/null +++ b/nufxlib-0/Makefile.dll @@ -0,0 +1,776 @@ +# +# Makefile for building nufxlib as a DLL under Visual C++ (tested with 6.0). +# +# Run with "nmake /f Makefile.dll". +# +# To build without debugging info, use "nmake nodebug=1". +# To build with libz, use "nmake libz=1". +# To build with libbz2, use "nmake libbz2=1". +# +# For libz/libbz2, you need to have the appropriate library either +# in this directory or in a standard location that the linker can find +# + +CFG=nufxlib - Win32 Debug +!ifdef NODEBUG +CFG=nufxlib - Win32 Release +!endif + +MY_BUILD_FLAGS= +MY_LIB_FLAGS= +!ifdef LIBZ +MY_BUILD_FLAGS = $(MY_BUILD_FLAGS) /D "ENABLE_DEFLATE" +MY_LIB_FLAGS = zlib.lib $(MY_LIB_FLAGS) +!endif +!ifdef LIBBZ2 +MY_BUILD_FLAGS = $(MY_BUILD_FLAGS) /D "ENABLE_BZIP2" +MY_LIB_FLAGS = libbz2.lib $(MY_LIB_FLAGS) +!endif + + +# Microsoft Developer Studio Generated NMAKE File, Based on nufxlib.dsp +!IF "$(CFG)" == "" +CFG=nufxlib - Win32 Debug +!MESSAGE No configuration specified. Defaulting to nufxlib - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "nufxlib - Win32 Release" && "$(CFG)" != "nufxlib - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "nufxlib.mak" CFG="nufxlib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "nufxlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "nufxlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(CFG)" == "nufxlib - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\Release +# End Custom Macros + +ALL : "$(OUTDIR)\nufxlib.dll" + + +CLEAN : + -@erase "$(INTDIR)\Archive.obj" + -@erase "$(INTDIR)\ArchiveIO.obj" + -@erase "$(INTDIR)\Bzip2.obj" + -@erase "$(INTDIR)\Compress.obj" + -@erase "$(INTDIR)\Crc16.obj" + -@erase "$(INTDIR)\Debug.obj" + -@erase "$(INTDIR)\Deferred.obj" + -@erase "$(INTDIR)\Deflate.obj" + -@erase "$(INTDIR)\Entry.obj" + -@erase "$(INTDIR)\Expand.obj" + -@erase "$(INTDIR)\FileIO.obj" + -@erase "$(INTDIR)\Funnel.obj" + -@erase "$(INTDIR)\Lzc.obj" + -@erase "$(INTDIR)\Lzw.obj" + -@erase "$(INTDIR)\MiscStuff.obj" + -@erase "$(INTDIR)\MiscUtils.obj" + -@erase "$(INTDIR)\Record.obj" + -@erase "$(INTDIR)\SourceSink.obj" + -@erase "$(INTDIR)\Squeeze.obj" + -@erase "$(INTDIR)\Thread.obj" + -@erase "$(INTDIR)\Value.obj" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(INTDIR)\Version.obj" + -@erase "$(OUTDIR)\nufxlib.dll" + -@erase "$(OUTDIR)\nufxlib.exp" + -@erase "$(OUTDIR)\nufxlib.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NUFXLIB_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c $(MY_BUILD_FLAGS) + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +MTL=midl.exe +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 +RSC=rc.exe +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\nufxlib.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib $(MY_LIB_FLAGS) /nologo /dll /incremental:no /pdb:"$(OUTDIR)\nufxlib.pdb" /machine:I386 /out:"$(OUTDIR)\nufxlib.dll" /implib:"$(OUTDIR)\nufxlib.lib" +LINK32_OBJS= \ + "$(INTDIR)\Archive.obj" \ + "$(INTDIR)\ArchiveIO.obj" \ + "$(INTDIR)\Bzip2.obj" \ + "$(INTDIR)\Compress.obj" \ + "$(INTDIR)\Crc16.obj" \ + "$(INTDIR)\Debug.obj" \ + "$(INTDIR)\Deferred.obj" \ + "$(INTDIR)\Deflate.obj" \ + "$(INTDIR)\Entry.obj" \ + "$(INTDIR)\Expand.obj" \ + "$(INTDIR)\FileIO.obj" \ + "$(INTDIR)\Funnel.obj" \ + "$(INTDIR)\Lzc.obj" \ + "$(INTDIR)\Lzw.obj" \ + "$(INTDIR)\MiscStuff.obj" \ + "$(INTDIR)\MiscUtils.obj" \ + "$(INTDIR)\Record.obj" \ + "$(INTDIR)\SourceSink.obj" \ + "$(INTDIR)\Squeeze.obj" \ + "$(INTDIR)\Thread.obj" \ + "$(INTDIR)\Value.obj" \ + "$(INTDIR)\Version.obj" + +"$(OUTDIR)\nufxlib.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +SOURCE="$(InputPath)" +DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep + +ALL : $(DS_POSTBUILD_DEP) + +# Begin Custom Macros +OutDir=.\Release +# End Custom Macros + +$(DS_POSTBUILD_DEP) : "$(OUTDIR)\nufxlib.dll" + copy Release\nufxlib.dll . + copy Release\nufxlib.lib . + echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)" + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + +OUTDIR=.\Debug +INTDIR=.\Debug +# Begin Custom Macros +OutDir=.\Debug +# End Custom Macros + +ALL : "$(OUTDIR)\nufxlib.dll" "$(OUTDIR)\nufxlib.bsc" + + +CLEAN : + -@erase "$(INTDIR)\Archive.obj" + -@erase "$(INTDIR)\Archive.sbr" + -@erase "$(INTDIR)\ArchiveIO.obj" + -@erase "$(INTDIR)\ArchiveIO.sbr" + -@erase "$(INTDIR)\Bzip2.obj" + -@erase "$(INTDIR)\Bzip2.sbr" + -@erase "$(INTDIR)\Compress.obj" + -@erase "$(INTDIR)\Compress.sbr" + -@erase "$(INTDIR)\Crc16.obj" + -@erase "$(INTDIR)\Crc16.sbr" + -@erase "$(INTDIR)\Debug.obj" + -@erase "$(INTDIR)\Debug.sbr" + -@erase "$(INTDIR)\Deferred.obj" + -@erase "$(INTDIR)\Deferred.sbr" + -@erase "$(INTDIR)\Deflate.obj" + -@erase "$(INTDIR)\Deflate.sbr" + -@erase "$(INTDIR)\Entry.obj" + -@erase "$(INTDIR)\Entry.sbr" + -@erase "$(INTDIR)\Expand.obj" + -@erase "$(INTDIR)\Expand.sbr" + -@erase "$(INTDIR)\FileIO.obj" + -@erase "$(INTDIR)\FileIO.sbr" + -@erase "$(INTDIR)\Funnel.obj" + -@erase "$(INTDIR)\Funnel.sbr" + -@erase "$(INTDIR)\Lzc.obj" + -@erase "$(INTDIR)\Lzc.sbr" + -@erase "$(INTDIR)\Lzw.obj" + -@erase "$(INTDIR)\Lzw.sbr" + -@erase "$(INTDIR)\MiscStuff.obj" + -@erase "$(INTDIR)\MiscStuff.sbr" + -@erase "$(INTDIR)\MiscUtils.obj" + -@erase "$(INTDIR)\MiscUtils.sbr" + -@erase "$(INTDIR)\Record.obj" + -@erase "$(INTDIR)\Record.sbr" + -@erase "$(INTDIR)\SourceSink.obj" + -@erase "$(INTDIR)\SourceSink.sbr" + -@erase "$(INTDIR)\Squeeze.obj" + -@erase "$(INTDIR)\Squeeze.sbr" + -@erase "$(INTDIR)\Thread.obj" + -@erase "$(INTDIR)\Thread.sbr" + -@erase "$(INTDIR)\Value.obj" + -@erase "$(INTDIR)\Value.sbr" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(INTDIR)\vc60.pdb" + -@erase "$(INTDIR)\Version.obj" + -@erase "$(INTDIR)\Version.sbr" + -@erase "$(OUTDIR)\nufxlib.bsc" + -@erase "$(OUTDIR)\nufxlib.dll" + -@erase "$(OUTDIR)\nufxlib.exp" + -@erase "$(OUTDIR)\nufxlib.ilk" + -@erase "$(OUTDIR)\nufxlib.lib" + -@erase "$(OUTDIR)\nufxlib.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "NUFXLIB_EXPORTS" /FR"$(INTDIR)\\" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c $(MY_BUILD_FLAGS) + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +MTL=midl.exe +MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 +RSC=rc.exe +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\nufxlib.bsc" +BSC32_SBRS= \ + "$(INTDIR)\Archive.sbr" \ + "$(INTDIR)\ArchiveIO.sbr" \ + "$(INTDIR)\Bzip2.sbr" \ + "$(INTDIR)\Compress.sbr" \ + "$(INTDIR)\Crc16.sbr" \ + "$(INTDIR)\Debug.sbr" \ + "$(INTDIR)\Deferred.sbr" \ + "$(INTDIR)\Deflate.sbr" \ + "$(INTDIR)\Entry.sbr" \ + "$(INTDIR)\Expand.sbr" \ + "$(INTDIR)\FileIO.sbr" \ + "$(INTDIR)\Funnel.sbr" \ + "$(INTDIR)\Lzc.sbr" \ + "$(INTDIR)\Lzw.sbr" \ + "$(INTDIR)\MiscStuff.sbr" \ + "$(INTDIR)\MiscUtils.sbr" \ + "$(INTDIR)\Record.sbr" \ + "$(INTDIR)\SourceSink.sbr" \ + "$(INTDIR)\Squeeze.sbr" \ + "$(INTDIR)\Thread.sbr" \ + "$(INTDIR)\Value.sbr" \ + "$(INTDIR)\Version.sbr" + +"$(OUTDIR)\nufxlib.bsc" : "$(OUTDIR)" $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib $(MY_LIB_FLAGS) /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\nufxlib.pdb" /debug /machine:I386 /out:"$(OUTDIR)\nufxlib.dll" /implib:"$(OUTDIR)\nufxlib.lib" /pdbtype:sept +LINK32_OBJS= \ + "$(INTDIR)\Archive.obj" \ + "$(INTDIR)\ArchiveIO.obj" \ + "$(INTDIR)\Bzip2.obj" \ + "$(INTDIR)\Compress.obj" \ + "$(INTDIR)\Crc16.obj" \ + "$(INTDIR)\Debug.obj" \ + "$(INTDIR)\Deferred.obj" \ + "$(INTDIR)\Deflate.obj" \ + "$(INTDIR)\Entry.obj" \ + "$(INTDIR)\Expand.obj" \ + "$(INTDIR)\FileIO.obj" \ + "$(INTDIR)\Funnel.obj" \ + "$(INTDIR)\Lzc.obj" \ + "$(INTDIR)\Lzw.obj" \ + "$(INTDIR)\MiscStuff.obj" \ + "$(INTDIR)\MiscUtils.obj" \ + "$(INTDIR)\Record.obj" \ + "$(INTDIR)\SourceSink.obj" \ + "$(INTDIR)\Squeeze.obj" \ + "$(INTDIR)\Thread.obj" \ + "$(INTDIR)\Value.obj" \ + "$(INTDIR)\Version.obj" + +"$(OUTDIR)\nufxlib.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +SOURCE="$(InputPath)" +DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep + +ALL : $(DS_POSTBUILD_DEP) + +# Begin Custom Macros +OutDir=.\Debug +# End Custom Macros + +$(DS_POSTBUILD_DEP) : "$(OUTDIR)\nufxlib.dll" "$(OUTDIR)\nufxlib.bsc" + copy Debug\nufxlib.dll . + copy Debug\nufxlib.lib . + echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)" + +!ENDIF + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("nufxlib.dep") +!INCLUDE "nufxlib.dep" +!ELSE +!MESSAGE Warning: cannot find "nufxlib.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "nufxlib - Win32 Release" || "$(CFG)" == "nufxlib - Win32 Debug" +SOURCE="Archive.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Archive.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Archive.obj" "$(INTDIR)\Archive.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="ArchiveIO.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\ArchiveIO.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\ArchiveIO.obj" "$(INTDIR)\ArchiveIO.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Bzip2.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Bzip2.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Bzip2.obj" "$(INTDIR)\Bzip2.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Compress.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Compress.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Compress.obj" "$(INTDIR)\Compress.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Crc16.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Crc16.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Crc16.obj" "$(INTDIR)\Crc16.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Debug.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Debug.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Debug.obj" "$(INTDIR)\Debug.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Deferred.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Deferred.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Deferred.obj" "$(INTDIR)\Deferred.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Deflate.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Deflate.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Deflate.obj" "$(INTDIR)\Deflate.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Entry.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Entry.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Entry.obj" "$(INTDIR)\Entry.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Expand.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Expand.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Expand.obj" "$(INTDIR)\Expand.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="FileIO.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\FileIO.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\FileIO.obj" "$(INTDIR)\FileIO.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Funnel.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Funnel.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Funnel.obj" "$(INTDIR)\Funnel.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Lzc.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Lzc.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Lzc.obj" "$(INTDIR)\Lzc.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Lzw.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Lzw.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Lzw.obj" "$(INTDIR)\Lzw.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="MiscStuff.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\MiscStuff.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\MiscStuff.obj" "$(INTDIR)\MiscStuff.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="MiscUtils.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\MiscUtils.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\MiscUtils.obj" "$(INTDIR)\MiscUtils.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Record.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Record.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Record.obj" "$(INTDIR)\Record.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="SourceSink.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\SourceSink.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\SourceSink.obj" "$(INTDIR)\SourceSink.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Squeeze.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Squeeze.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Squeeze.obj" "$(INTDIR)\Squeeze.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Thread.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Thread.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Thread.obj" "$(INTDIR)\Thread.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Value.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Value.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Value.obj" "$(INTDIR)\Value.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE="Version.c" + +!IF "$(CFG)" == "nufxlib - Win32 Release" + + +"$(INTDIR)\Version.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nufxlib - Win32 Debug" + + +"$(INTDIR)\Version.obj" "$(INTDIR)\Version.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + + +!ENDIF + diff --git a/nufxlib-0/Makefile.msc b/nufxlib-0/Makefile.msc index 9018328..0616c0c 100644 --- a/nufxlib-0/Makefile.msc +++ b/nufxlib-0/Makefile.msc @@ -12,6 +12,10 @@ # in this directory or in a standard location that the compiler can find. # +!ifdef DLL +ERROR -- use makefile.dll to build the DLL +!endif + # Windows magic TARGETOS = BOTH !include @@ -24,10 +28,10 @@ OBJS4 = Squeeze.obj Thread.obj Value.obj Version.obj OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) !ifdef NODEBUG -#OPT = $(cdebug) /D NDEBUG /ML -OPT = $(cdebug) /ML +#OPT = $(cdebug) /D NDEBUG /ML /O2 +OPT = $(cdebug) /ML /O2 !else -OPT = $(cdebug) /MLd +OPT = $(cdebug) /MLd /Od !endif BUILD_FLAGS = /W3 /GX /D "WIN32" @@ -71,8 +75,8 @@ nufxlib.lib: $(OBJS) $(link) -lib /out:$(PRODUCT) $(OBJS) /nologo clean:: - del *.obj - del $(PRODUCT) + -del *.obj + -del $(PRODUCT) Archive.obj: Archive.c NufxLibPriv.h NufxLib.h MiscStuff.h SysDefs.h ArchiveIO.obj: ArchiveIO.c NufxLibPriv.h NufxLib.h MiscStuff.h SysDefs.h diff --git a/nufxlib-0/NufxLib.h b/nufxlib-0/NufxLib.h index d4ca524..c749400 100644 --- a/nufxlib-0/NufxLib.h +++ b/nufxlib-0/NufxLib.h @@ -649,91 +649,119 @@ typedef enum NuFeature { * =========================================================================== */ +/* + * Win32 dll magic. + */ +#if defined(_WIN32) +# include +# if defined(NUFXLIB_EXPORTS) + /* building the NufxLib DLL */ +# define NUFXLIB_API __declspec(dllexport) +# elif defined (NUFXLIB_DLL) + /* building to link against the NufxLib DLL */ +# define NUFXLIB_API __declspec(dllimport) +# else + /* using static libs */ +# define NUFXLIB_API +# endif +#else + /* not using Win32... hooray! */ +# define NUFXLIB_API +#endif + /* streaming and non-streaming read-only interfaces */ -NuError NuStreamOpenRO(FILE* infp, NuArchive** ppArchive); -NuError NuContents(NuArchive* pArchive, NuCallback contentFunc); -NuError NuExtract(NuArchive* pArchive); -NuError NuTest(NuArchive* pArchive); +NUFXLIB_API NuError NuStreamOpenRO(FILE* infp, NuArchive** ppArchive); +NUFXLIB_API NuError NuContents(NuArchive* pArchive, NuCallback contentFunc); +NUFXLIB_API NuError NuExtract(NuArchive* pArchive); +NUFXLIB_API NuError NuTest(NuArchive* pArchive); /* strictly non-streaming read-only interfaces */ -NuError NuOpenRO(const char* archivePathname, NuArchive** ppArchive); -NuError NuExtractRecord(NuArchive* pArchive, NuRecordIdx recordIdx); -NuError NuExtractThread(NuArchive* pArchive, NuThreadIdx threadIdx, +NUFXLIB_API NuError NuOpenRO(const char* archivePathname,NuArchive** ppArchive); +NUFXLIB_API NuError NuExtractRecord(NuArchive* pArchive, NuRecordIdx recordIdx); +NUFXLIB_API NuError NuExtractThread(NuArchive* pArchive, NuThreadIdx threadIdx, NuDataSink* pDataSink); -NuError NuGetRecord(NuArchive* pArchive, NuRecordIdx recordIdx, +NUFXLIB_API NuError NuGetRecord(NuArchive* pArchive, NuRecordIdx recordIdx, const NuRecord** ppRecord); -NuError NuGetRecordIdxByName(NuArchive* pArchive, const char* name, - NuRecordIdx* pRecordIdx); -NuError NuGetRecordIdxByPosition(NuArchive* pArchive, unsigned long position, +NUFXLIB_API NuError NuGetRecordIdxByName(NuArchive* pArchive, const char* name, NuRecordIdx* pRecordIdx); +NUFXLIB_API NuError NuGetRecordIdxByPosition(NuArchive* pArchive, + unsigned long position, NuRecordIdx* pRecordIdx); /* read/write interfaces */ -NuError NuOpenRW(const char* archivePathname, const char* tempPathname, - unsigned long flags, NuArchive** ppArchive); -NuError NuFlush(NuArchive* pArchive, long* pStatusFlags); -NuError NuAddRecord(NuArchive* pArchive, const NuFileDetails* pFileDetails, - NuRecordIdx* pRecordIdx); -NuError NuAddThread(NuArchive* pArchive, NuRecordIdx recordIdx, +NUFXLIB_API NuError NuOpenRW(const char* archivePathname, + const char* tempPathname, unsigned long flags, + NuArchive** ppArchive); +NUFXLIB_API NuError NuFlush(NuArchive* pArchive, long* pStatusFlags); +NUFXLIB_API NuError NuAddRecord(NuArchive* pArchive, + const NuFileDetails* pFileDetails, NuRecordIdx* pRecordIdx); +NUFXLIB_API NuError NuAddThread(NuArchive* pArchive, NuRecordIdx recordIdx, NuThreadIdx threadID, NuDataSource* pDataSource, NuThreadIdx* pThreadIdx); -NuError NuAddFile(NuArchive* pArchive, const char* pathname, +NUFXLIB_API NuError NuAddFile(NuArchive* pArchive, const char* pathname, const NuFileDetails* pFileDetails, short fromRsrcFork, NuRecordIdx* pRecordIdx); -NuError NuRename(NuArchive* pArchive, NuRecordIdx recordIdx, +NUFXLIB_API NuError NuRename(NuArchive* pArchive, NuRecordIdx recordIdx, const char* pathname, char fssep); -NuError NuSetRecordAttr(NuArchive* pArchive, NuRecordIdx recordIdx, +NUFXLIB_API NuError NuSetRecordAttr(NuArchive* pArchive, NuRecordIdx recordIdx, const NuRecordAttr* pRecordAttr); -NuError NuUpdatePresizedThread(NuArchive* pArchive, NuThreadIdx threadIdx, - NuDataSource* pDataSource, long* pMaxLen); -NuError NuDelete(NuArchive* pArchive); -NuError NuDeleteRecord(NuArchive* pArchive, NuRecordIdx recordIdx); -NuError NuDeleteThread(NuArchive* pArchive, NuRecordIdx threadIdx); +NUFXLIB_API NuError NuUpdatePresizedThread(NuArchive* pArchive, + NuThreadIdx threadIdx, NuDataSource* pDataSource, long* pMaxLen); +NUFXLIB_API NuError NuDelete(NuArchive* pArchive); +NUFXLIB_API NuError NuDeleteRecord(NuArchive* pArchive, NuRecordIdx recordIdx); +NUFXLIB_API NuError NuDeleteThread(NuArchive* pArchive, NuRecordIdx threadIdx); /* general interfaces */ -NuError NuClose(NuArchive* pArchive); -NuError NuAbort(NuArchive* pArchive); -NuError NuGetMasterHeader(NuArchive* pArchive, +NUFXLIB_API NuError NuClose(NuArchive* pArchive); +NUFXLIB_API NuError NuAbort(NuArchive* pArchive); +NUFXLIB_API NuError NuGetMasterHeader(NuArchive* pArchive, const NuMasterHeader** ppMasterHeader); -NuError NuGetExtraData(NuArchive* pArchive, void** ppData); -NuError NuSetExtraData(NuArchive* pArchive, void* pData); -NuError NuGetValue(NuArchive* pArchive, NuValueID ident, NuValue* pValue); -NuError NuSetValue(NuArchive* pArchive, NuValueID ident, NuValue value); -NuError NuGetAttr(NuArchive* pArchive, NuAttrID ident, NuAttr* pAttr); -NuError NuDebugDumpArchive(NuArchive* pArchive); +NUFXLIB_API NuError NuGetExtraData(NuArchive* pArchive, void** ppData); +NUFXLIB_API NuError NuSetExtraData(NuArchive* pArchive, void* pData); +NUFXLIB_API NuError NuGetValue(NuArchive* pArchive, NuValueID ident, + NuValue* pValue); +NUFXLIB_API NuError NuSetValue(NuArchive* pArchive, NuValueID ident, + NuValue value); +NUFXLIB_API NuError NuGetAttr(NuArchive* pArchive, NuAttrID ident, + NuAttr* pAttr); +NUFXLIB_API NuError NuDebugDumpArchive(NuArchive* pArchive); /* sources and sinks */ -NuError NuCreateDataSourceForFile(NuThreadFormat threadFormat, short doClose, - unsigned long otherLen, const char* pathname, short isFromRsrcFork, - NuDataSource** ppDataSource); -NuError NuCreateDataSourceForFP(NuThreadFormat threadFormat, short doClose, - unsigned long otherLen, FILE* fp, long offset, long length, - NuDataSource** ppDataSource); -NuError NuCreateDataSourceForBuffer(NuThreadFormat threadFormat, short doClose, - unsigned long otherLen, const unsigned char* buffer, long offset, +NUFXLIB_API NuError NuCreateDataSourceForFile(NuThreadFormat threadFormat, + short doClose, unsigned long otherLen, const char* pathname, + short isFromRsrcFork, NuDataSource** ppDataSource); +NUFXLIB_API NuError NuCreateDataSourceForFP(NuThreadFormat threadFormat, + short doClose, unsigned long otherLen, FILE* fp, long offset, long length, NuDataSource** ppDataSource); -NuError NuFreeDataSource(NuDataSource* pDataSource); -NuError NuDataSourceSetRawCrc(NuDataSource* pDataSource, unsigned short crc); -NuError NuCreateDataSinkForFile(short doExpand, NuValue convertEOL, +NUFXLIB_API NuError NuCreateDataSourceForBuffer(NuThreadFormat threadFormat, + short doClose, unsigned long otherLen, const unsigned char* buffer, + long offset, long length, NuDataSource** ppDataSource); +NUFXLIB_API NuError NuFreeDataSource(NuDataSource* pDataSource); +NUFXLIB_API NuError NuDataSourceSetRawCrc(NuDataSource* pDataSource, + unsigned short crc); +NUFXLIB_API NuError NuCreateDataSinkForFile(short doExpand, NuValue convertEOL, const char* pathname, char fssep, NuDataSink** ppDataSink); -NuError NuCreateDataSinkForFP(short doExpand, NuValue convertEOL, +NUFXLIB_API NuError NuCreateDataSinkForFP(short doExpand, NuValue convertEOL, FILE* fp, NuDataSink** ppDataSink); -NuError NuCreateDataSinkForBuffer(short doExpand, NuValue convertEOL, - unsigned char* buffer, unsigned long bufLen, +NUFXLIB_API NuError NuCreateDataSinkForBuffer(short doExpand, + NuValue convertEOL, unsigned char* buffer, unsigned long bufLen, NuDataSink** ppDataSink); -NuError NuFreeDataSink(NuDataSink* pDataSink); -NuError NuDataSinkGetOutCount(NuDataSink* pDataSink, unsigned long* pOutCount); +NUFXLIB_API NuError NuFreeDataSink(NuDataSink* pDataSink); +NUFXLIB_API NuError NuDataSinkGetOutCount(NuDataSink* pDataSink, + unsigned long* pOutCount); /* miscellaneous non-archive operations */ -NuError NuGetVersion(long* pMajorVersion, long* pMinorVersion, +NUFXLIB_API NuError NuGetVersion(long* pMajorVersion, long* pMinorVersion, long* pBugVersion, const char** ppBuildDate, const char** ppBuildFlags); -const char* NuStrError(NuError err); -NuError NuTestFeature(NuFeature feature); -void NuRecordCopyAttr(NuRecordAttr* pRecordAttr, const NuRecord* pRecord); -NuError NuRecordCopyThreads(const NuRecord* pRecord, NuThread** ppThreads); -unsigned long NuRecordGetNumThreads(const NuRecord* pRecord); -const NuThread* NuThreadGetByIdx(const NuThread* pThread, long idx); -short NuIsPresizedThreadID(NuThreadID threadID); +NUFXLIB_API const char* NuStrError(NuError err); +NUFXLIB_API NuError NuTestFeature(NuFeature feature); +NUFXLIB_API void NuRecordCopyAttr(NuRecordAttr* pRecordAttr, + const NuRecord* pRecord); +NUFXLIB_API NuError NuRecordCopyThreads(const NuRecord* pRecord, + NuThread** ppThreads); +NUFXLIB_API unsigned long NuRecordGetNumThreads(const NuRecord* pRecord); +NUFXLIB_API const NuThread* NuThreadGetByIdx(const NuThread* pThread, long idx); +NUFXLIB_API short NuIsPresizedThreadID(NuThreadID threadID); #define NuGetThread(pRecord, idx) ( (const NuThread*) \ ((unsigned long) (idx) < (unsigned long) (pRecord)->recTotalThreads ? \ @@ -742,13 +770,16 @@ short NuIsPresizedThreadID(NuThreadID threadID); /* callback setters */ -NuError NuSetSelectionFilter(NuArchive* pArchive, NuCallback filterFunc); -NuError NuSetOutputPathnameFilter(NuArchive* pArchive, NuCallback filterFunc); -NuError NuSetProgressUpdater(NuArchive* pArchive, NuCallback updateFunc); -NuError NuSetErrorHandler(NuArchive* pArchive, NuCallback errorFunc); -NuError NuSetErrorMessageHandler(NuArchive* pArchive, +NUFXLIB_API NuError NuSetSelectionFilter(NuArchive* pArchive, + NuCallback filterFunc); +NUFXLIB_API NuError NuSetOutputPathnameFilter(NuArchive* pArchive, + NuCallback filterFunc); +NUFXLIB_API NuError NuSetProgressUpdater(NuArchive* pArchive, + NuCallback updateFunc); +NUFXLIB_API NuError NuSetErrorHandler(NuArchive* pArchive,NuCallback errorFunc); +NUFXLIB_API NuError NuSetErrorMessageHandler(NuArchive* pArchive, NuCallback messageHandlerFunc); -NuError NuSetGlobalErrorMessageHandler(NuCallback messageHandlerFunc); +NUFXLIB_API NuError NuSetGlobalErrorMessageHandler(NuCallback messageHandlerFunc); #ifdef __cplusplus diff --git a/nufxlib-0/README.txt b/nufxlib-0/README.txt index 8a5edcb..525188b 100644 --- a/nufxlib-0/README.txt +++ b/nufxlib-0/README.txt @@ -78,9 +78,30 @@ to build with debugging info, or nmake -f makefile.msc nodebug=1 to build optimized. +See the makefile for comments about including zlib or libbz2. These +need to be enabled at compile time and linked into the sample apps. + Once the library has been built, "cd samples" and run the same command there. When it finishes, run "test-basic.exe". +If you want to build NufxLib as a DLL, use "makefile.dll" instead. +If you're using zlib or libbz2, these will need to be linked into the DLL. +You will probably need to set the application that links against it to +use the "multithreaded DLL" version of the C library. (In Visual C++, +go to Project->Settings...->C/C++ tab, select Category: Code Generation, +and in the "Use run-time library" box choose "Multithreaded DLL" for +Release and "Debug Multithreaded DLL" for Debug.) + +You have to use the DLL version because NufxLib allows certain calls to +pass in a malloc()ed pointer which the library then takes ownership of. +If nufxlib.dll and the application are using different heaps, the memory +is being allocated on one and freed from another, which doesn't work. +Debug versions of the DLL will halt with an assertion failure, most +likely in a NuFlush or NuClose call. Non-debug versions will silently +leak memory, or possibly corrupt other structures. You can test this +easily by running the "test-basic" application after linking it against +the DLL without specifying "DLL=1" on the makefile line. + Other Notes =========== diff --git a/nufxlib-0/samples/Makefile.msc b/nufxlib-0/samples/Makefile.msc index a68078b..10d745b 100644 --- a/nufxlib-0/samples/Makefile.msc +++ b/nufxlib-0/samples/Makefile.msc @@ -8,6 +8,8 @@ # To build without debugging info, use "nmake nodebug=1". # To build with libz, use "nmake libz=1". # To build with libbz2, use "nmake libbz2=1". +# If you're linking against nufxlib as a DLL, add "DLL=1", and don't +# specify libz or libbz2. # # For libz/libbz2, you need to have the appropriate library either # in this directory or in a standard location that the linker can find. @@ -20,14 +22,26 @@ TARGETOS = BOTH NUFXSRCDIR = .. LIB_PRODUCT = $(NUFXSRCDIR)\nufxlib.lib +!ifdef DLL +### build against the DLL !ifdef NODEBUG -#OPT = /D NDEBUG /ML /Ogityb2 -OPT = /D DEBUG_MSGS /ML /Ogityb2 +OPT = /D NUFXLIB_DLL /MD /Ogityb2 +LIB_FLAGS = /nodefaultlib:libcd.lib /nologo setargv.obj +!else +OPT = /D NUFXLIB_DLL /D DEBUG_MSGS /MDd /Od +LIB_FLAGS = /nodefaultlib:libc.lib /nologo setargv.obj +!endif + +!else +### build against static lib +!ifdef NODEBUG +OPT = /ML /Ogityb2 LIB_FLAGS = /nodefaultlib:libcd.lib /nologo libc.lib setargv.obj !else OPT = /D DEBUG_MSGS /MLd /Od LIB_FLAGS = /nodefaultlib:libc.lib /nologo libcd.lib setargv.obj !endif +!endif BUILD_FLAGS = /W3 /GX /D "WIN32" /D "_CONSOLE" /I "$(NUFXSRCDIR)" @@ -66,13 +80,16 @@ test-extract.exe: TestExtract.obj $(LIB_PRODUCT) $(link) $(ldebug) TestExtract.obj -out:$@ $(NUFXSRCDIR)\nufxlib.lib $(LIB_FLAGS) clean: - del *.obj - del exerciser.exe - del imgconv.exe - del launder.exe - del test-basic.exe - del test-simple.exe - del test-extract.exe + -del *.obj + -del *.pdb + -del *.ilk + -del *.exp + -del exerciser.exe + -del imgconv.exe + -del launder.exe + -del test-basic.exe + -del test-simple.exe + -del test-extract.exe Exerciser.obj: Exerciser.c Common.h $(NUFXSRCDIR)\NufxLib.h $(NUFXSRCDIR)\SysDefs.h ImgConv.obj: ImgConv.c Common.h $(NUFXSRCDIR)\NufxLib.h $(NUFXSRCDIR)\SysDefs.h