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

📄 outuse.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
字号:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <asixwin.h>
#include <asixapp.h>
#include <ppsm.h>
#include <sys\cdevice.h>
#include <asixwin\disp.h>
#include <asixwin\bitmap.h>
#include <asixwin\asix_lb.h>
#include <asixwin\asix_ed.h>
#include <asixwin\asix_sb.h>

#include <asixwin\bitmap.h>


#include "phbook.h"
#include "Phdatabs.h"
#include <database\carddb.h>


extern  STATUS GetSearchID(P_S8 tmpbuf,SearchStyle style,P_U16 len,U32   *id);
extern  PHONEBOOK * LoadRelationData(RelationShip relation,U16 *len);
extern  STATUS  LoadRecord(PHONEBOOK **showdisplist,U32 * id,U16 len);
extern  STATUS  DelRecord(PHONEBOOK *thisptr);
extern  STATUS SaveSourceToDB(PHONEBOOK *thisptr);
extern STATUS AddRecordToDB(PHONEBOOK *thisptr);
extern  STATUS CompareModAndSrc(PHONEBOOK *thisptr,P_S8 *recordinf,U8 ctel,U8 cmob,U8 cbp,P_U8 ismodfptr);
extern  STATUS SaveModfToSrc(PHONEBOOK *thisptr,P_S8 * recordinf,U8 ctel,U8 cmob,U8 cbp);


extern  STATUS  EditDetailNote(PHONEBOOK * thisptr, AccessStyle  mode ,U8 PhStyle, PHONE * num ,U8 *wintext,SaveMode savemode,U32 hGC);
extern PHONEBOOK * LoadSearchData(P_S8 string,U16 *len);

extern P_S8 PhoneBookProcess(AccessStyle accesstyle,PHONEBOOK *getitem);



extern DBLACB	*cardlacb;   //定义一个数据库控制块的变量



//如果返回的是NULL,表示没有数据输入,即没有选择电话
P_S8  GetCallFromPhbook()
{
	P_S8	findcall = NULL;
	findcall = PhoneBookProcess(ExterAccess,NULL);
	return findcall;
}




STATUS	SelectSavePerson(U32 hGC,SavePersonSty *personsel)
{
	SavePersonSty selectp;
	MSG 	msg;
      U32        seltypewin,lbox,bt1,bt2,st;
      U8          quit = 0;
	P_S8	inform1 = "请选择是新建联系人或者添加号码到已有联系人:";
	struct LBOX_ITEM	lboxitem[] =
	{
       	ICON_ENABLE,	UNDERLINE,	"新建联系人",
		ICON_ENABLE,	UNDERLINE,	"保存至已有联系人",
		ICON_END,	UNDERLINE,	NULL
	};

      

 	seltypewin = CreateWindow(WNDCLASS_WIN,			
							"提示信息",			
							WS_OVERLAPPEDWINDOW,	
							0,0,					
							PHY_LCD_W,PHY_LCD_H,	
							0,						
							0,						
							NULL);					
      
	bt1 = CreateWindow( WNDCLASS_BUTTON,
						"确定",
						WS_CHILD|BS_REGULAR,
						35,130,
						30,
						20,
						seltypewin,
						0,
						NULL);
	bt2 = CreateWindow( WNDCLASS_BUTTON,
						"取消",
						WS_CHILD|BS_REGULAR,
						80,130,
						30,
						20,
						seltypewin,
						0,
						NULL);
	st = CreateWindow(WNDCLASS_STATIC,   //提示信息
		                        inform1, 
		                        WS_CHILD|SS_TEXT,
		                        35,36,
		                        100,
		                        62,
		                        seltypewin,
		                        0,
		                        NULL);
	 lbox = CreateWindow( WNDCLASS_LIST,
     	                                "ListBox",
     	                                WS_CHILD|LBS_POPUP,
     	                                40,86,
     	                                110,
     	                                16,
     	                                seltypewin,
     	                                0,
     	                                lboxitem);
       hGC = GetGC();
       EnableWindow(bt1, FALSE);

	while(!quit)
	{
		ASIXGetMessage(&msg, NULL, 0, 0);
		switch(msg.message)
		{
                   case WM_COMMAND:
				if ( msg.lparam == bt1 )
				{
                            *personsel = selectp;
                            quit = 1;
				} else
				if( msg.lparam == bt2 )
				{
				   *personsel = SelExitChoose;
				   quit = 1;
				}
                          break;
                   case WM_LISTBOX:
                  	        switch(msg.wparam)
                  	        {
                  	              case 0:selectp = SelNew;
                  	              	      break;
                  	              case 1:selectp = SelSavedPerson;
                  	              	      break;
                  	              default:break;
                  	        }
                  	        EnableWindow(bt1, TRUE);
                  	        break;

			case WM_QUIT:
				quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}

	DestroyWindow( seltypewin );


 }





STATUS SelectSaveType(U32 hGC,PhoneStyle * select)
{
	MSG 	msg;
      U32        seltypewin,lbox,bt1,bt2,st;
      U8          quit = 0;
      PhoneStyle   tmpselect;
	P_S8	inform1 = "请选择需要保存号码的类型:";
	

	
	struct LBOX_ITEM	lboxitem[] =
	{
       	ICON_ENABLE,	UNDERLINE,	"固话",
		ICON_ENABLE,	UNDERLINE,	"手机",
		ICON_ENABLE,	UNDERLINE,	"寻呼",
		ICON_END,	UNDERLINE,	NULL
	};

      

 	seltypewin = CreateWindow(WNDCLASS_WIN,			
							"提示信息",			
							WS_OVERLAPPEDWINDOW,	
							0,0,					
							PHY_LCD_W,PHY_LCD_H,	
							0,						
							0,						
							NULL);					
      
	bt1 = CreateWindow( WNDCLASS_BUTTON,
						"确定",
						WS_CHILD|BS_REGULAR,
						35,100,
						30,
						20,
						seltypewin,
						0,
						NULL);
	bt2 = CreateWindow( WNDCLASS_BUTTON,
						"取消",
						WS_CHILD|BS_REGULAR,
						80,100,
						30,
						20,
						seltypewin,
						0,
						NULL);
	st = CreateWindow(WNDCLASS_STATIC,   //提示信息
		                        inform1, 
		                        WS_CHILD|SS_TEXT,
		                        35,36,
		                        100,
		                        22,
		                        seltypewin,
		                        0,
		                        NULL);
	 lbox = CreateWindow( WNDCLASS_LIST,
     	                                "ListBox",
     	                                WS_CHILD|LBS_POPUP,
     	                                40,66,
     	                                100,
     	                                16,
     	                                seltypewin,
     	                                0,
     	                                lboxitem);
       hGC = GetGC();
       EnableWindow(bt1, FALSE);

	while(!quit)
	{
		ASIXGetMessage(&msg, NULL, 0, 0);
		switch(msg.message)
		{
                   case WM_COMMAND:
				if ( msg.lparam == bt1 )
				{
                            *select = tmpselect;
                            quit = 1;
				} else
				if( msg.lparam == bt2 )
				{
				   *select = NoSty;
				   quit = 1;
				}
                          break;
                   case WM_LISTBOX:
                  	        switch(msg.wparam)
                  	        {
                  	              case 0:tmpselect = TelePhone;
                  	              	      break;
                  	              case 1:tmpselect = Mobile;
                  	              	      break;
                  	              case 2:tmpselect = BP;
                  	              	      break;
                  	              default:break;
                  	        }
                  	        EnableWindow(bt1, TRUE);
                  	        break;

			case WM_QUIT:
				quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}

	DestroyWindow( seltypewin );


 }



       
      


//要求输入的数据不为空
//如果返回的是NULL,表示保存失败
//考虑,选择保存可以有新建,和保存到已经有的人名中
//issaveok 表示保存的状态,有可能在保存过程中用户会退出保存
//issaveok = saveok表示保存成功,否则,表示保存失败
SaveSts  SaveCallIntoPhbook(P_S8	callstr,U32 hGC)
{
	SaveSts  issaveok = SaveCancel;
	PHONEBOOK  newrecord;
	PHONEBOOK *newptr;
	U8 len;
	U32  databst;
	PhoneStyle  select = TelePhone;
	SavePersonSty personsel = SelNew;
	U8  namebuf[100];
	RelationShip  rela = Others;
	U8  savetodbst = 0;
	P_S8  str1 = "输入项目已满,请重新选择!";  
	if(callstr == NULL)//先判断输入的数据的正确与否
	{
		issaveok = SaveCancel;
		return ASIX_ERROR;
	}
	//选择保存是新建还是添加到已经有的联系人
	


	

	newptr = &newrecord;   //新建一个记录
  	memset(newptr,0x0,sizeof(PHONEBOOK));
  	NewRecordInf(newptr);//指针赋值到缓冲区
  	 
  	 len = strlen(callstr)+1;
	//选择添加入新的联系人OR新建联系人
	SelectSavePerson(hGC,&personsel);
	
	switch(personsel)
	{
		case SelNew:break;
		case SelSavedPerson:
			PhoneBookProcess(SearchAccess,newptr);//需要考虑如果没有选择XXXXX
			break;
		case SelExitChoose:   //用户在选择过程中不需要保存信息
			issaveok = SaveCancel;
  	 		goto   goout;
			break;
		default:break;
	}
	//在上面PhoneBookProcess是建立了数据库

  	 //选择保存的数据类型
  	 reselect:
	 SelectSaveType(hGC,&select);
  	 
  	 if(personsel ==SelNew)
  	 {
	  	 switch(select)
	  	 {
	  	 	case NoSty://在选择框中,用户点击了退出,则表示不保存了
	  	 		issaveok = SaveCancel;
	  	 		goto   goout;
	  	 		break;
	  	 	case TelePhone:
	  	 		memcpy(newptr->telbuf[0],callstr,len);  //复制电话到缓冲区
	  	 		break;
	  	 	case Mobile:
	  	 		memcpy(newptr->mobbuf[0],callstr,len);  //复制电话到缓冲区
	  	 		break;
	  	 	case BP:
	  	 		memcpy(newptr->bpbuf[0],callstr,len);  //复制电话到缓冲区
	  	 		break;
	  	 	default:
	  	 		break;
	  	 }
	  	 
//	 	CreateDataBase(CARD_DATA_BASE);		//创建数据库
  		cardlacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
	  	savetodbst = EditDetailNote(newptr, InterAccess,NoSty, NULL,"新建电话本记录",SaveInNew,hGC);
	  

		databst = DetachDataBase(cardlacb);//断开数据库
	   	
  	 }

  	 if(personsel ==SelSavedPerson)
  	 {
	  	 switch(select)
	  	 {
	  	 	case NoSty://在选择框中,用户点击了退出,则表示不保存了
	  	 		issaveok = SaveCancel;
	  	 		goto   goout;
	  	 		break;
	  	 	case TelePhone:
	  	 		if(*(newptr->tel[MAXTELNUM-1])!=NULL)  //如果是选择的类型已经满了
	  	 		{
	  	 			MessageBox(NULL, str1,"提醒", MB_OK);
	  	 			goto  reselect;
	  	 		}
	  	 		//memcpy(newptr->telbuf[0],callstr,len);  //复制电话到缓冲区
	  	 		if(*(newptr->tel[0]) == NULL)
	  	 		{
	  	 			memcpy(newptr->tel[0],callstr,len);
	  	 		}else
	  	 		if(*(newptr->tel[1]) == NULL)
	  	 		{
	  	 			memcpy(newptr->tel[1],callstr,len);
	  	 		}else
	  	 		if(*(newptr->tel[2]) == NULL)
	  	 		{
	  	 			memcpy(newptr->tel[2],callstr,len);
	  	 		}else
	  	 		if(*(newptr->tel[3]) == NULL)
	  	 		{
	  	 			memcpy(newptr->tel[3],callstr,len);
	  	 		}
	  	 		break;
	  	 	case Mobile:
	  	 		if(*(newptr->mobile[MAXMOBNUM-1])!=NULL)  //如果是选择的类型已经满了
	  	 		{
	  	 			MessageBox(NULL, str1,"提醒", MB_OK);
	  	 			goto  reselect;
	  	 		}
	  	 		if(*(newptr->mobile[0]) == NULL)
	  	 		{
	  	 			memcpy(newptr->mobile[0],callstr,len);
	  	 		}else
	  	 		if(*(newptr->mobile[1]) == NULL)
	  	 		{
	  	 			memcpy(newptr->mobile[1],callstr,len);
	  	 		}else
	  	 		if(*(newptr->mobile[2]) == NULL)
	  	 		{
	  	 			memcpy(newptr->mobile[2],callstr,len);
	  	 		}else
	  	 		if(*(newptr->mobile[3]) == NULL)
	  	 		{
	  	 			memcpy(newptr->mobile[3],callstr,len);
	  	 		}
	  	 		break;
	  	 	case BP:
	  	 		if(*(newptr->bp[MAXBPNUM-1])!=NULL)  //如果是选择的类型已经满了
	  	 		{
	  	 			MessageBox(NULL, str1,"提醒", MB_OK);
	  	 			goto  reselect;
	  	 		}
	  	 		if(*(newptr->bp[0]) == NULL)
	  	 		{
	  	 			memcpy(newptr->bp[0],callstr,len);
	  	 		}else
	  	 		if(*(newptr->bp[1]) == NULL)
	  	 		{
	  	 			memcpy(newptr->bp[1],callstr,len);
	  	 		}
	  	 		break;
	  	 	default:
	  	 		break;
	  	 }
	 	 
	   	//savetodbst = EditDetailNote(newptr, InterAccess,NoSty, NULL,"新建电话本记录",SaveInNew,hGC);
//		CreateDataBase(CARD_DATA_BASE);		//创建数据库
  		cardlacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
  		AddRecordToDB(newptr,SaveInEdit);
  		//连接数据库//是编辑
  		savetodbst = 1;
		databst = DetachDataBase(cardlacb);//断开数据库
	   	
  	 }
  	 

  	 
   	 //如果没有存入数据库,则告诉上层
   	 if(savetodbst  == 1)
   	 {
   	 	issaveok = SaveOk;
   	 }else{
   	 	issaveok = SaveCancel;
   	 }
   	 

   	 goout:
	//databst = DetachDataBase(cardlacb);//断开数据库
	return issaveok;


}











//返回值如果是null,表示没有找到需要的姓名
//字符串比较,可以考虑字符串的过滤XXXXXXXXX
STATUS FindNameFromPhbook(P_S8	callstr,P_S8 outname)
{
	PHONEBOOK * loadlist;
	PHONEBOOK *pointer;
	U16  len;
	U16  count;
	U8    i,j;
	U8    findcall = 0;
	P_S8	getname = NULL;
	U8 	compare = 1;
	U32	databst;
	U8 slen=0;
	
	if(callstr == NULL)//判断输入的数据
	{
		return ASIX_ERROR;
	}
//  	CreateDataBase(CARD_DATA_BASE);		//创建数据库
  	cardlacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
   	loadlist =  LoadRelationData(AllRelation,&len);//生成链表
   	databst = DetachDataBase(cardlacb);//断开数据库,只要获得数据链表,就可以断开数据库

   	if(len == 0)//判断是否导入的链表为空
   	{
   		return NULL;
   	}
   	pointer = loadlist;
	while(pointer !=NULL)//遍历数据链表
	{
		for(i = 0;i<MAXTELNUM;i++)
		{
			compare = strcmp(callstr,pointer->tel[i]);
			if(compare == 0)
			{
				findcall = 1;
			}
		}
		for(i=0;i<MAXMOBNUM;i++)
		{
			compare = strcmp(callstr,pointer->mobile[i]);
			if(compare == 0)
			{
				findcall = 1;
			}
		}
		for(i=0;i<MAXBPNUM;i++)
		{
			compare = strcmp(callstr,pointer->bp[i]);
			if(compare == 0)
			{
				findcall = 1;
			}
		}
		if(findcall == 1)
		{
			getname = pointer->name;
			if(getname == NULL)
			{
				return ASIX_ERROR;
			}
			slen = strlen(getname)+1;
			memcpy(outname,getname,slen);
			return ASIX_OK;
		}
		pointer = pointer->next;
	}
	return NULL;  //表示没有查询到数据
}


⌨️ 快捷键说明

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