#define __NO_FROMCODE__
#define __NO_TSBAR__
#define __NO_TSTSAY__
#define __NO_TSLINES__
#define __NO_TSRADIO__
#include "fivewin.ch"
#include 'Ads.ch'
#define ADS_ABORT .T.
#define ADS_CONTINUE .F.
static oWnd, oFont
external AdsKeyCount, AdsGetRelKeyPos, AdsSetRelKeyPos
REQUEST DBFCDX, DBFFPT
static oTimer, cRDD, cFOPath, objSMS
*----------------------*
FUNCTION main()
local oGet[2]
local cText := space(160)
local cPhone:= space(15)
local lAlert:= .F.
local oIni, cPort, cBaudRate, cParity, cDataBits, cStopBits, nRDDType
SET EPOCH TO 1940
SET DATE FORMAT TO 'DD/MM/YY'
SET DATE BRITISH
SET(_SET_DELETED,.T.)
SetHandleCount(200)
if !file(".\SMS.INI")
PortSetup()
end
INI oIni FILE ".\SMS.INI"
GET cRDD SECTION "RDD" ENTRY "RDDTYPE" OF oIni DEFAULT "LOCAL"
GET cFoPath SECTION "RDD" ENTRY "RDDPATH" OF oIni DEFAULT ".\"
GET cPort SECTION "SMS" ENTRY "PORT" OF oIni DEFAULT "COM5"
GET cBaudRate SECTION "SMS" ENTRY "BAUDRATE" OF oIni DEFAULT "19200 "
GET cParity SECTION "SMS" ENTRY "PARITY" OF oIni DEFAULT "N"
GET cDataBits SECTION "SMS" ENTRY "DATABITS" OF oIni DEFAULT "8"
GET cStopBits SECTION "SMS" ENTRY "STOPBITSP" OF oIni DEFAULT "1"
ENDINI
do case
case cRDD = 'LOCAL'
nRDDType := 1
case cRDD = 'REMOTE'
nRDDType := 2
case cRDD = 'INTERNET'
nRDDType := 4
otherwise
nRDDType := 7
end
if right(cFoPath,1) <> '' .and. !empty(cFoPath)
cFoPath := cFoPath+''
end
/*
REQUEST ADS
RddRegister( "ADS", 1 )
Rddsetdefault( "ADS" )
AdsSetDeleted(.T.)
AdsSetServerType( nRDDType ) // 1,2,4,7
AdsSetFileType( ADS_CDX ) // 2
AdsRightsCheck(.F.)
REQUEST ADSKeyCount, ADSKeyNo, OrdKeyCount, OrdKeyNo, ADSKEYCOUNT, ADSGETRELKEYPOS, ADSSETRELKEYPOS
SET OPTIMIZE ON
*/
objSMS := CreateObject("mCore.SMS")
objSMS:Port := rtrim(cPort)
objSMS:BaudRate:= val(cBaudRate)
objSMS:Parity := rtrim(cParity)
objSMS:DataBits:= val(cDataBits)
objSMS:StopBits:= rtrim(cStopBits)
DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12
DEFINE WINDOW oWnd TITLE 'SMS program' PIXEL ;
MENU BuildMenu()
oWnd:oFont := oFont
@ 15, 10 SAY 'Mobile# ' SIZE 80,18 PIXEL OF oWnd TRANSPARENT COLOR CLR_WHITE
@ 40, 10 SAY 'Message ' SIZE 80,18 PIXEL OF oWnd TRANSPARENT COLOR CLR_WHITE
@ 175, 10 SAY 'Alert' SIZE 80, 18 PIXEL OF oWnd TRANSPARENT COLOR CLR_WHITE
@ 13, 80 GET oGet[1] VAR cPhone SIZE 200, 20 PIXEL OF oWnd
@ 38, 80 GET oGet[2] VAR cText SIZE 200,120 PIXEL OF oWnd TEXT
@ 172, 80 CHECKBOX lAlert PROMPT '' SIZE 20,20 PIXEL OF oWnd
@ 200, 40 BUTTON 'Send SMS '+cPort SIZE 120, 30 OF oWnd PIXEL ACTION (SendSms(cPort,cPhone,cText,lAlert))
@ 200,190 BUTTON 'Exit' SIZE 120, 30 OF oWnd PIXEL ACTION (oWnd:End())
ACTIVATE WINDOW oWnd ON INIT (oGet[1]:SetFocus())
objSMS:DisConnect()
objSMS = NIL
return nil
*-----------------*
Function BuildMenu
local oMenu
MENU oMenu 2007
MENUITEM 'Set Up' ACTION PortSetup()
MENUITEM 'Exit' ACTION oWnd:End()
ENDMENU
return oMenu
*---------------------------------------------*
Function SendSms( cPort, cPhone, cText, lAlert )
LOCAL objLicense, objInbox, n
if subs(cPhone,1,1) ='0'
cPhone := "+66"+right(rtrim(cPhone),len(rtrim(cPhone))-1)
elseif subs(cPhone,1,1) <> '+'
cPhone := "+"+right(rtrim(cPhone),len(rtrim(cPhone))-1)
end
/*
objSMS := CreateObject("mCore.SMS")
objSMS:Port := cPort
objSMS:BaudRate := 38400
objSMS:Parity := "N"
objSMS:DataBits := 8
objSMS:StopBits := "1"
*/
* This code to Send SMS
objSMS:LongMessage := 0 // Send as Single Truncated Message when exceeded 160 chars in both types *objSMS:LongMessage := 1 // Send as multiple Messages But show as Individual un-formated messages with out Page Nos. to Receipient (160 + Remainig of Each Message)
*objSMS:LongMessage := 2 // Send as multiple Messages But show as Formated messages with Page Nos. to Receipient (148 + Remaining Len of Each Message) *objSMS:LongMessage := 3 // Send as multiple messages but show as single to Receipient (Entire Length or 152 + Remaining))
* This is heart of the main functionality
objSMS:SendSMS(rtrim(cPhone), rtrim(cText), lAlert)
IF objSMS:IsError(.F.)
MsgInfo("Error " + CStr(objSMS:ErrorCode) + ;
": " + objSMS:ErrorDescription)
ENDIF
* This code to Receive the SMS
/*
objInbox := objSMS:Inbox()
objInbox:Concatenate := .T.
objSMS:MessageMemory := "SM"
objInbox:Refresh()
If objInbox:HasMessages
MsgInfo("Total "+ LTRIM(STR(objInbox:Count))+ " messages are there in inbox!")
For n = 1 TO objInbox:Count
?ObjInbox:Message(n):TimeStampRFC + CHR(13)+CHR(10) + "From: " + ;
ObjInbox:Message(n):Phone + CHR(13)+CHR(10) + ObjInbox:Message(n):Text
Next
EndIf
objSMS:DisConnect()
objSMS = NIL
*/
RETURN nil
*------------------*
Procedure PortSetup
local oDlg, oGet, oCbx, oSay, oBtn, oFont, oIni
local cRddType, cIpAdd, cPort, cBaudRate, cParity, cDataBits, cStopBits, nLoop, lSave, n
local aRddType := {'LOCAL ', 'REMOTE ', 'INTERNET'}
local aPort, aBaudRate, aParity, aDataBits, aStopBits
aPort := {}
for n := 1 to 32
aadd( aPort, "COM"+ltrim(str(n,2)) )
next
aBaudRate := {'1200 ','2400 ','4800 ','9600 ','19200 ','38400 ','57600 ','115200','230400','460800'}
aParity := {'N','E'}
aDataBits := {'7','8'}
aStopBits := {'1','2'}
cRddType := 'LOCAL '
cIpAdd := '.'+space(48)
lSave := .F.
INI oIni FILE ".\SMS.INI"
GET cRddType SECTION "RDD" ENTRY "RDDTYPE" OF oIni DEFAULT cRddType
GET cIpAdd SECTION "RDD" ENTRY "RDDPATH" OF oIni DEFAULT cIpAdd
GET cPort SECTION "SMS" ENTRY "PORT" OF oIni DEFAULT "COM3"
GET cBaudRate SECTION "SMS" ENTRY "BAUDRATE" OF oIni DEFAULT "19200 "
GET cParity SECTION "SMS" ENTRY "PARITY" OF oIni DEFAULT "N"
GET cDataBits SECTION "SMS" ENTRY "DATABITS" OF oIni DEFAULT "8"
GET cStopBits SECTION "SMS" ENTRY "STOPBITS" OF oIni DEFAULT "1"
DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12
DEFINE DIALOG oDlg FROM 0, 0 TO 250, 400 TITLE 'Server Setup' PIXEL FONT oFont
oDlg:lHelpIcon := .F.
@ 10, 10 SAY oSay PROMPT 'Server Type' SIZE 50,12 OF oDlg PIXEL
@ 24, 10 SAY oSay PROMPT 'Address' SIZE 50,12 OF oDlg PIXEL
@ 38, 10 SAY oSay PROMPT 'Port' SIZE 50,12 OF oDlg PIXEL
@ 52, 10 SAY oSay PROMPT 'BaudRate' SIZE 50,12 OF oDlg PIXEL
@ 66, 10 SAY oSay PROMPT 'Parity' SIZE 50,12 OF oDlg PIXEL
@ 80, 10 SAY oSay PROMPT 'DataBits' SIZE 50,12 OF oDlg PIXEL
@ 94, 10 SAY oSay PROMPT 'StopBits' SIZE 50,12 OF oDlg PIXEL
@ 7, 50 COMBOBOX oCbx VAR cRddType ITEMS aRddType OF oDlg PIXEL
@ 21, 50 GET oGet VAR cIpAdd OF oDlg PIXEL SIZE 130,12 ;
VALID !empty(cIpAdd) ;
ACTION (cIpAdd := cGetDir('Select Folder'), oGet:Refresh(), oBtn:SetFocus())
@ 35, 50 COMBOBOX oCbx VAR cPort ITEMS aPort OF oDlg PIXEL // SIZE 130,12
@ 49, 50 COMBOBOX oCbx VAR cBaudRate ITEMS aBaudRate OF oDlg PIXEL // SIZE 130,12
@ 63, 50 COMBOBOX oCbx VAR cParity ITEMS aParity OF oDlg PIXEL // SIZE 130,12
@ 77, 50 COMBOBOX oCbx VAR cDataBits ITEMS aDataBits OF oDlg PIXEL // SIZE 130,12
@ 91, 50 COMBOBOX oCbx VAR cStopBits ITEMS aStopBits OF oDlg PIXEL // SIZE 130,12
@ 110, 80 BUTTON oBtn PROMPT 'OK' OF oDlg SIZE 50,15 PIXEL ;
WHEN (!empty(cRddType).and.;
!empty(cIpAdd) .and.;
!empty(cPort) .and.;
!empty(cParity) .and.;
!empty(cDataBits) .and.;
!empty(cStopBits) .and.;
!empty(cBaudRate)) ;
ACTION (lSave := .T., oDlg:End())
ACTIVATE DIALOG oDlg CENTERED
oFont:End()
if lSave
SET SECTION "RDD" ENTRY "RDDTYPE" TO rtrim(cRddType) OF oIni
SET SECTION "RDD" ENTRY "RDDPATH" TO rtrim(cIpAdd) OF oIni
SET SECTION "SMS" ENTRY "PORT" TO rtrim(cPort) OF oIni
SET SECTION "SMS" ENTRY "BAUDRATE" TO rtrim(cBaudRate) OF oIni
SET SECTION "SMS" ENTRY "PARITY" TO cParity OF oIni
SET SECTION "SMS" ENTRY "DATABITS" TO cDataBits OF oIni
SET SECTION "SMS" ENTRY "STOPBITS" TO cStopBits OF oIni
end
ENDINI
return