From 17e9115fddd78f089f993a38854a4dde1b8d7fae Mon Sep 17 00:00:00 2001 From: Mattias Ellert Date: Sun, 21 Jan 2007 13:29:21 +0000 Subject: [PATCH] Fixed the "three-valued boolean" bug --- ChangeLog | 5 +++++ backend/canon-sane.c | 43 +++++++------------------------------------ backend/canon.c | 11 +++++------ 3 files changed, 17 insertions(+), 42 deletions(-) diff --git a/ChangeLog b/ChangeLog index 14c6994bd..58633474f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-01-20 Mattias Ellert + + * backend/canon.c, backend/canon-sane.c: + Fixed the "three-valued boolean" bug + 2007-01-20 Alessandro Zummo * sanei/sanei_tcp.c: added a missing include diff --git a/backend/canon-sane.c b/backend/canon-sane.c index d0d7eefc5..145839449 100644 --- a/backend/canon-sane.c +++ b/backend/canon-sane.c @@ -371,8 +371,6 @@ sane_control_option (SANE_Handle handle, SANE_Int option, *(SANE_Word *) val = s->val[option].w; DBG (21, "value for option %s: %d\n", option_name[option], s->val[option].w); - if (info) - *info |= SANE_INFO_RELOAD_PARAMS; return (SANE_STATUS_GOOD); case OPT_GAMMA_VECTOR: @@ -435,33 +433,10 @@ sane_control_option (SANE_Handle handle, SANE_Int option, case OPT_TPU_DCM: case OPT_TPU_FILMTYPE: case OPT_MODE: - strcpy (val, s->val[option].s); - if (info) - *info |= SANE_INFO_RELOAD_PARAMS; - DBG (21, "value for option %s: %s\n", option_name[option], - s->val[option].s); - return (SANE_STATUS_GOOD); - case OPT_NEGATIVE: - strcpy (val, s->val[option].s); - if (info) - *info |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS; - DBG (21, "value for option %s: %s\n", option_name[option], - s->val[option].s); - return (SANE_STATUS_GOOD); - case OPT_NEGATIVE_TYPE: - strcpy (val, s->val[option].s); - if (info) - *info |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS; - DBG (21, "value for option %s: %s\n", option_name[option], - s->val[option].s); - return (SANE_STATUS_GOOD); - case OPT_SCANNING_SPEED: strcpy (val, s->val[option].s); - if (info) - *info |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS; DBG (21, "value for option %s: %s\n", option_name[option], s->val[option].s); return (SANE_STATUS_GOOD); @@ -658,21 +633,19 @@ sane_control_option (SANE_Handle handle, SANE_Int option, case OPT_FLATBED_ONLY: s->val[option].w = *(SANE_Word *) val; - if (s->hw->adf.Status != ADF_STAT_NONE && s->val[option].w ) + if (s->hw->adf.Status != ADF_STAT_NONE && s->val[option].w) { /* switch on */ s->hw->adf.Priority |= 0x03; /* flatbed mode */ s->hw->adf.Feeder &= 0x00; /* autofeed off (default) */ s->hw->adf.Status = ADF_STAT_DISABLED; - s->val[option].w = SANE_TRUE; } /* if it isn't connected, don't bother fixing */ return SANE_STATUS_GOOD; case OPT_TPU_ON: - if (s->val[OPT_TPU_ON].w == TPU_STAT_INACTIVE) /* switch on */ + s->val[option].w = *(SANE_Word *) val; + if (s->val[option].w) /* switch on */ { - s->val[OPT_TPU_ON].w = TPU_STAT_ACTIVE; - s->opt[OPT_TPU_ON].title = SANE_I18N("Turn off the transparency " - "unit"); + s->hw->tpu.Status = TPU_STAT_ACTIVE; s->opt[OPT_TPU_TRANSPARENCY].cap &= (s->hw->tpu.ControlMode == 3) ? ~SANE_CAP_INACTIVE : ~0; s->opt[OPT_TPU_FILMTYPE].cap &= @@ -680,9 +653,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, } else /* switch off */ { - s->val[OPT_TPU_ON].w = TPU_STAT_INACTIVE; - s->opt[OPT_TPU_ON].title = SANE_I18N("Turn on the transparency " - "unit"); + s->hw->tpu.Status = TPU_STAT_INACTIVE; s->opt[OPT_TPU_TRANSPARENCY].cap |= SANE_CAP_INACTIVE; s->opt[OPT_TPU_FILMTYPE].cap |= SANE_CAP_INACTIVE; } @@ -1186,7 +1157,7 @@ sane_start (SANE_Handle handle) s->scanning = SANE_FALSE; - if ((s->hw->adf.Status == SANE_TRUE) + if ((s->hw->adf.Status != ADF_STAT_NONE) && (s->val[OPT_FLATBED_ONLY].w != SANE_TRUE) && (s->hw->adf.Problem != 0)) { @@ -1208,7 +1179,7 @@ sane_start (SANE_Handle handle) } return status; } - else if ((s->hw->adf.Status == SANE_TRUE) + else if ((s->hw->adf.Status != ADF_STAT_NONE) && (s->val[OPT_FLATBED_ONLY].w == SANE_TRUE)) { set_adf_mode (s->fd, s->hw->adf.Priority); diff --git a/backend/canon.c b/backend/canon.c index bd419e0d7..5059c245f 100644 --- a/backend/canon.c +++ b/backend/canon.c @@ -244,7 +244,7 @@ get_tpu_stat (int fd, CANON_Device * dev) DBG (3, "scan mode control byte[%d] = %d\n", (int) i, tbuf[i]); dev->tpu.Status = (tbuf[2 + 4 + 5] >> 7) ? TPU_STAT_INACTIVE : TPU_STAT_NONE; - if (dev->tpu.Status == SANE_TRUE) /* TPU available */ + if (dev->tpu.Status != TPU_STAT_NONE) /* TPU available */ { dev->tpu.Status = (tbuf[2 + 4 + 5] && 0x04) ? TPU_STAT_INACTIVE : TPU_STAT_ACTIVE; @@ -291,7 +291,7 @@ get_adf_stat (int fd, CANON_Device * dev) dev->adf.Status = (abuf[ADF_Status] & ADF_NOT_PRESENT) ? ADF_STAT_NONE : ADF_STAT_INACTIVE; - if (dev->adf.Status == SANE_TRUE) /* ADF available / INACTIVE */ + if (dev->adf.Status != ADF_STAT_NONE) /* ADF available / INACTIVE */ { dev->adf.Status = (abuf[ADF_Status] & ADF_PROBLEM) ? ADF_STAT_INACTIVE : ADF_STAT_ACTIVE; @@ -1706,14 +1706,13 @@ init_options (CANON_Scanner * s) /* Transparency Unit (FAU, Film Adapter Unit) */ s->opt[OPT_TPU_ON].name = "transparency-unit-on-off"; - s->opt[OPT_TPU_ON].title = (s->hw->tpu.Status == TPU_STAT_ACTIVE) - ? SANE_I18N("Turn off the transparency unit") - : SANE_I18N("Turn on the transparency unit"); + s->opt[OPT_TPU_ON].title = SANE_I18N("Transparency unit"); s->opt[OPT_TPU_ON].desc = SANE_I18N("Switch on/off the transparency unit " "(FAU, film adapter unit)"); s->opt[OPT_TPU_ON].type = SANE_TYPE_BOOL; s->opt[OPT_TPU_ON].unit = SANE_UNIT_NONE; - s->val[OPT_TPU_ON].w = s->hw->tpu.Status; + s->val[OPT_TPU_ON].w = + (s->hw->tpu.Status == TPU_STAT_ACTIVE) ? SANE_TRUE : SANE_FALSE; s->opt[OPT_TPU_ON].cap |= (s->hw->tpu.Status != TPU_STAT_NONE) ? 0 : SANE_CAP_INACTIVE;