[David Mosberger-Tang]
> Could someone consider this for inclusion in the CVS tree?
I had a look at it, reformatted it to be consistent with current style
and rewrote the for loop to make sure non-batch mode still works.
Could someone please verify that the new patch work?  I don't have a
scanner to test with. :-(
I guess the batch mode should have a way to limit the number of scans.
If it is used on the video4linux backend, the flow of images will
never stop... :-)
Index: frontend/scanimage.c
===================================================================
RCS file: /cvsroot/external/sane/frontend/scanimage.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 scanimage.c
--- scanimage.c	1999/08/09 18:05:40	1.1.1.1
+++ scanimage.c	2000/01/18 00:48:07
@@ -61,7 +61,8 @@
   {"verbose", no_argument, NULL, 'v'},
   {"test", no_argument, NULL, 'T'},
   {"version", no_argument, NULL, 'V'},
-  {0, }
+  {"batch", optional_argument, NULL, 'b'},
+  {0, 0, NULL, 0}
 };
 
 #define BASE_OPTSTRING	"d:hLvVT"
@@ -749,7 +750,7 @@
   return image->data;
 }
 
-static void
+static SANE_Status
 scan_it (void)
 {
   int i, len, first_frame = 1, offset = 0, must_buffer = 0;
@@ -870,7 +871,7 @@
                 {
                   fprintf (stderr, "%s: sane_read: %s\n",
                            prog_name, sane_strstatus (status));
-		  return;
+		  return status;
                 }
               break;
             }
@@ -938,6 +939,8 @@
   sane_cancel (device);
   if (image.data)
     free (image.data);
+
+  return status;
 }
 
 #define clean_buffer(buf,size)	memset ((buf), 0x23, size)
@@ -1049,6 +1052,8 @@
   const SANE_Device ** device_list;
   SANE_Int num_dev_options = 0;
   const char * devname = 0;
+  const char * format = 0;
+  int batch = 0;
   SANE_Status status;
   char *full_optstring;
 
@@ -1076,6 +1081,7 @@
           break;	/* may be an option that we'll parse later on */
 
         case 'd': devname = optarg; break;
+	case 'b': batch = 1; format = optarg; break;
         case 'h': help = 1; break;
         case 'v': ++verbose; break;
         case 'T': test= 1; break;
@@ -1115,6 +1121,7 @@
 Start image acquisition on a scanner device and write PNM image data to\n\
 standard output.\n\
 \n\
+-b, --batch=FORMAT         working in batch mode\n\
 -d, --device-name=DEVICE   use a given scanner device\n\
 -h, --help                 display this help message and exit\n\
 -L, --list-devices         show available scanner devices\n\
@@ -1337,11 +1344,43 @@
   signal (SIGTERM, sighandler);
 
   if (test == 0) 
-    scan_it ();
+    {
+      int n = 1;
+
+      if (batch && NULL == format)
+	format = "out%d.pnm";
+
+      do
+	{
+	  char path [ 1024];
+	  sprintf (path, format, n);	/* love --(C++) */
+
+	  if (batch && NULL == freopen (path, "w", stdout) )
+	    {
+	      fprintf (stderr, "cannot open %s\n", path);
+	      return SANE_STATUS_ACCESS_DENIED;
+	    }
+
+	  status = scan_it ();
+	  if (batch)
+	    fprintf( stderr, "status = %d\n", status);
+
+	  switch (status)
+	    {
+	    case SANE_STATUS_EOF:
+	      status = SANE_STATUS_GOOD;
+	      break;
+	    default:
+	      break;
+	    }	/* switch */
+	  n++;
+	}
+      while (batch && SANE_STATUS_GOOD == status);
+    }
   else
     test_it ();
 
   sane_close (device);
 
-  return 0;
+  return status;
 }
-- ##> Petter Reinholdtsen <## | pere@td.org.uit.no-- Source code, list archive, and docs: http://www.mostang.com/sane/ To unsubscribe: echo unsubscribe sane-devel | mail majordomo@mostang.com
This archive was generated by hypermail 2b29 : Mon Jan 17 2000 - 16:55:15 PST