X-Git-Url: http://git.shiar.nl/netris.git/blobdiff_plain/0e779d807aa1830dde2f4a75117fd16f5627dc76..3b453bab5c990f862a4915ae4e5e4a0e90b167f2:/curses.c diff --git a/curses.c b/curses.c index aab808d..a8af702 100644 --- a/curses.c +++ b/curses.c @@ -38,9 +38,10 @@ #endif 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 }; +static EventGenRec keyGen = { +// NULL, 0, FT_read, STDIN_FILENO, KeyGenFunc, EM_key + NULL, 0, FT_read, STDIN_FILENO, KeyGenFunc, EM_key +}; static int boardYPos[MAX_SCREENS], boardXPos[MAX_SCREENS]; static int boardSize[MAX_SCREENS]; @@ -51,12 +52,12 @@ WINDOW *msgwin; static int haveColor; int PlayerDisp[MAX_SCREENS]; -#define MSG_HEIGHT 64 //max history +#define MSG_HEIGHT 64 //max history char *message[MSG_HEIGHT]; char messages[MSG_HEIGHT][MSG_WIDTH]; -static char *term_vi; /* String to make cursor invisible */ -static char *term_ve; /* String to make cursor visible */ +static char *term_vi; /* String to make cursor invisible */ +static char *term_ve; /* String to make cursor visible */ void InitScreens(void) { @@ -86,14 +87,14 @@ void InitScreens(void) 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_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 } }; //myColorTable int i = 0; @@ -103,38 +104,38 @@ void InitScreens(void) } //I've never worked on a color-changable terminal, so no idea.. for (i = 0; myColorTable[i].type != BT_none; ++i) init_pair(myColorTable[i].type, COLOR_BLACK, - myColorTable[i].color); + myColorTable[i].color); } //haveColor #else haveColor = 0; #endif - AtExit(CleanupScreens); //restore everything when done + AtExit(CleanupScreens); //restore everything when done RestoreSignals(NULL, &oldMask); - cbreak(); //no line buffering + cbreak(); //no line buffering noecho(); -// keypad(stdscr, TRUE); //get arrow/functionkeys 'n stuff +// keypad(stdscr, TRUE); //get arrow/functionkeys 'n stuff OutputTermStr(term_vi, 0); - AddEventGen(&keyGen); //key handler - signal(SIGWINCH, CatchWinCh); //handle window resize + AddEventGen(&keyGen); //key handler + signal(SIGWINCH, CatchWinCh); //handle window resize // ioctl(STDIN_FILENO, KDSKBMODE, K_MEDIUMRAW); - standend(); //normal text + standend(); //normal text memset(messages, 0, sizeof(messages)); //empty messages { int i; for (i = 0; i=messageWidth-3 ? s[x - messageWidth + 3] : ' '); + x >= messageWidth-3 ? s[x - messageWidth + 3] : ' '); else //any character mvwaddch(msgwin, messageHeight - 1, x % (messageWidth-1), c); mvwaddch(msgwin, messageHeight - 1, (x+1) % (messageWidth-1), '_'); } //typing mode wrefresh(msgwin); -} //Messagetype +} void PlotBlock1(int y, int x, unsigned char type) { //display block on screen @@ -472,7 +473,7 @@ void PlotBlock1(int y, int x, unsigned char type) if (Sets.standout) standend(); #endif } //display one brick -} //PlotBlock1 +} void PlotBlock1S(int y, int x, unsigned char type) { //display block small move(y, x); @@ -496,21 +497,21 @@ void PlotBlock1S(int y, int x, unsigned char type) if (Sets.standout) standend(); #endif } //display one brick -} //PlotBlock1S +} void PlotBlock(int scr, int y, int x, unsigned char type) { - if (y >= 0 && y < Players[scr].boardVisible && - x >= 0 && x < Players[scr].boardWidth) { + if (y >= 0 && y < Players[scr].boardVisible + && x >= 0 && x < Players[scr].boardWidth) { if (boardSize[scr] > 1) PlotBlock1(boardYPos[scr] - y, boardXPos[scr] + 2*x, type); else PlotBlock1S(boardYPos[scr] - y, boardXPos[scr] + x, type); } //on screen -} //PlotBlock +} void PlotBlockXY(int y, int x, unsigned char type) { //Draw block at specified position on screen (not on field) PlotBlock1(20 - y, 2 * x, type); -} //PlotBlock +} void ShowScore(int scr, struct _Score score) { //show score stuff @@ -537,7 +538,7 @@ void ShowScore(int scr, struct _Score score) for (i = 7; i <= 10; i++) mvaddstr(i, statusXPos, " "); } //too early to display stats, remove old.. -} //ShowScore +} void FieldMessage(int playa, char *message) { //put a message over playa's field @@ -563,7 +564,7 @@ void FieldMessage(int playa, char *message) for (x = 0; x <= Players[playa].boardWidth; x++) PlotBlock(playa, y, x, GetBlock(playa, y, x)); } //restore field -} //FieldMessage +} void ShowPause(int playa) { //put paused over player's field @@ -584,26 +585,26 @@ void ShowPause(int playa) boardSize[playa] > 1 ? "G A M E O V E R" : "GAME OVER"); else FieldMessage(playa, boardSize[playa] > 1 ? "E M P T Y" : "EMPTY"); -} //ShowPause +} void ShowTime(void) { //display timer mvprintw(statusYPos, statusXPos, "timer %7.0f ", CurTimeval() / 1e6); -} //ShowTime +} void ScheduleFullRedraw(void) { touchwin(stdscr); -} //ScheduleFullRedraw +} void CatchWinCh(int sig) { //handle window resize - endwin(); //exit curses - refresh(); //and reinit display (with different sizes) + endwin(); //exit curses + refresh(); //and reinit display (with different sizes) InitFields(); //manually redraw everything - refresh(); //refresh -} //CatchWinCh + refresh(); //refresh +} static MyEventType KeyGenFunc(EventGenRec *gen, MyEvent *event) { //read keypresses @@ -611,9 +612,5 @@ static MyEventType KeyGenFunc(EventGenRec *gen, MyEvent *event) return E_key; else return E_none; -} //KeyGenFunc +} -/* - * vi: ts=4 ai - * vim: noai si - */