--------------62369BAE0B6199E98501393C
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Hi,
I just built Sane 0.69 on Irix 6.3 (SGI O2.) I had to make some
changes, but I got it to build. However, it won't recognise my
scanner.
The first problem I ran into when trying to build it was, I wasn't
able to use gcc. I had to use SGI's cc, because something is going
wrong when sane tries to create shared libraries. It's apparently
not doing the right thing for Irix, because ld complains:
> /tools/ns/soft/gcc-2.7.2.1/run/default/mips_sgi_irix6.2/lib/gcc-lib/mips
> -sgi-irix5.3/2.7.2.1/ld -n32 -shared -o .libs/libsane.so.0.0.69 -soname
> libsane.so -set_version 0.0.69:0.0 dll.o dll-s.o sane_strstatus.o
> ../sanei/sanei_init_debug.o ../sanei/sanei_config.o ../lib/usleep.o
> ../lib/strndup.o -lc
> ld: FATAL 112: cannot link old 32-bit object with -n32 link: dll.o.
Shared libs are properly built using SGI's cc; but I had to make a
bunch of source changes to get that to work.
First, lalloca.h was trouble. You're including lalloca.h before
config.h because of AIX -- but on SGI, <alloca.h> must be included
before alloca() can be used, and <alloca.h> only gets included if
config.h has defined HAVE_ALLOCA_H... Which means that on SGI,
config.h must come before lalloca.h. So a whole bunch of files
needed to have the ifdefs tweaked.
I had to add a missing argument in sanei_scsi.c. I guessed "0".
I had to add #defines of __P and __const to microtek.c (presumably
this is a gcc-ism.)
So, after all that, I have runnable executables. But they don't
find my scanner. Running "find-scanner" as root prints nothing.
I believe the device of the scanner is /dev/scsi/sc1d5l0. Both
"hinv" and "scsicontrol" seem to agree on this:
% hinv
...
Integral Ethernet: ec0, version 1
Disk drive: unit 7 on SCSI controller 1
Tape drive: unit 6 on SCSI controller 1: DAT
Processor: unit 5 on SCSI controller 1
Disk drive: unit 3 on SCSI controller 1
CDROM: unit 4 on SCSI controller 0
Disk drive: unit 1 on SCSI controller 0
% scsicontrol -i /dev/scsi/sc1d5l0
/dev/scsi/sc1d5l0: Processor HP C2520A 3503
ANSI vers 2, ISO ver: 0, ECMA ver: 0; inquiry format is SCSI 1
Device is ready
When I run "xscanimage /dev/scsi/sc1d5l0", I get "Failed to open device
`/dev/scsi/sc1d5l0': Invalid argument."
It's an HP ScanJet 4C. I have used it before, but not on this system.
(In the past, I've used it on an SGI Indy with SGI's Impressario
software. So it's doubtful there's some hardware problem.)
Any ideas?
Attached are my diffs, and (a subset of) the warnings I got.
(I stripped out a zillion warnings from ld about duplicate symbols
which seemed harmless.)
-- Jamie Zawinski http://people.netscape.com/jwz/ about:jwz--------------62369BAE0B6199E98501393C Content-Type: text/plain; charset=us-ascii; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs"
Only in sane-0.69: Makefile Only in sane-0.69/backend: .libs Only in sane-0.69/backend: Makefile Only in sane-0.69/backend: canon-s.c Only in sane-0.69/backend: canon-s.lo Only in sane-0.69/backend: canon.lo Only in sane-0.69/backend: dll-preload.c Only in sane-0.69/backend: dll-s.c Only in sane-0.69/backend: dll-s.lo diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/backend/dll.c sane-0.69/backend/dll.c *** sane-0.69-orig/backend/dll.c Mon Dec 15 20:15:03 1997 --- sane-0.69/backend/dll.c Mon Jan 26 01:43:20 1998 *************** *** 42,50 **** allows managing an arbitrary number of SANE backends by using dynamic linking to load backends on demand. */ ! #include <lalloca.h> /* MUST come first for AIX! */ #include <sane/config.h> #include <errno.h> #include <limits.h> --- 42,56 ---- allows managing an arbitrary number of SANE backends by using dynamic linking to load backends on demand. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif #include <sane/config.h> + + #ifndef _AIX + # include <lalloca.h> /* MUST come after config.h for Irix! */ + #endif #include <errno.h> #include <limits.h> Only in sane-0.69/backend: dll.lo Only in sane-0.69/backend: epson-s.c Only in sane-0.69/backend: epson-s.lo diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/backend/epson.c sane-0.69/backend/epson.c *** sane-0.69-orig/backend/epson.c Mon Jan 19 20:36:54 1998 --- sane-0.69/backend/epson.c Mon Jan 26 01:43:41 1998 *************** *** 39,48 **** whether to permit this exception to apply to your modifications. If you do not wish that, delete this exception notice. */ ! #include <lalloca.h> /* MUST come first for AIX! */ #ifdef HAVE_CONFIG_H # include <sane/config.h> #endif #include <stdio.h> --- 39,54 ---- whether to permit this exception to apply to your modifications. If you do not wish that, delete this exception notice. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif #ifdef HAVE_CONFIG_H # include <sane/config.h> + #endif + + #ifndef _AIX + # include <lalloca.h> /* MUST come after config.h for Irix! */ #endif #include <stdio.h> Only in sane-0.69/backend: epson.lo Only in sane-0.69/backend: hp-s.c Only in sane-0.69/backend: hp-s.lo Only in sane-0.69/backend: hp.lo Only in sane-0.69/backend: libsane-canon.la Only in sane-0.69/backend: libsane-dll.la Only in sane-0.69/backend: libsane-epson.la Only in sane-0.69/backend: libsane-hp.la Only in sane-0.69/backend: libsane-microtek.la Only in sane-0.69/backend: libsane-mustek.la Only in sane-0.69/backend: libsane-net.la Only in sane-0.69/backend: libsane-pnm.la Only in sane-0.69/backend: libsane-s9036.la Only in sane-0.69/backend: libsane-tamarack.la Only in sane-0.69/backend: libsane-umax.la Only in sane-0.69/backend: libsane.la Only in sane-0.69/backend: microtek-s.c Only in sane-0.69/backend: microtek-s.lo diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/backend/microtek.c sane-0.69/backend/microtek.c *** sane-0.69-orig/backend/microtek.c Mon Jan 19 20:37:49 1998 --- sane-0.69/backend/microtek.c Mon Jan 26 00:25:26 1998 *************** *** 64,69 **** --- 64,75 ---- #include <math.h> + /* jwz for non-gcc */ + #undef __P + #define __P(x)x + #undef __const + #define __const const + extern char *strdup __P ((__const char *__s)); #include <sane/sane.h> Only in sane-0.69/backend: microtek.lo Only in sane-0.69/backend: mustek-s.c Only in sane-0.69/backend: mustek-s.lo Only in sane-0.69/backend: mustek.lo Only in sane-0.69/backend: net-s.c Only in sane-0.69/backend: net-s.lo diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/backend/net.c sane-0.69/backend/net.c *** sane-0.69-orig/backend/net.c Mon Dec 15 20:15:03 1997 --- sane-0.69/backend/net.c Mon Jan 26 01:43:49 1998 *************** *** 40,48 **** This file implements a SANE network-based meta backend. */ ! #include <lalloca.h> /* MUST come first for AIX! */ ! #include <sane/config.h> #include <errno.h> #include <fcntl.h> --- 40,56 ---- This file implements a SANE network-based meta backend. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif ! #ifdef HAVE_CONFIG_H ! # include <sane/config.h> ! #endif ! ! #ifndef _AIX ! # include <lalloca.h> /* MUST come after config.h for Irix! */ ! #endif #include <errno.h> #include <fcntl.h> Only in sane-0.69/backend: net.lo Only in sane-0.69/backend: pnm-s.c Only in sane-0.69/backend: pnm-s.lo Only in sane-0.69/backend: pnm.lo diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/backend/qcam.c sane-0.69/backend/qcam.c *** sane-0.69-orig/backend/qcam.c Wed Jan 14 10:53:15 1998 --- sane-0.69/backend/qcam.c Mon Jan 26 01:43:55 1998 *************** *** 66,74 **** CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ! #include <lalloca.h> /* MUST come first for AIX! */ ! #include <sane/config.h> #include <assert.h> #include <ctype.h> --- 66,82 ---- CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif ! #ifdef HAVE_CONFIG_H ! # include <sane/config.h> ! #endif ! ! #ifndef _AIX ! # include <lalloca.h> /* MUST come after config.h for Irix! */ ! #endif #include <assert.h> #include <ctype.h> Only in sane-0.69/backend: s9036-s.c Only in sane-0.69/backend: s9036-s.lo diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/backend/s9036.c sane-0.69/backend/s9036.c *** sane-0.69-orig/backend/s9036.c Mon Jan 19 20:38:28 1998 --- sane-0.69/backend/s9036.c Mon Jan 26 00:28:36 1998 *************** *** 182,188 **** static void wait_ready (int fd) { ! const READ_SIZE = 4; const Byte scsi_read[] = { --- 182,192 ---- static void wait_ready (int fd) { ! /* jwz */ ! /* const READ_SIZE = 4;*/ ! #undef READ_SIZE ! #define READ_SIZE 4 ! const Byte scsi_read[] = { *************** *** 234,240 **** static SANE_Status get_read_sizes (int fd, int *lines_available, int *bpl, int *total_lines) { ! const READ_SIZE = 24; const Byte scsi_read[] = { --- 238,247 ---- static SANE_Status get_read_sizes (int fd, int *lines_available, int *bpl, int *total_lines) { ! /* jwz */ ! /* const READ_SIZE = 24;*/ ! #undef READ_SIZE ! #define READ_SIZE 24 const Byte scsi_read[] = { *************** *** 524,530 **** static SANE_Status attach (const char *devname, S9036_Device ** devp) { ! const Byte SCSI_INQ_LEN = 55; const Byte scsi_inquiry[] = { 0x12, 0x00, 0x00, 0x00, SCSI_INQ_LEN, 0x00 --- 531,541 ---- static SANE_Status attach (const char *devname, S9036_Device ** devp) { ! /* jwz */ ! /* const Byte SCSI_INQ_LEN = 55; */ ! #undef SCSI_INQ_LEN ! #define SCSI_INQ_LEN 55 ! const Byte scsi_inquiry[] = { 0x12, 0x00, 0x00, 0x00, SCSI_INQ_LEN, 0x00 Only in sane-0.69/backend: s9036.lo Only in sane-0.69/backend: sane_strstatus.lo Only in sane-0.69/backend: so_locations Only in sane-0.69/backend: tamarack-s.c Only in sane-0.69/backend: tamarack-s.lo Only in sane-0.69/backend: tamarack.lo Only in sane-0.69/backend: umax-s.c Only in sane-0.69/backend: umax-s.lo Only in sane-0.69/backend: umax.lo Only in sane-0.69: config.cache Only in sane-0.69: config.log Only in sane-0.69: config.status Only in sane-0.69/doc: Makefile Only in sane-0.69/doc: sane-dll.5 Only in sane-0.69/doc: sane-epson.5 Only in sane-0.69/doc: sane-hp.5 Only in sane-0.69/doc: sane-microtek.5 Only in sane-0.69/doc: sane-mustek.5 Only in sane-0.69/doc: sane-net.5 Only in sane-0.69/doc: sane-pint.5 Only in sane-0.69/doc: sane-pnm.5 Only in sane-0.69/doc: sane-qcam.5 Only in sane-0.69/doc: sane-scsi.5 Only in sane-0.69/doc: sane-umax.5 Only in sane-0.69/doc: saned.1 Only in sane-0.69/doc: scanimage.1 Only in sane-0.69/doc: xscanimage.1 Only in sane-0.69/frontend: .libs Only in sane-0.69/frontend: Makefile diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/frontend/gtkglue.c sane-0.69/frontend/gtkglue.c *** sane-0.69-orig/frontend/gtkglue.c Sun Jan 18 09:59:09 1998 --- sane-0.69/frontend/gtkglue.c Mon Jan 26 01:42:04 1998 *************** *** 16,24 **** along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ! #include <lalloca.h> /* MUST come first for AIX! */ #include <sane/config.h> #include <assert.h> #include <errno.h> --- 16,30 ---- along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif #include <sane/config.h> + + #ifndef _AIX + # include <lalloca.h> /* MUST come after config.h for Irix! */ + #endif #include <assert.h> #include <errno.h> Only in sane-0.69/frontend: saned diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/frontend/saned.c sane-0.69/frontend/saned.c *** sane-0.69-orig/frontend/saned.c Mon Dec 15 20:15:03 1997 --- sane-0.69/frontend/saned.c Mon Jan 26 01:44:29 1998 *************** *** 20,28 **** backend. */ ! #include <lalloca.h> /* MUST come first for AIX! */ - #include <sane/config.h> #include <sane/sanei_config.h> #include <assert.h> --- 20,37 ---- backend. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif ! ! #ifdef HAVE_CONFIG_H ! # include <sane/config.h> ! #endif ! ! #ifndef _AIX ! # include <lalloca.h> /* MUST come after config.h for Irix! */ ! #endif #include <sane/sanei_config.h> #include <assert.h> Only in sane-0.69/frontend: scanimage diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/frontend/scanimage.c sane-0.69/frontend/scanimage.c *** sane-0.69-orig/frontend/scanimage.c Mon Dec 15 20:15:03 1997 --- sane-0.69/frontend/scanimage.c Mon Jan 26 00:35:49 1998 *************** *** 18,26 **** along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ! #include <lalloca.h> /* MUST come first for AIX! */ #include <sane/config.h> #include <assert.h> #include <getopt.h> --- 18,32 ---- along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif #include <sane/config.h> + + #ifndef _AIX + # include <lalloca.h> /* MUST come after config.h for Irix! */ + #endif #include <assert.h> #include <getopt.h> Only in sane-0.69/frontend: xcam Only in sane-0.69/frontend: xscanimage diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/frontend/xscanimage.c sane-0.69/frontend/xscanimage.c *** sane-0.69-orig/frontend/xscanimage.c Sun Jan 18 10:01:18 1998 --- sane-0.69/frontend/xscanimage.c Mon Jan 26 01:44:36 1998 *************** *** 19,27 **** along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ! #include <lalloca.h> /* MUST come first for AIX! */ ! #include <sane/config.h> #include <errno.h> #include <fcntl.h> --- 19,35 ---- along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif ! #ifdef HAVE_CONFIG_H ! # include <sane/config.h> ! #endif ! ! #ifndef _AIX ! # include <lalloca.h> /* MUST come after config.h for Irix! */ ! #endif #include <errno.h> #include <fcntl.h> Only in sane-0.69/include/sane: config.h Only in sane-0.69/japi: Makefile Only in sane-0.69/lib: Makefile Only in sane-0.69/lib: alloca.lo Only in sane-0.69/lib: getopt.lo Only in sane-0.69/lib: getopt1.lo Only in sane-0.69/lib: sigprocmask.lo Only in sane-0.69/lib: snprintf.lo Only in sane-0.69/lib: strdup.lo Only in sane-0.69/lib: strndup.lo Only in sane-0.69/lib: strsep.lo Only in sane-0.69/lib: usleep.lo Only in sane-0.69: libtool Only in sane-0.69/sanei: Makefile Only in sane-0.69/sanei: sanei_ab306.lo Only in sane-0.69/sanei: sanei_codec_ascii.lo Only in sane-0.69/sanei: sanei_codec_bin.lo Only in sane-0.69/sanei: sanei_config.lo Only in sane-0.69/sanei: sanei_constrain_value.lo Only in sane-0.69/sanei: sanei_init_debug.lo diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/sanei/sanei_load_values.c sane-0.69/sanei/sanei_load_values.c *** sane-0.69-orig/sanei/sanei_load_values.c Mon Dec 15 20:15:03 1997 --- sane-0.69/sanei/sanei_load_values.c Mon Jan 26 01:46:50 1998 *************** *** 55,63 **** sane backend would do this and since this is SANE, we just proved that this algorithm works perfectly. */ ! #include <lalloca.h> /* MUST come first for AIX! */ ! #include <sane/config.h> #include <stdlib.h> #include <string.h> --- 55,71 ---- sane backend would do this and since this is SANE, we just proved that this algorithm works perfectly. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif ! #ifdef HAVE_CONFIG_H ! # include <sane/config.h> ! #endif ! ! #ifndef _AIX ! # include <lalloca.h> /* MUST come after config.h for Irix! */ ! #endif #include <stdlib.h> #include <string.h> Only in sane-0.69/sanei: sanei_load_values.lo Only in sane-0.69/sanei: sanei_net.lo Only in sane-0.69/sanei: sanei_save_values.lo diff -cr --exclude .#* --exclude *~ --exclude *.[oai] --exclude *.rej --exclude *.orig --exclude *.OBJ --exclude TAGS --exclude CVS sane-0.69-orig/sanei/sanei_scsi.c sane-0.69/sanei/sanei_scsi.c *** sane-0.69-orig/sanei/sanei_scsi.c Mon Jan 19 22:09:10 1998 --- sane-0.69/sanei/sanei_scsi.c Mon Jan 26 01:44:48 1998 *************** *** 40,48 **** This file provides a generic SCSI interface. */ ! #include <lalloca.h> /* MUST come first for AIX! */ ! #include <sane/config.h> #include <assert.h> #include <errno.h> --- 40,56 ---- This file provides a generic SCSI interface. */ ! #ifdef _AIX ! # include <lalloca.h> /* MUST come first for AIX! */ ! #endif ! ! #ifdef HAVE_CONFIG_H ! # include <sane/config.h> ! #endif ! #ifndef _AIX ! # include <lalloca.h> /* MUST come after config.h for Irix! */ ! #endif #include <assert.h> #include <errno.h> *************** *** 1168,1174 **** if (scsi_req.ds_status == STA_BUSY) return SANE_STATUS_DEVICE_BUSY; else if ((sensebuf[0] & 0x80) && fd_info[fd].sense_handler) ! return (*fd_info[fd].sense_handler)(fd, sensebuf); else return SANE_STATUS_IO_ERROR; } --- 1176,1182 ---- if (scsi_req.ds_status == STA_BUSY) return SANE_STATUS_DEVICE_BUSY; else if ((sensebuf[0] & 0x80) && fd_info[fd].sense_handler) ! return (*fd_info[fd].sense_handler)(fd, sensebuf, 0); else return SANE_STATUS_IO_ERROR; } Only in sane-0.69/sanei: sanei_scsi.lo Only in sane-0.69/sanei: sanei_wire.lo Only in sane-0.69/tools: Makefile Only in sane-0.69/tools: find-scanner Exit 1
--------------62369BAE0B6199E98501393C Content-Type: text/plain; charset=us-ascii; name="warnings" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="warnings"
cfe: Warning 712: sanei_config.c, line 107: illegal combination of pointer and integer for (next = copy; (dir = strsep (&next, ":" )) != 0; ) -------------------------^
cfe: Warning 712: mustek.c, line 515: illegal combination of pointer and integer dev->sane.model = strndup (model_name, 11); -------------------^
cfe: Warning 712: net.c, line 343: illegal combination of pointer and integer while ((host = strsep (&next, ":"))) -------------------^
cfe: Warning 709: ./umax-scsi.c, line 192: Incompatible pointer type assignment us->buffer, &size); -----------------------------^ cfe: Warning 709: ./umax-scsi.c, line 490: Incompatible pointer type assignment us->buffer, &length) != 0) { return -1; } --------------------------------------^ cfe: Warning 709: ./umax-scsi.c, line 963: Incompatible pointer type assignment sanei_scsi_cmd(us->sfd, inquiry.cmd, inquiry.size, us->buffer, &size); -----------------------------------------------------------------^ cfe: Warning 709: ./umax-scsi.c, line 969: Incompatible pointer type assignment sanei_scsi_cmd(us->sfd, inquiry.cmd, inquiry.size, us->buffer, &size); -----------------------------------------------------------------^
ld: WARNING 15: multiply defined:(sanei_debug_umax) in umax.o and umax-s.o (2nd definition ignored).
cfe: Warning 712: dll.c, line 264: illegal combination of pointer and integer dir = strsep (&src, ":"); ----------^ ld: WARNING 15: multiply defined:(sanei_debug_dll) in dll.o and dll-s.o (2nd definition ignored).
ld: WARNING 15: multiply defined:(sanei_debug_BACKEND_NAME) in find-scanner.o and ../sanei/libsanei.a(sanei_init_debug.o) (2nd definition ignored).
--------------62369BAE0B6199E98501393C--
-- Source code, list archive, and docs: http://www.mostang.com/sane/ To unsubscribe: echo unsubscribe sane-devel | mail majordomo@mostang.com