コード例 #1
0
ファイル: dor.c プロジェクト: Gunga/urbit
/* functions
*/
  u3_noun
  u3qc_dor(u3_atom a,
           u3_atom b)
  {
    if ( c3y == u3r_sing(a, b) ) {
      return c3y;
    }
    else {
      if ( c3y == u3ud(a) ) {
        if ( c3y == u3ud(b) ) {
          return u3qa_lth(a, b);
        }
        else {
          return c3y;
        }
      }
      else {
        if ( c3y == u3ud(b) ) {
          return c3n;
        }
        else {
          if ( c3y == u3r_sing(u3h(a), u3h(b)) ) {
            return u3qc_dor(u3t(a), u3t(b));
          }
          else return u3qc_dor(u3h(a), u3h(b));
        }
      }
    }
  }
コード例 #2
0
ファイル: lth.c プロジェクト: OCForks/urbit
  u3_noun
  u3wa_lth(u3_noun cor)
  {
    u3_noun a, b;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) ||
         (c3n == u3ud(a)) ||
         (c3n == u3ud(b)) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qa_lth(a, b);
    }
  }
コード例 #3
0
ファイル: fitz.c プロジェクト: Gunga/urbit
  u3_noun
  u3wf_fitz(u3_noun cor)
  {
    u3_noun yaz, wix;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &yaz, u3x_sam_3, &wix, 0)) ||
         (c3n == u3ud(yaz)) ||
         (c3n == u3ud(wix)) )
    {
      return u3m_bail(c3__fail);
    } else {
      return u3qf_fitz(yaz, wix);
    }
  }
コード例 #4
0
ファイル: ed_shar.c プロジェクト: bd/urbit
  u3_noun
  u3wee_shar(u3_noun cor)
  {
    u3_noun pub, sek;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &pub, u3x_sam_3, &sek, 0)) ||
         (c3n == u3ud(pub)) ||
         (c3n == u3ud(sek)) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qee_shar(pub, sek);
    }
  }
コード例 #5
0
ファイル: met.c プロジェクト: urbit/urbit
  u3_noun
  u3wc_met(u3_noun cor)
  {
    u3_noun a, b;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) ||
         (c3n == u3ud(b)) ||
         (c3n == u3ud(a) && 0 != b) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qc_met(a, b);
    }
  }
コード例 #6
0
ファイル: po.c プロジェクト: Gunga/urbit
  u3_noun
  u3wcp_ind(u3_noun cor)
  {
    u3_noun x, a, buf;

    if ( (c3n == u3r_mean(cor, u3x_sam, &a, u3x_con_sam, &x, 0)) ||
         (c3n == u3du(x)) ||
         (c3n == u3ud(buf = u3t(x))) ||
         (c3n == u3ud(a)) )
    {
      return u3m_bail(c3__exit);
    } else {
      return _po_find(buf, a);
    }
  }
コード例 #7
0
ファイル: shax.c プロジェクト: urbit/urbit
  u3_noun
  u3we_shas(u3_noun cor)
  {
    u3_noun sal, ruz;

    if ( (u3_none == (sal = u3r_at(u3x_sam_2, cor))) ||
         (u3_none == (ruz = u3r_at(u3x_sam_3, cor))) ||
         (c3n == u3ud(sal)) ||
         (c3n == u3ud(ruz)) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qe_shas(sal, ruz);
    }
  }
コード例 #8
0
ファイル: temp.c プロジェクト: josl/urbit
/* u3_temp_io_poll(): update temp IO state.
*/
void
u3_temp_io_poll(void)
{
  u3_temp* teh_u = &u3_Host.teh_u;
  u3_noun  wen   = u3v_keep(u3nt(u3_blip, c3__temp, u3_nul));

  if ( (u3_nul != wen) &&
       (c3y == u3du(wen)) &&
       (c3y == u3ud(u3t(wen))) )
  {
    c3_d gap_d = u3_time_gap_ms(u3k(u3A->now), u3k(u3t(wen)));

#if 0
    fprintf(stderr, "gap_d %llu, plus %llu\r\n", 
        gap_d, gap_d + (c3_d)teh_u->run_w);
#endif
    gap_d += teh_u->run_w;

    if ( c3y == teh_u->alm ) {
      uv_timer_stop(&teh_u->tim_u);
    }
    else teh_u->alm = c3y;

    uv_timer_start(&teh_u->tim_u, _temp_time_cb, gap_d, 0);
  }
  else {
    if ( c3y == teh_u->alm ) {
      uv_timer_stop(&teh_u->tim_u);
    }
    teh_u->alm = c3n;
  }
  u3z(wen);
}
コード例 #9
0
ファイル: shax.c プロジェクト: urbit/urbit
  u3_noun
  u3we_shal(u3_noun cor)
  {
    u3_noun a, b;

    if ( (u3_none == (a = u3r_at(u3x_sam_2, cor))) ||
         (u3_none == (b = u3r_at(u3x_sam_3, cor))) ||
         (c3n == u3ud(a)) ||
         (c3n == u3a_is_cat(a)) ||
         (c3n == u3ud(b)) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qe_shal(a, b);
    }
  }
コード例 #10
0
ファイル: murn.c プロジェクト: OCForks/urbit
/* functions
*/
  u3_noun
  u3qb_murn(u3_noun a, u3_noun b)
  {
    if ( 0 == a ) {
      return a;
    }
    else if ( c3n == u3du(a) ) {
      return u3m_bail(c3__exit);
    }
    else {
      u3_noun one = u3n_slam_on(u3k(b), u3k(u3h(a)));
      u3_noun two = u3qb_murn(u3t(a), b);
      u3_noun nex;

      switch ( u3ud(one) ) {
        case c3y:  u3z(one);
                   return two;
        case c3n:  nex = u3nc(u3k(u3t(one)), two);
                   u3z(one);
                   return nex;
        default:   u3z(one);
                   u3z(two);
                   return u3_none;
      }
    }
  }
コード例 #11
0
ファイル: muk.c プロジェクト: bd/urbit
  u3_noun
  u3wc_muk(u3_noun cor)
  {
    u3_noun seed, len, key;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &seed,
                               u3x_sam_6, &len,
                               u3x_sam_7, &key, 0)) ||
         (c3n == u3ud(seed)) ||
         (c3n == u3ud(len))  ||
         (c3n == u3ud(key))  )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qc_muk(seed, len, key);
    }
  }
コード例 #12
0
ファイル: rsh.c プロジェクト: Gunga/urbit
  u3_noun
  u3wc_rsh(u3_noun cor)
  {
    u3_noun a, b, c;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &a,
                                u3x_sam_6, &b,
                                u3x_sam_7, &c, 0)) ||
         (c3n == u3ud(a)) ||
         (c3n == u3ud(b)) ||
         (c3n == u3ud(c)) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qc_rsh(a, b, c);
    }
  }
コード例 #13
0
ファイル: ut_play.c プロジェクト: OCForks/urbit
 static u3_noun
 _play_rock(u3_noun odo, u3_noun bob)
 { 
   if ( c3y == u3ud(bob) ) {
     return u3nq(c3__atom, u3k(odo), u3_nul, u3k(bob));
   }
   else return u3nt(c3__cell, _play_rock(odo, u3h(bob)), 
                              _play_rock(odo, u3t(bob)));
 }
コード例 #14
0
ファイル: po.c プロジェクト: Gunga/urbit
  u3_noun
  u3wcp_tod(u3_noun cor)
  {
    u3_noun x, a, buf;

    if ( (c3n == u3r_mean(cor, u3x_sam, &a, u3x_con_sam, &x, 0)) ||
         (c3n == u3du(x)) ||
         (c3n == u3ud(buf = u3t(x))) ||
         (c3n == u3ud(a)) ||
         (a >= 256) )
    {
      return u3m_bail(c3__exit);
    } else {
      c3_y byt_y[3];

      u3r_bytes((a * 3), 3, byt_y, buf);
      return (byt_y[0] | (byt_y[1] << 8) | (byt_y[2] << 16));
    }
  }
コード例 #15
0
ファイル: cut.c プロジェクト: Gunga/urbit
  u3_noun
  u3wc_cut(u3_noun cor)
  {
    u3_noun a, b, c, d;

    if ( (c3n == u3r_mean(cor, u3x_sam_2,  &a,
                                u3x_sam_12, &b,
                                u3x_sam_13, &c,
                                u3x_sam_7,  &d, 0)) ||
         (c3n == u3ud(a)) ||
         (c3n == u3ud(b)) ||
         (c3n == u3ud(c)) ||
         (c3n == u3ud(d)) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qc_cut(a, b, c, d);
    }
  }
コード例 #16
0
ファイル: shax.c プロジェクト: urbit/urbit
  u3_noun
  u3we_shay(u3_noun cor)
  {
    u3_noun a, b;
    
//     static int few = 0;
//     if(few == 0) printf("foo\r\n");
//     few++; few %= 1000;
      

    if ( (u3_none == (a = u3r_at(u3x_sam_2, cor))) ||
         (u3_none == (b = u3r_at(u3x_sam_3, cor))) ||
         (c3n == u3ud(a)) ||
         (c3n == u3a_is_cat(a)) ||
         (c3n == u3ud(b)) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qe_shay(a, b);
    }
  }
コード例 #17
0
ファイル: ut_conk.c プロジェクト: urbit/urbit
/* logic
*/
  static u3_noun
  _cqfu_conk(u3_noun van,
             u3_noun sut,
             u3_noun got)
  {
    if ( c3y == u3ud(got) ) {
      u3_noun ret = u3qf_face(u3k(got), sut);

      return ret;
    }
    else switch ( u3h(got) ) {
      default: return u3m_bail(c3__fail);

      case 0: {
        return u3k(sut);
      }
      case 1: {
        u3_noun c*k = _cqfu_conk(van, sut, u3t(u3t(got)));
        u3_noun nux = u3k(u3h(u3t(got)));
        u3_noun ret = u3qf_face(nux, c*k);

        u3z(nux);
        u3z(c*k);
        return ret;
      }
      case 2: {
        u3_noun vet = u3r_at(u3qfu_van_vet, van);
        u3_noun hed, tal, deh, lat, ret;

        if ( c3y == vet ) {
          u3_noun cel = u3nt(c3__cell, c3__noun, c3__noun);

          if ( c3n == u3qfu_nest(van, cel, c3y, sut) ) {
            return u3m_bail(c3__fail);
          }
          u3z(cel);
        }
        hed = u3qfu_peek(van, sut, c3__both, 2);
        tal = u3qfu_peek(van, sut, c3__both, 3);
        deh = _cqfu_conk(van, hed, u3h(u3t(got)));
        lat = _cqfu_conk(van, tal, u3t(u3t(got)));

        ret = u3qf_cell(deh, lat);

        u3z(lat);
        u3z(deh);
        u3z(tal);
        u3z(hed);

        return ret;
      }
    }
  }
コード例 #18
0
ファイル: cap.c プロジェクト: OCForks/urbit
  u3_noun
  u3wc_cap(u3_noun cor)
  {
    u3_noun a;

    if ( (u3_none == (a = u3r_at(u3x_sam, cor))) ||
         (c3n == u3ud(a)) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qc_cap(a);
    }
  }
コード例 #19
0
ファイル: slag.c プロジェクト: bd/urbit
  u3_noun
  u3wb_slag(u3_noun cor)
  {
    u3_noun a, b;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) ||
         (c3n == u3ud(a) && u3_nul != b) )
    {
      return u3m_bail(c3__exit);
    } else {
      return u3qb_slag(a, b);
    }
  }
コード例 #20
0
ファイル: slot.c プロジェクト: Gunga/urbit
  u3_noun
  u3we_slot(u3_noun cor)
  {
    u3_noun axe, vax;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &axe, u3x_sam_3, &vax, 0)) ||
         (c3n == u3ud(axe)) ||
         (c3n == u3du(vax)) )
    {
      return u3m_bail(c3__fail);
    } else {
      return u3qf_slot(axe, vax);
    }
  }
コード例 #21
0
ファイル: ut_fish.c プロジェクト: OCForks/urbit
/* boilerplate
*/
  u3_noun
  u3wfu_fish(u3_noun cor)
  {
    u3_noun sut, axe, van;

    if ( (c3n == u3r_mean(cor, u3x_sam, &axe, u3x_con, &van, 0)) ||
         (c3n == u3ud(axe)) ||
         (u3_none == (sut = u3r_at(u3x_sam, van))) )
    {
      return u3m_bail(c3__fail);
    } else {
      return _cqfu_fish(van, sut, axe);
    }
  }
コード例 #22
0
ファイル: ut_nest.c プロジェクト: alecbrick/urbit
/* boilerplate
*/
  u3_noun
  u3wfu_nest(u3_noun cor)
  {
    u3_noun sut, tel, ref, van;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &tel,
                                u3x_sam_3, &ref,
                                u3x_con, &van,
                                0)) ||
         (c3n == u3ud(tel)) || (tel > 1) ||
         (u3_none == (sut = u3r_at(u3x_sam, van))) )
    {
      return u3m_bail(c3__fail);
    } else {
      return _cqfu_nest(van, sut, tel, ref);
    }
  }
コード例 #23
0
ファイル: ut_cull.c プロジェクト: Gunga/urbit
/* boilerplate
*/
  u3_noun
  u3wfu_cull(u3_noun cor)
  {
    u3_noun sut, axe, pol, ref, van;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &pol,
                               u3x_sam_6, &axe,
                               u3x_sam_7, &ref,
                               u3x_con, &van, 0)) ||
         (c3n == u3ud(axe)) ||
         (u3_none == (sut = u3r_at(u3x_sam, van))) )
    {
      return u3m_bail(c3__fail);
    } else {
      return _cqfu_cull(van, sut, pol, axe, ref);
    }
  }
コード例 #24
0
ファイル: ut_busk.c プロジェクト: Gunga/urbit
/* boilerplate
*/
  u3_noun
  u3wfu_busk(u3_noun cor)
  {
    u3_noun sut, cog, hyp, van;

    if ( (c3n == u3r_mean(cor, u3x_sam_2, &cog,
                               u3x_sam_3, &hyp,
                               u3x_con, &van,
                               0)) ||
         (c3n == u3ud(cog)) ||
         (u3_none == (sut = u3r_at(u3x_sam, van))) )
    {
      return u3m_bail(c3__fail);
    } else {
      return _cqfu_busk(van, sut, cog, hyp);
    }
  }
コード例 #25
0
ファイル: nock.c プロジェクト: OCForks/urbit
/* _n_mush_in(): see _n_mush().
*/
static u3_noun
_n_mush_in(u3_noun val)
{
  if ( c3n == u3du(val) ) {
    return u3_nul;
  }
  else {
    u3_noun h_val = u3h(val);
    u3_noun ite;

    if ( c3n == u3ud(h_val) ) {
      ite = u3nc(c3__leaf, u3_nul);
    } else {
      ite = u3nc(c3__leaf, u3qe_trip(h_val));
    }
    return u3nc(ite, _n_mush_in(u3t(val)));
  }
}
コード例 #26
0
ファイル: unix.c プロジェクト: juped/your-urbit
/* _unix_delete_mount_point(): remove mount point from list and free
*/
static void
_unix_delete_mount_point(u3_noun mon)
{
    if ( c3n == u3ud(mon) ) {
        c3_assert(!"mount point must be an atom");
        u3z(mon);
        return;
    }

    c3_c* nam_c = u3r_string(mon);
    u3_umon* mon_u;
    u3_umon* tem_u;

    mon_u = u3_Host.unx_u.mon_u;
    if ( !mon_u ) {
        uL(fprintf(uH, "mount point already gone: %s\r\n", nam_c));
        goto _delete_mount_point_out;
    }
    if ( 0 == strcmp(nam_c, mon_u->nam_c) ) {
        u3_Host.unx_u.mon_u = mon_u->nex_u;
        _unix_free_mount_point(mon_u);
        goto _delete_mount_point_out;
    }

    for ( ;
            mon_u->nex_u && 0 != strcmp(nam_c, mon_u->nex_u->nam_c);
            mon_u = mon_u->nex_u )
    {
    }

    if ( !mon_u->nex_u ) {
        uL(fprintf(uH, "mount point already gone: %s\r\n", nam_c));
        goto _delete_mount_point_out;
    }

    tem_u = mon_u->nex_u;
    mon_u->nex_u = mon_u->nex_u->nex_u;
    _unix_free_mount_point(tem_u);

_delete_mount_point_out:
    free(nam_c);
    u3z(mon);
}
コード例 #27
0
ファイル: ap.c プロジェクト: OCForks/urbit
  /** rake
  **/
    u3_noun
    u3qfp_rake(u3_noun gen)
    {
      u3_noun p_gen, q_gen;

      if ( c3y == u3ud(gen) ) {
        return u3nc(u3k(gen), u3_nul);
      }
      else switch ( u3h(gen) ) {
        default: return u3m_error("rake-twig");

        case u3_nul:  return u3nc(u3k(gen), u3_nul);

        case c3__cnzy: {
          return u3nc(u3k(u3t(gen)), u3_nul);
        }
        case c3__cnzz: {
          return u3k(u3t(gen));
        }
        case c3__cnts: {
          if ( c3n == u3r_cell(u3t(gen), &p_gen, &q_gen) ) {
            return u3m_bail(c3__fail);
          }
          else {
            if ( u3_nul != q_gen ) {
              return u3m_bail(c3__fail);
            }
            else {
              return u3k(p_gen);
            }
          }
        }
        case c3__zpcb: {
          if ( c3n == u3r_cell(u3t(gen), &p_gen, &q_gen) ) {
            return u3m_bail(c3__fail);
          }
          else return u3qfp_rake(q_gen);
        }
      }
    }
コード例 #28
0
ファイル: unix.c プロジェクト: juped/your-urbit
/* _unix_get_mount_point(): retrieve or create mount point
*/
static u3_umon*
_unix_get_mount_point(u3_noun mon)
{
    if ( c3n == u3ud(mon) ) {
        c3_assert(!"mount point must be an atom");
        u3z(mon);
        return NULL;
    }

    c3_c* nam_c = u3r_string(mon);
    u3_umon* mon_u;

    for ( mon_u = u3_Host.unx_u.mon_u;
            mon_u && 0 != strcmp(nam_c, mon_u->nam_c);
            mon_u = mon_u->nex_u )
    {
    }

    if ( !mon_u ) {
        mon_u = malloc(sizeof(u3_umon));
        mon_u->nam_c = nam_c;
        mon_u->dir_u.dir = c3y;
        mon_u->dir_u.dry = c3n;
        mon_u->dir_u.pax_c = strdup(u3_Host.dir_c);
        mon_u->dir_u.par_u = NULL;
        mon_u->dir_u.nex_u = NULL;
        mon_u->dir_u.kid_u = NULL;
        mon_u->nex_u = u3_Host.unx_u.mon_u;
        u3_Host.unx_u.mon_u = mon_u;

    }
    else {
        free(nam_c);
    }

    u3z(mon);

    return mon_u;
}
コード例 #29
0
ファイル: ut_play.c プロジェクト: OCForks/urbit
 static u3_noun
 _play_sand(u3_noun odo, u3_noun bob)
 { 
   if ( c3y == u3ud(bob) ) {
     if ( 'n' == odo ) {
       if ( (bob != 0) ) {
         return u3m_bail(c3__exit);
       } else {
         return u3nq(c3__atom, odo, u3_nul, bob);
       }
     }
     if ( 'f' == odo ) {
       if ( (bob > 1) ) {
         return u3m_bail(c3__exit);
       } else {
         return _play_bean();
       }
     }
     return u3nt(c3__atom, u3k(odo), u3_nul);
   }
   else return u3nt(c3__cell, _play_rock(odo, u3h(bob)), 
                              _play_rock(odo, u3t(bob)));
 }
コード例 #30
0
ファイル: nock.c プロジェクト: OCForks/urbit
/* _n_hint(): process hint.
*/
static u3_noun
_n_hint(u3_noun zep, 
        u3_noun hod,
        u3_noun bus,
        u3_noun nex)
{
  switch ( zep ) {
    default: {
      // u3m_p("weird zep", zep);
      u3a_lose(zep);
      u3a_lose(hod);

      return _n_nock_on(bus, nex);
    }

    case c3__hunk:
    case c3__lose:
    case c3__mean:
    case c3__spot: {
      u3_noun tac = u3nc(zep, hod);
      u3_noun pro;

      u3t_push(tac);
#if 0
      {
        static int low_i;

        if ( !low_i ) {
          low_i = 1;
          if ( 0 == (u3R->pro.nox_d % 65536ULL) ) {
            if ( c3__spot == zep ) {
              uL(fprintf(uH, "spot %d/%d : %d/%d\r\n",
                             u3h(u3h(u3t(hod))),
                             u3t(u3h(u3t(hod))),
                             u3h(u3t(u3t(hod))),
                             u3t(u3t(u3t(hod)))));
            }
          }
          low_i = 0;
        }
      }
#endif
      pro = _n_nock_on(bus, nex);
      u3t_drop();

      return pro;
    }

    case c3__live: {
      if ( c3y == u3ud(hod) ) {
        u3t_off(noc_o);
        u3t_heck(hod);
        u3t_on(noc_o);
      } else {
        u3z(hod);
      }
      return _n_nock_on(bus, nex);
    }

    case c3__slog: {
      if ( !(u3C.wag_w & u3o_quiet) ) {
        u3t_off(noc_o);
        u3t_slog(hod);
        u3t_on(noc_o);
      }
      return _n_nock_on(bus, nex);
    }

    case c3__germ: {
      u3_noun pro = _n_nock_on(bus, nex);

      if ( c3y == u3r_sing(pro, hod) ) {
        u3z(pro); return hod;
      } else {
        u3z(hod); return pro;
      }
    }

    case c3__fast: {
      u3_noun pro = _n_nock_on(bus, nex);

      u3t_off(noc_o);
      u3j_mine(hod, u3k(pro));
      u3t_on(noc_o);

      return pro;
    }

    case c3__memo: {
      u3z(hod);
#if 0
      return _n_nock_on(bus, nex);
#else
      {
        u3_noun pro = u3z_find_2(c3__nock, bus, nex);

        if ( pro != u3_none ) {
          u3z(bus); u3z(nex);
          return pro;
        }
        pro = _n_nock_on(u3k(bus), u3k(nex));

        if ( &(u3H->rod_u) != u3R ) {
          u3z_save_2(c3__nock, bus, nex, pro);
        }

        u3z(bus); u3z(nex);

        return pro;
      }
#endif
    }

    case c3__sole: {
      u3z(hod);
      {
        u3_noun pro = _n_nock_on(bus, nex);

        // return u3z_uniq(pro);
        return pro;
      }
    }
  }
}