]> granicus.if.org Git - nethack/commitdiff
Improved readability of topline state management.
authorBart House <bart@barthouse.com>
Thu, 11 Jul 2019 05:16:08 +0000 (22:16 -0700)
committerBart House <bart@barthouse.com>
Thu, 11 Jul 2019 05:16:08 +0000 (22:16 -0700)
include/decl.h
win/tty/getline.c
win/tty/topl.c
win/tty/wintty.c

index 5ebaa326e6181daab3ba7b935f96208b80042b2f..6c0f9721ccc778f6c0900fd40ad16da14bebde99 100644 (file)
@@ -455,6 +455,12 @@ struct early_opt {
     boolean valallowed;
 };
 
+/* topline states */
+#define TOPLINE_EMPTY          0 /* empty */
+#define TOPLINE_NEED_MORE      1 /* non-empty, need --More-- */
+#define TOPLINE_NON_EMPTY      2 /* non-empty, no --More-- required */
+#define TOPLINE_SPECIAL_PROMPT 3 /* special prompt state */
+
 #undef E
 
 #endif /* DECL_H */
index f4894a950bbee722412e0dae60a8257ace951018..a3abfcc53a896690ba220cc7b0dc435a29d414c7 100644 (file)
@@ -52,10 +52,10 @@ getlin_hook_proc hook;
     struct WinDesc *cw = wins[WIN_MESSAGE];
     boolean doprev = 0;
 
-    if (ttyDisplay->toplin == 1 && !(cw->flags & WIN_STOP))
+    if (ttyDisplay->toplin == TOPLINE_NEED_MORE && !(cw->flags & WIN_STOP))
         more();
     cw->flags &= ~WIN_STOP;
-    ttyDisplay->toplin = 3; /* special prompt state */
+    ttyDisplay->toplin = TOPLINE_SPECIAL_PROMPT;
     ttyDisplay->inread++;
 
     /* issue the prompt */
@@ -193,7 +193,7 @@ getlin_hook_proc hook;
         } else
             tty_nhbell();
     }
-    ttyDisplay->toplin = 2; /* nonempty, no --More-- required */
+    ttyDisplay->toplin = TOPLINE_NON_EMPTY;
     ttyDisplay->inread--;
     clear_nhwindow(WIN_MESSAGE); /* clean up after ourselves */
 
index 62fb3eb539845e3c7cd0b9498d4752c481f730bc..d2a889cc97e7174353f10ffe2fece2665b36e99a 100644 (file)
@@ -138,7 +138,7 @@ const char *str;
     end_glyphout(); /* in case message printed during graphics output */
     putsyms(str);
     cl_end();
-    ttyDisplay->toplin = 1;
+    ttyDisplay->toplin = TOPLINE_NEED_MORE;
     if (ttyDisplay->cury && otoplin != 3)
         more();
 }
@@ -151,7 +151,7 @@ const char *str;
     struct WinDesc *cw = wins[WIN_MESSAGE];
 
     if (!(cw->flags & WIN_STOP)) {
-        if (ttyDisplay->cury && ttyDisplay->toplin == 2)
+        if (ttyDisplay->cury && ttyDisplay->toplin == TOPLINE_NON_EMPTY)
             tty_clear_nhwindow(WIN_MESSAGE);
 
         cw->curx = cw->cury = 0;
@@ -159,8 +159,8 @@ const char *str;
         cl_end();
         addtopl(str);
 
-        if (ttyDisplay->cury && ttyDisplay->toplin != 3)
-            ttyDisplay->toplin = 2;
+        if (ttyDisplay->cury && ttyDisplay->toplin != TOPLINE_SPECIAL_PROMPT)
+            ttyDisplay->toplin = TOPLINE_NON_EMPTY;
     }
 }
 
@@ -196,7 +196,7 @@ const char *s;
     tty_curs(BASE_WINDOW, cw->curx + 1, cw->cury);
     putsyms(s);
     cl_end();
-    ttyDisplay->toplin = 1;
+    ttyDisplay->toplin = TOPLINE_NEED_MORE;
 }
 
 void
@@ -236,7 +236,7 @@ more()
         home();
         cl_end();
     }
-    ttyDisplay->toplin = 0;
+    ttyDisplay->toplin = TOPLINE_EMPTY;
     ttyDisplay->inmore = 0;
 }
 
@@ -252,7 +252,7 @@ register const char *bp;
     /* If there is room on the line, print message on same line */
     /* But messages like "You die..." deserve their own line */
     n0 = strlen(bp);
-    if ((ttyDisplay->toplin == 1 || (cw->flags & WIN_STOP))
+    if ((ttyDisplay->toplin == TOPLINE_NEED_MORE || (cw->flags & WIN_STOP))
         && cw->cury == 0
         && n0 + (int) strlen(toplines) + 3 < CO - 8 /* room for --More-- */
         && (notdied = strncmp(bp, "You die", 7)) != 0) {
@@ -263,9 +263,9 @@ register const char *bp;
             addtopl(bp);
         return;
     } else if (!(cw->flags & WIN_STOP)) {
-        if (ttyDisplay->toplin == 1) {
+        if (ttyDisplay->toplin == TOPLINE_NEED_MORE) {
             more();
-        } else if (cw->cury) { /* for when flags.toplin == 2 && cury > 1 */
+        } else if (cw->cury) { /* for toplin == TOPLINE_NON_EMPTY && cury > 1 */
             docorner(1, cw->cury + 1); /* reset cury = 0 if redraw screen */
             cw->curx = cw->cury = 0;   /* from home--cls() & docorner(1,n) */
         }
@@ -381,10 +381,10 @@ char def;
     char prompt[BUFSZ];
 
     yn_number = 0L;
-    if (ttyDisplay->toplin == 1 && !(cw->flags & WIN_STOP))
+    if (ttyDisplay->toplin == TOPLINE_NEED_MORE && !(cw->flags & WIN_STOP))
         more();
     cw->flags &= ~WIN_STOP;
-    ttyDisplay->toplin = 3; /* special prompt state */
+    ttyDisplay->toplin = TOPLINE_SPECIAL_PROMPT;
     ttyDisplay->inread++;
     if (resp) {
         char *rb, respbuf[QBUFSZ];
@@ -531,7 +531,7 @@ char def;
     dumplogmsg(toplines);
 #endif
     ttyDisplay->inread--;
-    ttyDisplay->toplin = 2;
+    ttyDisplay->toplin = TOPLINE_NON_EMPTY;
     if (ttyDisplay->intr)
         ttyDisplay->intr--;
     if (wins[WIN_MESSAGE]->cury)
index 1411839da04e0e5845d06f82b36fa09e75318ab2..8ea315ab14205004fe404896cfa77228757186a5 100644 (file)
@@ -332,7 +332,7 @@ int sig_unused UNUSED;
             new_status_window();
             if (u.ux) {
                 i = ttyDisplay->toplin;
-                ttyDisplay->toplin = 0;
+                ttyDisplay->toplin = TOPLINE_EMPTY;
                 docrt();
                 bot();
                 ttyDisplay->toplin = i;
@@ -420,7 +420,7 @@ char **argv UNUSED;
 
     /* set up tty descriptor */
     ttyDisplay = (struct DisplayDesc *) alloc(sizeof (struct DisplayDesc));
-    ttyDisplay->toplin = 0;
+    ttyDisplay->toplin = TOPLINE_EMPTY;
     ttyDisplay->rows = hgt;
     ttyDisplay->cols = wid;
     ttyDisplay->curx = ttyDisplay->cury = 0;
@@ -1621,12 +1621,12 @@ winid window;
 
     switch (cw->type) {
     case NHW_MESSAGE:
-        if (ttyDisplay->toplin) {
+        if (ttyDisplay->toplin != TOPLINE_EMPTY) {
             home();
             cl_end();
             if (cw->cury)
                 docorner(1, cw->cury + 1);
-            ttyDisplay->toplin = 0;
+            ttyDisplay->toplin = TOPLINE_EMPTY;
         }
         break;
     case NHW_STATUS:
@@ -2317,12 +2317,13 @@ boolean blocking; /* with ttys, all windows are blocking */
 
     switch (cw->type) {
     case NHW_MESSAGE:
-        if (ttyDisplay->toplin == 1) {
+        if (ttyDisplay->toplin == TOPLINE_NEED_MORE) {
             more();
-            ttyDisplay->toplin = 1; /* more resets this */
+            ttyDisplay->toplin = TOPLINE_NEED_MORE; /* more resets this */
             tty_clear_nhwindow(window);
+            /* nhassert(ttyDisplay->toplin == TOPLINE_EMPTY); */
         } else
-            ttyDisplay->toplin = 0;
+            ttyDisplay->toplin = TOPLINE_EMPTY;
         cw->curx = cw->cury = 0;
         if (!cw->active)
             iflags.window_inited = TRUE;
@@ -2330,8 +2331,8 @@ boolean blocking; /* with ttys, all windows are blocking */
     case NHW_MAP:
         end_glyphout();
         if (blocking) {
-            if (!ttyDisplay->toplin)
-                ttyDisplay->toplin = 1;
+            if (ttyDisplay->toplin != TOPLINE_EMPTY)
+                ttyDisplay->toplin = TOPLINE_NEED_MORE;
             tty_display_nhwindow(WIN_MESSAGE, TRUE);
             return;
         }
@@ -2361,7 +2362,7 @@ boolean blocking; /* with ttys, all windows are blocking */
             cw->offx = 0;
         if (cw->type == NHW_MENU)
             cw->offy = 0;
-        if (ttyDisplay->toplin == 1)
+        if (ttyDisplay->toplin == TOPLINE_NEED_MORE)
             tty_display_nhwindow(WIN_MESSAGE, TRUE);
 #ifdef H2344_BROKEN
         if (cw->maxrow >= (int) ttyDisplay->rows
@@ -2377,7 +2378,7 @@ boolean blocking; /* with ttys, all windows are blocking */
                 cl_eos();
             } else
                 clear_screen();
-            ttyDisplay->toplin = 0;
+            ttyDisplay->toplin = TOPLINE_EMPTY;
         } else {
             if (WIN_MESSAGE != WIN_ERR)
                 tty_clear_nhwindow(WIN_MESSAGE);
@@ -2406,8 +2407,9 @@ winid window;
 
     switch (cw->type) {
     case NHW_MESSAGE:
-        if (ttyDisplay->toplin)
+        if (ttyDisplay->toplin != TOPLINE_EMPTY)
             tty_display_nhwindow(WIN_MESSAGE, TRUE);
+        /* nhassert(ttyDisplay->toplin == TOPLINE_EMPTY); */
         /*FALLTHRU*/
     case NHW_STATUS:
     case NHW_BASE:
@@ -3158,10 +3160,11 @@ const char *mesg;
        response to a prompt, we'll assume that the display is up to date */
     tty_putstr(WIN_MESSAGE, 0, mesg);
     /* if `mesg' didn't wrap (triggering --More--), force --More-- now */
-    if (ttyDisplay->toplin == 1) {
+    if (ttyDisplay->toplin == TOPLINE_NEED_MORE) {
         more();
-        ttyDisplay->toplin = 1; /* more resets this */
+        ttyDisplay->toplin = TOPLINE_NEED_MORE; /* more resets this */
         tty_clear_nhwindow(WIN_MESSAGE);
+        /* nhassert(ttyDisplay->toplin == TOPLINE_EMPTY); */
     }
     /* normally <ESC> means skip further messages, but in this case
        it means cancel the current prompt; any other messages should
@@ -3201,7 +3204,7 @@ tty_wait_synch()
             (void) fflush(stdout);
         } else if (ttyDisplay->inread > program_state.gameover) {
             /* this can only happen if we were reading and got interrupted */
-            ttyDisplay->toplin = 3;
+            ttyDisplay->toplin = TOPLINE_SPECIAL_PROMPT;
             /* do this twice; 1st time gets the Quit? message again */
             (void) tty_doprev_message();
             (void) tty_doprev_message();
@@ -3530,8 +3533,9 @@ tty_nhgetch()
         i = '\033'; /* map NUL to ESC since nethack doesn't expect NUL */
     else if (i == EOF)
         i = '\033'; /* same for EOF */
-    if (ttyDisplay && ttyDisplay->toplin == 1)
-        ttyDisplay->toplin = 2;
+    /* topline has been seen - we can clear need for more */
+    if (ttyDisplay && ttyDisplay->toplin == TOPLINE_NEED_MORE)
+        ttyDisplay->toplin = TOPLINE_NON_EMPTY;
 #ifdef TTY_TILES_ESCCODES
     {
         /* hack to force output of the window select code */
@@ -3610,8 +3614,9 @@ tty_nhgetch()
         i = '\033'; /* map NUL to ESC since nethack doesn't expect NUL */
     else if (i == EOF)
         i = '\033'; /* same for EOF */
-    if (ttyDisplay && ttyDisplay->toplin == 1)
-        ttyDisplay->toplin = 2;
+    /* topline has been seen - we can clear need for more */
+    if (ttyDisplay && ttyDisplay->toplin == TOPLINE_NEED_MORE)
+        ttyDisplay->toplin = TOPLINE_NON_EMPTY;
 #ifdef TTY_TILES_ESCCODES
     {
         /* hack to force output of the window select code */
@@ -3656,8 +3661,9 @@ int *x, *y, *mod;
     i = ntposkey(x, y, mod);
     if (!i && mod && (*mod == 0 || *mod == EOF))
         i = '\033'; /* map NUL or EOF to ESC, nethack doesn't expect either */
-    if (ttyDisplay && ttyDisplay->toplin == 1)
-        ttyDisplay->toplin = 2;
+    /* topline has been seen - we can clear need for more */
+    if (ttyDisplay && ttyDisplay->toplin == TOPLINE_NEED_MORE)
+        ttyDisplay->toplin = TOPLINE_NON_EMPTY;
 #else /* !WIN32CON */
     nhUse(x);
     nhUse(y);