/*
* Netris -- A free networked version of T*tris
- * Copyright (C) 1994,1995,1996 Mark H. Weaver <mhw@netris.org>
+ * Copyright (C) 1994-1996,1999 Mark H. Weaver <mhw@netris.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
- * $Id: curses.c,v 1.32 1996/02/09 08:47:25 mhw Exp $
+ * $Id: curses.c,v 1.33 1999/05/16 06:56:25 mhw Exp $
*/
#include "netris.h"
#include <string.h>
#include <stdlib.h>
+#ifdef NCURSES_VERSION
+# define HAVE_NCURSES
+#endif
+
+#ifdef HAVE_NCURSES
+static struct
+{
+ BlockType type;
+ short color;
+} myColorTable[] =
+{
+ { BT_white, COLOR_WHITE },
+ { BT_blue, COLOR_BLUE },
+ { BT_magenta, COLOR_MAGENTA },
+ { BT_cyan, COLOR_CYAN },
+ { BT_yellow, COLOR_YELLOW },
+ { BT_green, COLOR_GREEN },
+ { BT_red, COLOR_RED },
+ { BT_none, 0 }
+};
+#endif
+
static void PlotBlock1(int scr, int y, int x, BlockType type);
static MyEventType KeyGenFunc(EventGenRec *gen, MyEvent *event);
static int boardYPos[MAX_SCREENS], boardXPos[MAX_SCREENS];
static int statusYPos, statusXPos;
+static int haveColor;
static char *term_vi; /* String to make cursor invisible */
static char *term_ve; /* String to make cursor visible */
GetTermcapInfo();
/*
- * Do this atomically. Otherwise a badly timed Ctrl-C during
- * initialization will leave your terminal in a bad state.
+ * Block signals while initializing curses. Otherwise a badly timed
+ * Ctrl-C during initialization might leave the terminal in a bad state.
*/
BlockSignals(&oldMask, SIGINT, 0);
initscr();
+
+#ifdef CURSES_HACK
+ {
+ extern char *CS;
+
+ CS = 0;
+ }
+#endif
+
+#ifdef HAVE_NCURSES
+ haveColor = colorEnable && has_colors();
+ if (haveColor)
+ {
+ int i = 0;
+
+ start_color();
+ for (i = 0; myColorTable[i].type != BT_none; ++i)
+ init_pair(myColorTable[i].type, COLOR_BLACK,
+ myColorTable[i].color);
+ }
+#else
+ haveColor = 0;
+#endif
+
AtExit(CleanupScreens);
RestoreSignals(NULL, &oldMask);
move(0, 0);
addstr("Netris ");
addstr(version_string);
- addstr(" (C) 1994,1995,1996 Mark H. Weaver "
+ addstr(" (C) 1994-1996,1999 Mark H. Weaver "
"\"netris -h\" for more info");
statusYPos = 22;
statusXPos = 0;
static void PlotBlock1(int scr, int y, int x, BlockType type)
{
+ int colorIndex = abs(type);
+
move(boardYPos[scr] - y, boardXPos[scr] + 2 * x);
- switch (type) {
- case BT_none:
- addstr(" ");
- break;
- case -BT_piece1:
- if (standoutEnable)
- standout();
- addstr("$$");
- if (standoutEnable)
- standend();
- break;
- case BT_piece1:
- if (standoutEnable)
+
+ if (type == BT_none)
+ addstr(" ");
+ else
+ {
+ if (standoutEnable)
+ {
+#ifdef HAVE_NCURSES
+ if (haveColor)
+ attrset(COLOR_PAIR(colorIndex));
+ else
+#endif
standout();
- addstr("[]");
- if (standoutEnable)
- standend();
- break;
- default:
- assert(0);
+ }
+
+ addstr(type > 0 ? "[]" : "$$");
+ standend();
}
}