/* functions
*/
  u2_weak                                                         //  transfer
  j2_mb(Pt3, mug)(u2_wire wir_r,
                  u2_noun cor)                                    //  retain
  {
    u2_noun sam;

    if ( u2_none == (sam = u2_frag(u2_cv_sam, cor)) ) {
      return u2_bl_bail(wir_r, c3__exit);
    } else {
      return u2_mug(sam);
    }
  }
Ejemplo n.º 2
0
/* hill_line(): execute a hill command line.
*/
void
hill_line(struct hill_state* hil_h,
          const c3_c*        lin_c)
{
  u2_wire wir_r = hil_h->wir_r;
  hi_shoa soa   = hil_h->soa;
  hi_shoz sob   = hil_h->sob;
  hi_shob soc   = hil_h->soc;
  const c3_c* out_c = 0;

  u2_bx_boot(wir_r);
  u2_bx_spot(wir_r, u2_nul);

  //  XX - a heinous hack.
  //
#if 0
  if ( !strcmp(lin_c, "!") ) {
    FooBar = 1;
    {
      u2_ray  kit_r = u2_bl_open(wir_r);

      if ( u2_bl_set(wir_r) ) {
        u2_bl_done(wir_r, kit_r);
        fprintf(stderr, "{no boot, c}\n");
      }
      else {
        soc = _hill_b_boot(wir_r, soa, sob, FileC);
        fprintf(stderr, "{test boot: %s, with %s: %x}\n", FileC, FileB,
            u2_mug(soc));
        u2_bl_done(wir_r, kit_r);
      }
      LoomStop = 0;
      u2_bx_show(wir_r);
      return;
    }
  }
  else 
#endif
    if ( !strncmp(lin_c, "w ", 2) ) {
    lin_c += 2; out_c = "w";
  } else if ( !strncmp(lin_c, "t ", 2) ) {
    lin_c += 2; out_c = "t";
  } else if (  !strncmp(lin_c, "d ", 2) ) {
    lin_c += 2; out_c = "d";
  } else if (  !strncmp(lin_c, "e ", 2) ) {
    lin_c += 2; out_c = "e";
  } else if (  !strncmp(lin_c, "p ", 2) ) {
    lin_c += 2; out_c = "p";
  } else if (  !strncmp(lin_c, "y ", 2) ) {
    lin_c += 2; out_c = "y";
  }
  else out_c = 0;

  {
    u2_ray kit_r = u2_bl_open(wir_r);

    if ( u2_bl_set(wir_r) ) {
      u2_bl_done(wir_r, kit_r);
      fprintf(stderr, "{exit}\n");
    } else {
      _hill_a_fire(wir_r, soa, sob, lin_c, out_c);
      // _hill_b_fire(wir_r, soa, sob, soc, lin_c, out_c);

      u2_bl_done(wir_r, kit_r);
    }
  }

  LoomStop = 0;
}
Ejemplo n.º 3
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;
  }
}