Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<windows.h>
- #include<conio.h>
- #include<cstdlib>
- #include<math.h>
- #include<iomanip>
- #include<vector>
- #include<algorithm>
- using namespace std;
- class net;
- vector<net>V;
- bool acceptNet=0;
- class net
- {
- public:
- int hosts,octetsBegin[4],octetsEnd[4];
- string mask,wildcard;
- bool operator<(net net1)
- {
- return hosts>net1.hosts;
- }
- };
- void delNet(int position)
- {
- if(V.size()!=0)
- V.erase(V.begin()+position);
- }
- string convertToBinary(short int mask)
- {
- int i,zeros=32-mask;
- string s="";
- for(i=0;i<mask;++i)
- s=s+'1';
- for(i=0;i<zeros;++i)
- s=s+'0';
- return s;
- }
- string convertToBinaryWC(short int mask)
- {
- int i,zeros=32-mask;
- string s="";
- for(i=0;i<mask;++i)
- s=s+'0';
- for(i=0;i<zeros;++i)
- s=s+'1';
- return s;
- }
- int btoi(string s)
- {
- int i,x=0;
- for(i=s.size();i>=0;--i)
- if(s[i]=='1')
- x+=pow(2,s.size()-i-1);
- return x;
- }
- string itoa(int x)
- {
- string result="";
- while(x!=0)
- {
- result=(char)(x%10+'0')+result;
- x/=10;
- }
- return result;
- }
- string calculateOctet(short int mask,bool wildCard)
- {
- int i,x1,x2,x3,x4;
- string s,o1,o2,o3,o4,result="";
- if(wildCard)
- s=convertToBinaryWC(mask);
- else
- s=convertToBinary(mask);
- o1=s.substr(0,8);
- o2=s.substr(8,8);
- o3=s.substr(16,8);
- o4=s.substr(24,8);
- x1=btoi(o1);
- x2=btoi(o2);
- x3=btoi(o3);
- x4=btoi(o4);
- if(x1==0)
- result=result+" 0 "+'.';
- else
- result=result+itoa(x1)+'.';
- if(x2==0)
- result=result+" 0 "+'.';
- else
- result=result+itoa(x2)+'.';
- if(x3==0)
- result=result+" 0 "+'.';
- else
- result=result+itoa(x3)+'.';
- if(x4==0)
- result=result+" 0 ";
- else
- result=result+itoa(x4);
- return result;
- }
- void PlaceCursor(short int x,short int y) // places cursor in set position
- {
- COORD Coordinates={x,y};
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Coordinates);
- }
- void customClear() // clears the screen in more or less efficient manner
- {
- int i;
- PlaceCursor(15,2);
- cout<<" ";
- PlaceCursor(10,4);
- cout<<" ";
- PlaceCursor(40,2);
- cout<<" ";
- PlaceCursor(8,7);
- cout<<" ";
- PlaceCursor(32,7);
- cout<<" ";
- for(i=0;i<V.size()+2;++i)
- {
- PlaceCursor(1,9+i);
- cout<<" ";
- }
- }
- void GetInput(short int &choice,int &vChoice) // gets input from user
- {
- int g;
- g=getch();
- if(g==224)
- g=getch();
- if(g==75 && choice!=0) //LEFT
- --choice;
- else if(g==77 && choice!=32) //RIGHT
- ++choice;
- else if(g==80 && vChoice<V.size()-1 && V.size()!=0) //DOWN
- ++vChoice;
- else if(g==72 && vChoice>0) //UP
- --vChoice;
- else if(g==13) //ACCEPT ADDING TO NET
- acceptNet=1;
- else if(g==8) //DEL NET
- delNet(vChoice);
- }
- void hideCursor() // hides cursor
- {
- HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
- CONSOLE_CURSOR_INFO info;
- info.dwSize = 100;
- info.bVisible = FALSE;
- SetConsoleCursorInfo(consoleHandle, &info);
- }
- void drawMenu(short int mask,int vChoice)
- {
- int i,j;
- long long int currHosts;
- HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
- customClear();
- PlaceCursor(9,2);
- cout<<"mask: "<<mask;
- PlaceCursor(32,2);
- cout<<fixed<<setprecision(0)<<"hosts: ";
- if(mask==32)
- currHosts=0;
- else
- currHosts=pow(2,32-mask);
- if(acceptNet)
- {
- net net1;
- net1.hosts=currHosts;
- net1.mask=calculateOctet(mask,0);
- net1.wildcard=calculateOctet(mask,1);
- V.push_back(net1);
- acceptNet=0;
- }
- cout<<currHosts;
- PlaceCursor(10,4);
- for(i=1;i<=32;++i)
- {
- if(i<=mask)
- cout<<'-';
- else
- {
- SetConsoleTextAttribute(hConsole,2);
- cout<<(char)(434);
- SetConsoleTextAttribute(hConsole,7);
- }
- if(i%8==0 && i!=32)
- cout<<'.';
- }
- PlaceCursor(9,6);
- cout<<"Wildcard:";
- PlaceCursor(8,7);
- SetConsoleTextAttribute(hConsole,1);
- cout<<calculateOctet(mask,1);
- SetConsoleTextAttribute(hConsole,7);
- PlaceCursor(32,6);
- cout<<"Mask:";
- PlaceCursor(32,7);
- SetConsoleTextAttribute(hConsole,4);
- cout<<calculateOctet(mask,0);
- SetConsoleTextAttribute(hConsole,7);
- PlaceCursor(2,8);
- cout<<"Nets: ";
- for(i=0;i<V.size();++i)
- {
- if(i==vChoice)
- SetConsoleTextAttribute(hConsole,4);
- PlaceCursor(1,9+i);
- cout<<" "<<V[i].hosts<<" | "<<V[i].mask<<" | "<<V[i].wildcard<<" | ";
- for(j=0;j<4;++j)
- {
- cout<<V[i].octetsBegin[j];
- if(j!=3)
- cout<<".";
- }
- cout<<"-";
- for(j=0;j<4;++j)
- {
- if(j==3 && V[i].octetsEnd[j]!=0)
- cout<<V[i].octetsEnd[j]-1;
- else
- cout<<V[i].octetsEnd[j];
- if(j!=3)
- cout<<".";
- }
- SetConsoleTextAttribute(hConsole,7);
- }
- }
- int calculateOctets(int hosts,int octetsBegin[4],int octet)
- {
- int i,octetsAux[4],leftovers=0;
- for(i=0;i<4;++i)
- octetsAux[i]=octetsBegin[i];
- octetsAux[3]+=hosts;
- for(i=3;i>=0;--i)
- {
- octetsAux[i]+=leftovers;
- leftovers=0;
- if(octetsAux[i]>255)
- {
- leftovers=octetsAux[i]/256;
- octetsAux[i]%=256;
- }
- }
- return octetsAux[octet];
- }
- void refreshNet()
- {
- int i,j;
- if(!V.size())
- return;
- sort(V.begin(),V.end());
- V[0].octetsBegin[0]=192;
- V[0].octetsBegin[1]=168;
- V[0].octetsBegin[2]=0;
- V[0].octetsBegin[3]=0;
- for(i=0;i<V.size()-1;++i)
- {
- for(j=0;j<4;++j)
- {
- V[i].octetsEnd[j]=calculateOctets(V[i].hosts,V[i].octetsBegin,j);
- }
- for(j=0;j<4;++j)
- {
- V[i+1].octetsBegin[j]=V[i].octetsEnd[j];
- }
- }
- }
- int main()
- {
- short int mask=32;
- int vChoice=0;
- hideCursor();
- while(1)
- {
- refreshNet();
- drawMenu(mask,vChoice);
- GetInput(mask,vChoice);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement