delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2003/01/08/01:15:03

From: "Joel Saunders" <jbs30000 AT aol DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: struct problem
Date: Wed, 8 Jan 2003 04:51:46 +0000 (UTC)
Organization: Mailgate.ORG Server - http://www.Mailgate.ORG
Lines: 47
Message-ID: <4beb6242eec71f0c5cf10defc2e78b1d.62691@mygate.mailgate.org>
NNTP-Posting-Host: cache-ntc-ad01.proxy.aol.com
X-Trace: news.mailgate.org 1041975673 19846 198.81.26.102 (Wed Jan 8 05:51:46 2003)
X-Complaints-To: abuse AT mailgate DOT org
NNTP-Posting-Date: Wed, 8 Jan 2003 04:51:46 +0000 (UTC)
Injector-Info: news.mailgate.org; posting-host=cache-ntc-ad01.proxy.aol.com; posting-account=62691; posting-date=1041975673
User-Agent: Mailgate Web Server
X-URL: http://mygate.mailgate.org/mynews/comp/comp.os.msdos.djgpp/4beb6242eec71f0c5cf10defc2e78b1d.62691%40mygate.mailgate.org
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

In writting a simple bmp loader, I'm having problems with the struct for
the bmp header.  Even with __attribute__((__packed__)) after each item:
struct BMP_Header {
        unsigned int BM __attribute__((__packed__));
        unsigned long File_Size __attribute__((__packed__));
        unsigned int R_1 __attribute__((__packed__)); // Reserved 1
        unsigned int R_2 __attribute__((__packed__)); // Reserved 2
        unsigned long BMP_Offset __attribute__((__packed__));
        unsigned long Header_Info __attribute__((__packed__));
        unsigned long BMP_Width __attribute__((__packed__));
        unsigned long BMP_Height __attribute__((__packed__));
        unsigned int BMP_Planes __attribute__((__packed__));
        unsigned int BPP __attribute__((__packed__)); // Bytes Per Scan
Line
        unsigned long Compression __attribute__((__packed__));
        unsigned long BMP_Size __attribute__((__packed__));
        unsigned long Width_PPM __attribute__((__packed__));
        unsigned long Height_PPM __attribute__((__packed__));
        unsigned long Num_of_Colors __attribute__((__packed__));
        unsigned long Important_Colors __attribute__((__packed__));
}image;
I had to do this to use the header information:
unsigned char image[54];
#define image_BM ((int *)&image[0])[0]
#define image_File_Size ((long *)&image[2])[0]
#define image_R_1 ((int *)&image[6])[0]
#define image_R_2 ((int *)&image[8])[0]
#define image_BMP_Offset ((long *)&image[10])[0]
#define image_Header_Info ((long *)&image[14])[0]
#define image_BMP_Width ((long *)&image[18])[0]
#define image_BMP_Height ((long *)&image[22])[0]
#define image_BMP_Planes ((int *)&image[26])[0]
#define image_BPP ((int *)&image[28])[0]
#define image_Compression ((long *)&image[30])[0]
#define image_BMP_Size ((long *)&image[34])[0]
#define image_Width_PPM ((long *)&image[38])[0]
#define image_Height_PPM ((long *)&image[42])[0]
#define image_Num_of_Colors ((long *)&image[46])[0]
#define image_Important_Colors ((long *)&image[50])[0]
To load the bmp header, I'm using fread (if that makes any difference).
And the program is using C, not CPP files (if that also, makes any
difference.)
Any help is appreciated.  Thanks.


-- 
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019