cmd: DIR command outputs free space for the path.
[wine.git] / dlls / sane.ds / ds_ctrl.c
blob79c268a36ae253d096793584ce61a37e6e39db63
1 /*
2 * Copyright 2000 Corel Corporation
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include <stdlib.h>
20 #include "sane_i.h"
21 #include "wine/debug.h"
23 WINE_DEFAULT_DEBUG_CHANNEL(twain);
25 /* DG_CONTROL/DAT_CAPABILITY/MSG_GET */
26 TW_UINT16 SANE_CapabilityGet (pTW_IDENTITY pOrigin, TW_MEMREF pData)
28 TW_UINT16 twRC = TWRC_SUCCESS, twCC = TWCC_SUCCESS;
29 pTW_CAPABILITY pCapability = (pTW_CAPABILITY) pData;
31 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_GET\n");
33 if (activeDS.currentState < 4 || activeDS.currentState > 7)
35 twRC = TWRC_FAILURE;
36 activeDS.twCC = TWCC_SEQERROR;
38 else
40 twCC = SANE_SaneCapability (pCapability, MSG_GET);
41 twRC = (twCC == TWCC_SUCCESS)?TWRC_SUCCESS:TWRC_FAILURE;
42 activeDS.twCC = twCC;
45 return twRC;
48 /* DG_CONTROL/DAT_CAPABILITY/MSG_GETCURRENT */
49 TW_UINT16 SANE_CapabilityGetCurrent (pTW_IDENTITY pOrigin, TW_MEMREF pData)
51 TW_UINT16 twRC = TWRC_SUCCESS, twCC = TWCC_SUCCESS;
52 pTW_CAPABILITY pCapability = (pTW_CAPABILITY) pData;
54 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_GETCURRENT\n");
56 if (activeDS.currentState < 4 || activeDS.currentState > 7)
58 twRC = TWRC_FAILURE;
59 activeDS.twCC = TWCC_SEQERROR;
61 else
63 twCC = SANE_SaneCapability (pCapability, MSG_GETCURRENT);
64 twRC = (twCC == TWCC_SUCCESS)?TWRC_SUCCESS:TWRC_FAILURE;
65 activeDS.twCC = twCC;
68 return twRC;
71 /* DG_CONTROL/DAT_CAPABILITY/MSG_GETDEFAULT */
72 TW_UINT16 SANE_CapabilityGetDefault (pTW_IDENTITY pOrigin, TW_MEMREF pData)
74 TW_UINT16 twRC = TWRC_SUCCESS, twCC = TWCC_SUCCESS;
75 pTW_CAPABILITY pCapability = (pTW_CAPABILITY) pData;
77 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_GETDEFAULT\n");
79 if (activeDS.currentState < 4 || activeDS.currentState > 7)
81 twRC = TWRC_FAILURE;
82 activeDS.twCC = TWCC_SEQERROR;
84 else
86 twCC = SANE_SaneCapability (pCapability, MSG_GETDEFAULT);
87 twRC = (twCC == TWCC_SUCCESS)?TWRC_SUCCESS:TWRC_FAILURE;
88 activeDS.twCC = twCC;
91 return twRC;
94 /* DG_CONTROL/DAT_CAPABILITY/MSG_QUERYSUPPORT */
95 TW_UINT16 SANE_CapabilityQuerySupport (pTW_IDENTITY pOrigin,
96 TW_MEMREF pData)
98 TW_UINT16 twRC = TWRC_SUCCESS, twCC = TWCC_SUCCESS;
99 pTW_CAPABILITY pCapability = (pTW_CAPABILITY) pData;
101 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_QUERYSUPPORT\n");
103 if (activeDS.currentState < 4 || activeDS.currentState > 7)
105 twRC = TWRC_FAILURE;
106 activeDS.twCC = TWCC_SEQERROR;
108 else
110 twCC = SANE_SaneCapability (pCapability, MSG_QUERYSUPPORT);
111 twRC = (twCC == TWCC_SUCCESS)?TWRC_SUCCESS:TWRC_FAILURE;
112 activeDS.twCC = twCC;
115 return twRC;
118 /* DG_CONTROL/DAT_CAPABILITY/MSG_RESET */
119 TW_UINT16 SANE_CapabilityReset (pTW_IDENTITY pOrigin,
120 TW_MEMREF pData)
122 TW_UINT16 twRC = TWRC_SUCCESS, twCC = TWCC_SUCCESS;
123 pTW_CAPABILITY pCapability = (pTW_CAPABILITY) pData;
125 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_RESET\n");
127 if (activeDS.currentState < 4 || activeDS.currentState > 7)
129 twRC = TWRC_FAILURE;
130 activeDS.twCC = TWCC_SEQERROR;
132 else
134 twCC = SANE_SaneCapability (pCapability, MSG_RESET);
135 twRC = (twCC == TWCC_SUCCESS)?TWRC_SUCCESS:TWRC_FAILURE;
136 activeDS.twCC = twCC;
139 return twRC;
142 /* DG_CONTROL/DAT_CAPABILITY/MSG_SET */
143 TW_UINT16 SANE_CapabilitySet (pTW_IDENTITY pOrigin,
144 TW_MEMREF pData)
146 TW_UINT16 twRC = TWRC_SUCCESS, twCC = TWCC_SUCCESS;
147 pTW_CAPABILITY pCapability = (pTW_CAPABILITY) pData;
149 TRACE ("DG_CONTROL/DAT_CAPABILITY/MSG_SET\n");
151 if (activeDS.currentState != 4)
153 twRC = TWRC_FAILURE;
154 activeDS.twCC = TWCC_SEQERROR;
156 else
158 twCC = SANE_SaneCapability (pCapability, MSG_SET);
159 if (twCC == TWCC_CHECKSTATUS)
161 twCC = TWCC_SUCCESS;
162 twRC = TWRC_CHECKSTATUS;
164 else
165 twRC = (twCC == TWCC_SUCCESS)?TWRC_SUCCESS:TWRC_FAILURE;
166 activeDS.twCC = twCC;
168 return twRC;
171 /* DG_CONTROL/DAT_EVENT/MSG_PROCESSEVENT */
172 TW_UINT16 SANE_ProcessEvent (pTW_IDENTITY pOrigin,
173 TW_MEMREF pData)
175 TW_UINT16 twRC = TWRC_NOTDSEVENT;
176 pTW_EVENT pEvent = (pTW_EVENT) pData;
177 MSG *pMsg = pEvent->pEvent;
179 TRACE("DG_CONTROL/DAT_EVENT/MSG_PROCESSEVENT msg 0x%x, wParam 0x%Ix\n", pMsg->message, pMsg->wParam);
181 activeDS.twCC = TWCC_SUCCESS;
182 pEvent->TWMessage = MSG_NULL; /* no message to the application */
184 if (activeDS.currentState < 5 || activeDS.currentState > 7)
186 twRC = TWRC_FAILURE;
187 activeDS.twCC = TWCC_SEQERROR;
190 return twRC;
193 /* DG_CONTROL/DAT_PENDINGXFERS/MSG_ENDXFER */
194 TW_UINT16 SANE_PendingXfersEndXfer (pTW_IDENTITY pOrigin,
195 TW_MEMREF pData)
197 TW_UINT16 twRC = TWRC_SUCCESS;
198 pTW_PENDINGXFERS pPendingXfers = (pTW_PENDINGXFERS) pData;
200 TRACE("DG_CONTROL/DAT_PENDINGXFERS/MSG_ENDXFER\n");
202 if (activeDS.currentState != 6 && activeDS.currentState != 7)
204 twRC = TWRC_FAILURE;
205 activeDS.twCC = TWCC_SEQERROR;
207 else
209 pPendingXfers->Count = -1;
210 activeDS.currentState = 6;
211 if (SANE_CALL( start_device, NULL ))
213 pPendingXfers->Count = 0;
214 activeDS.currentState = 5;
215 /* Notify the application that it can close the data source */
216 SANE_Notify(MSG_CLOSEDSREQ);
218 twRC = TWRC_SUCCESS;
219 activeDS.twCC = TWCC_SUCCESS;
222 return twRC;
225 /* DG_CONTROL/DAT_PENDINGXFERS/MSG_GET */
226 TW_UINT16 SANE_PendingXfersGet (pTW_IDENTITY pOrigin,
227 TW_MEMREF pData)
229 TW_UINT16 twRC = TWRC_SUCCESS;
230 pTW_PENDINGXFERS pPendingXfers = (pTW_PENDINGXFERS) pData;
232 TRACE("DG_CONTROL/DAT_PENDINGXFERS/MSG_GET\n");
234 if (activeDS.currentState < 4 || activeDS.currentState > 7)
236 twRC = TWRC_FAILURE;
237 activeDS.twCC = TWCC_SEQERROR;
239 else
241 pPendingXfers->Count = -1;
242 if (SANE_CALL( start_device, NULL ))
243 pPendingXfers->Count = 0;
244 twRC = TWRC_SUCCESS;
245 activeDS.twCC = TWCC_SUCCESS;
248 return twRC;
251 /* DG_CONTROL/DAT_PENDINGXFERS/MSG_RESET */
252 TW_UINT16 SANE_PendingXfersReset (pTW_IDENTITY pOrigin,
253 TW_MEMREF pData)
255 TW_UINT16 twRC = TWRC_SUCCESS;
256 pTW_PENDINGXFERS pPendingXfers = (pTW_PENDINGXFERS) pData;
258 TRACE("DG_CONTROL/DAT_PENDINGXFERS/MSG_RESET\n");
260 if (activeDS.currentState != 6)
262 twRC = TWRC_FAILURE;
263 activeDS.twCC = TWCC_SEQERROR;
265 else
267 pPendingXfers->Count = 0;
268 activeDS.currentState = 5;
269 twRC = TWRC_SUCCESS;
270 activeDS.twCC = TWCC_SUCCESS;
271 SANE_CALL( cancel_device, NULL );
274 return twRC;
277 /* DG_CONTROL/DAT_SETUPMEMXFER/MSG_GET */
278 TW_UINT16 SANE_SetupMemXferGet (pTW_IDENTITY pOrigin,
279 TW_MEMREF pData)
281 pTW_SETUPMEMXFER pSetupMemXfer = (pTW_SETUPMEMXFER)pData;
283 TRACE("DG_CONTROL/DAT_SETUPMEMXFER/MSG_GET\n");
284 if (activeDS.frame_params.bytes_per_line)
286 pSetupMemXfer->MinBufSize = activeDS.frame_params.bytes_per_line;
287 pSetupMemXfer->MaxBufSize = activeDS.frame_params.bytes_per_line * 8;
288 pSetupMemXfer->Preferred = activeDS.frame_params.bytes_per_line * 2;
290 else
292 /* Guessing */
293 pSetupMemXfer->MinBufSize = 2000;
294 pSetupMemXfer->MaxBufSize = 8000;
295 pSetupMemXfer->Preferred = 4000;
298 return TWRC_SUCCESS;
301 /* DG_CONTROL/DAT_STATUS/MSG_GET */
302 TW_UINT16 SANE_GetDSStatus (pTW_IDENTITY pOrigin,
303 TW_MEMREF pData)
305 pTW_STATUS pSourceStatus = (pTW_STATUS) pData;
307 TRACE ("DG_CONTROL/DAT_STATUS/MSG_GET\n");
308 pSourceStatus->ConditionCode = activeDS.twCC;
309 /* Reset the condition code */
310 activeDS.twCC = TWCC_SUCCESS;
311 return TWRC_SUCCESS;
314 /* DG_CONTROL/DAT_USERINTERFACE/MSG_DISABLEDS */
315 TW_UINT16 SANE_DisableDSUserInterface (pTW_IDENTITY pOrigin,
316 TW_MEMREF pData)
318 TW_UINT16 twRC = TWRC_SUCCESS;
320 TRACE ("DG_CONTROL/DAT_USERINTERFACE/MSG_DISABLEDS\n");
322 if (activeDS.currentState != 5)
324 twRC = TWRC_FAILURE;
325 activeDS.twCC = TWCC_SEQERROR;
327 else
329 activeDS.currentState = 4;
330 twRC = TWRC_SUCCESS;
331 activeDS.twCC = TWCC_SUCCESS;
334 return twRC;
337 /* DG_CONTROL/DAT_USERINTERFACE/MSG_ENABLEDS */
338 TW_UINT16 SANE_EnableDSUserInterface (pTW_IDENTITY pOrigin,
339 TW_MEMREF pData)
341 TW_UINT16 twRC = TWRC_SUCCESS;
342 pTW_USERINTERFACE pUserInterface = (pTW_USERINTERFACE) pData;
344 TRACE ("DG_CONTROL/DAT_USERINTERFACE/MSG_ENABLEDS\n");
346 if (activeDS.currentState != 4)
348 twRC = TWRC_FAILURE;
349 activeDS.twCC = TWCC_SEQERROR;
350 WARN("sequence error %d\n", activeDS.currentState);
352 else
354 activeDS.hwndOwner = pUserInterface->hParent;
355 if (pUserInterface->ShowUI)
357 BOOL rc;
358 activeDS.currentState = 5; /* Transitions to state 5 */
359 rc = DoScannerUI();
360 pUserInterface->ModalUI = TRUE;
361 if (!rc)
363 SANE_Notify(MSG_CLOSEDSREQ);
365 else
367 get_sane_params( &activeDS.frame_params );
370 else
372 /* no UI will be displayed, so source is ready to transfer data */
373 activeDS.currentState = 6; /* Transitions to state 6 directly */
374 SANE_Notify(MSG_XFERREADY);
377 twRC = TWRC_SUCCESS;
378 activeDS.twCC = TWCC_SUCCESS;
381 return twRC;
384 /* DG_CONTROL/DAT_USERINTERFACE/MSG_ENABLEDSUIONLY */
385 TW_UINT16 SANE_EnableDSUIOnly (pTW_IDENTITY pOrigin,
386 TW_MEMREF pData)
388 TW_UINT16 twRC = TWRC_SUCCESS;
390 TRACE("DG_CONTROL/DAT_USERINTERFACE/MSG_ENABLEDSUIONLY\n");
392 if (activeDS.currentState != 4)
394 twRC = TWRC_FAILURE;
395 activeDS.twCC = TWCC_SEQERROR;
397 else
399 activeDS.currentState = 5;
400 twRC = TWRC_SUCCESS;
401 activeDS.twCC = TWCC_SUCCESS;
404 return twRC;
407 /* DG_CONTROL/DAT_XFERGROUP/MSG_GET */
408 TW_UINT16 SANE_XferGroupGet (pTW_IDENTITY pOrigin,
409 TW_MEMREF pData)
411 FIXME ("stub!\n");
413 return TWRC_FAILURE;
416 /* DG_CONTROL/DAT_XFERGROUP/MSG_SET */
417 TW_UINT16 SANE_XferGroupSet (pTW_IDENTITY pOrigin,
418 TW_MEMREF pData)
420 FIXME ("stub!\n");
422 return TWRC_FAILURE;