00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "common/ktypes.h"
00019 #include "core/ktime.h"
00020 #include "common/kconst.h"
00021
00022 #include "common/string.h"
00023
00024
00025 DW strlen(const char *str)
00026 {
00027 DW len = 0;
00028
00029 while(*str++ && len < MAX_BUFFER)
00030 len++;
00031
00032 return len;
00033 }
00034
00035 SDB strcmp(const char *str1,const char *str2)
00036 {
00037 DW index = 0;
00038 DB ch1 = *(str1+index), ch2 = *(str2+index);
00039
00040 while(ch1 && ch2)
00041 {
00042 if(ch1 != ch2)
00043 {
00044 if(ch1 > ch2)
00045 return 1;
00046 else
00047 return -1;
00048 }
00049 index++;
00050 ch1 = *(str1+index), ch2 = *(str2+index);
00051 }
00052
00053 if( ch1 == '\0' && ch2 == '\0' )
00054 {
00055 return 0;
00056 }
00057 else if(ch1 == '\0')
00058 {
00059 return -1;
00060 }
00061 else
00062 return 1;
00063 }
00064
00065 SDB stricmp(const char *str1,const char *str2)
00066 {
00067 DW index = 0;
00068 DB ch1 = *(str1+index), ch2 = *(str2+index);
00069
00070 while(ch1 && ch2)
00071 {
00072 if(ch1 >=65 && ch1 <= 90)
00073 ch1 = ch1 +32;
00074 if(ch2 >=65 && ch2 <= 90)
00075 ch2 = ch2 +32;
00076 if(ch1 != ch2)
00077 {
00078 if(ch1 > ch2)
00079 return 1;
00080 else
00081 return -1;
00082 }
00083 index++;
00084 ch1 = *(str1+index), ch2 = *(str2+index);
00085 }
00086
00087 if( ch1 == '\0' && ch2 == '\0' )
00088 {
00089 return 0;
00090 }
00091 else if(ch1 == '\0')
00092 {
00093 return -1;
00094 }
00095 else
00096 return 1;
00097 }
00098
00099 void strcpy(void *dest,const void *src)
00100 {
00101 memcpy(dest,src,strlen(src));
00102 }
00103
00104 void strcat(void *dest,const void *src)
00105 {
00106 memcpy(dest+strlen(dest),src,strlen(src));
00107 }
00108
00109 void* memcpy(void *dest, const void *src, size_t n)
00110 {
00111 char *_dest = (char *)dest;
00112 const char *_src = (const char *)src;
00113
00114 *_dest = *_src;
00115
00116 while(n)
00117 {
00118 *(_dest+n) = *(_src+n);
00119 n--;
00120 }
00121
00122 return _dest;
00123 }
00124
00125 void* kmemcpy(void *dest, const void *src, size_t n)
00126 {
00127 char *_dest = (char *)dest;
00128 const char *_src = (const char *)src;
00129
00130 *_dest = *_src;
00131
00132 while(n)
00133 {
00134 *(_dest+n) = *(_src+n);
00135 n--;
00136 }
00137
00138 return _dest;
00139 }
00140
00141 void* strmncpy(void* dest,void *src,DD m, DD n)
00142 {
00143 DD i;
00144 i = m;
00145 if(m < strlen(src))
00146 {
00147 for(i = m; i < m + n ; i++)
00148 *(DB *)(dest + i - m) = *(DB *)(src + i);
00149 }
00150 *(DB *)(dest + i - m) = '\0';
00151 return dest;
00152 }
00153
00154 void* strncpy(void* dest,void *src,DD n)
00155 {
00156 DD i;
00157 for(i = 0; i < n ; i++)
00158 *(DB *)(dest + i) = *(DB *)(src + i);
00159
00160 *(DB *)(dest + i) = '\0';
00161 return dest;
00162 }
00163
00164 void* memset(void *dest, DB val, DD times)
00165 {
00166 DD i;
00167 for(i = 0 ; i < times ; i++)
00168 {
00169 *(DB *)(dest+i) = val;
00170 }
00171
00172 return dest;
00173 }
00174
00175 unsigned char toupper(unsigned char s)
00176 {
00177 DW i;
00178 if(is_lower(s))
00179 {
00180 return (s + 'A' - 'a');
00181 }
00182 return s;
00183 }
00184
00185 unsigned char tolower(unsigned char s)
00186 {
00187 DW i;
00188 if(is_upper(s))
00189 {
00190 return (s - ('A' - 'a'));
00191 }
00192 return s;
00193 }
00194
00195 char is_lower(unsigned char s)
00196 {
00197 if(s >= 'a' && s <= 'z')
00198 return 1;
00199 return 0;
00200 }
00201
00202 char is_upper(unsigned char s)
00203 {
00204 if(s >= 'A' && s <= 'Z')
00205 return 1;
00206 return 0;
00207 }
00208
00209 char isnum(unsigned char c)
00210 {
00211 if(c >= '0' && c <= '9')
00212 return 1;
00213 else
00214 return 0;
00215 }
00216
00217 unsigned char toggle_shift(unsigned char s)
00218 {
00219
00220 char a[][2] = {"1!","2@","3#","4$","5%","6^",
00221 "7&","8*","9(","0)","-_","=+",
00222 "\\|","[{","]}",";:","'\"",",<",
00223 ".>","/?","`~"
00224 };
00225 int i;
00226 for(i = 0; i < 21; i++)
00227 if(s == a[i][0])
00228 return a[i][1];
00229 if(is_lower(s))
00230 return toupper(s);
00231 if(is_upper(s))
00232 return tolower(s);
00233 return s;
00234 }