PowerBASIC Forums
  Third-Party Addons
  eztwain

Post New Topic  Post A Reply
profile | register | preferences | faq | search

UBBFriend: Email This Page to Someone! next newest topic | next oldest topic
Author Topic:   eztwain
Don Dickinson
Member
posted July 11, 2001 08:41 AM     Click Here to See the Profile for Don Dickinson     Edit/Delete Message   Reply w/Quote
Below is my translation of the eztwain freeware header from www.dosadi.com

Note I preserved their header comments which indicate that there is not a restriction on the redistribution of the header or the library - they claim no rights or ownership of the work (see below).

I have only tested a few of the functions - twain_acquirenative, twain_freenative, twain_easyversion, twain_isavailable. It is very possible that I made some mistakes in the translation so use/test at your own risk. The functions mentioned above seem to work just fine.

The dll, headers, etc can be downloaded from www.dosadi.com.

--Don


'
' eztwain.bas
'
' translated from
' EZTWAIN.H - interface to Easy TWAIN library from www.dosadi.com
' by Don Dickinson
' ddickinson@usinternet.com
' dickinson.basicguru.com
'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' BELOW ARE THE HEADER NOTES FROM EZTWAIN.H
'
'
' 1.13 09/08/99 Documented correct return codes of AcquireToFilename.
' - No code changes -
' 1.12 09/14/98 Added Fix32ToFloat, allow MSG_OPENDS triplet.
' Added SetXferMech, XferMech.
' 1.11 08/17/98 Added ToFix32, SetContrast, SetBrightness.
' Modified TWAIN_ToFix32 to round away-from-zero.
' 1.09beta 07/27/98 Reverted from 1.08 to 1.06 and worked forward again.
' 1.06 08/21/97 correction to message hook, fixed 32-bit exports
' 1.05 11/06/96 32-bit conversion
' 1.04 05/03/95 added: WriteNativeToFile, WriteNativeToFilename,
' FreeNative, SetHideUI, GetHideUI, SetCurrentUnits,
' GetCurrentUnits, SetCurrentResolution, SetBitDepth,
' SetCurrentPixelType, SetCapOneValue.
' 1.0a 06/23/94 first alpha version
' 0.0 05/11/94 created
'
' EZTWAIN 1.x is not a product, and is not the work of any company involved
' in promoting or using the TWAIN standard. This code is sample code,
' provided without charge, and you use it entirely at your own risk.
' No rights or ownership is claimed by the author, or by any company
' or organization. There are no restrictions on use or (re)distribution.
'
' Download from: www.dosadi.com
'
' Support contact: support@dosadi.com
'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'
#if not %def(%EZTWAIN_BAS)
%EZTWAIN_BAS = 1
#include "win32api.inc"

Declare Function TWAIN_AcquireNative Lib "EZTW32.DLL" Alias "TWAIN_AcquireNative" _
( ByVal hwndApp as Long, ByVal wPizTypes as DWord ) as Long
'
' The minimal use of EZTWAIN.DLL is to just call this routine, with 0 for
' both params. EZTWAIN creates a window if hwndApp is 0.
'
' Acquires a single image, from the currently selected Data Source, using
' Native-mode transfer. It waits until the source closes (if it's modal) or
' forces the source closed if not. The return value is a handle to the
' acquired image. Only one image can be acquired per call.
'
' Under Windows, the return value is a global memory handle - applying
' GlobalLock to it will return a (huge) pointer to the DIB, which
' starts with a BITMAPINFOHEADER.
' NOTE: You are responsible for disposing of the returned DIB - these things
' can eat up your Windows memory fast! See TWAIN_FreeNative below.
'
' The image type can be restricted using the following masks. A mask of 0
' means 'any pixel type is welcome'.
' Caution: You should not assume that the source will honor a pixel type
' restriction! If you care, check the parameters of the DIB.
'

%TWAIN_BW = &h0001 ' 1-bit per pixel, B&W (== TWPT_BW)
%TWAIN_GRAY = &h0002 ' 1,4, or 8-bit grayscale (== TWPT_GRAY)
%TWAIN_RGB = &h0004 ' 24-bit RGB color (== TWPT_RGB)
%TWAIN_PALETTE = &h0008 ' 1,4, or 8-bit palette (== TWPT_PALETTE)
%TWAIN_ANYTYPE = &h0000 ' any of the above

Declare Sub TWAIN_FreeNative Lib "EZTW32.DLL" Alias "TWAIN_FreeNative" ( ByVal hdib as Long )
'
' Release the memory allocated to a native format image, as returned by
' TWAIN_AcquireNative. (If you are coding in C or C++, this is just a call
' to GlobalFree.)
' If you use TWAIN_AcquireNative and don't free the returned image handle,
' it stays around taking up Windows (virtual) memory until your application
' terminates. Memory required per square inch:
' 1 bit B&W 8-bit grayscale 24-bit color
' 100 dpi 1.25KB 10KB 30KB
' 200 dpi 5KB 40KB 120KB
' 300 dpi 11.25KB 90KB 270KB
' 400 dpi 20KB 160KB 480KB
'
Declare Function TWAIN_AcquireToClipboard Lib "EZTW32.DLL" Alias "TWAIN_AcquireToClipboard" _
( ByVal hwndApp as Long, ByVal wPixTypes as Dword ) as Long
'
' Like AcquireNative, but puts the resulting image, if any, into the system
' clipboard. Under Windows, this will put a CF_DIB item in the clipboard
' if successful. If this call fails, the clipboard is either empty or
' contains the old contents.
' A return value of 1 indicates success, 0 indicates failure.
'
' Useful for environments like Visual Basic where it is hard to make direct
' use of a DIB handle. In fact, TWAIN_AcquireToClipboard uses
' TWAIN_AcquireNative for all the hard work.
'
Declare Function TWAIN_AcquireToFilename Lib "EZTW32.DLL" Alias "TWAIN_AcquireToFilename" _
( ByVal hwndApp as Long, zFile as Asciiz ) as Long
'
' Acquire an image and write it to a .BMP (Windows Bitmap) file.
' The file name and path in pszFile are used. If pszFile is NULL or
' points to an empty string, the user is prompted with a Save File dialog.
' Return values:
' 0 success
' -1 Acquire failed OR user cancelled File Save dialog
' -2 file open error (invalid path or name, or access denied)
' -3 (weird) unable to lock DIB - probably an invalid handle.
' -4 writing BMP data failed, possibly output device is full
'
Declare Function TWAIN_SelectImageSource Lib "EZTW32.DLL" Alias "TWAIN_SelectImageSource" _
( ByVal hwnd as Long ) as Long
'
' This is the routine to call when the user chooses the "Select Source..."
' menu command from your application's File menu. Your app has one of
' these, right? The TWAIN spec calls for this feature to be available in
' your user interface, preferably as described.
' Note: If only one TWAIN device is installed on a system, it is selected
' automatically, so there is no need for the user to do Select Source.
' You should not require your users to do Select Source before Acquire.
'
' This function posts the Source Manager's Select Source dialog box.
' It returns after the user either OK's or CANCEL's that dialog.
' A return of 1 indicates OK, 0 indicates one of the following:
' a) The user cancelled the dialog
' b) The Source Manager found no data sources installed
' c) There was a failure before the Select Source dialog could be posted
' -- details --
' Only sources that can return images (that are in the DG_IMAGE group) are
' displayed. The current default source will be highlighted initially.
' In the standard implementation of "Select Source...", your application
' doesn't need to do anything except make this one call.
'
' If you want to be meticulous, disable your "Acquire" and "Select Source"
' menu items or buttons if TWAIN_IsAvailable() returns 0 - see below.
'

