Fixed length bug in sourcery utility
This commit is contained in:
parent
48635357cb
commit
d4c7eaeb30
1 changed files with 14 additions and 10 deletions
|
@ -9,37 +9,41 @@ int main(int argc, char* argv[]){
|
||||||
std::cerr << "Usage: " << argv[0] << " <inputFile> <variableName> <outputFile>" << std::endl;
|
std::cerr << "Usage: " << argv[0] << " <inputFile> <variableName> <outputFile>" << std::endl;
|
||||||
}
|
}
|
||||||
std::ofstream tmp(argv[3]);
|
std::ofstream tmp(argv[3]);
|
||||||
|
//begin the first line
|
||||||
tmp << "const char *" << argv[2] << " = " << std::endl << " \"";
|
tmp << "const char *" << argv[2] << " = " << std::endl << " \"";
|
||||||
int i = 0;
|
uint32_t i = 0; //Current line byte counter
|
||||||
int total = 0;
|
uint32_t total = 0; //Finished lines so far byte counter
|
||||||
std::ifstream inFile(argv[1]);
|
std::ifstream inFile(argv[1]);
|
||||||
while (inFile.good()){
|
while (inFile.good()){
|
||||||
unsigned char thisChar = inFile.get();
|
unsigned char thisChar = inFile.get();
|
||||||
if (!inFile.good()){break;}
|
if (!inFile.good()){break;}
|
||||||
switch (thisChar){
|
switch (thisChar){
|
||||||
//Filter special characters.
|
//Filter special characters.
|
||||||
case '\n': tmp << "\\n"; i += 2; total--; break;
|
case '\n': tmp << "\\n"; break;
|
||||||
case '\r': tmp << "\\r"; i += 2; total--; break;
|
case '\r': tmp << "\\r"; break;
|
||||||
case '\t': tmp << "\\t"; i += 2; total--; break;
|
case '\t': tmp << "\\t"; break;
|
||||||
case '\\': tmp << "\\\\"; i += 2; total --; break;
|
case '\\': tmp << "\\\\"; break;
|
||||||
case '\"': tmp << "\\\""; i += 2; total --; break;
|
case '\"': tmp << "\\\""; break;
|
||||||
default:
|
default:
|
||||||
if (thisChar < 32 || thisChar > 126){
|
if (thisChar < 32 || thisChar > 126){
|
||||||
//Convert to octal.
|
//Convert to octal.
|
||||||
tmp << '\\' << std::oct << std::setw(3) << std::setfill('0') << (unsigned int)thisChar << std::dec;
|
tmp << '\\' << std::oct << std::setw(3) << std::setfill('0') << (unsigned int)thisChar << std::dec;
|
||||||
i += 4;
|
|
||||||
}else{
|
}else{
|
||||||
tmp << thisChar;
|
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){
|
if (i >= 80){
|
||||||
tmp << "\" \\" << std::endl << " \"";
|
tmp << "\" \\" << std::endl << " \"";
|
||||||
total += i;
|
total += i;
|
||||||
i = 0;
|
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();
|
tmp.close();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue