Implementation of EV_RXFLAG.
diff --git a/include/comm.h b/include/comm.h
index d1c1478..fd3e17e 100644
--- a/include/comm.h
+++ b/include/comm.h
@@ -9,6 +9,7 @@
int suspended;
int unget,xmit;
int baudrate;
+ int evtchar;
/* events */
int commerror, eventmask;
/* buffers */
diff --git a/misc/comm.c b/misc/comm.c
index e85e1fe..8ab963e 100644
--- a/misc/comm.c
+++ b/misc/comm.c
@@ -246,15 +246,20 @@
if (!bleft) {
ptr->commerror = CE_RXOVER;
} else {
- ptr->ibuf_head += len;
- if (ptr->ibuf_head >= ptr->ibuf_size)
- ptr->ibuf_head = 0;
- /* flag event */
+ /* check for events */
+ if ((ptr->eventmask & EV_RXFLAG) &&
+ memchr(ptr->inbuf + ptr->ibuf_head, ptr->evtchar, bleft)) {
+ *(WORD*)(unknown[cid]) |= EV_RXFLAG;
+ mask |= CN_EVENT;
+ }
if (ptr->eventmask & EV_RXCHAR) {
*(WORD*)(unknown[cid]) |= EV_RXCHAR;
mask |= CN_EVENT;
}
- /* FIXME: check for event character (EV_RXFLAG) */
+ /* advance buffer position */
+ ptr->ibuf_head += len;
+ if (ptr->ibuf_head >= ptr->ibuf_size)
+ ptr->ibuf_head = 0;
}
}
} while (len > 0);
@@ -426,6 +431,7 @@
COM[port].fd = fd;
COM[port].commerror = 0;
COM[port].eventmask = 0;
+ COM[port].evtchar = 0; /* FIXME: default? */
/* save terminal state */
tcgetattr(fd,&m_stat[port]);
/* set default parameters */
@@ -974,6 +980,8 @@
else
port.c_iflag &= ~IXOFF;
+ ptr->evtchar = lpdcb->EvtChar;
+
if (tcsetattr(ptr->fd, TCSADRAIN, &port) == -1) {
ptr->commerror = WinError();
return FALSE;
@@ -1116,6 +1124,8 @@
lpdcb->XonLim = 10;
lpdcb->XoffLim = 10;
+ lpdcb->EvtChar = ptr->evtchar;
+
ptr->commerror = 0;
return 0;
}