mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
112 lines
1.4 KiB
C
112 lines
1.4 KiB
C
// Copyright (c) 2021-2022 Christoffer Lerno. All rights reserved.
|
|
// Use of this source code is governed by the MIT license
|
|
// a copy of which can be found in the LICENSE_STDLIB file.
|
|
module std::io;
|
|
import libc;
|
|
|
|
struct File
|
|
{
|
|
CFile file;
|
|
}
|
|
|
|
enum Seek
|
|
{
|
|
SET,
|
|
CURSOR,
|
|
END
|
|
}
|
|
|
|
fault IoError
|
|
{
|
|
FILE_NOT_FOUND,
|
|
FILE_NOT_SEEKABLE,
|
|
FILE_NOT_VALID,
|
|
FILE_INVALID_POSITION,
|
|
FILE_OVERFLOW,
|
|
FILE_IS_PIPE,
|
|
FILE_EOF,
|
|
FILE_INCOMPLETE_WRITE,
|
|
FILE_NOT_DIR,
|
|
NO_PERMISSION,
|
|
NAME_TOO_LONG,
|
|
INTERRUPTED,
|
|
GENERAL_ERROR,
|
|
UNKNOWN_ERROR,
|
|
}
|
|
|
|
fn int putchar(char c) @inline
|
|
{
|
|
return libc::putchar(c);
|
|
}
|
|
|
|
/**
|
|
* @param [&in] message
|
|
* @return `number of bytes printed.`
|
|
*/
|
|
fn int print(char* message)
|
|
{
|
|
char* pointer = message;
|
|
while (*pointer != '\0')
|
|
{
|
|
if (!putchar(*pointer)) return 0;
|
|
pointer++;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/**
|
|
* @param [&in] message
|
|
* @return `number of bytes printed.`
|
|
*/
|
|
fn int println(char *message = "") @inline
|
|
{
|
|
return libc::puts(message);
|
|
}
|
|
|
|
|
|
|
|
|
|
fn File stdout()
|
|
{
|
|
return { libc::stdout() };
|
|
}
|
|
|
|
fn File stderr()
|
|
{
|
|
return { libc::stderr() };
|
|
}
|
|
|
|
fn File stdin()
|
|
{
|
|
return { libc::stdin() };
|
|
}
|
|
|
|
/*
|
|
|
|
|
|
error FileError
|
|
{
|
|
ulong errno;
|
|
}
|
|
|
|
fn FileError errorFromErrno()
|
|
{
|
|
return FileError { };
|
|
}
|
|
|
|
|
|
|
|
|
|
pubic fn void! File.clearerr(File *file) @inline
|
|
{
|
|
clearerr(file->file);
|
|
}
|
|
|
|
|
|
|
|
fn void File.error(File *file) @inline
|
|
{
|
|
int err = ferror
|
|
}
|
|
*/
|