Document Crunch-Mania V1.91 User's Guide Crunch-Mania User's Guide Registered / Test Version 1.91 - 11.02.94 Written by Thomas Schwarz Copyright (c) 1991-94 by Thomas Schwarz All rights reserved 1. Introduction ================ 1.1. Copyright & Registration ------------------------------ Crunch-Mania is Copyright (c) 1989-94 by Thomas Schwarz. It was released under the concept of "Shareware". All versions until V1.6 are Public Domain, but starting with V1.7 they are Shareware. I have released a test version that may be spread to give you a hint on the program's abilities. If, after a testing period of some weeks, you find this program useful, please register. By cooperating with this concept you help to ensure continued development of this product. Registered Users will receive the latest release version of Crunch-Mania, a faster library, the latest version of RTDD, includes and autodocs for the CrM.library and separate decrunch sourcecodes (in Assembler). The registered version has no annoying registration requesters and has some more features which are ghosted in the test version. No person(s) or businesses other than the author are authorized to accept any registration or distribution fees in any form whatsoever, except as specified by the author. Only people who have sent US 20, DM 30 or more to the following address will be regarded as registered users. Only these two currencies and only bank-notes will be accepted. Thomas Schwarz Dammstrasse 12 70806 Kornwestheim Germany Just put the money in an envelope together with some piece of paper with your request and your address on it or print out the orderform and then post it to me. Delivery may take two to eight weeks. Usually you will be sent your registered version right away, but if a new version is imminent to be completed, you will get that one as soon as it becomes available. I am still searching for somebody or a company who distributes this program as a commercial product, so I can spend my time in developing new features and not in pasting stamps on envelopes. So be free to contact me to relieve my pain! The reqtools.library this program uses starting with V1.8 is copyright 1991/1992 by Nico François. That's what I call cool! 1.2. Distribution ------------------ Basically, the test version of Crunch-Mania may be distributed freely as long as the following conditions are met: The Distributor may only charge a fee up to the costs of obtaining any common public domain disk. The distributor agrees to stop distributing the programs and data involved on request of the author. The distributor may only distribute an unmodified copy of the original program, with all the supplied documentation and copyright notices left intact. 1.3. Support ------------- If you have any suggestions, bug reports or questions, please contact the author at the above address. When sending bug reports, please describe exactly under what circumstances the bug occured, what equipment was used and what happened. If possible also try to give me enough information to reproduce the bug. It is very difficult to find bugs when you don't know exactly what happened. Please don't just send messages like "my machine sometimes crashes when I try to load xxx", that really doesn't help me. If possible, submit the offending file in crunched and original state to me so I can test it myself, or give me a pointer where I can find the files. 1.4. License ------------- 1. This license applies to the product called "Crunch-Mania", a set of programs for the Commodore-Amiga computer, published by Thomas Schwarz under the concepts of ShareWare, and the accompanying documentation, example files and anything else that comes with the original distribution. The terms "Programs", "Crunch-Mania" and "CrM" below, refer to this product. The licensee is addressed as "you". 2. You may copy and distribute verbatim copies of the programs' executable code and documentation as you receive it, in any medium, provided that you conspicuously and appropriately publish only the original, unmodified programs, with all copyright notices and disclaimers of warranty intact and including all the accompanying documentation, example files and anything else that came with the original. 3. You may not copy and/or distribute these programs without the accompanying documentation and other additional files that came with the original. You may not copy and/or distribute modified versions of these programs. 4. You may not copy, modify, sublicense, distribute or transfer the programs except as expressly provided under this license. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the programs is void, and will automatically terminate your rights to use the programs under this license. However, parties who have received copies, or rights to use copies, from you under this license will not have their licenses terminated so long as such parties remain in full compliance. 5. By copying, distributing and/or using the programs you indicate your acceptance of this license to do so, and all its terms and conditions. 6. Each time you redistribute the programs, the recipient automatically receives a license from the original licensor to copy, distribute and/or use the programs subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. 7. You may not disassemble, decompile, re-source or otherwise reverse engineer the programs. 8. You may use the programs for a period of up to 30 days for testing purposes. After that, you have to register. 9. If you wish to incorporate parts of the programs into other programs, write to the author to ask for permission. 10. You agree to cease distributing the programs and data involved if requested to do so by author. 11. You may charge a fee to recover distribution costs. The fee for diskette distribution may not be more than the cost to obtain any common public domain disk. 12. Only the test version is intended to be distributed, the registered version may only be used by registered users and nobody else. 1.5. Disclaimer ---------------- THERE IS NO WARRANTY FOR THE PROGRAMS, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAMS "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAMS IS WITH YOU. SHOULD THE PROGRAMS PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY REDISTRIBUTE THE PROGRAMS AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAMS (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAMS TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 1.6. Future Plans ------------------ The program is planned to be a real multi-talent. So a disk archiver and a files archiver will be added as soon as I have any spare time. But my special attention will be given to the development of faster and more effective algorithms. Another goal is to adapt the GUI to Commodore's styleguide rules. If you register and support my program, you will speed up the release of new and better versions. If there is little demand I may drop this project and start coding something else and that would be a great pity. 1.7. Why buy the registered Version? ------------------------------------- Well, first of all you should buy the registered version, if you use this program for a longer time. With a registration you will support future releases. The registered version is faster both in crunching and in decrunching. With the registered version you can decrunch reloc files and not only data files. Registered users get the latest version of my run-time-data-decruncher (RTDD) which is very useful e.g. for crunching icons or include files, they will be automatically decrunched. The source code of the decruncher is also provided to be implemented in your own releases. Registered users receive a library that crunches and decrunches faster. A registered user gets the latest version of this product plus the next version as soon as it gets available! A program worth using is a program worth buying! 2. General Information ======================= 2.1. Outward Appearance ------------------------ The program opens a 2 planes intuition screen which is *NOT* a public screen. It uses the intuition.library for full multitasking compatiblity, the gadtools.library for nicer gadgets and menus and the reqtools.library ((c) Nico Francois) for nice requesters. It is self-detaching so you do not need to call it with "run". You can either run it from CLI or from the Workbench. The program is controlled by gadgets and menus. On the right side there is an area for tables and error messages and at the bottom there is a statusline combined with a percentage display which indicates what the program is just doing. 2.2. Numbers Input & Output ---------------------------- Input: You can enter hex and decimal numbers, but hexadecimal numbers are only recognized with a leading "$". To get negative numbers put a "-" at the beginning of the line. An empty gadget has the same effect as one with a zero, sometimes this also means that you want to disable this option, e.g. an empty "Stack At"-gadget means that you don't want to set the stack to a special address. Some extra functions can be reached by entering chars instead of numbers. Output: The output follows the same rules as the input: a "$" indicates a hexadecimal number, the rest is decimal. But there is one exception: while loading executables in the Address- or Link-Mode the dehunker displays hexadecimal numbers without a leading "$". This has not been forgotten but left out as a result of lack of space. 2.3. System Requirements ------------------------- For packing small files 512KB may suffice but the full power of this program can only be obtained with at least 1MB memory resulting from 200-400KB of tables depending on the version, the crunchmode and the offset. Two drives are comfortable but not necessary. No problems have occured under Kickstart 1.2, 2.0 and 3.0, so it should also work under 1.3, 2.x and 3.x+. 2.4. Other Information ----------------------- There are no known bugs. Nevertheless the author is in no way liable for any errors and gurus invoked by the Program. In most cases the user himself produces the errors by misusing the Program. This document will only deal with the important things. Understanding minor details like Filelen is expected. These things are left out. 2.5. A Word on the Keys ------------------------ You may invoke actions by pressing special keys. These actions are the same as the corresponding gadgets would cause. The key that stands for a certain gadget is underlined in the text next to or in the gadget. When pressing a key, the gadget behaves as if you had used the mouse, i.e. it looks like being pressed down. In this state no actions have yet happened, you may cancel your choice by pressing one of the keys. Otherwise the action will be performed as supposed. Only one key at the same time is regarded as pressed, keys that are pressed while an other key is still pressed will be ignored. 3. CLI-Options, Menus & Gadgets ================================ 3.1. Command Line Options -------------------------- Here is a list of all options and parameters available and adjustable via the CLI. The same options can be used in the configuration file "S:CrM.cfg". This file is processed before the command line, so you can change your defaults via the CLI. A "+" instead of a "-" in front of the option reverses the result. 3.1.1. - CLI Help ----------------------- This option lists all currently available options in the CLI to give you a brief overview of what you can do there and then asks for a new command line. This option has to be the first in the command line and no other options may be specified with it. EXAMPLE 1> CrM ? Crunch-Mania V1.9r - Copyright (c) 1991-93 Thomas Schwarz Command Line Options: . : Enter Command Line: (Well, with -codes this looks a bit nicer) 3.1.2. <-c> - Set Screen Colors -------------------------------- With this option followed by four hexadecimal numbers you can set your own personally preferred screen colors fitting your needs. The highest nibble of each number stands for the red part of the color, the mid nibble for the green part and the lowest nibble for the blue part. EXAMPLES 1> CrM -c$889 $2 $ccd $358 ;These are the default colors. or 1> CrM -c$0 $bbb $2a2 $137 3.1.3. <-d> - Enable Auto Makedir ---------------------------------- This option comes into effect when you crunch whole directories or use the multiselect feature of the filerequester and you select a subdir. When this option is active this dir will be automatically created when CrM tries to access a file located in this dir, otherwise there will appear an information requester. When you deny this requester the whole dir is skipped. EXAMPLES 1> CrM +d ;lets a requester appear 3.1.4. <-e> - Set Extra Mem Size --------------------------------- As this program does not support floating compression, the source and destination memory blocks overlap to reduce the memory needed. Extra Mem specifies the distance between the two blocks. The error message "File not crunchable!!!" indicates that the cruncher would have overwritten some data which has not yet been processed with crunched data. Nevertheless you can crunch those files by setting extra mem to a higher value, but the files usually then become longer than the original. Extra Mem may be set by the option <-e> directly followed by a number in the range from 100 to 10000. Default is 100. EXAMPLES 1> CrM -e100 ; Sets Extra Mem to 100 or 1> CrM -e$200 ; Sets Exrta Mem to 512 3.1.5. <-f> - Enable LED-Flash ------------------------------- While packing the power-LED flashes to show the user that the program is working. As you certainly know, the power-LED also steers the low-pass filter for the four audio channels. This may lead to an annoying sound when listening to a tune while crunching. To prevent this you can disable the flickering with the option <+f>, default is on. EXAMPLE 1> CrM -f ;Enable LED-Flash (default) 3.1.6. <-g> - Enable Segment-BPTRs ----------------------------------- This option only comes into effect in the address and link modes. There you can relocate executable to a certain address. The dos.library does the same but it adds the lenght of a hunk and the pointer to the next hunk in memory to all hunks. Normally this is only for internal DOS use, but some programs use these BPTRs to calculate the addresses of their hunks. You can enable the creation of BPTRs with this option so that these programs don't crash any more. As you don't need this option very often the default setting is off. EXAMPLE 1> CrM -g ;now BPTRs are created 3.1.7. <-h> - Set Huffman Buffer Size -------------------------------------- This option can be used to set the size of the buffer used in the LZ-Huffman compression mode for collecting statistics. The size of this buffer affects the compression ratio in unpredictable ways. As a general rule, keep this at the default, but if you are compressing homogenous data with an approximately fixed relative frequency of symbols (like text files), setting this to a large value will improve compression. Binaries generally compress best with the default setting. The Huffman buffer may be of any size between 4K and 64K and must be specified immediately following the <-h> string, in kilobytes. EXAMPLE 1> CrM -h32 ;Sets the Huffman buffer size to 32768 (32K) ;bytes The default Huffman buffer size is 16K. 3.1.8. <-i> - Set Subdir-Level ------------------------------- CrM takes care of this option when you want to crunch an entire directory or use the multiselect feature of the filerequester and select dirs. This number specifies the level upto which the dirs are scanned. The number follows immediately after the "-i", see examples for more details. Accepted values range from "-1" to "127". Let's say you want to crunch the whole ramdisk and let's say yours looks like mine below. If you specify "-1" as number the whole ramdisk will be compressed. If you enter "0" only "dirlist" will be crunched because it is the only file in the rootdir. When you take "1" as the number CrM will crunch "dirlist" and the files "ASM-One.Pref" to "ZOOMOPTS" in the env directory. Taking "2" as number will have the same effect as "-1" (in this example case). RAM DISK: ENV (dir) GadToolsBox (dir) GadToolsBox.prefs egs (dir) mouse.prefs Sys (dir) floppy.prefs font.prefs icontrol.prefs input.prefs locale.prefs overscan.prefs palette.ilbm pointer.ilbm printer.prefs printergfx.prefs printerps.prefs screenmode.prefs serial.prefs sound.prefs sysfont.prefs wb.pat wbconfig.prefs wbfont.prefs win.pat ASM-One.Pref NEWLIST_LANG TERMPATH xprascii xprzspeed ZedZapWindow ZOOMOPTS Clipboards (dir) T (dir) dirlist EXAMPLES 1> CrM -i-1 ;take whole directory 1> CrM -i1 ;crunch sourcedir and the files of the dirs ;in it Default is -1 (scan entire directory). 3.1.9. <-I> - Ignore Configfile -------------------------------- In the configuration file "S:CrM.cfg" you may specify your own personal default settings which are loaded immediately after the start of the program. This option prevents CrM from loading the config file what may come in handy when you don't have your boot disk inserted. This option has to be the first in the command line but others may also be set there. EXAMPLE 1> CrM -I +r ;don't load config file and don't load reqtools.library 1> CrM -I ;don't load config file and use internal defaults ;instead 3.1.10. <-p> - Set Taskpriority -------------------------------- This value sets the taskpriority of the background task which is responsible for loading, crunching and saving. The task handling the windows, menus and gadgets always has a higher priority so that it is not frozen while crunching. Nevertheless you have to select the priority wisely because high priorities will interfere multitasking which makes this machine so powerful! This value ranges from "-128" to "126". EXAMPLE 1> CrM -p-5 ;Set Pri to -5 Default is -1. 3.1.11. <-r> - Enable reqtools.library --------------------------------------- The reqtools.library is loaded by default and is used for user communication. When you are short of memory you may prevent CrM from loading it with the option <+r>. The reqtools.library is copyright Nico Fracois. It is used for filerequesters, numberrequesters and informationrequesters. CrM can operate without this library, but it is more comfortable to use it. 1> CrM +r ;don't open reqtools.library 3.1.12. <-s> - Enable Sample Encoding -------------------------------------- This feature is especially designed for compressing 8-Bit samples. Generally this option will only reduce the crunched size with samples as this algorithm is comparable with delta-encryption. It calculates the relative difference between two bytes instead of the absolute values. Now imagine a sine wave. The difference between two bytes is in the range of -4 to +4, but the absolute values go from -128 to +127. The algorithm will convert the file into one with about 20 different values instead of 256. To give you a hint on the efficiency of this algorithm I have put up the following chart. The files are standard 31 Instruments Protracker modules taken from the "Mayday Attack Vol. II" packed with the LZ-Huffman compression algorithm. The proportional numbers reflect the saved bytes. Name | Original | Sample-Mode=Off | Sample-Mode=On -----------------------+----------+-----------------+---------------- mod.acid_yell | 230764 | 19.7% 185338 | 27.0% 168350 mod.badada | 112742 | 35.1% 73196 | 41.2% 66338 mod.flatliner | 140886 | 29.3% 96648 | 47.8% 73612 mod.fuck_you! | 142652 | 24.8% 107238 | 33.3% 95202 mod.gotta_speed | 108594 | 21.4% 85338 | 33.7% 71992 mod.hard_attack | 108100 | 47.0% 57260 | 54.6% 49118 mod.leck_mich_am_arsch | 125486 | 39.0% 76528 | 46.3% 67338 mod.something_big | 162756 | 19.5% 131092 | 27.2% 118556 mod.world_of_terror | 102114 | 48.2% 52932 | 51.8% 49174 mod.you_gotta_believe | 85092 | 24.7% 64084 | 26.6% 62490 -----------------------+----------+-----------------+---------------- Total | 1319186 | 29.5% 929654 | 37.7% 822170 EXAMPLE 1> CrM -m ;Enable Sample Encoding Default is off, as most files compress worse with it. 3.1.13. <-t> - Set Textbuffersize ---------------------------------- This value specifies the size of the history buffer in lines. On Kick1.2/1.3 this value is fixed to 18, as my version of the gadtools13.library always crashed when I tried to scroll the outputfield whith the slider next to it. You may enter values from "18" to "999". EXAMPLE 1> CrM -t200 ;Set history size to 200 lines Default is 100. 3.1.14. <-u> - Enable Free Mem Updating ---------------------------------------- The title bar of the screen or the window displays the currently available unused memory. This display is updated every 1/10 second. You can disable this with <+u> to gain a bit more speed, but it's not very much. EXAMPLE 1> CrM +u ;no updating 3.1.15. <-y> - Enable Data Encryption -------------------------------------- Starting with CrM V1.9 you have the possiblity to encrypt your data with a password. You have to enter this password when the crunching is finished. You will see only spaces in the requester, therefore you have to enter it twice to be sure that you have entered it correctly. Currently this only works in the Data-Mode, in all other modes the state of this flag is ignored. EXAPMLE 1> CrM -y ;Enable pw encryption Default is off. 3.2. Menu Options ------------------ In the following lines the functions of the menus are described. Menus are accessible via the right mousebutton. 3.2.1. Project Menu -------------------- In this menu the basic operations have found their place. They have the same effect as the corresponding gadgets, just for people who like menus more than gadgets. For "About" and "Save Prefs" there is no corresponding gadget. 3.2.2. About - ----------------------- This will display the text that is shown when you start the program. When the reqtools.library is active a requester is called instead. In the registered version this requester also displays the user's address. 3.2.3. Load File - ----------------------- Load a File, has the same function as Load gadget, see `Load'. 3.2.4. Crunch - ----------------------- Crunch the loaded data, has the same function as Crunch gadget, see `Crunch'. 3.2.5. Save File - ----------------------- Save a File, has the same function as Save gadget, see `Save'. 3.2.6. Save Prefs ------------------ This function has no equivalent gadget. It creates the config file "S:CrM.cfg" and saves the current status of the menus to it. You may edit the created file with any texteditor for the prefs are saved as normal ASCII-text. 3.2.7. Iconify - ----------------------- Close screen and window and open a small window on the workbench screen, same effect as Iconify Gadget, see `Iconify'. 3.2.8. Quit - ----------------------- Leave Crunch-Mania, same as Quit gadet, see `Quit'. NOTE: you have to press when using the keyboard shortcut. 3.2.10. Options Menu --------------------- This menu contains several preferences and values that are used in the program. There are no corresponding gadgets, so you have to use the menu. Some options are disabled when the the reqtools.library is not active. 3.2.11. Free Mem Update ------------------------ See `<-u> - Enable Free Mem Updating' for details. Default is on. 3.2.12. reqtools.library ------------------------- See `<-r> - Enable reqtools.library' for details. Default is on. 3.2.13. Segment-Ptrs --------------------- Consult `<-g> - Enable Segment-BPTRs' for more information. Default is off. 3.2.14. LED-Flash ------------------ See `<-f> - Enable LED-Flash' for further information. Default is on. 3.2.15. Sample-Mode -------------------- See `<-s> - Enable Sample Encoding' for more details. Default is off. 3.2.16. Encrypt Data --------------------- See `<-y> - Enable Data Encryption' for datails. Default is off. 3.2.17. Auto Makedir --------------------- See `<-d> - Enable Auto Makedir' for details. Default is on. 3.2.18. Priority ----------------- Here you can set the task priority of Crunch-Mania. There are three given possibilities (-3, 0, 3) the custom option The current task priority is shown behind the double point. Select your priority wisely, because high priorities will interfere multitasking, and that's what makes this machine so powerful! See `<-p> - Set Taskpriority' for more information. Default is -1. 3.2.19. Include Subdirs ------------------------ Here you can set the rekursion depth for scanning dirs. There are two predefined possibilities, "All Subdirs" which equals -1 and "No Subdirs" meaning 0, and the Set Level option where you can set any level between -1 and 128. See `<-i> - Set Subdir-Level' for more details. Default is -1. 3.2.20. Extra Mem ------------------ See `<-e> - Set Extra Mem Size' for a detailed description. The current value is shown after the double point. You may change it by selecting the menu item. The new value will be used when the next file is loaded. Default is 100. 3.2.21. Huffman-Buf -------------------- See `<-h> - Set Huffman Buffer Size' for more details. Default size is 16K. 3.2.22. Text Buffer -------------------- See `<-t> - Set Textbuffersize' for more details. Default size is 100 lines. 3.3. Gadgets ------------- Most gadgets behave as you expect it. Only the mode gadgets (Reloc/Data/ Address/Link) are a bit special. You can only change the mode when the buffer is empty. To empty the buffer you have to press the abort gadget. 3.3.1. Quit ------------ Uuh, I forgot the function of this gadget. Well, I think you should not use it, cause it's the end of everything. It's the most senseless gadget of all. Anyway, when pressing it a requester is invoked where you have to confirm your choice. 3.3.2. Abort ------------- Generally you need this gadget only to stop crunching. But you also have to press this button when you e.g. loaded something in reloc mode and now want to load something in data mode. You will experience that you can't do this unless you press this gadget. You may not change the crunchmode when something is loaded because then the decrunchers would not fit. By pressing this gadget you unlock that feature. 3.3.3. Iconify --------------- This closes the main screen and opens a new small window on the workbench screen. The new window displays the togo-counter, so you can crunch something and see when it has finished. You may return to the main screen by pressing the right mousebutton when the window is active. 3.3.4. Crunchmode ------------------ Here you may select between the four crunchmodes. These are: Reloc, Data, Address, Link. There is also an "Auto" Checkbox. When it is selected CrM automatically detects whether a file is executable or not and changes the Crunchmode accordingly. This is only for registered users. In the reloc mode you can load any executable except overlayed files (I think there are not too many). The hunk structure is analysed and displayed while loading. Name, Symbol and Debug hunks are skipped, Reloc hunks are sorted and precompensated. This new reloc table format is shorter and even better crunchable than the one DOS uses! The data mode was designed for normal not-executable data files. They are loaded into memory, compressed and then saved with a small data header. The small comment which is also saved is for RTDD which takes the original len out of it without opening the file resulting in a faster access when reading the dir. The address mode is a bit similar to the ByteKiller cruncher. Here you can load executables and fix them to a special address, load position-depentant code or just load pure data. The decruncher then puts this data to a specified memory block and jumps somewhere. This crunchmode is not very DOS-friendly (especially the decruncher) but very handy e.g. for bootloading games. The dehunker displays some hexadecimal numbers without a leading "$", so don't get confused. The link mode resembles tetrapack/defpack. In this mode you can load several executable and data files into a precleared memory block which you have to define first. Executables are relocated to certain addresses inside the block, data files are loaded to a specified position in the block. I recomend to use the last two modes only with proggies which do not return to the CLI because important system-parameters and -tables may be destroyed. When the Auto checkbox is checked CrM behaves in an itelligent way. It detects whether the loaded file is executable or not, and then decides which mode (reloc or data) is the right one. 3.3.5. LowMem & HighMem ------------------------ These two gadgets are only available in link mode. They specify the memory block to which the files are loaded. This block is buffered someplace else in memory while loading and crunching, so you don't have to care about crashes. LowMem and HighMem both have to be even addresses and HighMem has to be higher than LowMem. It is recommended to set the "Decrunch to" address to LowMem to avoid unwanted results. 3.3.6. Load|Fix File to ------------------------ These two gadgets are active in the address and link mode. The "Load / Fix" gadget determines whether an executable is loaded as a data file (Load) or relocated to the address given in the string gadget below it (Fix). For data files this cycle gadget has no effect. In the address mode the string gadget is only important for executables, it contains the address where to fix them to. In the link mode this gadget affects both executable and data files in the same way: with the address in the gadget an offset to the beginning of the memory block is calculated and the file is then loaded there. The file has to fit completely in the given memory block. 3.3.7. Load ------------ With the "Load" gadget you may load files in all modes. When there is no filename given in the string gadget next to it, or when the filename in the string gadget has not been changed since the last loading, a reqtools.library filerequester apppears (when enabled). After pressing "Load" and then selecting a file the program immediatly begins to load the file. You may select more that one file and even dirs by holding down the key. Then you will be asked for a destination dir. With the DIR gadget next to the load filename you may select a directory to crunch. Now the whole directory will be packed, subdirs may be included or not, this depends on the Include Subdirs Level (see chapter 3.1 for details). You may activate the string gadget by pressing . When loading an executable its hunk structure is displayed in the output field either with decimal numbers (reloc) or with hexadecimal numbers (adress and link), where Range is the part the entire hunk occupies and Len is the length of the actual data in the hunk. The filelength is shown below the load string gadget. "Processed Len" only appears in the Reloc mode in the display field and shows the size of the stripped and precompressed data. This is the len of the data the cruncher really crunches. When you load a file that has been crunched in reloc or in data mode it is automatically decrunched presuming you selected the right mode (reloc for executable files and data for data files) so you can recrunch it or save the original file. After it has been decrunched the file is treated as if you had loaded it in its original form. 3.3.8. Algorithm ----------------- This is again a rotating gadget. You may select beween these two crunch algorithms: LZ-Huffman and CrM-Normal. LZ-Huffman is the best of these algorithms, but not the fastest. Files crunched in this mode need 1248 bytes of additional memory to decrunch. The decruncher is also slightly slower than the one of the CrM-Normal mode. To crunch files in this mode you need continuous memory blocks with the sizes: 128K + 5*Crunchoffset + Huffman Buffer With the default values of $7ffe and 16K this will lead to a memory usage of 304K. The advantage of the CrM-Normal mode is its fast decruncher and its low memory usage. But its results are the worst of the two modes partly caused by the Crunchoffset which is limited to $4200. It needs no additional memory to decrunch. The memory used while crunching is shown in the following table: 128K + 5*Crunchoffset With the default Crunchoffset of $4200 this will lead to a memory usage of 210K. 3.3.9. Offset -------------- This value specifies the range in which redundant data is searched and eliminated. Higher values produce better results but also longer crunch times. Values range from 1 to $4200 in the CrM-Normal mode and from 1 to $7ffe in the LZH mode. Values which are too high will be automatically reduced to the maximum. 3.3.10. Crunch --------------- Now you have started the real crunching process. This will take a while, so be patient. The ToGo counter is displayed in the status line at the bottom. It shows how much data has not yet been processed. This counter is permanently updated and is also shown in the Iconify window. When finished the crunched len of the file is displayed above the save string gadget. This is not the final length! The decruncher or data header is not yet added. The error "File not crunchable!" indicates that there is not enough space between the original and the crunched data. You may increase Extra Mem to avoid this message, but generally these files become longer when crunched. The message "Min Security-Distance" shows the distance between the source and destination memory block which is needed to decrunch a file in the same memory block properly. The crunched data has to be in front of the decrunched data. For more information have a look at the decruncher source. 3.3.11. Decruncher ------------------- With this gadget you can select the decruncher you want. Each crunchmode has a special set of decrunchers. Not all gadgets that are displayed are also needed for the selected decruncher. So be careful to select the right decruncher especially in the address and link mode. First of all there is the data mode. As it is really senseless to put a decruncher before a data file there is only the data option. This will save a 14 bytes data header in front of the encoded data which is necessary for decrunch. This header is described in the decruncher source. This decruncher does not any other input. Then there is the reloc mode. If you choose the simple decruncher (it's the shortest one with implemented decruncher) you have a pretty low level decruncher. When a crunched program is running, twice as much memory is used as needed. The decruncher doesn't free the needless memory but lets this do the dos.library after the whole program has done its job. You can only use this decruncher in combination with the CrM-Normal algorithm. This decruncher takes no input from other gadgets. The decruncher you should use is the normal decruncher. It frees the unnecessary memory before running the program. Here you can choose whether to kill the decruncher or not. Killing it will result in a bit more free memory, a longer decruncher and the cli_module in pr_CLI in the process structure pointing on the first hunk of the program (normally it points on the decruncher). Some programs need this (e.g. CygnusEd). As you might have guessed this decruncher pays attention to the "Kill Decr" gadget. The latest decruncher is the library decruncher. It is the shortest one, but you need the CrM.library to run a program with that decruncher. With this decruncher you should have no problems with the cli_module pointer. You can use this decruncher to crunch libraries, fonts, devices, handlers (careful with the last two, crunch them only with Kick2.0+ because DOS uses an internal jumptable that cannot be patched in Kick1.2/1.3). This decruncher is independent of any gadgets. The address and link modes have the same decrunchers. Normally it suffices to use the normal decruncher. You can tell him where to decrunch the data and where to jump. When you use the LZ-Huffman algorithm you also have to supply a value to the "LZH-Table at" gadget, because this decruncher needs some memory for a 1248 bytes large table to build the huffman tree. The professional decruncher has some more options. You can set the stack as well as locate the decruncher somewhere in memory. You may stop the drives, set the status register and init some important hardware registers or addresses. You may let out some options by clearing their gadget. This packer saves only the really necessary parts and not an ultimate decuncher where only some values are changed and much senseless code is dragged along. Finally you can save the files as data files. This has the same effect as just loading them in data mode. 3.3.12. Decrunch to -------------------- The "Decrunch To"-address specifies the address where the data is decrunched to. By entering here a "p" no special address is taken. Instead of this some mem is allocated (in the Hunk-Header) and there the data will be decrunched to. "c" has almost the same effect but here it will be in Chip-Mem (e.g. for proggies with internal copperlist). 3.3.13. Jump to ---------------- "Jump to" is the address where the decruncher will jump to after decrunching. In most cases this is the same address as the Decrunch-address. If there is a "p" or "c" as the Decrunch-Address, the Jump-Address is relative to the beginning of the data. By entering here a "r" the decruncher will return to the calling code after decrunching. 3.3.14. Stack at ----------------- This gadget specifies where the stack should be put. The Stackaddress is written into a7 (stackpointer) as the first action before decrunching. 3.3.15. Decruncher at ---------------------- The decruncher can copy itself to a safe position which is fixed by "Decruncher at". Of course this is done before decrunching. 3.3.16. Stop Drives -------------------- You may stop all floppies either before decrunching or after decrunching (or both). The left column is responsible for all actions before decrunching and the right one for after. Stopping drives "lame" will switch off the motor but not the drive LED (at least it does so with my external drive). To turn it out you have to select "pro". 3.3.17. SR (Status Reg) ------------------------ The value given in this gadget is written in the status register immediately before the program is entered. You may also enter values with the supervisor bit set (e.g. $2700), the status register is set with the help of trap #0. This may cause some troubles with accelerated machines when the vbr is not at address 0. 3.3.18. Move Gadgets --------------------- These are the twenty gadgets placed in five rows with two times two columns each. They are designed to write certain values to special addresses outa the data range. In the first column there are the values which can be wordened with a following ".w" (e.g. $0.w) and in the second one there are the addresses which are automatically shortened if possible (like in Ass: e.g. move.w #0,$dff180). The first two columns are executed before decrunching and the second two after. E.g. you can change the background color before decrunching to red and when decrunching has finished to black. Or you can turn off all interrupts and DMAs. EXAMPLES 1) move "$0.w " , "$dff180 " ;set colour0 to black move "$f00.w " , "$dff182 " ;set colour1 to red You can also combine the above two lines into a single one: move "$f00 " , "$dff180 " ;set colour0/1 to back/red 2) move "$60000 " , "$6c " ;set level 3 interrupt to ;$60000 3) move "$7fff.w " , "$dff09a " ;disable all interrupts 3.3.19. Save ------------- The save filerequester and filename follow the same rules as described in 3.3.7. The save directory may be different to the load directory. You can save the original file before pressing the crunch button or save the crunched file after crunching it. NOTE: decrunched executables are never totally equal to their original state, because some useless hunks are removed, reloc tables are sorted and Hunk_Ends are added. The final file lenght is displayed above the save string gadget. When pressing the DIR gadget next to the save filename you may select a destination directory for multiple selected files and for crunching a whole directory. While crunching you can select a new save filename (Save gadget is ghosted). 3.3.20. LZH-Table At --------------------- This gadget determines where the LZH-Decruncher locates the tables it needs to decrunch the data. This gadget is only in the address and link modes important when you the LZ-Huffman crunch algorithm. The table is 1248 bytes large, so it won't be too hard to find some space for it. 3.3.21. Advanced Options ------------------------- This gadget opens and closes the Advanced Options window. It contains the "Move" gadgets and "Stop Drives" gadgets. Compared to older versions it looks more jovial this way. 3.3.22. Slider Bar ------------------- The Slider Bar may be used to scroll the output field. When the slider bar is at the bottom each text that is printed out will cause the display to scroll up, if it is somewhere in the middle, the display will stay at it's place but the slider bar will scroll instead. When the slider bar reaches the top, the display will scroll again. This way you can reread something that was previously printed without being disturbed. 4. Supplied Utilities ====================== This section describes the utilities which have to do with this packer and which are supplied with this package. 4.1. Run-time Data-Decruncher (RTDD) ------------------------------------- This utility is very powerful and useful. It patches some (6 or 9) vectors of the dos.library, so any loaded datafile will be automatically decrunched. When the file is loaded entirely no extra mem is needed, otherwise the program will allocate a memoryblock as large as the original file and will decrunch it there. In all further read calls the wanted data is only copied from this buffer, so this will also speed up disk-access. In the current version (v1.9) RTDD supports all crunch algorithms (CrM!, CrM2), any Min Security-Len, the sample-mode and password encrypted data. In combination with the CrM.library you will be able to crunch almost EVERY file without realizing anything (except a little slow-down). The following entries of the dos.library are patched: - Open() - Close() - Read() - Seek() - Examine() - ExNext() When you are running Kick2.0+ these are also patched: - ExAll() - ExamineFH() - OpenFromLock() RTDD also supports some command line options: "?" ··· This will display a help page. "-i" ·· Install Only, DON'T remove RTDD. Useful for scripts. "-r" ·· Remove Only, DON'T install RTDD. Useful for scripts. When no options are given RTDD assumes that you want to change it's state from installed to removed or vice versa. You CANNOT run RTDD from the workbench! There have occured some strange effects when using RTDD in combination with Directory Opus. I will try to fix this in future versions. RTDD V2.0 ---------- RTDD 2.0 has the same task as RTDD 1.9, but there is a major difference: it is a commodity. CLI options and icon tooltypes are the same and they will be explained together now. CX_PRIORITY - Specifies the priority RTDD has among other commodities. NOTE: This is NOT the task priority! CX_POPKEY - Specifies the combination of keys which will let RTDD's window appear. CX_POPUP - Specifies whether RTDD's window will popup when RTDD is started. PATCH - Tells RTDD whether or not to patch the system. CACHE - Function not yet implemented MAXMEM - Function not yet implemented EXAMPLE: 1> RTDD CX_PRIORITY=0 CX_POPKEY="ctrl alt d" CX_POPUP=NO PATCH=YES CACHE=NO MAXMEM=524288 The "Active" menu was designed for a very special case. Let's say you have installed RTDD and you want to remove it (for whatever reason), but you can't remove it, because another program has also patched the vectors that RTDD uses. With the old version there was no way to get rid of RTDD, but by turning off the "Active" menu you may prevent RTDD now from decrunching data while the patches are still installed. 4.2. The CrM.library --------------------- This program has the option to save crunched execuatables which will use the CrM.library to decrunch. Furthermore this library can be used by any programmer to decrunch data files easily. Each registered user will get the includes and autodocs of the library and may use it in his own productions. Registered users also get a faster version of the library. Starting with release 1.9 (v4) the library also includes the crunch algorithms, so any programmer can use the library to crunch his (or her) own data. CrM will also use the library. Consult the autodocs for further information how to program it. The library supports Sample encoded and password encoded files. When you want to decrunch a password crunched file the library sets up a reqtools requester where you can enter the password. The entered password is saved in a list so you don't have to enter the password all the time. When you enter the same password twice you may remove it (or all passwords) from the list. 4.3. The xpkCRM2.library ------------------------- This library is an xpk interface for the CrM.library. It uses the crunch and decrunch routines of the LZ-Huffman mode the CrM.library provides. It behaves like any other standard xpk library, so there should not occur any problems with any application using xpk. It requires CrM.library v4+. The internal benchmarks which are displayed with the xQuery command do not reflect the real performance of the library. As I don't own a A3000 i cannot execute them correctly. Sorry for the inconvenience. 4.4. The xpkCRMS.library ------------------------- This library is an xpk interface for the CrM.library. It uses the crunch and decrunch routines of the LZ-Huffman mode in combination with the Sample mode the CrM.library provides. It behaves like any other standard xpk library, so there should not occur any problems with any application using xpk. It requires CrM.library v4+. This library is quite like the xpkCRM2.library, the only difference is that it uses additionally the Sample mode. Thus your data is also delta encrypted which may lead to better results with 8-bit samples. See `<-s> - Enable Sample Encoding' for more details. The internal benchmarks which are displayed with the xQuery command do not reflect the real performance of the library. As I don't own a A3000 i cannot execute them correctly. Sorry for the inconvenience. 4.5. CrMPW ----------- With this little program you can add or remove passwords to or from the list the CrM.library keeps to decrypt data. The use of this program is really self-explanatory, just type in the program's name to get an overview of the parameters. The commands are case-insensitive, but the "all" has to be in lowcase to clear the whole list. 4.6. CrMData ------------- This is another tiny but useful utility in the Crunch-Mania package. It allows to crunch and decrunch data files via the CLI. You may also use it in combination with your directory utility (e.g. DiskMaster, DirOpus). To get a list of the supported options just call CrMData without any parameters. The parameters have the same result as the corresponding switches in the main program (CrM). 5. Trivialities ================ Many Thanx may reach: - Commodore for this fantastic Computer with Multitasking - my HD for having no head-crashs anymore after trashing the v1.8 source - Rene for Beta-Testing - Michael Mutschler for Beta-Testing and detecting the Enforcer Hits - Karsten Weiß for telling me that my GUI is not "styleguide"-like and for testing the xpk sublib (now it works perfect!) - Alexander Ehlert for his Oberon Interface Greetinx and Handsheix fly over to: Michael, Rene, Tobias, Karsten, Christian, Christoph, Uli, ... 6. Performance Test ==================== This test was done on my Amiga 500 with 7.14MHz, 512K Chip, 512K fake-Fast, 2M real-Fast, 105M HD, with all files being loaded from dh0:. 1) "PageStream2" - Main program of Pagestream V2.2, crunched as executable 437576 bytes, 110 Hunks, 22369 Reloc Offsets Using Library-Decruncher when available, Times with loading from dh0: Cruncher Crunched Len Crunch Time Decrunch Time CrM 1.8r LZH 178848 235s 12s CrM 1.8t LZH 178848 352s 15s CrM 1.8r Normal 186932 179s 10s CrM 1.8t Normal 186932 303s 10s 2) same file as in (1), but crunched as data file Cruncher Crunched Len Crunch Time Decrunch Time CrM 1.8r LZH 211058 285s 14s CrM 1.8t LZH 211058 429s 18s CrM 1.8r Normal 230344 185s 12s CrM 1.8t Normal 230344 331s 12s 3) "Lha.man" - Text File (Doc of Lha 1.42), 122451 bytes Cruncher Crunched Len Crunch Time Decrunch Time CrM 1.8r LZH 36872 55s 2s CrM 1.8t LZH 36872 83s 3s CrM 1.8r Normal 42648 46s 2s CrM 1.8t Normal 42648 79s 2s The speed and ratio comparisons towards other packers have been removed to ensure equal competition. I don't want to urge people to my packer, they have to find out on their own which packer is the best. 7. History =========== ********** V1.3 ************** First Release Version, with almost all Options as V1.4 not bugfree (Crunch-Routine could produce Shit without a clear Stack) ********** V1.4 ************** Intuition Interface added, now callable from Workbench, self-detaching, Req-Lib FileRequester some Bugs fixed (all code was totally overworked) ********** V1.5 ************** V1.5a: Demo Version, no Saving possible V1.5b: Release Version Both Versions released for the Amiga '91 in Cologne! Crunch-Routine optimized, now 0,5-2%. better Results! Menu-Options "Priority" and "LED-Flash" added! Program sometimes crashed when you quitted it, now fixed V1.5c: Auto-SetComment for run-time Data-Decruncher added ********** V1.6 ************** Decruncher added User-Communication improved Quit-Bug finally removed ********** V1.7 ** 02-Aug-92 ********** First Release with a free Test-Version and a Registered-Version New Crunchalgorithms: LZ-Huffman and Quick-LZH Not available in Address and Link Modes New Crunchmodes: Data to crunch Datafiles easily (not via Address-Mode) Switch which detects Reloc and Data-Files and switches between the Modes (only registered Version) Speed Improvements: Crunching takes now only half the Time! (only reg.) Data-Decruncer added Now Source and Destination Dir can be different Current Dir of Caller is now the CD of CrM (not df0:) 2.0-style Intuition Interface added More CLI-Options (including CLI-Help) New Iconify-Window: shows now ToGo-Counter Minor Bugfixes (various Actions caused Crashes) RTDD now removeable, supports new crunchalgorithms ********** V1.8 ** 02-Nov-92 ********** New Decruncher:Library, uses CrM.library Introducing Library: CrM.library used for executables and data files Registered Users get Documentation of Library! and a faster one. Now supports reqtools.library V38! (still uses req.library) Added Keyboard shortcuts Added Project Menu New Mode: Sample-mode, get better ratios with 8-Bit Samples New Option: Copy Icons (...) Now supports multiple select possibilities of file requesters Whole directories may now be crunched Some changes made to the appearance (Logo, bigger Gads, ...) ********** CrM V1.9 ** 08-Oct-93 ********** - Yes! After almost one year another version... - new GUI: now uses gadtools.library, on Kick1.2/1.3 gadtools13.library is used! - removed possibility to open a window on the wb - removed support of req.library, as there is no new version supporting the 2.0-Look - new Decruncher: LZH-Algo now also available in Address and Link modes - added History for Textoutput (only Kick2.0+) (default: 100 Lines) - added Percentage Display while crunching, in the main window it's also graphical, in the iconify window there is only text. Ffirst to suggest this was Michael - completely rewrote support for filerequester, I hope it won't crash anymore. With multiselect you can now also select dirs, unfortunally this doesn't work with mfr (at least it doesn't with my version). - when packing entire directories or using the multiselect feature of the filerequester a complete filelist is created before crunching any file. Now Source and destination dirs may be the same without the risk of confusing dos. - memory display now uses the correct colors on Kick3.0, thanx to Uli who detected this bug and helped me to remove it. - added menu : Project / Save Prefs - added menu : Options / Encrypt Data - added menu : Options / Auto Makedir - added menu : Options / Include Subdirs - added menu : Options / Text Buffer - removed menu: Options / Req.library, as CrM no longer supports this lib - "Copy Icons" still not included, sorry! (menu removed) - improved user communication. The display field displays now all actions the user has done and looks like a real logfile. - Reloc/Normal Decruncher/Kill Decruncher=Yes would let the decruncher crash always. fixed. - CrM uses and needs now CrM.library V4+ - removed some enforcer hits. CrM.library v4: ---------------- - added crunching algorithms and possibility to encrypt data with a password - when you enter a password to decrunch some data this pw is stored in a list so you have to enter this pw only once per reset. - speeded up decrunch routines. Optimisation ideas by Fabien Letouzey! - new functions: cmProcessPW(), cmCryptData(), cmProcessCrunchStruct() and cmCrunchData(). See Autodocs for details. xpkCRM2.library: ----------------- - xpk sublibrary using CrM.library v4+ - uses LZ-Huffman algorithm - first release version CrMPW v1.0: ------------ - small tool to add/remove pws to/from the library internal list without using the reqtools.library (affects only decryption) - provided as assembler example source - first release version CrMData v1.0: -------------- - small command line version of CrM to crunch/decrunch data files. - supports all algorithms and modes: LZH, Normal, Sample, Password - provided as assembler example source - first release version RTDD v1.9: ----------- - now additionally patches ExAll(), OpenFromLock() and ExamineFH() on a system with Kick2.0+ - now uses and needs CrM.library (no special version required) - supports encrypted data: it automatically asks for the pw and decrypts the data. - new command line parameters: -i: Install Only -r: Remove Only (useful for scripts) ********** CrM V1.91 ** 11-Feb-94 ********** - A Null message at CrM's messageport caused some Enforcerhits. They occured when you tried to scroll the output field down. Fixed. - When you wanted to quit from the Iconify window and you denied the requester, CrM would crash. Fixed. - CrM caused some Enforcerhits when run from workbench. Fixed. - CrM crashed very often when you returned from the Iconify window. Fixed. - This document is now also available in the amigaguide format. - Overworked menus: multiple selection (right and left mousebutton) is now possible, Quit shortcut now really only works in combination with SHIFT and the Project menu was reorganized. - CrM crashed when trying to open a filerequester and reqtools being disabled. Fixed. - Kicked out "Quick-LZH" mode (actually it was already kicked in V1.8, but it was still in the cycle gadget) - Changed Task Names to "CrM V1.91 GUI Task.1" and "CrM V1.91 Action Task.1" - Load/Save/Crunch menus are now also ghosted like the corresponding gadgets. CrM.library V4.2: ------------------ - The BSS segment in combined Data/BSS or Code/BSS hunks was not cleared properly. Thus some programs (e.g. Term) crashed. Fixed. - Added Oberon interface for this library. Thanx to Alexander Ehlert! - A mungwall hit frequently occured when crunching in LZH mode, one byte outside the allocated buffer was used. Fixed. RTDD V2.0: ----------- - RTDD is now a commodity and works only with KS2.0+. - You can now deactivate RTDD without removing the patches (sometimes you couldn't remove them because another program had also patched some DOS functions). CrMData V1.01: --------------- - CrMData crashed when the gain was negative. Fixed. - new option -l: CrMData now defaultly skips files which become longer when being crunched. With "-l" these files may be saved. xpkCRMS.library V1.1: ---------------------- - xpk sublibrary using CrM.library v4+ - uses LZ-Huffman algorithm plus Sample Mode (delta encryption) - first release version · · - - -- --- --=- -=-=- -===- -=- -===- -=-=- -=-- --- -- - - · · If you find any shit or nonsense above this line please tell me. This may occur as I don't read the complete manual each time a new version is released, and as I am really too lazy to care about that... Finito - May the Force be with you!!! // :-) // (-: \\ // \X/