' --------- Basic TWAIN Inquiries
Declare Function TWAIN_IsAvailable Lib "EZTW32.DLL" Alias "TWAIN_IsAvailable" () as Long
'
' Call this function any time to find out if TWAIN is installed on the
' system. It takes a little time on the first call, after that it's fast,
' just testing a flag. It returns 1 if the TWAIN Source Manager is
' installed & can be loaded, 0 otherwise.
'
Declare Function TWAIN_EasyVersion Lib "EZTW32.DLL" Alias "TWAIN_EasyVersion" () as Long
'
' Returns the version number of EZTWAIN.DLL, multiplied by 100.
' So e.g. version 2.01 will return 201 from this call.
'
Declare Function TWAIN_State Lib "EZTW32.DLL" Alias "TWAIN_State" () as Long
'
' Returns the TWAIN Protocol State per the spec.
'
%TWAIN_PRESESSION = 1 ' source manager not loaded
%TWAIN_SM_LOADED = 2 ' source manager loaded
%TWAIN_SM_OPEN = 3 ' source manager open
%TWAIN_SOURCE_OPEN = 4 ' source open but not enabled
%TWAIN_SOURCE_ENABLED = 5 ' source enabled to acquire
%TWAIN_TRANSFER_READY = 6 ' image ready to transfer
%TWAIN_TRANSFERRING = 7 ' image in transit

' --------- DIB handling utilities ---------
Declare Function TWAIN_DibDepth Lib "EZTW32.DLL" Alias "TWAIN_DibDepth" _
( ByVal hdib as Long ) as Long

Declare Function TWAIN_DibWidth Lib "EZTW32.DLL" Alias "TWAIN_DibWidth" _
( ByVal hdib as Long ) as Long

Declare Function TWAIN_DibHeight Lib "EZTW32.DLL" Alias "TWAIN_DibHeight" _
( ByVal hdib as Long ) as Long

Declare Function TWAIN_DibNumColors Lib "EZTW32.DLL" Alias "TWAIN_DibNumColors" _
( ByVal hdib as Long ) as Long

Declare Function TWAIN_RowSize Lib "EZTW32.DLL" Alias "TWAIN_RowSize" _
( ByVal hdib as Long ) as Long

Declare Sub TWAIN_ReadRow Lib "EZTW32.DLL" Alias "TWAIN_ReadRow" _
( ByVal hdib as Long, ByVal nRow as Long, prow as Any )
'
' Read row n of the given DIB into buffer at prow.
' Caller is responsible for ensuring buffer is large enough.
' Row 0 is the *top* row of the image, as it would be displayed.
'
Declare Function TWAIN_CreateDibPalette Lib "EZTW32.DLL" Alias "TWAIN_CreateDibPalette" _
( ByVal hdib as Long ) as Long
'
' Create and return a logical palette to be used for drawing the DIB.
' For 1, 4, and 8-bit DIBs the palette contains the DIB color table.
' For 24-bit DIBs, a default halftone palette is returned.
'
Declare Sub TWAIN_DrawDibToDC Lib "EZTW32.DLL" Alias "TWAIN_DrawDibToDC" _
( ByVal hDC as Long, ByVal dx as Long, ByVal dy as Long, _
ByVal w as Long, ByVal h as Long, ByVal hdib as Long, _
ByVal sx as Long, ByVal sy as Long )
'
' Draws a DIB on a device context.
' You should call CreateDibPalette, select that palette
' into the DC, and do a RealizePalette(hDC) first.
'

' --------- BMP file utilities
Declare Function TWAIN_WriteNativeToFilename Lib "EZTW32.DLL" Alias "TWAIN_WriteNativeToFilename" _
( ByVal hdib as Long, zFile as Asciiz ) as Long
'
' Writes a DIB handle to a .BMP file
'
' hdib = DIB handle, as returned by TWAIN_AcquireNative
' pszFile = far pointer to NUL-terminated filename
' If pszFile is NULL or points to a null string, prompts the user
' for the filename with a standard file-save dialog.
'
' Return values:
' 0 success
' -1 user cancelled File Save dialog
' -2 file open error (invalid path or name, or access denied)
' -3 (weird) unable to lock DIB - probably an invalid handle.
' -4 writing BMP data failed, possibly output device is full
'
Declare Function TWAIN_WriteNativeToFile Lib "EZTW32.DLL" Alias "TWAIN_WriteNativeToFile" _
( ByVal hdib as Long, ByVal hFile as Long ) as Long
'
' Writes a DIB to a file in .BMP format.
'
' hdib = DIB handle, as returned by TWAIN_AcquireNative
' fh = file handle, as returned by _open, _lopen or OpenFile
'
' Return value as for TWAIN_WriteNativeToFilename
'
Declare Function TWAIN_LoadNativeFromFilename Lib "EZTW32.DLL" Alias "TWAIN_LoadNativeFromFilename" _
( zFile as Asciiz ) as Long
'
' Load a .BMP file and return a DIB handle (as from AcquireNative.)
' Accepts a filename (including path & extension).
' If pszFile is NULL or points to a null string, the user is prompted.
' Returns a DIB handle if successful, otherwise NULL.
'
Declare Function TWAIN_LoadNativeFromFile Lib "EZTW32.DLL" Alias "TWAIN_LoadNativeFromFile" _
( ByVal fh as Long ) as Long
'
' Like LoadNativeFromFilename, but takes an already open file handle.
'
Declare Sub TWAIN_SetHideUI Lib "EZTW32.DLL" Alias "TWAIN_SetHideUI" _
( ByVal fHide as Long )

Declare Function TWAIN_GetHideUI Lib "EZTW32.DLL" Alias "TWAIN_GetHideUI" () as Long
'
' These functions control the 'hide source user interface' flag.
' This flag is cleared initially, but if you set it non-zero, then when
' a source is enabled it will be asked to hide its user interface.
' Note that this is only a request - some sources will ignore it!
' This affects AcquireNative, AcquireToClipboard, and EnableSource.
' If the user interface is hidden, you will probably want to set at least
' some of the basic acquisition parameters yourself - see
' SetCurrentUnits, SetBitDepth, SetCurrentPixelType and
' SetCurrentResolution below.
'
' --------- Application Registration
Declare Sub TWAIN_RegisterApp Lib "EZTW32.DLL" Alias "TWAIN_RegisterApp" _
( ByVal nMajorNum as Long, ByVal nMinorNum as Long, _
ByVal nLanguage as Long, ByVal nCountry as Long, _
zVersion as Asciiz, zMfg as Asciiz, zProduct as Asciiz )
'
' TWAIN_RegisterApp can be called *AS THE FIRST CALL*, to register the
' application. If this function is not called, the application is given a
' 'generic' registration by EZTWAIN.
' Registration only provides this information to the Source Manager and any
' sources you may open - it is used for debugging, and (frankly) by some
' sources to give special treatment to certain applications.

' --------- Error Analysis and Reporting ------------------------------------
Declare Function TWAIN_GetResultCode Lib "EZTW32.DLL" Alias "TWAIN_GetResultCode" () as Dword
'
' Return the result code (TWRC_xxx) from the last triplet sent to TWAIN
'
Declare Function TWAIN_GetConditionCode Lib "EZTW32.DLL" Alias "TWAIN_GetConditionCode" () as Dword
'
' Return the condition code from the last triplet sent to TWAIN.
' (To be precise, from the last call to TWAIN_DS below)
' If a source is NOT open, return the condition code of the source manager.
'
Declare Sub TWAIN_ErrorBox Lib "EZTW32.DLL" Alias "TWAIN_ErrorBox" ( zMsg as Asciiz )
'
' Post an error message dialog with an exclamation mark, OK button,
' and the title 'TWAIN Error'.
' pszMsg points to a null-terminated message string.
'
Declare Sub TWAIN_ReportLastError Lib "EZTW32.DLL" Alias "TWAIN_ReportLastError" ( zMsg as Asciiz )
'
' Like TWAIN_ErrorBox, but if some details are available from
' TWAIN about the last failure, they are included in the message box.
'
' --------- TWAIN State Control ------------------------------------
Declare Function TWAIN_LoadSourceManager Lib "EZTW32.DLL" Alias "TWAIN_LoadSourceManager" () as Long
'
' Finds and loads the Data Source Manager, TWAIN.DLL.
' If Source Manager is already loaded, does nothing and returns TRUE.
' This can fail if TWAIN.DLL is not installed (in the right place), or
' if the library cannot load for some reason (insufficient memory?) or
' if TWAIN.DLL has been corrupted.
Declare Function TWAIN_OpenSourceManager Lib "EZTW32.DLL" Alias "TWAIN_OpenSourceManager" _
( ByVal hwnd as Long ) as Long
'
' Opens the Data Source Manager, if not already open.
' If the Source Manager is already open, does nothing and returns TRUE.
' This call will fail if the Source Manager is not loaded.
'
Declare Function TWAIN_OpenDefaultSource Lib "EZTW32.DLL" Alias "TWAIN_OpenDefaultSource" () as Long
'
' This opens the source selected in the Select Source dialog.
' If a source is already open, does nothing and returns TRUE.
' Fails if the source manager is not loaded and open.
'
Declare Function TWAIN_EnableSource Lib "EZTW32.DLL" Alias "TWAIN_EnableSource" _
( ByVal hwnd as Long ) as Long
'
' Enables the open Data Source. This posts the source's user interface
' and allows image acquisition to begin. If the source is already enabled,
' this call does nothing and returns TRUE.
'
Declare Function TWAIN_DisableSource Lib "EZTW32.DLL" Alias "TWAIN_DisableSource" () as Long
'
' Disables the open Data Source, if any.
' This closes the source's user interface.
' If there is not an enabled source, does nothing and returns TRUE.
'
Declare Function TWAIN_CloseSource Lib "EZTW32.DLL" Alias "TWAIN_CloseSource" () as Long
'
' Closes the open Data Source, if any.
' If the source is enabled, disables it first.
' If there is not an open source, does nothing and returns TRUE.
'
Declare Function TWAIN_CloseSourceManager Lib "EZTW32.DLL" Alias "TWAIN_CloseSourceManager" _
( ByVal hwnd as Long ) as Long
'
' Closes the Data Source Manager, if it is open.
' If a source is open, disables and closes it as needed.
' If the Source Manager is not open, does nothing and returns TRUE.
'
Declare Function TWAIN_UnloadSourceManager Lib "EZTW32.DLL" Alias "TWAIN_UnloadSourceManager" () as Long
'
' Unloads the Data Source Manager i.e. TWAIN.DLL - releasing
' any associated memory or resources.
' This call will fail if the Source Manager is open, otherwise
' it always succeeds and returns TRUE.
'
Declare Function TWAIN_MessageHook Lib "EZTW32.DLL" Alias "TWAIN_MessageHook" _
( ptrMsg as Any ) as Long
'
' This function detects Windows messages that should be routed
' to an enabled Data Source, and picks them off. In a full TWAIN
' app, TWAIN_MessageHook is called inside the main GetMessage loop.
' The skeleton code looks like this:
' MSG msg;
' while (GetMessage((LPMSG)&msg, NULL, 0, 0)) {
' if (!TWAIN_MessageHook ((LPMSG)&msg)) {
' TranslateMessage ((LPMSG)&msg);
' DispatchMessage ((LPMSG)&msg);
' }
' } ' while
'
Declare Function TWAIN_WaitForNativeXfer Lib "EZTW32.DLL" Alias "TWAIN_WaitForNativeXfer" _
( ByVal hwnd as Long ) as Long
Declare Sub TWAIN_ModalEventLoop Lib "EZTW32.DLL" Alias "TWAIN_ModalEventLoop" ()
'
' Process messages until termination, source disable, or image transfer.
'
Declare Function TWAIN_EndXfer Lib "EZTW32.DLL" Alias "TWAIN_EndXfer" () as Long
Declare Function TWAIN_AbortAllPendingXfers Lib "EZTW32.DLL" Alias "TWAIN_AbortAllPendingXfers" () as Long
Declare Function TWAIN_WriteDibToFile Lib "EZTW32.DLL" Alias "TWAIN_WriteDibToFile" _
( lpDIB as BITMAPINFOHEADER, ByVal hFile as Long ) as Long
'
' Writes a DIB to a file in .BMP format.
' Returns TRUE if successful, FALSE otherwise.
' (Likely causes of failure: device full, or permission denied to write to file or device
' lpDIB = pointer to DIB, as from GlobalLock of DIB handle
' fh = file handle, as returned by C _open or Windows _lopen or OpenFile
' For example of use, see TWAIN_WriteNativeToFilename in EZTWAIN.C
'
' --------- High-level Capability Negotiation Functions --------
Declare Function TWAIN_NegotiateXferCount Lib "EZTW32.DLL" Alias "TWAIN_NegotiateXferCount" _
( ByVal nXFers as Long ) as Long
'
' Negotiate with open Source the number of images application will accept.
' This is only allowed in State 4 (TWAIN_SOURCE_OPEN)
' nXfers = -1 means any number
'
Declare Function TWAIN_NegotiatePixelTypes Lib "EZTW32.DLL" Alias "TWAIN_NegotiatePixelTypes" _
( ByVal wPixTypes as Dword ) as Long
'
' Negotiate with the source to restrict pixel types that can be acquired.
' This tries to restrict the source to a *set* of pixel types,
' See TWAIN_AcquireNative above for some mask constants.
' --> This is only allowed in State 4 (TWAIN_SOURCE_OPEN)
' A parameter of 0 (TWAIN_ANYTYPE) causes no negotiation & no restriction.
' You should not assume that the source will honor your restrictions, even
' if this call succeeds!
'
Declare Function TWAIN_GetCurrentUnits Lib "EZTW32.DLL" Alias "TWAIN_GetCurrentUnits" () as Long
'
' Ask the source what its current unit of measure is.
' If anything goes wrong, this function just returns TWUN_INCHES (0).
'
Declare Function TWAIN_SetCurrentUnits Lib "EZTW32.DLL" Alias "TWAIN_SetCurrentUnits" _
( ByVal nUnits as Long ) as Long
'
' Set the current unit of measure for the source.
' Unit of measure codes are in TWAIN.H, but TWUN_INCHES is 0.
'
Declare Function TWAIN_GetBitDepth Lib "EZTW32.DLL" Alias "TWAIN_GetBitDepth" () as Long
'
' Get the current bitdepth, which can depend on the current PixelType.
' Bit depth is per color channel e.g. 24-bit RGB has bit depth 8.
' If anything goes wrong, this function returns 0.
'
Declare Function TWAIN_SetBitDepth Lib "EZTW32.DLL" Alias "TWAIN_SetBitDepth" _
( ByVal nBits as Long ) as Long
'
' (Try to) set the current bitdepth (for the current pixel type).
'
Declare Function TWAIN_GetPixelType Lib "EZTW32.DLL" Alias "TWAIN_GetPixelType" () as Long
'
' Ask the source for the current pixel type.
' If anything goes wrong (it shouldn't), this function returns 0 (TWPT_BW).
'
Declare Function TWAIN_SetCurrentPixelType Lib "EZTW32.DLL" Alias "TWAIN_SetCurrentPixelType" _
( ByVal nPixType as Long ) as Long
'
' (Try to) set the current pixel type for acquisition.
' This is only allowed in State 4 (TWAIN_SOURCE_OPEN)
' The source may select this pixel type, but don't assume it will.
'
Declare Function TWAIN_GetCurrentResolution Lib "EZTW32.DLL" Alias "TWAIN_GetCurrentResolution" () as Double
'
' Ask the source for the current (horizontal) resolution.
' Resolution is in dots per current unit! (See TWAIN_GetCurrentUnits above)
' If anything goes wrong (it shouldn't) this function returns 0.0
'
Declare Function TWAIN_GetYResolution Lib "EZTW32.DLL" Alias "TWAIN_GetYResolution" () as Double
'
' Returns the current vertical resolution, in dots per *current unit*.
' In the event of failure, returns 0.0.
'
Declare Function TWAIN_SetCurrentResolution Lib "EZTW32.DLL" Alias "TWAIN_SetCurrentResolution" _
( ByVal dRes as Double ) as Long
'
' (Try to) set the current resolution for acquisition.
' Resolution is in dots per current unit! (See TWAIN_GetCurrentUnits above)
' This is only allowed in State 4 (TWAIN_SOURCE_OPEN)
' Note: The source may select this resolution, but don't assume it will.
'
Declare Function TWAIN_SetContrast Lib "EZTW32.DLL" Alias "TWAIN_SetContrast" _
( ByVal dCon as Double ) as Long
'
' (Try to) set the current contrast for acquisition.
' The TWAIN standard says that the range for this cap is -1000 ... +1000
'
Declare Function TWAIN_SetBrightness Lib "EZTW32.DLL" Alias "TWAIN_SetBrightness" _
( ByVal dBri as Double ) as Long
'
' (Try to) set the current brightness for acquisition.
' The TWAIN standard says that the range for this cap is -1000 ... +1000
'
Declare Function TWAIN_SetXferMech Lib "EZTW32.DLL" Alias "TWAIN_SetXferMech" _
( ByVal mech as Long ) as Long

Declare Function TWAIN_XferMech Lib "EZTW32.DLL" Alias "TWAIN_XferMech" () as Long
'
' (Try to) set or get the transfer mode - one of the following:
'
%XFERMECH_NATIVE = 0
%XFERMECH_FILE = 1
%XFERMECH_MEMORY = 2
'
' --------- Low-level Capability Negotiation Functions --------
'
' Setting a capability is valid only in State 4 (TWAIN_SOURCE_OPEN)
' Getting a capability is valid in State 4 or any higher state.
'
Declare Function TWAIN_SetCapOneValue Lib "EZTW32.DLL" Alias "TWAIN_SetCapOneValue" _
( ByVal cap as dword, ByVal itemType as dword, byVal itemVal as Long ) as Long
'
' Do a DAT_CAPABILITY/MSG_SET, on capability 'Cap' (e.g. ICAP_PIXELTYPE,
' CAP_AUTOFEED, etc.) using a TW_ONEVALUE container with the given item type
' and value. The item value must fit into 32 bits.
' Returns TRUE (1) if successful, FALSE (0) otherwise.
'
Declare Function TWAIN_GetCapCurrent Lib "EZTW32.DLL" Alias "TWAIN_GetCapCurrent" _
( ByVal cap as dword, ByVal itemType as dword, pVal as Any ) as Long
'
' Do a DAT_CAPABILITY/MSG_GETCURRENT on capability 'Cap'.
' Copy the current value out of the returned container into *pVal.
' If the operation fails (the source refuses the request), or if the
' container is not a ONEVALUE or ENUMERATION, or if the item type of the
' returned container is incompatible with the expected TWTY_ type in nType,
' returns FALSE. If this function returns FALSE, *pVal is not touched.
'
Declare Function TWAIN_ToFix32 Lib "EZTW32.DLL" Alias "TWAIN_ToFix32" _
( ByVal d as Double ) as Long
'
' Convert a floating-point value to a 32-bit TW_FIX32 value that can be passed
' to e.g. TWAIN_SetCapOneValue
'
Declare Function TWAIN_Fix32ToFloat Lib "EZTW32.DLL" Alias "TWAIN_Fix32ToFloat" _
( ByVal nfix as Long ) as Double
'
' Convert a TW_FIX32 value (as returned from some capability inquiries)
' to a double (floating point) value.

