Petite 2.3 - Copyright (c) 1998-2005 Ian Luck. All rights reserved.

Files that you should have found in the Petite package
======================================================
PETITE.EXE    The Petite executable (console version)
PETGUI.EXE    The Petite executable (GUI version)
PETITE.TXT    This file
FILE_ID.DIZ   BBS description file


What's the point?
=================
Petite is a Win32 (Windows 9x/NT/etc) executable compressor. It allows
compression of the whole executable - code, data and resources. Petite
automatically decides which parts of the executable can be compressed
and which parts need to be left as they are. The compressed output
executable can be run as if it was the original uncompressed version.


Why "Petite"?
=============
The file format of Win32 executables is called the "Portable Executable"
file format, "PE" for short. Petite means "of small and dainty build",
which kind of describes the executables after they've been compressed!
And, Petite obviously begins with "PE"! Clever huh? :)


Main Features
=============
* Compresses all Win32 PE files
- including EXE, DLL, DRV etc...

* Automatic compression decision making
- decides which parts are compressable and which are not

* Resource compression
- user selectable which resource types to compress

* 100% Assembler decompression code
- no noticeable delay at load time in most cases

* Virus/tampering checking
- the compressed files automatically check themselves when executed

* Command-line version...
- allows use from within compilers and makefiles

* ... and a GUI version
- quick and easy to use


Command-Line Options (console version)
======================================
-i     Display file information:
       Displays a list of the sections in the file and a list of the
       resource types used. Also displays information on how much of
       the file is compressable.
-<0-9> Set the compression level
       As the level gets higher the compression gets better, but you'll
       need a fast computer (or a lot of time) when using the highest
       levels! (default: 0) NOTE: The compression level has no effect
                                  on the decompression speed.
-o<file> Set output filename:
       Sets the compressed output filename.
-b<0|1> switch: Backup original file:
       Renames the original file to "file.BAK". Backups are disabled
       when the "-o" option is used. 0=OFF, 1=ON (default: ON)
-t<0|1> switch: Compress import tables
       If files don't work after compression, try switching this OFF.
       0=OFF, 1=ON (default: ON)
-e<0|1|2> switch: Compress exports
       If files don't work after compression, then try switching this.
       0=OFF, 1=ON, 2=ON+EXE TABLES (default: ON)
         ON: The exports are compressed, but not the export table.
         ON+EXE TABLES: The exports AND export table are compressed when
                        compressing EXEs. The table is never compressed
                        in DLLs as the DLLs would then not be importable.
-s<0|1|2> switch: Strip relocations
       0=OFF, 1=EXE ONLY, 2=ALWAYS (default: EXE ONLY)
         OFF: The relocation information is retained.
         EXE ONLY: Any relocation information is stripped from EXEs,
                   but retained in DLLs.
         ALWAYS: The relocation information is always stripped. Only
                 use this when you are sure that a DLL will never need
                 to be relocated.
-r<res1,res2,res3...> Select resource types for compression:
       (default: NONE) ... SEE BELOW FOR DETAILS
-x<res1,res2,res3...> Select resource types for NON-compression:
       Excludes the selected resource types from compression, this is
       only really useful when using the "-r*" option.
-m<0|1> switch: Mangle import tables
       Messes up the import tables during run-time. This may not work with
       files that import data items. 0=OFF, 1=ON (default: ON)
-v<0|1> switch: Virus checking
       Makes the compressed files check themselves for virus infection
       every time they are executed. 0=OFF, 1=ON (default: ON)
-a     Align the file to 4k boundary
       This improves loading speed in Windows 98, but it also increases
       the size... not recommended for use with small files.
-p<0|1> switch: Display compression progress:
       Disables/enables the displaying of the compression progress
       counter. 0=OFF, 1=ON (default: ON)
-y     Overwrite existing files
-n     Don't overwrite existing files
-shell Register shell extension
       This allows you to compress an EXE/DLL file by simply right-clicking
       on it in Windows Explorer. You may also choose the options to be used,
       by specifying them at the same time as this option... For example,
       "Petite -shell -b0" will register the shell extension, and when used,
       Petite will not create backups.
-shellx Unregister shell extension

