ллллллллллллллммплллллллпммллмм лллл ллл ллл лллпппппппппппллл ллллл лллппллл лллл ллл ллл ллл ллл ллл ллл ппп лллл ллл ллл ллл ллл ллл ллл млллллллллллллллллллллллллллллм ллл ллл ллл ммммммллл ллл ллл мммммм ммм ммм мммм лллммммллл ллл мллллллллпп ллл ллл лллппллм ллл ллл млллпплллм лллллллллл ллл мллп ллл ллл ллл ллл ллл ллл пллм ллл ллл ллл ллл ллл ллл лллммллп ллл ллл ппллмм ллл ллл ллл пллм мллп пллм мллп лллппллм ллл ллл пллм ллл ллл ллл пллллллллллллллп пллллллп ллл ллл плллммлллп плллммлллп ллл ллл ппп пппппппппп пп ппп ппп пппп пппп ппп ппп Version 1.10 by Roland Skinner Copyright (c) 1994, 1996 RJS Software TABLE OF CONTENTS 1. INTRODUCTION............................................2 1.1 What is RJCRUSH?...................................2 1.2 What's New in RJCRUSH?.............................3 1.3 RJCRUSH in a Windows World.........................4 1.4 How to Use This Manual.............................4 2. REQUIREMENTS AND INSTALLATION...........................6 2.1 System Requirements................................6 2.2 Installing RJCRUSH.................................6 2.3 Environment Variables..............................6 3. COMPRESSING EXECUTABLES.................................8 3.1 RJCRUSH with No Parameters.........................8 3.2 Specifying Executable to Compress..................8 3.3 Verbose Output.....................................8 3.4 Disable Backup File Creation.......................9 4. COMPRESSING OVERLAYS...................................10 4.1 Making your Programs Aware of Compressed Overlays.10 4.1.1 Changes Required to Program Source Code.....10 4.1.1.1 Changes to the Uses-Clause............11 4.1.1.2 Changes to the Overlay-Initialisation Code..................................11 4.1.2 Making a MAP-File Available.................12 4.2 Speed Issues......................................13 5. COMPATIBILITY PROBLEMS.................................14 5.1 Problems with other Overlay Enhancements..........14 5.2 Problems with Particular Executables..............14 6. ACKNOWLEDGEMENTS.......................................15 7. REGISTRATION AND CORRESPONDENCE........................16 7.1 RJCRUSH is Shareware..............................16 7.2 DISCLAIMER........................................17 7.3 Contacting RJS Software and the Author............18 1 _1_._ _I_N_T_R_O_D_U_C_T_I_O_N Thank you for using RJCRUSH. This is the second public release of RJCRUSH. RJCRUSH was designed and written in 1994. It had been under extensive beta-testing for over a year, to ensure it worked, and that it worked properly, and this fairly unique software was finally released in October of 1995. RJCRUSH is the result of a number of years of dabbling with data-compression, and the need for a good executable program compressor. Having played with a number of the currently available executable compression packages, the conclusion was drawn that something was lacking in all of them: they lacked the ability to handle overlays. Sure, the documentation that comes with many executable compressors often purports that these compressors support overlays, but what this usually means is that that particular software detects that there is an overlay in an executable, and will not compress it. In fact, it is doubtful that any previous executable compressors compressed the overlays of one's executables. There is software available, such as Microsoft's DriveSpace and Stac's Stacker, that compresses everything on a particular drive, but nothing that creates a "contained" unit that is compressed, irrespective of whether the drive it is installed on is compressed or not. Now there is such a piece of software; it's called RJCRUSH. _1_._1_ _W_h_a_t_ _i_s_ _R_J_C_R_U_S_H_? RJCRUSH is an executable compressor with the ability to compress overlays. RJCRUSH only supports EXE-files; it is the author's opinion that EXE-files are superior to COM-files. The ability to compress overlays is aimed at the developer-level. Without having the source code to a program, an attempt to make it aware of compressed overlays would be futile. RJCRUSH supports the VROOMM overlay engine of Borland International. Currently, only the Turbo and Borland Pascal compilers are supported; versions 5.5 through 7.0 are supported. Once the overlay engine of Borland C++ has been investigated, and the correct point from where to patch in to the engine has been identified, RJCRUSH will support that compiler. (At this point in time the author has very little time for such an endeavour, due to time constraints imposed by his MSc research. If the need arises, and is large enough, this will become a priority.) 2 Even though RJCRUSH is primarily aimed at the developer, users may also benefit by using RJCRUSH. Compared with the end-results of many competing executable compressors, RJCRUSH often creates smaller executables. RJCRUSH is based on an LZ77 compression technique and utilises a superior two-pass executable relocation table compression technique. This technique involves an initial transformation of the relocation table into a form that is more suitable to compression by the LZ77-based compression algorithm. The end-result is far smaller executables - often by as much as a few 100 bytes. The overlay compression algorithm is similar to that used for executables, except that it performs extra checks to ensure safe decompression during the run-time of the application. One reason for the development of RJCRUSH was to give authors - especially those who market their software in the form of shareware - the ability to place their special integrity checking in overlaid code. Often, programs that perform such checks have their integrity checking code in a part of the program that is always in memory. This code is usually compressed or encrypted to reduce hacking of the executable. Now this code may be moved out of memory for most of the program duration, and only loaded when these checks are performed. Furthermore, it is not the author's intention - and probably never will be - to provide a decompressor for executables compressed with RJCRUSH. RJCRUSH, by default, creates backup copies of the original executable and/or overlay files. If one wants to keep copies of the original files - for posterity or whatever reason - these backup files should be stored in a safe place. _1_._2_ _W_h_a_t_'_s_ _N_e_w_ _i_n_ _R_J_C_R_U_S_H_? This release, v1.10, primarily corrects an error that was introduced into the overlay-decompression code, shortly before the release of v1.00 of RJCRUSH. This error basically disabled anyone not in the possession of a copy of the OVRCRUSH.TPU file(s) from the beta-testing period, from being able to create an application with compressed overlays; these applications would crash, often with runtime-error 209. RJCRUSH is now also more tolerant of disk-errors, such as the disk being full, during the compression stage and exits with a corresponding error, instead of apparently halting. 3 _1_._3_ _R_J_C_R_U_S_H_ _i_n_ _a_ _W_i_n_d_o_w_s_ _W_o_r_l_d RJCRUSH does not compress Windows executables. Furthermore it is a real-mode DOS executable compressor. This means that protected mode DOS executables or OS/2 executables are also not supported. It is acknowledged that the world is moving towards GUI environments, especially that of Microsoft Windows. The author had many doubts back in 1994 after the initial coding and testing had been completed whether it was worthwhile to release this software to the public. Back then, "Chicago" was the buzz-word. At the time of writing, it is over two months since the release of the official version of Windows 95, and the author is happy to see there is still a need for such software. There are still many people out there who need to run what is now termed "legacy applications". Many of these people haven't even made the switch to Windows 3.x, let alone Windows 95. Thus, it has been decided to release this software, even if only a handful of people benefit from its use. The author is committed to this software and supporting it. Even though the author uses Windows a great deal more himself nowadays, as long as there are DOS programs and people using RJCRUSH, this software will be supported. _1_._4_ _H_o_w_ _t_o_ _U_s_e_ _T_h_i_s_ _M_a_n_u_a_l This manual is broken up into a number of sections. Section 1, this section, gives a brief introduction to RJCRUSH and outlines its features. New features and/or corrections in the current release are also discussed. Section 2 is a short section describing the requirements of RJCRUSH, and gives a few recommendations on how to install this software. Section 3 discusses how to run RJCRUSH, and how to compress executables. Section 4 discusses compressing overlays and the steps required to make applications aware of these compressed overlays. Section 5 deals with compatibility issues. Section 6 acknowledges other software/hardware mentioned in this documentation. This section thanks a number of people whose work/writings inspired this software. 4 Finally, Section 7 contains information on how to register RJCRUSH, contact the author or RJS Software, and other related information. At times, the left margin of this documentation contains "NB". This indicates that an important warning or discussion, related to some aspect of RJCRUSH is given in the text alongside. 5 _2_._ _R_E_Q_U_I_R_E_M_E_N_T_S_ _A_N_D_ _I_N_S_T_A_L_L_A_T_I_O_N _2_._1_ _S_y_s_t_e_m_ _R_e_q_u_i_r_e_m_e_n_t_s RJCRUSH will work on any PC containing one of the Intel 80x86 family of processors (or compatibles). A realistic minimum amount of memory required for RJCRUSH is 256K. RJCRUSH takes advantage of available EMS or XMS memory to create temporary data-files during the compression process, instead of using disk space. The system must be running DOS 3.20 or higher. It should work fine with DR DOS, or in a DOS box in either Windows or OS/2. If a system is equipped with an EMS memory manager, EMS v4.00 (or above) is required. If a system has an XMS memory manager, v2.00 (or above) is required. _2_._2_ _I_n_s_t_a_l_l_i_n_g_ _R_J_C_R_U_S_H RJCRUSH is very flexible with the location in which it is installed. It is recommended however, that RJCRUSH be installed in a directory that is included in your computer's PATH setting. Alternatively, one may set up an alias to RJCRUSH. If you intend to create compressed overlays, you will also need to install the correct unit-file, OVRCRUSH.TPU, in one of the directories specified in your compiler's unit-directory path. If you're using Turbo Pascal 5.5, copy the file OVRCRUSH.TP5 to the desired directory and rename it to OVRCRUSH.TPU. Similarly, if you're using Turbo Pascal 6 or Turbo/Borland Pascal 7, copy the file OVRCRUSH.TP6 or OVRCRUSH.TP7, respectively, and rename it to OVRCRUSH.TPU. This will enable your compiler to locate and use the required unit that needs to be linked to applications to make them aware of compressed overlays. _2_._3_ _E_n_v_i_r_o_n_m_e_n_t_ _V_a_r_i_a_b_l_e_s RJCRUSH utilises a file management system which provides it with greater flexibility in handling memory and files. This file management system, however, requires that a temporary directory be set up. Most temporary files are created in the directory pointed to by this environment variable. If one has Windows installed on one's system this temporary directory is probably already set up. To 6 specify this temporary directory, one must set either of the "RJSTEMP", "TEMP" or "TMP" environment variables. RJCRUSH will first try to use the directory specified by the "RJSTEMP" environment variable. If that fails, the directory pointed to by "TEMP" will be used. Otherwise, the directory pointed to by "TMP" will be used. If neither of these environment variables exist in the environment settings, then RJCRUSH will create these temporary files in the current directory. NB If you do have one of these environment variables set, ensure that the directory pointed to by that variable actually exists. Otherwise RJCRUSH will unceremoniously halt with the following error-message: ERROR - Could not install file manager! To install one of these environment variables, simply add a line similar to the following in your AUTOEXEC.BAT (or equivalent) file: SET RJSTEMP=C:\TEMP In this case, the "RJSTEMP" environment variable is set in the AUTOEXEC.BAT. The temporary directory is "C:\TEMP". Note that there is no need to add a trailing backslash ("\"). In general these environment variables are set as follows: SET RJSTEMP=d:path or SET TEMP=d:path or SET TMP=d:path where "d:path" is the drive and directory path of the temporary directory. 7 _3_._ _C_O_M_P_R_E_S_S_I_N_G_ _E_X_E_C_U_T_A_B_L_E_S RJCRUSH has a few command-line parameters. The following sub-sections describe these parameters. _3_._1_ _R_J_C_R_U_S_H_ _w_i_t_h_ _N_o_ _P_a_r_a_m_e_t_e_r_s If no parameters are given, a short description of the various command-line parameters is displayed. It looks something like the following: RJCRUSH [[d:][path]filename [/V] [/NB]] | [/HELP | /?] This is essentially a summary of all command-line parameters available. Parameters in square brackets, such as "[/V]" are optional. _3_._2_ _S_p_e_c_i_f_y_i_n_g_ _E_x_e_c_u_t_a_b_l_e_ _t_o_ _C_o_m_p_r_e_s_s The "[d:][path]filename" parameter is the most important parameter passed to RJCRUSH, when compressing an executable. This parameter indicates the name of the executable file to be compressed, and (if necessary) the drive and path where it is located. NB If this parameter is not specified, then RJCRUSH will run, displaying an error message. There is no need for the current directory to be the same as that of the executable file to be compressed. RJCRUSH will automatically use the path specified along with this parameter for the executable, and any other required files. _3_._3_ _V_e_r_b_o_s_e_ _O_u_t_p_u_t By default, RJCRUSH simply compresses the executable displaying messages to indicate its progress. However, these messages overwrite each other, and usually only a summary of what happened is displayed. This summary essentially tells how successful compression of the particular file was. If one wants RJCRUSH to keep these messages on the screen, by specifying the "/V" parameter, each message will be displayed on a separate line. In verbose output mode, the order of the processes RJCRUSH performs can clearly be seen. Some may prefer verbose output mode, as it gives a better indication of what is actually happening behind the scenes. 8 _3_._4_ _D_i_s_a_b_l_e_ _B_a_c_k_u_p_ _F_i_l_e_ _C_r_e_a_t_i_o_n By default, when RJCRUSH compresses an executable - and if it can successfully compress an executable - backup files are created. The original executable file's extension is renamed from "EXE" to "EXB". When compressing overlay files, contained in files with the extension "OVR", RJCRUSH renames the original files to have the "OVB" extension. To disable RJCRUSH from leaving backup files behind, and have it delete the original files, use the "/NB" parameter. 9 _4_._ _C_O_M_P_R_E_S_S_I_N_G_ _O_V_E_R_L_A_Y_S No extra parameters are required to make RJCRUSH treat an executable file that utilises overlays differently to one which isn't overlaid. RJCRUSH automatically detects whether an executable contains overlays or not. If it detects that an executable contains overlays, it then searches for the corresponding overlay file, and a MAP-file. RJCRUSH will correctly handle executables which have the overlay file appended to them. NB If the overlay file is not appended to the actual executable file itself, then RJCRUSH expects the overlay to have the same file-name as the executable, but have the extension "OVR". This file must also exist in the same directory as the executable file. NB The required MAP-file must also exist in the same directory as the executable file. It must have the same file-name as the executable, but have extension "MAP". (Section 4.1.2 explains requirements specific to the MAP-file.) _4_._1_ _M_a_k_i_n_g_ _y_o_u_r_ _P_r_o_g_r_a_m_s_ _A_w_a_r_e_ _o_f_ _C_o_m_p_r_e_s_s_e_d_ _O_v_e_r_l_a_y_s There are two additional steps required to compress an executable that has overlays, besides simply running RJCRUSH with the executable's file-name as a parameter. One has to make a simple change to the code of the program to allow it to handle the compressed overlays, and a MAP-file with application-specific linking information is also required. NB Without these changes, one will not have a program that supports compressed overlays. _4_._1_._1_ _C_h_a_n_g_e_s_ _R_e_q_u_i_r_e_d_ _t_o_ _P_r_o_g_r_a_m_ _S_o_u_r_c_e_ _C_o_d_e The changes that one needs to implement in one's Pascal source-code are very simple. If you're already using overlaid applications, then the transition to using compressed overlays in your applications will be a breeze. If you're not familiar with creating overlaid applications, it is recommended that you read the section in your compiler's manual pertaining to overlays. Two changes are required to the source code. One change is in the uses-clause; the other is in the code where the overlay manager is initialised. These are discussed below. 10 _4_._1_._1_._1_ _C_h_a_n_g_e_s_ _t_o_ _t_h_e_ _U_s_e_s_-_C_l_a_u_s_e In the unit (or main program) source file where the overlay manager is initialised, simply add the unit "OvrCrush" to the uses-clause. For example, if the uses-clause is something like the following: uses Overlay; change it to the following: uses Overlay, OvrCrush; _4_._1_._1_._2_ _C_h_a_n_g_e_s_ _t_o_ _t_h_e_ _O_v_e_r_l_a_y_-_I_n_i_t_i_a_l_i_s_a_t_i_o_n_ _C_o_d_e The overlay-initialisation code of an application typically looks something like the following: begin ... OvrInit(); if OvrResult<>ovrOk then begin {Handle initialisation error} Halt; end; OvrSetBuf(); ... end To change this code to handle compressed overlays the new code would look as follows: begin ... OvrInit(); if OvrResult<>ovrOk then begin {Handle initialisation error} Halt; end; OvrInitCompress; OvrSetBuf(); ... end Just one extra line of code is required. There is no real need to perform any error-detection after a call to "OvrInitCompress". The "OvrResult" variable is however set to a number of values to indicate the kind of success or failure that occurred. 11 If successful, "OvrResult" has the value "ovrOk", indicating that compressed overlays are being used. If the overlay manager has not been initialised or the overlay file hasn't been opened, "OvrResult" will have the value "ovrError". If the overlays involved are not compressed, "OvrResult" will have the value "ovrUncompressedOverlay". This is not a serious error, but rather a warning. NB If "OvrInitCompress" is called with an application that does not contain compressed overlays, the overlay manager will perform as if there weren't any. In essence, the compressed-overlay manager is not initialised. One may take advantage of this while debugging the application; OvrCrush won't have any adverse affects of the application if overlays aren't compressed. NB As in the above example, "OvrInitCompress" should be called as soon after "OvrInit" as possible. Calls such as those to change the overlay-retry buffer size, to "OvrInitEMS" to use EMS-memory, and so on should be executed after the call to "OvrInitCompress". _4_._1_._2_ _M_a_k_i_n_g_ _a_ _M_A_P_-_F_i_l_e_ _A_v_a_i_l_a_b_l_e One last requirement in order to make an application aware of compressed overlays, is to make RJCRUSH aware of the application. To do this, one has to enable the compiler to generate a MAP-file when it links the code of the application. There are three different formats of MAP-file that the Turbo/Borland Pascal compiler is capable of generating. These are "Segments", "Public" and "Detailed". RJCRUSH requires either a "Public" or "Detailed" MAP-file. See the documentation of your compiler on how to enable generation of these MAP-files. NB Without a MAP-file, RJCRUSH cannot create compressed overlays. NB Ensure that each time a program that has overlays is compressed with RJCRUSH, the corresponding MAP-file is current. Using an outdated MAP-file with RJCRUSH may have catastrophic results on the program during run-time. As a safety measure, have the compiler generate a new MAP-file each time it compiles your programs. 12 _4_._2_ _S_p_e_e_d_ _I_s_s_u_e_s One's immediate reaction to the idea of compressed overlays may be that it slows down execution of an application. This may be true, however it is the author's experience that compressed overlays do not have much more of an effect on an application's performance than normal overlays. During the beta-testing stage of this software, applications which were speed dependent actually ran faster. This may sound strange, but one may only conject that the reduction in the amount of disk-IO involved - as a result of the smaller overlays to be loaded - actually speeds up the program. A better way to ensure that one's applications are correctly optimised for overlays is to first run these applications in Borland's Turbo Profiler. By using typical run-time scenarios, one can determine if too much disk-thrashing is occurring as a result of incorrectly set up overlay buffer sizes. Turbo Profiler has the ability to count how often each overlay is loaded. After optimising the application for standard uncompressed overlays, simply compress the executable with RJCRUSH. A feature of the LZ77-based compression algorithms is that decompression time is very low. So low in fact that it is negligible. The best way to determine the effect of compressed overlays on a particular application is to try the RJCRUSH/OvrCrush combination with that application and see how it fares. 13 _5_._ _C_O_M_P_A_T_I_B_I_L_I_T_Y_ _P_R_O_B_L_E_M_S Although there has been an earnest endeavour to make this software as compatible as possible, software may be encountered that is either incompatible with RJCRUSH or the compressed overlay mechanism, or which reveals flaws in the software, hitherto undiscovered. If such problems are encountered, the author and RJS Software would be more than happy to know about them. Perhaps these problems can be ironed out. (See Section 7.3 about contacting the author or RJS Software.) _5_._1_ _P_r_o_b_l_e_m_s_ _w_i_t_h_ _o_t_h_e_r_ _O_v_e_r_l_a_y_ _E_n_h_a_n_c_e_m_e_n_t_s RJCRUSH has been tested with a number of overlay-enhancement libraries available. No major problems should arise with other enhancements not tested. RJCRUSH has been tested with OVERXMS by Wilbert van Leijen. No problems arise out of using this software and the RJCRUSH/OvrCrush combination. Some problems may arise using OvrCrush with Duncan Murdoch's STREAMS unit, especially those routines that deal with overlays. This is due to RJCRUSH/OvrCrush using a few of the vacant fields in each overlay's header. A conflict may arise here. Although not tested with OvrUMB by Jean-Marc Lasgouttes, no problems using it and the RJCRUSH/OvrCrush combination are envisaged. _5_._2_ _P_r_o_b_l_e_m_s_ _w_i_t_h_ _P_a_r_t_i_c_u_l_a_r_ _E_x_e_c_u_t_a_b_l_e_s At this point in time, only one executable has been encountered that fails with RJCRUSH. Ironically, this is the RTM.EXE file that ships with Borland Pascal 7.0. The author has not had much time to investigate the problem more fully, but believes this problem will eventually be solved. RJCRUSH does take measures to identify Windows, OS/2 and DOS protected mode executables, and refuses to compress them. There may exist executables that RJCRUSH fails to recognise as being special, and therefore compresses them when they should not be compressed. 14 _6_._ _A_C_K_N_O_W_L_E_D_G_E_M_E_N_T_S This documentation refers to other software and hardware. The author and RJS Software acknowledge the copyright of the respective authors and companies that hold the copyrights to this other software/hardware. The following is a list of various software/hardware mentioned in this documentation along with the authors/companies that hold the copyrights. Note that the author and RJS Software acknowledge the copyrights of any software/hardware not included below. Note also that the information in this list may not be 100% correct. * The word "DOS", used in this documentation, refers to Microsoft's MS-DOS or IBM's PC DOS. * MS-DOS and Microsoft Windows are trademarks or registered trademarks of Microsoft Corporation. * DR DOS is Digital Research's operating system, now owned by Novell. * The terms PC, XT, AT, PC DOS, OS/2 and IBM are trademarks or registered trademarks of International Business Machines. * Stacker is a trademark or registered trademark of Stac Electronics. * VROOMM, Turbo Pascal, Borland Pascal, Borland C++ and Turbo Profiler are trademarks or registered trademarks of Borland International. * OVERXMS is copyright Wilbert van Leijen. * The STREAMS unit is copyright Duncan Murdoch. * OvrUMB is copyright Jean-Marc Lasgouttes. * LZEXE is copyright Fabrice Bellard. * PKLITE is a trademark of PKWARE Incorporated. Finally, RJCRUSH, RJS Software and the RJS Software logo are trademarks of RJS Software. The author would like to thank the follow people who indirectly influenced this software: * Jacob Ziv and Abraham Lempel for pioneering the LZ77 and LZ78 dictionary-based compression techniques. * Duncan Murdoch, Wilbert van Leijen and David Dubois whose writings and/or software enlightened the author to the structure of Borland's overlay headers and the overlay-manager. 15 _7_._ _R_E_G_I_S_T_R_A_T_I_O_N_ _A_N_D_ _C_O_R_R_E_S_P_O_N_D_E_N_C_E This section contains information about registering RJCRUSH, your rights as a user of this software, how to contact the author or RJS Software, as well as other important information regarding RJCRUSH. _7_._1_ _R_J_C_R_U_S_H_ _i_s_ _S_h_a_r_e_w_a_r_e RJCRUSH is NOT a free program. It is being released as shareware. This means that you are allowed to try out RJCRUSH and its various features for a limited period of time, in which you may evaluate the suitability of this software to your needs. RJCRUSH has not been disabled in any way in the shareware version. It just contains a message that it is not free, and must be registered. One is granted a 30 day period in which to evaluate the suitability of RJCRUSH to one's needs. If you use RJCRUSH for a period longer than this evaluation period, it is assumed that RJCRUSH is of use to you, and that you will register it. One may register RJCRUSH by sending a fee of R40 to the address below, if you are a resident of South Africa, or one of its neighbouring states. Users outside of South Africa, may register RJCRUSH by sending $20 US to the address given in Section 7.3. (A registration form is included with this program.) All postage and packaging is included in this fee. Users who want the full source-code to OvrCrush, including the overlay decompression routines should add an additional R20 (for South African residents) or $10 US (for abroad). Standard registration only entitles one to the Pascal source-code and the decompression code in object (OBJ) format. For an additional R10 (for South African residents) or $5 US (for abroad), users may order the documentation in a bound, typeset, A5 format. Again, postage and packaging in included. Registration may be paid in the form of a postal order, money order, cheque or equivalent. Please print out and fill in the registration form, which is contained in the file RJCRUSH.ORD. Registered users will receive the latest version of RJCRUSH, without the unregistered message. Registration includes a license to all subsequent versions of RJCRUSH, whether they be minor or major revisions. Registered users will also receive a unique 16 serial-number that they must quote on all correspondence after they have received their registered version of RJCRUSH. Registered users will also receive preferential treatment with technical support. If a registered user includes a valid Email address in the registration form, he/she will be informed of new updates to the software when they become available. _7_._2_ _D_I_S_C_L_A_I_M_E_R RJCRUSH is provided as is. It has been tested extensively, and has been found to fulfil the task it has been designed to do. The author and RJS Software do not accept any responsibility for damage that may be incurred out of the use of, abuse of, or the inability to use this software, including loss to profit. This software may not be modified, reverse-engineered, hacked (!!!), etc. in any way whatsoever. It may not be sold for profit by any party, without prior written permission from the author, Roland Skinner, and RJS Software. The unregistered version may not be distributed without this documentation (RJCRUSH.DOC), the order-form (RJCRUSH.ORD), the history-list (HISTORY.LST), the thank-you list (THANKYOU.LST), OVRCRUSH.INT, OVRCRUSH.TP5, OVRCRUSH.TP6, OVRCRUSH.TP7, or any other file originally included with this software. This program does perform an integrity check on execution. "Modified" versions could have disastrous effects on a system - BE WARNED! Do not attempt to compress this file, in executable form, using programs such as LZEXE or PKLITE - RJCRUSH will refuse to work. People using RJCRUSH have a 30 day evaluation period in which to use the unregistered, shareware version. People using RJCRUSH in a commercial environment must register RJCRUSH in order to use it. A registered version of RJCRUSH may only be installed for the exclusive use of one person. (Cheaper rates are available for registering multiple copies of RJCRUSH; contact the author or RJS Software for more information.) By having read this, one agrees to abide by the above. By using this software one acknowledges having read these sections, and agrees to the clauses above. 17 _7_._3_ _C_o_n_t_a_c_t_i_n_g_ _R_J_S_ _S_o_f_t_w_a_r_e_ _o_r_ _t_h_e_ _A_u_t_h_o_r Any correspondence may be forwarded to the address below. Send your recommendations, bug-reports, requests, registrations, or any other correspondence to Roland Skinner, or RJS Software, at: P.O. Box 14134 Bredell 1623 Republic of South Africa FAX support is provided by calling the following number: +27-11-794-1490 (International) (011) 794-1490 (within South Africa) Users requiring faster replies, etc. may send an Email message to Roland Skinner at one of the Email addresses (listed in order of preference) below: rjs@lia.co.za roland@cs.wits.ac.za RJCRUSH also has its own WWW (world wide web) home-page on the Internet. Links to information regarding RJCRUSH as well as links to the latest version of this software are available from this page. The URL of this page is: http://www.lia.co.za/users/rjs/RJCRUSH/RJCRUSH.htm I trust that you'll find RJCRUSH to be a useful utility. Hopefully, you too, will benefit from RJCRUSH's abilities. Yours faithfully, Roland Skinner 18