Rewrite EscapeCommFunction16 to use EscapeCommFunction.

This commit is contained in:
Mike McCormack 2001-07-10 19:05:30 +00:00 committed by Alexandre Julliard
parent e3454c78ba
commit 4be97b6696
1 changed files with 24 additions and 79 deletions

View File

@ -702,29 +702,25 @@ INT16 WINAPI ClearCommBreak16(INT16 cid)
*/
LONG WINAPI EscapeCommFunction16(UINT16 cid,UINT16 nFunction)
{
int r,fd;
struct DosDeviceStruct *ptr;
struct termios port;
int max;
TRACE("cid=%d, function=%d\n", cid, nFunction);
if (nFunction == GETMAXCOM) {
int max;
switch(nFunction) {
case GETMAXCOM:
TRACE("GETMAXCOM\n");
for (max = MAX_PORTS;!COM[max].devicename;max--)
;
return max;
}
if (nFunction == GETMAXLPT) {
int max;
case GETMAXLPT:
TRACE("GETMAXLPT\n");
for (max = MAX_PORTS;!LPT[max].devicename;max--)
;
return FLAG_LPT + max;
}
if (nFunction == GETBASEIRQ) {
case GETBASEIRQ:
TRACE("GETBASEIRQ\n");
/* FIXME: use tables */
/* just fake something for now */
@ -743,79 +739,28 @@ LONG WINAPI EscapeCommFunction16(UINT16 cid,UINT16 nFunction)
return -1;
}
/* FIXME: replace with a call to EscapeCommFunction */
if ( (fd = FILE_GetUnixHandle(ptr->handle,GENERIC_READ)) == 0 )
return -1;
if (tcgetattr(fd,&port) == -1) {
TRACE("tcgetattr failed\n");
close(fd);
ptr->commerror=WinError();
switch (nFunction) {
case RESETDEV:
case CLRDTR:
case CLRRTS:
case SETDTR:
case SETRTS:
case SETXOFF:
case SETXON:
if(EscapeCommFunction(ptr->handle,nFunction))
return 0;
else {
ptr->commerror = WinError();
return -1;
}
switch (nFunction) {
case RESETDEV:
TRACE("RESETDEV\n");
break;
case CLRDTR:
TRACE("CLRDTR\n");
#ifdef TIOCM_DTR
r = COMM_WhackModem(fd, ~TIOCM_DTR, 0);
close(fd);
return r;
#endif
case CLRRTS:
TRACE("CLRRTS\n");
#ifdef TIOCM_RTS
r = COMM_WhackModem(fd, ~TIOCM_RTS, 0);
close(fd);
return r;
#endif
case SETDTR:
TRACE("SETDTR\n");
#ifdef TIOCM_DTR
r = COMM_WhackModem(fd, 0, TIOCM_DTR);
close(fd);
return r;
#endif
case SETRTS:
TRACE("SETRTS\n");
#ifdef TIOCM_RTS
r = COMM_WhackModem(fd, 0, TIOCM_RTS);
close(fd);
return r;
#endif
case SETXOFF:
TRACE("SETXOFF\n");
port.c_iflag |= IXOFF;
break;
case SETXON:
TRACE("SETXON\n");
port.c_iflag |= IXON;
break;
case CLRBREAK:
case SETBREAK:
default:
WARN("(cid=%d,nFunction=%d): Unknown function\n",
cid, nFunction);
break;
}
r = tcsetattr(fd, TCSADRAIN, &port);
close(fd);
if (r<0) {
ptr->commerror = WinError();
return -1;
} else {
ptr->commerror = 0;
return 0;
}
}
/*****************************************************************************