| 9170 | } |
| 9171 | |
| 9172 | static int parsetrainerdata(const TCHAR *data, uae_u16 *outdata, uae_u16 *outmask) |
| 9173 | { |
| 9174 | int len = uaetcslen(data); |
| 9175 | uae_u16 v = 0, vm = 0; |
| 9176 | int j = 0; |
| 9177 | for (int i = 0; i < len; ) { |
| 9178 | TCHAR c1 = _totupper(data[i + 0]); |
| 9179 | TCHAR c2 = _totupper(data[i + 1]); |
| 9180 | if (c1 > 0 && c1 <= ' ') { |
| 9181 | i++; |
| 9182 | continue; |
| 9183 | } |
| 9184 | if (i + 1 >= len) |
| 9185 | return 0; |
| 9186 | |
| 9187 | vm <<= 8; |
| 9188 | vm |= 0xff; |
| 9189 | if (c1 == 'X' || c1 == '?') |
| 9190 | vm &= 0x0f; |
| 9191 | if (c2 == 'X' || c2 == '?') |
| 9192 | vm &= 0xf0; |
| 9193 | |
| 9194 | if (c1 >= 'A') |
| 9195 | c1 -= 'A' - 10; |
| 9196 | else if (c1 >= '0') |
| 9197 | c1 -= '0'; |
| 9198 | if (c2 >= 'A') |
| 9199 | c2 -= 'A' - 10; |
| 9200 | else if (c2 >= '0') |
| 9201 | c2 -= '0'; |
| 9202 | |
| 9203 | v <<= 8; |
| 9204 | if (c1 >= 0 && c1 < 16) |
| 9205 | v |= c1 << 4; |
| 9206 | if (c2 >= 0 && c2 < 16) |
| 9207 | v |= c2; |
| 9208 | |
| 9209 | if (i & 2) { |
| 9210 | outdata[j] = v; |
| 9211 | outmask[j] = vm; |
| 9212 | j++; |
| 9213 | } |
| 9214 | |
| 9215 | i += 2; |
| 9216 | } |
| 9217 | return j; |
| 9218 | } |
| 9219 | |
| 9220 | void debug_init_trainer(const TCHAR *file) |
| 9221 | { |
no outgoing calls
no test coverage detected