summaryrefslogtreecommitdiff
path: root/lib/sbin/create_c_stuff.pl
diff options
context:
space:
mode:
authorgoodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac>1999-02-16 14:59:09 +0000
committergoodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac>1999-02-16 14:59:09 +0000
commitb7a8832c1f9c2392e12a515d00222b0582e68848 (patch)
treeb1fbaa6c34b71117625bcd292d1a471e0ce900d2 /lib/sbin/create_c_stuff.pl
parentd434a6f0f401d2880b1cc327ee57aae08266fa81 (diff)
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
Diffstat (limited to 'lib/sbin/create_c_stuff.pl')
-rw-r--r--lib/sbin/create_c_stuff.pl45
1 files changed, 43 insertions, 2 deletions
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;