* Copyright (c) 1990 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* Cimarron D. Taylor of the University of California, Berkeley.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)option.c 5.1 (Berkeley) %G%";
char *name
; /* option name */
int token
; /* token value */
PLAN
*(*create
)(); /* create function */
#define O_NONE 0x01 /* no call required */
#define O_ZERO 0x02 /* pass: nothing */
#define O_ARGV 0x04 /* pass: argv, increment argv */
#define O_ARGVP 0x08 /* pass: *argv, T_OK || T_EXEC */
PLAN
*c_atime(), *c_ctime(), *c_depth(), *c_exec(), *c_follow(),
*c_fstype(), *c_group(), *c_inum(), *c_links(), *c_ls(),
*c_mtime(), *c_name(), *c_newer(), *c_nogroup(), *c_nouser(),
*c_ok(), *c_perm(), *c_print(), *c_prune(), *c_size(), *c_type(),
*c_user(), *c_xdev(), *c_openparen(), *c_closeparen(), *c_not(),
"!", T_NOT
, c_not
, O_ZERO
,
"(", T_OPENPAREN
, c_openparen
, O_ZERO
,
")", T_CLOSEPAREN
, c_closeparen
, O_ZERO
,
"-a", T_AND
, (PLAN
*(*)())-1,O_NONE
,
"-atime", T_ATIME
, c_atime
, O_ARGV
,
"-ctime", T_CTIME
, c_ctime
, O_ARGV
,
"-depth", T_DEPTH
, c_depth
, O_ZERO
,
"-exec", T_EXEC
, c_exec
, O_ARGVP
,
"-follow", T_FOLLOW
, c_follow
, O_ZERO
,
"-fstype", T_FSTYPE
, c_fstype
, O_ARGV
,
"-group", T_GROUP
, c_group
, O_ARGV
,
"-inum", T_INUM
, c_inum
, O_ARGV
,
"-links", T_LINKS
, c_links
, O_ARGV
,
"-ls", T_LS
, c_ls
, O_ZERO
,
"-mtime", T_MTIME
, c_mtime
, O_ARGV
,
"-name", T_NAME
, c_name
, O_ARGV
,
"-newer", T_NEWER
, c_newer
, O_ARGV
,
"-nogroup", T_NOGROUP
, c_nogroup
, O_ZERO
,
"-nouser", T_NOUSER
, c_nouser
, O_ZERO
,
"-o", T_OR
, c_or
, O_ZERO
,
"-ok", T_OK
, c_exec
, O_ARGVP
,
"-perm", T_PERM
, c_perm
, O_ARGV
,
"-print", T_PRINT
, c_print
, O_ZERO
,
"-prune", T_PRUNE
, c_prune
, O_ZERO
,
"-size", T_SIZE
, c_size
, O_ARGV
,
"-type", T_TYPE
, c_type
, O_ARGV
,
"-user", T_USER
, c_user
, O_ARGV
,
"-xdev", T_XDEV
, c_xdev
, O_ZERO
,
* create a node corresponding to a command line argument.
* add create/process function pointers to node, so we can skip
OPTION
*find_typelookup();
p
= (OPTION
*)bsearch(&tmp
, options
, sizeof(options
)/sizeof(OPTION
),
sizeof(OPTION
), typecompare
);
(void)fprintf(stderr
, "find: unknown option %s.\n", *--argv
);
if (p
->flags
& (O_ARGV
|O_ARGVP
) && !*argv
) {
"find: %s requires additional arguments.\n", *--argv
);
new = (p
->create
)(*argv
++);
new = (p
->create
)(&argv
, p
->token
== T_OK
);
return(strcmp(a
->name
, b
->name
));