16#ifdef TK_IMPL_OPERATOR_NEW
17void* operator
new(std::size_t size) {
18 return MEMAllocFromDefaultHeap(size);
22#ifdef TK_IMPL_OPERATOR_DELETE
23void operator
delete(
void* ptr)
noexcept {
24 return MEMFreeToDefaultHeap(ptr);
29extern "C" void free(
void* ptr) {
30 MEMFreeToDefaultHeap(ptr);
35extern "C" void* calloc(size_t num, size_t size) {
36 void* p = MEMAllocFromDefaultHeap(num * size);
37 memset(p, 0, num * size);
42#ifdef TK_IMPL_MEMALIGN
43extern "C" void* memalign(size_t align, size_t size) {
44 return MEMAllocFromDefaultHeapEx(size, align);
49extern "C" void* memchr(
const void* p,
int ch, size_t count) {
50 for (size_t i = 0; i < count; i++) {
51 const u8 b =
reinterpret_cast<
const u8*>(p)[i];
53 return (
void*) (&
reinterpret_cast<
const u8*>(p)[i]);
62extern "C" char* strncpy(
char*
__restrict dst0,
const char*
__restrict src0, size_t count) {
70 if ((*dscan++ = *sscan++) ==
'\0')
break;
72 while (count-- > 0) *dscan++ =
'\0';
78extern "C" char* strstr(
const char* hs,
const char* ne) {
82 if (c == 0)
return (
char*)hs;
84 for (; hs[0] !=
'\0'; hs++) {
85 if (hs[0] != c)
continue;
86 for (i = 1; ne[i] != 0; i++)
87 if (hs[i] != ne[i])
break;
88 if (ne[i] ==
'\0')
return (
char*)hs;
95extern "C" void* memcpy(
void* dest,
const void* src, size_t n) {
96 return OSBlockMove(dest, src, n,
true);
101extern "C" size_t strlen(
const char* s) {
104 return (size_t)(p - s);
109extern "C" void* memset(
void* dst,
int value, size_t size) {
110 return OSBlockSet(dst, value, size);
114#ifdef TK_IMPL_SPRINTF
115extern "C" int sprintf(
char* buffer,
const char* format, ...) {
117 va_start(va, format);
118 const int ret = vsnprintf(buffer, INT_MAX, format, va);
125extern "C" char* strchr(
const char* s1,
int i) {
126 const unsigned char* s = (
const unsigned char*)s1;
129 while (*s && *s != c) s++;
130 if (*s == c)
return (
char*)s;
136extern "C" char* strcpy(
char* dst0,
const char* src0) {
138 while ((*dst0++ = *src0++));
144extern "C" double floor(
double x) {
150extern "C" double ceil(
double x) {
156extern "C" double sin(
double x) {
162extern "C" double cos(
double x) {
168extern "C" double atan2(
double y,
double x) {
174extern "C" double pow(
double x,
double y) {
180extern "C" double log(
double x) {
185#ifdef TK_IMPL_ISSPACE
186extern "C" int isspace(
int c) {
191#ifdef TK_IMPL_ISDIGIT
192extern "C" int isdigit(
int c) {
193 return (c >=
'0' && c <=
'9');
197#ifdef TK_IMPL_ISUPPER
198extern "C" int isupper(
int c) {
199 return (c >=
'A' && c <=
'Z');
203#ifdef TK_IMPL_ISALPHA
204extern "C" int isalpha(
int c) {
205 return ((isupper(c) || (c >=
'a' && c <=
'z')));
210extern "C" long strtol(
const char *nptr,
char **endptr,
int base) {
211 const char* s = nptr;
214 unsigned long cutoff;
219 while (isspace((
unsigned char)*s)) {
226 }
else if (*s ==
'+') {
230 if ((base == 0 || base == 16) &&
231 *s ==
'0' && (*(s + 1) ==
'x' || *(s + 1) ==
'X')) {
236 base = *s ==
'0' ? 8 : 10;
239 acc = neg ? -(
unsigned long)std::numeric_limits<
long>::min() : std::numeric_limits<
long>::max();
240 cutoff = acc / (
unsigned long)base;
241 cutlim = acc % (
unsigned long)base;
252 c -= (isupper(c) ?
'A' :
'a') - 10;
259 if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) {
269 acc = neg ? std::numeric_limits<
long>::min() : std::numeric_limits<
long>::max();
275 *endptr = (
char *)(any ? s : nptr);
282#ifdef TK_IMPL_STRNCMP
283extern "C" int strncmp(
const char* s1,
const char* s2, size_t n) {
284 if (n == 0)
return 0;
286 while (n-- != 0 && *s1 == *s2) {
287 if (n == 0 || *s1 ==
'\0')
break;
291 return (*(
unsigned char*)s1) - (*(
unsigned char*)s2);
296extern "C" char* strcat(
char* dest,
const char* src) {
299 while (*ptr !=
'\0') {
303 while (*src !=
'\0') {
315#ifdef TK_IMPL_STRPBRK
316extern "C" char* strpbrk(
const char* str,
const char* charset) {
317 if (!str || !charset) {
324 const char* c = charset;
339extern "C" int strcmp(
const char* a,
const char* b) {
340 while (*a && (*a == *b)) {
344 return (
unsigned char)*a - (
unsigned char)*b;
348#ifdef TK_IMPL_MEMMOVE
349extern "C" void* memmove(
void* dst,
const void* src, size_t size) {
350 return OSBlockMove(dst, src, size,
true);
355extern "C" int memcmp(
const void* a,
const void* b, size_t size) {
356 const unsigned char *pa = (
const unsigned char *)a;
357 const unsigned char *pb = (
const unsigned char *)b;
370extern "C" void abort() {
371 OSFatal(
"abort() called");
376#define TELKIN_REGISTERS
377#include <telkin/Assembly.h>
378extern "C" int printf(
const char* format, ...) tAssembly(
381 lwz r2, OSReport@l(r2);
391#ifdef TK_IMPL_ISLOWER
401#define _CTYPE_DATA_0_127
402 _C, _C, _C, _C, _C, _C, _C, _C, _C, _C | _S, _C | _S, _C | _S, _C | _S,
403 _C | _S, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C,
404 _C, _C, _C, _S | _B, _P, _P, _P, _P, _P, _P, _P, _P, _P, _P, _P, _P,
405 _P, _P, _P, _N, _N, _N, _N, _N, _N, _N, _N, _N, _N, _P, _P, _P, _P,
406 _P, _P, _P, _U | _X, _U | _X, _U | _X, _U | _X, _U | _X, _U | _X, _U,
407 _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U,
408 _U, _U, _P, _P, _P, _P, _P, _P, _L | _X, _L | _X, _L | _X, _L | _X,
409 _L | _X, _L | _X, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L,
410 _L, _L, _L, _L, _L, _L, _L, _P, _P, _P, _P, _C
412#define _CTYPE_DATA_128_255
413 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
,
414 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
,
415 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
,
416 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
,
417 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
,
418 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
420const char _ctype_[1 + 256] = {0, _CTYPE_DATA_0_127,
421 _CTYPE_DATA_128_255};
423#ifndef __locale_ctype_ptr
424#define __locale_ctype_ptr() _ctype_
428#define __CTYPE_PTR (__locale_ctype_ptr())
431extern "C" int islower(
int c) {
432 return ((__CTYPE_PTR[c + 1] & (_U | _L)) == _L);
436#ifdef TK_IMPL_TOUPPER
437extern "C" int toupper(
int c) {
438 return islower(c) ? c -
'a' +
'A' : c;
443extern "C" float fabsf(
float a) {
444 return (a > 0) ? a : -a;
449extern "C" double fabs(
double a) {
450 return (a > 0) ? a : -a;
455extern "C" double atof(
const char *s) {
462 while (*s ==
' ' || *s ==
'\t' || *s ==
'\n') {
469 }
else if (*s ==
'-') {
474 while ((c = *s++) !=
'\0' && isdigit(c)) {
475 a = a * 10.0 + (c -
'0');
479 while ((c = *s++) !=
'\0' && isdigit(c)) {
480 a = a * 10.0 + (c -
'0');
485 if (c ==
'e' || c ==
'E') {
492 }
else if (c ==
'-') {
498 i = i * 10 + (c -
'0');
u64(*)() getTitleID_t
Definition Mod.h:16