4 * Copyright 2000 Shi Quan He <shiquan@cyberdude.com>
5 * Copyright 2006 Marcus Meissner
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "wine/debug.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(twain);
34 /* A helper function that looks up a destination identity in the active
36 static activeDS *TWAIN_LookupSource (const TW_IDENTITY *pDest)
40 for (pSource = activeSources; pSource; pSource = pSource->next)
41 if (pSource->identity.Id == pDest->Id)
46 static TW_UINT16 TWAIN_SourceManagerHandler (
52 TW_UINT16 twRC = TWRC_SUCCESS;
60 twRC = TWAIN_CloseDS (pOrigin, pData);
64 twRC = TWAIN_IdentityGetDefault (pOrigin, pData);
68 twRC = TWAIN_IdentityGetFirst (pOrigin, pData);
72 twRC = TWAIN_IdentityGetNext (pOrigin, pData);
76 twRC = TWAIN_OpenDS (pOrigin, pData);
80 twRC = TWAIN_UserSelect (pOrigin, pData);
84 /* Unrecognized operation triplet */
86 DSM_twCC = TWCC_BADPROTOCOL;
87 WARN("unrecognized operation triplet\n");
96 twRC = TWAIN_CloseDSM (pOrigin, pData);
100 twRC = TWAIN_OpenDSM (pOrigin, pData);
104 /* Unrecognized operation triplet */
106 DSM_twCC = TWCC_BADPROTOCOL;
107 WARN("unrecognized operation triplet\n");
112 if (MSG == MSG_GET) {
113 twRC = TWAIN_GetDSMStatus (pOrigin, pData);
116 DSM_twCC = TWCC_BADPROTOCOL;
117 WARN("unrecognized operation triplet\n");
123 DSM_twCC = TWCC_BADPROTOCOL;
124 WARN("unrecognized operation triplet\n");
132 /* Main entry point for the TWAIN library */
134 DSM_Entry (pTW_IDENTITY pOrigin,
141 TW_UINT16 twRC = TWRC_SUCCESS; /* Return Code */
143 TRACE("(DG=%d DAT=%d MSG=%d)\n", DG, DAT, MSG);
147 activeDS *pSource = TWAIN_LookupSource (pDest);
148 /* This operation's destination is a source */
151 ERR("No source associated with pDest %p\n", pDest);
152 DSM_twCC = TWCC_BADDEST;
155 DSM_twCC = TWCC_SUCCESS;
156 TRACE("Forwarding %d/%d/%d/%p to DS.\n", DG, DAT, MSG, pData);
157 twRC = pSource->dsEntry(pOrigin, DG, DAT, MSG, pData);
158 TRACE("return value is %d\n", twRC);
164 twRC = TWAIN_SourceManagerHandler (pOrigin, DAT, MSG, pData);
167 FIXME("The DSM does not handle DG %d\n", DG);
168 DSM_twCC = TWCC_BADPROTOCOL;