]> git.gir.st - minesVIiper.git/blob - mines.h
resize mode and ex mode improvements, backword
[minesVIiper.git] / mines.h
1 #ifndef __MINES_H__
2 #define __MINES_H
3
4 #define SHORTHELP "%s [OPTIONS] [FIELDSPEC]\n"
5 #define FIELDHELP "FIELDSPEC: WxH[xM] (width 'x' height 'x' mines)\n"
6 #define LONGHELP \
7 "OPTIONS:\n" \
8 " -n(o flagging)\n" \
9 " -f(lagging)\n" \
10 " -q(uestion marks)\n" \
11 " -c(olored symbols)\n" \
12 " -d(ec charset symbols)\n" \
13 "FIELDSPEC:\n" \
14 " WxH[xM] (width 'x' height 'x' mines)\n" \
15 " defaults to 30x16x99; mines default to ~20%%\n" \
16 "\n"
17 #define KEYHELP \
18 "Keybindings:\n" \
19 " hjkl :move left/down/up/right\n" \
20 " bduw :move to next boundary\n" \
21 " ^Gg$ :move to the left/bottom/top/right\n" \
22 " z :center cursor on minefield\n" \
23 " o :open/choord\n" \
24 " i :flag/unflag\n" \
25 " space:modeful cursor (either open or flag)\n" \
26 " s :toggle mode for space (open/flag)\n" \
27 " mX :set a mark for letter X\n" \
28 " `X :move to mark X (aliased to ')\n" \
29 " f/F x:find forward/backward [012345678 ocfq]\n" \
30 " t/T x:'til -\"-\n" \
31 " a/A x:after -\"-\n" \
32 " r :start a new game\n" \
33 " :h :help\n" \
34 " :r :resize\n" \
35 " :q :quit\n"
36
37 struct minefield {
38 struct minecell {
39 unsigned m:2; /* mine?1:killmine?2:0 */
40 unsigned o:1; /* open?1:0 */
41 unsigned f:2; /* flagged?1:questioned?2:0 */
42 unsigned n:4; /* 0<= neighbours <=8 */
43 } **c;
44 int w; /* width */
45 int h; /* height */
46 int m; /* number of mines */
47 };
48
49 struct game {
50 int f; /* flags counter */
51 int t; /* time of game start */
52 int p[2]; /* cursor position {line, col} */
53 int s; /* space mode */
54 int o; /* mode */
55 int n; /* new game? */
56 int c; /* cheat mode? */
57 struct markers {
58 int s; /* set? */
59 int l; /* line */
60 int c; /* col */
61 } m[26]; /* a-z */
62 };
63
64 struct opt {
65 struct minescheme* scheme;
66 int mode; /* allow flags? quesm? */
67 };
68
69 int minesviiper(void);
70 void fill_minefield (int, int);
71 void move_ph (int, int);
72 void move_hi (int, int);
73 void to_next_boundary (int, int, char);
74 int find (int, char);
75 void till (int, char);
76 void after(int, char);
77 int getch (unsigned char*);
78 int getch_wrapper (void);
79 int getctrlseq (unsigned char*);
80 int everything_opened (void);
81 int wait_mouse_up (int, int);
82 void redraw_cell (int, int, int);
83 void show_minefield (int);
84 void show_stomp (int, int, int);
85 void wait_stomp (void);
86 int get_neighbours (int, int, int);
87 int uncover_square (int, int);
88 void flag_square (int, int);
89 void quesm_square (int, int);
90 int choord_square (int, int);
91 int do_uncover (int*, int);
92 int ex_cmd(void);
93 void set_mark(void);
94 void jump_mark(void);
95 void interactive_resize(void);
96 struct minecell** alloc_array (int, int);
97 void free_field (void);
98 char* get_emoticon(void);
99 int screen2field_l (int);
100 int screen2field_c (int);
101 int field2screen_c (int);
102 int clicked_emoticon (unsigned char*);
103 void quit(void);
104 void clamp_fieldsize (void);
105 int mines_percentage(int, int);
106 int parse_fieldspec(char*);
107 void signal_handler (int);
108 void signal_setup (void);
109 void timer_setup (int);
110 void screen_setup (int);
111 void raw_mode(int);
112
113 enum modes {
114 NORMAL,
115 REDUCED,
116 SHOWMINES,
117 SHOWFLAGS,
118 HIGHLIGHT,
119 RESIZEMODE,
120 };
121 enum flagtypes {
122 NOFLAG,
123 FLAG,
124 QUESM,
125 };
126 enum fieldopenstates {
127 CLOSED,
128 OPENED,
129 };
130 enum game_states {
131 GAME_NEW = 0, /* expected zero while resetting `g' */
132 GAME_INPROGRESS,
133 GAME_WON,
134 GAME_LOST,
135 GAME_QUIT,
136 };
137 enum space_modes {
138 MODE_OPEN = 0, /* expected zero while resetting `g' */
139 MODE_FLAG,
140 MODE_QUESM,
141 };
142 enum event {
143 /* for getctrlseq() */
144 CTRSEQ_NULL = 0,
145 CTRSEQ_EOF = -1,
146 CTRSEQ_INVALID = -2,
147 CTRSEQ_MOUSE = -3,
148 /* for getch() */
149 CTRSEQ_MOUSE_LEFT = -4,
150 CTRSEQ_MOUSE_MIDDLE = -5,
151 CTRSEQ_MOUSE_RIGHT = -6,
152 CTRSEQ_CURSOR_LEFT = -7,
153 CTRSEQ_CURSOR_DOWN = -8,
154 CTRSEQ_CURSOR_UP = -9,
155 CTRSEQ_CURSOR_RIGHT = -10,
156 /* for getch_wrapper() */
157 WRAPPER_EMOTICON = -11,
158 };
159 enum actor {
160 KEYBOARD,
161 MOUSE,
162 };
163 enum colon {
164 EX_INVALID,
165 EX_QUIT,
166 EX_HELP,
167 EX_RESZ,
168 };
169 enum mine_types {
170 NO_MINE,
171 STD_MINE,
172 DEATH_MINE,
173 };
174 #endif
Imprint / Impressum