CPP builtins
[m6w6/ext-psi] / psi.d / stdio.psi
1 #include <stdio.h>
2
3 function psi\fopen(string $path, string $mode) : object {
4 let path = pathval($path);
5 let mode = strval($mode);
6 return fopen(path, mode)
7 as to_object(fopen);
8 }
9
10 function psi\fclose(object $stream) : int {
11 let stream = objval($stream);
12 return fclose(stream) as to_int(fclose);
13 }
14
15 function psi\fread(object $stream, string &$data = NULL, int $len = 1, int $n = 8192) : int {
16 let len = intval($len);
17 let n = intval($n);
18 let stream = objval($stream);
19 let buf = calloc(n, len);
20 pre_assert stream != NULL;
21 return fread(buf, len, n, stream) as to_int(fread);
22 set $data = to_string(buf, fread * len);
23 }
24
25 function psi\feof(object $stream) : int {
26 let stream = objval($stream);
27 return feof(stream) as to_int(feof);
28 }
29
30 function psi\fileno(object $stream) : int {
31 let stream = objval($stream);
32 return fileno(stream) as to_int(fileno);
33 }
34
35 function psi\ferror(object $stream) : int {
36 let stream = objval($stream);
37 return ferror(stream) as to_int(ferror);
38 }
39
40 function psi\clearerr(object $stream) : void {
41 let stream = objval($stream);
42 return clearerr(stream) as void(clearerr);
43 }
44
45 function psi\fseek(object $stream, int $offset, int $whence) : int {
46 let stream = objval($stream);
47 let offset = intval($offset);
48 let whence = intval($whence);
49 return fseek(stream, offset, whence) as to_int(fseek);
50 }
51
52 function psi\ftell(object $stream) : int {
53 let stream = objval($stream);
54 return ftell(stream) as to_int(ftell);
55 }
56
57 function psi\rewind(object $stream) : void {
58 let stream = objval($stream);
59 return rewind(stream) as void(rewind);
60 }
61
62 function psi\printf(string $fmt, mixed ...$args) : int {
63 let format = strval($fmt);
64 return printf(format) as to_int(printf);
65 }
66