diff --git a/src/sourcery.cpp b/src/sourcery.cpp index f7f82afe..ca6d966e 100644 --- a/src/sourcery.cpp +++ b/src/sourcery.cpp @@ -9,37 +9,41 @@ int main(int argc, char* argv[]){ std::cerr << "Usage: " << argv[0] << " " << std::endl; } std::ofstream tmp(argv[3]); + //begin the first line tmp << "const char *" << argv[2] << " = " << std::endl << " \""; - int i = 0; - int total = 0; + uint32_t i = 0; //Current line byte counter + uint32_t total = 0; //Finished lines so far byte counter std::ifstream inFile(argv[1]); while (inFile.good()){ unsigned char thisChar = inFile.get(); if (!inFile.good()){break;} switch (thisChar){ //Filter special characters. - case '\n': tmp << "\\n"; i += 2; total--; break; - case '\r': tmp << "\\r"; i += 2; total--; break; - case '\t': tmp << "\\t"; i += 2; total--; break; - case '\\': tmp << "\\\\"; i += 2; total --; break; - case '\"': tmp << "\\\""; i += 2; total --; break; + case '\n': tmp << "\\n"; break; + case '\r': tmp << "\\r"; break; + case '\t': tmp << "\\t"; break; + case '\\': tmp << "\\\\"; break; + case '\"': tmp << "\\\""; break; default: if (thisChar < 32 || thisChar > 126){ //Convert to octal. tmp << '\\' << std::oct << std::setw(3) << std::setfill('0') << (unsigned int)thisChar << std::dec; - i += 4; }else{ tmp << thisChar; - i ++; } } + ++i; + // We print 80 bytes per line, regardless of special characters + // (Mostly because calculating this correctly would double the lines of code for this utility -_-) if (i >= 80){ tmp << "\" \\" << std::endl << " \""; total += i; i = 0; } } - tmp << "\";" << std::endl << "unsigned int " << argv[2] << "_len = " << i + total << ";" << std::endl; + //end the last line, plus length variable + tmp << "\";" << std::endl << "uint32_t " << argv[2] << "_len = " << i + total << ";" << std::endl; tmp.close(); return 0; } +