// extern FILE *fopen(char *path, char *mode); function psi\fopen(string $path, string $mode) : object { let path = pathval($path); let mode = strval($mode); return to_object(fopen); } // extern int fclose(FILE *stream); function psi\fclose(object $stream) : int { let stream = objval($stream); return to_int(fclose); } // extern size_t fread(void *buf, size_t len, size_t n, FILE *stream); function psi\fread(object $stream, string &$data = NULL, int $len = 1, int $n = 8192) : int { let len = intval($len); let n = intval($n); let stream = objval($stream); let buf = calloc(n, len); return to_int(fread); set $data = to_string(buf, fread * len); } // extern int feof(FILE *stream); function psi\feof(object $stream) : int { let stream = objval($stream); return to_int(feof); } // extern int fileno(FILE *stream); function psi\fileno(object $stream) : int { let stream = objval($stream); return to_int(fileno); } // extern int ferror(FILE *stream); function psi\ferror(object $stream) : int { let stream = objval($stream); return to_int(ferror); } // extern void clearerr(FILE *stream); function psi\clearerr(object $stream) : void { let stream = objval($stream); return void(clearerr); } // extern int fseek(FILE *stream, long offset, int whence); function psi\fseek(object $stream, int $offset, int $whence) : int { let stream = objval($stream); let offset = intval($offset); let whence = intval($whence); return to_int(fseek); } //extern long ftell(FILE *stream); function psi\ftell(object $stream) : int { let stream = objval($stream); return to_int(ftell); } // extern void rewind(FILE *stream); function psi\rewind(object $stream) : void { let stream = objval($stream); return void(rewind); } //extern int printf(const char *format, ...); function psi\printf(string $fmt, mixed ...$args) : int { let format = strval($fmt); return to_int(printf); }