' --------- Lowest-level functions for TWAIN protocol --------
Declare Function TWAIN_DS Lib "EZTW32.DLL" Alias "TWAIN_DS" _
( ByVal dg as Dword, ByVal dat as dword, ByVal msg as Dword, pData as Any ) as Long
'
' Passes the triplet (DG, DAT, MSG, pData) to the open data source if any.
' Returns 1 (TRUE) if the result code is TWRC_SUCCESS, 0 (FALSE) otherwise.
' The last result code can be retrieved with TWAIN_GetResultCode(), and the corresponding
' condition code can be retrieved with TWAIN_GetConditionCode().
' If no source is open this call will fail, result code TWRC_FAILURE, condition code TWCC_NODS.
'
Declare Function TWAIN_Mgr Lib "EZTW32.DLL" Alias "TWAIN_Mgr" _
( ByVal dg as Dword, ByVal dat as Dword, ByVal msg as DWord, pData as Any) as Long
'
'int EZTAPI TWAIN_Mgr(unsigned long DG, unsigned DAT, unsigned MSG, void FAR *pData);
'
' Passes a triplet to the Data Source Manager (DSM).
' Returns 1 (TRUE) if the result code is TWRC_SUCCESS, 0 (FALSE) otherwise.
' The last result code can be retrieved with TWAIN_GetResultCode(), and the corresponding
' condition code can be retrieved with TWAIN_GetConditionCode().
' If the Source Manager is not open, this call will fail, and set the result code to TWRC_FAILURE,
' with a condition code of TWCC_SEQERROR (triplet out of sequence).
#endif

