#include #include #include #include int main(int argc, char* argv[]) { if (argc < 3) { std::cerr << "Usage: " << argv[0] << " \n"; return 1; } // --- Read entire file into memory --- std::ifstream infile(argv[1], std::ios::binary); if (!infile) { std::cerr << "Error opening input file.\n"; return 1; } std::vector buffer((std::istreambuf_iterator(infile)), std::istreambuf_iterator()); infile.close(); if (buffer.empty()) { std::cerr << "Input file is empty.\n"; return 1; } // --- 1. Remove all ASCII 155 (0x9B) bytes --- buffer.erase(std::remove(buffer.begin(), buffer.end(), (char)155), buffer.end()); // --- 2. Remove form feed (ASCII 12) from the last 16 bytes only --- if (!buffer.empty()) { size_t start = (buffer.size() > 16) ? buffer.size() - 16 : 0; buffer.erase(std::remove(buffer.begin() + start, buffer.end(), (char)12), buffer.end()); } // --- 3. Remove one space (ASCII 32) at start of final line --- if (!buffer.empty()) { // Find position of last newline character ('\n' or '\r') size_t last_line_start = 0; for (size_t i = buffer.size(); i-- > 0; ) { if (buffer[i] == '\n') { last_line_start = i + 1; break; } } // If first character of last line is a space (0x20), remove one if (last_line_start < buffer.size() && buffer[last_line_start] == ' ') { buffer.erase(buffer.begin() + last_line_start); } } // --- Write output file --- std::ofstream outfile(argv[2], std::ios::binary); if (!outfile) { std::cerr << "Error opening output file.\n"; return 1; } outfile.write(buffer.data(), buffer.size()); outfile.close(); return 0; }