-#else
- data->term.c_iflag &= ~(IXON | IXOFF | IXANY);
- switch (xon_xoff) {
- case SP_XONXOFF_DISABLED:
- break;
- case SP_XONXOFF_IN:
- data->term.c_iflag |= IXOFF;
- break;
- case SP_XONXOFF_OUT:
- data->term.c_iflag |= IXON | IXANY;
- break;
- case SP_XONXOFF_INOUT:
- data->term.c_iflag |= IXON | IXOFF | IXANY;
- break;
- default:
- return SP_ERR_ARG;
+
+ if (config->rts >= 0) {
+ switch (config->rts) {
+ case SP_RTS_OFF:
+ data->dcb.fRtsControl = RTS_CONTROL_DISABLE;
+ break;
+ case SP_RTS_ON:
+ data->dcb.fRtsControl = RTS_CONTROL_ENABLE;
+ break;
+ case SP_RTS_FLOW_CONTROL:
+ data->dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
+ break;
+ default:
+ return SP_ERR_ARG;
+ }
+ }
+
+ if (config->cts >= 0) {
+ switch (config->cts) {
+ case SP_CTS_IGNORE:
+ data->dcb.fOutxCtsFlow = FALSE;
+ break;
+ case SP_CTS_FLOW_CONTROL:
+ data->dcb.fOutxCtsFlow = TRUE;
+ break;
+ default:
+ return SP_ERR_ARG;
+ }
+ }
+
+ if (config->dtr >= 0) {
+ switch (config->dtr) {
+ case SP_DTR_OFF:
+ data->dcb.fDtrControl = DTR_CONTROL_DISABLE;
+ break;
+ case SP_DTR_ON:
+ data->dcb.fDtrControl = DTR_CONTROL_ENABLE;
+ break;
+ case SP_DTR_FLOW_CONTROL:
+ data->dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
+ break;
+ default:
+ return SP_ERR_ARG;
+ }
+ }
+
+ if (config->dsr >= 0) {
+ switch (config->dsr) {
+ case SP_DSR_IGNORE:
+ data->dcb.fOutxDsrFlow = FALSE;
+ break;
+ case SP_DSR_FLOW_CONTROL:
+ data->dcb.fOutxDsrFlow = TRUE;
+ break;
+ default:
+ return SP_ERR_ARG;
+ }
+ }
+
+ if (config->xon_xoff >= 0) {
+ switch (config->xon_xoff) {
+ case SP_XONXOFF_DISABLED:
+ data->dcb.fInX = FALSE;
+ data->dcb.fOutX = FALSE;
+ break;
+ case SP_XONXOFF_IN:
+ data->dcb.fInX = TRUE;
+ data->dcb.fOutX = FALSE;
+ break;
+ case SP_XONXOFF_OUT:
+ data->dcb.fInX = FALSE;
+ data->dcb.fOutX = TRUE;
+ break;
+ case SP_XONXOFF_INOUT:
+ data->dcb.fInX = TRUE;
+ data->dcb.fOutX = TRUE;
+ break;
+ default:
+ return SP_ERR_ARG;
+ }