--- /dev/null
+#include "core.h"\r
+\r
+void scrool_win_8(UI_Window *winfo, uchar *vram);\r
+void scrool_win_16(UI_Window *winfo, ushort *vram);\r
+void scrool_win_32(UI_Window *winfo, uint *vram);\r
+\r
+char closebtn[16][40] = {\r
+ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",\r
+ "OQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQJJQQQQQQQQJJQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQJJJQQQQQQJJJQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQQJJJQQQQJJJQQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQQQJJJQQJJJQQQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQQQQJJJJJJQQQQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQQQQQJJJJQQQQQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQQQQQJJJJQQQQQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQQQQJJJJJJQQQQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQQQJJJQQJJJQQQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQQJJJQQQQJJJQQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQJJJQQQQQQJJJQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQJJQQQQQQQQJJQQQQQQQQQQQQ$@",\r
+ "OQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ$@",\r
+ "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"\r
+};\r
+\r
+void init_windows(void)\r
+{\r
+ int i;\r
+\r
+ for(i = 0;i < MAX_WINDOWS;i++){\r
+ system.ui.window.ctrl.winfos[i].flags = initialized;\r
+ system.ui.window.ctrl.winfos[i].buf = (void *)0x00000000;\r
+ system.ui.window.ctrl.winfos[i].app_buf = (void *)0x00000000;\r
+ system.ui.window.ctrl.winfos[i].app_buf_bits = 0;\r
+ system.ui.window.ctrl.winfos[i].task = (UI_Task *)0;\r
+ }\r
+ return;\r
+}\r
+\r
+UI_Window *window_alloc(void)\r
+{\r
+ UI_Window *win;\r
+ int i;\r
+\r
+ for(i = 0;i < MAX_WINDOWS;i++){\r
+ if(system.ui.window.ctrl.winfos[i].flags == initialized){\r
+ win = &system.ui.window.ctrl.winfos[i];\r
+ win->flags = allocated;\r
+ win->buf = (void *)0x00000000;\r
+ win->app_buf = (void *)0x00000000;\r
+ win->app_buf_bits = 0;\r
+ win->task = (UI_Task *)0;\r
+ return win;\r
+ }\r
+ }\r
+ return 0;\r
+}\r
+\r
+void window_free(UI_Window *winfo)\r
+{\r
+ winfo->flags = initialized;\r
+ winfo->task = (UI_Task *)0;\r
+ return;\r
+}\r
+\r
+UI_Window *make_window(uchar *title, int xsize, int ysize, int px, int py, int height, bool active)\r
+{\r
+ UI_Window *winfo = window_alloc();\r
+\r
+ if(winfo == 0) goto err;\r
+ winfo->winxsize = xsize + 8;\r
+ winfo->winysize = ysize + 28;\r
+ winfo->xsize = xsize;\r
+ winfo->ysize = ysize;\r
+ winfo->position.x = px;\r
+ winfo->position.y = py;\r
+ winfo->origin.x = 4;\r
+ winfo->origin.y = 24;\r
+ winfo->win = sheet_alloc();\r
+ winfo->buf = (uint *)sys_memman_alloc((winfo->winxsize * winfo->winysize) * (system.data.info.vesa.BitsPerPixel >> 2));\r
+\r
+ sheet_setbuf(winfo->win, winfo->buf, winfo->winxsize, winfo->winysize,INV_COL32); \r
+\r
+ change_window(winfo, title, active);\r
+ boxfill_win(winfo, 0xFFFFFF, 0, 0, winfo->xsize, winfo->ysize);\r
+\r
+ sheet_slide(winfo->win, px, py);\r
+ sheet_updown(winfo->win, height); \r
+err:\r
+ return winfo;\r
+}\r
+\r
+UI_Window *make_window_app(uchar *title, int xsize, int ysize, int px, int py, int height, bool active, uint *buf, UI_Task *task)\r
+{\r
+ UI_Window *winfo = window_alloc();\r
+\r
+ if(winfo == 0) goto err;\r
+ winfo->winxsize = xsize + 8;\r
+ winfo->winysize = ysize + 28;\r
+ winfo->xsize = xsize;\r
+ winfo->ysize = ysize;\r
+ winfo->position.x = px;\r
+ winfo->position.y = py;\r
+ winfo->origin.x = 4;\r
+ winfo->origin.y = 24;\r
+ winfo->win = sheet_alloc();\r
+ winfo->buf = buf;\r
+ winfo->task = task;\r
+\r
+ sheet_setbuf(winfo->win, winfo->buf, winfo->winxsize, winfo->winysize,INV_COL32); \r
+\r
+ change_window(winfo, title, active);\r
+ boxfill_win(winfo, 0xFFFFFF, 0, 0, winfo->xsize, winfo->ysize);\r
+\r
+ sheet_slide(winfo->win, px, py);\r
+ sheet_updown(winfo->win, height); \r
+err:\r
+ return winfo;\r
+}\r
+\r
+UI_Window *make_window_app_compatible_hrb(uchar *title, int xsize, int ysize, int px, int py, int height, bool active, uint *buf, UI_Task *task)\r
+{\r
+ xsize = xsize - 8;\r
+ ysize = ysize - 28;\r
+ return make_window_app(title, xsize, ysize, px, py, height, active, buf, task);\r
+}\r
+\r
+void free_window_app(UI_Window *winfo)\r
+{\r
+ sheet_free(winfo->win);\r
+ window_free(winfo);\r
+ return;\r
+}\r
+\r
+void change_window(UI_Window *winfo, uchar *title, bool active)\r
+{\r
+ uint color = 0;\r
+ int x = 0, y = 0;\r
+ char c;\r
+\r
+ for (; *title != 0x00; title++) {\r
+ winfo->title[x] = *title; \r
+ x++;\r
+ }\r
+ winfo->title[x] = 0x00;\r
+ winfo->active = active; \r
+\r
+ if(system.data.info.vesa.BitsPerPixel == 8){\r
+ if(active) color = WIN_COL8_ACTIVE;\r
+ else color = WIN_COL8_INACTIVE;\r
+ } else if(system.data.info.vesa.BitsPerPixel == 16){\r
+ if(active) color = WIN_COL16_ACTIVE;\r
+ else color = WIN_COL16_INACTIVE;\r
+ } else if(system.data.info.vesa.BitsPerPixel == 32){\r
+ if(active) color = WIN_COL32_ACTIVE;\r
+ else color = WIN_COL32_INACTIVE;\r
+ }\r
+\r
+ boxfill_i(winfo->buf, winfo->winxsize, color, 0, 0, winfo->winxsize, 24); \r
+ boxfill_i(winfo->buf, winfo->winxsize, color, 0, 0, 4, winfo->winysize);\r
+ boxfill_i(winfo->buf, winfo->winxsize, color, winfo->winxsize - 4, 0, winfo->winxsize, winfo->winysize);\r
+ boxfill_i(winfo->buf, winfo->winxsize, color, 0, winfo->winysize - 4, winfo->winxsize, winfo->winysize);\r
+\r
+\r
+ line_i(winfo->buf, winfo->winxsize, 0, 0, winfo->winxsize - 1, 0, 0xFFFFFF);\r
+ line_i(winfo->buf, winfo->winxsize, 0, 0, 0, winfo->winysize - 1, 0xFFFFFF);\r
+ line_i(winfo->buf, winfo->winxsize, winfo->winxsize - 1, 0, winfo->winxsize - 1, winfo->winysize - 1, 0x000000);\r
+ line_i(winfo->buf, winfo->winxsize, 0, winfo->winysize - 1, winfo->winxsize - 1, winfo->winysize - 1, 0x000000);\r
+\r
+ putfonts_asc_sht_i(winfo->win, 4, 4, 0xFFFFFF, color, winfo->title);\r
+\r
+ for(y = 0; y < 16; y++){\r
+ for(x = 0; x < 40; x++){\r
+ c = closebtn[y][x];\r
+ if(c == '@') color = 0xFF0000;\r
+ else if(c == '$') color = 0xFF0000;\r
+ else if(c == 'Q') color = 0xFF0000;\r
+ else if(c == 'J') color = 0xFFFFFF;\r
+ else if(c == 'O') color = 0xFFFFFF;\r
+ point_i(winfo->buf, winfo->winxsize - 44 + x, y, color, winfo->winxsize);\r
+ }\r
+ }\r
+ refresh_window(winfo);\r
+ return;\r
+}\r
+\r
+void change_window_title(UI_Window *winfo, uchar *title)\r
+{\r
+ change_window(winfo, title, winfo->active);\r
+}\r
+\r
+void change_window_active(UI_Window *winfo, bool active)\r
+{\r
+ change_window(winfo, winfo->title, active);\r
+}\r
+\r
+void slide_window(UI_Window *winfo, int px, int py)\r
+{\r
+ winfo->position.x = px;\r
+ winfo->position.y = py;\r
+\r
+ sheet_slide(winfo->win, winfo->position.x, winfo->position.y);\r
+ return;\r
+}\r
+\r
+void refresh_window(UI_Window *winfo)\r
+{\r
+ sheet_refresh_full(winfo->win);\r
+ return;\r
+}\r
+\r
+void refresh_window_alpha(UI_Window *winfo)\r
+{\r
+ sheet_refresh_full_alpha(winfo->win);\r
+ return;\r
+}\r
+\r
+void boxfill_win(UI_Window *winfo, uint c, int x0, int y0, int x1, int y1)\r
+{\r
+ if(x0 < 0 || y0 < 0 || x1 > winfo->xsize || y1 > winfo->ysize) goto err;\r
+\r
+ boxfill_i(winfo->buf, winfo->winxsize, c, winfo->origin.x + x0, winfo->origin.y + y0, winfo->origin.x + x1, winfo->origin.y + y1);\r
+ sheet_refresh(winfo->win, x0 + winfo->origin.x, y0 + winfo->origin.y, x1 + winfo->origin.x, y1 + winfo->origin.y);\r
+err:\r
+ return;\r
+}\r
+\r
+void point_win(UI_Window *winfo, uint c, int x, int y)\r
+{\r
+ point_i(winfo->buf, x + winfo->origin.x, y + winfo->origin.y, c, winfo->winxsize);\r
+ return;\r
+}\r
+\r
+void putfonts_win(UI_Window *winfo, int x, int y, uint c, uint bc, const uchar *s)\r
+{\r
+ if(x < 0 || y < 0 || x > winfo->xsize || y > winfo->ysize) goto err;\r
+ putfonts_asc_sht_i(winfo->win, x + winfo->origin.x, y + winfo->origin.y, c, bc, s);\r
+err:\r
+ return;\r
+}\r
+\r
+void putfonts_win_no_bc(UI_Window *winfo, int x, int y, uint c, const uchar *s)\r
+{\r
+ if(x < 0 || y < 0 || x > winfo->xsize || y > winfo->ysize) goto err;\r
+ putfonts_asc_sht_i_no_bc(winfo->win, x + winfo->origin.x, y + winfo->origin.y, c, s);\r
+err:\r
+ return;\r
+}\r
+\r
+void scrool_win(UI_Window *winfo)\r
+{\r
+ if(system.data.info.vesa.BitsPerPixel == 8) scrool_win_8(winfo, winfo->buf);\r
+ else if(system.data.info.vesa.BitsPerPixel == 16) scrool_win_16(winfo, winfo->buf);\r
+ else if(system.data.info.vesa.BitsPerPixel == 32) scrool_win_32(winfo, winfo->buf);\r
+ boxfill_win(winfo, 0x000000, 0, winfo->ysize - 16, winfo->xsize, winfo->ysize);\r
+ return;\r
+}\r
+\r
+void scrool_win_32(UI_Window *winfo, uint *vram)\r
+{\r
+ int x, y;\r
+ for (y = winfo->origin.y; y < winfo->ysize + winfo->origin.y - 16; y++) {\r
+ for (x = winfo->origin.x; x < winfo->xsize + winfo->origin.x; x++) {\r
+ vram[x + y * winfo->winxsize] = vram[x + (y + 16) * winfo->winxsize];\r
+ }\r
+ }\r
+ return;\r
+}\r
+\r
+void scrool_win_16(UI_Window *winfo, ushort *vram)\r
+{\r
+ int x, y;\r
+\r
+ for (y = winfo->origin.y; y < winfo->ysize + winfo->origin.y - 16; y++) {\r
+ for (x = winfo->origin.x; x < winfo->xsize + winfo->origin.x; x++) {\r
+ vram[x + y * winfo->winxsize] = vram[x + (y + 16) * winfo->winxsize];\r
+ }\r
+ }\r
+ return;\r
+}\r
+\r
+void scrool_win_8(UI_Window *winfo, uchar *vram)\r
+{\r
+ int x, y;\r
+\r
+ for (y = winfo->origin.y; y < winfo->ysize + winfo->origin.y - 16; y++) {\r
+ for (x = winfo->origin.x; x < winfo->xsize + winfo->origin.x; x++) {\r
+ vram[x + y * winfo->winxsize] = vram[x + (y + 16) * winfo->winxsize];\r
+ }\r
+ }\r
+ return;\r
+}\r
+\r
+void line_win(UI_Window *winfo, int x0, int y0, int x1, int y1, uint c)\r
+{\r
+ line_i(winfo->buf, winfo->winxsize, x0 + winfo->origin.x, y0 + winfo->origin.y, x1 + winfo->origin.x, y1 + winfo->origin.y, c);\r
+ return;\r
+}\r
+\r
+void draw_hexagon_win(UI_Window *winfo, int a, int x, int y, uint c)\r
+{\r
+ draw_hexagon_i(winfo->buf, winfo->winxsize, a, x + winfo->origin.x, y + winfo->origin.y, c);\r
+ return;\r
+}\r
+\r
+\r
+\r