From bdc1f52ea471af8ee88c46289d6a998b20638238 Mon Sep 17 00:00:00 2001
From: Jelmer Vernooij <jelmer@samba.org>
Date: Wed, 15 Jun 2005 10:11:33 +0000
Subject: r7604: Bunch of small pidl updates. Mostly removing unused functions,
 	  cleanups and more flexibility (all output options 	now take an
 optional filename). (This used to be commit
 e3496732c66c2f9474fde58bb3930552511cb12a)

---
 source4/build/pidl/README        |   3 +-
 source4/build/pidl/ejs.pm        |  75 ++++++++++++
 source4/build/pidl/esp.pm        |  76 ------------
 source4/build/pidl/ndr.pm        |  54 +++------
 source4/build/pidl/ndr_client.pm |   3 +-
 source4/build/pidl/ndr_header.pm |  28 ++---
 source4/build/pidl/ndr_parser.pm | 247 ++++++++++-----------------------------
 source4/build/pidl/pidl.pl       | 101 ++++++++--------
 8 files changed, 208 insertions(+), 379 deletions(-)
 create mode 100644 source4/build/pidl/ejs.pm
 delete mode 100644 source4/build/pidl/esp.pm

(limited to 'source4/build')

diff --git a/source4/build/pidl/README b/source4/build/pidl/README
index eac0674153..1214288724 100644
--- a/source4/build/pidl/README
+++ b/source4/build/pidl/README
@@ -18,12 +18,13 @@ dump.pm - Converts the parse tree back to an IDL file
 validator.pm  - Validates the parse tree
 
 -- DCE/RPC+NDR --
+ndr.pm - Generates intermediate datastructures for use by NDR parses/generators
 ndr_client.pm - Generates client call functions in C using the NDR parser
 eth_parser.pm - Generates a parser for the ethereal network sniffer
 eth_header.pm - Generates a header for ethereal
 swig.pm	- Generates SWIG interface files (.i)
 ndr_header.pm - Generates a header file with structures
-ndr.pm - Generates pull/push functions for parsing NDR
+ndr_parser.pm - Generates pull/push functions for parsing NDR
 server.pm - Generates server side implementation in C
 template.pm - Generates stubs in C for server implementation
 
diff --git a/source4/build/pidl/ejs.pm b/source4/build/pidl/ejs.pm
new file mode 100644
index 0000000000..4a106f6176
--- /dev/null
+++ b/source4/build/pidl/ejs.pm
@@ -0,0 +1,75 @@
+###################################################
+# EJS function wrapper generator
+# Copyright jelmer@samba.org 2005
+# released under the GNU GPL
+
+package EjsClient;
+
+use strict;
+use pidl::typelist;
+
+my($res);
+
+sub pidl ($)
+{
+	$res .= shift;
+}
+
+sub EJSFunction($)
+{
+	my $d = shift;
+
+	pidl "static int ejs_$d->{NAME}(struct EspRequest *ep, int argc, struct MprVar **argv)\n";
+	pidl "{\n";
+
+	# FIXME
+
+	pidl "\treturn 0;\n";
+	pidl "}\n\n";
+}
+
+#####################################################################
+# parse the interface definitions
+sub EJSInterface($)
+{
+	my($interface) = shift;
+	my @fns = ();
+
+	foreach my $d (@{$interface->{FUNCTIONS}}) {
+		next if not defined($d->{OPNUM});
+		
+		EJSFunction($d);
+
+		push (@fns, $d->{NAME});
+	}
+	
+	return @fns;
+}
+
+#####################################################################
+# parse a parsed IDL into a C header
+sub Parse($$)
+{
+    my($ndr,$hdr) = @_;
+	my @fns = ();
+
+	$res = "";
+	pidl "#include \"$hdr\"\n\n";
+    pidl "/* EJS wrapper functions auto-generated by pidl */\n\n";
+    foreach my $x (@{$ndr}) {
+	    if ($x->{TYPE} eq "INTERFACE") {
+		    push (@fns, EJSInterface($x));
+	    }
+    }
+
+	pidl "void setup_ejs_functions(void)\n";
+	pidl "{\n";
+	foreach (@fns) {
+		pidl "\tespDefineCFunction(NULL, \"$_\", esp_$_, NULL);\n";
+	}
+	pidl "}\n";
+	
+    return $res;
+}
+
+1;
diff --git a/source4/build/pidl/esp.pm b/source4/build/pidl/esp.pm
deleted file mode 100644
index 8625544fda..0000000000
--- a/source4/build/pidl/esp.pm
+++ /dev/null
@@ -1,76 +0,0 @@
-###################################################
-# ESP function wrapper generator
-# Copyright jelmer@samba.org 2005
-# released under the GNU GPL
-
-package EspClient;
-
-use strict;
-use pidl::typelist;
-
-my($res);
-
-sub pidl ($)
-{
-	$res .= shift;
-}
-
-sub ESPFunction($)
-{
-	my $d = shift;
-
-	pidl "static int esp_$d->{NAME}(struct EspRequest *ep, int argc, struct MprVar **argv)\n";
-	pidl "{\n";
-
-	# FIXME
-
-	pidl "\treturn 0;\n";
-	pidl "}\n\n";
-}
-
-#####################################################################
-# parse the interface definitions
-sub ESPInterface($)
-{
-	my($interface) = shift;
-	my @fns = ();
-
-	foreach my $d (@{$interface->{FUNCTIONS}}) {
-		next if not defined($d->{OPNUM});
-		
-		ESPFunction($d);
-
-		push (@fns, $d->{NAME});
-	}
-	
-	return @fns;
-}
-
-#####################################################################
-# parse a parsed IDL into a C header
-sub Parse($$)
-{
-    my($ndr) = shift;
-	my $hdr = shift;
-	my @fns = ();
-
-	$res = "";
-	pidl "#include \"$hdr\"\n\n";
-    pidl "/* ESP wrapper functions auto-generated by pidl */\n\n";
-    foreach my $x (@{$ndr}) {
-	    if ($x->{TYPE} eq "INTERFACE") {
-		    push (@fns, ESPInterface($x));
-	    }
-    }
-
-	pidl "void setup_ejs_functions(void)\n";
-	pidl "{\n";
-	foreach (@fns) {
-		pidl "\tespDefineCFunction(NULL, \"$_\", esp_$_, NULL);\n";
-	}
-	pidl "}\n";
-	
-    return $res;
-}
-
-1;
diff --git a/source4/build/pidl/ndr.pm b/source4/build/pidl/ndr.pm
index c604d8fe48..09e1d2efc1 100644
--- a/source4/build/pidl/ndr.pm
+++ b/source4/build/pidl/ndr.pm
@@ -160,7 +160,7 @@ sub GetElementLevelTable($)
 		DATA_TYPE => $e->{TYPE},
 		IS_DEFERRED => $is_deferred,
 		CONTAINS_DEFERRED => can_contain_deferred($e),
