4 * Copyright 2000 Shi Quan He <shiquan@cyberdude.com>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include "wine/debug.h"
27 WINE_DEFAULT_DEBUG_CHANNEL(twain
);
29 BOOL WINAPI
DllMain (HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
31 TRACE("%p,%lx,%p\n", hinstDLL
, fdwReason
, lpvReserved
);
35 case DLL_PROCESS_ATTACH
:
36 DisableThreadLibraryCalls(hinstDLL
);
40 case DLL_PROCESS_DETACH
:
48 TW_UINT16
TWAIN_SourceManagerHandler (
54 TW_UINT16 twRC
= TWRC_SUCCESS
;
62 twRC
= TWAIN_CloseDS (pOrigin
, pData
);
66 twRC
= TWAIN_IdentityGetDefault (pOrigin
, pData
);
70 twRC
= TWAIN_IdentityGetFirst (pOrigin
, pData
);
74 twRC
= TWAIN_IdentityGetNext (pOrigin
, pData
);
78 twRC
= TWAIN_OpenDS (pOrigin
, pData
);
82 twRC
= TWAIN_UserSelect (pOrigin
, pData
);
86 /* Unrecognized operation triplet */
88 DSM_twCC
= TWCC_BADPROTOCOL
;
89 WARN("unrecognized operation triplet\n");
98 twRC
= TWAIN_CloseDSM (pOrigin
, pData
);
102 twRC
= TWAIN_OpenDSM (pOrigin
, pData
);
106 /* Unrecognized operation triplet */
108 DSM_twCC
= TWCC_BADPROTOCOL
;
109 WARN("unrecognized operation triplet\n");
116 twRC
= TWAIN_GetDSMStatus (pOrigin
, pData
);
121 DSM_twCC
= TWCC_BADPROTOCOL
;
122 WARN("unrecognized operation triplet\n");
128 DSM_twCC
= TWCC_BADPROTOCOL
;
129 WARN("unrecognized operation triplet\n");
136 TW_UINT16
TWAIN_SourceControlHandler (
137 pTW_IDENTITY pOrigin
,
143 TW_UINT16 twRC
= TWRC_SUCCESS
;
151 twRC
= TWAIN_CapabilityGet (pOrigin
, pDest
, pData
);
154 twRC
= TWAIN_CapabilityGetCurrent (pOrigin
, pDest
, pData
);
157 twRC
= TWAIN_CapabilityGetDefault (pOrigin
, pDest
, pData
);
159 case MSG_QUERYSUPPORT
:
160 twRC
= TWAIN_CapabilityQuerySupport (pOrigin
, pDest
, pData
);
163 twRC
= TWAIN_CapabilityReset (pOrigin
, pDest
, pData
);
166 twRC
= TWAIN_CapabilitySet (pOrigin
, pDest
, pData
);
170 WARN("unrecognized opertion triplet\n");
174 case DAT_CUSTOMDSDATA
:
178 twRC
= TWAIN_CustomDSDataGet (pOrigin
, pDest
, pData
);
181 twRC
= TWAIN_CustomDSDataSet (pOrigin
, pDest
, pData
);
191 /*case MSG_AUTOMATICCAPTUREDIRECTORY:
192 twRC = TWAIN_AutomaticCaptureDirectory
193 (pOrigin, pDest, pData);
195 case MSG_CHANGEDIRECTORY
:
196 twRC
= TWAIN_ChangeDirectory (pOrigin
, pDest
, pData
);
199 twRC = TWAIN_FileSystemCopy (pOrigin, pDest, pData);
201 case MSG_CREATEDIRECTORY
:
202 twRC
= TWAIN_CreateDirectory (pOrigin
, pDest
, pData
);
205 twRC
= TWAIN_FileSystemDelete (pOrigin
, pDest
, pData
);
207 case MSG_FORMATMEDIA
:
208 twRC
= TWAIN_FormatMedia (pOrigin
, pDest
, pData
);
211 twRC
= TWAIN_FileSystemGetClose (pOrigin
, pDest
, pData
);
213 case MSG_GETFIRSTFILE
:
214 twRC
= TWAIN_FileSystemGetFirstFile
215 (pOrigin
, pDest
, pData
);
218 twRC
= TWAIN_FileSystemGetInfo (pOrigin
, pDest
, pData
);
220 case MSG_GETNEXTFILE
:
221 twRC
= TWAIN_FileSystemGetNextFile
222 (pOrigin
, pDest
, pData
);
225 twRC
= TWAIN_FileSystemRename (pOrigin
, pDest
, pData
);
234 if (MSG
== MSG_PROCESSEVENT
)
235 twRC
= TWAIN_ProcessEvent (pOrigin
, pDest
, pData
);
241 if (MSG
== MSG_PASSTHRU
)
242 twRC
= TWAIN_PassThrough (pOrigin
, pDest
, pData
);
247 case DAT_PENDINGXFERS
:
251 twRC
= TWAIN_PendingXfersEndXfer (pOrigin
, pDest
, pData
);
254 twRC
= TWAIN_PendingXfersGet (pOrigin
, pDest
, pData
);
257 twRC
= TWAIN_PendingXfersReset (pOrigin
, pDest
, pData
);
259 /*case MSG_STOPFEEDER:
260 twRC = TWAIN_PendingXfersStopFeeder
261 (pOrigin, pDest, pData);
268 case DAT_SETUPFILEXFER
:
272 twRC
= TWAIN_SetupFileXferGet (pOrigin
, pDest
, pData
);
275 twRC
= TWAIN_SetupFileXferGetDefault
276 (pOrigin
, pDest
, pData
);
279 twRC
= TWAIN_SetupFileXferReset (pOrigin
, pDest
, pData
);
282 twRC
= TWAIN_SetupFileXferSet (pOrigin
, pDest
, pData
);
290 /*case DAT_SETUPFILEXFER2:
294 twRC = TWAIN_SetupFileXfer2Get (pOrigin, pDest, pData);
297 twRC = TWAIN_SetupFileXfer2GetDefault
298 (pOrigin, pDest, pData);
301 twRC = TWAIN_SetupFileXfer2Reset (pOrigin, pDest, pData);
304 twRC = TWAIN_SetupFileXfer2Set (pOrigin, pDest, pData);
308 case DAT_SETUPMEMXFER
:
310 twRC
= TWAIN_SetupMemXferGet (pOrigin
, pDest
, pData
);
317 twRC
= TWAIN_GetDSStatus (pOrigin
, pDest
, pData
);
322 case DAT_USERINTERFACE
:
326 twRC
= TWAIN_DisableDSUserInterface
327 (pOrigin
, pDest
, pData
);
330 twRC
= TWAIN_EnableDSUserInterface
331 (pOrigin
, pDest
, pData
);
333 case MSG_ENABLEDSUIONLY
:
334 twRC
= TWAIN_EnableDSUIOnly (pOrigin
, pDest
, pData
);
346 twRC
= TWAIN_XferGroupGet (pOrigin
, pDest
, pData
);
349 twRC
= TWAIN_XferGroupSet (pOrigin
, pDest
, pData
);
365 TW_UINT16
TWAIN_ControlGroupHandler (
366 pTW_IDENTITY pOrigin
,
372 TW_UINT16 twRC
= TWRC_SUCCESS
;
376 /* This operation's destination is a source */
377 twRC
= TWAIN_SourceControlHandler (pOrigin
, pDest
, DAT
, MSG
, pData
);
381 /* This operation's destination is the Source Manager */
382 twRC
= TWAIN_SourceManagerHandler (pOrigin
, DAT
, MSG
, pData
);
388 TW_UINT16
TWAIN_ImageGroupHandler (
389 pTW_IDENTITY pOrigin
,
395 TW_UINT16 twRC
= TWRC_SUCCESS
;
399 DSM_twCC
= TWCC_BADDEST
;
407 twRC
= TWAIN_CIEColorGet (pOrigin
, pDest
, pData
);
412 case DAT_EXTIMAGEINFO
:
414 twRC
= TWAIN_ExtImageInfoGet (pOrigin
, pDest
, pData
);
419 case DAT_GRAYRESPONSE
:
423 twRC
= TWAIN_GrayResponseReset (pOrigin
, pDest
, pData
);
426 twRC
= TWAIN_GrayResponseSet (pOrigin
, pDest
, pData
);
430 DSM_twCC
= TWCC_BADPROTOCOL
;
431 WARN("unrecognized operation triplet\n");
435 case DAT_IMAGEFILEXFER
:
437 twRC
= TWAIN_ImageFileXferGet (pOrigin
, pDest
, pData
);
444 twRC
= TWAIN_ImageInfoGet (pOrigin
, pDest
, pData
);
449 case DAT_IMAGELAYOUT
:
453 twRC
= TWAIN_ImageLayoutGet (pOrigin
, pDest
, pData
);
456 twRC
= TWAIN_ImageLayoutGetDefault (pOrigin
, pDest
, pData
);
459 twRC
= TWAIN_ImageLayoutReset (pOrigin
, pDest
, pData
);
462 twRC
= TWAIN_ImageLayoutSet (pOrigin
, pDest
, pData
);
466 DSM_twCC
= TWCC_BADPROTOCOL
;
467 WARN("unrecognized operation triplet\n");
472 case DAT_IMAGEMEMXFER
:
474 twRC
= TWAIN_ImageMemXferGet (pOrigin
, pDest
, pData
);
479 case DAT_IMAGENATIVEXFER
:
481 twRC
= TWAIN_ImageNativeXferGet (pOrigin
, pDest
, pData
);
486 case DAT_JPEGCOMPRESSION
:
490 twRC
= TWAIN_JPEGCompressionGet (pOrigin
, pDest
, pData
);
493 twRC
= TWAIN_JPEGCompressionGetDefault
494 (pOrigin
, pDest
, pData
);
497 twRC
= TWAIN_JPEGCompressionReset (pOrigin
, pDest
, pData
);
500 twRC
= TWAIN_JPEGCompressionSet (pOrigin
, pDest
, pData
);
504 DSM_twCC
= TWCC_BADPROTOCOL
;
505 WARN("unrecognized operation triplet\n");
514 twRC
= TWAIN_Palette8Get (pOrigin
, pDest
, pData
);
517 twRC
= TWAIN_Palette8GetDefault (pOrigin
, pDest
, pData
);
520 twRC
= TWAIN_Palette8Reset (pOrigin
, pDest
, pData
);
523 twRC
= TWAIN_Palette8Set (pOrigin
, pDest
, pData
);
527 DSM_twCC
= TWCC_BADPROTOCOL
;
528 WARN("unrecognized operation triplet\n");
532 case DAT_RGBRESPONSE
:
536 twRC
= TWAIN_RGBResponseReset (pOrigin
, pDest
, pData
);
539 twRC
= TWAIN_RGBResponseSet (pOrigin
, pDest
, pData
);
543 DSM_twCC
= TWCC_BADPROTOCOL
;
544 WARN("unrecognized operation triplet\n");
551 DSM_twCC
= TWCC_BADPROTOCOL
;
552 WARN("unrecognized operation triplet\n");
557 TW_UINT16
TWAIN_AudioGroupHandler (
558 pTW_IDENTITY pOrigin
,
564 TW_UINT16 twRC
= TWRC_FAILURE
;
568 case DAT_AUDIOFILEXFER
:
570 twRC
= TWAIN_AudioFileXferGet (pOrigin
, pDest
, pData
);
575 twRC
= TWAIN_AudioInfoGet (pOrigin
, pDest
, pData
);
578 case DAT_AUDIONATIVEXFER
:
580 twRC
= TWAIN_AudioNativeXferGet (pOrigin
, pDest
, pData
);
584 DSM_twCC
= TWCC_BADPROTOCOL
;
592 /* Main entry point for the TWAIN library */
594 DSM_Entry (pTW_IDENTITY pOrigin
,
601 TW_UINT16 twRC
= TWRC_SUCCESS
; /* Return Code */
603 TRACE("(DG=%ld DAT=%d MSG=%d)\n", DG
, DAT
, MSG
);
608 twRC
= TWAIN_ControlGroupHandler (pOrigin
,pDest
,DAT
,MSG
,pData
);
611 twRC
= TWAIN_ImageGroupHandler (pOrigin
,pDest
,DAT
,MSG
,pData
);
614 twRC
= TWAIN_AudioGroupHandler (pOrigin
,pDest
,DAT
,MSG
,pData
);
617 DSM_twCC
= TWCC_BADPROTOCOL
;
624 /* A helper function that looks up a destination identity in the active
626 activeDS
*TWAIN_LookupSource (pTW_IDENTITY pDest
)
630 for (pSource
= activeSources
; pSource
; pSource
= pSource
->next
)
631 if (pSource
->identity
.Id
== pDest
->Id
)