Mail Archives: djgpp/1996/05/08/23:47:45
Reply to message 3496513 from FORTIN44 AT EELA on 05/08/96 3:45PM
>OK, I'm a bit confused..(nothing new i'm afraid)... The structure
>below was taken from the VESA 1.2 spec. sizeof(_VGAInfoBlock) should
>be 256. DJGPP gives 260. What's up with this. A previous posting
>mentioned 4 byte boundaries, but 256 is divisable by 4. Any Ideas??
The size of the whole structure may be divisible by 4, but the individual
fields also have to be word-aligned. Read on...
>typedef unsigned char BYTE;
>typedef unsigned short WORD;
>typedef unsigned long DWORD;
>typedef struct
>{
> DWORD VESASignature; 4
> WORD VESAVersion; 2 (+2 padding)
> DWORD OEMStringPointer; 4
> DWORD Capabilities; 4
> DWORD VideoModePointer; 4
> WORD TotalMemory; 2 (+2 padding)
> BYTE Info[236]; 236
>} _VGAInfoBlock; = 256 bytes (260 with
internal padding)
Each of your 2-byte fields gets another 2 bytes of padding on it, for
a total of 260. There IS a workaround, though, in the form of the gcc
__attribute__ ((packed)) command. See my last post for details.
John
- Raw text -