23 if (arg_vec.empty()) {
24 return absl::InvalidArgumentError(
"Usage: palette <export|import> [options]");
27 const std::string& action = arg_vec[0];
28 std::vector<std::string> new_args(arg_vec.begin() + 1, arg_vec.end());
30 if (action ==
"export") {
32 }
else if (action ==
"import") {
36 return absl::InvalidArgumentError(
"Invalid action for palette command.");
47 std::string group_name;
49 std::string output_file;
51 for (
size_t i = 0; i < arg_vec.size(); ++i) {
52 const std::string& arg = arg_vec[i];
53 if ((arg ==
"--group") && i + 1 < arg_vec.size()) {
54 group_name = arg_vec[++i];
55 }
else if ((arg ==
"--id") && i + 1 < arg_vec.size()) {
56 palette_id = std::stoi(arg_vec[++i]);
57 }
else if ((arg ==
"--to") && i + 1 < arg_vec.size()) {
58 output_file = arg_vec[++i];
62 if (group_name.empty() || palette_id == -1 || output_file.empty()) {
63 return absl::InvalidArgumentError(
"Usage: palette export --group <group> --id <id> --to <file>");
66 std::string rom_file = absl::GetFlag(FLAGS_rom);
67 if (rom_file.empty()) {
68 return absl::InvalidArgumentError(
"ROM file must be provided via --rom flag.");
74 return absl::AbortedError(
"Failed to load ROM.");
77 auto palette_group = rom.
palette_group().get_group(group_name);
79 return absl::NotFoundError(
"Palette group not found.");
82 auto palette = palette_group->palette(palette_id);
83 if (palette.empty()) {
84 return absl::NotFoundError(
"Palette not found.");
87 std::vector<SDL_Color> sdl_palette;
88 for (
const auto& color : palette) {
90 sdl_color.r = color.rgb().x;
91 sdl_color.g = color.rgb().y;
92 sdl_color.b = color.rgb().z;
94 sdl_palette.push_back(sdl_color);
102 std::cout <<
"Successfully exported palette " << palette_id <<
" from group " << group_name <<
" to " << output_file << std::endl;
104 return absl::OkStatus();
109 std::string group_name;
111 std::string input_file;
113 for (
size_t i = 0; i < arg_vec.size(); ++i) {
114 const std::string& arg = arg_vec[i];
115 if ((arg ==
"--group") && i + 1 < arg_vec.size()) {
116 group_name = arg_vec[++i];
117 }
else if ((arg ==
"--id") && i + 1 < arg_vec.size()) {
118 palette_id = std::stoi(arg_vec[++i]);
119 }
else if ((arg ==
"--from") && i + 1 < arg_vec.size()) {
120 input_file = arg_vec[++i];
124 if (group_name.empty() || palette_id == -1 || input_file.empty()) {
125 return absl::InvalidArgumentError(
"Usage: palette import --group <group> --id <id> --from <file>");
128 std::string rom_file = absl::GetFlag(FLAGS_rom);
129 if (rom_file.empty()) {
130 return absl::InvalidArgumentError(
"ROM file must be provided via --rom flag.");
136 return absl::AbortedError(
"Failed to load ROM.");
140 if (sdl_palette.empty()) {
141 return absl::AbortedError(
"Failed to load palette file.");
145 for (
const auto& sdl_color : sdl_palette) {
149 auto palette_group = rom.
palette_group().get_group(group_name);
150 if (!palette_group) {
151 return absl::NotFoundError(
"Palette group not found.");
155 auto* pal = palette_group->mutable_palette(palette_id);
159 auto save_status = rom.
SaveToFile({.save_new =
false});
160 if (!save_status.ok()) {
164 std::cout <<
"Successfully imported palette " << palette_id <<
" to group " << group_name <<
" from " << input_file << std::endl;
165 std::cout <<
"✅ ROM saved to: " << rom.
filename() << std::endl;
167 return absl::OkStatus();