/*
* Filename : Call.xs
*
* Author : Paul Marquess
* Date : 11th November 2001
* Version : 1.06
*
* Copyright (c) 1995-2001 Paul Marquess. All rights reserved.
* modify it under the same terms as Perl itself.
*
*/
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#ifdef _NOT_CORE
# include "ppport.h"
#endif
/* Internal defines */
#define PERL_MODULE(s) IoBOTTOM_NAME(s)
#define PERL_OBJECT(s) IoTOP_GV(s)
#define FILTER_ACTIVE(s) IoLINES(s)
/* Global Data */
typedef struct {
int x_fdebug ;
int x_current_idx ;
} my_cxt_t;
static I32
{
char *nl = "\n";
char *p;
char *out_ptr;
int n;
if (fdebug)
warn("**** In filter_call - maxlen = %d, out len buf = %d idx = %d my_sv = %d [%s]\n",
while (1) {
/* anything left from last time */
if (maxlen) {
/* want a block */
if (fdebug)
warn("BLOCK(%d): size = %d, maxlen = %d\n",
if(n <= maxlen) {
BUF_OFFSET(my_sv) = 0 ;
}
else {
}
}
else {
/* want lines */
n = n - (p - out_ptr + 1);
if (fdebug)
warn("recycle %d - leaving %d, returning %d [%s]",
}
else /* no EOL, so append the complete buffer */
}
}
BUF_OFFSET(my_sv) = 0 ;
if (FILTER_ACTIVE(my_sv))
{
dSP ;
int count ;
if (fdebug)
ENTER ;
current_idx = idx ;
/* make $_ use our buffer */
/* if (SvROK(PERL_OBJECT(my_sv)) && SvTYPE(SvRV(PERL_OBJECT(my_sv))) == SVt_PVCV) { */
}
else {
PUTBACK ;
}
SPAGAIN ;
if (count != 1)
croak("Filter::Util::Call - %s::filter returned %d values, 1 was expected \n",
n = POPi ;
if (fdebug)
warn("status = %d, length op buf = %d [%s]\n",
PUTBACK ;
FREETMPS ;
LEAVE ;
}
else
if (n <= 0)
{
/* Either EOF or an error */
if (fdebug)
/* PERL_MODULE(my_sv) ; */
/* PERL_OBJECT(my_sv) ; */
/* If error, return the code */
if (n < 0)
return n ;
/* return what we have so far else signal eof */
}
}
}
REQUIRE: 1.924
#define IDX current_idx
int
filter_read(size=0)
int size
CODE:
{
}
void
char * perlmodule
int coderef
{
(void)SvPOK_only(sv) ;
BUF_OFFSET(sv) = 0 ;
}
void
CODE:
if (PL_rsfp_filters && IDX <= av_len(PL_rsfp_filters) && FILTER_DATA(IDX) && FILTER_ACTIVE(FILTER_DATA(IDX)))
void
char *package
BOOT:
{
fdebug = 0;
/* temporary hack to control debugging in toke.c */
if (fdebug)
}