Shi Quan He | 6b0720f | 2002-03-21 02:58:39 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2000 Corel Corporation |
| 3 | * |
| 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. |
| 8 | * |
| 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. |
| 13 | * |
| 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 17 | */ |
| 18 | |
| 19 | #include "winbase.h" |
| 20 | #include "twain.h" |
| 21 | #include "twain_i.h" |
| 22 | #include "wine/debug.h" |
| 23 | |
| 24 | WINE_DEFAULT_DEBUG_CHANNEL(twain); |
| 25 | |
| 26 | TW_UINT16 TWAIN_SaneCapability (activeDS *pSource, pTW_CAPABILITY pCapability, |
| 27 | TW_UINT16 action) |
| 28 | { |
| 29 | TW_UINT16 twCC = TWCC_SUCCESS; |
| 30 | |
| 31 | TRACE("capability=%d action=%d\n", pCapability->Cap, action); |
| 32 | |
| 33 | switch (pCapability->Cap) |
| 34 | { |
| 35 | case CAP_DEVICEEVENT: |
| 36 | case CAP_ALARMS: |
| 37 | case CAP_ALARMVOLUME: |
| 38 | case ACAP_AUDIOFILEFORMAT: |
| 39 | case ACAP_XFERMECH: |
| 40 | case ICAP_AUTOMATICBORDERDETECTION: |
| 41 | case ICAP_AUTOMATICDESKEW: |
| 42 | case ICAP_AUTODISCARDBLANKPAGES: |
| 43 | case ICAP_AUTOMATICROTATE: |
| 44 | case ICAP_FLIPROTATION: |
| 45 | case CAP_AUTOMATICCAPTURE: |
| 46 | case CAP_TIMEBEFOREFIRSTCAPTURE: |
| 47 | case CAP_TIMEBETWEENCAPTURES: |
| 48 | case CAP_AUTOSCAN: |
| 49 | case CAP_CLEARBUFFERS: |
| 50 | case CAP_MAXBATCHBUFFERS: |
| 51 | case ICAP_BARCODEDETECTIONENABLED: |
| 52 | case ICAP_SUPPORTEDBARCODETYPES: |
| 53 | case ICAP_BARCODEMAXSEARCHPRIORITIES: |
| 54 | case ICAP_BARCODESEARCHPRIORITIES: |
| 55 | case ICAP_BARCODESEARCHMODE: |
| 56 | case ICAP_BARCODEMAXRETRIES: |
| 57 | case ICAP_BARCODETIMEOUT: |
| 58 | case CAP_EXTENDEDCAPS: |
| 59 | case CAP_SUPPORTEDCAPS: |
| 60 | case ICAP_FILTER: |
| 61 | case ICAP_GAMMA: |
| 62 | case ICAP_PLANARCHUNKY: |
| 63 | case ICAP_BITORDERCODES: |
| 64 | case ICAP_CCITTKFACTOR: |
| 65 | case ICAP_COMPRESSION: |
| 66 | case ICAP_JPEGPIXELTYPE: |
| 67 | /*case ICAP_JPEGQUALITY:*/ |
| 68 | case ICAP_PIXELFLAVORCODES: |
| 69 | case ICAP_TIMEFILL: |
| 70 | case CAP_DEVICEONLINE: |
| 71 | case CAP_DEVICETIMEDATE: |
| 72 | case CAP_SERIALNUMBER: |
| 73 | case ICAP_EXPOSURETIME: |
| 74 | case ICAP_FLASHUSED2: |
| 75 | case ICAP_IMAGEFILTER: |
| 76 | case ICAP_LAMPSTATE: |
| 77 | case ICAP_LIGHTPATH: |
| 78 | case ICAP_NOISEFILTER: |
| 79 | case ICAP_OVERSCAN: |
| 80 | case ICAP_PHYSICALHEIGHT: |
| 81 | case ICAP_PHYSICALWIDTH: |
| 82 | case ICAP_UNITS: |
| 83 | case ICAP_ZOOMFACTOR: |
| 84 | case CAP_PRINTER: |
| 85 | case CAP_PRINTERENABLED: |
| 86 | case CAP_PRINTERINDEX: |
| 87 | case CAP_PRINTERMODE: |
| 88 | case CAP_PRINTERSTRING: |
| 89 | case CAP_PRINTERSUFFIX: |
| 90 | case CAP_AUTHOR: |
| 91 | case CAP_CAPTION: |
| 92 | case CAP_TIMEDATE: |
| 93 | case ICAP_AUTOBRIGHT: |
| 94 | case ICAP_BRIGHTNESS: |
| 95 | case ICAP_CONTRAST: |
| 96 | case ICAP_HIGHLIGHT: |
| 97 | case ICAP_ORIENTATION: |
| 98 | case ICAP_ROTATION: |
| 99 | case ICAP_SHADOW: |
| 100 | case ICAP_XSCALING: |
| 101 | case ICAP_YSCALING: |
| 102 | case ICAP_BITDEPTH: |
| 103 | case ICAP_BITDEPTHREDUCTION: |
| 104 | case ICAP_BITORDER: |
| 105 | case ICAP_CUSTHALFTONE: |
| 106 | case ICAP_HALFTONES: |
| 107 | case ICAP_PIXELFLAVOR: |
| 108 | case ICAP_PIXELTYPE: |
| 109 | case ICAP_THRESHOLD: |
| 110 | case CAP_LANGUAGE: |
| 111 | case ICAP_FRAMES: |
| 112 | case ICAP_MAXFRAMES: |
| 113 | case ICAP_SUPPORTEDSIZES: |
| 114 | case CAP_AUTOFEED: |
| 115 | case CAP_CLEARPAGE: |
| 116 | case CAP_FEEDERALIGNMENT: |
| 117 | case CAP_FEEDERENABLED: |
| 118 | case CAP_FEEDERLOADED: |
| 119 | case CAP_FEEDERORDER: |
| 120 | case CAP_FEEDPAGE: |
| 121 | case CAP_PAPERBINDING: |
| 122 | case CAP_PAPERDETECTABLE: |
| 123 | case CAP_REACQUIREALLOWED: |
| 124 | case CAP_REWINDPAGE: |
| 125 | case ICAP_PATCHCODEDETECTIONENABLED: |
| 126 | case ICAP_SUPPORTEDPATCHCODETYPES: |
| 127 | case ICAP_PATCHCODEMAXSEARCHPRIORITIES: |
| 128 | case ICAP_PATCHCODESEARCHPRIORITIES: |
| 129 | case ICAP_PATCHCODESEARCHMODE: |
| 130 | case ICAP_PATCHCODEMAXRETRIES: |
| 131 | case ICAP_PATCHCODETIMEOUT: |
| 132 | case CAP_BATTERYMINUTES: |
| 133 | case CAP_BATTERYPERCENTAGE: |
| 134 | case CAP_POWERDOWNTIME: |
| 135 | case CAP_POWERSUPPLY: |
| 136 | case ICAP_XNATIVERESOLUTION: |
| 137 | case ICAP_XRESOLUTION: |
| 138 | case ICAP_YNATIVERESOLUTION: |
| 139 | case ICAP_YRESOLUTION: |
| 140 | twCC = TWCC_CAPUNSUPPORTED; |
| 141 | break; |
| 142 | case CAP_XFERCOUNT: |
Vincent Béron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame^] | 143 | /* This is a required capability that every source need to |
Shi Quan He | 6b0720f | 2002-03-21 02:58:39 +0000 | [diff] [blame] | 144 | support but we havev't implemented yet. */ |
| 145 | twCC = TWCC_SUCCESS; |
| 146 | break; |
| 147 | /*case ICAP_COMPRESSION:*/ |
| 148 | case ICAP_IMAGEFILEFORMAT: |
| 149 | case ICAP_TILES: |
| 150 | twCC = TWCC_CAPUNSUPPORTED; |
Vincent Béron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame^] | 151 | break; |
Shi Quan He | 6b0720f | 2002-03-21 02:58:39 +0000 | [diff] [blame] | 152 | case ICAP_XFERMECH: |
| 153 | twCC = TWAIN_ICAPXferMech (pSource, pCapability, action); |
| 154 | break; |
| 155 | case ICAP_UNDEFINEDIMAGESIZE: |
| 156 | case CAP_CAMERAPREVIEWUI: |
| 157 | case CAP_ENABLEDSUIONLY: |
| 158 | case CAP_INDICATORS: |
| 159 | case CAP_UICONTROLLABLE: |
| 160 | twCC = TWCC_CAPUNSUPPORTED; |
| 161 | break; |
| 162 | default: |
| 163 | twCC = TWRC_FAILURE; |
Vincent Béron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame^] | 164 | |
Shi Quan He | 6b0720f | 2002-03-21 02:58:39 +0000 | [diff] [blame] | 165 | } |
| 166 | |
| 167 | return twCC; |
| 168 | } |
| 169 | |
| 170 | TW_BOOL TWAIN_OneValueSet (pTW_CAPABILITY pCapability, TW_UINT32 value) |
| 171 | { |
| 172 | pCapability->hContainer = (TW_HANDLE)GlobalAlloc (0, sizeof(TW_ONEVALUE)); |
Vincent Béron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame^] | 173 | |
Shi Quan He | 6b0720f | 2002-03-21 02:58:39 +0000 | [diff] [blame] | 174 | if (pCapability->hContainer) |
| 175 | { |
| 176 | pTW_ONEVALUE pVal = GlobalLock ((HGLOBAL) pCapability->hContainer); |
| 177 | pVal->ItemType = TWTY_UINT32; |
| 178 | pVal->Item = value; |
| 179 | GlobalUnlock ((HGLOBAL) pCapability->hContainer); |
| 180 | return TRUE; |
| 181 | } |
| 182 | else |
| 183 | return FALSE; |
| 184 | } |
| 185 | |
| 186 | TW_BOOL TWAIN_OneValueGet (pTW_CAPABILITY pCapability, TW_UINT32 *pValue) |
| 187 | { |
| 188 | pTW_ONEVALUE pVal = GlobalLock ((HGLOBAL) pCapability->hContainer); |
| 189 | |
| 190 | if (pVal) |
| 191 | { |
| 192 | *pValue = pVal->Item; |
| 193 | GlobalUnlock ((HGLOBAL) pCapability->hContainer); |
| 194 | return TRUE; |
| 195 | } |
| 196 | else |
| 197 | return FALSE; |
| 198 | } |
Vincent Béron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame^] | 199 | |
Shi Quan He | 6b0720f | 2002-03-21 02:58:39 +0000 | [diff] [blame] | 200 | /* ICAP_XFERMECH */ |
| 201 | TW_UINT16 TWAIN_ICAPXferMech (activeDS *pSource, pTW_CAPABILITY pCapability, |
| 202 | TW_UINT16 action) |
Vincent Béron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame^] | 203 | { |
Shi Quan He | 6b0720f | 2002-03-21 02:58:39 +0000 | [diff] [blame] | 204 | TRACE("ICAP_XFERMECH\n"); |
| 205 | |
| 206 | switch (action) |
| 207 | { |
| 208 | case MSG_GET: |
| 209 | if (pCapability->ConType == TWON_ONEVALUE) |
| 210 | { |
| 211 | if (!TWAIN_OneValueSet (pCapability, pSource->capXferMech)) |
| 212 | return TWCC_LOWMEMORY; |
| 213 | } |
| 214 | break; |
| 215 | case MSG_SET: |
| 216 | if (pCapability->ConType == TWON_ONEVALUE) |
| 217 | { |
| 218 | TW_UINT32 xfermechtemp; |
| 219 | if (!TWAIN_OneValueGet (pCapability, &xfermechtemp)) |
| 220 | return TWCC_LOWMEMORY; |
| 221 | pSource->capXferMech = xfermechtemp; |
| 222 | } |
| 223 | else if (pCapability->ConType == TWON_ENUMERATION) |
| 224 | { |
| 225 | |
| 226 | } |
| 227 | break; |
| 228 | case MSG_GETCURRENT: |
| 229 | if (!TWAIN_OneValueSet (pCapability, pSource->capXferMech)) |
| 230 | return TWCC_LOWMEMORY; |
| 231 | break; |
| 232 | case MSG_GETDEFAULT: |
| 233 | if (!TWAIN_OneValueSet (pCapability, TWSX_NATIVE)) |
| 234 | return TWCC_LOWMEMORY; |
| 235 | break; |
| 236 | case MSG_RESET: |
| 237 | pSource->capXferMech = TWSX_NATIVE; |
| 238 | break; |
| 239 | } |
| 240 | return TWCC_SUCCESS; |
| 241 | } |