annotate src/player.cc @ 32:93224b26a0ee default tip

player: efforts towards C-ization
author Paper <paper@tflc.us>
date Mon, 10 Feb 2025 19:17:29 -0500
parents 973734ebd2be
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
1 #include "animone/player.h"
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
2 #include "animone/util.h"
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
3
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
4 #include <map>
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
5 #include <sstream>
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
6 #include <string>
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
7 #include <vector>
21
973734ebd2be dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents: 14
diff changeset
8
973734ebd2be dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents: 14
diff changeset
9 #include <iostream>
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
10
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
11 #include <string.h>
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
12 #include <stdio.h>
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
13
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
14 // simple crc32-hash function, derived from Hacker's Delight
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
15 // and expects a C-string as input.
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
16 // `n` should be the amount of the largest expected value of
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
17 // the hash.
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
18 static inline constexpr uint32_t crcn32b(unsigned char *message, size_t n)
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
19 {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
20 uint32_t crc = 0xFFFFFFFF;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
21 size_t i = 0, j = 0;
21
973734ebd2be dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents: 14
diff changeset
22
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
23 for (i = 0; message[i] && i < n; i++) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
24 crc = crc ^ message[i];
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
25 for (j = 0; j < 8; j++)
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
26 crc = (crc >> 1) ^ (0xEDB88320 & -(crc & 1));
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
27 }
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
28
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
29 return ~crc;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
30 }
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
31
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
32 typedef enum StateName {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
33 STATENAME_EXPECTPLAYERNAME = 0,
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
34 STATENAME_EXPECTSECTION,
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
35 STATENAME_EXPECTWINDOWPLATFORM,
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
36 STATENAME_EXPECTEXECUTABLEPLATFORM,
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
37 STATENAME_EXPECTWINDOW,
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
38 STATENAME_EXPECTEXECUTABLE,
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
39 STATENAME_EXPECTSTRATEGY,
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
40 STATENAME_EXPECTTYPE,
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
41 STATENAME_EXPECTWINDOWTITLE,
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
42 } StateName;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
43
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
44 typedef struct State {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
45 StateName state;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
46
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
47 animone::WindowPlatform window_platform;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
48 animone::ExecutablePlatform executable_platform;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
49 } State;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
50
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
51 static size_t GetIndentation(const char *line) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
52 return strcspn(line, "\t");
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
53 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
54
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
55 static int HandleIndentation(const size_t current, const std::vector<animone::Player>& players, State *state) {
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
56 // Each state has a definitive expected indentation
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
57 size_t expected;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
58
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
59 switch (state->state) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
60 default:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
61 case STATENAME_EXPECTPLAYERNAME:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
62 expected = 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
63 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
64 case STATENAME_EXPECTSECTION:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
65 expected = 1;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
66 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
67 case STATENAME_EXPECTWINDOWPLATFORM:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
68 case STATENAME_EXPECTEXECUTABLEPLATFORM:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
69 case STATENAME_EXPECTSTRATEGY:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
70 case STATENAME_EXPECTTYPE:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
71 expected = 2;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
72 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
73 case STATENAME_EXPECTWINDOW:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
74 case STATENAME_EXPECTEXECUTABLE:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
75 case STATENAME_EXPECTWINDOWTITLE:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
76 expected = 3;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
77 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
78 }
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
79
21
973734ebd2be dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents: 14
diff changeset
80 if (current > expected) {
973734ebd2be dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents: 14
diff changeset
81 std::cerr << "animone: excessive indentation found" << std::endl;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
82 return false; // Disallow excessive indentation
21
973734ebd2be dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents: 14
diff changeset
83 }
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
84
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
85 if (current < expected) {
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
86 StateName name;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
87
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
88 switch (current) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
89 case 0: name = STATENAME_EXPECTPLAYERNAME; break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
90 default:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
91 case 1: name = STATENAME_EXPECTSECTION; break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
92 case 2:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
93 switch (state->state) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
94 case STATENAME_EXPECTWINDOW: name = STATENAME_EXPECTWINDOWPLATFORM; break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
95 case STATENAME_EXPECTEXECUTABLE: name = STATENAME_EXPECTEXECUTABLEPLATFORM; break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
96 default: return 0;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
97 }
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
98 break;
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
99 }
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
100
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
101 switch (state->state) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
102 case STATENAME_EXPECTWINDOW:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
103 if (players.back().windows.empty())
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
104 return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
105 state->state = name;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
106 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
107 case STATENAME_EXPECTEXECUTABLE:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
108 if (players.back().executables.empty())
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
109 return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
110 state->state = name;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
111 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
112 case STATENAME_EXPECTSTRATEGY:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
113 if (players.back().strategies.empty())
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
114 return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
115 state->state = name;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
116 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
117 case STATENAME_EXPECTTYPE:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
118 state->state = name;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
119 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
120 case STATENAME_EXPECTWINDOWTITLE:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
121 return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
122 default:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
123 break; // ???
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
124 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
125 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
126
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
127 return 1;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
128 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
129
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
130 bool HandleState(char *line, std::vector<animone::Player>& players, State *state) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
131 switch (state->state) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
132 case STATENAME_EXPECTPLAYERNAME:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
133 players.push_back(animone::Player());
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
134 players.back().name = line;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
135 state->state = STATENAME_EXPECTSECTION;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
136 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
137
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
138 case STATENAME_EXPECTSECTION:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
139 animone_internal_util_TrimRight(line, ":");
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
140
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
141 switch (crcn32b((unsigned char *)line, 11)) { // max: "executables"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
142 case 0xe3e7859b: state->state = STATENAME_EXPECTWINDOWPLATFORM; break; // "windows"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
143 case 0x6cdf7147: state->state = STATENAME_EXPECTEXECUTABLEPLATFORM; break; // "executables"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
144 case 0x611f2213: state->state = STATENAME_EXPECTSTRATEGY; break; // "strategies"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
145 case 0x8cde5729: state->state = STATENAME_EXPECTTYPE; break; // "type"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
146 default: return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
147 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
148
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
149 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
150
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
151 case STATENAME_EXPECTWINDOWPLATFORM:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
152 animone_internal_util_TrimRight(line, ":");
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
153
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
154 switch (crcn32b((unsigned char *)line, 6)) { // max: "quartz"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
155 case 0x6fe218f0: state->window_platform = animone::WindowPlatform::Quartz; break; // "quartz"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
156 case 0xb50ba1d1: state->window_platform = animone::WindowPlatform::Win32; break; // "win32"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
157 case 0x3220e772: state->window_platform = animone::WindowPlatform::X11; break; // "x11"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
158 default: return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
159 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
160
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
161 state->state = STATENAME_EXPECTWINDOW;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
162 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
163
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
164 case STATENAME_EXPECTEXECUTABLEPLATFORM:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
165 animone_internal_util_TrimRight(line, ":");
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
166
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
167 switch (crcn32b((unsigned char *)line, 6)) { // max: "macosx"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
168 case 0xe0e30f6e: state->executable_platform = animone::ExecutablePlatform::Posix; break; // "posix"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
169 case 0xb50ba1d1: state->executable_platform = animone::ExecutablePlatform::Win32; break; // "win32"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
170 case 0x912ee411: state->executable_platform = animone::ExecutablePlatform::Xnu; break; // "macosx"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
171 default: return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
172 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
173
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
174 state->state = STATENAME_EXPECTEXECUTABLE;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
175 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
176
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
177 case STATENAME_EXPECTWINDOW:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
178 players.back().windows[state->window_platform].push_back(line);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
179 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
180
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
181 case STATENAME_EXPECTEXECUTABLE:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
182 players.back().executables[state->executable_platform].push_back(line);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
183 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
184
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
185 case STATENAME_EXPECTSTRATEGY: {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
186 /* XXX PORT: These should be bit flags instead. */
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
187 animone_internal_util_TrimRight(line, ":");
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
188
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
189 animone::Strategy strategy;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
190
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
191 switch (crcn32b((unsigned char *)line, 13)) { // max: "ui_automation"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
192 case 0xfef78b24: strategy = animone::Strategy::WindowTitle; break; // "window_title"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
193 case 0x4d88605f: strategy = animone::Strategy::OpenFiles; break; // "open_files"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
194 case 0xdceb02f6: strategy = animone::Strategy::UiAutomation; break; // "ui_automation"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
195 default: return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
196 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
197
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
198 players.back().strategies.push_back(strategy);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
199
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
200 switch (strategy) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
201 case animone::Strategy::WindowTitle:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
202 state->state = STATENAME_EXPECTWINDOWTITLE;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
203 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
204 default:
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
205 break;
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
206 }
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
207 break;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
208 }
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
209
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
210 case STATENAME_EXPECTTYPE: {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
211 switch (crcn32b((unsigned char *)line, 13)) { // max: "ui_automation"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
212 case 0xe35e00df: players.back().type = animone::PlayerType::Default; break; // "default"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
213 case 0x32bca1a4: players.back().type = animone::PlayerType::WebBrowser; break; // "web_browser"
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
214 default: return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
215 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
216
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
217 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
218 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
219
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
220 case STATENAME_EXPECTWINDOWTITLE:
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
221 players.back().window_title_format = line;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
222 state->state = STATENAME_EXPECTSTRATEGY;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
223 break;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
224 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
225
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
226 return 1;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
227 }
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
228
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
229 ////////////////////////////////////////////////////////////////////////////////
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
230
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
231 int animone_ParsePlayersData(const char *data, std::vector<animone::Player>& players) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
232 if (!data || !*data)
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
233 return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
234
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
235 const char *ptr, *next;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
236
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
237 State state;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
238
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
239 int ln;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
240 for (ln = 0, ptr = data; ptr; ln++, ptr = next) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
241 next = strchr(ptr, '\n');
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
242
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
243 const size_t len = (next) ? (next - ptr) : strlen(ptr);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
244 if (!len)
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
245 continue; // Ignore empty lines
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
246
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
247 char *line = (char *)malloc(len + 1);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
248 if (!line)
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
249 return 0;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
250
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
251 memcpy(line, ptr, len);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
252 line[len] = '\0';
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
253
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
254 size_t indentation = GetIndentation(line);
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
255
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
256 animone_internal_util_TrimLeft(line, "\t");
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
257 animone_internal_util_TrimRight(line, "\n\r");
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
258
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
259 if (!*line || *line == '#') {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
260 free(line);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
261 continue;
21
973734ebd2be dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents: 14
diff changeset
262 }
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
263
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
264 if (!HandleIndentation(indentation, players, &state)) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
265 fprintf(stderr, "animone: indentation: failed on line %d\n", ln);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
266 free(line);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
267 return 0;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
268 }
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
269
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
270 if (!HandleState(line, players, &state)) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
271 fprintf(stderr, "animone: state: failed on line %d\n", ln);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
272 free(line);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
273 return 0;
21
973734ebd2be dep/animone: REFACTOR ALL THE THINGS
Paper <paper@paper.us.eu.org>
parents: 14
diff changeset
274 }
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
275 }
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
276
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
277 return !players.empty();
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
278 }
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
279
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
280 int animone_ParsePlayersFile(const char *path, std::vector<animone::Player>& players) {
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
281 char *data;
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
282
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
283 if (!animone_internal_util_ReadFile(path, &data, NULL))
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
284 return 0;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
285
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
286 int x = animone_ParsePlayersData(data, players);
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
287
32
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
288 free(data);
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
289
93224b26a0ee player: efforts towards C-ization
Paper <paper@tflc.us>
parents: 21
diff changeset
290 return x;
14
27b988a1048c *: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents: 0
diff changeset
291 }