[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