summaryrefslogtreecommitdiffstats
path: root/perl/typemap
diff options
context:
space:
mode:
Diffstat (limited to 'perl/typemap')
-rw-r--r--perl/typemap66
1 files changed, 66 insertions, 0 deletions
diff --git a/perl/typemap b/perl/typemap
new file mode 100644
index 0000000..dda1979
--- /dev/null
+++ b/perl/typemap
@@ -0,0 +1,66 @@
+# objects
+Barcode::ZBar::Error T_PTROBJ
+Barcode::ZBar::Symbol T_PTROBJ
+Barcode::ZBar::Image T_PTROBJ
+Barcode::ZBar::Processor T_PTROBJ
+Barcode::ZBar::Video T_PTROBJ
+Barcode::ZBar::Window T_PTROBJ
+Barcode::ZBar::ImageScanner T_PTROBJ
+Barcode::ZBar::Decoder T_PTROBJ
+Barcode::ZBar::Scanner T_PTROBJ
+
+# enums
+zbar_color_t T_ENUM
+zbar_error_t T_ENUM
+zbar_symbol_type_t T_ENUM
+zbar_config_t T_ENUM
+zbar_modifier_t T_ENUM
+zbar_orientation_t T_ENUM
+
+# special scalars
+fourcc_t T_FOURCC
+timeout_t T_TIMEOUT
+
+# error handling
+config_error T_CONFIG_ERROR
+
+
+INPUT
+
+T_ENUM
+ $var = ($type)SvIV($arg)
+T_FOURCC
+ {
+ if(SvPOK($arg)) {
+ char *str = SvPV_nolen($arg);
+ $var = zbar_fourcc_parse(str);
+ }
+ else
+ $var = SvUV($arg);
+ }
+T_TIMEOUT
+ if(($var = ($type)(SvNV($arg) * 1000.)) < 0)
+ $var = -1;
+T_PV
+ $var = SvOK($arg) ? SvPV_nolen($arg) : NULL;
+
+OUTPUT
+
+T_ENUM
+ $arg = SvREFCNT_inc(lookup_enum(LOOKUP_$ntype, (int)$var));
+T_FOURCC
+ {
+ char str[4] = {
+ $var & 0xff,
+ ($var >> 8) & 0xff,
+ ($var >> 16) & 0xff,
+ ($var >> 24) & 0xff,
+ };
+ sv_setuv($arg, $var);
+ sv_setpvn($arg, str, 4);
+ SvIOK_on($arg);
+ }
+
+T_CONFIG_ERROR
+ if($var)
+ croak("invalid configuration setting: %s", config_string);