----- Old Corel README, probably outdated ----------------------------------
1. INTRODUCTION

This library (twain32.dll) is an implementation of TWAIN API for providing image acquisition devices (scanner or digital camera) support.  It uses SANE drivers as the backend and translates TWAIN API calls into SANE API calls.  Unlike the twain32 library on Windows platform, it combines the Data Source Manager and Data Sources into a single library.  Thus it is our responsiblity to provide a graphical user interface and capability negotiation, which usually are performed by data sources.


2. WHAT'S IMPLEMENTED

- Functions that dispatch operations specified by the operation triplets to the coresponding function.

- All the operation triplets related to the Data Source Manager are implemented.  Appplication is able to enumerate data sources and open them.

- The operation triplets that deal with the UI (such as DG_CONTROL/DAT_USERINTERFACE/MSG_ENABLEDS, MSG_DISABLEDS and MSG_ENABLEDSUIONLY) are partially implemented although it does not really do much.

- The operation triplets that deal with native image transfering (DG_IMAGE/DAT_IMAGENATIVEXFER/MSG_GET) are also partially implemented.  Still need to figure out how to convert the image data obtained from sane to the Windows DIB format.

-  Only the CAP_ICAPXFERMECH capability is implemented.


3. TO-DO

- Image native transfer is not working correctly right now.  It crashed the application due to the invalid DIB created.  We need to fix this.

- Implement other image transfer mode such as file transfer and memory transfer.

- Support all required TWAIN capabilities that have not been implemented currently.  There are a fixed number of capabilities specified by the TWAIN Specification.  However, device capabilities are dynamic in SANE and there isn't a standard about the capability names.  It would be difficult to negotiate capabilities in TWAIN given that we don't know what capabilities a SANE driver would provide.  One possible solution to use a device configuration file to describe the mapping between capabilities supported by a SANE driver and those specified by TWAIN.   
- Build a dynamic user interface that reflects the capabilities of different scanner devices.  According to the TWAIN specification, each TWAIN driver need to provide its own user interface.  However the SANE drivers do not have graphical frontends.  Building a frontend for each SANE driver is a huge task.  It is possible to have a dynamic frontend similar to xscanimage or xsane that works for all the devices.  This is possibly the most difficult part. 

- check into legal issues regarding:
  - TWAIN header file
  - linking to SANE (maybe should dynamically link at run time?)

- add autoconf rules for enabling based on whether sane is installed

4. FILE LISTING

twain32_main.c          Functions to regconize operation tripets and dispatch
                        the requests to the corresponding functions.
dsm_ctrl.c		Implementation of DG_CONTROL group operation triplets
                        destinated for source manager.
ds_ctrl.c               Implementation of DG_CONTROL group operation triplets
                        destinated for data source.
ds_image.c              Implementation of DG_IMAGE group operation triplets
                        destinated for data source.
ds_audio.c              Implementation of DG_AUDIO group operation triplets
                        destinated for data source
capability.c            Functions for negotiating capabilities
twain.h			The original TWAIN header file
twain_i.h		Header file for the internal twain functions	


--
Shi Quan He
shiquan@cyberdude.com
