← index
cplusplus2x.Examples/C++20/MasterX/src/apps/ats/func_html.cpp
Source: cplusplus2x.Examples/C++20/MasterX/src/apps/ats/func_html.cpp
#include "function.hpp"

namespace token {
    void token_HTML(const std::string &command, std::vector<lex::Token> &tokens) {
        if (tokens[1].getTokenType() != lex::TOKEN_STRING) {
            stream << "Error command requires string with filename.\r\n";
            return;
        }
        if (code.instruct.size() == 0) {
            stream << "Error: Must run build command first.\r\n";
            return;
        }
        std::string fname = tokens[1].getToken();
        std::fstream file;
        file.open(fname, std::ios::out);
        if (!file.is_open()) {
            stream << "Error: file " << fname << " could not be opened for writing.\r\n";
            return;
        }
        file << "<!DOCTYPE html>\r\n<html>\r\n<head><title>ats (Atari Script) - Debug Information</title></head>\r\n<body>\r\n";
        file << "<table border=\"1\" cellpadding=\"3\" cellspacing=\"3\">\r\n";
        file << "<tr><th>Line</th><th>Address Mode</th><th>Instruction</th><th>Machine Code</th></tr>\r\n";
        for (unsigned int i = 0; i < code.instruct.size(); ++i) {
            file << "<tr>";
            file << "<th>" << code.instruct[i].line_num << "</th>";
            file << "<th>" << interp::add_mode[code.instruct[i].mode] << "</th>";
            file << "<th>" << code.instruct[i].text << "</th>";
            file << "<th>" << icode::instructionToHex(code.instruct[i]) << "</th>";
            file << "</tr>\r\n";
        }
        file << "\r\n</table>\r\n";
        file << "\r\n</body>\r\n</html>\r\n";
        file.close();
        stream << "Wrote HTML debug info to file: " << fname << "\r\n";
    }
} // namespace token