Global Namespace

// namespaces

namespace io;
    namespace io.lnx;
    namespace io.psx;
    namespace io.win;
namespace jnc;
namespace std;
namespace sys;

// typedefs

typedef String string_t;
typedef Variant variant_t;
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef unsigned long size_t;
typedef char int8_t;
typedef char utf8_t;
typedef unsigned char uint8_t;
typedef unsigned char uchar_t;
typedef unsigned char byte_t;
typedef short int16_t;
typedef short utf16_t;
typedef unsigned short uint16_t;
typedef unsigned short ushort_t;
typedef unsigned short word_t;
typedef int int32_t;
typedef int utf32_t;
typedef unsigned int uint32_t;
typedef unsigned int uint_t;
typedef unsigned int dword_t;
typedef long int64_t;
typedef unsigned long uint64_t;
typedef unsigned long ulong_t;
typedef unsigned long qword_t;

// structs

struct String;
struct Variant;

// global functions

size_t strlen(char const* p);

int strcmp(
    char const* p1,
    char const* p2
);

int strncmp(
    char const* p1,
    char const* p2,
    size_t length
);

int stricmp(
    char const* p1,
    char const* p2
);

int strnicmp(
    char const* p1,
    char const* p2,
    size_t length
);

bool streq(
    char const* p1,
    char const* p2
);

bool strneq(
    char const* p1,
    char const* p2,
    size_t length
);

bool strieq(
    char const* p1,
    char const* p2
);

bool strnieq(
    char const* p1,
    char const* p2,
    size_t length
);

char const* strchr(
    char const* p,
    char c
);

char* strchr(
    char* p,
    char c
);

char const* strrchr(
    char const* p,
    char c
);

char* strrchr(
    char* p,
    char c
);

char const* strichr(
    char const* p,
    char c
);

char* strichr(
    char* p,
    char c
);

char const* strpbrk(
    char const* p1,
    char const* p2
);

char* strpbrk(
    char* p1,
    char const* p2
);

char const* strstr(
    char const* p1,
    char const* p2
);

char* strstr(
    char* p1,
    char const* p2
);

char const* stristr(
    char const* p1,
    char const* p2
);

char* stristr(
    char* p1,
    char const* p2
);

void strcpy(
    char* dst,
    char const* src
);

char* strcat(
    char const* p1,
    char const* p2
);

char* strdup(
    char const* p,
    size_t length = -1
);

size_t strdjb2(char const* p);
size_t stridjb2(char const* p);

int memcmp(
    void const* p1,
    void const* p2,
    size_t size
);

void const* memchr(
    void const* p,
    int c,
    size_t size
);

void* memchr(
    void* p,
    int c,
    size_t size
);

void const* memmem(
    void const* p1,
    size_t size1,
    void const* p2,
    size_t size2
);

void* memmem(
    void* p1,
    size_t size1,
    void const* p2,
    size_t size2
);

void memcpy(
    void* dst,
    void const* src,
    size_t size
);

void memmove(
    void* dst,
    void const* src,
    size_t size
);

void memset(
    void* p,
    int c,
    size_t size
);

void* memcat(
    void const* p1,
    size_t size1,
    void const* p2,
    size_t size2
);

void* memdup(
    void const* p,
    size_t size
);

size_t memdjb2(
    void const* p,
    size_t size
);

int rand();
uint32_t toupper(uint32_t c);
uint32_t tolower(uint32_t c);
int atoi(string_t s);
long atol(string_t s);

long strtol(
    string_t s,
    size_t* length = null,
    int radix = 0
);

long strtol(
    char const* p,
    char const** end = null,
    int radix = 0
);

ulong_t strtoul(
    string_t s,
    size_t* length = null,
    int radix = 0
);

ulong_t strtoul(
    char const* p,
    char const** end = null,
    int radix = 0
);

char* gets();
size_t print(char const* text);
size_t print_u(char const thin* text);
size_t perror(char const* text);

intptr_t cdecl printf(
    char const thin* fmtSpecifier,
    ...
);