And on further inspection, this machine did not get 'complete' support until 1.0.21, so an upgrade is definitely in order.
allan On Mon, Jun 14, 2010 at 12:44 PM, m. allan noah <kitno455 at gmail.com> wrote: > Sorry for the trouble- This unit was very well tested during the > development of the driver, so it should work. > > There have been quite a number of changes since sane-backends 1.0.20 > came out, so my first suggestion would be to upgrade to 1.0.21. See if > you can find a package for that. If not, it is easy to compile from > source. Let us know if you want pointers. > > allan > > On Mon, Jun 14, 2010 at 12:20 PM, J F <jqford at hotmail.com> wrote: >> Hello- >> >> SANE newbie question:? Recently installed Ubuntu 10.04 and want to use my >> Canon DR-2580C.? I've tried the Simple Scan front end - but that interface >> just says "failed to scan" - although it recognizes that I have a DR-2580C. >> >> I tried running SANE from the terminal, and get the following (I've omitted >> a couple lines, indicated by ellipsis). >> >> Any suggestions are greatly appreciated. >> >> user at xxxx:~$ sane-find-scanner >> ... >> found USB scanner (vendor=0x04a9, product=0x1608) at libusb:001:010 >> >> user at xxxx:~$ scanimage -L >> device `canon_dr:libusb:001:010' is a CANON DR-2580C scanner >> >> user at xxxx:~$ scanimage -T >> scanimage: sane_start: Invalid argument >> user at xxxx:~$ SANE_DEBUG_CANON_DR=255 scanimage -T 2>error.log >> >> Here are the results of error.log from running 'scanimage -T': >> >> [sanei_debug] Setting debug level of canon_dr to 255. >> [canon_dr] sane_init: start >> [canon_dr] sane_init: canon_dr backend 1.0.26, from sane-backends 1.0.20 >> [canon_dr] sane_init: finish >> [canon_dr] sane_get_devices: start >> [canon_dr] sane_get_devices: reading config file canon_dr.conf >> [canon_dr] sane_get_devices: looking for 'scsi CANON CR' >> [canon_dr] sane_get_devices: looking for 'scsi CANON DR' >> [canon_dr] sane_get_devices: setting "vendor-name" to CANON >> [canon_dr] sane_get_devices: setting "model-name" to DR-2080C >> [canon_dr] sane_get_devices: setting "version-name" to XXXX >> [canon_dr] sane_get_devices: setting "padded-read" to 1 >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x1601' >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x1602' >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x1603' >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x1604' >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x1606' >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x1607' >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x1608' >> [canon_dr] attach_one: start >> [canon_dr] attach_one: looking for 'libusb:001:010' >> [canon_dr] connect_fd: start >> [canon_dr] connect_fd: opening USB device >> [canon_dr] wait_scanner: start >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 500 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 00 00 00 00 >> ................ >> [canon_dr] 010: 00 00 00 00 00 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] stat: reading 4 bytes, timeout 500 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 500 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 00 00 00 00 >> ................ >> [canon_dr] 010: 00 00 00 00 00 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] stat: reading 4 bytes, timeout 500 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] wait_scanner: finish >> [canon_dr] connect_fd: finish >> [canon_dr] init_inquire: start >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 30000 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 12 00 00 00 >> ................ >> [canon_dr] 010: 30 00 00 00 00 00 00 00 >> 0....... >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] in: reading 48 bytes, timeout 30000 >> [canon_dr] in: read 48 bytes, retval 0 >> [canon_dr] in: << >> [canon_dr] 000: 06 00 02 02 3b 00 00 10 43 41 4e 4f 4e 20 20 20 >> ....;...CANON >> [canon_dr] 010: 44 52 2d 32 35 38 30 43 20 20 20 20 20 20 20 20 >> DR-2580C >> [canon_dr] 020: 32 2e 30 38 00 00 00 00 32 30 30 36 31 30 30 33 >> 2.08....20061003 >> [canon_dr] stat: reading 4 bytes, timeout 30000 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] init_inquire: Found CANON scanner DR-2580C version 2.08 at >> libusb:001:010 >> [canon_dr] init_inquire: finish >> [canon_dr] init_vpd: start >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 30000 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 12 01 f0 00 >> ................ >> [canon_dr] 010: 1e 00 00 00 00 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] in: reading 30 bytes, timeout 30000 >> [canon_dr] in: read 30 bytes, retval 0 >> [canon_dr] in: << >> [canon_dr] 000: 06 f0 02 00 2b 02 58 02 58 00 02 58 02 58 00 64 >> ....+.X.X..X.X.d >> [canon_dr] 010: 00 64 29 d4 00 00 13 f0 00 00 20 d0 fe 00?????? .d)....... >> ... >> [canon_dr] stat: reading 4 bytes, timeout 30000 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] init_vpd: length=2b >> [canon_dr] standard options >> [canon_dr]?? basic x res: 600 dpi >> [canon_dr]?? basic y res: 600 dpi >> [canon_dr]?? step x res: 0 dpi >> [canon_dr]?? step y res: 0 dpi >> [canon_dr]?? max x res: 600 dpi >> [canon_dr]?? max y res: 600 dpi >> [canon_dr]?? min x res: 100 dpi >> [canon_dr]?? min y res: 100 dpi >> [canon_dr]?? 60 dpi: 0 >> [canon_dr]?? 75 dpi: 0 >> [canon_dr]?? 100 dpi: 1 >> [canon_dr]?? 120 dpi: 0 >> [canon_dr]?? 150 dpi: 1 >> [canon_dr]?? 160 dpi: 0 >> [canon_dr]?? 180 dpi: 0 >> [canon_dr]?? 200 dpi: 1 >> [canon_dr]?? 240 dpi: 1 >> [canon_dr]?? 300 dpi: 1 >> [canon_dr]?? 320 dpi: 0 >> [canon_dr]?? 400 dpi: 1 >> [canon_dr]?? 480 dpi: 0 >> [canon_dr]?? 600 dpi: 1 >> [canon_dr]?? 800 dpi: 0 >> [canon_dr]?? 1200 dpi: 0 >> [canon_dr]?? max width: 8.51 inches >> [canon_dr]?? max length: 14.00 inches >> [canon_dr]?? AWD: 1 >> [canon_dr]?? CE Emphasis: 1 >> [canon_dr]?? C Emphasis: 1 >> [canon_dr]?? High quality: 1 >> [canon_dr]?? grayscale: 1 >> [canon_dr]?? halftone: 1 >> [canon_dr]?? monochrome: 1 >> [canon_dr]?? overflow: 0 >> [canon_dr] init_vpd: finish >> [canon_dr] init_model: start >> [canon_dr] init_model: finish >> [canon_dr] init_panel: start >> [canon_dr] read_panel: start >> [canon_dr] read_panel: running >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 30000 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 28 00 84 00 >> ............(... >> [canon_dr] 010: 00 00 00 00 08 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] in: reading 8 bytes, timeout 30000 >> [canon_dr] in: read 8 bytes, retval 0 >> [canon_dr] in: << >> [canon_dr] 000: 00 00 01 00 00 00 00 00 >> ........ >> [canon_dr] stat: reading 4 bytes, timeout 30000 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] read_panel: finish >> [canon_dr] send_panel: start >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 30000 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 2a 00 84 00 >> ............*... >> [canon_dr] 010: 00 00 00 00 08 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] out: writing 20 bytes, timeout 30000 >> [canon_dr] out: >> >> [canon_dr] 000: 00 00 00 10 00 02 b0 00 00 00 00 00 00 00 01 00 >> ................ >> [canon_dr] 010: 00 00 00 00 >> .... >> [canon_dr] out: wrote 20 bytes, retVal 0 >> [canon_dr] stat: reading 4 bytes, timeout 30000 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] send_panel: finish 0 >> [canon_dr] init_panel: finish >> [canon_dr] init_user: start >> [canon_dr] init_user: finish >> [canon_dr] init_options: start >> [canon_dr] init_options: finish >> [canon_dr] disconnect_fd: start >> [canon_dr] disconnecting usb device >> [canon_dr] disconnect_fd: finish >> [canon_dr] attach_one: finish >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x1609' >> [canon_dr] sane_get_devices: setting "vendor-name" to CANON >> [canon_dr] sane_get_devices: setting "model-name" to DR-2050C >> [canon_dr] sane_get_devices: setting "version-name" to XXXX >> [canon_dr] sane_get_devices: setting "padded-read" to 1 >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x160a' >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x160b' >> [canon_dr] sane_get_devices: looking for 'usb 0x1083 0x160c' >> [canon_dr] sane_get_devices: looking for 'usb 0x1083 0x160f' >> [canon_dr] sane_get_devices: looking for 'usb 0x04a9 0x2222' >> [canon_dr] sane_get_devices: looking for 'usb 0x1083 0x1614' >> [canon_dr] sane_get_devices: looking for 'usb 0x1083 0x1617' >> [canon_dr] sane_get_devices: looking for 'usb 0x1083 0x1618' >> [canon_dr] sane_get_devices: looking for 'usb 0x1083 0x161a' >> [canon_dr] sane_get_devices: looking for 'usb 0x1083 0x161b' >> [canon_dr] sane_get_devices: looking for 'usb 0x1083 0x161d' >> [canon_dr] sane_get_devices: looking for 'usb 0x1083 0x1620' >> [canon_dr] sane_get_devices: found scanner libusb:001:010 >> [canon_dr] sane_get_devices: found 1 scanner(s) >> [canon_dr] sane_get_devices: finish >> [canon_dr] sane_open: start >> [canon_dr] sane_open: searching currently attached scanners >> [canon_dr] sane_open: device libusb:001:010 requested >> [canon_dr] sane_open: device libusb:001:010 found >> [canon_dr] connect_fd: start >> [canon_dr] connect_fd: opening USB device >> [canon_dr] wait_scanner: start >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 500 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 00 00 00 00 >> ................ >> [canon_dr] 010: 00 00 00 00 00 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] stat: reading 4 bytes, timeout 500 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 500 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 00 00 00 00 >> ................ >> [canon_dr] 010: 00 00 00 00 00 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] stat: reading 4 bytes, timeout 500 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] wait_scanner: finish >> [canon_dr] connect_fd: finish >> [canon_dr] sane_open: finish >> [canon_dr] sane_get_option_descriptor: 0 >> [canon_dr] sane_control_option: get value for '' (0) >> [canon_dr] sane_get_option_descriptor: 0 >> [canon_dr] sane_control_option: get value for '' (0) >> [canon_dr] sane_get_option_descriptor: 1 >> [canon_dr] sane_get_option_descriptor: 2 >> [canon_dr] sane_get_option_descriptor: 3 >> [canon_dr] sane_get_option_descriptor: 4 >> [canon_dr] sane_get_option_descriptor: 5 >> [canon_dr] sane_get_option_descriptor: 6 >> [canon_dr] sane_get_option_descriptor: 7 >> [canon_dr] sane_get_option_descriptor: 8 >> [canon_dr] sane_get_option_descriptor: 9 >> [canon_dr] sane_get_option_descriptor: 10 >> [canon_dr] sane_get_option_descriptor: 11 >> [canon_dr] sane_get_option_descriptor: 12 >> [canon_dr] sane_get_option_descriptor: 13 >> [canon_dr] sane_get_option_descriptor: 14 >> [canon_dr] sane_get_option_descriptor: 15 >> [canon_dr] sane_get_option_descriptor: 16 >> [canon_dr] sane_get_option_descriptor: 17 >> [canon_dr] sane_get_option_descriptor: 18 >> [canon_dr] sane_get_option_descriptor: 19 >> [canon_dr] sane_get_option_descriptor: 20 >> [canon_dr] sane_get_option_descriptor: 21 >> [canon_dr] sane_get_option_descriptor: 22 >> [canon_dr] sane_get_option_descriptor: 23 >> [canon_dr] sane_get_option_descriptor: 24 >> [canon_dr] sane_get_option_descriptor: 25 >> [canon_dr] sane_get_option_descriptor: 26 >> [canon_dr] sane_get_option_descriptor: 27 >> [canon_dr] sane_get_option_descriptor: 28 >> [canon_dr] sane_get_option_descriptor: 29 >> [canon_dr] sane_get_option_descriptor: 30 >> [canon_dr] sane_get_option_descriptor: 31 >> [canon_dr] sane_get_option_descriptor: 32 >> [canon_dr] sane_get_option_descriptor: 33 >> [canon_dr] sane_get_option_descriptor: 34 >> [canon_dr] sane_control_option: get value for 'br-x' (9) >> [canon_dr] sane_control_option: get value for 'tl-x' (7) >> [canon_dr] sane_control_option: get value for 'br-y' (10) >> [canon_dr] sane_control_option: get value for 'tl-y' (8) >> [canon_dr] sane_control_option: get value for 'tl-x' (7) >> [canon_dr] sane_get_option_descriptor: 9 >> [canon_dr] sane_control_option: set value for 'br-x' (9) >> [canon_dr] sane_control_option: get value for 'tl-y' (8) >> [canon_dr] sane_get_option_descriptor: 10 >> [canon_dr] sane_control_option: set value for 'br-y' (10) >> [canon_dr] sane_start: start >> [canon_dr] started=0, side=0, source=1 >> [canon_dr] sane_get_parameters: start >> [canon_dr] sane_get_parameters: not started, updating >> [canon_dr] sane_get_parameters: x: max=10208, page=10200, gpw=10200, res=600 >> [canon_dr] sane_get_parameters: y: max=16800, page=13200, gph=13200, res=600 >> [canon_dr] sane_get_parameters: area: tlx=0, brx=10200, tly=0, bry=13200 >> [canon_dr] sane_get_parameters: params: ppl=5096, Bpl=637, lines=6600 >> [canon_dr] sane_get_parameters: params: format=0, depth=1, last=1 >> [canon_dr] sane_get_parameters: finish >> [canon_dr] object_position: start >> [canon_dr] object_position: eject >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 30000 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 31 00 00 00 >> ............1... >> [canon_dr] 010: 00 00 00 00 00 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] stat: reading 4 bytes, timeout 30000 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] wait_scanner: start >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 500 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 00 00 00 00 >> ................ >> [canon_dr] 010: 00 00 00 00 00 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] stat: reading 4 bytes, timeout 500 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 500 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 00 00 00 00 >> ................ >> [canon_dr] 010: 00 00 00 00 00 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] stat: reading 4 bytes, timeout 500 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] wait_scanner: finish >> [canon_dr] object_position: finish >> [canon_dr] set_window: start >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 30000 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 24 00 00 00 >> ............$... >> [canon_dr] 010: 00 00 00 00 34 00 00 00 >> ....4... >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] out: writing 64 bytes, timeout 30000 >> [canon_dr] out: >> >> [canon_dr] 000: 00 00 00 3c 00 02 b0 00 00 00 00 00 00 00 00 00 >> ...<............ >> [canon_dr] 010: 00 00 00 2c 00 00 02 58 02 58 00 00 00 04 ff ff >> ...,...X.X...... >> [canon_dr] 020: ff ff 00 00 27 d0 00 00 33 90 80 80 80 00 01 00 >> ....'...3....... >> [canon_dr] 030: 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >> ................ >> [canon_dr] out: wrote 64 bytes, retVal 0 >> [canon_dr] stat: reading 4 bytes, timeout 30000 >> [canon_dr] stat: read 0 bytes, retval 5 >> [canon_dr] stat: << >> [canon_dr] >> [canon_dr] stat: clearing error 'End of file reached' >> [canon_dr] do_usb_clear: start >> [canon_dr] rs sub call >> >> [canon_dr] do_usb_cmd: start >> [canon_dr] cmd: writing 24 bytes, timeout 30000 >> [canon_dr] cmd: >> >> [canon_dr] 000: 00 00 00 14 00 01 90 00 00 00 00 00 03 00 00 00 >> ................ >> [canon_dr] 010: 0e 00 00 00 00 00 00 00 >> ........ >> [canon_dr] cmd: wrote 24 bytes, retVal 0 >> [canon_dr] in: reading 14 bytes, timeout 30000 >> [canon_dr] in: read 14 bytes, retval 0 >> [canon_dr] in: << >> [canon_dr] 000: f0 00 05 00 00 00 00 06 00 00 00 00 26 00 >> ............&. >> [canon_dr] stat: reading 4 bytes, timeout 30000 >> [canon_dr] stat: read 4 bytes, retval 0 >> [canon_dr] stat: << >> [canon_dr] 000: 00 00 00 00 >> .... >> [canon_dr] do_usb_cmd: finish >> [canon_dr] rs sub call << >> [canon_dr] sense_handler: start >> [canon_dr] Sense=0x5, ASC=0x26, ASCQ=00, EOM=0, ILI=0, info=00000000 >> [canon_dr] Illegal request: invalid field in parm list >> [canon_dr] do_usb_clear: finish after RS >> [canon_dr] stat: bad RS status, 4 >> [canon_dr] set_window: finish >> [canon_dr] sane_start: ERROR: cannot set window >> scanimage: sane_start: Invalid argument >> [canon_dr] sane_cancel: start >> [canon_dr] sane_cancel: finish >> [canon_dr] sane_close: start >> [canon_dr] disconnect_fd: start >> [canon_dr] disconnecting usb device >> [canon_dr] disconnect_fd: finish >> [canon_dr] sane_close: finish >> [canon_dr] sane_exit: start >> [canon_dr] disconnect_fd: start >> [canon_dr] disconnect_fd: finish >> [canon_dr] sane_exit: finish >> >> >> >> >> -- >> sane-devel mailing list: sane-devel at lists.alioth.debian.org >> http://lists.alioth.debian.org/mailman/listinfo/sane-devel >> Unsubscribe: Send mail with subject "unsubscribe your_password" >> ? ? ? ? ? ? to sane-devel-request at lists.alioth.debian.org >> > > > > -- > "The truth is an offense, but not a sin" > -- "The truth is an offense, but not a sin"