NOTE: You can use wildcards and multiple filenames in the command-line.
      If you use a filename with any spaces then the whole filename must
      be enclosed in quotes.
      Valid examples:
               petite *.exe -b0 -r* -xTYPELIB
               petite "my file.dll" -ob.dll
               petite a.drv b* c.exe -1
               petite -y "*.dll" -b0 -5
               petite a*.exe b.exe -p0 -e2

TIP: To produce the smallest files, use the "-r**" and "-e2" command-line
     options. Obviously, using higher compression levels also produces
     smaller files.


Compressing Resources
=====================
All resources are grouped into types, which can be either a number or a
word. To see a list of the resource types used in a file you should run
Petite using the "-i" (display information) and "-r" (compress resources)
options. eg: petite blah.exe -i -r

The resource types selected for compression must be seperated by a comma
without any spaces.   Valid examples:
         petite ... -r2          compress only bitmaps
         petite ... -r2,10       compress bitmaps and user data
         petite ... -rmytype     compress "mytype" resources
         petite ... -r2,mytype   compress bitmaps and "mytype" res
         petite ... -r*          compress all resources except 3,14,22,16

Common resource types are listed below. It is recommended that you don't
compress icon resources (types 3,14,22), otherwise the program's icon will
not be visible in the Start menu or a directory listing. Also, version
information (type 16) should not be compressed as it would be needed if a
program wanted to check the version of the file. "*" can be used to
respresent all resource types other than version information and icons
(types 3,14,22,16). "**" can be used to represent all resource types other
than version information and all but the 1st icon. You can also use the
"-x" option to select other types to exclude from compression.

Whichever resources you choose to compress, you should make sure the new
compressed file loads properly before deleting the original file. It is
probably wise to be on the safe side and test all files you compress with
Petite before deleting the original.

Standard Resource Types
-----------------------
1    Cursor
2    Bitmap
3    Icon
4    Menu
5    Dialog
6    String
7    Font directory
8    Font
9    Accelerator
10   User resource data
11   Message table
12   Cursor directory
14   Icon directory
16   Version info
21   Animated cursor
22   Animated icon


Building an excutable with Petite
=================================
Because Petite is command-line driven it can easily be used within a
compiler's build process or makefile. The only extra things you have
to do is use the "-p0" (progress off) option and possibly the "-y"
(overwrite) option.

Using Petite with Visual C++
----------------------------
1) Open the "Project Settings" dialog (press Alt-F7) and select the
   project configuration you wish to produce a compressed executable.
2) Goto the "Link" page and remove the ".exe" extension from the
   "Output file name". eg: "Release/blah.exe" -> "Release/blah"
3) Goto the "Custom Build" page and enter the following "Build command":
     "petite -p0 -y $(InputPath) -o$(InputPath).exe" (+extra options)
4) Enter the following "Output file":
     "$(InputPath).exe"

If you wish to compress a DLL, rather than an EXE, then replace all cases
of "exe" above with "dll".

NOTE: You should make sure Petite is in the path. This is most easily
      achieved by copying PETITE.EXE into the Windows directory.


Compressed files not working?
=============================
Some compressed files may not work, there are a few possible reasons for
this. If you do find a file that does not work after compression, try
checking these causes. If you know that none of these cases apply to the
file in question, then please send details (email at end of this file).

Extra data attached (not fixable)
---------------------------------
Some files, noteably installation packages, have data attached to the
end of the file. This data is stripped by Petite as it is not part of
the EXE structure. If the extra data is of importance to the file, not
debug info or other unnecessary data, then this may mean that the
compressed file does not work. Petite will display a warning message
if it finds any additional data at the end of a file.

Exports called before decompression (possibly fixable)
------------------------------------------------------
Sometimes, very rarely, an EXE will link to a DLL that will inturn call
back a function in the EXE. The problem is that the DLL is linked to the
EXE by the system before the EXE can decompress itself. Obviously, if
the EXE has not yet been decompressed, the DLL ends up calling a load of
rubbish and the program will crash.

You can try switching off "Export Compression" ("-e0" option). This may
vastly reduce the compression results, and the compressed program may
still not work if the function that's called back needs to access data
from a compressed part of the file.

Resources accessed before decompression (always fixable)
--------------------------------------------------------
This problem is similar to the previous exports problem, except this time
a linked DLL is trying to access a resource before it's been decompressed.
Obviously, this can only be a problem if you have compressed a resource
that the DLL is trying to access. 

