/* functions */ u2_weak // transfer j2_mbc(Pt3, cat)(u2_wire wir_r, u2_atom a, // retain u2_atom b, // retain u2_atom c) // retain { if ( !u2_fly_is_cat(a) || (a >= 32) ) { return u2_bl_bail(wir_r, c3__fail); } else { c3_g a_g = a; c3_w lew_w = u2_met(a_g, b); c3_w ler_w = u2_met(a_g, c); c3_w all_w = (lew_w + ler_w); if ( 0 == all_w ) { return 0; } else { u2_ray sal_r = u2_rl_slaq(wir_r, a_g, all_w); if ( 0 == sal_r ) { return u2_bl_bail(wir_r, c3__fail); } else { u2_chop(a_g, 0, lew_w, 0, sal_r, b); u2_chop(a_g, 0, ler_w, lew_w, sal_r, c); } // return u2_rl_moot(wir_r, sal_r); return u2_rl_malt(wir_r, sal_r); } } }
/* stew */ static u2_flag _stew_wor(u2_wire wir_r, u2_noun ort, u2_noun wan) { if ( !u2_fly_is_cat(ort) ) { return u2_bl_bail(wir_r, c3__fail); } else { if ( u2_no == u2_dust(wan) ) { if ( !u2_fly_is_cat(wan) ) { return u2_bl_bail(wir_r, c3__fail); } else return (ort < wan) ? u2_yes : u2_no; } else { u2_noun h_wan = u2_h(wan); if ( !u2_fly_is_cat(h_wan) ) { return u2_bl_bail(wir_r, c3__fail); } else return (ort < h_wan) ? u2_yes : u2_no; } } }
/* functions */ u2_weak // transfer j2_mbc(Pt3, rsh)(u2_wire wir_r, u2_atom a, // retain u2_atom b, // retain u2_atom c) // retain { if ( !u2_fly_is_cat(a) || (a >= 32) ) { return u2_bl_bail(wir_r, c3__fail); } else if ( !u2_fly_is_cat(b) ) { return _0; } else { c3_g a_g = a; c3_w b_w = b; c3_w len_w = u2_met(a_g, c); if ( b_w >= len_w ) { return _0; } else { u2_ray sal_r = u2_rl_slaq(wir_r, a_g, (len_w - b_w)); if ( 0 == sal_r ) { return u2_bl_bail(wir_r, c3__fail); } u2_chop(a_g, b_w, (len_w - b_w), 0, sal_r, c); // return u2_rl_moot(wir_r, sal_r); return u2_rl_malt(wir_r, sal_r); } } }
/* functions */ u2_weak // transfer j2_mcc(Pt4, in, gas)(u2_wire wir_r, u2_noun a, // retain u2_noun b) // retain { if ( u2_nul == b ) { return u2_rx(wir_r, a); } else { if ( u2_no == u2_dust(b) ) { return u2_bl_bail(wir_r, c3__exit); } else { u2_noun i_b = u2_h(b); u2_noun t_b = u2_t(b); u2_noun c; if ( u2_none == (c = j2_mcc(Pt4, in, put)(wir_r, a, i_b)) ) { return u2_bl_bail(wir_r, c3__exit); } else { u2_noun d = j2_mcc(Pt4, in, gas)(wir_r, c, t_b); u2_rl_lose(wir_r, c); return d; } } } }
/* logic */ u2_noun // transfer j2_mcy(Pt6, ut, repo)(u2_wire wir_r, u2_noun van, // retain u2_noun sut) // retain { u2_noun p_sut, q_sut; if ( u2_no == u2_dust(sut) ) switch ( sut ) { default: return u2_rx(wir_r, sut); case c3__noun: return u2_bt(wir_r, c3__fork, u2_bc(wir_r, c3__atom, u2_blip), u2_bt(wir_r, c3__cell, c3__noun, c3__noun)); } else switch ( u2_h(sut) ) { default: { return u2_bl_error(wir_r, "repo-flat"); } case c3__bull: { if ( u2_no == u2_as_cell(u2_t(sut), &p_sut, &q_sut)) { return u2_bl_bail(wir_r, c3__fail); } else { return u2_rx(wir_r, q_sut); } } case c3__core: { if ( u2_no == u2_as_cell(u2_t(sut), &p_sut, &q_sut) ) { return u2_bl_bail(wir_r, c3__fail); } else { return u2_bt(wir_r, c3__cell, c3__noun, u2_rx(wir_r, p_sut)); } } case c3__cube: { if ( u2_no == u2_as_cell(u2_t(sut), &p_sut, &q_sut)) { return u2_bl_bail(wir_r, c3__fail); } else { return u2_rx(wir_r, q_sut); } } case c3__face: { if ( u2_no == u2_as_cell(u2_t(sut), &p_sut, &q_sut)) { return u2_bl_bail(wir_r, c3__fail); } else { return u2_rx(wir_r, q_sut); } } case c3__hold: { p_sut = u2_t(sut); return j2_mcy(Pt6, ut, rest)(wir_r, van, sut, p_sut); } } }
/* logic */ u2_bean // transfer j2_mcx(Pt6, ut, park)(u2_wire wir_r, u2_noun van, // retain u2_noun sut, // retain u2_noun way, // retain u2_atom axe) // retain { if ( u2_no == u2_dust(sut) || c3__core != u2_h(sut) ) { return u2_bl_bail(wir_r, c3__fail); } // else if ( u2_no == u2_bn_hook(wir_r, van, "vet") ) { else if ( u2_no == u2_frag(j2_ut_van_vet, van) ) { return u2_yes; } else { u2_noun p_sut, q_sut, pq_sut; u2_bi_cell(wir_r, u2_t(sut), &p_sut, &q_sut); u2_bi_cell(wir_r, q_sut, &pq_sut, 0); if ( c3__both == way ) { if ( c3__gold == pq_sut ) { return u2_yes; } else return u2_no; } if ( c3__read == way ) { switch ( pq_sut ) { default: return u2_bl_bail(wir_r, c3__fail); case c3__gold: return u2_yes; case c3__lead: return u2_no; case c3__iron: return u2_no; case c3__zinc: return u2_and(u2_not(u2_sing(_1, axe)), u2_sing(_2, j2_mbc(Pt3, cap)(wir_r, axe))); } } else if ( c3__rite == way ) { switch ( pq_sut ) { default: return u2_bl_bail(wir_r, c3__fail); case c3__gold: return u2_yes; case c3__lead: return u2_no; case c3__iron: return u2_and(u2_not(u2_sing(_1, axe)), u2_sing(_2, j2_mbc(Pt3, cap)(wir_r, axe))); case c3__zinc: return u2_no; } } else if ( c3__free == way ) { return u2_yes; } else return u2_bl_bail(wir_r, c3__fail); } }
static u2_noun // produce _mint_bake(u2_wire wir_r, u2_noun van, // retain u2_noun sut, // retain u2_noun dab) // retain { if ( (u2_nul == dab) ) { return _0; } else { u2_noun n_dab, l_dab, r_dab; u2_as_trel(dab, &n_dab, &l_dab, &r_dab); if ( u2_no == u2_dust(n_dab) ) { return u2_bl_bail(wir_r, c3__fail); } else { u2_noun qn_dab = u2_t(n_dab); u2_noun vad; switch ( u2_h(qn_dab) ) { default: return u2_bl_bail(wir_r, c3__exit); case c3__ash: { vad = _mint_brew(wir_r, van, sut, u2_yes, u2_t(qn_dab)); break; } case c3__elm: { vad = _mint_brew(wir_r, van, sut, u2_no, u2_t(qn_dab)); break; } } if ( (u2_nul == l_dab) && (u2_nul == r_dab) ) { return vad; } else if ( (u2_nul == l_dab) ) { return u2_bc (wir_r, vad, _mint_bake(wir_r, van, sut, r_dab)); } else if ( (u2_nul == r_dab) ) { return u2_bc (wir_r, vad, _mint_bake(wir_r, van, sut, l_dab)); } else { return u2_bt (wir_r, vad, _mint_bake(wir_r, van, sut, l_dab), _mint_bake(wir_r, van, sut, r_dab)); } } } }
/* u2_bn_cook(): ** ** Reverse hook as molt. */ u2_noun // transfer u2_bn_cook(u2_wire wir_r, u2_noun cor, // retain const c3_c* tam_c, u2_noun som) // transfer { u2_weak vib = u2_ds_look(wir_r, cor, tam_c); u2_noun axe; if ( (u2_none == vib) || (u2_no == u2_dust(vib)) || (u2_nul != u2_h(vib)) || (u2_no == u2_stud(axe = u2_t(vib)) ) ) { u2_rz(wir_r, vib); return u2_bl_bail(wir_r, c3__fail); } else { u2_noun gon = u2_bn_molt(wir_r, cor, axe, som, 0); u2_rz(wir_r, vib); u2_rz(wir_r, som); return gon; } }
/* u2_bn_hook(): ** ** Execute hook from core. */ u2_noun u2_bn_hook(u2_wire wir_r, u2_noun cor, const c3_c* tam_c) { u2_weak vib = u2_ds_look(wir_r, cor, tam_c); if ( u2_none == vib ) { fprintf(stderr, "no hook: %s\n", tam_c); c3_assert(0); return u2_bl_bail(wir_r, c3__fail); } else { if ( u2_nul == u2_h(vib) ) { u2_noun rag = u2_frag(u2_t(vib), cor); // printf("%s %d\n", tam_c, u2_t(vib)); u2_rz(wir_r, vib); return u2_rx(wir_r, rag); } else { u2_noun ret = u2_bn_nock(wir_r, cor, vib); u2_rz(wir_r, vib); return ret; } } }
u2_noun // transfer j2_mcy(Pt6, ut, tack)(u2_wire wir_r, u2_noun van, // retain u2_noun sut, // retain u2_noun peh, // retain u2_noun mur) // retain { u2_ho_jet *jet_j = &j2_mcj(Pt6, ut, tack)[0]; if ( jet_j->sat_s == u2_jet_live ) { return j2_mcx(Pt6, ut, tack)(wir_r, van, sut, peh, mur); } else { u2_noun cor, fol, pro; cor = j2_mci(Pt6, ut, tack)(wir_r, van, sut, peh, mur); fol = u2_h(cor); pro = u2_ho_use(wir_r, jet_j, cor, fol); if ( u2_none == pro ) return u2_bl_bail(wir_r, c3__fail); u2_rz(wir_r, cor); u2_rz(wir_r, fol); return pro; } }
/* _zuse_load_cold(): load engine from cold source. */ static void _zuse_load_cold(struct zuse_state* fod_f, const c3_c* src_c) { u2_wire wir_r = fod_f->wir_r; u2_noun src = u2_ux_read(wir_r, src_c, "watt"); if ( u2_none == src ) { u2_bl_bail(wir_r); } else { u2_noun gen, mil, pyt, kol, pit; gen = u2_fj_watt(wir_r, src); gen = u2_ba_sole(wir_r, gen); mil = u2_fj_plow_mill(wir_r, u2_bc(wir_r, c3__cube, _0), gen); pyt = u2_bi_h(wir_r, mil); kol = u2_bi_t(wir_r, mil); { // XX: bad dag interaction in old plow code // u2_rl_gain(wir_r, kol); } kol = u2_ba_sole(wir_r, kol); pit = u2_bn_nock(wir_r, _0, kol); fod_f->kol = kol; fod_f->pyt = pyt; fod_f->pit = pit; fod_f->bot = u2_bc(wir_r, u2_rx(wir_r, fod_f->pyt), u2_rx(wir_r, fod_f->pit)); _zuse_save_rock(fod_f, src_c); } }
u2_noun // transfer j2_mcy(Pt6, ut, nest)(u2_wire wir_r, u2_noun van, // retain u2_noun sut, // retain u2_noun ref) // retain { u2_ho_jet *jet_j = &j2_mcj(Pt6, ut, nest)[0]; if ( (jet_j->sat_s & u2_jet_live) && !(jet_j->sat_s & u2_jet_test) ) { return j2_mcx(Pt6, ut, nest)(wir_r, van, sut, ref); } else { u2_noun cor, fol, pro; cor = j2_mci(Pt6, ut, nest)(wir_r, van, sut, ref); fol = u2_t(cor); pro = u2_ho_use(wir_r, jet_j, cor, fol); if ( u2_none == pro ) return u2_bl_bail(wir_r, c3__fail); u2_rz(wir_r, cor); u2_rz(wir_r, fol); return pro; } }
/* functions */ u2_bean j2_mcc(Pt4, in, has)(u2_wire wir_r, u2_noun a, // retain u2_noun b) // retain { if ( u2_nul == a ) { return u2_no; } else { u2_noun l_a, n_a, r_a; if ( (u2_no == u2_mean(a, 2, &n_a, 6, &l_a, 7, &r_a, 0)) ) { return u2_bl_bail(wir_r, c3__exit); } else { if ( (u2_yes == u2_sing(b, n_a)) ) { return u2_yes; } else { if ( u2_yes == j2_mbc(Pt3, hor)(wir_r, b, n_a) ) { return j2_mcc(Pt4, in, has)(wir_r, l_a, b); } else return j2_mcc(Pt4, in, has)(wir_r, r_a, b); } } } }
/* functions */ u2_weak // transfer j2_mbc(Pt2, scag)(u2_wire wir_r, u2_atom a, // retain u2_noun b) // retain { if ( !u2_fly_is_cat(a) ) { return u2_bl_bail(wir_r, c3__fail); } else { u2_noun acc; c3_w i_w = a; if ( !i_w ) return u2_nul; while ( i_w ) { if ( u2_no == u2_dust(b) ) { return u2_nul; } acc = u2_cn_cell( u2_h(b), acc ); b = u2_t(b); i_w--; } return u2_ckb_flop(acc); } }
static u2_noun _mint_brew(u2_wire wir_r, u2_noun van, u2_noun sut, u2_flag tov, u2_noun gen) { u2_noun von; switch ( tov ) { default: return u2_bl_bail(wir_r, c3__fail); case u2_yes: von = u2_rx(wir_r, van); break; case u2_no: von = u2_bn_molt(wir_r, van, j2_ut_van_vet, u2_no, 0); break; } { u2_noun mil = j2_mcy(Pt6, ut, mint)(wir_r, von, sut, c3__noun, gen); u2_noun fol = u2_rx(wir_r, u2_t(mil)); u2_rl_lose(wir_r, mil); u2_rl_lose(wir_r, von); return fol; } }
/* shim */ u2_noun // produce j2_mcx(Pt5, shim, fun)(u2_wire wir_r, u2_noun zep, // retain u2_noun tub) // retain { u2_noun p_tub, q_tub; u2_bi_cell(wir_r, tub, &p_tub, &q_tub); if ( u2_no == u2_dust(q_tub) ) { return _fail(wir_r, tub); } else { u2_noun p_zep, q_zep; u2_noun iq_tub = u2_h(q_tub); u2_bi_cell(wir_r, zep, &p_zep, &q_zep); if ( u2_fly_is_cat(p_zep) && u2_fly_is_cat(q_zep) && u2_fly_is_cat(iq_tub) ) { if ( (iq_tub >= p_zep) && (iq_tub <= q_zep) ) { return _next(wir_r, tub); } else return _fail(wir_r, tub); } else { return u2_bl_bail(wir_r, c3__fail); } } }
static u2_noun // produce _og_list(u2_wire wir_r, u2_noun a, // retain u2_noun b, // retain u2_noun c) // retain { u2_noun l = u2_nul; if ( !u2_fly_is_cat(b) ) { return u2_bl_bail(wir_r, c3__fail); } while ( 0 != b ) { u2_noun x = j2_mbc(Pt3, mix)(wir_r, a, c); u2_noun y = j2_mbc(Pt3, mix)(wir_r, b, x); u2_noun d = j2_mbc(Pt5, shas)(wir_r, c3_s4('o','g','-','b'), y); u2_noun m; u2z(x); u2z(y); if ( b < 256 ) { u2_noun e = j2_mbc(Pt3, end)(wir_r, 0, b, d); u2z(d); m = u2nc(b, e); b = 0; } else { m = u2nc(256, d); c = d; b -= 256; } l = u2nc(m, l); } return u2_ckb_flop(l); }
/* functions */ u2_weak // transfer j2_mbc(Pt3, con)(u2_wire wir_r, u2_atom a, // retain u2_atom b) // retain { c3_w lna_w = u2_met(5, a); c3_w lnb_w = u2_met(5, b); if ( (lna_w == 0) && (lnb_w == 0) ) { return _0; } else { c3_w len_w = c3_max(lna_w, lnb_w); u2_ray sal_r = u2_rl_slab(wir_r, len_w); if ( 0 == sal_r ) { return u2_bl_bail(wir_r, c3__fail); } else { c3_w i_w; u2_chop(5, 0, lna_w, 0, sal_r, a); for ( i_w = 0; i_w < lnb_w; i_w++ ) { *u2_at_ray(sal_r + i_w) |= u2_atom_word(b, i_w); } // return u2_rl_moot(wir_r, sal_r); return u2_rl_malt(wir_r, sal_r); } } }
/* u2_cke_cue(): expand saved pill. */ static u2_noun // produce _cue_in(u2_wire wir_r, u2_atom a, // retain u2_atom b, // retain u2_ray t_r) // retain { u2_noun p, q; if ( _0 == j2_mbc(Pt3, cut)(wir_r, 0, b, 1, a) ) { u2_noun x = j2_mbc(Pt1, inc)(wir_r, b); u2_noun c = j2_mby(Pt5, rub)(wir_r, x, a); p = j2_mbc(Pt1, inc)(wir_r, u2_h(c)); q = u2_rx(wir_r, u2_t(c)); q = u2_cs_save(wir_r, t_r, 0, b, q); u2_rz(wir_r, c); u2_rz(wir_r, x); } else { u2_noun c = j2_mbc(Pt1, add)(wir_r, _2, b); u2_noun l = j2_mbc(Pt1, inc)(wir_r, b); if ( _0 == j2_mbc(Pt3, cut)(wir_r, 0, l, 1, a) ) { u2_noun u, v, w; u2_noun x, y; u = _cue_in(wir_r, a, c, t_r); x = j2_mbc(Pt1, add)(wir_r, u2_h(u), c); v = _cue_in(wir_r, a, x, t_r); w = u2_bc(wir_r, u2_rx(wir_r, u2_t(u)), u2_rx(wir_r, u2_t(v))); y = j2_mbc(Pt1, add)(wir_r, u2_h(u), u2_h(v)); p = j2_mbc(Pt1, add)(wir_r, _2, y); q = u2_cs_save(wir_r, t_r, 0, b, w); u2_rz(wir_r, u); u2_rz(wir_r, v); u2_rz(wir_r, x); u2_rz(wir_r, y); } else { u2_noun d = j2_mby(Pt5, rub)(wir_r, c, a); u2_weak x = u2_cs_find(wir_r, t_r, 0, u2_t(d)); p = j2_mbc(Pt1, add)(wir_r, _2, u2_h(d)); if ( u2_none == x ) { return u2_bl_bail(wir_r, c3__fail); } q = u2_rx(wir_r, x); u2_rz(wir_r, d); } u2_rz(wir_r, l); u2_rz(wir_r, c); } return u2_bc(wir_r, p, q); }
/* u2_bl_error(): simple string error. */ u2_noun u2_bl_error(u2_wire wir_r, const c3_c* err_c) // retain { u2_bl_push(wir_r, u2_bc(wir_r, c3__lose, u2_bn_string(wir_r, err_c))); return u2_bl_bail(wir_r, c3__exit); }
/* u2_bi_t(): ** ** Return the tail of (a). */ u2_noun u2_bi_t(u2_ray wir_r, u2_noun a) { if ( u2_no == u2_dust(a) ) return u2_bl_bail(wir_r, c3__exit); return u2_t(a); }
/* functions */ u2_noun // produce j2_mby(Pt5, rub)(u2_wire wir_r, u2_atom a, // retain u2_atom b) // retain { u2_atom c, d, e; u2_atom w, x, y, z; u2_atom p, q; u2_atom m = j2_mbc(Pt1, add)(wir_r, a, u2_met(0, b)); // Compute c and d. { x = u2_rx(wir_r, a); while ( _0 == j2_mbc(Pt3, cut)(wir_r, _0, x, _1, b) ) { u2_atom y = j2_mbc(Pt1, inc)(wir_r, x); // Sanity check: crash if decoding more bits than available if ( u2_yes == j2_mbc(Pt1, gth)(wir_r, x, m)) { // fprintf(stderr, "[%%rub-hard %d %d %d]\r\n", a, x, m); return u2_bl_bail(wir_r, c3__exit); } u2_rz(wir_r, x); x = y; } if ( u2_yes == u2_sing(x, a) ) { u2_rz(wir_r, x); return u2_bc(wir_r, _1, _0); } c = j2_mbc(Pt1, sub)(wir_r, x, a); d = j2_mbc(Pt1, inc)(wir_r, x); u2_rz(wir_r, x); } // Compute e, p, q. { x = j2_mbc(Pt1, dec)(wir_r, c); y = j2_mbc(Pt3, bex)(wir_r, x); z = j2_mbc(Pt3, cut)(wir_r, _0, d, x, b); e = j2_mbc(Pt1, add)(wir_r, y, z); u2_rz(wir_r, y); u2_rz(wir_r, z); w = j2_mbc(Pt1, add)(wir_r, c, c); y = j2_mbc(Pt1, add)(wir_r, w, e); z = j2_mbc(Pt1, add)(wir_r, d, x); p = j2_mbc(Pt1, add)(wir_r, w, e); q = j2_mbc(Pt3, cut)(wir_r, _0, z, e, b); u2_rz(wir_r, w); u2_rz(wir_r, x); u2_rz(wir_r, y); u2_rz(wir_r, z); return u2_bc(wir_r, p, q); } }
/* u2_bl_good(): test for u2_none. */ u2_noun u2_bl_good(u2_ray wir_r, u2_weak som) { if ( u2_none == som ) { return u2_bl_bail(wir_r, c3__exit); } else return som; }
/* u2_bi_met(): ** ** Return the size of (b) in bits, rounded up to ** (1 << a_y). ** ** For example, (a_y == 3) returns the size in bytes. */ c3_w u2_bi_met(u2_ray wir_r, c3_y a_y, u2_noun b) { if ( u2_no == u2_stud(b) ) return u2_bl_bail(wir_r, c3__exit); return u2_met(a_y, b); }
/* u2_bi_byte(): ** ** Return byte (a_w) of (b). */ c3_y u2_bi_byte(u2_ray wir_r, c3_w a_w, u2_noun b) { if ( u2_no == u2_stud(b) ) return u2_bl_bail(wir_r, c3__exit); return u2_byte(a_w, b); }
/* u2_bi_mp(): ** ** Copy (b) into (a_mp). */ void u2_bi_mp(u2_ray wir_r, mpz_t a_mp, u2_noun b) { if ( u2_no == u2_stud(b) ) u2_bl_bail(wir_r, c3__exit); u2_mp(a_mp, b); }
/* u2_bi_word(): ** ** Return word (a_w) of (b). */ c3_w u2_bi_word(u2_ray wir_r, c3_w a_w, u2_noun b) { if ( u2_no == u2_stud(b) ) return u2_bl_bail(wir_r, c3__exit); return u2_word(a_w, b); }
/* u2_bl_some(): test for zero ray. */ u2_ray u2_bl_some(u2_wire wir_r, u2_ray ray_r) { if ( 0 == ray_r ) { return u2_bl_bail(wir_r, c3__fail); } else return ray_r; }
/* u2_bl_flat(): test for atom. */ u2_atom u2_bl_flat(u2_ray wir_r, u2_weak som) { if ( u2_none == som ) { return u2_bl_bail(wir_r, c3__exit); } else return som; }
/* functions */ u2_weak // transfer j2_mbc(Pt3, cut)(u2_wire wir_r, u2_atom a, // retain u2_atom b, // retain u2_atom c, // retain u2_atom d) // retain { if ( !u2_fly_is_cat(a) || (a >= 32) ) { return u2_bl_bail(wir_r, c3__fail); } if ( !u2_fly_is_cat(b) ) { return _0; } if ( !u2_fly_is_cat(c) ) { c = 0x7fffffff; } { c3_g a_g = a; c3_w b_w = b; c3_w c_w = c; c3_w len_w = u2_met(a_g, d); if ( (_0 == c_w) || (b_w >= len_w) ) { return _0; } if ( b_w + c_w > len_w ) { c_w = (len_w - b_w); } if ( (b_w == 0) && (c_w == len_w) ) { return u2_rx(wir_r, d); } else { u2_ray sal_r = u2_rl_slaq(wir_r, a_g, c_w); if ( 0 == sal_r ) { return u2_bl_bail(wir_r, c3__fail); } u2_chop(a_g, b_w, c_w, 0, sal_r, d); return u2_rl_malt(wir_r, sal_r); } } }