2006-05-12 18:49:41 +00:00
|
|
|
.\" Copyright (C) 2006 Justin Pryzby <pryzbyj@justinpryzby.com>
|
|
|
|
.\"
|
|
|
|
.\" Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
.\" a copy of this software and associated documentation files (the
|
|
|
|
.\" "Software"), to deal in the Software without restriction, including
|
|
|
|
.\" without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
.\" distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
.\" permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
.\" the following conditions:
|
|
|
|
.\"
|
|
|
|
.\" The above copyright notice and this permission notice shall be
|
|
|
|
.\" included in all copies or substantial portions of the Software.
|
|
|
|
.\"
|
|
|
|
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
|
|
.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
|
|
.\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
|
|
.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
|
|
.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
|
|
.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
.\"
|
|
|
|
.\" References:
|
|
|
|
.\" glibc manual and source
|
2006-05-18 21:48:40 +00:00
|
|
|
.\"
|
2006-05-18 21:49:40 +00:00
|
|
|
.\" 2006-05-19, mtk, various edits and example program
|
2006-05-18 21:48:40 +00:00
|
|
|
.\"
|
|
|
|
.TH RPMATCH 3 "2006-05-17" GNU
|
2006-05-12 18:49:41 +00:00
|
|
|
.SH NAME
|
|
|
|
rpmatch \- determine if the answer to a question is affirmative or negative
|
|
|
|
.SH SYNOPSIS
|
2006-06-04 20:30:01 +00:00
|
|
|
.nf
|
2006-05-12 18:49:41 +00:00
|
|
|
\fB#define _SVID_SOURCE
|
|
|
|
\fB#include <stdlib.h>
|
|
|
|
|
|
|
|
\fBint rpmatch (const char *\fIresponse\fB);
|
2006-06-04 20:30:01 +00:00
|
|
|
.fi
|
2006-05-12 18:49:41 +00:00
|
|
|
.SH DESCRIPTION
|
|
|
|
\fBrpmatch\fP() handles a user response to yes or no questions, with
|
2006-05-18 21:48:40 +00:00
|
|
|
support for internationalization.
|
2006-05-12 18:49:41 +00:00
|
|
|
|
|
|
|
\fIresponse\fP should be a null-terminated string containing a
|
|
|
|
user-supplied response, perhaps obtained with \fBfgets\fP(3) or
|
|
|
|
\fBgetline\fP(3).
|
2006-05-18 21:48:40 +00:00
|
|
|
|
|
|
|
The user's language preference is taken into account per the
|
|
|
|
environment variables \fBLANG\fP, \fBLC_MESSAGES\fP, and \fBLC_ALL\fP,
|
|
|
|
if the program has called \fBsetlocale\fP() to effect their changes.
|
2006-05-22 08:53:01 +00:00
|
|
|
|
|
|
|
Regardless of the locale, responses matching \fB^[Yy]\fP are always
|
|
|
|
accepted as affirmative, and those matching \fB^[Nn]\fP are always
|
|
|
|
accepted as negative.
|
2006-05-12 18:49:41 +00:00
|
|
|
.SH "RETURN VALUE"
|
|
|
|
After examining
|
|
|
|
.IR response ,
|
|
|
|
\fBrpmatch\fP() returns 0 for a recognized negative response ("no"), 1
|
|
|
|
for a recognized positive response ("yes"), and \-1 when the value
|
|
|
|
of \fIresponse\fP is unrecognized.
|
|
|
|
.SH ERRORS
|
|
|
|
A return value of \-1 may indicate either an invalid input, or some
|
|
|
|
other error. It is incorrect to only test if the return value is
|
2006-05-18 21:48:40 +00:00
|
|
|
nonzero.
|
|
|
|
|
|
|
|
\fBrpmatch\fP() can fail for any of the reasons that
|
2006-05-12 18:49:41 +00:00
|
|
|
\fBregcomp\fP(3) or \fBregexec\fP(3) can fail; the cause of the error
|
|
|
|
is not available from \fIerrno\fP or anywhere else, but indicates a
|
|
|
|
failure of the regex engine (but this case is indistinguishable from
|
|
|
|
that of an unrecognized value of \fIresponse\fP).
|
|
|
|
.SH "CONFORMING TO"
|
|
|
|
\fBrpmatch\fP() is not required by any standard, but
|
|
|
|
is available on a few other systems.
|
|
|
|
.\" It is available on at least AIX 5.1 and FreeBSD 6.0.
|
|
|
|
.SH BUGS
|
|
|
|
The \fBrpmatch\fP() implementation looks at only the first character
|
|
|
|
of \fIresponse\fP. As a consequence, "nyes" returns 0, and
|
|
|
|
"ynever; not in a million years" returns 1.
|
|
|
|
It would be preferable to accept input strings much more
|
2006-05-18 21:48:40 +00:00
|
|
|
strictly, for example (using the extended regular
|
|
|
|
expression notation described in \fBregex\fP(7)):
|
2006-05-22 08:53:01 +00:00
|
|
|
\fB^([yY]|yes|YES)$\fP and \fB^([nN]|no|NO)$\fP.
|
2006-05-22 19:59:23 +00:00
|
|
|
.SH EXAMPLE
|
2006-05-12 18:49:41 +00:00
|
|
|
The following program displays the results when
|
|
|
|
.BR rpmatch ()
|
|
|
|
is applied to the string given in the program's command-line argument.
|
|
|
|
.nf
|
|
|
|
|
|
|
|
#define _SVID_SOURCE
|
|
|
|
#include <locale.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
int
|
|
|
|
main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
if (argc != 2 || strcmp(argv[1], "--help") == 0) {
|
|
|
|
fprintf(stderr, "%s response\\n", argv[0]);
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
}
|
|
|
|
|
|
|
|
setlocale(LC_ALL, "");
|
|
|
|
printf("rpmatch() returns: %d\\n", rpmatch(argv[1]));
|
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
}
|
|
|
|
.fi
|
|
|
|
.SH SEE ALSO
|
|
|
|
.BR regcomp (3),
|
|
|
|
.BR fgets (3),
|
|
|
|
.BR getline (3),
|
|
|
|
.BR nl_langinfo (3),
|
|
|
|
.BR setlocale (3)
|