EG Information

Main Index
EG Manual
Disclaimer
Legal Information
Hall of Fame
Hall of Shame
Member Rankings
Members List
Meet the Staff
Hacker's Home Page

Training Missions

Read Me First
Basic Skills
Realistic Scenarios
Cryptography
Software Cracking
Linux ELF Binary Cracking
Logical Thinking
Programming
Captcha Cracking
Patching
Steganography
Deface This Wall
/dev/null
/dev/urandom
/dev/extra

Knowledge Bank

Discussion Forums
Exploit Database New
PasteBin New
RSS Feeds RSS
Articles / Tutorials
Videos
Online EG MP3 Player Radio
Downloads
Tools

Code Resources

Submit Code
Ajax
ASM
Bash
C
CPP
Csharp
Delphi
Haskell
Java
Javascript
Jython
Lisp
mIRC
MySQL
Perl
PHP
Python
QBASIC
VisualBasic

Pimp Us Out!

Review enigmagroup.org on alexa.com

Has Enigma Group Helped You? Then Help Us By Advertising For Us. Place One Of The Following Images On Your Site And Create A Link Back To Enigma Group.

Enigma Group

Enigma Group

Enigma Group

Enigma Group

 

Affiliates

hackhound.org

suck-o.com

hack.org.za

flyninja.net

 

Enigma Group's Code Bank


C++ command line argumens helper

