Download Game! Currently 106 players and visitors. Last logged in:EronkBylethSabaothLmt

Blitzer's Blog >> 70894

Back to blogs index
Posted: 21 May 2026 14:11 [ permalink ]
/ =========================================================================
/ HAUKI SHELL (HSH) - REAKTIIVINEN YDIN
/ =========================================================================

class Stream {
    constructor(name) {
        this.name = name;
        this.filters = [];    // Muokkaavat dataa (esim. typo-korjaukset)
        this.listeners = [];  // Kuluttavat dataa (esim. VGA-tulostus)
    }

    // LisC$C$ muuntajan vC$liin
    addFilter(fn) { this.filters.push(fn); }
    
    // T-haara / kuuntelija
    addListener(fn) { this.listeners.push(fn); }

    // Datan tyC6ntC$minen jonoon
    push(data) {
        let processedData = data;
        // 1. Vie data kaikkien filttereiden lC$pi (ketjutus)
        for (let filter of this.filters) {
            processedData = filter(processedData);
            if (processedData === null || processedData === undefined) return;
// Filtteri pysC$ytti datan
        }
        // 2. Jaa prosessoitu data kaikille kuuntelijoille
        for (let listener of this.listeners) {
            listener(processedData);
        }
    }
}

/ Shellin pC$C$instanssi
const hsh = {
    // Standardijonot
    stdin: new Stream("stdin"),
    stdout: new Stream("stdout"),
    stderr: new Stream("stderr"),
    
    // YksilC6idyt ohjausjonot
    vga_out: new Stream("vga_out"),
    serial_out: new Stream("serial_out"),

    // RekisterC6idyt komennot ja aliakset
    commands: {},

    // Suorittaa "rivin"
    execute: function(line) {
        let args = line.trim().split(" ");
        let cmd = args.shift();
        
        if (this.commands[cmd]) {
            // Komento palauttaa datan suoraan stdoutiin
            let result = this.commands[cmd](args);
            if (result !== undefined) this.stdout.push(result);
        } else if (cmd !== "") {
            this.stderr.push(`Command not found: ${cmd}`);
        }
    },

    // Aliasten luonti on yhtC$ helppoa kuin Bashissa, mutta tehokkaampaa JS:n
ansiosta
    alias: function(name, jsFunction) {
        this.commands[name] = jsFunction;
    }
};

/ =========================================================================
/ OLETUSKYTKENNCT (Wiring)
/ =========================================================================

/ 1. Ohjataan shellin 'stdout' menemC$C$n sekC$ VGA:lle ettC$ Serialille
(T-haara)
hsh.stdout.addListener(data => hsh.vga_out.push(data));
hsh.stdout.addListener(data => hsh.serial_out.push(data));

/ 2. Ohjataan shellin 'stdin' suoraan execute-moottorille
hsh.stdin.addListener(line => hsh.execute(line));