/* 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);
    }
  }
  /* _lily_hike_belt_r(): factor (pac) right.
  */
  static u2_list                                                  //  transfer
  _lily_hike_belt_r(u2_ray  wir_r,
                    u2_list pac)                                  //  retain
  {
    if ( (u2_nul == pac) ) {
      return u2_nul;
    }
    else {
      u2_axis axis       = u2_h(u2_h(pac));
      u2_tool tool       = u2_t(u2_h(pac));
      u2_list belt_r = _lily_hike_belt_r(wir_r, u2_t(pac));

      {
        if ( (_1 != axis) &&
             (u2_yes == u2_sing(_3, j2_mbc(Pt3, cap)(wir_r, axis))) )
        {
          u2_axis axis_tap = j2_mbc(Pt3, mas)(wir_r, axis);

          return u2_bc(wir_r,
                       u2_bc(wir_r, u2_rx(wir_r, axis_tap),
                                    u2_rx(wir_r, tool)),
                       belt_r);
        }
        else return belt_r;
      }
    }
  }
  /* _lily_hike_belt_l(): factor (pac) left.
  */
  static u2_list
  _lily_hike_belt_l(u2_ray  wir_r,
                    u2_list pac)
  {
    if ( (u2_nul == pac) ) {
      return u2_nul;
    }
    else {
      u2_axis axis       = u2_h(u2_h(pac));
      u2_tool tool       = u2_t(u2_h(pac));
      u2_list belt_l = _lily_hike_belt_l(wir_r, u2_t(pac));

      {
        if ( (_1 != axis) &&
             (u2_yes == u2_sing(_2, j2_mbc(Pt3, cap)(wir_r, axis))) )
        {
          u2_axis axis_tap = j2_mbc(Pt3, mas)(wir_r, axis);

          return u2_bc(wir_r,
                       u2_bc(wir_r,
                             u2_rx(wir_r, axis_tap),
                             u2_rx(wir_r, tool)),
                       belt_l);
        }
        else return belt_l;
      }
    }
  }
Beispiel #4
0
/* 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);
        }
      }
    }
  }
Beispiel #5
0
/* functions
*/
  u2_flag 
  j2_mcc(Pt4, by, 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;
      u2_noun pn_a, qn_a;

      if ( (u2_no == u2_as_trel(a, &n_a, &l_a, &r_a)) ||
           (u2_no == u2_as_cell(n_a, &pn_a, &qn_a) ) )
      {
        return u2_none;
      }
      else {
        if ( (u2_yes == u2_sing(b, pn_a)) ) {
          return u2_yes;
        } 
        else {
          if ( u2_yes == j2_mbc(Pt3, gor)(wir_r, b, pn_a) ) {
            return j2_mcc(Pt4, by, has)(wir_r, l_a, b);
          } 
          else return j2_mcc(Pt4, by, has)(wir_r, r_a, b);
        }
      }
    }
  }
Beispiel #6
0
/* _unix_desk_sync_into(): sync external changes to desk.
*/
static void
_unix_desk_sync_into(u2_noun  who,
                     u2_noun  hox,
                     u2_noun  syd,
                     u2_udir* dir_u)
{
  u2_noun xun, bur, doz, fav, pax;

  xun = _unix_dir_ankh(dir_u);
  bur = _unix_desk_peek(hox, u2k(syd), u2k(u2A->wen));

  if ( (u2_no == u2_sing(u2h(xun), u2h(bur)))) //&&
  //     (u2_no == _unix_ankh_sing(xun, bur)) )
  {
    doz = u2_dc("cost", xun, bur);

    pax = u2nq(u2_blip, c3__sync, u2k(u2A->sen), u2_nul);
    fav = u2nq(c3__into, who, syd, u2nc(u2_yes, doz));

    u2_reck_plan(u2A, pax, fav);
  }
  else {
    u2z(who); u2z(syd); u2z(xun); u2z(bur);
  }
}
Beispiel #7
0
  static u2_flag
  _nest_dext(u2_wire wir_r,
             u2_noun van,
             u2_noun sut,
             u2_noun ref,
             u2_noun gil)
  {
    if ( (u2_yes == u2_sing(sut, ref)) ) {
      return u2_yes;
    }

    {
      u2_ho_jet *jet_j = &j2_mcj(Pt6, ut, nest)[0];

      if ( !(jet_j->sat_s & u2_jet_memo) ) {
        return _nest_dext_in(wir_r, van, sut, ref, gil);
      } else {
        c3_m    fun_m = u2_jet_fun_m(jet_j);
        u2_noun pro   = u2_rl_find_cell(wir_r, fun_m, sut, ref);

        if ( u2_none != pro ) {
          return pro;
        }
        else {
          pro = _nest_dext_in(wir_r, van, sut, ref, gil);

          return u2_rl_save_cell(wir_r, fun_m, sut, ref, pro);
        }
      }
    }
  }
Beispiel #8
0
/* _unix_node_sing(): test node equality.
*/
static u2_bean
_unix_node_sing(u2_noun xud, u2_noun bud)
{
  if ( (u2_nul == xud) && (u2_nul == bud) ) { return u2_yes; }
  if ( (u2_nul == xud) || (u2_nul == bud) ) { return u2_no; }

  return u2_sing(u2t(u2t(xud)), u2t(u2t(bud)));
}
/* 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);
    }
  }
Beispiel #10
0
static u2_noun
_walk_ok(u2_reck* rec_u, u2_noun nod)
{
  u2_noun don = u2_cn_mung(u2k(rec_u->toy.arch), u2k(nod));

  if ( u2_no == u2_sing(nod, don) ) {
    c3_assert(0);
  }
  u2z(don);
  return nod;
}
Beispiel #11
0
/* _unix_ankh_sing(): full ankh compare.
*/
static u2_bean
_unix_ankh_sing(u2_noun xun, u2_noun bur)                 //  retain
{
  if ( u2_yes == u2_sing(xun, bur) ) {
    return u2_yes;
  } else {
    if ( u2_no == _unix_ankh_sing_in(xun, bur) ) {
      // fprintf(stderr, "uas: no, no (%x, %x)\r\n", u2_mug(xun), u2_mug(bur));
      return u2_no;
    }
    else {
      // fprintf(stderr, "uas: no, yes\r\n");
      return u2_yes;
    }
  }
}
Beispiel #12
0
/* functions
*/
  u2_noun                                                         //  transfer
  j2_mby(Pt6, fork)(u2_wire wir_r, 
                    u2_noun hoz,                                  //  retain
                    u2_noun bur)                                  //  retain
  {
    if ( u2_yes == u2_sing(hoz, bur) ) {
      return u2_rx(wir_r, hoz);
    }
    else if ( c3__void == bur ) {
      return u2_rx(wir_r, hoz);
    }
    else if ( c3__void == hoz ) {
      return u2_rx(wir_r, bur);
    }
    else return u2_bt
      (wir_r, c3__fork, u2_rx(wir_r, hoz), u2_rx(wir_r, bur));
  }
Beispiel #13
0
  static u2_noun
  _heal_by(u2_wire wir_r,
           u2_noun van,
           u2_noun sut,
           u2_noun qog, 
           u2_noun ref)
  {
    u2_noun p_sut, q_sut;

    if ( u2_no == u2_dust(sut) ) {
      return u2_bl_error(wir_r, "heal-name");
    }
    else switch ( u2_h(sut) ) {
      default: return u2_bl_error(wir_r, "heal-name");

      case c3__core:
      {
        return u2_rx(wir_r, ref);
      }
      case c3__face: u2_bi_cell(wir_r, u2_t(sut), &p_sut, &q_sut);
      {
        if ( u2_yes == u2_sing(p_sut, u2_t(qog)) ) {
          return j2_mby(Pt6, face)(wir_r, p_sut, ref);
        }
        else return u2_bl_error(wir_r, "heal-name");
      }
      case c3__fine: 
      case c3__hold: {
        u2_noun rep = j2_mcy(Pt6, ut, repo)(wir_r, van, sut);
        u2_noun ret = _heal_by(wir_r, van, rep, qog, ref);

        u2_rz(wir_r, rep);
        return ret;
      }
      case c3__fork: u2_bi_cell(wir_r, u2_t(sut), &p_sut, &q_sut);
      {
        u2_noun dis = _heal_by(wir_r, van, p_sut, qog, ref);
        u2_noun dat = _heal_by(wir_r, van, q_sut, qog, ref);
        u2_noun ret = j2_mby(Pt6, fork)(wir_r, dis, dat);

        u2_rl_lose(wir_r, dis);
        u2_rl_lose(wir_r, dat);
        return ret;
      }
    }
  }
Beispiel #14
0
  static u2_noun                                                  //  produce
  _mull_edit(u2_wire wir_r,
             u2_noun van,                                         //  retain
             u2_noun sut,                                         //  retain
             u2_noun dox,                                         //  retain
             u2_noun mew,                                         //  retain
             u2_noun p_yom,                                       //  submit
             u2_noun q_yom)                                       //  submit
  {
    while ( 1 ) {
      if ( u2_no == u2_dust(mew) ) {
        return u2_bc(wir_r, p_yom, q_yom);
      } else {
        u2_noun i_mew = u2_h(mew);
        u2_noun t_mew = u2_t(mew);
        u2_noun pi_mew = u2_h(i_mew);
        u2_noun qi_mew = u2_t(i_mew);
        u2_noun zil = _mull_in(wir_r, van, sut, c3__noun, dox, qi_mew);
        u2_noun p_zil = u2_h(zil);
        u2_noun q_zil = u2_t(zil);
        u2_noun cuf = j2_mcy(Pt6, ut, tock)
              (wir_r, van, sut, pi_mew, p_zil, p_yom);
        u2_noun dof = j2_mcy(Pt6, ut, tock)
              (wir_r, van, sut, pi_mew, q_zil, q_yom);
        u2_noun vov = u2_sing(u2_h(cuf), u2_h(dof))
                        ? u2_bl_error(wir_r, "mull-bonk-a")
                        : 0;
       
        vov = vov;

        u2_rz(wir_r, p_yom);
        p_yom = u2_rx(wir_r, u2_t(cuf));

        u2_rz(wir_r, q_yom);
        q_yom = u2_rx(wir_r, u2_t(dof));

        u2_rz(wir_r, dof);
        u2_rz(wir_r, cuf);
        u2_rz(wir_r, zil);

        mew = t_mew;
      }
    }
  }
  /* _lily_hike_belt_root(): convert (pac) to a list of root tools.
  */
  static u2_list
  _lily_hike_belt_root(u2_ray  wir_r,
                       u2_list pac)
  {
    if ( (u2_nul == pac) ) {
      return u2_nul;
    }
    else {
      u2_axis axis     = u2_h(u2_h(pac));
      u2_tool tool     = u2_t(u2_h(pac));
      u2_list list_tool = _lily_hike_belt_root(wir_r, u2_t(pac));

      if ( u2_yes == u2_sing(_1, axis) ) {
        return u2_bc(wir_r, u2_rx(wir_r, tool),
                            list_tool);
      }
      else return list_tool;
    }
  }
Beispiel #16
0
/* _unix_dir_ankh(): resolve directory to new style ankh.
*/
static u2_noun
_unix_dir_ankh(u2_udir* dir_u)
{
  u2_udir* dis_u;
  u2_ufil* fil_u;
  u2_noun pam = u2_nul;

  for ( dis_u = dir_u->dis_u; dis_u; dis_u = dis_u->nex_u ) {
    u2_noun pre = _unix_dir_name(dis_u);
    u2_noun ank = _unix_dir_ankh(dis_u);

    // uL(fprintf(uH, "dir %s\n", u2_cr_string(pre)));
    if ( 0 != u2h(ank) ) {
      pam = u2_ckd_by_put(pam, pre, ank);
    }
  }

  if ( !dir_u->par_u->par_u ) {                        //  toplevel
    for ( fil_u = dir_u->par_u->fil_u; fil_u; fil_u = fil_u->nex_u ) {
      //  uL(fprintf(uH, "top %s\n", fil_u->pax_c));
      u2_noun wib = _unix_file_tame(fil_u);
      if ( u2_none == wib ) continue;
      u2_noun dur = _unix_dir_name(dir_u);
      if ( u2_no == u2_sing(dur, u2h(wib)) ) {         //  wrong desk
        u2z(wib); u2z(dur);
        continue;
      }
      u2_noun baw = _unix_file_load(fil_u);
      u2_noun woz = u2nt(u2_nul, u2_do("sham", u2k(baw)), baw);
      u2z(dur);
      pam = _unix_dir_ankh_file(pam, u2k(u2t(wib)), baw, woz);
      u2z(wib);
    }
  }

  for ( fil_u = dir_u->fil_u; fil_u; fil_u = fil_u->nex_u ) {
    u2_noun wib = _unix_file_name(fil_u);
    u2_noun baw = _unix_file_load(fil_u);
    u2_noun woz = u2nt(u2_nul, u2_do("sham", u2k(baw)), baw);
    pam = _unix_dir_ankh_file(pam, wib, baw, woz);
  }
  return u2_do("cosh", u2nt(0, u2_nul, pam));
}
Beispiel #17
0
static u2_bean
_unix_ankh_sing_map(u2_noun mun, u2_noun mur)           //  retain
{
  u2_noun n_mun, l_mun, r_mun;
  u2_noun n_mur, l_mur, r_mur;

  if ( (u2_nul == mun) && (u2_nul == mur) ) { return u2_yes; }
  if ( (u2_nul == mun) || (u2_nul == mur) ) { return u2_no; }

  u2_cx_trel(mun, &n_mun, &l_mun, &r_mun);
  u2_cx_trel(mur, &n_mur, &l_mur, &r_mur);

  if ( (u2_no == (u2_sing(u2h(n_mun), u2h(n_mur)))) ||
       (u2_no == _unix_ankh_sing_in(u2t(n_mun), u2t(n_mur))) ||
       (u2_no == _unix_ankh_sing_map(l_mun, l_mur)) ||
       (u2_no == _unix_ankh_sing_map(r_mun, r_mur)) ) 
  {
    return u2_no;
  } else return u2_yes;
}
Beispiel #18
0
/* just
*/
  u2_noun                                                         //  produce
  j2_mcx(Pt5, just, fun)(u2_wire wir_r,
                         u2_noun daf,                             //  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 iq_tub = u2_h(q_tub);

      if ( u2_yes == u2_sing(daf, iq_tub) ) {
        return _next(wir_r, tub);
      }
      else return _fail(wir_r, tub);
    }
  }
Beispiel #19
0
  static u2_noun                                                  //  produce
  _snub(u2_wire wir_r,
        u2_noun van,                                              //  retain
        u2_noun sut,                                              //  retain
        u2_noun peh,                                              //  retain
        u2_noun men,                                              //  retain
        u2_noun gen,                                              //  retain
        u2_noun gus)                                              //  retain
  {
#if 1
    return u2_rx(wir_r, gen);
#else
    if ( u2_no == u2_dust(men) ) {
      if ( u2_nul == gus ) {
        return u2_rx(wir_r, gen);
      } else {
        return u2_rx(wir_r, u2_t(gus));
      }
    }
    else {
      u2_noun i_men   = u2_h(men);
      u2_noun t_men   = u2_t(men);
      u2_noun pi_men  = u2_h(i_men);

      u2_noun nip = _snip(wir_r, van, pi_men, peh, gen);
      u2_noun nar = u2_bc(wir_r, u2_nul, nip);
      u2_noun ret;

      if ( u2_nul != gus ) {
        if ( u2_no == u2_sing(nip, u2_t(gus)) ) {
          return u2_bl_bail(wir_r, c3__exit);
        }
      }
      ret = _snub(wir_r, van, sut, peh, t_men, gen, nar);

      u2_rz(wir_r, nar);
      return ret;
    }
#endif
  }
Beispiel #20
0
/* _sh_good(): verify payload integrity in core.
*/
static u2_flag
_sh_good(u2_noun cor,
         u2_noun xip)
{
#if 1
  return u2_yes;    //  Good!  Ja!  Everything good!
#else
  while ( 1 ) {
    u2_noun bat = u2_h(u2_t(xip));
    u2_noun pet = u2_t(u2_t(xip));

    if ( u2_no == u2_sing(bat, u2_t(cor)) ) {
      {
        char *cos_c = u2_ho_cstring(xip);

        printf("sh: cos_c: %s\n", cos_c);
      }
      c3_assert(0);
      u2_ho_warn_here();
      return u2_no;
    }
    else {
      if ( _0 == pet ) {
        return u2_yes;
      } else {
        u2_atom axe = u2_h(pet);
        u2_noun nub = u2_frag(axe, cor);

        if ( u2_none == nub ) {
          return u2_no;
        } else {
          cor = nub;
          xip = u2_t(pet);
          continue;
        }
      }
    }
  }
#endif
}
/* internals
*/
  static u2_noun                                                  //  transfer
  _tock_in(u2_wire wir_r,
           u2_noun van,                                           //  retain
           u2_noun sut,                                           //  retain
           u2_noun peh,                                           //  retain
           u2_noun mur,                                           //  retain
           u2_noun men)                                           //  retain
  {
    if ( u2_no == u2_dust(men) ) {
      return u2_bc(wir_r, u2_nul, u2_nul);
    }
    else {
      u2_noun i_men  = u2_h(men);
      u2_noun pi_men = u2_h(i_men);
      u2_noun qi_men = u2_t(i_men);
      u2_noun t_men  = u2_t(men);
      u2_noun geq    = j2_mcy(Pt6, ut, tack)(wir_r, van, pi_men, peh, mur);
      u2_noun p_geq  = u2_h(geq);
      u2_noun q_geq  = u2_t(geq);
      u2_noun mox    = _tock_in(wir_r, van, sut, peh, mur, t_men);
      u2_noun p_mox  = u2_h(mox);
      u2_noun q_mox  = u2_t(mox);
      u2_noun ret;

      ret = u2_bc(wir_r,
                  ( (u2_nul == p_mox)
                      ? u2_bc(wir_r, u2_nul, u2_rx(wir_r, p_geq))
                      : (u2_no == u2_sing(p_geq, u2_t(p_mox)))
                        ? u2_bl_bail(wir_r, c3__exit)
                        : u2_rx(wir_r, p_mox) ),
                  u2_bc(wir_r, u2_bc(wir_r, u2_rx(wir_r, q_geq),
                                            u2_rx(wir_r, qi_men)),
                               u2_rx(wir_r, q_mox)));

      u2_rz(wir_r, mox);
      u2_rz(wir_r, geq);
      return ret;
    }
  }
Beispiel #22
0
  static u2_noun
  _fuse_repo(u2_wire wir_r,
             u2_noun van,
             u2_noun sut,
             u2_noun ref,
             u2_noun bix)
  {
    u2_noun rep = j2_mcy(Pt6, ut, repo)(wir_r, van, sut);
    u2_noun ret = _fuse_in(wir_r, van, rep, ref, bix);

    if ( u2_yes == u2_sing(ret, rep) ) {
      if ( c3__void == rep ) {
        return c3__void;
      } else {
        u2_rz(wir_r, rep);
        return u2_rx(wir_r, sut);
      }
    } else {
      u2_rz(wir_r, rep);
      return ret;
    }
  }
Beispiel #23
0
/* _unix_desk_sync_into(): sync external changes to desk.
*/
static void
_unix_desk_sync_into(u2_noun  who,
                     u2_noun  hox, 
                     u2_noun  syd, 
                     u2_udir* dir_u)
{
  u2_noun xun, bur, doz, fav, pax;

  xun = _unix_dir_arch(dir_u);
  bur = _unix_desk_peek(u2k(who), hox, syd, u2k(u2A->wen));

  if ( u2_no == u2_sing(xun, bur) ) {
    doz = u2_dc("cyst", xun, bur);
    pax = u2nq(c3__gold, c3__sync, u2k(u2A->sen), u2_nul);
    fav = u2nq(c3__into, who, syd, u2nc(u2_yes, doz));

    u2_reck_plan(u2A, pax, fav);
  } 
  else {
    u2z(xun); u2z(bur);
  }
}
Beispiel #24
0
/* _unix_desk_sync_ergo(): sync desk changes to unix.
*/
static void
_unix_desk_sync_ergo(u2_noun  who,
                     u2_noun  hox, 
                     u2_noun  syd, 
                     u2_noun  lok,
                     u2_uhot* hot_u) 
{
  u2_udir** dir_u = _unix_pdir(&(hot_u->dir_u), syd);
  u2_noun   xun;

#if 0
  uL(fprintf(uH, "ergo %s %s %s\n", u2_cr_string(hox),
                                    u2_cr_string(syd),
                                    u2_cr_string(lok)));
#endif

  if ( !*dir_u ) {
    *dir_u = malloc(sizeof(u2_udir));

    xun = u2nc(u2_no, u2_nul);
    _unix_dir_forge(*dir_u, &(hot_u->dir_u), u2k(syd));
  } else {
    xun = _unix_dir_arch(*dir_u);
  }

  {
    u2_noun bur = _unix_desk_peek(who, hox, syd, lok);

    if ( u2_no == u2_sing(xun, bur) ) {
      u2_noun doz = u2_dc("cyst", bur, xun);

      _unix_desk_sync_soba(*dir_u, doz);
    }
    else {
      u2z(xun); u2z(bur);
    }
  }
}
Beispiel #25
0
/* _ds_mate(): u2_yes iff `xip` binds to `cor`.
*/
static u2_bean
_ds_mate(u2_noun xip,                                             //  retain
         u2_noun cor)                                             //  retain
{
  u2_noun dac, bat, pet;

  u2_as_trel(xip, &dac, &bat, &pet);

  //  Very important for performance that we mate top-down.
  //  Reason: duplicates are much more common in shallower
  //  batteries, and duplicate comparison is always slow.
  //
  if ( u2_nul != pet ) {
    u2_noun axe = u2_h(pet);
    u2_noun led = u2_t(pet);
    u2_noun ruc = u2_frag(axe, cor);

    if ( (u2_none == ruc) || (u2_no == _ds_mate(led, ruc)) ) {
      return u2_no;
    }
  }

  return u2_sing(bat, u2_h(cor));
}
Beispiel #26
0
/* mask
*/
  u2_noun                                                         //  produce
  j2_mcx(Pt5, mask, fun)(u2_wire wir_r,
                         u2_noun bud,                             //  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 iq_tub = u2_h(q_tub);

      while ( u2_yes == u2_dust(bud) ) {
        if ( u2_yes == u2_sing(u2_h(bud), iq_tub) ) {
          return _next(wir_r, tub);
        }
        bud = u2_t(bud);
      }
      return _fail(wir_r, tub);
    }
  }
Beispiel #27
0
/* _nock_hint(): hint with code, data, subject, formula.  nock/mink.
*/
static u2_noun                                                    //  produce
_nock_hint(u2_noun  zep,                                          //  transfer
           u2_noun  hod,                                          //  transfer
           u2_noun  bus,                                          //  transfer
           u2_noun  nex,                                          //  transfer
           u2_bean* pon)
{
    u2_noun pro;

    switch ( zep ) {
    default:
        u2z(zep);
        u2z(hod);
        return pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);

    case c3__lose:
    case c3__yelp:
    case c3__bean:
    case c3__mean:
    case c3__spot: {
        u2_noun tax = u2_wire_tax(u2_Wire);
        u2_noun tac = u2nc(zep, hod);

#if 0
        if ( c3__spot == zep ) {
            printf("spot %d/%d : %d/%d\n",
                   u2h(u2h(u2t(hod))),
                   u2t(u2h(u2t(hod))),
                   u2h(u2t(u2t(hod))),
                   u2t(u2t(u2t(hod))));
        }
#endif
        u2_wire_tax(u2_Wire) = u2nc(tac, tax);
        {
            pro = pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);
        }
        tax = u2k(tax);
        u2z(u2_wire_tax(u2_Wire));
        u2_wire_tax(u2_Wire) = tax;

        return pro;
    }

    case c3__slog: {
        u2_tx_sys_bit(u2_Wire, u2_yes);
        u2_tx_slog(u2_Wire, hod);
        u2_tx_sys_bit(u2_Wire, u2_no);

        u2z(hod);
        return pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);
    }

    case c3__mine: {
        pro = pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);

        if ( !pon || (u2_no != *pon) ) {
            u2_tx_sys_bit(u2_Wire, u2_yes);
            pro = u2_ds_mine(u2_Wire, hod, pro);
            u2_tx_sys_bit(u2_Wire, u2_no);
        }
        u2z(hod);
        return pro;
    }

    case c3__germ: {
        pro = pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);

        if ( u2_yes == u2_sing(pro, hod) ) {
            u2z(pro);
            return hod;
        } else {
            u2z(hod);
            return pro;
        }
    }

    case c3__fast: {
        pro = pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);

        if ( !pon || (u2_no != *pon) ) {
            u2_noun p_hod, q_hod, r_hod;

            /* XX: translate hod to old clue form.
            */
            if ( u2_no == u2_as_trel(hod, &p_hod, &q_hod, &r_hod) ) {
                u2z(hod);
                return pro;
            }
            else {
                u2_noun xod;

                if ( u2_yes == u2_dust(q_hod) &&
                        (_1 == u2_h(q_hod)) &&
                        (_0 == u2_t(q_hod)) ) {
                    q_hod = 0;
                }
                xod = u2_rt(u2_Wire, u2k(q_hod),
                            u2k(p_hod),
                            u2k(r_hod));
                u2z(hod);
                hod = xod;
            }
            u2_tx_sys_bit(u2_Wire, u2_yes);
            pro = u2_ds_mine(u2_Wire, hod, pro);
            u2_tx_sys_bit(u2_Wire, u2_no);
        }
        u2z(hod);
        return pro;
    }

    case c3__memo: {
        u2z(hod);
        {
            pro = u2_rl_find_cell(u2_Wire, 0, bus, nex);

            if ( pro != u2_none ) {
                u2_tx_did_fin(u2_Wire, 1);
                u2z(bus);
                u2z(nex);

                return pro;
            } else {
                u2_noun sav;

                pro = pon ? _nock_mool(u2k(bus), u2k(nex), pon)
                      : _nock_cool(u2k(bus), u2k(nex));

                if ( !pon || (u2_no != *pon) ) {
                    u2_tx_sys_bit(u2_Wire, u2_yes);
                    sav = u2_rl_save_cell(u2_Wire, 0, bus, nex, pro);
                    u2_tx_sys_bit(u2_Wire, u2_no);

                    u2_tx_did_pod(u2_Wire, 1);
                    u2_tx_did_fin(u2_Wire, 1);
                }
                else sav = pro;

                u2z(bus);
                u2z(nex);
                return sav;
            }
        }
    }

    case c3__ping: {
        u2_tx_sys_bit(u2_Wire, u2_yes);
        u2_tx_did_act(u2_Wire, hod);
        u2_tx_sys_bit(u2_Wire, u2_no);
        u2z(hod);

        return pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);
    }

    case c3__live: {
        u2_bean qox;

        u2_tx_sys_bit(u2_Wire, u2_yes);
        qox = u2_tx_task_in(u2_Wire, hod);
        u2_tx_sys_bit(u2_Wire, u2_no);

        u2z(hod);
        if ( u2_no == qox ) {
            return pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);
        } else {
            pro = pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);

            u2_tx_task_out(u2_Wire);
            return pro;
        }
    }

    case c3__sole: {
        u2z(hod);
        {
            pro = pon ? _nock_mool(bus, nex, pon) : _nock_cool(bus, nex);

            if ( u2_none == pro ) {
                return u2_none;
            }
            else if ( !pon || (u2_no != *pon) ) {
                u2_noun nuu;

                u2_tx_sys_bit(u2_Wire, u2_yes);
                nuu = u2_rl_uniq(u2_Wire, pro);
                u2_tx_sys_bit(u2_Wire, u2_no);

                u2_tx_did_fin(u2_Wire, 1);
                if ( nuu == pro ) {
                    u2_tx_did_pod(u2_Wire, 1);
                }
            }
            return pro;
        }
    }
    }
}
Beispiel #28
0
/* hill_boot(): create the hill engine.
*/
struct hill_state*                                                //  produce
hill_boot(void)
{
  struct hill_state* hil_h = malloc(sizeof(struct hill_state));
  u2_ray wir_r;

  u2_boot();
  wir_r = u2_wr_init(c3__rock, u2_ray_of(0, 0), u2_ray_of(1, 0));

  Hill = hil_h;
  Hill->wir_r = wir_r;
  Hill->soa = u2_none;
  Hill->sob = u2_none;
  Hill->soc = u2_none;

  /* Mint the shoes.  Impeccable memory practices.
  */
  {
    u2_noun soa = u2_none;
    u2_noun sob = u2_none;
    u2_noun soc = u2_none;

    do {
      /* Boot shoe A.
      */
      if ( u2_no == u2_rl_leap(wir_r, c3__rock) ) {
        c3_assert(0);
      }
      u2_bx_boot(wir_r);
      {
        u2_ray  kit_r = u2_bl_open(wir_r);

        if ( u2_bl_set(wir_r) ) {
          u2_bl_done(wir_r, kit_r);
          u2_rl_fall(wir_r);
          fprintf(stderr, "{no boot, a}\n");
          break;
        }
        else {
          soa = _hill_z_boot(wir_r, FileA);
          u2_bl_done(wir_r, kit_r);
          u2_bx_spot(wir_r, u2_nul);
          u2_bx_show(wir_r);
        }
      }
      fprintf(stderr, "{cold boot: %s, with %s jets: %x}\n", 
          FileA, FileZ, u2_mug(soa));
      Hill->soa = u2_rl_take(u2_wire_bas_r(wir_r), soa);
      u2_rl_fall(wir_r);

      /* Boot shoe B.
      */
      if ( u2_no == u2_rl_leap(wir_r, c3__rock) ) {
        c3_assert(0);
      }
      u2_bx_boot(wir_r);
      {
        u2_ray  kit_r = u2_bl_open(wir_r);

        if ( u2_bl_set(wir_r) ) {
          u2_bl_done(wir_r, kit_r);
          u2_rl_fall(wir_r);
          fprintf(stderr, "{no boot, b}\n");
          break;
        }
        else {
          sob = _hill_a_boot(wir_r, soa, FileB);
          u2_bl_done(wir_r, kit_r);

          u2_bx_spot(wir_r, u2_nul);
          u2_bx_show(wir_r);
        }
      }
      fprintf(stderr, "{warm boot: %s, with %s: %x}\n", 
          FileB, FileA, u2_mug(sob));
      Hill->sob = u2_rl_take(u2_wire_bas_r(wir_r), sob);
      u2_rl_fall(wir_r);

      /* Boot shoe C.
      */
      if ( u2_no == u2_rl_leap(wir_r, c3__rock) ) {
        c3_assert(0);
      }
      u2_bx_boot(wir_r);
      {
        u2_ray  kit_r = u2_bl_open(wir_r);

        if ( u2_bl_set(wir_r) ) {
          u2_bl_done(wir_r, kit_r);
          u2_rl_fall(wir_r);
          fprintf(stderr, "{no boot, c}\n");
          u2_bx_show(wir_r);
          break;
        }
        else {
          soc = _hill_b_eyre(wir_r, soa, sob, FileC);
          u2_bl_done(wir_r, kit_r);

          u2_bx_spot(wir_r, u2_nul);
          u2_bx_show(wir_r);
        }
      }
      fprintf(stderr, "{last boot: %s, with %s: %x}\n", 
          FileC, FileB, u2_mug(soc));
      Hill->soc = u2_rl_take(u2_wire_bas_r(wir_r), soc);
      u2_rl_fall(wir_r);

      /* Testing basics of soc.
      */
      printf("testing eyre...\n");
      {
        u2_noun foo = u2_rl_string(wir_r, "|!(a=@ (dec a))");
        u2_noun bar = u2_nk_nock(wir_r, foo, Hill->soc);

        if ( u2_none == bar ) {
          printf("no bar\n");
        }
        else {
          u2_noun moo = u2_nk_nock(wir_r, _0, bar);
            
          if ( u2_none == moo ) {
            printf("no moo\n");
          } else {
            u2_noun zor = u2_nk_mung(wir_r, moo, 13);

            u2_err(wir_r, "zor", zor);
          }
        }
      }
      printf("tested.\n");

#if 1
      {
        u2_noun soa = Hill->soa;
        u2_noun sob = Hill->sob;
        u2_noun dat = Hill->soc;
        u2_noun pak, bag;

        fprintf(stderr, "jam test: jam\n");
        u2_bx_boot(wir_r);
        pak = _hill_b_jam(wir_r, soa, sob, dat);
        u2_bx_show(wir_r);

        fprintf(stderr, "jam test: %d bits\n", u2_met(0, pak));
        u2_ux_write(wir_r, pak, "watt/264", "noun");

        fprintf(stderr, "jam test: cue\n");
        u2_bx_boot(wir_r);
        bag = _hill_b_cue(wir_r, soa, sob, pak);
        u2_bx_show(wir_r);

        if ( u2_yes == u2_sing(bag, dat) ) {
          fprintf(stderr, "jam test: match\n");
        } else {
          fprintf(stderr, "jam test: NO MATCH\n");
        }
      }
#endif
      return Hill;
    } while (0);

    free(Hill);
    return 0;
  }
}
/* functions
*/
  u2_weak                                                         //  transfer
  j2_mcc(Pt4, by, uni)(u2_wire wir_r,
                       u2_noun a,                                 //  retain
                       u2_noun b)                                 //  retain
  {
    if ( u2_nul == a ) {
      return u2_rx(wir_r, b);
    }
    else if ( u2_nul == b ) {
      return u2_rx(wir_r, a);
    }
    else {
      u2_noun l_a, n_a, r_a, lr_a, p_n_a, q_n_a;
      u2_noun l_b, n_b, r_b, lr_b, p_n_b, q_n_b;

      if ( (u2_no == u2_as_cell(a, &n_a, &lr_a)) ) {
        return u2_bl_bail(wir_r, c3__exit);
      }
      else if ( (u2_no == u2_as_cell(b, &n_b, &lr_b)) ) {
        return u2_bl_bail(wir_r, c3__exit);
      }
      else if ( (u2_no == u2_as_cell(n_a, &p_n_a, &q_n_a)) ) {
        return u2_bl_bail(wir_r, c3__exit);
      }
      else if ( (u2_no == u2_as_cell(n_b, &p_n_b, &q_n_b)) ) {
        return u2_bl_bail(wir_r, c3__exit);
      }
      else if ( u2_no == u2_as_cell(lr_a, &l_a, &r_a) ) {
        return u2_bl_bail(wir_r, c3__exit);
      }
      else if ( u2_no == u2_as_cell(lr_b, &l_b, &r_b) ) {
        return u2_bl_bail(wir_r, c3__exit);
      }
      else if ( u2_yes == j2_mbc(Pt3, vor)(wir_r, p_n_a, p_n_b) ) {
        if ( u2_yes == u2_sing(p_n_a, p_n_b) ) {
          return u2_rt(wir_r, u2_rx(wir_r, n_b),
                              j2_mcc(Pt4, by, uni)(
                                wir_r, u2_rx(wir_r, l_a), u2_rx(wir_r, l_b)),
                              j2_mcc(Pt4, by, uni)(
                                wir_r, u2_rx(wir_r, r_a), u2_rx(wir_r, r_b)));
        }
        else if ( u2_yes == j2_mbc(Pt3, hor)(wir_r, p_n_b, p_n_a) ) {
          return j2_mcc(Pt4, by, uni)(
            wir_r,
            u2_rt(wir_r,
                  u2_rx(wir_r, n_a),
                  j2_mcc(Pt4, by, uni)(wir_r,
                                      u2_rx(wir_r, l_a),
                                      u2_rt(wir_r,
                                            u2_rx(wir_r, n_b),
                                            u2_rx(wir_r, l_b),
                                            u2_rx(wir_r, u2_nul))),
                  u2_rx(wir_r, r_a)),
            u2_rx(wir_r, r_b));
        }
        else {
          return j2_mcc(Pt4, by, uni)(
            wir_r,
            u2_rt(wir_r,
                  u2_rx(wir_r, n_a),
                  u2_rx(wir_r, l_a),
                  j2_mcc(Pt4, by, uni)(wir_r,
                                      u2_rx(wir_r, r_a),
                                      u2_rt(wir_r,
                                            u2_rx(wir_r, n_b),
                                            u2_rx(wir_r, u2_nul),
                                            u2_rx(wir_r, r_b)))),
            u2_rx(wir_r, l_b));
        }
      }
      else if ( u2_yes == u2_sing(p_n_b, p_n_a) ) {
        return u2_rt(
          wir_r,
          u2_rx(wir_r, n_b),
          j2_mcc(Pt4, by, uni)(wir_r, u2_rx(wir_r, r_b), u2_rx(wir_r, r_a)),
          j2_mcc(Pt4, by, uni)(wir_r, u2_rx(wir_r, l_b), u2_rx(wir_r, l_a)));
      }
      else if ( u2_yes == j2_mbc(Pt3, hor)(wir_r, p_n_a, p_n_b) ) {
        return j2_mcc(Pt4, by, uni)(
          wir_r,
          u2_rx(wir_r, r_a),
          u2_rt(wir_r,
                u2_rx(wir_r, n_b),
                j2_mcc(Pt4, by, uni)(wir_r,
                                    u2_rt(wir_r,
                                          u2_rx(wir_r, n_a),
                                          u2_rx(wir_r, l_a),
                                          u2_rx(wir_r, u2_nul)),
                                    u2_rx(wir_r, l_b)),
                u2_rx(wir_r, r_b)));
      }
      else {
        return j2_mcc(Pt4, by, uni)(
          wir_r,
          u2_rx(wir_r, l_a),
          u2_rt(wir_r,
                u2_rx(wir_r, n_b),
                u2_rx(wir_r, l_b),
                j2_mcc(Pt4, by, uni)(wir_r,
                                    u2_rx(wir_r, r_b),
                                    u2_rt(wir_r,
                                          u2_rx(wir_r, n_a),
                                          u2_rx(wir_r, u2_nul),
                                          u2_rx(wir_r, r_a)))));
      }
    }
  }
Beispiel #30
0
  static u2_noun                                                  //  produce
  _mint_in(u2_wire wir_r, 
           u2_noun van,                                           //  retain
           u2_noun sut,                                           //  retain
           u2_noun gol,                                           //  retain
           u2_noun gen)                                           //  retain
  {
    u2_noun p_gen, q_gen, r_gen;
    u2_noun ret;

    if ( (c3__void == sut) && 
         !((u2_yes == u2_dust(gen)) && (c3__zpcb == u2_h(gen))) )
    {
      if ( (u2_no == _mint_vet(wir_r, van))
           || ((u2_yes == u2_dust(gen)) && 
               ((c3__zpfs == u2_h(gen)) || (c3__zpzp == u2_h(gen)))) )
      {
        return u2_bt(wir_r, c3__void, _0, _0);
      }
      else {
        return u2_bl_error(wir_r, "mint-vain");
      }
    }

    if ( u2_no == u2_dust(gen) ) {
      u2_noun ter = u2_frag(u2_cw_con_2, van);
      u2_noun rex = j2_mcy(Pt6, ap, open)(wir_r, ter, gen);

      ret = _mint_in(wir_r, van, sut, gol, rex);
      u2_rl_lose(wir_r, rex);

      return ret;
    } 
    else if ( u2_yes == u2_dust(u2_h(gen)) ) {
      _mint_used(wir_r);
      {
        u2_noun hed = _mint_in(wir_r, van, sut, c3__noun, u2_h(gen));
        u2_noun tal = _mint_in(wir_r, van, sut, c3__noun, u2_t(gen));
        u2_noun typ = j2_mby(Pt6, cell)(wir_r, u2_h(hed), u2_h(tal));

        ret = u2_bc
          (wir_r,
           _mint_nice(wir_r, van, gol, typ),
           j2_mby(Pt6, cons)(wir_r, u2_t(hed), u2_t(tal)));

        u2_rl_lose(wir_r, hed);
        u2_rl_lose(wir_r, tal);

        return ret;
      }
    } else switch ( u2_h(gen) ) {
      default: {
        u2_noun ter = u2_frag(u2_cw_con_2, van);
        u2_noun rex = j2_mcy(Pt6, ap, open)(wir_r, ter, gen);

        if ( u2_yes == u2_sing(rex, gen) ) {
#if 1
          u2_noun zix = j2_mcy(Pt6, ut, shep)
                (wir_r, van, "gene", 'q', u2_rx(wir_r, gen));

          u2_bl_push(wir_r, u2_bc(wir_r, c3__mean, zix));
          return u2_bl_error(wir_r, "mint-open");
#else
          u2_err(wir_r, "h", u2_h(gen));
          return u2_bl_bail(wir_r, c3__fail);
#endif
        }
        ret = _mint_in(wir_r, van, sut, gol, rex);
        u2_rl_lose(wir_r, rex);

        return ret;
      }
      
      case c3__wtcn: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun vol = _mint_corn(wir_r, van, sut, q_gen);
        u2_noun axe = _mint_coke(wir_r, vol);
        u2_noun wam = j2_mcy(Pt6, ut, play)(wir_r, van, sut, p_gen);

        ret = u2_bc
          (wir_r,
           _mint_nice(wir_r, van, gol, _mint_flag(wir_r)),
           j2_mcy(Pt6, ut, fish)(wir_r, van, wam, axe));

        u2_rl_lose(wir_r, axe);
        u2_rl_lose(wir_r, wam);
        return ret;
      }
      case c3__wtcl: u2_bi_trel(wir_r, u2_t(gen), &p_gen, &q_gen, &r_gen);
      _mint_used(wir_r);
      {
        u2_noun bol = _mint_flag(wir_r);
        u2_noun nor = _mint_in(wir_r, van, sut, bol, p_gen);
        u2_noun fex = j2_mcy(Pt6, ut, gain)(wir_r, van, sut, p_gen);
        u2_noun wux = j2_mcy(Pt6, ut, lose)(wir_r, van, sut, p_gen);
        u2_noun duy = (c3__void == fex)
                        ? ( (c3__void == wux)
                             ?  u2_bc(wir_r, _0, _0)
                             :  u2_bc(wir_r, _1, _1) )
                        : ( (c3__void == wux)
                            ?  u2_bc(wir_r, _1, _0)
                            :  u2_rx(wir_r, u2_t(nor)) );
        u2_noun hiq = _mint_in(wir_r, van, fex, gol, q_gen);
        u2_noun ran = _mint_in(wir_r, van, wux, gol, r_gen);

        ret = u2_bc
          (wir_r, j2_mby(Pt6, fork)(wir_r, u2_h(hiq), u2_h(ran)),
                  _mint_cond(wir_r, duy, 
                                    u2_rx(wir_r, u2_t(hiq)),
                                    u2_rx(wir_r, u2_t(ran))));

        u2_rl_lose(wir_r, ran);
        u2_rl_lose(wir_r, hiq);
        u2_rl_lose(wir_r, nor);
        u2_rl_lose(wir_r, wux);
        u2_rl_lose(wir_r, fex);
        u2_rl_lose(wir_r, bol);

        return ret;
      }
      case c3__clhp: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun hed = _mint_in(wir_r, van, sut, c3__noun, p_gen);
        u2_noun tal = _mint_in(wir_r, van, sut, c3__noun, q_gen);
        u2_noun typ = j2_mby(Pt6, cell)(wir_r, u2_h(hed), u2_h(tal));

        ret = u2_bc
          (wir_r,
           _mint_nice(wir_r, van, gol, typ),
           j2_mby(Pt6, cons)(wir_r, u2_t(hed), u2_t(tal)));

        u2_rl_lose(wir_r, hed);
        u2_rl_lose(wir_r, tal);

        return ret;
      }
      case c3__dtts: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun typ = _mint_nice(wir_r, van, gol, _mint_flag(wir_r));

        return u2_bc
          (wir_r, 
           typ,
           u2_bt(wir_r, _5, _mint_corn(wir_r, van, sut, p_gen),
                            _mint_corn(wir_r, van, sut, q_gen)));
      }
      case c3__dtwt: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun typ = _mint_nice(wir_r, van, gol, _mint_flag(wir_r));

        return u2_bc
          (wir_r, 
           typ,
           u2_bc(wir_r, _3, _mint_corn(wir_r, van, sut, p_gen)));
      }
      case c3__dtkt: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun tom = c3__noun;
        u2_noun sam = _mint_in(wir_r, van, sut, tom, p_gen);

        ret = u2_bc
          (wir_r, 
           _mint_nice(wir_r, van, gol, tom),
           u2_bc(wir_r, _11, u2_rx(wir_r, u2_t(sam))));
        
        u2_rz(wir_r, sam);
        return ret;
      }
      case c3__dtls: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun tom = u2_bc(wir_r, c3__atom, u2_blip);
        u2_noun sam = _mint_in(wir_r, van, sut, tom, p_gen);

        ret = u2_bc
          (wir_r, 
           _mint_nice(wir_r, van, gol, tom),
           u2_bc(wir_r, _4, u2_rx(wir_r, u2_t(sam))));
        
        u2_rz(wir_r, sam);
        return ret;
      }
      case c3__dtsg: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun boc = (u2_no == u2_stud(q_gen)) 
                        ? c3__noun
                        : u2_bc(wir_r, c3__atom, u2_rx(wir_r, p_gen));
        u2_noun typ = j2_mby(Pt6, cube)(wir_r, q_gen, boc);
        u2_noun ret = 
            u2_bc(wir_r,
                  _mint_nice(wir_r, van, gol, typ),
                  u2_bc(wir_r, _1, u2_rx(wir_r, q_gen)));

        u2_rz(wir_r, boc);
        return ret;
      }
      case c3__dttr: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        return u2_bc
          (wir_r, 
           _mint_nice(wir_r, van, gol, c3__noun),
           u2_bt(wir_r, _2, _mint_corn(wir_r, van, sut, p_gen),
                            _mint_corn(wir_r, van, sut, q_gen)));
      }
      case c3__dtpt: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun typ = j2_mcy(Pt6, ut, play)(wir_r, van, sut, gen);
        u2_noun ret = 
            u2_bc(wir_r,
                  _mint_nice(wir_r, van, gol, typ),
                  u2_bc(wir_r, _1, u2_rx(wir_r, q_gen)));

        return ret;
      }
      case c3__ktdt: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun wit = j2_mcy(Pt6, ut, play)(wir_r, van, sut, p_gen);
        u2_noun nep = j2_mcy(Pt6, ut, snap)(wir_r, van, wit, q_gen);
        u2_noun ret = _mint_in(wir_r, van, sut, gol, nep);

        u2_rz(wir_r, nep);
        u2_rz(wir_r, wit);
        return ret;
      }
      case c3__ktbr: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun ryd = _mint_in(wir_r, van, sut, gol, p_gen);
        u2_noun tyf = j2_mcy(Pt6, ut, wrap)(wir_r, van, u2_h(ryd), c3__iron);
        u2_noun pro = u2_bc(wir_r, tyf, u2_rx(wir_r, u2_t(ryd)));

        u2_rz(wir_r, ryd);
        return pro;
      }
      case c3__ktpm: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun ryd = _mint_in(wir_r, van, sut, gol, p_gen);
        u2_noun tyf = j2_mcy(Pt6, ut, wrap)(wir_r, van, u2_h(ryd), c3__zinc);
        u2_noun pro = u2_bc(wir_r, tyf, u2_rx(wir_r, u2_t(ryd)));

        u2_rz(wir_r, ryd);
        return pro;
      }
      case c3__ktwt: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun ryd = _mint_in(wir_r, van, sut, gol, p_gen);
        u2_noun tyf = j2_mcy(Pt6, ut, wrap)(wir_r, van, u2_h(ryd), c3__lead);
        u2_noun pro = u2_bc(wir_r, tyf, u2_rx(wir_r, u2_t(ryd)));

        u2_rz(wir_r, ryd);
        return pro;
      }
      case c3__ktts: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun vat = _mint_in(wir_r, van, sut, gol, q_gen);
     
        ret = u2_bc
          (wir_r,
           u2_bt(wir_r, c3__face,
                        u2_rx(wir_r, p_gen), 
                        u2_rx(wir_r, u2_h(vat))),
           u2_rx(wir_r, u2_t(vat)));

        u2_rl_lose(wir_r, vat);
        return ret;
      }
      case c3__ktsg: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun nef = _mint_in(wir_r, van, sut, gol, p_gen);
        u2_noun p_nef = u2_h(nef);
        u2_noun q_nef = u2_t(nef);
        u2_noun fom;

        {
          u2_noun cag = j2_mcy(Pt6, ut, burn)(wir_r, van, sut);
          u2_noun wim = u2_cn_moch(cag, u2k(q_nef));

          if ( 0 == u2h(wim) ) {
            fom = u2nc(1, u2k(u2t(wim)));
          } else {
            fom = u2k(q_nef);
          }
          u2z(wim);
        }
        ret = u2_bc(wir_r, u2_rx(wir_r, p_nef), fom);
 
        u2_rz(wir_r, nef);
        return ret;
      }
      case c3__ktls: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun hif = j2_mcy(Pt6, ut, play)(wir_r, van, sut, p_gen);
        u2_noun zel = _mint_in(wir_r, van, sut, hif, q_gen);
        u2_noun ret = u2_bc(wir_r, hif, u2_rx(wir_r, u2_t(zel)));

        u2_rz(wir_r, zel);
        return ret;
      }
      case c3__tsgr: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun fid = _mint_in(wir_r, van, sut, c3__noun, p_gen);
        u2_noun p_fid = u2_h(fid);
        u2_noun q_fid = u2_t(fid);
        u2_noun dov = _mint_in(wir_r, van, p_fid, gol, q_gen);
        u2_noun p_dov = u2_h(dov);
        u2_noun q_dov = u2_t(dov);

        ret = u2_bc
          (wir_r, u2_rx(wir_r, p_dov), 
                  j2_mbc(Pt6, comb)(wir_r, q_fid, q_dov));

        u2_rl_lose(wir_r, fid); 
        u2_rl_lose(wir_r, dov);
        return ret;
      }
      case c3__cnts: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun sec = j2_mcy(Pt6, ut, seek)(wir_r, van, sut, c3__read, p_gen);
        u2_noun lar = _mint_foil(wir_r, sec);
        u2_noun p_lar = u2_h(lar);
        u2_noun q_lar = u2_t(lar);
        u2_noun pq_lar = u2_h(q_lar);
        u2_noun qq_lar = u2_t(q_lar);
        u2_noun mew = j2_mcy(Pt6, ut, swab)(wir_r, van, sut, qq_lar, q_gen);
        u2_noun yom = _mint_edit
          (wir_r, van, sut, mew, p_lar, u2_rx(wir_r, qq_lar), u2_nul);
        u2_noun p_yom = u2_h(yom);
        u2_noun q_yom = u2_t(yom);
        u2_noun ret = u2_bc
          (wir_r, _mint_nice(wir_r, van, gol, u2_rx(wir_r, p_yom)),
                  (_0 == pq_lar) ? u2_rx(wir_r, q_yom)
                                 : u2_bt(wir_r, _9,
                                                u2_rx(wir_r, pq_lar),
                                                u2_rx(wir_r, q_yom)));
                  
        u2_rz(wir_r, yom);
        u2_rz(wir_r, mew);
        u2_rz(wir_r, lar);

        return ret;
      }
      case c3__pmcl: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun ruf = u2_bt
          (wir_r, c3__clhp, 
                  u2_bc(wir_r, u2_nul, _1),
                  u2_rx(wir_r, p_gen));
        u2_noun ret = _mint_grow(wir_r, van, sut, gol, c3__zinc, ruf, q_gen);

        u2_rz(wir_r, ruf);
        return ret;
      }
      case c3__brcn: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun ruf = u2_bc(wir_r, u2_nul, _1);

        ret = _mint_grow(wir_r, van, sut, gol, c3__gold, ruf, p_gen);
        u2_rz(wir_r, ruf);

        return ret;
      }
      case c3__pmcn: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun ruf = u2_bc(wir_r, u2_nul, _1);

        ret = _mint_grow(wir_r, van, sut, gol, c3__lead, ruf, p_gen);
        u2_rz(wir_r, ruf);

        return ret;
      }
      case c3__pmls: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun ruf = u2_bt
          (wir_r, c3__clhp, 
                  u2_bc(wir_r, u2_nul, _1),
                  u2_rx(wir_r, p_gen));
        u2_noun ret = _mint_grow(wir_r, van, sut, gol, c3__iron, ruf, q_gen);

        u2_rz(wir_r, ruf);
        return ret;
      }
      case c3__sggr: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun hum = _mint_in(wir_r, van, sut, gol, q_gen);
        u2_noun bez;
      
          if ( u2_yes == u2_stud(p_gen) ) {
            bez = u2_rx(wir_r, p_gen);
          } else {
            bez = u2_bc(wir_r, u2_rx(wir_r, u2_h(p_gen)),
                               _mint_corn(wir_r, van, sut, u2_t(p_gen)));
          }
          ret = u2_bc(wir_r, 
                      u2_rx(wir_r, u2_h(hum)),
                      u2_bt(wir_r, _10, bez, u2_rx(wir_r, u2_t(hum))));
        
        u2_rl_lose(wir_r, hum);
        return ret;
      }
      case c3__zpts: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        u2_noun von = u2_bn_molt(wir_r, van, j2_ut_van_vet, u2_no, 0);
        u2_noun sev = _mint_corn(wir_r, von, sut, p_gen);

        u2_rz(wir_r, von);
        return u2_bc(wir_r, c3__noun, u2_bc(wir_r, _1, sev));
      }
      case c3__zpcm: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        return u2_bc
          (wir_r, 
           _mint_nice(wir_r, van, 
                             gol, 
                             j2_mcy(Pt6, ut, play)(wir_r, van, sut, p_gen)),
           u2_bc(wir_r, 1, u2_rx(wir_r, q_gen)));
      }
      case c3__zpcb: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      {
        u2_bl_push(wir_r, u2_bc(wir_r, c3__mean, _mint_loc(wir_r, van, p_gen)));
        {
          u2_noun hum = _mint_in(wir_r, van, sut, gol, q_gen);
          u2_noun bez = u2_bt(wir_r, c3__spot, _1, u2_rx(wir_r, p_gen));

          ret = u2_bc(wir_r, 
                      u2_rx(wir_r, u2_h(hum)),
                      u2_bt(wir_r, _10, bez, u2_rx(wir_r, u2_t(hum))));

          u2_rz(wir_r, hum);
        }
        u2_bl_drop(wir_r);
        return ret;
      }
      case c3__zpcn:
      _mint_used(wir_r);
      {
        u2_noun pet   = u2_bn_hook(wir_r, van, "seed");
        u2_noun p_pet = u2_h(pet);
        u2_noun q_pet = u2_t(pet);
        u2_noun ret;

        ret = u2_bc(wir_r, _mint_nice(wir_r, van, gol, u2_rx(wir_r, p_pet)),
                           u2_bc(wir_r, _1, u2_rx(wir_r, q_pet)));

        u2_rz(wir_r, pet);
        return ret;
      }
      case c3__zpsm: u2_bi_cell(wir_r, u2_t(gen), &p_gen, &q_gen);
      _mint_used(wir_r);
      {
        u2_noun vos   = _mint_in(wir_r, van, sut, c3__noun, q_gen);
        u2_noun zur   = j2_mcy(Pt6, ut, play)(wir_r, van, sut, p_gen);
        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 ret;

        ret = u2_bc(wir_r,
                    _mint_nice(wir_r, van, gol, cig),
                    j2_mby(Pt6, cons)(wir_r, waz, q_vos));

        u2_rz(wir_r, waz);
        u2_rz(wir_r, zur);
        u2_rz(wir_r, vos);

        return ret;
      }
      case c3__zpfs: p_gen = u2_t(gen);
      _mint_used(wir_r);
      {
        if ( u2_yes == _mint_vet(wir_r, van) ) {
          u2_noun zur = j2_mcy(Pt6, ut, play)(wir_r, van, sut, p_gen);
          u2_noun dun = j2_mcy(Pt6, ut, dunq)(wir_r, van, "lost", zur);

          u2_bl_push(wir_r, u2_bc(wir_r, c3__mean, dun));
          return u2_bl_error(wir_r, "mint-lost");
        }
        else {
          return u2_bt(wir_r, c3__void, _0, _0);
        }
      }
      case c3__zpzp:
      _mint_used(wir_r);
      {
        return u2_bt(wir_r, c3__void, _0, _0);
      }
    }
  }