#include "stdlib.h" char buffer[33]; char itoa_chars[] = "0123456789abcdef"; int strlen(char *string) { int len; for (len = 0; *string; string++, len++) ; return len; } void strcat(char *dest, char *source) { for (; *dest; dest++) ; for (; *source; dest++, source++) { *dest = *source; } } void strcpy(char *dest, char *source) { for (; *source; dest++, source++) { *dest = *source; } *dest = '\0'; } int strcmp(char *a, char *b) { int t; for (;; a++, b++) { // printf("%c %c\n", *a, *b); t = *a - *b; if (*a == 0 || *b == 0) { // printf("%d %d\n", *a, *b); return t; } if (t != 0) { return t; } } } int strncmp(char *a, char *b, int n) { int t; for (; n > 0; n--, a++, b++) { if (*a == 0 || *b == 0) { if (*a == 0 && *b == 0) { return 0; } else { return 1; } } t = *a - *b; if (t != 0) { return t; } } return 0; } char *strdup(char *s) { char *r = malloc(strlen(s)); strcpy(r, s); return r; } void memset(char *dest, unsigned char b, int n) { for (; n > 0; n--, dest++) { *dest = b; } } void memcpy(char *dest, char *source, int n) { for (; n > 0; n--, dest++, source++) { *dest = *source; } } char *itoa(int i) { buffer[32] = '\0'; char *p = buffer + 32; char neg = 0; if (i == 0) { p--; *p = '0'; return p; } if (i < 0) { neg = 1; i = -i; } while (i > 0) { p--; *p = (i % 10) + '0'; i /= 10; } if (neg) { p--; *p = '-'; } return p; } char *itoa_base(unsigned int i, int base) { buffer[32] = '\0'; char *p = buffer + 32; if (i == 0) { p--; *p = '0'; return p; } while (i > 0) { p--; *p = itoa_chars[i % base]; i /= base; } return p; }