chain word and better save/load UI
This commit is contained in:
@@ -299,6 +299,7 @@ impl Forth {
|
||||
let val = match name.as_str() {
|
||||
"step" => Value::Int(ctx.step as i64, None),
|
||||
"beat" => Value::Float(ctx.beat, None),
|
||||
"bank" => Value::Int(ctx.bank as i64, None),
|
||||
"pattern" => Value::Int(ctx.pattern as i64, None),
|
||||
"tempo" => Value::Float(ctx.tempo, None),
|
||||
"phase" => Value::Float(ctx.phase, None),
|
||||
@@ -628,6 +629,24 @@ impl Forth {
|
||||
.insert("__tempo__".to_string(), Value::Float(clamped, None));
|
||||
}
|
||||
|
||||
Op::Chain => {
|
||||
let pattern = stack.pop().ok_or("stack underflow")?.as_int()? - 1;
|
||||
let bank = stack.pop().ok_or("stack underflow")?.as_int()? - 1;
|
||||
if bank < 0 || pattern < 0 {
|
||||
return Err("chain: bank and pattern must be >= 1".into());
|
||||
}
|
||||
if bank as usize == ctx.bank && pattern as usize == ctx.pattern {
|
||||
// chaining to self is a no-op
|
||||
} else {
|
||||
let key = format!("__chain_{}_{}__", ctx.bank, ctx.pattern);
|
||||
let val = format!("{bank}:{pattern}");
|
||||
self.vars
|
||||
.lock()
|
||||
.unwrap()
|
||||
.insert(key, Value::Str(val, None));
|
||||
}
|
||||
}
|
||||
|
||||
Op::ListStart => {
|
||||
stack.push(Value::Marker);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user