Graphics-SANE

 view release on metacpan or  search on metacpan

SANE.xs  view on Meta::CPAN


void set_error(int sts)
{
    SV *err;
    err = perl_get_sv("Graphics::SANE::err", 1);
    sv_setiv(err, sts);
    err = perl_get_sv("Graphics::SANE::errstr", 1);
    sv_setpv(err, sane_strstatus(sts));
}

MODULE = Graphics::SANE		PACKAGE = Graphics::SANE		

INCLUDE: const-xs.inc

# init(SANE_Int *version_code, SANE_Auth_Callback authorize)
# void exit()
# get_devices(const SANE_Device ***device_list, SANE_Bool local_only)
# SANE_String_Const sane_strstatus (SANE_Status status)

#Handle Functions:
# open(SANE_String_Const devicename, SANE_HANDLE *handle)
# void close(SANE_Handle handle)
# SANE_Option_Descriptor *get_option_descriptor(SANE_Handle,SANE_Int option)
# sane_control_option (SANE_Handle handle, SANE_Int option,
#		       SANE_Action action, void *value, SANE_Int * info)
# sane_get_parameters (SANE_Handle handle, SANE_Parameters *params)
# sane_start (SANE_Handle handle)
# sane_read (SANE_Handle handle, SANE_Byte *data, SANE_Int max_length,
#	     SANE_Int * length)
# void sane_cancel (SANE_Handle handle)
# sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking)
# sane_get_select_fd (SANE_Handle handle, SANE_Int * fd)

SV *
init()
  CODE:
    SANE_Word vers;
    SANE_Status sts;
    int major, minor, build;
    HV *hv = newHV();
    sts = sane_init(&vers, NULL);
    if (sts)
    {
	set_error(sts);
	XSRETURN_EMPTY;
    }
    hash_store(hv, "major", newSViv(SANE_VERSION_MAJOR(vers)));
    hash_store(hv, "minor", newSViv(SANE_VERSION_MINOR(vers)));
    hash_store(hv, "build", newSViv(SANE_VERSION_BUILD(vers)));
    RETVAL = newRV_noinc((SV *) hv);
  OUTPUT:
    RETVAL

void
exit()
  CODE:
    sane_exit();

void
get_devices()
  PPCODE:
    SANE_Status sts;
    const SANE_Device **list,*dev;
    int cnt;
    sts = sane_get_devices(&list,0);
    if (sts)
    {
	set_error(sts);
	XSRETURN_EMPTY;
    }
    for (cnt=0;dev=list[cnt];cnt++)
    {
	HV *hv = newHV();
	hash_store(hv, "name", newSVpv(dev->name, 0));
	hash_store(hv, "vendor", newSVpv(dev->vendor, 0));
	hash_store(hv, "model", newSVpv(dev->model, 0));
	hash_store(hv, "type", newSVpv(dev->type, 0));
	EXTEND(SP, 1);
	PUSHs(newRV_noinc((SV *) hv));
    }

SV *
strstatus(sts)
int sts
  PREINIT:
    SANE_String_Const s;
  CODE:
    s = sane_strstatus(sts);
    RETVAL = newSVpv(s, 0);
  OUTPUT:
    RETVAL

Graphics_SANE_Handle
open(name)
char *name
  CODE:
    SANE_Status sts;
    SANE_Handle handle;
    sts = sane_open(name, &handle);
    if (sts != 0)
    {
	set_error(sts);
	XSRETURN_EMPTY;
    }
    RETVAL = handle;
  OUTPUT:
    RETVAL

MODULE = Graphics::SANE PACKAGE = Graphics::SANE::Handle

void
close(h)
Graphics_SANE_Handle h
  CODE:
    sane_close(h);

SV *
get_option_descriptor(h, idx)
Graphics_SANE_Handle h
int idx
  PREINIT:



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