#include "maths.h" #include "memory.h" #include "str.h" int string_equal(const char* a, const char* b) { while (*a && *b) { if (*a != *b) { return 0; } a++; b++; } return 1; } int string_copy(char* dst, const char* src) { int i; for (i = 0; *src; src++, dst++, i++) { *dst = *src; } return i; } int string_len(const char* s) { int l; for (l = 0; *s; s++, l++); return l; } char* dup_string(Arena* a, const char* s) { int size = string_len(s) + 1; char* d = arena_alloc_aligned(a, size, 1); string_copy(d, s); return d; } int int_to_buf(int n, char* buf) { int i, sign, t; unsigned n1; if(n == 0) { buf[0] = '0'; buf[1] = '\0'; return 1; } i = 0; sign = n < 0; n1 = sign ? -n : n; while (n1 != 0) { buf[i++] = n1 % 10 + '0'; n1 =n1 / 10; } if(sign) { buf[i++] = '-'; } buf[i] = '\0'; for (t = 0; t < i/2; t++) { buf[t] ^= buf[i-t-1]; buf[i-t-1] ^= buf[t]; buf[t] ^= buf[i-t-1]; } return i; } int f_to_buf(int f, char* buf) { int frac, w, i; frac = (((f) % (1 << fbits)) * 100) / (1 << fbits); w = f >> fbits; i = 0; if (f < 0) { buf[i] = '-'; i++; } i += int_to_buf(absolute(w), buf + i); buf[i] = '.'; i++; i += int_to_buf(absolute(frac), buf + i); return i; }