⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pidl

📁 samba最新软件
💻
📖 第 1 页 / 共 2 页
字号:
=head1 AUTHORpidl was written by Andrew Tridgell, Stefan Metzmacher, Tim Potter and Jelmer Vernooij. The current maintainer is Jelmer Vernooij.This manpage was written by Jelmer Vernooij, partially based on the original pidl README by Andrew Tridgell. 	=cutuse strict;use FindBin qw($RealBin $Script);use lib "$RealBin/lib";use lib "$RealBin/../share/perl5";use Getopt::Long;use File::Basename;use Parse::Pidl qw ( $VERSION );use Parse::Pidl::Util;###################################################################### save a data structure into a filesub SaveStructure($$){	my($filename,$v) = @_;	FileSave($filename, Parse::Pidl::Util::MyDumper($v));}###################################################################### load a data structure from a file (as saved with SaveStructure)sub LoadStructure($){	my $f = shift;	my $contents = FileLoad($f);	defined $contents || return undef;	return eval "$contents";}###################################################################### read a file into a stringsub FileLoad($){    my($filename) = shift;    local(*INPUTFILE);    open(INPUTFILE, $filename) || return undef;    my($saved_delim) = $/;    undef $/;    my($data) = <INPUTFILE>;    close(INPUTFILE);    $/ = $saved_delim;    return $data;}###################################################################### write a string into a filesub FileSave($$){    my($filename) = shift;    my($v) = shift;    local(*FILE);    open(FILE, ">$filename") || die "can't open $filename";        print FILE $v;    close(FILE);}my(@opt_incdirs) = (); my($opt_help) = 0;my($opt_version) = 0;my($opt_parse_idl_tree) = 0;my($opt_dump_idl_tree);my($opt_dump_ndr_tree);my($opt_dump_idl) = 0;my($opt_diff) = 0;my($opt_header);my($opt_samba3_header);my($opt_samba3_parser);my($opt_samba3_server);my($opt_samba3_ndr_client);my($opt_samba3_ndr_server);my($opt_template) = 0;my($opt_client);my($opt_typelib);my($opt_server);my($opt_ndr_parser);my($opt_tdr_parser);my($opt_ws_parser);my($opt_swig);my($opt_ejs);my($opt_python);my($opt_quiet) = 0;my($opt_outputdir) = '.';my($opt_verbose) = 0;my($opt_warn_compat) = 0;########################################## display help textsub ShowHelp(){print "perl IDL parser and code generator\n";ShowVersion();print"Copyright (C) Andrew Tridgell <tridge\@samba.org>Copyright (C) Jelmer Vernooij <jelmer\@samba.org>Usage: $Script [options] [--] <idlfile> [<idlfile>...]Generic Options: --help                  this help page --version               show pidl version --outputdir=OUTDIR      put output in OUTDIR/ [.] --warn-compat           warn about incompatibility with other compilers --quiet                 be quiet --verbose               be verbose --includedir DIR        search DIR for included filesDebugging: --dump-idl-tree[=FILE]  dump internal representation to file [BASENAME.pidl] --parse-idl-tree        read internal representation instead of IDL --dump-ndr-tree[=FILE]  dump internal NDR data tree to file [BASENAME.ndr] --dump-idl              regenerate IDL file --diff                  run diff on original IDL and dumped output --typelib               print type informationSamba 4 output: --header[=OUTFILE]      create generic header file [BASENAME.h] --ndr-parser[=OUTFILE]  create a C NDR parser [ndr_BASENAME.c] --client[=OUTFILE]      create a C NDR client [ndr_BASENAME_c.c] --tdr-parser[=OUTFILE]  create a C TDR parser [tdr_BASENAME.c] --ejs[=OUTFILE]         create ejs wrapper file [BASENAME_ejs.c] --python[=OUTFILE]      create python wrapper file [py_BASENAME.c] --swig[=OUTFILE]        create swig wrapper file [BASENAME.i] --server[=OUTFILE]      create server boilerplate [ndr_BASENAME_s.c] --template              print a template for a pipeSamba 3 output: --samba3-ndr-client[=OUTF] create client calls for Samba3                             using Samba4's NDR code [cli_BASENAME.c] --samba3-ndr-server[=OUTF] create server call wrapper for Samba3                             using Samba4's NDR code [srv_BASENAME.c]Wireshark parsers: --ws-parser[=OUTFILE]  create Wireshark parser and header\n";    exit(0);}########################################## Display versionsub ShowVersion(){    print "perl IDL version $VERSION\n";}# main programmy $result = GetOptions (	    'help|h|?' => \$opt_help,             'version' => \$opt_version,	    'outputdir=s' => \$opt_outputdir,	    'dump-idl' => \$opt_dump_idl,		'dump-idl-tree:s' => \$opt_dump_idl_tree,		'parse-idl-tree' => \$opt_parse_idl_tree,		'dump-ndr-tree:s' => \$opt_dump_ndr_tree,		'samba3-ndr-client:s' => \$opt_samba3_ndr_client,		'samba3-ndr-server:s' => \$opt_samba3_ndr_server,		'header:s' => \$opt_header,	    'server:s' => \$opt_server,		'typelib:s' => \$opt_typelib,	    'tdr-parser:s' => \$opt_tdr_parser,	    'template' => \$opt_template,	    'ndr-parser:s' => \$opt_ndr_parser,	    'client:s' => \$opt_client,	    'ws-parser:s' => \$opt_ws_parser,	    'ejs' => \$opt_ejs,		'python' => \$opt_python,	    'diff' => \$opt_diff,	    'swig:s' => \$opt_swig,	    'quiet' => \$opt_quiet,		'verbose' => \$opt_verbose,	    'warn-compat' => \$opt_warn_compat,		'includedir=s@' => \@opt_incdirs	    );if (not $result) {	exit(1);}if ($opt_help) {    ShowHelp();    exit(0);}if ($opt_version) {    ShowVersion();    exit(0);}sub process_file($){	my $idl_file = shift;	my $outputdir = $opt_outputdir;	my $pidl;	my $ndr;	my $basename = basename($idl_file, ".idl");	unless ($opt_quiet) { print "Compiling $idl_file\n"; }	if ($opt_parse_idl_tree) {		$pidl = LoadStructure($idl_file);		defined $pidl || die "Failed to load $idl_file";	} else {		require Parse::Pidl::IDL;		$pidl = Parse::Pidl::IDL::parse_file($idl_file, \@opt_incdirs);		defined @$pidl || die "Failed to parse $idl_file";		require Parse::Pidl::Typelist;		Parse::Pidl::Typelist::LoadIdl($pidl);	}		if (defined($opt_dump_idl_tree)) {		my($pidl_file) = ($opt_dump_idl_tree or "$outputdir/$basename.pidl");		SaveStructure($pidl_file, $pidl) or die "Failed to save $pidl_file\n";	}	if ($opt_dump_idl) {		require Parse::Pidl::Dump;		print Parse::Pidl::Dump($pidl);	}	if ($opt_diff) {		my($tempfile) = "$outputdir/$basename.tmp";		FileSave($tempfile, IdlDump::Dump($pidl));		system("diff -wu $idl_file $tempfile");		unlink($tempfile);	}	if ($opt_warn_compat) {		require Parse::Pidl::Compat;		Parse::Pidl::Compat::Check($pidl);	}	if (defined($opt_ws_parser) or 	    defined($opt_client) or	    defined($opt_server) or 	    defined($opt_header) or	    defined($opt_ndr_parser) or	    defined($opt_ejs) or 	    defined($opt_python) or 	    defined($opt_dump_ndr_tree) or	    defined($opt_samba3_header) or 	    defined($opt_samba3_parser) or 	    defined($opt_samba3_server) or 	    defined($opt_swig) or	    defined($opt_samba3_ndr_client) or	    defined($opt_samba3_ndr_server)) {		require Parse::Pidl::NDR;		$ndr = Parse::Pidl::NDR::Parse($pidl);	}	if (defined($opt_dump_ndr_tree)) {		my($ndr_file) = ($opt_dump_ndr_tree or "$outputdir/$basename.ndr");		SaveStructure($ndr_file, $ndr) or die "Failed to save $ndr_file\n";	}	my $gen_header = ($opt_header or "$outputdir/$basename.h");	if (defined($opt_header)) {		require Parse::Pidl::Samba4::Header;		FileSave($gen_header, Parse::Pidl::Samba4::Header::Parse($ndr));	}	my $h_filename = "$outputdir/ndr_$basename.h";	if (defined($opt_client)) {		require Parse::Pidl::Samba4::NDR::Client;		my ($c_client) = ($opt_client or "$outputdir/ndr_$basename\_c.c");		my ($c_header) = $c_client;		$c_header =~ s/\.c$/.h/;		my ($srcd,$hdrd) = Parse::Pidl::Samba4::NDR::Client::Parse(			$ndr,$gen_header,$h_filename,$c_header);		FileSave($c_client, $srcd);		FileSave($c_header, $hdrd);	}	if (defined($opt_swig)) {		  require Parse::Pidl::Samba4::SWIG;		  my($filename) = ($opt_swig or "$outputdir/$basename.i");		  my $code = Parse::Pidl::Samba4::SWIG::Parse($ndr, $basename, "$outputdir/ndr_$basename\_c.h", $gen_header);		  FileSave($filename, $code);	}	if (defined($opt_ejs)) {		require Parse::Pidl::Samba4::EJS;		my $generator = new Parse::Pidl::Samba4::EJS(); 		my ($hdr,$prsr) = $generator->Parse($ndr, $h_filename);		FileSave("$outputdir/ndr_$basename\_ejs.c", $prsr);		FileSave("$outputdir/ndr_$basename\_ejs.h", $hdr);	}	if (defined($opt_python)) {		require Parse::Pidl::Samba4::Python;		my $generator = new Parse::Pidl::Samba4::Python(); 		my ($hdr,$prsr) = $generator->Parse($basename, $ndr, 					"$outputdir/ndr_$basename\_c.h", $h_filename);		FileSave("$outputdir/py_$basename.c", $prsr);		FileSave("$outputdir/py_$basename.h", $hdr);	}	if (defined($opt_server)) {		require Parse::Pidl::Samba4::NDR::Server;		FileSave(($opt_server or "$outputdir/ndr_$basename\_s.c"), Parse::Pidl::Samba4::NDR::Server::Parse($ndr,$h_filename));	}	if (defined($opt_ndr_parser)) {		my $parser_fname = ($opt_ndr_parser or "$outputdir/ndr_$basename.c");		require Parse::Pidl::Samba4::NDR::Parser;		my $generator = new Parse::Pidl::Samba4::NDR::Parser();		my ($header,$parser) = $generator->Parse($ndr, $gen_header, $h_filename);		FileSave($parser_fname, $parser);		FileSave($h_filename, $header);	}	if (defined($opt_ws_parser)) {	  require Parse::Pidl::Wireshark::NDR;	  my($eparser) = ($opt_ws_parser or "$outputdir/packet-dcerpc-$basename.c");	  my $eheader = $eparser;	  $eheader =~ s/\.c$/\.h/;	  my $cnffile = $idl_file;	  $cnffile =~ s/\.idl$/\.cnf/;	  my $generator = new Parse::Pidl::Wireshark::NDR();	  my ($dp, $dh) = $generator->Parse($ndr, $idl_file, $eheader, $cnffile);	  FileSave($eparser, $dp) if defined($dp);	  FileSave($eheader, $dh) if defined($dh);	}	if (defined($opt_tdr_parser)) {		my $tdr_parser = ($opt_tdr_parser or "$outputdir/tdr_$basename.c");		my $tdr_header = $tdr_parser;		$tdr_header =~ s/\.c$/\.h/;		require Parse::Pidl::Samba4::TDR;		my $generator = new Parse::Pidl::Samba4::TDR();		my ($hdr,$prsr) = $generator->Parser($pidl, $tdr_header, $gen_header);		FileSave($tdr_parser, $prsr);		FileSave($tdr_header, $hdr);	}	if (defined($opt_typelib)) {		my $typelib = ($opt_typelib or "$outputdir/$basename.tlb");		require Parse::Pidl::Typelist;		FileSave($typelib, Parse::Pidl::Typelist::GenerateTypeLib());	}	if ($opt_template) {		require Parse::Pidl::Samba4::Template;		print Parse::Pidl::Samba4::Template::Parse($pidl);	}	if (defined($opt_samba3_ndr_client)) {		my $client = ($opt_samba3_ndr_client or "$outputdir/cli_$basename.c");		my $header = $client; $header =~ s/\.c$/\.h/;		require Parse::Pidl::Samba3::ClientNDR;		my $generator = new Parse::Pidl::Samba3::ClientNDR();		my ($c_code,$h_code) = $generator->Parse($ndr, $header, $h_filename);		FileSave($client, $c_code);		FileSave($header, $h_code);	}	if (defined($opt_samba3_ndr_server)) {		my $server = ($opt_samba3_ndr_server or "$outputdir/srv_$basename.c");		my $header = $server; $header =~ s/\.c$/\.h/;		require Parse::Pidl::Samba3::ServerNDR;		my ($c_code,$h_code) = Parse::Pidl::Samba3::ServerNDR::Parse($ndr, $header, $h_filename);		FileSave($server, $c_code);		FileSave($header, $h_code);	}}if (scalar(@ARGV) == 0) {	print "$Script: no input files\n";	exit(1);}process_file($_) foreach (@ARGV);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -