📄 telbook.c
字号:
/****************************************************************
** *
** FILE : TelBook.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#include "includes.h"
#include "tools.h"
#include "screen.h"
#include "db_sk.h"
#include "db_tb.h"
#include "menuwin.h"
#include "itemmenu.h"
#include "editor.h"
#include "prompt.h"
#include "virphone.h"
#include "skman.h"
#include "telbook.h"
#if EN_HANDSET > 0
/*
********************************************************************************
* DEFINE CONFIG PARAMETERS
********************************************************************************
*/
#define SIZE_DPLYBUF 50
/*
********************************************************************************
* DEFINE op_type
********************************************************************************
*/
#define OP_ADD 0
#define OP_MODIFY 1
#define OP_FIND 2
/*
********************************************************************************
* DEFINE MODULE VARIANTS
********************************************************************************
*/
static TBREC_STRUCT currecord, readrecord;
static INT16S selrecord;
static INT8U op_type;
static INT8U dplybuf[SIZE_DPLYBUF];
static void (*RetInformer)(INT8U tellen, INT8U *tel, INT8U namelen, INT8U *name);
static void AddRec(void)
{
ActivateStringPrompt("存储中…");
if (AddTBRec(&currecord))
ActivateStringPrompt("已存");
else
ActivateStringPrompt("存储已满");
}
static void ACK_AddRec(void)
{
ActivateStringPrompt("存储中…");
DelTBRec(selrecord);
AddRec();
}
static void ModifyRec(void)
{
ActivateStringPrompt("存储中…");
if (ModifyTBRec(selrecord, &currecord))
ActivateStringPrompt("已修改");
else
ActivateStringPrompt("修改失败");
}
static void ACK_ModifyRec(void)
{
INT16S rec;
ModifyRec();
rec = GetTBRecByName_FULL(currecord.namelen, currecord.name);
if (rec != -1) DelTBRec(rec);
}
static void ExitPhoneEditor(void)
{
INT8U len;
INT16S rec;
if ((currecord.tellen = GetEditorData(currecord.tel)) > 0) {
if (op_type == OP_MODIFY) {
PopMenuWin();
rec = GetTBRecByName_FULL(currecord.namelen, currecord.name);
if (rec != -1 && rec != selrecord) {
len = strlen("替换?\n");
memcpy(dplybuf, "替换?\n", len);
memcpy(dplybuf + len, currecord.name, currecord.namelen);
ActivateSelPrompt(dplybuf, currecord.namelen + len, ACK_ModifyRec);
} else {
ModifyRec();
}
} else {
selrecord = GetTBRecByName_FULL(currecord.namelen, currecord.name);
if (selrecord != -1) {
len = strlen("替换?\n");
memcpy(dplybuf, "替换?\n", len);
memcpy(dplybuf + len, currecord.name, currecord.namelen);
ActivateSelPrompt(dplybuf, currecord.namelen + len, ACK_AddRec);
} else {
AddRec();
}
}
}
}
static EDITOR_STRUCT PhoneEditor =
{EDT_DIGITAL | EDT_PULS | EDT_CURSOR, 1, TBREC_SIZE_TEL, 0, "请输号码:", 0, 0, 0, ExitPhoneEditor, 0, 0, 0, 0, 0};
static void ActivatePhoneEditor(void)
{
PhoneEditor.InitPtr = currecord.tel;
PhoneEditor.InitLen = currecord.tellen;
CreateEditor(&PhoneEditor);
}
static void ListTB_Init(INT16U initrecord);
static void ExitNameEditor(void)
{
INT16S findrec;
if ((currecord.namelen = GetEditorData(currecord.name)) > 0) {
if (op_type != OP_FIND) ActivatePhoneEditor();
else {
if ((findrec = GetTBRecByName(currecord.namelen, currecord.name)) == -1) findrec = 0;
ListTB_Init(findrec);
}
}
}
static EDITOR_STRUCT NameEditor =
{EDT_CURSOR | EDT_CHINESE, 1, TBREC_SIZE_NAME, 0, "姓名:", 0, 0, 0, ExitNameEditor, 0, 0, 0, 0, 0};
static void ActivateNameEditor(void)
{
NameEditor.InitPtr = currecord.name;
NameEditor.InitLen = currecord.namelen;
CreateEditor(&NameEditor);
}
static void AddTB(void)
{
op_type = OP_ADD;
currecord.namelen = 0;
currecord.tellen = 0;
ActivateNameEditor();
}
static void ACK_DelProc(void)
{
PopMenuWin();
PopMenuWin();
ActivateStringPrompt("删除中…");
DelTBRec(selrecord);
ActivateStringPrompt("已删除");
}
static void DelProc(void)
{
ActivateSelPrompt("删除?", 0, ACK_DelProc);
}
static void ModifyProc(void)
{
op_type = OP_MODIFY;
if (GetTBRec(selrecord, &currecord) == 0)
PopMenuWin();
else
ActivateNameEditor();
}
static void DialProc(void)
{
if (GetTBRec(selrecord, &currecord))
ActivateVirPhone_Dial(FALSE, currecord.tellen, currecord.tel);
}
static ITEMMENU_STRUCT MENU_DIAL = {ITEM_FCN, "呼出", DialProc, 0, 0};
static ITEMMENU_STRUCT MENU_DEL = {ITEM_FCN, "删除", DelProc, 0, 0};
static ITEMMENU_STRUCT MENU_MODIFY = {ITEM_FCN, "修改", ModifyProc, 0, 0};
static ITEMMENU_STRUCT *MENU_OPREC_CHILD[] = {&MENU_DIAL, &MENU_MODIFY, &MENU_DEL};
static ITEMMENU_STRUCT MENU_OPREC = {ITEM_LMENU, 0, 0, 3, MENU_OPREC_CHILD};
static void Handler_KEY_ACK(void)
{
selrecord = GetMenuWinRecordNum();
ActivateItemMenu(&MENU_OPREC);
}
static void Handler_KEY_ACK_RET(void)
{
INT16U num;
num = GetMenuWinRecordNum();
PopMenuWin();
if (GetTBRec(num, &currecord)) {
if (RetInformer != 0)
RetInformer(currecord.tellen, currecord.tel, currecord.namelen, currecord.name);
} else if (RetInformer != 0) {
RetInformer(0, 0, 0, 0);
}
}
static INT16U MaxRecordProc(void)
{
return GetTBItem();
}
static INT16U InitRecordProc(void)
{
return selrecord;
}
static INT16U ReadRecordProc(INT16S numrec, INT8U *ptr)
{
INT16U linesize;
if (numrec == -1) {
memcpy(ptr, "无号码", strlen("无号码"));
return strlen("无号码");
}
if (GetTBRec(numrec, &readrecord) == 0) return 0;
memcpy(ptr, readrecord.name, readrecord.namelen);
ptr += readrecord.namelen;
*ptr++ = '\n';
linesize = GetScreenLineSize();
if (linesize > readrecord.tellen) linesize -= readrecord.tellen;
else linesize = 0;
InitBuf(ptr, ' ', linesize);
ptr += linesize;
memcpy(ptr, readrecord.tel, readrecord.tellen);
return (readrecord.namelen + 1 + linesize + readrecord.tellen);
}
static MENUWIN_STRUCT ListTBEntry =
{WIN_FMENU, Handler_KEY_ACK, 0, 0, 0, 0, MaxRecordProc, InitRecordProc, ReadRecordProc};
static void ListTB_Init(INT16U initrecord)
{
selrecord = initrecord;
ListTBEntry.Handler_KEY_ACK = Handler_KEY_ACK;
ActivateMenuWin(&ListTBEntry);
}
void ListTB(void)
{
ListTB_Init(0);
}
BOOLEAN ListTB_RET(void Informer(INT8U tellen, INT8U *tel, INT8U namelen, INT8U *name))
{
if (GetTBItem() == 0) return FALSE;
selrecord = 0;
RetInformer = Informer;
ListTBEntry.Handler_KEY_ACK = Handler_KEY_ACK_RET;
ActivateMenuWin(&ListTBEntry);
return TRUE;
}
static void FindTB(void)
{
op_type = OP_FIND;
currecord.namelen = 0;
ActivateNameEditor();
}
static void ACK_DelAllTB(void)
{
ActivateStringPrompt("删除中…");
DelDB_TB();
DelDB_SK();
ActivateStringPrompt("已删除所有");
}
static void DelAllTB(void)
{
ActivateSelPrompt("删除所有?", 0, ACK_DelAllTB);
}
static void BrowseMemory(void)
{
INT8U len, tlen;
len = DecToAscii(&dplybuf[0], GetTBBlankItem(), 0);
tlen = len;
len = strlen("个未用\n已用");
memcpy(&dplybuf[tlen], "个未用\n已用", len);
tlen += len;
len = DecToAscii(&dplybuf[tlen], GetTBItem(), 0);
tlen += len;
len = strlen("个");
memcpy(&dplybuf[tlen], "个", len);
tlen += len;
dplybuf[tlen] = '\0';
ActivateStringPrompt_TIME((char *)dplybuf, 0);
}
static ITEMMENU_STRUCT MENU_ADD = {ITEM_FCN, "增加", AddTB, 0, 0};
static ITEMMENU_STRUCT MENU_FIND = {ITEM_FCN, "查找", FindTB, 0, 0};
static ITEMMENU_STRUCT MENU_LIST = {ITEM_FCN, "浏览", ListTB, 0, 0};
static ITEMMENU_STRUCT MENU_DelALL = {ITEM_FCN, "删除所有", DelAllTB, 0, 0};
static ITEMMENU_STRUCT MENU_Browse = {ITEM_FCN, "存储状况", BrowseMemory, 0, 0};
static ITEMMENU_STRUCT *MENU_TELBOOK_CHILD[] = {&MENU_ADD, &MENU_FIND, &MENU_LIST, &MENU_DelALL, &MENU_Browse, &MENU_SKMAN};
ITEMMENU_STRUCT MENU_TELBOOK = {ITEM_LMENU, " 电话本", 0, 6, MENU_TELBOOK_CHILD};
void SaveToTB(INT8U *tel, INT8U tellen)
{
if (tellen > sizeof(currecord.tel)) tellen = sizeof(currecord.tel);
op_type = OP_ADD;
currecord.namelen = 0;
currecord.tellen = tellen;
memcpy(currecord.tel, tel, tellen);
ActivateNameEditor();
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -