+++ /dev/null
-#include <conio.h>\r
-#include <dos.h>\r
-#include <mem.h>\r
-\r
-#include "modex.hpp"\r
-#include "xpal.hpp"\r
-\r
-BYTE Xpal[768];\r
-\r
-void\r
-set_paletteX(BYTE *pal, FLAG downgrade)\r
-{\r
- short int i;\r
- BYTE *buf;\r
-\r
- memcpy(Xpal, pal, 768);\r
-\r
- buf = Xpal;\r
- if (downgrade) {\r
- i=768;\r
- while (i--) {\r
- *buf++ = (*buf >> 2);\r
- }\r
- }\r
-\r
- outp(0x03c8, 0); // Start with color 0\r
- buf = Xpal;\r
- i=256;\r
- while (i--) {\r
- outp(0x03c9, *buf++);\r
- outp(0x03c9, *buf++);\r
- outp(0x03c9, *buf++);\r
- }\r
-}\r
-\r
-\r
-void\r
-get_paletteX(BYTE *pal, FLAG upgrade)\r
-{\r
- int i;\r
-\r
- memcpy(pal, Xpal, 768);\r
-\r
- if (upgrade) {\r
- i=768;\r
- while (i--) {\r
- *pal++ = (*pal << 2);\r
- }\r
- }\r
-}\r
-\r
-\r
-void\r
-get_BIOSpaletteX(BYTE *pal, FLAG upgrade)\r
-{\r
- int i;\r
- union REGS r;\r
-\r
- r.x.eax = 0x1017;\r
- r.x.ebx = 0;\r
- r.x.ecx = 256;\r
- r.x.edx = (unsigned long) pal;\r
-\r
- int386(0x10, &r, &r);\r
-\r
- if (upgrade) {\r
- i=768;\r
- while (i--) {\r
- *pal++ = (*pal << 2);\r
- }\r
- }\r
-}\r
-\r
-\r
-void\r
-photo_negativeX(void)\r
-{\r
- short int i;\r
- BYTE temp_pal[768];\r
- BYTE *temp;\r
-\r
- get_paletteX(temp_pal, 0);\r
- temp = temp_pal;\r
-\r
- for (i=0; i < 256; i++) {\r
- *temp++ = (64 - (*temp));\r
- *temp++ = (64 - (*temp));\r
- *temp++ = (64 - (*temp));\r
- }\r
-\r
- set_paletteX(temp_pal, 0);\r
-}\r
-\r
-\r
-void\r
-grey_paletteX(void)\r
-{\r
- smooth64_paletteX(1, 1, 1);\r
-}\r
-\r
-\r
-void\r
-RGB_paletteX(void)\r
-{\r
- BYTE r, g, b;\r
- BYTE temp_pal[768];\r
- BYTE *temp;\r
-\r
- temp = temp_pal;\r
-\r
- for (r=0; r < 8; r++) {\r
- for (g=0; g < 8; g++) {\r
- for (b=0; b < 4; b++) {\r
- *temp++ = (r << 3);\r
- *temp++ = (g << 3);\r
- *temp++ = (b << 4);\r
- }\r
- }\r
- }\r
-\r
- set_paletteX(temp_pal, 0);\r
-}\r
-\r
-\r
-void\r
-smooth64_paletteX(BYTE r, BYTE g, BYTE b)\r
-{\r
- short int i;\r
- BYTE temp_pal[768];\r
- BYTE *temp;\r
-\r
- memset(temp_pal, 0, 768);\r
-\r
-\r
- if (r) {\r
- temp = temp_pal;\r
- for (i=0; i < 64; i++) {\r
- *temp = i;\r
- temp += 3;\r
- }\r
- }\r
-\r
- if (g) {\r
- temp = temp_pal + 1;\r
- for (i=0; i < 64; i++) {\r
- *temp = i;\r
- temp += 3;\r
- }\r
- }\r
-\r
- if (b) {\r
- temp = temp_pal + 2;\r
- for (i=0; i < 64; i++) {\r
- *temp = i;\r
- temp += 3;\r
- }\r
- }\r
-\r
- set_paletteX(temp_pal, 0);\r
-}\r
-\r
-\r
-void\r
-brighten_paletteX(SBYTE r, SBYTE g, SBYTE b)\r
-{\r
- short int i, j, scratch;\r
- BYTE temp_pal[768];\r
- BYTE *temp;\r
- SBYTE dummy[3];\r
-\r
- get_paletteX(temp_pal, 0);\r
- temp = temp_pal;\r
-\r
- dummy[0] = r;\r
- dummy[1] = g;\r
- dummy[2] = b;\r
-\r
- for (i=0; i < 256; i++) {\r
- for (j=0; j < 3; j++) {\r
- scratch = *temp + dummy[j];\r
- if (scratch <= 0) {\r
- *temp++ = 0;\r
- } else if (scratch >= 63) {\r
- *temp++ = 63;\r
- } else {\r
- *temp++ = scratch;\r
- }\r
- }\r
- }\r
-\r
- set_paletteX(temp_pal, 0);\r
-}\r
-\r
-\r
-void\r
-stretch_paletteX(BYTE r, BYTE g, BYTE b)\r
-{\r
- short int i, j, scratch;\r
- BYTE temp_pal[768];\r
- BYTE *temp;\r
- BYTE dummy[3];\r
-\r
- get_paletteX(temp_pal, 0);\r
- temp = temp_pal;\r
-\r
- dummy[0] = r;\r
- dummy[1] = g;\r
- dummy[2] = b;\r
-\r
- for (i=0; i < 256; i++) {\r
- for (j=0; j < 3; j++) {\r
- scratch = ((((*temp - 32) * dummy[j]) + 8) >> 4) + 32;\r
- if (scratch <= 0) {\r
- *temp++ = 0;\r
- } else if (scratch >= 63) {\r
- *temp++ = 63;\r
- } else {\r
- *temp++ = scratch;\r
- }\r
- }\r
- }\r
-\r
- set_paletteX(temp_pal, 0);\r
-}\r
-\r
-\r
-void\r
-rot_palette(BYTE dist)\r
-{\r
- int shift, i;\r
- BYTE temp_pal[768];\r
-\r
- shift = (dist * 3);\r
- memcpy(temp_pal, Xpal + shift, 768 - shift);\r
- memcpy(temp_pal + (768 - shift), Xpal, shift);\r
-\r
- set_paletteX(temp_pal, 0);\r
-}\r
-\r
-\r
-BYTE\r
-find_RGB(BYTE r, BYTE g, BYTE b)\r
-{\r
- long shortest_dist, temp_dist;\r
- short int i, shortest_pal;\r
-\r
- shortest_pal = 0;\r
- shortest_dist = (r - Xpal[0]) * (r - Xpal[0]) +\r
- (g - Xpal[1]) * (g - Xpal[1]) +\r
- (b - Xpal[2]) * (b - Xpal[2]);\r
-\r
- for (i=1; i < 256; i++) {\r
- temp_dist = (r - Xpal[(i * 3) + 0]) * (r - Xpal[(i * 3) + 0]) +\r
- (g - Xpal[(i * 3) + 1]) * (g - Xpal[(i * 3) + 1]) +\r
- (b - Xpal[(i * 3) + 2]) * (b - Xpal[(i * 3) + 2]);\r
-\r
- if (temp_dist < shortest_dist) {\r
- shortest_dist = temp_dist;\r
- shortest_pal = i;\r
- }\r
- }\r
-\r
- return i;\r
-}\r
-\r