#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
void processGCodeFile(const std::string& inputFilePath, const std::string& outputFilePath) {
std::ifstream inputFile(inputFilePath);
std::ofstream outputFile(outputFilePath);
std::string line;
if (!inputFile.is_open() || !outputFile.is_open()) {
std::cerr << "Error opening file." << std::endl;
return;
}
while (std::getline(inputFile, line)) {
std::replace(line.begin(), line.end(), ';', '%');
if (line.find("G00") != std::string::npos) {
outputFile << "M05" << std::endl;
}
outputFile << line << std::endl;
if (line.find("G00") != std::string::npos) {
outputFile << "M03" << std::endl;
}
}
inputFile.close();
outputFile.close();
}
int main() {
std::string inputFilePath = "input.gcode"; // Replace with actual input file path
std::string outputFilePath = "output.gcode"; // Replace with actual output file path
processGCodeFile(inputFilePath, outputFilePath);
std::cout << "Processing completed." << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnZvaWQgcHJvY2Vzc0dDb2RlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRGaWxlUGF0aCwgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dEZpbGVQYXRoKSB7CiAgICBzdGQ6Omlmc3RyZWFtIGlucHV0RmlsZShpbnB1dEZpbGVQYXRoKTsKICAgIHN0ZDo6b2ZzdHJlYW0gb3V0cHV0RmlsZShvdXRwdXRGaWxlUGF0aCk7CiAgICBzdGQ6OnN0cmluZyBsaW5lOwoKICAgIGlmICghaW5wdXRGaWxlLmlzX29wZW4oKSB8fCAhb3V0cHV0RmlsZS5pc19vcGVuKCkpIHsKICAgICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yIG9wZW5pbmcgZmlsZS4iIDw8IHN0ZDo6ZW5kbDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgd2hpbGUgKHN0ZDo6Z2V0bGluZShpbnB1dEZpbGUsIGxpbmUpKSB7CiAgICAgICAgc3RkOjpyZXBsYWNlKGxpbmUuYmVnaW4oKSwgbGluZS5lbmQoKSwgJzsnLCAnJScpOwoKICAgICAgICBpZiAobGluZS5maW5kKCJHMDAiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgICAgICBvdXRwdXRGaWxlIDw8ICJNMDUiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICAgICAgb3V0cHV0RmlsZSA8PCBsaW5lIDw8IHN0ZDo6ZW5kbDsKICAgICAgICBpZiAobGluZS5maW5kKCJHMDAiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgICAgICBvdXRwdXRGaWxlIDw8ICJNMDMiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICB9CgogICAgaW5wdXRGaWxlLmNsb3NlKCk7CiAgICBvdXRwdXRGaWxlLmNsb3NlKCk7Cn0KCmludCBtYWluKCkgewogICAgc3RkOjpzdHJpbmcgaW5wdXRGaWxlUGF0aCA9ICJpbnB1dC5nY29kZSI7IC8vIFJlcGxhY2Ugd2l0aCBhY3R1YWwgaW5wdXQgZmlsZSBwYXRoCiAgICBzdGQ6OnN0cmluZyBvdXRwdXRGaWxlUGF0aCA9ICJvdXRwdXQuZ2NvZGUiOyAvLyBSZXBsYWNlIHdpdGggYWN0dWFsIG91dHB1dCBmaWxlIHBhdGgKCiAgICBwcm9jZXNzR0NvZGVGaWxlKGlucHV0RmlsZVBhdGgsIG91dHB1dEZpbGVQYXRoKTsKICAgIHN0ZDo6Y291dCA8PCAiUHJvY2Vzc2luZyBjb21wbGV0ZWQuIiA8PCBzdGQ6OmVuZGw7CgogICAgcmV0dXJuIDA7Cn0K