------------------
dickinson.basicguru.com

IP: Logged

Don Dickinson
Member
posted July 11, 2001 08:42 AM     Click Here to See the Profile for Don Dickinson     Edit/Delete Message   Reply w/Quote
Below is a small sample program:


'
' testtw.bas
'
' twain test program
'
#compile exe
#dim all

#include "eztwain.bas"

Function PBMain()

Dim hDIB as Long

MsgBox "About to start"

if TWAIN_IsAvailable() then
MsgBox "Twain is available: " + Format$(TWAIN_EasyVersion())
hDIB = TWAIN_AcquireNative(0, 0)
if hDIB then
MsgBox "Dib Received and saved as e:\test.bmp"
if dir$("c:\test.bmp") <> "" then
kill "c:\test.bmp"
end if
MsgBox Format$(TWAIN_WriteNativeToFilename(hdib, "c:\test.bmp"))
TWAIN_FreeNative hDIB
else
MsgBox "No dib created"
end if
else
MsgBox "Twain is not available"
end if

End Function


------------------
dickinson.basicguru.com

IP: Logged

Hugh (Spike) McLarty
Member
posted February 02, 2006 05:19 PM     Click Here to See the Profile for Hugh (Spike) McLarty     Edit/Delete Message   Reply w/Quote
Hi - I'm Spike McLarty, principal engineer at Dosadi.

Thanks to Don for the translation and nice sample code.
We've gone on from that free version of EZTwain (still available) to do a commercial EZTwain Pro with, of course, lots more features.
It is a superset: Don's sample code would run with our latest product.

As a result of interest from PB developers, the EZTwain Pro developer kit includes a full (machine-generated) PowerBASIC declaration file for all 300+ functions in EZTwain Pro.
If you need to scan a multipage document from a scanner into a PDF file with a half-dozen lines of code, or anything else involving a TWAIN scanner, check us out.
http://www.dosadi.com/eztwain3.htm

------------------
-spike _/\_

IP: Logged

All times are EasternTime (US)

next newest topic | next oldest topic

Administrative Options: Close Topic | Archive/Move | Delete Topic
Post New Topic  Post A Reply
Hop to:

Contact Us | PowerBASIC BASIC Compilers

Copyright © 1999-2005 PowerBASIC, Inc. All Rights Reserved.


Ultimate Bulletin Board 5.45c