int __cdecl main( int argc, char *argv[] ) { char *path, *suffix, *source, target[255]; unsigned resolution; if( argc <= 2 ) goto error; path = argv[2]; suffix = get_suffix( path ); resolution = atoi( suffix ); source = get_name( path ); sprintf( target, "%s%s", source, ".dds" ); if( strcmp( argv[1], "-c" ) == 0 ) { if( strcmp( suffix, "dds" ) != 0 ) goto error; cut_header( path ); } else if( strcmp( argv[1], "-r" ) != 0 ) { } free( suffix ); free( source ); switch( resolution ) { case 512: recover_texture( path, target, 512 ); break; case 1024: recover_texture( path, target, 1024 ); break; case 2048: recover_texture( path, target, 2048 ); break; } goto exit; error: printf( "syntax: magicdds.exe option filename\n" "options:\n-c - convert .dds image into 4A-Engine format\n" "-r - recover 4A-Engine image into original .dds format\n" ); exit: return 0; }
int main(int argc, char** argv) { // I'm using linux file descriptors instead of streams because it's easier to handle ints // than some polymorphic stream types (ostream, ofstream etc) int buf = 0, fileout = 1, sock; unsigned short number = 1; char base = 10; bool fileio = false; const char* outfile; long long top = 100, bottom = 0; while ( -1 != (buf = getopt(argc,argv,"b:ho:n:vT:B:")) ) { try { switch ( buf ) { case 'n' : number = static_cast<short>(strtoul(optarg,0,10)); break; case 'b' : base = strtoul(optarg,0,10); if ( base != 2 && base != 8 && base != 10 && base != 16 ) throw err("The specified base is not valid for random.org!"); break; case 'v' : verbose = true; break; case 'o' : fileio = true; outfile = optarg; break; case 'T' : top = strtoull(optarg,0,10); break; case 'B' : bottom = strtoull(optarg,0,10); break; case 'h' : std::cout << help_string; exit(0); } if ( top <= bottom ) throw err("Invalid range!"); if ( top < -1E9 || top > 1E9 ) throw err("top is too big or too small"); if ( bottom < -1E9 || bottom > 1E9 ) throw err("bottom is too big or too small"); if ( number > 1000 ) throw err("Number too high"); } catch (err error) { std::cout << "Exception raised: " << error.errmsg << std::endl; exit(1); } } if ( verbose == true ) std::cout << "DBG: Done with processing arguments\n"; if ( fileio == true ) { fileout = open_outfile(outfile); } if ( verbose == true ) std::cout << "DBG: Sending Request\n"; // Build network connection and send the HTTP request sock = request(number,bottom,top,base); if ( verbose == true ) std::cout << "DBG: Got answer, processing response\n"; // Remove the HTTP header (algorithm is explained above) cut_header(sock); if ( verbose == true ) std::cout << "DBG: Processed raw answer, continuing with getting numbers\n"; // Simply read the numbers from the socket and write it to stdout get_data(sock,fileout); return 0; }