TODO (2003-01-26)

******** todo ********

backends
--------
  * Add new backends (+ means scheduled for SANE 1.0.10)
    - Hewlett-Packard ScanJet 3300C / 3400C and 4300C (wip)
      http://sourceforge.net/projects/hp3300backend
    - Hewlett-Packard 4200c
      http://hp4200-backend.sourceforge.net/
      http://www.linuxprinting.org/till/tmp/sane-backends-1.0.9-hp4200-0.3.patch.bz2
      http://fz.eryx.net/sane/#hp4200

  * qcam:
     - implement auto mode for brightness and black-level (don't
       just advertise it!) Actually, implement an auto "backend" instead
       that can be plugged in front of any backend with brightness/contrast
       etc controls
     - figure out how/if to support bulb mode
     - convert to use sanei_pio functions instead of direct port
       access.
     - The result of locking isn't checked --> does it make sense at all?

  * sm3600.c, .h:
     - Fix comment header (wrong author, wrong description)

  * dc210, dc240, gphoto2, and jpeg stuff: move sanei_* functions to sanei/
    (if they are necessary). That's probably for SANE2.

  * v4l:
     - Geometry support is missing
     - Frequency setting is missing
     - check if v4lctl distributed with xawtv can be used

  * memory leaks:
    - sane_exit() does not release memory allocated by sane_get_devices():
      abaton, agfafocus, apple, as6e, bh, canon, coolscan, dmc, qcam,
      ricoh, s9036, sp15c, tamarack
    - as6e: attach: memory (dev + dev-sane.name) isn't freed if driver isn't
      found.

  * net: add IPv6 support.

  * suspicious warnings or type mismatchs:
    - bh: backend/bh.c", line 1923: warning: end-of-loop code not reached
      see sane-devel.
    - coolscan: Lots of compilation warnings (e.g.
      "backend/coolscan-scsidef.h", line 160: warning: initialization
      type mismatch; empty declarations), see sane-devel.

  * Check if sp15c backend (Fujitsu ScanPartner 15C) can be included in
    fujitsu or avision backends.

  * Check the Irix patches from
    http://www.mostang.com/pipermail/sane-devel/2002-December/017010.html
    - as6e

doc
---
  * Add doxygen documentation for the remaining sanei files:
    - sanei_pio.h
    - sanei_pv8630.h
    - sanei_wire.h

  * desc files:
    - Add keywords "vendor-id" and "product-id" for SCSI and USB ids.
    - avision.desc: Is the removal of the HP 7450 intended?

  * manpages:
    - html manpages have broken links to other man pages if link is wrapped at
      the end of the line (e.g. sane-pint points to pint.5.html).

frontends
---------
  * saned:
     - saned times out after 60 minutes. Check if the
       watchdog timer is really necessary (e.g. to avoid blocking scanners
       by one user). Maybe add a command line option to saned to set the
       timeout. Otherwise turn on TCP keep alive (where available) and
       (maybe) check the connection from server side.
     - Add IPv6 support.
     - Add support for IP ranges in saned.conf (like 10.0.0.0/8)?

  * scanimage: Check range of width and height. scanimage just uses the ranges
    from br-x and br-y but this is wrong for tl-x and tl-y != 0 and for
    SANE_UNIT_PIXEL.
  
  * scanimage: Reduce range of width and length if tlx or tly is different 
    from 0 to avoid warnings.

  * scanimage: Check handling of short string-list options.

sanei
-----
  * sanei_scsi: Think about a completely new interface. Details are in
    http://www.mostang.com/pipermail/sane-devel/2002-January/001995.html and
    http://www.mostang.com/pipermail/sane-devel/2002-December/016773.html.

  * create sanei_parport_* and remove all inb, outb,... from all backends;
    use libieee1284 if available (see
    http://people.redhat.com/twaugh/libieee1284/). Or just include this
    library into sane.

  * Check if the device file has the right type before accessing it. E.g.
    check for major/minor numbers to avoid accessing a USB file as SCSI 
    device. This is finished for sanei_scsi.c/Linux and sane-find-scanner.
    Patches for other platforms are welcome.

  * sanei_scsi (Linux): Make sure that the SCSI driver is loaded when
    checking for scanners. Ideas: Open/close all the /dev/sg* files in
    sanei_scsi.c, dll.c or in a new backend.

  * sanei_usb, sanei_scsi: Print all data send to and received from devices.
    Use high debug level.

  * sanei_usb:
    - using only the first interface may be a problem with all-in-one devices
      Use the same approach as in kernel scanner driver instead.
    - some scanners seem to provide more than one bulk-in endpoint(?) 


platform-specific
-----------------

  * Fix MacOS X issues: 
    - Add support in sanei_scsi.c.
    - Find out why libusb doesn't work propperly. Seems to work with some
      scanners, however.
    - More docu in README.darwin.
    - sm3600 is reported to crash with MacOS X. Actually, the crash is in
      libusb::usb_find_devices().
  
  * OS/2 issues: 
    - Add $EXEEXT or sed expression to Makefiles to get the .exe extension?
    - Add support for semaphores also for OS/2 (currently used in snapscan).

  * icc on ia32 + ia64:
    - fix sys/io.h problems (see README.linux)

misc
----
  * sane-config: add options "--exec-prefix=...." and "--prefix=..."
    compareable to gtk-config

  * Make output of sane-find-scanner more flexible. See scanimage -f for
    details.

  * Check licence issues with getopt*.c and md5.c. These files are GPLed, so
    if they are used in backends, their SANE exception will be void.

  * Can we link external libraries only to backends that need them?
    See http://fz.eryx.net/sane/#configure.

  * Fix japi to run on current jdks. Swing is now included, and there is
    a segfault in Sane.c.

******** done ********
* SCSI access doesn't seem to work on Linux/Sparc. See emails from
  Tomislav Renic on sane-devel (2001-09-21). Looks like it only happens
  on 64 bit systems. SANE is compiled as 32 bit program there but
  the kernel expects 64 bit structures.
* Find out why USB on *BSD only works once (at least for Mustek scanners).
* Really fix all the parport/inb/outb compilation issues which break
  porting to some non-i386 platforms.
* Make sure that USB backends don't depend on the kernel USB scanner
  driver but also work with libusb. The linux kernel scanner driver may be
  gone in Linux 2.6.0.
* plustek: will need some work to autodetect all supported scanners (libusb)
* Remove backend-specific .po files when they are no longer needed.
* hp.desc, umax_pp.desc: Use "ScanJet number" instead of "HP ScanJet number"
  or "HP number" for better sorting of the lists
* umax_pp.man: Don't use "'" at the beginning of lines.
* add unsupported.desc with links to information about unsupported scanners
* MacOS X: Check libtool glitches. Does an update make sense?
* sane.tex (->sane2):
 - Add a warning/explanation about problems with sane_get_select_fd, Unix
   select() calls and sane_cancel (-->backend-writing.txt?).
 - Define, how to handle SANE_CAP_ADVANCED for groups. 
   (-->backend-writing.txt?)
 - Add a well-known option that represents the status of buttons or some
   other means to support buttons if this is possible before SANE2. Keep
   in mind locking issues.
* Add viceo.desc to descriptions-external (from Steven Ellis 
  <viceo@stevencherie.net>)
* Add AC_OBJEXT and AC_EXEEXT to configure.in for automatically adding
  the correct extensions (e.g. for OS/2).--> that's now done automatically
* MacOS X: Check that LDFLAGS approach in configure works for dynamic loading.
* manpages:
  - Make sure that .SH NAME uses \- to distinguish between the backend 
    name and the description
  - Check .IX for correctness (e.g. umax-1220u). Is it needed at all?
  - Maybe add sane-backends-version to .TH?
* avision.c: avision.c:3163: warning: too many arguments for format
* hpsj5s seems to freeze in DetectScanner() if a printer is connected to
  the system.
* Fix warnings about DBG calls (try gcc 3.x to get these warnings):
* add backend: tevion9693usb backend
* canon.c: Fix model extraction code.
* po files: use msgcat if available, remove awk hook instead.
* sane.tex:
    - Define the return values for sane_init?  Define the consequences if
      sane_init doesn't return SANE_STATUS_GOOD.
    - sane_start() can also return SANE_STATUS_INVAL
    - sane_set_io_mode: SANE_STATUS_UNSUPPORTED should mean: "The backend does
      not support the requested I/O mode.". Also explain in more detail that
      this function must be called after sane_start.
* Remove unsupported scanners from the list or at least mark them with
  ":status :unsupported":
* sane.tex: Add some text about the meaning of bits in 1-bit modes.
* dll: 
   - Rewrite to use libtool ltdl library. Is this necessary? It seems to
     work...
* Problems (crash) with more than one video card. It looks like 
  the two different cards are identified as the same card.
* sane-plustek.man: fix warnings on Debian systems ("sane-plustek contains a
  pointer loop")
* scanimage: add option to avoid scanning (for setting options only)
* Mark scanners with ":status :untested" if they are untested by the author
  or users:
* scanimage: 
    - Add doku for --icc-profile
    - Add link to gamma4scanimage
* sanei_scsi: Allow changing sg timeout e.g. by environment variables.
* remove ptal support from configure and hp backend
* tools/Makefile.in: -lm dependency doesn't work on OS/2.
* Fix inclusion of saneopts.??.po in po/. Currently, the "" header is
  defined twice.
* Don't use "echo -e" in shell scripts. That's not supported by the original 
  sh (-->sane-config.in).
* scanimage: Add i18n (NLS) support? We don't do it (too much trouble with
  options and UTF8 support).
* Desc files: Don't use :interface if you don't have a hardware device
* Use DBG(...) instead of fprintf(stderr, ...) or printf
* OS/2 needs a "# define strncasecmp(a, b, c) strnicmp(a, b, c)" in config.h.
* sanei_usb.c: Can libusb be used alternatively to the kernel scanner
  drivers?
* sane-backends.html should be sorted by manufacturer, not by backend.
* Add support to sane-find-scanner to check whole directories for device
  files. E.g. /dev/scsi/scanner and /dev/scsi/processor for Solaris.
* Add configure option to enable only the net backend for users without
  local scanners. Install only sane-dll/sane-net (or even only sane-net).
  Maybe something like  --network-client-only or --disable-local-devices.
* Check include/sane/config.h.in for unnecessary macros.
* scanimage: Fix pnm 16 bit output (partly patch available).
* Make all symbols that don't start with sane_ or sanei_ static (see
  make libcheck):
* avision: line 1393: word isn't freed sometimes (maybe if  cp == line?)
* dll: Check what happens when calling sane_init/sane_open and sane_exit
       more than once.
* Update backends
  + Canon FB620S flatbed scanner and FS2710 film scanner support
    (update for canon backend).
    ftp://stthd0.pc.uni-koeln.de/pub/canon-1.08.tar.gz
    Ulrich Deiters <ukd@xenon.pc.Uni-Koeln.DE>
* The plustek backend doesn't compile on OS/2 because 
  in plustek-usbhw.c itimerval is unknown.
* Add backends:
    + Fujitsu M3091DCd support
  Done (fujitsu).
* Add backends (no response from author and unchanged for some time)
    - Linux Handscanner Ioctl Interface scanner by Harald
      Bauer <bauer-h@web.de>
    - viceo (Visioneer OneTouch 8600)
      http://www.littlecms.com/iphoto/otlinux.htm
    - v4l2 http://video.inodes.org/sane-v4l2/
* Fix shared lib problem with NetBSD. Starting scanimage results in:
  "Cannot open "../backend/.libs/libsane.so". However, scanadf works.
* Check if a new version of libtool can fix the above mentioned issues.
  Currently (2002-03-17) the CVS version of libtool works on NetBSD but
  breaks AIX-4.
* Combine all the Fujitsu backends into one single backend
* sane-backends.html should state more clearly which backends are included
  in the distribution. Solution: Split into two lists.
* Keep config.guess and config.sub up-to-date.
* sane.tex: Add new sane.type = "film scanner". Check the other well known
  strings for completeness.
* make distclean should remove *.orig, *.old, .#*, *.tar.gz, and similar
  files.
* Shared libs work with OpenBSD. However, they are named libsane.so.1.6
  instead of 1.0.6. Is this correct?
* #include "../include/sane/config.h" should be the first include in every
  file (see doc/sane-backend-writing.txt for the lalloca exception):
* Don't use -ansi for HPUX (see sane-devel).
* Don't use exit() in backends.
* sanei_scsi: Check return values of req_wait and cmd in case of
  SCSI DEVICE BUSY. Better specification of the behaviour of sanei_scsi
  functions (e.g. return values, timeout 10 min versus 1 min)?
* Documentation for sanei API
* Fix missing or wrong links to backend homepages (*.desc). If a homepage
  doesn't exist, add a contact address (where available).
* Check all backends which use fork/kill for the kill (-1,...) bug
  first found in the microtek2 backend.
* Add support for qt NLS (msg2qm) if possible without too much hassle.
* Add new backend primax http://primax.sourceforge.net/ (won't be ever a
  real sane backend)
* qcam: Check file handling in /tmp.
* Add a check in the frontends if the backend delivers more data than
  it announced by sane_get_parameters to avoid segfaults with bad 
  backends?
* Add installation procedure for translations of SANE backend's options.
* check memory leaks (checked with purify and mtrace (from glibc)):
* Test SANE on different os/platforms, fix possible compilation problems 
   Test methods: scanimage -d pnm:0 --filename=file.pnm -T
                 scanimage -d net:localhost:pnm:0 --filename=file.pnm -T
                 (start saned by inetd or saned -d before testing)
                 xscanimage / gimp with xscanimage plugin (where available)
   All the above with shared and static libraries.->backend-writing.txt
* Remove compiler warnings (>300 warnings even in disable-warnings mode,
  >700 with --enable-warnings)) ->backend-writing.txt
* Use #include "../include/sane/..." instead of #include <sane...>
  ->backend-writing.txt
* Use #include "../include/lalloca.h" instead of #include <lalloca.h>
  ->backend-writing.txt
* Update backend manpages (->backend-writing.txt).
* Add description of --enable-parport-directio.
* saned: Add documentation about the data connection.
* UMAX Astra 1220U  backend
  http://umax1220u-sane.sourceforge.net/
* There seems to be yet another race condition or other source for
  freezes in saned or net. Wheile scanning with pnm and auth, scanimage
  freezes. Last message from saned: "process_request: got request 2".
* Split configure option --enable-directio into --enable-scsi-directio and
  --enable-parport-directio to avoid confusion. Also add appropriate
  documentation.
* sanei_usb: Add sanei_usb_control_msg. 
* Add support for PV8630 USB chipset (as sanei interface):
* Fix libsocket problem (OS/2). libsocket must be linked when testing for
  libsyslog.
* Add bearpaw backend (Mustek BearPaw 1200 + maybe 2400)
  (will be supported by plustek backend)
* Must -ldl be added to sane-config.in?
* Use @LIBDIR@, @CONFIGDIR@ and the other @@ macros to refer to paths.
  These are updated when installing to a non-standard prefix.
* net: cancel doesn't work over the net at least with pnm and mustek.
* add Jochen Eisinger's net.c and sanei_wire.c fixes/additions.
* net.c: don't just ignore the byte-order for the image data (needed to
  support depths > 8 bits/channel)
* saned seems to have problems checking the peer name of incoming
  connections. This happens at least with glibc 2.2.4 if the
  name in saned.conf is not fully qualified. See sane-devel
  "saned.conf hostname format".
* If you mention sane-devel, also mention the website concerning
  subscription (http://www.mostang.com/sane/mail.html), because you can't
  write to sane-devel without subscribing.
  Or use your own mail address in the manual page.
* Check for logical errors and spelling
* Check .desc files:
* Check for formatting bugs in manual pages:
* Use #include "../include/assert.h" instead of #include <assert.h> to
  avoid problem with shared libraries on AIX.
* scanimage: Maybe add ADF extensions from Caskey Dickson (or add them to 
  scanadf if necessary).
* Add Mustek USB backend (1200UB, 1200CU, 1200CU Plus)
  http://www.meier-geinitz.de/sane/
  Henning Meier-Geinitz <henning@meier-geinitz.de>
* Add USB support for sane-find-scanner.
* move .desc files for backends that are not included in SANE to
  different directory (e.g. backends and external-backends)?
* create sanei_usb.* (maybe containing access for libusb and direct access
  for usb device files)? (sane-1.0.6)
* Add sane-usb manpage
* Check net/saned
   - sometimes saned+net freezes right after a scan (is this still
     occuring 2001-06-04?)
* add warning when prefix dir is not listed in /etc/ld.so.conf on 
  linux systems may be there is a general way to test this if the
  destination library directory is in the search path of the
  linker. [The correct fix is to use -R (on Solaris) and -rpath
  (on the rest?) to include the dynamic link path in the binaries
  / libraries. pere 2001-02-09 -- I believe this is partly fixed
  in tools/sane-config.in 2001-05-18]
* Add links to sane(7) in all maual pages
* Check AIX/gcc shared lib loading problem: When starting scanimage,
    only dll is loaded.
    Backend libraries can't be loaded:
    [dll] load: dlopen() failed (Symbol resolution failed for
       /tmp/sane-bin/lib/sane/libsane-umax.so.1 because:
       Symbol __eprintf (number 55) is not exported from dependent
       module scanimage.
    This happens in most libraries. The reason is assert() e.g. in
    sanei_scsci.c. As assert() is in libgcc.a it can't be linked at runtime.
* Don't export any other symbols than sane_* and sanei_*
* nec:
   - Remove references to sharp backend (grep for "JX").
   - Check for HAVE_SYS_SHM_H before including sys/shm.h and
     disable shared memory support if necessary.
* lines like "if (config_line[len - 1] == '\n')" can cause segfaults and
  should be removed (removing "\n" is already done in sanei_config_read).
  This ist just a fast grep. Check all backends!
* add additions/bug fixes to microtek2 from Karsten Festag
  <karsten.festag@t-online.de> (partially done)
* include snapscan updates http://sourceforge.net/projects/snapscan
* as6e: change :new status to :alpha, :beta, or :stable.
* Check Tru64 Unix compilation problems with u_int* types. They are already
  defined in sys/bitypes.h but this file isn't checked with AC_CHECK_TYPE.
  (-> include sys/bitypes.h in these cases).
* Fix HP-UX problems in isfdtype.c (and maybe others). sys/stat.h doesn't
  seem to define stuct stat (not a bug, make was used instead of gmake).
* Polaroid SprintScan 35 LE [should be included into microtek] 
* Maybe add script to deinstall existing sane versions
  - make uninstall
  - install sane-uninstall script. Advantage: uninstall possible
    without sourcecode (I think that's not necessary because you usually
    have the sourcecode of a newer version if you want to uninstall. hmg)
* Add sane manpage (this is work in progress: Henning Meier-Geinitz 
                    <henning@meier-geinitz.de>)
   - versioning system?
   - SANE API (maybe summary only?)
   - point to backends and other information?
* Add backend UMAX 1220P/2000P & HP 320C http://umax1220p.sourceforge.net
* install all documentation that's available
* Add a check for installed sane versions.
  - Print a warning when already a sane version is installed
  - If SANE is installed at a different location, ask user to
    remove old installation first
* epson: backend tries to detect usb scanners by default. This breaks with
  non-epson scanners like the LM9831 bases Mustek Bearpaw 1200. The epson
  backend freezes if such a scanner is plugged in. Try to make the test safe
  or don't test without user interaction.
* pnm: add more options for testing (e.g. arrays and read-only options)
* sanei_scsi.c: OS/2: struct param breaks compilation with --enable-warnings.
  (probably fixed by testing for os2.h in configure).
* Check all manpages for references to find-scanner (->sane-find-scanner).
* net.c doesn't compile on Irix because socklen_t isn't known
* Add new backends: bh http://www.martoneconsulting.com/sane-bh.html
* Add manpage for find-scanner.
* Should find-scanner be installed?
* net backend segfaults sometimes when connected to localhost. Enabling
  debug output sometimes prevents segfaults. Cause of the problem:
  Copying SANE_TYPE_STRINGs up to their maximum size in 
  SANE_Option_Descriptor (strings may be shorter then size).
* Compilation of most backends break with OS/2 and gcc because the
  option -ansi doesn't seem to like sigset_t ?
* Check for shm.h in configure
* Add a global PATH_MAX macro somewhere (config.h ?) if it's not defined
  by the system.
* sanei_scsi.c: Add patch from FreeBSD ports (sanei_scsi_find_devices)
  (after 1.0.4).
* update libtool versioning system
  - in /usr/local/lib/libsane.la "installed=no" is set, isn't 
    "installed=yes" the correct entry?
* plustek-share.h: remove //
* as6e: Check result of stat for errors to avoid false recognitions of the
  as6edriver.
* artec: O_SYNC is not Posix. Breaks compilation on FreeBSD and (maybe) OS/2.
* use strchr() instead of index() in mustek_pp to avoid problems when
  icluding strings.h or string.h.
* Add test for PTAL to acinclude.m4/configure.in
* build on Irix fails because of problems with the jpeg library. If this
  is removed in configure, build works. It complains about functions like
  (typename) functionname (). It doesn't like the brackets which result
  from expanding the macros EXTERN(x), METHODDEF(x), and GLOBAL(x) to
  (x). Defining something like EXTERN(x) x seems to work.  Same for dc210.c
  Something like --disable-jpeg for configure would be nice.
* addition to hp backend (support for SCL-based HP OfficeJets)
  http://hpoj.sourceforge.net
* Libtool: 
  - -version-info is used but with the current version number system 
    -release should be used. (We should not change the version syntax
     within an existing sane-standard, so we leave this)
  - look for AIX problems (overwriting shared libs with eachother
    because all libs are named libsane.so.1) (solved)
  - look for Irix/cc problems (program searches for libsane.so.2 instead
    of libsane.so.1). (Patch works for existing sane standard)
* getopt.c and umax.c seem to use gettext? Can cause crash if frontends
  are linked to libintl, too.
* libdl is used in dll backend but -ldl is not added to LDFLAGS?
* use strchr() instead of index() in sanei_auth, scanimage, saned
  to avoid problems when icluding strings.h or string.h.
* Remove frontends (at least xscanimage/xcam) from distribution. 
* build on AIX does only work for static libraries. The shared libraries
  seem to overwrite each other.
* add sanei_authorize (function for all backends)
* make authorization_callback work in net-backend and saned. Try to 
  avoid plain text passwords?
* Add as6e http://as6edriver.sourceforge.net/
* stiff.c: Tiff header not written correctly: "Jaeger, Gerhard"
  <gjaeger@sysgo.de> writes: When writing the TIFF header, you have to
  specify the TAG "BitsPerSample", which tells a reader how many bits each
  sample has. The current version only specifies one value (8 or 16). This
  is wrong, as we have to specify one value for each channel (i.e for a
  24bit RGB pic we must specify 8,8,8, see TIFF6.0 spec, [...]
* don't install sanei_* headers
* Add sane-pie (Pacific Image Electronics series of ScanAce SCSI scanners, and
  the Devcom 9636/9630 BlackWidow) http://www.munton.demon.co.uk/sane
* configure --without-x doesn't work (doesn't matter when frontends
  are removed from package)
* Create new package for frontends. 
* 0 is white for sane in lineart and halftone, however, 0 is black for
  the other modes. Possible reason: pnm data format. The SANE standard
  doesn't talk about this (added point to SANE standard)
* add ADF and TA entries to .desc files (not done, probably webpage gets 
  too wide)
* check DBG problems for non gcc compilers:
  - no backend name output
  - only global debug level
* dll: make it robust against it being listed in the configuration
  file (currently bad things will happen if dll attempts to load itself)
* scanimage: add information about backend:devicename in the man
  page and scanimage --help.
* scanimage: check if devicename starts with a / and print a warning
  message
* scanimage: if no devices are detected print a message
* use sanei_config_read() instead of fgets()
* use #include "sane/..." instead of #include <sane/...>
* Update LEVEL2 file. Ideas:
* xscanimage: Fix "Gtk-CRITICAL **: file gtkmain.c: line 534 ..." bug
  when no SANE devices found
+ PREVIEW: maybe there should be an option to limit the preview
  scan to the selected area? YES => this will also make it easier
  to avoid the scan area selection to get confused when the user
  resizes the preview area in a way that changes the aspect ratio;
  in essence we want to allow for the preview-image to be a subregion
  of the preview-window (done in xsane)
+ xcam: allow disabling of advanced options and tooltips
+ man page for xcam
+ scanimage: support depths > 8 bits/channel
+ upgrade to GTK 1.2 (but stay backwards compatible to 1.0 if possible)
+ saned: check_host() consider using strncasecmp()
+ GTK: changing the length unit causes dirty pixels in the unit-labels
  of the "Geometry Group"
+ preview: image data doesn't get preserved properly when changing
  scan area size (reproducable by changing Mustek Scan source to TA)
+ preview: when popping up the preview window, the current scan area is
  not visible
+ qcam: test b&w support (need volunteer!)
+ hp: convert to use pixel-unit commands only; HP 5P doesn't support
  decipoint commands
+ mustek: the MFS-06000SP with firmware v3.12 does not seem to need any
  line-distance correction at all!?!
+ scanimage/xscanimage: when a scanner is busy while probing for devices,
  the device is dropped silently from the list of available devices; this
  is confusing particularly when remote controlling a device; it should
  be possible to distinguish between a device that's busy and one that's
  absent
+ xscanimage: program crashes when preview window is popped down while
  preview is being acquired!
+ Mustek backend crashes when invoked via xscanimage through the network
  backend.  It does not crash if there are no saved device settings.
+ gtkglue: support vectors (requires a "graph" widget; see gimp/app/curves.c)
+ xscan: make scrollbar wider
+ xscan: at startup or after rebuilding the dialog, the notebook widget
  displays both the standard and advanced options simultaneously
+ xscan: pnm backend causes crash when hitting "Defaults" button
+ scan: add three pass scanning support
+ xscan: double-clicking selection should imply OK
+ xscan: enabling the gtk_rc_parse() code causes segfault when scanning in
  three-pass mode (pnm backend) => bug in gtkstyle.c (patch submitted)
+ qcam: implement "christmas light" filter
+ xscan/qcam: after scanning a preview, the original scan area seems to
  get lost somehow => bug in restoring the scan area settings
+ qcam: image always comes out black until the blacklevel has been modified;
  why is this? => send dummy black-level after qc_reset()
+ xscan: provide access option doc strings
+ xscan: in GIMP mode, RED/GREEN/BLUE frames are not handled properly yet.
+ preview: bit-depth is currently ignored (makes lineart etc fail)
+ sanei: allow saving/restoring options on a per-device and per-user basis
+ xcam: replace ugly top-left/bottom-right corner coordinates with something
	more useful => they're advanced options now
+ preview: modifying the scan area coordinates should update the selection
+ preview: should we allow saving the current preview image? => yes
+ xscan: make it possible to build with gtk alone (i.e., without gimp libs)
+ xscan: use same scan-logic as preview (select-based, if possible);
  should be able to share most of the code
+ replace params.first_frame with params.last_frame---i don't know how to
  use the former, the latter would be useful for xcam to implement support
  for individual R/G/B frames
+ saned: add multi-host capabilities (selection-phase ... how ??).
+ saned: add authorization
+ ensure frontend never link sanei_*() functions dynamically
+ always define unique names in backends and define weak-aliases for
  generic names where elf_alias is available---this should make it
  easy to add "pre-load" support to dll.c (either for faster loading or
  for systems that don't have dl*())
+ make install: don't overwrite existing configuration files
+ xcam: let user be able to type in a device string
+ mustek: make sane_close() hang around until sane_cancel() has finished
+ net: implement it: socket-based backend [Andy is working on this]
+ need a camera front end (to allow recording video & audio)
+ qcam: allow changing all parameters "on-the-fly" (while scanning)
+ qcam backend: implement sane_set_io_mode() and sane_get_select_fd()
+ make "scan" print current value of each option
+ make "scan" apply any options before printing help message
+ initialize backend debug level through environment variable (e.g.,
  SANE_DEBUG_LEVEL)
+ allow abbreviating string values and make them case-insensitive (as long
  as they're unique) => see sanei_constrain_value()
+ add support to "scan" for setting options to "automatic"
+ update documentation and convert to latex & html
+ add --width/--height support
+ update Mustek backend with new notion of inactive options
+ in verbose multibit mode print min/max graylevel value 
+ Mustek segfaults after ctrl-C => need -Bsymbolic to ensure mustek backend's
  references to sane_foo() get resolved within backend
+ test parsing of boolean options
+ --mode Gray causes segfault
+ change scan to use getopt_long
+ make Mustek backend work without having to first call get_devices()
+ implement meta backend
+ bring pnm backend up to speed
