Пример #1
0
  static u2_noun                                                  //  transfer
  _seek_silk_yew(u2_wire wir_r, 
                 u2_noun van,                                     //  retain
                 u2_noun syx,                                     //  retain
                 u2_noun qq_tor)                                  //  retain
  {
    if ( u2_nul == qq_tor ) {
      return u2_nul;
    }
    else {
      u2_noun iqq_tor  = u2_h(qq_tor);
      u2_noun qiqq_tor = u2_t(iqq_tor);
      u2_noun yon      = _seek_silk_yew(wir_r, van, syx, u2_t(qq_tor));

      if ( c3__yew != u2_h(qiqq_tor) ) {
        return yon;
      } else {
        u2_noun nuy = j2_mby(Pt6, look)(wir_r, syx, u2_t(qiqq_tor));

        if ( u2_nul == nuy ) {
          return u2_bl_error(wir_r, "silk");
        }
        else {
          yon = u2_bc(wir_r, u2_rx(wir_r, u2_t(nuy)), yon);
          u2_rz(wir_r, nuy);
          return yon;
        }
      }
    } 
  }
  /* _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;
      }
    }
  }
Пример #3
0
/* functions
*/
  u2_noun                                                         //  produce
  j2_mcx(Pt6, ut, swab)(u2_wire wir_r, 
                        u2_noun van,                              //  retain
                        u2_noun sut,                              //  retain
                        u2_noun men,                              //  retain
                        u2_noun har)                              //  retain
  {
    if ( u2_no == u2_dust(har) ) {
      return u2_nul;
    } else {
      u2_noun i_har = u2_h(har);
      u2_noun t_har = u2_t(har);
      u2_noun pi_har = u2_h(i_har);
      u2_noun qi_har = u2_t(i_har);
      u2_noun roz = j2_mcy(Pt6, ap, rake)(wir_r, pi_har);
      u2_noun peh = j2_mbc(Pt2, flop)(wir_r, roz);
      u2_noun nuk = _snub(wir_r, van, sut, peh, men, qi_har, u2_nul);
      u2_noun ret = u2_bc(wir_r, u2_bc(wir_r, peh, nuk),
                                 j2_mcx(Pt6, ut, swab)
                                    (wir_r, van, sut, men, t_har));

      u2_rz(wir_r, roz);
      return ret;
    }
  }
Пример #4
0
  static u2_noun                                                  //  produce
  _mint_foil(u2_wire wir_r,
             u2_noun pok)                                         //  submit
  {
    u2_noun p_pok = u2_h(pok);
    u2_noun q_pok = u2_t(pok);
    u2_noun ret;

    if ( u2_yes == u2_h(q_pok) ) {
      u2_noun pq_pok = u2_t(q_pok);

      ret = u2_bc(wir_r, 
                  u2_rx(wir_r, p_pok),
                  u2_bc(wir_r, u2_nul,
                               u2_bc(wir_r,
                                     u2_bc(wir_r, 
                                           u2_rx(wir_r, pq_pok),
                                           u2_bt(wir_r, c3__elm, u2_nul, _1)),
                                     u2_nul)));
    }
    else {
      u2_noun pq_pok = u2_h(u2_t(q_pok));
      u2_noun qq_pok = u2_t(u2_t(q_pok));

      ret = u2_bc(wir_r, u2_rx(wir_r, p_pok),
                         u2_bc(wir_r, u2_rx(wir_r, pq_pok),
                                      u2_rx(wir_r, qq_pok)));
    }
    u2_rz(wir_r, pok);
    return ret;
  }
Пример #5
0
  static u2_noun                                                  //  produce
  _play_edit(u2_wire wir_r,
             u2_noun van,                                         //  retain
             u2_noun sut,                                         //  retain
             u2_noun mew,                                         //  retain
             u2_noun rag)                                         //  submit
  {
    while ( 1 ) {
      if ( u2_no == u2_dust(mew) ) {
        return rag;
      } 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 laf = _play_in(wir_r, van, sut, qi_mew);
        u2_noun ruz = j2_mcy(Pt6, ut, tock)(wir_r, van, sut, pi_mew, laf, rag);
   
        u2_rz(wir_r, laf);
        u2_rz(wir_r, rag);
        rag = u2_rx(wir_r, u2_t(ruz));
        u2_rz(wir_r, ruz);

        mew = t_mew;
      }
    }
  }
Пример #6
0
/* functions
*/
  u2_weak                                                         //  transfer
  j2_mcc(Pt4, by, 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);

        if ( u2_no == u2_dust(i_b) ) {
          return u2_bl_bail(wir_r, c3__exit);
        } else {
          u2_noun pi_b = u2_h(i_b);
          u2_noun qi_b = u2_t(i_b);
          u2_noun c;

          if ( u2_none == (c = j2_mcc(Pt4, by, put)(wir_r, a, pi_b, qi_b)) ) {
            return u2_bl_bail(wir_r, c3__exit);
          } else {
            u2_noun d = j2_mcc(Pt4, by, gas)(wir_r, c, t_b);

            u2_rl_lose(wir_r, c);
            return d;
          }
        }
      }
    }
  }
  /* _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;
      }
    }
  }
Пример #8
0
/* 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);
  }
Пример #9
0
/* zuse_test3(): accurate use of a true kernel.
*/
void
zuse_test3(struct zuse_state* fod_f,
           const char*        src_c,
           const char*        arg_c)
{
  u2_wire wir_r = fod_f->wir_r;
  u2_noun src   = u2_ux_read(wir_r, src_c, "watt");

  if ( u2_none == src ) {
    printf("test3: %s: no file\n", src_c);
    u2_bl_bail(wir_r);
  }
  else {
    u2_noun gen = j2_mbc(watt_271, ream)(wir_r, src);

    // u2_err(wir_r, "gene", gen);
    if ( u2_none == gen ) {
      printf("test3: %s: no gene\n", src_c);
      return;
    }
    else {
      u2_noun lof = _zuse_ol_mint(wir_r, fod_f->pit, c3__noun, c3__noun, gen); 

      if ( u2_none == lof ) {
        printf("test: failed\n");
      }
      else {
        printf("::::  ::::  ::::  ::::\n");
        u2_bx_spot(wir_r, u2_nul); 
#if 0
        u2_err(wir_r, "type", u2_h(lof));
        u2_err(wir_r, "tool", u2_t(lof));
#endif
        if ( arg_c ) {
          u2_noun typ = u2_h(lof);
          u2_noun tul = u2_t(lof);
          u2_noun pug = u2_bn_nock(wir_r, _0, tul);
          u2_noun src = u2_rl_string(wir_r, arg_c);
          u2_noun ger = j2_mbc(watt_271, ream)(wir_r, src);
          u2_noun hup = _zuse_ol_mint(wir_r, fod_f->pit, typ, c3__noun, ger);

          if ( (u2_none != hup) && (u2_none != pug) ) {
            u2_weak muf = u2_nk_nock(wir_r, pug, u2_t(hup));

            _zuse_dump_type(wir_r, fod_f->pit, 0, u2_h(hup));
            if ( muf != u2_none ) {
              u2_err(wir_r, 0, muf);
            }
            u2_bx_spot(wir_r, u2_nul);
          }
        }
      }
    }
  }
}
Пример #10
0
  u2_noun                                                         //  produce
  j2_mcx(Pt5, stew, fun)(u2_wire wir_r,
                         u2_noun hel,                             //  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_fly_is_cat(iq_tub) ) {
        return u2_bl_bail(wir_r, c3__fail);
      } else while ( 1 ) {
        if ( u2_no == u2_dust(hel) ) {
          return _fail(wir_r, tub);
        } 
        else {
          u2_noun n_hel, l_hel, r_hel;
          u2_noun pn_hel, qn_hel;
          c3_t    bit_t;

          u2_bi_trel(wir_r, hel, &n_hel, &l_hel, &r_hel);
          u2_bi_cell(wir_r, n_hel, &pn_hel, &qn_hel);

          if ( (u2_no == u2_dust(pn_hel)) ) {
            bit_t = (iq_tub == pn_hel);
          }
          else {
            u2_noun hpn_hel = u2_h(pn_hel);
            u2_noun tpn_hel = u2_t(pn_hel);

            if ( !u2_fly_is_cat(hpn_hel) || !u2_fly_is_cat(tpn_hel) ) {
              return _fail(wir_r, tub);
            }
            else bit_t = (iq_tub >= hpn_hel) && (iq_tub <= tpn_hel);
          }

          if ( bit_t ) {
            return u2_bl_good
              (wir_r, u2_nk_mong(wir_r, qn_hel, u2_rx(wir_r, tub)));
          } else {
            if ( u2_yes == _stew_wor(wir_r, iq_tub, pn_hel) ) {
              hel = l_hel;
            }
            else hel = r_hel;
          }
        }
      }
    }
  }
Пример #11
0
/* u2_bx_bean_print(): print bean stack to FILE *.
*/
void
u2_bx_bean_print(u2_ray  wir_r,
                 FILE *  fil_F,
                 u2_noun zof)                                     //  retain
{
  while ( u2_yes == u2_dust(zof) ) {
    u2_noun i_zof = u2_h(zof);
    u2_noun t_zof = u2_t(zof);

    if ( u2_yes == u2_stud(i_zof) ) {
      _print_term(i_zof, fil_F);
      fprintf(fil_F, "\n");
    } else {
      u2_noun hi_zof = u2_h(i_zof);
      u2_noun ti_zof = u2_t(i_zof);
      u2_weak gol;

      gol = u2_nk_kick(wir_r, ti_zof);
      if ( u2_none == gol ) {
        _print_term(hi_zof, fil_F);
        fprintf(fil_F, ":!\n");
      }
      else {
        u2_noun gal = gol;

        if ( u2_nul == hi_zof ) {
          while ( u2_yes == u2_dust(gal) ) {
            _print_tape(u2_h(gal), fil_F);
            fprintf(fil_F, "\n");
            gal = u2_t(gal);
          }
        }
        else {
          c3_w feq_w = u2_met(3, hi_zof);

          _print_term(hi_zof, fil_F);
          printf(": ");

          while ( u2_yes == u2_dust(gal) ) {
            if ( gal != gol ) {
              _print_space(feq_w + 2, fil_F);
            }
            _print_tape(u2_h(gal), fil_F);
            fprintf(fil_F, "\n");
            gal = u2_t(gal);
          }
        }
        u2_rl_lose(wir_r, gol);
      }
    }
    zof = t_zof;
  }
}
Пример #12
0
/* _hill_z_make_gen(): execute gene against shoe.
*/
static hi_shoz                                                    //  produce
_hill_z_make_gen(u2_wire wir_r,
                 hi_shoz sho,                                     //  retain
                 u2_noun gen)                                     //  retain
{
  u2_noun gam = _hill_z_mint_gen(wir_r, u2_h(sho), c3__noun, gen);
  u2_noun pro = _hill_nock(wir_r, u2_t(sho), u2_t(gam));
  u2_noun ret = u2_bc(wir_r, u2_rx(wir_r, u2_h(gam)), pro);

  u2_rz(wir_r, gam);
  return ret;
}
Пример #13
0
/* _hill_a_make_gen(): execute gene against core.
*/
static hi_shoa                                                    //  produce
_hill_a_make_gen(u2_wire wir_r,
                 hi_shoz soa,                                     //  retain
                 hi_shoa cor,                                     //  retain
                 u2_noun gen)                                     //  retain
{
  u2_noun gam = _hill_a_mint_gen(wir_r, soa, u2_h(cor), c3__noun, gen);
  u2_noun pro = _hill_nock(wir_r, u2_t(cor), u2_t(gam));
  u2_noun ret = u2_bc(wir_r, u2_rx(wir_r, u2_h(gam)), pro);

  u2_rz(wir_r, gam);
  return ret;
}
Пример #14
0
/* functions
*/
  static u2_noun                                                  //  produce
  _flay_roll(u2_wire wir_r,
             u2_noun quz)                                         //  retain
  {
    if ( u2_no == u2_dust(quz) ) {
      return c3__void;
    } else {
      u2_noun voo = _flay_roll(wir_r, u2_t(quz));
      u2_noun oon = j2_mby(Pt6, fork)(wir_r, u2_h(u2_h(quz)), voo);

      u2_rz(wir_r, voo);
      return oon;
    }
  }
Пример #15
0
/* _hill_b_fire(): execute and print expression over pit C (with shoe B).
*/
static void                                                       //  produce
_hill_b_fire(u2_wire     wir_r,
             u2_noun     soa,                                     //  retain
             u2_noun     sob,                                     //  retain
             u2_noun     soc,                                     //  retain
             const c3_c* exp_c,                                   //  retain
             const c3_c* out_c)                                   //  retain
{
  u2_noun txt, gam, som;

  txt = u2_bn_string(wir_r, exp_c);
  gam = _hill_b_mint_txt(wir_r, soa, sob, u2_h(soc), c3__noun, txt);

  _hill_b_print_type(wir_r, soa, sob, 0, 0, u2_h(gam));

  if ( out_c && !strcmp("p", out_c) ) {
    u2_rz(wir_r, txt);
    u2_rz(wir_r, gam);
    return;
  }
  u2_bx_boot(wir_r);
  som = _hill_nock(wir_r, u2_t(soc), u2_t(gam));
  u2_bx_show(wir_r);

  if ( u2_none == som ) {
    fprintf(stderr, "{none}\n");
  }
  else {
    if ( !out_c ) {
      _hill_print_noun(wir_r, 0, 0, som);
    } else if ( !strcmp("w", out_c) ) {
      _hill_print_wall(wir_r, 0, 0, som);
    }
    else if ( !strcmp("t", out_c) ) {
      _hill_print_tape(wir_r, 0, som); printf("\n");
    }
    else if ( !strcmp("d", out_c) ) {
      _hill_print_delm(wir_r, 0, som); printf("\n");
    }
    else if ( !strcmp("e", out_c) ) {
      _hill_print_term(wir_r, 0, som); printf("\n");
    }
    else if ( !strcmp("y", out_c) ) {
      _hill_print_type(wir_r, 0, 0, som);
    }
  }
  u2_rz(wir_r, txt);
  u2_rz(wir_r, gam);
  u2_rz(wir_r, som);
}
Пример #16
0
 static u2_noun                                                  //  transfer
 _seek_silk_fum(u2_noun wir_r,
                u2_noun hey,                                     //  retain
                u2_noun qq_tor)
 {
   if ( u2_nul == qq_tor ) {
     return u2_nul;
   }
   c3_assert(u2_nul != hey);
   return u2_bc
     (wir_r, u2_bc(wir_r, u2_rx(wir_r, u2_h(u2_h(qq_tor))),
                          u2_rx(wir_r, u2_t(u2_h(hey)))),
             _seek_silk_fum(wir_r, u2_t(hey), u2_t(qq_tor)));
 }
Пример #17
0
  static u2_noun                                                  //  retain
  _seek_silk_yaw(u2_noun wir_r,
                 u2_noun hey)                                     //  retain
  {
    u2_atom axe = 0;

    while ( u2_nul != hey ) {
      if ( axe == 0 ) {
        axe = u2_h(u2_h(hey));
      } else if ( axe != u2_h(u2_h(hey)) ) {
        return u2_bl_error(wir_r, "silk");
      }
      hey = u2_t(hey);
    }
  }
Пример #18
0
/* u2_ds_mine(): 
**
**   Register and/or save core.
*/
u2_noun                                                           //  transfer
u2_ds_mine(u2_wire wir_r,
           u2_noun clu,                                           //  retain
           u2_noun cor)                                           //  transfer
{
  u2_noun bas_r = u2_wire_bas_r(wir_r);

  if ( u2_no == u2_dust(cor) ) {
    return cor;
  } else {
    u2_noun pay = u2_t(cor);
    u2_noun bat = u2_h(cor);
    u2_noun pug = u2_cs_find(bas_r, u2_wire_des_r(wir_r), 0, bat);
    u2_noun xip, bat_xip;
    u2_noun gop;

    if ( u2_none == pug ) {
      pug = u2_nul;
    }
    if ( u2_none == (xip = _ds_scan(pug, cor)) ) {
      gop = u2_rc(bas_r, (xip = _ds_chip(wir_r, clu, cor)), u2_rx(bas_r, pug));

      if ( u2_none == gop ) {
        return cor;
      } else {
        bat_xip = u2_h(u2_t(xip));

        // {c3_c* xip_c=u2_ho_cstring(xip); printf("%s\n", xip_c); free(xip_c);}
        gop = u2_cs_save(bas_r, u2_wire_des_r(wir_r), 0, bat_xip, gop);
        u2_rz(bas_r, gop);
      }
    }
    else bat_xip = u2_h(u2_t(xip));

    if ( bat_xip != bat ) {
      u2_noun cyr = u2_rc(wir_r, u2_rx(wir_r, pay), bat_xip);

      if ( u2_none == cyr ) {
        return cor;
      }
      else {
        u2_rz(wir_r, cor);
        return cyr;
      }
    }
    else return cor;
  }
}
Пример #19
0
/* 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;
      }
    }
  }
Пример #20
0
/* 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);
      }
    }
  }
Пример #21
0
  static u2_noun                                                  //  produce
  _next(u2_wire wir_r,
        u2_noun tub)                                              //  retain
  {
    u2_noun p_tub, q_tub;
    u2_noun zac;

    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);
      u2_noun tq_tub = u2_t(q_tub);

      zac = _slip(wir_r, iq_tub, p_tub);

      return u2_bc
        (wir_r, zac,
                u2_bq(wir_r, u2_nul,
                             u2_rx(wir_r, iq_tub),
                             u2_rx(wir_r, zac),
                             u2_rx(wir_r, tq_tub)));
    }
  }
/* 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);
    }
  }
Пример #23
0
/* _unix_dump(): dump noun to file.
*/
static void
_unix_dump(FILE*   fil,
           u2_noun som)
{
  if ( u2_no == u2_dust(som) ) {
    mpz_t amp;

    if ( u2_yes == _unix_term(som) ) {
      c3_w met_w = u2_met(3, som);
      c3_y *buf_y = alloca(met_w + 1);

      u2_bytes(0, met_w, buf_y, som);
      buf_y[met_w] = 0;
      fprintf(fil, "%%%s", buf_y);
    }
    else {
      u2_mp(amp, som);
      gmp_fprintf(fil, "%Zd", amp);
      mpz_clear(amp);
    }
  }
  else {
    fputc('[', fil);
    _unix_dump(fil, u2_h(som));
    fprintf(fil, " ");
    _unix_dump_in(fil, u2_t(som));
    fputc(']', fil);
  }
}
Пример #24
0
/* logic
*/
static u2_noun
_rest_in_list(u2_wire wir_r,
              u2_noun van,                                      //  retain
              u2_noun leg)                                      //  retain
{
    if ( u2_nul == leg ) {
        return u2_nul;
    } else {
        u2_noun i_leg = u2_h(leg);
        u2_noun t_leg = u2_t(leg);

        return u2_bc
               (wir_r, j2_mcy(Pt6, ut, play)(wir_r, van, u2_h(i_leg), u2_t(i_leg)),
                _rest_in_list(wir_r, van, t_leg));
    }
}
Пример #25
0
/* logic
*/
  static u2_noun                                                  //  produce
  _seek_flat(u2_wire wir_r,
             u2_noun wob)                                         //  retain
  {
    if ( u2_nul == wob ) {
      return u2_nul;
    } else {
      u2_noun i_wob = u2_h(wob);
      u2_noun t_wob = u2_t(wob);

      return u2_bc
        (wir_r, u2_bc(wir_r, u2_rx(wir_r, u2_h(i_wob)),
                             u2_bt(wir_r, c3__ash, u2_nul, _1)),
                _seek_flat(wir_r, t_wob));
    }
  }
Пример #26
0
  static u2_noun                                                  //  transfer
  _seek_silk(u2_wire wir_r, 
             u2_noun van,                                         //  retain
             u2_noun syx,                                         //  retain
             u2_noun tor)                                         //  retain
  {
    u2_noun p_tor, q_tor, pq_tor, qq_tor;
    u2_noun hey, ret;

    u2_as_cell(tor, &p_tor, &q_tor);
    if ( u2_yes == u2_h(q_tor) ) {
      return u2_nul;
    }
    u2_as_cell(u2_t(q_tor), &pq_tor, &qq_tor);
   
    hey = _seek_silk_yew(wir_r, van, syx, qq_tor);
    if ( u2_nul == hey ) {
      return u2_nul;
    }
    if ( u2_ckb_lent(u2_rx(wir_r, hey)) != 
         u2_ckb_lent(u2_rx(wir_r, qq_tor)) ) 
    {
      return u2_bl_error(wir_r, "silk");
    }

    ret = u2_bq
      (wir_r, u2_nul, 
              u2_no,
              j2_mbc(Pt3, peg)(wir_r, pq_tor, _seek_silk_yaw(wir_r, hey)),
              _seek_silk_fum(wir_r, hey, qq_tor));

    u2_rz(wir_r, hey);
    return ret;
  }
Пример #27
0
/* 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;
    }
  }
}
Пример #28
0
/* 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;
  }
}
Пример #29
0
  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;
    }
  }
Пример #30
0
  static u2_noun
  _molt_apply(u2_wire            wir_r,
              u2_noun            som,
              c3_w               len_w,
              struct _molt_pair* pms_m)
  {
    if ( len_w == 0 ) {
      return u2_rl_gain(wir_r, som);
    }
    else if ( (len_w == 1) && (1 == pms_m[0].axe_w) ) {
      return u2_rl_gain(wir_r, pms_m[0].som);
    }
    else {
      c3_w cut_w = _molt_cut(len_w, pms_m);

      if ( u2_no == u2_dust(som) ) {
        return u2_bc
          (wir_r,
           _molt_apply(wir_r, u2_nul, cut_w, pms_m),
           _molt_apply(wir_r, u2_nul, (len_w - cut_w), (pms_m + cut_w)));
      } else {
        return u2_bc
          (wir_r,
           _molt_apply(wir_r, u2_h(som), cut_w, pms_m),
           _molt_apply(wir_r, u2_t(som), (len_w - cut_w), (pms_m + cut_w)));
      }
    }
  }