In 1993 Integrex wanted to enter the Acorn market with a low cost scanner and I'd written to Acorn suggesting that I implement the TWAIN scanner driver protocol. Acorn put us in contact with one another. In those days scanners were a neat idea, it was the era of fax modems, they fitted together well.
The Integrex scanner used the HP Scan Jet command set, so that was the first model supported. Epson and Canon flat bed scanners were already popular in the Acorn world, support for them followed rapidly.
A common misapprehension is that if a TWAIN driver exists for a scanner then all ones problems are over. It's not so simple, the TWAIN driver is only glue between the scanner and applications on a given platform. A Windows driver is no help on RISC OS computers.
TWAIN was a laudable effort to provide a standard interface to scanners from applications. There was a cross industry body that published the standard and maintained it. I did have contact with them, but they had little interest in an implementation for RISC OS (an unheard of operating system in a country far away).
Anyway I bought the TWAIN software development kit and I implemented TWAIN for RISC OS. TWAIN consists of sources (scanner drivers) and a source manager. I did things in a RISC OS way. Folders for sources and modules for the code.
I recall being told at one of the Harrogate shows by Charles Moir (of Computer Concepts) that I should stop being silly and admit that what I had implemented was not TWAIN. Years later when I ported some of my software to Windows, the TWAIN side of things worked with no modification. It really is TWAIN. Of course when I originally implemented it on RISC OS the idea was that it would make life easy for people moving applications from Windows to RISC OS.
TWAIN relies on applications understanding the protocol. There was not huge interest in the RISC OS world in implementing it. Too much like hard work. I ended up providing libraries for BBC Basic.
I wrote drivers for many scanners. Too many. To my credit at one time RISC OS supported more scanners than some other operating systems. Realistically most RISC OS users would only use mid-price models and writing drivers for expensive scanners wasted time that could have been spent on improving the other drivers.
One highlight was the Nikon Coolscan, a slide scanner built to fit in a 5.25" disk drive bay. Just the thing to show off how expandable the new RISC PC was.
I came a cropper when Alan Wrigley reviewed some of my drivers for Risc User magazine and said they were of poor quality. This hurt. Where I went wrong is that many manufactures achieved better quality by processing the data coming out of the scanners - they did not provide any information on what that processing consisted of. However the opposition in the Acorn world in the form of Irlam Instruments had been quick witted enough to see what was wrong with the raw results from the Epson scanners and fix it.
As a result of this I brought out "TWAIN 2" - drivers with a better user interface and many features - including better image scaling - the cause of the grief with Epson scanners.
The original drivers were SCSI based. Thanks to Gareth Long, parallel port support was added. The final development was USB support for both Castle and Simtec USB cards.
I have problems supplying source code for all the drivers. Many were written under non-disclosure agreements. The code would probably be of little use anyway. Some of the major manufacturers are now out of business. The very expensive scanner of 1994 is now easily outclassed by low price models. I believe all the scanners I did write drivers for are supported by the open source Sane project, so how to drive them is no longer a secret.
Getting information on how to drive scanners "command sets" was often a problem. I ended up with a pile of paper as high as my desk, mostly about scanners which were of no interest, which took up space for many years.
Providing one scanner driver should allow others to produce new drivers. For my drivers almost all the code is standard, a single file c.scanlo being scanner specific.
There are various components.
- The Twain source manager - !Twain
- Twain sources, !EpsonGT
- The Twain library, standard code which is linked to both applications and to drivers/sources (which are RISC OS modules) and hence is built in two versions.
- A version of the Twain library (for applications) built as a RISC OS module to make life easier for those not programming in C.
In the mid 90's the Twain library in RISC OS module form mattered to those writing in BBC Basic. I find it has not been rebuilt since then, and is presumably of no interest in the 32 bit world.
The split between Castle and Simtec USB interfaces resulted in splitting the driver into two versions. The Castle one is the most developed. I never got 32 bit versions of the Simtec USB libraries.
RISC OS source code of the Twain manager
RISC OS source code of the Epson driver Castle USB version
RISC OS source code of the Epson driver Simtec USB version
RISC OS source code of the Twain library
RISC OS source code of the Twain library in module form
RISC OS Twain manual as .pdf