#include #include #include using namespace std; // ===== GLOBAL VARS ===== // string inputcmds[500][2]; string configcmds[500][2]; short sh_gl_array1count = 0; short sh_gl_array2count = 0; string fixlist[500][2]; // ===== END GLOBAL VARS ===== // // ===== FILE I/O ===== // // Write newcfg.cfg void writecfg(string sz_cfg) { ofstream newcfg; newcfg.open ("config.cfg", ios::trunc); newcfg << sz_cfg; newcfg.close(); } // Read input.txt for cfg rules string readinput() { string sz_input = ""; ifstream st_inp; st_inp.open("input.txt"); while (! st_inp.eof() ) { sz_input.push_back(st_inp.get()); } st_inp.close(); return sz_input; } // Read config.cfg string readcfg() { string sz_config = ""; ifstream st_cfg; st_cfg.open("config.cfg"); while (! st_cfg.eof() ) { sz_config.push_back(st_cfg.get()); } st_cfg.close(); return sz_config; } // Read README.txt string readme() { string sz_readme = ""; ifstream st_readme; st_readme.open("README.txt"); while (! st_readme.eof() ) { sz_readme.push_back(st_readme.get()); } st_readme.close(); return sz_readme; } // ===== END FILE I/O ===== // // ===== PARSING ===== // short is_con_ch_num(char ch, bool b_func) // Detect if char is a number or convert char to number { bool b_number = 0; short sh_number = 0; switch (ch) { case '1': if (b_func == 0) b_number = 1; else sh_number = 1; break; case '2': if (b_func == 0) b_number = 1; else sh_number = 2; break; case '3': if (b_func == 0) b_number = 1; else sh_number = 3; break; case '4': if (b_func == 0) b_number = 1; else sh_number = 4; break; case '5': if (b_func == 0) b_number = 1; else sh_number = 5; break; case '6': if (b_func == 0) b_number = 1; else sh_number = 6; break; case '7': if (b_func == 0) b_number = 1; else sh_number = 7; break; case '8': if (b_func == 0) b_number = 1; else sh_number = 8; break; case '9': if (b_func == 0) b_number = 1; else sh_number = 9; break; case '0': if (b_func == 0) b_number = 1; else sh_number = 0; break; default: b_number = 0; } if (b_func == 0) return b_number; else return sh_number; } short con_sz_sh(string sz_number) { short sh_number = 0; short sh_power = 1; for (short i = sz_number.size() - 1; i >= 0; i--) { sh_number += ( sh_power * is_con_ch_num(sz_number[i], 1) ); sh_power *= 10; } return sh_number; } void parse_config(string sz_input) { string sz_cmdbuff = ""; string sz_valbuff = ""; bool b_cmdfound = 0; bool b_valfound = 0; bool b_cmdspace = 0; bool b_valspace = 0; bool b_illegit = 0; bool b_donecmd = 0; bool b_doneval = 0; bool trace = 0; for (short i = 0; // Loop through content until end of sz_input. sz_input[i] != '\0'; i++) { if (trace == 1) {cout << sz_input[i];} if ( (sz_input[i] == '/' && sz_input[i+1] == '/') || ( sz_input[i] == 'e' && sz_input[i+1] == 'c' && sz_input[i+2] == 'h' && sz_input[i+3] == 'o' ) ) // If a comment/echo is found, disable cmd searching. { if (trace == 1) {cout << "<-ILL char";} b_illegit = 1; } if ( // If the content is not a tab/space/comment and not following a cmd on that line write to buffer sz_input[i] != '\t' && sz_input[i] != ' ' && sz_input[i] != '\n' && b_donecmd == 0 && b_illegit == 0 && b_cmdspace == 0 && is_con_ch_num(sz_input[i], 0) == 0 ) { sz_cmdbuff += sz_input[i]; b_cmdfound = 1; } if ( // If the content is not a cvalue on that line write to buffer 2 sz_input[i] != '\t' && sz_input[i] != ' ' && sz_input[i] != '\n' && b_doneval == 0 && b_illegit == 0 && b_valspace == 0 && is_con_ch_num(sz_input[i], 0) == 1 ) { sz_valbuff += sz_input[i]; b_valfound = 1; } if (b_cmdfound == 1 && ( sz_input[i+1] == ' ' || sz_input[i+1] == '\t') ) // Indicate a command has been finished { if (trace == 1) {cout << "<-END CMD";} b_donecmd = 1; } if (b_valfound == 1 && is_con_ch_num(sz_input[i+1], 0) == 0 ) // Indicate a value has been finished { b_doneval = 1; if (trace == 1) {cout << "<-END VAL";} } if (b_donecmd == 1) { inputcmds[sh_gl_array1count][1] = sz_cmdbuff; sz_cmdbuff = ""; b_donecmd = 0; b_cmdfound = 0; b_cmdspace = 1; sh_gl_array1count++; } if (b_doneval == 1) { inputcmds[sh_gl_array2count][2] = sz_valbuff; sz_valbuff = ""; b_doneval = 0; b_valfound = 0; b_valspace = 1; sh_gl_array2count++; } if (sz_input[i] == '\n') // If a newline is found, reset searching parameters for next loop. { b_illegit = 0; b_cmdspace = 0; b_valspace = 0; } } } int main() { char ch_readme; cout << "Welcome to the CFG Legalizer." << endl << "Have you read and followed the instructions \n" << "in the included README.txt? (y/n): "; cin.get(ch_readme); if (ch_readme == 'n' || ch_readme == 'N') { cout << endl << readme() << endl << endl; } parse_config(readinput()); cout << con_sz_sh("1337") - 1337; //for (int a=0;a<500 && inputcmds[a][1].size() > 0;a++){ cout << a << ": " << inputcmds[a][1] << " = " << inputcmds[a][2] << endl;} // display inputcmds array //for (int a=0;a<500 && inputcmds[a][2].size() > 0;a++){ cout << a << ": " << inputcmds[a][2] << endl;} // display inputcmds array 2 system("pause"); system("cls"); return 0; }