Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.42 KB | None | 0 0
  1. #include<iostream>
  2. #include<windows.h>
  3. #include<conio.h>
  4. #include<cstdlib>
  5. #include<math.h>
  6. #include<iomanip>
  7. #include<vector>
  8. #include<algorithm>
  9.  
  10. using namespace std;
  11.  
  12. class net;
  13. vector<net>V;
  14. bool acceptNet=0;
  15.  
  16. class net
  17. {
  18. public:
  19. int hosts,octetsBegin[4],octetsEnd[4];
  20. string mask,wildcard;
  21.  
  22. bool operator<(net net1)
  23. {
  24. return hosts>net1.hosts;
  25. }
  26. };
  27.  
  28. void delNet(int position)
  29. {
  30. if(V.size()!=0)
  31. V.erase(V.begin()+position);
  32. }
  33.  
  34. string convertToBinary(short int mask)
  35. {
  36. int i,zeros=32-mask;
  37. string s="";
  38.  
  39. for(i=0;i<mask;++i)
  40. s=s+'1';
  41.  
  42. for(i=0;i<zeros;++i)
  43. s=s+'0';
  44.  
  45. return s;
  46. }
  47.  
  48. string convertToBinaryWC(short int mask)
  49. {
  50. int i,zeros=32-mask;
  51. string s="";
  52.  
  53. for(i=0;i<mask;++i)
  54. s=s+'0';
  55.  
  56. for(i=0;i<zeros;++i)
  57. s=s+'1';
  58.  
  59. return s;
  60. }
  61.  
  62. int btoi(string s)
  63. {
  64. int i,x=0;
  65.  
  66. for(i=s.size();i>=0;--i)
  67. if(s[i]=='1')
  68. x+=pow(2,s.size()-i-1);
  69.  
  70. return x;
  71. }
  72.  
  73. string itoa(int x)
  74. {
  75. string result="";
  76.  
  77. while(x!=0)
  78. {
  79. result=(char)(x%10+'0')+result;
  80. x/=10;
  81. }
  82. return result;
  83. }
  84.  
  85. string calculateOctet(short int mask,bool wildCard)
  86. {
  87. int i,x1,x2,x3,x4;
  88. string s,o1,o2,o3,o4,result="";
  89.  
  90. if(wildCard)
  91. s=convertToBinaryWC(mask);
  92. else
  93. s=convertToBinary(mask);
  94.  
  95. o1=s.substr(0,8);
  96. o2=s.substr(8,8);
  97. o3=s.substr(16,8);
  98. o4=s.substr(24,8);
  99.  
  100. x1=btoi(o1);
  101. x2=btoi(o2);
  102. x3=btoi(o3);
  103. x4=btoi(o4);
  104.  
  105. if(x1==0)
  106. result=result+" 0 "+'.';
  107. else
  108. result=result+itoa(x1)+'.';
  109.  
  110. if(x2==0)
  111. result=result+" 0 "+'.';
  112. else
  113. result=result+itoa(x2)+'.';
  114.  
  115. if(x3==0)
  116. result=result+" 0 "+'.';
  117. else
  118. result=result+itoa(x3)+'.';
  119.  
  120. if(x4==0)
  121. result=result+" 0 ";
  122. else
  123. result=result+itoa(x4);
  124.  
  125.  
  126. return result;
  127. }
  128.  
  129. void PlaceCursor(short int x,short int y) // places cursor in set position
  130. {
  131. COORD Coordinates={x,y};
  132. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Coordinates);
  133. }
  134.  
  135. void customClear() // clears the screen in more or less efficient manner
  136. {
  137. int i;
  138.  
  139. PlaceCursor(15,2);
  140. cout<<" ";
  141.  
  142. PlaceCursor(10,4);
  143. cout<<" ";
  144.  
  145. PlaceCursor(40,2);
  146. cout<<" ";
  147.  
  148. PlaceCursor(8,7);
  149. cout<<" ";
  150.  
  151. PlaceCursor(32,7);
  152. cout<<" ";
  153.  
  154. for(i=0;i<V.size()+2;++i)
  155. {
  156. PlaceCursor(1,9+i);
  157. cout<<" ";
  158. }
  159. }
  160.  
  161. void GetInput(short int &choice,int &vChoice) // gets input from user
  162. {
  163. int g;
  164. g=getch();
  165.  
  166. if(g==224)
  167. g=getch();
  168.  
  169. if(g==75 && choice!=0) //LEFT
  170. --choice;
  171. else if(g==77 && choice!=32) //RIGHT
  172. ++choice;
  173. else if(g==80 && vChoice<V.size()-1 && V.size()!=0) //DOWN
  174. ++vChoice;
  175. else if(g==72 && vChoice>0) //UP
  176. --vChoice;
  177. else if(g==13) //ACCEPT ADDING TO NET
  178. acceptNet=1;
  179. else if(g==8) //DEL NET
  180. delNet(vChoice);
  181. }
  182.  
  183. void hideCursor() // hides cursor
  184. {
  185. HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
  186. CONSOLE_CURSOR_INFO info;
  187. info.dwSize = 100;
  188. info.bVisible = FALSE;
  189. SetConsoleCursorInfo(consoleHandle, &info);
  190. }
  191.  
  192. void drawMenu(short int mask,int vChoice)
  193. {
  194. int i,j;
  195. long long int currHosts;
  196. HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  197.  
  198. customClear();
  199.  
  200. PlaceCursor(9,2);
  201. cout<<"mask: "<<mask;
  202.  
  203. PlaceCursor(32,2);
  204. cout<<fixed<<setprecision(0)<<"hosts: ";
  205. if(mask==32)
  206. currHosts=0;
  207. else
  208. currHosts=pow(2,32-mask);
  209.  
  210. if(acceptNet)
  211. {
  212. net net1;
  213.  
  214. net1.hosts=currHosts;
  215. net1.mask=calculateOctet(mask,0);
  216. net1.wildcard=calculateOctet(mask,1);
  217.  
  218. V.push_back(net1);
  219. acceptNet=0;
  220. }
  221.  
  222. cout<<currHosts;
  223.  
  224. PlaceCursor(10,4);
  225. for(i=1;i<=32;++i)
  226. {
  227. if(i<=mask)
  228. cout<<'-';
  229. else
  230. {
  231. SetConsoleTextAttribute(hConsole,2);
  232. cout<<(char)(434);
  233. SetConsoleTextAttribute(hConsole,7);
  234. }
  235.  
  236. if(i%8==0 && i!=32)
  237. cout<<'.';
  238. }
  239.  
  240. PlaceCursor(9,6);
  241. cout<<"Wildcard:";
  242. PlaceCursor(8,7);
  243. SetConsoleTextAttribute(hConsole,1);
  244. cout<<calculateOctet(mask,1);
  245. SetConsoleTextAttribute(hConsole,7);
  246.  
  247. PlaceCursor(32,6);
  248. cout<<"Mask:";
  249. PlaceCursor(32,7);
  250. SetConsoleTextAttribute(hConsole,4);
  251. cout<<calculateOctet(mask,0);
  252. SetConsoleTextAttribute(hConsole,7);
  253.  
  254. PlaceCursor(2,8);
  255. cout<<"Nets: ";
  256. for(i=0;i<V.size();++i)
  257. {
  258. if(i==vChoice)
  259. SetConsoleTextAttribute(hConsole,4);
  260.  
  261. PlaceCursor(1,9+i);
  262. cout<<" "<<V[i].hosts<<" | "<<V[i].mask<<" | "<<V[i].wildcard<<" | ";
  263.  
  264. for(j=0;j<4;++j)
  265. {
  266. cout<<V[i].octetsBegin[j];
  267. if(j!=3)
  268. cout<<".";
  269. }
  270. cout<<"-";
  271. for(j=0;j<4;++j)
  272. {
  273. if(j==3 && V[i].octetsEnd[j]!=0)
  274. cout<<V[i].octetsEnd[j]-1;
  275. else
  276. cout<<V[i].octetsEnd[j];
  277.  
  278. if(j!=3)
  279. cout<<".";
  280. }
  281.  
  282. SetConsoleTextAttribute(hConsole,7);
  283. }
  284. }
  285.  
  286. int calculateOctets(int hosts,int octetsBegin[4],int octet)
  287. {
  288. int i,octetsAux[4],leftovers=0;
  289.  
  290. for(i=0;i<4;++i)
  291. octetsAux[i]=octetsBegin[i];
  292.  
  293. octetsAux[3]+=hosts;
  294.  
  295. for(i=3;i>=0;--i)
  296. {
  297. octetsAux[i]+=leftovers;
  298. leftovers=0;
  299. if(octetsAux[i]>255)
  300. {
  301. leftovers=octetsAux[i]/256;
  302. octetsAux[i]%=256;
  303. }
  304. }
  305.  
  306. return octetsAux[octet];
  307. }
  308.  
  309. void refreshNet()
  310. {
  311. int i,j;
  312.  
  313. if(!V.size())
  314. return;
  315.  
  316. sort(V.begin(),V.end());
  317.  
  318. V[0].octetsBegin[0]=192;
  319. V[0].octetsBegin[1]=168;
  320. V[0].octetsBegin[2]=0;
  321. V[0].octetsBegin[3]=0;
  322.  
  323. for(i=0;i<V.size()-1;++i)
  324. {
  325. for(j=0;j<4;++j)
  326. {
  327. V[i].octetsEnd[j]=calculateOctets(V[i].hosts,V[i].octetsBegin,j);
  328. }
  329.  
  330. for(j=0;j<4;++j)
  331. {
  332. V[i+1].octetsBegin[j]=V[i].octetsEnd[j];
  333. }
  334. }
  335. }
  336.  
  337. int main()
  338. {
  339. short int mask=32;
  340. int vChoice=0;
  341.  
  342. hideCursor();
  343.  
  344. while(1)
  345. {
  346. refreshNet();
  347. drawMenu(mask,vChoice);
  348. GetInput(mask,vChoice);
  349. }
  350.  
  351. return 0;
  352. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement