diff options
Diffstat (limited to 'include/sane/sanei_backend.h')
-rw-r--r-- | include/sane/sanei_backend.h | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/include/sane/sanei_backend.h b/include/sane/sanei_backend.h new file mode 100644 index 0000000..1b5afe2 --- /dev/null +++ b/include/sane/sanei_backend.h @@ -0,0 +1,179 @@ +/** @file sanei_backend.h + * Compatibility header file for backends + * + * This file provides some defines for macros missing on some platforms. + * It also has the SANE API entry points. sanei_backend.h must be included + * by every backend. + * + * @sa sanei.h sanei_thread.h + */ + + +/* + * Compiler related options + */ + +/** Mark unused variables/parameters + * + * Tells the compiler a variable is unused, so the compiler doesn't spit a warning. + */ +#ifdef __GNUC__ +#define __sane_unused__ __attribute__((unused)) +#else +#define __sane_unused__ +#endif + +/** @name Compatibility macros + * @{ + */ +#include <sane/sanei_debug.h> + +#ifdef HAVE_SYS_HW_H + /* OS/2 i/o-port access compatibility macros: */ +# define inb(p) _inp8 (p) +# define outb(v,p) _outp8 ((p),(v)) +# define ioperm(b,l,o) _portaccess ((b),(b)+(l)-1) +# define HAVE_IOPERM 1 +#endif + +#ifndef HAVE_OS2_H +#include <fcntl.h> +#ifndef O_NONBLOCK +# ifdef O_NDELAY +# define O_NONBLOCK O_NDELAY +# else +# ifdef FNDELAY +# define O_NONBLOCK FNDELAY /* last resort */ +# endif +# endif +#endif +#endif /* HAVE_OS2_H */ + +#include <limits.h> +#ifndef PATH_MAX +# define PATH_MAX 1024 +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +#ifndef MM_PER_INCH +#define MM_PER_INCH 25.4 +#endif + +#ifdef HAVE_SIGPROCMASK +# define SIGACTION sigaction +#else + +/* Just enough backwards compatibility that we get by in the backends + without making handstands. */ +# ifdef sigset_t +# undef sigset_t +# endif +# ifdef sigemptyset +# undef sigemptyset +# endif +# ifdef sigfillset +# undef sigfillset +# endif +# ifdef sigaddset +# undef sigaddset +# endif +# ifdef sigdelset +# undef sigdelset +# endif +# ifdef sigprocmask +# undef sigprocmask +# endif +# ifdef SIG_BLOCK +# undef SIG_BLOCK +# endif +# ifdef SIG_UNBLOCK +# undef SIG_UNBLOCK +# endif +# ifdef SIG_SETMASK +# undef SIG_SETMASK +# endif + +# define sigset_t int +# define sigemptyset(set) do { *(set) = 0; } while (0) +# define sigfillset(set) do { *(set) = ~0; } while (0) +# define sigaddset(set,signal) do { *(set) |= sigmask (signal); } while (0) +# define sigdelset(set,signal) do { *(set) &= ~sigmask (signal); } while (0) +# define sigaction(sig,new,old) sigvec (sig,new,old) + + /* Note: it's not safe to just declare our own "struct sigaction" since + some systems (e.g., some versions of OpenStep) declare that structure, + but do not implement sigprocmask(). Hard to believe, aint it? */ +# define SIGACTION sigvec +# define SIG_BLOCK 1 +# define SIG_UNBLOCK 2 +# define SIG_SETMASK 3 +#endif /* !HAVE_SIGPROCMASK */ +/* @} */ + + +/** @name Declaration of entry points: + * @{ + */ +extern SANE_Status ENTRY(init) (SANE_Int *, SANE_Auth_Callback); +extern SANE_Status ENTRY(get_devices) (const SANE_Device ***, SANE_Bool); +extern SANE_Status ENTRY(open) (SANE_String_Const, SANE_Handle *); +extern const SANE_Option_Descriptor * + ENTRY(get_option_descriptor) (SANE_Handle, SANE_Int); +extern SANE_Status ENTRY(control_option) (SANE_Handle, SANE_Int, SANE_Action, + void *, SANE_Word *); +extern SANE_Status ENTRY(get_parameters) (SANE_Handle, SANE_Parameters *); +extern SANE_Status ENTRY(start) (SANE_Handle); +extern SANE_Status ENTRY(read) (SANE_Handle, SANE_Byte *, SANE_Int, + SANE_Int *); +extern SANE_Status ENTRY(set_io_mode) (SANE_Handle, SANE_Bool); +extern SANE_Status ENTRY(get_select_fd) (SANE_Handle, SANE_Int *); +extern void ENTRY(cancel) (SANE_Handle); +extern void ENTRY(close) (SANE_Handle); +extern void ENTRY(exit) (void); + +#ifndef STUBS +/* Now redirect sane_* calls to backend's functions: */ + +#define sane_init(a,b) ENTRY(init) (a,b) +#define sane_get_devices(a,b) ENTRY(get_devices) (a,b) +#define sane_open(a,b) ENTRY(open) (a,b) +#define sane_get_option_descriptor(a,b) ENTRY(get_option_descriptor) (a,b) +#define sane_control_option(a,b,c,d,e) ENTRY(control_option) (a,b,c,d,e) +#define sane_get_parameters(a,b) ENTRY(get_parameters) (a,b) +#define sane_start(a) ENTRY(start) (a) +#define sane_read(a,b,c,d) ENTRY(read) (a,b,c,d) +#define sane_set_io_mode(a,b) ENTRY(set_io_mode) (a,b) +#define sane_get_select_fd(a,b) ENTRY(get_select_fd) (a,b) +#define sane_cancel(a) ENTRY(cancel) (a) +#define sane_close(a) ENTRY(close) (a) +#define sane_exit(a) ENTRY(exit) (a) +#endif /* STUBS */ +/* @} */ + +/** Internationalization for SANE backends + * + * Add SANE_I18N() to all texts that can be translated. + * E.g. out_txt = SANE_I18N("Hello"); + */ +#ifndef SANE_I18N +#define SANE_I18N(text) text +#endif + +/** Option_Value union + * + * Convenience union to access option values given to the backend + */ +#ifndef SANE_OPTION +typedef union +{ + SANE_Bool b; /**< bool */ + SANE_Word w; /**< word */ + SANE_Word *wa; /**< word array */ + SANE_String s; /**< string */ +} +Option_Value; +#define SANE_OPTION 1 +#endif |