1#ifndef YAZE_CLI_COMMAND_HANDLER_H
2#define YAZE_CLI_COMMAND_HANDLER_H
10#include <unordered_map>
13#include "absl/status/status.h"
14#include "absl/strings/str_cat.h"
25#include "asar-dll-bindings/c/asar.h"
50 return os <<
"\033[" << mod.
code <<
"m";
58 virtual absl::Status
handle(
const std::vector<std::string>& arg_vec) = 0;
65 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override;
70 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override;
75 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override;
83 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override {
87 auto const& arg = arg_vec[0];
89 std::cout <<
"Title: " << green <<
rom_.
title() << std::endl;
90 std::cout << reset <<
"Size: " << blue <<
"0x" << std::hex <<
rom_.
size()
91 << reset << std::endl;
92 return absl::OkStatus();
101 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override {
103 if (arg_vec.size() == 2) {
109 return absl::OkStatus();
116 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override;
126 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override;
137 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override {
138 auto arg = arg_vec[0];
139 std::stringstream ss(arg.data());
140 uint32_t snes_address;
141 ss >> std::hex >> snes_address;
143 std::cout << std::hex << pc_address << std::endl;
144 return absl::OkStatus();
156 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override {
157 auto arg = arg_vec[0];
158 std::stringstream ss(arg.data());
160 ss >> std::hex >> pc_address;
163 std::cout <<
"SNES LoROM Address: ";
164 std::cout << blue <<
"$" << std::uppercase << std::hex << snes_address
166 return absl::OkStatus();
178 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override {
181 std::stringstream ss(arg_vec[1].data());
183 ss >> std::hex >> offset;
184 uint32_t length = 0x01;
185 if (!arg_vec[2].empty()) {
186 length = std::stoi(arg_vec[2]);
191 if (!returned_bytes_status.ok()) {
192 return returned_bytes_status.status();
194 auto returned_bytes = returned_bytes_status.value();
195 for (
const auto& each : returned_bytes) {
198 std::cout << std::endl;
201 std::cout << std::hex <<
byte.value() << std::endl;
204 return absl::OkStatus();
216 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override;
227 absl::Status
handle(
const std::vector<std::string>& arg_vec)
override {
230 std::stringstream ss(arg_vec[1].data());
232 ss >> std::hex >> size;
236 std::cout <<
"Successfully expanded ROM to " << std::hex << size
239 return absl::OkStatus();
247 std::unordered_map<std::string, std::shared_ptr<CommandHandler>>
handlers = {
248 {
"-a", std::make_shared<ApplyPatch>()},
249 {
"-asar", std::make_shared<AsarPatch>()},
250 {
"-c", std::make_shared<CreatePatch>()},
251 {
"-o", std::make_shared<Open>()},
252 {
"-b", std::make_shared<Backup>()},
253 {
"-x", std::make_shared<Expand>()},
254 {
"-i", std::make_shared<Compress>()},
255 {
"-e", std::make_shared<Decompress>()},
256 {
"-s", std::make_shared<SnesToPc>()},
257 {
"-p", std::make_shared<PcToSnes>()},
258 {
"-t", std::make_shared<Tile16Transfer>()},
259 {
"-r", std::make_shared<ReadFromRom>()}
The Rom class is used to load, save, and modify Rom data.
absl::Status SaveToFile(bool backup, bool save_new=false, std::string filename="")
Saves the Rom data to a file.
void Expand(int size)
Expand the Rom data to a specified size.
absl::Status LoadFromFile(const std::string &filename, bool z3_load=true)
absl::StatusOr< uint8_t > ReadByte(int offset)
absl::StatusOr< std::vector< uint8_t > > ReadByteVector(uint32_t offset, uint32_t length)
absl::Status handle(const std::vector< std::string > &arg_vec) override
absl::Status handle(const std::vector< std::string > &arg_vec) override
absl::Status handle(const std::vector< std::string > &arg_vec) override
friend std::ostream & operator<<(std::ostream &os, const ColorModifier &mod)
ColorModifier(ColorCode pCode)
virtual ~CommandHandler()=default
virtual absl::Status handle(const std::vector< std::string > &arg_vec)=0
absl::Status handle(const std::vector< std::string > &arg_vec) override
absl::Status handle(const std::vector< std::string > &arg_vec) override
absl::Status handle(const std::vector< std::string > &arg_vec) override
absl::Status handle(const std::vector< std::string > &arg_vec) override
Open a Rom file and display information about it.
absl::Status handle(const std::vector< std::string > &arg_vec) override
Convert a PC address to a SNES address.
absl::Status handle(const std::vector< std::string > &arg_vec) override
absl::Status handle(const std::vector< std::string > &arg_vec) override
Convert a SNES address to a PC address.
absl::Status handle(const std::vector< std::string > &arg_vec) override
Transfer tile 16 data from one Rom to another.
absl::Status handle(const std::vector< std::string > &arg_vec) override
#define RETURN_IF_ERROR(expression)
uint32_t PcToSnes(uint32_t addr)
uint32_t SnesToPc(uint32_t addr) noexcept
Command handler for the CLI.
std::unordered_map< std::string, std::shared_ptr< CommandHandler > > handlers