#!/usr/bin/perl -w #=============================================================================== # gen_action_sequences #------------------------------------------------------------------------------- # This program translates an action sequence definition file into a collection # of eiffel classes. # The deffinition file has one like per difinition like this: # name: description; arg_name: ARG_TYPE; arg_name: ARG_TYPE etc #------------------------------------------------------------------------------- # Date: $Date$ # Revision: $Revision$ #=============================================================================== %descs = (); %argss = (); %arg_namess = (); %arg_typess = (); %wrapper_argss = (); while (<>) { # Initiailize some arrays. @args = (); @arg_names = (); @arg_types = (); # Ignore empty lines, those starting with whitespace and comments. if (!/^[\n #].*/) { chomp; @fields = split (/;[ ]*/,$_); # Grab the name and the description. $name = shift (@fields); @parts = split (/:[ ]*/,$name); $name = $parts[0]; $desc = $parts[1]; # Grab the arguments. foreach $field (@fields) { push (@args, $field); @parts = split (/:[ ]*/,$field); push (@arg_names, $parts[0]); push (@arg_types, $parts[1]); } # Save everything for later. $descs{$name} = [ @desc ]; $argss{$name} = [ @args ]; $arg_namess{$name} = [ @arg_names ]; $arg_typess{$name} = [ @arg_types ]; # Prepare the class name. $_ = $name; tr/[a-z]/[A-Z]/; $classname = "$_\_ACTION_SEQUENCE"; $_ = $classname; tr/[A-Z]/[a-z]/; $lower_classname = $_; # Status message. print "$classname\n"; # Prepare the event data type, and some handy argument list strings. $data_type = "TUPLE ["; $data_type2 = "TUPLE ["; $wrapper_args = ""; $open_args = ""; $arg_name_array = ""; $arg_name_list = ""; if ($#args >= 0) { @ats = @arg_types; @ans = @arg_names; $t = shift (@ats); $n = shift (@ans); $arg_name_array = "\"$n\""; $arg_name_list = "a_$n"; $data_type = "$data_type$t"; $data_type2 = "$data_type2$n"; $last_type = $t; for ($i = 0; $i < @ats ; $i++) { $arg_name_array = "$arg_name_array, \"$ans[$i]\""; $arg_name_list = "$arg_name_list, a_$ans[$i]"; $data_type = "$data_type, $ats[$i]"; if ($last_type eq $ats[$i]) { $data_type2 = "$data_type2, $ans[$i]"; } else { $data_type2 = "$data_type2: $last_type; $ans[$i]"; } $last_type = $ats[$i] } $data_type2 = "$data_type2: $last_type"; foreach $field (@args) { $wrapper_args = "${wrapper_args}a_$field; "; $open_args = "${open_args}?, "; } $wrapper_argss{$name} = $wrapper_args; } $data_type = "$data_type]"; $data_type2 = "$data_type2]"; # Open our output file. open (OH, ">" . "$lower_classname.e"); #=============================================================================== # Dump the classtext. #=============================================================================== print OH <