1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-12-07 06:02:21 +01:00

manual/8630

This commit is contained in:
Tanaka Akira 1999-11-12 15:28:24 +00:00
parent 167b0ae3b9
commit e6282df115
93 changed files with 935 additions and 738 deletions

View file

@ -357,6 +357,7 @@ struct caarg {
char *action;
int type;
char *end;
char *opt;
int num;
};
@ -395,6 +396,7 @@ free_caargs(Caarg a)
zsfree(a->descr);
zsfree(a->action);
zsfree(a->end);
zsfree(a->opt);
zfree(a, sizeof(*a));
}
}
@ -442,7 +444,7 @@ rembslashcolon(char *s)
}
static Caarg
parse_caarg(int mult, int type, int num, char **def)
parse_caarg(int mult, int type, int num, char *oname, char **def)
{
Caarg ret = (Caarg) zalloc(sizeof(*ret));
char *p = *def, *d, sav;
@ -451,6 +453,7 @@ parse_caarg(int mult, int type, int num, char **def)
ret->descr = ret->action = ret->end = NULL;
ret->num = num;
ret->type = type;
ret->opt = ztrdup(oname);
for (d = p; *p && *p != ':'; p++)
if (*p == '\\' && p[1])
@ -647,7 +650,7 @@ parse_cadef(char *nam, char **args)
}
if (c == ':') {
Caarg *oargp = &oargs;
int atype, rest;
int atype, rest, oanum = 1;
char *end;
while (c == ':') {
@ -681,7 +684,7 @@ parse_cadef(char *nam, char **args)
rest = 1;
} else
atype = CAA_NORMAL;
*oargp = parse_caarg(!rest, atype, 0, &p);
*oargp = parse_caarg(!rest, atype, oanum++, name, &p);
oargp = &((*oargp)->next);
if (rest)
break;
@ -739,7 +742,7 @@ parse_cadef(char *nam, char **args)
} else
type = CAA_RARGS;
}
ret->rest = parse_caarg(0, type, -1, &p);
ret->rest = parse_caarg(0, type, -1, NULL, &p);
} else {
int type = CAA_NORMAL;
Caarg arg, tmp, pre;
@ -763,7 +766,7 @@ parse_cadef(char *nam, char **args)
type = CAA_OPT;
p++;
}
arg = parse_caarg(0, type, anum - 1, &p);
arg = parse_caarg(0, type, anum - 1, NULL, &p);
for (tmp = ret->args, pre = NULL;
tmp && tmp->num < anum - 1;
@ -1191,8 +1194,9 @@ bin_comparguments(char *nam, char **args, char *ops, int func)
switch (args[0][1]) {
case 'i': min = 2; max = -1; break;
case 'D': min = 2; max = 2; break;
case 'C': min = 1; max = 1; break;
case 'O': min = 4; max = 4; break;
case 'L': min = 3; max = 3; break;
case 'L': min = 3; max = 4; break;
case 's': min = 1; max = 1; break;
case 'M': min = 1; max = 1; break;
case 'a': min = 0; max = 0; break;
@ -1248,6 +1252,24 @@ bin_comparguments(char *nam, char **args, char *ops, int func)
}
return 1;
}
case 'C':
{
Caarg arg = ca_laststate.def;
if (arg) {
char buf[20];
if (arg->num > 0)
sprintf(buf, "%d", arg->num);
else
strcpy(buf, "rest");
setsparam(args[1], (arg->opt ? tricat(arg->opt, "-", buf) :
tricat("argument-", buf, "")));
return 0;
}
return 1;
}
case 'O':
if (ca_laststate.opt) {
LinkList next = newlinklist();
@ -1283,8 +1305,8 @@ bin_comparguments(char *nam, char **args, char *ops, int func)
set_list_array(args[4], equal);
return 0;
} else
return 1;
}
return 1;
case 'L':
{
Caopt opt = ca_get_opt(ca_laststate.d, args[1], 1, NULL);
@ -1293,6 +1315,9 @@ bin_comparguments(char *nam, char **args, char *ops, int func)
setsparam(args[2], ztrdup(opt->args->descr));
setsparam(args[3], ztrdup(opt->args->action));
if (args[4])
setsparam(args[4], tricat(opt->name, "-1", NULL));
return 0;
}
return 1;
@ -1306,8 +1331,8 @@ bin_comparguments(char *nam, char **args, char *ops, int func)
(ca_laststate.ddef->type == CAO_EQUAL ?
"equal" : "next")) : ""));
return 0;
} else
return 1;
}
return 1;
case 'M':
setsparam(args[1], ztrdup(ca_laststate.d->match));
return 0;
@ -1533,7 +1558,7 @@ parse_cvdef(char *nam, char **args)
vtype = CVV_OPT;
} else
vtype = CVV_ARG;
arg = parse_caarg(0, 0, 0, &p);
arg = parse_caarg(0, 0, 0, name, &p);
} else {
vtype = CVV_NOARG;
arg = NULL;
@ -1758,10 +1783,11 @@ bin_compvalues(char *nam, char **args, char *ops, int func)
switch (args[0][1]) {
case 'i': min = 2; max = -1; break;
case 'D': min = 2; max = 2; break;
case 'C': min = 1; max = 1; break;
case 'V': min = 3; max = 3; break;
case 's': min = 1; max = 1; break;
case 'd': min = 1; max = 1; break;
case 'L': min = 3; max = 3; break;
case 'L': min = 3; max = 4; break;
case 'v': min = 1; max = 1; break;
default:
zerrnam(nam, "invalid option: %s", args[0], 0);
@ -1806,6 +1832,17 @@ bin_compvalues(char *nam, char **args, char *ops, int func)
}
return 1;
}
case 'C':
{
Caarg arg = cv_laststate.def;
if (arg) {
setsparam(args[1], ztrdup(arg->opt));
return 0;
}
return 1;
}
case 'V':
{
LinkList noarg = newlinklist();
@ -1861,6 +1898,9 @@ bin_compvalues(char *nam, char **args, char *ops, int func)
setsparam(args[2], val->arg->descr);
setsparam(args[3], val->arg->action);
if (args[4])
setsparam(args[4], ztrdup(val->name));
return 0;
}
return 1;