23 if (arg_vec.empty()) {
24 return absl::InvalidArgumentError(
25 "Usage: palette <export|import> [options]");
28 const std::string& action = arg_vec[0];
29 std::vector<std::string> new_args(arg_vec.begin() + 1, arg_vec.end());
31 if (action ==
"export") {
33 }
else if (action ==
"import") {
37 return absl::InvalidArgumentError(
"Invalid action for palette command.");
48 const std::vector<std::string>& arg_vec) {
49 std::string group_name;
51 std::string output_file;
53 for (
size_t i = 0; i < arg_vec.size(); ++i) {
54 const std::string& arg = arg_vec[i];
55 if ((arg ==
"--group") && i + 1 < arg_vec.size()) {
56 group_name = arg_vec[++i];
57 }
else if ((arg ==
"--id") && i + 1 < arg_vec.size()) {
58 palette_id = std::stoi(arg_vec[++i]);
59 }
else if ((arg ==
"--to") && i + 1 < arg_vec.size()) {
60 output_file = arg_vec[++i];
64 if (group_name.empty() || palette_id == -1 || output_file.empty()) {
65 return absl::InvalidArgumentError(
66 "Usage: palette export --group <group> --id <id> --to <file>");
69 std::string rom_file = absl::GetFlag(FLAGS_rom);
70 if (rom_file.empty()) {
71 return absl::InvalidArgumentError(
72 "ROM file must be provided via --rom flag.");
78 return absl::AbortedError(
"Failed to load ROM.");
84 if (!load_status.ok()) {
85 return absl::AbortedError(
"Failed to load game data.");
90 return absl::NotFoundError(
"Palette group not found.");
93 auto palette = palette_group->palette(palette_id);
94 if (palette.empty()) {
95 return absl::NotFoundError(
"Palette not found.");
98 std::vector<SDL_Color> sdl_palette;
99 for (
const auto& color : palette) {
101 sdl_color.r = color.rgb().x;
102 sdl_color.g = color.rgb().y;
103 sdl_color.b = color.rgb().z;
105 sdl_palette.push_back(sdl_color);
113 std::cout <<
"Successfully exported palette " << palette_id <<
" from group "
114 << group_name <<
" to " << output_file << std::endl;
116 return absl::OkStatus();
121 const std::vector<std::string>& arg_vec) {
122 std::string group_name;
124 std::string input_file;
126 for (
size_t i = 0; i < arg_vec.size(); ++i) {
127 const std::string& arg = arg_vec[i];
128 if ((arg ==
"--group") && i + 1 < arg_vec.size()) {
129 group_name = arg_vec[++i];
130 }
else if ((arg ==
"--id") && i + 1 < arg_vec.size()) {
131 palette_id = std::stoi(arg_vec[++i]);
132 }
else if ((arg ==
"--from") && i + 1 < arg_vec.size()) {
133 input_file = arg_vec[++i];
137 if (group_name.empty() || palette_id == -1 || input_file.empty()) {
138 return absl::InvalidArgumentError(
139 "Usage: palette import --group <group> --id <id> --from <file>");
142 std::string rom_file = absl::GetFlag(FLAGS_rom);
143 if (rom_file.empty()) {
144 return absl::InvalidArgumentError(
145 "ROM file must be provided via --rom flag.");
151 return absl::AbortedError(
"Failed to load ROM.");
157 if (!load_status.ok()) {
158 return absl::AbortedError(
"Failed to load game data.");
162 if (sdl_palette.empty()) {
163 return absl::AbortedError(
"Failed to load palette file.");
167 for (
const auto& sdl_color : sdl_palette) {
173 if (!palette_group) {
174 return absl::NotFoundError(
"Palette group not found.");
178 auto* pal = palette_group->mutable_palette(palette_id);
182 auto save_status = rom.
SaveToFile({.save_new =
false});
183 if (!save_status.ok()) {
187 std::cout <<
"Successfully imported palette " << palette_id <<
" to group "
188 << group_name <<
" from " << input_file << std::endl;
189 std::cout <<
"✅ ROM saved to: " << rom.
filename() << std::endl;
191 return absl::OkStatus();