*--MsCommContainer.OnComm() *--Last Modified: *--TCHolzer 01/22/2002 Trimmed extra characters from receive string *--TCHolzer 01/31/2002 Corrected storing of input buffer to variable s for ON_LIST case LOCAL ; i,; istop,; lnStart,; lnBegin #define ON_IDLE 0 && dummy status to prevent onevent firing #define ON_STATUS 1 && status of phonetree #define ON_SIZE 2 && number of records in list #define ON_VERSION 3 && phonetree version #define ON_MESSAGE 4 && receive message from phonetree #define ON_LIST 5 && List messages sent to #define ON_PUTMSG 6 && send messge to phonetree #define ON_PUTLST 7 && send list to phonetree #define ON_STOPCALL 8 && stop calling from list immediately #define _END_CHAR CHR(10) #define _NULL CHR(0) this.creceivebuffer="" this.creceivestr="" this.lcstring="" this.result="" lnstart=SECONDS() lnBegin=SECONDS() IF UPPER(TYPE('OnCommType'))="N" THIS.oncommtype=OnCommType IF this.oncommtype<>ON_IDLE =this.waitforresponse(1) ELSE =this.waitforresponse(1) ENDIF ELSE this.oncommtype=0 && idle by default =this.waitforresponse(1) ENDIF LnBegin=SECONDS() DO WHILE THIS.commevent<>2 =this.waitforresponse(1) IF SECONDS()-LnBegin>3 IF this.oncommtype<>ON_IDLE *--Should have switched commevent to 2 by now, not receiving for some reason MESSAGEBOX('An Error Occurred with Phonetree.'+CHR(13); +'Unable to get response. Please verify'+CHR(13); +'the Phonetree system is turned on and'+CHR(13); +'try again.',48,'ERROR communicating with Phonetree.',50000000) ENDIF EXIT ENDIF ENDDO DO WHILE THIS.CommEvent=2 IF THIS.CommEvent=2 && capture the information in this.input IF THIS.InBufferCount>0 && received data *--If a message or a list was received, wait for the end of it IF this.oncommtype=ON_MESSAGE.OR.this.oncommtype=ON_LIST && receive message or receive list from phonetree lnstart=SECONDS() DO WHILE !CHR(26) $ this.lcstring this.lcString = this.lcstring+this.input IF this.lcString=="".or.alltrim(this.lcstring)=">" && nothing received! IF SECONDS()-lnstart>120 EXIT ENDIF ENDIF ENDDO IF this.oncommtype=ON_LIST s=this.lcstring this.result=this.lcstring this.lcstring="" ENDIF ELSE this.lcstring = this.lcstring + this.input ENDIF IF !(this.lcstring == "") this.result = "" *--we captured all of the data from the port, make sure it is not just *--an acknowledgement of a carriage return sent to phonetree IF ALLTRIM(this.lcstring)=">" && this is from all carriage returns sent to phonetree EXIT ENDIF i=1 istop=(LEN(this.lcstring)) IF this.oncommtype!=ON_LIST FOR i = 1 TO istop DO WHILE ASC(SUBSTR(this.lcstring, i, 1))!=0 .and. SUBSTR(this.lcstring, i, 1) != _NULL ; .and. ASC(SUBSTR(this.lcstring, i, 1))!=32 IF SUBSTR(this.lcstring, i, 1) != _END_CHAR .and. SUBSTR(this.lcstring, i, 1)!=">"; .and.SUBSTR(this.lcstring, i, 1) != _NULL; .and.ASC(SUBSTR(this.lcstring, i, 1))!=32 this.result = LEFT(this.lcstring, i) i=i+1 ELSE i=i+1 ENDIF ENDDO i=i+1 ENDFOR ENDIF ELSE this.result="" ENDIF IF this.oncommtype!=ON_MESSAGE .and. this.oncommtype!=ON_LIST && receive message or list from phonetree, do NOT strip FOR i = 1 TO LEN(this.result) IF ASC(SUBSTR(this.result, i, 1))=32 .and. i>1 this.result = LEFT(this.result, i-1) ENDIF IF ASC(SUBSTR(this.result, i, 1))=13 .and. i>1 this.result = LEFT(this.result, i-1) ENDIF ENDFOR ENDIF DO CASE CASE this.oncommtype=ON_STATUS mPTStatus=this.result CASE this.oncommtype=ON_VERSION mPTVersion=this.result CASE this.oncommtype=ON_SIZE mPTSize=this.result CASE this.oncommtype=ON_MESSAGE s=this.result CASE this.oncommtype=ON_LIST *Do NOTHING s is stored above OTHERWISE *DO NOTHING ENDCASE ELSE && just in case only EXIT ENDIF ELSE && just in case only EXIT ENDIF && is commevent 2 or not, of not we exit the loop ENDDO && while this.commevent=2 RETURNHere is the waitforresponse which I got on the UT:
*~ This method loops for the specified *~ amount of time calling DOEVENTS(). *~ This allows time for the modem to respond to the requests. LPARAMETERS lnDelayInSeconds LOCAL lnStartTime lnStartTime = SECO() DO WHILE SECO() <= (lnStartTime + lnDelayInSeconds) ; AND NOT SECO() < lnStartTime DOEVENTS() ENDDO RETURN>This makes no sense!!! I just was debugging this thing and I have a set step on right the code I have below. When I look at the thisform.buffer it has the first 8 characters of the bar code and the this.input has the rest with a CRLF. As you can see I am not doing anything else with this code. It is crazy!!!
>>if this.commevent = 2 >> thisform.buffer = "" >> thisform.buffer = this.input >>... >>>>
>>>THISFORM.yourbufferproperty = ""
>>>
>>>will take care of clearing the buffer.