Bool saphir_task_is_windowed(CTask* task) { if (!task || task == ac.task) { return FALSE; } if ((task->display_flags & 1 << DISPLAYf_SHOW) && ((task->display_flags & 1 << DISPLAYf_NOT_RAW))) return TRUE; return FALSE; } U0 saphir_split_row() { CTask* task1 = sys_focus_task; CTask* task2 = User; MemCpy(&task2->win_left, &task1->win_left, 32); task1->win_bottom = (task1->win_top + task1->win_bottom) / 2; task2->win_top = task1->win_bottom + 2; WinZBufUpdate; } U0 saphir_split_col() { CTask* task1 = sys_focus_task; CTask* task2 = User; MemCpy(&task2->win_left, &task1->win_left, 32); task1->win_right = (task1->win_left + task1->win_right) / 2; task2->win_left = task1->win_right + 2; WinZBufUpdate; } I64 saphir_win_select_CR(I64 dir) { if (dir & 1) { return TEXT_COLS + 1; } return TEXT_ROWS + 1; } I64 saphir_win_select_XY(I64 wt, I64 wl, I64 dir) { if (dir & 1) { return wl; } return wt; } I64 saphir_win_select_pos(I64 dir) { return 1 - (2 * (dir < SC_CURSOR_RIGHT)); } Bool saphir_task_should_focus(CTask* task1, I64 i, I64 wl, I64 dir) { if (dir & 1) { return task1->win_left == i; } return task1->win_top == i && task1->win_left == wl; } U0 saphir_win_select(I64 dir) { CTask* task = sys_focus_task; CTask* task1; I64 wt = task->win_top; I64 wl = task->win_left; I64 i, j, k; i = j = saphir_win_select_pos(dir); i += saphir_win_select_XY(wt, wl, dir); k = saphir_win_select_CR(dir); for (i = i; i > 0 && i < k; i += j) { task1 = adam_task->next_task; while (task1 != adam_task) { if (saphir_task_is_windowed(task1) && saphir_task_should_focus(task1, i, wl, dir)) { WinFocus(task1); return; } task1 = task1->next_task; } } }