⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phone_a.c

📁 本程序是使用CDMA450模块开发的一个无线公话完整程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "datatype.h"
#include "general.h"
#include "common.h"
#include "mmalloc.h"
#include "windows.h"
#include "pub_wnd.h"
#include "smsbrowse.h"
#include "para_def.h"
#include "grpmanage.h"
#include "cardmanage.h"
#include "phonecard.h"

#include "debug_out.h"
#include "phonebook.h"//yu
#include "translate.h"

#define  COMPILE_OK  1
#define  COMPILING	 1
#ifdef COMPILE_OK

extern int phoneBookSize;
//extern int phoneBookMax;
extern int phoneBookRead;
extern void SetHandleKey(int id);
extern void Waiting(int a);
extern int xstrcmp(char *pSrc, char *pDst, int len);

const static char *menuName[] = { 
	"增加号码",
	"删除记录",
	"删除全部",
};
#if 1
phone_book_t *SIM_BOOK;

static int Sim_init_read_ok;// =-1 error   

static  int ReReadSim(void)
{int kkk;
	SetHandleKey(0);		/* 禁止按键 */ 
	Waiting(1000);
	kkk=PHBOOK_Select(PB_ALL);//获取phoneBookSize
	Waiting(80);
	//Sim_init_read_ok=-1;
	if(kkk>0)
	{
		memset(SIM_BOOK, 0, sizeof(phone_book_t)*phoneBookSize);
		kkk=PHBOOK_ReadAll(SIM_BOOK,phoneBookSize);
	}
	SetHandleKey(1);		/* 允许按键 */ 
	return kkk;
}


static  int readSim(void)
{int kkk;
	SetHandleKey(0);		/* 禁止按键 */ 
	kkk=PHBOOK_Select(PB_ALL);//获取phoneBookSize
	Sim_init_read_ok=-1;
	if(kkk>0)
	{
		SIM_BOOK = (phone_book_t*)malloc(sizeof(phone_book_t)*(phoneBookSize+1));
		if(SIM_BOOK==NULL)
			return -1;
		memset(SIM_BOOK, 0, sizeof(phone_book_t)*phoneBookSize);
		kkk=PHBOOK_ReadAll(SIM_BOOK,phoneBookSize);
		//--------------
		if(kkk<0)
			free(SIM_BOOK);
		else
			Sim_init_read_ok=1;
		//--------------
	}
	SetHandleKey(1);		/* 允许按键 */ 
	return Sim_init_read_ok;
}
void Sim_Book_init(void)
{
	Sim_init_read_ok=-1;
}
//	phoneBookRead = 0;
//	phoneBookMax  = max;
//phoneBookSize
#endif
void SimLode(void)
{
	if(Sim_init_read_ok<0)
			readSim();
}

static int inputSimFullCard(phone_book_t *pCard)
{
	phone_book_t	nCard;
	char	number[SIMMAX_PHONENum_LEN];
	rect	area;
	int		sel; 
	//int data;
	
	memcpy(&nCard, pCard, sizeof(phone_book_t));
/*	sel = PB_SelectGroup(&nCard.group);
	if (sel < 0)
		return -1;
*/
	memcpy(number, nCard.number, SIMMAX_PHONENum_LEN);
	
inputnumber:
	SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);//yu	SetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
	sel = InputLine(&area, TranslateChar("输入号码"), (BYTE*)number, SIMMAX_PHONENum_LEN-1, INPUT_DIGITAL | INPUT_FIXED);
	if (sel < 0)
		return -1;
	if(0==strlen(number))	
			goto inputnumber;
	
/*	if (CheckNumberExist(number, nCard.number)) {
		XMessageBox("11", "号码已经存在", ID_OK);
		goto inputnumber;
	}*/

inputname:
		SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);//yuSetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
	sel = InputLine(&area, TranslateChar("输入姓名"), (BYTE*)nCard.name, 14, INPUT_PINYIN);
	if (sel == -1)
		return -1;
	if (sel == -2)
		goto inputnumber;

	if(0==strlen(nCard.name))	
			goto inputname;
//-----------------	yu 
	if((0==strlen(nCard.name)) && (0== strlen(number)))
		{
			XTipWndShow(TranslateChar("保存错误"),1);
			return -3;
		}
//-----------------	
//input_ok:
	memcpy(nCard.number, number, SIMMAX_PHONENum_LEN-1);//yu memcpy(nCard.number, number, NAME_LEN-1);
	memcpy(pCard, &nCard, sizeof(phone_book_t));
	return 0;
}

#define SIMBOOKSIMBOOK 1
#ifdef SIMBOOKSIMBOOK


static phone_book_t gSimFindedCard;//yu static PHONE_CARD gFindedCard;
//static BYTE	gDisplayGroup = 0xFF;

typedef struct {
	window_t	wnd;
	listbox_t	list;
	inputbox_t	*keyb;
	menu_t		tmenu;
	int			select;

	WORD		card[MAX_CARD_NUM*3];		/* 搜索结果,待显示的电话本 */ 
	WORD		acard[MAX_CARD_NUM*3];	/* 全部待搜索电话本 */ 
	WORD		total;					/* 全部待搜索电话本总数 */ 
	WORD		sum;					/* 搜索结果,待显示的电话本数目 */ 

	char		keyWord[SIMMAX_PHONENum_LEN];	/* 关键字 */ 
	BYTE		keyLen;					/* 关键字输入长度 */ 
	
//	BYTE		group[MAX_GROUP_NUM];
//	BYTE		grpSum;
//	BYTE		grpCur;
//	BYTE		grpShow;

	BYTE		idFind;
	int			next;			/* 退出状态 */ 
} pb_browse_t;
static pb_browse_t  *gSimPBBrowse = NULL;

static int OnDrawSimCardItem(listbox_t *lb, rect *rc, int num)
{	phone_book_t nCard;//PHONE_CARD	nCard;
	
	if (num >= gSimPBBrowse->sum)
		return -1;
	nCard=SIM_BOOK[gSimPBBrowse->card[num]];	
	//yu if(nCard.index<1)//if (PB_ReadOne(gSimPBBrowse->card[num], &nCard) < 0)
	//yu	return -1;
	MoveTo(rc->Xmin + 2, rc->Ymax);
	if(0==strlen(nCard.name))
	DrawText((BYTE*)nCard.number, 0, 12);//DrawText((BYTE*)nCard.name, 0, 12);
	else
	DrawText((BYTE*)nCard.name, 0, 12);//DrawText((BYTE*)nCard.name, 0, 12);
	//	MoveTo(rc->Xmax - 82, rc->Ymax - 1);
	//	DrawText(nCard.number, 0, 10);
	return 0;
}

static WORD	simSearchPhoneBook(char *keyWord)
{
	WORD	i, finded;
	int		len;
	char	ascName[SIMMAX_NAME_LEN];
	phone_book_t nCard;//	PHONE_CARD	nCard;
	
	len = strlen(keyWord);
	if (len == 0) {
		memcpy(gSimPBBrowse->card, gSimPBBrowse->acard, MAX_CARD_NUM*3*2);
		gSimPBBrowse->sum = gSimPBBrowse->total;
		return gSimPBBrowse->total;
	}
	
	finded = 0;
	for (i = 0; i < gSimPBBrowse->total; ++i) {
		nCard=SIM_BOOK[gSimPBBrowse->acard[i]];//PB_ReadOne(gSimPBBrowse->acard[i], &nCard);
		ChangeNameToASCII((BYTE*)nCard.name, (BYTE*)ascName, SIMMAX_NAME_LEN);
		if (xstrcmp(ascName, keyWord, len) != 0)
			continue;
		gSimPBBrowse->card[finded++] = gSimPBBrowse->acard[i];
	}
	return finded;
}

static int	SimSearchPhoneCard(void)
{
		gSimPBBrowse->sum = simSearchPhoneBook(gSimPBBrowse->keyWord);
	return (int)(gSimPBBrowse->sum);
}


static void ShowSimKeyword(void)
{
	rect	area;
	BYTE	first, len;
	
	SetRect(&area, 48, LCD_HEIGHT-HZ_MAIN, LCD_WIDTH, LCD_HEIGHT);
	EraseRect(&area);
	first = 0;
	len = gSimPBBrowse->keyLen;
	if (len > 10) {
		first = len - 10;
		len = 10;
	}
	MoveTo(60, LCD_HEIGHT+1);
	DrawText((BYTE*)gSimPBBrowse->keyWord, first, len);
}
static int PB_SimDetailShow(WORD num);//(WORD pos)

static void OnBrowseSimKeyDown(int keyID)
{
	int		tmp;
	switch (keyID) {
	case KEY_MENU:
		/* 删除输入法键盘 */ 
		XDeleteInputBoard(gSimPBBrowse->keyb);
		XPopMenu(&gSimPBBrowse->tmenu, 1, LCD_HEIGHT-2, 0);
		/* 重新创建输入法键盘 */ 
		gSimPBBrowse->keyb = XCreateInputBoard(&gSimPBBrowse->wnd.comp, INPUT_ENGLISH | INPUT_FIXED);
			XShowInputBoard(gSimPBBrowse->keyb);
			v_WriteLcdBuff();
		break;
	case KEY_OK:
		if (0 != gSimPBBrowse->sum) {
			if (gSimPBBrowse->idFind == 1) {
				gSimFindedCard=SIM_BOOK[gSimPBBrowse->card[gSimPBBrowse->select]];//PB_ReadOne(gSimPBBrowse->card[gSimPBBrowse->select], &gFindedCard);
				gSimPBBrowse->next = 1;
			}
			else {
				/* 删除输入法键盘 */ 
				XDeleteInputBoard(gSimPBBrowse->keyb);
				tmp = PB_SimDetailShow(gSimPBBrowse->card[gSimPBBrowse->select]);//tmp = PB_SimDetailShow(gSimPBBrowse->card[gSimPBBrowse->select]);
				if (tmp == 1)
					gSimPBBrowse->next = 1;
				else
					gSimPBBrowse->next = 2;
				/* 重新创建输入法键盘 */ 
				gSimPBBrowse->keyb = XCreateInputBoard(&gSimPBBrowse->wnd.comp, INPUT_ENGLISH | INPUT_FIXED);
			}
			XPostQuitMessage(&gSimPBBrowse->wnd);
		}
		break;
	case KEY_CANCEL:
			gSimPBBrowse->next = -1;
			XPostQuitMessage(&gSimPBBrowse->wnd);
		break;
	case KEY_UP:
	case KEY_DOWN:
		XListBoxKeyHandle(&gSimPBBrowse->list, keyID);
		gSimPBBrowse->select = XListBoxGetSelect(&gSimPBBrowse->list);
		break;
	default:
		break;
	}
}



static int pbSimBrowseProc(XMSG *msg)
{
	int		num;
	BYTE	*buf;
	
	switch (msg->message) {
	case MSG_PAINT:
		EraseRect(&msg->comp->rc);
		break;

	case MSG_WAITOUT:
	case MSG_KEYDOWN:
		num = XInputMsgHandle(gSimPBBrowse->keyb, msg);
		if (num == 1) {
			buf = XInputGetInput(gSimPBBrowse->keyb);
			if (gSimPBBrowse->keyLen < SIMMAX_PHONENum_LEN-1) {
				gSimPBBrowse->keyWord[gSimPBBrowse->keyLen++] = buf[0];
				gSimPBBrowse->keyWord[gSimPBBrowse->keyLen] = 0;
				if (0 == SimSearchPhoneCard()) {
					gSimPBBrowse->keyLen--;
					gSimPBBrowse->keyWord[gSimPBBrowse->keyLen] = 0;
					SimSearchPhoneCard();
				}
				ShowSimKeyword();
				XListBoxSet(&gSimPBBrowse->list, gSimPBBrowse->sum, HZ_MAIN, OnDrawSimCardItem);
				gSimPBBrowse->select = XListBoxSetCurrent(&gSimPBBrowse->list, gSimPBBrowse->select);
				XShowComponent(&gSimPBBrowse->list.comp);
				v_WriteLcdBuff();
			}
		}
		else if (num == 0) {
			OnBrowseSimKeyDown(msg->param1);
		}
		else {
			v_WriteLcdBuff();
		}
		break;
	default:
		XDefaultWindowProc(msg);
		break;
	}
	return 0;
}

