Init new repository

This commit is contained in:
Krzosa Karol
2024-04-13 15:29:53 +02:00
commit 5a2e3dcec4
335 changed files with 61571 additions and 0 deletions

13
pkgs/libc/assert.lc Normal file
View File

@@ -0,0 +1,13 @@
#`#include <assert.h>`;
@foreign assert :: proc(b: bool); @foreign
#`
#if defined(_MSC_VER)
#define lc_assertion_debug_break() (__debugbreak(), 0)
#else
#define lc_assertion_debug_break() (__builtin_trap(), 0)
#endif
`;
debug_break :: proc(): int; @foreign(lc_assertion_debug_break)

17
pkgs/libc/ctype.lc Normal file
View File

@@ -0,0 +1,17 @@
#`#include<ctype.h>`;
isalnum :: proc(c: int): int; @foreign
isalpha :: proc(c: int): int; @foreign
isblank :: proc(c: int): int; @foreign
iscntrl :: proc(c: int): int; @foreign
isdigit :: proc(c: int): int; @foreign
isgraph :: proc(c: int): int; @foreign
islower :: proc(c: int): int; @foreign
isprint :: proc(c: int): int; @foreign
ispunct :: proc(c: int): int; @foreign
isspace :: proc(c: int): int; @foreign
isupper :: proc(c: int): int; @foreign
isxdigit :: proc(c: int): int; @foreign
tolower :: proc(c: int): int; @foreign
toupper :: proc(c: int): int; @foreign

2
pkgs/libc/errno.lc Normal file
View File

@@ -0,0 +1,2 @@
#`#include<errno.h>`;
errno: int; @foreign

122
pkgs/libc/math.lc Normal file
View File

@@ -0,0 +1,122 @@
#`#include <math.h>`;
acos :: proc(x: double): double; @foreign
acosf :: proc(x: float): float; @foreign
asin :: proc(x: double): double; @foreign
asinf :: proc(x: float): float; @foreign
atan :: proc(x: double): double; @foreign
atanf :: proc(x: float): float; @foreign
atan2 :: proc(y: double, x: double): double; @foreign
atan2f :: proc(y: float, x: float): float; @foreign
cos :: proc(x: double): double; @foreign
cosf :: proc(x: float): float; @foreign
sin :: proc(x: double): double; @foreign
sinf :: proc(x: float): float; @foreign
tan :: proc(x: double): double; @foreign
tanf :: proc(x: float): float; @foreign
acosh :: proc(x: double): double; @foreign
acoshf :: proc(x: float): float; @foreign
asinh :: proc(x: double): double; @foreign
asinhf :: proc(x: float): float; @foreign
atanh :: proc(x: double): double; @foreign
atanhf :: proc(x: float): float; @foreign
cosh :: proc(x: double): double; @foreign
coshf :: proc(x: float): float; @foreign
sinh :: proc(x: double): double; @foreign
sinhf :: proc(x: float): float; @foreign
tanh :: proc(x: double): double; @foreign
tanhf :: proc(x: float): float; @foreign
exp :: proc(x: double): double; @foreign
expf :: proc(x: float): float; @foreign
exp2 :: proc(x: double): double; @foreign
exp2f :: proc(x: float): float; @foreign
expm1 :: proc(x: double): double; @foreign
expm1f :: proc(x: float): float; @foreign
frexp :: proc(value: double, exp: *int): double; @foreign
frexpf :: proc(value: float, exp: *int): float; @foreign
ilogb :: proc(x: double): int; @foreign
ilogbf :: proc(x: float): int; @foreign
ldexp :: proc(x: double, exp: int): double; @foreign
ldexpf :: proc(x: float, exp: int): float; @foreign
log :: proc(x: double): double; @foreign
logf :: proc(x: float): float; @foreign
log10 :: proc(x: double): double; @foreign
log10f :: proc(x: float): float; @foreign
log1p :: proc(x: double): double; @foreign
log1pf :: proc(x: float): float; @foreign
log2 :: proc(x: double): double; @foreign
log2f :: proc(x: float): float; @foreign
logb :: proc(x: double): double; @foreign
logbf :: proc(x: float): float; @foreign
modf :: proc(value: double, iptr: *double): double; @foreign
modff :: proc(value: float, iptr: *float): float; @foreign
scalbn :: proc(x: double, n: int): double; @foreign
scalbnf :: proc(x: float, n: int): float; @foreign
scalbln :: proc(x: double, n: long): double; @foreign
scalblnf :: proc(x: float, n: long): float; @foreign
cbrt :: proc(x: double): double; @foreign
cbrtf :: proc(x: float): float; @foreign
fabs :: proc(x: double): double; @foreign
fabsf :: proc(x: float): float; @foreign
hypot :: proc(x: double, y: double): double; @foreign
hypotf :: proc(x: float, y: float): float; @foreign
pow :: proc(x: double, y: double): double; @foreign
powf :: proc(x: float, y: float): float; @foreign
sqrt :: proc(x: double): double; @foreign
sqrtf :: proc(x: float): float; @foreign
erf :: proc(x: double): double; @foreign
erff :: proc(x: float): float; @foreign
erfc :: proc(x: double): double; @foreign
erfcf :: proc(x: float): float; @foreign
lgamma :: proc(x: double): double; @foreign
lgammaf :: proc(x: float): float; @foreign
tgamma :: proc(x: double): double; @foreign
tgammaf :: proc(x: float): float; @foreign
ceil :: proc(x: double): double; @foreign
ceilf :: proc(x: float): float; @foreign
floor :: proc(x: double): double; @foreign
floorf :: proc(x: float): float; @foreign
nearbyint :: proc(x: double): double; @foreign
nearbyintf :: proc(x: float): float; @foreign
rint :: proc(x: double): double; @foreign
rintf :: proc(x: float): float; @foreign
lrint :: proc(x: double): long; @foreign
lrintf :: proc(x: float): long; @foreign
llrint :: proc(x: double): llong; @foreign
llrintf :: proc(x: float): llong; @foreign
round :: proc(x: double): double; @foreign
roundf :: proc(x: float): float; @foreign
lround :: proc(x: double): long; @foreign
lroundf :: proc(x: float): long; @foreign
llround :: proc(x: double): llong; @foreign
llroundf :: proc(x: float): llong; @foreign
trunc :: proc(x: double): double; @foreign
truncf :: proc(x: float): float; @foreign
fmod :: proc(x: double, y: double): double; @foreign
fmodf :: proc(x: float, y: float): float; @foreign
remainder :: proc(x: double, y: double): double; @foreign
remainderf :: proc(x: float, y: float): float; @foreign
remquo :: proc(x: double, y: double, quo: *int): double; @foreign
remquof :: proc(x: float, y: float, quo: *int): float; @foreign
copysign :: proc(x: double, y: double): double; @foreign
copysignf :: proc(x: float, y: float): float; @foreign
nan :: proc(tagp: *char): double; @foreign
nanf :: proc(tagp: *char): float; @foreign
nextafter :: proc(x: double, y: double): double; @foreign
nextafterf :: proc(x: float, y: float): float; @foreign
fdim :: proc(x: double, y: double): double; @foreign
fdimf :: proc(x: float, y: float): float; @foreign
fmax :: proc(x: double, y: double): double; @foreign
fmaxf :: proc(x: float, y: float): float; @foreign
fmin :: proc(x: double, y: double): double; @foreign
fminf :: proc(x: float, y: float): float; @foreign
fma :: proc(x: double, y: double, z: double): double; @foreign
fmaf :: proc(x: float, y: float, z: float): float; @foreign

3
pkgs/libc/size_t.lc Normal file
View File

@@ -0,0 +1,3 @@
import std_types "std_types";
size_t :: typedef std_types.usize; @foreign @weak

12
pkgs/libc/stdarg.lc Normal file
View File

@@ -0,0 +1,12 @@
#`
#include <stdarg.h>
#define lc_va_arg_any(va) va_arg(va, LC_Any)
`;
va_list :: struct { a: ullong; } @foreign
va_start :: proc(args: va_list, arg: *void); @foreign
va_end :: proc(args: va_list); @foreign
va_copy :: proc(args: va_list, src: va_list); @foreign
// va_arg :: proc(args: va_list, arg: *void); @foreign
va_arg_any :: proc(args: va_list): Any; @foreign(lc_va_arg_any)

61
pkgs/libc/stdio.lc Normal file
View File

@@ -0,0 +1,61 @@
#`#include<stdio.h>`;
SEEK_SET :: 0;
SEEK_CUR :: 1;
SEEK_END :: 2;
FILE :: struct {a: int;} @foreign
fpos_t :: typedef long; @foreign
stderr: *FILE; @foreign
stdin: *FILE; @foreign
stdout: *FILE; @foreign
remove :: proc(filename: *char): int; @foreign
rename :: proc(old: *char, new: *char): int; @foreign
tmpfile :: proc(): *FILE; @foreign
tmpnam :: proc(s: *char): *char; @foreign
fclose :: proc(stream: *FILE): int; @foreign
fflush :: proc(stream: *FILE): int; @foreign
fopen :: proc(filename: *char, mode: *char): *FILE; @foreign
freopen :: proc(filename: *char, mode: *char, stream: *FILE): *FILE; @foreign
setbuf :: proc(stream: *FILE, buf: *char); @foreign
setvbuf :: proc(stream: *FILE, buf: *char, mode: int, size: size_t): int; @foreign
fprintf :: proc(stream: *FILE, format: *char, ...): int; @foreign
fscanf :: proc(stream: *FILE, format: *char, ...): int; @foreign
printf :: proc(format: *char, ...): int; @foreign
scanf :: proc(format: *char, ...): int; @foreign
snprintf :: proc(s: *char, n: size_t, format: *char, ...): int; @foreign
sscanf :: proc(s: *char, format: *char, ...): int; @foreign
vfprintf :: proc(stream: *FILE, format: *char, arg: *va_list): int; @foreign
vfscanf :: proc(stream: *FILE, format: *char, arg: *va_list): int; @foreign
vprintf :: proc(format: *char, arg: *va_list): int; @foreign
vscanf :: proc(format: *char, arg: *va_list): int; @foreign
vsnprintf :: proc(s: *char, n: size_t, format: *char, arg: *va_list): int; @foreign
vsprintf :: proc(s: *char, format: *char, arg: *va_list): int; @foreign
vsscanf :: proc(s: *char, format: *char, arg: *va_list): int; @foreign
fgetc :: proc(stream: *FILE): int; @foreign
fgets :: proc(s: *char, n: int, stream: *FILE): *char; @foreign
fputc :: proc(s: *char, stream: *FILE): int; @foreign
getc :: proc(stream: *FILE): int; @foreign
getchar :: proc(): int; @foreign
putc :: proc(c: int, stream: *FILE): int; @foreign
putchar :: proc(c: int): int; @foreign
puts :: proc(s: *char): int; @foreign
ungetc :: proc(c: int, stream: *FILE): int; @foreign
fread :: proc(ptr: *void, size: size_t, nmemb: size_t, stream: *FILE): size_t; @foreign
fwrite :: proc(ptr: *void, size: size_t, nmemb: size_t, stream: *FILE): size_t; @foreign
fgetpos :: proc(stream: *FILE, pos: *fpos_t): int; @foreign
fseek :: proc(stream: *FILE, offset: long, whence: int): int; @foreign
fsetpos :: proc(stream: *FILE, pos: *fpos_t): int; @foreign
ftell :: proc(stream: *FILE): long; @foreign
rewind :: proc(stream: *FILE); @foreign
clearerr :: proc(stream: *FILE); @foreign
feof :: proc(stream: *FILE): int; @foreign
ferror :: proc(stream: *FILE): int; @foreign
perror :: proc(s: *char); @foreign

48
pkgs/libc/stdlib.lc Normal file
View File

@@ -0,0 +1,48 @@
#`#include<stdlib.h>`;
wchar_t :: typedef std_types.u16; @foreign
div_t :: struct { quot: int; rem: int; } @foreign
ldiv_t :: struct { quot: long; rem: long; } @foreign
lldiv_t :: struct { quot: llong; rem: llong; } @foreign
atof :: proc(nptr: *char): double; @foreign
atoi :: proc(nptr: *char): int; @foreign
atol :: proc(nptr: *char): long; @foreign
atoll :: proc(nptr: *char): llong; @foreign
strtod :: proc(nptr: *char, endptr: **char): double; @foreign
strtof :: proc(nptr: *char, endptr: **char): float; @foreign
strtol :: proc(nptr: *char, endptr: **char, base: int): long; @foreign
strtoll :: proc(nptr: *char, endptr: **char, base: int): llong; @foreign
strtoul :: proc(nptr: *char, endptr: **char, base: int): ulong; @foreign
strtoull :: proc(nptr: *char, endptr: **char, base: int): ullong; @foreign
rand :: proc(): int; @foreign
srand :: proc(seed: uint); @foreign
calloc :: proc(nmemb: size_t, size: size_t): *void; @foreign
free :: proc(ptr: *void); @foreign
malloc :: proc(size: size_t): *void; @foreign
realloc :: proc(ptr: *void, size: size_t): *void; @foreign
abort :: proc(); @foreign
atexit :: proc(func: proc()): int; @foreign
at_quick_exit :: proc(func: proc()): int; @foreign
exit :: proc(status: int); @foreign
_Exit :: proc(status: int); @foreign
getenv :: proc(name: *char): *char; @foreign
quick_exit :: proc(status: int); @foreign
system :: proc(cmd: *char): int; @foreign
abs :: proc(j: int): int; @foreign
labs :: proc(j: long): long; @foreign
llabs :: proc(j: llong): llong; @foreign
div :: proc(numer: int, denom: int): div_t; @foreign
ldiv :: proc(numer: long, denom: long): ldiv_t; @foreign
lldiv :: proc(numer: llong, denom: llong): lldiv_t; @foreign
mblen :: proc(s: *char, n: size_t): int; @foreign
mbtowc :: proc(pwc: *wchar_t, s: *char, n: size_t): int; @foreign
wctomb :: proc(s: *char, wc: wchar_t): int; @foreign
mbstowcs :: proc(pwcs: *wchar_t, s: *char, n: size_t): size_t; @foreign
wcstombs :: proc(s: *char, pwcs: *wchar_t, n: size_t): size_t; @foreign

28
pkgs/libc/string.lc Normal file
View File

@@ -0,0 +1,28 @@
#`#include<string.h>`;
memset :: proc(s: *void, value: int, n: size_t): *void; @foreign
memcpy :: proc(s1: *void, s2: *void, n: size_t): *void; @foreign
memmove :: proc(s1: *void, s2: *void, n: size_t): *void; @foreign
strcpy :: proc(s1: *char, s2: *char): *char; @foreign
strncpy :: proc(s1: *char, s2: *char, n: size_t): *char; @foreign
strcat :: proc(s1: *char, s2: *char): *char; @foreign
strncat :: proc(s1: *char, s2: *char, n: size_t): *char; @foreign
memcmp :: proc(s1: *void, s2: *void, n: size_t): int; @foreign
strcmp :: proc(s1: *char, s2: *char): int; @foreign
strcoll :: proc(s1: *char, s2: *char): int; @foreign
strncmp :: proc(s1: *char, s2: *char, n: size_t): int; @foreign
strxfrm :: proc(s1: *char, s2: *char, n: size_t): size_t; @foreign
memchr :: proc(s : *void, c: int, n: size_t): *void; @foreign
strchr :: proc(s : *char, c: int): *char; @foreign
strcspn :: proc(s1: *char, s2: *char): size_t; @foreign
strpbrk :: proc(s1: *char, s2: *char): *char; @foreign
strrchr :: proc(s : *char, c: int): *char; @foreign
strcpn :: proc(s1: *char, s2: *char): *char; @foreign
strtok :: proc(s1: *char, s2: *char): *char; @foreign
strerror :: proc(errnum: int): *char; @foreign
strlen :: proc(s: *char): size_t; @foreign