1 ###################################################
2 # dump function for IDL structures
3 # Copyright tridge@samba.org 2000
4 # released under the GNU GPL
12 #####################################################################
13 # dump a properties list
19 foreach my $d ($props) {
20 foreach my $k (keys %{$d}) {
33 $res .= "[$k($d->{$k})] ";
39 #####################################################################
40 # dump a structure element
46 (defined $element->{PROPERTIES}) &&
47 ($res .= DumpProperties($element->{PROPERTIES}));
48 $res .= DumpType($element->{TYPE});
50 if ($element->{POINTERS}) {
51 for (my($i)=0; $i < $element->{POINTERS}; $i++) {
55 $res .= "$element->{NAME}";
56 (defined $element->{ARRAY_LEN}) && ($res .= "[$element->{ARRAY_LEN}]");
61 #####################################################################
69 if (defined $struct->{ELEMENTS}) {
70 foreach my $e (@{$struct->{ELEMENTS}}) {
71 $res .= DumpElement($e);
81 #####################################################################
82 # dump a union element
83 sub DumpUnionElement($)
88 if ($element->{CASE} eq "default") {
89 $res .= "[default] ;\n";
91 $res .= "[case($element->{CASE})] ";
92 $res .= DumpElement($element->{DATA}), if defined($element->{DATA});
99 #####################################################################
106 (defined $union->{PROPERTIES}) &&
107 ($res .= DumpProperties($union->{PROPERTIES}));
109 foreach my $e (@{$union->{DATA}}) {
110 $res .= DumpUnionElement($e);
117 #####################################################################
124 if (ref($data) eq "HASH") {
125 ($data->{TYPE} eq "STRUCT") &&
126 ($res .= DumpStruct($data));
127 ($data->{TYPE} eq "UNION") &&
128 ($res .= DumpUnion($data));
136 #####################################################################
140 my($typedef) = shift;
144 $res .= DumpType($typedef->{DATA});
145 $res .= " $typedef->{NAME};\n\n";
150 #####################################################################
154 my($function) = shift;
158 $res .= DumpType($function->{RETURN_TYPE});
159 $res .= " $function->{NAME}(\n";
160 for my $d (@{$function->{DATA}}) {
161 $first || ($res .= ",\n"); $first = 0;
162 $res .= DumpElement($d);
169 #####################################################################
170 # dump a module header
171 sub DumpModuleHeader($)
174 my($data) = $header->{DATA};
179 foreach my $k (keys %{$data}) {
180 $first || ($res .= ",\n"); $first = 0;
181 $res .= "$k($data->{$k})";
188 #####################################################################
189 # dump the interface definitions
192 my($interface) = shift;
193 my($data) = $interface->{DATA};
196 $res .= "interface $interface->{NAME}\n{\n";
197 foreach my $d (@{$data}) {
198 ($d->{TYPE} eq "TYPEDEF") &&
199 ($res .= DumpTypedef($d));
200 ($d->{TYPE} eq "FUNCTION") &&
201 ($res .= DumpFunction($d));
209 #####################################################################
210 # dump a parsed IDL structure back into an IDL file
216 $res = "/* Dumped by pidl */\n\n";
217 foreach my $x (@{$idl}) {
218 ($x->{TYPE} eq "MODULEHEADER") &&
219 ($res .= DumpModuleHeader($x));
220 ($x->{TYPE} eq "INTERFACE") &&
221 ($res .= DumpInterface($x));