--- mstools/samples/mfedit/mfedit.c 2018/08/09 18:24:08 1.1.1.3 +++ mstools/samples/mfedit/mfedit.c 2018/08/09 18:26:24 1.1.1.4 @@ -38,6 +38,244 @@ #include #include + +#if 0 +// +// TEST!!! +// +HBITMAP hbmp; + + +typedef struct tagLOGPAL { + WORD palVersion; + WORD palNumEntries; + PALETTEENTRY palPalEntry[48]; +} LOGPAL; + +#define exp 17 // explicit entries on end +#define pb 6 // palette base + +HPALETTE hPal, hOldPal; +LOGPAL LogPal = +{ + 0x300, pb+16+9+exp, + { +#if pb + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, +#endif + { 0, 0, 0, PC_RESERVED }, // black + { 0, 0, 255, PC_RESERVED }, // blue + { 255, 0, 0, PC_RESERVED }, // red + { 0, 255, 0, PC_RESERVED }, // green + { 255, 0, 255, PC_RESERVED }, // magenta + { 0, 255, 255, PC_RESERVED }, // cyan + { 255, 255, 0, PC_RESERVED }, // yellow + { 192, 192, 192, PC_RESERVED }, // white + { 96, 96, 96, PC_RESERVED }, // dark grey + { 0, 0, 185, PC_RESERVED }, // blue + { 185, 0, 0, PC_RESERVED }, // red + { 0, 185, 0, PC_RESERVED }, // green + { 185, 0, 185, PC_RESERVED }, // magenta + { 0, 185, 185, PC_RESERVED }, // cyan + { 185, 185, 0, PC_RESERVED }, // yellow + { 255, 255, 255, PC_RESERVED }, // white + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_RESERVED }, + { 0, 0, 0, PC_EXPLICIT }, // physical palette index 0 (Windows black) + { 1, 0, 0, PC_EXPLICIT }, // physical palette index 1 + { 2, 0, 0, PC_EXPLICIT }, // physical palette index 2 + { 3, 0, 0, PC_EXPLICIT }, // physical palette index 3 + { 4, 0, 0, PC_EXPLICIT }, // physical palette index 4 + { 5, 0, 0, PC_EXPLICIT }, // physical palette index 5 + { 6, 0, 0, PC_EXPLICIT }, // physical palette index 6 + { 7, 0, 0, PC_EXPLICIT }, // physical palette index 7 + { 8, 0, 0, PC_EXPLICIT }, // physical palette index 8 + { 9, 0, 0, PC_EXPLICIT }, // physical palette index 9 + { 10, 0, 0, PC_EXPLICIT }, // physical palette index 10 + { 11, 0, 0, PC_EXPLICIT }, // physical palette index 11 + { 12, 0, 0, PC_EXPLICIT }, // physical palette index 12 + { 13, 0, 0, PC_EXPLICIT }, // physical palette index 13 + { 14, 0, 0, PC_EXPLICIT }, // physical palette index 14 + { 15, 0, 0, PC_EXPLICIT }, // physical palette index 15 + { 255, 0, 0, PC_EXPLICIT } // Windows white + } +}; + +typedef struct BMAPINFO +{ + BITMAPINFOHEADER bmiHeader; + union + { + WORD awColors[16]; + RGBQUAD aRGBQuad[16]; + } u; +} BMAPINFO; + +BMAPINFO DIBHdr = +{ + { + sizeof(BITMAPINFOHEADER), // biSize + 64, // biWidth + 64, // biHeight + 1, // biPlanes + 4, // biBitCount + BI_RGB, // biCompression + 2048, // biSizeImage + 0, // biXPelsPerMeter + 0, // biYPelsPerMeter + 0, // biClrUsed + 0 // biClrImportant + }, + // Here the indices map 1 to 1 with our logical palette, they may change + // depending on the index of the first color but they always follow in order: + {{0+pb,1+pb,2+pb,3+pb,4+pb,5+pb,6+pb,7+pb,8+pb,9+pb,10+pb,11+pb,12+pb,13+pb,14+pb,15+pb}} +}; + +static BYTE dib[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, + 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +}; +#endif + + // // Forward declarations. // @@ -64,6 +302,17 @@ BOOL bFreeDibFile(PDIBDATA); BOOL bPlgBlt(HDC, LPPOINT); HPALETTE CopyPalette(HPALETTE hPalSrc); int CALLBACK iTT(LPLOGFONT, LPTEXTMETRIC, DWORD, LPARAM); +CMTMLTFMT *pLoadMltFmtFile(VOID); +HLOCAL Free(CMTMLTFMT *pMfmt); +BOOL bGetEPSBounds(LPVOID, RECTL *); +BOOL bIsAdobe(char *szStr); +BOOL bIsEPS(char *szStr); +BOOL bIsBndBox(char *szStr); +BOOL bIsEOF(char *szStr); +//BOOL bGetWord(LPVOID, char *, char **); +//BOOL bGoNextLine(LPVOID, char **); +BOOL bGetWord(LPVOID, char *, int*); +BOOL bGoNextLine(LPVOID, int*); /***************************************************************************\ * WinMain @@ -892,6 +1141,30 @@ PASTE_EXIT: return 0L; } + case MM_C_WND_MF: + return 0L; + case MM_C_BEGIN_GP: + case MM_C_END_GP: + return 0L; + case MM_C_MLTFMTS: { + CMTMLTFMT *pMfmt; + + if ((gbRecording) && (ghDCMetaf != NULL)) { + if ((pMfmt = pLoadMltFmtFile()) != NULL) { + GdiComment(ghDCMetaf, + sizeof(CMTMLTFMT)+pMfmt->aemrformat[0].cbData, + (CONST BYTE *) pMfmt); + Free(pMfmt); + } + else + MessageBox(ghwndMain, + "Fail to load Multiformat file!", + "Error", + MB_OK); + } + + return 0L; + } case MM_HITTEST: { static BOOL bHitTest=FALSE; HWND hwndRecBtn; @@ -1013,9 +1286,11 @@ PASTE_EXIT: } szTmp = (char *)strtok(szTmp2, "."); wsprintf((LPSTR) szComment, "MfEdit:\\0%s\\0\\0", szTmp); +#if 0 if (!GdiComment(ghDCMetaf, 256, szComment)) { MessageBox(ghwndMain, "Fail in adding comment!", "Error", MB_OK); } +#endif } gbRecording = TRUE; @@ -1101,12 +1376,12 @@ PASTE_EXIT: SetWindowText(ghTextWnd, "ERROR: Failed in creating the metafile DC!"); return 0L; } - wsprintf((LPSTR) szComment, "MfEdit:\\0%s\\0\\0", szTitle); +#if 0 if (!GdiComment(ghDCMetaf, 256, szComment)) { MessageBox(ghwndMain, "Fail in adding comment!", "Error", MB_OK); } - +#endif gbRecording = TRUE; if (ghpnCur != NULL) @@ -1458,7 +1733,21 @@ long APIENTRY DrawSurfWndProc( rect.bottom-rect.top-30, SWP_NOZORDER | SWP_NOMOVE); - CreateCaret(hwnd, NULL, 1, 12); +#if 0 +//CreateCaret(hwnd, NULL, 1, 12); +//hbmp = LoadBitmap(ghModule, (LPCSTR)MAKEINTRESOURCE(BMID_TOOLBASED)); + +hPal = CreatePalette((LOGPALETTE *)&LogPal); +hDC = GetDC(hwnd); +hOldPal = SelectPalette(hDC, hPal, FALSE); +RealizePalette(hDC); + +hbmp = CreateDIBitmap(hDC, (LPBITMAPINFOHEADER)&DIBHdr, CBM_CREATEDIB, &dib, (LPBITMAPINFO)&DIBHdr, DIB_PAL_COLORS); +CreateCaret(hwnd, hbmp, 1, 12); + +ReleaseDC(hwnd, hDC); +#endif + ghCurFont = GetStockObject(SYSTEM_FONT); GetObject(ghCurFont, sizeof(LOGFONT), &glf); hCurArrow = LoadCursor(NULL, IDC_ARROW); @@ -2019,12 +2308,31 @@ BOOL bDrawStuff(HDC hDC, INT OrgX, INT O break; case DID_TEXT: { POINT Pt; +#if 0 +HDC hDCMem; +#endif if (lpstr == NULL) { ShowCaret(ghwndDrawSurf); bCaretShown = TRUE; SetCaretPos(NextX, NextY); MoveToEx(hDC, NextX, NextY, NULL); + +#if 0 +StretchDIBits(hDC, 20, 20+120, 64, 64, 0, 64, 64, -64, &dib, + (LPBITMAPINFO)&DIBHdr, DIB_PAL_COLORS, SRCCOPY); + +hDCMem = CreateCompatibleDC(hDC); +SelectPalette(hDCMem, hPal, FALSE); +RealizePalette(hDCMem); +SelectObject(hDCMem, hbmp); +BitBlt(hDC, 0,0,64,64,hDCMem, 0,0,SRCCOPY); +DeleteDC(hDCMem); +#endif + + + + SetFocus(ghwndDrawSurf); break; } @@ -4051,3 +4359,329 @@ int CALLBACK iTT( UNREFERENCED_PARAMETER (dwFontType); } + + + +/******************************Public*Routine******************************\ +* +* CMTMLTFMT *pLoadMltFmtFile(VOID) +* +* Effects: Load either EPS or enh mf +* +* Warnings: CR! change this to load multiple def of picture +* +* History: +* 16-Aug-1993 -by- Petrus Wong +* Wrote it. +\**************************************************************************/ + +CMTMLTFMT *pLoadMltFmtFile(VOID) +{ + OPENFILENAME ofn; + char szDirName[256]; + char szFile[256], szFileTitle[256]; + static char *szFilter; + HANDLE hFile, hMapFile; + LPVOID pMapFile; + DWORD dwFileSizeLow, dwFileSizeHigh; + CMTMLTFMT *pMfmt; + + pMfmt = (CMTMLTFMT*)NULL; + + szFilter = + "EPS files (*.eps)\0*.eps\0Enhanced Metafiles (*.emf)\0*.emf\0\0"; + + GetSystemDirectory((LPSTR) szDirName, 256); + strcpy(szFile, "*.eps\0"); + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = GetFocus(); + ofn.lpstrFilter = szFilter; + ofn.lpstrCustomFilter = (LPSTR) NULL; + ofn.nMaxCustFilter = 0L; + ofn.nFilterIndex = 1; + ofn.lpstrFile = szFile; + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFileTitle = szFileTitle; + ofn.nMaxFileTitle = sizeof(szFileTitle); + ofn.lpstrInitialDir = szDirName; + ofn.lpstrTitle = (LPSTR) NULL; + ofn.Flags = 0L; + ofn.nFileOffset = 0; + ofn.nFileExtension = 0; + ofn.lpstrDefExt = "EPS"; + + if (!GetOpenFileName(&ofn)) { + goto EXIT; + } + + if ((hFile = CreateFile(szFile, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL)) == (HANDLE)-1) { + goto EXIT; + } + + dwFileSizeLow = GetFileSize(hFile, &dwFileSizeHigh); + if ((dwFileSizeLow == 0xFFFFFFFF) && (GetLastError() != NO_ERROR)) { + goto EXIT; + } + + // + // Create a map file of the opened file + // + if ((hMapFile = CreateFileMapping(hFile, NULL, + PAGE_READONLY, 0, 0, NULL)) == (HANDLE)-1) { + goto EXIT2; + } + + // + // Map a view of the whole file + // + if ((pMapFile = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0)) == NULL) { + goto EXIT3; + } + +// +// CR!! In future, change this to load different def of the picture... +// + { + ULONG ulSize; + PBYTE pjTmp; + RECTL rectl; + + ulSize = dwFileSizeLow+sizeof(CMTMLTFMT); + if ((pMfmt = (CMTMLTFMT *) LocalAlloc(LMEM_FIXED, ulSize)) == NULL) { + MessageBox(GetFocus(), "Fail in Memory Allocation!", "Error", MB_OK); + goto EXIT3; + } + + pMfmt->ident = GDICOMMENT_IDENTIFIER; + pMfmt->iComment = GDICOMMENT_MULTIFORMATS; + pMfmt->nFormats = 1; + pMfmt->aemrformat[0].cbData = dwFileSizeLow; + pMfmt->aemrformat[0].offData = 11*sizeof(DWORD); + + // parse for %!PS-Adobe-3.0 EPSF keyword + // Enhanced Metafile signature + // set EMRFORMAT.dSignature appropiately + + if (((ENHMETAHEADER *) pMapFile)->dSignature == ENHMETA_SIGNATURE) { + + pMfmt->aemrformat[0].dSignature = ENHMETA_SIGNATURE; + pMfmt->aemrformat[0].nVersion = 0; // not for emf + pMfmt->rclOutput.left = ((ENHMETAHEADER *) pMapFile)->rclBounds.left; + pMfmt->rclOutput.top = ((ENHMETAHEADER *) pMapFile)->rclBounds.top; + pMfmt->rclOutput.right = ((ENHMETAHEADER *) pMapFile)->rclBounds.right; + pMfmt->rclOutput.bottom = ((ENHMETAHEADER *) pMapFile)->rclBounds.bottom; + } + else //assume it is Adobe EPS + if (bGetEPSBounds(pMapFile, &rectl)) { + + char text[128]; + + + pMfmt->aemrformat[0].dSignature = 0x46535045; + pMfmt->aemrformat[0].nVersion = 1; + pMfmt->rclOutput.left = rectl.left; + pMfmt->rclOutput.top = rectl.top; + pMfmt->rclOutput.right = rectl.right; + pMfmt->rclOutput.bottom = rectl.bottom; + + wsprintf(text, "Bounds = %d %d %d %d", + rectl.left, rectl.top, rectl.right, rectl.bottom); + MessageBox(GetFocus(), text, "Bounds", MB_OK); + + } + else { + // unknown file type + Free(pMfmt); + pMfmt = NULL; + goto EXIT3; + } + + pjTmp = (PBYTE)(((DWORD *)pMfmt->aemrformat)+4); + while (dwFileSizeLow--) { + *(((PBYTE)pjTmp)++) = *(((PBYTE)pMapFile)++); + } + + } + + +EXIT3: + CloseHandle(hMapFile); +EXIT2: + CloseHandle(hFile); +EXIT: + + return pMfmt; +} + + +HLOCAL Free(CMTMLTFMT *pMfmt) { + return LocalFree(pMfmt); +} + +#define DBG 0 + +BOOL bIsAdobe(char *szStr) +{ + if (strcmp(szStr, "%!PS-Adobe-3.0") == 0) + return TRUE; + else + return FALSE; +} + +BOOL bIsEPS(char *szStr) +{ + if ((strcmp(szStr, "EPSF-3.0") == 0) || + (strcmp(szStr, "EPSF-2.0") == 0)) + return TRUE; + else + return FALSE; +} + +BOOL bIsBndBox(char *szStr) +{ + if (strcmp(szStr, "%%BoundingBox:") == 0) + return TRUE; + else + return FALSE; +} + +BOOL bIsEOF(char *szStr) +{ + if (strcmp(szStr, "%%EOF") == 0) + return TRUE; + else + return FALSE; +} + + +BOOL bGetEPSBounds(LPVOID lpData, RECTL *prctl) +{ + char szKeyWord[128], szValue[128]; + int index; + + + if (lpData == NULL) { +#if DBG + MessageBox(GetFocus(), "Null Pointer!", "Error", MB_OK); +#endif + return FALSE; + } + + index = 0; + + if (!bGetWord(lpData, szKeyWord, &index)) + return FALSE; + + if (!bIsAdobe(szKeyWord)) { + MessageBox(GetFocus(), "Not Adobe!", "Error", MB_OK); + return FALSE; + } + + if (!bGetWord(lpData, szValue, &index)) + return FALSE; + + if (!bIsEPS(szValue)) { + MessageBox(GetFocus(), "Not EPS!", "Error", MB_OK); + return FALSE; + } + + if (!bGoNextLine(lpData, &index)) + return FALSE; + + while ((bGetWord(lpData, szKeyWord, &index)) && + (!bIsBndBox(szKeyWord))) { +#if DBG + MessageBox(GetFocus(), "Skip to EOL", "Error", MB_OK); +#endif + if (!bGoNextLine(lpData, &index)) { + MessageBox(GetFocus(), "EOF unexpectedly!", "Error", MB_OK); + return FALSE; + } + } + + if (bIsBndBox(szKeyWord)) { + if (bGetWord(lpData, szValue, &index)) + prctl->left = atol(szValue); + else { + MessageBox(GetFocus(), "Fail to get bnd: left!", "Error", MB_OK); + return FALSE; + } + + if (bGetWord(lpData, szValue, &index)) + prctl->top = atol(szValue); + else { + MessageBox(GetFocus(), "Fail to get bnd: top!", "Error", MB_OK); + return FALSE; + } + + if (bGetWord(lpData, szValue, &index)) + prctl->right = atol(szValue); + else { + MessageBox(GetFocus(), "Fail to get bnd: right!", "Error", MB_OK); + return FALSE; + } + + if (bGetWord(lpData, szValue, &index)) + prctl->bottom = atol(szValue); + else { + MessageBox(GetFocus(), "Fail to get bnd: bottom", "Error", MB_OK); + return FALSE; + } + } + + return TRUE; + +} + + +BOOL bGetWord(LPVOID lpData, char *str, int* pi) +{ + char *pstr; + + pstr = str; + + while (((char *)lpData)[*pi] == ' ') + (*pi)++; + + while ((((char *)lpData)[*pi] != ' ') && + (((char *)lpData)[*pi] != '\n') && + (((char *)lpData)[*pi] != '\r')) { + *str++ = ((char *)lpData)[(*pi)++]; + } + *str++ = '\0'; + +#if DBG + { + char text[128]; + + wsprintf(text, "bGetWord gets %s", pstr); + MessageBox(GetFocus(), text, "Info", MB_OK); + } +#endif + + return TRUE; +} + + +BOOL bGoNextLine(LPVOID lpData, int* pi) +{ + char tmp[128]; + int q; + + while ((((char *)lpData)[*pi] != '\n') && + (((char *)lpData)[*pi] != '\r')) + (*pi)++; + + // + // skip them + // + *pi += 2; + + q = *pi; + + if ((bGetWord(lpData, tmp, &q)) && (bIsEOF(tmp)) ) + return FALSE; + + return TRUE; +}