--- /dev/null
+----------------------------------------------------------------
+-- ZLib for Ada thick binding. --
+-- --
+-- Copyright (C) 2002-2004 Dmitriy Anisimkov --
+-- --
+-- Open source license information is in the zlib.ads file. --
+----------------------------------------------------------------
+--
+-- $Id: buffer_demo.adb,v 1.3 2004/09/06 06:55:35 vagul Exp $
+
+-- This demo program provided by Dr Steve Sangwine <sjs@essex.ac.uk>
+--
+-- Demonstration of a problem with Zlib-Ada (already fixed) when a buffer
+-- of exactly the correct size is used for decompressed data, and the last
+-- few bytes passed in to Zlib are checksum bytes.
+
+-- This program compresses a string of text, and then decompresses the
+-- compressed text into a buffer of the same size as the original text.
+
+with Ada.Streams; use Ada.Streams;
+with Ada.Text_IO;
+
+with ZLib; use ZLib;
+
+procedure Buffer_Demo is
+ EOL : Character renames ASCII.LF;
+ Text : constant String
+ := "Four score and seven years ago our fathers brought forth," & EOL &
+ "upon this continent, a new nation, conceived in liberty," & EOL &
+ "and dedicated to the proposition that `all men are created equal'.";
+
+ Source : Stream_Element_Array (1 .. Text'Length);
+ for Source'Address use Text'Address;
+
+begin
+ Ada.Text_IO.Put (Text);
+ Ada.Text_IO.New_Line;
+ Ada.Text_IO.Put_Line
+ ("Uncompressed size : " & Positive'Image (Text'Length) & " bytes");
+
+ declare
+ Compressed_Data : Stream_Element_Array (1 .. Text'Length);
+ L : Stream_Element_Offset;
+ begin
+ Compress : declare
+ Compressor : Filter_Type;
+ I : Stream_Element_Offset;
+ begin
+ Deflate_Init (Compressor);
+
+ -- Compress the whole of T at once.
+
+ Translate (Compressor, Source, I, Compressed_Data, L, Finish);
+ pragma Assert (I = Source'Last);
+
+ Close (Compressor);
+
+ Ada.Text_IO.Put_Line
+ ("Compressed size : "
+ & Stream_Element_Offset'Image (L) & " bytes");
+ end Compress;
+
+ -- Now we decompress the data, passing short blocks of data to Zlib
+ -- (because this demonstrates the problem - the last block passed will
+ -- contain checksum information and there will be no output, only a
+ -- check inside Zlib that the checksum is correct).
+
+ Decompress : declare
+ Decompressor : Filter_Type;
+
+ Uncompressed_Data : Stream_Element_Array (1 .. Text'Length);
+
+ Block_Size : constant := 4;
+ -- This makes sure that the last block contains
+ -- only Adler checksum data.
+
+ P : Stream_Element_Offset := Compressed_Data'First - 1;
+ O : Stream_Element_Offset;
+ begin
+ Inflate_Init (Decompressor);
+
+ loop
+ Translate
+ (Decompressor,
+ Compressed_Data
+ (P + 1 .. Stream_Element_Offset'Min (P + Block_Size, L)),
+ P,
+ Uncompressed_Data
+ (Total_Out (Decompressor) + 1 .. Uncompressed_Data'Last),
+ O,
+ No_Flush);
+
+ Ada.Text_IO.Put_Line
+ ("Total in : " & Count'Image (Total_In (Decompressor)) &
+ ", out : " & Count'Image (Total_Out (Decompressor)));
+
+ exit when P = L;
+ end loop;
+
+ Ada.Text_IO.New_Line;
+ Ada.Text_IO.Put_Line
+ ("Decompressed text matches original text : "
+ & Boolean'Image (Uncompressed_Data = Source));
+ end Decompress;
+ end;
+end Buffer_Demo;
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>\r
+<project name="DotZLib" default="build" basedir="./DotZLib">\r
+ <description>A .Net wrapper library around ZLib1.dll</description>\r
+\r
+ <property name="nunit.location" value="c:/program files/NUnit V2.1/bin" />\r
+ <property name="build.root" value="bin" />\r
+ \r
+ <property name="debug" value="true" />\r
+ <property name="nunit" value="true" />\r
+\r
+ <property name="build.folder" value="${build.root}/debug/" if="${debug}" />\r
+ <property name="build.folder" value="${build.root}/release/" unless="${debug}" />\r
+\r
+ <target name="clean" description="Remove all generated files">\r
+ <delete dir="${build.root}" failonerror="false" />\r
+ </target>\r
+\r
+ <target name="build" description="compiles the source code">\r
+ \r
+ <mkdir dir="${build.folder}" />\r
+ <csc target="library" output="${build.folder}DotZLib.dll" debug="${debug}">\r
+ <references basedir="${nunit.location}">\r
+ <includes if="${nunit}" name="nunit.framework.dll" />\r
+ </references>\r
+ <sources>\r
+ <includes name="*.cs" />\r
+ <excludes name="UnitTests.cs" unless="${nunit}" />\r
+ </sources>\r
+ <arg value="/d:nunit" if="${nunit}" />\r
+ </csc>\r
+ </target>\r
+\r
+</project>
\ No newline at end of file
--- /dev/null
+Microsoft Visual Studio Solution File, Format Version 8.00\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotZLib", "DotZLib\DotZLib.csproj", "{BB1EE0B1-1808-46CB-B786-949D91117FC5}"\r
+ ProjectSection(ProjectDependencies) = postProject\r
+ EndProjectSection\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfiguration) = preSolution\r
+ Debug = Debug\r
+ Release = Release\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfiguration) = postSolution\r
+ {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.ActiveCfg = Debug|.NET\r
+ {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.Build.0 = Debug|.NET\r
+ {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.ActiveCfg = Release|.NET\r
+ {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.Build.0 = Release|.NET\r
+ EndGlobalSection\r
+ GlobalSection(ExtensibilityGlobals) = postSolution\r
+ EndGlobalSection\r
+ GlobalSection(ExtensibilityAddIns) = postSolution\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+\r
+//\r
+// General Information about an assembly is controlled through the following \r
+// set of attributes. Change these attribute values to modify the information\r
+// associated with an assembly.\r
+//\r
+[assembly: AssemblyTitle("DotZLib")]\r
+[assembly: AssemblyDescription(".Net bindings for ZLib compression dll 1.2.x")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("Henrik Ravn")]\r
+[assembly: AssemblyProduct("")]\r
+[assembly: AssemblyCopyright("(c) 2004 by Henrik Ravn")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")] \r
+\r
+//\r
+// Version information for an assembly consists of the following four values:\r
+//\r
+// Major Version\r
+// Minor Version \r
+// Build Number\r
+// Revision\r
+//\r
+// You can specify all the values or you can default the Revision and Build Numbers \r
+// by using the '*' as shown below:\r
+\r
+[assembly: AssemblyVersion("1.0.*")]\r
+\r
+//\r
+// In order to sign your assembly you must specify a key to use. Refer to the \r
+// Microsoft .NET Framework documentation for more information on assembly signing.\r
+//\r
+// Use the attributes below to control which key is used for signing. \r
+//\r
+// Notes: \r
+// (*) If no key is specified, the assembly is not signed.\r
+// (*) KeyName refers to a key that has been installed in the Crypto Service\r
+// Provider (CSP) on your machine. KeyFile refers to a file which contains\r
+// a key.\r
+// (*) If the KeyFile and the KeyName values are both specified, the \r
+// following processing occurs:\r
+// (1) If the KeyName can be found in the CSP, that key is used.\r
+// (2) If the KeyName does not exist and the KeyFile does exist, the key \r
+// in the KeyFile is installed into the CSP and used.\r
+// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\r
+// When specifying the KeyFile, the location of the KeyFile should be\r
+// relative to the project output directory which is\r
+// %Project Directory%\obj\<configuration>. For example, if your KeyFile is\r
+// located in the project directory, you would specify the AssemblyKeyFile \r
+// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]\r
+// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\r
+// documentation for more information on this.\r
+//\r
+[assembly: AssemblyDelaySign(false)]\r
+[assembly: AssemblyKeyFile("")]\r
+[assembly: AssemblyKeyName("")]\r
--- /dev/null
+//\r
+// © Copyright Henrik Ravn 2004\r
+//\r
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0. \r
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
+//\r
+\r
+using System;\r
+using System.Runtime.InteropServices;\r
+using System.Text;\r
+\r
+\r
+namespace DotZLib\r
+{\r
+ #region ChecksumGeneratorBase\r
+ /// <summary>\r
+ /// Implements the common functionality needed for all <see cref="ChecksumGenerator"/>s\r
+ /// </summary>\r
+ /// <example></example>\r
+ public abstract class ChecksumGeneratorBase : ChecksumGenerator\r
+ {\r
+ /// <summary>\r
+ /// The value of the current checksum\r
+ /// </summary>\r
+ protected uint _current;\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the checksum generator base - the current checksum is \r
+ /// set to zero\r
+ /// </summary>\r
+ public ChecksumGeneratorBase()\r
+ {\r
+ _current = 0;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the checksum generator basewith a specified value\r
+ /// </summary>\r
+ /// <param name="initialValue">The value to set the current checksum to</param>\r
+ public ChecksumGeneratorBase(uint initialValue)\r
+ {\r
+ _current = initialValue;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Resets the current checksum to zero\r
+ /// </summary>\r
+ public void Reset() { _current = 0; }\r
+\r
+ /// <summary>\r
+ /// Gets the current checksum value\r
+ /// </summary>\r
+ public uint Value { get { return _current; } }\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with part of an array of bytes\r
+ /// </summary>\r
+ /// <param name="data">The data to update the checksum with</param>\r
+ /// <param name="offset">Where in <c>data</c> to start updating</param>\r
+ /// <param name="count">The number of bytes from <c>data</c> to use</param>\r
+ /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>\r
+ /// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>\r
+ /// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>\r
+ /// <remarks>All the other <c>Update</c> methods are implmeneted in terms of this one. \r
+ /// This is therefore the only method a derived class has to implement</remarks>\r
+ public abstract void Update(byte[] data, int offset, int count);\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with an array of bytes.\r
+ /// </summary>\r
+ /// <param name="data">The data to update the checksum with</param>\r
+ public void Update(byte[] data)\r
+ {\r
+ Update(data, 0, data.Length);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with the data from a string\r
+ /// </summary>\r
+ /// <param name="data">The string to update the checksum with</param>\r
+ /// <remarks>The characters in the string are converted by the UTF-8 encoding</remarks>\r
+ public void Update(string data)\r
+ {\r
+ Update(Encoding.UTF8.GetBytes(data));\r
+ }\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with the data from a string, using a specific encoding\r
+ /// </summary>\r
+ /// <param name="data">The string to update the checksum with</param>\r
+ /// <param name="encoding">The encoding to use</param>\r
+ public void Update(string data, Encoding encoding)\r
+ {\r
+ Update(encoding.GetBytes(data));\r
+ }\r
+\r
+ }\r
+ #endregion\r
+\r
+ #region CRC32\r
+ /// <summary>\r
+ /// Implements a CRC32 checksum generator\r
+ /// </summary>\r
+ public sealed class CRC32Checksum : ChecksumGeneratorBase \r
+ {\r
+ #region DLL imports\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern uint crc32(uint crc, int data, uint length);\r
+\r
+ #endregion\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the CRC32 checksum generator\r
+ /// </summary>\r
+ public CRC32Checksum() : base() {}\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the CRC32 checksum generator with a specified value\r
+ /// </summary>\r
+ /// <param name="initialValue">The value to set the current checksum to</param>\r
+ public CRC32Checksum(uint initialValue) : base(initialValue) {}\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with part of an array of bytes\r
+ /// </summary>\r
+ /// <param name="data">The data to update the checksum with</param>\r
+ /// <param name="offset">Where in <c>data</c> to start updating</param>\r
+ /// <param name="count">The number of bytes from <c>data</c> to use</param>\r
+ /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>\r
+ /// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>\r
+ /// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>\r
+ public override void Update(byte[] data, int offset, int count)\r
+ {\r
+ if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\r
+ if ((offset+count) > data.Length) throw new ArgumentException();\r
+ GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned);\r
+ try\r
+ {\r
+ _current = crc32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count);\r
+ }\r
+ finally\r
+ {\r
+ hData.Free();\r
+ }\r
+ }\r
+\r
+ }\r
+ #endregion\r
+\r
+ #region Adler\r
+ /// <summary>\r
+ /// Implements a checksum generator that computes the Adler checksum on data\r
+ /// </summary>\r
+ public sealed class AdlerChecksum : ChecksumGeneratorBase \r
+ {\r
+ #region DLL imports\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern uint adler32(uint adler, int data, uint length);\r
+\r
+ #endregion\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the Adler checksum generator\r
+ /// </summary>\r
+ public AdlerChecksum() : base() {}\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the Adler checksum generator with a specified value\r
+ /// </summary>\r
+ /// <param name="initialValue">The value to set the current checksum to</param>\r
+ public AdlerChecksum(uint initialValue) : base(initialValue) {}\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with part of an array of bytes\r
+ /// </summary>\r
+ /// <param name="data">The data to update the checksum with</param>\r
+ /// <param name="offset">Where in <c>data</c> to start updating</param>\r
+ /// <param name="count">The number of bytes from <c>data</c> to use</param>\r
+ /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>\r
+ /// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>\r
+ /// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>\r
+ public override void Update(byte[] data, int offset, int count)\r
+ {\r
+ if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\r
+ if ((offset+count) > data.Length) throw new ArgumentException();\r
+ GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned);\r
+ try\r
+ {\r
+ _current = adler32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count);\r
+ }\r
+ finally\r
+ {\r
+ hData.Free();\r
+ }\r
+ }\r
+\r
+ }\r
+ #endregion\r
+\r
+}
\ No newline at end of file
--- /dev/null
+//\r
+// © Copyright Henrik Ravn 2004\r
+//\r
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0. \r
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
+//\r
+\r
+using System;\r
+using System.Diagnostics;\r
+\r
+namespace DotZLib\r
+{\r
+\r
+ /// <summary>\r
+ /// This class implements a circular buffer\r
+ /// </summary>\r
+ internal class CircularBuffer\r
+ {\r
+ #region Private data\r
+ private int _capacity;\r
+ private int _head;\r
+ private int _tail;\r
+ private int _size;\r
+ private byte[] _buffer;\r
+ #endregion\r
+\r
+ public CircularBuffer(int capacity)\r
+ { \r
+ Debug.Assert( capacity > 0 );\r
+ _buffer = new byte[capacity];\r
+ _capacity = capacity;\r
+ _head = 0;\r
+ _tail = 0;\r
+ _size = 0;\r
+ }\r
+\r
+ public int Size { get { return _size; } }\r
+\r
+ public int Put(byte[] source, int offset, int count)\r
+ {\r
+ Debug.Assert( count > 0 );\r
+ int trueCount = Math.Min(count, _capacity - Size);\r
+ for (int i = 0; i < trueCount; ++i)\r
+ _buffer[(_tail+i) % _capacity] = source[offset+i];\r
+ _tail += trueCount;\r
+ _tail %= _capacity;\r
+ _size += trueCount;\r
+ return trueCount;\r
+ }\r
+\r
+ public bool Put(byte b)\r
+ {\r
+ if (Size == _capacity) // no room\r
+ return false;\r
+ _buffer[_tail++] = b;\r
+ _tail %= _capacity;\r
+ ++_size;\r
+ return true;\r
+ }\r
+\r
+ public int Get(byte[] destination, int offset, int count)\r
+ {\r
+ int trueCount = Math.Min(count,Size);\r
+ for (int i = 0; i < trueCount; ++i)\r
+ destination[offset + i] = _buffer[(_head+i) % _capacity];\r
+ _head += trueCount;\r
+ _head %= _capacity;\r
+ _size -= trueCount;\r
+ return trueCount;\r
+ }\r
+\r
+ public int Get()\r
+ {\r
+ if (Size == 0)\r
+ return -1;\r
+\r
+ int result = (int)_buffer[_head++ % _capacity];\r
+ --_size;\r
+ return result;\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+//\r
+// © Copyright Henrik Ravn 2004\r
+//\r
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0. \r
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
+//\r
+\r
+using System;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace DotZLib\r
+{\r
+ /// <summary>\r
+ /// Implements the common functionality needed for all <see cref="Codec"/>s\r
+ /// </summary>\r
+ public abstract class CodecBase : Codec, IDisposable\r
+ {\r
+\r
+ #region Data members\r
+\r
+ /// <summary>\r
+ /// Instance of the internal zlib buffer structure that is \r
+ /// passed to all functions in the zlib dll\r
+ /// </summary>\r
+ internal ZStream _ztream = new ZStream();\r
+\r
+ /// <summary>\r
+ /// True if the object instance has been disposed, false otherwise\r
+ /// </summary>\r
+ protected bool _isDisposed = false;\r
+\r
+ /// <summary>\r
+ /// The size of the internal buffers\r
+ /// </summary>\r
+ protected const int kBufferSize = 16384;\r
+\r
+ private byte[] _outBuffer = new byte[kBufferSize];\r
+ private byte[] _inBuffer = new byte[kBufferSize];\r
+\r
+ private GCHandle _hInput;\r
+ private GCHandle _hOutput;\r
+\r
+ private uint _checksum = 0;\r
+\r
+ #endregion\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <c>CodeBase</c> class. \r
+ /// </summary>\r
+ public CodecBase()\r
+ {\r
+ try\r
+ {\r
+ _hInput = GCHandle.Alloc(_inBuffer, GCHandleType.Pinned);\r
+ _hOutput = GCHandle.Alloc(_outBuffer, GCHandleType.Pinned);\r
+ }\r
+ catch (Exception)\r
+ {\r
+ CleanUp(false);\r
+ throw;\r
+ }\r
+ }\r
+\r
+\r
+ #region Codec Members\r
+\r
+ /// <summary>\r
+ /// Occurs when more processed data are available.\r
+ /// </summary>\r
+ public event DataAvailableHandler DataAvailable;\r
+\r
+ /// <summary>\r
+ /// Fires the <see cref="DataAvailable"/> event\r
+ /// </summary>\r
+ protected void OnDataAvailable()\r
+ {\r
+ if (_ztream.total_out > 0)\r
+ {\r
+ if (DataAvailable != null)\r
+ DataAvailable( _outBuffer, 0, (int)_ztream.total_out); \r
+ resetOutput();\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds more data to the codec to be processed.\r
+ /// </summary>\r
+ /// <param name="data">Byte array containing the data to be added to the codec</param>\r
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\r
+ public void Add(byte[] data)\r
+ {\r
+ Add(data,0,data.Length);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds more data to the codec to be processed.\r
+ /// </summary>\r
+ /// <param name="data">Byte array containing the data to be added to the codec</param>\r
+ /// <param name="offset">The index of the first byte to add from <c>data</c></param>\r
+ /// <param name="count">The number of bytes to add</param>\r
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\r
+ /// <remarks>This must be implemented by a derived class</remarks>\r
+ public abstract void Add(byte[] data, int offset, int count);\r
+\r
+ /// <summary>\r
+ /// Finishes up any pending data that needs to be processed and handled.\r
+ /// </summary>\r
+ /// <remarks>This must be implemented by a derived class</remarks>\r
+ public abstract void Finish();\r
+\r
+ /// <summary>\r
+ /// Gets the checksum of the data that has been added so far\r
+ /// </summary>\r
+ public uint Checksum { get { return _checksum; } }\r
+\r
+ #endregion\r
+\r
+ #region Destructor & IDisposable stuff\r
+\r
+ /// <summary>\r
+ /// Destroys this instance\r
+ /// </summary>\r
+ ~CodecBase()\r
+ {\r
+ CleanUp(false);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Releases any unmanaged resources and calls the <see cref="CleanUp()"/> method of the derived class\r
+ /// </summary>\r
+ public void Dispose()\r
+ {\r
+ CleanUp(true);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Performs any codec specific cleanup\r
+ /// </summary>\r
+ /// <remarks>This must be implemented by a derived class</remarks>\r
+ protected abstract void CleanUp();\r
+\r
+ // performs the release of the handles and calls the dereived CleanUp()\r
+ private void CleanUp(bool isDisposing)\r
+ {\r
+ if (!_isDisposed)\r
+ {\r
+ CleanUp();\r
+ if (_hInput.IsAllocated)\r
+ _hInput.Free();\r
+ if (_hOutput.IsAllocated)\r
+ _hOutput.Free();\r
+\r
+ _isDisposed = true;\r
+ }\r
+ }\r
+\r
+\r
+ #endregion\r
+\r
+ #region Helper methods\r
+\r
+ /// <summary>\r
+ /// Copies a number of bytes to the internal codec buffer - ready for proccesing\r
+ /// </summary>\r
+ /// <param name="data">The byte array that contains the data to copy</param>\r
+ /// <param name="startIndex">The index of the first byte to copy</param>\r
+ /// <param name="count">The number of bytes to copy from <c>data</c></param>\r
+ protected void copyInput(byte[] data, int startIndex, int count)\r
+ {\r
+ Array.Copy(data, startIndex, _inBuffer,0, count);\r
+ _ztream.next_in = _hInput.AddrOfPinnedObject();\r
+ _ztream.total_in = 0;\r
+ _ztream.avail_in = (uint)count;\r
+\r
+ }\r
+\r
+ /// <summary>\r
+ /// Resets the internal output buffers to a known state - ready for processing\r
+ /// </summary>\r
+ protected void resetOutput()\r
+ {\r
+ _ztream.total_out = 0;\r
+ _ztream.avail_out = kBufferSize;\r
+ _ztream.next_out = _hOutput.AddrOfPinnedObject();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Updates the running checksum property\r
+ /// </summary>\r
+ /// <param name="newSum">The new checksum value</param>\r
+ protected void setChecksum(uint newSum)\r
+ {\r
+ _checksum = newSum;\r
+ }\r
+ #endregion\r
+\r
+ }\r
+}\r
--- /dev/null
+//\r
+// © Copyright Henrik Ravn 2004\r
+//\r
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0. \r
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
+//\r
+\r
+using System;\r
+using System.Diagnostics;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace DotZLib\r
+{\r
+\r
+ /// <summary>\r
+ /// Implements a data compressor, using the deflate algorithm in the ZLib dll\r
+ /// </summary>\r
+ public sealed class Deflater : CodecBase\r
+ {\r
+ #region Dll imports\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]\r
+ private static extern int deflateInit_(ref ZStream sz, int level, string vs, int size);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int deflate(ref ZStream sz, int flush);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int deflateReset(ref ZStream sz);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int deflateEnd(ref ZStream sz);\r
+ #endregion\r
+\r
+ /// <summary>\r
+ /// Constructs an new instance of the <c>Deflater</c>\r
+ /// </summary>\r
+ /// <param name="level">The compression level to use for this <c>Deflater</c></param>\r
+ public Deflater(CompressLevel level) : base()\r
+ {\r
+ int retval = deflateInit_(ref _ztream, (int)level, Info.Version, Marshal.SizeOf(_ztream));\r
+ if (retval != 0)\r
+ throw new ZLibException(retval, "Could not initialize deflater");\r
+\r
+ resetOutput();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds more data to the codec to be processed.\r
+ /// </summary>\r
+ /// <param name="data">Byte array containing the data to be added to the codec</param>\r
+ /// <param name="offset">The index of the first byte to add from <c>data</c></param>\r
+ /// <param name="count">The number of bytes to add</param>\r
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\r
+ public override void Add(byte[] data, int offset, int count)\r
+ {\r
+ if (data == null) throw new ArgumentNullException();\r
+ if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\r
+ if ((offset+count) > data.Length) throw new ArgumentException();\r
+ \r
+ int total = count;\r
+ int inputIndex = offset;\r
+ int err = 0;\r
+\r
+ while (err >= 0 && inputIndex < total)\r
+ {\r
+ copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize));\r
+ while (err >= 0 && _ztream.avail_in > 0)\r
+ {\r
+ err = deflate(ref _ztream, (int)FlushTypes.None);\r
+ if (err == 0)\r
+ while (_ztream.avail_out == 0)\r
+ {\r
+ OnDataAvailable();\r
+ err = deflate(ref _ztream, (int)FlushTypes.None);\r
+ }\r
+ inputIndex += (int)_ztream.total_in;\r
+ }\r
+ }\r
+ setChecksum( _ztream.adler );\r
+ }\r
+\r
+\r
+ /// <summary>\r
+ /// Finishes up any pending data that needs to be processed and handled.\r
+ /// </summary>\r
+ public override void Finish()\r
+ {\r
+ int err;\r
+ do \r
+ {\r
+ err = deflate(ref _ztream, (int)FlushTypes.Finish);\r
+ OnDataAvailable();\r
+ }\r
+ while (err == 0);\r
+ setChecksum( _ztream.adler );\r
+ deflateReset(ref _ztream);\r
+ resetOutput();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Closes the internal zlib deflate stream\r
+ /// </summary>\r
+ protected override void CleanUp() { deflateEnd(ref _ztream); }\r
+\r
+ }\r
+}\r
--- /dev/null
+//\r
+// © Copyright Henrik Ravn 2004\r
+//\r
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0. \r
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
+//\r
+\r
+using System;\r
+using System.IO;\r
+using System.Runtime.InteropServices;\r
+using System.Text;\r
+\r
+\r
+namespace DotZLib\r
+{\r
+\r
+ #region Internal types\r
+\r
+ /// <summary>\r
+ /// Defines constants for the various flush types used with zlib\r
+ /// </summary>\r
+ internal enum FlushTypes \r
+ {\r
+ None, Partial, Sync, Full, Finish, Block\r
+ }\r
+\r
+ #region ZStream structure\r
+ // internal mapping of the zlib zstream structure for marshalling\r
+ [StructLayoutAttribute(LayoutKind.Sequential, Pack=4, Size=0, CharSet=CharSet.Ansi)]\r
+ internal struct ZStream\r
+ {\r
+ public IntPtr next_in;\r
+ public uint avail_in;\r
+ public uint total_in;\r
+\r
+ public IntPtr next_out;\r
+ public uint avail_out;\r
+ public uint total_out;\r
+\r
+ [MarshalAs(UnmanagedType.LPStr)]\r
+ string msg; \r
+ uint state;\r
+\r
+ uint zalloc;\r
+ uint zfree;\r
+ uint opaque;\r
+\r
+ int data_type;\r
+ public uint adler;\r
+ uint reserved;\r
+ }\r
+\r
+ #endregion\r
+ \r
+ #endregion\r
+\r
+ #region Public enums\r
+ /// <summary>\r
+ /// Defines constants for the available compression levels in zlib\r
+ /// </summary>\r
+ public enum CompressLevel : int\r
+ {\r
+ /// <summary>\r
+ /// The default compression level with a reasonable compromise between compression and speed\r
+ /// </summary>\r
+ Default = -1, \r
+ /// <summary>\r
+ /// No compression at all. The data are passed straight through.\r
+ /// </summary>\r
+ None = 0,\r
+ /// <summary>\r
+ /// The maximum compression rate available.\r
+ /// </summary>\r
+ Best = 9, \r
+ /// <summary>\r
+ /// The fastest available compression level.\r
+ /// </summary>\r
+ Fastest = 1\r
+ }\r
+ #endregion\r
+\r
+ #region Exception classes\r
+ /// <summary>\r
+ /// The exception that is thrown when an error occurs on the zlib dll\r
+ /// </summary>\r
+ public class ZLibException : ApplicationException\r
+ {\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified \r
+ /// error message and error code\r
+ /// </summary>\r
+ /// <param name="errorCode">The zlib error code that caused the exception</param>\r
+ /// <param name="msg">A message that (hopefully) describes the error</param>\r
+ public ZLibException(int errorCode, string msg) : base(String.Format("ZLib error {0} {1}", errorCode, msg))\r
+ {\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified \r
+ /// error code\r
+ /// </summary>\r
+ /// <param name="errorCode">The zlib error code that caused the exception</param>\r
+ public ZLibException(int errorCode) : base(String.Format("ZLib error {0}", errorCode))\r
+ {\r
+ }\r
+ }\r
+ #endregion\r
+\r
+ #region Interfaces\r
+\r
+ /// <summary>\r
+ /// Declares methods and properties that enables a running checksum to be calculated \r
+ /// </summary>\r
+ public interface ChecksumGenerator\r
+ {\r
+ /// <summary>\r
+ /// Gets the current value of the checksum\r
+ /// </summary>\r
+ uint Value { get; }\r
+\r
+ /// <summary>\r
+ /// Clears the current checksum to 0\r
+ /// </summary>\r
+ void Reset();\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with an array of bytes\r
+ /// </summary>\r
+ /// <param name="data">The data to update the checksum with</param>\r
+ void Update(byte[] data);\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with part of an array of bytes\r
+ /// </summary>\r
+ /// <param name="data">The data to update the checksum with</param>\r
+ /// <param name="offset">Where in <c>data</c> to start updating</param>\r
+ /// <param name="count">The number of bytes from <c>data</c> to use</param>\r
+ /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>\r
+ /// <exception cref="ArgumentNullException"><c>data</c> is a null reference</exception>\r
+ /// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>\r
+ void Update(byte[] data, int offset, int count);\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with the data from a string\r
+ /// </summary>\r
+ /// <param name="data">The string to update the checksum with</param>\r
+ /// <remarks>The characters in the string are converted by the UTF-8 encoding</remarks>\r
+ void Update(string data);\r
+\r
+ /// <summary>\r
+ /// Updates the current checksum with the data from a string, using a specific encoding\r
+ /// </summary>\r
+ /// <param name="data">The string to update the checksum with</param>\r
+ /// <param name="encoding">The encoding to use</param>\r
+ void Update(string data, Encoding encoding);\r
+ }\r
+\r
+\r
+ /// <summary>\r
+ /// Represents the method that will be called from a codec when new data\r
+ /// are available.\r
+ /// </summary>\r
+ /// <paramref name="data">The byte array containing the processed data</paramref>\r
+ /// <paramref name="startIndex">The index of the first processed byte in <c>data</c></paramref>\r
+ /// <paramref name="count">The number of processed bytes available</paramref>\r
+ /// <remarks>On return from this method, the data may be overwritten, so grab it while you can. \r
+ /// You cannot assume that startIndex will be zero.\r
+ /// </remarks>\r
+ public delegate void DataAvailableHandler(byte[] data, int startIndex, int count);\r
+\r
+ /// <summary>\r
+ /// Declares methods and events for implementing compressors/decompressors\r
+ /// </summary>\r
+ public interface Codec\r
+ {\r
+ /// <summary>\r
+ /// Occurs when more processed data are available.\r
+ /// </summary>\r
+ event DataAvailableHandler DataAvailable;\r
+\r
+ /// <summary>\r
+ /// Adds more data to the codec to be processed.\r
+ /// </summary>\r
+ /// <param name="data">Byte array containing the data to be added to the codec</param>\r
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\r
+ void Add(byte[] data);\r
+\r
+ /// <summary>\r
+ /// Adds more data to the codec to be processed.\r
+ /// </summary>\r
+ /// <param name="data">Byte array containing the data to be added to the codec</param>\r
+ /// <param name="offset">The index of the first byte to add from <c>data</c></param>\r
+ /// <param name="count">The number of bytes to add</param>\r
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\r
+ void Add(byte[] data, int offset, int count);\r
+\r
+ /// <summary>\r
+ /// Finishes up any pending data that needs to be processed and handled.\r
+ /// </summary>\r
+ void Finish();\r
+\r
+ /// <summary>\r
+ /// Gets the checksum of the data that has been added so far\r
+ /// </summary>\r
+ uint Checksum { get; }\r
+\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Classes\r
+ /// <summary>\r
+ /// Encapsulates general information about the ZLib library\r
+ /// </summary>\r
+ public class Info\r
+ {\r
+ #region DLL imports\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern uint zlibCompileFlags();\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern string zlibVersion();\r
+ #endregion\r
+\r
+ #region Private stuff\r
+ private uint _flags;\r
+\r
+ // helper function that unpacks a bitsize mask\r
+ private static int bitSize(uint bits)\r
+ {\r
+ switch (bits)\r
+ {\r
+ case 0: return 16;\r
+ case 1: return 32;\r
+ case 2: return 64;\r
+ }\r
+ return -1;\r
+ }\r
+ #endregion\r
+\r
+ /// <summary>\r
+ /// Constructs an instance of the <c>Info</c> class.\r
+ /// </summary>\r
+ public Info()\r
+ {\r
+ _flags = zlibCompileFlags();\r
+ }\r
+\r
+ /// <summary>\r
+ /// True if the library is compiled with debug info\r
+ /// </summary>\r
+ public bool HasDebugInfo { get { return 0 != (_flags & 0x100); } }\r
+\r
+ /// <summary>\r
+ /// True if the library is compiled with assembly optimizations\r
+ /// </summary>\r
+ public bool UsesAssemblyCode { get { return 0 != (_flags & 0x200); } }\r
+\r
+ /// <summary>\r
+ /// Gets the size of the unsigned int that was compiled into Zlib\r
+ /// </summary>\r
+ public int SizeOfUInt { get { return bitSize(_flags & 3); } }\r
+\r
+ /// <summary>\r
+ /// Gets the size of the unsigned long that was compiled into Zlib\r
+ /// </summary>\r
+ public int SizeOfULong { get { return bitSize((_flags >> 2) & 3); } }\r
+\r
+ /// <summary>\r
+ /// Gets the size of the pointers that were compiled into Zlib\r
+ /// </summary>\r
+ public int SizeOfPointer { get { return bitSize((_flags >> 4) & 3); } }\r
+\r
+ /// <summary>\r
+ /// Gets the size of the z_off_t type that was compiled into Zlib\r
+ /// </summary>\r
+ public int SizeOfOffset { get { return bitSize((_flags >> 6) & 3); } }\r
+\r
+ /// <summary>\r
+ /// Gets the version of ZLib as a string, e.g. "1.2.1"\r
+ /// </summary>\r
+ public static string Version { get { return zlibVersion(); } }\r
+ }\r
+\r
+ #endregion\r
+\r
+}\r
--- /dev/null
+<VisualStudioProject>\r
+ <CSHARP\r
+ ProjectType = "Local"\r
+ ProductVersion = "7.10.3077"\r
+ SchemaVersion = "2.0"\r
+ ProjectGuid = "{BB1EE0B1-1808-46CB-B786-949D91117FC5}"\r
+ >\r
+ <Build>\r
+ <Settings\r
+ ApplicationIcon = ""\r
+ AssemblyKeyContainerName = ""\r
+ AssemblyName = "DotZLib"\r
+ AssemblyOriginatorKeyFile = ""\r
+ DefaultClientScript = "JScript"\r
+ DefaultHTMLPageLayout = "Grid"\r
+ DefaultTargetSchema = "IE50"\r
+ DelaySign = "false"\r
+ OutputType = "Library"\r
+ PreBuildEvent = ""\r
+ PostBuildEvent = ""\r
+ RootNamespace = "DotZLib"\r
+ RunPostBuildEvent = "OnBuildSuccess"\r
+ StartupObject = ""\r
+ >\r
+ <Config\r
+ Name = "Debug"\r
+ AllowUnsafeBlocks = "false"\r
+ BaseAddress = "285212672"\r
+ CheckForOverflowUnderflow = "false"\r
+ ConfigurationOverrideFile = ""\r
+ DefineConstants = "DEBUG;TRACE"\r
+ DocumentationFile = "docs\DotZLib.xml"\r
+ DebugSymbols = "true"\r
+ FileAlignment = "4096"\r
+ IncrementalBuild = "false"\r
+ NoStdLib = "false"\r
+ NoWarn = "1591"\r
+ Optimize = "false"\r
+ OutputPath = "bin\Debug\"\r
+ RegisterForComInterop = "false"\r
+ RemoveIntegerChecks = "false"\r
+ TreatWarningsAsErrors = "false"\r
+ WarningLevel = "4"\r
+ />\r
+ <Config\r
+ Name = "Release"\r
+ AllowUnsafeBlocks = "false"\r
+ BaseAddress = "285212672"\r
+ CheckForOverflowUnderflow = "false"\r
+ ConfigurationOverrideFile = ""\r
+ DefineConstants = "TRACE"\r
+ DocumentationFile = "docs\DotZLib.xml"\r
+ DebugSymbols = "false"\r
+ FileAlignment = "4096"\r
+ IncrementalBuild = "false"\r
+ NoStdLib = "false"\r
+ NoWarn = ""\r
+ Optimize = "true"\r
+ OutputPath = "bin\Release\"\r
+ RegisterForComInterop = "false"\r
+ RemoveIntegerChecks = "false"\r
+ TreatWarningsAsErrors = "false"\r
+ WarningLevel = "4"\r
+ />\r
+ </Settings>\r
+ <References>\r
+ <Reference\r
+ Name = "System"\r
+ AssemblyName = "System"\r
+ HintPath = "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.dll"\r
+ />\r
+ <Reference\r
+ Name = "System.Data"\r
+ AssemblyName = "System.Data"\r
+ HintPath = "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"\r
+ />\r
+ <Reference\r
+ Name = "System.XML"\r
+ AssemblyName = "System.Xml"\r
+ HintPath = "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"\r
+ />\r
+ <Reference\r
+ Name = "nunit.framework"\r
+ AssemblyName = "nunit.framework"\r
+ HintPath = "E:\apps\NUnit V2.1\\bin\nunit.framework.dll"\r
+ AssemblyFolderKey = "hklm\dn\nunit.framework"\r
+ />\r
+ </References>\r
+ </Build>\r
+ <Files>\r
+ <Include>\r
+ <File\r
+ RelPath = "AssemblyInfo.cs"\r
+ SubType = "Code"\r
+ BuildAction = "Compile"\r
+ />\r
+ <File\r
+ RelPath = "ChecksumImpl.cs"\r
+ SubType = "Code"\r
+ BuildAction = "Compile"\r
+ />\r
+ <File\r
+ RelPath = "CircularBuffer.cs"\r
+ SubType = "Code"\r
+ BuildAction = "Compile"\r
+ />\r
+ <File\r
+ RelPath = "CodecBase.cs"\r
+ SubType = "Code"\r
+ BuildAction = "Compile"\r
+ />\r
+ <File\r
+ RelPath = "Deflater.cs"\r
+ SubType = "Code"\r
+ BuildAction = "Compile"\r
+ />\r
+ <File\r
+ RelPath = "DotZLib.cs"\r
+ SubType = "Code"\r
+ BuildAction = "Compile"\r
+ />\r
+ <File\r
+ RelPath = "GZipStream.cs"\r
+ SubType = "Code"\r
+ BuildAction = "Compile"\r
+ />\r
+ <File\r
+ RelPath = "Inflater.cs"\r
+ SubType = "Code"\r
+ BuildAction = "Compile"\r
+ />\r
+ <File\r
+ RelPath = "UnitTests.cs"\r
+ SubType = "Code"\r
+ BuildAction = "Compile"\r
+ />\r
+ </Include>\r
+ </Files>\r
+ </CSHARP>\r
+</VisualStudioProject>\r
+\r
--- /dev/null
+//\r
+// © Copyright Henrik Ravn 2004\r
+//\r
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0. \r
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
+//\r
+\r
+using System;\r
+using System.IO;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace DotZLib\r
+{\r
+ /// <summary>\r
+ /// Implements a compressed <see cref="Stream"/>, in GZip (.gz) format.\r
+ /// </summary>\r
+ public class GZipStream : Stream, IDisposable\r
+ {\r
+ #region Dll Imports\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]\r
+ private static extern IntPtr gzopen(string name, string mode);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int gzclose(IntPtr gzFile);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int gzwrite(IntPtr gzFile, int data, int length);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int gzread(IntPtr gzFile, int data, int length);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int gzgetc(IntPtr gzFile);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int gzputc(IntPtr gzFile, int c);\r
+\r
+ #endregion\r
+\r
+ #region Private data\r
+ private IntPtr _gzFile;\r
+ private bool _isDisposed = false;\r
+ private bool _isWriting;\r
+ #endregion\r
+\r
+ #region Constructors\r
+ /// <summary>\r
+ /// Creates a new file as a writeable GZipStream\r
+ /// </summary>\r
+ /// <param name="fileName">The name of the compressed file to create</param>\r
+ /// <param name="level">The compression level to use when adding data</param>\r
+ /// <exception cref="ZLibException">If an error occurred in the internal zlib function</exception>\r
+ public GZipStream(string fileName, CompressLevel level)\r
+ {\r
+ _isWriting = true;\r
+ _gzFile = gzopen(fileName, String.Format("wb{0}", (int)level));\r
+ if (_gzFile == IntPtr.Zero)\r
+ throw new ZLibException(-1, "Could not open " + fileName);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Opens an existing file as a readable GZipStream\r
+ /// </summary>\r
+ /// <param name="fileName">The name of the file to open</param>\r
+ /// <exception cref="ZLibException">If an error occurred in the internal zlib function</exception>\r
+ public GZipStream(string fileName)\r
+ {\r
+ _isWriting = false;\r
+ _gzFile = gzopen(fileName, "rb");\r
+ if (_gzFile == IntPtr.Zero)\r
+ throw new ZLibException(-1, "Could not open " + fileName);\r
+\r
+ }\r
+ #endregion\r
+\r
+ #region Access properties\r
+ /// <summary>\r
+ /// Returns true of this stream can be read from, false otherwise\r
+ /// </summary>\r
+ public override bool CanRead\r
+ {\r
+ get\r
+ {\r
+ return !_isWriting;\r
+ }\r
+ }\r
+ \r
+\r
+ /// <summary>\r
+ /// Returns false.\r
+ /// </summary>\r
+ public override bool CanSeek\r
+ {\r
+ get\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Returns true if this tsream is writeable, false otherwise\r
+ /// </summary>\r
+ public override bool CanWrite\r
+ {\r
+ get\r
+ {\r
+ return _isWriting;\r
+ }\r
+ }\r
+ #endregion\r
+ \r
+ #region Destructor & IDispose stuff\r
+\r
+ /// <summary>\r
+ /// Destroys this instance\r
+ /// </summary>\r
+ ~GZipStream()\r
+ {\r
+ cleanUp(false);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Closes the external file handle\r
+ /// </summary>\r
+ public void Dispose()\r
+ {\r
+ cleanUp(true);\r
+ }\r
+\r
+ // Does the actual closing of the file handle.\r
+ private void cleanUp(bool isDisposing)\r
+ {\r
+ if (!_isDisposed)\r
+ {\r
+ gzclose(_gzFile);\r
+ _isDisposed = true;\r
+ }\r
+ }\r
+ #endregion\r
+ \r
+ #region Basic reading and writing\r
+ /// <summary>\r
+ /// Attempts to read a number of bytes from the stream.\r
+ /// </summary>\r
+ /// <param name="buffer">The destination data buffer</param>\r
+ /// <param name="offset">The index of the first destination byte in <c>buffer</c></param>\r
+ /// <param name="count">The number of bytes requested</param>\r
+ /// <returns>The number of bytes read</returns>\r
+ /// <exception cref="ArgumentNullException">If <c>buffer</c> is null</exception>\r
+ /// <exception cref="ArgumentOutOfRangeException">If <c>count</c> or <c>offset</c> are negative</exception>\r
+ /// <exception cref="ArgumentException">If <c>offset</c> + <c>count</c> is > buffer.Length</exception>\r
+ /// <exception cref="NotSupportedException">If this stream is not readable.</exception>\r
+ /// <exception cref="ObjectDisposedException">If this stream has been disposed.</exception>\r
+ public override int Read(byte[] buffer, int offset, int count)\r
+ {\r
+ if (!CanRead) throw new NotSupportedException();\r
+ if (buffer == null) throw new ArgumentNullException();\r
+ if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\r
+ if ((offset+count) > buffer.Length) throw new ArgumentException();\r
+ if (_isDisposed) throw new ObjectDisposedException("GZipStream");\r
+\r
+ GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned);\r
+ int result;\r
+ try\r
+ {\r
+ result = gzread(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count);\r
+ if (result < 0)\r
+ throw new IOException();\r
+ }\r
+ finally\r
+ {\r
+ h.Free();\r
+ }\r
+ return result;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Attempts to read a single byte from the stream.\r
+ /// </summary>\r
+ /// <returns>The byte that was read, or -1 in case of error or End-Of-File</returns>\r
+ public override int ReadByte()\r
+ {\r
+ if (!CanRead) throw new NotSupportedException();\r
+ if (_isDisposed) throw new ObjectDisposedException("GZipStream");\r
+ return gzgetc(_gzFile);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Writes a number of bytes to the stream\r
+ /// </summary>\r
+ /// <param name="buffer"></param>\r
+ /// <param name="offset"></param>\r
+ /// <param name="count"></param>\r
+ /// <exception cref="ArgumentNullException">If <c>buffer</c> is null</exception>\r
+ /// <exception cref="ArgumentOutOfRangeException">If <c>count</c> or <c>offset</c> are negative</exception>\r
+ /// <exception cref="ArgumentException">If <c>offset</c> + <c>count</c> is > buffer.Length</exception>\r
+ /// <exception cref="NotSupportedException">If this stream is not writeable.</exception>\r
+ /// <exception cref="ObjectDisposedException">If this stream has been disposed.</exception>\r
+ public override void Write(byte[] buffer, int offset, int count)\r
+ {\r
+ if (!CanWrite) throw new NotSupportedException();\r
+ if (buffer == null) throw new ArgumentNullException();\r
+ if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\r
+ if ((offset+count) > buffer.Length) throw new ArgumentException();\r
+ if (_isDisposed) throw new ObjectDisposedException("GZipStream");\r
+\r
+ GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned);\r
+ try\r
+ {\r
+ int result = gzwrite(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count);\r
+ if (result < 0)\r
+ throw new IOException();\r
+ }\r
+ finally\r
+ {\r
+ h.Free();\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Writes a single byte to the stream\r
+ /// </summary>\r
+ /// <param name="value">The byte to add to the stream.</param>\r
+ /// <exception cref="NotSupportedException">If this stream is not writeable.</exception>\r
+ /// <exception cref="ObjectDisposedException">If this stream has been disposed.</exception>\r
+ public override void WriteByte(byte value)\r
+ {\r
+ if (!CanWrite) throw new NotSupportedException();\r
+ if (_isDisposed) throw new ObjectDisposedException("GZipStream");\r
+\r
+ int result = gzputc(_gzFile, (int)value);\r
+ if (result < 0)\r
+ throw new IOException();\r
+ }\r
+ #endregion\r
+\r
+ #region Position & length stuff\r
+ /// <summary>\r
+ /// Not supported.\r
+ /// </summary>\r
+ /// <param name="value"></param>\r
+ /// <exception cref="NotSupportedException">Always thrown</exception>\r
+ public override void SetLength(long value)\r
+ {\r
+ throw new NotSupportedException();\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Not suppported.\r
+ /// </summary>\r
+ /// <param name="offset"></param>\r
+ /// <param name="origin"></param>\r
+ /// <returns></returns>\r
+ /// <exception cref="NotSupportedException">Always thrown</exception>\r
+ public override long Seek(long offset, SeekOrigin origin)\r
+ {\r
+ throw new NotSupportedException();\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Flushes the <c>GZipStream</c>.\r
+ /// </summary>\r
+ /// <remarks>In this implementation, this method does nothing. This is because excessive\r
+ /// flushing may degrade the achievable compression rates.</remarks>\r
+ public override void Flush()\r
+ {\r
+ // left empty on purpose\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Gets/sets the current position in the <c>GZipStream</c>. Not suppported.\r
+ /// </summary>\r
+ /// <remarks>In this implementation this property is not supported</remarks>\r
+ /// <exception cref="NotSupportedException">Always thrown</exception>\r
+ public override long Position\r
+ {\r
+ get\r
+ {\r
+ throw new NotSupportedException();\r
+ }\r
+ set\r
+ {\r
+ throw new NotSupportedException();\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Gets the size of the stream. Not suppported.\r
+ /// </summary>\r
+ /// <remarks>In this implementation this property is not supported</remarks>\r
+ /// <exception cref="NotSupportedException">Always thrown</exception>\r
+ public override long Length\r
+ {\r
+ get\r
+ {\r
+ throw new NotSupportedException();\r
+ }\r
+ }\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+//\r
+// © Copyright Henrik Ravn 2004\r
+//\r
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0. \r
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
+//\r
+\r
+using System;\r
+using System.Diagnostics;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace DotZLib\r
+{\r
+ \r
+ /// <summary>\r
+ /// Implements a data decompressor, using the inflate algorithm in the ZLib dll\r
+ /// </summary>\r
+ public class Inflater : CodecBase\r
+ {\r
+ #region Dll imports\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]\r
+ private static extern int inflateInit_(ref ZStream sz, string vs, int size);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int inflate(ref ZStream sz, int flush);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int inflateReset(ref ZStream sz);\r
+\r
+ [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]\r
+ private static extern int inflateEnd(ref ZStream sz);\r
+ #endregion\r
+\r
+ /// <summary>\r
+ /// Constructs an new instance of the <c>Inflater</c>\r
+ /// </summary>\r
+ public Inflater() : base()\r
+ {\r
+ int retval = inflateInit_(ref _ztream, Info.Version, Marshal.SizeOf(_ztream));\r
+ if (retval != 0)\r
+ throw new ZLibException(retval, "Could not initialize inflater");\r
+\r
+ resetOutput();\r
+ }\r
+\r
+\r
+ /// <summary>\r
+ /// Adds more data to the codec to be processed.\r
+ /// </summary>\r
+ /// <param name="data">Byte array containing the data to be added to the codec</param>\r
+ /// <param name="offset">The index of the first byte to add from <c>data</c></param>\r
+ /// <param name="count">The number of bytes to add</param>\r
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>\r
+ public override void Add(byte[] data, int offset, int count)\r
+ {\r
+ if (data == null) throw new ArgumentNullException();\r
+ if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();\r
+ if ((offset+count) > data.Length) throw new ArgumentException();\r
+\r
+ int total = count;\r
+ int inputIndex = offset;\r
+ int err = 0;\r
+\r
+ while (err >= 0 && inputIndex < total)\r
+ {\r
+ copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize));\r
+ err = inflate(ref _ztream, (int)FlushTypes.None);\r
+ if (err == 0)\r
+ while (_ztream.avail_out == 0)\r
+ {\r
+ OnDataAvailable();\r
+ err = inflate(ref _ztream, (int)FlushTypes.None);\r
+ }\r
+\r
+ inputIndex += (int)_ztream.total_in;\r
+ }\r
+ setChecksum( _ztream.adler );\r
+ }\r
+\r
+\r
+ /// <summary>\r
+ /// Finishes up any pending data that needs to be processed and handled.\r
+ /// </summary>\r
+ public override void Finish()\r
+ {\r
+ int err;\r
+ do \r
+ {\r
+ err = inflate(ref _ztream, (int)FlushTypes.Finish);\r
+ OnDataAvailable();\r
+ }\r
+ while (err == 0);\r
+ setChecksum( _ztream.adler );\r
+ inflateReset(ref _ztream);\r
+ resetOutput();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Closes the internal zlib inflate stream\r
+ /// </summary>\r
+ protected override void CleanUp() { inflateEnd(ref _ztream); }\r
+\r
+\r
+ }\r
+}\r
--- /dev/null
+//\r
+// © Copyright Henrik Ravn 2004\r
+//\r
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0. \r
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
+//\r
+\r
+using System;\r
+using System.Collections;\r
+using System.IO;\r
+\r
+// uncomment the define below to include unit tests\r
+//#define nunit\r
+#if nunit\r
+using NUnit.Framework;\r
+\r
+// Unit tests for the DotZLib class library\r
+// ----------------------------------------\r
+//\r
+// Use this with NUnit 2 from http://www.nunit.org\r
+//\r
+\r
+namespace DotZLibTests\r
+{\r
+ using DotZLib;\r
+\r
+ // helper methods\r
+ internal class Utils\r
+ {\r
+ public static bool byteArrEqual( byte[] lhs, byte[] rhs )\r
+ {\r
+ if (lhs.Length != rhs.Length)\r
+ return false;\r
+ for (int i = lhs.Length-1; i >= 0; --i)\r
+ if (lhs[i] != rhs[i])\r
+ return false;\r
+ return true;\r
+ }\r
+\r
+ }\r
+\r
+\r
+ [TestFixture]\r
+ public class CircBufferTests\r
+ {\r
+ #region Circular buffer tests\r
+ [Test]\r
+ public void SinglePutGet()\r
+ {\r
+ CircularBuffer buf = new CircularBuffer(10);\r
+ Assert.AreEqual( 0, buf.Size );\r
+ Assert.AreEqual( -1, buf.Get() );\r
+\r
+ Assert.IsTrue(buf.Put( 1 ));\r
+ Assert.AreEqual( 1, buf.Size );\r
+ Assert.AreEqual( 1, buf.Get() );\r
+ Assert.AreEqual( 0, buf.Size );\r
+ Assert.AreEqual( -1, buf.Get() );\r
+ }\r
+\r
+ [Test]\r
+ public void BlockPutGet()\r
+ {\r
+ CircularBuffer buf = new CircularBuffer(10);\r
+ byte[] arr = {1,2,3,4,5,6,7,8,9,10};\r
+ Assert.AreEqual( 10, buf.Put(arr,0,10) );\r
+ Assert.AreEqual( 10, buf.Size );\r
+ Assert.IsFalse( buf.Put(11) );\r
+ Assert.AreEqual( 1, buf.Get() );\r
+ Assert.IsTrue( buf.Put(11) );\r
+\r
+ byte[] arr2 = (byte[])arr.Clone();\r
+ Assert.AreEqual( 9, buf.Get(arr2,1,9) );\r
+ Assert.IsTrue( Utils.byteArrEqual(arr,arr2) );\r
+ }\r
+\r
+ #endregion\r
+ }\r
+\r
+ [TestFixture]\r
+ public class ChecksumTests\r
+ {\r
+ #region CRC32 Tests\r
+ [Test]\r
+ public void CRC32_Null()\r
+ {\r
+ CRC32Checksum crc32 = new CRC32Checksum();\r
+ Assert.AreEqual( 0, crc32.Value );\r
+\r
+ crc32 = new CRC32Checksum(1);\r
+ Assert.AreEqual( 1, crc32.Value );\r
+\r
+ crc32 = new CRC32Checksum(556);\r
+ Assert.AreEqual( 556, crc32.Value );\r
+ }\r
+\r
+ [Test]\r
+ public void CRC32_Data()\r
+ {\r
+ CRC32Checksum crc32 = new CRC32Checksum();\r
+ byte[] data = { 1,2,3,4,5,6,7 };\r
+ crc32.Update(data);\r
+ Assert.AreEqual( 0x70e46888, crc32.Value );\r
+\r
+ crc32 = new CRC32Checksum();\r
+ crc32.Update("penguin");\r
+ Assert.AreEqual( 0x0e5c1a120, crc32.Value );\r
+\r
+ crc32 = new CRC32Checksum(1);\r
+ crc32.Update("penguin");\r
+ Assert.AreEqual(0x43b6aa94, crc32.Value);\r
+\r
+ }\r
+ #endregion\r
+\r
+ #region Adler tests\r
+\r
+ [Test]\r
+ public void Adler_Null()\r
+ {\r
+ AdlerChecksum adler = new AdlerChecksum();\r
+ Assert.AreEqual(0, adler.Value);\r
+\r
+ adler = new AdlerChecksum(1);\r
+ Assert.AreEqual( 1, adler.Value );\r
+\r
+ adler = new AdlerChecksum(556);\r
+ Assert.AreEqual( 556, adler.Value );\r
+ }\r
+\r
+ [Test]\r
+ public void Adler_Data()\r
+ {\r
+ AdlerChecksum adler = new AdlerChecksum(1);\r
+ byte[] data = { 1,2,3,4,5,6,7 };\r
+ adler.Update(data);\r
+ Assert.AreEqual( 0x5b001d, adler.Value );\r
+\r
+ adler = new AdlerChecksum();\r
+ adler.Update("penguin");\r
+ Assert.AreEqual(0x0bcf02f6, adler.Value );\r
+\r
+ adler = new AdlerChecksum(1);\r
+ adler.Update("penguin");\r
+ Assert.AreEqual(0x0bd602f7, adler.Value);\r
+\r
+ }\r
+ #endregion\r
+ }\r
+\r
+ [TestFixture]\r
+ public class InfoTests\r
+ {\r
+ #region Info tests\r
+ [Test]\r
+ public void Info_Version()\r
+ {\r
+ Info info = new Info();\r
+ Assert.AreEqual("1.2.3", Info.Version);\r
+ Assert.AreEqual(32, info.SizeOfUInt);\r
+ Assert.AreEqual(32, info.SizeOfULong);\r
+ Assert.AreEqual(32, info.SizeOfPointer);\r
+ Assert.AreEqual(32, info.SizeOfOffset);\r
+ }\r
+ #endregion\r
+ }\r
+\r
+ [TestFixture]\r
+ public class DeflateInflateTests\r
+ {\r
+ #region Deflate tests\r
+ [Test]\r
+ public void Deflate_Init()\r
+ {\r
+ using (Deflater def = new Deflater(CompressLevel.Default))\r
+ {\r
+ }\r
+ }\r
+\r
+ private ArrayList compressedData = new ArrayList();\r
+ private uint adler1;\r
+\r
+ private ArrayList uncompressedData = new ArrayList();\r
+ private uint adler2;\r
+\r
+ public void CDataAvail(byte[] data, int startIndex, int count)\r
+ {\r
+ for (int i = 0; i < count; ++i)\r
+ compressedData.Add(data[i+startIndex]);\r
+ }\r
+\r
+ [Test]\r
+ public void Deflate_Compress()\r
+ {\r
+ compressedData.Clear();\r
+\r
+ byte[] testData = new byte[35000];\r
+ for (int i = 0; i < testData.Length; ++i)\r
+ testData[i] = 5;\r
+\r
+ using (Deflater def = new Deflater((CompressLevel)5))\r
+ {\r
+ def.DataAvailable += new DataAvailableHandler(CDataAvail);\r
+ def.Add(testData);\r
+ def.Finish();\r
+ adler1 = def.Checksum;\r
+ }\r
+ }\r
+ #endregion\r
+\r
+ #region Inflate tests\r
+ [Test]\r
+ public void Inflate_Init()\r
+ {\r
+ using (Inflater inf = new Inflater())\r
+ {\r
+ }\r
+ }\r
+\r
+ private void DDataAvail(byte[] data, int startIndex, int count)\r
+ {\r
+ for (int i = 0; i < count; ++i)\r
+ uncompressedData.Add(data[i+startIndex]);\r
+ }\r
+\r
+ [Test]\r
+ public void Inflate_Expand()\r
+ { \r
+ uncompressedData.Clear();\r
+\r
+ using (Inflater inf = new Inflater())\r
+ {\r
+ inf.DataAvailable += new DataAvailableHandler(DDataAvail);\r
+ inf.Add((byte[])compressedData.ToArray(typeof(byte)));\r
+ inf.Finish();\r
+ adler2 = inf.Checksum;\r
+ }\r
+ Assert.AreEqual( adler1, adler2 );\r
+ }\r
+ #endregion\r
+ }\r
+\r
+ [TestFixture]\r
+ public class GZipStreamTests\r
+ {\r
+ #region GZipStream test\r
+ [Test]\r
+ public void GZipStream_WriteRead()\r
+ {\r
+ using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best))\r
+ {\r
+ BinaryWriter writer = new BinaryWriter(gzOut);\r
+ writer.Write("hi there");\r
+ writer.Write(Math.PI);\r
+ writer.Write(42);\r
+ }\r
+\r
+ using (GZipStream gzIn = new GZipStream("gzstream.gz"))\r
+ {\r
+ BinaryReader reader = new BinaryReader(gzIn);\r
+ string s = reader.ReadString();\r
+ Assert.AreEqual("hi there",s);\r
+ double d = reader.ReadDouble();\r
+ Assert.AreEqual(Math.PI, d);\r
+ int i = reader.ReadInt32();\r
+ Assert.AreEqual(42,i);\r
+ }\r
+\r
+ }\r
+ #endregion\r
+ }\r
+}\r
+\r
+#endif
\ No newline at end of file
--- /dev/null
+Boost Software License - Version 1.0 - August 17th, 2003\r
+\r
+Permission is hereby granted, free of charge, to any person or organization\r
+obtaining a copy of the software and accompanying documentation covered by\r
+this license (the "Software") to use, reproduce, display, distribute,\r
+execute, and transmit the Software, and to prepare derivative works of the\r
+Software, and to permit third-parties to whom the Software is furnished to\r
+do so, all subject to the following:\r
+\r
+The copyright notices in the Software and this entire statement, including\r
+the above license grant, this restriction and the following disclaimer,\r
+must be included in all copies of the Software, in whole or in part, and\r
+all derivative works of the Software, unless such copies or derivative\r
+works are solely in the form of machine-executable object code generated by\r
+a source language processor.\r
+\r
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r
+DEALINGS IN THE SOFTWARE.
\ No newline at end of file
--- /dev/null
+This directory contains a .Net wrapper class library for the ZLib1.dll\r
+\r
+The wrapper includes support for inflating/deflating memory buffers, \r
+.Net streaming wrappers for the gz streams part of zlib, and wrappers\r
+for the checksum parts of zlib. See DotZLib/UnitTests.cs for examples.\r
+\r
+Directory structure:\r
+--------------------\r
+\r
+LICENSE_1_0.txt - License file.\r
+readme.txt - This file.\r
+DotZLib.chm - Class library documentation\r
+DotZLib.build - NAnt build file\r
+DotZLib.sln - Microsoft Visual Studio 2003 solution file\r
+\r
+DotZLib\*.cs - Source files for the class library\r
+\r
+Unit tests:\r
+-----------\r
+The file DotZLib/UnitTests.cs contains unit tests for use with NUnit 2.1 or higher.\r
+To include unit tests in the build, define nunit before building.\r
+\r
+\r
+Build instructions:\r
+-------------------\r
+\r
+1. Using Visual Studio.Net 2003:\r
+ Open DotZLib.sln in VS.Net and build from there. Output file (DotZLib.dll)\r
+ will be found ./DotZLib/bin/release or ./DotZLib/bin/debug, depending on \r
+ you are building the release or debug version of the library. Check \r
+ DotZLib/UnitTests.cs for instructions on how to include unit tests in the\r
+ build.\r
+ \r
+2. Using NAnt:\r
+ Open a command prompt with access to the build environment and run nant\r
+ in the same directory as the DotZLib.build file.\r
+ You can define 2 properties on the nant command-line to control the build:\r
+ debug={true|false} to toggle between release/debug builds (default=true).\r
+ nunit={true|false} to include or esclude unit tests (default=true).\r
+ Also the target clean will remove binaries.\r
+ Output file (DotZLib.dll) will be found in either ./DotZLib/bin/release \r
+ or ./DotZLib/bin/debug, depending on whether you are building the release \r
+ or debug version of the library.\r
+\r
+ Examples: \r
+ nant -D:debug=false -D:nunit=false\r
+ will build a release mode version of the library without unit tests.\r
+ nant\r
+ will build a debug version of the library with unit tests \r
+ nant clean\r
+ will remove all previously built files.\r
+\r
+\r
+---------------------------------\r
+Copyright (c) Henrik Ravn 2004\r
+\r
+Use, modification and distribution are subject to the Boost Software License, Version 1.0. \r
+(See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
--- /dev/null
+ml64.exe /Flinffasx64 /c /Zi inffasx64.asm\r
+ml64.exe /Flgvmat64 /c /Zi gvmat64.asm\r
--- /dev/null
+;uInt longest_match_x64(\r
+; deflate_state *s,\r
+; IPos cur_match); /* current match */\r
+\r
+; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86\r
+; Copyright (C) 1995-2005 Jean-loup Gailly, Brian Raiter and Gilles Vollant.\r
+;\r
+; File written by Gilles Vollant, by converting to assembly the longest_match\r
+; from Jean-loup Gailly in deflate.c of zLib and infoZip zip.\r
+;\r
+; and by taking inspiration on asm686 with masm, optimised assembly code\r
+; from Brian Raiter, written 1998\r
+;\r
+; http://www.zlib.net\r
+; http://www.winimage.com/zLibDll\r
+; http://www.muppetlabs.com/~breadbox/software/assembly.html\r
+;\r
+; to compile this file for infozip Zip, I use option:\r
+; ml64.exe /Flgvmat64 /c /Zi /DINFOZIP gvmat64.asm\r
+;\r
+; to compile this file for zLib, I use option:\r
+; ml64.exe /Flgvmat64 /c /Zi gvmat64.asm\r
+; Be carrefull to adapt zlib1222add below to your version of zLib\r
+; (if you use a version of zLib before 1.0.4 or after 1.2.2.2, change\r
+; value of zlib1222add later)\r
+;\r
+; This file compile with Microsoft Macro Assembler (x64) for AMD64\r
+;\r
+; ml64.exe is given with Visual Studio 2005 and Windows 2003 server DDK\r
+;\r
+; (you can get Windows 2003 server DDK with ml64 and cl for AMD64 from\r
+; http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)\r
+;\r
+\r
+\r
+;uInt longest_match(s, cur_match)\r
+; deflate_state *s;\r
+; IPos cur_match; /* current match */\r
+.code\r
+longest_match PROC\r
+\r
+\r
+;LocalVarsSize equ 88\r
+ LocalVarsSize equ 72\r
+\r
+; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12\r
+; free register : r14,r15\r
+; register can be saved : rsp\r
+\r
+ chainlenwmask equ rsp + 8 - LocalVarsSize ; high word: current chain len\r
+ ; low word: s->wmask\r
+;window equ rsp + xx - LocalVarsSize ; local copy of s->window ; stored in r10\r
+;windowbestlen equ rsp + xx - LocalVarsSize ; s->window + bestlen , use r10+r11\r
+;scanstart equ rsp + xx - LocalVarsSize ; first two bytes of string ; stored in r12w\r
+;scanend equ rsp + xx - LocalVarsSize ; last two bytes of string use ebx\r
+;scanalign equ rsp + xx - LocalVarsSize ; dword-misalignment of string r13\r
+;bestlen equ rsp + xx - LocalVarsSize ; size of best match so far -> r11d\r
+;scan equ rsp + xx - LocalVarsSize ; ptr to string wanting match -> r9\r
+IFDEF INFOZIP\r
+ELSE\r
+ nicematch equ (rsp + 16 - LocalVarsSize) ; a good enough match size\r
+ENDIF\r
+\r
+save_rdi equ rsp + 24 - LocalVarsSize\r
+save_rsi equ rsp + 32 - LocalVarsSize\r
+save_rbx equ rsp + 40 - LocalVarsSize\r
+save_rbp equ rsp + 48 - LocalVarsSize\r
+save_r12 equ rsp + 56 - LocalVarsSize\r
+save_r13 equ rsp + 64 - LocalVarsSize\r
+;save_r14 equ rsp + 72 - LocalVarsSize\r
+;save_r15 equ rsp + 80 - LocalVarsSize\r
+\r
+\r
+\r
+; all the +4 offsets are due to the addition of pending_buf_size (in zlib\r
+; in the deflate_state structure since the asm code was first written\r
+; (if you compile with zlib 1.0.4 or older, remove the +4).\r
+; Note : these value are good with a 8 bytes boundary pack structure\r
+\r
+\r
+ MAX_MATCH equ 258\r
+ MIN_MATCH equ 3\r
+ MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1)\r
+\r
+\r
+;;; Offsets for fields in the deflate_state structure. These numbers\r
+;;; are calculated from the definition of deflate_state, with the\r
+;;; assumption that the compiler will dword-align the fields. (Thus,\r
+;;; changing the definition of deflate_state could easily cause this\r
+;;; program to crash horribly, without so much as a warning at\r
+;;; compile time. Sigh.)\r
+\r
+; all the +zlib1222add offsets are due to the addition of fields\r
+; in zlib in the deflate_state structure since the asm code was first written\r
+; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").\r
+; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").\r
+; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").\r
+\r
+\r
+IFDEF INFOZIP\r
+\r
+_DATA SEGMENT\r
+COMM window_size:DWORD\r
+; WMask ; 7fff\r
+COMM window:BYTE:010040H\r
+COMM prev:WORD:08000H\r
+; MatchLen : unused\r
+; PrevMatch : unused\r
+COMM strstart:DWORD\r
+COMM match_start:DWORD\r
+; Lookahead : ignore\r
+COMM prev_length:DWORD ; PrevLen\r
+COMM max_chain_length:DWORD\r
+COMM good_match:DWORD\r
+COMM nice_match:DWORD\r
+prev_ad equ OFFSET prev\r
+window_ad equ OFFSET window\r
+nicematch equ nice_match\r
+_DATA ENDS\r
+WMask equ 07fffh\r
+\r
+ELSE\r
+\r
+ IFNDEF zlib1222add\r
+ zlib1222add equ 8\r
+ ENDIF\r
+dsWSize equ 56+zlib1222add+(zlib1222add/2)\r
+dsWMask equ 64+zlib1222add+(zlib1222add/2)\r
+dsWindow equ 72+zlib1222add\r
+dsPrev equ 88+zlib1222add\r
+dsMatchLen equ 128+zlib1222add\r
+dsPrevMatch equ 132+zlib1222add\r
+dsStrStart equ 140+zlib1222add\r
+dsMatchStart equ 144+zlib1222add\r
+dsLookahead equ 148+zlib1222add\r
+dsPrevLen equ 152+zlib1222add\r
+dsMaxChainLen equ 156+zlib1222add\r
+dsGoodMatch equ 172+zlib1222add\r
+dsNiceMatch equ 176+zlib1222add\r
+\r
+window_size equ [ rcx + dsWSize]\r
+WMask equ [ rcx + dsWMask]\r
+window_ad equ [ rcx + dsWindow]\r
+prev_ad equ [ rcx + dsPrev]\r
+strstart equ [ rcx + dsStrStart]\r
+match_start equ [ rcx + dsMatchStart]\r
+Lookahead equ [ rcx + dsLookahead] ; 0ffffffffh on infozip\r
+prev_length equ [ rcx + dsPrevLen]\r
+max_chain_length equ [ rcx + dsMaxChainLen]\r
+good_match equ [ rcx + dsGoodMatch]\r
+nice_match equ [ rcx + dsNiceMatch]\r
+ENDIF\r
+\r
+; parameter 1 in r8(deflate state s), param 2 in rdx (cur match)\r
+\r
+; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and\r
+; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp\r
+;\r
+; All registers must be preserved across the call, except for\r
+; rax, rcx, rdx, r8, r9, r10, and r11, which are scratch.\r
+\r
+\r
+\r
+;;; Save registers that the compiler may be using, and adjust esp to\r
+;;; make room for our stack frame.\r
+\r
+\r
+;;; Retrieve the function arguments. r8d will hold cur_match\r
+;;; throughout the entire function. edx will hold the pointer to the\r
+;;; deflate_state structure during the function's setup (before\r
+;;; entering the main loop.\r
+\r
+; parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match)\r
+\r
+; this clear high 32 bits of r8, which can be garbage in both r8 and rdx\r
+\r
+ mov [save_rdi],rdi\r
+ mov [save_rsi],rsi\r
+ mov [save_rbx],rbx\r
+ mov [save_rbp],rbp\r
+IFDEF INFOZIP\r
+ mov r8d,ecx\r
+ELSE\r
+ mov r8d,edx\r
+ENDIF\r
+ mov [save_r12],r12\r
+ mov [save_r13],r13\r
+; mov [save_r14],r14\r
+; mov [save_r15],r15\r
+\r
+\r
+;;; uInt wmask = s->w_mask;\r
+;;; unsigned chain_length = s->max_chain_length;\r
+;;; if (s->prev_length >= s->good_match) {\r
+;;; chain_length >>= 2;\r
+;;; }\r
+\r
+ mov edi, prev_length\r
+ mov esi, good_match\r
+ mov eax, WMask\r
+ mov ebx, max_chain_length\r
+ cmp edi, esi\r
+ jl LastMatchGood\r
+ shr ebx, 2\r
+LastMatchGood:\r
+\r
+;;; chainlen is decremented once beforehand so that the function can\r
+;;; use the sign flag instead of the zero flag for the exit test.\r
+;;; It is then shifted into the high word, to make room for the wmask\r
+;;; value, which it will always accompany.\r
+\r
+ dec ebx\r
+ shl ebx, 16\r
+ or ebx, eax\r
+\r
+;;; on zlib only\r
+;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;\r
+\r
+IFDEF INFOZIP\r
+ mov [chainlenwmask], ebx\r
+; on infozip nice_match = [nice_match]\r
+ELSE\r
+ mov eax, nice_match\r
+ mov [chainlenwmask], ebx\r
+ mov r10d, Lookahead\r
+ cmp r10d, eax\r
+ cmovnl r10d, eax\r
+ mov [nicematch],r10d\r
+ENDIF\r
+\r
+;;; register Bytef *scan = s->window + s->strstart;\r
+ mov r10, window_ad\r
+ mov ebp, strstart\r
+ lea r13, [r10 + rbp]\r
+\r
+;;; Determine how many bytes the scan ptr is off from being\r
+;;; dword-aligned.\r
+\r
+ mov r9,r13\r
+ neg r13\r
+ and r13,3\r
+\r
+;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?\r
+;;; s->strstart - (IPos)MAX_DIST(s) : NIL;\r
+IFDEF INFOZIP\r
+ mov eax,07efah ; MAX_DIST = (WSIZE-MIN_LOOKAHEAD) (0x8000-(3+8+1))\r
+ELSE\r
+ mov eax, window_size\r
+ sub eax, MIN_LOOKAHEAD\r
+ENDIF\r
+ xor edi,edi\r
+ sub ebp, eax\r
+\r
+ mov r11d, prev_length\r
+\r
+ cmovng ebp,edi\r
+\r
+;;; int best_len = s->prev_length;\r
+\r
+\r
+;;; Store the sum of s->window + best_len in esi locally, and in esi.\r
+\r
+ lea rsi,[r10+r11]\r
+\r
+;;; register ush scan_start = *(ushf*)scan;\r
+;;; register ush scan_end = *(ushf*)(scan+best_len-1);\r
+;;; Posf *prev = s->prev;\r
+\r
+ movzx r12d,word ptr [r9]\r
+ movzx ebx, word ptr [r9 + r11 - 1]\r
+\r
+ mov rdi, prev_ad\r
+\r
+;;; Jump into the main loop.\r
+\r
+ mov edx, [chainlenwmask]\r
+\r
+ cmp bx,word ptr [rsi + r8 - 1]\r
+ jz LookupLoopIsZero\r
+\r
+LookupLoop1:\r
+ and r8d, edx\r
+\r
+ movzx r8d, word ptr [rdi + r8*2]\r
+ cmp r8d, ebp\r
+ jbe LeaveNow\r
+ sub edx, 00010000h\r
+ js LeaveNow\r
+\r
+LoopEntry1:\r
+ cmp bx,word ptr [rsi + r8 - 1]\r
+ jz LookupLoopIsZero\r
+\r
+LookupLoop2:\r
+ and r8d, edx\r
+\r
+ movzx r8d, word ptr [rdi + r8*2]\r
+ cmp r8d, ebp\r
+ jbe LeaveNow\r
+ sub edx, 00010000h\r
+ js LeaveNow\r
+\r
+LoopEntry2:\r
+ cmp bx,word ptr [rsi + r8 - 1]\r
+ jz LookupLoopIsZero\r
+\r
+LookupLoop4:\r
+ and r8d, edx\r
+\r
+ movzx r8d, word ptr [rdi + r8*2]\r
+ cmp r8d, ebp\r
+ jbe LeaveNow\r
+ sub edx, 00010000h\r
+ js LeaveNow\r
+\r
+LoopEntry4:\r
+\r
+ cmp bx,word ptr [rsi + r8 - 1]\r
+ jnz LookupLoop1\r
+ jmp LookupLoopIsZero\r
+\r
+\r
+;;; do {\r
+;;; match = s->window + cur_match;\r
+;;; if (*(ushf*)(match+best_len-1) != scan_end ||\r
+;;; *(ushf*)match != scan_start) continue;\r
+;;; [...]\r
+;;; } while ((cur_match = prev[cur_match & wmask]) > limit\r
+;;; && --chain_length != 0);\r
+;;;\r
+;;; Here is the inner loop of the function. The function will spend the\r
+;;; majority of its time in this loop, and majority of that time will\r
+;;; be spent in the first ten instructions.\r
+;;;\r
+;;; Within this loop:\r
+;;; ebx = scanend\r
+;;; r8d = curmatch\r
+;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)\r
+;;; esi = windowbestlen - i.e., (window + bestlen)\r
+;;; edi = prev\r
+;;; ebp = limit\r
+\r
+LookupLoop:\r
+ and r8d, edx\r
+\r
+ movzx r8d, word ptr [rdi + r8*2]\r
+ cmp r8d, ebp\r
+ jbe LeaveNow\r
+ sub edx, 00010000h\r
+ js LeaveNow\r
+\r
+LoopEntry:\r
+\r
+ cmp bx,word ptr [rsi + r8 - 1]\r
+ jnz LookupLoop1\r
+LookupLoopIsZero:\r
+ cmp r12w, word ptr [r10 + r8]\r
+ jnz LookupLoop1\r
+\r
+\r
+;;; Store the current value of chainlen.\r
+ mov [chainlenwmask], edx\r
+\r
+;;; Point edi to the string under scrutiny, and esi to the string we\r
+;;; are hoping to match it up with. In actuality, esi and edi are\r
+;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is\r
+;;; initialized to -(MAX_MATCH_8 - scanalign).\r
+\r
+ lea rsi,[r8+r10]\r
+ mov rdx, 0fffffffffffffef8h; -(MAX_MATCH_8)\r
+ lea rsi, [rsi + r13 + 0108h] ;MAX_MATCH_8]\r
+ lea rdi, [r9 + r13 + 0108h] ;MAX_MATCH_8]\r
+\r
+ prefetcht1 [rsi+rdx]\r
+ prefetcht1 [rdi+rdx]\r
+\r
+\r
+;;; Test the strings for equality, 8 bytes at a time. At the end,\r
+;;; adjust rdx so that it is offset to the exact byte that mismatched.\r
+;;;\r
+;;; We already know at this point that the first three bytes of the\r
+;;; strings match each other, and they can be safely passed over before\r
+;;; starting the compare loop. So what this code does is skip over 0-3\r
+;;; bytes, as much as necessary in order to dword-align the edi\r
+;;; pointer. (rsi will still be misaligned three times out of four.)\r
+;;;\r
+;;; It should be confessed that this loop usually does not represent\r
+;;; much of the total running time. Replacing it with a more\r
+;;; straightforward "rep cmpsb" would not drastically degrade\r
+;;; performance.\r
+\r
+\r
+LoopCmps:\r
+ mov rax, [rsi + rdx]\r
+ xor rax, [rdi + rdx]\r
+ jnz LeaveLoopCmps\r
+\r
+ mov rax, [rsi + rdx + 8]\r
+ xor rax, [rdi + rdx + 8]\r
+ jnz LeaveLoopCmps8\r
+\r
+\r
+ mov rax, [rsi + rdx + 8+8]\r
+ xor rax, [rdi + rdx + 8+8]\r
+ jnz LeaveLoopCmps16\r
+\r
+ add rdx,8+8+8\r
+\r
+ jmp short LoopCmps\r
+LeaveLoopCmps16: add rdx,8\r
+LeaveLoopCmps8: add rdx,8\r
+LeaveLoopCmps:\r
+\r
+ test eax, 0000FFFFh\r
+ jnz LenLower\r
+\r
+ test eax,0ffffffffh\r
+\r
+ jnz LenLower32\r
+\r
+ add rdx,4\r
+ shr rax,32\r
+ or ax,ax\r
+ jnz LenLower\r
+\r
+LenLower32:\r
+ shr eax,16\r
+ add rdx,2\r
+LenLower: sub al, 1\r
+ adc rdx, 0\r
+;;; Calculate the length of the match. If it is longer than MAX_MATCH,\r
+;;; then automatically accept it as the best possible match and leave.\r
+\r
+ lea rax, [rdi + rdx]\r
+ sub rax, r9\r
+ cmp eax, MAX_MATCH\r
+ jge LenMaximum\r
+\r
+;;; If the length of the match is not longer than the best match we\r
+;;; have so far, then forget it and return to the lookup loop.\r
+;///////////////////////////////////\r
+\r
+ cmp eax, r11d\r
+ jg LongerMatch\r
+\r
+ lea rsi,[r10+r11]\r
+\r
+ mov rdi, prev_ad\r
+ mov edx, [chainlenwmask]\r
+ jmp LookupLoop\r
+\r
+;;; s->match_start = cur_match;\r
+;;; best_len = len;\r
+;;; if (len >= nice_match) break;\r
+;;; scan_end = *(ushf*)(scan+best_len-1);\r
+\r
+LongerMatch:\r
+ mov r11d, eax\r
+ mov match_start, r8d\r
+ cmp eax, [nicematch]\r
+ jge LeaveNow\r
+\r
+ lea rsi,[r10+rax]\r
+\r
+ movzx ebx, word ptr [r9 + rax - 1]\r
+ mov rdi, prev_ad\r
+ mov edx, [chainlenwmask]\r
+ jmp LookupLoop\r
+\r
+;;; Accept the current string, with the maximum possible length.\r
+\r
+LenMaximum:\r
+ mov r11d,MAX_MATCH\r
+ mov match_start, r8d\r
+\r
+;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;\r
+;;; return s->lookahead;\r
+\r
+LeaveNow:\r
+IFDEF INFOZIP\r
+ mov eax,r11d\r
+ELSE\r
+ mov eax, Lookahead\r
+ cmp r11d, eax\r
+ cmovng eax, r11d\r
+ENDIF\r
+\r
+;;; Restore the stack and return from whence we came.\r
+\r
+\r
+ mov rsi,[save_rsi]\r
+ mov rdi,[save_rdi]\r
+ mov rbx,[save_rbx]\r
+ mov rbp,[save_rbp]\r
+ mov r12,[save_r12]\r
+ mov r13,[save_r13]\r
+; mov r14,[save_r14]\r
+; mov r15,[save_r15]\r
+\r
+\r
+ ret 0\r
+; please don't remove this string !\r
+; Your can freely use gvmat64 in any free or commercial app\r
+; but it is far better don't remove the string in the binary!\r
+ db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005",0dh,0ah,0\r
+longest_match ENDP\r
+\r
+match_init PROC\r
+ ret 0\r
+match_init ENDP\r
+\r
+\r
+END\r
--- /dev/null
+/* inffas8664.c is a hand tuned assembler version of inffast.c - fast decoding\r
+ * version for AMD64 on Windows using Microsoft C compiler\r
+ *\r
+ * Copyright (C) 1995-2003 Mark Adler\r
+ * For conditions of distribution and use, see copyright notice in zlib.h\r
+ *\r
+ * Copyright (C) 2003 Chris Anderson <christop@charm.net>\r
+ * Please use the copyright conditions above.\r
+ *\r
+ * 2005 - Adaptation to Microsoft C Compiler for AMD64 by Gilles Vollant\r
+ *\r
+ * inffas8664.c call function inffas8664fnc in inffasx64.asm\r
+ * inffasx64.asm is automatically convert from AMD64 portion of inffas86.c\r
+ *\r
+ * Dec-29-2003 -- I added AMD64 inflate asm support. This version is also\r
+ * slightly quicker on x86 systems because, instead of using rep movsb to copy\r
+ * data, it uses rep movsw, which moves data in 2-byte chunks instead of single\r
+ * bytes. I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates\r
+ * from http://fedora.linux.duke.edu/fc1_x86_64\r
+ * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with\r
+ * 1GB ram. The 64-bit version is about 4% faster than the 32-bit version,\r
+ * when decompressing mozilla-source-1.3.tar.gz.\r
+ *\r
+ * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from\r
+ * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at\r
+ * the moment. I have successfully compiled and tested this code with gcc2.96,\r
+ * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S\r
+ * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX\r
+ * enabled. I will attempt to merge the MMX code into this version. Newer\r
+ * versions of this and inffast.S can be found at\r
+ * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/\r
+ *\r
+ */\r
+\r
+#include <stdio.h>\r
+#include "zutil.h"\r
+#include "inftrees.h"\r
+#include "inflate.h"\r
+#include "inffast.h"\r
+\r
+/* Mark Adler's comments from inffast.c: */\r
+\r
+/*\r
+ Decode literal, length, and distance codes and write out the resulting\r
+ literal and match bytes until either not enough input or output is\r
+ available, an end-of-block is encountered, or a data error is encountered.\r
+ When large enough input and output buffers are supplied to inflate(), for\r
+ example, a 16K input buffer and a 64K output buffer, more than 95% of the\r
+ inflate execution time is spent in this routine.\r
+\r
+ Entry assumptions:\r
+\r
+ state->mode == LEN\r
+ strm->avail_in >= 6\r
+ strm->avail_out >= 258\r
+ start >= strm->avail_out\r
+ state->bits < 8\r
+\r
+ On return, state->mode is one of:\r
+\r
+ LEN -- ran out of enough output space or enough available input\r
+ TYPE -- reached end of block code, inflate() to interpret next block\r
+ BAD -- error in block data\r
+\r
+ Notes:\r
+\r
+ - The maximum input bits used by a length/distance pair is 15 bits for the\r
+ length code, 5 bits for the length extra, 15 bits for the distance code,\r
+ and 13 bits for the distance extra. This totals 48 bits, or six bytes.\r
+ Therefore if strm->avail_in >= 6, then there is enough input to avoid\r
+ checking for available input while decoding.\r
+\r
+ - The maximum bytes that a single length/distance pair can output is 258\r
+ bytes, which is the maximum length that can be coded. inflate_fast()\r
+ requires strm->avail_out >= 258 for each loop to avoid checking for\r
+ output space.\r
+ */\r
+\r
+\r
+\r
+ typedef struct inffast_ar {\r
+/* 64 32 x86 x86_64 */\r
+/* ar offset register */\r
+/* 0 0 */ void *esp; /* esp save */\r
+/* 8 4 */ void *ebp; /* ebp save */\r
+/* 16 8 */ unsigned char FAR *in; /* esi rsi local strm->next_in */\r
+/* 24 12 */ unsigned char FAR *last; /* r9 while in < last */\r
+/* 32 16 */ unsigned char FAR *out; /* edi rdi local strm->next_out */\r
+/* 40 20 */ unsigned char FAR *beg; /* inflate()'s init next_out */\r
+/* 48 24 */ unsigned char FAR *end; /* r10 while out < end */\r
+/* 56 28 */ unsigned char FAR *window;/* size of window, wsize!=0 */\r
+/* 64 32 */ code const FAR *lcode; /* ebp rbp local strm->lencode */\r
+/* 72 36 */ code const FAR *dcode; /* r11 local strm->distcode */\r
+/* 80 40 */ size_t /*unsigned long */hold; /* edx rdx local strm->hold */\r
+/* 88 44 */ unsigned bits; /* ebx rbx local strm->bits */\r
+/* 92 48 */ unsigned wsize; /* window size */\r
+/* 96 52 */ unsigned write; /* window write index */\r
+/*100 56 */ unsigned lmask; /* r12 mask for lcode */\r
+/*104 60 */ unsigned dmask; /* r13 mask for dcode */\r
+/*108 64 */ unsigned len; /* r14 match length */\r
+/*112 68 */ unsigned dist; /* r15 match distance */\r
+/*116 72 */ unsigned status; /* set when state chng*/\r
+ } type_ar;\r
+#ifdef ASMINF\r
+\r
+void inflate_fast(strm, start)\r
+z_streamp strm;\r
+unsigned start; /* inflate()'s starting value for strm->avail_out */\r
+{\r
+ struct inflate_state FAR *state;\r
+ type_ar ar;\r
+ void inffas8664fnc(struct inffast_ar * par);\r
+\r
+ \r
+\r
+#if (defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )) || (defined(_MSC_VER) && defined(_M_AMD64))\r
+#define PAD_AVAIL_IN 6\r
+#define PAD_AVAIL_OUT 258 \r
+#else\r
+#define PAD_AVAIL_IN 5\r
+#define PAD_AVAIL_OUT 257\r
+#endif\r
+\r
+ /* copy state to local variables */\r
+ state = (struct inflate_state FAR *)strm->state;\r
+\r
+ ar.in = strm->next_in;\r
+ ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN);\r
+ ar.out = strm->next_out;\r
+ ar.beg = ar.out - (start - strm->avail_out);\r
+ ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT);\r
+ ar.wsize = state->wsize;\r
+ ar.write = state->write;\r
+ ar.window = state->window;\r
+ ar.hold = state->hold;\r
+ ar.bits = state->bits;\r
+ ar.lcode = state->lencode;\r
+ ar.dcode = state->distcode;\r
+ ar.lmask = (1U << state->lenbits) - 1;\r
+ ar.dmask = (1U << state->distbits) - 1;\r
+\r
+ /* decode literals and length/distances until end-of-block or not enough\r
+ input data or output space */\r
+\r
+ /* align in on 1/2 hold size boundary */\r
+ while (((size_t)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) {\r
+ ar.hold += (unsigned long)*ar.in++ << ar.bits;\r
+ ar.bits += 8;\r
+ }\r
+\r
+ inffas8664fnc(&ar);\r
+\r
+ if (ar.status > 1) {\r
+ if (ar.status == 2)\r
+ strm->msg = "invalid literal/length code";\r
+ else if (ar.status == 3)\r
+ strm->msg = "invalid distance code";\r
+ else\r
+ strm->msg = "invalid distance too far back";\r
+ state->mode = BAD;\r
+ }\r
+ else if ( ar.status == 1 ) {\r
+ state->mode = TYPE;\r
+ }\r
+\r
+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\r
+ ar.len = ar.bits >> 3;\r
+ ar.in -= ar.len;\r
+ ar.bits -= ar.len << 3;\r
+ ar.hold &= (1U << ar.bits) - 1;\r
+\r
+ /* update state and return */\r
+ strm->next_in = ar.in;\r
+ strm->next_out = ar.out;\r
+ strm->avail_in = (unsigned)(ar.in < ar.last ?\r
+ PAD_AVAIL_IN + (ar.last - ar.in) :\r
+ PAD_AVAIL_IN - (ar.in - ar.last));\r
+ strm->avail_out = (unsigned)(ar.out < ar.end ?\r
+ PAD_AVAIL_OUT + (ar.end - ar.out) :\r
+ PAD_AVAIL_OUT - (ar.out - ar.end));\r
+ state->hold = (unsigned long)ar.hold;\r
+ state->bits = ar.bits;\r
+ return;\r
+}\r
+\r
+#endif\r
--- /dev/null
+; inffasx64.asm is a hand tuned assembler version of inffast.c - fast decoding\r
+; version for AMD64 on Windows using Microsoft C compiler\r
+;\r
+; inffasx64.asm is automatically convert from AMD64 portion of inffas86.c\r
+; inffasx64.asm is called by inffas8664.c, which contain more info.\r
+\r
+\r
+; to compile this file, I use option\r
+; ml64.exe /Flinffasx64 /c /Zi inffasx64.asm\r
+; with Microsoft Macro Assembler (x64) for AMD64\r
+;\r
+; ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK\r
+;\r
+; (you can get Windows 2003 server DDK with ml64 and cl.exe for AMD64 from \r
+; http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)\r
+;\r
+\r
+.code\r
+inffas8664fnc PROC\r
+\r
+; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and\r
+; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp\r
+;\r
+; All registers must be preserved across the call, except for\r
+; rax, rcx, rdx, r8, r-9, r10, and r11, which are scratch.\r
+\r
+\r
+ mov [rsp-8],rsi\r
+ mov [rsp-16],rdi\r
+ mov [rsp-24],r12\r
+ mov [rsp-32],r13\r
+ mov [rsp-40],r14\r
+ mov [rsp-48],r15\r
+ mov [rsp-56],rbx\r
+\r
+ mov rax,rcx\r
+\r
+ mov [rax+8], rbp ; /* save regs rbp and rsp */\r
+ mov [rax], rsp\r
+\r
+ mov rsp, rax ; /* make rsp point to &ar */\r
+\r
+ mov rsi, [rsp+16] ; /* rsi = in */\r
+ mov rdi, [rsp+32] ; /* rdi = out */\r
+ mov r9, [rsp+24] ; /* r9 = last */\r
+ mov r10, [rsp+48] ; /* r10 = end */\r
+ mov rbp, [rsp+64] ; /* rbp = lcode */\r
+ mov r11, [rsp+72] ; /* r11 = dcode */\r
+ mov rdx, [rsp+80] ; /* rdx = hold */\r
+ mov ebx, [rsp+88] ; /* ebx = bits */\r
+ mov r12d, [rsp+100] ; /* r12d = lmask */\r
+ mov r13d, [rsp+104] ; /* r13d = dmask */\r
+ ; /* r14d = len */\r
+ ; /* r15d = dist */\r
+\r
+\r
+ cld\r
+ cmp r10, rdi\r
+ je L_one_time ; /* if only one decode left */\r
+ cmp r9, rsi\r
+\r
+ jne L_do_loop\r
+\r
+\r
+L_one_time:\r
+ mov r8, r12 ; /* r8 = lmask */\r
+ cmp bl, 32\r
+ ja L_get_length_code_one_time\r
+\r
+ lodsd ; /* eax = *(uint *)in++ */\r
+ mov cl, bl ; /* cl = bits, needs it for shifting */\r
+ add bl, 32 ; /* bits += 32 */\r
+ shl rax, cl\r
+ or rdx, rax ; /* hold |= *((uint *)in)++ << bits */\r
+ jmp L_get_length_code_one_time\r
+\r
+ALIGN 4\r
+L_while_test:\r
+ cmp r10, rdi\r
+ jbe L_break_loop\r
+ cmp r9, rsi\r
+ jbe L_break_loop\r
+\r
+L_do_loop:\r
+ mov r8, r12 ; /* r8 = lmask */\r
+ cmp bl, 32\r
+ ja L_get_length_code ; /* if (32 < bits) */\r
+\r
+ lodsd ; /* eax = *(uint *)in++ */\r
+ mov cl, bl ; /* cl = bits, needs it for shifting */\r
+ add bl, 32 ; /* bits += 32 */\r
+ shl rax, cl\r
+ or rdx, rax ; /* hold |= *((uint *)in)++ << bits */\r
+\r
+L_get_length_code:\r
+ and r8, rdx ; /* r8 &= hold */\r
+ mov eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */\r
+\r
+ mov cl, ah ; /* cl = this.bits */\r
+ sub bl, ah ; /* bits -= this.bits */\r
+ shr rdx, cl ; /* hold >>= this.bits */\r
+\r
+ test al, al\r
+ jnz L_test_for_length_base ; /* if (op != 0) 45.7% */\r
+\r
+ mov r8, r12 ; /* r8 = lmask */\r
+ shr eax, 16 ; /* output this.val char */\r
+ stosb\r
+\r
+L_get_length_code_one_time:\r
+ and r8, rdx ; /* r8 &= hold */\r
+ mov eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */\r
+\r
+L_dolen:\r
+ mov cl, ah ; /* cl = this.bits */\r
+ sub bl, ah ; /* bits -= this.bits */\r
+ shr rdx, cl ; /* hold >>= this.bits */\r
+\r
+ test al, al\r
+ jnz L_test_for_length_base ; /* if (op != 0) 45.7% */\r
+\r
+ shr eax, 16 ; /* output this.val char */\r
+ stosb\r
+ jmp L_while_test\r
+\r
+ALIGN 4\r
+L_test_for_length_base:\r
+ mov r14d, eax ; /* len = this */\r
+ shr r14d, 16 ; /* len = this.val */\r
+ mov cl, al\r
+\r
+ test al, 16\r
+ jz L_test_for_second_level_length ; /* if ((op & 16) == 0) 8% */\r
+ and cl, 15 ; /* op &= 15 */\r
+ jz L_decode_distance ; /* if (!op) */\r
+\r
+L_add_bits_to_len:\r
+ sub bl, cl\r
+ xor eax, eax\r
+ inc eax\r
+ shl eax, cl\r
+ dec eax\r
+ and eax, edx ; /* eax &= hold */\r
+ shr rdx, cl\r
+ add r14d, eax ; /* len += hold & mask[op] */\r
+\r
+L_decode_distance:\r
+ mov r8, r13 ; /* r8 = dmask */\r
+ cmp bl, 32\r
+ ja L_get_distance_code ; /* if (32 < bits) */\r
+\r
+ lodsd ; /* eax = *(uint *)in++ */\r
+ mov cl, bl ; /* cl = bits, needs it for shifting */\r
+ add bl, 32 ; /* bits += 32 */\r
+ shl rax, cl\r
+ or rdx, rax ; /* hold |= *((uint *)in)++ << bits */\r
+\r
+L_get_distance_code:\r
+ and r8, rdx ; /* r8 &= hold */\r
+ mov eax, [r11+r8*4] ; /* eax = dcode[hold & dmask] */\r
+\r
+L_dodist:\r
+ mov r15d, eax ; /* dist = this */\r
+ shr r15d, 16 ; /* dist = this.val */\r
+ mov cl, ah\r
+ sub bl, ah ; /* bits -= this.bits */\r
+ shr rdx, cl ; /* hold >>= this.bits */\r
+ mov cl, al ; /* cl = this.op */\r
+\r
+ test al, 16 ; /* if ((op & 16) == 0) */\r
+ jz L_test_for_second_level_dist\r
+ and cl, 15 ; /* op &= 15 */\r
+ jz L_check_dist_one\r
+\r
+L_add_bits_to_dist:\r
+ sub bl, cl\r
+ xor eax, eax\r
+ inc eax\r
+ shl eax, cl\r
+ dec eax ; /* (1 << op) - 1 */\r
+ and eax, edx ; /* eax &= hold */\r
+ shr rdx, cl\r
+ add r15d, eax ; /* dist += hold & ((1 << op) - 1) */\r
+\r
+L_check_window:\r
+ mov r8, rsi ; /* save in so from can use it's reg */\r
+ mov rax, rdi\r
+ sub rax, [rsp+40] ; /* nbytes = out - beg */\r
+\r
+ cmp eax, r15d\r
+ jb L_clip_window ; /* if (dist > nbytes) 4.2% */\r
+\r
+ mov ecx, r14d ; /* ecx = len */\r
+ mov rsi, rdi\r
+ sub rsi, r15 ; /* from = out - dist */\r
+\r
+ sar ecx, 1\r
+ jnc L_copy_two ; /* if len % 2 == 0 */\r
+\r
+ rep movsw\r
+ mov al, [rsi]\r
+ mov [rdi], al\r
+ inc rdi\r
+\r
+ mov rsi, r8 ; /* move in back to %rsi, toss from */\r
+ jmp L_while_test\r
+\r
+L_copy_two:\r
+ rep movsw\r
+ mov rsi, r8 ; /* move in back to %rsi, toss from */\r
+ jmp L_while_test\r
+\r
+ALIGN 4\r
+L_check_dist_one:\r
+ cmp r15d, 1 ; /* if dist 1, is a memset */\r
+ jne L_check_window\r
+ cmp [rsp+40], rdi ; /* if out == beg, outside window */\r
+ je L_check_window\r
+\r
+ mov ecx, r14d ; /* ecx = len */\r
+ mov al, [rdi-1]\r
+ mov ah, al\r
+\r
+ sar ecx, 1\r
+ jnc L_set_two\r
+ mov [rdi], al\r
+ inc rdi\r
+\r
+L_set_two:\r
+ rep stosw\r
+ jmp L_while_test\r
+\r
+ALIGN 4\r
+L_test_for_second_level_length:\r
+ test al, 64\r
+ jnz L_test_for_end_of_block ; /* if ((op & 64) != 0) */\r
+\r
+ xor eax, eax\r
+ inc eax\r
+ shl eax, cl\r
+ dec eax\r
+ and eax, edx ; /* eax &= hold */\r
+ add eax, r14d ; /* eax += len */\r
+ mov eax, [rbp+rax*4] ; /* eax = lcode[val+(hold&mask[op])]*/\r
+ jmp L_dolen\r
+\r
+ALIGN 4\r
+L_test_for_second_level_dist:\r
+ test al, 64\r
+ jnz L_invalid_distance_code ; /* if ((op & 64) != 0) */\r
+\r
+ xor eax, eax\r
+ inc eax\r
+ shl eax, cl\r
+ dec eax\r
+ and eax, edx ; /* eax &= hold */\r
+ add eax, r15d ; /* eax += dist */\r
+ mov eax, [r11+rax*4] ; /* eax = dcode[val+(hold&mask[op])]*/\r
+ jmp L_dodist\r
+\r
+ALIGN 4\r
+L_clip_window:\r
+ mov ecx, eax ; /* ecx = nbytes */\r
+ mov eax, [rsp+92] ; /* eax = wsize, prepare for dist cmp */\r
+ neg ecx ; /* nbytes = -nbytes */\r
+\r
+ cmp eax, r15d\r
+ jb L_invalid_distance_too_far ; /* if (dist > wsize) */\r
+\r
+ add ecx, r15d ; /* nbytes = dist - nbytes */\r
+ cmp dword ptr [rsp+96], 0\r
+ jne L_wrap_around_window ; /* if (write != 0) */\r
+\r
+ mov rsi, [rsp+56] ; /* from = window */\r
+ sub eax, ecx ; /* eax -= nbytes */\r
+ add rsi, rax ; /* from += wsize - nbytes */\r
+\r
+ mov eax, r14d ; /* eax = len */\r
+ cmp r14d, ecx\r
+ jbe L_do_copy ; /* if (nbytes >= len) */\r
+\r
+ sub eax, ecx ; /* eax -= nbytes */\r
+ rep movsb\r
+ mov rsi, rdi\r
+ sub rsi, r15 ; /* from = &out[ -dist ] */\r
+ jmp L_do_copy\r
+\r
+ALIGN 4\r
+L_wrap_around_window:\r
+ mov eax, [rsp+96] ; /* eax = write */\r
+ cmp ecx, eax\r
+ jbe L_contiguous_in_window ; /* if (write >= nbytes) */\r
+\r
+ mov esi, [rsp+92] ; /* from = wsize */\r
+ add rsi, [rsp+56] ; /* from += window */\r
+ add rsi, rax ; /* from += write */\r
+ sub rsi, rcx ; /* from -= nbytes */\r
+ sub ecx, eax ; /* nbytes -= write */\r
+\r
+ mov eax, r14d ; /* eax = len */\r
+ cmp eax, ecx\r
+ jbe L_do_copy ; /* if (nbytes >= len) */\r
+\r
+ sub eax, ecx ; /* len -= nbytes */\r
+ rep movsb\r
+ mov rsi, [rsp+56] ; /* from = window */\r
+ mov ecx, [rsp+96] ; /* nbytes = write */\r
+ cmp eax, ecx\r
+ jbe L_do_copy ; /* if (nbytes >= len) */\r
+\r
+ sub eax, ecx ; /* len -= nbytes */\r
+ rep movsb\r
+ mov rsi, rdi\r
+ sub rsi, r15 ; /* from = out - dist */\r
+ jmp L_do_copy\r
+\r
+ALIGN 4\r
+L_contiguous_in_window:\r
+ mov rsi, [rsp+56] ; /* rsi = window */\r
+ add rsi, rax\r
+ sub rsi, rcx ; /* from += write - nbytes */\r
+\r
+ mov eax, r14d ; /* eax = len */\r
+ cmp eax, ecx\r
+ jbe L_do_copy ; /* if (nbytes >= len) */\r
+\r
+ sub eax, ecx ; /* len -= nbytes */\r
+ rep movsb\r
+ mov rsi, rdi\r
+ sub rsi, r15 ; /* from = out - dist */\r
+ jmp L_do_copy ; /* if (nbytes >= len) */\r
+\r
+ALIGN 4\r
+L_do_copy:\r
+ mov ecx, eax ; /* ecx = len */\r
+ rep movsb\r
+\r
+ mov rsi, r8 ; /* move in back to %esi, toss from */\r
+ jmp L_while_test\r
+\r
+L_test_for_end_of_block:\r
+ test al, 32\r
+ jz L_invalid_literal_length_code\r
+ mov dword ptr [rsp+116], 1\r
+ jmp L_break_loop_with_status\r
+\r
+L_invalid_literal_length_code:\r
+ mov dword ptr [rsp+116], 2\r
+ jmp L_break_loop_with_status\r
+\r
+L_invalid_distance_code:\r
+ mov dword ptr [rsp+116], 3\r
+ jmp L_break_loop_with_status\r
+\r
+L_invalid_distance_too_far:\r
+ mov dword ptr [rsp+116], 4\r
+ jmp L_break_loop_with_status\r
+\r
+L_break_loop:\r
+ mov dword ptr [rsp+116], 0\r
+\r
+L_break_loop_with_status:\r
+; /* put in, out, bits, and hold back into ar and pop esp */\r
+ mov [rsp+16], rsi ; /* in */\r
+ mov [rsp+32], rdi ; /* out */\r
+ mov [rsp+88], ebx ; /* bits */\r
+ mov [rsp+80], rdx ; /* hold */\r
+\r
+ mov rax, [rsp] ; /* restore rbp and rsp */\r
+ mov rbp, [rsp+8]\r
+ mov rsp, rax\r
+\r
+\r
+\r
+ mov rsi,[rsp-8]\r
+ mov rdi,[rsp-16]\r
+ mov r12,[rsp-24]\r
+ mov r13,[rsp-32]\r
+ mov r14,[rsp-40]\r
+ mov r15,[rsp-48]\r
+ mov rbx,[rsp-56]\r
+ \r
+ ret 0\r
+; :\r
+; : "m" (ar)\r
+; : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi",\r
+; "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"\r
+; );\r
+\r
+inffas8664fnc ENDP\r
+;_TEXT ENDS\r
+END\r
--- /dev/null
+Summary\r
+-------\r
+This directory contains ASM implementations of the functions\r
+longest_match() and inflate_fast(), for 64 bits x86 (both AMD64 and Intel EM64t),\r
+for use with Microsoft Macro Assembler (x64) for AMD64 and Microsoft C++ 64 bits.\r
+\r
+gvmat64.asm is written by Gilles Vollant (2005), by using Brian Raiter 686/32 bits\r
+ assembly optimized version from Jean-loup Gailly original longest_match function\r
+\r
+inffasx64.asm and inffas8664.c were written by Chris Anderson, by optimizing\r
+ original function from Mark Adler\r
+\r
+Use instructions\r
+----------------\r
+Copy these files into the zlib source directory.\r
+\r
+define ASMV and ASMINF in your project. Include inffas8664.c in your source tree,\r
+and inffasx64.obj and gvmat64.obj as object to link.\r
+\r
+\r
+Build instructions\r
+------------------\r
+run bld_64.bat with Microsoft Macro Assembler (x64) for AMD64 (ml64.exe)\r
+\r
+ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK\r
+\r
+You can get Windows 2003 server DDK with ml64 and cl for AMD64 from \r
+ http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)\r
--- /dev/null
+ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm \r
+ml /coff /Zi /c /Flinffas32.lst inffas32.asm \r
--- /dev/null
+/*
+ Additional tools for Minizip
+ Code: Xavier Roche '2004
+ License: Same as ZLIB (www.gzip.org)
+*/
+
+/* Code */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "zlib.h"
+#include "unzip.h"
+
+#define READ_8(adr) ((unsigned char)*(adr))
+#define READ_16(adr) ( READ_8(adr) | (READ_8(adr+1) << 8) )
+#define READ_32(adr) ( READ_16(adr) | (READ_16((adr)+2) << 16) )
+
+#define WRITE_8(buff, n) do { \
+ *((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \
+} while(0)
+#define WRITE_16(buff, n) do { \
+ WRITE_8((unsigned char*)(buff), n); \
+ WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \
+} while(0)
+#define WRITE_32(buff, n) do { \
+ WRITE_16((unsigned char*)(buff), (n) & 0xffff); \
+ WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \
+} while(0)
+
+extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered)
+const char* file;
+const char* fileOut;
+const char* fileOutTmp;
+uLong* nRecovered;
+uLong* bytesRecovered;
+{
+ int err = Z_OK;
+ FILE* fpZip = fopen(file, "rb");
+ FILE* fpOut = fopen(fileOut, "wb");
+ FILE* fpOutCD = fopen(fileOutTmp, "wb");
+ if (fpZip != NULL && fpOut != NULL) {
+ int entries = 0;
+ uLong totalBytes = 0;
+ char header[30];
+ char filename[256];
+ char extra[1024];
+ int offset = 0;
+ int offsetCD = 0;
+ while ( fread(header, 1, 30, fpZip) == 30 ) {
+ int currentOffset = offset;
+
+ /* File entry */
+ if (READ_32(header) == 0x04034b50) {
+ unsigned int version = READ_16(header + 4);
+ unsigned int gpflag = READ_16(header + 6);
+ unsigned int method = READ_16(header + 8);
+ unsigned int filetime = READ_16(header + 10);
+ unsigned int filedate = READ_16(header + 12);
+ unsigned int crc = READ_32(header + 14); /* crc */
+ unsigned int cpsize = READ_32(header + 18); /* compressed size */
+ unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */
+ unsigned int fnsize = READ_16(header + 26); /* file name length */
+ unsigned int extsize = READ_16(header + 28); /* extra field length */
+ filename[0] = extra[0] = '\0';
+
+ /* Header */
+ if (fwrite(header, 1, 30, fpOut) == 30) {
+ offset += 30;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+
+ /* Filename */
+ if (fnsize > 0) {
+ if (fread(filename, 1, fnsize, fpZip) == fnsize) {
+ if (fwrite(filename, 1, fnsize, fpOut) == fnsize) {
+ offset += fnsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_STREAM_ERROR;
+ break;
+ }
+
+ /* Extra field */
+ if (extsize > 0) {
+ if (fread(extra, 1, extsize, fpZip) == extsize) {
+ if (fwrite(extra, 1, extsize, fpOut) == extsize) {
+ offset += extsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+
+ /* Data */
+ {
+ int dataSize = cpsize;
+ if (dataSize == 0) {
+ dataSize = uncpsize;
+ }
+ if (dataSize > 0) {
+ char* data = malloc(dataSize);
+ if (data != NULL) {
+ if ((int)fread(data, 1, dataSize, fpZip) == dataSize) {
+ if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize) {
+ offset += dataSize;
+ totalBytes += dataSize;
+ } else {
+ err = Z_ERRNO;
+ }
+ } else {
+ err = Z_ERRNO;
+ }
+ free(data);
+ if (err != Z_OK) {
+ break;
+ }
+ } else {
+ err = Z_MEM_ERROR;
+ break;
+ }
+ }
+ }
+
+ /* Central directory entry */
+ {
+ char header[46];
+ char* comment = "";
+ int comsize = (int) strlen(comment);
+ WRITE_32(header, 0x02014b50);
+ WRITE_16(header + 4, version);
+ WRITE_16(header + 6, version);
+ WRITE_16(header + 8, gpflag);
+ WRITE_16(header + 10, method);
+ WRITE_16(header + 12, filetime);
+ WRITE_16(header + 14, filedate);
+ WRITE_32(header + 16, crc);
+ WRITE_32(header + 20, cpsize);
+ WRITE_32(header + 24, uncpsize);
+ WRITE_16(header + 28, fnsize);
+ WRITE_16(header + 30, extsize);
+ WRITE_16(header + 32, comsize);
+ WRITE_16(header + 34, 0); /* disk # */
+ WRITE_16(header + 36, 0); /* int attrb */
+ WRITE_32(header + 38, 0); /* ext attrb */
+ WRITE_32(header + 42, currentOffset);
+ /* Header */
+ if (fwrite(header, 1, 46, fpOutCD) == 46) {
+ offsetCD += 46;
+
+ /* Filename */
+ if (fnsize > 0) {
+ if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) {
+ offsetCD += fnsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_STREAM_ERROR;
+ break;
+ }
+
+ /* Extra field */
+ if (extsize > 0) {
+ if (fwrite(extra, 1, extsize, fpOutCD) == extsize) {
+ offsetCD += extsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+
+ /* Comment field */
+ if (comsize > 0) {
+ if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) {
+ offsetCD += comsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+
+
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+
+ /* Success */
+ entries++;
+
+ } else {
+ break;
+ }
+ }
+
+ /* Final central directory */
+ {
+ int entriesZip = entries;
+ char header[22];
+ char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools";
+ int comsize = (int) strlen(comment);
+ if (entriesZip > 0xffff) {
+ entriesZip = 0xffff;
+ }
+ WRITE_32(header, 0x06054b50);
+ WRITE_16(header + 4, 0); /* disk # */
+ WRITE_16(header + 6, 0); /* disk # */
+ WRITE_16(header + 8, entriesZip); /* hack */
+ WRITE_16(header + 10, entriesZip); /* hack */
+ WRITE_32(header + 12, offsetCD); /* size of CD */
+ WRITE_32(header + 16, offset); /* offset to CD */
+ WRITE_16(header + 20, comsize); /* comment */
+
+ /* Header */
+ if (fwrite(header, 1, 22, fpOutCD) == 22) {
+
+ /* Comment field */
+ if (comsize > 0) {
+ if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) {
+ err = Z_ERRNO;
+ }
+ }
+
+ } else {
+ err = Z_ERRNO;
+ }
+ }
+
+ /* Final merge (file + central directory) */
+ fclose(fpOutCD);
+ if (err == Z_OK) {
+ fpOutCD = fopen(fileOutTmp, "rb");
+ if (fpOutCD != NULL) {
+ int nRead;
+ char buffer[8192];
+ while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) {
+ if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+ fclose(fpOutCD);
+ }
+ }
+
+ /* Close */
+ fclose(fpZip);
+ fclose(fpOut);
+
+ /* Wipe temporary file */
+ (void)remove(fileOutTmp);
+
+ /* Number of recovered entries */
+ if (err == Z_OK) {
+ if (nRecovered != NULL) {
+ *nRecovered = entries;
+ }
+ if (bytesRecovered != NULL) {
+ *bytesRecovered = totalBytes;
+ }
+ }
+ } else {
+ err = Z_STREAM_ERROR;
+ }
+ return err;
+}
--- /dev/null
+/*
+ Additional tools for Minizip
+ Code: Xavier Roche '2004
+ License: Same as ZLIB (www.gzip.org)
+*/
+
+#ifndef _zip_tools_H
+#define _zip_tools_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _ZLIB_H
+#include "zlib.h"
+#endif
+
+#include "unzip.h"
+
+/* Repair a ZIP file (missing central directory)
+ file: file to recover
+ fileOut: output file after recovery
+ fileOutTmp: temporary file name used for recovery
+*/
+extern int ZEXPORT unzRepair(const char* file,
+ const char* fileOut,
+ const char* fileOutTmp,
+ uLong* nRecovered,
+ uLong* bytesRecovered);
+
+#endif
--- /dev/null
+To build testzLib with Visual Studio 2005:\r
+\r
+copy to a directory file from :\r
+- root of zLib tree\r
+- contrib/testzlib\r
+- contrib/masmx86\r
+- contrib/masmx64\r
+- contrib/vstudio/vc7\r
+\r
+and open testzlib8.sln
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding = "Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="7.00"\r
+ Name="testZlibDll"\r
+ ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}"\r
+ Keyword="Win32Proj">\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"/>\r
+ </Platforms>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="Debug"\r
+ IntermediateDirectory="Debug"\r
+ ConfigurationType="1"\r
+ CharacterSet="2">\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE"\r
+ MinimalRebuild="TRUE"\r
+ BasicRuntimeChecks="3"\r
+ RuntimeLibrary="5"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="TRUE"\r
+ DebugInformationFormat="4"/>\r
+ <Tool\r
+ Name="VCCustomBuildTool"/>\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="2"\r
+ GenerateDebugInformation="TRUE"\r
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="1"/>\r
+ <Tool\r
+ Name="VCMIDLTool"/>\r
+ <Tool\r
+ Name="VCPostBuildEventTool"/>\r
+ <Tool\r
+ Name="VCPreBuildEventTool"/>\r
+ <Tool\r
+ Name="VCPreLinkEventTool"/>\r
+ <Tool\r
+ Name="VCResourceCompilerTool"/>\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"/>\r
+ <Tool\r
+ Name="VCWebDeploymentTool"/>\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="Release"\r
+ IntermediateDirectory="Release"\r
+ ConfigurationType="1"\r
+ CharacterSet="2">\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="TRUE"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE"\r
+ StringPooling="TRUE"\r
+ RuntimeLibrary="4"\r
+ EnableFunctionLevelLinking="TRUE"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="TRUE"\r
+ DebugInformationFormat="3"/>\r
+ <Tool\r
+ Name="VCCustomBuildTool"/>\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="1"\r
+ GenerateDebugInformation="TRUE"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="1"/>\r
+ <Tool\r
+ Name="VCMIDLTool"/>\r
+ <Tool\r
+ Name="VCPostBuildEventTool"/>\r
+ <Tool\r
+ Name="VCPreBuildEventTool"/>\r
+ <Tool\r
+ Name="VCPreLinkEventTool"/>\r
+ <Tool\r
+ Name="VCResourceCompilerTool"/>\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"/>\r
+ <Tool\r
+ Name="VCWebDeploymentTool"/>\r
+ </Configuration>\r
+ </Configurations>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">\r
+ <File\r
+ RelativePath="..\..\testzlib\testzlib.c">\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Header Files"\r
+ Filter="h;hpp;hxx;hm;inl;inc">\r
+ </Filter>\r
+ <Filter\r
+ Name="Resource Files"\r
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">\r
+ </Filter>\r
+ <File\r
+ RelativePath="ReleaseDll\zlibwapi.lib">\r
+ </File>\r
+ </Files>\r
+ <Globals>\r
+ </Globals>\r
+</VisualStudioProject>\r
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="8,00"\r
+ Name="miniunz"\r
+ ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694382A}"\r
+ Keyword="Win32Proj"\r
+ >\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"\r
+ />\r
+ <Platform\r
+ Name="x64"\r
+ />\r
+ <Platform\r
+ Name="Itanium"\r
+ />\r
+ </Platforms>\r
+ <ToolFiles>\r
+ </ToolFiles>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="x86\MiniUnzip$(ConfigurationName)"\r
+ IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="1"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="4"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/miniunz.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|x64"\r
+ OutputDirectory="x64\MiniUnzip$(ConfigurationName)"\r
+ IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/miniunz.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|Itanium"\r
+ OutputDirectory="ia64\MiniUnzip$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/miniunz.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="x86\MiniUnzip$(ConfigurationName)"\r
+ IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="0"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/miniunz.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|x64"\r
+ OutputDirectory="x64\MiniUnzip$(ConfigurationName)"\r
+ IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/miniunz.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Itanium"\r
+ OutputDirectory="ia64\MiniUnzip$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/miniunz.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ </Configurations>\r
+ <References>\r
+ </References>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"\r
+ >\r
+ <File\r
+ RelativePath="..\..\minizip\miniunz.c"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Header Files"\r
+ Filter="h;hpp;hxx;hm;inl;inc"\r
+ >\r
+ </Filter>\r
+ <Filter\r
+ Name="Resource Files"\r
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+ >\r
+ </Filter>\r
+ </Files>\r
+ <Globals>\r
+ </Globals>\r
+</VisualStudioProject>\r
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="8,00"\r
+ Name="minizip"\r
+ ProjectGUID="{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"\r
+ Keyword="Win32Proj"\r
+ >\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"\r
+ />\r
+ <Platform\r
+ Name="x64"\r
+ />\r
+ <Platform\r
+ Name="Itanium"\r
+ />\r
+ </Platforms>\r
+ <ToolFiles>\r
+ </ToolFiles>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="x86\MiniZip$(ConfigurationName)"\r
+ IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="1"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="4"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/minizip.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|x64"\r
+ OutputDirectory="x64\$(ConfigurationName)"\r
+ IntermediateDirectory="x64\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/minizip.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|Itanium"\r
+ OutputDirectory="ia64\$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/minizip.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="x86\MiniZip$(ConfigurationName)"\r
+ IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="0"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/minizip.exe"\r
+ LinkIncremental="1"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|x64"\r
+ OutputDirectory="x64\$(ConfigurationName)"\r
+ IntermediateDirectory="x64\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/minizip.exe"\r
+ LinkIncremental="1"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Itanium"\r
+ OutputDirectory="ia64\$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/minizip.exe"\r
+ LinkIncremental="1"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ </Configurations>\r
+ <References>\r
+ </References>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"\r
+ >\r
+ <File\r
+ RelativePath="..\..\minizip\minizip.c"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Header Files"\r
+ Filter="h;hpp;hxx;hm;inl;inc"\r
+ >\r
+ </Filter>\r
+ <Filter\r
+ Name="Resource Files"\r
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+ >\r
+ </Filter>\r
+ </Files>\r
+ <Globals>\r
+ </Globals>\r
+</VisualStudioProject>\r
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="8,00"\r
+ Name="testzlib"\r
+ ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"\r
+ RootNamespace="testzlib"\r
+ Keyword="Win32Proj"\r
+ >\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"\r
+ />\r
+ <Platform\r
+ Name="x64"\r
+ />\r
+ <Platform\r
+ Name="Itanium"\r
+ />\r
+ </Platforms>\r
+ <ToolFiles>\r
+ </ToolFiles>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="x86\TestZlib$(ConfigurationName)"\r
+ IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="1"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerOutput="4"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="4"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|x64"\r
+ OutputDirectory="x64\TestZlib$(ConfigurationName)"\r
+ IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj"\r
+ GenerateManifest="false"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|Itanium"\r
+ OutputDirectory="ia64\TestZlib$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerOutput="4"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="ReleaseWithoutAsm|Win32"\r
+ OutputDirectory="x86\TestZlib$(ConfigurationName)"\r
+ IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ CharacterSet="2"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="0"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="ReleaseWithoutAsm|x64"\r
+ OutputDirectory="x64\TestZlib$(ConfigurationName)"\r
+ IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies=""\r
+ GenerateManifest="false"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="ReleaseWithoutAsm|Itanium"\r
+ OutputDirectory="ia64\TestZlib$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ CharacterSet="2"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="x86\TestZlib$(ConfigurationName)"\r
+ IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ CharacterSet="2"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="0"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|x64"\r
+ OutputDirectory="x64\TestZlib$(ConfigurationName)"\r
+ IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj"\r
+ GenerateManifest="false"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Itanium"\r
+ OutputDirectory="ia64\TestZlib$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ CharacterSet="2"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\.."\r
+ PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ </Configurations>\r
+ <References>\r
+ </References>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"\r
+ >\r
+ <File\r
+ RelativePath="..\..\..\adler32.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\compress.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\crc32.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\deflate.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\masmx86\gvmat32c.c"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|x64"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|x64"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|x64"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|Win64 (AMD64)"\r
+ ExcludedFromBuild="TRUE"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win64 (AMD64)"\r
+ ExcludedFromBuild="TRUE"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseAsm|Win64 (AMD64)"\r
+ ExcludedFromBuild="TRUE"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\infback.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\masmx64\inffas8664.c"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inffast.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inflate.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inftrees.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\testzlib\testzlib.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\trees.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\uncompr.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\zutil.c"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Header Files"\r
+ Filter="h;hpp;hxx;hm;inl;inc"\r
+ >\r
+ </Filter>\r
+ <Filter\r
+ Name="Resource Files"\r
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+ >\r
+ </Filter>\r
+ </Files>\r
+ <Globals>\r
+ </Globals>\r
+</VisualStudioProject>\r
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="8,00"\r
+ Name="TestZlibDll"\r
+ ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694366A}"\r
+ Keyword="Win32Proj"\r
+ SignManifests="true"\r
+ >\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"\r
+ />\r
+ <Platform\r
+ Name="x64"\r
+ />\r
+ <Platform\r
+ Name="Itanium"\r
+ />\r
+ </Platforms>\r
+ <ToolFiles>\r
+ </ToolFiles>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="x86\TestZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="1"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="4"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|x64"\r
+ OutputDirectory="x64\TestZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|Itanium"\r
+ OutputDirectory="ia64\TestZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="2"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"\r
+ SubSystem="1"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="x86\TestZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="0"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|x64"\r
+ OutputDirectory="x64\TestZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Itanium"\r
+ OutputDirectory="ia64\TestZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="1"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ CharacterSet="2"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="2"\r
+ InlineFunctionExpansion="1"\r
+ OmitFramePointers="true"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"\r
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"\r
+ StringPooling="true"\r
+ BasicRuntimeChecks="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ UsePrecompiledHeader="0"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ WarningLevel="3"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib"\r
+ OutputFile="$(OutDir)/testzlib.exe"\r
+ LinkIncremental="1"\r
+ GenerateManifest="false"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ OptimizeForWindows98="1"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ </Configurations>\r
+ <References>\r
+ </References>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"\r
+ >\r
+ <File\r
+ RelativePath="..\..\testzlib\testzlib.c"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Header Files"\r
+ Filter="h;hpp;hxx;hm;inl;inc"\r
+ >\r
+ </Filter>\r
+ <Filter\r
+ Name="Resource Files"\r
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+ >\r
+ </Filter>\r
+ </Files>\r
+ <Globals>\r
+ </Globals>\r
+</VisualStudioProject>\r
--- /dev/null
+#include <windows.h>\r
+\r
+#define IDR_VERSION1 1\r
+IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE\r
+ FILEVERSION 1,2,3,0\r
+ PRODUCTVERSION 1,2,3,0\r
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK\r
+ FILEFLAGS 0\r
+ FILEOS VOS_DOS_WINDOWS32\r
+ FILETYPE VFT_DLL\r
+ FILESUBTYPE 0 // not used\r
+BEGIN\r
+ BLOCK "StringFileInfo"\r
+ BEGIN\r
+ BLOCK "040904E4"\r
+ //language ID = U.S. English, char set = Windows, Multilingual\r
+\r
+ BEGIN\r
+ VALUE "FileDescription", "zlib data compression library\0"\r
+ VALUE "FileVersion", "1.2.3.0\0"\r
+ VALUE "InternalName", "zlib\0"\r
+ VALUE "OriginalFilename", "zlib.dll\0"\r
+ VALUE "ProductName", "ZLib.DLL\0"\r
+ VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"\r
+ VALUE "LegalCopyright", "(C) 1995-2003 Jean-loup Gailly & Mark Adler\0"\r
+ END\r
+ END\r
+ BLOCK "VarFileInfo"\r
+ BEGIN\r
+ VALUE "Translation", 0x0409, 1252\r
+ END\r
+END\r
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="8,00"\r
+ Name="zlibstat"\r
+ ProjectGUID="{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"\r
+ >\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"\r
+ />\r
+ <Platform\r
+ Name="x64"\r
+ />\r
+ <Platform\r
+ Name="Itanium"\r
+ />\r
+ </Platforms>\r
+ <ToolFiles>\r
+ </ToolFiles>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="x86\ZlibStat$(ConfigurationName)"\r
+ IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"\r
+ ConfigurationType="4"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="1"\r
+ BufferSecurityCheck="false"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="1"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLibrarianTool"\r
+ AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"\r
+ OutputFile="$(OutDir)\zlibstat.lib"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|x64"\r
+ OutputDirectory="x64\ZlibStat$(ConfigurationName)"\r
+ IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"\r
+ ConfigurationType="4"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="1"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLibrarianTool"\r
+ AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB"\r
+ OutputFile="$(OutDir)\zlibstat.lib"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|Itanium"\r
+ OutputDirectory="ia64\ZlibStat$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp"\r
+ ConfigurationType="4"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ Detect64BitPortabilityProblems="true"\r
+ DebugInformationFormat="1"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLibrarianTool"\r
+ AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB"\r
+ OutputFile="$(OutDir)\zlibstat.lib"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="x86\ZlibStat$(ConfigurationName)"\r
+ IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"\r
+ ConfigurationType="4"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ASMV;ASMINF"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="0"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLibrarianTool"\r
+ AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"\r
+ AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj "\r
+ OutputFile="$(OutDir)\zlibstat.lib"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|x64"\r
+ OutputDirectory="x64\ZlibStat$(ConfigurationName)"\r
+ IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"\r
+ ConfigurationType="4"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ASMV;ASMINF;WIN64"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLibrarianTool"\r
+ AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB"\r
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "\r
+ OutputFile="$(OutDir)\zlibstat.lib"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Itanium"\r
+ OutputDirectory="ia64\ZlibStat$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp"\r
+ ConfigurationType="4"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLibrarianTool"\r
+ AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB"\r
+ OutputFile="$(OutDir)\zlibstat.lib"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="ReleaseWithoutAsm|Win32"\r
+ OutputDirectory="x86\ZlibStat$(ConfigurationName)"\r
+ IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"\r
+ ConfigurationType="4"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="0"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLibrarianTool"\r
+ AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"\r
+ OutputFile="$(OutDir)\zlibstat.lib"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="ReleaseWithoutAsm|x64"\r
+ OutputDirectory="x64\ZlibStat$(ConfigurationName)"\r
+ IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"\r
+ ConfigurationType="4"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLibrarianTool"\r
+ AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB"\r
+ OutputFile="$(OutDir)\zlibstat.lib"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="ReleaseWithoutAsm|Itanium"\r
+ OutputDirectory="ia64\ZlibStat$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp"\r
+ ConfigurationType="4"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="2"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLibrarianTool"\r
+ AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB"\r
+ OutputFile="$(OutDir)\zlibstat.lib"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ </Configurations>\r
+ <References>\r
+ </References>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ >\r
+ <File\r
+ RelativePath="..\..\..\adler32.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\compress.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\crc32.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\deflate.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\masmx86\gvmat32c.c"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|x64"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|x64"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|x64"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\gzio.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\infback.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\masmx64\inffas8664.c"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inffast.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inflate.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inftrees.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\minizip\ioapi.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\trees.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\uncompr.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\minizip\unzip.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\minizip\zip.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\zlib.rc"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\zlibvc.def"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\zutil.c"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ </Files>\r
+ <Globals>\r
+ </Globals>\r
+</VisualStudioProject>\r
--- /dev/null
+\r
+VERSION 1.23\r
+\r
+HEAPSIZE 1048576,8192\r
+\r
+EXPORTS\r
+ adler32 @1\r
+ compress @2\r
+ crc32 @3\r
+ deflate @4\r
+ deflateCopy @5\r
+ deflateEnd @6\r
+ deflateInit2_ @7\r
+ deflateInit_ @8\r
+ deflateParams @9\r
+ deflateReset @10\r
+ deflateSetDictionary @11\r
+ gzclose @12\r
+ gzdopen @13\r
+ gzerror @14\r
+ gzflush @15\r
+ gzopen @16\r
+ gzread @17\r
+ gzwrite @18\r
+ inflate @19\r
+ inflateEnd @20\r
+ inflateInit2_ @21\r
+ inflateInit_ @22\r
+ inflateReset @23\r
+ inflateSetDictionary @24\r
+ inflateSync @25\r
+ uncompress @26\r
+ zlibVersion @27\r
+ gzprintf @28\r
+ gzputc @29\r
+ gzgetc @30\r
+ gzseek @31\r
+ gzrewind @32\r
+ gztell @33\r
+ gzeof @34\r
+ gzsetparams @35\r
+ zError @36\r
+ inflateSyncPoint @37\r
+ get_crc_table @38\r
+ compress2 @39\r
+ gzputs @40\r
+ gzgets @41\r
+ inflateCopy @42\r
+ inflateBackInit_ @43\r
+ inflateBack @44\r
+ inflateBackEnd @45\r
+ compressBound @46\r
+ deflateBound @47\r
+ gzclearerr @48\r
+ gzungetc @49\r
+ zlibCompileFlags @50\r
+ deflatePrime @51\r
+\r
+ unzOpen @61\r
+ unzClose @62\r
+ unzGetGlobalInfo @63\r
+ unzGetCurrentFileInfo @64\r
+ unzGoToFirstFile @65\r
+ unzGoToNextFile @66\r
+ unzOpenCurrentFile @67\r
+ unzReadCurrentFile @68\r
+ unzOpenCurrentFile3 @69\r
+ unztell @70\r
+ unzeof @71\r
+ unzCloseCurrentFile @72\r
+ unzGetGlobalComment @73\r
+ unzStringFileNameCompare @74\r
+ unzLocateFile @75\r
+ unzGetLocalExtrafield @76\r
+ unzOpen2 @77\r
+ unzOpenCurrentFile2 @78\r
+ unzOpenCurrentFilePassword @79\r
+\r
+ zipOpen @80\r
+ zipOpenNewFileInZip @81\r
+ zipWriteInFileInZip @82\r
+ zipCloseFileInZip @83\r
+ zipClose @84\r
+ zipOpenNewFileInZip2 @86\r
+ zipCloseFileInZipRaw @87\r
+ zipOpen2 @88\r
+ zipOpenNewFileInZip3 @89\r
+\r
+ unzGetFilePos @100\r
+ unzGoToFilePos @101\r
+\r
+ fill_win32_filefunc @110\r
--- /dev/null
+\r
+Microsoft Visual Studio Solution File, Format Version 9.00\r
+# Visual Studio 2005\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestZlibDll", "testzlibdll.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}"\r
+ ProjectSection(ProjectDependencies) = postProject\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D}\r
+ EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"\r
+ ProjectSection(ProjectDependencies) = postProject\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D}\r
+ EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}"\r
+ ProjectSection(ProjectDependencies) = postProject\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D}\r
+ EndProjectSection\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|Itanium = Debug|Itanium\r
+ Debug|Win32 = Debug|Win32\r
+ Debug|x64 = Debug|x64\r
+ Release|Itanium = Release|Itanium\r
+ Release|Win32 = Release|Win32\r
+ Release|x64 = Release|x64\r
+ ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium\r
+ ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32\r
+ ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = ReleaseWithoutAsm|x64\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = ReleaseWithoutAsm|x64\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64\r
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64\r
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64\r
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium\r
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium\r
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="8,00"\r
+ Name="zlibvc"\r
+ ProjectGUID="{8FD826F8-3739-44E6-8CC8-997122E53B8D}"\r
+ >\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"\r
+ />\r
+ <Platform\r
+ Name="x64"\r
+ />\r
+ <Platform\r
+ Name="Itanium"\r
+ />\r
+ </Platforms>\r
+ <ToolFiles>\r
+ </ToolFiles>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="x86\ZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="2"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ PreprocessorDefinitions="_DEBUG"\r
+ MkTypLibCompatible="true"\r
+ SuppressStartupBanner="true"\r
+ TargetEnvironment="1"\r
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI,ASMV,ASMINF"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="1"\r
+ BufferSecurityCheck="false"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ BrowseInformation="0"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ DebugInformationFormat="4"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ PreprocessorDefinitions="_DEBUG"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalOptions="/MACHINE:I386"\r
+ AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"\r
+ OutputFile="$(OutDir)\zlibwapi.dll"\r
+ LinkIncremental="2"\r
+ SuppressStartupBanner="true"\r
+ GenerateManifest="false"\r
+ ModuleDefinitionFile=".\zlibvc.def"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"\r
+ GenerateMapFile="true"\r
+ MapFileName="$(OutDir)/zlibwapi.map"\r
+ SubSystem="2"\r
+ ImportLibrary="$(OutDir)/zlibwapi.lib"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|x64"\r
+ OutputDirectory="x64\ZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="2"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ PreprocessorDefinitions="_DEBUG"\r
+ MkTypLibCompatible="true"\r
+ SuppressStartupBanner="true"\r
+ TargetEnvironment="3"\r
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI,ASMV,ASMINF;WIN64"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ BrowseInformation="0"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ PreprocessorDefinitions="_DEBUG"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "\r
+ OutputFile="$(OutDir)\zlibwapi.dll"\r
+ LinkIncremental="2"\r
+ SuppressStartupBanner="true"\r
+ GenerateManifest="false"\r
+ ModuleDefinitionFile=".\zlibvc.def"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"\r
+ GenerateMapFile="true"\r
+ MapFileName="$(OutDir)/zlibwapi.map"\r
+ SubSystem="2"\r
+ ImportLibrary="$(OutDir)/zlibwapi.lib"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|Itanium"\r
+ OutputDirectory="ia64\ZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="2"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ PreprocessorDefinitions="_DEBUG"\r
+ MkTypLibCompatible="true"\r
+ SuppressStartupBanner="true"\r
+ TargetEnvironment="2"\r
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;WIN64"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="3"\r
+ BufferSecurityCheck="false"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ BrowseInformation="0"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ PreprocessorDefinitions="_DEBUG"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)\zlibwapi.dll"\r
+ LinkIncremental="2"\r
+ SuppressStartupBanner="true"\r
+ GenerateManifest="false"\r
+ ModuleDefinitionFile=".\zlibvc.def"\r
+ GenerateDebugInformation="true"\r
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"\r
+ GenerateMapFile="true"\r
+ MapFileName="$(OutDir)/zlibwapi.map"\r
+ SubSystem="2"\r
+ ImportLibrary="$(OutDir)/zlibwapi.lib"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="ReleaseWithoutAsm|Win32"\r
+ OutputDirectory="x86\ZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="2"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ MkTypLibCompatible="true"\r
+ SuppressStartupBanner="true"\r
+ TargetEnvironment="1"\r
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"\r
+ AssemblerOutput="2"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ BrowseInformation="0"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalOptions="/MACHINE:I386"\r
+ OutputFile="$(OutDir)\zlibwapi.dll"\r
+ LinkIncremental="1"\r
+ SuppressStartupBanner="true"\r
+ GenerateManifest="false"\r
+ IgnoreAllDefaultLibraries="false"\r
+ ModuleDefinitionFile=".\zlibvc.def"\r
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"\r
+ GenerateMapFile="true"\r
+ MapFileName="$(OutDir)/zlibwapi.map"\r
+ SubSystem="2"\r
+ OptimizeForWindows98="1"\r
+ ImportLibrary="$(OutDir)/zlibwapi.lib"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="ReleaseWithoutAsm|x64"\r
+ OutputDirectory="x64\ZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="2"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ MkTypLibCompatible="true"\r
+ SuppressStartupBanner="true"\r
+ TargetEnvironment="3"\r
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI;WIN64"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"\r
+ AssemblerOutput="2"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ BrowseInformation="0"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)\zlibwapi.dll"\r
+ LinkIncremental="1"\r
+ SuppressStartupBanner="true"\r
+ GenerateManifest="false"\r
+ IgnoreAllDefaultLibraries="false"\r
+ ModuleDefinitionFile=".\zlibvc.def"\r
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"\r
+ GenerateMapFile="true"\r
+ MapFileName="$(OutDir)/zlibwapi.map"\r
+ SubSystem="2"\r
+ OptimizeForWindows98="1"\r
+ ImportLibrary="$(OutDir)/zlibwapi.lib"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="ReleaseWithoutAsm|Itanium"\r
+ OutputDirectory="ia64\ZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="2"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ MkTypLibCompatible="true"\r
+ SuppressStartupBanner="true"\r
+ TargetEnvironment="2"\r
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI;WIN64"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"\r
+ AssemblerOutput="2"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ BrowseInformation="0"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)\zlibwapi.dll"\r
+ LinkIncremental="1"\r
+ SuppressStartupBanner="true"\r
+ GenerateManifest="false"\r
+ IgnoreAllDefaultLibraries="false"\r
+ ModuleDefinitionFile=".\zlibvc.def"\r
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"\r
+ GenerateMapFile="true"\r
+ MapFileName="$(OutDir)/zlibwapi.map"\r
+ SubSystem="2"\r
+ OptimizeForWindows98="1"\r
+ ImportLibrary="$(OutDir)/zlibwapi.lib"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="x86\ZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="2"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ MkTypLibCompatible="true"\r
+ SuppressStartupBanner="true"\r
+ TargetEnvironment="1"\r
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;ASMV;ASMINF"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"\r
+ AssemblerOutput="2"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ BrowseInformation="0"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalOptions="/MACHINE:I386"\r
+ AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj "\r
+ OutputFile="$(OutDir)\zlibwapi.dll"\r
+ LinkIncremental="1"\r
+ SuppressStartupBanner="true"\r
+ GenerateManifest="false"\r
+ IgnoreAllDefaultLibraries="false"\r
+ ModuleDefinitionFile=".\zlibvc.def"\r
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"\r
+ GenerateMapFile="true"\r
+ MapFileName="$(OutDir)/zlibwapi.map"\r
+ SubSystem="2"\r
+ OptimizeForWindows98="1"\r
+ ImportLibrary="$(OutDir)/zlibwapi.lib"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|x64"\r
+ OutputDirectory="x64\ZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="2"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ MkTypLibCompatible="true"\r
+ SuppressStartupBanner="true"\r
+ TargetEnvironment="3"\r
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;ASMV;ASMINF;WIN64"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"\r
+ AssemblerOutput="2"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ BrowseInformation="0"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "\r
+ OutputFile="$(OutDir)\zlibwapi.dll"\r
+ LinkIncremental="1"\r
+ SuppressStartupBanner="true"\r
+ GenerateManifest="false"\r
+ IgnoreAllDefaultLibraries="false"\r
+ ModuleDefinitionFile=".\zlibvc.def"\r
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"\r
+ GenerateMapFile="true"\r
+ MapFileName="$(OutDir)/zlibwapi.map"\r
+ SubSystem="2"\r
+ OptimizeForWindows98="1"\r
+ ImportLibrary="$(OutDir)/zlibwapi.lib"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Itanium"\r
+ OutputDirectory="ia64\ZlibDll$(ConfigurationName)"\r
+ IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"\r
+ ConfigurationType="2"\r
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"\r
+ UseOfMFC="0"\r
+ ATLMinimizesCRunTimeLibraryUsage="false"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ MkTypLibCompatible="true"\r
+ SuppressStartupBanner="true"\r
+ TargetEnvironment="2"\r
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ InlineFunctionExpansion="1"\r
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"\r
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;WIN64"\r
+ StringPooling="true"\r
+ ExceptionHandling="0"\r
+ RuntimeLibrary="2"\r
+ BufferSecurityCheck="false"\r
+ EnableFunctionLevelLinking="true"\r
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"\r
+ AssemblerOutput="2"\r
+ AssemblerListingLocation="$(IntDir)\"\r
+ ObjectFile="$(IntDir)\"\r
+ ProgramDataBaseFileName="$(OutDir)\"\r
+ BrowseInformation="0"\r
+ WarningLevel="3"\r
+ SuppressStartupBanner="true"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ PreprocessorDefinitions="NDEBUG"\r
+ Culture="1036"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ OutputFile="$(OutDir)\zlibwapi.dll"\r
+ LinkIncremental="1"\r
+ SuppressStartupBanner="true"\r
+ GenerateManifest="false"\r
+ IgnoreAllDefaultLibraries="false"\r
+ ModuleDefinitionFile=".\zlibvc.def"\r
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"\r
+ GenerateMapFile="true"\r
+ MapFileName="$(OutDir)/zlibwapi.map"\r
+ SubSystem="2"\r
+ OptimizeForWindows98="1"\r
+ ImportLibrary="$(OutDir)/zlibwapi.lib"\r
+ TargetMachine="5"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebDeploymentTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ </Configurations>\r
+ <References>\r
+ </References>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"\r
+ >\r
+ <File\r
+ RelativePath="..\..\..\adler32.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\compress.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\crc32.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\deflate.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\masmx86\gvmat32c.c"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|x64"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|x64"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|x64"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\gzio.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\infback.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\masmx64\inffas8664.c"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Debug|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="ReleaseWithoutAsm|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Itanium"\r
+ ExcludedFromBuild="true"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inffast.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inflate.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inftrees.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\minizip\ioapi.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\minizip\iowin32.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\trees.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\uncompr.c"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\minizip\unzip.c"\r
+ >\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories=""\r
+ PreprocessorDefinitions="ZLIB_INTERNAL"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories=""\r
+ PreprocessorDefinitions="ZLIB_INTERNAL"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Itanium"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories=""\r
+ PreprocessorDefinitions="ZLIB_INTERNAL"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\minizip\zip.c"\r
+ >\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories=""\r
+ PreprocessorDefinitions="ZLIB_INTERNAL"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|x64"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories=""\r
+ PreprocessorDefinitions="ZLIB_INTERNAL"\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Itanium"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories=""\r
+ PreprocessorDefinitions="ZLIB_INTERNAL"\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath=".\zlib.rc"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\zlibvc.def"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\zutil.c"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Header Files"\r
+ Filter="h;hpp;hxx;hm;inl;fi;fd"\r
+ >\r
+ <File\r
+ RelativePath="..\..\..\deflate.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\infblock.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\infcodes.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inffast.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\inftrees.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\infutil.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\zconf.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\zlib.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\..\..\zutil.h"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Resource Files"\r
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"\r
+ >\r
+ </Filter>\r
+ </Files>\r
+ <Globals>\r
+ </Globals>\r
+</VisualStudioProject>\r
--- /dev/null
+This directory contains examples of the use of zlib.
+
+fitblk.c
+ compress just enough input to nearly fill a requested output size
+ - zlib isn't designed to do this, but fitblk does it anyway
+
+gun.c
+ uncompress a gzip file
+ - illustrates the use of inflateBack() for high speed file-to-file
+ decompression using call-back functions
+ - is approximately twice as fast as gzip -d
+ - also provides Unix uncompress functionality, again twice as fast
+
+gzappend.c
+ append to a gzip file
+ - illustrates the use of the Z_BLOCK flush parameter for inflate()
+ - illustrates the use of deflatePrime() to start at any bit
+
+gzjoin.c
+ join gzip files without recalculating the crc or recompressing
+ - illustrates the use of the Z_BLOCK flush parameter for inflate()
+ - illustrates the use of crc32_combine()
+
+gzlog.c
+gzlog.h
+ efficiently maintain a message log file in gzip format
+ - illustrates use of raw deflate and Z_SYNC_FLUSH
+ - illustrates use of gzip header extra field
+
+zlib_how.html
+ painfully comprehensive description of zpipe.c (see below)
+ - describes in excruciating detail the use of deflate() and inflate()
+
+zpipe.c
+ reads and writes zlib streams from stdin to stdout
+ - illustrates the proper use of deflate() and inflate()
+ - deeply commented in zlib_how.html (see above)
+
+zran.c
+ index a zlib or gzip stream and randomly access it
+ - illustrates the use of Z_BLOCK, inflatePrime(), and
+ inflateSetDictionary() to provide random access
--- /dev/null
+/* fitblk.c: example of fitting compressed output to a specified size
+ Not copyrighted -- provided to the public domain
+ Version 1.1 25 November 2004 Mark Adler */
+
+/* Version history:
+ 1.0 24 Nov 2004 First version
+ 1.1 25 Nov 2004 Change deflateInit2() to deflateInit()
+ Use fixed-size, stack-allocated raw buffers
+ Simplify code moving compression to subroutines
+ Use assert() for internal errors
+ Add detailed description of approach
+ */
+
+/* Approach to just fitting a requested compressed size:
+
+ fitblk performs three compression passes on a portion of the input
+ data in order to determine how much of that input will compress to
+ nearly the requested output block size. The first pass generates
+ enough deflate blocks to produce output to fill the requested
+ output size plus a specfied excess amount (see the EXCESS define
+ below). The last deflate block may go quite a bit past that, but
+ is discarded. The second pass decompresses and recompresses just
+ the compressed data that fit in the requested plus excess sized
+ buffer. The deflate process is terminated after that amount of
+ input, which is less than the amount consumed on the first pass.
+ The last deflate block of the result will be of a comparable size
+ to the final product, so that the header for that deflate block and
+ the compression ratio for that block will be about the same as in
+ the final product. The third compression pass decompresses the
+ result of the second step, but only the compressed data up to the
+ requested size minus an amount to allow the compressed stream to
+ complete (see the MARGIN define below). That will result in a
+ final compressed stream whose length is less than or equal to the
+ requested size. Assuming sufficient input and a requested size
+ greater than a few hundred bytes, the shortfall will typically be
+ less than ten bytes.
+
+ If the input is short enough that the first compression completes
+ before filling the requested output size, then that compressed
+ stream is return with no recompression.
+
+ EXCESS is chosen to be just greater than the shortfall seen in a
+ two pass approach similar to the above. That shortfall is due to
+ the last deflate block compressing more efficiently with a smaller
+ header on the second pass. EXCESS is set to be large enough so
+ that there is enough uncompressed data for the second pass to fill
+ out the requested size, and small enough so that the final deflate
+ block of the second pass will be close in size to the final deflate
+ block of the third and final pass. MARGIN is chosen to be just
+ large enough to assure that the final compression has enough room
+ to complete in all cases.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "zlib.h"
+
+#define local static
+
+/* print nastygram and leave */
+local void quit(char *why)
+{
+ fprintf(stderr, "fitblk abort: %s\n", why);
+ exit(1);
+}
+
+#define RAWLEN 4096 /* intermediate uncompressed buffer size */
+
+/* compress from file to def until provided buffer is full or end of
+ input reached; return last deflate() return value, or Z_ERRNO if
+ there was read error on the file */
+local int partcompress(FILE *in, z_streamp def)
+{
+ int ret, flush;
+ unsigned char raw[RAWLEN];
+
+ flush = Z_NO_FLUSH;
+ do {
+ def->avail_in = fread(raw, 1, RAWLEN, in);
+ if (ferror(in))
+ return Z_ERRNO;
+ def->next_in = raw;
+ if (feof(in))
+ flush = Z_FINISH;
+ ret = deflate(def, flush);
+ assert(ret != Z_STREAM_ERROR);
+ } while (def->avail_out != 0 && flush == Z_NO_FLUSH);
+ return ret;
+}
+
+/* recompress from inf's input to def's output; the input for inf and
+ the output for def are set in those structures before calling;
+ return last deflate() return value, or Z_MEM_ERROR if inflate()
+ was not able to allocate enough memory when it needed to */
+local int recompress(z_streamp inf, z_streamp def)
+{
+ int ret, flush;
+ unsigned char raw[RAWLEN];
+
+ flush = Z_NO_FLUSH;
+ do {
+ /* decompress */
+ inf->avail_out = RAWLEN;
+ inf->next_out = raw;
+ ret = inflate(inf, Z_NO_FLUSH);
+ assert(ret != Z_STREAM_ERROR && ret != Z_DATA_ERROR &&
+ ret != Z_NEED_DICT);
+ if (ret == Z_MEM_ERROR)
+ return ret;
+
+ /* compress what was decompresed until done or no room */
+ def->avail_in = RAWLEN - inf->avail_out;
+ def->next_in = raw;
+ if (inf->avail_out != 0)
+ flush = Z_FINISH;
+ ret = deflate(def, flush);
+ assert(ret != Z_STREAM_ERROR);
+ } while (ret != Z_STREAM_END && def->avail_out != 0);
+ return ret;
+}
+
+#define EXCESS 256 /* empirically determined stream overage */
+#define MARGIN 8 /* amount to back off for completion */
+
+/* compress from stdin to fixed-size block on stdout */
+int main(int argc, char **argv)
+{
+ int ret; /* return code */
+ unsigned size; /* requested fixed output block size */
+ unsigned have; /* bytes written by deflate() call */
+ unsigned char *blk; /* intermediate and final stream */
+ unsigned char *tmp; /* close to desired size stream */
+ z_stream def, inf; /* zlib deflate and inflate states */
+
+ /* get requested output size */
+ if (argc != 2)
+ quit("need one argument: size of output block");
+ ret = strtol(argv[1], argv + 1, 10);
+ if (argv[1][0] != 0)
+ quit("argument must be a number");
+ if (ret < 8) /* 8 is minimum zlib stream size */
+ quit("need positive size of 8 or greater");
+ size = (unsigned)ret;
+
+ /* allocate memory for buffers and compression engine */
+ blk = malloc(size + EXCESS);
+ def.zalloc = Z_NULL;
+ def.zfree = Z_NULL;
+ def.opaque = Z_NULL;
+ ret = deflateInit(&def, Z_DEFAULT_COMPRESSION);
+ if (ret != Z_OK || blk == NULL)
+ quit("out of memory");
+
+ /* compress from stdin until output full, or no more input */
+ def.avail_out = size + EXCESS;
+ def.next_out = blk;
+ ret = partcompress(stdin, &def);
+ if (ret == Z_ERRNO)
+ quit("error reading input");
+
+ /* if it all fit, then size was undersubscribed -- done! */
+ if (ret == Z_STREAM_END && def.avail_out >= EXCESS) {
+ /* write block to stdout */
+ have = size + EXCESS - def.avail_out;
+ if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))
+ quit("error writing output");
+
+ /* clean up and print results to stderr */
+ ret = deflateEnd(&def);
+ assert(ret != Z_STREAM_ERROR);
+ free(blk);
+ fprintf(stderr,
+ "%u bytes unused out of %u requested (all input)\n",
+ size - have, size);
+ return 0;
+ }
+
+ /* it didn't all fit -- set up for recompression */
+ inf.zalloc = Z_NULL;
+ inf.zfree = Z_NULL;
+ inf.opaque = Z_NULL;
+ inf.avail_in = 0;
+ inf.next_in = Z_NULL;
+ ret = inflateInit(&inf);
+ tmp = malloc(size + EXCESS);
+ if (ret != Z_OK || tmp == NULL)
+ quit("out of memory");
+ ret = deflateReset(&def);
+ assert(ret != Z_STREAM_ERROR);
+
+ /* do first recompression close to the right amount */
+ inf.avail_in = size + EXCESS;
+ inf.next_in = blk;
+ def.avail_out = size + EXCESS;
+ def.next_out = tmp;
+ ret = recompress(&inf, &def);
+ if (ret == Z_MEM_ERROR)
+ quit("out of memory");
+
+ /* set up for next reocmpression */
+ ret = inflateReset(&inf);
+ assert(ret != Z_STREAM_ERROR);
+ ret = deflateReset(&def);
+ assert(ret != Z_STREAM_ERROR);
+
+ /* do second and final recompression (third compression) */
+ inf.avail_in = size - MARGIN; /* assure stream will complete */
+ inf.next_in = tmp;
+ def.avail_out = size;
+ def.next_out = blk;
+ ret = recompress(&inf, &def);
+ if (ret == Z_MEM_ERROR)
+ quit("out of memory");
+ assert(ret == Z_STREAM_END); /* otherwise MARGIN too small */
+
+ /* done -- write block to stdout */
+ have = size - def.avail_out;
+ if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))
+ quit("error writing output");
+
+ /* clean up and print results to stderr */
+ free(tmp);
+ ret = inflateEnd(&inf);
+ assert(ret != Z_STREAM_ERROR);
+ ret = deflateEnd(&def);
+ assert(ret != Z_STREAM_ERROR);
+ free(blk);
+ fprintf(stderr,
+ "%u bytes unused out of %u requested (%lu input)\n",
+ size - have, size, def.total_in);
+ return 0;
+}
--- /dev/null
+/* gun.c -- simple gunzip to give an example of the use of inflateBack()
+ * Copyright (C) 2003, 2005 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ Version 1.3 12 June 2005 Mark Adler */
+
+/* Version history:
+ 1.0 16 Feb 2003 First version for testing of inflateBack()
+ 1.1 21 Feb 2005 Decompress concatenated gzip streams
+ Remove use of "this" variable (C++ keyword)
+ Fix return value for in()
+ Improve allocation failure checking
+ Add typecasting for void * structures
+ Add -h option for command version and usage
+ Add a bunch of comments
+ 1.2 20 Mar 2005 Add Unix compress (LZW) decompression
+ Copy file attributes from input file to output file
+ 1.3 12 Jun 2005 Add casts for error messages [Oberhumer]
+ */
+
+/*
+ gun [ -t ] [ name ... ]
+
+ decompresses the data in the named gzip files. If no arguments are given,
+ gun will decompress from stdin to stdout. The names must end in .gz, -gz,
+ .z, -z, _z, or .Z. The uncompressed data will be written to a file name
+ with the suffix stripped. On success, the original file is deleted. On
+ failure, the output file is deleted. For most failures, the command will
+ continue to process the remaining names on the command line. A memory
+ allocation failure will abort the command. If -t is specified, then the
+ listed files or stdin will be tested as gzip files for integrity (without
+ checking for a proper suffix), no output will be written, and no files
+ will be deleted.
+
+ Like gzip, gun allows concatenated gzip streams and will decompress them,
+ writing all of the uncompressed data to the output. Unlike gzip, gun allows
+ an empty file on input, and will produce no error writing an empty output
+ file.
+
+ gun will also decompress files made by Unix compress, which uses LZW
+ compression. These files are automatically detected by virtue of their
+ magic header bytes. Since the end of Unix compress stream is marked by the
+ end-of-file, they cannot be concantenated. If a Unix compress stream is
+ encountered in an input file, it is the last stream in that file.
+
+ Like gunzip and uncompress, the file attributes of the orignal compressed
+ file are maintained in the final uncompressed file, to the extent that the
+ user permissions allow it.
+
+ On my Mac OS X PowerPC G4, gun is almost twice as fast as gunzip (version
+ 1.2.4) is on the same file, when gun is linked with zlib 1.2.2. Also the
+ LZW decompression provided by gun is about twice as fast as the standard
+ Unix uncompress command.
+ */
+
+/* external functions and related types and constants */
+#include <stdio.h> /* fprintf() */
+#include <stdlib.h> /* malloc(), free() */
+#include <string.h> /* strerror(), strcmp(), strlen(), memcpy() */
+#include <errno.h> /* errno */
+#include <fcntl.h> /* open() */
+#include <unistd.h> /* read(), write(), close(), chown(), unlink() */
+#include <sys/types.h>
+#include <sys/stat.h> /* stat(), chmod() */
+#include <utime.h> /* utime() */
+#include "zlib.h" /* inflateBackInit(), inflateBack(), */
+ /* inflateBackEnd(), crc32() */
+
+/* function declaration */
+#define local static
+
+/* buffer constants */
+#define SIZE 32768U /* input and output buffer sizes */
+#define PIECE 16384 /* limits i/o chunks for 16-bit int case */
+
+/* structure for infback() to pass to input function in() -- it maintains the
+ input file and a buffer of size SIZE */
+struct ind {
+ int infile;
+ unsigned char *inbuf;
+};
+
+/* Load input buffer, assumed to be empty, and return bytes loaded and a
+ pointer to them. read() is called until the buffer is full, or until it
+ returns end-of-file or error. Return 0 on error. */
+local unsigned in(void *in_desc, unsigned char **buf)
+{
+ int ret;
+ unsigned len;
+ unsigned char *next;
+ struct ind *me = (struct ind *)in_desc;
+
+ next = me->inbuf;
+ *buf = next;
+ len = 0;
+ do {
+ ret = PIECE;
+ if ((unsigned)ret > SIZE - len)
+ ret = (int)(SIZE - len);
+ ret = (int)read(me->infile, next, ret);
+ if (ret == -1) {
+ len = 0;
+ break;
+ }
+ next += ret;
+ len += ret;
+ } while (ret != 0 && len < SIZE);
+ return len;
+}
+
+/* structure for infback() to pass to output function out() -- it maintains the
+ output file, a running CRC-32 check on the output and the total number of
+ bytes output, both for checking against the gzip trailer. (The length in
+ the gzip trailer is stored modulo 2^32, so it's ok if a long is 32 bits and
+ the output is greater than 4 GB.) */
+struct outd {
+ int outfile;
+ int check; /* true if checking crc and total */
+ unsigned long crc;
+ unsigned long total;
+};
+
+/* Write output buffer and update the CRC-32 and total bytes written. write()
+ is called until all of the output is written or an error is encountered.
+ On success out() returns 0. For a write failure, out() returns 1. If the
+ output file descriptor is -1, then nothing is written.
+ */
+local int out(void *out_desc, unsigned char *buf, unsigned len)
+{
+ int ret;
+ struct outd *me = (struct outd *)out_desc;
+
+ if (me->check) {
+ me->crc = crc32(me->crc, buf, len);
+ me->total += len;
+ }
+ if (me->outfile != -1)
+ do {
+ ret = PIECE;
+ if ((unsigned)ret > len)
+ ret = (int)len;
+ ret = (int)write(me->outfile, buf, ret);
+ if (ret == -1)
+ return 1;
+ buf += ret;
+ len -= ret;
+ } while (len != 0);
+ return 0;
+}
+
+/* next input byte macro for use inside lunpipe() and gunpipe() */
+#define NEXT() (have ? 0 : (have = in(indp, &next)), \
+ last = have ? (have--, (int)(*next++)) : -1)
+
+/* memory for gunpipe() and lunpipe() --
+ the first 256 entries of prefix[] and suffix[] are never used, could
+ have offset the index, but it's faster to waste the memory */
+unsigned char inbuf[SIZE]; /* input buffer */
+unsigned char outbuf[SIZE]; /* output buffer */
+unsigned short prefix[65536]; /* index to LZW prefix string */
+unsigned char suffix[65536]; /* one-character LZW suffix */
+unsigned char match[65280 + 2]; /* buffer for reversed match or gzip
+ 32K sliding window */
+
+/* throw out what's left in the current bits byte buffer (this is a vestigial
+ aspect of the compressed data format derived from an implementation that
+ made use of a special VAX machine instruction!) */
+#define FLUSHCODE() \
+ do { \
+ left = 0; \
+ rem = 0; \
+ if (chunk > have) { \
+ chunk -= have; \
+ have = 0; \
+ if (NEXT() == -1) \
+ break; \
+ chunk--; \
+ if (chunk > have) { \
+ chunk = have = 0; \
+ break; \
+ } \
+ } \
+ have -= chunk; \
+ next += chunk; \
+ chunk = 0; \
+ } while (0)
+
+/* Decompress a compress (LZW) file from indp to outfile. The compress magic
+ header (two bytes) has already been read and verified. There are have bytes
+ of buffered input at next. strm is used for passing error information back
+ to gunpipe().
+
+ lunpipe() will return Z_OK on success, Z_BUF_ERROR for an unexpected end of
+ file, read error, or write error (a write error indicated by strm->next_in
+ not equal to Z_NULL), or Z_DATA_ERROR for invalid input.
+ */
+local int lunpipe(unsigned have, unsigned char *next, struct ind *indp,
+ int outfile, z_stream *strm)
+{
+ int last; /* last byte read by NEXT(), or -1 if EOF */
+ int chunk; /* bytes left in current chunk */
+ int left; /* bits left in rem */
+ unsigned rem; /* unused bits from input */
+ int bits; /* current bits per code */
+ unsigned code; /* code, table traversal index */
+ unsigned mask; /* mask for current bits codes */
+ int max; /* maximum bits per code for this stream */
+ int flags; /* compress flags, then block compress flag */
+ unsigned end; /* last valid entry in prefix/suffix tables */
+ unsigned temp; /* current code */
+ unsigned prev; /* previous code */
+ unsigned final; /* last character written for previous code */
+ unsigned stack; /* next position for reversed string */
+ unsigned outcnt; /* bytes in output buffer */
+ struct outd outd; /* output structure */
+
+ /* set up output */
+ outd.outfile = outfile;
+ outd.check = 0;
+
+ /* process remainder of compress header -- a flags byte */
+ flags = NEXT();
+ if (last == -1)
+ return Z_BUF_ERROR;
+ if (flags & 0x60) {
+ strm->msg = (char *)"unknown lzw flags set";
+ return Z_DATA_ERROR;
+ }
+ max = flags & 0x1f;
+ if (max < 9 || max > 16) {
+ strm->msg = (char *)"lzw bits out of range";
+ return Z_DATA_ERROR;
+ }
+ if (max == 9) /* 9 doesn't really mean 9 */
+ max = 10;
+ flags &= 0x80; /* true if block compress */
+
+ /* clear table */
+ bits = 9;
+ mask = 0x1ff;
+ end = flags ? 256 : 255;
+
+ /* set up: get first 9-bit code, which is the first decompressed byte, but
+ don't create a table entry until the next code */
+ if (NEXT() == -1) /* no compressed data is ok */
+ return Z_OK;
+ final = prev = (unsigned)last; /* low 8 bits of code */
+ if (NEXT() == -1) /* missing a bit */
+ return Z_BUF_ERROR;
+ if (last & 1) { /* code must be < 256 */
+ strm->msg = (char *)"invalid lzw code";
+ return Z_DATA_ERROR;
+ }
+ rem = (unsigned)last >> 1; /* remaining 7 bits */
+ left = 7;
+ chunk = bits - 2; /* 7 bytes left in this chunk */
+ outbuf[0] = (unsigned char)final; /* write first decompressed byte */
+ outcnt = 1;
+
+ /* decode codes */
+ stack = 0;
+ for (;;) {
+ /* if the table will be full after this, increment the code size */
+ if (end >= mask && bits < max) {
+ FLUSHCODE();
+ bits++;
+ mask <<= 1;
+ mask++;
+ }
+
+ /* get a code of length bits */
+ if (chunk == 0) /* decrement chunk modulo bits */
+ chunk = bits;
+ code = rem; /* low bits of code */
+ if (NEXT() == -1) { /* EOF is end of compressed data */
+ /* write remaining buffered output */
+ if (outcnt && out(&outd, outbuf, outcnt)) {
+ strm->next_in = outbuf; /* signal write error */
+ return Z_BUF_ERROR;
+ }
+ return Z_OK;
+ }
+ code += (unsigned)last << left; /* middle (or high) bits of code */
+ left += 8;
+ chunk--;
+ if (bits > left) { /* need more bits */
+ if (NEXT() == -1) /* can't end in middle of code */
+ return Z_BUF_ERROR;
+ code += (unsigned)last << left; /* high bits of code */
+ left += 8;
+ chunk--;
+ }
+ code &= mask; /* mask to current code length */
+ left -= bits; /* number of unused bits */
+ rem = (unsigned)last >> (8 - left); /* unused bits from last byte */
+
+ /* process clear code (256) */
+ if (code == 256 && flags) {
+ FLUSHCODE();
+ bits = 9; /* initialize bits and mask */
+ mask = 0x1ff;
+ end = 255; /* empty table */
+ continue; /* get next code */
+ }
+
+ /* special code to reuse last match */
+ temp = code; /* save the current code */
+ if (code > end) {
+ /* Be picky on the allowed code here, and make sure that the code
+ we drop through (prev) will be a valid index so that random
+ input does not cause an exception. The code != end + 1 check is
+ empirically derived, and not checked in the original uncompress
+ code. If this ever causes a problem, that check could be safely
+ removed. Leaving this check in greatly improves gun's ability
+ to detect random or corrupted input after a compress header.
+ In any case, the prev > end check must be retained. */
+ if (code != end + 1 || prev > end) {
+ strm->msg = (char *)"invalid lzw code";
+ return Z_DATA_ERROR;
+ }
+ match[stack++] = (unsigned char)final;
+ code = prev;
+ }
+
+ /* walk through linked list to generate output in reverse order */
+ while (code >= 256) {
+ match[stack++] = suffix[code];
+ code = prefix[code];
+ }
+ match[stack++] = (unsigned char)code;
+ final = code;
+
+ /* link new table entry */
+ if (end < mask) {
+ end++;
+ prefix[end] = (unsigned short)prev;
+ suffix[end] = (unsigned char)final;
+ }
+
+ /* set previous code for next iteration */
+ prev = temp;
+
+ /* write output in forward order */
+ while (stack > SIZE - outcnt) {
+ while (outcnt < SIZE)
+ outbuf[outcnt++] = match[--stack];
+ if (out(&outd, outbuf, outcnt)) {
+ strm->next_in = outbuf; /* signal write error */
+ return Z_BUF_ERROR;
+ }
+ outcnt = 0;
+ }
+ do {
+ outbuf[outcnt++] = match[--stack];
+ } while (stack);
+
+ /* loop for next code with final and prev as the last match, rem and
+ left provide the first 0..7 bits of the next code, end is the last
+ valid table entry */
+ }
+}
+
+/* Decompress a gzip file from infile to outfile. strm is assumed to have been
+ successfully initialized with inflateBackInit(). The input file may consist
+ of a series of gzip streams, in which case all of them will be decompressed
+ to the output file. If outfile is -1, then the gzip stream(s) integrity is
+ checked and nothing is written.
+
+ The return value is a zlib error code: Z_MEM_ERROR if out of memory,
+ Z_DATA_ERROR if the header or the compressed data is invalid, or if the
+ trailer CRC-32 check or length doesn't match, Z_BUF_ERROR if the input ends
+ prematurely or a write error occurs, or Z_ERRNO if junk (not a another gzip
+ stream) follows a valid gzip stream.
+ */
+local int gunpipe(z_stream *strm, int infile, int outfile)
+{
+ int ret, first, last;
+ unsigned have, flags, len;
+ unsigned char *next;
+ struct ind ind, *indp;
+ struct outd outd;
+
+ /* setup input buffer */
+ ind.infile = infile;
+ ind.inbuf = inbuf;
+ indp = &ind;
+
+ /* decompress concatenated gzip streams */
+ have = 0; /* no input data read in yet */
+ first = 1; /* looking for first gzip header */
+ strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */
+ for (;;) {
+ /* look for the two magic header bytes for a gzip stream */
+ if (NEXT() == -1) {
+ ret = Z_OK;
+ break; /* empty gzip stream is ok */
+ }
+ if (last != 31 || (NEXT() != 139 && last != 157)) {
+ strm->msg = (char *)"incorrect header check";
+ ret = first ? Z_DATA_ERROR : Z_ERRNO;
+ break; /* not a gzip or compress header */
+ }
+ first = 0; /* next non-header is junk */
+
+ /* process a compress (LZW) file -- can't be concatenated after this */
+ if (last == 157) {
+ ret = lunpipe(have, next, indp, outfile, strm);
+ break;
+ }
+
+ /* process remainder of gzip header */
+ ret = Z_BUF_ERROR;
+ if (NEXT() != 8) { /* only deflate method allowed */
+ if (last == -1) break;
+ strm->msg = (char *)"unknown compression method";
+ ret = Z_DATA_ERROR;
+ break;
+ }
+ flags = NEXT(); /* header flags */
+ NEXT(); /* discard mod time, xflgs, os */
+ NEXT();
+ NEXT();
+ NEXT();
+ NEXT();
+ NEXT();
+ if (last == -1) break;
+ if (flags & 0xe0) {
+ strm->msg = (char *)"unknown header flags set";
+ ret = Z_DATA_ERROR;
+ break;
+ }
+ if (flags & 4) { /* extra field */
+ len = NEXT();
+ len += (unsigned)(NEXT()) << 8;
+ if (last == -1) break;
+ while (len > have) {
+ len -= have;
+ have = 0;
+ if (NEXT() == -1) break;
+ len--;
+ }
+ if (last == -1) break;
+ have -= len;
+ next += len;
+ }
+ if (flags & 8) /* file name */
+ while (NEXT() != 0 && last != -1)
+ ;
+ if (flags & 16) /* comment */
+ while (NEXT() != 0 && last != -1)
+ ;
+ if (flags & 2) { /* header crc */
+ NEXT();
+ NEXT();
+ }
+ if (last == -1) break;
+
+ /* set up output */
+ outd.outfile = outfile;
+ outd.check = 1;
+ outd.crc = crc32(0L, Z_NULL, 0);
+ outd.total = 0;
+
+ /* decompress data to output */
+ strm->next_in = next;
+ strm->avail_in = have;
+ ret = inflateBack(strm, in, indp, out, &outd);
+ if (ret != Z_STREAM_END) break;
+ next = strm->next_in;
+ have = strm->avail_in;
+ strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */
+
+ /* check trailer */
+ ret = Z_BUF_ERROR;
+ if (NEXT() != (outd.crc & 0xff) ||
+ NEXT() != ((outd.crc >> 8) & 0xff) ||
+ NEXT() != ((outd.crc >> 16) & 0xff) ||
+ NEXT() != ((outd.crc >> 24) & 0xff)) {
+ /* crc error */
+ if (last != -1) {
+ strm->msg = (char *)"incorrect data check";
+ ret = Z_DATA_ERROR;
+ }
+ break;
+ }
+ if (NEXT() != (outd.total & 0xff) ||
+ NEXT() != ((outd.total >> 8) & 0xff) ||
+ NEXT() != ((outd.total >> 16) & 0xff) ||
+ NEXT() != ((outd.total >> 24) & 0xff)) {
+ /* length error */
+ if (last != -1) {
+ strm->msg = (char *)"incorrect length check";
+ ret = Z_DATA_ERROR;
+ }
+ break;
+ }
+
+ /* go back and look for another gzip stream */
+ }
+
+ /* clean up and return */
+ return ret;
+}
+
+/* Copy file attributes, from -> to, as best we can. This is best effort, so
+ no errors are reported. The mode bits, including suid, sgid, and the sticky
+ bit are copied (if allowed), the owner's user id and group id are copied
+ (again if allowed), and the access and modify times are copied. */
+local void copymeta(char *from, char *to)
+{
+ struct stat was;
+ struct utimbuf when;
+
+ /* get all of from's Unix meta data, return if not a regular file */
+ if (stat(from, &was) != 0 || (was.st_mode & S_IFMT) != S_IFREG)
+ return;
+
+ /* set to's mode bits, ignore errors */
+ (void)chmod(to, was.st_mode & 07777);
+
+ /* copy owner's user and group, ignore errors */
+ (void)chown(to, was.st_uid, was.st_gid);
+
+ /* copy access and modify times, ignore errors */
+ when.actime = was.st_atime;
+ when.modtime = was.st_mtime;
+ (void)utime(to, &when);
+}
+
+/* Decompress the file inname to the file outnname, of if test is true, just
+ decompress without writing and check the gzip trailer for integrity. If
+ inname is NULL or an empty string, read from stdin. If outname is NULL or
+ an empty string, write to stdout. strm is a pre-initialized inflateBack
+ structure. When appropriate, copy the file attributes from inname to
+ outname.
+
+ gunzip() returns 1 if there is an out-of-memory error or an unexpected
+ return code from gunpipe(). Otherwise it returns 0.
+ */
+local int gunzip(z_stream *strm, char *inname, char *outname, int test)
+{
+ int ret;
+ int infile, outfile;
+
+ /* open files */
+ if (inname == NULL || *inname == 0) {
+ inname = "-";
+ infile = 0; /* stdin */
+ }
+ else {
+ infile = open(inname, O_RDONLY, 0);
+ if (infile == -1) {
+ fprintf(stderr, "gun cannot open %s\n", inname);
+ return 0;
+ }
+ }
+ if (test)
+ outfile = -1;
+ else if (outname == NULL || *outname == 0) {
+ outname = "-";
+ outfile = 1; /* stdout */
+ }
+ else {
+ outfile = open(outname, O_CREAT | O_TRUNC | O_WRONLY, 0666);
+ if (outfile == -1) {
+ close(infile);
+ fprintf(stderr, "gun cannot create %s\n", outname);
+ return 0;
+ }
+ }
+ errno = 0;
+
+ /* decompress */
+ ret = gunpipe(strm, infile, outfile);
+ if (outfile > 2) close(outfile);
+ if (infile > 2) close(infile);
+
+ /* interpret result */
+ switch (ret) {
+ case Z_OK:
+ case Z_ERRNO:
+ if (infile > 2 && outfile > 2) {
+ copymeta(inname, outname); /* copy attributes */
+ unlink(inname);
+ }
+ if (ret == Z_ERRNO)
+ fprintf(stderr, "gun warning: trailing garbage ignored in %s\n",
+ inname);
+ break;
+ case Z_DATA_ERROR:
+ if (outfile > 2) unlink(outname);
+ fprintf(stderr, "gun data error on %s: %s\n", inname, strm->msg);
+ break;
+ case Z_MEM_ERROR:
+ if (outfile > 2) unlink(outname);
+ fprintf(stderr, "gun out of memory error--aborting\n");
+ return 1;
+ case Z_BUF_ERROR:
+ if (outfile > 2) unlink(outname);
+ if (strm->next_in != Z_NULL) {
+ fprintf(stderr, "gun write error on %s: %s\n",
+ outname, strerror(errno));
+ }
+ else if (errno) {
+ fprintf(stderr, "gun read error on %s: %s\n",
+ inname, strerror(errno));
+ }
+ else {
+ fprintf(stderr, "gun unexpected end of file on %s\n",
+ inname);
+ }
+ break;
+ default:
+ if (outfile > 2) unlink(outname);
+ fprintf(stderr, "gun internal error--aborting\n");
+ return 1;
+ }
+ return 0;
+}
+
+/* Process the gun command line arguments. See the command syntax near the
+ beginning of this source file. */
+int main(int argc, char **argv)
+{
+ int ret, len, test;
+ char *outname;
+ unsigned char *window;
+ z_stream strm;
+
+ /* initialize inflateBack state for repeated use */
+ window = match; /* reuse LZW match buffer */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ ret = inflateBackInit(&strm, 15, window);
+ if (ret != Z_OK) {
+ fprintf(stderr, "gun out of memory error--aborting\n");
+ return 1;
+ }
+
+ /* decompress each file to the same name with the suffix removed */
+ argc--;
+ argv++;
+ test = 0;
+ if (argc && strcmp(*argv, "-h") == 0) {
+ fprintf(stderr, "gun 1.3 (12 Jun 2005)\n");
+ fprintf(stderr, "Copyright (c) 2005 Mark Adler\n");
+ fprintf(stderr, "usage: gun [-t] [file1.gz [file2.Z ...]]\n");
+ return 0;
+ }
+ if (argc && strcmp(*argv, "-t") == 0) {
+ test = 1;
+ argc--;
+ argv++;
+ }
+ if (argc)
+ do {
+ if (test)
+ outname = NULL;
+ else {
+ len = (int)strlen(*argv);
+ if (strcmp(*argv + len - 3, ".gz") == 0 ||
+ strcmp(*argv + len - 3, "-gz") == 0)
+ len -= 3;
+ else if (strcmp(*argv + len - 2, ".z") == 0 ||
+ strcmp(*argv + len - 2, "-z") == 0 ||
+ strcmp(*argv + len - 2, "_z") == 0 ||
+ strcmp(*argv + len - 2, ".Z") == 0)
+ len -= 2;
+ else {
+ fprintf(stderr, "gun error: no gz type on %s--skipping\n",
+ *argv);
+ continue;
+ }
+ outname = malloc(len + 1);
+ if (outname == NULL) {
+ fprintf(stderr, "gun out of memory error--aborting\n");
+ ret = 1;
+ break;
+ }
+ memcpy(outname, *argv, len);
+ outname[len] = 0;
+ }
+ ret = gunzip(&strm, *argv, outname, test);
+ if (outname != NULL) free(outname);
+ if (ret) break;
+ } while (argv++, --argc);
+ else
+ ret = gunzip(&strm, NULL, NULL, test);
+
+ /* clean up */
+ inflateBackEnd(&strm);
+ return ret;
+}
--- /dev/null
+/* gzappend -- command to append to a gzip file
+
+ Copyright (C) 2003 Mark Adler, all rights reserved
+ version 1.1, 4 Nov 2003
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the author be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Mark Adler madler@alumni.caltech.edu
+ */
+
+/*
+ * Change history:
+ *
+ * 1.0 19 Oct 2003 - First version
+ * 1.1 4 Nov 2003 - Expand and clarify some comments and notes
+ * - Add version and copyright to help
+ * - Send help to stdout instead of stderr
+ * - Add some preemptive typecasts
+ * - Add L to constants in lseek() calls
+ * - Remove some debugging information in error messages
+ * - Use new data_type definition for zlib 1.2.1
+ * - Simplfy and unify file operations
+ * - Finish off gzip file in gztack()
+ * - Use deflatePrime() instead of adding empty blocks
+ * - Keep gzip file clean on appended file read errors
+ * - Use in-place rotate instead of auxiliary buffer
+ * (Why you ask? Because it was fun to write!)
+ */
+
+/*
+ gzappend takes a gzip file and appends to it, compressing files from the
+ command line or data from stdin. The gzip file is written to directly, to
+ avoid copying that file, in case it's large. Note that this results in the
+ unfriendly behavior that if gzappend fails, the gzip file is corrupted.
+
+ This program was written to illustrate the use of the new Z_BLOCK option of
+ zlib 1.2.x's inflate() function. This option returns from inflate() at each
+ block boundary to facilitate locating and modifying the last block bit at
+ the start of the final deflate block. Also whether using Z_BLOCK or not,
+ another required feature of zlib 1.2.x is that inflate() now provides the
+ number of unusued bits in the last input byte used. gzappend will not work
+ with versions of zlib earlier than 1.2.1.
+
+ gzappend first decompresses the gzip file internally, discarding all but
+ the last 32K of uncompressed data, and noting the location of the last block
+ bit and the number of unused bits in the last byte of the compressed data.
+ The gzip trailer containing the CRC-32 and length of the uncompressed data
+ is verified. This trailer will be later overwritten.
+
+ Then the last block bit is cleared by seeking back in the file and rewriting
+ the byte that contains it. Seeking forward, the last byte of the compressed
+ data is saved along with the number of unused bits to initialize deflate.
+
+ A deflate process is initialized, using the last 32K of the uncompressed
+ data from the gzip file to initialize the dictionary. If the total
+ uncompressed data was less than 32K, then all of it is used to initialize
+ the dictionary. The deflate output bit buffer is also initialized with the
+ last bits from the original deflate stream. From here on, the data to
+ append is simply compressed using deflate, and written to the gzip file.
+ When that is complete, the new CRC-32 and uncompressed length are written
+ as the trailer of the gzip file.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "zlib.h"
+
+#define local static
+#define LGCHUNK 14
+#define CHUNK (1U << LGCHUNK)
+#define DSIZE 32768U
+
+/* print an error message and terminate with extreme prejudice */
+local void bye(char *msg1, char *msg2)
+{
+ fprintf(stderr, "gzappend error: %s%s\n", msg1, msg2);
+ exit(1);
+}
+
+/* return the greatest common divisor of a and b using Euclid's algorithm,
+ modified to be fast when one argument much greater than the other, and
+ coded to avoid unnecessary swapping */
+local unsigned gcd(unsigned a, unsigned b)
+{
+ unsigned c;
+
+ while (a && b)
+ if (a > b) {
+ c = b;
+ while (a - c >= c)
+ c <<= 1;
+ a -= c;
+ }
+ else {
+ c = a;
+ while (b - c >= c)
+ c <<= 1;
+ b -= c;
+ }
+ return a + b;
+}
+
+/* rotate list[0..len-1] left by rot positions, in place */
+local void rotate(unsigned char *list, unsigned len, unsigned rot)
+{
+ unsigned char tmp;
+ unsigned cycles;
+ unsigned char *start, *last, *to, *from;
+
+ /* normalize rot and handle degenerate cases */
+ if (len < 2) return;
+ if (rot >= len) rot %= len;
+ if (rot == 0) return;
+
+ /* pointer to last entry in list */
+ last = list + (len - 1);
+
+ /* do simple left shift by one */
+ if (rot == 1) {
+ tmp = *list;
+ memcpy(list, list + 1, len - 1);
+ *last = tmp;
+ return;
+ }
+
+ /* do simple right shift by one */
+ if (rot == len - 1) {
+ tmp = *last;
+ memmove(list + 1, list, len - 1);
+ *list = tmp;
+ return;
+ }
+
+ /* otherwise do rotate as a set of cycles in place */
+ cycles = gcd(len, rot); /* number of cycles */
+ do {
+ start = from = list + cycles; /* start index is arbitrary */
+ tmp = *from; /* save entry to be overwritten */
+ for (;;) {
+ to = from; /* next step in cycle */
+ from += rot; /* go right rot positions */
+ if (from > last) from -= len; /* (pointer better not wrap) */
+ if (from == start) break; /* all but one shifted */
+ *to = *from; /* shift left */
+ }
+ *to = tmp; /* complete the circle */
+ } while (--cycles);
+}
+
+/* structure for gzip file read operations */
+typedef struct {
+ int fd; /* file descriptor */
+ int size; /* 1 << size is bytes in buf */
+ unsigned left; /* bytes available at next */
+ unsigned char *buf; /* buffer */
+ unsigned char *next; /* next byte in buffer */
+ char *name; /* file name for error messages */
+} file;
+
+/* reload buffer */
+local int readin(file *in)
+{
+ int len;
+
+ len = read(in->fd, in->buf, 1 << in->size);
+ if (len == -1) bye("error reading ", in->name);
+ in->left = (unsigned)len;
+ in->next = in->buf;
+ return len;
+}
+
+/* read from file in, exit if end-of-file */
+local int readmore(file *in)
+{
+ if (readin(in) == 0) bye("unexpected end of ", in->name);
+ return 0;
+}
+
+#define read1(in) (in->left == 0 ? readmore(in) : 0, \
+ in->left--, *(in->next)++)
+
+/* skip over n bytes of in */
+local void skip(file *in, unsigned n)
+{
+ unsigned bypass;
+
+ if (n > in->left) {
+ n -= in->left;
+ bypass = n & ~((1U << in->size) - 1);
+ if (bypass) {
+ if (lseek(in->fd, (off_t)bypass, SEEK_CUR) == -1)
+ bye("seeking ", in->name);
+ n -= bypass;
+ }
+ readmore(in);
+ if (n > in->left)
+ bye("unexpected end of ", in->name);
+ }
+ in->left -= n;
+ in->next += n;
+}
+
+/* read a four-byte unsigned integer, little-endian, from in */
+unsigned long read4(file *in)
+{
+ unsigned long val;
+
+ val = read1(in);
+ val += (unsigned)read1(in) << 8;
+ val += (unsigned long)read1(in) << 16;
+ val += (unsigned long)read1(in) << 24;
+ return val;
+}
+
+/* skip over gzip header */
+local void gzheader(file *in)
+{
+ int flags;
+ unsigned n;
+
+ if (read1(in) != 31 || read1(in) != 139) bye(in->name, " not a gzip file");
+ if (read1(in) != 8) bye("unknown compression method in", in->name);
+ flags = read1(in);
+ if (flags & 0xe0) bye("unknown header flags set in", in->name);
+ skip(in, 6);
+ if (flags & 4) {
+ n = read1(in);
+ n += (unsigned)(read1(in)) << 8;
+ skip(in, n);
+ }
+ if (flags & 8) while (read1(in) != 0) ;
+ if (flags & 16) while (read1(in) != 0) ;
+ if (flags & 2) skip(in, 2);
+}
+
+/* decompress gzip file "name", return strm with a deflate stream ready to
+ continue compression of the data in the gzip file, and return a file
+ descriptor pointing to where to write the compressed data -- the deflate
+ stream is initialized to compress using level "level" */
+local int gzscan(char *name, z_stream *strm, int level)
+{
+ int ret, lastbit, left, full;
+ unsigned have;
+ unsigned long crc, tot;
+ unsigned char *window;
+ off_t lastoff, end;
+ file gz;
+
+ /* open gzip file */
+ gz.name = name;
+ gz.fd = open(name, O_RDWR, 0);
+ if (gz.fd == -1) bye("cannot open ", name);
+ gz.buf = malloc(CHUNK);
+ if (gz.buf == NULL) bye("out of memory", "");
+ gz.size = LGCHUNK;
+ gz.left = 0;
+
+ /* skip gzip header */
+ gzheader(&gz);
+
+ /* prepare to decompress */
+ window = malloc(DSIZE);
+ if (window == NULL) bye("out of memory", "");
+ strm->zalloc = Z_NULL;
+ strm->zfree = Z_NULL;
+ strm->opaque = Z_NULL;
+ ret = inflateInit2(strm, -15);
+ if (ret != Z_OK) bye("out of memory", " or library mismatch");
+
+ /* decompress the deflate stream, saving append information */
+ lastbit = 0;
+ lastoff = lseek(gz.fd, 0L, SEEK_CUR) - gz.left;
+ left = 0;
+ strm->avail_in = gz.left;
+ strm->next_in = gz.next;
+ crc = crc32(0L, Z_NULL, 0);
+ have = full = 0;
+ do {
+ /* if needed, get more input */
+ if (strm->avail_in == 0) {
+ readmore(&gz);
+ strm->avail_in = gz.left;
+ strm->next_in = gz.next;
+ }
+
+ /* set up output to next available section of sliding window */
+ strm->avail_out = DSIZE - have;
+ strm->next_out = window + have;
+
+ /* inflate and check for errors */
+ ret = inflate(strm, Z_BLOCK);
+ if (ret == Z_STREAM_ERROR) bye("internal stream error!", "");
+ if (ret == Z_MEM_ERROR) bye("out of memory", "");
+ if (ret == Z_DATA_ERROR)
+ bye("invalid compressed data--format violated in", name);
+
+ /* update crc and sliding window pointer */
+ crc = crc32(crc, window + have, DSIZE - have - strm->avail_out);
+ if (strm->avail_out)
+ have = DSIZE - strm->avail_out;
+ else {
+ have = 0;
+ full = 1;
+ }
+
+ /* process end of block */
+ if (strm->data_type & 128) {
+ if (strm->data_type & 64)
+ left = strm->data_type & 0x1f;
+ else {
+ lastbit = strm->data_type & 0x1f;
+ lastoff = lseek(gz.fd, 0L, SEEK_CUR) - strm->avail_in;
+ }
+ }
+ } while (ret != Z_STREAM_END);
+ inflateEnd(strm);
+ gz.left = strm->avail_in;
+ gz.next = strm->next_in;
+
+ /* save the location of the end of the compressed data */
+ end = lseek(gz.fd, 0L, SEEK_CUR) - gz.left;
+
+ /* check gzip trailer and save total for deflate */
+ if (crc != read4(&gz))
+ bye("invalid compressed data--crc mismatch in ", name);
+ tot = strm->total_out;
+ if ((tot & 0xffffffffUL) != read4(&gz))
+ bye("invalid compressed data--length mismatch in", name);
+
+ /* if not at end of file, warn */
+ if (gz.left || readin(&gz))
+ fprintf(stderr,
+ "gzappend warning: junk at end of gzip file overwritten\n");
+
+ /* clear last block bit */
+ lseek(gz.fd, lastoff - (lastbit != 0), SEEK_SET);
+ if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name);
+ *gz.buf = (unsigned char)(*gz.buf ^ (1 << ((8 - lastbit) & 7)));
+ lseek(gz.fd, -1L, SEEK_CUR);
+ if (write(gz.fd, gz.buf, 1) != 1) bye("writing after seek to ", name);
+
+ /* if window wrapped, build dictionary from window by rotating */
+ if (full) {
+ rotate(window, DSIZE, have);
+ have = DSIZE;
+ }
+
+ /* set up deflate stream with window, crc, total_in, and leftover bits */
+ ret = deflateInit2(strm, level, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY);
+ if (ret != Z_OK) bye("out of memory", "");
+ deflateSetDictionary(strm, window, have);
+ strm->adler = crc;
+ strm->total_in = tot;
+ if (left) {
+ lseek(gz.fd, --end, SEEK_SET);
+ if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name);
+ deflatePrime(strm, 8 - left, *gz.buf);
+ }
+ lseek(gz.fd, end, SEEK_SET);
+
+ /* clean up and return */
+ free(window);
+ free(gz.buf);
+ return gz.fd;
+}
+
+/* append file "name" to gzip file gd using deflate stream strm -- if last
+ is true, then finish off the deflate stream at the end */
+local void gztack(char *name, int gd, z_stream *strm, int last)
+{
+ int fd, len, ret;
+ unsigned left;
+ unsigned char *in, *out;
+
+ /* open file to compress and append */
+ fd = 0;
+ if (name != NULL) {
+ fd = open(name, O_RDONLY, 0);
+ if (fd == -1)
+ fprintf(stderr, "gzappend warning: %s not found, skipping ...\n",
+ name);
+ }
+
+ /* allocate buffers */
+ in = fd == -1 ? NULL : malloc(CHUNK);
+ out = malloc(CHUNK);
+ if (out == NULL) bye("out of memory", "");
+
+ /* compress input file and append to gzip file */
+ do {
+ /* get more input */
+ len = fd == -1 ? 0 : read(fd, in, CHUNK);
+ if (len == -1) {
+ fprintf(stderr,
+ "gzappend warning: error reading %s, skipping rest ...\n",
+ name);
+ len = 0;
+ }
+ strm->avail_in = (unsigned)len;
+ strm->next_in = in;
+ if (len) strm->adler = crc32(strm->adler, in, (unsigned)len);
+
+ /* compress and write all available output */
+ do {
+ strm->avail_out = CHUNK;
+ strm->next_out = out;
+ ret = deflate(strm, last && len == 0 ? Z_FINISH : Z_NO_FLUSH);
+ left = CHUNK - strm->avail_out;
+ while (left) {
+ len = write(gd, out + CHUNK - strm->avail_out - left, left);
+ if (len == -1) bye("writing gzip file", "");
+ left -= (unsigned)len;
+ }
+ } while (strm->avail_out == 0 && ret != Z_STREAM_END);
+ } while (len != 0);
+
+ /* write trailer after last entry */
+ if (last) {
+ deflateEnd(strm);
+ out[0] = (unsigned char)(strm->adler);
+ out[1] = (unsigned char)(strm->adler >> 8);
+ out[2] = (unsigned char)(strm->adler >> 16);
+ out[3] = (unsigned char)(strm->adler >> 24);
+ out[4] = (unsigned char)(strm->total_in);
+ out[5] = (unsigned char)(strm->total_in >> 8);
+ out[6] = (unsigned char)(strm->total_in >> 16);
+ out[7] = (unsigned char)(strm->total_in >> 24);
+ len = 8;
+ do {
+ ret = write(gd, out + 8 - len, len);
+ if (ret == -1) bye("writing gzip file", "");
+ len -= ret;
+ } while (len);
+ close(gd);
+ }
+
+ /* clean up and return */
+ free(out);
+ if (in != NULL) free(in);
+ if (fd > 0) close(fd);
+}
+
+/* process the compression level option if present, scan the gzip file, and
+ append the specified files, or append the data from stdin if no other file
+ names are provided on the command line -- the gzip file must be writable
+ and seekable */
+int main(int argc, char **argv)
+{
+ int gd, level;
+ z_stream strm;
+
+ /* ignore command name */
+ argv++;
+
+ /* provide usage if no arguments */
+ if (*argv == NULL) {
+ printf("gzappend 1.1 (4 Nov 2003) Copyright (C) 2003 Mark Adler\n");
+ printf(
+ "usage: gzappend [-level] file.gz [ addthis [ andthis ... ]]\n");
+ return 0;
+ }
+
+ /* set compression level */
+ level = Z_DEFAULT_COMPRESSION;
+ if (argv[0][0] == '-') {
+ if (argv[0][1] < '0' || argv[0][1] > '9' || argv[0][2] != 0)
+ bye("invalid compression level", "");
+ level = argv[0][1] - '0';
+ if (*++argv == NULL) bye("no gzip file name after options", "");
+ }
+
+ /* prepare to append to gzip file */
+ gd = gzscan(*argv++, &strm, level);
+
+ /* append files on command line, or from stdin if none */
+ if (*argv == NULL)
+ gztack(NULL, gd, &strm, 1);
+ else
+ do {
+ gztack(*argv, gd, &strm, argv[1] == NULL);
+ } while (*++argv != NULL);
+ return 0;
+}
--- /dev/null
+/* gzjoin -- command to join gzip files into one gzip file
+
+ Copyright (C) 2004 Mark Adler, all rights reserved
+ version 1.0, 11 Dec 2004
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the author be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Mark Adler madler@alumni.caltech.edu
+ */
+
+/*
+ * Change history:
+ *
+ * 1.0 11 Dec 2004 - First version
+ * 1.1 12 Jun 2005 - Changed ssize_t to long for portability
+ */
+
+/*
+ gzjoin takes one or more gzip files on the command line and writes out a
+ single gzip file that will uncompress to the concatenation of the
+ uncompressed data from the individual gzip files. gzjoin does this without
+ having to recompress any of the data and without having to calculate a new
+ crc32 for the concatenated uncompressed data. gzjoin does however have to
+ decompress all of the input data in order to find the bits in the compressed
+ data that need to be modified to concatenate the streams.
+
+ gzjoin does not do an integrity check on the input gzip files other than
+ checking the gzip header and decompressing the compressed data. They are
+ otherwise assumed to be complete and correct.
+
+ Each joint between gzip files removes at least 18 bytes of previous trailer
+ and subsequent header, and inserts an average of about three bytes to the
+ compressed data in order to connect the streams. The output gzip file
+ has a minimal ten-byte gzip header with no file name or modification time.
+
+ This program was written to illustrate the use of the Z_BLOCK option of
+ inflate() and the crc32_combine() function. gzjoin will not compile with
+ versions of zlib earlier than 1.2.3.
+ */
+
+#include <stdio.h> /* fputs(), fprintf(), fwrite(), putc() */
+#include <stdlib.h> /* exit(), malloc(), free() */
+#include <fcntl.h> /* open() */
+#include <unistd.h> /* close(), read(), lseek() */
+#include "zlib.h"
+ /* crc32(), crc32_combine(), inflateInit2(), inflate(), inflateEnd() */
+
+#define local static
+
+/* exit with an error (return a value to allow use in an expression) */
+local int bail(char *why1, char *why2)
+{
+ fprintf(stderr, "gzjoin error: %s%s, output incomplete\n", why1, why2);
+ exit(1);
+ return 0;
+}
+
+/* -- simple buffered file input with access to the buffer -- */
+
+#define CHUNK 32768 /* must be a power of two and fit in unsigned */
+
+/* bin buffered input file type */
+typedef struct {
+ char *name; /* name of file for error messages */
+ int fd; /* file descriptor */
+ unsigned left; /* bytes remaining at next */
+ unsigned char *next; /* next byte to read */
+ unsigned char *buf; /* allocated buffer of length CHUNK */
+} bin;
+
+/* close a buffered file and free allocated memory */
+local void bclose(bin *in)
+{
+ if (in != NULL) {
+ if (in->fd != -1)
+ close(in->fd);
+ if (in->buf != NULL)
+ free(in->buf);
+ free(in);
+ }
+}
+
+/* open a buffered file for input, return a pointer to type bin, or NULL on
+ failure */
+local bin *bopen(char *name)
+{
+ bin *in;
+
+ in = malloc(sizeof(bin));
+ if (in == NULL)
+ return NULL;
+ in->buf = malloc(CHUNK);
+ in->fd = open(name, O_RDONLY, 0);
+ if (in->buf == NULL || in->fd == -1) {
+ bclose(in);
+ return NULL;
+ }
+ in->left = 0;
+ in->next = in->buf;
+ in->name = name;
+ return in;
+}
+
+/* load buffer from file, return -1 on read error, 0 or 1 on success, with
+ 1 indicating that end-of-file was reached */
+local int bload(bin *in)
+{
+ long len;
+
+ if (in == NULL)
+ return -1;
+ if (in->left != 0)
+ return 0;
+ in->next = in->buf;
+ do {
+ len = (long)read(in->fd, in->buf + in->left, CHUNK - in->left);
+ if (len < 0)
+ return -1;
+ in->left += (unsigned)len;
+ } while (len != 0 && in->left < CHUNK);
+ return len == 0 ? 1 : 0;
+}
+
+/* get a byte from the file, bail if end of file */
+#define bget(in) (in->left ? 0 : bload(in), \
+ in->left ? (in->left--, *(in->next)++) : \
+ bail("unexpected end of file on ", in->name))
+
+/* get a four-byte little-endian unsigned integer from file */
+local unsigned long bget4(bin *in)
+{
+ unsigned long val;
+
+ val = bget(in);
+ val += (unsigned long)(bget(in)) << 8;
+ val += (unsigned long)(bget(in)) << 16;
+ val += (unsigned long)(bget(in)) << 24;
+ return val;
+}
+
+/* skip bytes in file */
+local void bskip(bin *in, unsigned skip)
+{
+ /* check pointer */
+ if (in == NULL)
+ return;
+
+ /* easy case -- skip bytes in buffer */
+ if (skip <= in->left) {
+ in->left -= skip;
+ in->next += skip;
+ return;
+ }
+
+ /* skip what's in buffer, discard buffer contents */
+ skip -= in->left;
+ in->left = 0;
+
+ /* seek past multiples of CHUNK bytes */
+ if (skip > CHUNK) {
+ unsigned left;
+
+ left = skip & (CHUNK - 1);
+ if (left == 0) {
+ /* exact number of chunks: seek all the way minus one byte to check
+ for end-of-file with a read */
+ lseek(in->fd, skip - 1, SEEK_CUR);
+ if (read(in->fd, in->buf, 1) != 1)
+ bail("unexpected end of file on ", in->name);
+ return;
+ }
+
+ /* skip the integral chunks, update skip with remainder */
+ lseek(in->fd, skip - left, SEEK_CUR);
+ skip = left;
+ }
+
+ /* read more input and skip remainder */
+ bload(in);
+ if (skip > in->left)
+ bail("unexpected end of file on ", in->name);
+ in->left -= skip;
+ in->next += skip;
+}
+
+/* -- end of buffered input functions -- */
+
+/* skip the gzip header from file in */
+local void gzhead(bin *in)
+{
+ int flags;
+
+ /* verify gzip magic header and compression method */
+ if (bget(in) != 0x1f || bget(in) != 0x8b || bget(in) != 8)
+ bail(in->name, " is not a valid gzip file");
+
+ /* get and verify flags */
+ flags = bget(in);
+ if ((flags & 0xe0) != 0)
+ bail("unknown reserved bits set in ", in->name);
+
+ /* skip modification time, extra flags, and os */
+ bskip(in, 6);
+
+ /* skip extra field if present */
+ if (flags & 4) {
+ unsigned len;
+
+ len = bget(in);
+ len += (unsigned)(bget(in)) << 8;
+ bskip(in, len);
+ }
+
+ /* skip file name if present */
+ if (flags & 8)
+ while (bget(in) != 0)
+ ;
+
+ /* skip comment if present */
+ if (flags & 16)
+ while (bget(in) != 0)
+ ;
+
+ /* skip header crc if present */
+ if (flags & 2)
+ bskip(in, 2);
+}
+
+/* write a four-byte little-endian unsigned integer to out */
+local void put4(unsigned long val, FILE *out)
+{
+ putc(val & 0xff, out);
+ putc((val >> 8) & 0xff, out);
+ putc((val >> 16) & 0xff, out);
+ putc((val >> 24) & 0xff, out);
+}
+
+/* Load up zlib stream from buffered input, bail if end of file */
+local void zpull(z_streamp strm, bin *in)
+{
+ if (in->left == 0)
+ bload(in);
+ if (in->left == 0)
+ bail("unexpected end of file on ", in->name);
+ strm->avail_in = in->left;
+ strm->next_in = in->next;
+}
+
+/* Write header for gzip file to out and initialize trailer. */
+local void gzinit(unsigned long *crc, unsigned long *tot, FILE *out)
+{
+ fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out);
+ *crc = crc32(0L, Z_NULL, 0);
+ *tot = 0;
+}
+
+/* Copy the compressed data from name, zeroing the last block bit of the last
+ block if clr is true, and adding empty blocks as needed to get to a byte
+ boundary. If clr is false, then the last block becomes the last block of
+ the output, and the gzip trailer is written. crc and tot maintains the
+ crc and length (modulo 2^32) of the output for the trailer. The resulting
+ gzip file is written to out. gzinit() must be called before the first call
+ of gzcopy() to write the gzip header and to initialize crc and tot. */
+local void gzcopy(char *name, int clr, unsigned long *crc, unsigned long *tot,
+ FILE *out)
+{
+ int ret; /* return value from zlib functions */
+ int pos; /* where the "last block" bit is in byte */
+ int last; /* true if processing the last block */
+ bin *in; /* buffered input file */
+ unsigned char *start; /* start of compressed data in buffer */
+ unsigned char *junk; /* buffer for uncompressed data -- discarded */
+ z_off_t len; /* length of uncompressed data (support > 4 GB) */
+ z_stream strm; /* zlib inflate stream */
+
+ /* open gzip file and skip header */
+ in = bopen(name);
+ if (in == NULL)
+ bail("could not open ", name);
+ gzhead(in);
+
+ /* allocate buffer for uncompressed data and initialize raw inflate
+ stream */
+ junk = malloc(CHUNK);
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit2(&strm, -15);
+ if (junk == NULL || ret != Z_OK)
+ bail("out of memory", "");
+
+ /* inflate and copy compressed data, clear last-block bit if requested */
+ len = 0;
+ zpull(&strm, in);
+ start = strm.next_in;
+ last = start[0] & 1;
+ if (last && clr)
+ start[0] &= ~1;
+ strm.avail_out = 0;
+ for (;;) {
+ /* if input used and output done, write used input and get more */
+ if (strm.avail_in == 0 && strm.avail_out != 0) {
+ fwrite(start, 1, strm.next_in - start, out);
+ start = in->buf;
+ in->left = 0;
+ zpull(&strm, in);
+ }
+
+ /* decompress -- return early when end-of-block reached */
+ strm.avail_out = CHUNK;
+ strm.next_out = junk;
+ ret = inflate(&strm, Z_BLOCK);
+ switch (ret) {
+ case Z_MEM_ERROR:
+ bail("out of memory", "");
+ case Z_DATA_ERROR:
+ bail("invalid compressed data in ", in->name);
+ }
+
+ /* update length of uncompressed data */
+ len += CHUNK - strm.avail_out;
+
+ /* check for block boundary (only get this when block copied out) */
+ if (strm.data_type & 128) {
+ /* if that was the last block, then done */
+ if (last)
+ break;
+
+ /* number of unused bits in last byte */
+ pos = strm.data_type & 7;
+
+ /* find the next last-block bit */
+ if (pos != 0) {
+ /* next last-block bit is in last used byte */
+ pos = 0x100 >> pos;
+ last = strm.next_in[-1] & pos;
+ if (last && clr)
+ strm.next_in[-1] &= ~pos;
+ }
+ else {
+ /* next last-block bit is in next unused byte */
+ if (strm.avail_in == 0) {
+ /* don't have that byte yet -- get it */
+ fwrite(start, 1, strm.next_in - start, out);
+ start = in->buf;
+ in->left = 0;
+ zpull(&strm, in);
+ }
+ last = strm.next_in[0] & 1;
+ if (last && clr)
+ strm.next_in[0] &= ~1;
+ }
+ }
+ }
+
+ /* update buffer with unused input */
+ in->left = strm.avail_in;
+ in->next = strm.next_in;
+
+ /* copy used input, write empty blocks to get to byte boundary */
+ pos = strm.data_type & 7;
+ fwrite(start, 1, in->next - start - 1, out);
+ last = in->next[-1];
+ if (pos == 0 || !clr)
+ /* already at byte boundary, or last file: write last byte */
+ putc(last, out);
+ else {
+ /* append empty blocks to last byte */
+ last &= ((0x100 >> pos) - 1); /* assure unused bits are zero */
+ if (pos & 1) {
+ /* odd -- append an empty stored block */
+ putc(last, out);
+ if (pos == 1)
+ putc(0, out); /* two more bits in block header */
+ fwrite("\0\0\xff\xff", 1, 4, out);
+ }
+ else {
+ /* even -- append 1, 2, or 3 empty fixed blocks */
+ switch (pos) {
+ case 6:
+ putc(last | 8, out);
+ last = 0;
+ case 4:
+ putc(last | 0x20, out);
+ last = 0;
+ case 2:
+ putc(last | 0x80, out);
+ putc(0, out);
+ }
+ }
+ }
+
+ /* update crc and tot */
+ *crc = crc32_combine(*crc, bget4(in), len);
+ *tot += (unsigned long)len;
+
+ /* clean up */
+ inflateEnd(&strm);
+ free(junk);
+ bclose(in);
+
+ /* write trailer if this is the last gzip file */
+ if (!clr) {
+ put4(*crc, out);
+ put4(*tot, out);
+ }
+}
+
+/* join the gzip files on the command line, write result to stdout */
+int main(int argc, char **argv)
+{
+ unsigned long crc, tot; /* running crc and total uncompressed length */
+
+ /* skip command name */
+ argc--;
+ argv++;
+
+ /* show usage if no arguments */
+ if (argc == 0) {
+ fputs("gzjoin usage: gzjoin f1.gz [f2.gz [f3.gz ...]] > fjoin.gz\n",
+ stderr);
+ return 0;
+ }
+
+ /* join gzip files on command line and write to stdout */
+ gzinit(&crc, &tot, stdout);
+ while (argc--)
+ gzcopy(*argv++, argc, &crc, &tot, stdout);
+
+ /* done */
+ return 0;
+}
--- /dev/null
+/*
+ * gzlog.c
+ * Copyright (C) 2004 Mark Adler
+ * For conditions of distribution and use, see copyright notice in gzlog.h
+ * version 1.0, 26 Nov 2004
+ *
+ */
+
+#include <string.h> /* memcmp() */
+#include <stdlib.h> /* malloc(), free(), NULL */
+#include <sys/types.h> /* size_t, off_t */
+#include <unistd.h> /* read(), close(), sleep(), ftruncate(), */
+ /* lseek() */
+#include <fcntl.h> /* open() */
+#include <sys/file.h> /* flock() */
+#include "zlib.h" /* deflateInit2(), deflate(), deflateEnd() */
+
+#include "gzlog.h" /* interface */
+#define local static
+
+/* log object structure */
+typedef struct {
+ int id; /* object identifier */
+ int fd; /* log file descriptor */
+ off_t extra; /* offset of extra "ap" subfield */
+ off_t mark_off; /* offset of marked data */
+ off_t last_off; /* offset of last block */
+ unsigned long crc; /* uncompressed crc */
+ unsigned long len; /* uncompressed length (modulo 2^32) */
+ unsigned stored; /* length of current stored block */
+} gz_log;
+
+#define GZLOGID 19334 /* gz_log object identifier */
+
+#define LOCK_RETRY 1 /* retry lock once a second */
+#define LOCK_PATIENCE 1200 /* try about twenty minutes before forcing */
+
+/* acquire a lock on a file */
+local int lock(int fd)
+{
+ int patience;
+
+ /* try to lock every LOCK_RETRY seconds for LOCK_PATIENCE seconds */
+ patience = LOCK_PATIENCE;
+ do {
+ if (flock(fd, LOCK_EX + LOCK_NB) == 0)
+ return 0;
+ (void)sleep(LOCK_RETRY);
+ patience -= LOCK_RETRY;
+ } while (patience > 0);
+
+ /* we've run out of patience -- give up */
+ return -1;
+}
+
+/* release lock */
+local void unlock(int fd)
+{
+ (void)flock(fd, LOCK_UN);
+}
+
+/* release a log object */
+local void log_clean(gz_log *log)
+{
+ unlock(log->fd);
+ (void)close(log->fd);
+ free(log);
+}
+
+/* read an unsigned long from a byte buffer little-endian */
+local unsigned long make_ulg(unsigned char *buf)
+{
+ int n;
+ unsigned long val;
+
+ val = (unsigned long)(*buf++);
+ for (n = 8; n < 32; n += 8)
+ val += (unsigned long)(*buf++) << n;
+ return val;
+}
+
+/* read an off_t from a byte buffer little-endian */
+local off_t make_off(unsigned char *buf)
+{
+ int n;
+ off_t val;
+
+ val = (off_t)(*buf++);
+ for (n = 8; n < 64; n += 8)
+ val += (off_t)(*buf++) << n;
+ return val;
+}
+
+/* write an unsigned long little-endian to byte buffer */
+local void dice_ulg(unsigned long val, unsigned char *buf)
+{
+ int n;
+
+ for (n = 0; n < 4; n++) {
+ *buf++ = val & 0xff;
+ val >>= 8;
+ }
+}
+
+/* write an off_t little-endian to byte buffer */
+local void dice_off(off_t val, unsigned char *buf)
+{
+ int n;
+
+ for (n = 0; n < 8; n++) {
+ *buf++ = val & 0xff;
+ val >>= 8;
+ }
+}
+
+/* initial, empty gzip file for appending */
+local char empty_gz[] = {
+ 0x1f, 0x8b, /* magic gzip id */
+ 8, /* compression method is deflate */
+ 4, /* there is an extra field */
+ 0, 0, 0, 0, /* no modification time provided */
+ 0, 0xff, /* no extra flags, no OS */
+ 20, 0, 'a', 'p', 16, 0, /* extra field with "ap" subfield */
+ 32, 0, 0, 0, 0, 0, 0, 0, /* offset of uncompressed data */
+ 32, 0, 0, 0, 0, 0, 0, 0, /* offset of last block */
+ 1, 0, 0, 0xff, 0xff, /* empty stored block (last) */
+ 0, 0, 0, 0, /* crc */
+ 0, 0, 0, 0 /* uncompressed length */
+};
+
+/* initialize a log object with locking */
+void *gzlog_open(char *path)
+{
+ unsigned xlen;
+ unsigned char temp[20];
+ unsigned sub_len;
+ int good;
+ gz_log *log;
+
+ /* allocate log structure */
+ log = malloc(sizeof(gz_log));
+ if (log == NULL)
+ return NULL;
+ log->id = GZLOGID;
+
+ /* open file, creating it if necessary, and locking it */
+ log->fd = open(path, O_RDWR | O_CREAT, 0600);
+ if (log->fd < 0) {
+ free(log);
+ return NULL;
+ }
+ if (lock(log->fd)) {
+ close(log->fd);
+ free(log);
+ return NULL;
+ }
+
+ /* if file is empty, write new gzip stream */
+ if (lseek(log->fd, 0, SEEK_END) == 0) {
+ if (write(log->fd, empty_gz, sizeof(empty_gz)) != sizeof(empty_gz)) {
+ log_clean(log);
+ return NULL;
+ }
+ }
+
+ /* check gzip header */
+ (void)lseek(log->fd, 0, SEEK_SET);
+ if (read(log->fd, temp, 12) != 12 || temp[0] != 0x1f ||
+ temp[1] != 0x8b || temp[2] != 8 || (temp[3] & 4) == 0) {
+ log_clean(log);
+ return NULL;
+ }
+
+ /* process extra field to find "ap" sub-field */
+ xlen = temp[10] + (temp[11] << 8);
+ good = 0;
+ while (xlen) {
+ if (xlen < 4 || read(log->fd, temp, 4) != 4)
+ break;
+ sub_len = temp[2];
+ sub_len += temp[3] << 8;
+ xlen -= 4;
+ if (memcmp(temp, "ap", 2) == 0 && sub_len == 16) {
+ good = 1;
+ break;
+ }
+ if (xlen < sub_len)
+ break;
+ (void)lseek(log->fd, sub_len, SEEK_CUR);
+ xlen -= sub_len;
+ }
+ if (!good) {
+ log_clean(log);
+ return NULL;
+ }
+
+ /* read in "ap" sub-field */
+ log->extra = lseek(log->fd, 0, SEEK_CUR);
+ if (read(log->fd, temp, 16) != 16) {
+ log_clean(log);
+ return NULL;
+ }
+ log->mark_off = make_off(temp);
+ log->last_off = make_off(temp + 8);
+
+ /* get crc, length of gzip file */
+ (void)lseek(log->fd, log->last_off, SEEK_SET);
+ if (read(log->fd, temp, 13) != 13 ||
+ memcmp(temp, "\001\000\000\377\377", 5) != 0) {
+ log_clean(log);
+ return NULL;
+ }
+ log->crc = make_ulg(temp + 5);
+ log->len = make_ulg(temp + 9);
+
+ /* set up to write over empty last block */
+ (void)lseek(log->fd, log->last_off + 5, SEEK_SET);
+ log->stored = 0;
+ return (void *)log;
+}
+
+/* maximum amount to put in a stored block before starting a new one */
+#define MAX_BLOCK 16384
+
+/* write a block to a log object */
+int gzlog_write(void *obj, char *data, size_t len)
+{
+ size_t some;
+ unsigned char temp[5];
+ gz_log *log;
+
+ /* check object */
+ log = (gz_log *)obj;
+ if (log == NULL || log->id != GZLOGID)
+ return 1;
+
+ /* write stored blocks until all of the input is written */
+ do {
+ some = MAX_BLOCK - log->stored;
+ if (some > len)
+ some = len;
+ if (write(log->fd, data, some) != some)
+ return 1;
+ log->crc = crc32(log->crc, data, some);
+ log->len += some;
+ len -= some;
+ data += some;
+ log->stored += some;
+
+ /* if the stored block is full, end it and start another */
+ if (log->stored == MAX_BLOCK) {
+ (void)lseek(log->fd, log->last_off, SEEK_SET);
+ temp[0] = 0;
+ dice_ulg(log->stored + ((unsigned long)(~log->stored) << 16),
+ temp + 1);
+ if (write(log->fd, temp, 5) != 5)
+ return 1;
+ log->last_off = lseek(log->fd, log->stored, SEEK_CUR);
+ (void)lseek(log->fd, 5, SEEK_CUR);
+ log->stored = 0;
+ }
+ } while (len);
+ return 0;
+}
+
+/* recompress the remaining stored deflate data in place */
+local int recomp(gz_log *log)
+{
+ z_stream strm;
+ size_t len, max;
+ unsigned char *in;
+ unsigned char *out;
+ unsigned char temp[16];
+
+ /* allocate space and read it all in (it's around 1 MB) */
+ len = log->last_off - log->mark_off;
+ max = len + (len >> 12) + (len >> 14) + 11;
+ out = malloc(max);
+ if (out == NULL)
+ return 1;
+ in = malloc(len);
+ if (in == NULL) {
+ free(out);
+ return 1;
+ }
+ (void)lseek(log->fd, log->mark_off, SEEK_SET);
+ if (read(log->fd, in, len) != len) {
+ free(in);
+ free(out);
+ return 1;
+ }
+
+ /* recompress in memory, decoding stored data as we go */
+ /* note: this assumes that unsigned is four bytes or more */
+ /* consider not making that assumption */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ if (deflateInit2(&strm, Z_BEST_COMPRESSION, Z_DEFLATED, -15, 8,
+ Z_DEFAULT_STRATEGY) != Z_OK) {
+ free(in);
+ free(out);
+ return 1;
+ }
+ strm.next_in = in;
+ strm.avail_out = max;
+ strm.next_out = out;
+ while (len >= 5) {
+ if (strm.next_in[0] != 0)
+ break;
+ strm.avail_in = strm.next_in[1] + (strm.next_in[2] << 8);
+ strm.next_in += 5;
+ len -= 5;
+ if (strm.avail_in != 0) {
+ if (len < strm.avail_in)
+ break;
+ len -= strm.avail_in;
+ (void)deflate(&strm, Z_NO_FLUSH);
+ if (strm.avail_in != 0 || strm.avail_out == 0)
+ break;
+ }
+ }
+ (void)deflate(&strm, Z_SYNC_FLUSH);
+ (void)deflateEnd(&strm);
+ free(in);
+ if (len != 0 || strm.avail_out == 0) {
+ free(out);
+ return 1;
+ }
+
+ /* overwrite stored data with compressed data */
+ (void)lseek(log->fd, log->mark_off, SEEK_SET);
+ len = max - strm.avail_out;
+ if (write(log->fd, out, len) != len) {
+ free(out);
+ return 1;
+ }
+ free(out);
+
+ /* write last empty block, crc, and length */
+ log->mark_off = log->last_off = lseek(log->fd, 0, SEEK_CUR);
+ temp[0] = 1;
+ dice_ulg(0xffffL << 16, temp + 1);
+ dice_ulg(log->crc, temp + 5);
+ dice_ulg(log->len, temp + 9);
+ if (write(log->fd, temp, 13) != 13)
+ return 1;
+
+ /* truncate file to discard remaining stored data and old trailer */
+ ftruncate(log->fd, lseek(log->fd, 0, SEEK_CUR));
+
+ /* update extra field to point to new last empty block */
+ (void)lseek(log->fd, log->extra, SEEK_SET);
+ dice_off(log->mark_off, temp);
+ dice_off(log->last_off, temp + 8);
+ if (write(log->fd, temp, 16) != 16)
+ return 1;
+ return 0;
+}
+
+/* maximum accumulation of stored blocks before compressing */
+#define MAX_STORED 1048576
+
+/* close log object */
+int gzlog_close(void *obj)
+{
+ unsigned char temp[8];
+ gz_log *log;
+
+ /* check object */
+ log = (gz_log *)obj;
+ if (log == NULL || log->id != GZLOGID)
+ return 1;
+
+ /* go to start of most recent block being written */
+ (void)lseek(log->fd, log->last_off, SEEK_SET);
+
+ /* if some stuff was put there, update block */
+ if (log->stored) {
+ temp[0] = 0;
+ dice_ulg(log->stored + ((unsigned long)(~log->stored) << 16),
+ temp + 1);
+ if (write(log->fd, temp, 5) != 5)
+ return 1;
+ log->last_off = lseek(log->fd, log->stored, SEEK_CUR);
+ }
+
+ /* write last block (empty) */
+ if (write(log->fd, "\001\000\000\377\377", 5) != 5)
+ return 1;
+
+ /* write updated crc and uncompressed length */
+ dice_ulg(log->crc, temp);
+ dice_ulg(log->len, temp + 4);
+ if (write(log->fd, temp, 8) != 8)
+ return 1;
+
+ /* put offset of that last block in gzip extra block */
+ (void)lseek(log->fd, log->extra + 8, SEEK_SET);
+ dice_off(log->last_off, temp);
+ if (write(log->fd, temp, 8) != 8)
+ return 1;
+
+ /* if more than 1 MB stored, then time to compress it */
+ if (log->last_off - log->mark_off > MAX_STORED) {
+ if (recomp(log))
+ return 1;
+ }
+
+ /* unlock and close file */
+ log_clean(log);
+ return 0;
+}
--- /dev/null
+/* gzlog.h
+ Copyright (C) 2004 Mark Adler, all rights reserved
+ version 1.0, 26 Nov 2004
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the author be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Mark Adler madler@alumni.caltech.edu
+ */
+
+/*
+ The gzlog object allows writing short messages to a gzipped log file,
+ opening the log file locked for small bursts, and then closing it. The log
+ object works by appending stored data to the gzip file until 1 MB has been
+ accumulated. At that time, the stored data is compressed, and replaces the
+ uncompressed data in the file. The log file is truncated to its new size at
+ that time. After closing, the log file is always valid gzip file that can
+ decompressed to recover what was written.
+
+ A gzip header "extra" field contains two file offsets for appending. The
+ first points to just after the last compressed data. The second points to
+ the last stored block in the deflate stream, which is empty. All of the
+ data between those pointers is uncompressed.
+ */
+
+/* Open a gzlog object, creating the log file if it does not exist. Return
+ NULL on error. Note that gzlog_open() could take a long time to return if
+ there is difficulty in locking the file. */
+void *gzlog_open(char *path);
+
+/* Write to a gzlog object. Return non-zero on error. This function will
+ simply write data to the file uncompressed. Compression of the data
+ will not occur until gzlog_close() is called. It is expected that
+ gzlog_write() is used for a short message, and then gzlog_close() is
+ called. If a large amount of data is to be written, then the application
+ should write no more than 1 MB at a time with gzlog_write() before
+ calling gzlog_close() and then gzlog_open() again. */
+int gzlog_write(void *log, char *data, size_t len);
+
+/* Close a gzlog object. Return non-zero on error. The log file is locked
+ until this function is called. This function will compress stored data
+ at the end of the gzip file if at least 1 MB has been accumulated. Note
+ that the file will not be a valid gzip file until this function completes.
+ */
+int gzlog_close(void *log);
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+ "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>zlib Usage Example</title>
+<!-- Copyright (c) 2004 Mark Adler. -->
+</head>
+<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#00A000">
+<h2 align="center"> zlib Usage Example </h2>
+We often get questions about how the <tt>deflate()</tt> and <tt>inflate()</tt> functions should be used.
+Users wonder when they should provide more input, when they should use more output,
+what to do with a <tt>Z_BUF_ERROR</tt>, how to make sure the process terminates properly, and
+so on. So for those who have read <tt>zlib.h</tt> (a few times), and
+would like further edification, below is an annotated example in C of simple routines to compress and decompress
+from an input file to an output file using <tt>deflate()</tt> and <tt>inflate()</tt> respectively. The
+annotations are interspersed between lines of the code. So please read between the lines.
+We hope this helps explain some of the intricacies of <em>zlib</em>.
+<p>
+Without further adieu, here is the program <a href="zpipe.c"><tt>zpipe.c</tt></a>:
+<pre><b>
+/* zpipe.c: example of proper use of zlib's inflate() and deflate()
+ Not copyrighted -- provided to the public domain
+ Version 1.2 9 November 2004 Mark Adler */
+
+/* Version history:
+ 1.0 30 Oct 2004 First version
+ 1.1 8 Nov 2004 Add void casting for unused return values
+ Use switch statement for inflate() return values
+ 1.2 9 Nov 2004 Add assertions to document zlib guarantees
+ */
+</b></pre><!-- -->
+We now include the header files for the required definitions. From
+<tt>stdio.h</tt> we use <tt>fopen()</tt>, <tt>fread()</tt>, <tt>fwrite()</tt>,
+<tt>feof()</tt>, <tt>ferror()</tt>, and <tt>fclose()</tt> for file i/o, and
+<tt>fputs()</tt> for error messages. From <tt>string.h</tt> we use
+<tt>strcmp()</tt> for command line argument processing.
+From <tt>assert.h</tt> we use the <tt>assert()</tt> macro.
+From <tt>zlib.h</tt>
+we use the basic compression functions <tt>deflateInit()</tt>,
+<tt>deflate()</tt>, and <tt>deflateEnd()</tt>, and the basic decompression
+functions <tt>inflateInit()</tt>, <tt>inflate()</tt>, and
+<tt>inflateEnd()</tt>.
+<pre><b>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include "zlib.h"
+</b></pre><!-- -->
+<tt>CHUNK</tt> is simply the buffer size for feeding data to and pulling data
+from the <em>zlib</em> routines. Larger buffer sizes would be more efficient,
+especially for <tt>inflate()</tt>. If the memory is available, buffers sizes
+on the order of 128K or 256K bytes should be used.
+<pre><b>
+#define CHUNK 16384
+</b></pre><!-- -->
+The <tt>def()</tt> routine compresses data from an input file to an output file. The output data
+will be in the <em>zlib</em> format, which is different from the <em>gzip</em> or <em>zip</em>
+formats. The <em>zlib</em> format has a very small header of only two bytes to identify it as
+a <em>zlib</em> stream and to provide decoding information, and a four-byte trailer with a fast
+check value to verify the integrity of the uncompressed data after decoding.
+<pre><b>
+/* Compress from file source to file dest until EOF on source.
+ def() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+ allocated for processing, Z_STREAM_ERROR if an invalid compression
+ level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
+ version of the library linked do not match, or Z_ERRNO if there is
+ an error reading or writing the files. */
+int def(FILE *source, FILE *dest, int level)
+{
+</b></pre>
+Here are the local variables for <tt>def()</tt>. <tt>ret</tt> will be used for <em>zlib</em>
+return codes. <tt>flush</tt> will keep track of the current flushing state for <tt>deflate()</tt>,
+which is either no flushing, or flush to completion after the end of the input file is reached.
+<tt>have</tt> is the amount of data returned from <tt>deflate()</tt>. The <tt>strm</tt> structure
+is used to pass information to and from the <em>zlib</em> routines, and to maintain the
+<tt>deflate()</tt> state. <tt>in</tt> and <tt>out</tt> are the input and output buffers for
+<tt>deflate()</tt>.
+<pre><b>
+ int ret, flush;
+ unsigned have;
+ z_stream strm;
+ char in[CHUNK];
+ char out[CHUNK];
+</b></pre><!-- -->
+The first thing we do is to initialize the <em>zlib</em> state for compression using
+<tt>deflateInit()</tt>. This must be done before the first use of <tt>deflate()</tt>.
+The <tt>zalloc</tt>, <tt>zfree</tt>, and <tt>opaque</tt> fields in the <tt>strm</tt>
+structure must be initialized before calling <tt>deflateInit()</tt>. Here they are
+set to the <em>zlib</em> constant <tt>Z_NULL</tt> to request that <em>zlib</em> use
+the default memory allocation routines. An application may also choose to provide
+custom memory allocation routines here. <tt>deflateInit()</tt> will allocate on the
+order of 256K bytes for the internal state.
+(See <a href="zlib_tech.html"><em>zlib Technical Details</em></a>.)
+<p>
+<tt>deflateInit()</tt> is called with a pointer to the structure to be initialized and
+the compression level, which is an integer in the range of -1 to 9. Lower compression
+levels result in faster execution, but less compression. Higher levels result in
+greater compression, but slower execution. The <em>zlib</em> constant Z_DEFAULT_COMPRESSION,
+equal to -1,
+provides a good compromise between compression and speed and is equivalent to level 6.
+Level 0 actually does no compression at all, and in fact expands the data slightly to produce
+the <em>zlib</em> format (it is not a byte-for-byte copy of the input).
+More advanced applications of <em>zlib</em>
+may use <tt>deflateInit2()</tt> here instead. Such an application may want to reduce how
+much memory will be used, at some price in compression. Or it may need to request a
+<em>gzip</em> header and trailer instead of a <em>zlib</em> header and trailer, or raw
+encoding with no header or trailer at all.
+<p>
+We must check the return value of <tt>deflateInit()</tt> against the <em>zlib</em> constant
+<tt>Z_OK</tt> to make sure that it was able to
+allocate memory for the internal state, and that the provided arguments were valid.
+<tt>deflateInit()</tt> will also check that the version of <em>zlib</em> that the <tt>zlib.h</tt>
+file came from matches the version of <em>zlib</em> actually linked with the program. This
+is especially important for environments in which <em>zlib</em> is a shared library.
+<p>
+Note that an application can initialize multiple, independent <em>zlib</em> streams, which can
+operate in parallel. The state information maintained in the structure allows the <em>zlib</em>
+routines to be reentrant.
+<pre><b>
+ /* allocate deflate state */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ ret = deflateInit(&strm, level);
+ if (ret != Z_OK)
+ return ret;
+</b></pre><!-- -->
+With the pleasantries out of the way, now we can get down to business. The outer <tt>do</tt>-loop
+reads all of the input file and exits at the bottom of the loop once end-of-file is reached.
+This loop contains the only call of <tt>deflate()</tt>. So we must make sure that all of the
+input data has been processed and that all of the output data has been generated and consumed
+before we fall out of the loop at the bottom.
+<pre><b>
+ /* compress until end of file */
+ do {
+</b></pre>
+We start off by reading data from the input file. The number of bytes read is put directly
+into <tt>avail_in</tt>, and a pointer to those bytes is put into <tt>next_in</tt>. We also
+check to see if end-of-file on the input has been reached. If we are at the end of file, then <tt>flush</tt> is set to the
+<em>zlib</em> constant <tt>Z_FINISH</tt>, which is later passed to <tt>deflate()</tt> to
+indicate that this is the last chunk of input data to compress. We need to use <tt>feof()</tt>
+to check for end-of-file as opposed to seeing if fewer than <tt>CHUNK</tt> bytes have been read. The
+reason is that if the input file length is an exact multiple of <tt>CHUNK</tt>, we will miss
+the fact that we got to the end-of-file, and not know to tell <tt>deflate()</tt> to finish
+up the compressed stream. If we are not yet at the end of the input, then the <em>zlib</em>
+constant <tt>Z_NO_FLUSH</tt> will be passed to <tt>deflate</tt> to indicate that we are still
+in the middle of the uncompressed data.
+<p>
+If there is an error in reading from the input file, the process is aborted with
+<tt>deflateEnd()</tt> being called to free the allocated <em>zlib</em> state before returning
+the error. We wouldn't want a memory leak, now would we? <tt>deflateEnd()</tt> can be called
+at any time after the state has been initialized. Once that's done, <tt>deflateInit()</tt> (or
+<tt>deflateInit2()</tt>) would have to be called to start a new compression process. There is
+no point here in checking the <tt>deflateEnd()</tt> return code. The deallocation can't fail.
+<pre><b>
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)deflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
+ strm.next_in = in;
+</b></pre><!-- -->
+The inner <tt>do</tt>-loop passes our chunk of input data to <tt>deflate()</tt>, and then
+keeps calling <tt>deflate()</tt> until it is done producing output. Once there is no more
+new output, <tt>deflate()</tt> is guaranteed to have consumed all of the input, i.e.,
+<tt>avail_in</tt> will be zero.
+<pre><b>
+ /* run deflate() on input until output buffer not full, finish
+ compression if all of source has been read in */
+ do {
+</b></pre>
+Output space is provided to <tt>deflate()</tt> by setting <tt>avail_out</tt> to the number
+of available output bytes and <tt>next_out</tt> to a pointer to that space.
+<pre><b>
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+</b></pre>
+Now we call the compression engine itself, <tt>deflate()</tt>. It takes as many of the
+<tt>avail_in</tt> bytes at <tt>next_in</tt> as it can process, and writes as many as
+<tt>avail_out</tt> bytes to <tt>next_out</tt>. Those counters and pointers are then
+updated past the input data consumed and the output data written. It is the amount of
+output space available that may limit how much input is consumed.
+Hence the inner loop to make sure that
+all of the input is consumed by providing more output space each time. Since <tt>avail_in</tt>
+and <tt>next_in</tt> are updated by <tt>deflate()</tt>, we don't have to mess with those
+between <tt>deflate()</tt> calls until it's all used up.
+<p>
+The parameters to <tt>deflate()</tt> are a pointer to the <tt>strm</tt> structure containing
+the input and output information and the internal compression engine state, and a parameter
+indicating whether and how to flush data to the output. Normally <tt>deflate</tt> will consume
+several K bytes of input data before producing any output (except for the header), in order
+to accumulate statistics on the data for optimum compression. It will then put out a burst of
+compressed data, and proceed to consume more input before the next burst. Eventually,
+<tt>deflate()</tt>
+must be told to terminate the stream, complete the compression with provided input data, and
+write out the trailer check value. <tt>deflate()</tt> will continue to compress normally as long
+as the flush parameter is <tt>Z_NO_FLUSH</tt>. Once the <tt>Z_FINISH</tt> parameter is provided,
+<tt>deflate()</tt> will begin to complete the compressed output stream. However depending on how
+much output space is provided, <tt>deflate()</tt> may have to be called several times until it
+has provided the complete compressed stream, even after it has consumed all of the input. The flush
+parameter must continue to be <tt>Z_FINISH</tt> for those subsequent calls.
+<p>
+There are other values of the flush parameter that are used in more advanced applications. You can
+force <tt>deflate()</tt> to produce a burst of output that encodes all of the input data provided
+so far, even if it wouldn't have otherwise, for example to control data latency on a link with
+compressed data. You can also ask that <tt>deflate()</tt> do that as well as erase any history up to
+that point so that what follows can be decompressed independently, for example for random access
+applications. Both requests will degrade compression by an amount depending on how often such
+requests are made.
+<p>
+<tt>deflate()</tt> has a return value that can indicate errors, yet we do not check it here. Why
+not? Well, it turns out that <tt>deflate()</tt> can do no wrong here. Let's go through
+<tt>deflate()</tt>'s return values and dispense with them one by one. The possible values are
+<tt>Z_OK</tt>, <tt>Z_STREAM_END</tt>, <tt>Z_STREAM_ERROR</tt>, or <tt>Z_BUF_ERROR</tt>. <tt>Z_OK</tt>
+is, well, ok. <tt>Z_STREAM_END</tt> is also ok and will be returned for the last call of
+<tt>deflate()</tt>. This is already guaranteed by calling <tt>deflate()</tt> with <tt>Z_FINISH</tt>
+until it has no more output. <tt>Z_STREAM_ERROR</tt> is only possible if the stream is not
+initialized properly, but we did initialize it properly. There is no harm in checking for
+<tt>Z_STREAM_ERROR</tt> here, for example to check for the possibility that some
+other part of the application inadvertently clobbered the memory containing the <em>zlib</em> state.
+<tt>Z_BUF_ERROR</tt> will be explained further below, but
+suffice it to say that this is simply an indication that <tt>deflate()</tt> could not consume
+more input or produce more output. <tt>deflate()</tt> can be called again with more output space
+or more available input, which it will be in this code.
+<pre><b>
+ ret = deflate(&strm, flush); /* no bad return value */
+ assert(ret != Z_STREAM_ERROR); /* state not clobbered */
+</b></pre>
+Now we compute how much output <tt>deflate()</tt> provided on the last call, which is the
+difference between how much space was provided before the call, and how much output space
+is still available after the call. Then that data, if any, is written to the output file.
+We can then reuse the output buffer for the next call of <tt>deflate()</tt>. Again if there
+is a file i/o error, we call <tt>deflateEnd()</tt> before returning to avoid a memory leak.
+<pre><b>
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)deflateEnd(&strm);
+ return Z_ERRNO;
+ }
+</b></pre>
+The inner <tt>do</tt>-loop is repeated until the last <tt>deflate()</tt> call fails to fill the
+provided output buffer. Then we know that <tt>deflate()</tt> has done as much as it can with
+the provided input, and that all of that input has been consumed. We can then fall out of this
+loop and reuse the input buffer.
+<p>
+The way we tell that <tt>deflate()</tt> has no more output is by seeing that it did not fill
+the output buffer, leaving <tt>avail_out</tt> greater than zero. However suppose that
+<tt>deflate()</tt> has no more output, but just so happened to exactly fill the output buffer!
+<tt>avail_out</tt> is zero, and we can't tell that <tt>deflate()</tt> has done all it can.
+As far as we know, <tt>deflate()</tt>
+has more output for us. So we call it again. But now <tt>deflate()</tt> produces no output
+at all, and <tt>avail_out</tt> remains unchanged as <tt>CHUNK</tt>. That <tt>deflate()</tt> call
+wasn't able to do anything, either consume input or produce output, and so it returns
+<tt>Z_BUF_ERROR</tt>. (See, I told you I'd cover this later.) However this is not a problem at
+all. Now we finally have the desired indication that <tt>deflate()</tt> is really done,
+and so we drop out of the inner loop to provide more input to <tt>deflate()</tt>.
+<p>
+With <tt>flush</tt> set to <tt>Z_FINISH</tt>, this final set of <tt>deflate()</tt> calls will
+complete the output stream. Once that is done, subsequent calls of <tt>deflate()</tt> would return
+<tt>Z_STREAM_ERROR</tt> if the flush parameter is not <tt>Z_FINISH</tt>, and do no more processing
+until the state is reinitialized.
+<p>
+Some applications of <em>zlib</em> have two loops that call <tt>deflate()</tt>
+instead of the single inner loop we have here. The first loop would call
+without flushing and feed all of the data to <tt>deflate()</tt>. The second loop would call
+<tt>deflate()</tt> with no more
+data and the <tt>Z_FINISH</tt> parameter to complete the process. As you can see from this
+example, that can be avoided by simply keeping track of the current flush state.
+<pre><b>
+ } while (strm.avail_out == 0);
+ assert(strm.avail_in == 0); /* all input will be used */
+</b></pre><!-- -->
+Now we check to see if we have already processed all of the input file. That information was
+saved in the <tt>flush</tt> variable, so we see if that was set to <tt>Z_FINISH</tt>. If so,
+then we're done and we fall out of the outer loop. We're guaranteed to get <tt>Z_STREAM_END</tt>
+from the last <tt>deflate()</tt> call, since we ran it until the last chunk of input was
+consumed and all of the output was generated.
+<pre><b>
+ /* done when last data in file processed */
+ } while (flush != Z_FINISH);
+ assert(ret == Z_STREAM_END); /* stream will be complete */
+</b></pre><!-- -->
+The process is complete, but we still need to deallocate the state to avoid a memory leak
+(or rather more like a memory hemorrhage if you didn't do this). Then
+finally we can return with a happy return value.
+<pre><b>
+ /* clean up and return */
+ (void)deflateEnd(&strm);
+ return Z_OK;
+}
+</b></pre><!-- -->
+Now we do the same thing for decompression in the <tt>inf()</tt> routine. <tt>inf()</tt>
+decompresses what is hopefully a valid <em>zlib</em> stream from the input file and writes the
+uncompressed data to the output file. Much of the discussion above for <tt>def()</tt>
+applies to <tt>inf()</tt> as well, so the discussion here will focus on the differences between
+the two.
+<pre><b>
+/* Decompress from file source to file dest until stream ends or EOF.
+ inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+ allocated for processing, Z_DATA_ERROR if the deflate data is
+ invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and
+ the version of the library linked do not match, or Z_ERRNO if there
+ is an error reading or writing the files. */
+int inf(FILE *source, FILE *dest)
+{
+</b></pre>
+The local variables have the same functionality as they do for <tt>def()</tt>. The
+only difference is that there is no <tt>flush</tt> variable, since <tt>inflate()</tt>
+can tell from the <em>zlib</em> stream itself when the stream is complete.
+<pre><b>
+ int ret;
+ unsigned have;
+ z_stream strm;
+ char in[CHUNK];
+ char out[CHUNK];
+</b></pre><!-- -->
+The initialization of the state is the same, except that there is no compression level,
+of course, and two more elements of the structure are initialized. <tt>avail_in</tt>
+and <tt>next_in</tt> must be initialized before calling <tt>inflateInit()</tt>. This
+is because the application has the option to provide the start of the zlib stream in
+order for <tt>inflateInit()</tt> to have access to information about the compression
+method to aid in memory allocation. In the current implementation of <em>zlib</em>
+(up through versions 1.2.x), the method-dependent memory allocations are deferred to the first call of
+<tt>inflate()</tt> anyway. However those fields must be initialized since later versions
+of <em>zlib</em> that provide more compression methods may take advantage of this interface.
+In any case, no decompression is performed by <tt>inflateInit()</tt>, so the
+<tt>avail_out</tt> and <tt>next_out</tt> fields do not need to be initialized before calling.
+<p>
+Here <tt>avail_in</tt> is set to zero and <tt>next_in</tt> is set to <tt>Z_NULL</tt> to
+indicate that no input data is being provided.
+<pre><b>
+ /* allocate inflate state */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit(&strm);
+ if (ret != Z_OK)
+ return ret;
+</b></pre><!-- -->
+The outer <tt>do</tt>-loop decompresses input until <tt>inflate()</tt> indicates
+that it has reached the end of the compressed data and has produced all of the uncompressed
+output. This is in contrast to <tt>def()</tt> which processes all of the input file.
+If end-of-file is reached before the compressed data self-terminates, then the compressed
+data is incomplete and an error is returned.
+<pre><b>
+ /* decompress until deflate stream ends or end of file */
+ do {
+</b></pre>
+We read input data and set the <tt>strm</tt> structure accordingly. If we've reached the
+end of the input file, then we leave the outer loop and report an error, since the
+compressed data is incomplete. Note that we may read more data than is eventually consumed
+by <tt>inflate()</tt>, if the input file continues past the <em>zlib</em> stream.
+For applications where <em>zlib</em> streams are embedded in other data, this routine would
+need to be modified to return the unused data, or at least indicate how much of the input
+data was not used, so the application would know where to pick up after the <em>zlib</em> stream.
+<pre><b>
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)inflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ if (strm.avail_in == 0)
+ break;
+ strm.next_in = in;
+</b></pre><!-- -->
+The inner <tt>do</tt>-loop has the same function it did in <tt>def()</tt>, which is to
+keep calling <tt>inflate()</tt> until has generated all of the output it can with the
+provided input.
+<pre><b>
+ /* run inflate() on input until output buffer not full */
+ do {
+</b></pre>
+Just like in <tt>def()</tt>, the same output space is provided for each call of <tt>inflate()</tt>.
+<pre><b>
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+</b></pre>
+Now we run the decompression engine itself. There is no need to adjust the flush parameter, since
+the <em>zlib</em> format is self-terminating. The main difference here is that there are
+return values that we need to pay attention to. <tt>Z_DATA_ERROR</tt>
+indicates that <tt>inflate()</tt> detected an error in the <em>zlib</em> compressed data format,
+which means that either the data is not a <em>zlib</em> stream to begin with, or that the data was
+corrupted somewhere along the way since it was compressed. The other error to be processed is
+<tt>Z_MEM_ERROR</tt>, which can occur since memory allocation is deferred until <tt>inflate()</tt>
+needs it, unlike <tt>deflate()</tt>, whose memory is allocated at the start by <tt>deflateInit()</tt>.
+<p>
+Advanced applications may use
+<tt>deflateSetDictionary()</tt> to prime <tt>deflate()</tt> with a set of likely data to improve the
+first 32K or so of compression. This is noted in the <em>zlib</em> header, so <tt>inflate()</tt>
+requests that that dictionary be provided before it can start to decompress. Without the dictionary,
+correct decompression is not possible. For this routine, we have no idea what the dictionary is,
+so the <tt>Z_NEED_DICT</tt> indication is converted to a <tt>Z_DATA_ERROR</tt>.
+<p>
+<tt>inflate()</tt> can also return <tt>Z_STREAM_ERROR</tt>, which should not be possible here,
+but could be checked for as noted above for <tt>def()</tt>. <tt>Z_BUF_ERROR</tt> does not need to be
+checked for here, for the same reasons noted for <tt>def()</tt>. <tt>Z_STREAM_END</tt> will be
+checked for later.
+<pre><b>
+ ret = inflate(&strm, Z_NO_FLUSH);
+ assert(ret != Z_STREAM_ERROR); /* state not clobbered */
+ switch (ret) {
+ case Z_NEED_DICT:
+ ret = Z_DATA_ERROR; /* and fall through */
+ case Z_DATA_ERROR:
+ case Z_MEM_ERROR:
+ (void)inflateEnd(&strm);
+ return ret;
+ }
+</b></pre>
+The output of <tt>inflate()</tt> is handled identically to that of <tt>deflate()</tt>.
+<pre><b>
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)inflateEnd(&strm);
+ return Z_ERRNO;
+ }
+</b></pre>
+The inner <tt>do</tt>-loop ends when <tt>inflate()</tt> has no more output as indicated
+by not filling the output buffer, just as for <tt>deflate()</tt>. In this case, we cannot
+assert that <tt>strm.avail_in</tt> will be zero, since the deflate stream may end before the file
+does.
+<pre><b>
+ } while (strm.avail_out == 0);
+</b></pre><!-- -->
+The outer <tt>do</tt>-loop ends when <tt>inflate()</tt> reports that it has reached the
+end of the input <em>zlib</em> stream, has completed the decompression and integrity
+check, and has provided all of the output. This is indicated by the <tt>inflate()</tt>
+return value <tt>Z_STREAM_END</tt>. The inner loop is guaranteed to leave <tt>ret</tt>
+equal to <tt>Z_STREAM_END</tt> if the last chunk of the input file read contained the end
+of the <em>zlib</em> stream. So if the return value is not <tt>Z_STREAM_END</tt>, the
+loop continues to read more input.
+<pre><b>
+ /* done when inflate() says it's done */
+ } while (ret != Z_STREAM_END);
+</b></pre><!-- -->
+At this point, decompression successfully completed, or we broke out of the loop due to no
+more data being available from the input file. If the last <tt>inflate()</tt> return value
+is not <tt>Z_STREAM_END</tt>, then the <em>zlib</em> stream was incomplete and a data error
+is returned. Otherwise, we return with a happy return value. Of course, <tt>inflateEnd()</tt>
+is called first to avoid a memory leak.
+<pre><b>
+ /* clean up and return */
+ (void)inflateEnd(&strm);
+ return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
+}
+</b></pre><!-- -->
+That ends the routines that directly use <em>zlib</em>. The following routines make this
+a command-line program by running data through the above routines from <tt>stdin</tt> to
+<tt>stdout</tt>, and handling any errors reported by <tt>def()</tt> or <tt>inf()</tt>.
+<p>
+<tt>zerr()</tt> is used to interpret the possible error codes from <tt>def()</tt>
+and <tt>inf()</tt>, as detailed in their comments above, and print out an error message.
+Note that these are only a subset of the possible return values from <tt>deflate()</tt>
+and <tt>inflate()</tt>.
+<pre><b>
+/* report a zlib or i/o error */
+void zerr(int ret)
+{
+ fputs("zpipe: ", stderr);
+ switch (ret) {
+ case Z_ERRNO:
+ if (ferror(stdin))
+ fputs("error reading stdin\n", stderr);
+ if (ferror(stdout))
+ fputs("error writing stdout\n", stderr);
+ break;
+ case Z_STREAM_ERROR:
+ fputs("invalid compression level\n", stderr);
+ break;
+ case Z_DATA_ERROR:
+ fputs("invalid or incomplete deflate data\n", stderr);
+ break;
+ case Z_MEM_ERROR:
+ fputs("out of memory\n", stderr);
+ break;
+ case Z_VERSION_ERROR:
+ fputs("zlib version mismatch!\n", stderr);
+ }
+}
+</b></pre><!-- -->
+Here is the <tt>main()</tt> routine used to test <tt>def()</tt> and <tt>inf()</tt>. The
+<tt>zpipe</tt> command is simply a compression pipe from <tt>stdin</tt> to <tt>stdout</tt>, if
+no arguments are given, or it is a decompression pipe if <tt>zpipe -d</tt> is used. If any other
+arguments are provided, no compression or decompression is performed. Instead a usage
+message is displayed. Examples are <tt>zpipe < foo.txt > foo.txt.z</tt> to compress, and
+<tt>zpipe -d < foo.txt.z > foo.txt</tt> to decompress.
+<pre><b>
+/* compress or decompress from stdin to stdout */
+int main(int argc, char **argv)
+{
+ int ret;
+
+ /* do compression if no arguments */
+ if (argc == 1) {
+ ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
+ if (ret != Z_OK)
+ zerr(ret);
+ return ret;
+ }
+
+ /* do decompression if -d specified */
+ else if (argc == 2 && strcmp(argv[1], "-d") == 0) {
+ ret = inf(stdin, stdout);
+ if (ret != Z_OK)
+ zerr(ret);
+ return ret;
+ }
+
+ /* otherwise, report usage */
+ else {
+ fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
+ return 1;
+ }
+}
+</b></pre>
+<hr>
+<i>Copyright (c) 2004 by Mark Adler<br>Last modified 13 November 2004</i>
+</body>
+</html>
--- /dev/null
+/* zpipe.c: example of proper use of zlib's inflate() and deflate()
+ Not copyrighted -- provided to the public domain
+ Version 1.2 9 November 2004 Mark Adler */
+
+/* Version history:
+ 1.0 30 Oct 2004 First version
+ 1.1 8 Nov 2004 Add void casting for unused return values
+ Use switch statement for inflate() return values
+ 1.2 9 Nov 2004 Add assertions to document zlib guarantees
+ 1.3 6 Apr 2005 Remove incorrect assertion in inf()
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include "zlib.h"
+
+#define CHUNK 16384
+
+/* Compress from file source to file dest until EOF on source.
+ def() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+ allocated for processing, Z_STREAM_ERROR if an invalid compression
+ level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
+ version of the library linked do not match, or Z_ERRNO if there is
+ an error reading or writing the files. */
+int def(FILE *source, FILE *dest, int level)
+{
+ int ret, flush;
+ unsigned have;
+ z_stream strm;
+ char in[CHUNK];
+ char out[CHUNK];
+
+ /* allocate deflate state */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ ret = deflateInit(&strm, level);
+ if (ret != Z_OK)
+ return ret;
+
+ /* compress until end of file */
+ do {
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)deflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
+ strm.next_in = in;
+
+ /* run deflate() on input until output buffer not full, finish
+ compression if all of source has been read in */
+ do {
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+ ret = deflate(&strm, flush); /* no bad return value */
+ assert(ret != Z_STREAM_ERROR); /* state not clobbered */
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)deflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ } while (strm.avail_out == 0);
+ assert(strm.avail_in == 0); /* all input will be used */
+
+ /* done when last data in file processed */
+ } while (flush != Z_FINISH);
+ assert(ret == Z_STREAM_END); /* stream will be complete */
+
+ /* clean up and return */
+ (void)deflateEnd(&strm);
+ return Z_OK;
+}
+
+/* Decompress from file source to file dest until stream ends or EOF.
+ inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+ allocated for processing, Z_DATA_ERROR if the deflate data is
+ invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and
+ the version of the library linked do not match, or Z_ERRNO if there
+ is an error reading or writing the files. */
+int inf(FILE *source, FILE *dest)
+{
+ int ret;
+ unsigned have;
+ z_stream strm;
+ char in[CHUNK];
+ char out[CHUNK];
+
+ /* allocate inflate state */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit(&strm);
+ if (ret != Z_OK)
+ return ret;
+
+ /* decompress until deflate stream ends or end of file */
+ do {
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)inflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ if (strm.avail_in == 0)
+ break;
+ strm.next_in = in;
+
+ /* run inflate() on input until output buffer not full */
+ do {
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+ ret = inflate(&strm, Z_NO_FLUSH);
+ assert(ret != Z_STREAM_ERROR); /* state not clobbered */
+ switch (ret) {
+ case Z_NEED_DICT:
+ ret = Z_DATA_ERROR; /* and fall through */
+ case Z_DATA_ERROR:
+ case Z_MEM_ERROR:
+ (void)inflateEnd(&strm);
+ return ret;
+ }
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)inflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ } while (strm.avail_out == 0);
+
+ /* done when inflate() says it's done */
+ } while (ret != Z_STREAM_END);
+
+ /* clean up and return */
+ (void)inflateEnd(&strm);
+ return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
+}
+
+/* report a zlib or i/o error */
+void zerr(int ret)
+{
+ fputs("zpipe: ", stderr);
+ switch (ret) {
+ case Z_ERRNO:
+ if (ferror(stdin))
+ fputs("error reading stdin\n", stderr);
+ if (ferror(stdout))
+ fputs("error writing stdout\n", stderr);
+ break;
+ case Z_STREAM_ERROR:
+ fputs("invalid compression level\n", stderr);
+ break;
+ case Z_DATA_ERROR:
+ fputs("invalid or incomplete deflate data\n", stderr);
+ break;
+ case Z_MEM_ERROR:
+ fputs("out of memory\n", stderr);
+ break;
+ case Z_VERSION_ERROR:
+ fputs("zlib version mismatch!\n", stderr);
+ }
+}
+
+/* compress or decompress from stdin to stdout */
+int main(int argc, char **argv)
+{
+ int ret;
+
+ /* do compression if no arguments */
+ if (argc == 1) {
+ ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
+ if (ret != Z_OK)
+ zerr(ret);
+ return ret;
+ }
+
+ /* do decompression if -d specified */
+ else if (argc == 2 && strcmp(argv[1], "-d") == 0) {
+ ret = inf(stdin, stdout);
+ if (ret != Z_OK)
+ zerr(ret);
+ return ret;
+ }
+
+ /* otherwise, report usage */
+ else {
+ fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
+ return 1;
+ }
+}
--- /dev/null
+/* zran.c -- example of zlib/gzip stream indexing and random access
+ * Copyright (C) 2005 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ Version 1.0 29 May 2005 Mark Adler */
+
+/* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()
+ for random access of a compressed file. A file containing a zlib or gzip
+ stream is provided on the command line. The compressed stream is decoded in
+ its entirety, and an index built with access points about every SPAN bytes
+ in the uncompressed output. The compressed file is left open, and can then
+ be read randomly, having to decompress on the average SPAN/2 uncompressed
+ bytes before getting to the desired block of data.
+
+ An access point can be created at the start of any deflate block, by saving
+ the starting file offset and bit of that block, and the 32K bytes of
+ uncompressed data that precede that block. Also the uncompressed offset of
+ that block is saved to provide a referece for locating a desired starting
+ point in the uncompressed stream. build_index() works by decompressing the
+ input zlib or gzip stream a block at a time, and at the end of each block
+ deciding if enough uncompressed data has gone by to justify the creation of
+ a new access point. If so, that point is saved in a data structure that
+ grows as needed to accommodate the points.
+
+ To use the index, an offset in the uncompressed data is provided, for which
+ the latest accees point at or preceding that offset is located in the index.
+ The input file is positioned to the specified location in the index, and if
+ necessary the first few bits of the compressed data is read from the file.
+ inflate is initialized with those bits and the 32K of uncompressed data, and
+ the decompression then proceeds until the desired offset in the file is
+ reached. Then the decompression continues to read the desired uncompressed
+ data from the file.
+
+ Another approach would be to generate the index on demand. In that case,
+ requests for random access reads from the compressed data would try to use
+ the index, but if a read far enough past the end of the index is required,
+ then further index entries would be generated and added.
+
+ There is some fair bit of overhead to starting inflation for the random
+ access, mainly copying the 32K byte dictionary. So if small pieces of the
+ file are being accessed, it would make sense to implement a cache to hold
+ some lookahead and avoid many calls to extract() for small lengths.
+
+ Another way to build an index would be to use inflateCopy(). That would
+ not be constrained to have access points at block boundaries, but requires
+ more memory per access point, and also cannot be saved to file due to the
+ use of pointers in the state. The approach here allows for storage of the
+ index in a file.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "zlib.h"
+
+#define local static
+
+#define SPAN 1048576L /* desired distance between access points */
+#define WINSIZE 32768U /* sliding window size */
+#define CHUNK 16384 /* file input buffer size */
+
+/* access point entry */
+struct point {
+ off_t out; /* corresponding offset in uncompressed data */
+ off_t in; /* offset in input file of first full byte */
+ int bits; /* number of bits (1-7) from byte at in - 1, or 0 */
+ unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */
+};
+
+/* access point list */
+struct access {
+ int have; /* number of list entries filled in */
+ int size; /* number of list entries allocated */
+ struct point *list; /* allocated list */
+};
+
+/* Deallocate an index built by build_index() */
+local void free_index(struct access *index)
+{
+ if (index != NULL) {
+ free(index->list);
+ free(index);
+ }
+}
+
+/* Add an entry to the access point list. If out of memory, deallocate the
+ existing list and return NULL. */
+local struct access *addpoint(struct access *index, int bits,
+ off_t in, off_t out, unsigned left, unsigned char *window)
+{
+ struct point *next;
+
+ /* if list is empty, create it (start with eight points) */
+ if (index == NULL) {
+ index = malloc(sizeof(struct access));
+ if (index == NULL) return NULL;
+ index->list = malloc(sizeof(struct point) << 3);
+ if (index->list == NULL) {
+ free(index);
+ return NULL;
+ }
+ index->size = 8;
+ index->have = 0;
+ }
+
+ /* if list is full, make it bigger */
+ else if (index->have == index->size) {
+ index->size <<= 1;
+ next = realloc(index->list, sizeof(struct point) * index->size);
+ if (next == NULL) {
+ free_index(index);
+ return NULL;
+ }
+ index->list = next;
+ }
+
+ /* fill in entry and increment how many we have */
+ next = index->list + index->have;
+ next->bits = bits;
+ next->in = in;
+ next->out = out;
+ if (left)
+ memcpy(next->window, window + WINSIZE - left, left);
+ if (left < WINSIZE)
+ memcpy(next->window + left, window, WINSIZE - left);
+ index->have++;
+
+ /* return list, possibly reallocated */
+ return index;
+}
+
+/* Make one entire pass through the compressed stream and build an index, with
+ access points about every span bytes of uncompressed output -- span is
+ chosen to balance the speed of random access against the memory requirements
+ of the list, about 32K bytes per access point. Note that data after the end
+ of the first zlib or gzip stream in the file is ignored. build_index()
+ returns the number of access points on success (>= 1), Z_MEM_ERROR for out
+ of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a
+ file read error. On success, *built points to the resulting index. */
+local int build_index(FILE *in, off_t span, struct access **built)
+{
+ int ret;
+ off_t totin, totout; /* our own total counters to avoid 4GB limit */
+ off_t last; /* totout value of last access point */
+ struct access *index; /* access points being generated */
+ z_stream strm;
+ unsigned char input[CHUNK];
+ unsigned char window[WINSIZE];
+
+ /* initialize inflate */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit2(&strm, 47); /* automatic zlib or gzip decoding */
+ if (ret != Z_OK)
+ return ret;
+
+ /* inflate the input, maintain a sliding window, and build an index -- this
+ also validates the integrity of the compressed data using the check
+ information at the end of the gzip or zlib stream */
+ totin = totout = last = 0;
+ index = NULL; /* will be allocated by first addpoint() */
+ strm.avail_out = 0;
+ do {
+ /* get some compressed data from input file */
+ strm.avail_in = fread(input, 1, CHUNK, in);
+ if (ferror(in)) {
+ ret = Z_ERRNO;
+ goto build_index_error;
+ }
+ if (strm.avail_in == 0) {
+ ret = Z_DATA_ERROR;
+ goto build_index_error;
+ }
+ strm.next_in = input;
+
+ /* process all of that, or until end of stream */
+ do {
+ /* reset sliding window if necessary */
+ if (strm.avail_out == 0) {
+ strm.avail_out = WINSIZE;
+ strm.next_out = window;
+ }
+
+ /* inflate until out of input, output, or at end of block --
+ update the total input and output counters */
+ totin += strm.avail_in;
+ totout += strm.avail_out;
+ ret = inflate(&strm, Z_BLOCK); /* return at end of block */
+ totin -= strm.avail_in;
+ totout -= strm.avail_out;
+ if (ret == Z_NEED_DICT)
+ ret = Z_DATA_ERROR;
+ if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
+ goto build_index_error;
+ if (ret == Z_STREAM_END)
+ break;
+
+ /* if at end of block, consider adding an index entry (note that if
+ data_type indicates an end-of-block, then all of the
+ uncompressed data from that block has been delivered, and none
+ of the compressed data after that block has been consumed,
+ except for up to seven bits) -- the totout == 0 provides an
+ entry point after the zlib or gzip header, and assures that the
+ index always has at least one access point; we avoid creating an
+ access point after the last block by checking bit 6 of data_type
+ */
+ if ((strm.data_type & 128) && !(strm.data_type & 64) &&
+ (totout == 0 || totout - last > span)) {
+ index = addpoint(index, strm.data_type & 7, totin,
+ totout, strm.avail_out, window);
+ if (index == NULL) {
+ ret = Z_MEM_ERROR;
+ goto build_index_error;
+ }
+ last = totout;
+ }
+ } while (strm.avail_in != 0);
+ } while (ret != Z_STREAM_END);
+
+ /* clean up and return index (release unused entries in list) */
+ (void)inflateEnd(&strm);
+ index = realloc(index, sizeof(struct point) * index->have);
+ index->size = index->have;
+ *built = index;
+ return index->size;
+
+ /* return error */
+ build_index_error:
+ (void)inflateEnd(&strm);
+ if (index != NULL)
+ free_index(index);
+ return ret;
+}
+
+/* Use the index to read len bytes from offset into buf, return bytes read or
+ negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past
+ the end of the uncompressed data, then extract() will return a value less
+ than len, indicating how much as actually read into buf. This function
+ should not return a data error unless the file was modified since the index
+ was generated. extract() may also return Z_ERRNO if there is an error on
+ reading or seeking the input file. */
+local int extract(FILE *in, struct access *index, off_t offset,
+ unsigned char *buf, int len)
+{
+ int ret, skip;
+ z_stream strm;
+ struct point *here;
+ unsigned char input[CHUNK];
+ unsigned char discard[WINSIZE];
+
+ /* proceed only if something reasonable to do */
+ if (len < 0)
+ return 0;
+
+ /* find where in stream to start */
+ here = index->list;
+ ret = index->have;
+ while (--ret && here[1].out <= offset)
+ here++;
+
+ /* initialize file and inflate state to start there */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit2(&strm, -15); /* raw inflate */
+ if (ret != Z_OK)
+ return ret;
+ ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);
+ if (ret == -1)
+ goto extract_ret;
+ if (here->bits) {
+ ret = getc(in);
+ if (ret == -1) {
+ ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;
+ goto extract_ret;
+ }
+ (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));
+ }
+ (void)inflateSetDictionary(&strm, here->window, WINSIZE);
+
+ /* skip uncompressed bytes until offset reached, then satisfy request */
+ offset -= here->out;
+ strm.avail_in = 0;
+ skip = 1; /* while skipping to offset */
+ do {
+ /* define where to put uncompressed data, and how much */
+ if (offset == 0 && skip) { /* at offset now */
+ strm.avail_out = len;
+ strm.next_out = buf;
+ skip = 0; /* only do this once */
+ }
+ if (offset > WINSIZE) { /* skip WINSIZE bytes */
+ strm.avail_out = WINSIZE;
+ strm.next_out = discard;
+ offset -= WINSIZE;
+ }
+ else if (offset != 0) { /* last skip */
+ strm.avail_out = (unsigned)offset;
+ strm.next_out = discard;
+ offset = 0;
+ }
+
+ /* uncompress until avail_out filled, or end of stream */
+ do {
+ if (strm.avail_in == 0) {
+ strm.avail_in = fread(input, 1, CHUNK, in);
+ if (ferror(in)) {
+ ret = Z_ERRNO;
+ goto extract_ret;
+ }
+ if (strm.avail_in == 0) {
+ ret = Z_DATA_ERROR;
+ goto extract_ret;
+ }
+ strm.next_in = input;
+ }
+ ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */
+ if (ret == Z_NEED_DICT)
+ ret = Z_DATA_ERROR;
+ if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
+ goto extract_ret;
+ if (ret == Z_STREAM_END)
+ break;
+ } while (strm.avail_out != 0);
+
+ /* if reach end of stream, then don't keep trying to get more */
+ if (ret == Z_STREAM_END)
+ break;
+
+ /* do until offset reached and requested data read, or stream ends */
+ } while (skip);
+
+ /* compute number of uncompressed bytes read after offset */
+ ret = skip ? 0 : len - strm.avail_out;
+
+ /* clean up and return bytes read or error */
+ extract_ret:
+ (void)inflateEnd(&strm);
+ return ret;
+}
+
+/* Demonstrate the use of build_index() and extract() by processing the file
+ provided on the command line, and the extracting 16K from about 2/3rds of
+ the way through the uncompressed output, and writing that to stdout. */
+int main(int argc, char **argv)
+{
+ int len;
+ off_t offset;
+ FILE *in;
+ struct access *index;
+ unsigned char buf[CHUNK];
+
+ /* open input file */
+ if (argc != 2) {
+ fprintf(stderr, "usage: zran file.gz\n");
+ return 1;
+ }
+ in = fopen(argv[1], "rb");
+ if (in == NULL) {
+ fprintf(stderr, "zran: could not open %s for reading\n", argv[1]);
+ return 1;
+ }
+
+ /* build index */
+ len = build_index(in, SPAN, &index);
+ if (len < 0) {
+ fclose(in);
+ switch (len) {
+ case Z_MEM_ERROR:
+ fprintf(stderr, "zran: out of memory\n");
+ break;
+ case Z_DATA_ERROR:
+ fprintf(stderr, "zran: compressed data error in %s\n", argv[1]);
+ break;
+ case Z_ERRNO:
+ fprintf(stderr, "zran: read error on %s\n", argv[1]);
+ break;
+ default:
+ fprintf(stderr, "zran: error %d while building index\n", len);
+ }
+ return 1;
+ }
+ fprintf(stderr, "zran: built index with %d access points\n", len);
+
+ /* use index by reading some bytes from an arbitrary offset */
+ offset = (index->list[index->have - 1].out << 1) / 3;
+ len = extract(in, index, offset, buf, CHUNK);
+ if (len < 0)
+ fprintf(stderr, "zran: extraction failed: %s error\n",
+ len == Z_MEM_ERROR ? "out of memory" : "input corrupted");
+ else {
+ fwrite(buf, 1, len, stdout);
+ fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset);
+ }
+
+ /* clean up and exit */
+ free_index(index);
+ fclose(in);
+ return 0;
+}
--- /dev/null
+$! make libz under VMS written by
+$! Martin P.J. Zinser
+$! <zinser@zinser.no-ip.info or zinser@sysdev.deutsche-boerse.com>
+$!
+$ on error then goto err_exit
+$!
+$!
+$! Just some general constants...
+$!
+$ true = 1
+$ false = 0
+$ tmpnam = "temp_" + f$getjpi("","pid")
+$ SAY = "WRITE SYS$OUTPUT"
+$!
+$! Setup variables holding "config" information
+$!
+$ Make = ""
+$ name = "Zlib"
+$ version = "?.?.?"
+$ v_string = "ZLIB_VERSION"
+$ v_file = "zlib.h"
+$ ccopt = ""
+$ lopts = ""
+$ linkonly = false
+$ optfile = name + ".opt"
+$ its_decc = false
+$ its_vaxc = false
+$ its_gnuc = false
+$ axp = f$getsyi("HW_MODEL").ge.1024
+$ s_case = false
+$! Check for MMK/MMS
+$!
+$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS"
+$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK"
+$!
+$!
+$ gosub find_version
+$!
+$ gosub check_opts
+$!
+$! Look for the compiler used
+$!
+$ gosub check_compiler
+$ if its_decc
+$ then
+$ ccopt = "/prefix=all" + ccopt
+$ if f$trnlnm("SYS") .eqs. ""
+$ then
+$ if axp
+$ then
+$ define sys sys$library:
+$ else
+$ ccopt = "/decc" + ccopt
+$ define sys decc$library_include:
+$ endif
+$ endif
+$ endif
+$ if its_vaxc .or. its_gnuc
+$ then
+$ if f$trnlnm("SYS").eqs."" then define sys sys$library:
+$ endif
+$!
+$! Build the thing plain or with mms
+$!
+$ write sys$output "Compiling Zlib sources ..."
+$ if make.eqs.""
+$ then
+$ dele example.obj;*,minigzip.obj;*
+$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" -
+ adler32.c zlib.h zconf.h
+$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" -
+ compress.c zlib.h zconf.h
+$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" -
+ crc32.c zlib.h zconf.h
+$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" -
+ deflate.c deflate.h zutil.h zlib.h zconf.h
+$ CALL MAKE gzio.OBJ "CC ''CCOPT' gzio" -
+ gzio.c zutil.h zlib.h zconf.h
+$ CALL MAKE infback.OBJ "CC ''CCOPT' infback" -
+ infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h
+$ CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" -
+ inffast.c zutil.h zlib.h zconf.h inffast.h
+$ CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" -
+ inflate.c zutil.h zlib.h zconf.h infblock.h
+$ CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" -
+ inftrees.c zutil.h zlib.h zconf.h inftrees.h
+$ CALL MAKE trees.OBJ "CC ''CCOPT' trees" -
+ trees.c deflate.h zutil.h zlib.h zconf.h
+$ CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" -
+ uncompr.c zlib.h zconf.h
+$ CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" -
+ zutil.c zutil.h zlib.h zconf.h
+$ write sys$output "Building Zlib ..."
+$ CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ
+$ write sys$output "Building example..."
+$ CALL MAKE example.OBJ "CC ''CCOPT' example" -
+ example.c zlib.h zconf.h
+$ call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb
+$ if f$search("x11vms:xvmsutils.olb") .nes. ""
+$ then
+$ write sys$output "Building minigzip..."
+$ CALL MAKE minigzip.OBJ "CC ''CCOPT' minigzip" -
+ minigzip.c zlib.h zconf.h
+$ call make minigzip.exe -
+ "LINK minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib" -
+ minigzip.obj libz.olb
+$ endif
+$ else
+$ gosub crea_mms
+$ SAY "Make ''name' ''version' with ''Make' "
+$ 'make'
+$ endif
+$!
+$! Alpha gets a shareable image
+$!
+$ If axp
+$ Then
+$ gosub crea_olist
+$ write sys$output "Creating libzshr.exe"
+$ call anal_obj_axp modules.opt _link.opt
+$ if s_case
+$ then
+$ open/append optf modules.opt
+$ write optf "case_sensitive=YES"
+$ close optf
+$ endif
+$ LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,_link.opt/opt
+$ endif
+$ write sys$output "Zlib build completed"
+$ exit
+$CC_ERR:
+$ write sys$output "C compiler required to build ''name'"
+$ goto err_exit
+$ERR_EXIT:
+$ set message/facil/ident/sever/text
+$ write sys$output "Exiting..."
+$ exit 2
+$!
+$!
+$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
+$ V = 'F$Verify(0)
+$! P1 = What we are trying to make
+$! P2 = Command to make it
+$! P3 - P8 What it depends on
+$
+$ If F$Search(P1) .Eqs. "" Then Goto Makeit
+$ Time = F$CvTime(F$File(P1,"RDT"))
+$arg=3
+$Loop:
+$ Argument = P'arg
+$ If Argument .Eqs. "" Then Goto Exit
+$ El=0
+$Loop2:
+$ File = F$Element(El," ",Argument)
+$ If File .Eqs. " " Then Goto Endl
+$ AFile = ""
+$Loop3:
+$ OFile = AFile
+$ AFile = F$Search(File)
+$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
+$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
+$ Goto Loop3
+$NextEL:
+$ El = El + 1
+$ Goto Loop2
+$EndL:
+$ arg=arg+1
+$ If arg .Le. 8 Then Goto Loop
+$ Goto Exit
+$
+$Makeit:
+$ VV=F$VERIFY(0)
+$ write sys$output P2
+$ 'P2
+$ VV='F$Verify(VV)
+$Exit:
+$ If V Then Set Verify
+$ENDSUBROUTINE
+$!------------------------------------------------------------------------------
+$!
+$! Check command line options and set symbols accordingly
+$!
+$ CHECK_OPTS:
+$ i = 1
+$ OPT_LOOP:
+$ if i .lt. 9
+$ then
+$ cparm = f$edit(p'i',"upcase")
+$ if cparm .eqs. "DEBUG"
+$ then
+$ ccopt = ccopt + "/noopt/deb"
+$ lopts = lopts + "/deb"
+$ endif
+$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm)
+$ then
+$ start = f$locate("=",cparm) + 1
+$ len = f$length(cparm) - start
+$ ccopt = ccopt + f$extract(start,len,cparm)
+$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) -
+ then s_case = true
+$ endif
+$ if cparm .eqs. "LINK" then linkonly = true
+$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm)
+$ then
+$ start = f$locate("=",cparm) + 1
+$ len = f$length(cparm) - start
+$ lopts = lopts + f$extract(start,len,cparm)
+$ endif
+$ if f$locate("CC=",cparm) .lt. f$length(cparm)
+$ then
+$ start = f$locate("=",cparm) + 1
+$ len = f$length(cparm) - start
+$ cc_com = f$extract(start,len,cparm)
+ if (cc_com .nes. "DECC") .and. -
+ (cc_com .nes. "VAXC") .and. -
+ (cc_com .nes. "GNUC")
+$ then
+$ write sys$output "Unsupported compiler choice ''cc_com' ignored"
+$ write sys$output "Use DECC, VAXC, or GNUC instead"
+$ else
+$ if cc_com .eqs. "DECC" then its_decc = true
+$ if cc_com .eqs. "VAXC" then its_vaxc = true
+$ if cc_com .eqs. "GNUC" then its_gnuc = true
+$ endif
+$ endif
+$ if f$locate("MAKE=",cparm) .lt. f$length(cparm)
+$ then
+$ start = f$locate("=",cparm) + 1
+$ len = f$length(cparm) - start
+$ mmks = f$extract(start,len,cparm)
+$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS")
+$ then
+$ make = mmks
+$ else
+$ write sys$output "Unsupported make choice ''mmks' ignored"
+$ write sys$output "Use MMK or MMS instead"
+$ endif
+$ endif
+$ i = i + 1
+$ goto opt_loop
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Look for the compiler used
+$!
+$CHECK_COMPILER:
+$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc))
+$ then
+$ its_decc = (f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. "")
+$ its_vaxc = .not. its_decc .and. (F$Search("SYS$System:VAXC.Exe") .nes. "")
+$ its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm("gnu_cc") .nes. "")
+$ endif
+$!
+$! Exit if no compiler available
+$!
+$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc))
+$ then goto CC_ERR
+$ else
+$ if its_decc then write sys$output "CC compiler check ... Compaq C"
+$ if its_vaxc then write sys$output "CC compiler check ... VAX C"
+$ if its_gnuc then write sys$output "CC compiler check ... GNU C"
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! If MMS/MMK are available dump out the descrip.mms if required
+$!
+$CREA_MMS:
+$ write sys$output "Creating descrip.mms..."
+$ create descrip.mms
+$ open/append out descrip.mms
+$ copy sys$input: out
+$ deck
+# descrip.mms: MMS description file for building zlib on VMS
+# written by Martin P.J. Zinser
+# <zinser@zinser.no-ip.info or zinser@sysdev.deutsche-boerse.com>
+
+OBJS = adler32.obj, compress.obj, crc32.obj, gzio.obj, uncompr.obj, infback.obj\
+ deflate.obj, trees.obj, zutil.obj, inflate.obj, \
+ inftrees.obj, inffast.obj
+
+$ eod
+$ write out "CFLAGS=", ccopt
+$ write out "LOPTS=", lopts
+$ copy sys$input: out
+$ deck
+
+all : example.exe minigzip.exe libz.olb
+ @ write sys$output " Example applications available"
+
+libz.olb : libz.olb($(OBJS))
+ @ write sys$output " libz available"
+
+example.exe : example.obj libz.olb
+ link $(LOPTS) example,libz.olb/lib
+
+minigzip.exe : minigzip.obj libz.olb
+ link $(LOPTS) minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib
+
+clean :
+ delete *.obj;*,libz.olb;*,*.opt;*,*.exe;*
+
+
+# Other dependencies.
+adler32.obj : adler32.c zutil.h zlib.h zconf.h
+compress.obj : compress.c zlib.h zconf.h
+crc32.obj : crc32.c zutil.h zlib.h zconf.h
+deflate.obj : deflate.c deflate.h zutil.h zlib.h zconf.h
+example.obj : example.c zlib.h zconf.h
+gzio.obj : gzio.c zutil.h zlib.h zconf.h
+inffast.obj : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h
+inflate.obj : inflate.c zutil.h zlib.h zconf.h
+inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h
+minigzip.obj : minigzip.c zlib.h zconf.h
+trees.obj : trees.c deflate.h zutil.h zlib.h zconf.h
+uncompr.obj : uncompr.c zlib.h zconf.h
+zutil.obj : zutil.c zutil.h zlib.h zconf.h
+infback.obj : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h
+$ eod
+$ close out
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Read list of core library sources from makefile.in and create options
+$! needed to build shareable image
+$!
+$CREA_OLIST:
+$ open/read min makefile.in
+$ open/write mod modules.opt
+$ src_check = "OBJS ="
+$MRLOOP:
+$ read/end=mrdone min rec
+$ if (f$extract(0,6,rec) .nes. src_check) then goto mrloop
+$ rec = rec - src_check
+$ gosub extra_filnam
+$ if (f$element(1,"\",rec) .eqs. "\") then goto mrdone
+$MRSLOOP:
+$ read/end=mrdone min rec
+$ gosub extra_filnam
+$ if (f$element(1,"\",rec) .nes. "\") then goto mrsloop
+$MRDONE:
+$ close min
+$ close mod
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Take record extracted in crea_olist and split it into single filenames
+$!
+$EXTRA_FILNAM:
+$ myrec = f$edit(rec - "\", "trim,compress")
+$ i = 0
+$FELOOP:
+$ srcfil = f$element(i," ", myrec)
+$ if (srcfil .nes. " ")
+$ then
+$ write mod f$parse(srcfil,,,"NAME"), ".obj"
+$ i = i + 1
+$ goto feloop
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Find current Zlib version number
+$!
+$FIND_VERSION:
+$ open/read h_in 'v_file'
+$hloop:
+$ read/end=hdone h_in rec
+$ rec = f$edit(rec,"TRIM")
+$ if (f$extract(0,1,rec) .nes. "#") then goto hloop
+$ rec = f$edit(rec - "#", "TRIM")
+$ if f$element(0," ",rec) .nes. "define" then goto hloop
+$ if f$element(1," ",rec) .eqs. v_string
+$ then
+$ version = 'f$element(2," ",rec)'
+$ goto hdone
+$ endif
+$ goto hloop
+$hdone:
+$ close h_in
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Analyze Object files for OpenVMS AXP to extract Procedure and Data
+$! information to build a symbol vector for a shareable image
+$! All the "brains" of this logic was suggested by Hartmut Becker
+$! (Hartmut.Becker@compaq.com). All the bugs were introduced by me
+$! (zinser@decus.de), so if you do have problem reports please do not
+$! bother Hartmut/HP, but get in touch with me
+$!
+$ ANAL_OBJ_AXP: Subroutine
+$ V = 'F$Verify(0)
+$ SAY := "WRITE_ SYS$OUTPUT"
+$
+$ IF F$SEARCH("''P1'") .EQS. ""
+$ THEN
+$ SAY "ANAL_OBJ_AXP-E-NOSUCHFILE: Error, inputfile ''p1' not available"
+$ goto exit_aa
+$ ENDIF
+$ IF "''P2'" .EQS. ""
+$ THEN
+$ SAY "ANAL_OBJ_AXP: Error, no output file provided"
+$ goto exit_aa
+$ ENDIF
+$
+$ open/read in 'p1
+$ create a.tmp
+$ open/append atmp a.tmp
+$ loop:
+$ read/end=end_loop in line
+$ f= f$search(line)
+$ if f .eqs. ""
+$ then
+$ write sys$output "ANAL_OBJ_AXP-w-nosuchfile, ''line'"
+$ goto loop
+$ endif
+$ define/user sys$output nl:
+$ define/user sys$error nl:
+$ anal/obj/gsd 'f /out=x.tmp
+$ open/read xtmp x.tmp
+$ XLOOP:
+$ read/end=end_xloop xtmp xline
+$ xline = f$edit(xline,"compress")
+$ write atmp xline
+$ goto xloop
+$ END_XLOOP:
+$ close xtmp
+$ goto loop
+$ end_loop:
+$ close in
+$ close atmp
+$ if f$search("a.tmp") .eqs. "" -
+ then $ exit
+$ ! all global definitions
+$ search a.tmp "symbol:","EGSY$V_DEF 1","EGSY$V_NORM 1"/out=b.tmp
+$ ! all procedures
+$ search b.tmp "EGSY$V_NORM 1"/wind=(0,1) /out=c.tmp
+$ search c.tmp "symbol:"/out=d.tmp
+$ define/user sys$output nl:
+$ edito/edt/command=sys$input d.tmp
+sub/symbol: "/symbol_vector=(/whole
+sub/"/=PROCEDURE)/whole
+exit
+$ ! all data
+$ search b.tmp "EGSY$V_DEF 1"/wind=(0,1) /out=e.tmp
+$ search e.tmp "symbol:"/out=f.tmp
+$ define/user sys$output nl:
+$ edito/edt/command=sys$input f.tmp
+sub/symbol: "/symbol_vector=(/whole
+sub/"/=DATA)/whole
+exit
+$ sort/nodupl d.tmp,f.tmp 'p2'
+$ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;*
+$ if f$search("x.tmp") .nes. "" -
+ then $ delete x.tmp;*
+$!
+$ EXIT_AA:
+$ if V then set verify
+$ endsubroutine
+$!------------------------------------------------------------------------------
--- /dev/null
+See below some functions declarations for Visual Basic.
+
+Frequently Asked Question:
+
+Q: Each time I use the compress function I get the -5 error (not enough
+ room in the output buffer).
+
+A: Make sure that the length of the compressed buffer is passed by
+ reference ("as any"), not by value ("as long"). Also check that
+ before the call of compress this length is equal to the total size of
+ the compressed buffer and not zero.
+
+
+From: "Jon Caruana" <jon-net@usa.net>
+Subject: Re: How to port zlib declares to vb?
+Date: Mon, 28 Oct 1996 18:33:03 -0600
+
+Got the answer! (I haven't had time to check this but it's what I got, and
+looks correct):
+
+He has the following routines working:
+ compress
+ uncompress
+ gzopen
+ gzwrite
+ gzread
+ gzclose
+
+Declares follow: (Quoted from Carlos Rios <c_rios@sonda.cl>, in Vb4 form)
+
+#If Win16 Then 'Use Win16 calls.
+Declare Function compress Lib "ZLIB.DLL" (ByVal compr As
+ String, comprLen As Any, ByVal buf As String, ByVal buflen
+ As Long) As Integer
+Declare Function uncompress Lib "ZLIB.DLL" (ByVal uncompr
+ As String, uncomprLen As Any, ByVal compr As String, ByVal
+ lcompr As Long) As Integer
+Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As
+ String, ByVal mode As String) As Long
+Declare Function gzread Lib "ZLIB.DLL" (ByVal file As
+ Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
+ As Integer
+Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As
+ Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
+ As Integer
+Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As
+ Long) As Integer
+#Else
+Declare Function compress Lib "ZLIB32.DLL"
+ (ByVal compr As String, comprLen As Any, ByVal buf As
+ String, ByVal buflen As Long) As Integer
+Declare Function uncompress Lib "ZLIB32.DLL"
+ (ByVal uncompr As String, uncomprLen As Any, ByVal compr As
+ String, ByVal lcompr As Long) As Long
+Declare Function gzopen Lib "ZLIB32.DLL"
+ (ByVal file As String, ByVal mode As String) As Long
+Declare Function gzread Lib "ZLIB32.DLL"
+ (ByVal file As Long, ByVal uncompr As String, ByVal
+ uncomprLen As Long) As Long
+Declare Function gzwrite Lib "ZLIB32.DLL"
+ (ByVal file As Long, ByVal uncompr As String, ByVal
+ uncomprLen As Long) As Long
+Declare Function gzclose Lib "ZLIB32.DLL"
+ (ByVal file As Long) As Long
+#End If
+
+-Jon Caruana
+jon-net@usa.net
+Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member
+
+
+Here is another example from Michael <michael_borgsys@hotmail.com> that he
+says conforms to the VB guidelines, and that solves the problem of not
+knowing the uncompressed size by storing it at the end of the file:
+
+'Calling the functions:
+'bracket meaning: <parameter> [optional] {Range of possible values}
+'Call subCompressFile(<path with filename to compress> [, <path with
+filename to write to>, [level of compression {1..9}]])
+'Call subUncompressFile(<path with filename to compress>)
+
+Option Explicit
+Private lngpvtPcnSml As Long 'Stores value for 'lngPercentSmaller'
+Private Const SUCCESS As Long = 0
+Private Const strFilExt As String = ".cpr"
+Private Declare Function lngfncCpr Lib "zlib.dll" Alias "compress2" (ByRef
+dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long,
+ByVal level As Integer) As Long
+Private Declare Function lngfncUcp Lib "zlib.dll" Alias "uncompress" (ByRef
+dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long)
+As Long
+
+Public Sub subCompressFile(ByVal strargOriFilPth As String, Optional ByVal
+strargCprFilPth As String, Optional ByVal intLvl As Integer = 9)
+ Dim strCprPth As String
+ Dim lngOriSiz As Long
+ Dim lngCprSiz As Long
+ Dim bytaryOri() As Byte
+ Dim bytaryCpr() As Byte
+ lngOriSiz = FileLen(strargOriFilPth)
+ ReDim bytaryOri(lngOriSiz - 1)
+ Open strargOriFilPth For Binary Access Read As #1
+ Get #1, , bytaryOri()
+ Close #1
+ strCprPth = IIf(strargCprFilPth = "", strargOriFilPth, strargCprFilPth)
+'Select file path and name
+ strCprPth = strCprPth & IIf(Right(strCprPth, Len(strFilExt)) =
+strFilExt, "", strFilExt) 'Add file extension if not exists
+ lngCprSiz = (lngOriSiz * 1.01) + 12 'Compression needs temporary a bit
+more space then original file size
+ ReDim bytaryCpr(lngCprSiz - 1)
+ If lngfncCpr(bytaryCpr(0), lngCprSiz, bytaryOri(0), lngOriSiz, intLvl) =
+SUCCESS Then
+ lngpvtPcnSml = (1# - (lngCprSiz / lngOriSiz)) * 100
+ ReDim Preserve bytaryCpr(lngCprSiz - 1)
+ Open strCprPth For Binary Access Write As #1
+ Put #1, , bytaryCpr()
+ Put #1, , lngOriSiz 'Add the the original size value to the end
+(last 4 bytes)
+ Close #1
+ Else
+ MsgBox "Compression error"
+ End If
+ Erase bytaryCpr
+ Erase bytaryOri
+End Sub
+
+Public Sub subUncompressFile(ByVal strargFilPth As String)
+ Dim bytaryCpr() As Byte
+ Dim bytaryOri() As Byte
+ Dim lngOriSiz As Long
+ Dim lngCprSiz As Long
+ Dim strOriPth As String
+ lngCprSiz = FileLen(strargFilPth)
+ ReDim bytaryCpr(lngCprSiz - 1)
+ Open strargFilPth For Binary Access Read As #1
+ Get #1, , bytaryCpr()
+ Close #1
+ 'Read the original file size value:
+ lngOriSiz = bytaryCpr(lngCprSiz - 1) * (2 ^ 24) _
+ + bytaryCpr(lngCprSiz - 2) * (2 ^ 16) _
+ + bytaryCpr(lngCprSiz - 3) * (2 ^ 8) _
+ + bytaryCpr(lngCprSiz - 4)
+ ReDim Preserve bytaryCpr(lngCprSiz - 5) 'Cut of the original size value
+ ReDim bytaryOri(lngOriSiz - 1)
+ If lngfncUcp(bytaryOri(0), lngOriSiz, bytaryCpr(0), lngCprSiz) = SUCCESS
+Then
+ strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt))
+ Open strOriPth For Binary Access Write As #1
+ Put #1, , bytaryOri()
+ Close #1
+ Else
+ MsgBox "Uncompression error"
+ End If
+ Erase bytaryCpr
+ Erase bytaryOri
+End Sub
+Public Property Get lngPercentSmaller() As Long
+ lngPercentSmaller = lngpvtPcnSml
+End Property
--- /dev/null
+This directory contains project files for building zlib under various
+Integrated Development Environments (IDE).
+
+If you wish to submit a new project to this directory, you should comply
+to the following requirements. Otherwise (e.g. if you wish to integrate
+a custom piece of code that changes the zlib interface or its behavior),
+please consider submitting the project to the contrib directory.
+
+
+Requirements
+============
+
+- The project must build zlib using the source files from the official
+ zlib source distribution, exclusively.
+
+- If the project produces redistributable builds (e.g. shared objects
+ or DLL files), these builds must be compatible to those produced by
+ makefiles, if such makefiles exist in the zlib distribution.
+ In particular, if the project produces a DLL build for the Win32
+ platform, this build must comply to the officially-ammended Win32 DLL
+ Application Binary Interface (ABI), described in win32/DLL_FAQ.txt.
+
+- The project may provide additional build targets, which depend on
+ 3rd-party (unofficially-supported) software, present in the contrib
+ directory. For example, it is possible to provide an "ASM build",
+ besides the officially-supported build, and have ASM source files
+ among its dependencies.
+
+- If there are significant differences between the project files created
+ by different versions of an IDE (e.g. Visual C++ 6.0 vs. 7.0), the name
+ of the project directory should contain the version number of the IDE
+ for which the project is intended (e.g. "visualc6" for Visual C++ 6.0,
+ or "visualc7" for Visual C++ 7.0 and 7.1).
+
+
+Current projects
+================
+
+visualc6/ by Simon-Pierre Cadieux <methodex@methodex.ca>
+ and Cosmin Truta <cosmint@cs.ubbcluj.ro>
+ Project for Microsoft Visual C++ 6.0
--- /dev/null
+Microsoft Developer Studio Project Files, Format Version 6.00 for zlib.\r
+\r
+Copyright (C) 2000-2004 Simon-Pierre Cadieux.\r
+Copyright (C) 2004 Cosmin Truta.\r
+For conditions of distribution and use, see copyright notice in zlib.h.\r
+\r
+\r
+This project builds the zlib binaries as follows:\r
+\r
+* Win32_DLL_Release\zlib1.dll DLL build\r
+* Win32_DLL_Debug\zlib1d.dll DLL build (debug version)\r
+* Win32_DLL_ASM_Release\zlib1.dll DLL build using ASM code\r
+* Win32_DLL_ASM_Debug\zlib1d.dll DLL build using ASM code (debug version)\r
+* Win32_LIB_Release\zlib.lib static build\r
+* Win32_LIB_Debug\zlibd.lib static build (debug version)\r
+* Win32_LIB_ASM_Release\zlib.lib static build using ASM code\r
+* Win32_LIB_ASM_Debug\zlibd.lib static build using ASM code (debug version)\r
+\r
+\r
+For more information regarding the DLL builds, please see the DLL FAQ\r
+in ..\..\win32\DLL_FAQ.txt.\r
+\r
+\r
+To build and test:\r
+\r
+1) On the main menu, select "File | Open Workspace".\r
+ Open "zlib.dsw".\r
+\r
+2) Select "Build | Set Active Configuration".\r
+ Choose the configuration you wish to build.\r
+\r
+3) Select "Build | Clean".\r
+\r
+4) Select "Build | Build ... (F7)". Ignore warning messages about\r
+ not being able to find certain include files (e.g. alloc.h).\r
+\r
+5) If you built one of the sample programs (example or minigzip),\r
+ select "Build | Execute ... (Ctrl+F5)".\r
+\r
+\r
+To use:\r
+\r
+1) Select "Project | Settings (Alt+F7)".\r
+ Make note of the configuration names used in your project.\r
+ Usually, these names are "Win32 Release" and "Win32 Debug".\r
+\r
+2) In the Workspace window, select the "FileView" tab.\r
+ Right-click on the root item "Workspace '...'".\r
+ Select "Insert Project into Workspace".\r
+ Switch on the checkbox "Dependency of:", and select the name\r
+ of your project. Open "zlib.dsp".\r
+\r
+3) Select "Build | Configurations".\r
+ For each configuration of your project:\r
+ 3.1) Choose the zlib configuration you wish to use.\r
+ 3.2) Click on "Add".\r
+ 3.3) Set the new zlib configuration name to the name used by\r
+ the configuration from the current iteration.\r
+\r
+4) Select "Build | Set Active Configuration".\r
+ Choose the configuration you wish to build.\r
+\r
+5) Select "Build | Build ... (F7)".\r
+\r
+6) If you built an executable program, select\r
+ "Build | Execute ... (Ctrl+F5)".\r
+\r
+\r
+Note:\r
+\r
+To build the ASM-enabled code, you need Microsoft Assembler\r
+(ML.EXE). You can get it by downloading and installing the\r
+latest Processor Pack for Visual C++ 6.0.\r
--- /dev/null
+# Microsoft Developer Studio Project File - Name="example" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=example - Win32 LIB Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "example.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "example.mak" CFG="example - Win32 LIB Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "example - Win32 DLL Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "example - Win32 DLL Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "example - Win32 DLL ASM Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "example - Win32 DLL ASM Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "example - Win32 LIB Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "example - Win32 LIB Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "example - Win32 LIB ASM Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "example - Win32 LIB ASM Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF "$(CFG)" == "example - Win32 DLL Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "example___Win32_DLL_Release"\r
+# PROP BASE Intermediate_Dir "example___Win32_DLL_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_DLL_Release"\r
+# PROP Intermediate_Dir "Win32_DLL_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF "$(CFG)" == "example - Win32 DLL Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "example___Win32_DLL_Debug"\r
+# PROP BASE Intermediate_Dir "example___Win32_DLL_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_DLL_Debug"\r
+# PROP Intermediate_Dir "Win32_DLL_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ELSEIF "$(CFG)" == "example - Win32 DLL ASM Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "example___Win32_DLL_ASM_Release"\r
+# PROP BASE Intermediate_Dir "example___Win32_DLL_ASM_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_DLL_ASM_Release"\r
+# PROP Intermediate_Dir "Win32_DLL_ASM_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF "$(CFG)" == "example - Win32 DLL ASM Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "example___Win32_DLL_ASM_Debug"\r
+# PROP BASE Intermediate_Dir "example___Win32_DLL_ASM_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_DLL_ASM_Debug"\r
+# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ELSEIF "$(CFG)" == "example - Win32 LIB Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "example___Win32_LIB_Release"\r
+# PROP BASE Intermediate_Dir "example___Win32_LIB_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_LIB_Release"\r
+# PROP Intermediate_Dir "Win32_LIB_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF "$(CFG)" == "example - Win32 LIB Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "example___Win32_LIB_Debug"\r
+# PROP BASE Intermediate_Dir "example___Win32_LIB_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_LIB_Debug"\r
+# PROP Intermediate_Dir "Win32_LIB_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ELSEIF "$(CFG)" == "example - Win32 LIB ASM Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "example___Win32_LIB_ASM_Release"\r
+# PROP BASE Intermediate_Dir "example___Win32_LIB_ASM_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_LIB_ASM_Release"\r
+# PROP Intermediate_Dir "Win32_LIB_ASM_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF "$(CFG)" == "example - Win32 LIB ASM Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "example___Win32_LIB_ASM_Debug"\r
+# PROP BASE Intermediate_Dir "example___Win32_LIB_ASM_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_LIB_ASM_Debug"\r
+# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "example - Win32 DLL Release"\r
+# Name "example - Win32 DLL Debug"\r
+# Name "example - Win32 DLL ASM Release"\r
+# Name "example - Win32 DLL ASM Debug"\r
+# Name "example - Win32 LIB Release"\r
+# Name "example - Win32 LIB Debug"\r
+# Name "example - Win32 LIB ASM Release"\r
+# Name "example - Win32 LIB ASM Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\example.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\zconf.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\zlib.h\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
--- /dev/null
+# Microsoft Developer Studio Project File - Name="minigzip" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=minigzip - Win32 LIB Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "minigzip.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "minigzip.mak" CFG="minigzip - Win32 LIB Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "minigzip - Win32 DLL Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "minigzip - Win32 DLL Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "minigzip - Win32 DLL ASM Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "minigzip - Win32 DLL ASM Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "minigzip - Win32 LIB Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "minigzip - Win32 LIB Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "minigzip - Win32 LIB ASM Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "minigzip - Win32 LIB ASM Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF "$(CFG)" == "minigzip - Win32 DLL Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "minigzip___Win32_DLL_Release"\r
+# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_DLL_Release"\r
+# PROP Intermediate_Dir "Win32_DLL_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF "$(CFG)" == "minigzip - Win32 DLL Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "minigzip___Win32_DLL_Debug"\r
+# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_DLL_Debug"\r
+# PROP Intermediate_Dir "Win32_DLL_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ELSEIF "$(CFG)" == "minigzip - Win32 DLL ASM Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "minigzip___Win32_DLL_ASM_Release"\r
+# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_ASM_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_DLL_ASM_Release"\r
+# PROP Intermediate_Dir "Win32_DLL_ASM_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF "$(CFG)" == "minigzip - Win32 DLL ASM Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "minigzip___Win32_DLL_ASM_Debug"\r
+# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_ASM_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_DLL_ASM_Debug"\r
+# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ELSEIF "$(CFG)" == "minigzip - Win32 LIB Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "minigzip___Win32_LIB_Release"\r
+# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_LIB_Release"\r
+# PROP Intermediate_Dir "Win32_LIB_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF "$(CFG)" == "minigzip - Win32 LIB Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "minigzip___Win32_LIB_Debug"\r
+# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_LIB_Debug"\r
+# PROP Intermediate_Dir "Win32_LIB_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ELSEIF "$(CFG)" == "minigzip - Win32 LIB ASM Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "minigzip___Win32_LIB_ASM_Release"\r
+# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_ASM_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_LIB_ASM_Release"\r
+# PROP Intermediate_Dir "Win32_LIB_ASM_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF "$(CFG)" == "minigzip - Win32 LIB ASM Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "minigzip___Win32_LIB_ASM_Debug"\r
+# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_ASM_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_LIB_ASM_Debug"\r
+# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "minigzip - Win32 DLL Release"\r
+# Name "minigzip - Win32 DLL Debug"\r
+# Name "minigzip - Win32 DLL ASM Release"\r
+# Name "minigzip - Win32 DLL ASM Debug"\r
+# Name "minigzip - Win32 LIB Release"\r
+# Name "minigzip - Win32 LIB Debug"\r
+# Name "minigzip - Win32 LIB ASM Release"\r
+# Name "minigzip - Win32 LIB ASM Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\minigzip.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\zconf.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\zlib.h\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
--- /dev/null
+# Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+# TARGTYPE "Win32 (x86) Static Library" 0x0104\r
+\r
+CFG=zlib - Win32 LIB Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "zlib.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 LIB Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "zlib - Win32 DLL Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "zlib - Win32 DLL Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "zlib - Win32 DLL ASM Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "zlib - Win32 DLL ASM Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "zlib - Win32 LIB Release" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "zlib - Win32 LIB Debug" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "zlib - Win32 LIB ASM Release" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "zlib - Win32 LIB ASM Debug" (based on "Win32 (x86) Static Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+\r
+!IF "$(CFG)" == "zlib - Win32 DLL Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "zlib___Win32_DLL_Release"\r
+# PROP BASE Intermediate_Dir "zlib___Win32_DLL_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_DLL_Release"\r
+# PROP Intermediate_Dir "Win32_DLL_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+CPP=cl.exe\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX /Yc /Yu\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX /Yc /Yu\r
+MTL=midl.exe\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+RSC=rc.exe\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
+# ADD LINK32 /nologo /dll /machine:I386 /out:"Win32_DLL_Release\zlib1.dll"\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "zlib___Win32_DLL_Debug"\r
+# PROP BASE Intermediate_Dir "zlib___Win32_DLL_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_DLL_Debug"\r
+# PROP Intermediate_Dir "Win32_DLL_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+CPP=cl.exe\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX /Yc /Yu\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX /Yc /Yu\r
+MTL=midl.exe\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+RSC=rc.exe\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /dll /debug /machine:I386 /out:"Win32_DLL_Debug\zlib1d.dll" /pdbtype:sept\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "zlib___Win32_DLL_ASM_Release"\r
+# PROP BASE Intermediate_Dir "zlib___Win32_DLL_ASM_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_DLL_ASM_Release"\r
+# PROP Intermediate_Dir "Win32_DLL_ASM_Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+CPP=cl.exe\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX /Yc /Yu\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "ASMV" /D "ASMINF" /FD /c\r
+# SUBTRACT CPP /YX /Yc /Yu\r
+MTL=midl.exe\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+RSC=rc.exe\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
+# ADD LINK32 /nologo /dll /machine:I386 /out:"Win32_DLL_ASM_Release\zlib1.dll"\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "zlib___Win32_DLL_ASM_Debug"\r
+# PROP BASE Intermediate_Dir "zlib___Win32_DLL_ASM_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_DLL_ASM_Debug"\r
+# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+CPP=cl.exe\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX /Yc /Yu\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "ASMV" /D "ASMINF" /FD /GZ /c\r
+# SUBTRACT CPP /YX /Yc /Yu\r
+MTL=midl.exe\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+RSC=rc.exe\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 /nologo /dll /debug /machine:I386 /out:"Win32_DLL_ASM_Debug\zlib1d.dll" /pdbtype:sept\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "zlib___Win32_LIB_Release"\r
+# PROP BASE Intermediate_Dir "zlib___Win32_LIB_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_LIB_Release"\r
+# PROP Intermediate_Dir "Win32_LIB_Release"\r
+# PROP Target_Dir ""\r
+CPP=cl.exe\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX /Yc /Yu\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT CPP /YX /Yc /Yu\r
+RSC=rc.exe\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "zlib___Win32_LIB_Debug"\r
+# PROP BASE Intermediate_Dir "zlib___Win32_LIB_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_LIB_Debug"\r
+# PROP Intermediate_Dir "Win32_LIB_Debug"\r
+# PROP Target_Dir ""\r
+CPP=cl.exe\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX /Yc /Yu\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT CPP /YX /Yc /Yu\r
+RSC=rc.exe\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo /out:"Win32_LIB_Debug\zlibd.lib"\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "zlib___Win32_LIB_ASM_Release"\r
+# PROP BASE Intermediate_Dir "zlib___Win32_LIB_ASM_Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Win32_LIB_ASM_Release"\r
+# PROP Intermediate_Dir "Win32_LIB_ASM_Release"\r
+# PROP Target_Dir ""\r
+CPP=cl.exe\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c\r
+# SUBTRACT BASE CPP /YX /Yc /Yu\r
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "ASMV" /D "ASMINF" /FD /c\r
+# SUBTRACT CPP /YX /Yc /Yu\r
+RSC=rc.exe\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "zlib___Win32_LIB_ASM_Debug"\r
+# PROP BASE Intermediate_Dir "zlib___Win32_LIB_ASM_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Win32_LIB_ASM_Debug"\r
+# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"\r
+# PROP Target_Dir ""\r
+CPP=cl.exe\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c\r
+# SUBTRACT BASE CPP /YX /Yc /Yu\r
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "ASMV" /D "ASMINF" /FD /GZ /c\r
+# SUBTRACT CPP /YX /Yc /Yu\r
+RSC=rc.exe\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo /out:"Win32_LIB_ASM_Debug\zlibd.lib"\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "zlib - Win32 DLL Release"\r
+# Name "zlib - Win32 DLL Debug"\r
+# Name "zlib - Win32 DLL ASM Release"\r
+# Name "zlib - Win32 DLL ASM Debug"\r
+# Name "zlib - Win32 LIB Release"\r
+# Name "zlib - Win32 LIB Debug"\r
+# Name "zlib - Win32 LIB ASM Release"\r
+# Name "zlib - Win32 LIB ASM Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\adler32.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\compress.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\crc32.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\deflate.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\gzio.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\infback.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\inffast.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\inflate.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\inftrees.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\trees.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\uncompr.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\win32\zlib.def\r
+\r
+!IF "$(CFG)" == "zlib - Win32 DLL Release"\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Debug"\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ENDIF \r
+\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\zutil.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\crc32.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\deflate.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\inffast.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\inffixed.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\inflate.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\inftrees.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\trees.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\zconf.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\zlib.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\zutil.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\win32\zlib1.rc\r
+# End Source File\r
+# End Group\r
+# Begin Group "Assembler Files (Unsupported)"\r
+\r
+# PROP Default_Filter "asm;obj;c;cpp;cxx;h;hpp;hxx"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\contrib\masmx86\gvmat32.asm\r
+\r
+!IF "$(CFG)" == "zlib - Win32 DLL Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"\r
+\r
+# Begin Custom Build - Assembling...\r
+IntDir=.\Win32_DLL_ASM_Release\r
+InputPath=..\..\contrib\masmx86\gvmat32.asm\r
+InputName=gvmat32\r
+\r
+"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+ ml.exe /nologo /c /coff /Cx /Fo"$(IntDir)\$(InputName).obj" "$(InputPath)"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Debug"\r
+\r
+# Begin Custom Build - Assembling...\r
+IntDir=.\Win32_DLL_ASM_Debug\r
+InputPath=..\..\contrib\masmx86\gvmat32.asm\r
+InputName=gvmat32\r
+\r
+"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+ ml.exe /nologo /c /coff /Cx /Zi /Fo"$(IntDir)\$(InputName).obj" "$(InputPath)"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Release"\r
+\r
+# Begin Custom Build - Assembling...\r
+IntDir=.\Win32_LIB_ASM_Release\r
+InputPath=..\..\contrib\masmx86\gvmat32.asm\r
+InputName=gvmat32\r
+\r
+"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+ ml.exe /nologo /c /coff /Cx /Fo"$(IntDir)\$(InputName).obj" "$(InputPath)"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Debug"\r
+\r
+# Begin Custom Build - Assembling...\r
+IntDir=.\Win32_LIB_ASM_Debug\r
+InputPath=..\..\contrib\masmx86\gvmat32.asm\r
+InputName=gvmat32\r
+\r
+"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+ ml.exe /nologo /c /coff /Cx /Zi /Fo"$(IntDir)\$(InputName).obj" "$(InputPath)"\r
+\r
+# End Custom Build\r
+\r
+!ENDIF \r
+\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\contrib\masmx86\gvmat32c.c\r
+\r
+!IF "$(CFG)" == "zlib - Win32 DLL Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+# ADD CPP /I "..\.."\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+# ADD CPP /I "..\.."\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"\r
+\r
+# ADD CPP /I "..\.."\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Debug"\r
+\r
+# ADD CPP /I "..\.."\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+# ADD CPP /I "..\.."\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+# ADD CPP /I "..\.."\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Release"\r
+\r
+# ADD CPP /I "..\.."\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Debug"\r
+\r
+# ADD CPP /I "..\.."\r
+\r
+!ENDIF \r
+\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\contrib\masmx86\inffas32.asm\r
+\r
+!IF "$(CFG)" == "zlib - Win32 DLL Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"\r
+\r
+# Begin Custom Build - Assembling...\r
+IntDir=.\Win32_DLL_ASM_Release\r
+InputPath=..\..\contrib\masmx86\inffas32.asm\r
+InputName=inffas32\r
+\r
+"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+ ml.exe /nologo /c /coff /Cx /Fo"$(IntDir)\$(InputName).obj" "$(InputPath)"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Debug"\r
+\r
+# Begin Custom Build - Assembling...\r
+IntDir=.\Win32_DLL_ASM_Debug\r
+InputPath=..\..\contrib\masmx86\inffas32.asm\r
+InputName=inffas32\r
+\r
+"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+ ml.exe /nologo /c /coff /Cx /Zi /Fo"$(IntDir)\$(InputName).obj" "$(InputPath)"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Release"\r
+\r
+# Begin Custom Build - Assembling...\r
+IntDir=.\Win32_LIB_ASM_Release\r
+InputPath=..\..\contrib\masmx86\inffas32.asm\r
+InputName=inffas32\r
+\r
+"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+ ml.exe /nologo /c /coff /Cx /Fo"$(IntDir)\$(InputName).obj" "$(InputPath)"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Debug"\r
+\r
+# Begin Custom Build - Assembling...\r
+IntDir=.\Win32_LIB_ASM_Debug\r
+InputPath=..\..\contrib\masmx86\inffas32.asm\r
+InputName=inffas32\r
+\r
+"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+ ml.exe /nologo /c /coff /Cx /Zi /Fo"$(IntDir)\$(InputName).obj" "$(InputPath)"\r
+\r
+# End Custom Build\r
+\r
+!ENDIF \r
+\r
+# End Source File\r
+# End Group\r
+# Begin Source File\r
+\r
+SOURCE=.\README.txt\r
+# End Source File\r
+# End Target\r
+# End Project\r
--- /dev/null
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r
+\r
+###############################################################################\r
+\r
+Project: "example"=.\example.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+ Begin Project Dependency\r
+ Project_Dep_Name zlib\r
+ End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "minigzip"=.\minigzip.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+ Begin Project Dependency\r
+ Project_Dep_Name zlib\r
+ End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "zlib"=.\zlib.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
--- /dev/null
+
+To build zlib using the Microsoft Visual C++ environment,
+use the appropriate project from the projects/ directory.