PFXplus and POWERflex: reading a 1993 4GL and getting the data out
What PFXplus is, what its .PTC, .PFI and .FD files mean, and how to extract data from DataFlex-format .DAT, .TAG and .K1 index files even when the program source is gone.
What PFXplus is, what its .PTC, .PFI and .FD files mean, and how to extract data from DataFlex-format .DAT, .TAG and .K1 index files even when the program source is gone.
Businesses running a PFXplus or POWERflex application, and the IT people who have inherited one without documentation.
What is PFXplus, and can the data be recovered from a system this old?
If you are running PFXplus, you are almost certainly the only person you know who is. There is very little written about it, the vendor community has effectively dispersed, and most firms you approach will never have heard the name. None of that means your data is stuck.
PFXplus is a fourth-generation language and database development system from POWERflex Corporation, an Australian company. It was built to be compatible with DataFlex, which was a widely used business application platform of the same era, and that compatibility is the single most useful fact in this guide.
The release we have worked on in production is 2.50, dated 31 October 1993. Its collating sequence file is headed "Collating sequence for AUSTALIA", vendor typo included, which tells you something about both its origins and how long it has been since anyone edited it.
Systems built on it are typically stock control, order entry, invoicing or job costing for manufacturers and distributors. They were usually written by one person who understood the business completely, and they have run for thirty years with very little intervention.
A PFXplus directory is intimidating mostly because the extensions are unfamiliar. They divide cleanly into program files and data files, and only the second group matters for recovery.
| Extension | What it is | Matters for data recovery? |
|---|---|---|
.PTC | Compiled program | Only as a last resort |
.PFI | Include file | Useful for business rules |
.PFE, .PTM, .PFX | Environment and support files | No |
.FD | File definition, describes a record | Critical |
.DAT | The data itself | Critical |
.TAG | Field names for the matching .DAT | Critical |
.K1 to .K9 | Index files | Yes, for ordering and integrity |
.DEF | Definitions | Useful |
If you see BTRIEVE.PFI in the folder, the installation had the
option of using Btrieve as an alternative data engine rather than the native
DataFlex format. Worth checking which one is actually in use, because it
changes the extraction route entirely. Our
Btrieve guide covers
that path.
Because PFXplus was built DataFlex-compatible, the data uses the DataFlex file layout. Each logical table is a set of files that belong together:
CUSTOMER.DAT holds the records themselves, fixed lengthCUSTOMER.TAG holds the field names for those recordsCUSTOMER.K1, .K2 and so on hold the indexes.FD file describes the record structure
That separation is why an ordinary tool cannot open a .DAT file and
show you a table. The bytes are in one file and the meaning is in another. Once
you read them together, the picture is complete.
This is the difference between PFXplus and genuinely hopeless situations, and it is worth being precise about.
The .FD file definitions describe every record and every field.
The .TAG files supply the field names. Between them you have a
complete map of the data structure that does not depend on the program source at
all. Somebody can have lost every .PTC and every include file, and
the data extraction is still provable.
What losing the source costs you is the business logic: the validation rules, the calculations, the sequence in which things happen. That matters if you are rebuilding the application. It does not matter if you want the records.
Do not let anybody tell you the data is unrecoverable without looking at the .FD files. "Unrecoverable" almost always means "I have never seen this before". The structures are documented and the DataFlex file format is well understood.
.DAT with its .TAG, its indexes and its .FD. Files without a matching definition get flagged rather than guessed at..FD gives you field positions, lengths and types. The .TAG gives you names. Together they produce a schema..FD and .TAG files are small and they are the ones that make the job possible.The reason to start now rather than later is not that the software will fail. It has run since 1993 and it will probably run a while yet. It is that the person who understands it is the actual dependency, and that dependency has a retirement date.
Ask the author
Ask it here and it comes straight to Kasun, who wrote this. No sales call, no obligation, and a real answer even if the answer is that you do not need us.
Kasun Wijayamanna
Founder, replies within one business day
Tell us what you are comparing, replacing, or trying to improve. We will come back with a practical recommendation and realistic scope.
Built here. Your data stays here.
Thanks for reaching out. We will get back to you within one business day.
See what else we do