[fpc-pascal] Turbo Pascal/legacy data file issue.
Florian Klaempfl
F.Klaempfl at gmx.de
Mon Sep 19 21:00:44 CEST 2005
Lowell C. Savage wrote:
> Has anyone come up with a set of routines for converting between Turbo
> Pascal's 6-byte "real" format and FPC's real number format?
http://www.freepascal.org/docs-html/rtl/system/real2double.html
>
> I am trying to use FPC to update a legacy TP 5.5 program. I've got most
> of the "major" issues solved and am now finding that I'm having trouble
> reading legacy data files. Many of these data file are "file of XXXRec"
> where "XXXRec" is a rather large and complex Record containing strings,
> integers, bytes, enumerated types, and reals.
>
> My problem is that I am going to need to be able to read these existing
> files (without modification) into the new version of the program.
>
> I've been able to use the "{$PACKRECORDS 1}" and "{$PACKENUMS 1}"
> directives to take care of everything else. But now I realize that
> Turbo Pascal used a 6-byte real representation while FPC uses either a 4
> or 8-bit representation.
>
> It appears that I'm going to need to make some kind of a special type,
> perhaps a packed record with a "byte", a "smallint" and a 4-byte
> "longword". Then, I read this value from the existing file and convert
> it into a "real". Then, when I want to write the file (or another file)
> I convert back to this record type when I fill the record I'm going to
> write.
>
> Here's a simple program to demonstrate the issue. In Turbo Pascal 5.5
> (Downloaded from http://bdn.borland.com/article/0,1410,20803,00.html)
> this code generates a 12-byte file. FPC generates a 16-byte file.
> (Actually, the preprocessor directives shown appear to have no effect on
What effect should it have?
> this code--not complaining since the docs don't make it appear that it
> should, just pointing it out.)
The 6 byte real isn't supported by fpc because it isn't handled by the
fpu and thus deadly slow. For maybe 12 years, every new PC has an fpu.
>
> Program testrec;
> {$IFDEF FPC}
> {$MODE TP}
> {$PACKRECORDS 1}
> {$ENDIF}
> type
> realrec = record
> t1 : real;
> t2 : real;
> end;
>
> var
> realfile : file of realrec;
> r : realrec;
> begin
> r.t1 := 1.0;
> r.t2 := 2.0;
> assign ( realfile, 'c:\r.rfl' );
> rewrite ( realfile );
> write ( realfile, r );
> close ( realfile );
> end.
>
> Any ideas appreciated!
>
> Thanks,
>
>
> Lowell C. Savage
> savage at lanl.gov
> 505-667-6964 (office/msg)
> 360-961-8965 (cell/msg)
> 505-667-4341 (shared fax)
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list