#include "curses.h"
#include "util.h"
#include "board.h"
-#include "msg.en.h"
+#include "msg.h"
#ifdef NCURSES_VERSION
# define HAVE_NCURSES
static MyEventType KeyGenFunc(EventGenRec *gen, MyEvent *event);
static EventGenRec keyGen = {
-// NULL, 0, FT_read, STDIN_FILENO, KeyGenFunc, EM_key
NULL, 0, FT_read, STDIN_FILENO, KeyGenFunc, EM_key
};
* Ctrl-C during initialization might leave the terminal in a bad state.
*/
BlockSignals(&oldMask, SIGINT, 0);
- initscr(); //start curses
+ initscr(); //start curses
#ifdef CURSES_HACK
{
char 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 }
+ { BT_T, COLOR_WHITE },
+ { BT_I, COLOR_BLUE },
+ { BT_O, COLOR_MAGENTA },
+ { BT_L, COLOR_CYAN },
+ { BT_J, COLOR_YELLOW },
+ { BT_S, COLOR_GREEN },
+ { BT_Z, COLOR_RED },
+ { BT_none, 0 }
}; //myColorTable
int i = 0;
void DrawTitle(void)
{
int rows, cols;
- char s[255];
+ char *s;
#ifdef HAVE_NCURSES
attrset(A_REVERSE);
standout();
#endif
getmaxyx(stdscr, rows, cols);
- sprintf(s, " NETRIS %s", version_string);
- memset(&s[strlen(s)], ' ', 254 - strlen(s));
- if (cols > 56 + strlen(version_string))
- memcpy(&s[cols - 48],
- "(C)1994-1996,1999 Mark H. Weaver, (C)2002 Shiar \0", 49);
- else memcpy(&s[cols], "\0", 1);
+ s = malloc(cols + 1);
+ sprintf(s, " " MSG_TITLE " %s", version_string);
+ const int titlelen = strlen(s);
+ memset(&s[titlelen], ' ', cols - titlelen); // pad
+ if (cols > titlelen + 1 + strlen(MSG_TITLESUB))
+ memcpy(&s[cols - 1 - strlen(MSG_TITLESUB)], MSG_TITLESUB, sizeof(MSG_TITLESUB) - 1);
+ memcpy(&s[cols], "\0", 1);
mvaddstr(0, 0, s);
+ free(s);
standend(); //normal text
}
messageXPos = 2;
messageYPos = 24;
- if ((messageWidth = x - messageXPos - 2) > MSG_WIDTH) messageWidth = MSG_WIDTH;
- if ((messageHeight = y - messageYPos - 1) > MSG_HEIGHT) messageHeight = MSG_HEIGHT;
- if (messageHeight <= 0) {
- messageWidth = 27;
+ messageWidth = MIN(x - messageXPos - 2, MSG_WIDTH);
+ messageHeight = MIN(y - messageYPos - 1, MSG_HEIGHT);
+ if (messageHeight < 3) {
+ messageWidth = MIN(x - statusXPos - 18, 27);
messageHeight = y - 3;
messageXPos = statusXPos + 16;
messageYPos = 2;
DrawBox(messageXPos - 2, messageYPos - 1,
messageXPos + messageWidth + 1, messageYPos+messageHeight);
if (msgwin = subwin(stdscr, messageHeight, messageWidth,
- messageYPos, messageXPos))
+ messageYPos, messageXPos))
scrollok(msgwin, 1); //allow scrolling
wmove(msgwin, messageHeight - 2, 0);
for (scr = messageHeight - 2; scr >= 0; scr--) //display message history
DrawField(scr);
}
-void CleanupScreen(int scr)
-{
-}
-
void DisplayMessage(char *p)
{
char s[MSG_WIDTH];
while (psearch = strchr(p, '\\')) {
*psearch = '\0';
waddstr(msgwin, p);
- c = atoi(++psearch)+1;
+ c = atoi(++psearch) + 1;
if (haveColor) wattrset(msgwin, A_REVERSE | COLOR_PAIR(c));
p = ++psearch;
} //search for color escapes (\)
case 16: addch(ACS_ULCORNER); addch(ACS_URCORNER); break;//top end
case 32: addch(ACS_LLCORNER); addch(ACS_LRCORNER); break;//bottom end
case 48: addch(ACS_VLINE); addch(ACS_VLINE); break; //vertical middle
- case 64: addch(' '); addch(ACS_HLINE); break; //left end
+ case 64: addch('['); addch(ACS_HLINE); break; //left end
case 80: addch(ACS_ULCORNER); addch(ACS_TTEE); break; //top left corner
case 96: addch(ACS_LLCORNER); addch(ACS_BTEE); break; //bottom left corner
case 112: addch(ACS_LTEE); addch(ACS_PLUS); break; //vertical+right
- case 128: addch(ACS_HLINE); addch(' '); break; //right end
+ case 128: addch(ACS_HLINE); addch(']'); break; //right end
case 144: addch(ACS_TTEE); addch(ACS_URCORNER); break; //top right corner
case 160: addch(ACS_BTEE); addch(ACS_LRCORNER); break; //bottom right corner
case 176: addch(ACS_PLUS); addch(ACS_RTEE); break; //vertical+left
mvaddstr(13, statusXPos, MSG_NEXT " ");
mvaddstr(14, statusXPos + 5, " ");
- ShapeIterate(Players[scr].nextShape, scr,
- 8, statusXPos/2 + (Players[scr].nextShape/4 == 5 ? 3 : 4),
+ ShapeIterate(Players[scr].nextShape, scr, 8,
+ statusXPos/2 + (Players[scr].nextShape/4 == 5 ? 3 : 4),
GlanceFunc); //draw; stick one more to the left
mvprintw(3, statusXPos, MSG_LEVEL, score.level);
mvprintw(5, statusXPos, MSG_SCORE, score.score);