home *** CD-ROM | disk | FTP | other *** search
-
-
- ┌────────────────────────────────────────────┐
- │ │
- │ ▀█▀▀▀█ █▀▀▀ │
- │ █ █ █▀▀█ █▀▀█ █▀▀█ █ █ █▀▀█ █ │
- │ █▀▀█▀ █ █ █ █ █ █ █ █ ▀▀▀█ │
- │ █ █ █▀▀▀ ▀▀▀█ █ █ █ █▀▀▀ █ │
- │ ▄█ █▄ █▄▄█ █▄▄█ █▄▄█ █▄▄█ █▄▄█ ▄▄▄█ TM │
- │ │
- │ Copyright APTware Limited 1993,94 │
- │ All rights reserved. │
- │ │
- └────────────────────────────────────────────┘
-
-
-
- Distributor in Europe:
-
- Magic Media Systems GmbH
- Frohnhardter Strasse 79
- D-53639 Koenigswinter (Oberpleis)
- Germany
-
- (Pre-Dial for Germany: "+49" without leading "0")
-
- Tel: 02244/9209-0
- Fax: 02244/81902
- BBS: 02244/5552 or 02244/81901
-
-
-
- Demonstration version
- ═════════════════════
-
- This is a demonstration version of Rescue5, the CA-Clipper 5 decompiler.
-
- To install:
-
- Create a new directory for Rescue5 (unless you want to install
- Rescue5 to an existing directory), move to the new directory and
- copy the self-extracting file RESCUE.EXE into it. Type:
-
- rescue
-
- The following files will be extracted into the following directories
- (assuming you created the directory \RESCUE5):
-
- \RESCUE5\
- RSQDEMO.EXE Rescue5 demonstration version.
- VARIABLE.UDT Default names for unknown variables
- RESCUE5.NG Documentation in Norton guide format.
-
- \RESCUE5\SAMPLE\
- APTFILER.EXE Sample session .EXE file
- APTFILER.SRC Some of the source to APTFILER.EXE
- APTFILER.UDT User defined type file for APTFILER
- APTFILER.CH Header file needed to compile APTFILER
- SAMPLE.GRP Edited grouping and variable files
- SAMPLE.VAR for the example second pass.
- SAMPLE.LIB Code required to rebuild APTFILER.EXE
-
- Differences:
-
- This is a dual-mode version of Rescue5:
-
- 1) If you follow the sample session in the Norton Guides, this version
- will behave exactly like a full version.
-
- We recommend that you follow the sample session first. See 'Take
- me though...' in the Norton Guide.
-
- After following the sample session you may decide to rebuild
- APTFILER.EXE, with or without the /b switch, and decompile the
- resulting .EXE. For the demo version of Rescue5 to recognise the
- new .EXE as the sample system:
-
- o You must edit the .LNK file to link SAMPLE.LIB
-
- o You should link with CA-Clipper version 5.2c
-
- o You must use RTlink or Blinker 2.x.
-
- o You must not change or remove functions or link other code in,
- doing so may prevent Rescue5 from decompiling all the code from
- the new .EXE.
-
- If the demo version of Rescue5 fails to recognise the new .EXE as the
- sample system it will treat it like any other .EXE (see 2) below).
-
- 2) If you use this version on any other .EXE file it will decompile
- the module containing the largest non-static procedure or function.
-
- The module recovered will contain the largest non-static procedure or
- function, together with any static procedures or functions that are
- called from it, and any procedures or functions that share static
- variables with it.
-
- In demonstration mode this version will also recover the GETSYS and
- ERRORSYS modules from the EXE specified.
-
- In demonstration mode Rescue5 will ignore the grouping file
- (<EXE name>.GRP) on the second pass, preventing you from moving
- procedures and functions into different modules.
-
- Note that although the demonstration version of Rescue5 only emits
- part of the code, it will decompile all of it. This means that the
- demonstration version will take the same amount of time to run as the
- full version would take to recover all of your code.
-
-
- In every other respect this is a full working version of Rescue5.
-
-
-
- New / changed features
- ══════════════════════
-
- 1) /c switch (Code generation)
-
- A new switch has been created to change the default behaviour
- of the Rescue5 code generator. This affects grouping, the
- guide section for which is reproduced below:
-
- "A technique that is widely used, code grouping is the
- placing of a comma-separated list of expressions within
- parentheses:
-
- cName := (cust->(dbsetorder(2), dbseek('123')), cust->name)
-
- The expressions are evaluated from left to right, the
- result of the entire group being the value of the last
- expression. Thus the expression above is the equivalent
- of:
-
- cust->(dbsetorder(2))
- cust->(dbseek('123'))
- cName = cust->name
-
- Under rare circumstances Rescue5 may encounter p-code that
- is ambiguous to the extent that the original code might
- have been grouped or might not. In these cases Rescue5
- will not group the recovered code."
- ___
-
- Note that the default grouping strategy is now the reverse of
- the one stated in the printed documentation.
-
- It is possible (although very unusual) for Rescue not to group
- code that was originally grouped. The /c switch forces Rescue5
- to try to group ambiguous code, eliminating errors introduced by
- the default grouping strategy. /c should be used with caution,
- since it can introduce other problems by causing Rescue to attempt
- to group code that was not originally grouped.
-
- You should only use /c if you encounter a code generation error.
-
- 2) Increased memory requirements
-
- Rescue5 now requires about 535K of conventional memory free, but
- is significantly faster with 570K or more.
-
- If you get any memory errors, increase conventional memory first.
-
-
- Known anomalies
- ═══════════════
-
- 1) MAIN is sometimes not the first procedure in the .LNK file
-
- Rescue5 sometimes fails to place MAIN first in the list of
- procedures in the .LNK file, resulting in an EXE file that does
- not run.
-
- The workaround is to edit the .LNK file to make MAIN the first
- procedure.
-
- This does not apply to systems in which all the code was
- compiled with the /b switch, which do not have a MAIN.UDF.
-
- 2) CA-Clipper reports 'string space exhausted error'
-
- This can occur when compiling source files that contain a very
- large number of string operations. The CA-Clipper parser
- simply runs out of the memory it reserves for string
- processing.
-
- In every case identified to date, the original source code had
- embedded quotes in strings, which Rescue5 recovers as chr(34)
- string concatenations:
-
-
- Original:
-
- '"This is a fine example", she said'
-
-
- Recovered:
-
- chr(34) + "This is a fine example" + chr(34) + ", she said"
-
- Workarounds include reducing the number of string operations by
- editing the strings, moving some of the strings into another
- source file by splitting the procedures(s) concerend, or trying
- a different memory configuration and/or different version of
- CA-Clipper 5.x.
-
- 3) CA-Clipper reports 'too many segments' error
-
- A recovered source file is too large for CA-Clipper to compile.
-
- Although Rescue5 splits files that are becoming too large, it is
- difficult to predict the point beyond which this error will
- occur (it is only indirectly related to the number of lines of
- code and file size).
-
- Workarounds include changing the grouping file to move code
- into another file, using a different /s switch setting or
- manually splitting the file.
-
- 4) CA-Clipper reports 'phase error'
-
- Phase errors are caused by some combination of STATIC
- declarations (both variable and procedure). The precise
- combination varies from version to version, and a source file
- that CA-Clipper 5.01 compiles without a problem may cause
- CA-Clipper 5.2 to choke, or vice-versa.
-
- If a version of CA-Clipper reports a phase error in Rescue5
- recovered code, then that error would also have been reported
- in the original code.
-
- The workarounds are not very precise - change the order of
- STATIC's or assign them at a different point in the program, or
- try a different version of CA-Clipper.
-
- 5) CA-Clipper reports 'duplicate procedure name' in ORPHAN.UDF
-
- ORPHAN.UDF is now included in the .RMK and .LNK files (contrary
- to the printed documentation), and it can contain duplicate
- procedure names.
-
- Workarounds include removing ORPHAN.UDF from the .RMK and .LNK
- files, renaming the procedures concerned or distributing the
- duplicate procedures in different source files by editing the
- grouping file.
-
- 6) RDD request statements
-
- The REQUEST <rdd> statement is a directive to the linker, not a
- CA-Clipper command. If your system uses RDD's other than
- DBFNTX you will need to insert the appropriate REQUEST
- statements in the source code in addition to adding the
- appropriate libraries to the .LNK file.
-