-#define INVALID_FORMAT do{\
- fprintf(stderr,"%s:%d: Error file '%s' is malformed.\n",__FILE__,__LINE__,gbmp.name);\
- fclose(fp);\
- return NULL;\
-}while(0);
-
- int32_t bmWidth;
- int32_t bmHeight;
- uint16_t bmPlanes;
- uint16_t bmBitsPixel;
- uint8_t m1,m2;
- uint32_t sizeimage;
- int16_t res1,res2;
- int32_t filesize, pixoff;
- int32_t bmisize, compression;
- int32_t xscale, yscale;
- int32_t colors, impcol;
- uint32_t m_bytesRead = 0;
- unsigned char *image;
- FILE *fp;
-
- fp = fopen (gbmp.name, "rb");
- if (fp == NULL)
- {
- fprintf(stderr,"Error: Invalid filename '%s'\n",gbmp.name);
- return NULL;
- }
-
- long rc;
- rc = fread(&m1, 1, 1, fp);
- m_bytesRead++;
- if (rc == -1)
- INVALID_FORMAT;
-
- rc = fread(&m2, 1, 1, fp);
- m_bytesRead++;
- if ((m1 != 'B') || (m2 != 'M'))
- INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(filesize),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint16_t*)&(res1),2,1,fp); m_bytesRead+=2;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint16_t*)&(res2),2,1,fp); m_bytesRead+=2;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(pixoff),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(bmisize),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t *)&(bmWidth),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(bmHeight),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint16_t*)&(bmPlanes),2,1,fp); m_bytesRead+=2;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint16_t*)&(bmBitsPixel),2,1,fp); m_bytesRead+=2;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(compression),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(sizeimage),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(xscale),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(yscale),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(colors),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- rc = fread((uint32_t*)&(impcol),4,1,fp); m_bytesRead+=4;
- if (rc != 1) INVALID_FORMAT;
-
- if (bmBitsPixel != 8)
- {
- g_FuncTable.m_pfnMessageBox (g_pWnd, "This is not an 8-bit image. GenSurf can't use it.",
- "Bitmap", eMB_OK, eMB_ICONWARNING);
- fclose(fp);
- return NULL;
- }
-
- if (colors == 0)
- colors = 1 << bmBitsPixel;
-
- if (bmBitsPixel != 24)
- {
- int i;
- for (i = 0; i < colors; i++)
- {
- unsigned char r ,g, b, dummy;
-
- rc = fread(&b, 1, 1, fp);
- m_bytesRead++;
- if (rc!=1)
- {
- INVALID_FORMAT;
- }
-
- rc = fread(&g, 1, 1, fp);
- m_bytesRead++;
- if (rc!=1)
- {
- INVALID_FORMAT;
- }
-
- rc = fread(&r, 1, 1, fp);
- m_bytesRead++;
- if (rc != 1)
- {
- INVALID_FORMAT;
- }
-
- rc = fread(&dummy, 1, 1, fp);
- m_bytesRead++;
- if (rc != 1)
- {
- INVALID_FORMAT;
- }