int clip_WREOPEN(ClipMachine * ClipMachineMemory) { int top, left, bottom, right; int erase, i; ClipWindow *wp = 0; _clip_fullscreen(ClipMachineMemory); if (ClipMachineMemory->argc < 4) return EG_ARG; top = _clip_parni(ClipMachineMemory, 1); left = _clip_parni(ClipMachineMemory, 2); bottom = _clip_parni(ClipMachineMemory, 3); right = _clip_parni(ClipMachineMemory, 4); erase = _clip_parl(ClipMachineMemory, 5); if (top > bottom || left > right) return EG_ARG; //save_window(ClipMachineMemory, ClipMachineMemory->windows + ClipMachineMemory->wnum); wp = ClipMachineMemory->windows + ClipMachineMemory->wnum; wp->ClipRect_rect_of_ClipWindow.top_of_ClipRect = top; wp->ClipRect_rect_of_ClipWindow.bottom_of_ClipRect = bottom; wp->ClipRect_rect_of_ClipWindow.left_of_ClipRect = left; wp->ClipRect_rect_of_ClipWindow.right_of_ClipRect = right; wp->ClipRect_format_of_ClipWindow = wp->ClipRect_rect_of_ClipWindow; ClipMachineMemory->screen->y = 0; ClipMachineMemory->screen->x = 0; adjust_cursor(ClipMachineMemory); if (erase) { int attr = _clip_colorSelect(ClipMachineMemory); int j; char fill = *((char *) _clip_fetch_item(ClipMachineMemory, HASH_setclearb)); Screen *sp = ClipMachineMemory->screen; bottom -= top; top = 0; right -= left; left = 0; clip_region(ClipMachineMemory, &top, &left, &bottom, &right, 2, -1); for (i = top; i <= bottom; ++i) { sp->touched[i] = 1; for (j = left; j <= right; ++j) { sp->chars[i][j] = fill; sp->colors[i][j] = attr; sp->attrs[i][j] = 0; } } draw_shadow(ClipMachineMemory, wp); sync_mp(ClipMachineMemory); } _clip_retni(ClipMachineMemory, wp->no_of_ClipWindow); return 0; }
int singleplayer_process_input (struct state *st, struct ui *ui, char c) { int cursi = ui->cursor.i; int cursj = ui->cursor.j; switch (c) { case 'q': case 'Q': return 1; case 'f': st->prev_speed = st->speed; st->speed = faster(st->speed); break; case 's': st->prev_speed = st->speed; st->speed = slower(st->speed); break; case 'p': if (st->speed == sp_pause) st->speed = st->prev_speed; else { st->prev_speed = st->speed; st->speed = sp_pause; } break; case 'h': case K_LEFT: cursi--; break; case 'l': case K_RIGHT: cursi++; break; case 'k': case K_UP: cursj--; if (cursj % 2 == 1) cursi++; break; case 'j': case K_DOWN: cursj++; if (cursj % 2 == 0) cursi--; break; case ' ': if (st->fg[st->controlled].flag[ui->cursor.i][ui->cursor.j] == 0) add_flag (&st->grid, &st->fg[st->controlled], ui->cursor.i, ui->cursor.j, FLAG_POWER); else remove_flag (&st->grid, &st->fg[st->controlled], ui->cursor.i, ui->cursor.j, FLAG_POWER); break; case 'x': remove_flags_with_prob (&st->grid, &st->fg[st->controlled], 1.0); break; case 'c': remove_flags_with_prob (&st->grid, &st->fg[st->controlled], 0.5); break; case 'r': case 'v': build (&st->grid, &st->country[st->controlled], st->controlled, ui->cursor.i, ui->cursor.j); break; case ESCAPE: case 91: break; } adjust_cursor(st, ui, cursi, cursj); return 0; }