Fix debian bug#543530
[gnupg.git] / common / yesno.c
bloba7131b7d55d21c93c185a52dfafdf4652e42e2a8
1 /* yesno.c - Yes/No questions
2 * Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
4 * This file is part of GnuPG.
6 * GnuPG is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * GnuPG is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
20 #include <config.h>
21 #include <stdlib.h>
22 #include <errno.h>
24 #include "i18n.h"
25 #include "util.h"
28 /* Check the string S for a YES or NO answer and take care of
29 localization. If no valid string is given the value of DEF_ANSWER
30 is returned. Returns 1 for yes and 0 for no. */
31 int
32 answer_is_yes_no_default (const char *s, int def_answer)
34 /* TRANSLATORS: See doc/TRANSLATE about this string. */
35 const char *long_yes = _("yes");
36 const char *short_yes = _("yY");
37 /* TRANSLATORS: See doc/TRANSLATE about this string. */
38 const char *long_no = _("no");
39 const char *short_no = _("nN");
41 /* Note: we have to use the local dependent compare here. */
42 if ( match_multistr(long_yes,s) )
43 return 1;
44 if ( *s && strchr( short_yes, *s ) && !s[1] )
45 return 1;
46 /* Test for "no" strings to catch ambiguities for the next test. */
47 if ( match_multistr(long_no,s) )
48 return 0;
49 if ( *s && strchr( short_no, *s ) && !s[1] )
50 return 0;
51 /* Test for the english version (for those who are used to type yes). */
52 if ( !ascii_strcasecmp(s, "yes" ) )
53 return 1;
54 if ( *s && strchr( "yY", *s ) && !s[1] )
55 return 1;
56 return def_answer;
59 int
60 answer_is_yes ( const char *s )
62 return answer_is_yes_no_default(s,0);
65 /****************
66 * Return 1 for yes, -1 for quit, or 0 for no
68 int
69 answer_is_yes_no_quit ( const char *s )
71 /* TRANSLATORS: See doc/TRANSLATE about this string. */
72 const char *long_yes = _("yes");
73 /* TRANSLATORS: See doc/TRANSLATE about this string. */
74 const char *long_no = _("no");
75 /* TRANSLATORS: See doc/TRANSLATE about this string. */
76 const char *long_quit = _("quit");
77 const char *short_yes = _("yY");
78 const char *short_no = _("nN");
79 const char *short_quit = _("qQ");
81 /* Note: we have to use a local dependent compare here. */
82 if ( match_multistr(long_no,s) )
83 return 0;
84 if ( match_multistr(long_yes,s) )
85 return 1;
86 if ( match_multistr(long_quit,s) )
87 return -1;
88 if ( *s && strchr( short_no, *s ) && !s[1] )
89 return 0;
90 if ( *s && strchr( short_yes, *s ) && !s[1] )
91 return 1;
92 if ( *s && strchr( short_quit, *s ) && !s[1] )
93 return -1;
94 /* but not here. */
95 if ( !ascii_strcasecmp(s, "yes" ) )
96 return 1;
97 if ( !ascii_strcasecmp(s, "quit" ) )
98 return -1;
99 if ( *s && strchr( "yY", *s ) && !s[1] )
100 return 1;
101 if ( *s && strchr( "qQ", *s ) && !s[1] )
102 return -1;
103 return 0;
107 Return 1 for okay, 0 for for cancel or DEF_ANSWER for default.
110 answer_is_okay_cancel (const char *s, int def_answer)
112 /* TRANSLATORS: See doc/TRANSLATE about this string. */
113 const char *long_okay = _("okay|okay");
114 /* TRANSLATORS: See doc/TRANSLATE about this string. */
115 const char *long_cancel = _("cancel|cancel");
116 const char *short_okay = _("oO");
117 const char *short_cancel = _("cC");
119 /* Note: We have to use the locale dependent compare. */
120 if ( match_multistr(long_okay,s) )
121 return 1;
122 if ( match_multistr(long_cancel,s) )
123 return 0;
124 if ( *s && strchr( short_okay, *s ) && !s[1] )
125 return 1;
126 if ( *s && strchr( short_cancel, *s ) && !s[1] )
127 return 0;
128 /* Always test for the English values (not locale here). */
129 if ( !ascii_strcasecmp(s, "okay" ) )
130 return 1;
131 if ( !ascii_strcasecmp(s, "ok" ) )
132 return 1;
133 if ( !ascii_strcasecmp(s, "cancel" ) )
134 return 0;
135 if ( *s && strchr( "oO", *s ) && !s[1] )
136 return 1;
137 if ( *s && strchr( "cC", *s ) && !s[1] )
138 return 0;
139 return def_answer;