By: RatHat  -  Date Submitted: 2011-02-25 05:08:20

  1. // cliargshelper.h
  2.  
  3. #ifndef CLIARGSHELPER_H
  4. #define CLIARGSHELPER_H
  5.  
  6. #include <map>
  7. #include <vector>
  8. #include <sstream>
  9. #include <fstream>
  10.  
  11. namespace HELPER {
  12.  
  13. class CliArgsHelper
  14. {
  15.  
  16. public:
  17. enum PARAM_TYPES
  18. {
  19. FLAG_PARAM,
  20. PAIR_PARAM
  21. } typedef PARAM_TYPES;
  22.  
  23. enum CONSTRAINTS
  24. {
  25. CONSTRAINT_NONE,
  26. CONSTRAINT_ISINT,
  27. CONSTRAINT_ISEXISTINGFILE
  28. } typedef CONSTRAINTS;
  29.  
  30. CliArgsHelper() : _flagParams(std::map<std::string, int>()), _pairParams(std::map<std::string, int>()), _paramConstraints(std::map<std::string, CliArgsHelper::CONSTRAINTS>()), _minValueParams(), _maxValueParams() { };
  31. CliArgsHelper(int min, int max) : _flagParams(std::map<std::string, int>()), _pairParams(std::map<std::string, int>()), _paramConstraints(std::map<std::string, CliArgsHelper::CONSTRAINTS>()), _minValueParams(min), _maxValueParams(max) { };
  32. ~CliArgsHelper() { };
  33.  
  34. bool addParam(std::string, int, CliArgsHelper::PARAM_TYPES, CliArgsHelper::CONSTRAINTS = CliArgsHelper::CONSTRAINT_NONE);
  35.  
  36. void setMinValueParamCount(unsigned int);
  37. void setMaxValueParamCount(unsigned int);
  38.  
  39. bool parse(std::map<int, bool>&, std::map<int, std::string>&, std::vector<std::string>&, int, char*[], std::string&);
  40.  
  41. private:
  42. void addFlagParam(std::string, int, CliArgsHelper::CONSTRAINTS);
  43. void addPairParam(std::string, int, CliArgsHelper::CONSTRAINTS);
  44.  
  45. bool matchesConstraints(std::string, std::string);
  46.  
  47. bool isInt(std::string);
  48. bool isExistingFile(std::string);
  49.  
  50. std::map<std::string, int> _flagParams;
  51. std::map<std::string, int> _pairParams;
  52. std::map<std::string, CliArgsHelper::CONSTRAINTS> _paramConstraints;
  53.  
  54. unsigned int _minValueParams;
  55. unsigned int _maxValueParams;
  56.  
  57. };
  58.  
  59. } // namespace
  60.  
  61. #endif // CLIARGSHELPER_H
  62.  
  63. // cliargshelper.cpp
  64.  
  65.  
  66. #include "cliargshelper.h"
  67.  
  68. namespace HELPER {
  69.  
  70. /** public ******************************************************************************************************************/
  71.  
  72. bool CliArgsHelper::addParam(std::string name, int id, CliArgsHelper::PARAM_TYPES type, CliArgsHelper::CONSTRAINTS constraint)
  73. {
  74. bool good = false;
  75. if(_flagParams.find(name) == _flagParams.end() && _pairParams.find(name) == _pairParams.end())
  76. {
  77. good = true;
  78. switch(type)
  79. {
  80. case CliArgsHelper::FLAG_PARAM:
  81. addFlagParam(name, id, constraint);
  82. break;
  83. case CliArgsHelper::PAIR_PARAM:
  84. addPairParam(name, id, constraint);
  85. break;
  86. default:
  87. good = false;
  88. break;
  89. }
  90. }
  91. return good;
  92. }
  93.  
  94. void CliArgsHelper::setMaxValueParamCount(unsigned int value)
  95. {
  96. _maxValueParams = value;
  97. }
  98.  
  99. void CliArgsHelper::setMinValueParamCount(unsigned int value)
  100. {
  101. _minValueParams = value;
  102. }
  103.  
  104. bool CliArgsHelper::parse(std::map<int, bool> &flags, std::map<int, std::string> &pairs, std::vector<std::string> &values, int argc, char *argv[], std::string &error)
  105. {
  106. bool good = true;
  107. unsigned int valueParams = 0;
  108.  
  109. flags.clear();
  110. pairs.clear();
  111. values.clear();
  112.  
  113. int x;
  114. for(x = 1; x < argc; x++)
  115. {
  116. std::string param(argv[x]);
  117. std::map<std::string, int>::iterator i = _flagParams.find(param);
  118. std::map<std::string, int>::iterator j = _pairParams.find(param);
  119.  
  120. if(i != _flagParams.end())
  121. {
  122. // flag params
  123. flags[(*i).second] = true;
  124.  
  125. }
  126. else if(j != _pairParams.end())
  127. {
  128. // pair param
  129. if(x < argc - 1)
  130. {
  131. x++;
  132. if(matchesConstraints((*j).first, std::string(argv[x])))
  133. pairs[(*j).second] = std::string(argv[x]);
  134. else
  135. {
  136. error = std::string("invalid value \"")+argv[x]+"\" for \""+argv[x-1]+"\"";
  137. good = false;
  138. break;
  139. }
  140. }
  141. else
  142. {
  143. error = std::string("\"")+argv[x]+"\" must be followed by a value";
  144. good = false;
  145. break;
  146. }
  147. }
  148. else
  149. {
  150. // value param
  151. if(valueParams < _maxValueParams)
  152. {
  153. valueParams++;
  154. values.push_back(std::string(argv[x]));
  155. }
  156. else
  157. {
  158. error = std::string("unrecognized parameter \"")+argv[x]+"\"";
  159. good = false;
  160. break;
  161. }
  162. }
  163. }
  164.  
  165. if(good && (valueParams < _minValueParams))
  166. {
  167. error = "not enough parameters given";
  168. good = false;
  169. }
  170.  
  171. return good;
  172. }
  173.  
  174. /** private *****************************************************************************************************************/
  175.  
  176. void CliArgsHelper::addFlagParam(std::string name, int id, CliArgsHelper::CONSTRAINTS constraint)
  177. {
  178. _flagParams[name] = id;
  179. _paramConstraints[name] = constraint;
  180. }
  181.  
  182. void CliArgsHelper::addPairParam(std::string name, int id, CliArgsHelper::CONSTRAINTS constraint)
  183. {
  184. _pairParams[name] = id;
  185. _paramConstraints[name] = constraint;
  186. }
  187.  
  188. bool CliArgsHelper::matchesConstraints(std::string name, std::string value)
  189. {
  190. CliArgsHelper::CONSTRAINTS constraint = _paramConstraints.find(name)->second;
  191. bool good = true;
  192. switch(constraint)
  193. {
  194. case CliArgsHelper::CONSTRAINT_ISINT:
  195. good = isInt(value);
  196. break;
  197. case CliArgsHelper::CONSTRAINT_ISEXISTINGFILE:
  198. good = isExistingFile(value);
  199. break;
  200. case CliArgsHelper::CONSTRAINT_NONE:
  201. good = true;
  202. break;
  203. }
  204. return good;
  205. }
  206.  
  207. bool CliArgsHelper::isInt(std::string value)
  208. {
  209. std::istringstream i(value);
  210. int x;
  211. return (i >> x);
  212. }
  213.  
  214. bool CliArgsHelper::isExistingFile(std::string value)
  215. {
  216. std::ifstream file(value.c_str());
  217. return(file);
  218. }
  219.  
  220. } // namespaces
  221.  
  222. // example usage
  223.  
  224. HELPER::CliArgsHelper *cah = new HELPER::CliArgsHelper(0, 0);
  225.  
  226. cah->addParam("--verbose", ENUM::PARAMS::VERBOSE, HELPER::CliArgsHelper::FLAG_PARAM);
  227. cah->addParam("--generate", ENUM::PARAMS::GENERATE, HELPER::CliArgsHelper::FLAG_PARAM);
  228. cah->addParam("--help", ENUM::PARAMS::HELP, HELPER::CliArgsHelper::FLAG_PARAM);
  229. cah->addParam("--version", ENUM::PARAMS::VERSION, HELPER::CliArgsHelper::FLAG_PARAM);
  230. cah->addParam("--about", ENUM::PARAMS::ABOUT, HELPER::CliArgsHelper::FLAG_PARAM);
  231.  
  232. cah->addParam("-f", ENUM::PARAMS::F, HELPER::CliArgsHelper::PAIR_PARAM, HELPER::CliArgsHelper::CONSTRAINT_ISEXISTINGFILE);
  233.  
  234. std::map<int, bool> flags;
  235. std::map<int, std::string> pairs;
  236. std::vector<std::string> values;
  237.  
  238. std::string error;
  239.  
  240. bool good = cah->parse(flags, pairs, values, argc, argv, error);
