--- ../../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; }