lib/std/io.rad 1.2 KiB raw
1
//! Input/output utilities.
2
use std::fmt;
3
use std::intrinsics;
4
5
pub fn print(str: *[u8]) {
6
    intrinsics::ecall(64, 1, str.ptr as i64, str.len as i64, 0);
7
}
8
9
pub fn printError(str: *[u8]) {
10
    intrinsics::ecall(64, 2, str.ptr as i64, str.len as i64, 0);
11
}
12
13
pub fn printLn(str: *[u8]) {
14
    print(str);
15
    print("\n");
16
}
17
18
pub fn printI32(val: i32) {
19
    let mut buffer: [u8; 11] = [0; 11];
20
    let result: *[u8] = fmt::formatI32(val, &mut buffer[..]);
21
    print(result);
22
}
23
24
pub fn printU32(val: u32) {
25
    let mut buffer: [u8; 10] = [0; 10];
26
    let result: *[u8] = fmt::formatU32(val, &mut buffer[..]);
27
    print(result);
28
}
29
30
pub fn printBool(val: bool) {
31
    let mut buffer: [u8; 5] = [0; 5];
32
    let result: *[u8] = fmt::formatBool(val, &mut buffer[..]);
33
    print(result);
34
}
35
36
pub fn read(buf: *mut [u8]) -> u32 {
37
    return intrinsics::ecall(63, 0, buf.ptr as i64, buf.len as i64, 0) as u32;
38
}
39
40
pub fn readToEnd(buf: *mut [u8]) -> *[u8] {
41
    let mut total: u32 = 0;
42
43
    while total < buf.len {
44
        let chunk: *mut [u8] = &mut buf[total..];
45
        let n: u32 = read(chunk);
46
47
        if n == 0 {
48
            break;
49
        }
50
        if n > chunk.len {
51
            total = buf.len;
52
            break;
53
        }
54
        total += n;
55
    }
56
    return &buf[..total];
57
}