Return to cpp category list

Who Visited EnigmaGroup Today?

1386 Guests, 225 Users (218 Spiders)
lolzsec, tgm001, plex, Edika, TheCheeseDemon, rockcraft, Pabz, recoveryToolbox, saraf, soufiaane, sickmind, cat1vo, mjneat, famous0123, Galagatron, dark_void, CJ_Omaha, junaid_junaid59, JohnJohnJohn, ssmaslov, psychomarine, Dregoon, Patrickk, Aska, Beat_Slayer, M0rdak, Ausome1, Imre, Vreality2007, mmndglxuwn, m0rt, unholyblood, iterrumzz, VurbTrurb, Mayonoula, MAMWOURBROR, mutabor, gobinda, cossyDrybrich, Razin, zaCruBumas8, hunja, johny34, pantoufle, bagy, arctica, hackarchives, UsedDeteKef, Peculator, Fadhilat606, TheTrueMonarch, Pascall01, hackaday, Tjm, arndevil, flairvelocity, lol, alphbond, kdivanov, elizbethallis6, Rik, bn11, BorgBot, SHASHANK101hello, 4poc4lyptic, ksajxai, nbmorri1, electro-technic, شمالي عرعر, lamb, AutobotPrime, Underleaf, The End, tomtombomb, killobyte, snowgirlx, so_saucey, zerolife, Althor, Cramps, Hekser, Hyperborn, cyber-guard, jhgrunn, cobra, Partisan, MAZI_, cyborg, GenbreedX, moel77, cliptoX, pwnpwnlolz, letshavepie, Mrwormz, yshiau, mirmo, roozyoppomo, soft_devil, cls777, scoobywan, Reiversed, joshua, st3alth, Afrika, PaiffDryday, venter, Anthony12796, sh3llcod3, 8FIGURE, Rannim, Evil1, maloaboy, BACanON, SlayingDragons, Repuhlsive, IvanDimitriev, 1RiB, mzungudo, Micro_Geek, iMaxx, aciboummamymn, k0unterkulcher, somebody777, m14m16, GoododotAlcob, negasora, Rastii, UninueMem, Swifsolja, ad.conquest, ngolatkar, Infinity8, Jigoku, thesupervisor, p0is0n5ting, kernel_mod, AKL, GothicLogic, themastersinner, dnatrixene135, ChewBigRed, kalak55, sejem, cve916, pollolololo, triecturn, Violatedsmurf, Ops, jmp, xsiemich, generalisimo, strudels, ga3ttpom, KingOfBritains, epoch_qwert, suten, FriskyKat, Ryuske, Adonis Achilles, ubqbcdzzhf, 3vil, Nightraven, US£RNAM£, Weindittewcon, Batesheelocot, GSmyrlis, MaxMeier, Elite.America, rabbidmind, Psiber_Syn, phoenix22, imittyerrotte, peewster, cyberturtle, ctb, dexgeda, sdw, Pizza, White_widdow, devarian, finesse, Nature112091777, Danc7171, Alphadragon, Estadagause, 53QR10U5, Xargos, Alkomage, hardlock, Barry Gonzoles, MineDweller, Gkjt, N4g4c3N, [I]nfectedbug, wimsteege, aqr5zdcw, xin214, Bugshuppy, SnoopSky, Hessesian, voodooKobra, sKcarr, IROverRated, W1F1G3NJU75U, Baddy, ziadmosaan, gamble86, realzs, CruelDemon, Shinju, aVoid, aquiredanonymity, kukumumu, web_request, callmeneon, KissMyDAFFODIL, Feld Grau, Abhinav2107, prabhataditya, mbuyiselo, shumer, phenom216, princennamdi, huskyboiza, ninety-nine
 
Enigma Group