tkeydef.cpp
上传用户:tigerk9
上传日期:2020-03-10
资源大小:237k
文件大小:4k
源码类别:

Telnet客户端

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //Telnet Win32 : an ANSI telnet client.
  3. //Copyright (C) 1998-2000 Paul Brannan
  4. //Copyright (C) 1998 I.Ioannou
  5. //Copyright (C) 1997 Brad Johnson
  6. //
  7. //This program is free software; you can redistribute it and/or
  8. //modify it under the terms of the GNU General Public License
  9. //as published by the Free Software Foundation; either version 2
  10. //of the License, or (at your option) any later version.
  11. //
  12. //This program is distributed in the hope that it will be useful,
  13. //but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. //GNU General Public License for more details.
  16. //
  17. //You should have received a copy of the GNU General Public License
  18. //along with this program; if not, write to the Free Software
  19. //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. //
  21. //I.Ioannou
  22. //roryt@hol.gr
  23. //
  24. ///////////////////////////////////////////////////////////////////////////
  25. /////////////////////////////////////////////////////////
  26. //     Class TkeyDef - Key Definitions                 //
  27. //                   - kept in an array container      //
  28. //     originally part of KeyTrans.cpp                 //
  29. /////////////////////////////////////////////////////////
  30. #include "tkeydef.h"
  31. // This class did not properly release memory before, and a buffer overrun
  32. // was apparent in operator=(char*).  Fixed.  (Paul Brannan Feb. 4, 1999)
  33. TKeyDef::TKeyDef() {
  34. uKeyDef.szKeyDef = 0;
  35. vk_code = dwState = 0;
  36. }
  37. TKeyDef::TKeyDef(char *def, DWORD state, DWORD code) {
  38. uKeyDef.szKeyDef = 0;
  39. if (def != NULL && *def != 0) {
  40. // szKeyDef = (char *) GlobalAlloc(GPTR, strlen(def) +1);
  41. uKeyDef.szKeyDef = new char[strlen(def)+1];
  42. strcpy(uKeyDef.szKeyDef, def);
  43. }
  44. dwState = state;
  45. vk_code = code;
  46. }
  47. TKeyDef::TKeyDef(optype op, DWORD state, DWORD code) {
  48. uKeyDef.op = new optype;
  49. uKeyDef.op->sendstr = 0;
  50. uKeyDef.op->the_op = op.the_op;
  51. dwState = state;
  52. vk_code = code;
  53. }
  54. TKeyDef::TKeyDef(const TKeyDef &t) {
  55. if(t.uKeyDef.szKeyDef == NULL) {
  56. uKeyDef.szKeyDef = (char *)NULL;
  57. } else if(t.uKeyDef.op->sendstr == 0) {
  58. uKeyDef.op = new optype;
  59. uKeyDef.op->sendstr = 0;
  60. uKeyDef.op->the_op = t.uKeyDef.op->the_op;
  61. } else {
  62. uKeyDef.szKeyDef = new char[strlen(t.uKeyDef.szKeyDef)+1];
  63. strcpy(uKeyDef.szKeyDef, t.uKeyDef.szKeyDef);
  64. }
  65. dwState = t.dwState;
  66. vk_code = t.vk_code;
  67. }
  68. TKeyDef::~TKeyDef() {
  69. if(uKeyDef.szKeyDef) delete[] uKeyDef.szKeyDef;
  70. }
  71. char * TKeyDef::operator=(char *def) {
  72. if(def != NULL && *def != 0) {
  73. if(uKeyDef.szKeyDef) delete[] uKeyDef.szKeyDef;
  74. uKeyDef.szKeyDef = new char[strlen(def)+1];
  75. strcpy(uKeyDef.szKeyDef, def);
  76. }
  77. return uKeyDef.szKeyDef;
  78. }
  79. DWORD TKeyDef::operator=(DWORD code) {
  80. return vk_code = code;
  81. }
  82. TKeyDef& TKeyDef::operator=(const TKeyDef &t) {
  83. if(t.uKeyDef.szKeyDef) {
  84. if(uKeyDef.szKeyDef) delete[] uKeyDef.szKeyDef;
  85. if(t.uKeyDef.op->sendstr) {
  86. uKeyDef.szKeyDef = new char[strlen(t.uKeyDef.szKeyDef)+1];
  87. strcpy(uKeyDef.szKeyDef, t.uKeyDef.szKeyDef);
  88. } else {
  89. uKeyDef.op = new optype;
  90. uKeyDef.op->sendstr = 0;
  91. uKeyDef.op->the_op = t.uKeyDef.op->the_op;
  92. }
  93. } else {
  94. uKeyDef.szKeyDef = (char *)NULL;
  95. }
  96. dwState = t.dwState;
  97. vk_code = t.vk_code;
  98. return *this;
  99. }
  100. const optype& TKeyDef::operator=(optype op) {
  101. uKeyDef.op = new optype;
  102. uKeyDef.op->sendstr = 0;
  103. uKeyDef.op->the_op = op.the_op;
  104. return *uKeyDef.op;
  105. }
  106. // STL requires that operators be friends rather than member functions
  107. // (Paul Brannan 5/25/98)
  108. #ifndef __BORLANDC__
  109. bool operator==(const TKeyDef & t1, const TKeyDef & t2) {
  110. return ((t1.vk_code == t2.vk_code) && (t1.dwState == t2.dwState));
  111. }
  112. // We need this function for compatibility with STL (Paul Brannan 5/25/98)
  113. bool operator< (const TKeyDef& t1, const TKeyDef& t2) {
  114. if (t1.vk_code == t2.vk_code) return t1.dwState < t2.dwState;
  115. return t1.vk_code < t2.vk_code;
  116. }
  117. #else
  118. int   TKeyDef::operator==(TKeyDef & t) {
  119. return ((vk_code == t.vk_code) && (dwState == t.dwState));
  120. }
  121. #endif