--- sane-backends-1.0.4/frontend/scanimage.c	Fri Nov 24 07:20:05 2000
+++ sane-backends-1.0.4-caskey/frontend/scanimage.c	Sat Jun  2 04:33:50 2001
@@ -65,6 +65,12 @@
 
 #define OPTION_FORMAT   1001
 #define OPTION_MD5	1002
+#define OPTION_BATCH_COUNT	1003
+#define OPTION_BATCH_START_AT	1004
+#define OPTION_BATCH_DOUBLE	1005
+#define OPTION_BATCH_INCREMENT	1006
+
+#define BATCH_COUNT_UNLIMITED -1
 
 static struct option basic_options[] = {
   {"device-name", required_argument, NULL, 'd'},
@@ -74,6 +80,10 @@
   {"test", no_argument, NULL, 'T'},
   {"version", no_argument, NULL, 'V'},
   {"batch", optional_argument, NULL, 'b'},
+  {"batch-count", required_argument, NULL, OPTION_BATCH_COUNT},
+  {"batch-start", required_argument, NULL, OPTION_BATCH_START_AT},
+  {"batch-double", no_argument, NULL, OPTION_BATCH_DOUBLE},
+  {"batch-increment", required_argument, NULL, OPTION_BATCH_INCREMENT},
   {"format", required_argument, NULL, OPTION_FORMAT},
   {"accept-md5-only", no_argument, NULL, OPTION_MD5},
   {0, 0, NULL, 0}
@@ -1346,6 +1356,9 @@
   const char *defdevname = 0;
   const char *format = 0;
   int batch = 0;
+  int batch_count = BATCH_COUNT_UNLIMITED;
+  int batch_start_at = 1;
+  int batch_increment = 1;
   SANE_Status status;
   char *full_optstring;
 
@@ -1377,6 +1390,7 @@
 	  devname = optarg;
 	  break;
 	case 'b':
+	  // This may have already been set by the batch-count flag
 	  batch = 1;
 	  format = optarg;
 	  break;
@@ -1389,6 +1403,19 @@
 	case 'T':
 	  test = 1;
 	  break;
+	case OPTION_BATCH_INCREMENT:
+	  batch_increment = atoi(optarg);
+	  break;
+	case OPTION_BATCH_START_AT:
+	  batch_start_at = atoi(optarg);
+	  break;
+	case OPTION_BATCH_DOUBLE:
+	  batch_increment = 2;
+	  break;
+	case OPTION_BATCH_COUNT:
+	  batch_count = atoi(optarg);
+	  batch = 1;
+	  break;
 	case OPTION_FORMAT:
 	  if (strcmp (optarg, "tiff") == 0)
 	    output_format = OUTPUT_TIFF;
@@ -1444,6 +1471,10 @@
 standard output.\n\
 \n\
 -b, --batch=FORMAT         working in batch mode\n\
+    --batch-count=#        how many pages to scan in batch mode\n\
+    --batch-start=#        page number to start naming files with\n\
+    --batch-doublesided    increment page number by two for 2sided originals\n\
+                           being scanned in a single sided scanner\n\
     --format=pnm|tiff      file format of output file\n\
 -d, --device-name=DEVICE   use a given scanner device (e.g. hp:/dev/scanner)\n\
 -h, --help                 display this help message and exit\n\
@@ -1686,11 +1717,16 @@
 
   if (test == 0)
     {
-      int n = 1;
+      int n = batch_start_at;
 
       if (batch && NULL == format)
 	format = "out%d.pnm";
 
+      if(batch) {
+        fprintf(stderr, "Scanning %d pages, incrementing by %d, numbering from %d\n",
+	    batch_count, batch_increment, batch_start_at);
+      }
+
       do
 	{
 	  char path[PATH_MAX];
@@ -1703,9 +1739,14 @@
 	      return SANE_STATUS_ACCESS_DENIED;
 	    }
 
+	  if (batch) {
+	    fprintf(stderr, "Scanning page %d\n", n);
+	  }
 	  status = scan_it ();
-	  if (batch)
-	    fprintf (stderr, "status = %d\n", status);
+	  if (batch) {
+	    fprintf (stderr, "Scanned page %d.", batch_count);
+	    fprintf (stderr, " (scanner status = %d)\n", status);
+	  }
 
 	  switch (status)
 	    {
@@ -1722,9 +1763,10 @@
 		}
 	      break;
 	    }			/* switch */
-	  n++;
+	  n += batch_increment;
 	}
-      while (batch && SANE_STATUS_GOOD == status);
+      while ((batch && (batch_count==BATCH_COUNT_UNLIMITED || --batch_count))
+	      && SANE_STATUS_GOOD == status);
     }
   else
     status = test_it ();
