Hi - I'm trying to write an XS Function which returns a list of values: 
Following the examples in the perlxs/perlguts/perlxstut pages, I tried:

void
j_random_ids(zp, ...)
    J_Random * zp
    PREINIT:
    int i;
    int j;
    int p;
    int n = 0;
    PPCODE:
    
    [ some code to mangle some data structures here
      and put the number of return values in n ]

    if( zp->id[ID_OVERFLOW] ) 
    {
        XSRETURN_EMPTY;
    }
    else 
    {
        EXTEND( SP, n );
        for(i = 0; i < MAX_IDS; i++) 
        { 
            if(zp->id[i]) { PUSHi(i); }
        }
    }

I've also tried:

    else
    {
        for(i = 0; i < MAX_IDS; i++)
        {
            if(zp->id[i]) { XPUSHi(i); }
        }
    }

Both of these result in the folowing error:

Jrandom.xs: In function `XS_Z__j_random_ids':
Jrandom.xs:227: `targ' undeclared (first use in this function)
Jrandom.xs:227: (Each undeclared identifier is reported only once
Jrandom.xs:227: for each function it appears in.)
make: *** [Jrandom.o] Error 1
make: Target `makemakerdflt' not remade because of errors.

I ran Jrandom.c through gcc -E, and found things like:

Perl_sv_setiv (targ , (IV)( i ));

in there, but none of the files in/usr/libb/perl5/5.005/i38-linux/CORE
seem to define targ : there's a '#define TARG targ', but no definition 
of targ itself [based on a quick look and some grepping]

perl -V says:

ummary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
  Platform:
    osname=linux, osvers=2.2.15pre14, archname=i386-linux
    uname='linux them 2.2.15pre14 #2 smp mon mar 13 14:29:00 est 2000 i686
unknown '
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
  Compiler:
    cc='cc', optimize='-O2 ', gccversion=2.95.2 20000313 (Debian GNU/Linux)
    cppflags='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN
-I/usr/local/include'
    ccflags ='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN
-I/usr/local/include'
    stdchar='char', d_stdstdio=undef, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lc -lposix -lcrypt
    libc=, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'

Characteristics of this binary (from libperl): 
  Built under linux
  Compiled at Apr 30 2000 12:08:38
  @INC:
    /usr/lib/perl5/5.005/i386-linux
    /usr/lib/perl5/5.005
    /usr/local/lib/site_perl/i386-linux
    /usr/local/lib/site_perl
    /usr/lib/perl5
    .

Any ideas? Hints? Thwacks upside the head with a clue by four?

-- 
Vivek

Reply via email to