c_string.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #define STRICT
  2. #include <windows.h>
  3. #include <malloc.h>
  4. #include <stdio.h>
  5. #include "c_string.h"
  6. #include "../nu/ns_wc.h"
  7. extern BOOL is_nt;
  8. template<class myChar>
  9. void string_base<myChar>::makespace(UINT s)
  10. {
  11. if (size<s)
  12. {
  13. int oldSize = size;
  14. do size<<=1; while(size<s);
  15. myChar *newPtr = (myChar*)realloc(ptr,size*sizeof(myChar));
  16. if (!newPtr)
  17. {
  18. newPtr = (myChar*)malloc(size*sizeof(myChar));
  19. if (newPtr)
  20. {
  21. memcpy(newPtr, ptr, oldSize*sizeof(myChar));
  22. free(ptr);
  23. ptr = newPtr;
  24. }
  25. else return ;
  26. }
  27. else ptr = newPtr;
  28. }
  29. }
  30. void String::s_GetWindowText(HWND w)
  31. {
  32. Reset();
  33. int len=GetWindowTextLengthA(w)+1;
  34. GetWindowTextA(w,StringTempA(*this,len),len);
  35. }
  36. void StringW::s_GetWindowText(HWND w)
  37. {
  38. Reset();
  39. int len=GetWindowTextLengthW(w)+1;
  40. GetWindowTextW(w,StringTempW(*this,len),len);
  41. }
  42. void String::SetStringW(const WCHAR * c)
  43. {
  44. UINT len=(lstrlenW(c)+1)*2;
  45. WideCharToMultiByteSZ(CP_ACP,0,c,-1,StringTempA(*this,len),len,0,0);
  46. }
  47. void StringW::SetStringA(const char * c)
  48. {
  49. UINT len=(UINT)strlen(c)+1;
  50. MultiByteToWideCharSZ(CP_ACP,0,c,-1,StringTempW(*this,len),len);
  51. }
  52. void String::AddStringW(const WCHAR * c)
  53. {
  54. AddString(String(c));
  55. }
  56. void StringW::AddStringA(const char * c)
  57. {
  58. AddString(StringW(c));
  59. }
  60. void String::s_SetWindowText(HWND w)
  61. {
  62. SetWindowTextA(w,*this);
  63. }
  64. void StringW::s_SetWindowText(HWND w)
  65. {
  66. SetWindowTextW(w,*this);
  67. }
  68. StringPrintf::StringPrintf(const char * fmt,...)
  69. {
  70. va_list list;
  71. va_start(list,fmt);
  72. vsprintf(StringTempA(*this,1024),fmt,list);
  73. va_end(list);
  74. }
  75. StringPrintfW::StringPrintfW(const WCHAR * fmt,...)
  76. {
  77. va_list list;
  78. va_start(list,fmt);
  79. vswprintf(StringTempW(*this,1024),1024,fmt,list);
  80. va_end(list);
  81. }
  82. String::String(const StringW & z) {AddStringW(z);}