コード例 #1
0
ファイル: by_gas.c プロジェクト: Gruelty/urbit
/* 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;
          }
        }
      }
    }
  }
コード例 #2
0
ファイル: parse.c プロジェクト: mnemnion/urbit
/* glue
*/
  u2_noun                                                         //  produce
  j2_mcx(Pt5, glue, fun)(u2_wire wir_r,
                         u2_noun bus,                             //  retain
                         u2_noun vex,                             //  retain
                         u2_noun sab)                             //  retain
  {
    u2_noun p_vex, q_vex;

    u2_bi_cell(wir_r, vex, &p_vex, &q_vex);
    if ( u2_no == u2_dust(q_vex) ) {
      return u2_rx(wir_r, vex);
    } 
    else {
      u2_noun uq_vex = u2_t(q_vex);
      u2_noun puq_vex, quq_vex;
      u2_noun yit, yur;
      u2_noun p_yit, q_yit;
      u2_noun ret;

      u2_bi_cell(wir_r, uq_vex, &puq_vex, &quq_vex);
      yit = u2_bl_good(wir_r, u2_nk_mong(wir_r, bus, u2_rx(wir_r, quq_vex)));
      
      u2_bi_cell(wir_r, yit, &p_yit, &q_yit);
      yur = _last(wir_r, p_vex, p_yit);

      if ( u2_no == u2_dust(q_yit) ) {
        ret = u2_bc(wir_r, yur, u2_nul);
      } 
      else {
        u2_noun uq_yit = u2_t(q_yit);
        u2_noun puq_yit, quq_yit;
        u2_noun wam, p_wam, q_wam, goy;
         
        u2_bi_cell(wir_r, uq_yit, &puq_yit, &quq_yit);
        wam = u2_bl_good(wir_r, u2_nk_mong(wir_r, sab, u2_rx(wir_r, quq_yit)));

        u2_bi_cell(wir_r, wam, &p_wam, &q_wam);
        goy = _last(wir_r, yur, p_wam);
        u2_rz(wir_r, yur);

        if ( u2_no == u2_dust(q_wam) ) {
          ret = u2_bc(wir_r, goy, u2_nul);
        } else {
          u2_noun uq_wam = u2_t(q_wam);
          u2_noun puq_wam, quq_wam;

          u2_bi_cell(wir_r, uq_wam, &puq_wam, &quq_wam);
          ret = u2_bq(wir_r, goy,
                             u2_nul,
                             u2_bc(wir_r, u2_rx(wir_r, puq_vex),
                                          u2_rx(wir_r, puq_wam)),
                             u2_rx(wir_r, quq_wam));
        }
        u2_rz(wir_r, wam);
      }
      u2_rz(wir_r, yit);
      return ret;
    }
  }
コード例 #3
0
ファイル: parse.c プロジェクト: Gruelty/urbit
/* bend
*/
  u2_noun                                                         //  produce
  j2_mcx(Pt5, bend, fun)(u2_wire wir_r,
                         u2_noun raq,                             //  retain
                         u2_noun vex,                             //  retain
                         u2_noun sab)                             //  retain
  {
    u2_noun p_vex, q_vex;

    u2_bi_cell(wir_r, vex, &p_vex, &q_vex);
    if ( u2_no == u2_dust(q_vex) ) {
      return u2_rx(wir_r, vex);
    } else {
      u2_noun uq_vex = u2_t(q_vex);
      u2_noun puq_vex, quq_vex;
      u2_noun yit, yur;
      u2_noun p_yit, q_yit;
      u2_noun ret;

      u2_bi_cell(wir_r, uq_vex, &puq_vex, &quq_vex);
      yit = u2_bl_good(wir_r, u2_nk_mong(wir_r, sab, u2_rx(wir_r, quq_vex)));
      
      u2_bi_cell(wir_r, yit, &p_yit, &q_yit);
      yur = _last(wir_r, p_vex, p_yit);

      if ( u2_no == u2_dust(q_yit) ) {
        ret = u2_bc(wir_r, yur, u2_rx(wir_r, q_vex));
      } 
      else {
        u2_noun uq_yit = u2_t(q_yit);
        u2_noun puq_yit, quq_yit;
        u2_noun vux;
         
        u2_bi_cell(wir_r, uq_yit, &puq_yit, &quq_yit);

        vux = u2_bl_good
                    (wir_r, 
                     u2_nk_mong
                       (wir_r, raq, 
                               u2_bc(wir_r, u2_rx(wir_r, puq_vex),
                                            u2_rx(wir_r, puq_yit))));
        if ( u2_nul == vux ) {
          ret = u2_bc(wir_r, yur, u2_rx(wir_r, q_vex));
        }
        else {
          ret = u2_bq(wir_r, yur,
                             u2_nul,
                             u2k(u2t(vux)),
                             u2_rx(wir_r, quq_yit));
          u2z(vux);
        }
      }
      u2_rz(wir_r, yit);
      return ret;
    }
  }
コード例 #4
0
ファイル: parse.c プロジェクト: mnemnion/urbit
  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;
          }
        }
      }
    }
  }
コード例 #5
0
ファイル: benx.c プロジェクト: Gruelty/urbit
/* 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;
  }
}
コード例 #6
0
ファイル: bail.c プロジェクト: MacTop/urbit
  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)));
      }
    }
  }
コード例 #7
0
ファイル: parse.c プロジェクト: mnemnion/urbit
/* pose
*/
  u2_noun                                                         //  produce
  j2_mbx(Pt5, pose)(u2_wire wir_r, 
                    u2_noun vex,                                  //  retain
                    u2_noun sab)                                  //  retain
  {
    u2_noun p_vex, q_vex;
    
    u2_bi_cell(wir_r, vex, &p_vex, &q_vex);
    if ( u2_yes == u2_dust(q_vex) ) {
      return u2_rx(wir_r, vex);
    } else {
      u2_noun roq = u2_bl_good(wir_r, u2_nk_kick(wir_r, sab));
      u2_noun p_roq, q_roq;
      u2_noun ret;

      u2_bi_cell(wir_r, roq, &p_roq, &q_roq);
      ret = u2_bc
        (wir_r,
         _last(wir_r, p_vex, p_roq),
         u2_rx(wir_r, q_roq));

      u2_rz(wir_r, roq);
      return ret;
    }
  }
コード例 #8
0
ファイル: parse.c プロジェクト: mnemnion/urbit
/* 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);
      }
    }
  }
コード例 #9
0
ファイル: parse.c プロジェクト: mnemnion/urbit
/* stag
*/
  u2_noun                                                         //  produce
  j2_mcx(Pt5, stag, fun)(u2_wire wir_r,
                         u2_noun gob,                             //  retain
                         u2_noun sef,                             //  retain
                         u2_noun tub)                             //  retain
  {
    u2_noun vex = u2_bl_good(wir_r, u2_nk_mong(wir_r, sef, u2_rx(wir_r, tub)));
    u2_noun p_vex, q_vex;

    u2_bi_cell(wir_r, vex, &p_vex, &q_vex);

    if ( u2_no == u2_dust(q_vex) ) {
      return vex;
    }
    else {
      u2_noun uq_vex = u2_t(q_vex);
      u2_noun puq_vex, quq_vex;
      u2_noun wag;
      u2_noun ret;

      u2_bi_cell(wir_r, uq_vex, &puq_vex, &quq_vex);
      wag = u2_bc(wir_r, u2_rx(wir_r, gob), u2_rx(wir_r, puq_vex));
      ret = u2_bq(wir_r, u2_rx(wir_r, p_vex),
                         u2_nul,
                         wag,
                         u2_rx(wir_r, quq_vex));

      u2_rz(wir_r, vex);
      return ret;
    }
  }
コード例 #10
0
ファイル: parse.c プロジェクト: mnemnion/urbit
/* cold
*/
  u2_noun                                                         //  produce
  j2_mcx(Pt5, cold, fun)(u2_wire wir_r,
                         u2_noun cus,                             //  retain
                         u2_noun sef,                             //  retain
                         u2_noun tub)                             //  retain
  {
    u2_noun vex = u2_bl_good(wir_r, u2_nk_mong(wir_r, sef, u2_rx(wir_r, tub)));
    u2_noun p_vex, q_vex;

    u2_bi_cell(wir_r, vex, &p_vex, &q_vex);

    if ( u2_no == u2_dust(q_vex) ) {
      return vex;
    }
    else {
      u2_noun uq_vex = u2_t(q_vex);
      u2_noun quq_vex;
      u2_noun ret;

      u2_bi_cell(wir_r, uq_vex, 0, &quq_vex);
      ret = u2_bq(wir_r, u2_rx(wir_r, p_vex),
                         u2_nul,
                         u2_rx(wir_r, cus),
                         u2_rx(wir_r, quq_vex));

      u2_rz(wir_r, vex);
      return ret;
    }
  }
コード例 #11
0
ファイル: ut_play.c プロジェクト: Gruelty/urbit
  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;
      }
    }
  }
コード例 #12
0
ファイル: unix.c プロジェクト: Gruelty/urbit
/* _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);
  }
}
コード例 #13
0
/* 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);
    }
  }
コード例 #14
0
ファイル: ut_swab.c プロジェクト: mnemnion/urbit
/* 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;
    }
  }
コード例 #15
0
ファイル: bail.c プロジェクト: MacTop/urbit
/* 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;
  }
}
コード例 #16
0
ファイル: parse.c プロジェクト: mnemnion/urbit
/* pfix
*/
  u2_noun                                                         //  produce
  j2_mbx(Pt5, pfix)(u2_wire wir_r, 
                    u2_noun vex,                                  //  retain
                    u2_noun sab)                                  //  retain
  {
    u2_noun p_vex, q_vex;
    
    u2_bi_cell(wir_r, vex, &p_vex, &q_vex);
    if ( u2_no == u2_dust(q_vex) ) {
      return u2_rx(wir_r, vex);
    } 
    else {
      u2_noun uq_vex = u2_t(q_vex);
      u2_noun puq_vex, quq_vex;
      u2_noun yit, p_yit, q_yit;
      u2_noun ret;

      u2_bi_cell(wir_r, uq_vex, &puq_vex, &quq_vex);
      yit = u2_bl_good(wir_r, u2_nk_mong(wir_r, sab, u2_rx(wir_r, quq_vex)));

      u2_bi_cell(wir_r, yit, &p_yit, &q_yit);
      ret = u2_bc
        (wir_r,
         _last(wir_r, p_vex, p_yit),
         u2_rx(wir_r, q_yit));

      u2_rz(wir_r, yit);
      return ret;
    }
  }
コード例 #17
0
ファイル: parse.c プロジェクト: mnemnion/urbit
  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)));
    }
  }
コード例 #18
0
ファイル: parse.c プロジェクト: mnemnion/urbit
/* 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;
      }
    }
  }
コード例 #19
0
ファイル: ut_tack.c プロジェクト: Gruelty/urbit
/* internals
*/
  static u2_noun                                                  //  transfer
  _tack_in(u2_wire wir_r, 
           u2_noun van,                                           //  retain
           u2_noun sut,                                           //  retain
           u2_noun peh,                                           //  retain
           u2_noun mur,                                           //  retain
           u2_atom axe)                                           //  retain
  {
    if ( u2_no == u2_dust(peh) ) {
      return u2_bc(wir_r, u2_rx(wir_r, axe), u2_rx(wir_r, mur));
    } 
    else {
      u2_noun i_peh = u2_h(peh);
      u2_noun t_peh = u2_t(peh);

      if ( (u2_yes == u2_stud(i_peh)) || (u2_no == u2_h(i_peh)) ) 
      {
        u2_noun pi_peh = (u2_yes == u2_stud(i_peh)) ? 0 : u2_h(u2_t(i_peh));
        u2_noun qi_peh = (u2_yes == u2_stud(i_peh)) ? i_peh : u2_t(u2_t(i_peh));
        u2_noun pok   = j2_mcy(Pt6, ut, fink)
                              (wir_r, van, sut, pi_peh, c3__rite, qi_peh);
        u2_noun wuf   = j2_mby(Pt6, flay)(wir_r, pok);
        u2_noun p_wuf = u2_h(wuf);
        u2_noun q_wuf = u2_t(wuf);
        u2_noun nax   = j2_mbc(Pt3, peg)(wir_r, axe, p_wuf); 
        u2_noun gav   = _tack_in(wir_r, van, q_wuf, t_peh, mur, nax);
        u2_noun p_gav = u2_h(gav);
        u2_noun q_gav = u2_t(gav);
        u2_noun qog   = u2_bc(wir_r, u2_nul, u2_rx(wir_r, qi_peh));
        u2_noun ret   = u2_bc
          (wir_r, u2_rx(wir_r, p_gav),
                  j2_mcy(Pt6, ut, heal)(wir_r, van, sut, qog, p_wuf, q_gav));

        u2_rz(wir_r, qog);
        u2_rz(wir_r, gav);
        u2_rz(wir_r, nax);
        u2_rz(wir_r, wuf);
        u2_rz(wir_r, pok);

        return ret;
      }
      else {
        u2_noun bax   = u2_t(i_peh);
        u2_noun vas   = j2_mcy(Pt6, ut, peek)(wir_r, van, sut, c3__rite, bax);
        u2_noun nax   = j2_mbc(Pt3, peg)(wir_r, axe, bax); 
        u2_noun gav   = _tack_in(wir_r, van, vas, t_peh, mur, nax);
        u2_noun p_gav = u2_h(gav);
        u2_noun q_gav = u2_t(gav);
        u2_noun ret   = u2_bc
          (wir_r, u2_rx(wir_r, p_gav),
                  j2_mcy(Pt6, ut, heal)(wir_r, van, sut, u2_nul, bax, q_gav));
        
        u2_rz(wir_r, gav);
        u2_rz(wir_r, nax);
        u2_rz(wir_r, vas);

        return ret;
      }
    }
  }
コード例 #20
0
ファイル: parse.c プロジェクト: mnemnion/urbit
/* stir
*/
  u2_noun                                                         //  produce
  j2_mcx(Pt5, stir, fun)(u2_wire wir_r,
                         u2_noun rud,                             //  retain
                         u2_noun raq,                             //  retain
                         u2_noun fel,                             //  retain
                         u2_noun tub)                             //  retain
  {
    u2_noun vex = u2_bl_good(wir_r, u2_nk_mong(wir_r, fel, u2_rx(wir_r, tub)));
    u2_noun p_vex, q_vex;
    u2_noun ret;

    u2_bi_cell(wir_r, vex, &p_vex, &q_vex);
    if ( u2_no == u2_dust(q_vex) ) {
      ret = u2_bq(wir_r, u2_rx(wir_r, p_vex),
                         u2_nul,
                         u2_rx(wir_r, rud),
                         u2_rx(wir_r, tub));
    }
    else {
      u2_noun uq_vex = u2_t(q_vex);
      u2_noun puq_vex, quq_vex;
      u2_noun wag, p_wag, q_wag, uq_wag, puq_wag, quq_wag;

      u2_bi_cell(wir_r, uq_vex, &puq_vex, &quq_vex);
      wag = j2_mcx(Pt5, stir, fun)(wir_r, rud, raq, fel, quq_vex);

      u2_bi_cell(wir_r, wag, &p_wag, &q_wag);
      if ( u2_no == u2_dust(q_wag) ) {
        return u2_bl_bail(wir_r, c3__fail);
      }
      uq_wag = u2_t(q_wag);
      u2_bi_cell(wir_r, uq_wag, &puq_wag, &quq_wag);

      ret = u2_bq
        (wir_r, _last(wir_r, p_vex, p_wag),
                u2_nul,
                u2_bl_good(wir_r, 
                          u2_nk_mong
                            (wir_r, raq, 
                                    u2_bc(wir_r, u2_rx(wir_r, puq_vex),
                                                 u2_rx(wir_r, puq_wag)))),
                u2_rx(wir_r, quq_wag));
      u2_rz(wir_r, wag);
    }
    u2_rz(wir_r, vex);
    return ret;
  }
コード例 #21
0
ファイル: bail.c プロジェクト: MacTop/urbit
/* 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);
}
コード例 #22
0
ファイル: bail.c プロジェクト: MacTop/urbit
/* u2_bl_drop(): drop from meaning stack.
*/
void
u2_bl_drop(u2_wire wir_r)
{
  u2_noun tax = u2_wire_tax(wir_r);

  c3_assert(u2_yes == u2_dust(tax));

  u2_wire_tax(wir_r) = u2_rx(wir_r, u2_t(tax));
  u2_rz(wir_r, tax);
}
コード例 #23
0
ファイル: benx.c プロジェクト: Gruelty/urbit
/* _print_wall(): print debug wall.
*/
static void
_print_wall(u2_noun wal,
            FILE* fil_F)
{
  while ( u2_yes == u2_dust(wal) ) {
    _print_tape(u2_h(wal), fil_F);
    putc('\n', fil_F);
    wal = u2_t(wal);
  }
}
コード例 #24
0
ファイル: benx.c プロジェクト: Gruelty/urbit
/* u2_bx_loaf(): print debug loaf.
*/
void
u2_bx_loaf(u2_ray  wir_r,
           u2_noun luf)                                           //  retain
{
  if ( u2_yes == u2_dust(luf) ) {
    _print_term(u2_h(luf), stdout);
    printf(":\n");
    _print_wall(u2_t(luf), stdout);
  }
}
コード例 #25
0
ファイル: benx.c プロジェクト: Gruelty/urbit
/* _print_tape(): print a byte tape.
*/
static void
_print_tape(u2_noun som,
            FILE*   fil_F)
{
  u2_noun h_som;

  while ( (u2_yes == u2_dust(som)) && ((h_som = u2_h(som)) < 128) ) {
    putc(h_som, fil_F);
    som = u2_t(som);
  }
}
コード例 #26
0
ファイル: ut_repo.c プロジェクト: MacTop/urbit
/* 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);
      }
    }
  }
コード例 #27
0
/* 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);
    }
  }
コード例 #28
0
ファイル: hill.c プロジェクト: aaronlifton/urbit
/* _hill_print_tent(): print wrapper for trace entry.
*/
static void
_hill_print_tent(u2_wire wir_r,
                 FILE*   fil_f,                                   //  retain
                 u2_noun tax)                                     //  retain
{
  if ( u2_yes == u2_dust(tax) ) switch ( u2_h(tax) ) {
    case c3__spot: _hill_print_spot(wir_r, fil_f, u2_t(tax)); return;
    case c3__bean: _hill_print_bean(wir_r, fil_f, u2_t(tax)); return;
    case c3__mean: _hill_print_mean(wir_r, fil_f, u2_t(tax)); return;
  }
  fprintf(fil_f, "  {tent!}\n");
}
コード例 #29
0
ファイル: ut_mint.c プロジェクト: mnemnion/urbit
  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));
        }
      }
    }
  }
コード例 #30
0
ファイル: flay.c プロジェクト: Gruelty/urbit
  u2_noun                                                         //  transfer
  j2_mb(Pt6, flay)(u2_wire wir_r, 
                   u2_noun cor)                                   //  retain
  {
    u2_noun pok;

    if ( (u2_no == u2_mean(cor, u2_cv_sam, &pok, 0)) ||
         (u2_no == u2_dust(pok)) ) { 
      return u2_bl_bail(wir_r, c3__fail);
    } else {
      return j2_mby(Pt6, flay)(wir_r, pok);
    }
  }