1 #include "xbox_region.h"
6 #define XBOX_REGION_KNOWN_MASK \
7 (XB_REGION_US_CANADA | XB_REGION_JAPAN | \
8 XB_REGION_EUROPE_AU_NZ | XB_REGION_REST_OF_WORLD | \
9 XB_REGION_MANUFACTURING)
11 static void xbox_region_append(char *output,
18 if (!output || output_size == 0 || !text || !have_text)
21 used = strlen(output);
22 if (used >= output_size - 1)
26 snprintf(output + used, output_size - used, "; ");
27 used = strlen(output);
28 if (used >= output_size - 1)
32 snprintf(output + used, output_size - used, "%s", text);
36 int xbox_region_format(uint32_t mask, char *output, size_t output_size)
38 uint32_t execution_mask;
39 uint32_t unknown_mask;
43 if (!output || output_size == 0)
48 execution_mask = mask & 0x7fffffffU;
50 if (execution_mask == 0x7fffffffU) {
51 xbox_region_append(output, output_size, "Region Free", &have_text);
52 } else if (execution_mask == 0U) {
53 xbox_region_append(output, output_size, "None (Locked)", &have_text);
55 if (mask & XB_REGION_US_CANADA)
56 xbox_region_append(output, output_size, "North America", &have_text);
57 if (mask & XB_REGION_JAPAN)
58 xbox_region_append(output, output_size, "Japan", &have_text);
59 if (mask & XB_REGION_EUROPE_AU_NZ)
60 xbox_region_append(output, output_size,
61 "Europe/Australia/New Zealand", &have_text);
62 if (mask & XB_REGION_REST_OF_WORLD)
63 xbox_region_append(output, output_size,
64 "Rest of World", &have_text);
67 if (mask & XB_REGION_MANUFACTURING)
68 xbox_region_append(output, output_size, "Manufacturing", &have_text);
70 unknown_mask = mask & ~((uint32_t)XBOX_REGION_KNOWN_MASK);
71 if (execution_mask != 0x7fffffffU && unknown_mask != 0U) {
72 snprintf(unknown, sizeof(unknown), "Unknown flags 0x%08x",
74 xbox_region_append(output, output_size, unknown, &have_text);