WITH THISFORM DO CASE CASE THIS.commevent = 1 * characters sent => SThreshold CASE THIS.commevent = 2 * characters received => RThreshold .cBuffer = .cBuffer + THIS.INPUT * Test for your ETX in the buffer IF CHR(3)$.cbuffer * ETX in .cbuffer. * Extract string into .cresult (new property) * and leave remaining data in .cbuffer lnetxpos = AT(CHR(3),.cbuffer,1) .cresult = LEFT(.cbuffer,lnetxpos) .cbuffer = SUBSTR(.cbuffer,lnetxpos+1) * now process .cresult and clear when done. ENDIF CASE THIS.commevent = 3 * change in CTS CASE THIS.commevent = 4 * change in DSR CASE .commevent = 5 * Change in CD CASE .commevent = 6 * Ring detected CASE .commevent = 7 * EOF detected CASE THIS.commevent = 1001 * Break Received CASE THIS.commevent = 1004 * Framing Error CASE THIS.commevent = 1006 * Overrun CASE THIS.commevent = 1008 * Overflow CASE THIS.commevent = 1009 * Parity Error CASE THIS.commevent = 1010 * TX buffer full CASE THIS.commevent = 1011 * DCB error ENDCASE ENDWITH