+++ /dev/null
-\r
-#include "core.h"\r
-\r
-uchar *ACPI_MemoryMap_Type[5] = {\r
- " USABLE",\r
- "RESERVED",\r
- " ACPI",\r
- "ACPI_NVS",\r
- "UNUSABLE"\r
-};\r
-\r
-System_CommonData systemdata;\r
-\r
-void CHNMain(void)\r
-{\r
- uint i;\r
- UI_Timer *c_timer;\r
- UI_Sheet *taskbar, *desktop;\r
- UI_Task *mytask;\r
-\r
- IO_CLI();\r
-\r
- Initialise_System(&systemdata);\r
-\r
- IO_STI();\r
-\r
- mytask = MultiTask_Get_NowTask();\r
-\r
- systemdata.keyctrltask = MultiTask_Task_Get("SysKeyCtrlTask");\r
- systemdata.keyctrltask->tss.ldtr = 0;\r
- systemdata.keyctrltask->tss.iomap = 0x4000;\r
- systemdata.keyctrltask->tss.eip = (uint)&CHNOS_KeyboardControlTask;\r
- systemdata.keyctrltask->tss.eflags = 0x00000202;\r
- systemdata.keyctrltask->tss.esp = (uint)MemoryBlock_Allocate_System(64 * 1024) + 64 * 1024;\r
- MemoryBlock_Write_Description((void *)(systemdata.keyctrltask->tss.esp - 64 * 1024), "SysKCT-Stack");\r
- systemdata.keyctrltask->tss.es = 1 * 8;\r
- systemdata.keyctrltask->tss.cs = 2 * 8;\r
- systemdata.keyctrltask->tss.ss = 1 * 8;\r
- systemdata.keyctrltask->tss.ds = 1 * 8;\r
- systemdata.keyctrltask->tss.fs = 1 * 8;\r
- systemdata.keyctrltask->tss.gs = 1 * 8;\r
- systemdata.keyctrltask->tss.cr3 = (uint)ADR_Paging_Directory;\r
- MultiTask_Task_Run(systemdata.keyctrltask);\r
-\r
- Mouse_Make_MouseCursor(&systemdata.mouse_cursor, 0, 0, systemdata.bootinfo->scrnx - 1, systemdata.bootinfo->scrny - 1, System_Sheet_Get_Top_Of_Height());\r
- Mouse_Move_Absolute(&systemdata.mouse_cursor, systemdata.bootinfo->scrnx >> 1, systemdata.bootinfo->scrny >> 1);\r
-\r
- systemdata.mousectrltask = MultiTask_Task_Get("MouseCtrlTask");\r
- systemdata.mousectrltask->tss.ldtr = 0;\r
- systemdata.mousectrltask->tss.iomap = 0x4000;\r
- systemdata.mousectrltask->tss.eip = (uint)&CHNOS_MouseControlTask;\r
- systemdata.mousectrltask->tss.eflags = 0x00000202;\r
- systemdata.mousectrltask->tss.esp = (uint)MemoryBlock_Allocate_System(64 * 1024) + 64 * 1024;\r
- MemoryBlock_Write_Description((void *)(systemdata.mousectrltask->tss.esp - 64 * 1024), "SysMCT-Stack");\r
- systemdata.mousectrltask->tss.es = 1 * 8;\r
- systemdata.mousectrltask->tss.cs = 2 * 8;\r
- systemdata.mousectrltask->tss.ss = 1 * 8;\r
- systemdata.mousectrltask->tss.ds = 1 * 8;\r
- systemdata.mousectrltask->tss.fs = 1 * 8;\r
- systemdata.mousectrltask->tss.gs = 1 * 8;\r
- systemdata.mousectrltask->tss.cr3 = (uint)ADR_Paging_Directory;\r
- MultiTask_Task_Run(systemdata.mousectrltask);\r
-\r
- desktop = System_Sheet_Get(systemdata.bootinfo->scrnx, systemdata.bootinfo->scrny, 0, 0);\r
- Sheet_Show(desktop, 0, 0, System_Sheet_Get_Top_Of_Height());\r
- Sheet_Draw_Fill_Rectangle(desktop, 0x66ff66, 0, 0, desktop->size.x - 1, desktop->size.y - 1);\r
-\r
- taskbar = System_Sheet_Get(systemdata.bootinfo->scrnx, 32, 0, 0);\r
- Sheet_Show(taskbar, 0, systemdata.bootinfo->scrny - 32, System_Sheet_Get_Top_Of_Height());\r
- Sheet_Draw_Fill_Rectangle_Gradation_Vertical(taskbar, 0xffffff, 0x6666ff, 0, 0, taskbar->size.x - 1, taskbar->size.y - 1);\r
-\r
- c_timer = Timer_Get(&systemdata.sysfifo, 5);\r
- Timer_Set(c_timer, 50, interval);\r
- Timer_Run(c_timer);\r
-\r
- FIFO32_Set_Task(&systemdata.sysfifo, mytask);\r
-\r
- Console_Create((systemdata.bootinfo->scrnx >> 4), (systemdata.bootinfo->scrny >> 5));\r
-\r
- for (;;) {\r
- if(FIFO32_Status(&systemdata.sysfifo) == 0){\r
- MultiTask_Task_Sleep(mytask);\r
- } else{\r
- i = FIFO32_Get(&systemdata.sysfifo);\r
- if(i < DATA_BYTE){\r
- if(i == 5){\r
-\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-void CHNOS_KeyboardControlTask(void)\r
-{\r
- UI_Task *mytask;\r
- UI_Listener *next, **now, *send;\r
- UI_KeyInfo kinfo;\r
- uint i, j;\r
- uint buf[5];\r
-\r
- mytask = MultiTask_Get_NowTask();\r
- next = 0;\r
- systemdata.keycmd_wait = 0;\r
-\r
- FIFO32_Set_Task(&systemdata.keyboardfifo, mytask);\r
-\r
- for (;;) {\r
- if(FIFO32_Status(&systemdata.keycmdfifo) > 0 && systemdata.keycmd_wait < 0){\r
- systemdata.keycmd_wait = FIFO32_Get(&systemdata.keycmdfifo);\r
- Keyboard_Controller_Wait_SendReady();\r
- IO_Out8(KEYB_DATA, systemdata.keycmd_wait);\r
- }\r
- if(FIFO32_Status(&systemdata.keyboardfifo) == 0){\r
- MultiTask_Task_Sleep(mytask);\r
- } else{\r
- i = FIFO32_Get(&systemdata.keyboardfifo);\r
- if(i < DATA_BYTE){ /*\83^\83X\83N\82Ö\82Ì\83R\83}\83\93\83h*/\r
- if(i == 1){ /*\83\8a\83X\83i\81[\93o\98^ FIFO32_Put_Arguments([fifo], 4, 0x01, [DATA_FIFO*], [flags], [offset]); ([0xFFFFFFFF])*/\r
- buf[0] = 0x01;\r
- buf[4] = 0x00;\r
- for(j = 1; j < 5; j++){\r
- buf[j] = FIFO32_Get(&systemdata.keyboardfifo);\r
- if(buf[j] == SIGNAL_ARGUMENTS_END){\r
- break;\r
- }\r
- }\r
- if(buf[4] == SIGNAL_ARGUMENTS_END){ /*\82·\82×\82Ä\90³\8fí\82É\8eó\90M\82µ\82½\81B*/\r
- for(now = &next; *now != 0; now = &(*now)->next){\r
-\r
- }\r
- *now = MemoryBlock_Allocate_System(sizeof(UI_Listener));\r
- MemoryBlock_Write_Description(*now, "UI_Listener");\r
- (*now)->next = 0;\r
- (*now)->fifo = (DATA_FIFO *)buf[1];\r
- (*now)->flags = buf[2];\r
- (*now)->offset = buf[3];\r
- }\r
- }\r
- } else if(DATA_BYTE <= i && i < (DATA_BYTE * 2)){ /*\83L\81[\83{\81[\83h\82©\82ç\82Ì\8eó\90M\83f\81[\83^*/\r
- Keyboard_Decode(&kinfo, i - DATA_BYTE);\r
- if(kinfo.make){\r
- if(kinfo.c != 0){ /*\88ê\94Ê\95¶\8e\9a*/\r
- for(send = next; send != 0; send = send->next){\r
- FIFO32_Put(send->fifo, kinfo.c + send->offset);\r
- }\r
- if(systemdata.key_focus != 0 && systemdata.key_focus->fifo != 0){ /*\83t\83H\81[\83J\83X\82Í\83L\81[\83f\81[\83^\82Ì\8eæ\93¾\82ð\8aó\96]\82µ\82Ä\82¢\82é*/\r
- FIFO32_Put(systemdata.key_focus->fifo, kinfo.c);\r
- }\r
- } else{ /*\93Á\8eê\95¶\8e\9a*/\r
-\r
- }\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-void CHNOS_MouseControlTask(void)\r
-{\r
- UI_Task *mytask;\r
- UI_Sheet *focus;\r
- DATA_Position2D focus_moveorg;\r
- uint i;\r
- int button_before;\r
- bool key_focus_changed;\r
- UI_Sheet *key_focus_before;\r
-\r
- UI_MouseEventArguments e;\r
-\r
- mytask = MultiTask_Get_NowTask();\r
- focus = 0;\r
- button_before = 0;\r
- key_focus_changed = false;\r
- key_focus_before = 0;\r
-\r
- FIFO32_Set_Task(&systemdata.mousefifo, mytask);\r
-\r
- for (;;) {\r
- if(FIFO32_Status(&systemdata.mousefifo) == 0){\r
- if(focus != 0){\r
- Sheet_Slide(focus, focus->position.x + (systemdata.mouse_cursor.position.x - focus_moveorg.x), focus->position.y + (systemdata.mouse_cursor.position.y - focus_moveorg.y));\r
- focus_moveorg.x = systemdata.mouse_cursor.position.x;\r
- focus_moveorg.y = systemdata.mouse_cursor.position.y;\r
- }\r
- MultiTask_Task_Sleep(mytask);\r
- } else{\r
- i = FIFO32_Get(&systemdata.mousefifo);\r
- if(i < DATA_BYTE){ /*\83^\83X\83N\82Ö\82Ì\83R\83}\83\93\83h*/\r
-\r
- } else if(DATA_BYTE <= i && i < (DATA_BYTE * 2)){ /*\83}\83E\83X\82©\82ç\82Ì\8eó\90M\83f\81[\83^*/\r
- if(Mouse_Decode(i - DATA_BYTE) != 0){\r
- Mouse_Move_Relative(&systemdata.mouse_cursor, systemdata.mousedecode.move.x, systemdata.mousedecode.move.y);\r
- if(focus == 0){\r
- if(systemdata.focus != Sheet_Get_From_Position(&sys_sheet_ctrl, systemdata.mouse_cursor.position.x, systemdata.mouse_cursor.position.y)){\r
- if(systemdata.focus != 0 && systemdata.focus->MouseEventProcedure != 0){\r
- e.focus = systemdata.focus;\r
- e.move.x = 0;\r
- e.move.y = 0;\r
- e.button = 0;\r
- e.button_before = (uint)button_before;\r
- systemdata.focus->MouseEventProcedure(&e);\r
- }\r
- }\r
- systemdata.focus = Sheet_Get_From_Position(&sys_sheet_ctrl, systemdata.mouse_cursor.position.x, systemdata.mouse_cursor.position.y);\r
- }\r
- if((systemdata.mousedecode.btn & MOUSE_BUTTON_L) != 0 && (button_before & MOUSE_BUTTON_L) == 0){ /*L down*/\r
- if(systemdata.key_focus != systemdata.focus){\r
- key_focus_changed = true;\r
- key_focus_before = systemdata.key_focus;\r
- }\r
- systemdata.key_focus = systemdata.focus;\r
- focus = systemdata.focus;\r
- focus_moveorg.x = systemdata.mouse_cursor.position.x;\r
- focus_moveorg.y = systemdata.mouse_cursor.position.y;\r
- if(!focus->mouse_movable){ /*\83}\83E\83X\82É\82æ\82é\88Ú\93®\95s\89Â*/\r
- focus = 0;\r
- } else{\r
- Sheet_UpDown(focus, System_Sheet_Get_Top_Of_Height());\r
- }\r
- } else if((systemdata.mousedecode.btn & MOUSE_BUTTON_L) == 0 && (button_before & MOUSE_BUTTON_L) != 0){ /*L up*/\r
- focus = 0;\r
- }\r
- if((systemdata.mousedecode.btn & MOUSE_BUTTON_R) != 0){ /*R*/\r
-\r
- }\r
- if((systemdata.mousedecode.btn & MOUSE_BUTTON_C) != 0){ /*C*/\r
-\r
- }\r
- if(key_focus_changed){\r
- if(key_focus_before != 0 && key_focus_before->fifo != 0 && (key_focus_before->ksignal_flags & SIGNAL_FLAGS_FOCUSINFO) != 0){\r
- FIFO32_Put_Arguments(key_focus_before->fifo, 2, SIGNAL_WINDOW_FOCUS_LOST, (uint)key_focus_before);\r
- }\r
- if(systemdata.key_focus != 0 && systemdata.key_focus->fifo != 0 && (systemdata.key_focus->ksignal_flags & SIGNAL_FLAGS_FOCUSINFO) != 0){\r
- FIFO32_Put_Arguments(systemdata.key_focus->fifo, 2, SIGNAL_WINDOW_FOCUS_GET, (uint)systemdata.key_focus);\r
- }\r
- key_focus_changed = false;\r
- }\r
- if(systemdata.focus != 0 && systemdata.focus->MouseEventProcedure != 0){ /*\83t\83H\81[\83J\83X\82Í\83V\81[\83g\82Å\81A\83C\83x\83\93\83g\82Ì\8eæ\93¾\82ð\8aó\96]\82µ\82Ä\82¢\82é*/\r
- e.focus = systemdata.focus;\r
- e.move.x = systemdata.mousedecode.move.x;\r
- e.move.y = systemdata.mousedecode.move.y;\r
- e.position_local.x = systemdata.mouse_cursor.position.x - focus->position.x;\r
- e.position_local.y = systemdata.mouse_cursor.position.y - focus->position.y;\r
- e.button = (uint)systemdata.mousedecode.btn;\r
- e.button_before = (uint)button_before;\r
- systemdata.focus->MouseEventProcedure(&e);\r
- }\r
- key_focus_before = systemdata.key_focus;\r
- button_before = systemdata.mousedecode.btn;\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-void CHNOS_UI_KeyFocus_Change(UI_Sheet *focus_new)\r
-{\r
- uint eflags;\r
-\r
- eflags = IO_Load_EFlags();\r
- IO_CLI();\r
-\r
- if(systemdata.key_focus != 0 && systemdata.key_focus->fifo != 0 && (systemdata.key_focus->ksignal_flags & SIGNAL_FLAGS_FOCUSINFO) != 0){\r
- FIFO32_Put_Arguments(systemdata.key_focus->fifo, 2, SIGNAL_WINDOW_FOCUS_LOST, systemdata.key_focus);\r
- }\r
- if(focus_new != 0 && focus_new->fifo != 0 && (focus_new->ksignal_flags & SIGNAL_FLAGS_FOCUSINFO) != 0){\r
- FIFO32_Put_Arguments(focus_new->fifo, 2, SIGNAL_WINDOW_FOCUS_GET, (uint)focus_new);\r
- }\r
- systemdata.key_focus = focus_new;\r
-\r
- IO_Store_EFlags(eflags);\r
- return;\r
-}\r