--- /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