wchar.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #include <string.h>
  2. __attribute__((used))
  3. wchar_t *wcscat(wchar_t *str_dst, const wchar_t *str_src)
  4. {
  5. wchar_t *dst_iter = str_dst;
  6. int i = 0;
  7. while (*dst_iter != 0)
  8. ++dst_iter;
  9. while (str_src[i] != 0)
  10. {
  11. dst_iter[i] = str_src[i];
  12. ++i;
  13. }
  14. dst_iter[i] = 0;
  15. return str_dst;
  16. }
  17. __attribute__((used))
  18. int wcscmp(const wchar_t *string1, const wchar_t *string2)
  19. {
  20. int i = 0;
  21. register wchar_t c1, c2;
  22. while (1)
  23. {
  24. c1 = string1[i];
  25. c2 = string2[i];
  26. if (c1 < c2)
  27. {
  28. return -1;
  29. }
  30. else if (c1 > c2)
  31. {
  32. return 1;
  33. }
  34. if ((c1 == 0) || (c2 == 0))
  35. break;
  36. ++i;
  37. }
  38. return 0;
  39. }
  40. __attribute__((used))
  41. int wcsncmp(const wchar_t *string1, const wchar_t *string2, int count)
  42. {
  43. int i = 0;
  44. while (i < count)
  45. {
  46. if (string1[i] < string2[i])
  47. {
  48. return -1;
  49. }
  50. else if (string1[i] > string2[i])
  51. {
  52. return 1;
  53. }
  54. if ((string1[i] == 0) || (string2[i] == 0))
  55. break;
  56. ++i;
  57. }
  58. return 0;
  59. }
  60. __attribute__((used))
  61. wchar_t *wcscpy(wchar_t *str_dst, const wchar_t *str_src)
  62. {
  63. int i = 0;
  64. while (str_src[i] != 0)
  65. {
  66. str_dst[i] = str_src[i];
  67. ++i;
  68. }
  69. str_dst[i] = 0;
  70. return str_dst;
  71. }
  72. __attribute__((used))
  73. wchar_t *wcsncpy(wchar_t *str_dst, const wchar_t *str_src, int count)
  74. {
  75. int i = 0;
  76. while ((str_src[i] != 0) && (i < count))
  77. {
  78. str_dst[i] = str_src[i];
  79. ++i;
  80. }
  81. str_dst[i] = 0;
  82. return str_dst;
  83. }
  84. __attribute__((used))
  85. int wcslen(const wchar_t *str)
  86. {
  87. int i = 0;
  88. while (str[i] != 0)
  89. ++i;
  90. return i;
  91. }
  92. __attribute__((used))
  93. wchar_t *wcsupr(wchar_t *str)
  94. {
  95. wchar_t *str_iter = str;
  96. while (*str_iter != 0)
  97. {
  98. if ((*str_iter >= (wchar_t)'a') && (*str_iter <= (wchar_t)'z'))
  99. *str_iter -= 0x0020;
  100. ++str_iter;
  101. }
  102. return str;
  103. }
  104. __attribute__((used))
  105. wchar_t *wcslwr(wchar_t *str)
  106. {
  107. wchar_t *str_iter = str;
  108. while (*str_iter != 0)
  109. {
  110. if ((*str_iter <= (wchar_t)'Z') && (*str_iter >= (wchar_t)'A'))
  111. *str_iter += 0x0020;
  112. ++str_iter;
  113. }
  114. return str;
  115. }