cleaned up some console code

This commit is contained in:
JJ Bliss
2026-05-14 10:43:19 -04:00
parent 1c13f607ee
commit 73d2af846a
4 changed files with 131 additions and 132 deletions
+70 -1
View File
@@ -1,4 +1,8 @@
use fmt;
use os;
use bufio;
use strings;
use unix::poll;
export fn console_input(c: u8, ctype: u8, state: *uxn) (done | error) = {
state.dev[0x12] = c;
@@ -19,9 +23,74 @@ export fn console_input(c: u8, ctype: u8, state: *uxn) (done | error) = {
state.dev[0x17] = 0;
return done;
};
}; //TODO implement eval
};
state.dev[0x12] = 0;
state.dev[0x17] = 0;
return done;
};
fn console_output(value: rune, state: *uxn) void = {
fmt::print(value)!;
bufio::flush(os::stdout)!;
};
export fn console_poll(buf: []u8, state: *uxn) void = {
for( let b .. buf ){
// fmt::printfln("Input: {}",b: rune)!;
if(b == 0){
// fmt::printfln("Ending stdin argument")!;
match (console_input('\n',4,state)) {
case done =>
yield done;
case let val: u8 =>
fmt::fatalf("Unhandled Opcode: {:x}", val);
};
// fmt::printfln("Finished stdin argument")!;
break;
};
match (console_input(b,1,state)) {
case done =>
yield done;
case let val: u8 =>
fmt::fatalf("Unhandled Opcode: {:x}", val);
};
};
// fmt::printfln("Finished stdin argument")!;
};
export fn uxn_console_argument(state: *uxn) void = {
// fmt::printf("Evaluating console arguments")!;
let args = os::args[2..];
let i: u8 = 0;
let argcount = len(args): u8;
for (let arg .. args){
// fmt::println("Console input args")!;
for(let char: u8 .. strings::toutf8(arg)){
// fmt::printfln("Console input arg char: {}", char: rune)!;
match (console_input(char,2,state)) {
case done =>
yield done;
case let val: u8 =>
fmt::fatalf("Unhandled Opcode: {:x}", val);
case =>
yield done;
};
};
let ctype: u8 = if(i == (argcount - 1)){
yield 4;
} else {
yield 3;
};
match (console_input('\n',ctype,state)) {
case done =>
yield done;
case let val: u8 =>
fmt::fatalf("Unhandled Opcode: {:x}", val);
case =>
yield done;
};
i+=1; //TODO using i here seems inelegant
};
};