[fpc-pascal] Initializing record variables

Marc Santhoff M.Santhoff at t-online.de
Fri Nov 10 18:42:27 CET 2006


Am Freitag, den 10.11.2006, 11:08 +0100 schrieb Marco van de Voort:
> > I have to translate a lot of assignements like this:
> > 
> > particle_t = record
> > 		name: array [0..Pred(16)] of char; 
> > 		longi: integer; 
> > 		pressure: float;
> > 		temperature: double; 
> > 		lati: integer; 
> > 	end;
> > 
> > ibuf: array [0..Pred(2)] of particle_t;
> > 
> > (* raw translation by automatic tool *)
> > ibuf:=(('zero'#0,0,0.0f,0.0,0),('zero'#0,0,0.0f,0.0,0));
> > 
> > from C to pascal. To make it easier I'd like to write something like:
> > 
> > ibuf: array [0..Pred(2)] of particle_t = ???
> > 
> > analoguous to
> > 
> > i: integer = 42;
> > 
> > Is there any syntax allowing to do so? If yes, it would be very easy to
> > do instead of addressing each record field by name for any record in the
> > target array.
> 
> As a global constant: yes. Locally, no.
> 
> So 
> 
> int func ()
> {xarray i = ((arrayconst));
> 
> }
> 
> translates roughly to
> 
> var constant_func_1_array : xarray = ((1,4,2,2),(3,3,3,3));  
> 
> function func:cint;
> 
> var i : xarray;
> begin
>   i:=constant_func_1_array;
> end;

Okay, I think most in most cases globally scoped constants will do. :)

> If you have your automatic tool in src, you might be able to hack it in.

No, I've tried three variants of p2c converters and the one working best
is closed source (IIRC, maybe a delphi source which would need
translation or adaption itself).

But I think I get along with the two ways of solving this problem.

Thank you very much,
Marc





More information about the fpc-pascal mailing list