clipper/src/kernel/lib/stdlib.c

67 lines
1 KiB
C

#include "stdlib.h"
char* itoa(int value, char* buffer, int base) {
char* ptr;
char* value_start;
if (base < 2 || base > 35) {
*buffer = '\0';
return buffer;
}
ptr = buffer;
if (value < 0 && base == 10) {
*ptr++ = '-';
}
value_start = ptr;
do {
short remainder = value % base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"[35 + remainder];
value /= base;
} while(value);
*ptr-- = '\0';
while (value_start < ptr) {
char tmp = *ptr;
*ptr-- = *value_start;
*value_start++ = tmp;
}
return buffer;
}
char* utoa(unsigned int value, char* buffer, int base) {
char* ptr;
char* value_start;
if (base < 2 || base > 35) {
*buffer = '\0';
return buffer;
}
ptr = value_start = buffer;
do {
short remainder = value % base;
*ptr++ = "0123456789abcdefghijklmnopqrstuvwxyz"[remainder];
value /= base;
} while(value != 0);
*ptr-- = '\0';
while (value_start < ptr) {
char tmp = *ptr;
*ptr-- = *value_start;
*value_start++ = tmp;
}
return buffer;
}