static int OnMenuSimNewCard(menu_t *pMenu)
{
	int		inStat;
	phone_book_t 	nCard;

	if (phoneBookSize == phoneBookRead) {
		XTipWndShow(TranslateChar("空间已满"),1);//yu XMessageBox(NULL, TranslateChar("空间已满"), ID_OK);
		XShowComponent(&gSimPBBrowse->wnd.comp);
		v_WriteLcdBuff();
		return -1;
	}
	memset(&nCard, 0, sizeof(phone_book_t));

	nCard.index=-1;//由模块决定存储位置
	inStat = inputSimFullCard(&nCard);

	if (0 == inStat) 
		{
		SetHandleKey(0);		/* 禁止按键 */ 
		if(0==PHBOOK_WriteOne(&nCard))//PB_WriteOne(NEW_CARD, &nCard);
			{
				XTipWndShow(TranslateChar("正在操作..."),0);//
				if(0==ReReadSim())//重新加载电话本
				XTipWndShow(TranslateChar("保存成功"),1);//"设置成功"
				
			}
		else
			{
				XTipWndShow(TranslateChar("保存失败"),1);
			}
		gSimPBBrowse->next = 2;
		gSimPBBrowse->select = gSimPBBrowse->sum;
		XPostQuitMessage(&gSimPBBrowse->wnd);
		SetHandleKey(1);		/* 允许按键 */ 
	}
	else {
		XTipWndShow(TranslateChar("保存失败"),1);
		XShowComponent(&gSimPBBrowse->wnd.comp);
		v_WriteLcdBuff();
	}
	return 0;
}


static int OnMenuSimDeleteOne(menu_t *pMenu)
{
	if (0 == gSimPBBrowse->sum)
		return -1;

	if (XMessageBox(NULL, TranslateChar("删除电话本?"), ID_OK) == ID_OK) 
		{
		SetHandleKey(0);		/* 禁止按键 */ 
		if(0==PHBOOK_DeleteOne(SIM_BOOK[gSimPBBrowse->select].index)) //	PB_DeleteOne(gSimPBBrowse->card[gSimPBBrowse->select]);
			{
				XTipWndShow(TranslateChar("正在操作..."),0);//
				if(0==ReReadSim())//重新加载电话本
					XTipWndShow(TranslateChar("删除成功"),1);//"设置成功"
				
			}
		gSimPBBrowse->next = 2;
		XPostQuitMessage(&gSimPBBrowse->wnd);
		SetHandleKey(1);		/* 允许按键 */ 
	}
	return 0;
}
static int  PHBOOK_DeleteAll(int Max)
{int index;
	int ret=0;
	for (index=0;index<Max;index++)
		{
		ret+=PHBOOK_DeleteOne(index);
		Waiting(100);
		}
	return ret;
}


static int OnMenuSimDeleteAll(menu_t *pMenu)
{
	if (0 == gSimPBBrowse->sum)
		return -1;

	if (XMessageBox(NULL, TranslateChar("删除全部?"), ID_OK) == ID_OK) 
		{
		SetHandleKey(0);		/* 禁止按键 */ 
		XTipWndShow(TranslateChar("正在删除..."),0);//"设置成功"
		PHBOOK_DeleteAll(phoneBookSize);
		ReReadSim();//重新加载电话本
		XTipWndShow(TranslateChar("删除成功"),1);//"设置成功"
		gSimPBBrowse->next = 2;
		XPostQuitMessage(&gSimPBBrowse->wnd);
		SetHandleKey(1);		/* 允许按键 */ 
	}
	return 0;
}

static WORD sPB_GetIndex(BYTE grp, WORD *index)
{
	WORD	i, cnt;
	
	cnt = 0;
	for (i = 0; i < phoneBookRead; ++i) {
		index[cnt++] = i;
	}
	return cnt;
}
int PB_Sim_Browse(void *argv)
{
	rect	area;
	XMSG	msg;
	//BYTE	i;
	int		ret;
//-------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -