GSAPI

 view release on metacpan or  search on metacpan

GSAPI.xs  view on Meta::CPAN


    CB_CALL;
    rv = POPi;
    CB_SUFFIX;
    return rv;
#endif
}

/* Allocate memory for bitmap */
static void *display_memalloc(void *handle, void *device, 
                        unsigned long size) 
{
    void *mem;
    if(DEBUG) warn( "memalloc %i", size );
    Newx( mem, size, void );
    if(DEBUG) warn( "memalloc %x", mem );
    return mem;
}

/* Free memory for bitmap */
static int 
display_memfree(void *handle, void *device, void *mem )
{
    if(DEBUG) warn( "memfree %x", mem );
    Safefree( mem );
    return 0;
}


/* callback structure for "display" device */
display_callback display_cb = {
    sizeof(display_callback),
    DISPLAY_VERSION_MAJOR,
    DISPLAY_VERSION_MINOR,
    display_open,
    display_preclose,
    display_close,
    display_presize,
    display_size,
    display_sync,
    display_page,
    display_update,
    display_memalloc,
    display_memfree
};

/* -------------------------------------------------------- */



MODULE = GSAPI		PACKAGE = GSAPI		


INCLUDE: const-xs.inc

void
revision()
  PROTOTYPE:
  PREINIT:
     gsapi_revision_t rev;
  PPCODE:
     gsapi_revision(&rev, sizeof(rev));
     EXTEND(SP, 4);
     PUSHs(sv_2mortal(newSVpv(rev.product,0)));
     PUSHs(sv_2mortal(newSVpv(rev.copyright, 0)));
     PUSHs(sv_2mortal(newSViv(rev.revision)));
     PUSHs(sv_2mortal(newSViv(rev.revisiondate)));

GSAPI::instance
new_instance()
  PROTOTYPE:
  PREINIT:
      gs_main_instance *inst = 0;
  CODE:
       gsapi_new_instance(&inst, 0); // we don't need to check rc.
       RETVAL = inst;
  OUTPUT:
       RETVAL

void
delete_instance(inst)
        GSAPI::instance inst
   PROTOTYPE: $
   CODE:
        gsapi_delete_instance(inst);
        

IV
set_stdio(inst, Fstdin, Fstdout, Fstderr)
        GSAPI::instance inst
        SV *Fstdin
        SV *Fstdout
        SV *Fstderr
    PROTOTYPE: $$$$
    PREINIT:
        int i;
    CODE:
        for(i = 0; i < 3; i++) {
            if( cb_io[i] == NULL)
                cb_io[i] = NEWSV(0, 0);
        }
        sv_setsv(cb_io[0], Fstdin);
        sv_setsv(cb_io[1], Fstdout);
        sv_setsv(cb_io[2], Fstderr);
        RETVAL = gsapi_set_stdio(inst, run_stdin, run_stdout, run_stderr);
    OUTPUT:
        RETVAL
        
IV
set_display_callback(inst, Fdisplay)
        GSAPI::instance inst
        SV *Fdisplay
    PROTOTYPE: $$
    CODE:
        cb_display = NEWSV(0,0);
        sv_setsv( cb_display, Fdisplay );
        RETVAL = gsapi_set_display_callback(inst, &display_cb);
    OUTPUT:
        RETVAL




( run in 0.707 second using v1.01-cache-2.11-cpan-5511b514fd6 )