85 lines
1.9 KiB
C
85 lines
1.9 KiB
C
|
/****************************************************************************
|
||
|
*
|
||
|
* ntcomm.c
|
||
|
*
|
||
|
* Copyright (c) 1993 Microsoft Corporation. All Rights Reserved
|
||
|
*
|
||
|
* MCI Device Driver for the Pioneer 4200 Videodisc Player
|
||
|
*
|
||
|
* Comms compatibility routines for Windows NT
|
||
|
*
|
||
|
***************************************************************************/
|
||
|
|
||
|
#include <windows.h>
|
||
|
|
||
|
INT OpenComm(LPCTSTR lpstr, UINT wqin, UINT wqout)
|
||
|
{
|
||
|
HANDLE hFile;
|
||
|
COMMTIMEOUTS Timeouts;
|
||
|
|
||
|
hFile = CreateFile(lpstr,
|
||
|
GENERIC_READ | GENERIC_WRITE,
|
||
|
0,
|
||
|
NULL,
|
||
|
OPEN_EXISTING,
|
||
|
FILE_FLAG_WRITE_THROUGH,
|
||
|
0);
|
||
|
|
||
|
if (hFile == INVALID_HANDLE_VALUE) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Set the timeouts to be like win3.1 (as defined in the SDK)
|
||
|
*/
|
||
|
|
||
|
Timeouts.ReadIntervalTimeout = INFINITE;
|
||
|
Timeouts.ReadTotalTimeoutMultiplier = 0;
|
||
|
Timeouts.ReadTotalTimeoutConstant = 0;
|
||
|
Timeouts.WriteTotalTimeoutMultiplier = INFINITE;
|
||
|
Timeouts.WriteTotalTimeoutConstant = INFINITE;
|
||
|
|
||
|
if (!SetCommTimeouts(hFile, &Timeouts)) {
|
||
|
CloseHandle(hFile);
|
||
|
return 0;
|
||
|
} else {
|
||
|
return (INT)hFile;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
INT GetCommError(int hDevice, LPCOMSTAT lpComStat)
|
||
|
{
|
||
|
DWORD dwErrors;
|
||
|
|
||
|
if (ClearCommError((HANDLE)hDevice, &dwErrors, lpComStat)) {
|
||
|
return dwErrors;
|
||
|
} else {
|
||
|
/*
|
||
|
* Concoct something nasty
|
||
|
*/
|
||
|
|
||
|
return CE_IOE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
INT ReadComm(HFILE nCid, LPSTR lpBuf, INT nSize)
|
||
|
{
|
||
|
DWORD cbRead;
|
||
|
|
||
|
if (!ReadFile((HANDLE)nCid, lpBuf, nSize, &cbRead, 0))
|
||
|
return(-(INT)cbRead);
|
||
|
return((INT)cbRead);
|
||
|
}
|
||
|
|
||
|
|
||
|
INT WriteComm(HFILE nCid, LPSTR lpBuf, INT nSize)
|
||
|
{
|
||
|
DWORD cbWritten;
|
||
|
|
||
|
if (!WriteFile((HANDLE)nCid, lpBuf, nSize, &cbWritten, 0))
|
||
|
return(-(INT)cbWritten);
|
||
|
return((INT)cbWritten);
|
||
|
}
|
||
|
|