///|
/// native 目标:交互式画布闭环(getchar 读命令,每条后重绘)
///
/// 运行:moon run --target native playground
extern "c" fn getchar() -> Int = "getchar"
///|
fn read_line() -> String {
let line = collect_chars()
line
}
///|
fn collect_chars() -> String {
let mut acc = ""
let mut on = true
while on {
let c = getchar()
if c == 10 {
on = false
} else if c == -1 {
on = false
} else {
match Int::to_char(c) {
Some(ch) => acc = acc + ch.to_string()
None => on = false
}
}
}
acc
}
///|
/// 交互回路:画布 + 命令
fn repl_loop() -> Unit {
let st = repl_state_new(MOCKUP)
// 启动帧
println(
"== MoonViz 交互式画布(参数式命令,命令后重绘) ==",
)
println(apply_command(st, "render"))
let mut running = true
while running {
println("")
let line = read_line()
let resp = apply_command(st, line)
if resp == ":exit" {
running = false
println("退出")
} else {
println(resp)
}
}
}