mirror of
https://github.com/Kapendev/parin.git
synced 2025-04-26 13:09:56 +03:00
137 lines
3.9 KiB
D
137 lines
3.9 KiB
D
// Copyright 2024 Alexandros F. G. Kapretsos
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
/// The `stdc` module provides access to the C standard library.
|
|
module popka.core.stdc;
|
|
|
|
@nogc nothrow extern(C):
|
|
|
|
// types.l
|
|
|
|
version (WebAssembly) {
|
|
alias CLong = int;
|
|
alias CULong = uint;
|
|
} else {
|
|
alias CLong = long;
|
|
alias CULong = ulong;
|
|
}
|
|
|
|
// math.h
|
|
|
|
float sqrtf(float x);
|
|
float sinf(float x);
|
|
float cosf(float x);
|
|
|
|
// stdlib.h
|
|
|
|
void* malloc(size_t size);
|
|
void* realloc(void* ptr, size_t size);
|
|
void free(void* ptr);
|
|
|
|
// stdio.h
|
|
|
|
alias FILE = void;
|
|
|
|
enum SEEK_SET = 0;
|
|
enum SEEK_CUR = 1;
|
|
enum SEEK_END = 2;
|
|
|
|
enum STDIN_FILENO = 0;
|
|
enum STDOUT_FILENO = 1;
|
|
enum STDERR_FILENO = 2;
|
|
|
|
// NOTE: Code from the D standard library.
|
|
version (CRuntime_Microsoft) {
|
|
FILE* __acrt_iob_func(int hnd); // VS2015+, reimplemented in msvc.d for VS2013-
|
|
FILE* stdin()() { return __acrt_iob_func(0); }
|
|
FILE* stdout()() { return __acrt_iob_func(1); }
|
|
FILE* stderr()() { return __acrt_iob_func(2); }
|
|
} else version (CRuntime_Glibc) {
|
|
extern __gshared FILE* stdin;
|
|
extern __gshared FILE* stdout;
|
|
extern __gshared FILE* stderr;
|
|
} else version (Darwin) {
|
|
extern __gshared FILE* __stdinp;
|
|
extern __gshared FILE* __stdoutp;
|
|
extern __gshared FILE* __stderrp;
|
|
alias __stdinp stdin;
|
|
alias __stdoutp stdout;
|
|
alias __stderrp stderr;
|
|
} else version (FreeBSD) {
|
|
extern __gshared FILE* __stdinp;
|
|
extern __gshared FILE* __stdoutp;
|
|
extern __gshared FILE* __stderrp;
|
|
alias __stdinp stdin;
|
|
alias __stdoutp stdout;
|
|
alias __stderrp stderr;
|
|
} else version (NetBSD) {
|
|
extern __gshared FILE[3] __sF;
|
|
auto __stdin()() { return &__sF[0]; }
|
|
auto __stdout()() { return &__sF[1]; }
|
|
auto __stderr()() { return &__sF[2]; }
|
|
alias __stdin stdin;
|
|
alias __stdout stdout;
|
|
alias __stderr stderr;
|
|
} else version (OpenBSD) {
|
|
extern __gshared FILE[3] __sF;
|
|
auto __stdin()() { return &__sF[0]; }
|
|
auto __stdout()() { return &__sF[1]; }
|
|
auto __stderr()() { return &__sF[2]; }
|
|
alias __stdin stdin;
|
|
alias __stdout stdout;
|
|
alias __stderr stderr;
|
|
} else version (DragonFlyBSD) {
|
|
extern __gshared FILE* __stdinp;
|
|
extern __gshared FILE* __stdoutp;
|
|
extern __gshared FILE* __stderrp;
|
|
alias __stdinp stdin;
|
|
alias __stdoutp stdout;
|
|
alias __stderrp stderr;
|
|
} else version (Solaris) {
|
|
extern __gshared FILE[_NFILE] __iob;
|
|
auto stdin()() { return &__iob[0]; }
|
|
auto stdout()() { return &__iob[1]; }
|
|
auto stderr()() { return &__iob[2]; }
|
|
} else version (CRuntime_Bionic) {
|
|
extern __gshared FILE[3] __sF;
|
|
auto stdin()() { return &__sF[0]; }
|
|
auto stdout()() { return &__sF[1]; }
|
|
auto stderr()() { return &__sF[2]; }
|
|
} else version (CRuntime_Musl) {
|
|
extern __gshared FILE* stdin;
|
|
extern __gshared FILE* stdout;
|
|
extern __gshared FILE* stderr;
|
|
} else version (CRuntime_Newlib) {
|
|
__gshared struct _reent {
|
|
int _errno;
|
|
__sFILE* _stdin;
|
|
__sFILE* _stdout;
|
|
__sFILE* _stderr;
|
|
}
|
|
_reent* __getreent();
|
|
pragma(inline, true) {
|
|
auto stdin()() { return __getreent()._stdin; }
|
|
auto stdout()() { return __getreent()._stdout; }
|
|
auto stderr()() { return __getreent()._stderr; }
|
|
}
|
|
} else version (CRuntime_UClibc) {
|
|
extern __gshared FILE* stdin;
|
|
extern __gshared FILE* stdout;
|
|
extern __gshared FILE* stderr;
|
|
} else version (WASI) {
|
|
extern __gshared FILE* stdin;
|
|
extern __gshared FILE* stdout;
|
|
extern __gshared FILE* stderr;
|
|
} else {
|
|
extern __gshared FILE* stdin;
|
|
extern __gshared FILE* stdout;
|
|
extern __gshared FILE* stderr;
|
|
}
|
|
|
|
FILE* fopen(const(char)* filename, const(char)* mode);
|
|
CLong ftell(FILE* stream);
|
|
int fseek(FILE* stream, CLong offset, int origin);
|
|
size_t fread(void* ptr, size_t size, size_t count, FILE* stream);
|
|
int fclose(FILE* stream);
|
|
int fputs(const(char)* str, FILE* stream);
|
|
size_t fwrite(const(void)* buffer, size_t size, size_t count, FILE* stream);
|