reactos/rosapps/net/telnet/src/tkeydef.cpp
Steven Edwards c98929fa7e New Telnet Client
svn path=/trunk/; revision=2458
2001-12-30 10:05:48 +00:00

135 lines
4 KiB
C++

///////////////////////////////////////////////////////////////////////////////
//Telnet Win32 : an ANSI telnet client.
//Copyright (C) 1998-2000 Paul Brannan
//Copyright (C) 1998 I.Ioannou
//Copyright (C) 1997 Brad Johnson
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
//I.Ioannou
//roryt@hol.gr
//
///////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
// Class TkeyDef - Key Definitions //
// - kept in an array container //
// originally part of KeyTrans.cpp //
/////////////////////////////////////////////////////////
#include "tkeydef.h"
// This class did not properly release memory before, and a buffer overrun
// was apparent in operator=(char*). Fixed. (Paul Brannan Feb. 4, 1999)
TKeyDef::TKeyDef() {
uKeyDef.szKeyDef = 0;
vk_code = dwState = 0;
}
TKeyDef::TKeyDef(char *def, DWORD state, DWORD code) {
uKeyDef.szKeyDef = 0;
if (def != NULL && *def != 0) {
// szKeyDef = (char *) GlobalAlloc(GPTR, strlen(def) +1);
uKeyDef.szKeyDef = new char[strlen(def)+1];
strcpy(uKeyDef.szKeyDef, def);
}
dwState = state;
vk_code = code;
}
TKeyDef::TKeyDef(optype op, DWORD state, DWORD code) {
uKeyDef.op = new optype;
uKeyDef.op->sendstr = 0;
uKeyDef.op->the_op = op.the_op;
dwState = state;
vk_code = code;
}
TKeyDef::TKeyDef(const TKeyDef &t) {
if(t.uKeyDef.szKeyDef == NULL) {
uKeyDef.szKeyDef = (char *)NULL;
} else if(t.uKeyDef.op->sendstr == 0) {
uKeyDef.op = new optype;
uKeyDef.op->sendstr = 0;
uKeyDef.op->the_op = t.uKeyDef.op->the_op;
} else {
uKeyDef.szKeyDef = new char[strlen(t.uKeyDef.szKeyDef)+1];
strcpy(uKeyDef.szKeyDef, t.uKeyDef.szKeyDef);
}
dwState = t.dwState;
vk_code = t.vk_code;
}
TKeyDef::~TKeyDef() {
if(uKeyDef.szKeyDef) delete[] uKeyDef.szKeyDef;
}
char * TKeyDef::operator=(char *def) {
if(def != NULL && *def != 0) {
if(uKeyDef.szKeyDef) delete[] uKeyDef.szKeyDef;
uKeyDef.szKeyDef = new char[strlen(def)+1];
strcpy(uKeyDef.szKeyDef, def);
}
return uKeyDef.szKeyDef;
}
DWORD TKeyDef::operator=(DWORD code) {
return vk_code = code;
}
TKeyDef& TKeyDef::operator=(const TKeyDef &t) {
if(t.uKeyDef.szKeyDef) {
if(uKeyDef.szKeyDef) delete[] uKeyDef.szKeyDef;
if(t.uKeyDef.op->sendstr) {
uKeyDef.szKeyDef = new char[strlen(t.uKeyDef.szKeyDef)+1];
strcpy(uKeyDef.szKeyDef, t.uKeyDef.szKeyDef);
} else {
uKeyDef.op = new optype;
uKeyDef.op->sendstr = 0;
uKeyDef.op->the_op = t.uKeyDef.op->the_op;
}
} else {
uKeyDef.szKeyDef = (char *)NULL;
}
dwState = t.dwState;
vk_code = t.vk_code;
return *this;
}
const optype& TKeyDef::operator=(optype op) {
uKeyDef.op = new optype;
uKeyDef.op->sendstr = 0;
uKeyDef.op->the_op = op.the_op;
return *uKeyDef.op;
}
// STL requires that operators be friends rather than member functions
// (Paul Brannan 5/25/98)
#ifndef __BORLANDC__
bool operator==(const TKeyDef & t1, const TKeyDef & t2) {
return ((t1.vk_code == t2.vk_code) && (t1.dwState == t2.dwState));
}
// We need this function for compatibility with STL (Paul Brannan 5/25/98)
bool operator< (const TKeyDef& t1, const TKeyDef& t2) {
if (t1.vk_code == t2.vk_code) return t1.dwState < t2.dwState;
return t1.vk_code < t2.vk_code;
}
#else
int TKeyDef::operator==(TKeyDef & t) {
return ((vk_code == t.vk_code) && (dwState == t.dwState));
}
#endif