KWString.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  FileName    :   KwString.h
  4. //  Version     :   1.0
  5. //  Creater     :   Freeway Chen
  6. //  Date        :   1998-10-16
  7. //  Comment     :   String Rounte from Delphi 4.0
  8. //
  9. //////////////////////////////////////////////////////////////////////////////////////
  10. #ifndef _KWSTRING_H_
  11. #define _KWSTRING_H_     1
  12. #ifdef _XP_LINUX_
  13. #include <ctype.h>
  14. #include <string.h>
  15. #include <wchar.h>
  16. #pragma pack(push, 1)
  17. extern unsigned char LowerToUpperTable[256 + 4];
  18. extern unsigned char UpperToLowerTable[256 + 4];
  19. #pragma pack(pop)
  20. inline int WcsLen(const unsigned short *Str1)
  21. {
  22.     return wcslen((const wchar_t *)Str1);
  23. }
  24. inline unsigned short * WcsCpy(unsigned short *Dest, const unsigned short *Source)
  25. {
  26.     return (unsigned short *)wcscpy((wchar_t *)Dest, (const wchar_t *)Source);
  27. }
  28. inline int WcsCmp(const unsigned short *Str1, const unsigned short *Str2)
  29. {
  30.     return wcscmp((const wchar_t *)Str1, (const wchar_t *)Str2);
  31. }
  32. inline int WcsNCmp(const unsigned short *Str1, const unsigned short *Str2, unsigned MaxLen)
  33. {
  34.     return wcsncmp((const wchar_t *)Str1, (const wchar_t *)Str2, MaxLen);
  35. }
  36. inline unsigned short * WcsCat(unsigned short *DestStr, const unsigned short *SrcStr)
  37. {
  38.     return (unsigned short *)wcscat((wchar_t *)DestStr, (const wchar_t *)SrcStr);
  39. }
  40. #else   // not _XP_LINUX_                   
  41. #pragma pack(push, 1)
  42. extern unsigned char LowerToUpperTable[256 + 4];
  43. extern unsigned char UpperToLowerTable[256 + 4];
  44. #pragma pack(pop)
  45. inline int _fastcall WcsLen(const unsigned short *Str1)
  46. {
  47.     int Len;
  48.     __asm cld
  49.     __asm MOV    EDI,[Str1]
  50.     __asm MOV    ECX,0xFFFFFFFF
  51.     __asm XOR    ax, ax
  52.     __asm REPNE  SCASW
  53.     __asm MOV    EAX,0xFFFFFFFE
  54.     __asm SUB    EAX,ECX
  55.     __asm MOV    [Len], EAX
  56.     return Len;
  57. }
  58. inline unsigned short * _fastcall WcsCpy(unsigned short *Dest, const unsigned short *Source)
  59. {
  60.     unsigned short *RetStr;
  61.     __asm cld
  62.     __asm MOV    ESI,[Source]
  63.     __asm MOV    EDX,[Dest]
  64.     __asm MOV    EDI,ESI
  65.     __asm MOV    ECX,0xFFFFFFFF
  66.     __asm XOR    EAX,EAX
  67.     __asm REPNE  SCASW
  68.     __asm NOT    ECX
  69.     __asm MOV    EDI,EDX
  70.     __asm MOV    EDX,ECX
  71.     __asm MOV    EAX,EDI
  72.     __asm SHR    ECX,1
  73.     __asm REP    MOVSD
  74.     __asm MOV    ECX,EDX
  75.     __asm AND    ECX,1
  76.     __asm REP    MOVSW
  77.     __asm MOV    [RetStr], EAX
  78.     return RetStr;
  79. }
  80. inline int _fastcall WcsCmp(const unsigned short *Str1, const unsigned short *Str2)
  81. {
  82.     int RetCode;
  83.     __asm cld
  84.     __asm MOV    EDI,[Str1]
  85.     __asm MOV    ESI,[Str2]
  86.     __asm mov    edx,edi
  87.     __asm MOV    ECX, -1
  88.     __asm XOR    EAX,EAX
  89.     __asm REPNE  SCASW
  90.     __asm NOT    ECX
  91.     __asm MOV    EDI,EDX
  92.     __asm XOR    EDX,EDX
  93.     __asm REPE   CMPSW
  94.     __asm MOV    AX, [EDI-2]
  95.     __asm MOV    DX, [ESI-2]
  96.     __asm SUB    EAX, EDX
  97.     __asm mov    [RetCode], EAX
  98.     return RetCode;
  99. }
  100. inline int _fastcall WcsNCmp(const unsigned short *Str1, const unsigned short *Str2, unsigned MaxLen)
  101. {
  102.     int RetCode;
  103.     
  104.     __asm MOV     EDI,[Str1]
  105.     __asm MOV     ESI,[Str2]
  106.     __asm mov     ECX,[MaxLen]
  107.     __asm mov     EDX,EDI
  108.     __asm MOV     EBX,ECX
  109.     __asm XOR     EAX,EAX
  110.     __asm OR      ECX,ECX
  111.     __asm JE      Label1
  112.     __asm REPNE   SCASW
  113.     __asm SUB     EBX,ECX
  114.     __asm MOV     ECX,EBX
  115.     __asm MOV     EDI,EDX
  116.     __asm XOR     EDX,EDX
  117.     __asm REPE    CMPSW
  118.     __asm MOV     AX, [EDI-2]
  119.     __asm MOV     DX, [ESI-2]
  120.     __asm SUB     EAX,EDX
  121. Label1:        
  122.     __asm mov [RetCode], eax
  123.     return RetCode;
  124. }
  125. inline unsigned short * _fastcall wStrEnd(unsigned short *Str1)
  126. {
  127.     unsigned short *RetStr;
  128.     __asm MOV     ECX, 0xFFFFFFFF
  129.     __asm XOR     EAX, EAX
  130.     __asm MOV     EDI, [Str1]
  131.     __asm REPNE   SCASW
  132.     __asm LEA     EAX, [EDI - 2]
  133.     __asm MOV     [RetStr], EAX
  134.     return RetStr;
  135. }
  136. inline unsigned short * _fastcall WcsCat(unsigned short *DestStr, const unsigned short *SrcStr)
  137. {
  138.     return WcsCpy(wStrEnd(DestStr), SrcStr);
  139. }
  140. #endif  // _XP_LINUX_
  141. #endif  // _KWSTRING_H_