Files
saphir/Saphir/Cmd.HC
2026-04-25 20:51:33 -04:00

82 lines
1.9 KiB
HolyC

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;
}
}
}