Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/examples/file-summary/nocter.nct

nocter.nct

#name: "file-summary"
#version: "0.1.0"
#executable: {
    name: "file-summary",
}

use std/io.{open_path, print}

use std/io_buffer.BufReader

use std/num.usize_to_string

use std/path.Utf8Path

use std/process.arg

use std/vec.Vec

func main(): i32! {
    let requested: &str = arg(1)? otherwise {
        print("usage: file-summary PATH\n")?
        return 2
    }
    let path = Utf8Path.new(requested)?
    let file = open_path(&path)?
    var reader = BufReader.new(move file)
    var buffer: Vec<u8> = Vec [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    var lines: usize = 0
    while true {
        let received: usize = reader.read(buffer.view_mut())?
        if received == 0 {
            break
        }
        var offset: usize = 0
        while offset < received {
            if buffer.view()[offset] == 10 {
                lines = lines + 1
            }
            offset = offset + 1
        }
    }
    let result = usize_to_string(lines)
    print(result.view())?
    print("\n")?
    return 0
}