--- /dev/null
+\r
+#include "core.h"\r
+\r
+struct SYSTEM *sys_main_str_buf;\r
+\r
+void CHNMain(void)\r
+{\r
+ uchar s[128];\r
+ int i;\r
+ UI_Timer *t_1sec;\r
+ uint new_tsc[2];\r
+ uint old_tsc[2];\r
+ uint sec_clock[2];\r
+\r
+ init_system();\r
+\r
+ init_screen_i(system.ui.draw.sht.desktop_buf, system.ui.draw.sht.taskbar_buf, system.ui.draw.sht.mouse_buf);\r
+ sheet_updown(system.ui.draw.sht.core, -1);\r
+\r
+ sheet_updown(system.ui.draw.sht.desktop, 0);\r
+ sheet_updown(system.ui.draw.sht.taskbar, 1);\r
+ sheet_updown(system.ui.draw.sht.mouse, 2);\r
+\r
+ t_1sec = timer_alloc();\r
+ timer_init(t_1sec, &system.data.fifo.main, 1);\r
+ timer_settime_millisec(t_1sec, 1000);\r
+\r
+ system.ui.console.consoles[0].win = make_window("console", system.ui.console.org_xsize, system.ui.console.org_ysize, 10, 10, sheet_get_topheight(), false);\r
+ system.ui.console.consoles[0].task = task_alloc();\r
+ system.ui.console.consoles[0].task->tss.esp = (int)sys_memman_alloc(64 * 1024) + 64 * 1024;\r
+ system.ui.console.consoles[0].task->tss.eip = (int)&console_main;\r
+ system.ui.console.consoles[0].task->tss.es = 1 * 8;\r
+ system.ui.console.consoles[0].task->tss.cs = 2 * 8;\r
+ system.ui.console.consoles[0].task->tss.ss = 1 * 8;\r
+ system.ui.console.consoles[0].task->tss.ds = 1 * 8;\r
+ system.ui.console.consoles[0].task->tss.fs = 1 * 8;\r
+ system.ui.console.consoles[0].task->tss.gs = 1 * 8;\r
+ task_arguments(system.ui.console.consoles[0].task, 2, &system.ui.console.consoles[0]);\r
+ task_run(system.ui.console.consoles[0].task, 2, 2);\r
+\r
+ for(;;){\r
+ io_cli();\r
+ if(fifo32_status(&system.data.fifo.main) == 0){\r
+ task_sleep(system.ui.task.main);\r
+ io_sti();\r
+ } else{\r
+ i = fifo32_get(&system.data.fifo.main);\r
+ if(i == 1){\r
+ sprintf(s, "%02X%02X/%02X/%02X", readcmos(0x32), readcmos(0x09), readcmos(0x08), readcmos(0x07));\r
+ putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * 10)) - 4, 4, 0x000000, 0xffffff, s);\r
+ sprintf(s, "%02X:%02X:%02X", readcmos(0x04), readcmos(0x02), readcmos(0x00));\r
+ putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * 9)) - 4, 4 + 16, 0x000000, 0xffffff, s);\r
+ old_tsc[0] = new_tsc[0];\r
+ old_tsc[1] = new_tsc[1];\r
+ read_tsc(new_tsc);\r
+ if(new_tsc[1] > old_tsc[1]){\r
+ sec_clock[0] = new_tsc[0] - old_tsc[0];\r
+ sec_clock[1] = new_tsc[1] - old_tsc[1];\r
+ } else if(new_tsc[1] < old_tsc[1]){\r
+ sec_clock[0] = new_tsc[0] - old_tsc[0] - 1;\r
+ sec_clock[1] = (0xffffffff - old_tsc[1]) + new_tsc[1];\r
+ }\r
+ sprintf(s, "%08u%08u", sec_clock[0], sec_clock[1]);\r
+ putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * (10 + 1 + 3 + 21 + 1))) - 4, 20, 0x000000, 0xffffff, s);\r
+\r
+ timer_settime_millisec(t_1sec, 1000);\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+void KeyBoardControlTask(void)\r
+{\r
+ int i;\r
+ uchar s[128];\r
+ UI_KeyInfo dec_key;\r
+ UI_Console *key_to;\r
+\r
+ key_to = (UI_Console *)0;\r
+\r
+ for(;;){\r
+ if(fifo32_status(&system.data.fifo.keycmd) > 0 && system.io.keyboard.cmd_wait < 0){\r
+ system.io.keyboard.cmd_wait = fifo32_get(&system.data.fifo.keycmd);\r
+ wait_KBC_sendready();\r
+ io_out8(KEYB_DATA, system.io.keyboard.cmd_wait);\r
+ }\r
+ io_cli();\r
+ if(fifo32_status(&system.data.fifo.keyctrl) == 0){\r
+ task_sleep(system.ui.task.keyctrl);\r
+ io_sti();\r
+ } else{\r
+ i = fifo32_get(&system.data.fifo.keyctrl);\r
+ if(0x100 <= i && i <= 0x1ff){\r
+ decode_key(&dec_key, i - 0x100);\r
+ if(dec_key.make && dec_key.c != 0){/*\92Ê\8fí\95¶\8e\9a*/\r
+ sprintf(s, "[ ]");\r
+ s[1] = dec_key.c;\r
+ putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * (10 + 1 + 3))) - 4, 4, 0x000000, 0xffffff, s);\r
+ if(key_to != 0) fifo32_put(&key_to->task->fifo, dec_key.c + CONSOLE_FIFO_START_KEYB);\r
+ } else if(dec_key.make && dec_key.keycode == 0x3B && key_shift != 0){/*Shift + F1*/\r
+ if(key_to != 0 && key_to->task->tss.ss0 != 0){\r
+ cons_put_str(key_to, "\nBreak(key) :\n");\r
+ io_cli();\r
+ key_to->task->tss.eax = (int)&(key_to->task->tss.esp0);\r
+ key_to->task->tss.eip = (int)asm_end_app;\r
+ change_window_active(key_to->win, true);\r
+ io_sti();\r
+ }\r
+ } else if(dec_key.make && dec_key.keycode == 0x0E){/*BackSpace*/\r
+ if(key_to != 0) fifo32_put(&key_to->task->fifo, 0x0e + CONSOLE_FIFO_START_KEYB);\r
+ } else if(dec_key.make && dec_key.keycode == 0x0f){/*Tab*/\r
+ if(key_to == 0){\r
+ key_to = &system.ui.console.consoles[0];\r
+ change_window_active(key_to->win, true);\r
+ fifo32_put(&key_to->task->fifo, CONSOLE_FIFO_CURSOR_START);\r
+ } else{\r
+ fifo32_put(&key_to->task->fifo, CONSOLE_FIFO_CURSOR_STOP);\r
+ change_window_active(key_to->win, false);\r
+ key_to = (UI_Console *)0;\r
+ }\r
+ } else if(dec_key.make && dec_key.keycode == 0x57){/*F11*/\r
+ if(system.ui.draw.sht.ctrl.top > 3) sheet_updown(system.ui.draw.sht.ctrl.sheets[2], sheet_get_topheight());\r
+ } else if(dec_key.make && dec_key.keycode == 0x1c){/*Enter*/\r
+ if(key_to != 0) fifo32_put(&key_to->task->fifo, 0x0a + CONSOLE_FIFO_START_KEYB);\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+void MouseControlTask(void)\r
+{\r
+ int i, mx, my, scrool = 0;\r
+ int j, x, y;\r
+ int k;\r
+ UI_Sheet *sht = 0;\r
+ int mmx = -1, mmy = -1;\r
+ bool win_move = false;\r
+ uchar s[128];\r
+\r
+ mx = system.data.info.boot.scrnx >> 1;\r
+ my = system.data.info.boot.scrny >> 1;\r
+\r
+ for(;;){\r
+ io_cli();\r
+ if(fifo32_status(&system.data.fifo.mousectrl) == 0){\r
+ task_sleep(system.ui.task.mousectrl);\r
+ io_sti();\r
+ } else{\r
+ i = fifo32_get(&system.data.fifo.mousectrl);\r
+ if(0x100 <= i && i <= 0x1ff){\r
+ if(decode_mouse(i - 0x100) != 0){\r
+ mx += system.io.mouse.decode.x;\r
+ my += system.io.mouse.decode.y;\r
+ if(mx < 0) mx = 0;\r
+ if(my < 0) my = 0;\r
+ if(mx > system.data.info.boot.scrnx - 1) mx = system.data.info.boot.scrnx - 1;\r
+ if(my > system.data.info.boot.scrny - 1) my = system.data.info.boot.scrny - 1;\r
+\r
+ if(system.io.mouse.decode.scrool == 0xFFFFFFFF) scrool++;\r
+ if(system.io.mouse.decode.scrool == 0x00000001) scrool--;\r
+\r
+ sprintf(s, "[lcr](%4d,%4d,%04d)", mx, my, scrool);\r
+ if((system.io.mouse.decode.btn & 0x01) != 0){\r
+ s[1] = 'L';\r
+ if(win_move == false){\r
+ for(j = system.ui.draw.sht.ctrl.top - 1; j >= 1; j--){\r
+ sht = system.ui.draw.sht.ctrl.sheets[j];\r
+ x = mx - sht->vx0;\r
+ y = my - sht->vy0;\r
+ if(0 <= x && x < sht->bxsize && 0 <= y && y < sht->bysize){\r
+ sheet_updown(sht, sheet_get_topheight());\r
+ if(0 <= y && y <= 24){\r
+ for(k = 0;k < MAX_WINDOWS;k++){\r
+ if(system.ui.window.ctrl.winfos[k].win == sht) break;\r
+ }\r
+ if(k < MAX_WINDOWS && y <= 16 && (sht->bxsize - 44) <= x && x <= (sht->bxsize - 4) && system.ui.window.ctrl.winfos[k].task != 0){\r
+ io_cli();\r
+ system.ui.window.ctrl.winfos[k].task->tss.eax = (int)&(system.ui.window.ctrl.winfos[k].task->tss.esp0);\r
+ system.ui.window.ctrl.winfos[k].task->tss.eip = (int)asm_end_app;\r
+ change_window_active(&system.ui.window.ctrl.winfos[k], true);\r
+ io_sti();\r
+ }\r
+ if(k < MAX_WINDOWS){\r
+ win_move = true;\r
+ mmx = mx;\r
+ mmy = my;\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ } else{\r
+ x = mx - mmx;\r
+ y = my - mmy;\r
+ sheet_slide(sht, sht->vx0 + x, sht->vy0 + y);\r
+ mmx = mx;\r
+ mmy = my;\r
+ }\r
+ } else{\r
+ win_move = false;\r
+ }\r
+ if((system.io.mouse.decode.btn & 0x02) != 0){\r
+ s[3] = 'R';\r
+ }\r
+ if((system.io.mouse.decode.btn & 0x04) != 0){\r
+ s[2] = 'C';\r
+ }\r
+ putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * (10 + 1 + 3 + 21 + 1))) - 4, 4, 0x000000, 0xffffff, s);\r
+ sheet_slide(system.ui.draw.sht.mouse, mx, my);\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r