With the permission of Mr. Yoshimura, here are the source codes for a communication program for an IBM compatible.
The following are the source codes using 32-bit API for communication
programming in a Windows environment. It has been tested successfully
with Morita-Shogi, Kanazawa-Shogi and Kakinoki-Shogi, but I cannot
guarantee that the codes are free of bugs. You can use the codes
in your program, but it is your responsibility to make your own
communication routines.
If you use the VC++ version 4.X, delete the following line in
the file StdAFx.h:
#define VC_EXTRALEAN
static HANDLE hCom; int RS_init( ) /* Initialize Communication port */ { DCB dcb ; COMMTIMEOUTS CommTimeOuts ; if ( ( hCom = CreateFile ( "COM1", /* Open file name as "COM1" */ GENERIC_READ | GENERIC_WRITE, /* Open file for read and write */ 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) ) == INVALID_HANDLE_VALUE ) { return 1; // error } CommTimeOuts.ReadIntervalTimeout = MAXDWORD; CommTimeOuts.ReadTotalTimeoutMultiplier = 0; CommTimeOuts.ReadTotalTimeoutConstant = 1000; CommTimeOuts.WriteTotalTimeoutMultiplier = 0; CommTimeOuts.WriteTotalTimeoutConstant = 1000; if ( !SetCommTimeouts( hCom, &CommTimeOuts )){ CloseHandle(hCom); return 2; // SetCommTimeouts error } dcb.DCBlength = sizeof ( DCB ) ; dcb.BaudRate = 1200 ; dcb.fBinary = TRUE ; dcb.fParity = 0; dcb.fOutxCtsFlow = 0; // CTS output flow control dcb.fOutxDsrFlow = 0; // DSR output flow control dcb.fDtrControl = 1; // DTR flow control type dcb.fDsrSensitivity = 0; // DSR sensitivity dcb.fTXContinueOnXoff = 0; // XOFF continues Tx dcb.fOutX = 1; // XON/XOFF output flow control dcb.fInX = 1; // XON/XOFF input flow control dcb.fErrorChar = 0; // enable error replacement dcb.fNull = 0; // enable null stripping dcb.fRtsControl = 1; // RTS flow control dcb.fAbortOnError = 0; // abort reads/writes on error dcb.XonLim = 2048; // transmit XON threshold dcb.XoffLim = 512; // transmit XOFF threshold dcb.ByteSize = 8; // number of bits/byte, 4-8 dcb.Parity = NOPARITY; // 0-4=no,odd,even,mark,space dcb.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2 dcb.XonChar = 17; // Tx and Rx XON character dcb.XoffChar = 19; // Tx and Rx XOFF character dcb.ErrorChar = 0; // error replacement character dcb.EofChar = 0; // end of input character dcb.EvtChar = 0; // received event character if ( !SetCommState( hCom, &dcb ) ){ CloseHandle(hCom); return 3;//SetCommState error } return(0); } void RS_close () /* Close Communication port */ { CloseHandle( hCom ); } /* Read one character when it reads a character, it returns 1 when there is no character to read, it returns 0 */ int RS_read(unsigned char *c) { DWORD length; if( !ReadFile(hCom, c, 1, &length, NULL) ) return 0; return length; } /* Send a character */ void RS_send(unsigned char c) { DWORD length; WriteFile(hCom, &c, 1, &length, NULL); }