void *mem_copy(const void *src, void *dest, size_t count) { const char *sp = (const char *)src; char *dp = (char *)dest; for(; count != 0; count--) *dp++ = *sp++; return dest; } void *mem_set(void *dest, char val, size_t count) { char *temp = (char *)dest; for( ; count != 0; count--) *temp++ = val; return dest; } unsigned short *mem_set_word(unsigned short *dest, unsigned short val, size_t count) { unsigned short *temp = (unsigned short *)dest; for( ; count != 0; count--) *temp++ = val; return dest; } size_t string_length(const char *str) { size_t retval; for(retval = 0; *str != '\0'; str++) retval++; return retval; } boolean string_compare(const char *str1, const char *str2) { int strlength = strlen(str1); // if they're different lengths they're obviously not the same string if (strlength != strlen(str2)) return false; // otherwise, compare each character int i; for (i = 0; i < strlength; i++) if (str1[i] != str2[i]) return false; // if we got this far, they're equal return true; } boolean string_ncompare(const char *str1, const char *str2, size_t n) { int i; for (i = 0; i < n; i++) if (str1[i] != str2[i]) return false; // if we got this far, they're equal return true; } char *string_copy(const char *src, char *dest) { return strncpy(src, dest, strlen(src)); } char *string_ncopy(const char *src, char *dest, size_t n) { int i; for (i = 0; i < n; i++) dest[i] = src[i]; return dest; } int string_findchar(char *str, char c) { int i; for (i = 0; i < strlen(str); i++) if (str[i] == c) return i; return NULL; } int string_findchar_reverse(char *str, char c) { int i; for (i = strlen(str); i > 0; i--) if (str[i] == c) return i; return NULL; } // Can't think of a better name for these. size_t strspn(const char *s, const char *accept) { const char *p; const char *a; size_t count = 0; for(p = s; *p != '\0'; ++p) { for(a = accept; *a != '\0'; ++a) { if(*p == *a) break; } if(*a == '\0') return count; ++count; } return count; } size_t strcspn(const char *str, const char *reject) { int i, j; size_t retval = 0; for (i = 0; i < strlen(str); i++) { for (j = 0; j < strlen(reject); j++) { if (str[i] != reject[j]) retval++; else return retval; } } } int strnumtokens(const char *str, char splitchar) { int i; int tokens = 1; // all strings have at least one token // Actually, what if you split 'a' by 'a'? // Actually, why *would* you split 'a' by 'a'? for (i = 0; i < strlen(str); i++) if (str[i] == splitchar) tokens++; return tokens; } char tmpbuf[1024]; char *strsplit(const char *str, char splitchar, int token_num) { char delimeter[2]; delimeter[0] = splitchar; delimeter[1] = '\0'; int i; string_ncopy(str, tmpbuf, 1024); char *token = tmpbuf; for (i = 0; *token; i++) { /* search for delimiters */ size_t len = strcspn(token, delimeter); /* print the found text: use *.* in format to specify a maximum print size */ if (i == token_num) { token[strcspn(token, delimeter)] = '\0'; return token; } /* advance pointer by one more than the length of the found text */ token += len + 1; } }