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; } 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; I64 j; switch (dir) { case SC_CURSOR_UP: i = wt - 1; j = -1; break; case SC_CURSOR_DOWN: i = wt + 1; j = 1; break; case SC_CURSOR_LEFT: i = wl - 1; j = -1; break; case SC_CURSOR_RIGHT: i = wl + 1; j = 1; break; } switch (dir) { case SC_CURSOR_UP: case SC_CURSOR_DOWN: for (i = i; i > 0 && i < TEXT_ROWS + 1; i += j) { task1 = adam_task->next_task; while (task1 != adam_task) { if (saphir_task_is_windowed(task1)) { if (task1->win_top == i && task1->win_left == wl) { WinFocus(task1); return; } } task1 = task1->next_task; } } break; case SC_CURSOR_LEFT: case SC_CURSOR_RIGHT: for (i = i; i > 0 && i < TEXT_COLS + 1; i += j) { task1 = adam_task->next_task; while (task1 != adam_task) { if (saphir_task_is_windowed(task1)) { if (task1->win_left == i) { WinFocus(task1); return; } } task1 = task1->next_task; } } break; default: break; } }