--- ../../sane/frontend/scanimage.c	Sat Jan  8 22:14:44 2000
+++ scanimage.c	Sun Dec 26 09:12:36 1999
@@ -61,6 +61,7 @@
   {"verbose", no_argument, NULL, 'v'},
   {"test", no_argument, NULL, 'T'},
   {"version", no_argument, NULL, 'V'},
+  {"batch", optional_argument, NULL, 'b'},
   {0, }
 };
 
@@ -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\
@@ -1336,12 +1343,39 @@
   signal (SIGPIPE, sighandler);
   signal (SIGTERM, sighandler);
 
-  if (test == 0) 
-    scan_it ();
-  else
-    test_it ();
 
-  sane_close (device);
+	if( 0 == test) {
+		int n;
+
+		if( batch && NULL == format) {
+			format = "out%d.pnm";
+		}
+
+		for( n = 1; batch && SANE_STATUS_GOOD == status; ++n) {
+			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( );
+			fprintf( stderr, "status = %d\n", status);
+
+			switch( status) {
+			case SANE_STATUS_EOF:
+				status = SANE_STATUS_GOOD;
+				break;
+			default:
+				break;
+			}	/* switch */
+		}	/* for */
+	} else
+		test_it( );
+
+
+	sane_close( device);
 
-  return 0;
+	return status;
 }

