Mercurial > projects > rantaiwarna
annotate rantaiwarna.c @ 10:4f6bf50dbc4a default tip
Detect the OS and configure build flags and libraries automatically
author | Guido Berhoerster <guido+rantaiwarna@berhoerster.name> |
---|---|
date | Tue, 13 Sep 2016 18:19:44 +0200 |
parents | a9a7ad180c3b |
children |
rev | line source |
---|---|
0
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1 /* |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
2 * Copyright (C) 2014 Guido Berhoerster <guido+rantaiwarna@berhoerster.name> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
3 * |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
4 * Permission is hereby granted, free of charge, to any person obtaining |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
5 * a copy of this software and associated documentation files (the |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
6 * "Software"), to deal in the Software without restriction, including |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
7 * without limitation the rights to use, copy, modify, merge, publish, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
8 * distribute, sublicense, and/or sell copies of the Software, and to |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
9 * permit persons to whom the Software is furnished to do so, subject to |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
10 * the following conditions: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
11 * |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
12 * The above copyright notice and this permission notice shall be included |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
13 * in all copies or substantial portions of the Software. |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
14 * |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
19 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
21 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
22 */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
23 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
24 #include <stdlib.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
25 #include <stdio.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
26 #include <signal.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
27 #include <errno.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
28 #include <string.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
29 #include <stdint.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
30 #include <inttypes.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
31 #include <math.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
32 #include <time.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
33 #include <sys/time.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
34 #include <unistd.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
35 #include <fcntl.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
36 #include <locale.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
37 #include <curses.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
38 #include <term.h> |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
39 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
40 #include "rantaiwarna.h" |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
41 #include "compat.h" |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
42 #include "util.h" |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
43 #include "board.h" |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
44 #include "highscore.h" |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
45 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
46 #define EXIT_USAGE 2 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
47 #define HEIGHT_MAX INT16_MAX |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
48 #define HEIGHT_MIN 5 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
49 #define WIDTH_MAX INT16_MAX |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
50 #define WIDTH_MIN 5 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
51 #define DEFAULT_WIDTH 20 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
52 #define DEFAULT_HEIGHT 10 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
53 #define COLORS_MAX 6 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
54 #define DEFAULT_COLORS 4 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
55 #define ELEMENT_WIDTH 2 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
56 #define SCORE_WIN_WIDTH 6 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
57 #define HIGHSCORE_FMT "%2d) %s %6" PRId32 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
58 #define TIMESTR_MAX_SIZE 64 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
59 #define MESSAGE_MAX_SIZE 64 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
60 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
61 enum { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
62 PIPE_R_FD = 0, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
63 PIPE_W_FD |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
64 }; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
65 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
66 enum { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
67 GAME_SCREEN, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
68 HIGHSCORE_SCREEN, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
69 HELP_SCREEN |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
70 }; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
71 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
72 struct rantaiwarna_ctx { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
73 struct board_ctx *board; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
74 struct highscore_entry *highscore; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
75 WINDOW *game_header_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
76 WINDOW *message_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
77 WINDOW *score_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
78 WINDOW *board_container_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
79 WINDOW *board_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
80 WINDOW *highscore_pad; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
81 WINDOW *highscore_header_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
82 WINDOW *help_pad; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
83 WINDOW *help_header_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
84 WINDOW *input_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
85 char message[MESSAGE_MAX_SIZE]; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
86 char dummy_timestr[TIMESTR_MAX_SIZE]; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
87 const chtype *elements_chs; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
88 int board_cursor_y; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
89 int board_cursor_x; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
90 int highscore_pos_y; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
91 int highscore_pos_x; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
92 int help_pos_y; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
93 int help_pos_x; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
94 int active_screen; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
95 bool use_colors; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
96 bool too_small; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
97 }; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
98 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
99 char *progname; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
100 bool curses_init = FALSE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
101 static int signal_pipe_fd[2] = { -1, -1 }; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
102 static const chtype elements_chs[COLORS_MAX] = { ' ', '@', '#', '$', 'X', 'O' }; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
103 static const char *help_strs[] = { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
104 "rantaiwarna is a tile-matching puzzle game which is also known under " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
105 "the names ", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
106 "\"Chain Shot!\" or \"SameGame\". It is played on a rectangular board " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
107 "which is ", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
108 "initially filled with elements of several different colors. Two or " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
109 "more ", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
110 "adjacent elements of the same color may be eliminated, the score " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
111 "resulting from ", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
112 "the elimination of elements depends on the number of elements " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
113 "eliminated at ", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
114 "once. The goal of the game is to eliminate as many elements as " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
115 "possible until ", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
116 "there are no more adjacent elements of the same color left or the " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
117 "board is ", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
118 "completely cleared. Vertical gaps resulting from the elimination of " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
119 "elements ", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
120 "are filled by sliding down elements from above the gap, column gaps " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
121 "are filled ", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
122 "by sliding columns on the right side of the column gap to the left.", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
123 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
124 "Game Screen Commands", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
125 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
126 " Arrow up, right, down, left", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
127 " move the cursor around", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
128 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
129 " h, j, k, l", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
130 " same as arrow keys", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
131 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
132 " Space", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
133 " eliminate elements under the cursor", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
134 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
135 " Enter", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
136 " same as Space", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
137 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
138 " Left mouse button", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
139 " same as Space", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
140 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
141 " Ctrl+l", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
142 " refresh the screen", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
143 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
144 " H", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
145 " switch to the help screen", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
146 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
147 " i", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
148 " switch to the highscore screen", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
149 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
150 " n", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
151 " start a new game", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
152 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
153 " q", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
154 " quit the game", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
155 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
156 "Highscore Screen Commands", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
157 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
158 " Arrow up, right, down, left", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
159 " scroll on line up or down or one character to the left or" |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
160 "right", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
161 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
162 " h, j, k, l", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
163 " same as arrow keys", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
164 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
165 " Space", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
166 " scroll down one line", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
167 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
168 " Enter", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
169 " same as Space", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
170 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
171 " Page up, Page down", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
172 " scroll up or down one screenful", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
173 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
174 " b, f", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
175 " same as Page up or Page down", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
176 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
177 " Ctrl+b, Ctrl+f", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
178 " same as Page up or Page down", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
179 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
180 " Home, End", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
181 " go to the first or last line", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
182 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
183 " g, G,", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
184 " same as Home or End", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
185 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
186 " Ctrl+l", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
187 " refresh the screen", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
188 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
189 " a", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
190 " switch to the game screen", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
191 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
192 " H", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
193 " switch to the help screen", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
194 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
195 " q", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
196 " quit the game", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
197 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
198 "Help Screen Commands", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
199 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
200 " Arrow up, right, down, left", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
201 " scroll on line up or down or one character to the left or " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
202 "right", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
203 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
204 " h, j, k, l", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
205 " same as arrow keys", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
206 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
207 " Space", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
208 " scroll down one line", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
209 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
210 " Enter", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
211 " same as Space", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
212 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
213 " Page up, Page down", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
214 " scroll up or down one screenful", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
215 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
216 " b, f", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
217 " same as Page up or Page down", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
218 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
219 " Ctrl+b, Ctrl+f", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
220 " same as Page up or Page down", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
221 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
222 " Home, End", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
223 " go to the first or last line", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
224 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
225 " g, G,", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
226 " same as Home or End", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
227 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
228 " Ctrl+l", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
229 " refresh the screen", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
230 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
231 " a", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
232 " switch to the game screen", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
233 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
234 " i", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
235 " switch to the highscore screen", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
236 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
237 " q", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
238 " quit the game", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
239 "", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
240 NULL |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
241 }; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
242 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
243 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
244 on_signal(int signo) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
245 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
246 int old_errno = errno; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
247 ssize_t n; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
248 sigset_t sigset; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
249 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
250 /* try to read unread signals from the pipe and add the new one to it */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
251 n = read(signal_pipe_fd[PIPE_R_FD], &sigset, sizeof (sigset)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
252 if (n == -1 || (size_t)n < sizeof (sigset)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
253 sigemptyset(&sigset); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
254 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
255 sigaddset(&sigset, signo); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
256 write(signal_pipe_fd[PIPE_W_FD], &sigset, sizeof (sigset)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
257 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
258 errno = old_errno; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
259 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
260 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
261 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
262 rantaiwarna_doupdate(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
263 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
264 /* |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
265 * ensure the physical cursor is a sensible place in case it could not |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
266 * be made invisible |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
267 */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
268 if ((ctx->active_screen == GAME_SCREEN) && (ctx->board_win != NULL)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
269 wmove(ctx->board_win, ctx->board_cursor_y, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
270 ctx->board_cursor_x * ELEMENT_WIDTH); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
271 wnoutrefresh(ctx->board_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
272 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
273 return (doupdate()); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
274 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
275 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
276 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
277 board_win_render_cursor(struct rantaiwarna_ctx *ctx, bool visible) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
278 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
279 /* highlighting color pairs are base color + COLORS_MAX */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
280 short color = ctx->board->elements[ctx->board_cursor_y * |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
281 ctx->board->width + ctx->board_cursor_x] + |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
282 (visible ? COLORS_MAX : 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
283 int i; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
284 chtype ch; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
285 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
286 for (i = 0; i < ELEMENT_WIDTH; i++) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
287 ch = mvwinch(ctx->board_win, ctx->board_cursor_y, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
288 ctx->board_cursor_x * ELEMENT_WIDTH + i); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
289 if (visible) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
290 /* use reverse and underline for highlighting */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
291 ch = (ch & ~A_COLOR) | A_REVERSE | A_UNDERLINE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
292 } else { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
293 ch &= ~(A_COLOR | A_REVERSE | A_UNDERLINE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
294 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
295 if (ctx->use_colors) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
296 ch |= COLOR_PAIR(color); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
297 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
298 mvwaddch(ctx->board_win, ctx->board_cursor_y, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
299 ctx->board_cursor_x * ELEMENT_WIDTH + i, ch); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
300 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
301 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
302 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
303 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
304 board_win_update_cursor(struct rantaiwarna_ctx *ctx, bool visible) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
305 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
306 board_win_render_cursor(ctx, visible); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
307 touchwin(ctx->board_container_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
308 wnoutrefresh(ctx->board_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
309 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
310 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
311 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
312 board_win_move_cursor(struct rantaiwarna_ctx *ctx, int y, int x) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
313 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
314 if ((x < 0) || (x >= ctx->board->width) || (y < 0) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
315 (y >= ctx->board->height)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
316 return (ERR); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
317 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
318 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
319 board_win_update_cursor(ctx, FALSE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
320 ctx->board_cursor_x = x; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
321 ctx->board_cursor_y = y; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
322 board_win_update_cursor(ctx, TRUE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
323 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
324 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
325 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
326 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
327 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
328 score_win_render(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
329 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
330 mvwprintw(ctx->score_win, 0, 0, "%*" PRId32, SCORE_WIN_WIDTH, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
331 ctx->board->score); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
332 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
333 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
334 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
335 score_win_update(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
336 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
337 score_win_render(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
338 touchwin(ctx->game_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
339 wnoutrefresh(ctx->score_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
340 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
341 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
342 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
343 set_message(struct rantaiwarna_ctx *ctx, const char *message) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
344 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
345 snprintf(ctx->message, MESSAGE_MAX_SIZE, "%s", message); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
346 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
347 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
348 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
349 message_win_render(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
350 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
351 int game_header_win_height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
352 int game_header_win_width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
353 int message_win_begy; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
354 int message_win_begx; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
355 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
356 getmaxyx(ctx->game_header_win, game_header_win_height, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
357 game_header_win_width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
358 getbegyx(ctx->message_win, message_win_begy, message_win_begx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
359 wclear(ctx->message_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
360 mvwaddstr(ctx->message_win, 0, (game_header_win_width - |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
361 (int)strlen(ctx->message)) / 2 - message_win_begx, ctx->message); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
362 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
363 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
364 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
365 message_win_update(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
366 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
367 message_win_render(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
368 touchwin(ctx->game_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
369 wnoutrefresh(ctx->message_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
370 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
371 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
372 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
373 board_win_render(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
374 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
375 chtype ch; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
376 int x; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
377 int y; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
378 short color; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
379 int i; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
380 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
381 for (x = 0; x < ctx->board->width; x++) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
382 for (y = 0; y < ctx->board->height; y++) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
383 color = ctx->board->elements[y * ctx->board->width + x]; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
384 ch = ctx->elements_chs[color]; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
385 if (ctx->use_colors) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
386 ch |= COLOR_PAIR(color); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
387 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
388 for (i = 0; i < ELEMENT_WIDTH; i++) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
389 mvwaddch(ctx->board_win, y, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
390 x * ELEMENT_WIDTH + i, ch); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
391 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
392 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
393 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
394 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
395 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
396 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
397 board_win_update(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
398 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
399 board_win_render(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
400 if ((ctx->board->status & GAME_OVER) == 0) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
401 board_win_update_cursor(ctx, TRUE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
402 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
403 touchwin(ctx->board_container_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
404 wnoutrefresh(ctx->board_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
405 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
406 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
407 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
408 highscore_pad_update(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
409 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
410 struct highscore_entry *entry; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
411 int i; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
412 int32_t score; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
413 char timestr[TIMESTR_MAX_SIZE]; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
414 char *timestrp; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
415 int height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
416 int width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
417 int highscore_pad_height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
418 int highscore_pad_width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
419 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
420 for (entry = ctx->highscore, i = 0; i < 10; i++) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
421 if (entry != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
422 score = entry->score; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
423 timestrp = timestr; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
424 if (strftime(timestr, sizeof (timestr), "%x", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
425 &entry->time) == 0) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
426 timestr[0] = '\0'; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
427 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
428 entry = entry->next; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
429 } else { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
430 score = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
431 timestrp = ctx->dummy_timestr; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
432 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
433 mvwprintw(ctx->highscore_pad, i, 0, HIGHSCORE_FMT, i + 1, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
434 timestrp, score); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
435 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
436 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
437 getmaxyx(stdscr, height, width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
438 getmaxyx(ctx->highscore_pad, highscore_pad_height, highscore_pad_width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
439 if (ctx->highscore_pos_y + height > highscore_pad_height) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
440 ctx->highscore_pos_y = MAX(highscore_pad_height - height, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
441 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
442 if (ctx->highscore_pos_x + width > highscore_pad_width) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
443 ctx->highscore_pos_x = MAX(highscore_pad_width - width, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
444 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
445 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
446 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
447 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
448 highscore_pad_refresh(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
449 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
450 int height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
451 int width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
452 int highscore_pad_height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
453 int highscore_pad_width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
454 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
455 getmaxyx(stdscr, height, width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
456 getmaxyx(ctx->highscore_pad, highscore_pad_height, highscore_pad_width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
457 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
458 return (pnoutrefresh(ctx->highscore_pad, ctx->highscore_pos_y, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
459 ctx->highscore_pos_x, 1, 0, MIN(height - 1, highscore_pad_height - |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
460 1), MIN(width - 1, highscore_pad_width - 1))); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
461 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
462 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
463 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
464 help_pad_refresh(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
465 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
466 int height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
467 int width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
468 int help_pad_height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
469 int help_pad_width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
470 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
471 getmaxyx(stdscr, height, width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
472 getmaxyx(ctx->help_pad, help_pad_height, help_pad_width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
473 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
474 return (pnoutrefresh(ctx->help_pad, ctx->help_pos_y, ctx->help_pos_x, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
475 1, 0, MIN(height - 1, help_pad_height - ctx->help_pos_y - 1), |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
476 MIN(width - 1, help_pad_width - ctx->help_pos_x - 1))); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
477 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
478 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
479 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
480 active_screen_switch(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
481 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
482 clear(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
483 wnoutrefresh(stdscr); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
484 switch (ctx->active_screen) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
485 case GAME_SCREEN: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
486 touchwin(ctx->game_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
487 wnoutrefresh(ctx->game_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
488 touchwin(ctx->board_container_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
489 wnoutrefresh(ctx->board_container_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
490 touchwin(ctx->board_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
491 wnoutrefresh(ctx->board_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
492 ctx->input_win = ctx->board_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
493 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
494 case HIGHSCORE_SCREEN: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
495 touchwin(ctx->highscore_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
496 wnoutrefresh(ctx->highscore_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
497 highscore_pad_refresh(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
498 ctx->input_win = stdscr; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
499 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
500 case HELP_SCREEN: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
501 touchwin(ctx->help_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
502 wnoutrefresh(ctx->help_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
503 help_pad_refresh(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
504 ctx->input_win = stdscr; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
505 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
506 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
507 flushinp(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
508 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
509 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
510 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
511 scrolled_win_handle_input(WINDOW *pad, int *pos_yp, int *pos_xp, int c) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
512 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
513 int y = *pos_yp; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
514 int x = *pos_xp; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
515 int height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
516 int width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
517 int pad_height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
518 int pad_width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
519 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
520 getmaxyx(stdscr, height, width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
521 getmaxyx(pad, pad_height, pad_width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
522 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
523 switch (c) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
524 case 'k': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
525 case KEY_UP: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
526 /* scroll line up */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
527 y--; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
528 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
529 case 'l': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
530 case KEY_RIGHT: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
531 /* scroll right */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
532 x++; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
533 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
534 case 'j': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
535 case ' ': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
536 case '\n': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
537 case '\r': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
538 case KEY_ENTER: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
539 case KEY_DOWN: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
540 /* scroll line down */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
541 y++; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
542 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
543 case 'h': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
544 case KEY_LEFT: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
545 /* scroll left */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
546 x--; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
547 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
548 case 'b': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
549 case '\002': /* ^B */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
550 case KEY_PPAGE: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
551 /* scroll up one screenful */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
552 y -= height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
553 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
554 case 'f': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
555 case '\006': /* ^F */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
556 case KEY_NPAGE: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
557 /* scroll down one screenful */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
558 y += height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
559 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
560 case 'g': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
561 case KEY_HOME: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
562 /* go to the first line */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
563 y = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
564 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
565 case 'G': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
566 case KEY_END: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
567 /* go to the line */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
568 y = MAX(pad_height - height, y); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
569 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
570 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
571 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
572 if (y < 0) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
573 y = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
574 } else if (y + height > pad_height) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
575 y = MAX(pad_height - height, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
576 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
577 if (x < 0) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
578 x = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
579 } else if (x + width > pad_width) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
580 x = MAX(pad_width - width, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
581 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
582 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
583 if ((x != *pos_xp) || (y != *pos_yp)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
584 prefresh(pad, y, x, 1, 0, MIN(height - 1, pad_height - 1), |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
585 MIN(width - 1, pad_width - 1)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
586 *pos_yp = y; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
587 *pos_xp = x; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
588 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
589 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
590 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
591 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
592 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
593 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
594 highscore_handle_input(struct rantaiwarna_ctx *ctx, int c) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
595 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
596 switch (c) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
597 case 'a': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
598 /* switch to game screen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
599 ctx->active_screen = GAME_SCREEN; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
600 active_screen_switch(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
601 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
602 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
603 case 'H': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
604 /* switch to help screen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
605 ctx->active_screen = HELP_SCREEN; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
606 active_screen_switch(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
607 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
608 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
609 default: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
610 /* delegate input handling to scrolled window handler */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
611 return (scrolled_win_handle_input(ctx->highscore_pad, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
612 &ctx->highscore_pos_y, &ctx->highscore_pos_x, c)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
613 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
614 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
615 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
616 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
617 help_handle_input(struct rantaiwarna_ctx *ctx, int c) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
618 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
619 switch (c) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
620 case 'a': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
621 /* switch to game screen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
622 ctx->active_screen = GAME_SCREEN; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
623 active_screen_switch(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
624 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
625 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
626 case 'i': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
627 /* switch to highscore screen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
628 ctx->active_screen = HIGHSCORE_SCREEN; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
629 active_screen_switch(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
630 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
631 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
632 default: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
633 /* delegate input handling to scrolled window handler */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
634 return (scrolled_win_handle_input(ctx->help_pad, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
635 &ctx->help_pos_y, &ctx->help_pos_x, c)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
636 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
637 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
638 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
639 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
640 game_handle_input(struct rantaiwarna_ctx *ctx, int c) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
641 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
642 int y = ctx->board_cursor_y; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
643 int x = ctx->board_cursor_x; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
644 int active_screen = ctx->active_screen; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
645 int removed = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
646 #ifdef NCURSES_MOUSE_VERSION |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
647 MEVENT event; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
648 int mx; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
649 int my; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
650 #endif /* NCURSES_MOUSE_VERSION */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
651 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
652 switch (c) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
653 case 'k': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
654 case KEY_UP: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
655 /* move cursor up */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
656 y--; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
657 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
658 case 'l': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
659 case KEY_RIGHT: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
660 /* move cursor right */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
661 x++; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
662 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
663 case 'j': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
664 case KEY_DOWN: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
665 /* move cursor down */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
666 y++; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
667 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
668 case 'h': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
669 case KEY_LEFT: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
670 /* move cursor left */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
671 x--; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
672 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
673 #ifdef NCURSES_MOUSE_VERSION |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
674 case KEY_MOUSE: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
675 if (getmouse(&event) == OK) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
676 mx = event.x; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
677 my = event.y; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
678 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
679 /* only handle mouse input inside the board window */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
680 if (wmouse_trafo(ctx->board_win, &my, &mx, FALSE)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
681 mx = (int)(floor(mx / ELEMENT_WIDTH)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
682 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
683 if (event.bstate & BUTTON1_RELEASED) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
684 /* move cursor and remove element */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
685 y = my; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
686 x = mx; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
687 removed = |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
688 board_remove_elements(ctx->board, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
689 y, x); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
690 } else if (event.bstate & |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
691 REPORT_MOUSE_POSITION) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
692 /* move cursor to mouse position */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
693 y = my; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
694 x = mx; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
695 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
696 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
697 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
698 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
699 #endif /* NCURSES_MOUSE_VERSION */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
700 case KEY_ENTER: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
701 case '\n': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
702 case '\r': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
703 case ' ': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
704 /* remove current element */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
705 removed = board_remove_elements(ctx->board, y, x); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
706 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
707 case 'n': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
708 /* start a new game */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
709 ctx->board_cursor_x = ctx->board_cursor_y = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
710 set_message(ctx, "rantaiwarna"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
711 if (board_generate(ctx->board) == OK) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
712 score_win_update(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
713 message_win_update(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
714 board_win_update(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
715 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
716 flash(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
717 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
718 } else { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
719 return (ERR); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
720 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
721 case 'H': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
722 /* switch to help screen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
723 active_screen = HELP_SCREEN; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
724 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
725 case 'i': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
726 /* switch to highscore screen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
727 active_screen = HIGHSCORE_SCREEN; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
728 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
729 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
730 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
731 if (active_screen != ctx->active_screen) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
732 ctx->active_screen = active_screen; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
733 active_screen_switch(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
734 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
735 } else if (removed > 0) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
736 score_win_update(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
737 board_win_update(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
738 if (ctx->board->status & GAME_OVER) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
739 highscore_update(&ctx->highscore, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
740 (int16_t)ctx->board->width, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
741 (int16_t)ctx->board->height, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
742 (int16_t)ctx->board->colors, ctx->board->score, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
743 time(NULL)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
744 highscore_save(ctx->highscore, ctx->board->height, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
745 ctx->board->width, ctx->board->colors); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
746 board_win_update_cursor(ctx, FALSE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
747 ctx->board_cursor_y = ctx->board_cursor_x = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
748 set_message(ctx, "GAME OVER"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
749 message_win_update(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
750 highscore_pad_update(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
751 flash(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
752 } else if ((y != ctx->board_cursor_y) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
753 (x != ctx->board_cursor_x)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
754 board_win_move_cursor(ctx, y, x); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
755 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
756 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
757 } else if (((ctx->board->status & GAME_OVER) == 0) && |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
758 ((y != ctx->board_cursor_y) || (x != ctx->board_cursor_x))) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
759 if (board_win_move_cursor(ctx, y, x) == OK) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
760 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
761 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
762 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
763 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
764 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
765 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
766 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
767 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
768 all_windows_delete(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
769 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
770 if (ctx == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
771 return; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
772 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
773 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
774 if (ctx->message_win != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
775 delwin(ctx->message_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
776 ctx->message_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
777 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
778 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
779 if (ctx->score_win != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
780 delwin(ctx->score_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
781 ctx->score_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
782 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
783 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
784 if (ctx->game_header_win != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
785 delwin(ctx->game_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
786 ctx->game_header_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
787 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
788 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
789 if (ctx->board_win != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
790 delwin(ctx->board_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
791 ctx->board_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
792 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
793 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
794 if (ctx->board_container_win != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
795 delwin(ctx->board_container_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
796 ctx->board_container_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
797 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
798 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
799 if (ctx->highscore_header_win != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
800 delwin(ctx->highscore_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
801 ctx->highscore_header_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
802 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
803 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
804 if (ctx->highscore_pad != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
805 delwin(ctx->highscore_pad); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
806 ctx->highscore_pad = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
807 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
808 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
809 if (ctx->help_header_win != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
810 delwin(ctx->help_header_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
811 ctx->help_header_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
812 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
813 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
814 if (ctx->help_pad != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
815 delwin(ctx->help_pad); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
816 ctx->help_pad = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
817 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
818 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
819 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
820 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
821 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
822 all_windows_create(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
823 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
824 int width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
825 int height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
826 char score_label[] = "Score: "; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
827 int score_label_len; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
828 int header_min_width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
829 char highscore_title[] = "Highscore"; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
830 int highscore_entry_len; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
831 char help_title[] = "Help"; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
832 int help_pad_height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
833 int help_pad_width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
834 int i; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
835 int line_len; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
836 int help_width; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
837 int help_height; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
838 time_t dummy_time = (time_t)0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
839 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
840 getmaxyx(stdscr, height, width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
841 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
842 /* enforce minimum width, both board and headers must be visble */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
843 score_label_len = (int)strlen(score_label); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
844 header_min_width = 20 + 1 + score_label_len + SCORE_WIN_WIDTH; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
845 header_min_width = MAX(header_min_width, (int)strlen(highscore_title)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
846 header_min_width = MAX(header_min_width, (int)strlen(help_title)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
847 if ((width < ctx->board->width * ELEMENT_WIDTH + 2) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
848 (height < 1 + ctx->board->height + 2) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
849 (width < header_min_width)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
850 ctx->too_small = TRUE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
851 ctx->input_win = stdscr; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
852 mvaddstr(0, 0, "terminal size is too small"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
853 refresh(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
854 return (ERR); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
855 } else { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
856 ctx->too_small = FALSE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
857 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
858 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
859 /* set up game screen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
860 ctx->game_header_win = newwin(1, width, 0, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
861 if (ctx->game_header_win == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
862 rantaiwarna_errx(1, "could not create window"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
863 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
864 wbkgd(ctx->game_header_win, A_UNDERLINE | A_BOLD); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
865 mvwaddstr(ctx->game_header_win, 0, width - (score_label_len + |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
866 SCORE_WIN_WIDTH), score_label); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
867 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
868 ctx->score_win = derwin(ctx->game_header_win, 1, SCORE_WIN_WIDTH, 0, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
869 width - SCORE_WIN_WIDTH); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
870 if (ctx->score_win == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
871 rantaiwarna_errx(1, "could not create window"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
872 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
873 score_win_render(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
874 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
875 ctx->message_win = derwin(ctx->game_header_win, 1, width - (1 + |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
876 score_label_len + SCORE_WIN_WIDTH), 0, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
877 if (ctx->message_win == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
878 rantaiwarna_errx(1, "could not create window"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
879 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
880 message_win_render(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
881 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
882 ctx->board_container_win = newwin(ctx->board->height + 2, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
883 ctx->board->width * ELEMENT_WIDTH + 2, (height - 1 - |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
884 (ctx->board->height + 2)) / 2, (width - (ctx->board->width * |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
885 ELEMENT_WIDTH + 2)) / 2); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
886 if (ctx->board_container_win == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
887 rantaiwarna_errx(1, "could not create window"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
888 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
889 box(ctx->board_container_win, 0, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
890 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
891 ctx->board_win = derwin(ctx->board_container_win, ctx->board->height, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
892 ctx->board->width * ELEMENT_WIDTH, 1, 1); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
893 if (ctx->board_win == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
894 rantaiwarna_errx(1, "could not create window"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
895 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
896 ctx->input_win = ctx->board_win; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
897 wbkgd(ctx->board_win, A_BOLD); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
898 wtimeout(ctx->board_win, 100); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
899 keypad(ctx->board_win, TRUE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
900 board_win_render(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
901 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
902 board_win_render_cursor(ctx, TRUE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
903 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
904 /* set up highscore screen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
905 ctx->highscore_header_win = newwin(1, width, 0, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
906 if (ctx->highscore_header_win == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
907 rantaiwarna_errx(1, "could not create window"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
908 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
909 wbkgd(ctx->highscore_header_win, A_UNDERLINE | A_BOLD); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
910 mvwaddstr(ctx->highscore_header_win, 0, 0, highscore_title); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
911 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
912 if (strftime(ctx->dummy_timestr, sizeof (ctx->dummy_timestr), "%x", |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
913 gmtime(&dummy_time)) == 0) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
914 ctx->dummy_timestr[0] = '\0'; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
915 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
916 highscore_entry_len = snprintf(NULL, 0, HIGHSCORE_FMT, 1, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
917 ctx->dummy_timestr, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
918 if (highscore_entry_len < 0) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
919 rantaiwarna_err(1, NULL); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
920 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
921 ctx->highscore_pad = newpad(10, highscore_entry_len); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
922 if (ctx->highscore_pad == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
923 rantaiwarna_errx(1, "could not create pad"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
924 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
925 highscore_pad_update(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
926 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
927 /* set up help screen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
928 ctx->help_header_win = newwin(1, width, 0, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
929 if (ctx->help_header_win == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
930 rantaiwarna_errx(1, "could not create window"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
931 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
932 wbkgd(ctx->help_header_win, A_UNDERLINE | A_BOLD); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
933 mvwaddstr(ctx->help_header_win, 0, 0, help_title); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
934 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
935 for (i = 0, help_width = 1; help_strs[i] != NULL; i++) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
936 line_len = (int)strlen(help_strs[i]); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
937 if (line_len > help_width) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
938 help_width = line_len; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
939 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
940 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
941 help_height = i; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
942 ctx->help_pad = newpad(help_height, help_width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
943 if (ctx->help_pad == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
944 rantaiwarna_errx(1, "could not create pad"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
945 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
946 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
947 for (i = 0; help_strs[i] != NULL; i++) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
948 mvwaddstr(ctx->help_pad, i, 0, help_strs[i]); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
949 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
950 getmaxyx(ctx->help_pad, help_pad_height, help_pad_width); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
951 if (ctx->help_pos_y + height - 1 > help_height) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
952 ctx->help_pos_y = MAX(help_height - height - 1, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
953 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
954 if (ctx->help_pos_x + width > help_width) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
955 ctx->help_pos_x = MAX(help_width - width, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
956 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
957 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
958 active_screen_switch(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
959 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
960 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
961 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
962 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
963 static void |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
964 handle_resize(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
965 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
966 all_windows_delete(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
967 clear(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
968 endwin(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
969 refresh(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
970 if (all_windows_create(ctx) == OK) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
971 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
972 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
973 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
974 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
975 static int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
976 main_loop(struct rantaiwarna_ctx *ctx) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
977 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
978 sigset_t sigset; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
979 sigset_t old_sigset; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
980 ssize_t n; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
981 int saved_errno; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
982 int c; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
983 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
984 while (TRUE) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
985 /* |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
986 * deal with pending signals previously received in the signal |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
987 * handler, try to read a sigset from the pipe, avoid partial |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
988 * reads by blocking all signals during the read operation |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
989 */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
990 sigfillset(&sigset); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
991 sigprocmask(SIG_BLOCK, &sigset, &old_sigset); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
992 n = read(signal_pipe_fd[PIPE_R_FD], &sigset, sizeof (sigset)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
993 saved_errno = errno; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
994 sigprocmask(SIG_SETMASK, &old_sigset, NULL); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
995 if (n == -1) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
996 if (saved_errno != EAGAIN) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
997 /* unknown error */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
998 return (ERR); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
999 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1000 } else if ((size_t)n != sizeof (sigset)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1001 /* short read, should not happen */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1002 return (ERR); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1003 } else { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1004 if ((sigismember(&sigset, SIGINT) == 1) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1005 (sigismember(&sigset, SIGTERM) == 1) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1006 (sigismember(&sigset, SIGQUIT) == 1) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1007 (sigismember(&sigset, SIGHUP) == 1)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1008 return (ERR); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1009 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1010 #ifdef SIGWINCH |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1011 if (sigismember(&sigset, SIGWINCH) == 1) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1012 /* handle terminal resize */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1013 handle_resize(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1014 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1015 #endif /* SIGWINCH */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1016 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1017 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1018 /* handle keyboard and mouse input */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1019 c = wgetch(ctx->input_win); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1020 /* only allow to quit if the terminal is too small */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1021 if (ctx->too_small) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1022 if (c == 'q') { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1023 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1024 } else { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1025 continue; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1026 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1027 } else { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1028 /* handle global keys */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1029 switch (c) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1030 case ERR: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1031 /* no input */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1032 continue; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1033 case 'q': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1034 /* quit */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1035 return (OK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1036 case '\f': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1037 /* refresh */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1038 handle_resize(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1039 continue; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1040 default: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1041 /* |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1042 * delegate input handling to screen-specific |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1043 * handler |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1044 */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1045 switch (ctx->active_screen) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1046 case GAME_SCREEN: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1047 if (game_handle_input(ctx, c) == ERR) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1048 return (ERR); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1049 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1050 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1051 case HIGHSCORE_SCREEN: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1052 if (highscore_handle_input(ctx, c) == |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1053 ERR) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1054 return (ERR); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1055 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1056 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1057 case HELP_SCREEN: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1058 if (help_handle_input(ctx, c) == ERR) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1059 return (ERR); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1060 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1061 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1062 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1063 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1064 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1065 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1066 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1067 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1068 int |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1069 main(int argc, char *argv[]) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1070 { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1071 int status = EXIT_FAILURE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1072 struct rantaiwarna_ctx *ctx = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1073 int c; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1074 bool errflag = FALSE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1075 char *endptr; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1076 long colors = DEFAULT_COLORS; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1077 long height = DEFAULT_HEIGHT; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1078 long width = DEFAULT_WIDTH; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1079 int flags; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1080 struct sigaction sigact; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1081 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1082 setlocale(LC_ALL, ""); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1083 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1084 if ((progname = strrchr(argv[0], '/')) == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1085 progname = argv[0]; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1086 } else { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1087 progname++; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1088 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1089 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1090 while (!errflag && (c = getopt(argc, argv, "c:h:w:")) != -1) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1091 switch (c) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1092 case 'c': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1093 errno = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1094 colors = strtol(optarg, &endptr, 10); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1095 if ((errno != 0) || (*endptr != '\0') || (colors < 2) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1096 (colors > COLORS_MAX - 1)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1097 errflag = TRUE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1098 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1099 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1100 case 'h': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1101 errno = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1102 height = strtol(optarg, &endptr, 10); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1103 if ((errno != 0) || (*endptr != '\0') || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1104 (height < HEIGHT_MIN) || (height > HEIGHT_MAX)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1105 errflag = TRUE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1106 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1107 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1108 case 'w': |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1109 errno = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1110 width = strtol(optarg, &endptr, 10); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1111 if ((errno != 0) || (*endptr != '\0') || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1112 (width < WIDTH_MIN) || (width > WIDTH_MAX)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1113 errflag = TRUE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1114 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1115 break; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1116 default: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1117 errflag = TRUE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1118 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1119 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1120 if (errflag) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1121 fprintf(stderr, "usage: %s [-c colors] [-w width] " |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1122 "[-h height]\n", progname); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1123 status = EXIT_USAGE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1124 goto out; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1125 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1126 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1127 ctx = rantaiwarna_malloc(sizeof (struct rantaiwarna_ctx)); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1128 ctx->board = board_create((int)height, (int)width, (short)colors); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1129 if (ctx->board->elements == NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1130 goto out; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1131 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1132 ctx->active_screen = GAME_SCREEN; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1133 ctx->highscore = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1134 ctx->use_colors = FALSE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1135 ctx->too_small = FALSE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1136 ctx->game_header_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1137 ctx->message_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1138 ctx->score_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1139 ctx->board_container_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1140 ctx->board_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1141 ctx->highscore_pad = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1142 ctx->highscore_header_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1143 ctx->help_pad = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1144 ctx->help_header_win = NULL; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1145 ctx->input_win = stdscr; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1146 ctx->board_cursor_x = ctx->board_cursor_y = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1147 ctx->highscore_pos_x = ctx->highscore_pos_y = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1148 ctx->help_pos_x = ctx->help_pos_y = 0; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1149 ctx->message[0] = '\0'; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1150 ctx->dummy_timestr[0] = '\0'; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1151 ctx->elements_chs = elements_chs; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1152 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1153 highscore_load(&ctx->highscore, ctx->board->height, ctx->board->width, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1154 ctx->board->colors); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1155 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1156 /* create pipe for delivering signals to a listener in the main loop */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1157 if (pipe(signal_pipe_fd) == -1) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1158 goto out; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1159 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1160 flags = fcntl(signal_pipe_fd[PIPE_R_FD], F_GETFL, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1161 if ((flags == -1) || (fcntl(signal_pipe_fd[PIPE_R_FD], F_SETFL, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1162 flags | O_NONBLOCK) == -1)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1163 goto out; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1164 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1165 flags = fcntl(signal_pipe_fd[PIPE_W_FD], F_GETFL, 0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1166 if ((flags == -1) || (fcntl(signal_pipe_fd[PIPE_W_FD], F_SETFL, |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1167 flags | O_NONBLOCK) == -1)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1168 goto out; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1169 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1170 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1171 /* set up signal handler */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1172 sigact.sa_handler = on_signal; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1173 sigact.sa_flags = SA_RESTART; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1174 sigemptyset(&sigact.sa_mask); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1175 if ((sigaction(SIGINT, &sigact, NULL) < 0) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1176 (sigaction(SIGTERM, &sigact, NULL) < 0) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1177 (sigaction(SIGQUIT, &sigact, NULL) < 0) || |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1178 (sigaction(SIGHUP, &sigact, NULL) < 0)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1179 goto out; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1180 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1181 #ifdef SIGWINCH |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1182 if (sigaction(SIGWINCH, &sigact, NULL) < 0) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1183 goto out; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1184 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1185 #endif /* SIGWINCH */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1186 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1187 /* initialize curses */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1188 initscr(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1189 curses_init = TRUE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1190 cbreak(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1191 noecho(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1192 intrflush(stdscr, FALSE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1193 nonl(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1194 curs_set(0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1195 timeout(100); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1196 keypad(stdscr, TRUE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1197 #ifdef NCURSES_MOUSE_VERSION |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1198 mousemask(REPORT_MOUSE_POSITION | ALL_MOUSE_EVENTS, NULL); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1199 mouseinterval(0); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1200 #endif /* NCURSES_MOUSE_VERSION */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1201 if (has_colors()) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1202 start_color(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1203 if ((COLORS >= 8) && (COLOR_PAIRS >= 12)) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1204 ctx->use_colors = TRUE; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1205 /* colors 0 -- COLORS_MAX correspond to elements */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1206 init_pair(1, COLOR_RED, COLOR_RED); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1207 init_pair(2, COLOR_GREEN, COLOR_GREEN); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1208 init_pair(3, COLOR_YELLOW, COLOR_YELLOW); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1209 init_pair(4, COLOR_BLUE, COLOR_BLUE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1210 init_pair(5, COLOR_MAGENTA, COLOR_MAGENTA); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1211 /* |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1212 * colors COLORS_MAX -- (COLORS_MAX + COLORS_MAX) |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1213 * are used for the cursor to highlight elements |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1214 */ |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1215 init_pair(6, COLOR_WHITE, COLOR_BLACK); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1216 init_pair(7, COLOR_WHITE, COLOR_RED); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1217 init_pair(8, COLOR_WHITE, COLOR_GREEN); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1218 init_pair(9, COLOR_WHITE, COLOR_YELLOW); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1219 init_pair(10, COLOR_WHITE, COLOR_BLUE); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1220 init_pair(11, COLOR_WHITE, COLOR_MAGENTA); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1221 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1222 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1223 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1224 set_message(ctx, "rantaiwarna"); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1225 if (board_generate(ctx->board) == ERR) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1226 goto out; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1227 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1228 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1229 if (all_windows_create(ctx) == ERR) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1230 goto out; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1231 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1232 rantaiwarna_doupdate(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1233 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1234 if (main_loop(ctx) == OK) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1235 status = EXIT_SUCCESS; |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1236 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1237 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1238 out: |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1239 restore_term(); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1240 all_windows_delete(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1241 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1242 if (signal_pipe_fd[PIPE_R_FD] != -1) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1243 close(signal_pipe_fd[PIPE_R_FD]); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1244 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1245 if (signal_pipe_fd[PIPE_W_FD] != -1) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1246 close(signal_pipe_fd[PIPE_W_FD]); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1247 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1248 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1249 if (ctx != NULL) { |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1250 board_free(ctx->board); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1251 highscore_free(ctx->highscore); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1252 } |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1253 free(ctx); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1254 |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1255 exit(status); |
a9a7ad180c3b
Initial revision
Guido Berhoerster <guido+rantaiwarna@berhoerster.name>
parents:
diff
changeset
|
1256 } |