DataFlex
Decompiler Information:

The Database Managers offers a DataFlex Decompiling
Service for every major character-mode version of DataFlex and some versions of Visual DataFlex:

2.1

2.2

2.3, 2.3b and 2.3 enhanced runtime

3.0 and 3.01

3.05

3.1

3.2

Visual DataFlex (VDF) (availability varies -- contact us)

Web App (availability varies -- contact us)

The decompilers generate code based on an unmodified
FMAC. This guarantees that the source code will
be recompilable without manual changes from the user.

Some parts of the original program are lost forever
when a program is compiled. These parts include:

the original variable names

the window names

labels

comments

blank lines

All of these parts are removed or replaced by the DataFlex
compiler. A decompiler can't do anything about
blank lines or comments. Variable names, labels
and window names are assigned reasonable, generic names.

Datafile names and field names are decompiled to their
original names. The decompiler checks the FILELIST.CFG,
*.TAG and *.FD files for datafile names and field names.
If the programmer originally used CUSTOMER.NAME in the
source code, the decompiler will also use CUSTOMER.NAME.

Window names always start with the prefix PAGE.
The first page encountered will be called PAGE1.
The second will be called PAGE2, and so on. Individual
windows on the page will be given an appropriate suffix.
The third window on page 2, for example, will be called
PAGE2.3.

Label names always start with the letters 'CL', for
Constant Label. A number will follow the 'CL'
prefix. CL23, for example, is constant label 23.
The number (23, in this example) part of the label corresponds
directly with the original icode line generated by the
compiler. Due to macro compaction, the icode lines
get shuffled around. The label CL23: may not actually
be on the 23rd source code line. But it was originally
the 23rd icode line.

Variable names also have a prefix and suffix.
The prefix is always two letters. The first letter
is always V for variable. The second letter is
one of S, N, I, D, R for string, number, integer, date
and real. The variable suffix is a number that
uniquely identifies the variable from all others of
the same type.

Indicators are the only exception to the variable name
rule. Indicators always have a prefix IND and
the suffix identifies the indicator. IND23 would
distinguish indicator 23 from VI23, the variable integer
23.

Constants are detected and are placed directly in
the final source code. Constants should look exactly
like they did when the code was originally compiled.

The generated code is quite readable. The decompilers
have been programmed to use standard indenting rules
after certain block commands, such as BEGIN/END, REPEAT/LOOP
and others. We've even had some programmers remark
that the generated code looks better than the original
code!