diff options
Diffstat (limited to 'backend/agfafocus.c')
| -rw-r--r-- | backend/agfafocus.c | 129 | 
1 files changed, 65 insertions, 64 deletions
diff --git a/backend/agfafocus.c b/backend/agfafocus.c index c2c5664..8177f38 100644 --- a/backend/agfafocus.c +++ b/backend/agfafocus.c @@ -1,7 +1,7 @@  /* sane - Scanner Access Now Easy.     This file (C) 1997 Ingo Schneider -             (C) 1998 Karl Anders Øygard +             (C) 1998 Karl Anders Øygard     This file is part of the SANE package. @@ -116,11 +116,11 @@ max_string_size (const SANE_String_Const strings[])  }  /* sets loc_s bytes long value at offset loc in scsi command to value size  */ -static void  +static void  set_size (Byte * loc, int loc_s, size_t size)  {    int i; -   +    for (i = 0; i < loc_s; i++)      {        loc[loc_s - i - 1] = (size >> (i * 8)) & 0xff; @@ -142,10 +142,10 @@ get_size (Byte * loc, int loc_s)    return j;  } -static long  +static long  reserve_unit (int fd)  { -  struct  +  struct    {      /* Command */      Byte cmd; @@ -164,10 +164,10 @@ reserve_unit (int fd)    return sanei_scsi_cmd (fd, &scsi_reserve, sizeof (scsi_reserve), 0, 0);  } -static long  +static long  release_unit (int fd)  { -  struct  +  struct    {      /* Command */      Byte cmd; @@ -192,7 +192,7 @@ test_ready (int fd)    SANE_Status status;    int try; -  struct  +  struct    {      /* Command */      Byte cmd; @@ -317,7 +317,7 @@ wait_ready (int fd)      Byte tr_len[3];      Byte ctrl;    } cmd; -   +    memset (&cmd, 0, sizeof (cmd));    cmd.cmd = 0x28;       /* READ */ @@ -468,7 +468,7 @@ set_window (AgfaFocus_Scanner * s)            Byte tonecurve;                /* Tone curve (0 - 8) */  	  Byte ht_pattern;               /* Halftone pattern */  	  Byte paddingtype;              /* Padding type */ -			            +            Byte bitordering[2];           /* Bit ordering (0 = left to right) */            Byte comprtype;                /* Compression type */            Byte comprarg;                 /* Compression argument */ @@ -522,7 +522,7 @@ set_window (AgfaFocus_Scanner * s)        set_size (cmd.tr_len, 3, 36 + 8);        set_size (cmd.wd_len, 2, 36);        break; -       +      case AGFACOLOR:        set_size (cmd.tr_len, 3, 65 + 8);        set_size (cmd.wd_len, 2, 65); @@ -582,7 +582,7 @@ set_window (AgfaFocus_Scanner * s)  	cmd.wd.ht_pattern = s->halftone;        else  	cmd.wd.ht_pattern = 3; -       +        cmd.wd.intensity = brightness;        cmd.wd.contrast = contrast; @@ -645,20 +645,20 @@ upload_dither_matrix (AgfaFocus_Scanner * s, int rows, int cols, int *dither_mat      Byte re1[3];      Byte tr_len[3];      Byte ctrl; -     +      struct {        Byte nrrows[2];        Byte nrcols[2]; -       +        struct {  	Byte data[2];        } element[256];      } wd;    } cmd; -   +    SANE_Status status;    int i; -   +    memset (&cmd, 0, sizeof (cmd));    cmd.cmd = 0x2a;       /* WRITE */ @@ -670,9 +670,9 @@ upload_dither_matrix (AgfaFocus_Scanner * s, int rows, int cols, int *dither_mat    for (i = 0; i < cols * rows; ++i)      set_size (cmd.wd.element[i].data, 2, dither_matrix[i]); -       +    status = sanei_scsi_cmd (s->fd, &cmd, sizeof (cmd), 0, 0); -   +    if (status != SANE_STATUS_GOOD)      /* Command failed */      return SANE_STATUS_IO_ERROR; @@ -692,7 +692,7 @@ upload_tonecurve (AgfaFocus_Scanner * s, int color_type, int input, int output,     Byte re1[4];     Byte tr_len[3];     Byte ctrl; -    +     Byte re2[6];     Byte wd_len[2]; @@ -700,7 +700,7 @@ upload_tonecurve (AgfaFocus_Scanner * s, int color_type, int input, int output,        Byte color_type[2];        Byte nrinput[2];        Byte nroutput[2]; -       +        struct {  	Byte data[2];        } outputval[256]; @@ -721,9 +721,9 @@ upload_tonecurve (AgfaFocus_Scanner * s, int color_type, int input, int output,    for (i = 0; i < cols; ++i)      for (j = 0; j < rows; ++j)        set_size (cmd.wd.element[j + i * rows].data, 2, dither_matrix[j + i * rows]); -       +    status = sanei_scsi_cmd (s->fd, &cmd, sizeof (cmd), 0, 0); -   +    if (status != SANE_STATUS_GOOD)    /*    * Command failed * */      return SANE_STATUS_IO_ERROR; @@ -760,22 +760,22 @@ read_data (AgfaFocus_Scanner * s, SANE_Byte *buf, int lines, int bpl)    set_size (cmd.tr_len, 3, lines);    size = lines * bpl; -   +    status = sanei_scsi_cmd (s->fd, &cmd, sizeof (cmd), buf, &size); -   +    if (status != SANE_STATUS_GOOD)      {        DBG (1, "sanei_scsi_cmd() = %d\n", status);        return SANE_STATUS_IO_ERROR;      } -   +    if (size != ((unsigned int) lines * bpl))      {        DBG (1, "sanei_scsi_cmd(): got %lu bytes, expected %d\n",  	   (u_long) size, lines * bpl);        return SANE_STATUS_INVAL;      } -   +    DBG (1, "Got %lu bytes\n", (u_long) size);    /* Reverse: */ @@ -788,7 +788,7 @@ read_data (AgfaFocus_Scanner * s, SANE_Byte *buf, int lines, int bpl)  	for (i = 0; i < size; i++)  	  buf[i] = 255 - ((buf[i] * 256.0f) / 64.0f);      } -		   +    s->lines_available -= lines;    return SANE_STATUS_GOOD; @@ -954,7 +954,7 @@ do_cancel (AgfaFocus_Scanner * s)        /* ensure child knows it's time to stop: */        sanei_thread_kill (s->reader_pid);        sanei_thread_waitpid (s->reader_pid, &exit_status); -      s->reader_pid = -1; +      sanei_thread_invalidate(s->reader_pid);      }    if (s->fd >= 0) @@ -980,9 +980,9 @@ init_options (AgfaFocus_Scanner * s)    static const SANE_Range percentage_range =    { -    -100 << SANE_FIXED_SCALE_SHIFT,	/* minimum */ -    100 << SANE_FIXED_SCALE_SHIFT,	/* maximum */ -    1 << SANE_FIXED_SCALE_SHIFT	/* quantization */ +    SANE_FIX(-100),	/* minimum */ +    SANE_FIX(100),	/* maximum */ +    SANE_FIX(1)         /* quantization */    };    static const SANE_Range sharpen_range = @@ -991,9 +991,9 @@ init_options (AgfaFocus_Scanner * s)    {0, 100, 0};    static const SANE_Range attenuation_range =    { -    0 << SANE_FIXED_SCALE_SHIFT,	/* minimum */ -    100 << SANE_FIXED_SCALE_SHIFT,	/* maximum */ -    1 << SANE_FIXED_SCALE_SHIFT	        /* quantization */ +    SANE_FIX(0),	/* minimum */ +    SANE_FIX(100),	/* maximum */ +    SANE_FIX(1)	        /* quantization */    }; @@ -1182,7 +1182,7 @@ init_options (AgfaFocus_Scanner * s)    s->opt[OPT_CONTRAST].constraint_type = SANE_CONSTRAINT_RANGE;    s->opt[OPT_CONTRAST].constraint.range = &percentage_range;    s->val[OPT_CONTRAST].w = 0; -   +    /* halftone patterns */    s->opt[OPT_HALFTONE_PATTERN].name = SANE_NAME_HALFTONE_PATTERN;    s->opt[OPT_HALFTONE_PATTERN].title = SANE_TITLE_HALFTONE_PATTERN; @@ -1324,7 +1324,7 @@ sane_exit (void)  	sane_close (dev->handle);        free (dev);      } -   +    if (devlist)      free (devlist);  } @@ -1485,6 +1485,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option,  	case OPT_BR_Y:  	  if (info)  	    *info |= SANE_INFO_RELOAD_PARAMS; +          // fall through  	case OPT_SHARPEN:  	case OPT_EXPOSURE:  	case OPT_ATTENUATION_RED: @@ -1510,16 +1511,16 @@ sane_control_option (SANE_Handle handle, SANE_Int option,  	      s->val[option].s = strdup (val);  	      if (strcmp (s->val[option].s, "Gray (6 bit)") == 0) -		s->mode = GRAY6BIT;	 +		s->mode = GRAY6BIT;  	      else if (strcmp (s->val[option].s, "Gray (8 bit)") == 0) -		s->mode = GRAY8BIT;	 +		s->mode = GRAY8BIT;  	      else if (strcmp (s->val[option].s, "Color (18 bit)") == 0) -		s->mode = COLOR18BIT;	 +		s->mode = COLOR18BIT;  	      else if (strcmp (s->val[option].s, "Color (24 bit)") == 0) -		s->mode = COLOR24BIT;	 +		s->mode = COLOR24BIT;  	      else  		s->mode = LINEART; -     +  	      switch (s->mode)  		{  		case LINEART: @@ -1679,18 +1680,18 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)  	case LINEART:  	  {  	    const char *halftone; -	     +  	    s->image_composition = 0; -	     +  	    /* in 1 bpp mode, lines need to be 8 pixel length */ -	     +  	    if (s->params.pixels_per_line % 8)  	      s->params.pixels_per_line += 8 - (s->params.pixels_per_line % 8); -	     +  	    s->params.format = SANE_FRAME_GRAY;  	    s->params.bytes_per_line = s->params.pixels_per_line / 8;  	    s->bpp = s->params.depth = 1; -	     +  	    halftone = s->val[OPT_HALFTONE_PATTERN].s;  	    if (strcmp (halftone, "1") == 0 )  	      s->halftone = 1; @@ -1704,14 +1705,14 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)  	      s->halftone = 5;  	    else  	      s->halftone = 0; -	     +  	    s->edge = s->val[OPT_SHARPEN].w;  	  }  	  break;  	case GRAY6BIT:  	  s->image_composition = 2; -	   +            s->params.format = SANE_FRAME_GRAY;            s->params.bytes_per_line = s->params.pixels_per_line;  	  s->bpp = 6; @@ -1722,7 +1723,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)  	case GRAY8BIT:  	  s->image_composition = 2; -	   +            s->params.format = SANE_FRAME_GRAY;            s->params.bytes_per_line = s->params.pixels_per_line;  	  s->bpp = s->params.depth = 8; @@ -1760,9 +1761,9 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)      if (s->mode == COLOR18BIT ||  	s->mode == COLOR24BIT)        s->params.format = SANE_FRAME_RED + s->pass; -   +    s->params.last_frame = (s->params.format != SANE_FRAME_RED && s->params.format != SANE_FRAME_GREEN); -   +    if (params)      *params = s->params;    return SANE_STATUS_GOOD; @@ -1856,23 +1857,23 @@ reader_process (void *scanner)  	{  	  /* No lines in scanner?  Scan some more */  	  status = request_more_data (s); -	   +  	  if (status != SANE_STATUS_GOOD)  	    {  	      close (fd);  	      return 1;  	    }  	} -       +        /* We only request as many lines as there are already scanned */        if (lines > s->lines_available)  	lines = s->lines_available;        DBG (1, "Requesting %d lines, in scanner: %d, total: %d\n", lines,  	   s->lines_available, s->params.lines); -   +        status = read_data (s, data, lines, bytes_per_line); -       +        if (status != SANE_STATUS_GOOD)  	{  	  DBG (1, "sane_read: read_data() failed (%s)\n", @@ -1881,10 +1882,10 @@ reader_process (void *scanner)  	  close (fd);  	  return 1;  	} -       +        /* Sometimes the scanner will return more bytes per line than           requested, so we copy only what we wanted. */ -       +        for (i = 0; i < lines; i++)  	if (write (fd, data + i * bytes_per_line, s->params.bytes_per_line) != s->params.bytes_per_line)  	  { @@ -1895,7 +1896,7 @@ reader_process (void *scanner)        lines_read += lines;      } -   +    close (fd);    return 0;  } @@ -1906,14 +1907,14 @@ sane_start (SANE_Handle handle)    AgfaFocus_Scanner *s = handle;    SANE_Status status;    int fds[2]; -   +    /* First make sure we have a current parameter set.  Some of the       parameters will be overwritten below, but that's OK.  */ -   +    status = sane_get_parameters (s, 0);    if (status != SANE_STATUS_GOOD)      return status; -   +    /* don't initialise scanner if we're doing a three-pass scan */    if (s->pass == 0) @@ -1966,10 +1967,10 @@ sane_start (SANE_Handle handle)  	  42, 26, 38, 22, 43, 27, 39, 23,  	   4, 58, 14, 54,  1, 59, 15, 55,  	  36, 20, 46, 30, 33, 17, 47, 31, -	  12, 52,  8, 62,  9, 49,  5, 63,  +	  12, 52,  8, 62,  9, 49,  5, 63,  	  44, 28, 40, 24, 41, 25, 37, 21  	}; -	 +  	status = upload_dither_matrix (s, 8, 8, matrix);  	if (status != SANE_STATUS_GOOD)  	  { @@ -2030,7 +2031,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,    if (!s->scanning)      return do_cancel (s); -   +    if (nread < 0) {      if (errno == EAGAIN) {        return SANE_STATUS_GOOD;  | 
