📄 dib2device.cpp
字号:
#include <string>
#include <map>
#include "bitmap.h"
#include "constants.h"
#include "srecord.h"
using namespace std;
int stringToInt(const char* string);
int charToInt(const char ch);
typedef map<char, string> ArgumentMap;
typedef vector<string> InputFileVector;
void parse_arguments(ArgumentMap& args, InputFileVector& inputFiles, int argc, char* argv[])
{
for(int i = 0; i < argc; ++i)
if(argv[i][0] == '-')
{
switch(argv[i][1])
{
case INPUT_DIB:
for(i++; i < argc && argv[i][0] != '-'; ++i)
{
inputFiles.push_back(argv[i]);
}
if(i < argc)
--i;
break;
default:
if(i == argc-1 || argv[i+1][0] == '-')
args[argv[i][1]] = "";
else
args[argv[i][1]] = string(argv[i+1]);
break;
}
}
}
int main(int argc, char* argv[])
{
ArgumentMap args;
InputFileVector inputs;
args[OUTPUT_DDB] = DEFAULT_OUTPUT_DDB;
args[BIT_DEPTH] = DEFAULT_BIT_DEPTH;
parse_arguments(args, inputs, argc, argv);
// SRecord srec;
// srec.package_binary("hydrogen.ddb", "hydrogen.rec", 0xBFCA0000);
if(inputs.size() != 0)
{
BitmapConverter bmp;
for(InputFileVector::const_iterator iter = inputs.begin(); iter != inputs.end(); ++iter)
{
if(bmp.load(*iter))
printf("Bitmap Loaded: %s\n", (*iter).c_str());
else
{
printf("Error loading dib bitmap file: %s\n", (*iter).c_str());
return 0;
}
}
if(bmp.save((*args.find(OUTPUT_DDB)).second, atoi((*args.find(BIT_DEPTH)).second.c_str()) ) )
{
printf("Bitmap Conversion Complete: %s (%d bits)\n", (*args.find(OUTPUT_DDB)).second.c_str(), atoi((*args.find(BIT_DEPTH)).second.c_str()) );
if(args.find(OUTPUT_SREC) != args.end())
{
SRecordProcessor srec;
srec.load("booter.rec");
if(srec.load_binary((*args.find(OUTPUT_DDB)).second, stringToInt((*args.find(SREC_ADDRESS)).second.c_str())))
{
if(srec.save_merged((*args.find(OUTPUT_SREC)).second))
printf("Srecord packaging Complete: %s (0x%X)\n", (*args.find(OUTPUT_SREC)).second.c_str(), stringToInt((*args.find(SREC_ADDRESS)).second.c_str()) );
}
}
}
else
printf("Error saving output file: %s\n", (*args.find(OUTPUT_DDB)).second.c_str());
}
else
printf("Usage: %s -%c input_dib1 [input_dib2 ... input_dib3] [-%c output_ddb] [-%c bit_depth]\n", APP_NAME, INPUT_DIB, OUTPUT_DDB, BIT_DEPTH );
printf("\n");
}
int stringToInt(const char* string)
{
int value = 0;
int i;
for(i = 0; string[i] != 0 && string[i] != 'x'; ++i);
for(++i; string[i] != 0; ++i)
{
value = value << 4;
value |= charToInt(string[i]);
}
return value;
}
int charToInt(const char ch)
{
switch (ch)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
return (ch - '0');
break;
case 'A':
case 'a':
return 10;
break;
case 'B':
case 'b':
return 11;
break;
case 'C':
case 'c':
return 12;
break;
case 'D':
case 'd':
return 13;
break;
case 'E':
case 'e':
return 14;
break;
case 'F':
case 'f':
return 15;
break;
default:
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -