// I have prepared a copy of the appropriate file for blog readers to examine // without disclosing the name of the programming language. I have also included // a copy of one of the console drivers which makes use of this interface. // Enjoy! use io; use rt::efi; // The primary active console device. export let console: *io::stream = null: *io::stream; // Sets the active console device. export fn setcons(cons: *io::stream) void = { console = cons; }; export type syscons = struct { name: str, cons: *io::stream, }; def MAX_CONS: size = 16; let consbuf: [MAX_CONS]syscons = [syscons { cons = null: *io::stream, ... }...]; // List of known consoles. Do not edit. export let consoles: []syscons = []; @init fn cons_init() void = { consoles = consbuf[..0]; }; // Adds a console to the list of system consoles. export fn register(name: str, cons: *io::stream) void = { if (len(consoles) >= MAX_CONS) { return; }; static append(consoles, syscons { name = name, cons = cons, }); }; // Automatically select the best console and set it as the system console. export fn auto() void = { // TODO: Check kernel command line and/or DT /chosen for the user's // preference if (len(consoles) == 0) { return; }; setcons(consoles[0].cons); };