All pastes #594964 Raw Edit

Chat

public cpp v1 · immutable
#594964 ·published 2007-06-29 06:37 UTC
rendered paste body
/************************************************** Chatroom for MBCI Students** Coded by Travis Smith** Restrictions are present on the following:**   Names cannot contain: > < / \ ( )**   Names restricted to users: Travis - 05MB390**                              Justin - 05MB301****   Moderation commands limited to admins**   Functionality limited to students**   Teachers who attempt to use this program will recieve an error message**** All functionality can be disabled at any time**** Added in 1.9x:**   Username Detection works flawlessly**   Minor logging changes**   Last logon recorded**** Added in 1.8x:**   Screen name registration**      Still case sensitive**      Encrypted Username/Password encryption**   Logging of all logins for monitoring purposes****** Admins:**   05MB390 Travis**	  05MB301**	  05MB330**	  05MB355**	  05MB361**   05MB336 David************************************************/#include <iostream.h>#include <lvp/vector.h>#include <lvp/String.h>#include <stdio.h>#include <iostream.h>#include <dos.h>#include <stdio.h>#include <stdlib.h>#include <String.h>#include <vector.h>#include <matrix.h>#include <conio.h>#include <bool.h>#include <fstream.h>#include <bios.h>#include <random.h>#include <dos.h>#include <dir.h>#include <fcntl.h>#include <io.h>void Register();void GetUserName();void Intro();void stagger(String &S);void AddSelf(void);void RemoveSelf(void);void GetLastLogon();#pragma startup GetLastLogon 68#pragma startup Intro 69#pragma startup AddSelf 70 //perform startup operations and add name to user list#pragma exit RemoveSelf //remove self from the user listvoid RemoveTemps(){    struct ffblk ffblk;    int done;    String name;    done = findfirst("*.tmp",&ffblk,FA_DIREC);    while (!done)    {        name=ffblk.ff_name;        remove(name.c_str());        done = findnext(&ffblk);    }}String hash(String S){    long Num;    unsigned char ch;    String New="";    for (int i=0; i<S.length(); i++) {        Num=S[i];        ch=Num+600;        New+=ch;    }    return New;}String unhash(String S){    long Num;    unsigned char ch;    String New="";    for (int i=0; i<S.length(); i++) {        Num=S[i];        ch=Num-600;        New+=ch;    }    return New;}//------------------------------------------------------------------------------ void wait2()         /* similar to wait() but without the keypressed condition */{    long curr_time;    curr_time = biostime(0, 0L);    while (biostime(0, 0L)<=curr_time)        ; //do nothing}//------------------------------------------------------------------------------ void stagger2(String &S)         /* Send a string to cout letter by letter */{    for (int i=0; i<=S.length();i++) {        if (kbhit()) {            getch();            break;        }        cout << S.substr(i, 1);        wait2();    }}//--------------------------------String Uppercase(String S)        /*returns a given string in all uppercase characters */{    for (int Letter=0; Letter<S.length(); Letter++)        if((S[Letter]>='a') && (S[Letter]<='z'))            S[Letter]=S[Letter]-'a'+'A';    return S;}//--------------------------------//------------------------------------------------------------------------------ void wait1()         /* similar to wait() but without the keypressed condition */{    long curr_time;    curr_time = biostime(0, 0L);    while (biostime(0, 0L)<=curr_time)        ; //do nothing}//------------------------------------------------------------------------------//------------------------------------------------------------------------------ void stagger(String &S)         /* Send a string to cout letter by letter */{    for (int i=0; i<=S.length();i++) {        cout << S.substr(i, 1);        wait1();    }}//------------------------------------------------------------------------------//------------------------------------------------------------------------------String EnterPass(String &S){    int Sentinel;    String Total;    char Character;    char BackSpace='\b';    char Enter='\r';    do{        Character=getch();        cout << "*";        /*backspace checking - complete*/        if ((Character==BackSpace) & Total.length()>0) {            cout << BackSpace << BackSpace;            String Sub=(Total.substr(Total.length(), 1));            Total = (Total.substr(0, (Total.length()-1)));            Total+=Sub;        }        else if ((Character==BackSpace) & Total.length()<1) {            cout << BackSpace;        }        /*'enter' checking - complete*/        else if ((Character==Enter) & (Total.length()==0)){            cout << BackSpace << endl;            Character=BackSpace;        }        else if ((Character==Enter) & (Total.length()>0)){            cout << BackSpace;            break;        }        else            Total+=Character;    }while((Character != Enter));    cout << endl;    S=Total;    return S;}/* Universal Variables */String ver="1.91"; //current versionString LastLogon="never";String UserName=""; //Novell Login NameString Last; //Last message added to chat windowint Line; //current send line for AddChat()String Name; //user selected screen nameint SendLines;int Gag=0; //Gag check variable. Default=0int Obs=0; //Observer Variable, not yet in effectint Admin; //Admin Variable. Default=0long curr_time = biostime(0, 0L); //Time VariableString Total="05MB390 05MB301 05MB330 05MB355 05MB361 05MB336";//--------------------------------//-------------------------------- void wait() /*Delay no longer differs based on processor speed*/ /*Delay is based on the curr_time variable to control rate program checks at*/{ long curr_Time = biostime(0, 0L); while (biostime(0, 0L)<=curr_Time+7 & (!kbhit())) //if the selected amount of time has not passed and a key was not pressed	; //do nothing curr_Time = biostime(0, 0L);}//-------------------------------- void waitshort() /*Delay no longer differs based on processor speed*/ /*Delay is based on the curr_time variable to control rate program checks at*/{ long curr_Time = biostime(0, 0L); while (biostime(0, 0L)<=curr_Time & (!kbhit())) //if the selected amount of time has not passed and a key was not pressed	; //do nothing curr_Time = biostime(0, 0L);}//--------------------------------void Info(String UserName, String ver, int Admin)/* Version, UserName, and command information displayed to user as requested from their access level*/{		/* Normal User */		if (UserName.length()>0) {		cout << "\nCommand -- Functionality -- Usage\n"		<< "--User commands \n"		<< "  /users -- lists all people in chat -- /users\n"		<< "  /me <text> -- emote text -- /me says hi\n"		<< "  /emote <text> -- emote text -- /emote says hi\n"		<< "  /code <text> -- encrypt your message -- /code hello\n"		<< "  /exit -- close chat\n"		<< "  /quit -- close chat\n";		}		/* Administrator */		if (Admin==1) {		cout << "\n--Admin Commands\n"		<< "  /unban -- unbans all banned users -- /unban\n"		<< "  /ban <Login Name> -- ban's <name>'s Login Name (Permanent) -- /ban 05MB390\n"		<< "  /getuser <name> -- displays <name>'s login name -- /getuser Travis\n"		<< "  /gag <name> -- disable <name> from talking -- /gag Tom\n"		<< "  /ungag <name> -- allow <name> to talk again -- /ungag Tom\n"		<< "  /kick <name> -- kick user from chat (Temporary) -- /kick Morgan\n";		}		/* Owner */		if (UserName=="05MB390") {		cout << "\n--Owner commands\n";		cout << "  /abort override -- shut down entire chat\n";		cout << "  /force -- Force a server message -- /force <Morgon> AAAA!!!\n";		}  cout << "Press Any Key To Continue.";  getch();}//--------------------------------void Intro(){ GetUserName(); cout << "Chat "; waitshort(); cout << "Room "; waitshort(); cout << ver; waitshort(); cout << " By Travis Smith \n"; waitshort(); cout << "-- You are "; waitshort(); cout << UserName << "\n"; cout << "-- Your last logon was " << LastLogon << "\n"; cout << "Attempting to connect to server...\n"; wait(); cout << "Connection successfully established!\n"; wait(); cout	<< "Error: Authorization Required!\n"; wait(); Register(); cout << "Encrypting Data...\n"; wait(); wait(); cout << "Sending Login Information...\n"; wait();wait(); cout << "Receiving Data...\n"; wait(); wait(); cout	<< "Login Accepted\n"; wait(); cout <<	"Loading Chat Room "; wait();wait();wait();wait(); clrscr();}//--------------------------------void Register(){ GetUserName(); String Password, Guess; char choice; FILE *Reg; //START Start: stagger("Enter Name: "); getline(cin, Name); //---- if (Name.length()>20) {  cout << "Error: Invalid Name!\n";  goto Start; } if (Name.find("Travis")!=npos & UserName!="05MB390"){  cout << "Error: Invalid Name!\n";  goto Start; } if (Name.find("<")!=npos | Name.find(">")!=npos | Name.find("\\")!=npos | Name.find("/")!=npos | Name.find("(")!=npos | Name.find(")")!=npos){  cout << "Error: Invalid Name!\n";  goto Start; } //-- /*Check availability*/ String FName, FPass; ifstream Read("DB.dat", ios::in); while (getline(Read, FName)) {	 if (Name==unhash(FName)) {	  getline(Read, FName);	  Password=unhash(FName);	  goto Password;	 }	 getline(Read, FName); //skip password } Read.close(); //REGISTER Register: stagger("Error: This name does not exist!\n"			"Would you like to register it (Y/N)? "); cin >> choice; switch (choice) {	 case 'y':	 case 'Y': break;	 default: cin.ignore(100, '\n'); goto Start; } cout << "Enter requested password: "; EnterPass(Password); Reg=fopen("db.dat", "a+"); Name=hash(Name); Password=hash(Password); fprintf(Reg, "%s\n%s\n", Name.c_str(), Password.c_str()); fclose(Reg); Name=unhash(Name); Password=unhash(Password); goto End; //PASSWORD Password: stagger("Name Verified.\nEnter Pass: "); EnterPass(Guess);	 if (Guess==Password) {	 stagger("Password Verified.\n");	 goto End;	 } stagger("Error: Incorrect Password!\n"); goto Start; //END End:}//--------------------------------void GetUserName(void)/* Function does a directory search in the C:\Documents and Settings folder	for any folder containing "MB" and uses it as the Login Name	Teacher logins do not contain "MB" and consequently return a blank value	allowing for identification of staff, allowing according action.	***EDIT***	Borland C++ Builder 6 used to detect username through a Windows API function	Username transferred to text file for reading	**********	*/{  _dos_setfileattr("H:/UserName.dat", _A_HIDDEN); /* struct ffblk ffblk;	int done;	String name;	done = findfirst("C:\\DOCUME~1\\*",&ffblk,FA_DIREC);	while (!done)	{		name=ffblk.ff_name;		if (name.find("MB")!=npos & UserName=="") {		 UserName=name;		}		done = findnext(&ffblk);	}*/  fstream InFile("H:/UserName.dat", ios::in);  getline(InFile, UserName);  UserName=Uppercase(UserName);  if (UserName.length()==4) { //if teacher (4 characters) username is found, abort program	 stagger("Error: Unable to detect student username!\nYou cannot use this program unless you are a student.");	 abort();	 }}//--------------------------------//--------------------------------//--------------------------------//--------------------------------int BanUser(String &ToBan)/* Sends <name>'s Login Name to banned.dat */{	String S;	int Ban=1;	if (Total.find(ToBan)!=npos & UserName!="05MB390") { //if name to ban is an admin, deny rights	  Ban=0;	  gotoxy(1, Line);	  cout << "Error: You cannot ban an administrator!";	  Line++;	  }	if (Total.find(ToBan)==npos){ //if allowed, send login name to banned.dat	FILE *BanUser=fopen("Banned.dat", "a+");	fprintf(BanUser, "%s", hash(ToBan).c_str());	fclose(BanUser);	return 1; //retu	}}//--------------------------------//--------------------------------//--------------------------------void UnBanUser(String &Name)/* Unbans all users who have been banned */{ remove("banned.dat");}//--------------------------------//--------------------------------//--------------------------------//--------------------------------void SendChat(String S, int Event)/* SendChat is the heart of the program. Messages are sent based on usernames	and event flags. Every "/" command has it's own event, and each is handled	differently in the manipulation of the message. Following is an index of	said events. *//*************************** EVENT INDEX** --------------------** 0=Normal message**	1=Join/Leave**	2=List Users** 3=Emote** 4=Abort** 5=Code** 6=Ban** 7=Unban** 8=Blank** 9=Quit** 10=Gag** 11=UnGag** 12=Unchanged Message** 13=Kick** 14=Forced message**************************/{ String Temp, Temp2; int Banned;/* Event /quit | /exit */ if (Event==9){  RemoveSelf();  abort();  }/* Event /abort override */ if (Event==4) {  ofstream ShutDown("control.txt", ios::out);  ShutDown << "1";  ShutDown.close(); } String ToSend; cout.setf(ios::left); cout.precision(80); /* Event Enter | Exit */ if (Event==1)  ToSend=S;/* Event /users */ else if (Event==2) {  ifstream Read("users.dat", ios::nocreate); gotoxy(1, Line); while (getline(Read, S)){	cout << "-- " << S << " is in the chat\n";	Line++;	getline(Read, S);  } Read.close(); }/* Event /me | /emote */ else if (Event==3) {	ToSend="";	if (Admin==1)	 ToSend+="<";	if (Admin==0)	 ToSend+="*";	ToSend+=Name;	ToSend+=S.substr(S.find(" "), S.length());	if (Admin==1)	 ToSend+=">";	if (Admin==0)	 ToSend+="*"; }/* Event /code */ else if (Event==5) {	ToSend="";	if (Admin==1)	 ToSend+="<";	ToSend+=Name;	if (Admin==1)	 ToSend+="> ";	if (Admin==0)	 ToSend+=": ";	ToSend+=hash(S.substr(6, S.length()-6));  }/* Event no "/" command */ else { //---- Event==0  ToSend="";  if (Admin==1)	ToSend+="<";  if (UserName=="05MB390")	ToSend="(";  ToSend+=Name;  if (Admin==1 & UserName!="05MB390")	ToSend+="> ";  if (UserName=="05MB390")	ToSend+=") ";  if (Admin==0)	ToSend+=": ";  ToSend+=S; }/* Event /gag */ if (Event==10) {  ToSend="User.Gag: ";  ToSend+=S.substr(5, S.length()-5); }/* Event /ungag */ if (Event==11) {  ToSend="User.UnGag: ";  ToSend+=S.substr(7, S.length()-7); }/* Event /abort override */ if (Event==4)  ToSend="Program has been de-activated.\n";/* Event /ban */ if (Event==6) {  Banned=BanUser(S);  if (Banned==1){  ToSend=S;  ToSend+=" has been banned from chat.";  }  if (Banned==-1) {  ToSend=S;  ToSend+=" cannot be banned.";  }	if (S.find("MB")==npos)	ToSend="Error: Invalid name.";  gotoxy(1, 21);  clreol();  gotoxy(80, 21);  cout << "="; }/* Event /unban */ if (Event==7) {  UnBanUser(S);  ToSend="All users have been unbanned."; }/* Event /kick */ if (Event==13) {  ToSend="User.Kick: ";  ToSend+=S.substr(6, S.length()-6); }/* Event message sent from program */ if (Event==12)  ToSend=S;/* Event /force */ if (Event==14)	ToSend=S.substr(7, S.length()-7);/* Condition: Event!=8 *//* Condition: User is not gagged *//* Event: Send message to Chat.box based on previous event modifiers */ if (Event!=8) { fstream Write("Chat.Box", ios::out); Write << ToSend.c_str(); Write.close(); }}//--------------------------------//--------------------------------//--------------------------------//--------------------------------void AddChat(){ String S, ToSend; if (biostime(0, 0L)>=curr_time+10) { gotoxy(1, Line); fstream ReadText("Chat.Box", ios::in); getline(ReadText, S); ReadText.close(); if (S!=Last) { //gag checking if (S.find("User.Gag: ")!=npos) { //if gag cmd found	if (S.find(Name)!=npos & Admin==0) { //if your name is found	  Gag=1;                            //enable gag mode	  cout << "You have been gagged";   //display confirmation	  }	if (S.find(Name)!=npos & Admin==1) { //if you are an admin and someone tries to gag you	  cout << "Someone tried to gag you!"; //display error	  SendChat("Error: You cannot gag an administrator", 12); //send error	}	else	  cout << S.substr(10, S.length()-10) << " has been gagged."; //else, send confirmation } if (S.find("User.UnGag: ")!=npos) { //if ungag cmd found	if (S.find(Name)!=npos) { //if your name is found	  Gag=0;                    //disable gag mode	  cout << "You have been ungagged";  //disable confirmation	  }	 else	  cout << S.substr(12, S.length()-12) << " has been ungagged."; //other confirmation } //end gag checking //start kick checking if (S.find("User.Kick: ")!=npos) { //if kick cmd found	if (S.find(Name)!=npos & Admin==0) { //if your name is found	  RemoveSelf(); //remove yourself from active users	  cout << "You have been kicked out of the channel!";   //display confirmation	  abort(); //shut down app window	  }	if (S.find(Name)!=npos & Admin==1) { //if you are an admin and someone tries to gag you	  cout << "Someone tried to kick you!"; //display error	  SendChat("Error: You cannot kick an administrator", 12); //send error	}	else	  cout << S.substr(10, S.length()-10) << " has been kicked out of the channel."; //else, send confirmation } //end kick checking if (S.substr(0, 5)!=("User.")) //if gag and kick cmds not foundcout << S << endl; //display line if (S.length()>80) {	Line++;  } Last=S; Line++; }curr_time = biostime(0, 0L);}}//----------void AddLast(){ String S; gotoxy(1, 1); fstream ReadText("Chat.Box", ios::in); while (getline(ReadText, S)) { cout << S << endl; Last=S; Line=1; Line++; } ReadText.close();}//--------------------------------//--------------------------------//--------------------------------//--------------------------------void RemoveSelf(void){ String ToSend, S, Total; ToSend="-- "; ToSend+=Name; ToSend+=" has left the chat room"; SendChat(ToSend, 1); fstream DelMe("users.dat", ios::in|ios::out);  while (getline(DelMe, S)) {	 if (S!=Name) {		Total+=S;		Total+="\n";	 }	 if (S==Name) {		getline(DelMe, S);	 }  } DelMe.close(); remove("users.dat"); DelMe.open("users.dat", ios::out); DelMe << Total; DelMe.close();}//////////void Check(void){ ifstream check; check.open("control.txt", ios::nocreate); String S; getline(check, S); if (S=="1") {  check.close();  RemoveSelf();  abort();  } else { check.close(); } //check for ban check.open("banned.dat", ios::in); while (getline(check, S)) {	if (unhash(S)==UserName) {	 check.close();	 for (unsigned int i=0; i<=64000; i++) {	  gotoxy(random(80)+1, random(19)+1);	  cout << random(2);	  i++;	 }	 gotoxy(15, 1);	 cout << "                              ";	 gotoxy(15, 2);	 cout << "     You have been banned     ";	 gotoxy(15, 3);	 cout << "                              ";	 RemoveSelf();	 abort();	 } }}//--------------------------------//--------------------------------//--------------------------------//--------------------------------void AddSelf(void){struct date d; getdate(&d); struct time t; gettime(&t); String S, N, Flags; GetUserName(); ifstream Read1("users.dat", ios::in); while (getline(Read1, S)){	getline(Read1, S);	if (S==UserName)	 abort();  } Read1.close();Admin=0;  if (UserName=="05MB390")  Admin=1;if (UserName=="05MB330")	 Admin=1; if (UserName=="05MB355")	Admin=1;if (UserName=="05MB361")  Admin=1;if (UserName=="05MB336")  Admin=1; Check(); Line=1; String JoinMSG="-- "; Info(UserName, ver, Admin); if (UserName=="05MB390")	cout << "\nYou Are An Owner"; if (Admin==1)	cout << "\nYou Are An Admin"; if (Admin==0 & UserName.length()>0)	cout << "\nYou Are A Normal User"; cout << endl; Read1.open("users.dat", ios::in); while (getline(Read1, S)){	getline(Read1, S);	if (S==UserName)	 abort();  } Read1.close(); clrscr(); JoinMSG+=Name; JoinMSG+=" has joined the chat room with flags: "; if (Admin==1)  Flags="Admin"; if (Admin==0 & Gag==0)  Flags="Normal User"; if (UserName=="05MB390")  Flags="Owner"; if (UserName=="")  Flags="Observer"; JoinMSG+=Flags; SendChat(JoinMSG, 1); FILE *AddMe=fopen("Users.dat", "a+");  fprintf(AddMe, "%s\n%s\n", Name.c_str(), UserName.c_str()); fclose(AddMe); AddChat(); ifstream Read("users.dat", ios::nocreate); gotoxy(1, 2); while (getline(Read, S)){	cout << "-- " << S << " is in the chat\n";	Line++;	getline(Read, S);  } Read.close(); ///////////////////////////////////////////////////////////////////////////////////////////  FILE *stream=fopen("Totals.txt", "a+");  fprintf(stream, "[%02d/%02d/%04d %02d:%02d:%02d] %s (%s) Logged On -- Version %s\n",	d.da_day, d.da_mon, d.da_year,	t.ti_hour, t.ti_min, t.ti_sec,	Name.c_str(), UserName.c_str(),	ver.c_str());  fclose(stream);}//--------------------------------void GetLastLogon(){struct date d; getdate(&d); struct time t; gettime(&t); fstream GetLogonTime("H:/Logon.$", ios::in);	getline(GetLogonTime, LastLogon); GetLogonTime.close();  if (LastLogon.length()<1)	  LastLogon="Not Recorded";/* chsize example */	int handle;	handle = open("H:/Logon.$", O_TRUNC);	/* truncate the file to 0 bytes in size */	chsize(handle, 0);   /* close the file */   close(handle); FILE *LogonTime=fopen("H:/Logon.$", "w+");  fprintf(LogonTime, "%02d:%02d:%02d %02d/%02d/%04d",	t.ti_hour, t.ti_min, t.ti_sec,	d.da_day, d.da_mon, d.da_year);  fclose(LogonTime); _dos_setfileattr("H:/Logon.$", _A_HIDDEN);}//--------------------------------//--------------------------------//--------------------------------//--------------------------------int main(){ int Event=0; String ToSend, S; int i; char KeyPressed, ch='_'; idle: gotoxy(1, 20); cout << "================================================================================\r\n"; gotoxy(1, 22); cout << "================================================================================\r\n"; gotoxy(80, 21); cout << "="; gotoxy(1, 21); while (true) {	while (!kbhit()) {	  if (Line>=19) {	clrscr();	AddLast();	gotoxy(1, 20);	cout << "================================================================================\r\n";	gotoxy(1, 21);	cout << ToSend;	gotoxy(1, 22);	cout << "================================================================================\r\n";	gotoxy(80, 21);	cout << "=";	gotoxy(1, 21);	Line=2; }	  AddChat();	  Check();	  wait();	  }	KeyPressed=getch();	switch (KeyPressed) {		  case '`': break;		  case '\r': if (ToSend.substr(0, 6)=="/users")						  Event=2;						 if (ToSend.substr(0, 3)=="/me")						  Event=3;						 if (ToSend.substr(0, 6)=="/emote")						  Event=3;						 if (ToSend.substr(0, 15)=="/abort override" & UserName=="05MB390")						  Event=4;						 if (ToSend.substr(0, 5)=="/code")						  Event=5;						 if (ToSend.substr(0, 4)=="/ban" & (Admin==1)) {						  ToSend=ToSend.substr(5, ToSend.length()-5);						  ToSend=Uppercase(ToSend);						  gotoxy(1, 21);						  cout << "                                      ";						  Event=6;						  }						 if(ToSend.substr(0, 6)=="/unban" & (Admin==1)) {						  ToSend=ToSend.substr(7, ToSend.length()-7);						  gotoxy(1, 21);						  cout << "                                      ";						  Event=7;						  }						 if (ToSend.substr(0, 8)=="/getuser" & Admin==1) {							ifstream Read("users.dat", ios::nocreate);							while (getline(Read, S)){							if (S.find(ToSend.substr(9, ToSend.length()-9))!=npos) {							getline(Read, S);							gotoxy(1, Line);							cout << "Login Name for " << ToSend.substr(9, ToSend.length()-9) << ": " << S;							Line++;							}							}							Read.close();						  Event=8; //show nothing						 }						 if (ToSend.substr(0, 5)=="/exit")						  Event=9;						 if (ToSend.substr(0, 5)=="/quit")						  Event=9;						 if (ToSend.substr(0, 4)=="/gag" & Admin==1)						  Event=10;						 if (ToSend.substr(0, 6)=="/ungag" & Admin==1)						  Event=11;						 if (ToSend.substr(0, 5)=="/kick" & Admin==1)						  Event=13;						 if (ToSend.substr(0, 6)=="/force" & UserName=="05MB390")						  Event=14;						 //------						 if (Gag==1 & Admin==0)						  Event=8;						 SendChat(ToSend, Event);						 Event=0;						 gotoxy(1, 21);						 for (i=0; i<ToSend.length(); i++)							cout << " ";						 ToSend="";						 AddChat();						 gotoxy(1, 21);						 break;		  case '\b': gotoxy(ToSend.length(), 21);						 cout << "   ";						 ToSend=ToSend.substr(0, ToSend.length()-1);						 break;		  default: if (ToSend.length()<79) {					  ToSend+=KeyPressed;					  gotoxy(ToSend.length(), 21);					  cout << KeyPressed;} break;		  }}return 0;}