From: <sag...@us...> - 2009-10-09 00:01:11
|
Revision: 391 http://modplug.svn.sourceforge.net/modplug/?rev=391&view=rev Author: saga-games Date: 2009-10-09 00:00:56 +0000 (Fri, 09 Oct 2009) Log Message: ----------- [Fix] IT Compatibility: Out of range offset command with Old FX on [New] Can now import RIFF AM and RIFF AMFF files, as well as J2B files, which are compressed AM(FF) files. Added zlib 1.2.3 for J2B support. ATTENTION: The "zlibstat" project from from zlib/contrib/vstudio/ still has to be added to mptrack.sln (for VS7/8)! Modified Paths: -------------- trunk/OpenMPT/mptrack/MPTRACK_08.sln trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/mptrack.vcproj trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/soundlib/Snd_defs.h trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/load_j2b.cpp Added Paths: ----------- trunk/OpenMPT/zlib/ trunk/OpenMPT/zlib/ChangeLog trunk/OpenMPT/zlib/FAQ trunk/OpenMPT/zlib/INDEX trunk/OpenMPT/zlib/Makefile trunk/OpenMPT/zlib/Makefile.in trunk/OpenMPT/zlib/README trunk/OpenMPT/zlib/adler32.c trunk/OpenMPT/zlib/compress.c trunk/OpenMPT/zlib/configure trunk/OpenMPT/zlib/contrib/ trunk/OpenMPT/zlib/contrib/README.contrib trunk/OpenMPT/zlib/contrib/masmx64/ trunk/OpenMPT/zlib/contrib/masmx64/bld_ml64.bat trunk/OpenMPT/zlib/contrib/masmx64/gvmat64.asm trunk/OpenMPT/zlib/contrib/masmx64/gvmat64.obj trunk/OpenMPT/zlib/contrib/masmx64/inffas8664.c trunk/OpenMPT/zlib/contrib/masmx64/inffasx64.asm trunk/OpenMPT/zlib/contrib/masmx64/inffasx64.obj trunk/OpenMPT/zlib/contrib/masmx64/readme.txt trunk/OpenMPT/zlib/contrib/masmx86/ trunk/OpenMPT/zlib/contrib/masmx86/bld_ml32.bat trunk/OpenMPT/zlib/contrib/masmx86/gvmat32.asm trunk/OpenMPT/zlib/contrib/masmx86/gvmat32.obj trunk/OpenMPT/zlib/contrib/masmx86/gvmat32c.c trunk/OpenMPT/zlib/contrib/masmx86/inffas32.asm trunk/OpenMPT/zlib/contrib/masmx86/inffas32.obj trunk/OpenMPT/zlib/contrib/masmx86/mkasm.bat trunk/OpenMPT/zlib/contrib/masmx86/readme.txt trunk/OpenMPT/zlib/contrib/minizip/ trunk/OpenMPT/zlib/contrib/minizip/ChangeLogUnzip trunk/OpenMPT/zlib/contrib/minizip/Makefile trunk/OpenMPT/zlib/contrib/minizip/crypt.h trunk/OpenMPT/zlib/contrib/minizip/ioapi.c trunk/OpenMPT/zlib/contrib/minizip/ioapi.h trunk/OpenMPT/zlib/contrib/minizip/iowin32.c trunk/OpenMPT/zlib/contrib/minizip/iowin32.h trunk/OpenMPT/zlib/contrib/minizip/miniunz.c trunk/OpenMPT/zlib/contrib/minizip/minizip.c trunk/OpenMPT/zlib/contrib/minizip/mztools.c trunk/OpenMPT/zlib/contrib/minizip/mztools.h trunk/OpenMPT/zlib/contrib/minizip/unzip.c trunk/OpenMPT/zlib/contrib/minizip/unzip.h trunk/OpenMPT/zlib/contrib/minizip/zip.c trunk/OpenMPT/zlib/contrib/minizip/zip.h trunk/OpenMPT/zlib/contrib/vstudio/ trunk/OpenMPT/zlib/contrib/vstudio/readme.txt trunk/OpenMPT/zlib/contrib/vstudio/vc7/ trunk/OpenMPT/zlib/contrib/vstudio/vc7/miniunz.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc7/minizip.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc7/testzlib.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc7/zlib.rc trunk/OpenMPT/zlib/contrib/vstudio/vc7/zlibstat.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc7/zlibvc.def trunk/OpenMPT/zlib/contrib/vstudio/vc7/zlibvc.sln trunk/OpenMPT/zlib/contrib/vstudio/vc7/zlibvc.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc8/ trunk/OpenMPT/zlib/contrib/vstudio/vc8/miniunz.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc8/minizip.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc8/testzlib.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc8/testzlibdll.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc8/zlib.rc trunk/OpenMPT/zlib/contrib/vstudio/vc8/zlibstat.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc8/zlibvc.def trunk/OpenMPT/zlib/contrib/vstudio/vc8/zlibvc.sln trunk/OpenMPT/zlib/contrib/vstudio/vc8/zlibvc.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc9/ trunk/OpenMPT/zlib/contrib/vstudio/vc9/miniunz.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc9/minizip.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc9/testzlib.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc9/testzlibdll.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc9/zlib.rc trunk/OpenMPT/zlib/contrib/vstudio/vc9/zlibstat.vcproj trunk/OpenMPT/zlib/contrib/vstudio/vc9/zlibvc.def trunk/OpenMPT/zlib/contrib/vstudio/vc9/zlibvc.sln trunk/OpenMPT/zlib/contrib/vstudio/vc9/zlibvc.vcproj trunk/OpenMPT/zlib/crc32.c trunk/OpenMPT/zlib/crc32.h trunk/OpenMPT/zlib/deflate.c trunk/OpenMPT/zlib/deflate.h trunk/OpenMPT/zlib/example.c trunk/OpenMPT/zlib/gzio.c trunk/OpenMPT/zlib/infback.c trunk/OpenMPT/zlib/inffast.c trunk/OpenMPT/zlib/inffast.h trunk/OpenMPT/zlib/inffixed.h trunk/OpenMPT/zlib/inflate.c trunk/OpenMPT/zlib/inflate.h trunk/OpenMPT/zlib/inftrees.c trunk/OpenMPT/zlib/inftrees.h trunk/OpenMPT/zlib/minigzip.c trunk/OpenMPT/zlib/trees.c trunk/OpenMPT/zlib/trees.h trunk/OpenMPT/zlib/uncompr.c trunk/OpenMPT/zlib/zconf.h trunk/OpenMPT/zlib/zconf.in.h trunk/OpenMPT/zlib/zlib.3 trunk/OpenMPT/zlib/zlib.h trunk/OpenMPT/zlib/zutil.c trunk/OpenMPT/zlib/zutil.h Modified: trunk/OpenMPT/mptrack/MPTRACK_08.sln =================================================================== --- trunk/OpenMPT/mptrack/MPTRACK_08.sln 2009-10-07 17:12:37 UTC (rev 390) +++ trunk/OpenMPT/mptrack/MPTRACK_08.sln 2009-10-09 00:00:56 UTC (rev 391) @@ -1,9 +1,10 @@ Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 +# Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mptrack", "mptrack_08.vcproj", "{21D95071-FB97-4E69-B3B1-050D0D4A5021}" ProjectSection(ProjectDependencies) = postProject {44316F22-904E-48AA-B841-5A3A6AC77319} = {44316F22-904E-48AA-B841-5A3A6AC77319} {FAE39936-1DC7-40BB-AD3F-3B5B9E9AB0E8} = {FAE39936-1DC7-40BB-AD3F-3B5B9E9AB0E8} + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} = {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} {CF3C2CA5-5D45-4635-BBA4-C1F435E10896} = {CF3C2CA5-5D45-4635-BBA4-C1F435E10896} {FF541CE2-DAA1-4F84-9883-0A0F111BAA0B} = {FF541CE2-DAA1-4F84-9883-0A0F111BAA0B} EndProjectSection @@ -18,36 +19,57 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "..\soundtouch\soundtouch_08.vcproj", "{CF3C2CA5-5D45-4635-BBA4-C1F435E10896}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "..\zlib\contrib\vstudio\vc9\zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {21D95071-FB97-4E69-B3B1-050D0D4A5021}.Debug|Win32.ActiveCfg = Debug|Win32 {21D95071-FB97-4E69-B3B1-050D0D4A5021}.Debug|Win32.Build.0 = Debug|Win32 {21D95071-FB97-4E69-B3B1-050D0D4A5021}.Release|Win32.ActiveCfg = Release|Win32 {21D95071-FB97-4E69-B3B1-050D0D4A5021}.Release|Win32.Build.0 = Release|Win32 + {21D95071-FB97-4E69-B3B1-050D0D4A5021}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {21D95071-FB97-4E69-B3B1-050D0D4A5021}.ReleaseWithoutAsm|Win32.Build.0 = Release|Win32 {FAE39936-1DC7-40BB-AD3F-3B5B9E9AB0E8}.Debug|Win32.ActiveCfg = Debug|Win32 {FAE39936-1DC7-40BB-AD3F-3B5B9E9AB0E8}.Debug|Win32.Build.0 = Debug|Win32 {FAE39936-1DC7-40BB-AD3F-3B5B9E9AB0E8}.Release|Win32.ActiveCfg = Release|Win32 {FAE39936-1DC7-40BB-AD3F-3B5B9E9AB0E8}.Release|Win32.Build.0 = Release|Win32 + {FAE39936-1DC7-40BB-AD3F-3B5B9E9AB0E8}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {FAE39936-1DC7-40BB-AD3F-3B5B9E9AB0E8}.ReleaseWithoutAsm|Win32.Build.0 = Release|Win32 {FF541CE2-DAA1-4F84-9883-0A0F111BAA0B}.Debug|Win32.ActiveCfg = Debug|Win32 {FF541CE2-DAA1-4F84-9883-0A0F111BAA0B}.Debug|Win32.Build.0 = Debug|Win32 {FF541CE2-DAA1-4F84-9883-0A0F111BAA0B}.Release|Win32.ActiveCfg = Release|Win32 {FF541CE2-DAA1-4F84-9883-0A0F111BAA0B}.Release|Win32.Build.0 = Release|Win32 + {FF541CE2-DAA1-4F84-9883-0A0F111BAA0B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {FF541CE2-DAA1-4F84-9883-0A0F111BAA0B}.ReleaseWithoutAsm|Win32.Build.0 = Release|Win32 {44316F22-904E-48AA-B841-5A3A6AC77319}.Debug|Win32.ActiveCfg = Debug|Win32 {44316F22-904E-48AA-B841-5A3A6AC77319}.Debug|Win32.Build.0 = Debug|Win32 {44316F22-904E-48AA-B841-5A3A6AC77319}.Release|Win32.ActiveCfg = Release|Win32 {44316F22-904E-48AA-B841-5A3A6AC77319}.Release|Win32.Build.0 = Release|Win32 + {44316F22-904E-48AA-B841-5A3A6AC77319}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {44316F22-904E-48AA-B841-5A3A6AC77319}.ReleaseWithoutAsm|Win32.Build.0 = Release|Win32 {DCC2BB2F-6778-4FD3-9C00-D6CD8DC917B8}.Debug|Win32.ActiveCfg = Debug|Win32 {DCC2BB2F-6778-4FD3-9C00-D6CD8DC917B8}.Debug|Win32.Build.0 = Debug|Win32 {DCC2BB2F-6778-4FD3-9C00-D6CD8DC917B8}.Release|Win32.ActiveCfg = Release|Win32 {DCC2BB2F-6778-4FD3-9C00-D6CD8DC917B8}.Release|Win32.Build.0 = Release|Win32 + {DCC2BB2F-6778-4FD3-9C00-D6CD8DC917B8}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {DCC2BB2F-6778-4FD3-9C00-D6CD8DC917B8}.ReleaseWithoutAsm|Win32.Build.0 = Release|Win32 {CF3C2CA5-5D45-4635-BBA4-C1F435E10896}.Debug|Win32.ActiveCfg = Debug|Win32 {CF3C2CA5-5D45-4635-BBA4-C1F435E10896}.Debug|Win32.Build.0 = Debug|Win32 {CF3C2CA5-5D45-4635-BBA4-C1F435E10896}.Release|Win32.ActiveCfg = Release|Win32 {CF3C2CA5-5D45-4635-BBA4-C1F435E10896}.Release|Win32.Build.0 = Release|Win32 + {CF3C2CA5-5D45-4635-BBA4-C1F435E10896}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {CF3C2CA5-5D45-4635-BBA4-C1F435E10896}.ReleaseWithoutAsm|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-10-07 17:12:37 UTC (rev 390) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-10-09 00:00:56 UTC (rev 391) @@ -215,20 +215,7 @@ switch(m->command) { case CMD_MODCMDEX: - m->command = CMD_S3MCMDEX; - switch(m->param & 0xF0) - { - case 0x10: m->command = CMD_PORTAMENTOUP; m->param |= 0xF0; break; - case 0x20: m->command = CMD_PORTAMENTODOWN; m->param |= 0xF0; break; - case 0x30: m->param = (m->param & 0x0F) | 0x10; break; - case 0x40: m->param = (m->param & 0x0F) | 0x30; break; - case 0x50: m->param = (m->param & 0x0F) | 0x20; break; - case 0x60: m->param = (m->param & 0x0F) | 0xB0; break; - case 0x70: m->param = (m->param & 0x0F) | 0x40; break; - case 0x90: m->command = CMD_RETRIG; m->param = 0x80 | (m->param & 0x0F); break; - case 0xA0: if (m->param & 0x0F) { m->command = CMD_VOLUMESLIDE; m->param = (m->param << 4) | 0x0F; } else m->command = 0; break; - case 0xB0: if (m->param & 0x0F) { m->command = CMD_VOLUMESLIDE; m->param |= 0xF0; } else m->command = 0; break; - } + CSoundFile::MODExx2S3MSxx(m); break; case CMD_VOLUME: if (!m->volcmd) @@ -301,20 +288,7 @@ cEffectMemory[nChannel][CMD_ARPEGGIO] = m->param; break; case CMD_S3MCMDEX: - m->command = CMD_MODCMDEX; - switch(m->param & 0xF0) - { - case 0x10: m->param = (m->param & 0x0F) | 0x30; break; - case 0x20: m->param = (m->param & 0x0F) | 0x50; break; - case 0x30: m->param = (m->param & 0x0F) | 0x40; break; - case 0x40: m->param = (m->param & 0x0F) | 0x70; break; - case 0x50: - case 0x60: - case 0x70: - case 0x90: - case 0xA0: m->command = CMD_XFINEPORTAUPDOWN; break; - case 0xB0: m->param = (m->param & 0x0F) | 0x60; break; - } + CSoundFile::S3MSxx2MODExx(m); break; case CMD_VOLUMESLIDE: if ((m->param & 0xF0) && ((m->param & 0x0F) == 0x0F)) Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2009-10-07 17:12:37 UTC (rev 390) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2009-10-09 00:00:56 UTC (rev 391) @@ -289,6 +289,9 @@ RelativePath="..\soundlib\Load_it.cpp"> </File> <File + RelativePath="..\soundlib\load_j2b.cpp"> + </File> + <File RelativePath="..\soundlib\Load_mdl.cpp"> </File> <File Modified: trunk/OpenMPT/mptrack/mptrack_08.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_08.vcproj 2009-10-07 17:12:37 UTC (rev 390) +++ trunk/OpenMPT/mptrack/mptrack_08.vcproj 2009-10-09 00:00:56 UTC (rev 391) @@ -389,6 +389,10 @@ > </File> <File + RelativePath="..\soundlib\load_j2b.cpp" + > + </File> + <File RelativePath="..\soundlib\Load_mdl.cpp" > </File> Modified: trunk/OpenMPT/soundlib/Snd_defs.h =================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h 2009-10-07 17:12:37 UTC (rev 390) +++ trunk/OpenMPT/soundlib/Snd_defs.h 2009-10-09 00:00:56 UTC (rev 391) @@ -256,10 +256,10 @@ // Module flags #define SONG_EMBEDMIDICFG 0x0001 -#define SONG_FASTVOLSLIDES 0x0002 -#define SONG_ITOLDEFFECTS 0x0004 -#define SONG_ITCOMPATMODE 0x0008 -#define SONG_LINEARSLIDES 0x0010 +#define SONG_FASTVOLSLIDES 0x0002 // Old Scream Tracker 3.0 volume slides +#define SONG_ITOLDEFFECTS 0x0004 // Old Impulse Tracker effect implementations +#define SONG_ITCOMPATMODE 0x0008 // IT "Compatible Gxx" +#define SONG_LINEARSLIDES 0x0010 // Linear slides vs. Amiga slides #define SONG_PATTERNLOOP 0x0020 #define SONG_STEP 0x0040 #define SONG_PAUSED 0x0080 Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-10-07 17:12:37 UTC (rev 390) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-10-09 00:00:56 UTC (rev 391) @@ -3051,8 +3051,12 @@ // Offset beyond sample size if (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) { + // IT Compatibility: Offset if(IsCompatibleMode(TRK_IMPULSETRACKER)) - pChn->nPos = 0; // IT Compatibility: Reset to beginning of sample + if(m_dwSongFlags & SONG_ITOLDEFFECTS) + pChn->nPos = pChn->nLength; // Old FX: Clip to end of sample + else + pChn->nPos = 0; // Reset to beginning of sample else pChn->nPos = pChn->nLoopStart; if ((m_dwSongFlags & SONG_ITOLDEFFECTS) && (pChn->nLength > 4)) Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2009-10-07 17:12:37 UTC (rev 390) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2009-10-09 00:00:56 UTC (rev 391) @@ -593,6 +593,8 @@ #endif // MODPLUG_BASIC_SUPPORT && (!ReadGDM(lpStream, dwMemLength)) && (!ReadIMF(lpStream, dwMemLength)) + && (!ReadAM(lpStream, dwMemLength)) + && (!ReadJ2B(lpStream, dwMemLength)) && (!ReadMO3(lpStream, dwMemLength)) && (!ReadMod(lpStream, dwMemLength))) m_nType = MOD_TYPE_NONE; #ifdef ZIPPED_MOD_SUPPORT @@ -3193,6 +3195,7 @@ return false; } + void CSoundFile::SetupMODPanning(bool bForceSetup) //------------------------------------------------ { @@ -3208,3 +3211,47 @@ ChnSettings[nChn].nPan = (((nChn & 3) == 1) || ((nChn & 3) == 2)) ? 0xC0 : 0x40; } } + +// Convert an Exx command (MOD) to Sxx command (S3M) +void CSoundFile::MODExx2S3MSxx(MODCOMMAND *m) +//------------------------------------------- +{ + if(m->command != CMD_MODCMDEX) return; + m->command = CMD_S3MCMDEX; + switch(m->param & 0xF0) + { + case 0x10: m->command = CMD_PORTAMENTOUP; m->param |= 0xF0; break; + case 0x20: m->command = CMD_PORTAMENTODOWN; m->param |= 0xF0; break; + case 0x30: m->param = (m->param & 0x0F) | 0x10; break; + case 0x40: m->param = (m->param & 0x0F) | 0x30; break; + case 0x50: m->param = (m->param & 0x0F) | 0x20; break; + case 0x60: m->param = (m->param & 0x0F) | 0xB0; break; + case 0x70: m->param = (m->param & 0x0F) | 0x40; break; + case 0x90: m->command = CMD_RETRIG; m->param = 0x80 | (m->param & 0x0F); break; + case 0xA0: if (m->param & 0x0F) { m->command = CMD_VOLUMESLIDE; m->param = (m->param << 4) | 0x0F; } else m->command = 0; break; + case 0xB0: if (m->param & 0x0F) { m->command = CMD_VOLUMESLIDE; m->param |= 0xF0; } else m->command = 0; break; + // rest are the same + } +} + +// Convert an Sxx command (S3M) to Exx command (MOD) +void CSoundFile::S3MSxx2MODExx(MODCOMMAND *m) +//------------------------------------------- +{ + if(m->command != CMD_S3MCMDEX) return; + m->command = CMD_MODCMDEX; + switch(m->param & 0xF0) + { + case 0x10: m->param = (m->param & 0x0F) | 0x30; break; + case 0x20: m->param = (m->param & 0x0F) | 0x50; break; + case 0x30: m->param = (m->param & 0x0F) | 0x40; break; + case 0x40: m->param = (m->param & 0x0F) | 0x70; break; + case 0x50: + case 0x60: + case 0x70: + case 0x90: + case 0xA0: m->command = CMD_XFINEPORTAUPDOWN; break; + case 0xB0: m->param = (m->param & 0x0F) | 0x60; break; + // rest are the same + } +} \ No newline at end of file Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2009-10-07 17:12:37 UTC (rev 390) +++ trunk/OpenMPT/soundlib/Sndfile.h 2009-10-09 00:00:56 UTC (rev 391) @@ -699,14 +699,16 @@ bool ReadMT2(LPCBYTE lpStream, DWORD dwMemLength); bool ReadPSM(LPCBYTE lpStream, DWORD dwMemLength); bool ReadPSM16(LPCBYTE lpStream, DWORD dwMemLength); - bool ReadJ2B(LPCBYTE lpStream, DWORD dwMemLength); bool ReadUMX(LPCBYTE lpStream, DWORD dwMemLength); bool ReadMO3(LPCBYTE lpStream, const DWORD dwMemLength); bool ReadGDM(const LPCBYTE lpStream, const DWORD dwMemLength); bool ReadIMF(const LPCBYTE lpStream, const DWORD dwMemLength); + bool ReadAM(const LPCBYTE lpStream, const DWORD dwMemLength); + bool ReadJ2B(const LPCBYTE lpStream, const DWORD dwMemLength); bool ReadMID(LPCBYTE lpStream, DWORD dwMemLength); void SetupMODPanning(bool bForceSetup = false); // Setup LRRL panning, max channel volume + bool Convert_RIFF_AM_Pattern(PATTERNINDEX nPat, const LPCBYTE lpStream, DWORD dwMemLength, bool bIsAM); // Save Functions #ifndef MODPLUG_NO_FILESAVE @@ -737,6 +739,9 @@ void S3MSaveConvert(UINT *pcmd, UINT *pprm, BOOL bIT, BOOL bCompatibilityExport = false) const; WORD ModSaveCommand(const MODCOMMAND *m, const bool bXM, const bool bCompatibilityExport = false) const; + static void MODExx2S3MSxx(MODCOMMAND *m); + static void S3MSxx2MODExx(MODCOMMAND *m); + public: // Real-time sound functions VOID SuspendPlugins(); //rewbs.VSTCompliance Modified: trunk/OpenMPT/soundlib/load_j2b.cpp =================================================================== --- trunk/OpenMPT/soundlib/load_j2b.cpp 2009-10-07 17:12:37 UTC (rev 390) +++ trunk/OpenMPT/soundlib/load_j2b.cpp 2009-10-09 00:00:56 UTC (rev 391) @@ -1,15 +1,507 @@ /* - * This source code is public domain. + * Purpose: Load RIFF AM and RIFF AMFF modules. + * Note: J2B is a compressed variant of RIFF AM and RIFF AMFF files used in Jazz Jackrabbit 2 + * Authors: Johannes Schultz + * Chris Moeller (foo_dumb) + * Luigi Elettrico (J2B To IT Convertor Class) * - * Authors: Olivier Lapicque <oli...@jp...> -*/ + */ - -/////////////////////////////////////////////////// -// -// J2B module loader -// -/////////////////////////////////////////////////// #include "stdafx.h" #include "sndfile.h" +#define ZLIB_WINAPI +#include "../zlib/zlib.h" +#pragma pack(1) + +// header for compressed j2b files +struct J2BHEADER +{ + DWORD signature; // MUSE + DWORD deadbeaf; // 0xDEADBEAF or 0xDEADBABE + DWORD j2blength; + DWORD crc32; + DWORD packed_length; + DWORD unpacked_length; +}; + +// am(ff) stuff + +struct RIFFCHUNK +{ + DWORD signature; // "RIFF" + DWORD chunksize; // chunk size without header +}; + +// this header is used for both AM's "INIT" as well as AMFF's "MAIN" chunk +struct AMFFCHUNK_MAIN +{ + char songname[64]; + BYTE flags; + BYTE channels; + BYTE speed; + BYTE tempo; + DWORD unknown; + BYTE globalvolume; +}; + +struct AMFFCHUNK_INSTRUMENT +{ + BYTE unknown; // 0x00 + BYTE sample; // sample number + char name[28]; + char stuff[195]; // lots of NULs? +}; + +struct AMFFCHUNK_SAMPLE +{ + DWORD signature; // "SAMP" + DWORD chunksize; // header + sample size + char name[28]; + BYTE pan; + BYTE volume; + WORD flags; + DWORD length; + DWORD loopstart; + DWORD loopend; + DWORD samplerate; + DWORD reserved1; + DWORD reserved2; +}; + +struct AMCHUNK_INSTRUMENT +{ + BYTE unknown; // 0x00 + BYTE sample; // sample number + char name[32]; +}; + +struct AMCHUNK_SAMPLE +{ + DWORD signature; // "SAMP" + DWORD chunksize; // header + sample size + DWORD headsize; // header size + char name[32]; + WORD pan; + WORD volume; + WORD flags; + WORD unkown; + DWORD length; + DWORD loopstart; + DWORD loopend; + DWORD samplerate; +}; + +#pragma pack() + +bool CSoundFile::Convert_RIFF_AM_Pattern(PATTERNINDEX nPat, const LPCBYTE lpStream, DWORD dwMemLength, bool bIsAM) +//---------------------------------------------------------------------------------------------------------------- +{ + // version 0 = AMFF, else = AM + #define ASSERT_CAN_READ(x) \ + if( dwMemPos > dwMemLength || x > dwMemLength - dwMemPos ) return false; + + DWORD dwMemPos = 0; + + ASSERT_CAN_READ(1); + + ROWINDEX nRows = lpStream[0] + 1; + + if(Patterns.Insert(nPat, nRows)) + return false; + + dwMemPos++; + + MODCOMMAND *mrow = Patterns[nPat]; + MODCOMMAND *m = mrow; + ROWINDEX nRow = 0; + BYTE flags; + + while((nRow < nRows) && (dwMemPos < dwMemLength)) + { + ASSERT_CAN_READ(1); + flags = lpStream[dwMemPos]; + dwMemPos++; + if (flags == 0) + { + nRow++; + m = mrow = Patterns[nPat] + nRow * m_nChannels; + continue; + } + + m = mrow + min((flags & 0x1F), m_nChannels - 1); + + if(flags & 0xE0) + { + if (flags & 0x80) // effect + { + ASSERT_CAN_READ(2); + m->command = lpStream[dwMemPos + 1]; + m->param = lpStream[dwMemPos]; + dwMemPos += 2; + switch(m->command) + { + case 0x00: if (m->param) m->command = CMD_ARPEGGIO; break; + case 0x01: m->command = CMD_PORTAMENTOUP; break; + case 0x02: m->command = CMD_PORTAMENTODOWN; break; + case 0x03: m->command = CMD_TONEPORTAMENTO; break; + case 0x04: m->command = CMD_VIBRATO; break; + case 0x05: m->command = CMD_TONEPORTAVOL; if (m->param & 0xF0) m->param &= 0xF0; break; + case 0x06: m->command = CMD_VIBRATOVOL; if (m->param & 0xF0) m->param &= 0xF0; break; + case 0x07: m->command = CMD_TREMOLO; break; + case 0x08: m->command = CMD_PANNING8; + if(m->param <= 0x80) m->param = min(m->param << 1, 0xFF); + else if(m->param == 0xA4) {m->command = CMD_S3MCMDEX; m->param = 0x91;} + break; + case 0x09: m->command = CMD_OFFSET; break; + case 0x0A: m->command = CMD_VOLUMESLIDE; if (m->param & 0xF0) m->param &= 0xF0; break; + case 0x0B: m->command = CMD_POSITIONJUMP; break; + case 0x0C: m->command = CMD_VOLUME; break; + case 0x0D: m->command = CMD_PATTERNBREAK; m->param = ((m->param >> 4) * 10) + (m->param & 0x0F); break; + case 0x0E: m->command = CMD_MODCMDEX; MODExx2S3MSxx(m); break; + case 0x0F: m->command = (m->param <= 0x1F) ? CMD_SPEED : CMD_TEMPO; break; + case 'G' - 55: m->command = CMD_GLOBALVOLUME; break; + case 'H' - 55: m->command = CMD_GLOBALVOLSLIDE; if (m->param & 0xF0) m->param &= 0xF0; break; + case 'K' - 55: m->command = CMD_KEYOFF; break; + case 'L' - 55: m->command = CMD_SETENVPOSITION; break; + case 'M' - 55: m->command = CMD_CHANNELVOLUME; break; + case 'N' - 55: m->command = CMD_CHANNELVOLSLIDE; break; + case 'P' - 55: m->command = CMD_PANNINGSLIDE; if (m->param & 0xF0) m->param &= 0xF0; break; + case 'R' - 55: m->command = CMD_RETRIG; break; + case 'T' - 55: m->command = CMD_TREMOR; break; + case 'X' - 55: + switch(m->param & 0xF0) + { + case 0x10: m->command = CMD_PORTAMENTOUP; m->param = (m->param & 0x0F) | 0xE0; break; + case 0x20: m->command = CMD_PORTAMENTODOWN; m->param = (m->param & 0x0F) | 0xE0; break; + default: m->command = CMD_S3MCMDEX; break; + } + break; + default: +#ifdef DEBUG + { + CHAR s[64]; + wsprintf(s, "J2B: Unknown command: 0x%X, param 0x%X", m->command, m->param); + Log(s); + } +#endif + m->command = CMD_NONE; + break; + } + } + + if (flags & 0x40) // note + ins + { + ASSERT_CAN_READ(2); + m->instr = lpStream[dwMemPos]; + m->note = lpStream[dwMemPos + 1]; + if(m->note > NOTE_MAX) m->note = NOTE_NOTECUT; + dwMemPos += 2; + } + + if (flags & 0x20) // volume + { + ASSERT_CAN_READ(1); + m->volcmd = VOLCMD_VOLUME; + if(!bIsAM) + m->vol = lpStream[dwMemPos]; + else + m->vol = lpStream[dwMemPos] * 64 / 127; + dwMemPos++; + } + } + } + + return true; + + #undef ASSERT_CAN_READ +} + +bool CSoundFile::ReadAM(const LPCBYTE lpStream, const DWORD dwMemLength) +//------------------------------------------------------------------------ +{ + #define ASSERT_CAN_READ(x) \ + if( dwMemPos > dwMemLength || x > dwMemLength - dwMemPos ) return false; + #define ASSERT_CAN_READ_CHUNK(x) \ + if( dwMemPos > dwChunkEnd || x > dwChunkEnd - dwMemPos ) break; + + DWORD dwMemPos = 0; + + ASSERT_CAN_READ(sizeof(RIFFCHUNK)); + RIFFCHUNK *chunkheader = (RIFFCHUNK *)lpStream; + + if(LittleEndian(chunkheader->signature) != 0x46464952 // "RIFF" + || LittleEndian(chunkheader->chunksize) != dwMemLength - sizeof(RIFFCHUNK) + ) return false; + + dwMemPos += sizeof(RIFFCHUNK); + + bool bIsAM; // false: AMFF, true: AM + + if(LittleEndian(*(DWORD *)(lpStream + dwMemPos)) == 0x46464D41) bIsAM = false; // "AMFF" + else if(LittleEndian(*(DWORD *)(lpStream + dwMemPos)) == 0x20204D41) bIsAM = true; // "AM " + else return false; + dwMemPos += 4; + + // go through all chunks now + while(dwMemPos < dwMemLength) + { + ASSERT_CAN_READ(sizeof(RIFFCHUNK)); + chunkheader = (RIFFCHUNK *)(lpStream + dwMemPos); + dwMemPos += sizeof(RIFFCHUNK); + ASSERT_CAN_READ(LittleEndian(chunkheader->chunksize)); + + DWORD dwChunkEnd = dwMemPos + LittleEndian(chunkheader->chunksize); + if(bIsAM && (LittleEndian(chunkheader->chunksize) & 1)) dwChunkEnd++; + + switch(LittleEndian(chunkheader->signature)) + { + case 0x4E49414D: // "MAIN" - Song info (AMFF) + case 0x54494E49: // "INIT" - Song info (AM) + if((LittleEndian(chunkheader->signature) == 0x4E49414D && !bIsAM) || (LittleEndian(chunkheader->signature) == 0x54494E49 && bIsAM)) + { + ASSERT_CAN_READ_CHUNK(sizeof(AMFFCHUNK_MAIN)); + AMFFCHUNK_MAIN *mainchunk = (AMFFCHUNK_MAIN *)(lpStream + dwMemPos); + dwMemPos += sizeof(AMFFCHUNK_MAIN); + + ASSERT_CAN_READ_CHUNK(mainchunk->channels); + + memcpy(m_szNames[0], mainchunk->songname, 32); + SetNullTerminator(m_szNames[0]); + m_dwSongFlags = SONG_ITOLDEFFECTS | SONG_ITCOMPATMODE; + if(!(mainchunk->flags & 0x01)) m_dwSongFlags |= SONG_LINEARSLIDES; + if(mainchunk->channels < 1) return false; + m_nChannels = min(mainchunk->channels, MAX_BASECHANNELS); + m_nDefaultSpeed = mainchunk->speed; + m_nDefaultTempo = mainchunk->tempo; + m_nDefaultGlobalVolume = mainchunk->globalvolume << 1; + m_nSamplePreAmp = m_nVSTiVolume = 48; + m_nType = MOD_TYPE_IT; + + for(CHANNELINDEX nChn = 0; nChn < m_nChannels; nChn++) + { + if(bIsAM) + { + if(lpStream[dwMemPos + nChn] > 128) + { + ChnSettings[nChn].nPan = 128; + ChnSettings[nChn].nVolume = 0; + } else + { + ChnSettings[nChn].nPan = lpStream[dwMemPos + nChn] << 1; + ChnSettings[nChn].nVolume = 64; + } + } else + { + if(lpStream[dwMemPos + nChn] >= 128) + { + ChnSettings[nChn].nPan = 128; + ChnSettings[nChn].nVolume = 0; + } else + { + ChnSettings[nChn].nPan = lpStream[dwMemPos + nChn] << 2; + ChnSettings[nChn].nVolume = 64; + } + } + } + dwMemPos += mainchunk->channels; + } + break; + + case 0x5244524F: // "ORDR" - Order list + ASSERT_CAN_READ_CHUNK(1); + Order.ReadAsByte(&lpStream[dwMemPos + 1], lpStream[dwMemPos] + 1, dwChunkEnd - (dwMemPos + 1)); + break; + + case 0x54544150: // "PATT" - Pattern data for one pattern + ASSERT_CAN_READ_CHUNK(5); + Convert_RIFF_AM_Pattern(lpStream[dwMemPos], (LPCBYTE)(lpStream + dwMemPos + 5), LittleEndian(*(DWORD *)(lpStream + dwMemPos + 1)), bIsAM); + break; + + case 0x54534E49: // "INST" - Instrument (only in RIFF AMFF) + if(!bIsAM) + { + ASSERT_CAN_READ_CHUNK(sizeof(AMFFCHUNK_INSTRUMENT)); + AMFFCHUNK_INSTRUMENT *inschunk = (AMFFCHUNK_INSTRUMENT *)(lpStream + dwMemPos); + dwMemPos += sizeof(AMFFCHUNK_INSTRUMENT); + + SAMPLEINDEX nSmp = inschunk->sample + 1; + if(nSmp > MAX_SAMPLES) + break; + m_nSamples = max(m_nSamples, nSmp); + + memcpy(m_szNames[nSmp], inschunk->name, 28); + m_szNames[nSmp][28] = 0; + + ASSERT_CAN_READ_CHUNK(sizeof(AMFFCHUNK_SAMPLE)); + AMFFCHUNK_SAMPLE *smpchunk = (AMFFCHUNK_SAMPLE *)(lpStream + dwMemPos); + dwMemPos += sizeof(AMFFCHUNK_SAMPLE); + + if(smpchunk->signature != 0x504D4153) break; // SAMP + + memcpy(m_szNames[nSmp], smpchunk->name, 28); + m_szNames[nSmp][28] = 0; + + Samples[nSmp].nPan = smpchunk->pan << 2; + Samples[nSmp].nVolume = smpchunk->volume << 2; + Samples[nSmp].nGlobalVol = 64; + Samples[nSmp].nLength = LittleEndian(smpchunk->length); + Samples[nSmp].nLoopStart = LittleEndian(smpchunk->loopstart); + Samples[nSmp].nLoopEnd = LittleEndian(smpchunk->loopend); + Samples[nSmp].nC5Speed = LittleEndian(smpchunk->samplerate); + + if(LittleEndianW(smpchunk->flags) & 0x04) + Samples[nSmp].uFlags |= CHN_16BIT; + if(LittleEndianW(smpchunk->flags) & 0x08) + Samples[nSmp].uFlags |= CHN_LOOP; + if(LittleEndianW(smpchunk->flags) & 0x10) + Samples[nSmp].uFlags |= CHN_PINGPONGLOOP; + if(LittleEndianW(smpchunk->flags) & 0x20) + Samples[nSmp].uFlags |= CHN_PANNING; + + dwMemPos += ReadSample(&Samples[nSmp], (LittleEndianW(smpchunk->flags) & 0x04) ? RS_PCM16S : RS_PCM8S, (LPCSTR)(lpStream + dwMemPos), dwMemLength - dwMemPos); + } + break; + + case 0x46464952: // "RIFF" - Instrument (only in RIFF AM) + if(bIsAM) + { + ASSERT_CAN_READ_CHUNK(4); + if(LittleEndian(*(DWORD *)(lpStream + dwMemPos)) != 0x20204941) break; // "AI " + dwMemPos += 4; + + ASSERT_CAN_READ_CHUNK(sizeof(RIFFCHUNK)); + RIFFCHUNK *instchunk = (RIFFCHUNK *)(lpStream + dwMemPos); + dwMemPos += sizeof(RIFFCHUNK); + ASSERT_CAN_READ_CHUNK(LittleEndian(instchunk->chunksize)); + if(LittleEndian(instchunk->signature) != 0x54534E49) break; // "INST" + + ASSERT_CAN_READ_CHUNK(4); + DWORD dwHeadlen = LittleEndian(*(DWORD *)(lpStream + dwMemPos)); + dwMemPos +=4 ; + + ASSERT_CAN_READ_CHUNK(sizeof(AMCHUNK_INSTRUMENT)); + AMCHUNK_INSTRUMENT *instheadchunk = (AMCHUNK_INSTRUMENT *)(lpStream + dwMemPos); + dwMemPos += dwHeadlen; + + SAMPLEINDEX nSmp = instheadchunk->sample + 1; + if(nSmp > MAX_SAMPLES) + break; + m_nSamples = max(m_nSamples, nSmp); + + memcpy(m_szNames[nSmp], instheadchunk->name, 32); + m_szNames[nSmp][32] = 0; + + ASSERT_CAN_READ_CHUNK(sizeof(RIFFCHUNK)); + instchunk = (RIFFCHUNK *)(lpStream + dwMemPos); + dwMemPos += sizeof(RIFFCHUNK); + ASSERT_CAN_READ_CHUNK(LittleEndian(instchunk->chunksize)); + if(LittleEndian(instchunk->signature) != 0x46464952) break; // yet another "RIFF"... + + ASSERT_CAN_READ_CHUNK(4); + if(LittleEndian(*(DWORD *)(lpStream + dwMemPos)) != 0x20205341) break; // "AS " (ain't this boring?) + dwMemPos += 4; + + ASSERT_CAN_READ_CHUNK(sizeof(AMCHUNK_SAMPLE)); + AMCHUNK_SAMPLE *smpchunk = (AMCHUNK_SAMPLE *)(lpStream + dwMemPos); + + if(smpchunk->signature != 0x504D4153) break; // SAMP + + memcpy(m_szNames[nSmp], smpchunk->name, 32); + m_szNames[nSmp][32] = 0; + + if(LittleEndianW(smpchunk->pan) > 0x7FFF || LittleEndianW(smpchunk->volume) > 0x7FFF) + break; + + Samples[nSmp].nPan = LittleEndianW(smpchunk->pan) * 256 / 32767; + Samples[nSmp].nVolume = LittleEndianW(smpchunk->volume) * 256 / 32767; + Samples[nSmp].nGlobalVol = 64; + Samples[nSmp].nLength = LittleEndian(smpchunk->length); + Samples[nSmp].nLoopStart = LittleEndian(smpchunk->loopstart); + Samples[nSmp].nLoopEnd = LittleEndian(smpchunk->loopend); + Samples[nSmp].nC5Speed = LittleEndian(smpchunk->samplerate); + + if(LittleEndianW(smpchunk->flags) & 0x04) + Samples[nSmp].uFlags |= CHN_16BIT; + if(LittleEndianW(smpchunk->flags) & 0x08) + Samples[nSmp].uFlags |= CHN_LOOP; + if(LittleEndianW(smpchunk->flags) & 0x10) + Samples[nSmp].uFlags |= CHN_PINGPONGLOOP; + if(LittleEndianW(smpchunk->flags) & 0x20) + Samples[nSmp].uFlags |= CHN_PANNING; + + dwMemPos += LittleEndian(smpchunk->headsize); + dwMemPos += ReadSample(&Samples[nSmp], (LittleEndianW(smpchunk->flags) & 0x04) ? RS_PCM16S : RS_PCM8S, (LPCSTR)(lpStream + dwMemPos), dwMemLength - dwMemPos); + } + break; + + } + dwMemPos = dwChunkEnd; + } + + return true; + + #undef ASSERT_CAN_READ + #undef ASSERT_CAN_READ_CHUNK +} + +bool CSoundFile::ReadJ2B(const LPCBYTE lpStream, const DWORD dwMemLength) +//----------------------------------------------------------------------- +{ + #define ASSERT_CAN_READ(x) \ + if( dwMemPos > dwMemLength || x > dwMemLength - dwMemPos ) return false; + + DWORD dwMemPos = 0; + + ASSERT_CAN_READ(sizeof(J2BHEADER)); + J2BHEADER *header = (J2BHEADER *)lpStream; + + if(LittleEndian(header->signature) != 0x4553554D // "MUSE" + || (LittleEndian(header->deadbeaf) != 0xAFBEADDE // 0xDEADBEAF (RIFF AM) + && LittleEndian(header->deadbeaf) != 0xBEBAADDE) // 0xDEADBABE (RIFF AMFF) + || LittleEndian(header->j2blength) != dwMemLength + || LittleEndian(header->packed_length) != dwMemLength - sizeof(J2BHEADER) + || LittleEndian(header->packed_length) == 0 + || LittleEndian(header->crc32) != crc32(0, (lpStream + sizeof(J2BHEADER)), dwMemLength - sizeof(J2BHEADER)) + ) return false; + + dwMemPos += sizeof(J2BHEADER); + + // header is valid, now unpack the RIFF AM file using inflate + z_stream strm; + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + if(inflateInit(&strm) != Z_OK) + return false; + + Bytef* bOutput = new Bytef[LittleEndian(header->unpacked_length) + 1]; + + strm.avail_in = dwMemLength - dwMemPos; + strm.next_in = (Bytef *)(lpStream + dwMemPos); + strm.avail_out = LittleEndian(header->unpacked_length); + strm.next_out = bOutput; + + int nRetVal = inflate(&strm, Z_NO_FLUSH); + (void)inflateEnd(&strm); + + if(strm.avail_in != 0 || nRetVal == Z_STREAM_ERROR || nRetVal == Z_NEED_DICT || nRetVal == Z_DATA_ERROR || nRetVal == Z_MEM_ERROR || nRetVal != Z_STREAM_END) + { + return false; + } + + bool bResult = false; + + if(strm.total_out == LittleEndian(header->unpacked_length)) + { + // Success, now load the RIFF AM(FF) module. + bResult = ReadAM(bOutput, strm.total_out); + } + delete[] bOutput; + + return bResult; + + #undef ASSERT_CAN_READ +} Added: trunk/OpenMPT/zlib/ChangeLog =================================================================== --- trunk/OpenMPT/zlib/ChangeLog (rev 0) +++ trunk/OpenMPT/zlib/ChangeLog 2009-10-09 00:00:56 UTC (rev 391) @@ -0,0 +1,855 @@ + + ChangeLog file for zlib + +Changes in 1.2.3 (18 July 2005) +- Apply security vulnerability fixes to contrib/infback9 as well +- Clean up some text files (carriage returns, trailing space) +- Update testzlib, vstudio, masmx64, and masmx86 in contrib [Vollant] + +Changes in 1.2.2.4 (11 July 2005) +- Add inflatePrime() function for starting inflation at bit boundary +- Avoid some Visual C warnings in deflate.c +- Avoid more silly Visual C warnings in inflate.c and inftrees.c for 64-bit + compile +- Fix some spelling errors in comments [Betts] +- Correct inflateInit2() error return documentation in zlib.h +- Added zran.c example of compressed data random access to examples + directory, shows use of inflatePrime() +- Fix cast for assignments to strm->state in inflate.c and infback.c +- Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer] +- Move declarations of gf2 functions to right place in crc32.c [Oberhumer] +- Add cast in trees.c t avoid a warning [Oberhumer] +- Avoid some warnings in fitblk.c, gun.c, gzjoin.c in examples [Oberhumer] +- Update make_vms.com [Zinser] +- Initialize state->write in inflateReset() since copied in inflate_fast() +- Be more strict on incomplete code sets in inflate_table() and increase + ENOUGH and MAXD -- this repairs a possible security vulnerability for + invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for + discovering the vulnerability and providing test cases. +- Add ia64 support to configure for HP-UX [Smith] +- Add error return to gzread() for format or i/o error [Levin] +- Use malloc.h for OS/2 [Necasek] + +Changes in 1.2.2.3 (27 May 2005) +- Replace 1U constants in inflate.c and inftrees.c for 64-bit compile +- Typecast fread() return values in gzio.c [Vollant] +- Remove trailing space in minigzip.c outmode (VC++ can't deal with it) +- Fix crc check bug in gzread() after gzungetc() [Heiner] +- Add the deflateTune() function to adjust internal compression parameters +- Add a fast gzip decompressor, gun.c, to examples (use of inflateBack) +- Remove an incorrect assertion in examples/zpipe.c +- Add C++ wrapper in infback9.h [Donais] +- Fix bug in inflateCopy() when decoding fixed codes +- Note in zlib.h how much deflateSetDictionary() actually uses +- Remove USE_DICT_HEAD in deflate.c (would mess up inflate if used) +- Add _WIN32_WCE to define WIN32 in zconf.in.h [Spencer] +- Don't include stderr.h or errno.h for _WIN32_WCE in zutil.h [Spencer] +- Add gzdirect() function to indicate transparent reads +- Update contrib/minizip [Vollant] +- Fix compilation of deflate.c when both ASMV and FASTEST [Oberhumer] +- Add casts in crc32.c to avoid warnings [Oberhumer] +- Add contrib/masmx64 [Vollant] +- Update contrib/asm586, asm686, masmx86, testzlib, vstudio [Vollant] + +Changes in 1.2.2.2 (30 December 2004) +- Replace structure assignments in deflate.c and inflate.c with zmemcpy to + avoid implicit memcpy calls (portability for no-library compilation) +- Increase sprintf() buffer size in gzdopen() to allow for large numbers +- Add INFLATE_STRICT to check distances against zlib header +- Improve WinCE errno handling and comments [Chang] +- Remove comment about no gzip header processing in FAQ +- Add Z_FIXED strategy option to deflateInit2() to force fixed trees +- Add updated make_vms.com [Coghlan], update README +- Create a new "examples" directory, move gzappend.c there, add zpipe.c, + fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html. +- Add FAQ entry and comments in deflate.c on uninitialized memory access +- Add Solaris 9 make options in configure [Gilbert] +- Allow strerror() usage in gzio.c for STDC +- Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer] +- Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant] +- Use z_off_t for adler32_combine() and crc32_combine() lengths +- Make adler32() much faster for small len +- Use OS_CODE in deflate() default gzip header + +Changes in 1.2.2.1 (31 October 2004) +- Allow inflateSetDictionary() call for raw inflate +- Fix inflate header crc check bug for file names and comments +- Add deflateSetHeader() and gz_header structure for custom gzip headers +- Add inflateGetheader() to retrieve gzip headers +- Add crc32_combine() and adler32_combine() functions +- Add alloc_func, free_func, in_func, out_func to Z_PREFIX list +- Use zstreamp consistently in zlib.h (inflate_back functions) +- Remove GUNZIP condition from definition of inflate_mode in inflate.h + and in contrib/inflate86/inffast.S [Truta, Anderson] +- Add support for AMD64 in contrib/inflate86/inffas86.c [Anderson] +- Update projects/README.projects and projects/visualc6 [Truta] +- Update win32/DLL_FAQ.txt [Truta] +- Avoid warning under NO_GZCOMPRESS in gzio.c; fix typo [Truta] +- Deprecate Z_ASCII; use Z_TEXT instead [Truta] +- Use a new algorithm for setting strm->data_type in trees.c [Truta] +- Do not define an exit() prototype in zutil.c unless DEBUG defined +- Remove prototype of exit() from zutil.c, example.c, minigzip.c [Truta] +- Add comment in zlib.h for Z_NO_FLUSH parameter to deflate() +- Fix Darwin build version identification [Peterson] + +Changes in 1.2.2 (3 October 2004) +- Update zlib.h comments on gzip in-memory processing +- Set adler to 1 in inflateReset() to support Java test suite [Walles] +- Add contrib/dotzlib [Ravn] +- Update win32/DLL_FAQ.txt [Truta] +- Update contrib/minizip [Vollant] +- Move contrib/visual-basic.txt to old/ [Truta] +- Fix assembler builds in projects/visualc6/ [Truta] + +Changes in 1.2.1.2 (9 September 2004) +- Update INDEX file +- Fix trees.c to update strm->data_type (no one ever noticed!) +- Fix bug in error case in inflate.c, infback.c, and infback9.c [Brown] +- Add "volatile" to crc table flag declaration (for DYNAMIC_CRC_TABLE) +- Add limited multitasking protection to DYNAMIC_CRC_TABLE +- Add NO_vsnprintf for VMS in zutil.h [Mozilla] +- Don't declare strerror() under VMS [Mozilla] +- Add comment to DYNAMIC_CRC_TABLE to use get_crc_table() to initialize +- Update contrib/ada [Anisimkov] +- Update contrib/minizip [Vollant] +- Fix configure to not hardcode directories for Darwin [Peterson] +- Fix gzio.c to not return error on empty files [Brown] +- Fix indentation; update version in contrib/delphi/ZLib.pas and + contrib/pascal/zlibpas.pas [Truta] +- Update mkasm.bat in contrib/masmx86 [Truta] +- Update contrib/untgz [Truta] +- Add projects/README.projects [Truta] +- Add project for MS Visual C++ 6.0 in projects/visualc6 [Cadieux, Truta] +- Update win32/DLL_FAQ.txt [Truta] +- Update list of Z_PREFIX symbols in zconf.h [Randers-Pehrson, Truta] +- Remove an unnecessary assignment to curr in inftrees.c [Truta] +- Add OS/2 to exe builds in configure [Poltorak] +- Remove err dummy parameter in zlib.h [Kientzle] + +Changes in 1.2.1.1 (9 January 2004) +- Update email address in README +- Several FAQ updates +- Fix a big fat bug in inftrees.c that prevented decoding valid + dynamic blocks with only literals and no distance codes -- + Thanks to "Hot Emu" for the bug report and sample file +- Add a note to puff.c on no distance codes case. + +Changes in 1.2.1 (17 November 2003) +- Remove a tab in contrib/gzappend/gzappend.c +- Update some interfaces in contrib for new zlib functions +- Update zlib version number in some contrib entries +- Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta] +- Support shared libraries on Hurd and KFreeBSD [Brown] +- Fix error in NO_DIVIDE option of adler32.c + +Changes in 1.2.0.8 (4 November 2003) +- Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas +- Add experimental NO_DIVIDE #define in adler32.c + - Possibly faster on some processors (let me know if it is) +- Correct Z_BLOCK to not return on first inflate call if no wrap +- Fix strm->data_type on inflate() return to correctly indicate EOB +- Add deflatePrime() function for appending in the middle of a byte +- Add contrib/gzappend for an example of appending to a stream +- Update win32/DLL_FAQ.txt [Truta] +- Delete Turbo C comment in README [Truta] +- Improve some indentation in zconf.h [Truta] +- Fix infinite loop on bad input in configure script [Church] +- Fix gzeof() for concatenated gzip files [Johnson] +- Add example to contrib/visual-basic.txt [Michael B.] +- Add -p to mkdir's in Makefile.in [vda] +- Fix configure to properly detect presence or lack of printf functions +- Add AS400 support [Monnerat] +- Add a little Cygwin support [Wilson] + +Changes in 1.2.0.7 (21 September 2003) +- Correct some debug formats in contrib/infback9 +- Cast a type in a debug statement in trees.c +- Change search and replace delimiter in configure from % to # [Beebe] +- Update contrib/untgz to 0.2 with various fixes [Truta] +- Add build support for Amiga [Nikl] +- Remove some directories in old that have been updated to 1.2 +- Add dylib building for Mac OS X in configure and Makefile.in +- Remove old distribution stuff from Makefile +- Update README to point to DLL_FAQ.txt, and add comment on Mac OS X +- Update links in README + +Changes in 1.2.0.6 (13 September 2003) +- Minor FAQ updates +- Update contrib/minizip to 1.00 [Vollant] +- Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta] +- Update POSTINC comment for 68060 [Nikl] +- Add contrib/infback9 with deflate64 decoding (unsupported) +- For MVS define NO_vsnprintf and undefine FAR [van Burik] +- Add pragma for fdopen on MVS [van Burik] + +Changes in 1.2.0.5 (8 September 2003) +- Add OF to inflateBackEnd() declaration in zlib.h +- Remember start when using gzdopen in the middle of a file +- Use internal off_t counters in gz* functions to properly handle seeks +- Perform more rigorous check for distance-too-far in inffast.c +- Add Z_BLOCK flush option to return from inflate at block boundary +- Set strm->data_type on return from inflate + - Indicate bits unused, if at block boundary, and if in last block +- Replace size_t with ptrdiff_t in crc32.c, and check for correct size +- Add condition so old NO_DEFLATE define still works for compatibility +- FAQ update regarding the Windows DLL [Truta] +- INDEX update: add qnx entry, remove aix entry [Truta] +- Install zlib.3 into mandir [Wilson] +- Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta] +- Adapt the zlib interface to the new DLL convention guidelines [Truta] +- Introduce ZLIB_WINAPI macro to allow the export of functions using + the WINAPI calling convention, for Visual Basic [Vollant, Truta] +- Update msdos and win32 scripts and makefiles [Truta] +- Export symbols by name, not by ordinal, in win32/zlib.def [Truta] +- Add contrib/ada [Anisimkov] +- Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta] +- Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant] +- Add contrib/masm686 [Truta] +- Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm + [Truta, Vollant] +- Update contrib/delphi; rename to contrib/pascal; add example [Truta] +- Remove contrib/delphi2; add a new contrib/delphi [Truta] +- Avoid inclusion of the nonstandard <memory.h> in contrib/iostream, + and fix some method prototypes [Truta] +- Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip + [Truta] +- Avoid the use of backslash (\) in contrib/minizip [Vollant] +- Fix file time handling in contrib/untgz; update makefiles [Truta] +- Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines + [Vollant] +- Remove contrib/vstudio/vc15_16 [Vollant] +- Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta] +- Update README.contrib [Truta] +- Invert the assignment order of match_head and s->prev[...] in + INSERT_STRING [Truta] +- Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings + [Truta] +- Compare function pointers with 0, not with NULL or Z_NULL [Truta] +- Fix prototype of syncsearch in inflate.c [Truta] +- Introduce ASMINF macro to be enabled when using an ASM implementation + of inflate_fast [Truta] +- Change NO_DEFLATE to NO_GZCOMPRESS [Truta] +- Modify test_gzio in example.c to take a single file name as a + parameter [Truta] +- Exit the example.c program if gzopen fails [Truta] +- Add type casts around strlen in example.c [Truta] +- Remove casting to sizeof in minigzip.c; give a proper type + to the variable compared with SUFFIX_LEN [Truta] +- Update definitions of STDC and STDC99 in zconf.h [Truta] +- Synchronize zconf.h with the new Windows DLL interface [Truta] +- Use SYS16BIT instead of __32BIT__ to distinguish between + 16- and 32-bit platforms [Truta] +- Use far memory allocators in small 16-bit memory models for + Turbo C [Truta] +- Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in + zlibCompileFlags [Truta] +- Cygwin has vsnprintf [Wilson] +- In Windows16, OS_CODE is 0, as in MSDOS [Truta] +- In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson] + +Changes in 1.2.0.4 (10 August 2003) +- Minor FAQ updates +- Be more strict when checking inflateInit2's windowBits parameter +- Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well +- Add gzip wrapper option to deflateInit2 using windowBits +- Add updated QNX rule in configure and qnx directory [Bonnefoy] +- Make inflate distance-too-far checks more rigorous +- Clean up FAR usage in inflate +- Add casting to sizeof() in gzio.c and minigzip.c + +Changes in 1.2.0.3 (19 July 2003) +- Fix silly error in gzungetc() implementation [Vollant] +- Update contrib/minizip and contrib/vstudio [Vollant] +- Fix printf format in example.c +- Correct cdecl support in zconf.in.h [Anisimkov] +- Minor FAQ updates + +Changes in 1.2.0.2 (13 July 2003) +- Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons +- Attempt to avoid warnings in crc32.c for pointer-int conversion +- Add AIX to configure, remove aix directory [Bakker] +- Add some casts to minigzip.c +- Improve checking after insecure sprintf() or vsprintf() calls +- Remove #elif's from crc32.c +- Change leave label to inf_leave in inflate.c and infback.c to avoid + library conflicts +- Remove inflate gzip decoding by default--only enable gzip decoding by + special request for stricter backward compatibility +- Add zlibCompileFlags() function to return compilation information +- More typecasting in deflate.c to avoid warnings +- Remove leading underscore from _Capital #defines [Truta] +- Fix configure to link shared library when testing +- Add some Windows CE target adjustments [Mai] +- Remove #define ZLIB_DLL in zconf.h [Vollant] +- Add zlib.3 [Rodgers] +- Update RFC URL in deflate.c and algorithm.txt [Mai] +- Add zlib_dll_FAQ.txt to contrib [Truta] +- Add UL to some constants [Truta] +- Update minizip and vstudio [Vollant] +- Remove vestigial NEED_DUMMY_RETURN from zconf.in.h +- Expand use of NO_DUMMY_DECL to avoid all dummy structures +- Added iostream3 to contrib [Schwardt] +- Replace rewind() with fseek() for WinCE [Truta] +- Improve setting of zlib format compression level flags + - Report 0 for huffman and rle strategies and for level == 0 or 1 + - Report 2 only for level == 6 +- Only deal with 64K limit when necessary at compile time [Truta] +- Allow TOO_FAR check to be turned off at compile time [Truta] +- Add gzclearerr() function [Souza] +- Add gzungetc() function + +Changes in 1.2.0.1 (17 March 2003) +- Add Z_RLE strategy for run-length encoding [Truta] + - When Z_RLE requested, restrict matches to distance one + - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE +- Correct FASTEST compilation to allow level == 0 +- Clean up what gets compiled for FASTEST +- Incorporate changes to zconf.in.h [Vollant] + - Refine detection of Turbo C need for dummy returns + - Refine ZLIB_DLL compilation + - Include additional header file on VMS for off_t typedef +- Try to use _vsnprintf where it supplants vsprintf [Vollant] +- Add some casts in inffast.c +- Enchance comments in zlib.h on what happens if gzprintf() tries to + write more than 4095 bytes before compression +- Remove unused state from inflateBackEnd() +- Remove exit(0) from minigzip.c, example.c +- Get rid of all those darn tabs +- Add "check" target to Makefile.in that does the same thing as "test" +- Add "mostlyclean" and "maintainer-clean" targets to Makefile.in +- Update contrib/inflate86 [Anderson] +- Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant] +- Add msdos and win32 directories with makefiles [Truta] +- More additions and improvements to the FAQ + +Changes in 1.2.0 (9 March 2003) +- New and improved inflate code + - About 20% faster + - Does not allocate 32K window unless and until needed + - Automatically detects and decompresses gzip streams + - Raw inflate no longer needs an extra dummy byte at end + - Added inflateBack functions using a callback interface--even faster + than inflate, useful for file utilities (gzip, zip) + - Added inflateCopy() function to record state for random access on + externally generated deflate streams (e.g. in gzip files) + - More readable code (I hope) +- New and improved crc32() + - About 50% faster, thanks to suggestions from Rodney Brown +- Add deflateBound() and compressBound() functions +- Fix memory leak in deflateInit2() +- Permit setting dictionary for raw deflate (for parallel deflate) +- Fix const declaration for gzwrite() +- Check for some malloc() failures in gzio.c +- Fix bug in gzopen() on single-byte file 0x1f +- Fix bug in gzread() on concatenated file with 0x1f at end of buffer + and next buffer doesn't start with 0x8b +- Fix uncompress() to return Z_DATA_ERROR on truncated input +- Free memory at end of example.c +- Remove MAX #define in trees.c (conflicted with some libraries) +- Fix static const's in deflate.c, gzio.c, and zutil.[ch] +- Declare malloc() and free() in gzio.c if STDC not defined +- Use malloc() instead of calloc() in zutil.c if int big enough +- Define STDC for AIX +- Add aix/ with approach for compiling shared library on AIX +- Add HP-UX support for shared libraries in configure +- Add OpenUNIX support for shared libraries in configure +- Use $cc instead of gcc to build shared library +- Make prefix directory if needed when installing +- Correct Macintosh avoidance of typedef Byte in zconf.h +- Correct Turbo C memory allocation when under Linux +- Use libz.a instead of -lz in Makefile (assure use of compiled library) +- Update configure to check for snprintf or vsnprintf functions and their + return value, warn during make if using an insecure function +- Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that + is lost when library is used--resolution is to build new zconf.h +- Documentation improvements (in zlib.h): + - Document raw deflate and inflate + - Update RFCs URL + - Point out that zlib and gzip formats are different + - Note that Z_BUF_ERROR is not fatal + - Document string limit for gzprintf() and possible buffer overflow + - Note requirement on avail_out when flushing + - Note permitted values of flush parameter of inflate() +- Add some FAQs (and even answers) to the FAQ +- Add contrib/inflate86/ for x86 faster inflate +- Add contrib/blast/ for PKWare Data Compression Library decompression +- Add contrib/puff/ simple inflate for deflate format description + +Changes in 1.1.4 (11 March 2002) +- ZFREE was repeated on same allocation on some error conditions. + This creates a security problem described in + http://www.zlib.org/advisory-2002-03-11.txt +- Returned incorrect error (Z_MEM_ERROR) on some invalid data +- Avoid accesses before window for invalid distances with inflate window + less than 32K. +- force windowBits > 8 to avoid a bug in the encoder for a window size + of 256 bytes. (A complete fix will be available in 1.1.5). + +Changes in 1.1.3 (9 July 1998) +- fix "an inflate input buffer bug that shows up on rare but persistent + occasions" (Mark) +- fix gzread and gztell for concatenated .gz files (Didier Le Botlan) +- fix gzseek(..., SEEK_SET) in write mode +- fix crc check after a gzeek (Frank Faubert) +- fix miniunzip when the last entry in a zip file is itself a zip file + (J Lillge) +- add contrib/asm586 and contrib/asm686 (Brian Raiter) + See http://www.muppetlabs.com/~breadbox/software/assembly.html +- add support for Delphi 3 in contrib/delphi (Bob Dellaca) +- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti) +- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren) +- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks) +- added a FAQ file + +- Support gzdopen on Mac with Metrowerks (Jason Linhart) +- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart) +- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young) +- avoid some warnings with Borland C (Tom Tanner) +- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant) +- emulate utime() for WIN32 in contrib/untgz (Gilles Vollant) +- allow several arguments to configure (Tim Mooney, Frodo Looijaard) +- use libdir and includedir in Makefile.in (Tim Mooney) +- support shared libraries on OSF1 V4 (Tim Mooney) +- remove so_locations in "make clean" (Tim Mooney) +- fix maketree.c compilation error (Glenn, Mark) +- Python interface to zlib now in Python 1.5 (Jeremy Hylton) +- new Makefile.riscos (Rich Walker) +- initialize static descriptors in trees.c for embedded targets (Nick Smith) +- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith) +- add the OS/2 files in Makefile.in too (Andrew Zabolotny) +- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane) +- fix maketree.c to allow clean compilation of inffixed.h (Mark) +- fix parameter check in deflateCopy (Gunther Nikl) +- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler) +- Many portability patches by Christian Spieler: + . zutil.c, zutil.h: added "const" for zmem* + . Make_vms.com: fixed some typos + . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists + . msdos/Makefile.msc: remove "default rtl link library" info from obj files + . msdos/Makefile.*: use model-dependent name for the built zlib library + . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc: + new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT) +- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane) +- replace __far with _far for better portability (Christian Spieler, Tom Lane) +- fix test for errno.h in configure (Tim Newsham) + +Changes in 1.1.2 (19 March 98) +- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant) + See http://www.winimage.com/zLibDll/unzip.html +- preinitialize the inflate tables for fixed codes, to make the code + completely thread safe (Mark) +- some simplifications and slight speed-up to the inflate code (Mark) +- fix gzeof on non-compressed files (Allan Schrum) +- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs) +- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn) +- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny) +- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori) +- do not wrap extern "C" around system includes (Tom Lane) +- mention zlib binding for TCL in README (Andreas Kupries) +- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert) +- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson) +- allow "configure --prefix $HOME" (Tim Mooney) +- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson) +- move Makefile.sas to amiga/Makefile.sas + +Changes in 1.1.1 (27 Feb 98) +- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) +- remove block truncation heuristic which had very marginal effect for zlib + (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the + compression ratio on some files. This also allows inlining _tr_tally for + matches in deflate_slow. +- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) + +Changes in 1.1.0 (24 Feb 98) +- do not return STREAM_END prematurely in inflate (John Bowler) +- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) +- compile with -DFASTEST to get compression code optimized for speed only +- in minigzip, try mmap'ing the input file first (Miguel Albrecht) +- increase siz... [truncated message content] |