diff --git a/Makefile b/Makefile index 80efdf4f7e..d58d0c9145 100644 --- a/Makefile +++ b/Makefile @@ -218,6 +218,7 @@ J191_6_OFILES_UT=\ gen191/6/ut_repo.o \ gen191/6/ut_rest.o \ gen191/6/ut_seek.o \ + gen191/6/ut_sift.o \ gen191/6/ut_swab.o \ gen191/6/ut_tack.o \ gen191/6/ut_tock.o \ diff --git a/gen191/6/ut.c b/gen191/6/ut.c index ba8bb3a74c..84d6895764 100644 --- a/gen191/6/ut.c +++ b/gen191/6/ut.c @@ -149,6 +149,7 @@ extern u2_ho_jet j2_mcj(Pt6, ut, play)[]; extern u2_ho_jet j2_mcj(Pt6, ut, rest)[]; extern u2_ho_jet j2_mcj(Pt6, ut, seek)[]; + extern u2_ho_jet j2_mcj(Pt6, ut, sift)[]; extern u2_ho_jet j2_mcj(Pt6, ut, tack)[]; extern u2_ho_jet j2_mcj(Pt6, ut, tock)[]; @@ -177,6 +178,7 @@ { j2_sc(Pt6, ut, play), j2_mcj(Pt6, ut, play), 0, 0, u2_none }, { j2_sc(Pt6, ut, rest), j2_mcj(Pt6, ut, rest), 0, 0, u2_none }, { j2_sc(Pt6, ut, seek), j2_mcj(Pt6, ut, seek), 0, 0, u2_none }, + { j2_sc(Pt6, ut, sift), j2_mcj(Pt6, ut, sift), 0, 0, u2_none }, { j2_sc(Pt6, ut, tack), j2_mcj(Pt6, ut, tack), 0, 0, u2_none }, { j2_sc(Pt6, ut, tock), j2_mcj(Pt6, ut, tock), 0, 0, u2_none }, { } diff --git a/gen191/6/ut_mint.c b/gen191/6/ut_mint.c index 699c573f7d..550798da38 100644 --- a/gen191/6/ut_mint.c +++ b/gen191/6/ut_mint.c @@ -855,7 +855,8 @@ u2_noun p_vos = u2_h(vos); u2_noun q_vos = u2_t(vos); u2_noun waz = u2_bc(wir_r, _1, u2_rx(wir_r, p_vos)); - u2_noun cig = j2_mby(Pt6, cell)(wir_r, zur, p_vos); + u2_noun sif = j2_mcy(Pt6, ut, sift)(wir_r, van, sut, zur); + u2_noun cig = j2_mby(Pt6, cell)(wir_r, sif, p_vos); u2_noun ret; ret = u2_bc(wir_r, @@ -864,6 +865,7 @@ u2_rz(wir_r, waz); u2_rz(wir_r, zur); + u2_rz(wir_r, sif); u2_rz(wir_r, vos); return ret; diff --git a/gen191/6/ut_sift.c b/gen191/6/ut_sift.c new file mode 100644 index 0000000000..12b6860841 --- /dev/null +++ b/gen191/6/ut_sift.c @@ -0,0 +1,131 @@ +/* j/6/sift.c +** +** This file is in the public domain. +*/ +#include "all.h" +#include "../pit.h" + +/* boilerplate +*/ + u2_ho_jet + j2_mcj(Pt6, ut, sift)[]; + + u2_noun // transfer + j2_mc(Pt6, ut, sift)(u2_wire wir_r, + u2_noun cor) // retain + { + u2_noun sut, ref, van; + + if ( (u2_no == u2_mean(cor, u2_cv_sam, &ref, + u2_cv_con, &van, + 0)) || + (u2_none == (sut = u2_frag(u2_cv_sam, van))) ) + { + return u2_bl_bail(wir_r, c3__fail); + } else { + return j2_mcy(Pt6, ut, sift)(wir_r, van, sut, ref); + } + } + + u2_weak // transfer + j2_mci(Pt6, ut, sift)(u2_wire wir_r, + u2_noun van, // retain + u2_noun sut, // retain + u2_noun ref) // retain + { + u2_weak hoc = u2_ds_look(wir_r, van, "sift"); + + if ( u2_none == hoc ) { + c3_assert(!"register sift"); + return u2_none; + } else { + u2_weak von = u2_rl_molt(wir_r, van, u2_cv_sam, u2_rx(wir_r, sut), 0); + u2_weak gat = u2_nk_soft(wir_r, von, hoc); + u2_weak cor = u2_rl_molt(wir_r, gat, u2_cv_sam, u2_rx(wir_r, ref), 0); + + if ( (u2_none == j2_mcj(Pt6, ut, sift)[0].xip) ) { + u2_noun xip = u2_ds_find(wir_r, cor); + + // c3_assert(u2_none != xip); + j2_mcj(Pt6, ut, sift)[0].xip = xip; + } + u2_rl_lose(wir_r, gat); + return cor; + } + } + + u2_noun // transfer + j2_mcy(Pt6, ut, sift)(u2_wire wir_r, + u2_noun van, // retain + u2_noun sut, // retain + u2_noun ref) // retain + { +#if 0 + u2_ho_jet *jet_j = &j2_mcj(Pt6, ut, sift)[0]; + + if ( (jet_j->sat_s & u2_jet_live) && !(jet_j->sat_s & u2_jet_test) ) { + if ( !(jet_j->sat_s & u2_jet_memo) ) { + return j2_mcx(Pt6, ut, sift)(wir_r, van, sut, ref); + } + else { + c3_m fun_m = c3__sift; + u2_noun pro = u2_rl_find_trel(wir_r, fun_m, sut, ref); + + if ( u2_none != pro ) { + return pro; + } + else { + pro = j2_mcx(Pt6, ut, sift)(wir_r, van, sut, ref); + + return u2_rl_save_trel(wir_r, fun_m, sut, ref, pro); + } + } + return pro; + } else +#else + { + u2_noun cor, pro; + + cor = j2_mci(Pt6, ut, sift)(wir_r, van, sut, ref); + + pro = u2_nk_soft(wir_r, u2k(cor), u2h(cor)); + if ( u2_none == pro ) return u2_bl_bail(wir_r, c3__fail); + + u2_rz(wir_r, cor); + + return pro; +#endif + } + } + + u2_weak + j2_mck(Pt6, ut, sift)(u2_wire wir_r, + u2_noun cor) + { + u2_noun sut, ref, van; + + if ( (u2_no == u2_mean(cor, u2_cv_sam, &ref, + u2_cv_con, &van, + 0)) || + (u2_none == (sut = u2_frag(u2_cv_sam, van))) ) + { + return u2_none; + } else { + return u2_rc + (wir_r, u2_rx(wir_r, sut), u2_rx(wir_r, ref)); + } + } + +/* structures +*/ + u2_ho_jet + j2_mcj(Pt6, ut, sift)[] = { + { ".2", c3__hevy, + j2_mc(Pt6, ut, sift), + Tier6_b_memo, + u2_none, u2_none, + j2_mck(Pt6, ut, sift), c3__sift + }, + { } + }; + diff --git a/gen191/pit.h b/gen191/pit.h index 46636a08a8..eb9e4c12b8 100644 --- a/gen191/pit.h +++ b/gen191/pit.h @@ -635,6 +635,11 @@ u2_noun hep); // retain u2_noun // transfer + j2_mcy(Pt6, ut, sift)(u2_wire wir_r, + u2_noun van, // retain + u2_noun sut, // retain + u2_noun ref); // retain + u2_noun // transfer j2_mcy(Pt6, ut, tack)(u2_wire wir_r, u2_noun van, // retain u2_noun sut, // retain