[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