diff options
Diffstat (limited to 'devtools/create_supernova2/create_image/create_image.cpp')
-rw-r--r-- | devtools/create_supernova2/create_image/create_image.cpp | 202 |
1 files changed, 0 insertions, 202 deletions
diff --git a/devtools/create_supernova2/create_image/create_image.cpp b/devtools/create_supernova2/create_image/create_image.cpp deleted file mode 100644 index 1bf1e24f7c..0000000000 --- a/devtools/create_supernova2/create_image/create_image.cpp +++ /dev/null @@ -1,202 +0,0 @@ -#include <fstream> -#include <iostream> -#include <sstream> -#include <cstring> -#include <iomanip> -#include <cstdlib> - -std::string filenumber; - -int writePalette(std::ofstream &output) { - std::string filename = filenumber + "/palette"; - std::ifstream palette(filename.c_str()); - if (!palette.is_open()) { - std::cerr << "Couldn't open palette file" << std::endl; - return 1; - } - int input; - do { - palette >> input; - if (palette.eof()) - break; - output << (char) input; - } while(true); - palette.close(); - return 0; -} - -int writeSections(std::ofstream &output) { - std::string filename = filenumber + "/section_info"; - std::ifstream sectionInfo(filename.c_str()); - if (!sectionInfo.is_open()) { - std::cerr << "Couldn't open section_info file" << std::endl; - return 0; - } - int numSections; - sectionInfo >> numSections; - output << (char) numSections; - - int input; - char *input_byte = (char *) &input; - for(int i = 0; i < numSections; i++) { - //x1 - sectionInfo >> input; - output << (char)input_byte[0]; - output << (char)input_byte[1]; - //x2 - sectionInfo >> input; - output << (char)input_byte[0]; - output << (char)input_byte[1]; - //y1 - sectionInfo >> input; - output << (char)input; - //y2 - sectionInfo >> input; - output << (char)input; - //next - sectionInfo >> input; - output << (char)input; - //addressLow - sectionInfo >> input; - output << (char)input_byte[0]; - output << (char)input_byte[1]; - //addressHigh - sectionInfo >> input; - output << (char)input; - } - sectionInfo.close(); - return numSections; -} - -int writeClickFields(std::ofstream &output) { - std::string filename = filenumber + "/clickfield_info"; - std::ifstream clickFieldInfo(filename.c_str()); - if (!clickFieldInfo.is_open()) { - std::cerr << "Couldn't open clickfield_info file" << std::endl; - return 1; - } - int numClickFields; - clickFieldInfo >> numClickFields; - output << (char) numClickFields; - - int input; - char *input_byte = (char *) &input; - for(int i = 0; i < numClickFields; i++) { - //x1 - clickFieldInfo >> input; - output << (char)input_byte[0]; - output << (char)input_byte[1]; - //x2 - clickFieldInfo >> input; - output << (char)input_byte[0]; - output << (char)input_byte[1]; - //y1 - clickFieldInfo >> input; - output << (char)input; - //y2 - clickFieldInfo >> input; - output << (char)input; - //next - clickFieldInfo >> input; - output << (char)input; - } - clickFieldInfo.close(); - return 0; -} - -int writePixelData(std::ofstream &output, int imageNum, int skip) { - std::ostringstream fileName; - fileName << filenumber << "/image" << imageNum << ".bmp"; - std::ifstream image(fileName.str().c_str(), std::ios::binary); - if (!image.is_open()) { - std::cerr << "Couldn't open " << fileName.str() << " file" << std::endl; - return 0; - } - - image.seekg(0, image.end); - int length = image.tellg(); - length -= skip; - image.seekg(skip, image.beg); - char *buf = new char[length]; - image.read(buf, length); - output.write(buf, length); - delete buf; - return length; -} - -void printHelp() { - std::cout << "create_image output-prefix file-number bytes-skip" << std::endl << std::endl; - std::cout << " output-prefix: String the created file should begin with" << std::endl; - std::cout << " file-number: Number of the created file and also name of source folder" << std::endl; - std::cout << " bytes-skip: How many bytes to to skip in each .bmp file" << std::endl; - std::cout << std::endl << "EXAMPLE:" << std::endl - << "create_image ms2_data 15 1146" << std::endl - << " creates ms2_data.015 assuming there are the right files inside 015 folder" << std::endl; -} - -int main(int argc, char *argv[]) { - if (argc == 2 && !strcmp(argv[1], "--help")) { - printHelp(); - return 0; - } - if (argc != 4 ) { - printHelp(); - return 1; - } - std::ostringstream oss; - oss << std::setfill('0') << std::setw(3) << argv[2]; - filenumber = oss.str(); - char *ptr; - int bytesSkip = strtol(argv[3], &ptr, 10); - std::string oFileName = argv[1]; - oFileName += "." + filenumber; - std::ofstream output(oFileName.c_str(), std::ios::binary); - if (!output.is_open()) { - std::cerr << "Couldn't open output file" << std::endl; - return 1; - } - // size - // just a place holder, will be filled later - output << (char) 0x40; - output << (char) 0x70; - output << (char) 0x01; - output << (char) 0x00; - if (writePalette(output)) - return 1; - int numImages = writeSections(output); - if (numImages == 0) - return 1; - if (writeClickFields(output)) - return 1; - // we don't compress the images, so set to 0 - output << (char) 0; //numRepeat - output << (char) 0; //numZw - int totalLength = 0; - int oldLength = 0; - for (int i = 0; i < numImages; i++) { - totalLength += writePixelData(output, i, bytesSkip); - if (oldLength == totalLength) { - std::cerr << "Error while reading the image number: " << i << std::endl; - return 1; - } - oldLength = totalLength; - } - - //reversing the size computation inside the engine - totalLength += 15; - totalLength /= 16; - totalLength -= 0x70; - int i = (totalLength & 0xf000) >> 12; - int j = totalLength << 4; - char *i_p = (char *) &i; - char *j_p = (char *) &j; - - //writing the size - output.seekp(0); - output << j_p[0]; - output << j_p[1]; - output << i_p[0]; - output << i_p[1]; - output.close(); - return 0; -} |