static void drawmove(chtype tchar, int oldy, int oldx, int row, int column) /* place the stars, update board & currents */ { if (movecount <= 1) { int i, j; for (i = 0; i < BDEPTH; i++) { for (j = 0; j < BWIDTH; j++) { if (movecount == 0) { unmarkcell(i, j); } else { cellmove(i, j); if (winch(boardwin) == minus) waddch(boardwin, movecount ? ' ' : minus); } } } } else { markcell(tchar, oldy, oldx); mark_possibles(oldy, oldx, ' '); } if (row >= 0 && column >= 0) { markcell(trail, row, column); mark_possibles(row, column, minus); board[row][column] = TRUE; } wprintw(msgwin, "\nMove %d", movecount); if (trialcount != movecount) wprintw(msgwin, " (%d tries)", trialcount); wclrtoeol(msgwin); }
void markcell(int addr){ if(USED_CELL(addr)) return; MARK_CELL(addr); if(car(addr) != 0) markcell(car(addr)); if(cdr(addr) != 0) markcell(cdr(addr)); if((GET_BIND(addr) != 0) && (IS_FUNC(addr))) markcell(GET_BIND(addr)); }
void gbcmark(void){ int addr, i; //oblistをマークする。 markoblist(); //oblistからつながっているcellをマークする。 addr = ep; while(!(nullp(addr))){ markcell(car(addr)); addr = cdr(addr); } //argstackからbindされているcellをマークする。 for(i = 0; i < ap; i++) markcell(argstk[i]); }