///|
#export_name("dsp_abi")
pub fn abi() -> Int {
7
}
///|
let probe_n : Int = 8
///|
fn probe_seg(h : Int) -> (FixedArray[Double], FixedArray[Byte])? {
if job_words_of(h) < probe_n || job_bytes_of(h) < probe_n {
None
} else {
Some((job_d(h), job_b(h)))
}
}
///|
#export_name("dsp_probe_stamp")
pub fn probe_stamp(h : Int) -> Int {
match probe_seg(h) {
None => 0
Some((d, b)) => {
for i = 0; i < probe_n; i = i + 1 {
d.unsafe_set(i, (1000 + i).to_double())
b.unsafe_set(i, (200 + i).to_byte())
}
1
}
}
}
///|
#export_name("dsp_probe_check")
pub fn probe_check(h : Int, want_d : Int, want_b : Int) -> Int {
match probe_seg(h) {
None => 0
Some((d, b)) => {
for i = 0; i < probe_n; i = i + 1 {
if d.unsafe_get(i) != (want_d + i).to_double() {
return 0
}
if b.unsafe_get(i).to_int() != ((want_b + i) & 0xff) {
return 0
}
}
1
}
}
}
///|
#export_name("dsp_probe_want")
pub fn probe_want(which : Int) -> Int {
match which {
0 => 1000
1 => 200
_ => probe_n
}
}