summaryrefslogtreecommitdiffstats
path: root/plug-ins/twain/tw_func.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--plug-ins/twain/tw_func.h243
1 files changed, 243 insertions, 0 deletions
diff --git a/plug-ins/twain/tw_func.h b/plug-ins/twain/tw_func.h
new file mode 100644
index 0000000..69d305c
--- /dev/null
+++ b/plug-ins/twain/tw_func.h
@@ -0,0 +1,243 @@
+/*
+ * TWAIN Plug-in
+ * Copyright (C) 1999 Craig Setera
+ * Craig Setera <setera@home.com>
+ * 03/31/1999
+ *
+ * Updated for Mac OS X support
+ * Brion Vibber <brion@pobox.com>
+ * 07/22/2004
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ *
+ * Based on (at least) the following plug-ins:
+ * Screenshot
+ * GIF
+ * Randomize
+ *
+ * Any suggestions, bug-reports or patches are welcome.
+ *
+ * This plug-in interfaces to the TWAIN support library in order
+ * to capture images from TWAIN devices directly into GIMP images.
+ * The plug-in is capable of acquiring the following type of
+ * images:
+ * - B/W (1 bit images translated to grayscale B/W)
+ * - Grayscale up to 16 bits per pixel
+ * - RGB up to 16 bits per sample (24, 30, 36, etc.)
+ * - Paletted images (both Gray and RGB)
+ *
+ * Prerequisites:
+ * Should compile and run on both Win32 and Mac OS X 10.3 (possibly
+ * also on 10.2).
+ *
+ * Known problems:
+ * - Multiple image transfers will hang the plug-in. The current
+ * configuration compiles with a maximum of single image transfers.
+ * - On Mac OS X, canceling doesn't always close things out fully.
+ * - Epson TWAIN driver on Mac OS X crashes the plugin when scanning.
+ */
+
+/*
+ * Revision history
+ * (02/07/99) v0.1 First working version (internal)
+ * (02/09/99) v0.2 First release to anyone other than myself
+ * (02/15/99) v0.3 Added image dump and read support for debugging
+ * (03/31/99) v0.5 Added support for multi-byte samples and paletted
+ * images.
+ * (07/23/04) v0.6 Added Mac OS X support.
+ */
+
+#ifndef _TW_FUNC_H
+#define _TW_FUNC_H
+
+#include "tw_platform.h"
+
+/*
+ * Pre-image transfer function type
+ *
+ * Sent to the caller before any of the
+ * images are transferred to the application.
+ */
+typedef void (* TW_PRE_TXFR_CB)(void *);
+
+/*
+ * Image transfer begin function type
+ *
+ * Sent to the caller when an image transfer
+ * is about to begin. The caller may return
+ * FALSE if the transfer should not continue.
+ * Otherwise, the function should return a
+ * TRUE value.
+ */
+typedef int (* TW_TXFR_BEGIN_CB)(pTW_IMAGEINFO, void *);
+
+/*
+ * Image transfer callback function type
+ *
+ * Expected to return true if the image transfer
+ * should continue. False if the transfer should
+ * be cancelled.
+ */
+typedef int (* TW_TXFR_DATA_CB)(pTW_IMAGEINFO, pTW_IMAGEMEMXFER, void *);
+
+/*
+ * Image transfer end function type
+ *
+ * Sent to the caller when an image transfer
+ * is completed. The caller will be handed
+ * the image transfer completion state. The
+ * following values (defined in twain.h) are
+ * possible:
+ *
+ * TWRC_XFERDONE
+ * The transfer completed successfully
+ * TWRC_CANCEL
+ * The transfer was completed by the user
+ * TWRC_FAILURE
+ * The transfer failed.
+ */
+typedef int (* TW_TXFR_END_CB)(int, int, void *);
+
+/*
+ * Post-image transfer callback
+ *
+ * This callback function is called after all
+ * of the possible images have been transferred
+ * from the datasource.
+ */
+typedef void (* TW_POST_TXFR_CB)(int, void *);
+
+/*
+ * The following structure defines the
+ * three callback functions that are called
+ * while an image is being transferred.
+ * The types of these functions are defined
+ * above. Any function that is NULL will just
+ * not be called.
+ */
+typedef struct _TXFR_CB_FUNCS {
+ /* Pre-transfer function */
+ TW_PRE_TXFR_CB preTxfrCb;
+
+ /* Begin function */
+ TW_TXFR_BEGIN_CB txfrBeginCb;
+
+ /* Data transfer */
+ TW_TXFR_DATA_CB txfrDataCb;
+
+ /* End function */
+ TW_TXFR_END_CB txfrEndCb;
+
+ /* Post-transfer function */
+ TW_POST_TXFR_CB postTxfrCb;
+} TXFR_CB_FUNCS, *pTXFR_CB_FUNCS;
+
+/*
+ * Data representing a TWAIN
+ * application to data source
+ * session.
+ */
+typedef struct _TWAIN_SESSION {
+ /* The window handle related to the TWAIN application on Win32 */
+ TW_HANDLE hwnd;
+
+ /* The current TWAIN return code */
+ TW_UINT16 twRC;
+
+ /* The application's TWAIN identity */
+ pTW_IDENTITY appIdentity;
+
+ /* The datasource's TWAIN identity */
+ pTW_IDENTITY dsIdentity;
+
+ /* The image data transfer functions */
+ pTXFR_CB_FUNCS transferFunctions;
+
+ /* Client data that is associated with the image
+ * transfer callback
+ */
+ void *clientData;
+
+ /*
+ * The following variable tracks the current state
+ * as related to the TWAIN engine. The states are:
+ *
+ * 1) Pre-session: The DSM has not been loaded
+ * 2) Source Manager Loaded (not opened)
+ * 3) Source Manager Opened
+ * 4) Source Open
+ * 5) Source Enabled
+ * 6) Transfer ready
+ * 7) Transferring
+ */
+ int twainState;
+
+} TW_SESSION, *pTW_SESSION;
+
+/* Session structure access
+ * macros
+ */
+/* #define pAPP_IDENTITY(tw_session) (&(tw_session->appIdentity)) */
+#define APP_IDENTITY(tw_session) (tw_session->appIdentity)
+/* #define pDS_IDENTITY(tw_session) (&(tw_session->dsIdentity)) */
+#define DS_IDENTITY(tw_session) (tw_session->dsIdentity)
+
+/* State macros... Each expects
+ * a Twain Session pointer
+ */
+#define TWAIN_LOADED(tw_session) (tw_session->twainState >= 2)
+#define TWAIN_UNLOADED(tw_session) (tw_session->twainState < 2)
+#define DSM_IS_OPEN(tw_session) (tw_session->twainState >= 3)
+#define DSM_IS_CLOSED(tw_session) (tw_session->twainState < 3)
+#define DS_IS_OPEN(tw_session) (tw_session->twainState >= 4)
+#define DS_IS_CLOSED(tw_session) (tw_session->twainState < 4)
+#define DS_IS_ENABLED(tw_session) (tw_session->twainState >= 5)
+#define DS_IS_DISABLED(tw_session) (tw_session->twainState < 5)
+
+/* Function declarations */
+char *twainError(int);
+char *currentTwainError(pTW_SESSION);
+int getImage(pTW_SESSION);
+int loadTwainLibrary(pTW_SESSION);
+int unloadTwainLibrary(pTW_SESSION twSession);
+int openDSM(pTW_SESSION);
+int selectDS(pTW_SESSION);
+int selectDefaultDS(pTW_SESSION);
+int openDS(pTW_SESSION);
+int requestImageAcquire(pTW_SESSION, gboolean);
+int disableDS(pTW_SESSION);
+int closeDS(pTW_SESSION);
+int closeDSM(pTW_SESSION);
+void cancelPendingTransfers(pTW_SESSION);
+int scanImage (void);
+
+TW_FIX32 FloatToFIX32(float);
+float FIX32ToFloat(TW_FIX32);
+
+void processTwainMessage(TW_UINT16 message, pTW_SESSION twSession);
+
+pTW_SESSION newSession(pTW_IDENTITY);
+void registerWindowHandle(pTW_SESSION, TW_HANDLE);
+void registerTransferCallbacks(pTW_SESSION, pTXFR_CB_FUNCS, void *);
+void setClientData(pTW_SESSION session, void *clientData);
+pTW_SESSION initializeTwain(void);
+
+#ifdef G_OS_WIN32
+void LogLastWinError(void);
+BOOL InitApplication(HINSTANCE hInstance);
+BOOL InitInstance(HINSTANCE hInstance, int nCmdShow, pTW_SESSION twSession);
+#endif
+
+#endif /* _TW_FUNC_H */