>*--------Program that sends data to the port >oncommtype=ON_MESSAGE && equals 4 from define statement in example below >DO MsComClear && clear the port and get it ready to receive data >mscom.output="~UMI "+CHR(13) >* Now in the mscom.oncomm event: >*--------oncomm method >#define ON_MESSAGE 4 && receive message from phonetree >IF oncommtype=ON_MESSAGE > *--I know that I am retrieving the current message from the phonetree system so > *--I need to wait for a chr(26) to come back so I know that is the end of the > *--message. Usually I will not receive a chr(26) back otherwise > DO WHILE !CHR(26) $ this.lcstring > *--Keep adding the value from this.input to this.lcstring property > this.lcString = this.lcstring+this.input > *--The next three lines for troubleshooting only > ACTIVATE SCREEN > ? this.lcstring > WAIT WINDOW "Check the value of this.lcstring: " > ENDDO >ELSE > *--I don't need to wait for a chr(26) from the port, just grab the information in > *--in the .input property > this.lcstring = this.lcstring + this.input > *--The next three lines for troubleshooting only > ACTIVATE SCREEN > ? this.lcstring > WAIT WINDOW "Check the value of this.lcstring: " >ENDIF >*--In some cases I have to trim off excess characters the phonetree system sends back at the >*--end of the data so I would do that processing here, but otherwise I would just store >*--the value to this.result for use later on >IF !(this.lcstring=="") > this.result=this.lcstring >ENDIF >RETURN >>
>*------------------------------------------------------------ >*--PROCEDURE MsComClear >*--Used in visual foxpro only for clearing/resetting the com port >*--1/23/2002 TCHolzer >PROCEDURE MsComClear >#IF 'VISUAL' $ UPPER(VERSION()) > IF UPPER(TYPE('ComForm.MsCom'))="O" > WITH COMFORM.mscom > IF .PortOpen > .PortOpen = .F. > IF !.PortOpen > mIsOpened = .F. > ENDIF > ENDIF > IF !mIsOpened > .CommPort = m_port > .Settings = ALLTRIM(STR(m_baudrate))+","+s_parity+","+ALLTRIM(STR(m_databits))+","+ALLTRIM(STR(m_stopbits)) > .InputLen = 0 > .RThreshold=1 > .SThreshold=1 > .PortOpen = .T. > ENDIF > IF .PortOpen > mIsOpened = .T. > ENDIF > ENDWITH > WITH COMFORM.mscom > IF .PortOpen > .PortOpen = .F. > mIsOpened = .F. > ENDIF > IF !mIsOpened > .inbuffersize=1024 > .RThreshold=1 > .SThreshold=1 > .InputLen = 0 > .PortOpen = .T. > ENDIF > IF .PortOpen > mIsOpened = .T. > ELSE > mIsOpened = .F. > ENDIF > ENDWITH > ELSE && comform.mscom is NOT an object - cannot access port or phonetree system > MESSAGEBOX('Phonetree is experiencing a problem.'+CHR(13); > +'Could not access Phonetree to reset port.'+CHR(13); > +'Please exit phonetree and start again.',16,'Phonetree Error!',5000000) > ENDIF && is comform.mscom an object? >#ENDIF >RETURN >>
>>>*--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 >>>RETURN >>> >>>>>>
>>>*~ 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 >>>>>>