void getParams(unsigned argc, char * const * argv, KeyDiffParams & params) { unsigned arg = 1; while((arg<argc) && (*argv[arg] == '-')) { if((strcmp(argv[arg], "-o") == 0) || (strcmp(argv[arg], "--overwrite") == 0)) params.overwrite = true; else if((strcmp(argv[arg], "-n") == 0) || (strcmp(argv[arg], "--nooverwrite") == 0)) params.overwrite = false; else if(strcmp(argv[arg], "-z") == 0) params.compress = COMPRESS_METHOD_LZW; else if((strcmp(argv[arg], "-c") == 0) || (strcmp(argv[arg], "--compress") == 0)) params.compress = COMPRESS_METHOD_LZMA; else if((strcmp(argv[arg], "-s") == 0) || (strcmp(argv[arg], "--stats") == 0)) params.stats = true; else if((strcmp(argv[arg], "-t") == 0) || (strcmp(argv[arg], "--tlk") == 0)) { if((argc-arg)<=1) usage(false); params.tlkInfo = true; params.newTLK.append(argv[++arg]); } else if((strcmp(argv[arg], "-p") == 0) || (strcmp(argv[arg], "--progress") == 0)) { if((argc-arg)<=1) usage(false); ++arg; offset_t freq = atoi64_l(argv[arg], strlen(argv[arg])); if(freq <= 0) usage(false); params.progressFrequency = freq; } else if((strcmp(argv[arg], "-v") == 0) || (strcmp(argv[arg], "--version") == 0)) version(false); else if((strcmp(argv[arg], "-h") == 0) || (strcmp(argv[arg], "-?") == 0) || (strcmp(argv[arg], "--help") == 0)) version(true); else usage(false); arg++; } if(argc != arg+3) usage(false); params.oldIndex.append(argv[arg++]); params.newIndex.append(argv[arg++]); params.patch.append(argv[arg++]); }
inline __int64 atoi64(const char* s) { return atoi64_l(s, (int)strlen(s)); }
void getParams(unsigned argc, char * const * argv, KeyPatchParams & params) { unsigned arg = 1; while((arg<argc) && (*argv[arg] == '-')) { if((strcmp(argv[arg], "-o") == 0) || (strcmp(argv[arg], "--overwrite") == 0)) params.overwrite = true; else if((strcmp(argv[arg], "-n") == 0) || (strcmp(argv[arg], "--nooverwrite") == 0)) params.overwrite = false; else if((strcmp(argv[arg], "-i") == 0) || (strcmp(argv[arg], "--info") == 0)) params.mode = KEYPATCH_info; else if((strcmp(argv[arg], "-t") == 0) || (strcmp(argv[arg], "--transmit") == 0)) { if((argc-arg)<=2) usage(false); params.xmitTLK = true; params.tlkPort = atoi(argv[++arg]); params.xmitEp.set(argv[++arg]); if(params.tlkPort == 0) throw MakeStringException(0, "Bad local port on TLK transmit"); if(params.xmitEp.port == 0) throw MakeStringException(0, "Bad remote ip:port on TLK transmit"); } else if((strcmp(argv[arg], "-r") == 0) || (strcmp(argv[arg], "--receive") == 0)) { if((argc-arg)<=2) usage(false); params.recvTLK = true; params.tlkPort = atoi(argv[++arg]); params.recvNum = atoi(argv[++arg]); if(params.tlkPort == 0) throw MakeStringException(0, "Bad local port on TLK receive"); if(params.recvNum == 0) throw MakeStringException(0, "Bad number of parts on TLK receive"); } else if((strcmp(argv[arg], "-s") == 0) || (stricmp(argv[arg], "--skiptlk") == 0)) params.ignoreTLK = true; else if((strcmp(argv[arg], "-p") == 0) || (strcmp(argv[arg], "--progress") == 0)) { if((argc-arg)<=1) usage(false); ++arg; offset_t freq = atoi64_l(argv[arg], strlen(argv[arg])); if(freq <= 0) usage(false); params.progressFrequency = freq; } else if((strcmp(argv[arg], "-v") == 0) || (strcmp(argv[arg], "--version") == 0)) version(false); else if((strcmp(argv[arg], "-h") == 0) || (strcmp(argv[arg], "-?") == 0) || (strcmp(argv[arg], "--help") == 0)) version(true); else usage(false); arg++; } if((params.mode == KEYPATCH_info) && (params.xmitTLK || params.recvTLK)) throw MakeStringException(0, "Cannot specify info option with TLK transmit or receive"); if(params.xmitTLK && params.recvTLK) throw MakeStringException(0, "Cannot specify both TLK transmit and receive"); unsigned argsRqd = (params.recvTLK ? 4 : 3); if((argc == arg+argsRqd) && (params.mode == KEYPATCH_implicit)) { params.patch.append(argv[arg++]); params.oldIndex.append(argv[arg++]); params.newIndex.append(argv[arg++]); if(params.recvTLK) params.newTLK.append(argv[arg++]); params.mode = KEYPATCH_explicit; } else if(argc == arg+1) { params.patch.append(argv[arg++]); } else { usage(false); } }