hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

stdfd.ha (1602B)


      1 // SPDX-License-Identifier: MPL-2.0
      2 // (c) Hare authors <https://harelang.org>
      3 
      4 use bufio;
      5 use io;
      6 use rt;
      7 
      8 let stdin_bufio: bufio::stream = bufio::stream {
      9 	// Will be overwritten, but must be initialized
     10 	stream = null: io::stream,
     11 	source = 0,
     12 	...
     13 };
     14 
     15 let stdout_bufio: bufio::stream = bufio::stream {
     16 	// Will be overwritten, but must be initialized
     17 	stream = null: io::stream,
     18 	source = 1,
     19 	...
     20 };
     21 
     22 // The standard input. This handle is buffered.
     23 export let stdin: io::handle = rt::STDIN_FILENO; // initialized by init_stdfd
     24 
     25 // The standard input, as an [[io::file]]. This handle is unbuffered.
     26 export let stdin_file: io::file = rt::STDIN_FILENO;
     27 
     28 // The standard output. This handle is buffered.
     29 export let stdout: io::handle = rt::STDOUT_FILENO; // initialized by init_stdfd
     30 
     31 // The standard output, as an [[io::file]]. This handle is unbuffered.
     32 export let stdout_file: io::file = rt::STDOUT_FILENO;
     33 
     34 // The standard error. This handle is unbuffered.
     35 export let stderr: io::handle = rt::STDERR_FILENO;
     36 
     37 // The standard error, as an [[io::file]]. This handle is unbuffered.
     38 export let stderr_file: io::file = rt::STDERR_FILENO;
     39 
     40 // The recommended buffer size for reading from disk.
     41 export def BUFSZ: size = 4096; // 4 KiB
     42 
     43 @init fn init_stdfd() void = {
     44 	static let stdinbuf: [BUFSZ]u8 = [0...];
     45 	stdin_bufio = bufio::init(stdin_file, stdinbuf, []);
     46 	stdin = &stdin_bufio;
     47 
     48 	static let stdoutbuf: [BUFSZ]u8 = [0...];
     49 	stdout_bufio = bufio::init(stdout_file, [], stdoutbuf);
     50 	stdout = &stdout_bufio;
     51 };
     52 
     53 @fini fn fini_stdfd() void = {
     54 	// Flush any pending writes
     55 	io::close(stdout): void;
     56 };