SANEI  1.2.1.196-0f472
sanei_backend.h
Go to the documentation of this file.
1 
15 #include <sane/sanei_debug.h>
16 
17 #if __STDC_VERSION__ >= 199901L
18 /* __func__ is provided */
19 #elif __GNUC__ >= 5
20 /* __func__ is provided */
21 #elif __GNUC__ >= 2
22 # define __func__ __FUNCTION__
23 #else
24 # define __func__ "(unknown)"
25 #endif
26 
27 #ifndef HAVE_OS2_H
28 #include <fcntl.h>
29 #ifndef O_NONBLOCK
30 # ifdef O_NDELAY
31 # define O_NONBLOCK O_NDELAY
32 # else
33 # ifdef FNDELAY
34 # define O_NONBLOCK FNDELAY /* last resort */
35 # endif
36 # endif
37 #endif
38 #endif /* HAVE_OS2_H */
39 
40 #include <limits.h>
41 #ifndef PATH_MAX
42 # define PATH_MAX 1024
43 #endif
44 
45 #ifndef M_PI
46 #define M_PI 3.14159265358979323846
47 #endif
48 
49 #ifndef MM_PER_INCH
50 #define MM_PER_INCH 25.4
51 #endif
52 
53 #ifdef HAVE_SIGPROCMASK
54 # define SIGACTION sigaction
55 #else
56 
57 /* Just enough backwards compatibility that we get by in the backends
58  without making handstands. */
59 # ifdef sigset_t
60 # undef sigset_t
61 # endif
62 # ifdef sigemptyset
63 # undef sigemptyset
64 # endif
65 # ifdef sigfillset
66 # undef sigfillset
67 # endif
68 # ifdef sigaddset
69 # undef sigaddset
70 # endif
71 # ifdef sigdelset
72 # undef sigdelset
73 # endif
74 # ifdef sigprocmask
75 # undef sigprocmask
76 # endif
77 # ifdef SIG_BLOCK
78 # undef SIG_BLOCK
79 # endif
80 # ifdef SIG_UNBLOCK
81 # undef SIG_UNBLOCK
82 # endif
83 # ifdef SIG_SETMASK
84 # undef SIG_SETMASK
85 # endif
86 
87 # define sigset_t int
88 # define sigemptyset(set) do { *(set) = 0; } while (0)
89 # define sigfillset(set) do { *(set) = ~0; } while (0)
90 # define sigaddset(set,signal) do { *(set) |= sigmask (signal); } while (0)
91 # define sigdelset(set,signal) do { *(set) &= ~sigmask (signal); } while (0)
92 # define sigaction(sig,new,old) sigvec (sig,new,old)
93 
94  /* Note: it's not safe to just declare our own "struct sigaction" since
95  some systems (e.g., some versions of OpenStep) declare that structure,
96  but do not implement sigprocmask(). Hard to believe, aint it? */
97 # define SIGACTION sigvec
98 # define SIG_BLOCK 1
99 # define SIG_UNBLOCK 2
100 # define SIG_SETMASK 3
101 #endif /* !HAVE_SIGPROCMASK */
102 /* @} */
103 
104 
108 #ifdef __cplusplus
109 extern "C" {
110 #endif
111 
112 extern SANE_Status ENTRY(init) (SANE_Int *, SANE_Auth_Callback);
113 extern SANE_Status ENTRY(get_devices) (const SANE_Device ***, SANE_Bool);
114 extern SANE_Status ENTRY(open) (SANE_String_Const, SANE_Handle *);
115 extern const SANE_Option_Descriptor *
116  ENTRY(get_option_descriptor) (SANE_Handle, SANE_Int);
117 extern SANE_Status ENTRY(control_option) (SANE_Handle, SANE_Int, SANE_Action,
118  void *, SANE_Word *);
119 extern SANE_Status ENTRY(get_parameters) (SANE_Handle, SANE_Parameters *);
120 extern SANE_Status ENTRY(start) (SANE_Handle);
121 extern SANE_Status ENTRY(read) (SANE_Handle, SANE_Byte *, SANE_Int,
122  SANE_Int *);
123 extern SANE_Status ENTRY(set_io_mode) (SANE_Handle, SANE_Bool);
124 extern SANE_Status ENTRY(get_select_fd) (SANE_Handle, SANE_Int *);
125 extern void ENTRY(cancel) (SANE_Handle);
126 extern void ENTRY(close) (SANE_Handle);
127 extern void ENTRY(exit) (void);
128 
129 #ifdef __cplusplus
130 } // extern "C"
131 #endif
132 
133 #ifndef STUBS
134 /* Now redirect sane_* calls to backend's functions: */
135 
136 #define sane_init(a,b) ENTRY(init) (a,b)
137 #define sane_get_devices(a,b) ENTRY(get_devices) (a,b)
138 #define sane_open(a,b) ENTRY(open) (a,b)
139 #define sane_get_option_descriptor(a,b) ENTRY(get_option_descriptor) (a,b)
140 #define sane_control_option(a,b,c,d,e) ENTRY(control_option) (a,b,c,d,e)
141 #define sane_get_parameters(a,b) ENTRY(get_parameters) (a,b)
142 #define sane_start(a) ENTRY(start) (a)
143 #define sane_read(a,b,c,d) ENTRY(read) (a,b,c,d)
144 #define sane_set_io_mode(a,b) ENTRY(set_io_mode) (a,b)
145 #define sane_get_select_fd(a,b) ENTRY(get_select_fd) (a,b)
146 #define sane_cancel(a) ENTRY(cancel) (a)
147 #define sane_close(a) ENTRY(close) (a)
148 #define sane_exit(a) ENTRY(exit) (a)
149 #endif /* STUBS */
150 /* @} */
151 
157 #ifndef SANE_I18N
158 #define SANE_I18N(text) text
159 #endif
160 
165 #ifndef SANE_OPTION
166 typedef union
167 {
168  SANE_Bool b;
169  SANE_Word w;
170  SANE_Word *wa;
171  SANE_String s;
172 }
174 #define SANE_OPTION 1
175 #endif
SANE_Status ENTRY() open(SANE_String_Const, SANE_Handle *)
Internationalization for SANE backends.
void ENTRY() exit(void)
Internationalization for SANE backends.
SANE_Status ENTRY() set_io_mode(SANE_Handle, SANE_Bool)
Internationalization for SANE backends.
SANE_Status ENTRY() get_parameters(SANE_Handle, SANE_Parameters *)
Internationalization for SANE backends.
void ENTRY() cancel(SANE_Handle)
Internationalization for SANE backends.
SANE_Status ENTRY() init(SANE_Int *, SANE_Auth_Callback)
Internationalization for SANE backends.
SANE_Status ENTRY() get_select_fd(SANE_Handle, SANE_Int *)
Internationalization for SANE backends.
void ENTRY() close(SANE_Handle)
Internationalization for SANE backends.
SANE_Status ENTRY() control_option(SANE_Handle, SANE_Int, SANE_Action, void *, SANE_Word *)
Internationalization for SANE backends.
SANE_Status ENTRY() read(SANE_Handle, SANE_Byte *, SANE_Int, SANE_Int *)
Internationalization for SANE backends.
const SANE_Option_Descriptor *ENTRY() get_option_descriptor(SANE_Handle, SANE_Int)
Internationalization for SANE backends.
SANE_Status ENTRY() get_devices(const SANE_Device ***, SANE_Bool)
Internationalization for SANE backends.
SANE_Status ENTRY() start(SANE_Handle)
Internationalization for SANE backends.
Support for printing debug messages.
#define ENTRY(name)
Expands to sane_BACKEND_NAME_name.
Definition: sanei_debug.h:74
Option_Value union.
Definition: sanei_backend.h:167
SANE_Word w
word
Definition: sanei_backend.h:169
SANE_Word * wa
word array
Definition: sanei_backend.h:170
SANE_String s
string
Definition: sanei_backend.h:171
SANE_Bool b
bool
Definition: sanei_backend.h:168