[fpc-pascal] Re: Turbo Pascal/legacy data file issue.
Lowell C. Savage
savage at lanl.gov
Tue Sep 20 00:07:51 CEST 2005
Well, I found a "Real2Double" function in the System unit that converts
from an old TP 6-byte "real" to an 8-byte double. (Guess I should have
looked a little harder, there.) But I'm not seeing anything going the
other way. Anyone?
Thanks,
Lowell
At 12:56 PM 9-19-05, 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?
>
>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 this
>code--not complaining since the docs don't make it appear that it should,
>just pointing it out.)
>
>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)
Lowell C. Savage
savage at lanl.gov
505-667-6964 (office/msg)
360-961-8965 (cell/msg)
505-667-4341 (shared fax)
More information about the fpc-pascal
mailing list