From b7a8832c1f9c2392e12a515d00222b0582e68848 Mon Sep 17 00:00:00 2001 From: goodale Date: Tue, 16 Feb 1999 14:59:09 +0000 Subject: Order all parameters in common blocks and structures as real, pointer, int . Note this may cause problems with single precision runs on T3Es or alphas. Possibly we should have seperate blocks/structures for each type of parameter. Made sure public parameters are initialised. Tom git-svn-id: http://svn.cactuscode.org/flesh/trunk@286 17b73243-c579-4c4c-a9d2-2d5706c11dac --- lib/sbin/create_c_stuff.pl | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) (limited to 'lib/sbin/create_c_stuff.pl') diff --git a/lib/sbin/create_c_stuff.pl b/lib/sbin/create_c_stuff.pl index 50365261..70373dcd 100644 --- a/lib/sbin/create_c_stuff.pl +++ b/lib/sbin/create_c_stuff.pl @@ -58,7 +58,7 @@ sub CreateParameterBindingFile push(@data,( "struct ", "{")); - foreach $parameter (keys %parameters) + foreach $parameter (order_params(scalar(keys %parameters), %parameters,%parameter_database)) { $type = $parameter_database{"\U$parameters{$parameter} $parameter\E type"}; @@ -353,7 +353,7 @@ sub CreateCStructureParameterHeader push(@data,( "extern struct ", "{")); - foreach $parameter (keys %parameters) + foreach $parameter (order_params(scalar(keys %parameters), %parameters,%parameter_database)) { $type = $parameter_database{"\U$parameters{$parameter} $parameter\E type"}; @@ -391,4 +391,45 @@ sub CreateCStructureParameterHeader return @data; } +sub order_params +{ + local($nparams, @rest) = @_; + local(%parameters); + local(%parameter_database); + local(@float_params) = ();; + local(@int_params) = (); + local(@string_params)= (); + + %parameters = @rest[0..2*$nparams-1]; + %parameter_database = @rest[2*$nparams..$#rest]; + + foreach $parameter (keys %parameters) + { + $type = $parameter_database{"\U$parameters{$parameter} $parameter\E type"}; + + if($type eq "KEYWORD" || + $type eq "STRING" || + $type eq "SENTENCE") + { + push(@string_params, $parameter); + } + elsif($type eq "LOGICAL" || + $type eq "INTEGER") + { + push(@int_params, $parameter); + } + elsif($type eq "REAL") + { + push(@float_params, $parameter); + } + else + { + die("Unknown parameter type '$type'"); + } + + } + + return (@float_params, @string_params, @int_params); +} + 1; -- cgit v1.2.3