Quizzer
view release on metacpan or search on metacpan
exercises/compile-tcsh/tcsh-6.10.00/tw.comp.c view on Meta::CPAN
static Char *tw_tok __P((Char *));
static bool tw_pos __P((Char *, int));
static void tw_pr __P((Char **));
static int tw_match __P((Char *, Char *));
static void tw_prlist __P((struct varent *));
static Char *tw_dollar __P((Char *,Char **, int, Char *,
int, const char *));
/* docomplete():
* Add or list completions in the completion list
*/
/*ARGSUSED*/
void
docomplete(v, t)
Char **v;
struct command *t;
{
register struct varent *vp;
register Char *p;
USE(t);
v++;
p = *v++;
if (p == 0)
tw_prlist(&completions);
else if (*v == 0) {
vp = adrof1(strip(p), &completions);
if (vp)
tw_pr(vp->vec), xputchar('\n');
}
else
set1(strip(p), saveblk(v), &completions, VAR_READWRITE);
} /* end docomplete */
/* douncomplete():
* Remove completions from the completion list
*/
/*ARGSUSED*/
void
douncomplete(v, t)
Char **v;
struct command *t;
{
USE(t);
unset1(v, &completions);
} /* end douncomplete */
/* tw_prlist():
* Pretty print a list of variables
*/
static void
tw_prlist(p)
struct varent *p;
{
register struct varent *c;
if (setintr)
#ifdef BSDSIGS
(void) sigsetmask(sigblock((sigmask_t) 0) & ~sigmask(SIGINT));
#else /* BSDSIGS */
(void) sigrelse(SIGINT);
#endif /* BSDSIGS */
for (;;) {
while (p->v_left)
p = p->v_left;
x:
if (p->v_parent == 0) /* is it the header? */
return;
xprintf("%s\t", short2str(p->v_name));
tw_pr(p->vec);
xputchar('\n');
if (p->v_right) {
p = p->v_right;
continue;
}
do {
c = p;
p = p->v_parent;
} while (p->v_right == c);
goto x;
}
} /* end tw_prlist */
/* tw_pr():
* Pretty print a completion, adding single quotes around
* a completion argument and collapsing multiple spaces to one.
*/
static void
tw_pr(cmp)
Char **cmp;
{
bool sp, osp;
Char *ptr;
for (; *cmp; cmp++) {
xputchar('\'');
for (osp = 0, ptr = *cmp; *ptr; ptr++) {
sp = Isspace(*ptr);
if (sp && osp)
continue;
xputchar(*ptr);
osp = sp;
}
xputchar('\'');
if (cmp[1])
xputchar(' ');
}
} /* end tw_pr */
/* tw_find():
* Find the first matching completion.
* For commands we only look at names that start with -
*/
static Char **
tw_find(nam, vp, cmd)
Char *nam;
( run in 2.649 seconds using v1.01-cache-2.11-cpan-6736b670a1e )