annotate src/adventure/panic_state.c @ 117:445035ace840

core: fix panic handling early
author David Demelier <markand@malikania.fr>
date Sat, 03 Oct 2020 19:03:22 +0200
parents c7e993455985
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * panic_state.c -- panic state
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
19 #include <assert.h>
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
20 #include <stdio.h>
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
21 #include <stdlib.h>
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
22
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <error.h>
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
24 #include <event.h>
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <font.h>
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
26 #include <game.h>
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <painter.h>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <sys.h>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <texture.h>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <util.h>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include <window.h>
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
32 #include <map_state.h>
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
117
445035ace840 core: fix panic handling early
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
34 #include <assets/fonts/Lato-Regular.h>
445035ace840 core: fix panic handling early
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
35
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #include "panic_state.h"
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #define BACKGROUND 0x4f5070ff
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #define FOREGROUND 0xffffffff
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
117
445035ace840 core: fix panic handling early
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
41 #define SIZE 16
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
42 #define PADDING 20
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
43
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
44 #define OUT "molko-adventure.txt"
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
45
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 struct label {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 const char *text;
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
48 struct texture texture;
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 };
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 static struct {
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
52 struct font font;
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 } data;
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 static struct label headers[] = {
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
56 { "An unrecoverable error occured and the game cannot continue.", 0 },
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
57 { "Please report the detailed error as provided below.", 0 },
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 };
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 static struct label bottom[] = {
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
61 { "Press <s> to save information and generate a core dump.", 0 },
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
62 { "Press <q> to quit without saving information.", 0 }
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 };
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
65 static struct label lerror;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
66
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 static void
95
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
68 die(const char *fmt, ...)
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
69 {
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
70 assert(fmt);
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
71
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
72 va_list ap;
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
73
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
74 va_start(ap, fmt);
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
75 fprintf(stderr, "abort: ");
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
76 vfprintf(stderr, fmt, ap);
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
77 va_end(ap);
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
78 exit(1);
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
79 }
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
80
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
81 static void
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 enter(void)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 static void
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
87 dump(void)
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
88 {
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
89 FILE *fp;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
90
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
91 if (!(fp = fopen(OUT, "w")))
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
92 goto dump;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
93
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
94 /* Print various information. */
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
95 fprintf(fp, "Molko's Adventure crash dump report\n");
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
96 fprintf(fp, "== state map dump ==\n");
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
97 fprintf(fp, "map:\n");
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
98 fprintf(fp, " w %u\n", map_state_data.map.data.w);
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
99 fprintf(fp, " h %u\n", map_state_data.map.data.h);
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
100 fprintf(fp, "player:\n");
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
101 fprintf(fp, " x: %u\n", map_state_data.player.x);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
102 fprintf(fp, " y: %u\n", map_state_data.player.y);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
103 fprintf(fp, "view:\n");
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
104 fprintf(fp, " w: %u\n", map_state_data.view.w);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
105 fprintf(fp, " h: %u\n", map_state_data.view.h);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
106 fprintf(fp, " x: %u\n", map_state_data.view.x);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
107 fprintf(fp, " y: %u\n", map_state_data.view.y);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
108
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
109 dump:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
110 if (fp)
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
111 fclose(fp);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
112
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
113 abort();
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
114 }
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
115
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
116 static void
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
117 handle_keydown(const struct event_key *ev)
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
118 {
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
119 assert(ev);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
120
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
121 switch (ev->key) {
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
122 case KEY_q:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
123 game_quit();
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
124 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
125 case KEY_s:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
126 dump();
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
127 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
128 default:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
129 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
130 }
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
131 }
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
132
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
133 static void
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 handle(const union event *ev)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 {
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
136 assert(ev);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
137
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
138 switch (ev->type) {
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
139 case EVENT_KEYDOWN:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
140 handle_keydown(&ev->key);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
141 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
142 default:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
143 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
144 }
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 static void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 generate(struct label labels[], size_t labelsz)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 {
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
150 assert(labels);
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
152 for (size_t i = 0; i < labelsz; ++i) {
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
153 if (texture_ok(&labels[i].texture))
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
154 continue;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
155
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
156 data.font.color = FOREGROUND;
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
157 font_render(&data.font, &labels[i].texture, labels[i].text);
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
158
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
159 if (!texture_ok(&labels[i].texture))
95
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
160 die("%s\n", error());
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
163
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 static void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 update(unsigned int ticks)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 (void)ticks;
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
168
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
169 lerror.text = error();
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
170
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 generate(headers, NELEM(headers));
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
172 generate(&lerror, 1);
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 generate(bottom, NELEM(bottom));
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
175
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 static void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 draw(void)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 {
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
179 int y = PADDING;
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
180
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 painter_set_target(NULL);
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 painter_set_color(BACKGROUND);
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 painter_clear();
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
184
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 /* Header. */
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 for (size_t i = 0; i < NELEM(headers); ++i) {
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
187 texture_draw(&headers[i].texture, PADDING, y);
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
188 y += headers[i].texture.h + 2;
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
190
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
191 /* Error message. */
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
192 texture_draw(&lerror.texture, PADDING, y + PADDING);
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
193
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 /* Bottom. */
97
58133933ea17 window: expose some data to avoid functions
David Demelier <markand@malikania.fr>
parents: 95
diff changeset
195 y = window.h - PADDING;
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
196 y -= bottom[0].texture.h;
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
197
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 for (size_t i = 0; i < NELEM(bottom); ++i) {
94
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
199 texture_draw(&bottom[i].texture, PADDING, y);
ed72843a7194 core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents: 91
diff changeset
200 y -= bottom[i].texture.h + 2;
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
203
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 static void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 leave(void)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
208
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 struct state panic_state = {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 .enter = enter,
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 .handle = handle,
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 .update = update,
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 .draw = draw,
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 .leave = leave
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 };
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
216
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 panic_state_init(void)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 /*
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 * If the panic state can not be loaded we're unable to show any
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 * useful information to the screen so as last resort print them
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 * on the console.
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 */
117
445035ace840 core: fix panic handling early
David Demelier <markand@malikania.fr>
parents: 98
diff changeset
225 if (!(font_openmem(&data.font, Lato_Regular, sizeof (Lato_Regular), SIZE)))
95
e82eca4f8606 core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents: 94
diff changeset
226 die("%s", error());
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 }