/*
new_mini_epn.c
*/
#include <EXTERN.h>
#include <perl.h>
#include "epn_nagios.h"
/*
* DO_CLEAN must be a pointer to a char string
*/
#define DO_CLEAN "0"
static PerlInterpreter *my_perl = NULL;
/*
* <=== Align Right
* 56 spaces from left margin
* Do N O T use T A B S in #define code.
*
* Indent level == 4 spaces
*/
#define DO_READLINE \
"$_ = defined($term) " \
" ? $term->readline($prompt) " \
" : do { " \
" print $prompt; " \
" chomp($_ = <>); " \
" $_; " \
" }; " \
"die qq(That's all folks.\\n) " \
" unless $_ && ! /^\\s*$/ ; " \
"$_; "
#define INIT_TERM_READLINE \
"use vars qw($term $prompt $OUT); " \
\
"eval { require Term::ReadLine; }; " \
"unless ($@) { " \
" $term = new Term::ReadLine 'new_mini_epn'; " \
"} else { " \
" warn qq(Install Term::ReadLine for arrow key access to history, filename completion etc.); " \
"} " \
\
"$OUT = $term->OUT " \
" if defined($term); " \
"$prompt = 'plugin command line: '; "
void run_plugin(char *command_line) {
#ifdef aTHX
dTHX;
#endif
SV *plugin_hndlr_cr ;
STRLEN n_a ;
int count = 0 ;
int pclose_result;
char *plugin_output;
char fname[128];
char *args[] = {"", "", "", "", NULL };
dSP;
strncpy(fname,command_line,strcspn(command_line," "));
fname[strcspn(command_line," ")] = '\0';
/*
* Arguments passsed to Perl sub Embed::Persistent::run_package
*/
/*
* filename containing plugin
*/
args[0] = fname ;
/*
* Do _not_ cache the compiled plugin
*/
args[1] = DO_CLEAN ;
/*
* pointer to plugin arguments
*/
args[3] = command_line + strlen(fname) + 1 ;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(args[0],0)));
XPUSHs(sv_2mortal(newSVpv(args[1],0)));
XPUSHs(sv_2mortal(newSVpv(args[2],0)));
XPUSHs(sv_2mortal(newSVpv(args[3],0)));
PUTBACK;
call_pv("Embed::Persistent::eval_file", G_SCALAR | G_EVAL);
=1= |