OSDN Git Service

svn rev.329より移動。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_008 / chnos / graphic.c
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_008/chnos/graphic.c b/CHNOSProject/chnos/tolset_chn_000/chnos_008/chnos/graphic.c
new file mode 100644 (file)
index 0000000..005a57d
--- /dev/null
@@ -0,0 +1,603 @@
+\r
+#include "core.h"\r
+\r
+/*ColorTable*/\r
+uint rgb_int2char_list [16] = {\r
+       0x000000,\r
+       0xff0000,\r
+       0x00ff00,\r
+       0xffff00,\r
+       0x0000ff,\r
+       0xff00ff,\r
+       0x00ffff,\r
+       0xffffff,\r
+       0xc6c6c6,\r
+       0x840000,\r
+       0x008400,\r
+       0x848400,\r
+       0x000084,\r
+       0x840084,\r
+       0x008484,\r
+       0x848484\r
+};\r
+char cursor[24][24] = {\r
+       "***.....................",\r
+       "*O**....................",\r
+       "*OO**...................",\r
+       "*OOO**..................",\r
+       "*OOOO**.................",\r
+       "*OOOOO**................",\r
+       "*OOOOOO**...............",\r
+       "*OOOOOOO**..............",\r
+       "*OOOOOOOO**.............",\r
+       "*OOOOOOOOO**............",\r
+       "*OOOOOOOOOO**...........",\r
+       "*OOOOOOOOOOO**..........",\r
+       "*OOOOOOOOOOOO**.........",\r
+       "*OOOOOOOOOOOOO**........",\r
+       "*OOOOOOOOOOOOOO**.......",\r
+       "*OOOOOOOOOOOOOOO**......",\r
+       "*OOOOOOOOOOOOOOOO**.....",\r
+       "*OOOOOO*************....",\r
+       "*OOOOO**................",\r
+       "*OOOO**.................",\r
+       "*OOO**..................",\r
+       "*OO**...................",\r
+       "*O**....................",\r
+       "***.....................",\r
+};\r
+\r
+void putfonts_asc_sht_i(UI_Sheet *sht, int x, int y, uint c, uint bc, const uchar *s)\r
+{\r
+       int l;\r
+       l = strlen(s);\r
+       boxfill_i(sht->buf, sht->bxsize, bc, x, y, x + l * 8, y + 16);\r
+       putfonts_asc_i(sht->buf, sht->bxsize, x, y, c, s);\r
+       sheet_refresh(sht, x, y, x + l * 8, y + 16);\r
+       return;\r
+}\r
+\r
+void putfonts_asc_sht_i_no_bc(UI_Sheet *sht, int x, int y, uint c, const uchar *s)\r
+{\r
+       int l;\r
+       l = strlen(s);\r
+       putfonts_asc_i(sht->buf, sht->bxsize, x, y, c, s);\r
+       sheet_refresh(sht, x, y, x + l * 8, y + 16);\r
+       return;\r
+}\r
+\r
+void init_screen_i(void *desktop, void *taskbar, void *mousecursor)\r
+{\r
+       uchar bpp;\r
+\r
+       bpp = system.data.info.vesa.BitsPerPixel;\r
+\r
+       if(bpp == 8){\r
+               init_palette();\r
+       }\r
+       init_desktop_i(desktop);\r
+       init_taskbar_i(taskbar);\r
+       init_mousecursor_i(mousecursor);\r
+\r
+       return;\r
+}\r
+\r
+void init_desktop_i(void *vrami)\r
+{\r
+       uchar bpp;\r
+       uint xsize, ysize;\r
+\r
+       bpp = system.data.info.vesa.BitsPerPixel;\r
+       xsize = system.data.info.boot.scrnx;\r
+       ysize = system.data.info.boot.scrny;\r
+\r
+       if(bpp == 8){\r
+               init_desktop8(vrami, xsize, ysize);\r
+       } else if(bpp == 16){\r
+               init_desktop16(vrami, xsize, ysize);\r
+       } else if(bpp == 32){\r
+               init_desktop32(vrami, xsize, ysize);\r
+       }\r
+       return; \r
+}\r
+\r
+void init_taskbar_i(void *vrami)\r
+{\r
+       uchar bpp;\r
+       uint xsize;\r
+\r
+       bpp = system.data.info.vesa.BitsPerPixel;\r
+       xsize = system.data.info.boot.scrnx;\r
+\r
+       if(bpp == 8){\r
+               init_taskbar8(vrami, xsize);\r
+       } else if(bpp == 16){\r
+               init_taskbar16(vrami, xsize);\r
+       } else if(bpp == 32){\r
+               init_taskbar32(vrami, xsize);\r
+       }\r
+       return; \r
+}\r
+\r
+void init_mousecursor_i(void *vrami)\r
+{\r
+       uchar bpp;\r
+\r
+       bpp = system.data.info.vesa.BitsPerPixel;\r
+\r
+       if(bpp == 8){\r
+               init_mouse_cursor8(vrami);\r
+       } else if(bpp == 16){\r
+               init_mouse_cursor16(vrami);\r
+       } else if(bpp == 32){\r
+               init_mouse_cursor32(vrami);\r
+       }\r
+       return; \r
+}\r
+\r
+uint mix_color(uint c0, uint c1)\r
+{\r
+       float r0,g0,b0,r1,g1,b1,alpha;\r
+       uint cc;\r
+\r
+       cc = c0 << 24;\r
+       b0 = (float)(cc >> 24);\r
+       cc = c0 << 16;\r
+       g0 = (float)(cc >> 24);\r
+       cc = c0 << 8;\r
+       r0 = (float)(cc >> 24);\r
+\r
+       cc = c1 << 24;\r
+       b1 = (float)(cc >> 24);\r
+       cc = c1 << 16;\r
+       g1 = (float)(c1 >> 24);\r
+       cc = c1 << 8;\r
+       r1 = (float)(c1 >> 24);\r
+\r
+       alpha = (float)(c1 >> 24);\r
+\r
+       r1 = r1 * (alpha / 255) + r0 * (1 - (alpha / 255));\r
+       g1 = g1 * (alpha / 255) + g0 * (1 - (alpha / 255));\r
+       b1 = b1 * (alpha / 255) + b0 * (1 - (alpha / 255));\r
+\r
+       c1 = (uint) alpha;\r
+       c1 = c1 << 8;\r
+       c1 += (uint) r1;\r
+       c1 = c1 << 8;\r
+       c1 += (uint) g1;\r
+       c1 = c1 << 8;\r
+       c1 += (uint) b1;\r
+\r
+       return c1;\r
+}\r
+\r
+void point_i(void *vrami, int x, int y, uint c, int xsize)\r
+{\r
+       uint cc = 0x00000000;\r
+\r
+       if(system.data.info.vesa.BitsPerPixel == 8){\r
+               cc = rgb_int2char(c);\r
+       } else if(system.data.info.vesa.BitsPerPixel == 16){\r
+               cc = rgb_int2short(c);\r
+       } else if(system.data.info.vesa.BitsPerPixel == 32){\r
+               cc = c;\r
+       }\r
+       point_bpp(vrami, x, y, cc, xsize, system.data.info.vesa.BitsPerPixel);\r
+       return;\r
+}\r
+\r
+void point_bpp(void *vrami, int x, int y, uint c, int xsize, uint bpp)\r
+{\r
+       uchar *buf8;\r
+       ushort *buf16;\r
+       uint *buf32;\r
+\r
+       if(bpp == 8){\r
+               buf8 = vrami;\r
+               buf8[y * xsize + x] = (uchar)c;\r
+       } else if(bpp == 16){\r
+               buf16 = vrami;\r
+               buf16[y * xsize + x] = (ushort)c;\r
+       } else if(bpp == 32){\r
+               buf32 = vrami;\r
+               buf32[y * xsize + x] = (uint)c;\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+void boxfill_i(void *vrami, int xsize, uint c, int x0, int y0, int x1, int y1)\r
+{\r
+       uint cc = 0x00000000;\r
+\r
+       if(system.data.info.vesa.BitsPerPixel == 8){\r
+               cc = rgb_int2char(c);\r
+       } else if(system.data.info.vesa.BitsPerPixel == 16){\r
+               cc = rgb_int2short(c);\r
+       } else if(system.data.info.vesa.BitsPerPixel == 32){\r
+               cc = c;\r
+       }\r
+       boxfill_bpp(vrami, xsize, cc, x0, y0, x1, y1, system.data.info.vesa.BitsPerPixel);\r
+       return;\r
+}\r
+\r
+void boxfill_bpp(void *vrami, int xsize, uint c, int x0, int y0, int x1, int y1, uint bpp)\r
+{\r
+       if(bpp == 8){\r
+               boxfill8(vrami, xsize, c, x0, y0, x1, y1);      \r
+       } else if(bpp == 16){\r
+               boxfill16(vrami, xsize, c, x0, y0, x1, y1);\r
+       } else if(bpp == 32){\r
+               boxfill32(vrami, xsize, c, x0, y0, x1, y1);\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+void putfonts_asc_i(void *vrami, int xsize, int x, int y, uint c, const uchar *s)\r
+{\r
+       if(system.data.info.vesa.BitsPerPixel == 8){\r
+               uchar c8 = rgb_int2char(c);\r
+               for (; *s != 0x00; s++) {\r
+                       putfont8(vrami, xsize, x, y, c8, hankaku + *s * 16);\r
+                       x += 8;\r
+               }\r
+               return;\r
+       } else if(system.data.info.vesa.BitsPerPixel == 16){\r
+               ushort c16 = rgb_int2short(c);\r
+               for (; *s != 0x00; s++) {\r
+                       putfont16(vrami, xsize, x, y, c16, hankaku + *s * 16);\r
+                       x += 8;\r
+               }\r
+               return;\r
+       } else if(system.data.info.vesa.BitsPerPixel == 32){\r
+               for (; *s != 0x00; s++) {\r
+                       putfont32(vrami, xsize, x, y, c, hankaku + *s * 16);\r
+                       x += 8;\r
+               }\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+void putblock_i(void *vrami, int vxsize, int pxsize, int pysize, int px0, int py0, void *buf, int bxsize)\r
+{\r
+       if(system.data.info.vesa.BitsPerPixel == 8){\r
+               putblock8_8(vrami, vxsize, pxsize, pysize, px0, py0, buf, bxsize);\r
+       } else if(system.data.info.vesa.BitsPerPixel == 16){\r
+               putblock16_16(vrami, vxsize, pxsize, pysize, px0, py0, buf, bxsize);\r
+       } else if(system.data.info.vesa.BitsPerPixel == 32){\r
+               putblock32_32(vrami, vxsize, pxsize, pysize, px0, py0, buf, bxsize);\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+void putblock_i_convert(void *to, int xsize, int px0, int py0, int px1, int py1, void *from, int tobpp, int frombpp)\r
+{\r
+       int x, y;\r
+\r
+       if(tobpp == 32){\r
+               if(frombpp == 8){\r
+                       for(y = py0; y < py1; y++){\r
+                               for(x = px0; x < px1; x++){\r
+                                       ((uint *)to)[(xsize * y) + x] = rgb_int2char_list[((uchar *)from)[(xsize * y) + x]];\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+void line_i(void *vrami, int xsize, int x0, int y0, int x1, int y1, uint c)\r
+{\r
+       int i, x, y, len, dx, dy;\r
+\r
+       dx = x1 - x0;\r
+       dy = y1 - y0;\r
+       x = x0 << 10;\r
+       y = y0 << 10;\r
+       if(dx < 0) dx = -dx;\r
+       if(dy < 0) dy = -dy;\r
+       if(dx >= dy){\r
+               len = dx + 1;\r
+               if(x0 > x1) dx = -1024;\r
+               else dx = 1024;\r
+               if(y0 <= y1) dy = ((y1 - y0 + 1) << 10) / len;\r
+               else dy = ((y1 - y0 - 1) << 10) / len;\r
+       } else{\r
+               len = dy + 1;\r
+               if(y0 > y1) dy = -1024;\r
+               else dy = 1024;\r
+               if(x0 <= x1) dx = ((x1 - x0 + 1) << 10) / len;\r
+               else dx = ((x1 - x0 - 1) << 10) / len;\r
+       }\r
+       for(i = 0; i < len; i++){\r
+               point_i(vrami, x >> 10, y >> 10, c, xsize);\r
+               x += dx;\r
+               y += dy;\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+void line_bpp(void *vrami, int xsize, int x0, int y0, int x1, int y1, uint c, uint bpp)\r
+{\r
+       int i, x, y, len, dx, dy;\r
+\r
+       dx = x1 - x0;\r
+       dy = y1 - y0;\r
+       x = x0 << 10;\r
+       y = y0 << 10;\r
+       if(dx < 0) dx = -dx;\r
+       if(dy < 0) dy = -dy;\r
+       if(dx >= dy){\r
+               len = dx + 1;\r
+               if(x0 > x1) dx = -1024;\r
+               else dx = 1024;\r
+               if(y0 <= y1) dy = ((y1 - y0 + 1) << 10) / len;\r
+               else dy = ((y1 - y0 - 1) << 10) / len;\r
+       } else{\r
+               len = dy + 1;\r
+               if(y0 > y1) dy = -1024;\r
+               else dy = 1024;\r
+               if(x0 <= x1) dx = ((x1 - x0 + 1) << 10) / len;\r
+               else dx = ((x1 - x0 - 1) << 10) / len;\r
+       }\r
+       for(i = 0; i < len; i++){\r
+               point_bpp(vrami, x >> 10, y >> 10, c, xsize, bpp);\r
+               x += dx;\r
+               y += dy;\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+void draw_hexagon_i(void *vrami, int xsize, int a, int x, int y, uint c)\r
+{\r
+       int n, m;\r
+\r
+       if(a < 0) a = -a;\r
+       m = a >> 1;\r
+       n = (1773 * m) >> 10;\r
+\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+       line_i(vrami, xsize, x + n, y - m, x + n, y + m, c);\r
+       line_i(vrami, xsize, x + n, y + m, x    , y + a, c);\r
+       line_i(vrami, xsize, x    , y + a, x - n, y + m, c);\r
+       line_i(vrami, xsize, x - n, y + m, x - n, y - m, c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       return;\r
+}\r
+\r
+void draw_chnos_logo(void *vrami, int xsize, int a, int x, int y)\r
+{\r
+       int n, m, oldx, oldy;\r
+       uint c;\r
+\r
+       oldx = x;\r
+       oldy = y;\r
+\r
+       if(a < 0) a = -a;\r
+       m = a >> 1;\r
+       n = (1773 * m) >> 10;\r
+       c = 0x00FFFF;\r
+\r
+       x = x - n;\r
+       x = x - n;\r
+       x = x - n;\r
+       y = y - (3 * m);\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+       line_i(vrami, xsize, x + n, y + m, x    , y + a, c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       x = x + n;\r
+       x = x + n;\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+       line_i(vrami, xsize, x + n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x + n, y - m, x + n, y + m, c);\r
+       line_i(vrami, xsize, x + n, y + m, x    , y + a, c);\r
+       line_i(vrami, xsize, x    , y + a, x    , y    , c);\r
+       line_i(vrami, xsize, x    , y + a, x - n, y + m, c);\r
+       line_i(vrami, xsize, x - n, y + m, x - n, y - m, c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       x = x + n;\r
+       x = x + n;\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+       line_i(vrami, xsize, x + n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x + n, y - m, x + n, y + m, c);\r
+       line_i(vrami, xsize, x + n, y + m, x    , y + a, c);\r
+       line_i(vrami, xsize, x    , y + a, x    , y    , c);\r
+       line_i(vrami, xsize, x    , y + a, x - n, y + m, c);\r
+       line_i(vrami, xsize, x - n, y + m, x - n, y - m, c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       x = x + n;\r
+       x = x + n;\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+       line_i(vrami, xsize, x    , y + a, x - n, y + m, c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       x = x - n;\r
+       x = x - n;\r
+\r
+       x = x - n;\r
+       x = x - n;\r
+\r
+       x = x + n;\r
+       y = y + (3 * m);\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+       line_i(vrami, xsize, x + n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x + n, y - m, x + n, y + m, c);\r
+       line_i(vrami, xsize, x + n, y + m, x    , y + a, c);\r
+       line_i(vrami, xsize, x    , y + a, x    , y    , c);\r
+       line_i(vrami, xsize, x    , y + a, x - n, y + m, c);\r
+       line_i(vrami, xsize, x - n, y + m, x - n, y - m, c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       x = x + n;\r
+       y = y + (3 * m);\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+\r
+       x = x + n;\r
+       x = x + n;\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+       line_i(vrami, xsize, x + n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x + n, y - m, x + n, y + m, c);\r
+       line_i(vrami, xsize, x + n, y + m, x    , y + a, c);\r
+       line_i(vrami, xsize, x    , y + a, x    , y    , c);\r
+       line_i(vrami, xsize, x    , y + a, x - n, y + m, c);\r
+       line_i(vrami, xsize, x - n, y + m, x - n, y - m, c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       x = x - n;\r
+       x = x - n;\r
+\r
+       x = x - n;\r
+       y = y - (3 * m);\r
+\r
+       x = x - n;\r
+       y = y + (3 * m);\r
+\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       x = x - n;\r
+       x = x - n;\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+       line_i(vrami, xsize, x + n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x + n, y - m, x + n, y + m, c);\r
+       line_i(vrami, xsize, x + n, y + m, x    , y + a, c);\r
+       line_i(vrami, xsize, x    , y + a, x    , y    , c);\r
+       line_i(vrami, xsize, x    , y + a, x - n, y + m, c);\r
+       line_i(vrami, xsize, x - n, y + m, x - n, y - m, c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       x = x + n;\r
+       x = x + n;\r
+\r
+       line_i(vrami, xsize, x + n, y - m, x + n, y + m, c);\r
+\r
+       x = x + n;\r
+       y = y + (3 * m);\r
+\r
+       line_i(vrami, xsize, x    , y - a, x + n, y - m, c);\r
+       line_i(vrami, xsize, x + n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x + n, y - m, x + n, y + m, c);\r
+       line_i(vrami, xsize, x + n, y + m, x    , y + a, c);\r
+       line_i(vrami, xsize, x    , y + a, x    , y    , c);\r
+       line_i(vrami, xsize, x    , y + a, x - n, y + m, c);\r
+       line_i(vrami, xsize, x - n, y + m, x - n, y - m, c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y    , c);\r
+       line_i(vrami, xsize, x - n, y - m, x    , y - a, c);\r
+\r
+       putfonts_asc_i(vrami, xsize, oldx + n + 8, oldy, 0x00FF00, "CHNOSProject");\r
+\r
+       return;\r
+}\r
+\r
+uchar rgb_int2char (uint c32)\r
+{\r
+       uchar i ;\r
+       for(i = 0;i < 15; i++) {\r
+               if(rgb_int2char_list[i] == c32) {\r
+                       return i;\r
+               }\r
+       }\r
+       return 8;\r
+}\r
+\r
+ushort rgb_int2short (uint c32)\r
+{\r
+       ushort c16;\r
+       uchar c[4];\r
+\r
+       c[3] = (c32 << 24) >> 24;\r
+       c[2] = (c32 << 16) >> 24;\r
+       c[1] = (c32 <<  8) >> 24;\r
+       c[0] = (c32 >> 24);\r
+\r
+       c16 = ((c[1] >> 3) << 11 | (c[2] >> 2) << 5 | (c[3] >> 3));\r
+       \r
+       return c16;\r
+}\r
+\r
+void col_pat(void *vrami, int xsize, int ysize)\r
+{\r
+       int x,y;\r
+\r
+       x=0;\r
+       y=0;\r
+       boxfill_i(vrami,xsize,0x000000,x,y,x+20,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x000000,0x7fff0000),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0xFF0000,x,y,x+20,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7fff0000,0x7f00ff00),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0x00FF00,x,y,x+20,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7f00ff00,0x7fffff00),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0xFFFF00,x,y,x+20,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7fffff00,0x7f0000ff),x+20,y,x+40,y+40);\r
+\r
+       y+=40;\r
+       x=0;\r
+       boxfill_i(vrami,xsize,0x0000FF,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7f0000ff,0x7fff00ff),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0xFF00FF,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7fff00ff,0x7f00ffff),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0x00FFFF,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7f00ffff,0x7fffffff),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0xFFFFFF,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7fffffff,0x7fc6c6c6),x+20,y,x+40,y+40);\r
+\r
+       y+=40;\r
+       x=0;\r
+       boxfill_i(vrami,xsize,0xC6C6C6,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7fc6c6c6,0x7fff0000),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0x840000,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7fff0000,0x7f008400),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0x008400,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7f008400,0x7f848400),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0x848400,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7f848400,0x7f000084),x+20,y,x+40,y+40);\r
+\r
+       y+=40;\r
+       x=0;\r
+       boxfill_i(vrami,xsize,0x000084,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x000000,0x7fff0000),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0x840084,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7fff0000,0x7f840084),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0x008484,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x7f840084,0x7f008484),x+20,y,x+40,y+40);\r
+       x+=40;\r
+       boxfill_i(vrami,xsize,0x848484,x,y,x+40,y+40);\r
+       boxfill_i(vrami,xsize,mix_color(0x07f008484,0x7f848484),x+20,y,x+40,y+40);\r
+\r
+       return;\r
+}\r
+\r