kopia lustrzana https://gitlab.com/sane-project/backends
frontend/scanimage.c, doc/scaniamge.man: Added the option -f
--formatted-device-list to allow arbitrarily formatted device lists. Suggested by Klaas Freitag. AbelDEVEL_2_0_BRANCH-1
rodzic
6274368371
commit
0e65f42ce7
|
@ -11,6 +11,8 @@ scanimage - scan an image
|
||||||
.RB [ --accept-md5-only ]
|
.RB [ --accept-md5-only ]
|
||||||
.RB [ -h | --help ]
|
.RB [ -h | --help ]
|
||||||
.RB [ -L | --list-devices ]
|
.RB [ -L | --list-devices ]
|
||||||
|
.RB [ -f | --formatted-device-list
|
||||||
|
.IR format ]
|
||||||
.RB [ -T | --test ]
|
.RB [ -T | --test ]
|
||||||
.RB [ -v | --verbose ]
|
.RB [ -v | --verbose ]
|
||||||
.RB [ -V | --version ]
|
.RB [ -V | --version ]
|
||||||
|
@ -95,6 +97,27 @@ name. You may need to consult your system administrator to find out
|
||||||
the names of such devices.
|
the names of such devices.
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
|
.B -f
|
||||||
|
or
|
||||||
|
.B --formatted-device-list
|
||||||
|
option works similar to --list-devices, but requires a format string.
|
||||||
|
scanimage replaces the placeholders
|
||||||
|
.B %d %v %m %t %i
|
||||||
|
with the device name, vendor name, model name, scanner type and an index
|
||||||
|
number respectively. The command
|
||||||
|
.PP
|
||||||
|
.RS
|
||||||
|
scanimage -f "scanner number %i device %d is a %t, model %m, produced by %v"
|
||||||
|
.PP
|
||||||
|
.RE
|
||||||
|
will produce something like:
|
||||||
|
.PP
|
||||||
|
.RS
|
||||||
|
scanner number 0 device sharp:/dev/sg1 is a flatbed scanner, model JX250
|
||||||
|
SCSI, produced by SHARP
|
||||||
|
.PP
|
||||||
|
.RE
|
||||||
|
The
|
||||||
.B -T
|
.B -T
|
||||||
or
|
or
|
||||||
.B --test
|
.B --test
|
||||||
|
|
|
@ -75,6 +75,7 @@ Image;
|
||||||
static struct option basic_options[] = {
|
static struct option basic_options[] = {
|
||||||
{"device-name", required_argument, NULL, 'd'},
|
{"device-name", required_argument, NULL, 'd'},
|
||||||
{"list-devices", no_argument, NULL, 'L'},
|
{"list-devices", no_argument, NULL, 'L'},
|
||||||
|
{"formatted-device-list", required_argument, NULL, 'f'},
|
||||||
{"help", no_argument, NULL, 'h'},
|
{"help", no_argument, NULL, 'h'},
|
||||||
{"verbose", no_argument, NULL, 'v'},
|
{"verbose", no_argument, NULL, 'v'},
|
||||||
{"test", no_argument, NULL, 'T'},
|
{"test", no_argument, NULL, 'T'},
|
||||||
|
@ -92,7 +93,7 @@ static struct option basic_options[] = {
|
||||||
#define OUTPUT_PNM 0
|
#define OUTPUT_PNM 0
|
||||||
#define OUTPUT_TIFF 1
|
#define OUTPUT_TIFF 1
|
||||||
|
|
||||||
#define BASE_OPTSTRING "d:hLvVTb"
|
#define BASE_OPTSTRING "d:hLf:vVTb"
|
||||||
#define STRIP_HEIGHT 256 /* # lines we increment image height */
|
#define STRIP_HEIGHT 256 /* # lines we increment image height */
|
||||||
|
|
||||||
static struct option *all_options;
|
static struct option *all_options;
|
||||||
|
@ -1466,8 +1467,9 @@ main (int argc, char **argv)
|
||||||
accept_only_md5_auth = 1;
|
accept_only_md5_auth = 1;
|
||||||
break;
|
break;
|
||||||
case 'L':
|
case 'L':
|
||||||
|
case 'f':
|
||||||
{
|
{
|
||||||
int i;
|
int i = 0;
|
||||||
|
|
||||||
status = sane_get_devices (&device_list, SANE_FALSE);
|
status = sane_get_devices (&device_list, SANE_FALSE);
|
||||||
if (status != SANE_STATUS_GOOD)
|
if (status != SANE_STATUS_GOOD)
|
||||||
|
@ -1477,13 +1479,89 @@ main (int argc, char **argv)
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; device_list[i]; ++i)
|
if (ch == 'L')
|
||||||
{
|
{
|
||||||
printf ("device `%s' is a %s %s %s\n",
|
for (i = 0; device_list[i]; ++i)
|
||||||
device_list[i]->name, device_list[i]->vendor,
|
{
|
||||||
device_list[i]->model, device_list[i]->type);
|
printf ("device `%s' is a %s %s %s\n",
|
||||||
|
device_list[i]->name, device_list[i]->vendor,
|
||||||
|
device_list[i]->model, device_list[i]->type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (i == 0)
|
else
|
||||||
|
{
|
||||||
|
int i = 0, n = 0, maxarg = 8;
|
||||||
|
char *percent;
|
||||||
|
char *start, *fmt;
|
||||||
|
const char **arglist = malloc(8 * sizeof(char**));
|
||||||
|
if (arglist == 0)
|
||||||
|
{
|
||||||
|
printf("no enough memory\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt = malloc(strlen(optarg));
|
||||||
|
if (fmt == 0)
|
||||||
|
{
|
||||||
|
printf("no enough memory\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; device_list[i]; ++i)
|
||||||
|
{
|
||||||
|
n = 0;
|
||||||
|
strcpy(fmt, optarg);
|
||||||
|
start = fmt;
|
||||||
|
while( (percent = strchr(start, '%')) )
|
||||||
|
{
|
||||||
|
percent++;
|
||||||
|
if (percent)
|
||||||
|
{
|
||||||
|
if (n >= maxarg)
|
||||||
|
{
|
||||||
|
maxarg = 2 * maxarg;
|
||||||
|
arglist = realloc(arglist, maxarg * sizeof(char**));
|
||||||
|
if (arglist == 0)
|
||||||
|
{
|
||||||
|
printf("no enough memory\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (*percent)
|
||||||
|
{
|
||||||
|
case 'd':
|
||||||
|
arglist[n++] = device_list[i]->name;
|
||||||
|
*percent = 's';
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
arglist[n++] = device_list[i]->vendor;
|
||||||
|
*percent = 's';
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
arglist[n++] = device_list[i]->model;
|
||||||
|
*percent = 's';
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
arglist[n++] = device_list[i]->type;
|
||||||
|
*percent = 's';
|
||||||
|
break;
|
||||||
|
case 'i':
|
||||||
|
arglist[n++] = (char *) i;
|
||||||
|
break;
|
||||||
|
case '%':
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("unkonwn format specifier %%%c\n", *percent);
|
||||||
|
}
|
||||||
|
percent++;
|
||||||
|
}
|
||||||
|
start = percent;
|
||||||
|
}
|
||||||
|
vprintf(fmt, arglist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 0 && ch != 'f')
|
||||||
printf ("\nNo scanners were identified. If you were expecting "
|
printf ("\nNo scanners were identified. If you were expecting "
|
||||||
"something different,\ncheck that the scanner is plugged "
|
"something different,\ncheck that the scanner is plugged "
|
||||||
"in, turned on and detected by the\nsane-find-scanner tool "
|
"in, turned on and detected by the\nsane-find-scanner tool "
|
||||||
|
|
Ładowanie…
Reference in New Issue