Unlike the exports problem, this problem is always fixable. You should try
without compressing resources, if the compressed file works then you should
try to find which resource is causing the problems. You can do this by
compressing the different resources one by one and seeing which ones stop
the file working. Then simply compress the file, without compressing the
problem resource(s).

If the problem file has a resource type called "TYPELIB", then try without
compressing this resource type first.

Modification detection (not fixable)
------------------------------------
If the EXE has some built-in modification detection, then the chances are
it will detect that the file has been "modified", and it will probably
refuse to work. Obviously, there are no fixes to this and these files are
uncompressable.

Data item importing (always fixable)
------------------------------------
If the file imports data items from a DLL, then import table mangling could
cause problems. Try disabling the import mangling option.


Decompression?
==============
There is no Petite decompressor. So if it is not possible for you to
re-install or re-compile a file, then you should keep a backup of the
original incase you should want to go back to it at any time.


Latest Version
==============
The latest version of Petite can always be found at the Petite website:

    http://www.un4seen.com/petite/


Licensing Details
=================
Once you have licensed Petite you will be licensed for life, you will
be able to use all future versions. One license covers one person/entity
and is non-transferable. Petite is distributed fully functional to allow
users to test it properly without limitation, so upon registration you
will receive only a confirmation that you are a licensed user.

There are three license options - STANDARD, SHAREWARE or COMMERCIAL.
A STANDARD license allows you to use Petite to compress files for your
own use on your own computer. It also allows you to distribute Petite
compressed files in your freeware products (you charge no fee for them).
The SHAREWARE license allows you to do the same as the standard, plus
you can distribute Petite compressed files in your shareware products.
The COMMERCIAL license allows all that the shareware license does, plus
you can distribute Petite compressed files in your commercial/retail
products.

Please make sure you choose the right license for your purposes.

If you have any questions about licensing you can email:
	petite@un4seen.com

Visit the Petite website for the latest pricing and online registration
options:

    http://www.un4seen.com/petite/


Copyright, Disclaimer etc...
============================
This software is provided as-is, without warranty of ANY KIND,
either expressed or implied, including but not limited to the implied
warranties of merchantability and/or fitness for a particular purpose.
The author shall NOT be held liable for ANY damage to you, your
computer, or to anyone or anything else, that may result from its use,
or misuse. Basically, you use it at YOUR OWN RISK.

Use of this software indicates that you agree to the above conditions.

You may freely copy and distribute Petite as long as NO FEE is charged
and all the files remain intact AND unmodified.

All trademarks and other registered names contained in the Petite
package are the property of their respective owners.


Credits
=======
Parts of the compression system used in Petite are developed from the
ZLIB library by Jean-loup Gailly & Mark Adler.


History
=======
2.3 - 27/2/2005
---------------
* Improved ratios
* Fix for occasional "DEP" (Data Execution Prevention) issues
* A few other little improvements/fixes

2.2 - 15/12/99
--------------
* GUI version
* "-r**" compress all but 1st icon option
* "-s" strip relocations option
* "-m" mangle imports option
* A few more improvements/fixes

2.1 - 13/5/99
-------------
* A few improvements/fixes

2.0 - 19/4/99
-------------
* Improved ratios
* Shell extension
* "-e2" (ON+EXE TABLES) exports option
* "-a" alignment option
* "-l" option removed
* A load of other little improvements

1.4 - 27/1/99
-------------
* Improved ratios
* Reduced image overhead

1.3a - 13/11/98
---------------
* A couple of bug fixes

1.3 - 8/11/98
-------------
* More re-structuring
* "-f" option removed, now permanently ON
* Virus/tampering checking
* "-x" option
* A few other minor improvements/fixes

1.2 - 25/6/98
-------------
* Further optimized decompression code
* Petite becomes a Win32 only executable (no longer DOS)
* Fixed NT bug, and a few other special case bugs

1.1 - 27/5/98
-------------
* Data moving
* Resource type "*"
* Fixed occasional section joining bug

1.0 - 22/5/98
-------------
First Release


Bug Reports, Suggestions, Coments, Problems etc...
==================================================
If you have any of the aforementioned you can email:

        petite@un4seen.com

