AcePerl
view release on metacpan or search on metacpan
acelib/freesubs.c view on Meta::CPAN
pos = keep ;
return FALSE ;
}
/*****************/
BOOL freekeymatch (char *cp, KEY *kpt, FREEOPT *options)
{
char *io,*iw ;
int nopt = (int)options->key ;
KEY key ;
ambiguouskey = FALSE;
if (!nopt || !cp)
return FALSE ;
while (TRUE)
{ iw = cp ;
io = (++options)->text ;
while (freeupper (*iw++) == freeupper(*io++))
if (!*iw)
goto foundit ;
if (!--nopt)
return FALSE ;
}
foundit :
key = options->key ;
if (*io && *io != ' ') /* not a full word match */
while (--nopt) /* check that later options are different */
{ io = (++options)->text ;
iw = (char*) word ;
while (freeupper (*iw++) == freeupper (*io++))
if (!*iw)
{ ambiguouskey = TRUE;
return FALSE ;
}
}
*kpt = key ;
return TRUE ;
}
/***************************************************/
/* Return the text corresponding to the key */
char *freekey2text (KEY k, FREEOPT *o)
{ int i = o->key ; char *title = o->text ;
if (i<0)
messcrash("Negative number of options in freekey2text") ;
while (o++, i--)
if (o->key == k)
return (o->text) ;
return title ;
}
/***************************************************/
BOOL freeselect (KEY *kpt, FREEOPT *options) /* like the old freemenu */
{
if (isInteractive)
printf ("%s > ",options[0].text) ;
freecard (0) ; /* just get a card */
if (isInteractive)
while (freestep ('?')) /* write out options list */
{ int i ;
for (i = 1 ; i <= options[0].key ; i++)
printf (" %s\n",options[i].text) ;
printf ("%s > ",options[0].text) ;
freecard (0) ;
}
return freekey (kpt,options) ;
}
/* same but returns TRUE, -1, if stremlevel drops below level */
BOOL freelevelselect (int level, KEY *kpt, FREEOPT *options) /* like the old freemenu */
{
if (isInteractive)
printf ("%s > ",options[0].text) ;
if (!freecard (level)) /* try to get another card */
{ *kpt = (KEY)(-1) ;
return TRUE ;
}
if (isInteractive)
while (freestep ('?')) /* write out options list */
{ int i ;
for (i = 1 ; i <= options[0].key ; i++)
printf (" %s\n",options[i].text) ;
printf ("%s > ",options[0].text) ;
if (!freecard (level)) /* try to get another card */
{ *kpt = (KEY)(-1) ;
return TRUE ;
}
}
return freekey (kpt,options) ;
}
/**************************************/
BOOL freequery (char *query)
{
if (isInteractive)
{ int retval, answer = 0 ;
printf ("%s (y or n) ",query) ;
answer = getchar () ;
retval = (answer == 'y' || answer == 'Y') ? TRUE : FALSE ;
while (answer != (unsigned char) EOF &&
answer != -1 && /* mieg: used not to break on EOF in pipes */
answer != '\n')
answer = getchar () ;
return retval ;
}
else
return TRUE ;
}
/**********/
BOOL freeprompt (char *prompt, char *dfault, char *fmt)
{
if (isInteractive)
printf("%s ? > ",prompt);
freecard (0) ; /* just get a card */
if (freecheck (fmt))
return TRUE ;
else
{ messout ("input mismatch : format '%s' expected, card was\n%s",
fmt, card) ;
return FALSE ;
}
}
/*************************************/
int freefmtlength (char *fmt)
( run in 2.703 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )