1 ###################################################
2 # dump function for IDL structures
3 # Copyright tridge@samba.org 2000
4 # released under the GNU GPL
6 package Parse::Pidl::Dump;
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 for my $i (1..$element->{POINTERS}) {
53 $res .= "$element->{NAME}";
54 foreach (@{$element->{ARRAY_LEN}}) {
61 #####################################################################
69 if (defined $struct->{ELEMENTS}) {
70 foreach my $e (@{$struct->{ELEMENTS}}) {
71 $res .= DumpElement($e);
81 #####################################################################
94 #####################################################################
95 # dump a union element
96 sub DumpUnionElement($)
101 if (util::has_property($element, "default")) {
102 $res .= "[default] ;\n";
104 $res .= "[case($element->{PROPERTIES}->{case})] ";
105 $res .= DumpElement($element), if defined($element);
112 #####################################################################
119 (defined $union->{PROPERTIES}) &&
120 ($res .= DumpProperties($union->{PROPERTIES}));
122 foreach my $e (@{$union->{ELEMENTS}}) {
123 $res .= DumpUnionElement($e);
130 #####################################################################
137 if (ref($data) eq "HASH") {
138 ($data->{TYPE} eq "STRUCT") &&
139 ($res .= DumpStruct($data));
140 ($data->{TYPE} eq "UNION") &&
141 ($res .= DumpUnion($data));
142 ($data->{TYPE} eq "ENUM") &&
143 ($res .= DumpEnum($data));
151 #####################################################################
155 my($typedef) = shift;
159 $res .= DumpType($typedef->{DATA});
160 $res .= " $typedef->{NAME};\n\n";
165 #####################################################################
169 my($function) = shift;
173 $res .= DumpType($function->{RETURN_TYPE});
174 $res .= " $function->{NAME}(\n";
175 for my $d (@{$function->{DATA}}) {
176 $first || ($res .= ",\n"); $first = 0;
177 $res .= DumpElement($d);
184 #####################################################################
185 # dump a module header
186 sub DumpInterfaceProperties($)
189 my($data) = $header->{DATA};
194 foreach my $k (keys %{$data}) {
195 $first || ($res .= ",\n"); $first = 0;
196 $res .= "$k($data->{$k})";
203 #####################################################################
204 # dump the interface definitions
207 my($interface) = shift;
208 my($data) = $interface->{DATA};
211 $res .= DumpInterfaceProperties($interface->{PROPERTIES});
213 $res .= "interface $interface->{NAME}\n{\n";
214 foreach my $d (@{$data}) {
215 ($d->{TYPE} eq "TYPEDEF") &&
216 ($res .= DumpTypedef($d));
217 ($d->{TYPE} eq "FUNCTION") &&
218 ($res .= DumpFunction($d));
226 #####################################################################
227 # dump a parsed IDL structure back into an IDL file
233 $res = "/* Dumped by pidl */\n\n";
234 foreach my $x (@{$idl}) {
235 ($x->{TYPE} eq "INTERFACE") &&
236 ($res .= DumpInterface($x));