-		IS_SURROUNDING => is_surrounding_string($e)
+		IS_SURROUNDING => 0 #FIXME
 	});
 
 	my $i = 0;
@@ -203,17 +203,6 @@ sub pointer_type($)
 	return undef;
 }
 
-sub is_surrounding_string($)
-{
-	my $e = shift;
-
-	return 0; #FIXME
-
-	return ($e->{TYPE} eq "string") and ($e->{POINTERS} == 0) 
-		and util::property_matches($e, "flag", ".*LIBNDR_FLAG_STR_CONFORMANT.*") 
-		and $e->{PARENT}->{TYPE} ne "FUNCTION";
-}
-
 #####################################################################
 # work out the correct alignment for a structure or union
 sub find_largest_alignment($)
@@ -367,8 +356,7 @@ sub ParseBitmap($)
 
 sub ParseTypedef($$)
 {
-	my $ndr = shift;
-	my $d = shift;
+	my ($ndr,$d) = @_;
 	my $data;
 
 	if ($d->{DATA}->{TYPE} eq "STRUCT" or $d->{DATA}->{TYPE} eq "UNION") {
@@ -379,17 +367,12 @@ sub ParseTypedef($$)
 		$d->{DATA}->{PROPERTIES} = $d->{PROPERTIES};
 	}
 
-	if ($d->{DATA}->{TYPE} eq "STRUCT") {
-		$data = ParseStruct($d->{DATA});
-	} elsif ($d->{DATA}->{TYPE} eq "UNION") {
-		$data = ParseUnion($d->{DATA});
-	} elsif ($d->{DATA}->{TYPE} eq "ENUM") {
-		$data = ParseEnum($d->{DATA});
-	} elsif ($d->{DATA}->{TYPE} eq "BITMAP") {
-		$data = ParseBitmap($d->{DATA});
-	} else {
-		die("Unknown data type '$d->{DATA}->{TYPE}'");
-	}
+	$data = {
+		STRUCT => \&ParseStruct,
+		UNION => \&ParseUnion,
+		ENUM => \&ParseEnum,
+		BITMAP => \&ParseBitmap
+	}->{$d->{DATA}->{TYPE}}->($d->{DATA});
 
 	$data->{ALIGN} = align_type($d->{NAME});
 
@@ -403,24 +386,19 @@ sub ParseTypedef($$)
 
 sub ParseConst($$)
 {
-	my $ndr = shift;
-	my $d = shift;
+	my ($ndr,$d) = @_;
 
 	return $d;
 }
 
 sub ParseFunction($$$)
 {
-	my $ndr = shift;
-	my $d = shift;
-	my $opnum = shift;
+	my ($ndr,$d,$opnum) = @_;
 	my @elements = ();
 	my $rettype = undef;
 	my $thisopnum = undef;
 
-	CheckPointerTypes($d, 
-		$ndr->{PROPERTIES}->{pointer_default_top}
-	);
+	CheckPointerTypes($d, $ndr->{PROPERTIES}->{pointer_default_top});
 
 	if (not defined($d->{PROPERTIES}{noopnum})) {
 		$thisopnum = ${$opnum};
@@ -534,9 +512,7 @@ sub Parse($)
 	my $idl = shift;
 	my @ndr = ();
 
-	foreach my $x (@{$idl}) {
-		push @ndr, ParseInterface($x);
-	}
+	push(@ndr, ParseInterface($_)) foreach (@{$idl});
 
 	return \@ndr;
 }
@@ -558,8 +534,7 @@ sub GetNextLevel($$)
 
 sub GetPrevLevel($$)
 {
-	my $e = shift;
-	my $fl = shift;
+	my ($e,$fl) = @_;
 	my $prev = undef;
 
 	foreach my $l (@{$e->{LEVELS}}) {
@@ -572,8 +547,7 @@ sub GetPrevLevel($$)
 
 sub ContainsDeferred($$)
 {
-	my $e = shift;
-	my $l = shift;
+	my ($e,$l) = @_;
 
 	do {
 		return 1 if ($l->{IS_DEFERRED}); 
diff --git a/source4/build/pidl/ndr_client.pm b/source4/build/pidl/ndr_client.pm
index eb7d73b991..44a5bde457 100644
--- a/source4/build/pidl/ndr_client.pm
+++ b/source4/build/pidl/ndr_client.pm
@@ -13,8 +13,7 @@ my($res);
 # parse a function
 sub ParseFunction($$)
 {
-	my $interface = shift;
-	my $fn = shift;
+	my ($interface, $fn) = @_;
 	my $name = $fn->{NAME};
 	my $uname = uc $name;
 
diff --git a/source4/build/pidl/ndr_header.pm b/source4/build/pidl/ndr_header.pm
index e3e6022ded..1e5500400c 100644
--- a/source4/build/pidl/ndr_header.pm
+++ b/source4/build/pidl/ndr_header.pm
@@ -28,8 +28,7 @@ sub tabs()
 # parse a properties list
 sub HeaderProperties($$)
 {
-    my($props) = shift;
-	my($ignores) = shift;
+    my($props,$ignores) = @_;
 	my $ret = "";
 
 	return; 
@@ -93,8 +92,7 @@ sub HeaderElement($)
 # parse a struct
 sub HeaderStruct($$)
 {
-    my($struct) = shift;
-    my($name) = shift;
+    my($struct,$name) = @_;
     pidl "\nstruct $name {\n";
     $tab_depth++;
     my $el_count=0;
@@ -116,8 +114,7 @@ sub HeaderStruct($$)
 # parse a enum
 sub HeaderEnum($$)
 {
-    my($enum) = shift;
-    my($name) = shift;
+    my($enum,$name) = @_;
     my $first = 1;
 
     if (not util::useUintEnums()) {
@@ -164,8 +161,7 @@ sub HeaderEnum($$)
 # parse a bitmap
 sub HeaderBitmap($$)
 {
-    my($bitmap) = shift;
-    my($name) = shift;
+    my($bitmap,$name) = @_;
 
     pidl "\n/* bitmap $name */\n";
 
@@ -181,8 +177,7 @@ sub HeaderBitmap($$)
 # parse a union
 sub HeaderUnion($$)
 {
-	my($union) = shift;
-	my($name) = shift;
+	my($union,$name) = @_;
 	my %done = ();
 
 	if (defined $union->{PROPERTIES}) {
@@ -206,9 +201,7 @@ sub HeaderUnion($$)
 # parse a type
 sub HeaderType($$$)
 {
-	my $e = shift;
-	my($data) = shift;
-	my($name) = shift;
+	my($e,$data,$name) = @_;
 	if (ref($data) eq "HASH") {
 		($data->{TYPE} eq "ENUM") && HeaderEnum($data, $name);
 		($data->{TYPE} eq "BITMAP") && HeaderBitmap($data, $name);
@@ -274,8 +267,7 @@ sub HeaderConst($)
 # parse a function
 sub HeaderFunctionInOut($$)
 {
-    my($fn) = shift;
-    my($prop) = shift;
+    my($fn,$prop) = @_;
 
     foreach my $e (@{$fn->{ELEMENTS}}) {
 	    if (util::has_property($e, $prop)) {
@@ -288,8 +280,7 @@ sub HeaderFunctionInOut($$)
 # determine if we need an "in" or "out" section
 sub HeaderFunctionInOut_needed($$)
 {
-    my($fn) = shift;
-    my($prop) = shift;
+    my($fn,$prop) = @_;
 
     if ($prop eq "out" && $fn->{RETURN_TYPE}) {
 	    return 1;
@@ -360,8 +351,7 @@ sub HeaderFunction($)
 # output prototypes for a IDL function
 sub HeaderFnProto($$)
 {
-	my $interface = shift;
-	my $fn = shift;
+	my ($interface,$fn) = @_;
 	my $name = $fn->{NAME};
 
 	pidl "void ndr_print_$name(struct ndr_print *ndr, const char *name, int flags, struct $name *r);\n";
diff --git a/source4/build/pidl/ndr_parser.pm b/source4/build/pidl/ndr_parser.pm
index 5309d6fa36..0af3cde311 100644
--- a/source4/build/pidl/ndr_parser.pm
+++ b/source4/build/pidl/ndr_parser.pm
@@ -22,8 +22,7 @@ sub get_typefamily($)
 
 sub append_prefix($$)
 {
-	my $e = shift;
-	my $var_name = shift;
+	my ($e, $var_name) = @_;
 	my $pointers = 0;
 
 	foreach my $l (@{$e->{LEVELS}}) {
@@ -45,18 +44,9 @@ sub append_prefix($$)
 	return $var_name;
 }
 
-# see if a variable needs to be allocated by the NDR subsystem on pull
-sub need_alloc($)
-{
-	my $e = shift;
-
-	return 0;
-}
-
 sub is_scalar_array($$)
 {
-	my $e = shift;
-	my $l = shift;
+	my ($e,$l) = @_;
 
 	return 0 if ($l->{TYPE} ne "ARRAY");
 
@@ -115,8 +105,7 @@ sub deindent()
 # work out the name of a size_is() variable
 sub ParseExpr($$)
 {
-	my($expr) = shift;
-	my $varlist = shift;
+	my($expr,$varlist) = @_;
 
 	die("Undefined value in ParseExpr") if not defined($expr);
 
@@ -242,11 +231,7 @@ sub GenerateFunctionOutEnv($)
 # parse the data of an array - push side
 sub ParseArrayPushHeader($$$$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my $var_name = shift;
-	my $env = shift;
+	my ($e,$l,$ndr,$var_name,$env) = @_;
 
 	if ($l->{IS_CONFORMANT} or $l->{IS_VARYING}) {
 		$var_name = get_pointer_to($var_name);
@@ -271,11 +256,7 @@ sub ParseArrayPushHeader($$$$$)
 # parse an array - pull side
 sub ParseArrayPullHeader($$$$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my $var_name = shift;
-	my $env = shift;
+	my ($e,$l,$ndr,$var_name,$env) = @_;
 
 	if ($l->{IS_CONFORMANT} or $l->{IS_VARYING}) {
 		$var_name = get_pointer_to($var_name);
@@ -333,8 +314,7 @@ sub ParseArrayPullHeader($$$$$)
 
 sub compression_alg($$)
 {
-	my $e = shift;
-	my $l = shift;
+	my ($e,$l) = @_;
 	my $compression = $l->{COMPRESSION};
 	my ($alg, $clen, $dlen) = split(/ /, $compression);
 
@@ -343,9 +323,7 @@ sub compression_alg($$)
 
 sub compression_clen($$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $env = shift;
+	my ($e,$l,$env) = @_;
 	my $compression = $l->{COMPRESSION};
 	my ($alg, $clen, $dlen) = split(/ /, $compression);
 
@@ -354,9 +332,7 @@ sub compression_clen($$$)
 
 sub compression_dlen($$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $env = shift;
+	my ($e,$l,$env) = @_;
 	my $compression = $l->{COMPRESSION};
 	my ($alg, $clen, $dlen) = split(/ /, $compression);
 
@@ -365,18 +341,16 @@ sub compression_dlen($$$)
 
 sub ParseCompressionPushStart($$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $subndr = shift;
-	my $comndr = $subndr."_compressed";
+	my ($e,$l,$ndr) = @_;
+	my $comndr = "$ndr\_compressed";
 
 	pidl "{";
 	indent;
 	pidl "struct ndr_push *$comndr;";
 	pidl "";
-	pidl "$comndr = ndr_push_init_ctx($subndr);";
+	pidl "$comndr = ndr_push_init_ctx($ndr);";
 	pidl "if (!$comndr) return NT_STATUS_NO_MEMORY;";
-	pidl "$comndr->flags = $subndr->flags;";
+	pidl "$comndr->flags = $ndr->flags;";
 	pidl "";
 	
 	return $comndr;
@@ -384,42 +358,35 @@ sub ParseCompressionPushStart($$$)
 
 sub ParseCompressionPushEnd($$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $subndr = shift;
-	my $comndr = $subndr."_compressed";
+	my ($e,$l,$ndr) = @_;
+	my $comndr = "$ndr\_compressed";
 	my $alg = compression_alg($e, $l);
 
-	pidl "NDR_CHECK(ndr_push_compression($subndr, $comndr, $alg));";
+	pidl "NDR_CHECK(ndr_push_compression($ndr, $comndr, $alg));";
 	deindent;
 	pidl "}";
 }
 
 sub ParseCompressionPullStart($$$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $subndr = shift;
-	my $env = shift;
-	my $comndr = $subndr."_compressed";
+	my ($e,$l,$ndr,$env) = @_;
+	my $comndr = "$ndr\_compressed";
 	my $alg = compression_alg($e, $l);
 	my $dlen = compression_dlen($e, $l, $env);
 
 	pidl "{";
 	indent;
 	pidl "struct ndr_pull *$comndr;";
-	pidl "NDR_ALLOC($subndr, $comndr);";
-	pidl "NDR_CHECK(ndr_pull_compression($subndr, $comndr, $alg, $dlen));";
+	pidl "NDR_ALLOC($ndr, $comndr);";
+	pidl "NDR_CHECK(ndr_pull_compression($ndr, $comndr, $alg, $dlen));";
 
 	return $comndr;
 }
 
 sub ParseCompressionPullEnd($$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $subndr = shift;
-	my $comndr = $subndr."_compressed";
+	my ($e,$l,$ndr) = @_;
+	my $comndr = "$ndr\_compressed";
 
 	deindent;
 	pidl "}";
@@ -427,8 +394,7 @@ sub ParseCompressionPullEnd($$$)
 
 sub ParseObfuscationPushStart($$)
 {
-	my $e = shift;
-	my $ndr = shift;
+	my ($e,$ndr) = @_;
 
 	# nothing to do here
 
@@ -437,8 +403,7 @@ sub ParseObfuscationPushStart($$)
 
 sub ParseObfuscationPushEnd($$)
 {
-	my $e = shift;
-	my $ndr = shift;
+	my ($e,$ndr) = @_;
 	my $obfuscation = util::has_property($e, "obfuscation");
 
 	pidl "NDR_CHECK(ndr_push_obfuscation($ndr, $obfuscation));";
@@ -446,8 +411,7 @@ sub ParseObfuscationPushEnd($$)
 
 sub ParseObfuscationPullStart($$)
 {
-	my $e = shift;
-	my $ndr = shift;
+	my ($e,$ndr) = @_;
 	my $obfuscation = util::has_property($e, "obfuscation");
 
 	pidl "NDR_CHECK(ndr_pull_obfuscation($ndr, $obfuscation));";
@@ -457,19 +421,14 @@ sub ParseObfuscationPullStart($$)
 
 sub ParseObfuscationPullEnd($$)
 {
-	my $e = shift;
-	my $ndr = shift;
+	my ($e,$ndr) = @_;
 
 	# nothing to do here
 }
 
 sub ParseSubcontextPushStart($$$$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my $var_name = shift;
-	my $ndr_flags = shift;
+	my ($e,$l,$ndr,$var_name,$ndr_flags) = @_;
 	my $retndr = "_ndr_$e->{NAME}";
 
 	pidl "{";
@@ -494,10 +453,7 @@ sub ParseSubcontextPushStart($$$$$)
 
 sub ParseSubcontextPushEnd($$$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $ndr_flags = shift;
-	my $env = shift;
+	my ($e,$l,$ndr_flags,$env) = @_;
 	my $ndr = "_ndr_$e->{NAME}";
 	my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE},$env);
 
@@ -517,12 +473,7 @@ sub ParseSubcontextPushEnd($$$$)
 
 sub ParseSubcontextPullStart($$$$$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my $var_name = shift;
-	my $ndr_flags = shift;	
-	my $env = shift;
+	my ($e,$l,$ndr,$var_name,$ndr_flags,$env) = @_;
 	my $retndr = "_ndr_$e->{NAME}";
 	my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE},$env);
 
@@ -545,9 +496,7 @@ sub ParseSubcontextPullStart($$$$$$)
 
 sub ParseSubcontextPullEnd($$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $env = shift;
+	my ($e,$l,$env) = @_;
 	my $ndr = "_ndr_$e->{NAME}";
 
 	if (defined $l->{COMPRESSION}) {
@@ -573,13 +522,7 @@ sub ParseSubcontextPullEnd($$$)
 
 sub ParseElementPushLevel
 {
-	my $e = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my $var_name = shift;
-	my $env = shift;
-	my $primitives = shift;
-	my $deferred = shift;
+	my ($e,$l,$ndr,$var_name,$env,$primitives,$deferred) = @_;
 
 	my $ndr_flags = CalcNdrFlags($l, $primitives, $deferred);
 
@@ -657,12 +600,7 @@ sub ParseElementPushLevel
 # parse scalars in a structure element
 sub ParseElementPush($$$$$$)
 {
-	my $e = shift;
-	my $ndr = shift;
-	my $var_prefix = shift;
-	my $env = shift;
-	my $primitives = shift;
-	my $deferred = shift;
+	my ($e,$ndr,$var_prefix,$env,$primitives,$deferred) = @_;
 	my $subndr = undef;
 
 	my $var_name = $var_prefix.$e->{NAME};
@@ -686,9 +624,7 @@ sub ParseElementPush($$$$$$)
 # parse a pointer in a struct element or function
 sub ParsePtrPush($$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $var_name = shift;
+	my ($e,$l,$var_name) = @_;
 
 	if ($l->{POINTER_TYPE} eq "ref") {
 		if ($l->{LEVEL} eq "EMBEDDED") {
@@ -709,9 +645,7 @@ sub ParsePtrPush($$$)
 # print scalars in a structure element
 sub ParseElementPrint($$$)
 {
-	my($e) = shift;
-	my($var_name) = shift;
-	my $env = shift;
+	my($e,$var_name,$env) = @_;
 
 	$var_name = append_prefix($e, $var_name);
 	return if (util::has_property($e, "noprint"));
@@ -791,31 +725,20 @@ sub ParseElementPrint($$$)
 # parse scalars in a structure element - pull size
 sub ParseSwitchPull($$$$$$)
 {
-	my($e) = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my($var_name) = shift;
-	my($ndr_flags) = shift;
-	my $env = shift;
+	my($e,$l,$ndr,$var_name,$ndr_flags,$env) = @_;
 	my $switch_var = ParseExpr($l->{SWITCH_IS}, $env);
 
 	check_null_pointer($switch_var);
 
 	$var_name = get_pointer_to($var_name);
 	pidl "NDR_CHECK(ndr_pull_set_switch_value($ndr, $var_name, $switch_var));";
-
 }
 
 #####################################################################
 # push switch element
 sub ParseSwitchPush($$$$$$)
 {
-	my($e) = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my($var_name) = shift;
-	my($ndr_flags) = shift;
-	my $env = shift;
+	my($e,$l,$ndr,$var_name,$ndr_flags,$env) = @_;
 	my $switch_var = ParseExpr($l->{SWITCH_IS}, $env);
 
 	check_null_pointer($switch_var);
@@ -825,11 +748,7 @@ sub ParseSwitchPush($$$$$$)
 
 sub ParseDataPull($$$$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my $var_name = shift;
-	my $ndr_flags = shift;
+	my ($e,$l,$ndr,$var_name,$ndr_flags) = @_;
 
 	if (typelist::scalar_is_reference($l->{DATA_TYPE})) {
 		$var_name = get_pointer_to($var_name);
@@ -850,11 +769,7 @@ sub ParseDataPull($$$$$)
 
 sub ParseDataPush($$$$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my $var_name = shift;
-	my $ndr_flags = shift;
+	my ($e,$l,$ndr,$var_name,$ndr_flags) = @_;
 
 	# strings are passed by value rather then reference
 	if (not typelist::is_scalar($l->{DATA_TYPE}) or typelist::scalar_is_reference($l->{DATA_TYPE})) {
@@ -866,9 +781,7 @@ sub ParseDataPush($$$$$)
 
 sub CalcNdrFlags($$$)
 {
-	my $l = shift;
-	my $primitives = shift;
-	my $deferred = shift;
+	my ($l,$primitives,$deferred) = @_;
 
 	my $scalars = 0;
 	my $buffers = 0;
@@ -893,13 +806,7 @@ sub CalcNdrFlags($$$)
 
 sub ParseElementPullLevel
 {
-	my($e) = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my($var_name) = shift;
-	my $env = shift;
-	my $primitives = shift;
-	my $deferred = shift;
+	my($e,$l,$ndr,$var_name,$env,$primitives,$deferred) = @_;
 
 	my $ndr_flags = CalcNdrFlags($l, $primitives, $deferred);
 
@@ -987,12 +894,7 @@ sub ParseElementPullLevel
 # parse scalars in a structure element - pull size
 sub ParseElementPull($$$$$$)
 {
-	my($e) = shift;
-	my $ndr = shift;
-	my($var_prefix) = shift;
-	my $env = shift;
-	my $primitives = shift;
-	my $deferred = shift;
+	my($e,$ndr,$var_prefix,$env,$primitives,$deferred) = @_;
 
 	my $var_name = $var_prefix.$e->{NAME};
 
@@ -1011,10 +913,7 @@ sub ParseElementPull($$$$$$)
 # parse a pointer in a struct element or function
 sub ParsePtrPull($$$$)
 {
-	my($e) = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my($var_name) = shift;
+	my($e,$l,$ndr,$var_name) = @_;
 
 	my $nl = Ndr::GetNextLevel($e, $l);
 	my $next_is_array = ($nl->{TYPE} eq "ARRAY");
@@ -1061,8 +960,7 @@ sub ParsePtrPull($$$$)
 # parse a struct
 sub ParseStructPush($$)
 {
-	my($struct) = shift;
-	my $name = shift;
+	my($struct,$name) = @_;
 	
 	return unless defined($struct->{ELEMENTS});
 
@@ -1137,8 +1035,7 @@ sub ParseStructPush($$)
 # generate a push function for an enum
 sub ParseEnumPush($$)
 {
-	my($enum) = shift;
-	my $name = shift;
+	my($enum,$name) = @_;
 	my($type_fn) = $enum->{BASE_TYPE};
 
 	start_flags($enum);
@@ -1150,8 +1047,7 @@ sub ParseEnumPush($$)
 # generate a pull function for an enum
 sub ParseEnumPull($$)
 {
-	my($enum) = shift;
-	my $name = shift;
+	my($enum,$name) = @_;
 	my($type_fn) = $enum->{BASE_TYPE};
 	my($type_v_decl) = typelist::mapType($type_fn);
 
@@ -1167,8 +1063,7 @@ sub ParseEnumPull($$)
 # generate a print function for an enum
 sub ParseEnumPrint($$)
 {
-	my($enum) = shift;
-	my $name = shift;
+	my($enum,$name) = @_;
 
 	pidl "const char *val = NULL;";
 	pidl "";
@@ -1226,8 +1121,7 @@ $typefamily{ENUM} = {
 # generate a push function for a bitmap
 sub ParseBitmapPush($$)
 {
-	my($bitmap) = shift;
-	my $name = shift;
+	my($bitmap,$name) = @_;
 	my($type_fn) = $bitmap->{BASE_TYPE};
 
 	start_flags($bitmap);
@@ -1241,8 +1135,7 @@ sub ParseBitmapPush($$)
 # generate a pull function for an bitmap
 sub ParseBitmapPull($$)
 {
-	my($bitmap) = shift;
-	my $name = shift;
+	my($bitmap,$name) = @_;
 	my $type_fn = $bitmap->{BASE_TYPE};
 	my($type_decl) = typelist::mapType($bitmap->{BASE_TYPE});
 
@@ -1258,9 +1151,7 @@ sub ParseBitmapPull($$)
 # generate a print function for an bitmap
 sub ParseBitmapPrintElement($$$)
 {
-	my($e) = shift;
-	my($bitmap) = shift;
-	my($name) = shift;
+	my($e,$bitmap,$name) = @_;
 	my($type_decl) = typelist::mapType($bitmap->{BASE_TYPE});
 	my($type_fn) = $bitmap->{BASE_TYPE};
 	my($flag);
@@ -1278,8 +1169,7 @@ sub ParseBitmapPrintElement($$$)
 # generate a print function for an bitmap
 sub ParseBitmapPrint($$)
 {
-	my($bitmap) = shift;
-	my $name = shift;
+	my($bitmap,$name) = @_;
 	my($type_decl) = typelist::mapType($bitmap->{TYPE});
 	my($type_fn) = $bitmap->{BASE_TYPE};
 
@@ -1330,8 +1220,7 @@ $typefamily{BITMAP} = {
 # generate a struct print function
 sub ParseStructPrint($$)
 {
-	my($struct) = shift;
-	my($name) = shift;
+	my($struct,$name) = @_;
 
 	return unless defined $struct->{ELEMENTS};
 
@@ -1382,8 +1271,7 @@ sub DeclareArrayVariables($)
 # parse a struct - pull side
 sub ParseStructPull($$)
 {
-	my($struct) = shift;
-	my $name = shift;
+	my($struct,$name) = @_;
 
 	return unless defined $struct->{ELEMENTS};
 
@@ -1506,8 +1394,7 @@ sub ParseUnionNdrSize($)
 # parse a union - push side
 sub ParseUnionPush($$)
 {
-	my $e = shift;
-	my $name = shift;
+	my ($e,$name) = @_;
 	my $have_default = 0;
 
 	# save the old relative_base_offset
@@ -1593,9 +1480,8 @@ sub ParseUnionPush($$)
 # print a union
 sub ParseUnionPrint($$)
 {
-	my $e = shift;
+	my ($e,$name) = @_;
 	my $have_default = 0;
-	my $name = shift;
 
 	pidl "int level = ndr_print_get_switch_value(ndr, r);";
 
@@ -1635,8 +1521,7 @@ sub ParseUnionPrint($$)
 # parse a union - pull side
 sub ParseUnionPull($$)
 {
-	my $e = shift;
-	my $name = shift;
+	my ($e,$name) = @_;
 	my $have_default = 0;
 	my $switch_type = $e->{SWITCH_TYPE};
 
@@ -1953,11 +1838,7 @@ sub ParseFunctionPush($)
 
 sub AllocateArrayLevel($$$$$)
 {
-	my $e = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my $env = shift;
-	my $size = shift;
+	my ($e,$l,$ndr,$env,$size) = @_;
 
 	my $var = ParseExpr($e->{NAME}, $env);
 
@@ -2162,8 +2043,7 @@ sub FunctionTable($)
 # parse the interface definitions
 sub ParseInterface($$)
 {
-	my($interface) = shift;
-	my $needed = shift;
+	my($interface,$needed) = @_;
 
 	# Typedefs
 	foreach my $d (@{$interface->{TYPEDEFS}}) {
@@ -2194,8 +2074,7 @@ sub ParseInterface($$)
 
 sub RegistrationFunction($$)
 {
-	my $idl = shift;
-	my $filename = shift;
+	my ($idl,$filename) = @_;
 
 	$filename =~ /.*\/ndr_(.*).c/;
 	my $basename = $1;
@@ -2226,8 +2105,7 @@ sub RegistrationFunction($$)
 # parse a parsed IDL structure back into an IDL file
 sub Parse($$)
 {
-	my($ndr) = shift;
-	my($filename) = shift;
+	my($ndr,$filename) = @_;
 
 	$tabs = "";
 	my $h_filename = $filename;
@@ -2260,8 +2138,7 @@ sub Parse($$)
 
 sub NeededFunction($$)
 {
-	my $fn = shift;
-	my $needed = shift;
+	my ($fn,$needed) = @_;
 	$needed->{"pull_$fn->{NAME}"} = 1;
 	$needed->{"push_$fn->{NAME}"} = 1;
 	$needed->{"print_$fn->{NAME}"} = 1;
@@ -2281,8 +2158,7 @@ sub NeededFunction($$)
 
 sub NeededTypedef($$)
 {
-	my $t = shift;
-	my $needed = shift;
+	my ($t,$needed) = @_;
 	if (util::has_property($t, "public")) {
 		$needed->{"pull_$t->{NAME}"} = not util::has_property($t, "nopull");
 		$needed->{"push_$t->{NAME}"} = not util::has_property($t, "nopush");
@@ -2316,8 +2192,7 @@ sub NeededTypedef($$)
 # work out what parse functions are needed
 sub NeededInterface($$)
 {
-	my ($interface) = shift;
-	my $needed = shift;
+	my ($interface,$needed) = @_;
 	foreach my $d (@{$interface->{FUNCTIONS}}) {
 	    NeededFunction($d, $needed);
 	}
diff --git a/source4/build/pidl/pidl.pl b/source4/build/pidl/pidl.pl
index 169b5ea6c6..198a946625 100755
--- a/source4/build/pidl/pidl.pl
+++ b/source4/build/pidl/pidl.pl
@@ -31,7 +31,7 @@ use pidl::util;
 use pidl::template;
 use pidl::swig;
 use pidl::compat;
-use pidl::esp;
+use pidl::ejs;
 
 my($opt_help) = 0;
 my($opt_parse) = 0;
@@ -40,19 +40,20 @@ my($opt_uint_enums) = 0;
 my($opt_diff) = 0;
 my($opt_header);
 my($opt_template) = 0;
-my($opt_client) = 0;
-my($opt_server) = 0;
+my($opt_client);
+my($opt_server);
 my($opt_parser);
 my($opt_eth_parser);
 my($opt_eth_header);
-my($opt_keep) = 0;
-my($opt_swig) = 0;
-my($opt_dcom_proxy) = 0;
-my($opt_com_header) = 0;
-my($opt_esp);
+my($opt_keep);
+my($opt_swig);
+my($opt_dcom_proxy);
+my($opt_com_header);
+my($opt_ejs);
 my($opt_odl) = 0;
 my($opt_quiet) = 0;
 my($opt_output);
+my($opt_verbose) = 0;
 my($opt_warn_compat) = 0;
 
 my $idl_parser = new idl;
@@ -74,20 +75,21 @@ Options:
  --uint-enums          don't use C enums, instead use uint* types
  --header[=OUTFILE]    create a C NDR header file
  --parser[=OUTFILE]    create a C NDR parser
- --esp[=OUTFILE]       create esp wrapper file
- --client              create a C NDR client
- --server              create server boilerplate
+ --ejs[=OUTFILE]       create ejs wrapper file
+ --client[=OUTFILE]    create a C NDR client
+ --server[=OUTFILE]    create server boilerplate
  --template            print a template for a pipe
- --eth-parser          create an ethereal parser
- --eth-header          create an ethereal header file
- --swig                create swig wrapper file
+ --eth-parser[=OUTFILE]create an ethereal parser
+ --eth-header[=OUTFILE]create an ethereal header file
+ --swig[=OUTFILE]      create swig wrapper file
  --diff                run diff on the idl and dumped output
- --keep                keep the .pidl file
+ --keep[=OUTFILE]      keep the .pidl file
  --odl                 accept ODL input
- --dcom-proxy          create DCOM proxy (implies --odl)
- --com-header          create header for COM interfaces (implies --odl)
+ --dcom-proxy[=OUTFILE]create DCOM proxy (implies --odl)
+ --com-header[=OUTFILE]create header for COM interfaces (implies --odl)
  --warn-compat         warn about incompatibility with other compilers
  --quiet               be quiet
+ --verbose             be verbose
 \n";
     exit(0);
 }
@@ -100,20 +102,21 @@ GetOptions (
 	    'dump' => \$opt_dump,
 	    'uint-enums' => \$opt_uint_enums,
 	    'header:s' => \$opt_header,
-	    'server' => \$opt_server,
+	    'server:s' => \$opt_server,
 	    'template' => \$opt_template,
 	    'parser:s' => \$opt_parser,
-	    'client' => \$opt_client,
+	    'client:s' => \$opt_client,
 	    'eth-parser:s' => \$opt_eth_parser,
 	    'eth-header:s' => \$opt_eth_header,
-	    'esp:s' => \$opt_esp,
+	    'ejs:s' => \$opt_ejs,
 	    'diff' => \$opt_diff,
 	    'odl' => \$opt_odl,
-	    'keep' => \$opt_keep,
-	    'swig' => \$opt_swig,
-	    'dcom-proxy' => \$opt_dcom_proxy,
-	    'com-header' => \$opt_com_header,
+	    'keep:s' => \$opt_keep,
+	    'swig:s' => \$opt_swig,
+	    'dcom-proxy:s' => \$opt_dcom_proxy,
+	    'com-header:s' => \$opt_com_header,
 	    'quiet' => \$opt_quiet,
+		'verbose' => \$opt_verbose,
 	    'warn-compat' => \$opt_warn_compat
 	    );
 
@@ -137,7 +140,7 @@ sub process_file($)
 		$output = $opt_output . $basename;
 	}
 
-	my($pidl_file) = util::ChangeExtension($output, ".pidl");
+	my($pidl_file) = ($opt_keep or util::ChangeExtension($output, ".pidl"));
 
 	unless ($opt_quiet) { print "Compiling $idl_file\n"; }
 
@@ -146,7 +149,7 @@ sub process_file($)
 		defined @$pidl || die "Failed to parse $idl_file";
 		typelist::LoadIdl($pidl);
 		IdlValidator::Validate($pidl);
-		if ($opt_keep && !util::SaveStructure($pidl_file, $pidl)) {
+		if (defined($opt_keep) && !util::SaveStructure($pidl_file, $pidl)) {
 			    die "Failed to save $pidl_file\n";
 		}
 	} else {
@@ -169,10 +172,10 @@ sub process_file($)
 		unlink($tempfile);
 	}
 
-	if ($opt_com_header) {
+	if (defined($opt_com_header)) {
 		my $res = COMHeader::Parse($pidl);
 		if ($res) {
-			my $comh_filename = dirname($output) . "/com_$basename.h";
+			my $comh_filename = ($opt_com_header or (dirname($output) . "/com_$basename.h"));
 			util::FileSave($comh_filename, 
 			"#include \"librpc/gen_ndr/ndr_orpc.h\"\n" . 
 			"#include \"librpc/gen_ndr/ndr_$basename.h\"\n" . 
@@ -181,10 +184,10 @@ sub process_file($)
 		$opt_odl = 1;
 	}
 
-	if ($opt_dcom_proxy) {
+	if (defined($opt_dcom_proxy)) {
 		my $res = DCOMProxy::Parse($pidl);
 		if ($res) {
-			my ($client) = util::ChangeExtension($output, "_p.c");
+			my ($client) = ($opt_dcom_proxy or util::ChangeExtension($output, "_p.c"));
 			util::FileSave($client, 
 			"#include \"includes.h\"\n" .
 			"#include \"librpc/gen_ndr/com_$basename.h\"\n" . 
@@ -201,7 +204,7 @@ sub process_file($)
 		$pidl = ODL::ODL2IDL($pidl);
 	}
 
-	if (defined($opt_header) or defined($opt_eth_parser) or defined($opt_eth_header) or $opt_client or $opt_server or defined($opt_parser) or defined($opt_esp)) {
+	if (defined($opt_header) or defined($opt_eth_parser) or defined($opt_eth_header) or defined($opt_client) or defined($opt_server) or defined($opt_parser) or defined($opt_ejs)) {
 		$ndr = Ndr::Parse($pidl);
 #		print util::MyDumper($ndr);
 	}
@@ -212,38 +215,33 @@ sub process_file($)
 			$header = util::ChangeExtension($output, ".h");
 		}
 		util::FileSave($header, NdrHeader::Parse($ndr));
-		if ($opt_swig) {
+		if (defined($opt_swig)) {
 		  my($filename) = $output;
 		  $filename =~ s/\/ndr_/\//;
-		  $filename = util::ChangeExtension($filename, ".i");
+		  $filename = ($opt_swig or util::ChangeExtension($filename, ".i"));
 		  IdlSwig::RewriteHeader($pidl, $header, $filename);
 		}
 	}
 
-
 	if (defined($opt_eth_header)) {
-	  my($eparserhdr) = $opt_eth_header;
-	  if ($eparserhdr eq "") {
-		  $eparserhdr = dirname($output) . "/packet-dcerpc-$basename.h";
-	  }
+	  my($eparserhdr) = ($opt_eth_header or (dirname($output) . "/packet-dcerpc-$basename.h"));
 
 	  util::FileSave($eparserhdr, EthHeader::Parse($ndr));
 	}
 
 	my $h_filename = util::ChangeExtension($output, ".h");
-	if ($opt_client) {
-		my ($client) = util::ChangeExtension($output, "_c.c");
+	if (defined($opt_client)) {
+		my ($client) = ($opt_client or util::ChangeExtension($output, "_c.c"));
 
 		util::FileSave($client, NdrClient::Parse($ndr,$h_filename));
 	}
 
-	if (defined($opt_esp)) {
-		my $esp = $opt_esp;
-		if ($esp eq "") { $esp = util::ChangeExtension($output, "_esp.c"); }
-		util::FileSave($esp, EspClient::Parse($ndr, $h_filename));
+	if (defined($opt_ejs)) {
+		my $ejs = ($opt_ejs or util::ChangeExtension($output, "_ejs.c"));
+		util::FileSave($ejs, EjsClient::Parse($ndr, $h_filename));
 	}
 
-	if ($opt_server) {
+	if (defined($opt_server)) {
 		my $dcom = "";
 
 		foreach my $x (@{$pidl}) {
@@ -254,7 +252,7 @@ sub process_file($)
 			}
 		}
 
-		util::FileSave(util::ChangeExtension($output, "_s.c"), NdrServer::Parse($ndr,$h_filename));
+		util::FileSave(($opt_server or util::ChangeExtension($output, "_s.c")), NdrServer::Parse($ndr,$h_filename));
 
 		if ($dcom ne "") {
 			$dcom = "
@@ -270,23 +268,16 @@ $dcom
 	}
 
 	if (defined($opt_parser)) {
-		my $parser = $opt_parser;
-		if ($parser eq "") {
-			$parser = util::ChangeExtension($output, ".c");
-		}
+		my $parser = ($opt_parser or util::ChangeExtension($output, ".c"));
 		
 		util::FileSave($parser, NdrParser::Parse($ndr, $parser));
 	}
 
 	if (defined($opt_eth_parser)) {
-	  my($eparser) = $opt_eth_parser;
-	  if ($eparser eq "") {
-		  $eparser = dirname($output) . "/packet-dcerpc-$basename.c";
-	  }
+	  my($eparser) = ($opt_eth_parser or dirname($output) . "/packet-dcerpc-$basename.c");
 	  util::FileSave($eparser, EthParser::Parse($ndr, $basename, $eparser));
 	}
 
-
 	if ($opt_template) {
 		print IdlTemplate::Parse($pidl);
 	}
-- 
cgit