]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - tetris/screen.c
cgram: use ASCII-only implementation of <ctype.h> functions
[bsdgames-darwin.git] / tetris / screen.c
index 50a019d3e3c3f978de481ba880b4daa20d5683d3..d723b54efeae4152483c8b155014b8ffab0e47d1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: screen.c,v 1.28 2014/06/11 16:47:39 christos Exp $     */
+/*     $NetBSD: screen.c,v 1.33 2017/03/20 22:05:27 christos Exp $     */
 
 /*-
  * Copyright (c) 1992, 1993
@@ -50,6 +50,8 @@
 #include <termios.h>
 #include <unistd.h>
 
+#include <termcap.h>
+
 #ifndef sigmask
 #define sigmask(s) (1 << ((s) - 1))
 #endif
@@ -98,10 +100,16 @@ static void
 setcolor(int c)
 {
        char *buf;
+       char monochrome[] = "\033[0m";
+       if (nocolor == 1)
+               return;
        if (set_a_foreground == NULL)
                return;
 
-       buf = tiparm(set_a_foreground, c == 7 ? 0 : c);
+       if (c == 0 || c == 7)
+               buf = monochrome;
+       else
+               buf = tiparm(set_a_foreground, c);
        if (buf != NULL)
                putpad(buf);
 }
@@ -191,6 +199,7 @@ scr_set(void)
                    MINCOLS, MINROWS);
                stop("");       /* stop() supplies \n */
        }
+       Offset = (Rows - D_LAST + D_FIRST - 2) / 2;
        if (tcgetattr(0, &oldtt) < 0)
                stop("tcgetattr() fails");
        newtt = oldtt;
@@ -205,10 +214,11 @@ scr_set(void)
         * We made it.  We are now in screen mode, modulo TIstr
         * (which we will fix immediately).
         */
-       if (enter_ca_mode)
-               putstr(enter_ca_mode);
-       if (cursor_invisible)
-               putstr(cursor_invisible);
+       const char *tstr;
+       if ((tstr = enter_ca_mode) != NULL)
+               putstr(tstr);
+       if ((tstr = cursor_invisible) != NULL)
+               putstr(tstr);
        if (tstp != SIG_IGN)
                (void) signal(SIGTSTP, scr_stop);
        if (ttou != SIG_IGN)
@@ -232,15 +242,16 @@ scr_end(void)
        sigaddset(&nsigset, SIGTTOU);
        (void) sigprocmask(SIG_BLOCK, &nsigset, &osigset);
        /* move cursor to last line */
-       if (cursor_to_ll)
-               putstr(cursor_to_ll);
+       const char *tstr;
+       if ((tstr = cursor_to_ll) != NULL)
+               putstr(tstr);
        else
                moveto(Rows - 1, 0);
        /* exit screen mode */
-       if (exit_ca_mode)
-               putstr(exit_ca_mode);
-       if (cursor_normal)
-               putstr(cursor_normal);
+       if ((tstr = exit_ca_mode) != NULL)
+               putstr(tstr);
+       if ((tstr = cursor_normal) != NULL)
+               putstr(tstr);
        (void) fflush(stdout);
        (void) tcsetattr(0, TCSADRAIN, &oldtt);
        isset = 0;
@@ -301,6 +312,7 @@ scr_update(void)
                        putpad(cursor_home);
                else
                        moveto(0, 0);
+               setcolor(0);
                (void) printf("Score: %d", score);
                curscore = score;
        }
@@ -323,8 +335,8 @@ scr_update(void)
                putstr("Next shape:");
                                                
                /* draw */
-               putpad(enter_standout_mode);
                setcolor(nextshape->color);
+               putpad(enter_standout_mode);
                moveto(r, 2*c);
                putstr("  ");
                for(i=0; i<3; i++) {
@@ -353,16 +365,16 @@ scr_update(void)
                                        putpad(exit_standout_mode);
                                        cur_so = 0;
                                }
-                               moveto(RTOD(j), CTOD(i));
+                               moveto(RTOD(j + Offset), CTOD(i));
                        }
                        if (enter_standout_mode) {
                                if (so != cur_so) {
+                                       setcolor(so);
                                        putpad(so ?
                                            enter_standout_mode :
                                            exit_standout_mode);
                                        cur_so = so;
                                }
-                               setcolor(so);
 #ifdef DEBUG
                                char buf[3];
                                snprintf(buf, sizeof(buf), "%d%d", so, so);