// 9.5.2 Trap Processing // Trap: PROC[ptr: POINTER TO ControlLink] static inline void Trap(POINTER ptr) { ControlLink handler = ReadDblMds(ptr); PC = savedPC; SP = savedSP; if (ValidContext()) *StoreLF(LO_OFFSET(0, pc)) = PC; XFER(handler, LFCache::LF(), XT_trap, 0); }
static game_state *dup_game(game_state *state) { game_state *ret = snew(game_state); XFER(w); XFER(h); XFER(minballs); XFER(maxballs); XFER(nballs); XFER(nlasers); ret->grid = snewn((ret->w+2)*(ret->h+2), unsigned int); memcpy(ret->grid, state->grid, (ret->w+2)*(ret->h+2) * sizeof(unsigned int)); ret->exits = snewn(ret->nlasers, unsigned int); memcpy(ret->exits, state->exits, ret->nlasers * sizeof(unsigned int)); XFER(done); XFER(laserno); XFER(nguesses); XFER(reveal); XFER(justwrong); XFER(nright); XFER(nwrong); XFER(nmissed); return ret; }