]> granicus.if.org Git - nethack/commitdiff
extra additional paranoia (trunk only)
authornethack.rankin <nethack.rankin>
Fri, 29 Apr 2011 02:06:11 +0000 (02:06 +0000)
committernethack.rankin <nethack.rankin>
Fri, 29 Apr 2011 02:06:11 +0000 (02:06 +0000)
     When requiring "no" to reject in addition to "yes" to confirm one
of the paranoid_confirmation prompts, only loop a handful of times before
giving up and rejecting (in case there's some hangup-like situation that
isn't hangup enough to switch over to using ESC for further input).
There's no "that's enough tries" feedback; after 6 tries it just stops
asking for a yes or no answer and behaves as if it had gotten no.

src/cmd.c

index 72190c1f4c9639502663851721a21845ae2b28ca..0593a67f756d9831eb6d4b92e1bce7c15531f5e3 100644 (file)
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -3650,20 +3650,22 @@ paranoid_query(be_paranoid, prompt)
 boolean be_paranoid;
 const char *prompt;
 {
-       char qbuf[QBUFSZ], ans[BUFSZ];
-       const char *responsetype, *promptprefix = "";
        boolean confirmed_ok;
 
        /* when paranoid, player must respond with "yes" rather than just 'y'
           to give the go-ahead for this query; default is "no" unless the
           ParanoidConfirm flag is set in which case there's no default */
        if (be_paranoid) {
+           char qbuf[QBUFSZ], ans[BUFSZ];
+           const char *promptprefix = "",
+               *responsetype = ParanoidConfirm ? "(yes|no)" : "(yes) [no]";
+           int trylimit = 6; /* 1 normal, 5 more with "Yes or No:" prefix */
+
            /* in addition to being paranoid about this particular
               query, we might be even more paranoid about all paranoia
               responses (ie, ParanoidConfirm is set) in which case we
               require "no" to reject in addition to "yes" to confirm
               (except we won't loop if respose is ESC; it means no) */
-           responsetype = ParanoidConfirm ? "(yes|no)" : "(yes) [no]";
            do {
                Sprintf(qbuf, "%s%s %s", promptprefix, prompt, responsetype);
                getlin(qbuf, ans);
@@ -3671,7 +3673,7 @@ const char *prompt;
                confirmed_ok = !strcmpi(ans, "yes");
                if (confirmed_ok || *ans == '\033') break;
                promptprefix = "\"Yes\" or \"No\": ";
-           } while (ParanoidConfirm && strcmpi(ans, "no"));
+           } while (ParanoidConfirm && strcmpi(ans, "no") && --trylimit);
        } else
            confirmed_ok = (yn(prompt) == 'y');