Graphics-SANE
view release on metacpan or search on metacpan
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 )