Listing 1

integer 	li_Ret
String		ls_msg
SMSProtocol  	smsProto
Environment	le_env

GetEnvironment(le_env)

IF le_env.phonecapable THEN
	// Initialize the SMS object
	smsProto.ProtocolType = SMS_MSGTYPE_TEXT!
	smsProto.Encoding     = SMSDE_OPTIMAL!
	
	// open for read + write (1 + 2)
	li_Ret = SMSSess_1.Open( smsProto, 3 )
	
	ls_msg += "~r~nSMS Open(): " + STRING(li_Ret)
	
	IF li_Ret < 0 THEN
		ls_msg += " = ***FAILURE***"
		MessageBox(this.title, ls_msg)
	ELSE
		ls_msg += " = OK"
	END IF
	
END IF


Listing 2

// Register the SMS Listener using an external function
//
// This only works for "Windows Mobile 2003" and later.
DLLRegisterServer()

// External functions
// Register & Unregister the SMS Listener "shim"
FUNCTION long DllRegisterServer()   LIBRARY "PKSMS25.DLL" alias for "DllRegisterServer"
FUNCTION long DLLUnregisterServer() LIBRARY "PKSMS25.DLL" alias for "DllUnregisterServer"


Listing 3

String 	ls_object
Integer	li_rt

IF POS(SMSMsg.text, "PKTTT:") <> 0 THEN
	//End of game already happened - Winning Opponent wants to play again
	IF POS(SMSMsg.text, "Want to play again?") <> 0 THEN
		li_rt = MessageBox("TicTacToe", "Your opponent wants to play again.~n~r~It will be your turn first.~n~r~n~rIs
		 this OK?", Information!, YesNo!, 1)
		IF li_rt = 1 THEN
			parent.dw_board.Trigger EVENT ue_reset()
			parent.dw_board.enabled = TRUE
			parent.em_opponent.enabled = FALSE
			parent.cb_opponent.enabled = FALSE
			parent.st_1.text = "Your turn first"
		ELSE
			parent.dw_board.Trigger EVENT ue_sms("No thanks")
			parent.dw_board.Trigger EVENT ue_reset()
		END IF
	END IF
	//Your Opponent declined a rematch
	IF POS(SMSMsg.text, "No thanks") <> 0 THEN
		MessageBox("TicTacToe", "Your opponent does NOT want to play again")
		parent.dw_board.Trigger EVENT ue_reset()
	END IF
	//PKTTT Move received
	IF POS(SMSMsg.text, "cell") <> 0 THEN
		ls_object = Right(SMSMsg.text, 5)
		parent.dw_board.Trigger EVENT ue_cellset(ls_object, "O")
		IF parent.dw_board.Trigger EVENT ue_check("O") THEN
			MessageBox("TicTacToe", "You lost!")
			parent.st_1.text = "End of game"
		ELSE
			IF gi_count = 9 THEN
				MessageBox("TicTacToe", "Its a Draw")
				parent.st_1.text = "End of game"
			ELSE
				parent.st_1.text = "Oppontent has moved - Your turn"
			END IF
			parent.dw_board.enabled = TRUE
		END IF
	END IF
	RETURN TRUE
END IF

// Allow the message to go into the inbox
RETURN FALSE

Listing 4

//SMS the client
SMSProtocol 	lsms_Proto
SMSMessage	lSMS_Msg
SMSAddress	lSMS_Addr

SetPointer(HourGlass!)

//Message content "PKTTT:cellx" where cellx is passed in via as_object
lSMS_Msg.text = "PKTTT:" + as_object

//Message Address using international dialing +1 1234 123 123
lSMS_Addr.AddressType = SMSAT_INTERNATIONAL!
lSMS_Addr.Address = gs_number

//Send SMS
smssess_1.Send(lSMS_Msg, lSMS_Addr)

SetPointer(Arrow!)