]> git.gir.st - solVItaire.git/blob - schemes.h
fix find-following
[solVItaire.git] / schemes.h
1 #ifndef __SCHEMES_H__
2 #define __SCHEMES_H__
3
4 #include "sol.h"
5
6 struct scheme {
7 int width; /* column alignment */
8 int height; /* height of a card */
9 int overlap; /* no of lines to draw when cards overlapp */
10 char** card[_NUM_CARDS_internal];
11 char** facedown;
12 char** placeholder;
13 char** foundation;
14 char** halfstack; /* left half of stack (for spider) */
15 int* halfcard; /* byte offset of right half of cards (for spider) */
16 int halfwidth[3]; /* printed width of halfstack([0]) and halfcard([1]),
17 byte width of halfcard([2]) */
18 };
19
20 #define p "\017" /*padding, [RB]?CARD must have same length; alternative: \177*/
21 #define ULCARD(s, r) (char*[]) \
22 {"╭───╮",\
23 "│"s" "r"│",\
24 "│ "s" │",\
25 "╰───╯"}
26 #define RULCARD(s, r) \
27 ULCARD("\033[91m" s "\033[39m", r)
28 #define BULCARD(s, r) \
29 ULCARD(p "\033[2m" s "\033[22m", r)//WARN: requires hack in print_hi()
30 #define USCARD(c) (char*[]){c}
31 #define RUSCARD(c) (char*[]){"\033[91m" c "\033[39m "}
32 #define BUSCARD(c) (char*[]){c p p p p p p p p p p " "}
33
34 const struct scheme unicode_large_mono = {
35 .width = 5,
36 .height = 4,
37 .overlap = 2,
38 .card = {
39 [NO_CARD] = (char*[]){" "," "," "," "},
40 [CLU_A] = ULCARD("♣","A"), [DIA_A] = ULCARD("♦","A"),
41 [HEA_A] = ULCARD("♥","A"), [SPA_A] = ULCARD("♠","A"),
42 [CLU_2] = ULCARD("♣","2"), [DIA_2] = ULCARD("♦","2"),
43 [HEA_2] = ULCARD("♥","2"), [SPA_2] = ULCARD("♠","2"),
44 [CLU_3] = ULCARD("♣","3"), [DIA_3] = ULCARD("♦","3"),
45 [HEA_3] = ULCARD("♥","3"), [SPA_3] = ULCARD("♠","3"),
46 [CLU_4] = ULCARD("♣","4"), [DIA_4] = ULCARD("♦","4"),
47 [HEA_4] = ULCARD("♥","4"), [SPA_4] = ULCARD("♠","4"),
48 [CLU_5] = ULCARD("♣","5"), [DIA_5] = ULCARD("♦","5"),
49 [HEA_5] = ULCARD("♥","5"), [SPA_5] = ULCARD("♠","5"),
50 [CLU_6] = ULCARD("♣","6"), [DIA_6] = ULCARD("♦","6"),
51 [HEA_6] = ULCARD("♥","6"), [SPA_6] = ULCARD("♠","6"),
52 [CLU_7] = ULCARD("♣","7"), [DIA_7] = ULCARD("♦","7"),
53 [HEA_7] = ULCARD("♥","7"), [SPA_7] = ULCARD("♠","7"),
54 [CLU_8] = ULCARD("♣","8"), [DIA_8] = ULCARD("♦","8"),
55 [HEA_8] = ULCARD("♥","8"), [SPA_8] = ULCARD("♠","8"),
56 [CLU_9] = ULCARD("♣","9"), [DIA_9] = ULCARD("♦","9"),
57 [HEA_9] = ULCARD("♥","9"), [SPA_9] = ULCARD("♠","9"),
58 #ifdef DECIMAL_TEN
59 [CLU_X] = ULCARD("♣","\b10"), [DIA_X] = ULCARD("♦","\b10"),
60 [HEA_X] = ULCARD("♥","\b10"), [SPA_X] = ULCARD("♠","\b10"),
61 #else
62 [CLU_X] = ULCARD("♣","X"), [DIA_X] = ULCARD("♦","X"),
63 [HEA_X] = ULCARD("♥","X"), [SPA_X] = ULCARD("♠","X"),
64 #endif
65 [CLU_J] = ULCARD("♣","J"), [DIA_J] = ULCARD("♦","J"),
66 [HEA_J] = ULCARD("♥","J"), [SPA_J] = ULCARD("♠","J"),
67 [CLU_Q] = ULCARD("♣","Q"), [DIA_Q] = ULCARD("♦","Q"),
68 [HEA_Q] = ULCARD("♥","Q"), [SPA_Q] = ULCARD("♠","Q"),
69 [CLU_K] = ULCARD("♣","K"), [DIA_K] = ULCARD("♦","K"),
70 [HEA_K] = ULCARD("♥","K"), [SPA_K] = ULCARD("♠","K"),
71 },
72 .facedown = (char*[]){
73 "╭───╮",
74 "│▚▚▚│",
75 "│▚▚▚│",
76 "╰───╯"
77 },
78 .placeholder = (char*[]){
79 "╭╌╌╌╮",
80 "╎ ╎",
81 "╎ ╎",
82 "╰╌╌╌╯"
83 },
84 .foundation = (char*[]){
85 "╭╌╌╌╮",
86 "╎⢠⠒⡄╎",
87 "╎⠸⠉⠇╎",
88 "╰╌╌╌╯"
89 },
90 .halfstack = (char*[]) {
91 "╭─",
92 "│▚",
93 "│▚",
94 "╰─"
95 },
96 .halfcard = (int[]){6, 6, 4, 6},
97 .halfwidth = {2, 3, 999},
98 };
99 const struct scheme unicode_large_color = {
100 .width = 5,
101 .height = 4,
102 .overlap = 2,
103 .card = {
104 [NO_CARD] = (char*[]){" "," "," "," "},
105 [CLU_A] = BULCARD("♣","A"), [DIA_A] = RULCARD("♦","A"),
106 [HEA_A] = RULCARD("♥","A"), [SPA_A] = BULCARD("♠","A"),
107 [CLU_2] = BULCARD("♣","2"), [DIA_2] = RULCARD("♦","2"),
108 [HEA_2] = RULCARD("♥","2"), [SPA_2] = BULCARD("♠","2"),
109 [CLU_3] = BULCARD("♣","3"), [DIA_3] = RULCARD("♦","3"),
110 [HEA_3] = RULCARD("♥","3"), [SPA_3] = BULCARD("♠","3"),
111 [CLU_4] = BULCARD("♣","4"), [DIA_4] = RULCARD("♦","4"),
112 [HEA_4] = RULCARD("♥","4"), [SPA_4] = BULCARD("♠","4"),
113 [CLU_5] = BULCARD("♣","5"), [DIA_5] = RULCARD("♦","5"),
114 [HEA_5] = RULCARD("♥","5"), [SPA_5] = BULCARD("♠","5"),
115 [CLU_6] = BULCARD("♣","6"), [DIA_6] = RULCARD("♦","6"),
116 [HEA_6] = RULCARD("♥","6"), [SPA_6] = BULCARD("♠","6"),
117 [CLU_7] = BULCARD("♣","7"), [DIA_7] = RULCARD("♦","7"),
118 [HEA_7] = RULCARD("♥","7"), [SPA_7] = BULCARD("♠","7"),
119 [CLU_8] = BULCARD("♣","8"), [DIA_8] = RULCARD("♦","8"),
120 [HEA_8] = RULCARD("♥","8"), [SPA_8] = BULCARD("♠","8"),
121 [CLU_9] = BULCARD("♣","9"), [DIA_9] = RULCARD("♦","9"),
122 [HEA_9] = RULCARD("♥","9"), [SPA_9] = BULCARD("♠","9"),
123 #ifdef DECIMAL_TEN
124 [CLU_X] = BULCARD("♣","\b10"), [DIA_X] = RULCARD("♦","\b10"),
125 [HEA_X] = RULCARD("♥","\b10"), [SPA_X] = BULCARD("♠","\b10"),
126 #else
127 [CLU_X] = BULCARD("♣","X"), [DIA_X] = RULCARD("♦","X"),
128 [HEA_X] = RULCARD("♥","X"), [SPA_X] = BULCARD("♠","X"),
129 #endif
130 [CLU_J] = BULCARD("♣","J"), [DIA_J] = RULCARD("♦","J"),
131 [HEA_J] = RULCARD("♥","J"), [SPA_J] = BULCARD("♠","J"),
132 [CLU_Q] = BULCARD("♣","Q"), [DIA_Q] = RULCARD("♦","Q"),
133 [HEA_Q] = RULCARD("♥","Q"), [SPA_Q] = BULCARD("♠","Q"),
134 [CLU_K] = BULCARD("♣","K"), [DIA_K] = RULCARD("♦","K"),
135 [HEA_K] = RULCARD("♥","K"), [SPA_K] = BULCARD("♠","K"),
136 },
137 .facedown = (char*[]){
138 "╭───╮",
139 "│\033[94m▚▚▚\033[39m│",
140 "│\033[94m▚▚▚\033[39m│",
141 "╰───╯"
142 },
143 .placeholder = (char*[]){
144 "╭╌╌╌╮",
145 "╎ ╎",
146 "╎ ╎",
147 "╰╌╌╌╯"
148 },
149 .foundation = (char*[]){
150 "╭╌╌╌╮",
151 "╎\033[2m⢠⠒⡄\033[22m╎",
152 "╎\033[2m⠸⠉⠇\033[22m╎",
153 "╰╌╌╌╯"
154 },
155 .halfstack = (char*[]) {
156 "╭─",
157 "│\033[94m▚\033[39m",
158 "│\033[94m▚\033[39m",
159 "╰─"
160 },
161 .halfcard = (int[]){6, 16, 4, 6},
162 .halfwidth = {2, 3, 999},
163 };
164 const struct scheme unicode_small_mono = {
165 .width = 2,
166 .height = 1,
167 .overlap = 1,
168 .card = {
169 [NO_CARD] = (char*[]){" "},
170 [CLU_A] = USCARD("🃑 "), [DIA_A] = USCARD("🃁 "),
171 [HEA_A] = USCARD("🂱 "), [SPA_A] = USCARD("🂡 "),
172 [CLU_2] = USCARD("🃒 "), [DIA_2] = USCARD("🃂 "),
173 [HEA_2] = USCARD("🂲 "), [SPA_2] = USCARD("🂢 "),
174 [CLU_3] = USCARD("🃓 "), [DIA_3] = USCARD("🃃 "),
175 [HEA_3] = USCARD("🂳 "), [SPA_3] = USCARD("🂣 "),
176 [CLU_4] = USCARD("🃔 "), [DIA_4] = USCARD("🃄 "),
177 [HEA_4] = USCARD("🂴 "), [SPA_4] = USCARD("🂤 "),
178 [CLU_5] = USCARD("🃕 "), [DIA_5] = USCARD("🃅 "),
179 [HEA_5] = USCARD("🂵 "), [SPA_5] = USCARD("🂥 "),
180 [CLU_6] = USCARD("🃖 "), [DIA_6] = USCARD("🃆 "),
181 [HEA_6] = USCARD("🂶 "), [SPA_6] = USCARD("🂦 "),
182 [CLU_7] = USCARD("🃗 "), [DIA_7] = USCARD("🃇 "),
183 [HEA_7] = USCARD("🂷 "), [SPA_7] = USCARD("🂧 "),
184 [CLU_8] = USCARD("🃘 "), [DIA_8] = USCARD("🃈 "),
185 [HEA_8] = USCARD("🂸 "), [SPA_8] = USCARD("🂨 "),
186 [CLU_9] = USCARD("🃙 "), [DIA_9] = USCARD("🃉 "),
187 [HEA_9] = USCARD("🂹 "), [SPA_9] = USCARD("🂩 "),
188 [CLU_X] = USCARD("🃚 "), [DIA_X] = USCARD("🃊 "),
189 [HEA_X] = USCARD("🂺 "), [SPA_X] = USCARD("🂪 "),
190 [CLU_J] = USCARD("🃛 "), [DIA_J] = USCARD("🃋 "),
191 [HEA_J] = USCARD("🂻 "), [SPA_J] = USCARD("🂫 "),
192 [CLU_Q] = USCARD("🃝 "), [DIA_Q] = USCARD("🃍 "),
193 [HEA_Q] = USCARD("🂽 "), [SPA_Q] = USCARD("🂭 "),
194 [CLU_K] = USCARD("🃞 "), [DIA_K] = USCARD("🃎 "),
195 [HEA_K] = USCARD("🂾 "), [SPA_K] = USCARD("🂮 "),
196 },
197 .facedown = (char*[]){"🂠 "},
198 .placeholder = (char*[]){"❲❳"},
199 .foundation = (char*[]){"⟨⟩"},
200 .halfstack = (char*[]){"🂠"},
201 .halfcard = (int[]){0},
202 .halfwidth = {1, 1, 4},
203 };
204 const struct scheme unicode_small_color = {
205 .width = 2,
206 .height = 1,
207 .overlap = 1,
208 .card = {
209 [NO_CARD] = (char*[]){" "},
210 [CLU_A] = BUSCARD("🃑"), [DIA_A] = RUSCARD("🃁"),
211 [HEA_A] = RUSCARD("🂱"), [SPA_A] = BUSCARD("🂡"),
212 [CLU_2] = BUSCARD("🃒"), [DIA_2] = RUSCARD("🃂"),
213 [HEA_2] = RUSCARD("🂲"), [SPA_2] = BUSCARD("🂢"),
214 [CLU_3] = BUSCARD("🃓"), [DIA_3] = RUSCARD("🃃"),
215 [HEA_3] = RUSCARD("🂳"), [SPA_3] = BUSCARD("🂣"),
216 [CLU_4] = BUSCARD("🃔"), [DIA_4] = RUSCARD("🃄"),
217 [HEA_4] = RUSCARD("🂴"), [SPA_4] = BUSCARD("🂤"),
218 [CLU_5] = BUSCARD("🃕"), [DIA_5] = RUSCARD("🃅"),
219 [HEA_5] = RUSCARD("🂵"), [SPA_5] = BUSCARD("🂥"),
220 [CLU_6] = BUSCARD("🃖"), [DIA_6] = RUSCARD("🃆"),
221 [HEA_6] = RUSCARD("🂶"), [SPA_6] = BUSCARD("🂦"),
222 [CLU_7] = BUSCARD("🃗"), [DIA_7] = RUSCARD("🃇"),
223 [HEA_7] = RUSCARD("🂷"), [SPA_7] = BUSCARD("🂧"),
224 [CLU_8] = BUSCARD("🃘"), [DIA_8] = RUSCARD("🃈"),
225 [HEA_8] = RUSCARD("🂸"), [SPA_8] = BUSCARD("🂨"),
226 [CLU_9] = BUSCARD("🃙"), [DIA_9] = RUSCARD("🃉"),
227 [HEA_9] = RUSCARD("🂹"), [SPA_9] = BUSCARD("🂩"),
228 [CLU_X] = BUSCARD("🃚"), [DIA_X] = RUSCARD("🃊"),
229 [HEA_X] = RUSCARD("🂺"), [SPA_X] = BUSCARD("🂪"),
230 [CLU_J] = BUSCARD("🃛"), [DIA_J] = RUSCARD("🃋"),
231 [HEA_J] = RUSCARD("🂻"), [SPA_J] = BUSCARD("🂫"),
232 [CLU_Q] = BUSCARD("🃝"), [DIA_Q] = RUSCARD("🃍"),
233 [HEA_Q] = RUSCARD("🂽"), [SPA_Q] = BUSCARD("🂭"),
234 [CLU_K] = BUSCARD("🃞"), [DIA_K] = RUSCARD("🃎"),
235 [HEA_K] = RUSCARD("🂾"), [SPA_K] = BUSCARD("🂮"),
236 },
237 .facedown = (char*[]){"🂠 "},
238 .placeholder = (char*[]){"❲❳"},
239 .foundation = (char*[]){"⟨⟩"},
240 .halfstack = (char*[]){"🂠"},
241 .halfcard = (int[]){0},
242 .halfwidth = {1, 1, 14},
243 };
244 #undef p
245 #endif
Imprint / Impressum