📄 twain32_main.c
字号:
/*
* TWAIN32 functions
*
* Copyright 2000 Shi Quan He <shiquan@cyberdude.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "twain.h"
#include "twain_i.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(twain);
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
TRACE("%p,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinstDLL);
DSM_currentState = 2;
break;
case DLL_PROCESS_DETACH:
DSM_currentState = 1;
break;
}
return TRUE;
}
TW_UINT16 TWAIN_SourceManagerHandler (
pTW_IDENTITY pOrigin,
TW_UINT16 DAT,
TW_UINT16 MSG,
TW_MEMREF pData)
{
TW_UINT16 twRC = TWRC_SUCCESS;
switch (DAT)
{
case DAT_IDENTITY:
switch (MSG)
{
case MSG_CLOSEDS:
twRC = TWAIN_CloseDS (pOrigin, pData);
break;
case MSG_GETDEFAULT:
twRC = TWAIN_IdentityGetDefault (pOrigin, pData);
break;
case MSG_GETFIRST:
twRC = TWAIN_IdentityGetFirst (pOrigin, pData);
break;
case MSG_GETNEXT:
twRC = TWAIN_IdentityGetNext (pOrigin, pData);
break;
case MSG_OPENDS:
twRC = TWAIN_OpenDS (pOrigin, pData);
break;
case MSG_USERSELECT:
twRC = TWAIN_UserSelect (pOrigin, pData);
break;
default:
/* Unrecognized operation triplet */
twRC = TWRC_FAILURE;
DSM_twCC = TWCC_BADPROTOCOL;
WARN("unrecognized operation triplet\n");
break;
}
break;
case DAT_PARENT:
switch (MSG)
{
case MSG_CLOSEDSM:
twRC = TWAIN_CloseDSM (pOrigin, pData);
break;
case MSG_OPENDSM:
twRC = TWAIN_OpenDSM (pOrigin, pData);
break;
default:
/* Unrecognized operation triplet */
twRC = TWRC_FAILURE;
DSM_twCC = TWCC_BADPROTOCOL;
WARN("unrecognized operation triplet\n");
}
break;
case DAT_STATUS:
if (MSG == MSG_GET)
{
twRC = TWAIN_GetDSMStatus (pOrigin, pData);
}
else
{
twRC = TWRC_FAILURE;
DSM_twCC = TWCC_BADPROTOCOL;
WARN("unrecognized operation triplet\n");
}
break;
default:
twRC = TWRC_FAILURE;
DSM_twCC = TWCC_BADPROTOCOL;
WARN("unrecognized operation triplet\n");
break;
}
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -