Cell translate(Cell t) { if (!ispair(t)) return t; if (car(t) == LAMBDA) return unabstract(translate(cdr(t))); else { Cell s; PUSH(cdr(t)); PUSH(translate(car(t))); s = translate(PUSHED(1)); s = pair(TOP, s); DROP(2); return s; } }
static uint16_t WPAD_ButtonsDown(int ictrl) { uint16_t btn = 0; if (PUSHED(a)) { btn |= WPAD_CLASSIC_BUTTON_A; } if (PUSHED(b)) { btn |= WPAD_CLASSIC_BUTTON_B; } if (PUSHED(x)) { btn |= WPAD_CLASSIC_BUTTON_X; } if (PUSHED(y)) { btn |= WPAD_CLASSIC_BUTTON_Y; } if (PUSHED(up)) { btn |= WPAD_CLASSIC_BUTTON_UP; } if (PUSHED(down)) { btn |= WPAD_CLASSIC_BUTTON_DOWN; } if (PUSHED(left)) { btn |= WPAD_CLASSIC_BUTTON_LEFT; } if (PUSHED(right)) { btn |= WPAD_CLASSIC_BUTTON_RIGHT; } // if (PUSHED(start)) { // btn |= WPAD_CLASSIC_BUTTON_START; // } // // if (PUSHED(back)) { // btn |= WPAD_CLASSIC_BUTTON_BACK; // } // // if (PUSHED(logo)) { // btn |= WPAD_CLASSIC_BUTTON_LOGO; // enableCapture(); // } // // if (PUSHED(rb)) { // btn |= WPAD_CLASSIC_BUTTON_RB; // } // // if (PUSHED(lb)) { // btn |= WPAD_CLASSIC_BUTTON_LB; // } // // if (PUSHED(s1_z)) { // btn |= WPAD_CLASSIC_BUTTON_RSTICK; // } // // if (PUSHED(s2_z)) { // btn |= WPAD_CLASSIC_BUTTON_LSTICK; // } return btn; }
Cell unabstract(Cell t) { if (isint(t)) { if (t == mkint(0)) return COMB_I; else return pair(COMB_K, mkint(intof(t)-1)); } else if (ispair(t)) { Cell f, g; PUSH(cdr(t)); PUSH(unabstract(car(t))); g = PUSHED(1) = unabstract(PUSHED(1)); f = TOP; if (IS_K1(f)) { if (g == COMB_I) { /* S (K x) I => x */ f = cdr(f); } else if (IS_K1(g)) { /* S (K x) (K y) => K (x y) */ car(g) = cdr(f); /* x y */ cdr(f) = g; /* K (x y) */ } else if (IS_B2(g)) { /* S (K x) (B y z) => B* x y z */ car(f) = COMB_BS; /* B* x */ car(car(g)) = f; /* B* x y z */ f = g; } else { /* S (K x) y => B x y */ car(f) = COMB_B; /* B x */ f = pair(f, g); /* B x y */ } } else if (IS_K1(g)) { if (IS_B2(f)) { /* S (B x y) (K z) => C' x y z */ car(car(f)) = COMB_CP; car(g) = f; f = g; } else { /* S x (K y) => C x y */ f = cdr(g); SET(g, COMB_C, TOP); /* C x */ f = pair(g, f); /* C x y */ } } else if (IS_B2(f)) { /* S (B x y) z => S' x y z */ car(car(f)) = COMB_SP; /* S' x y */ f = pair(f, g); /* S' x y z */ } else { /* S x y */ f = pair(COMB_S, f); f = pair(f, PUSHED(1)); } DROP(2); return f; } else return pair(COMB_K, t); }