PATCH: [1/4] Splitting TWAIN_32 and adding gphoto driver
Marcus Meissner
marcus at jet.franken.de
Mon May 1 09:09:00 CDT 2006
Hi,
This patch removes non-DSM stuff from twain_32.dll.
It also makes it no longer depend on libsane.
You need to do:
rm dlls/twain_32/capability.c
rm dlls/twain_32/ds_audio.c
rm dlls/twain_32/ds_ctrl.c
rm dlls/twain_32/ds_image.c
rm dlls/twain_32/resource.h
rm dlls/twain_32/rsrc.rc
rm dlls/twain_32/twain_De.rc
rm dlls/twain_32/twain_En.rc
rm dlls/twain_32/twain_Fi.rc
rm dlls/twain_32/twain_Fr.rc
rm dlls/twain_32/twain_Ko.rc
rm dlls/twain_32/twain_No.rc
rm dlls/twain_32/ui.c
Ciao, Marcus
Changelog:
Marcus Meissner <marcus at jet.franken.de>
Removed the sane datasource from here.
Added DS driver support.
Changed autodetection to facilitate the drivers.
Index: dlls/twain_32/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/twain_32/Makefile.in,v
retrieving revision 1.1
diff -u -r1.1 Makefile.in
--- dlls/twain_32/Makefile.in 10 Apr 2006 18:49:32 -0000 1.1
+++ dlls/twain_32/Makefile.in 1 May 2006 14:08:07 -0000
@@ -3,25 +3,15 @@
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = twain_32.dll
-IMPORTS = comctl32 user32 gdi32 kernel32 ntdll
-EXTRALIBS = @SANELIBS@
-EXTRAINCL = @SANEINCL@
+IMPORTS = kernel32 ntdll
C_SRCS = \
- capability.c \
- ds_audio.c \
- ds_ctrl.c \
- ds_image.c \
dsm_ctrl.c \
- twain32_main.c \
- ui.c
+ twain32_main.c
C_SRCS16 = \
twain16_main.c
-RC_SRCS = \
- rsrc.rc
-
SPEC_SRCS16 = twain.spec
@MAKE_DLL_RULES@
Index: dlls/twain_32/dsm_ctrl.c
===================================================================
RCS file: /home/wine/wine/dlls/twain_32/dsm_ctrl.c,v
retrieving revision 1.1
diff -u -r1.1 dsm_ctrl.c
--- dlls/twain_32/dsm_ctrl.c 10 Apr 2006 18:49:32 -0000 1.1
+++ dlls/twain_32/dsm_ctrl.c 1 May 2006 14:08:07 -0000
@@ -2,6 +2,7 @@
* TWAIN32 Source Manager
*
* Copyright 2000 Corel Corporation
+ * Copyright 2006 Marcus Meissner
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -34,420 +35,293 @@
WINE_DEFAULT_DEBUG_CHANNEL(twain);
-/* DG_CONTROL/DAT_IDENTITY/MSG_CLOSEDS */
-TW_UINT16 TWAIN_CloseDS (pTW_IDENTITY pOrigin, TW_MEMREF pData)
-{
-#ifndef HAVE_SANE
- DSM_twCC = TWCC_NODS;
- return TWRC_FAILURE;
-#else
- TW_UINT16 twRC = TWRC_SUCCESS;
- pTW_IDENTITY pIdentity = (pTW_IDENTITY) pData;
- activeDS *currentDS = NULL, *prevDS = NULL;
+struct all_devices {
+ char *modname;
+ TW_IDENTITY identity;
+};
+
+static int nrdevices = 0;
+static struct all_devices *devices = NULL;
+
+static void
+twain_add_onedriver(const char *dsname) {
+ HMODULE hmod;
+ DSENTRYPROC dsEntry;
+ TW_IDENTITY fakeOrigin;
+ TW_IDENTITY sourceId;
+ TW_UINT16 ret;
+
+ hmod = LoadLibraryA(dsname);
+ if (!hmod) {
+ ERR("Failed to load TWAIN Source %s\n", dsname);
+ return;
+ }
+ dsEntry = (DSENTRYPROC)GetProcAddress(hmod, "DS_Entry");
+ if (!dsEntry) {
+ ERR("Failed to find DS_Entry() in TWAIN DS %s\n", dsname);
+ return;
+ }
+ /* Loop to do multiple detects, mostly for sane.ds and gphoto2.ds */
+ do {
+ int i;
+
+ sourceId.Id = DSM_sourceId;
+ sourceId.ProtocolMajor = TWON_PROTOCOLMAJOR;
+ sourceId.ProtocolMinor = TWON_PROTOCOLMINOR;
+ ret = dsEntry (&fakeOrigin, DG_CONTROL, DAT_IDENTITY, MSG_GET, &sourceId);
+ if (ret != TWRC_SUCCESS) {
+ ERR("Source->(DG_CONTROL,DAT_IDENTITY,MSG_GET) failed!\n");
+ return;
+ }
+ TRACE("Manufacturer: %s\n", debugstr_a(sourceId.Manufacturer));
+ TRACE("ProductFamily: %s\n", debugstr_a(sourceId.ProductFamily));
+ TRACE("ProductName: %s\n", debugstr_a(sourceId.ProductName));
+
+ for (i=0;i<nrdevices;i++) {
+ if (!strcmp(sourceId.ProductName,devices[i].identity.ProductName))
+ break;
+ }
+ if (i < nrdevices)
+ break;
+ if (nrdevices)
+ devices = realloc(devices, sizeof(devices[0])*(nrdevices+1));
+ else
+ devices = malloc(sizeof(devices[0]));
+ devices[nrdevices].modname = strdup(dsname);
+ memcpy (&devices[nrdevices].identity, &sourceId, sizeof(sourceId));
+ nrdevices++;
+ DSM_sourceId++;
+ } while (1);
+ FreeLibrary (hmod);
+}
- TRACE ("DG_CONTROL/DAT_IDENTITY/MSG_CLOSEDS\n");
+static int detectionrun = 0;
- for (currentDS = activeSources; currentDS; currentDS = currentDS->next)
- {
- if (currentDS->identity.Id == pIdentity->Id)
- break;
- prevDS = currentDS;
- }
- if (currentDS)
- {
- /* Only valid to close a data source if it is in state 4 */
- if (currentDS->currentState == 4)
- {
- sane_close (currentDS->deviceHandle);
- /* remove the data source from active data source list */
- if (prevDS)
- prevDS->next = currentDS->next;
- else
- activeSources = currentDS->next;
- HeapFree (GetProcessHeap(), 0, currentDS);
- twRC = TWRC_SUCCESS;
- DSM_twCC = TWCC_SUCCESS;
- }
- else
- {
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_SEQERROR;
- }
- }
- else
- {
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_NODS;
- }
-
- return twRC;
+static void
+twain_autodetect() {
+ if (detectionrun) return;
+ detectionrun = 1;
+
+ twain_add_onedriver("gphoto2.ds");
+ twain_add_onedriver("sane.ds");
+#if 0
+ twain_add_onedriver("c:\\windows\\Twain_32\\Largan\\sp503a.ds");
+ twain_add_onedriver("c:\\windows\\Twain_32\\vivicam10\\vivicam10.ds");
+ twain_add_onedriver("c:\\windows\\Twain_32\\ws30slim\\sp500a.ds");
#endif
}
-/* Sane returns device names that are longer than the 32 bytes allowed
- by TWAIN. However, it colon separates them, and the last bit is
- the most interesting. So we use the last bit, and add a signature
- to ensure uniqueness */
-#ifdef HAVE_SANE
-static void copy_sane_short_name(const char *in, char *out, size_t outsize)
+/* DG_CONTROL/DAT_IDENTITY/MSG_CLOSEDS */
+TW_UINT16 TWAIN_CloseDS (pTW_IDENTITY pOrigin, TW_MEMREF pData)
{
- const char *p;
- int signature = 0;
-
- if (strlen(in) <= outsize - 1)
- {
- strcpy(out, in);
- return;
- }
-
- for (p = in; *p; p++)
- signature += *p;
-
- p = strrchr(in, ':');
- if (!p)
- p = in;
- else
- p++;
-
- if (strlen(p) > outsize - 7 - 1)
- p += strlen(p) - (outsize - 7 - 1);
-
- strcpy(out, p);
- sprintf(out + strlen(out), "(%04X)", signature % 0x10000);
-
+ TW_UINT16 twRC = TWRC_SUCCESS;
+ pTW_IDENTITY pIdentity = (pTW_IDENTITY) pData;
+ activeDS *currentDS = NULL, *prevDS = NULL;
+
+ TRACE ("DG_CONTROL/DAT_IDENTITY/MSG_CLOSEDS\n");
+
+ for (currentDS = activeSources; currentDS; currentDS = currentDS->next) {
+ if (currentDS->identity.Id == pIdentity->Id)
+ break;
+ prevDS = currentDS;
+ }
+ if (!currentDS) {
+ DSM_twCC = TWCC_NODS;
+ return TWRC_FAILURE;
+ }
+ twRC = currentDS->dsEntry (pOrigin, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, pData);
+ if (prevDS)
+ prevDS->next = currentDS->next;
+ else
+ activeSources = currentDS->next;
+ HeapFree (GetProcessHeap(), 0, currentDS);
+ if (twRC == TWRC_SUCCESS)
+ DSM_twCC = TWCC_SUCCESS;
+ else /* FIXME: unclear how to get TWCC */
+ DSM_twCC = TWCC_SEQERROR;
+ return twRC;
}
-#endif
/* DG_CONTROL/DAT_IDENTITY/MSG_GETDEFAULT */
TW_UINT16 TWAIN_IdentityGetDefault (pTW_IDENTITY pOrigin, TW_MEMREF pData)
{
-#ifndef HAVE_SANE
- DSM_twCC = TWCC_NODS;
- return TWRC_FAILURE;
-#else
- TW_UINT16 twRC = TWRC_SUCCESS;
- pTW_IDENTITY pSourceIdentity = (pTW_IDENTITY) pData;
+ pTW_IDENTITY pSourceIdentity = (pTW_IDENTITY) pData;
- TRACE("DG_CONTROL/DAT_IDENTITY/MSG_GETDEFAULT\n");
-
- if (!device_list)
- {
- if ((sane_get_devices (&device_list, SANE_FALSE) != SANE_STATUS_GOOD))
- {
- DSM_twCC = TWCC_NODS;
- return TWRC_FAILURE;
- }
- }
-
- /* FIXME: the default device is not necessarily the first device. *
- * Users should be able to choose the default device */
- if (device_list && device_list[0])
- {
- pSourceIdentity->Id = DSM_sourceId ++;
- copy_sane_short_name(device_list[0]->name, pSourceIdentity->ProductName, sizeof(pSourceIdentity->ProductName) - 1);
- TRACE("got: %s (short [%s]), %s, %s\n", device_list[0]->name, pSourceIdentity->ProductName, device_list[0]->vendor, device_list[0]->model);
- lstrcpynA (pSourceIdentity->Manufacturer, device_list[0]->vendor, sizeof(pSourceIdentity->Manufacturer) - 1);
- lstrcpynA (pSourceIdentity->ProductFamily, device_list[0]->model, sizeof(pSourceIdentity->ProductFamily) - 1);
- pSourceIdentity->ProtocolMajor = TWON_PROTOCOLMAJOR;
- pSourceIdentity->ProtocolMinor = TWON_PROTOCOLMINOR;
-
- twRC = TWRC_SUCCESS;
- DSM_twCC = TWCC_SUCCESS;
-
- }
- else
- {
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_NODS;
- }
-
- return twRC;
-#endif
+ TRACE("DG_CONTROL/DAT_IDENTITY/MSG_GETDEFAULT\n");
+ DSM_twCC = TWCC_NODS;
+ twain_autodetect();
+ if (!nrdevices)
+ return TWRC_FAILURE;
+ memcpy (pSourceIdentity, &devices[0].identity, sizeof(TW_IDENTITY));
+ return TWRC_SUCCESS;
}
/* DG_CONTROL/DAT_IDENTITY/MSG_GETFIRST */
TW_UINT16 TWAIN_IdentityGetFirst (pTW_IDENTITY pOrigin, TW_MEMREF pData)
{
-#ifndef HAVE_SANE
- DSM_twCC = TWCC_NODS;
- return TWRC_FAILURE;
-#else
- TW_UINT16 twRC = TWRC_SUCCESS;
- pTW_IDENTITY pSourceIdentity = (pTW_IDENTITY) pData;
- SANE_Status status;
-
- TRACE ("DG_CONTROL/DAT_IDENTITY/MSG_GETFIRST\n");
-
- device_list = NULL;
- status = sane_get_devices (&device_list, SANE_FALSE);
- if (status == SANE_STATUS_GOOD)
- {
- if (device_list[0])
- {
- pSourceIdentity->Id = DSM_sourceId ++;
- copy_sane_short_name(device_list[0]->name, pSourceIdentity->ProductName, sizeof(pSourceIdentity->ProductName) - 1);
- TRACE("got: %s (short [%s]), %s, %s\n", device_list[0]->name, pSourceIdentity->ProductName, device_list[0]->vendor, device_list[0]->model);
- lstrcpynA (pSourceIdentity->Manufacturer, device_list[0]->vendor, sizeof(pSourceIdentity->Manufacturer) - 1);
- lstrcpynA (pSourceIdentity->ProductFamily, device_list[0]->model, sizeof(pSourceIdentity->ProductFamily) - 1);
- pSourceIdentity->ProtocolMajor = TWON_PROTOCOLMAJOR;
- pSourceIdentity->ProtocolMinor = TWON_PROTOCOLMINOR;
-
- DSM_currentDevice = 1;
- twRC = TWRC_SUCCESS;
- DSM_twCC = TWCC_SUCCESS;
- }
- else
- {
- TRACE("got empty device list\n");
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_NODS;
- }
- }
- else if (status == SANE_STATUS_NO_MEM)
- {
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_LOWMEMORY;
- }
- else
- {
- WARN("sane_get_devices() failed: %s\n", sane_strstatus (status));
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_NODS;
- }
+ pTW_IDENTITY pSourceIdentity = (pTW_IDENTITY) pData;
- return twRC;
-#endif
+ TRACE ("DG_CONTROL/DAT_IDENTITY/MSG_GETFIRST\n");
+ twain_autodetect();
+ if (!nrdevices) {
+ TRACE ("no entries found.\n");
+ DSM_twCC = TWCC_SUCCESS;
+ return TWRC_ENDOFLIST;
+ }
+ DSM_currentDevice = 0;
+ memcpy (pSourceIdentity, &devices[DSM_currentDevice++].identity, sizeof(TW_IDENTITY));
+ return TWRC_SUCCESS;
}
/* DG_CONTROL/DAT_IDENTITY/MSG_GETNEXT */
TW_UINT16 TWAIN_IdentityGetNext (pTW_IDENTITY pOrigin, TW_MEMREF pData)
{
-#ifndef HAVE_SANE
- DSM_twCC = TWCC_SUCCESS;
- return TWRC_ENDOFLIST;
-#else
- TW_UINT16 twRC = TWRC_SUCCESS;
- pTW_IDENTITY pSourceIdentity = (pTW_IDENTITY) pData;
-
- TRACE("DG_CONTROL/DAT_IDENTITY/MSG_GETNEXT\n");
-
- if (device_list && device_list[DSM_currentDevice] &&
- device_list[DSM_currentDevice]->name &&
- device_list[DSM_currentDevice]->vendor &&
- device_list[DSM_currentDevice]->model)
- {
- pSourceIdentity->Id = DSM_sourceId ++;
- copy_sane_short_name(device_list[DSM_currentDevice]->name, pSourceIdentity->ProductName, sizeof(pSourceIdentity->ProductName) - 1);
- TRACE("got: %s (short [%s]), %s, %s\n", device_list[DSM_currentDevice]->name, pSourceIdentity->ProductName, device_list[DSM_currentDevice]->vendor, device_list[DSM_currentDevice]->model);
- lstrcpynA (pSourceIdentity->Manufacturer, device_list[DSM_currentDevice]->vendor, sizeof(pSourceIdentity->Manufacturer) - 1);
- lstrcpynA (pSourceIdentity->ProductFamily, device_list[DSM_currentDevice]->model, sizeof(pSourceIdentity->ProductFamily) - 1);
- pSourceIdentity->ProtocolMajor = TWON_PROTOCOLMAJOR;
- pSourceIdentity->ProtocolMinor = TWON_PROTOCOLMINOR;
- DSM_currentDevice ++;
+ pTW_IDENTITY pSourceIdentity = (pTW_IDENTITY) pData;
- twRC = TWRC_SUCCESS;
- DSM_twCC = TWCC_SUCCESS;
- }
- else
- {
- DSM_twCC = TWCC_SUCCESS;
- twRC = TWRC_ENDOFLIST;
- }
-
- return twRC;
-#endif
+ TRACE("DG_CONTROL/DAT_IDENTITY/MSG_GETNEXT\n");
+ if (!nrdevices || (DSM_currentDevice == nrdevices)) {
+ DSM_twCC = TWCC_SUCCESS;
+ return TWRC_ENDOFLIST;
+ }
+ memcpy (pSourceIdentity, &devices[DSM_currentDevice++].identity, sizeof(TW_IDENTITY));
+ return TWRC_SUCCESS;
}
/* DG_CONTROL/DAT_IDENTITY/MSG_OPENDS */
TW_UINT16 TWAIN_OpenDS (pTW_IDENTITY pOrigin, TW_MEMREF pData)
{
-#ifndef HAVE_SANE
- DSM_twCC = TWCC_NODS;
- return TWRC_FAILURE;
-#else
- TW_UINT16 twRC = TWRC_SUCCESS, i = 0;
- pTW_IDENTITY pIdentity = (pTW_IDENTITY) pData;
- TW_STR32 shortname;
- activeDS *newSource;
- SANE_Status status;
-
- TRACE("DG_CONTROL/DAT_IDENTITY/MSG_OPENDS\n");
-
- if (DSM_currentState != 3)
- {
- DSM_twCC = TWCC_SEQERROR;
- return TWRC_FAILURE;
- }
-
- if (!device_list &&
- (sane_get_devices (&device_list, SANE_FALSE) != SANE_STATUS_GOOD))
- {
- DSM_twCC = TWCC_NODS;
- return TWRC_FAILURE;
- }
-
- if (pIdentity->ProductName[0] != '\0')
- {
- /* Make sure the source to be opened exists in the device list */
- for (i = 0; device_list[i]; i ++)
- {
- copy_sane_short_name(device_list[i]->name, shortname, sizeof(shortname) - 1);
- if (strcmp (shortname, pIdentity->ProductName) == 0)
- break;
- }
-
- }
-
- if (device_list[i])
- {
- /* the source is found in the device list */
- newSource = HeapAlloc (GetProcessHeap(), 0, sizeof (activeDS));
- if (newSource)
- {
- newSource->deviceIndex = i;
- status = sane_open(device_list[i]->name,&newSource->deviceHandle);
- if (status == SANE_STATUS_GOOD)
- {
- /* Assign name and id for the opened data source */
- lstrcpynA (pIdentity->ProductName, shortname, sizeof(pIdentity->ProductName) - 1);
- pIdentity->Id = DSM_sourceId ++;
- /* add the data source to an internal active source list */
- newSource->next = activeSources;
- newSource->identity.Id = pIdentity->Id;
- strcpy (newSource->identity.ProductName, pIdentity->ProductName);
- newSource->currentState = 4; /*transition into state 4*/
- newSource->twCC = TWCC_SUCCESS;
- activeSources = newSource;
- twRC = TWRC_SUCCESS;
- DSM_twCC = TWCC_SUCCESS;
- }
- else
- {
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_OPERATIONERROR;
- }
- }
- else
- {
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_LOWMEMORY;
- }
- }
- else
- {
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_NODS;
- }
-
- return twRC;
-#endif
+ TW_UINT16 i = 0;
+ pTW_IDENTITY pIdentity = (pTW_IDENTITY) pData;
+ activeDS *newSource;
+ const char *modname = NULL;
+ HMODULE hmod;
+
+ TRACE("DG_CONTROL/DAT_IDENTITY/MSG_OPENDS\n");
+ TRACE("pIdentity is %s\n", pIdentity->ProductName);
+ if (DSM_currentState != 3) {
+ FIXME("seq errror\n");
+ DSM_twCC = TWCC_SEQERROR;
+ return TWRC_FAILURE;
+ }
+ twain_autodetect();
+ if (!nrdevices) {
+ FIXME("no devs.\n");
+ DSM_twCC = TWCC_NODS;
+ return TWRC_FAILURE;
+ }
+
+ if (pIdentity->ProductName[0] != '\0') {
+ /* Make sure the source to be opened exists in the device list */
+ for (i = 0; i<nrdevices; i++)
+ if (!strcmp (devices[i].identity.ProductName, pIdentity->ProductName))
+ break;
+ if (i == nrdevices)
+ i = 0;
+ } /* else use the first device */
+
+ /* the source is found in the device list */
+ newSource = HeapAlloc (GetProcessHeap(), 0, sizeof (activeDS));
+ if (!newSource) {
+ DSM_twCC = TWCC_LOWMEMORY;
+ FIXME("Out of memory.\n");
+ return TWRC_FAILURE;
+ }
+ hmod = LoadLibraryA(devices[i].modname);
+ if (!hmod) {
+ ERR("Failed to load TWAIN Source %s\n", modname);
+ DSM_twCC = TWCC_OPERATIONERROR;
+ return TWRC_FAILURE;
+ }
+ newSource->hmod = hmod;
+ newSource->dsEntry = (DSENTRYPROC)GetProcAddress(hmod, "DS_Entry");
+ if (TWRC_SUCCESS != newSource->dsEntry (pOrigin, DG_CONTROL, DAT_IDENTITY, MSG_OPENDS, pIdentity)) {
+ DSM_twCC = TWCC_OPERATIONERROR;
+ return TWRC_FAILURE;
+ }
+ /* Assign name and id for the opened data source */
+ pIdentity->Id = DSM_sourceId ++;
+ /* add the data source to an internal active source list */
+ newSource->next = activeSources;
+ newSource->identity.Id = pIdentity->Id;
+ strcpy (newSource->identity.ProductName, pIdentity->ProductName);
+ activeSources = newSource;
+ DSM_twCC = TWCC_SUCCESS;
+ return TWRC_SUCCESS;
}
/* DG_CONTROL/DAT_IDENTITY/MSG_USERSELECT */
TW_UINT16 TWAIN_UserSelect (pTW_IDENTITY pOrigin, TW_MEMREF pData)
{
-#ifndef HAVE_SANE
- return TWRC_SUCCESS;
-#else
- TW_UINT16 twRC = TWRC_SUCCESS;
+ pTW_IDENTITY selected = (pTW_IDENTITY)pData;
- TRACE("DG_CONTROL/DAT_IDENTITY/MSG_USERSELECT\n");
-
- /* FIXME: we should replace xscanimage with our own User Select UI */
- system("xscanimage");
-
- DSM_twCC = TWCC_SUCCESS;
- return twRC;
-#endif
+ if (!nrdevices) {
+ DSM_twCC = TWCC_OPERATIONERROR;
+ return TWRC_FAILURE;
+ }
+ memcpy (selected, &devices[0].identity, sizeof(TW_IDENTITY));
+ DSM_twCC = TWCC_SUCCESS;
+ return TWRC_SUCCESS;
}
/* DG_CONTROL/DAT_PARENT/MSG_CLOSEDSM */
TW_UINT16 TWAIN_CloseDSM (pTW_IDENTITY pOrigin, TW_MEMREF pData)
{
-#ifndef HAVE_SANE
- return TWRC_FAILURE;
-#else
- TW_UINT16 twRC = TWRC_SUCCESS;
activeDS *currentDS = activeSources, *nextDS;
TRACE("DG_CONTROL/DAT_PARENT/MSG_CLOSEDSM\n");
if (DSM_currentState == 3)
{
- sane_exit ();
DSM_initialized = FALSE;
- DSM_parentHWND = 0;
DSM_currentState = 2;
/* If there are data sources still open, close them now. */
while (currentDS != NULL)
{
nextDS = currentDS->next;
- sane_close (currentDS->deviceHandle);
+ currentDS->dsEntry (pOrigin, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, pData);
HeapFree (GetProcessHeap(), 0, currentDS);
currentDS = nextDS;
}
activeSources = NULL;
DSM_twCC = TWCC_SUCCESS;
- twRC = TWRC_SUCCESS;
- }
- else
- {
+ return TWRC_SUCCESS;
+ } else {
DSM_twCC = TWCC_SEQERROR;
- twRC = TWRC_FAILURE;
+ return TWRC_FAILURE;
}
-
- return twRC;
-#endif
}
/* DG_CONTROL/DAT_PARENT/MSG_OPENDSM */
TW_UINT16 TWAIN_OpenDSM (pTW_IDENTITY pOrigin, TW_MEMREF pData)
{
-#ifndef HAVE_SANE
- return TWRC_FAILURE;
-#else
- TW_UINT16 twRC = TWRC_SUCCESS;
- SANE_Status status;
- SANE_Int version_code;
-
- TRACE("DG_CONTROL/DAT_PARENT/MSG_OPENDSM\n");
+ TW_UINT16 twRC = TWRC_SUCCESS;
- if (DSM_currentState == 2)
- {
- if (!DSM_initialized)
- {
- DSM_initialized = TRUE;
- status = sane_init (&version_code, NULL);
- device_list = NULL;
- DSM_currentDevice = 0;
- DSM_sourceId = 0;
- }
- DSM_parentHWND = *(TW_HANDLE*)pData;
- DSM_currentState = 3; /* transition to state 3 */
- DSM_twCC = TWCC_SUCCESS;
- twRC = TWRC_SUCCESS;
- }
- else
- {
- /* operation invoked in invalid state */
- DSM_twCC = TWCC_SEQERROR;
- twRC = TWRC_FAILURE;
- }
-
- return twRC;
-#endif
+ TRACE("DG_CONTROL/DAT_PARENT/MSG_OPENDSM\n");
+ if (DSM_currentState == 2) {
+ if (!DSM_initialized) {
+ DSM_currentDevice = 0;
+ DSM_initialized = TRUE;
+ }
+ DSM_currentState = 3;
+ DSM_twCC = TWCC_SUCCESS;
+ twRC = TWRC_SUCCESS;
+ } else {
+ /* operation invoked in invalid state */
+ DSM_twCC = TWCC_SEQERROR;
+ twRC = TWRC_FAILURE;
+ }
+ return twRC;
}
/* DG_CONTROL/DAT_STATUS/MSG_GET */
TW_UINT16 TWAIN_GetDSMStatus (pTW_IDENTITY pOrigin, TW_MEMREF pData)
{
- pTW_STATUS pSourceStatus = (pTW_STATUS) pData;
-
- TRACE ("DG_CONTROL/DAT_STATUS/MSG_GET\n");
+ pTW_STATUS pSourceStatus = (pTW_STATUS) pData;
- pSourceStatus->ConditionCode = DSM_twCC;
- DSM_twCC = TWCC_SUCCESS; /* clear the condition code */
+ TRACE ("DG_CONTROL/DAT_STATUS/MSG_GET\n");
- return TWRC_SUCCESS;
+ pSourceStatus->ConditionCode = DSM_twCC;
+ DSM_twCC = TWCC_SUCCESS; /* clear the condition code */
+ return TWRC_SUCCESS;
}
Index: dlls/twain_32/twain32_main.c
===================================================================
RCS file: /home/wine/wine/dlls/twain_32/twain32_main.c,v
retrieving revision 1.1
diff -u -r1.1 twain32_main.c
--- dlls/twain_32/twain32_main.c 10 Apr 2006 18:49:32 -0000 1.1
+++ dlls/twain_32/twain32_main.c 1 May 2006 14:08:07 -0000
@@ -2,6 +2,7 @@
* TWAIN32 functions
*
* Copyright 2000 Shi Quan He <shiquan at cyberdude.com>
+ * Copyright 2006 Marcus Meissner
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -30,6 +31,18 @@
WINE_DEFAULT_DEBUG_CHANNEL(twain);
+/* A helper function that looks up a destination identity in the active
+ source list */
+static activeDS *TWAIN_LookupSource (pTW_IDENTITY pDest)
+{
+ activeDS *pSource;
+
+ for (pSource = activeSources; pSource; pSource = pSource->next)
+ if (pSource->identity.Id == pDest->Id)
+ break;
+ return pSource;
+}
+
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
TRACE("%p,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
@@ -39,7 +52,6 @@
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinstDLL);
DSM_currentState = 2;
- DSM_instance = hinstDLL;
break;
case DLL_PROCESS_DETACH:
@@ -116,12 +128,9 @@
break;
case DAT_STATUS:
- if (MSG == MSG_GET)
- {
+ if (MSG == MSG_GET) {
twRC = TWAIN_GetDSMStatus (pOrigin, pData);
- }
- else
- {
+ } else {
twRC = TWRC_FAILURE;
DSM_twCC = TWCC_BADPROTOCOL;
WARN("unrecognized operation triplet\n");
@@ -138,461 +147,6 @@
return twRC;
}
-TW_UINT16 TWAIN_SourceControlHandler (
- pTW_IDENTITY pOrigin,
- pTW_IDENTITY pDest,
- TW_UINT16 DAT,
- TW_UINT16 MSG,
- TW_MEMREF pData)
-{
- TW_UINT16 twRC = TWRC_SUCCESS;
-
- switch (DAT)
- {
- case DAT_CAPABILITY:
- switch (MSG)
- {
- case MSG_GET:
- twRC = TWAIN_CapabilityGet (pOrigin, pDest, pData);
- break;
- case MSG_GETCURRENT:
- twRC = TWAIN_CapabilityGetCurrent (pOrigin, pDest, pData);
- break;
- case MSG_GETDEFAULT:
- twRC = TWAIN_CapabilityGetDefault (pOrigin, pDest, pData);
- break;
- case MSG_QUERYSUPPORT:
- twRC = TWAIN_CapabilityQuerySupport (pOrigin, pDest, pData);
- break;
- case MSG_RESET:
- twRC = TWAIN_CapabilityReset (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_CapabilitySet (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- WARN("unrecognized opertion triplet\n");
- }
- break;
-
- case DAT_CUSTOMDSDATA:
- switch (MSG)
- {
- case MSG_GET:
- twRC = TWAIN_CustomDSDataGet (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_CustomDSDataSet (pOrigin, pDest, pData);
- break;
- default:
- break;
- }
- break;
-
- case DAT_FILESYSTEM:
- switch (MSG)
- {
- /*case MSG_AUTOMATICCAPTUREDIRECTORY:
- twRC = TWAIN_AutomaticCaptureDirectory
- (pOrigin, pDest, pData);
- break;*/
- case MSG_CHANGEDIRECTORY:
- twRC = TWAIN_ChangeDirectory (pOrigin, pDest, pData);
- break;
- /*case MSG_COPY:
- twRC = TWAIN_FileSystemCopy (pOrigin, pDest, pData);
- break;*/
- case MSG_CREATEDIRECTORY:
- twRC = TWAIN_CreateDirectory (pOrigin, pDest, pData);
- break;
- case MSG_DELETE:
- twRC = TWAIN_FileSystemDelete (pOrigin, pDest, pData);
- break;
- case MSG_FORMATMEDIA:
- twRC = TWAIN_FormatMedia (pOrigin, pDest, pData);
- break;
- case MSG_GETCLOSE:
- twRC = TWAIN_FileSystemGetClose (pOrigin, pDest, pData);
- break;
- case MSG_GETFIRSTFILE:
- twRC = TWAIN_FileSystemGetFirstFile
- (pOrigin, pDest, pData);
- break;
- case MSG_GETINFO:
- twRC = TWAIN_FileSystemGetInfo (pOrigin, pDest, pData);
- break;
- case MSG_GETNEXTFILE:
- twRC = TWAIN_FileSystemGetNextFile
- (pOrigin, pDest, pData);
- break;
- case MSG_RENAME:
- twRC = TWAIN_FileSystemRename (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- break;
- }
- break;
-
- case DAT_EVENT:
- if (MSG == MSG_PROCESSEVENT)
- twRC = TWAIN_ProcessEvent (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_PASSTHRU:
- if (MSG == MSG_PASSTHRU)
- twRC = TWAIN_PassThrough (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_PENDINGXFERS:
- switch (MSG)
- {
- case MSG_ENDXFER:
- twRC = TWAIN_PendingXfersEndXfer (pOrigin, pDest, pData);
- break;
- case MSG_GET:
- twRC = TWAIN_PendingXfersGet (pOrigin, pDest, pData);
- break;
- case MSG_RESET:
- twRC = TWAIN_PendingXfersReset (pOrigin, pDest, pData);
- break;
- /*case MSG_STOPFEEDER:
- twRC = TWAIN_PendingXfersStopFeeder
- (pOrigin, pDest, pData);
- break;*/
- default:
- twRC = TWRC_FAILURE;
- }
- break;
-
- case DAT_SETUPFILEXFER:
- switch (MSG)
- {
- case MSG_GET:
- twRC = TWAIN_SetupFileXferGet (pOrigin, pDest, pData);
- break;
- case MSG_GETDEFAULT:
- twRC = TWAIN_SetupFileXferGetDefault
- (pOrigin, pDest, pData);
- break;
- case MSG_RESET:
- twRC = TWAIN_SetupFileXferReset (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_SetupFileXferSet (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- break;
- }
- break;
-
- /*case DAT_SETUPFILEXFER2:
- switch (MSG)
- {
- case MSG_GET:
- twRC = TWAIN_SetupFileXfer2Get (pOrigin, pDest, pData);
- break;
- case MSG_GETDEFAULT:
- twRC = TWAIN_SetupFileXfer2GetDefault
- (pOrigin, pDest, pData);
- break;
- case MSG_RESET:
- twRC = TWAIN_SetupFileXfer2Reset (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_SetupFileXfer2Set (pOrigin, pDest, pData);
- break;
- }
- break;*/
- case DAT_SETUPMEMXFER:
- if (MSG == MSG_GET)
- twRC = TWAIN_SetupMemXferGet (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_STATUS:
- if (MSG == MSG_GET)
- twRC = TWAIN_GetDSStatus (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_USERINTERFACE:
- switch (MSG)
- {
- case MSG_DISABLEDS:
- twRC = TWAIN_DisableDSUserInterface
- (pOrigin, pDest, pData);
- break;
- case MSG_ENABLEDS:
- twRC = TWAIN_EnableDSUserInterface
- (pOrigin, pDest, pData);
- break;
- case MSG_ENABLEDSUIONLY:
- twRC = TWAIN_EnableDSUIOnly (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- break;
- }
- break;
-
- case DAT_XFERGROUP:
- switch (MSG)
- {
- case MSG_GET:
- twRC = TWAIN_XferGroupGet (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_XferGroupSet (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- break;
- }
- break;
-
- default:
- twRC = TWRC_FAILURE;
- break;
- }
-
- return twRC;
-}
-
-TW_UINT16 TWAIN_ControlGroupHandler (
- pTW_IDENTITY pOrigin,
- pTW_IDENTITY pDest,
- TW_UINT16 DAT,
- TW_UINT16 MSG,
- TW_MEMREF pData)
-{
- TW_UINT16 twRC = TWRC_SUCCESS;
-
- if (pDest)
- {
- /* This operation's destination is a source */
- twRC = TWAIN_SourceControlHandler (pOrigin, pDest, DAT, MSG, pData);
- }
- else
- {
- /* This operation's destination is the Source Manager */
- twRC = TWAIN_SourceManagerHandler (pOrigin, DAT, MSG, pData);
- }
-
- return twRC;
-}
-
-TW_UINT16 TWAIN_ImageGroupHandler (
- pTW_IDENTITY pOrigin,
- pTW_IDENTITY pDest,
- TW_UINT16 DAT,
- TW_UINT16 MSG,
- TW_MEMREF pData)
-{
- TW_UINT16 twRC = TWRC_SUCCESS;
-
- if (pDest == NULL)
- {
- DSM_twCC = TWCC_BADDEST;
- return TWRC_FAILURE;
- }
-
- switch (DAT)
- {
- case DAT_CIECOLOR:
- if (MSG == MSG_GET)
- twRC = TWAIN_CIEColorGet (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_EXTIMAGEINFO:
- if (MSG == MSG_GET)
- twRC = TWAIN_ExtImageInfoGet (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_GRAYRESPONSE:
- switch (MSG)
- {
- case MSG_RESET:
- twRC = TWAIN_GrayResponseReset (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_GrayResponseSet (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_BADPROTOCOL;
- WARN("unrecognized operation triplet\n");
- break;
- }
- break;
- case DAT_IMAGEFILEXFER:
- if (MSG == MSG_GET)
- twRC = TWAIN_ImageFileXferGet (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_IMAGEINFO:
- if (MSG == MSG_GET)
- twRC = TWAIN_ImageInfoGet (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_IMAGELAYOUT:
- switch (MSG)
- {
- case MSG_GET:
- twRC = TWAIN_ImageLayoutGet (pOrigin, pDest, pData);
- break;
- case MSG_GETDEFAULT:
- twRC = TWAIN_ImageLayoutGetDefault (pOrigin, pDest, pData);
- break;
- case MSG_RESET:
- twRC = TWAIN_ImageLayoutReset (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_ImageLayoutSet (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_BADPROTOCOL;
- WARN("unrecognized operation triplet\n");
- break;
- }
- break;
-
- case DAT_IMAGEMEMXFER:
- if (MSG == MSG_GET)
- twRC = TWAIN_ImageMemXferGet (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_IMAGENATIVEXFER:
- if (MSG == MSG_GET)
- twRC = TWAIN_ImageNativeXferGet (pOrigin, pDest, pData);
- else
- twRC = TWRC_FAILURE;
- break;
-
- case DAT_JPEGCOMPRESSION:
- switch (MSG)
- {
- case MSG_GET:
- twRC = TWAIN_JPEGCompressionGet (pOrigin, pDest, pData);
- break;
- case MSG_GETDEFAULT:
- twRC = TWAIN_JPEGCompressionGetDefault
- (pOrigin, pDest, pData);
- break;
- case MSG_RESET:
- twRC = TWAIN_JPEGCompressionReset (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_JPEGCompressionSet (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_BADPROTOCOL;
- WARN("unrecognized operation triplet\n");
- break;
- }
- break;
-
- case DAT_PALETTE8:
- switch (MSG)
- {
- case MSG_GET:
- twRC = TWAIN_Palette8Get (pOrigin, pDest, pData);
- break;
- case MSG_GETDEFAULT:
- twRC = TWAIN_Palette8GetDefault (pOrigin, pDest, pData);
- break;
- case MSG_RESET:
- twRC = TWAIN_Palette8Reset (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_Palette8Set (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_BADPROTOCOL;
- WARN("unrecognized operation triplet\n");
- }
- break;
-
- case DAT_RGBRESPONSE:
- switch (MSG)
- {
- case MSG_RESET:
- twRC = TWAIN_RGBResponseReset (pOrigin, pDest, pData);
- break;
- case MSG_SET:
- twRC = TWAIN_RGBResponseSet (pOrigin, pDest, pData);
- break;
- default:
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_BADPROTOCOL;
- WARN("unrecognized operation triplet\n");
- break;
- }
- break;
-
- default:
- twRC = TWRC_FAILURE;
- DSM_twCC = TWCC_BADPROTOCOL;
- WARN("unrecognized operation triplet\n");
- }
- return twRC;
-}
-
-TW_UINT16 TWAIN_AudioGroupHandler (
- pTW_IDENTITY pOrigin,
- pTW_IDENTITY pDest,
- TW_UINT16 DAT,
- TW_UINT16 MSG,
- TW_MEMREF pData)
-{
- TW_UINT16 twRC = TWRC_FAILURE;
-
- switch (DAT)
- {
- case DAT_AUDIOFILEXFER:
- if (MSG == MSG_GET)
- twRC = TWAIN_AudioFileXferGet (pOrigin, pDest, pData);
- break;
-
- case DAT_AUDIOINFO:
- if (MSG == MSG_GET)
- twRC = TWAIN_AudioInfoGet (pOrigin, pDest, pData);
- break;
-
- case DAT_AUDIONATIVEXFER:
- if (MSG == MSG_GET)
- twRC = TWAIN_AudioNativeXferGet (pOrigin, pDest, pData);
- break;
-
- default:
- DSM_twCC = TWCC_BADPROTOCOL;
- twRC = TWRC_FAILURE;
- break;
- }
-
- return twRC;
-}
/* Main entry point for the TWAIN library */
TW_UINT16 WINAPI
@@ -607,34 +161,31 @@
TRACE("(DG=%ld DAT=%d MSG=%d)\n", DG, DAT, MSG);
+ if (pDest)
+ {
+ activeDS *pSource = TWAIN_LookupSource (pDest);
+ /* This operation's destination is a source */
+
+ if (!pSource) {
+ ERR("No source associated with pDest %p\n", pDest);
+ DSM_twCC = TWCC_BADDEST;
+ return TWRC_FAILURE;
+ }
+ DSM_twCC = TWCC_SUCCESS;
+ TRACE("Forwarding %ld/%d/%d/%p to DS.\n", DG, DAT, MSG, pData);
+ twRC = pSource->dsEntry(pOrigin, DG, DAT, MSG, pData);
+ TRACE("return value is %d\n", twRC);
+ return twRC;
+ }
switch (DG)
{
case DG_CONTROL:
- twRC = TWAIN_ControlGroupHandler (pOrigin,pDest,DAT,MSG,pData);
- break;
- case DG_IMAGE:
- twRC = TWAIN_ImageGroupHandler (pOrigin,pDest,DAT,MSG,pData);
- break;
- case DG_AUDIO:
- twRC = TWAIN_AudioGroupHandler (pOrigin,pDest,DAT,MSG,pData);
+ twRC = TWAIN_SourceManagerHandler (pOrigin, DAT, MSG, pData);
break;
default:
+ FIXME("The DSM does not handle DG %ld\n", DG);
DSM_twCC = TWCC_BADPROTOCOL;
twRC = TWRC_FAILURE;
}
-
return twRC;
}
-
-/* A helper function that looks up a destination identity in the active
- source list */
-activeDS *TWAIN_LookupSource (pTW_IDENTITY pDest)
-{
- activeDS *pSource;
-
- for (pSource = activeSources; pSource; pSource = pSource->next)
- if (pSource->identity.Id == pDest->Id)
- break;
-
- return pSource;
-}
Index: dlls/twain_32/twain_i.h
===================================================================
RCS file: /home/wine/wine/dlls/twain_32/twain_i.h,v
retrieving revision 1.1
diff -u -r1.1 twain_i.h
--- dlls/twain_32/twain_i.h 10 Apr 2006 18:49:32 -0000 1.1
+++ dlls/twain_32/twain_i.h 1 May 2006 14:08:07 -0000
@@ -1,5 +1,6 @@
/*
* Copyright 2000 Corel Corporation
+ * Copyright 2006 Marcus Meissner
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -23,9 +24,6 @@
# error You must include config.h first
#endif
-#ifdef HAVE_SANE
-# include <sane/sane.h>
-#endif
#include <stdarg.h>
#include "windef.h"
@@ -37,42 +35,20 @@
{
struct tagActiveDS *next; /* next active DS */
TW_IDENTITY identity; /* identity */
- TW_UINT16 currentState; /* current state */
- TW_EVENT pendingEvent; /* pending event to be sent to
- application */
- TW_UINT16 twCC; /* condition code */
- HWND hwndOwner; /* window handle of the app */
- HWND progressWnd; /* window handle of the scanning window */
-#ifdef HAVE_SANE
- SANE_Handle deviceHandle; /* device handle */
- SANE_Parameters sane_param; /* parameters about the image
- transferred */
- BOOL sane_param_valid; /* true if valid sane_param*/
- INT deviceIndex; /* index of the current device */
-#endif
- /* Capabiblities */
- TW_UINT16 capXferMech; /* ICAP_XFERMECH */
+ HMODULE hmod;
+ DSENTRYPROC dsEntry;
} activeDS;
TW_UINT16 DSM_initialized; /* whether Source Manager is initialized */
TW_UINT16 DSM_currentState; /* current state of Source Manager */
TW_UINT16 DSM_twCC; /* current condition code of Source Manager */
-TW_HANDLE DSM_parentHWND; /* window handle of the Source's "parent" */
TW_UINT32 DSM_sourceId; /* source id generator */
TW_UINT16 DSM_currentDevice; /* keep track of device during enumeration */
HINSTANCE DSM_instance;
-#ifdef HAVE_SANE
-const SANE_Device **device_list;/* a list of all sane devices */
-#endif
activeDS *activeSources; /* list of active data sources */
-/* Helper functions */
-extern activeDS *TWAIN_LookupSource (pTW_IDENTITY pDest);
-extern TW_UINT16 TWAIN_SaneCapability (activeDS *pSource,
- pTW_CAPABILITY pCapability, TW_UINT16 action);
-
-/* */
+/* Device Source Manager Control handlers */
extern TW_UINT16 TWAIN_ControlGroupHandler (
pTW_IDENTITY pOrigin, pTW_IDENTITY pDest,
TW_UINT16 DAT, TW_UINT16 MSG, TW_MEMREF pData);
@@ -105,151 +81,4 @@
extern TW_UINT16 TWAIN_GetDSMStatus
(pTW_IDENTITY pOrigin, TW_MEMREF pData);
-/* Implementation of operation triplets
- * From Application to Source (Control Information) */
-TW_UINT16 TWAIN_CapabilityGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_CapabilityGetCurrent
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest,TW_MEMREF pData);
-TW_UINT16 TWAIN_CapabilityGetDefault
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_CapabilityQuerySupport
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_CapabilityReset
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_CapabilitySet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_CustomDSDataGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_CustomDSDataSet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_AutomaticCaptureDirectory
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ChangeDirectory
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_FileSystemCopy
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_CreateDirectory
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_FileSystemDelete
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_FormatMedia
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_FileSystemGetClose
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_FileSystemGetFirstFile
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_FileSystemGetInfo
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_FileSystemGetNextFile
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_FileSystemRename
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ProcessEvent
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_PassThrough
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_PendingXfersEndXfer
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_PendingXfersGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_PendingXfersReset
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_PendingXfersStopFeeder
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_SetupFileXferGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_SetupFileXferGetDefault
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_SetupFileXferReset
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_SetupFileXferSet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_SetupFileXfer2Get
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_SetupFileXfer2GetDefault
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_SetupFileXfer2Reset
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_SetupFileXfer2Set
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_SetupMemXferGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_GetDSStatus
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_DisableDSUserInterface
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_EnableDSUserInterface
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_EnableDSUIOnly
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_XferGroupGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_XferGroupSet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-
-/* Implementation of operation triplets
- * From Application to Source (Image Information) */
-TW_UINT16 TWAIN_CIEColorGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ExtImageInfoGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_GrayResponseReset
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_GrayResponseSet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ImageFileXferGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ImageInfoGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ImageLayoutGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ImageLayoutGetDefault
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ImageLayoutReset
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ImageLayoutSet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ImageMemXferGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_ImageNativeXferGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_JPEGCompressionGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_JPEGCompressionGetDefault
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_JPEGCompressionReset
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_JPEGCompressionSet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_Palette8Get
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_Palette8GetDefault
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_Palette8Reset
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_Palette8Set
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_RGBResponseReset
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_RGBResponseSet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-
-/* Implementation of operation triplets
- * From Application to Source (Audio Information) */
-TW_UINT16 TWAIN_AudioFileXferGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_AudioInfoGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-TW_UINT16 TWAIN_AudioNativeXferGet
- (pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_MEMREF pData);
-
-/* Implementation of TWAIN capabilities */
-TW_UINT16 TWAIN_ICAPXferMech
- (activeDS *pSource, pTW_CAPABILITY pCapability, TW_UINT16 action);
-
-/* UI function */
-BOOL DoScannerUI(activeDS *pSource);
-HWND ScanningDialogBox(HWND dialog, DWORD progress);
-
#endif
More information about the wine-patches
mailing list