⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twain32_main.c

📁 这是一个开放源代码的与WINNT/WIN2K/WIN2003兼容的操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -