MCPcopy Create free account
hub / github.com/NetHack/NetHack / yn_key

Function yn_key

win/X11/winX.c:2174–2247  ·  view source on GitHub ↗

* Called when we get a key press event on a yn window. */ ARGSUSED */

Source from the content-addressed store, hash-verified

2172 */
2173/* ARGSUSED */
2174static void
2175yn_key(Widget w, XEvent *event, String *params, Cardinal *num_params)
2176{
2177 char ch;
2178
2179 if (appResources.slow && !input_func)
2180 map_input(w, event, params, num_params);
2181
2182 ch = key_event_to_char((XKeyEvent *) event);
2183
2184 if (ch == '\0') { /* don't accept nul char or modifier event */
2185 /* no bell */
2186 return;
2187 }
2188
2189 if (!yn_choices /* accept any input */
2190 || (yn_no_default && (ch == '\033' || strchr(yn_quitchars, ch)))) {
2191 yn_return = ch;
2192 } else {
2193 if (!yn_preserve_case)
2194 ch = lowc(ch); /* move to lower case */
2195
2196 if (ch == '\033') {
2197 yn_getting_num = FALSE;
2198 yn_return = yn_esc_map;
2199 } else if (strchr(yn_quitchars, ch)) {
2200 yn_return = yn_def;
2201 } else if (strchr(yn_choices, ch)) {
2202 if (ch == '#') {
2203 if (yn_getting_num) { /* don't select again */
2204 X11_nhbell();
2205 return;
2206 }
2207 yn_getting_num = TRUE;
2208 yn_ndigits = 0;
2209 yn_val = 0;
2210 return; /* wait for more input */
2211 }
2212 yn_return = ch;
2213 if (ch != 'y')
2214 yn_getting_num = FALSE;
2215 } else {
2216 if (yn_getting_num) {
2217 if (digit(ch)) {
2218 long dgt = (long) (ch - '0');
2219
2220 yn_ndigits++;
2221 /* yn_val = (10 * yn_val) + (ch - '0'); */
2222 yn_val = AppendLongDigit(yn_val, dgt);
2223 if (yn_val < 0L) {
2224 yn_ndigits = 0;
2225 yn_val = 0;
2226 }
2227 return; /* wait for more input */
2228 }
2229 if (yn_ndigits && (ch == '\b' || ch == 127 /*DEL*/)) {
2230 yn_ndigits--;
2231 yn_val = yn_val / 10;

Callers

nothing calls this directly

Calls 5

map_inputFunction · 0.85
key_event_to_charFunction · 0.85
X11_nhbellFunction · 0.85
digitFunction · 0.85
lowcFunction · 0.50

Tested by

no test coverage detected