I'm a little bit confused regarding windows.inc and the DCB structure. In the windows.inc file teh declaration is the following:
The problem is with the BITRECORD, because it's totally mirrored in comparison with the MSDN description:
In C++ a bitfield starts with the LSB. So fBinary is on the first bit position. In Assembly language a RECORD starts with the MSB, wich is totally opposed to the C++.
MASK fBinary is equal with 8000 0000h and it should be equal with 0000 0001h.
The correct line would be:
I think It would be great to change this in the future releases of the windows.inc.
BTW i'm using the MASM package.
BITRECORD RECORD fBinary:1,fParity:1,fOutxCtsFlow:1,fOutxDsrFlow:1,fDtrControl:2,fDsrSensitivity:1,fTXContinueOnXoff:1,fOutX:1,fInX:1,fErrorChar:1,fNull:1,fRtsControl:2,fAbortOnError:1,fDummy2:17
DCB STRUCT
DCBlength DWORD ?
BaudRate DWORD ?
fbits BITRECORD <>
wReserved WORD ?
XonLim WORD ?
XoffLim WORD ?
ByteSize BYTE ?
Parity BYTE ?
StopBits BYTE ?
XonChar BYTE ?
XoffChar BYTE ?
ErrorChar BYTE ?
EofChar BYTE ?
EvtChar BYTE ?
wReserved1 WORD ?
DCB ENDS
The problem is with the BITRECORD, because it's totally mirrored in comparison with the MSDN description:
typedef struct _DCB {
DWORD DCBlength;
DWORD BaudRate;
DWORD fBinary :1;
DWORD fParity :1;
DWORD fOutxCtsFlow :1;
DWORD fOutxDsrFlow :1;
DWORD fDtrControl :2;
DWORD fDsrSensitivity :1;
DWORD fTXContinueOnXoff :1;
DWORD fOutX :1;
DWORD fInX :1;
DWORD fErrorChar :1;
DWORD fNull :1;
DWORD fRtsControl :2;
DWORD fAbortOnError :1;
DWORD fDummy2 :17;
WORD wReserved;
WORD XonLim;
WORD XoffLim;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
char XonChar;
char XoffChar;
char ErrorChar;
char EofChar;
char EvtChar;
WORD wReserved1;
} DCB;
In C++ a bitfield starts with the LSB. So fBinary is on the first bit position. In Assembly language a RECORD starts with the MSB, wich is totally opposed to the C++.
MASK fBinary is equal with 8000 0000h and it should be equal with 0000 0001h.
The correct line would be:
BITRECORD RECORD fDummy2:17,fAbortOnError:1,fRtsControl:2,fNull:1,fErrorChar:1,fInX:1,fOutX:1,fTXContinueOnXoff:1,fDsrSensitivity:1,fDtrControl:2,fOutxDsrFlow:1,fOutxCtsFlow:1,fParity:1,fBinary:1
I think It would be great to change this in the future releases of the windows.inc.
BTW i'm using the MASM package.