📄 shortmsg.c
字号:
/****************************************************************
** *
** FILE : ShortMsg.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#include "includes.h"
#include "tools.h"
#include "pdumode.h"
#include "public.h"
#include "hstctl.h"
#include "sm_list.h"
#include "db_sm.h"
#include "db_tb.h"
#include "editor.h"
#include "prompt.h"
#include "menuwin.h"
#include "itemmenu.h"
#include "telbook.h"
#include "virphone.h"
#include "shortmsg.h"
#if EN_HANDSET > 0
/*
********************************************************************************
* DEFINE MODULE VARIANTS
********************************************************************************
*/
static INT8U dplybuf[50];
static INT16S SelRecord;
static SMREC_STRUCT CurRecord, EditRecord;
static INT8U StoreBuf[300];
static EDITOR_STRUCT TelEditorEntry;
static void CreateSMEditor(void);
static void CreateTelEditor(void);
static void ACK_EraseSM(void)
{
PopMenuWin();
PopMenuWin();
ActivateStringPrompt("删除中…");
DelSMRec(SelRecord);
if (!HaveUnReadSMRec()) TurnoffSMIndicator();
ActivateStringPrompt("已删除");
}
static void EraseSM(void)
{
ActivateSelPrompt("删除?", 0, ACK_EraseSM);
}
static void TransmitSM(void)
{
PopMenuWin();
memcpy(&EditRecord, &CurRecord, sizeof(EditRecord));
EditRecord.tellen = 0;
CreateSMEditor();
}
static void WriteBackSM(void)
{
PopMenuWin();
memcpy(&EditRecord, &CurRecord, sizeof(EditRecord));
EditRecord.datalen = 0;
CreateSMEditor();
}
static void SaveTel(void)
{
SaveToTB(CurRecord.tel, CurRecord.tellen);
}
static void DialTel(void)
{
ActivateVirPhone_Dial(FALSE, CurRecord.tellen, CurRecord.tel);
}
static ITEMMENU_STRUCT MENU_WRITEBACK = {ITEM_FCN, "回复", WriteBackSM, 0, 0};
static ITEMMENU_STRUCT MENU_TRANSMIT = {ITEM_FCN, "转发", TransmitSM, 0, 0};
static ITEMMENU_STRUCT MENU_ERASE = {ITEM_FCN, "删除", EraseSM, 0, 0};
static ITEMMENU_STRUCT MENU_SAVE = {ITEM_FCN, "存储号码", SaveTel, 0, 0};
static ITEMMENU_STRUCT MENU_DIAL = {ITEM_FCN, "呼出", DialTel, 0, 0};
static ITEMMENU_STRUCT *MENU_OPSM_CHILD[] = {&MENU_ERASE, &MENU_TRANSMIT, &MENU_WRITEBACK, &MENU_SAVE, &MENU_DIAL};
static ITEMMENU_STRUCT MENU_OPSM = {ITEM_LMENU, 0, 0, 5, MENU_OPSM_CHILD};
static void Handler_KEY_ACK_CONTENT(void)
{
ActivateItemMenu(&MENU_OPSM);
}
static INT16U MaxRecordProc_CONTENT(void)
{
return 3;
}
static INT16U ReadRecordProc_CONTENT(INT16S numrec, INT8U *ptr)
{
INT8U len, templen;
if (numrec == 0) {
memcpy(ptr, CurRecord.data, CurRecord.datalen);
return CurRecord.datalen;
} else if (numrec == 1) {
len = strlen("发信人:");
memcpy(ptr, "发信人:", len);
ptr += len;
memcpy(ptr, CurRecord.tel, CurRecord.tellen);
len += CurRecord.tellen;
return len;
} else if (numrec == 2) {
len = strlen("时间:");
memcpy(ptr, "时间:", len);
ptr += len;
templen = FormatTime(dplybuf, CurRecord.time[0], CurRecord.time[1], CurRecord.time[2]);
memcpy(ptr, dplybuf, 5);
len += 5;
ptr += 5;
*ptr++ = '\n';
len += 1;
templen = FormatYear(ptr, CurRecord.date[0], CurRecord.date[1], CurRecord.date[2]);
len += templen;
return len;
} else {
return 0;
}
}
static MENUWIN_STRUCT MENU_READCONTENT =
{WIN_FMENU, Handler_KEY_ACK_CONTENT, 0, 0, 0, 0, MaxRecordProc_CONTENT, 0, ReadRecordProc_CONTENT};
static void Handler_KEY_ACK(void)
{
SelRecord = GetMenuWinRecordNum();
if (SelRecord != -1) {
if (GetSMRec(SelRecord, &CurRecord)) {
ActivateMenuWin(&MENU_READCONTENT);
ClearSMRecUnReadFlag(SelRecord); /* clear unread flag */
if (!HaveUnReadSMRec()) TurnoffSMIndicator();
}
}
}
static INT16U MaxRecordProc(void)
{
return GetSMRecItem();
}
static INT16U ReadRecordProc(INT16S numrec, INT8U *ptr)
{
INT8U len1, len2;
if (numrec == -1) {
memcpy(ptr, "无信息", strlen("无信息"));
return strlen("无信息");
}
if (SMRecUnRead(numrec))
*ptr++ = 0x7e;
else
*ptr++ = ' ';
len1 = GetSMRecTel(numrec, dplybuf);
len2 = GetTBNameByTel(ptr, len1, dplybuf);
if (len2 > 0) {
return len2 + 1;
} else {
memcpy(ptr, dplybuf, len1);
return len1 + 1;
}
}
static MENUWIN_STRUCT MENU_LISTSM =
{WIN_LMENU, Handler_KEY_ACK, 0, 0, 0, 0, MaxRecordProc, 0, ReadRecordProc};
static void ReadSM(void)
{
ActivateMenuWin(&MENU_LISTSM);
}
static void SendInformer(INT8U result)
{
if (result == _SUCCESS)
ActivateStringPrompt("发送成功!");
else
ActivateStringPrompt("发送失败!");
}
static void GetTelFromTB(INT8U tellen, INT8U *tel, INT8U namelen, INT8U *name)
{
namelen = namelen;
name = name;
TelEditorEntry.InitLen = tellen;
TelEditorEntry.InitPtr = tel;
ResetEditor(&TelEditorEntry);
}
static void ExitTelEditor(void)
{
INT16U i;
BOOLEAN SendSuccess;
EditRecord.tellen = GetEditorData(EditRecord.tel);
if (EditRecord.tellen > 0) {
ExitEditor(); /* Exit Editor */
if (!SearchGBCode(EditRecord.data, EditRecord.datalen)) {
for (i = 0; i < EditRecord.datalen; i++) {
EditRecord.data[i] = ASCIIToGsmCode(EditRecord.data[i]);
}
}
SendSuccess = SendSM(SM_ATTR_COMMON | SM_ATTR_DISCODE6 | SM_ATTR_AUTOCODE,
EditRecord.tel, EditRecord.tellen, EditRecord.data, EditRecord.datalen, SendInformer);
EditRecord.tellen = 0;
if (!SendSuccess)
ActivateStringPrompt("发送失败!");
else
ActivateStringPrompt("发送中…");
} else {
if (!ListTB_RET(GetTelFromTB)) {
ExitEditor();
}
}
}
static void CreateTelEditor(void)
{
memset(&TelEditorEntry, 0, sizeof(TelEditorEntry));
TelEditorEntry.Mode = EDT_DIGITAL | EDT_CURSOR | EDT_PULS;
TelEditorEntry.MinLen = 0;
TelEditorEntry.MaxLen = SMREC_SIZE_TEL;
TelEditorEntry.LabelLen = strlen("手机号: ");
TelEditorEntry.LabelPtr = "手机号: ";
TelEditorEntry.InitLen = EditRecord.tellen;
TelEditorEntry.InitPtr = EditRecord.tel;
TelEditorEntry.AckProc = ExitTelEditor;
CreateEditor(&TelEditorEntry);
}
static void AckSMEditor(void)
{
EditRecord.datalen = GetEditorData(EditRecord.data);
CreateTelEditor();
}
static INT16U CurLenProc(INT16U len, INT8U *ptr)
{
return TestGBLen(ptr, len);
}
static INT16U MaxLenProc(INT16U len, INT8U *ptr)
{
if (SearchGBCode(ptr, len))
return 140;
else
return SMREC_SIZE_DATA;
}
static EDITOR_STRUCT SMEditorEntry =
{EDT_CURSOR | EDT_CHINESE, 0, 0, 0, 0, 0, 0, StoreBuf, 0, AckSMEditor, CurLenProc, 0, MaxLenProc, 0};
static void CreateSMEditor(void)
{
SMEditorEntry.InitLen = EditRecord.datalen;
SMEditorEntry.InitPtr = EditRecord.data;
CreateEditor(&SMEditorEntry);
}
static void WriteSM(void)
{
EditRecord.tellen = 0;
EditRecord.datalen = 0;
CreateSMEditor();
}
static void ReadSMSTel(void)
{
INT8U len;
len = strlen("号码:");
memcpy(dplybuf, "号码:", len);
if (!PubParaValid(SMSTEL_) || SmsTel.len == 0) {
memcpy(&dplybuf[len], "(空白)", strlen("(空白)"));
len += strlen("(空白)");
} else {
memcpy(&dplybuf[len], SmsTel.tel, sizeof(SmsTel.tel));
len += SmsTel.len;
}
if (len >= sizeof(dplybuf)) len = sizeof(dplybuf) - 1;
dplybuf[len] = '\0';
ActivateStringPrompt_TIME((char *)dplybuf, 0);
}
static void ACK_DelAll(void)
{
TurnoffSMIndicator();
ActivateStringPrompt("删除中…");
DelAllSMRec();
ActivateStringPrompt("已删除");
}
static void DelAll(void)
{
ActivateSelPrompt("删除所有?", 0, ACK_DelAll);
}
static ITEMMENU_STRUCT MENU_READSM = {ITEM_FCN, "收到的信息", ReadSM, 0, 0};
static ITEMMENU_STRUCT MENU_WRITESM = {ITEM_FCN, "写信息", WriteSM, 0, 0};
static ITEMMENU_STRUCT MENU_SMSTEL = {ITEM_FCN, "查看\n短信中心号码", ReadSMSTel, 0, 0};
static ITEMMENU_STRUCT MENU_DELALL = {ITEM_FCN, "删除\n所有信息", DelAll, 0, 0};
static ITEMMENU_STRUCT *MENU_SHORTMSG_CHILD[] = {&MENU_WRITESM, &MENU_READSM, &MENU_SMSTEL, &MENU_DELALL};
ITEMMENU_STRUCT MENU_SHORTMSG = {ITEM_FMENU, " 短消息", 0, 4, MENU_SHORTMSG_CHILD};
void ActivateReadShorMsgMenu(void)
{
ReadSM();
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -