Also handle OS2 v1.x (AKA windows 2.0) bitmaps.

diff --git a/tools/wrc/newstruc.c b/tools/wrc/newstruc.c
index 9f7d382..da6e4f0 100644
--- a/tools/wrc/newstruc.c
+++ b/tools/wrc/newstruc.c
@@ -34,6 +34,17 @@
 
 #include "wingdi.h"	/* for BITMAPINFOHEADER */
 
+#include <pshpack2.h>
+typedef struct
+{
+    DWORD biSize;
+    WORD  biWidth;
+    WORD  biHeight;
+    WORD  biPlanes;
+    WORD  biBitCount;
+} BITMAPOS2HEADER;
+#include <poppack.h>
+
 /* Generate new_* functions that have no parameters (NOTE: no ';') */
 __NEW_STRUCT_FUNC(dialog)
 __NEW_STRUCT_FUNC(dialogex)
@@ -220,25 +231,40 @@
 	b4h->bV4GammaBlue	= BYTESWAP_DWORD(b4h->bV4GammaBlue);
 }
 
+static void convert_bitmap_swap_os2(BITMAPOS2HEADER *boh)
+{
+	boh->biSize		= BYTESWAP_DWORD(boh->biSize);
+	boh->biWidth		= BYTESWAP_WORD(boh->biWidth);
+	boh->biHeight		= BYTESWAP_WORD(boh->biHeight);
+	boh->biPlanes		= BYTESWAP_WORD(boh->biPlanes);
+	boh->biBitCount		= BYTESWAP_WORD(boh->biBitCount);
+}
+
 #define FL_SIGBE	0x01
 #define FL_SIZEBE	0x02
 #define FL_V4		0x04
+#define FL_OS2		0x08
 static int convert_bitmap(char *data, int size)
 {
 	BITMAPINFOHEADER *bih = (BITMAPINFOHEADER *)data;
 	BITMAPV4HEADER *b4h = (BITMAPV4HEADER *)data;
+	BITMAPOS2HEADER *boh = (BITMAPOS2HEADER *)data;
 	int type = 0;
-    int returnSize = 0;           /* size to be returned */
+	int returnSize = 0;           /* size to be returned */
 #ifdef WORDS_BIGENDIAN
 	DWORD bisizel = BYTESWAP_DWORD(sizeof(BITMAPINFOHEADER));
 	DWORD b4sizel = BYTESWAP_DWORD(sizeof(BITMAPV4HEADER));
+	DWORD bosizel = BYTESWAP_DWORD(sizeof(BITMAPOS2HEADER));
 	DWORD bisizeb = sizeof(BITMAPINFOHEADER);
 	DWORD b4sizeb = sizeof(BITMAPV4HEADER);
+	DWORD bosizeb = sizeof(BITMAPOS2HEADER);
 #else
 	DWORD bisizel = sizeof(BITMAPINFOHEADER);
 	DWORD b4sizel = sizeof(BITMAPV4HEADER);
+	DWORD bosizel = sizeof(BITMAPOS2HEADER);
 	DWORD bisizeb = BYTESWAP_DWORD(sizeof(BITMAPINFOHEADER));
 	DWORD b4sizeb = BYTESWAP_DWORD(sizeof(BITMAPV4HEADER));
+	DWORD bosizeb = BYTESWAP_DWORD(sizeof(BITMAPOS2HEADER));
 #endif
 
 
@@ -265,20 +291,28 @@
 	{
 		/* Little endian */
 	}
-	else if(bih->biSize == b4sizel)
-	{
-		type |= FL_V4;
-	}
 	else if(bih->biSize == bisizeb)
 	{
 		type |= FL_SIZEBE;
 	}
+	else if(bih->biSize == b4sizel)
+	{
+		type |= FL_V4;
+	}
 	else if(bih->biSize == b4sizeb)
 	{
 		type |= FL_SIZEBE | FL_V4;
 	}
+	else if(!bih->biSize || bih->biSize == bosizel)
+	{
+		type |= FL_OS2;
+	}
+	else if(bih->biSize == bosizeb)
+	{
+		type |= FL_SIZEBE | FL_OS2;
+	}
 	else
-		type = -1;
+		yyerror("Invalid bitmap format, bih->biSize = %ld", bih->biSize);
 
 	switch(type)
 	{
@@ -286,15 +320,14 @@
 		break;
 	case FL_SIZEBE:
 	case FL_SIZEBE | FL_V4:
+	case FL_SIZEBE | FL_OS2:
 		yywarning("Bitmap v%c signature little-endian, but size big-endian", type & FL_V4 ? '4' : '3');
 		break;
 	case FL_SIGBE:
 	case FL_SIGBE | FL_V4:
+	case FL_SIGBE | FL_OS2:
 		yywarning("Bitmap v%c signature big-endian, but size little-endian", type & FL_V4 ? '4' : '3');
 		break;
-	case -1:
-		yyerror("Invalid bitmap format");
-		break;
 	}
 
 	switch(byteorder)
@@ -307,6 +340,10 @@
 		{
 			if(type & FL_V4)
 				convert_bitmap_swap_v4(b4h);
+			else if(type & FL_OS2)
+			{
+				convert_bitmap_swap_os2(boh);
+			}
 			else
 				convert_bitmap_swap_v3(bih);
 		}
@@ -319,6 +356,10 @@
 		{
 			if(type & FL_V4)
 				convert_bitmap_swap_v4(b4h);
+			else if(type & FL_OS2)
+			{
+				convert_bitmap_swap_os2(boh);
+			}
 			else
 				convert_bitmap_swap_v3(bih);
 		}