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

📄 ntpadop.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <stdio.h>
#include <string.h> 

#include <asixwin.h>
#include <asixapp.h>

#include <asixwin\select.h>
#include <asixwin\asix_ed.h>
#include <asixwin\asix_tb.h>

#include "notepad.h"
#include <database\ntpaddb.h>

#include <resource\sysicon.h>

void GetNoteList(PROPERTY **nowlist, S16 listnum, LOCALSEARCHLIST *searchlist)
{
	S16		i; 
	U16		parentoffset; 
	U16		idoffset; 
	U16		nameoffset; 
	U16		timeoffset; 
	U16		sizeoffset; 
	U16		contentoffset; 

	char	*newdata; 

	if(searchlist->head == NULL)
	{
		*nowlist = NULL; 
		return; 
	}

	for(i = 0; i < listnum; i++)
	{
		if((nowlist[i] = (PROPERTY *)Lmalloc(sizeof(PROPERTY))) == NULL) 
		{
//			MessageBox(0, "读入历史纪录错误!", "提醒", MB_ICONEXCLAMATION|MB_OK); 
			return; 
		}
	}

	for(i = 0; i < listnum; i++)
	{
		newdata = (char *)(searchlist->head[i].data + 12);			//指针跳过头信息
		ByteReversal(&parentoffset, newdata); 				//时间记录在data中的偏移量
//		if(parentoffset == 0)
//			nowlist[i]->parent = newdata; 
//		else
			nowlist[i]->parent = (newdata + parentoffset); 
		ByteReversal(&idoffset, newdata + 2); 				//姓名记录在data中的偏移量
//		if(idoffset == 0)
//			nowlist[i]->id = newdata + 2; 
//		else
			nowlist[i]->id = (newdata + idoffset); 
		ByteReversal(&nameoffset, newdata + 4); 			//号码记录在data中的偏移量
		nowlist[i]->name = (newdata + nameoffset); 
		ByteReversal(&timeoffset, newdata + 6); 			//类型记录在data中的偏移量
		nowlist[i]->time = (newdata + timeoffset); 
		if(*(nowlist[i]->id) != 0)
		{
			nowlist[i]->size = NULL; 
			nowlist[i]->content = NULL; 
		}
		else
		{
			ByteReversal(&sizeoffset, newdata + 8); 
			nowlist[i]->size = (newdata + sizeoffset); 
			ByteReversal(&contentoffset, newdata + 10); 
			nowlist[i]->content = (newdata + contentoffset); 
		}
		nowlist[i]->index = searchlist->head[i].index; 
	}
	return; 
}


void PropertyDisp(PROPERTY *nowitem)
{
	//窗口和空间ID
	U32		mainwin; 
	U32		nametip; 
	U32		namedisp; 
	U32		sizetip; 
	U32		sizedisp; 
	U32		dirnumtip; 
	U32		dirnumdisp; 
	U32		filenumtip; 
	U32		filenumdisp; 
	U32		timetip; 
	U32		timedisp; 
	U32		pathtip; 
	U32		pathdisp; 
	U32		ok; 

	//函数操作变量
	char	temp[40]; 
	LOCALSEARCHLIST		*searchlist; 
	DBLACB	*lacb; 
	S16		i; 
	S16		dirnum; 
	S16		filenum; 
	U16		offsettemp; 
	char	currentid[5]; 
	MSG		msg; 
	S16		quit = 0; 
	PROPERTY	*childlist[MAX_DIR_NUM]; 

	memset(temp, 0x0, 40*sizeof(char)); 
	lacb = LinkDataBase(NOTEPAD_DATA_BASE); 
	if(*(nowitem->id) == 0)
	{
		mainwin = CreateWindow(WNDCLASS_WIN, "文件 属性", WS_POPUP|WS_CAPTION|WS_THICKFRAME, 10, 50, 140, 155, 0, 0, NULL); 
		nametip = CreateWindow(WNDCLASS_STATIC, "文件名", WS_CHILD|SS_TEXT, 15, 80, 50, 16, mainwin, 0, NULL); 
		namedisp = CreateWindow(WNDCLASS_STATIC, nowitem->name, WS_CHILD|SS_TEXT, 65, 80, 80, 16, mainwin, 0, NULL); 
		sizetip = CreateWindow(WNDCLASS_STATIC, "大小", WS_CHILD|SS_TEXT, 15, 98, 50, 16, mainwin, 0, NULL); 
		strcpy(temp, nowitem->size); 
		strcat(temp, "字节"); 
		sizedisp = CreateWindow(WNDCLASS_STATIC, temp, WS_CHILD|SS_TEXT, 65, 98, 80, 16, mainwin, 0, NULL); 
		timetip = CreateWindow(WNDCLASS_STATIC, "修改时间", WS_CHILD|SS_TEXT, 15, 116, 50, 16, mainwin, 0, NULL); 
		memset(temp, 0x0, 40*sizeof(char)); 
		strncpy(temp, nowitem->time, 4); 
		*(temp + 4) = '\0'; 
		strcat(temp, "-"); 
		strncat(temp, (nowitem->time + 4), 2); 
		*(temp + 7) = '\0'; 
		strcat(temp, "-"); 
		strncat(temp, (nowitem->time + 6), 2); 
		*(temp + 10) = '\0'; 
		timedisp = CreateWindow(WNDCLASS_STATIC, temp, WS_CHILD|SS_TEXT, 65, 116, 80, 16, mainwin, 0, NULL); 
		//获得完整路径并显示
		pathtip = CreateWindow(WNDCLASS_STATIC, "位置", WS_CHILD|SS_TEXT, 15, 134, 50, 16, mainwin, 0, NULL); 
		
		strcpy(currentid, nowitem->parent); 
		searchlist = LocalFindRecord(lacb, NOTEPAD_ID_FIELD, currentid, 0); 
		memset(temp, 0x00, 40); 

		if(searchlist->num == 0)
			strcat(temp, "\\"); 
		else
			for(i = 0; i < searchlist->num; i++)
			{
				strcat(temp, "\\"); 
				ByteReversal(&offsettemp, searchlist->head[i].data + 16); 
				strcat(temp, ((searchlist->head[i].data + 12) + offsettemp)); 
			}
//		strcat(temp, "\\"); 
//		strcat(temp, nowitem->name); 
		pathdisp = CreateWindow(WNDCLASS_STATIC, temp, WS_CHILD|SS_TEXT|SS_LEFT|SS_MULTILINE, 65, 134, 80, 36, mainwin, 0, NULL);
		ok = CreateWindow(WNDCLASS_BUTTON, "确定", WS_CHILD|BS_REGULAR, 60, 180, 40, 20, mainwin, 0, NULL); 
	}
	else
	{
		strcpy(currentid, nowitem->parent); 
		strcat(currentid, nowitem->id); 
		searchlist = LocalSortRecord(lacb, NOTEPAD_NAME_FIELD, currentid, PRECISE_PART_MATCH); 
		GetNoteList(childlist, searchlist->num, searchlist);		//解析数据
		
		for(i = 0; i < searchlist->num; i++)
		{
			if(*(childlist[i]->id) == 0)			//当项目类型为文件时,跳出
			break; 
		}
		dirnum = i;					//得出目录的个数
		filenum = searchlist->num - dirnum;			//剩下的时文件个数

		mainwin = CreateWindow(WNDCLASS_WIN, "目录 属性", WS_POPUP|WS_CAPTION|WS_THICKFRAME, 5, 50, 150, 165, 0, 0, NULL); 

		nametip = CreateWindow(WNDCLASS_STATIC, "目录名", WS_CHILD|SS_TEXT, 15, 80, 50, 16, mainwin, 0, NULL); 
		namedisp = CreateWindow(WNDCLASS_STATIC, nowitem->name, WS_CHILD|SS_TEXT, 65, 80, 80, 16, mainwin, 0, NULL); 

		dirnumtip = CreateWindow(WNDCLASS_STATIC, "目录数", WS_CHILD|SS_TEXT, 15, 98, 50, 16, mainwin, 0, NULL); 
		sprintf(temp, "%u", dirnum); 
		dirnumdisp = CreateWindow(WNDCLASS_STATIC, temp, WS_CHILD|SS_TEXT, 65, 98, 80, 16, mainwin, 0, NULL); 

		filenumtip = CreateWindow(WNDCLASS_STATIC, "文件数", WS_CHILD|SS_TEXT, 15, 116, 50, 16, mainwin, 0, NULL); 
		memset(temp, 0x00, 40); 
		sprintf(temp, "%u", filenum); 
		filenumdisp = CreateWindow(WNDCLASS_STATIC, temp, WS_CHILD|SS_TEXT, 65, 116, 80, 16, mainwin, 0, NULL); 

		timetip = CreateWindow(WNDCLASS_STATIC, "修改时间", WS_CHILD|SS_TEXT, 15, 134, 50, 16, mainwin, 0, NULL); 
		memset(temp, 0x00, 40); 
		strncpy(temp, nowitem->time, 4); 
		*(temp + 4) = '\0'; 
		strcat(temp, "-"); 
		strncat(temp, (nowitem->time + 4), 2); 
		*(temp + 7) = '\0'; 
		strcat(temp, "-"); 
		strncat(temp, (nowitem->time + 6), 2); 
		*(temp + 10) = '\0'; 
		timedisp = CreateWindow(WNDCLASS_STATIC, temp, WS_CHILD|SS_TEXT, 65, 134, 80, 16, mainwin, 0, NULL); 

		//获得完整路径并显示
		pathtip = CreateWindow(WNDCLASS_STATIC, "位置", WS_CHILD|SS_TEXT, 15, 152, 50, 16, mainwin, 0, NULL); 

		for(i = 0; i < searchlist->num; i++)
		{
			Lfree(childlist[i]); 
		}
		strcpy(currentid, nowitem->parent); 
		DelOldSearchList(searchlist); 
		searchlist = LocalFindRecord(lacb, NOTEPAD_ID_FIELD, currentid, 0); 
		memset(temp, 0x00, 40); 

		if(searchlist->num == 0)
			strcat(temp, "\\"); 
		else
			for(i = 0; i < searchlist->num; i++)
			{
				strcat(temp, "\\"); 
				ByteReversal(&offsettemp, searchlist->head[i].data + 16); 
				strcat(temp, ((searchlist->head[i].data + 12) + offsettemp)); 
			}
		
		pathdisp = CreateWindow(WNDCLASS_STATIC, temp, WS_CHILD|SS_TEXT|SS_LEFT|SS_MULTILINE, 65, 152, 80, 36, mainwin, 0, NULL); 
		ok = CreateWindow(WNDCLASS_BUTTON, "确定", WS_CHILD|BS_REGULAR, 60, 190, 40, 20, mainwin, 0, NULL); 
	}
	DelOldSearchList(searchlist); 
	DetachDataBase( lacb ); 

	while(!quit)
	{
		ASIXGetMessage(&msg, NULL, 0, 0); 
		switch(msg.message)
		{
			case WM_COMMAND:
				if(msg.lparam == ok)
					quit = 1; 
				break; 

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


void AddDirFile(PROPERTY *newitem)
{
//	WORD		year, day, month, hour, minute, second; 		//时间参数
//	char		name[NAME_SIZE + 1]; 
	char		*data;  
	S16			datalen; 
	S16			parentlen; 
	S16			idlen; 
	S16			namelen; 
	S16			timelen; 
	S16			sizelen; 
	S16			contentlen; 
	U16			parentoffset; 
	U16			idoffset; 
	U16			nameoffset; 
	U16			timeoffset; 
	U16			sizeoffset; 
	U16			contentoffset; 
	char		timetemp[TIME_SIZE + 1]; 
	char		temp[TIME_SIZE + 1]; 
	DBLACB		*lacb; 

	lacb = LinkDataBase(NOTEPAD_DATA_BASE); 

	memset(temp, 0x00, TIME_SIZE + 1);
	memset(timetemp, 0x00, TIME_SIZE + 1);
	parentlen = (S16)strlen(newitem->parent); 
	idlen = (S16)strlen(newitem->id); 
	namelen = (S16)strlen(newitem->name); 
	timelen = TIME_SIZE; 

	{
		ASIX_DATE	date;
		ASIX_TIME	time;

		ReadDateTime(&date, &time); 		//获取系统时间
		sprintf(temp, "%u", date.year); 
		strcpy(timetemp, temp); 
		if(date.month < 10)
		{
			strcat(timetemp, "0");
		}
		sprintf(temp, "%u", date.month); 
		strcat(timetemp, temp); 
		if(date.day < 10)
		{
			strcat(timetemp, "0"); 
		}
		sprintf(temp, "%u", date.day); 
		strcat(timetemp, temp); 
		if(time.hour < 10)
		{
			strcat(timetemp, "0"); 
		}
		sprintf(temp, "%u", time.hour); 
		strcat(timetemp, temp); 
		if(time.minute < 10)
		{
			strcat(timetemp, "0"); 
		}
		sprintf(temp, "%u", time.minute); 
		strcat(timetemp, temp); 
		if(time.second < 10)
		{
			strcat(timetemp, "0"); 
		}
		sprintf(temp, "%u", time.second); 
		strcat(timetemp, temp); 
	}
	
	//各项偏移
//	if(strlen(newitem->parent) == 0)
//	{
//		parentoffset = 0; 
//		parentlen = 0; 
//	}
//	else
//	{
		parentoffset = 6*2; 
		parentlen = (S16)strlen(newitem->parent) + 1; 
//	}
//	if(*(newitem->id) == 0)
//	{
//		idoffset = 0; 
//		idlen = 0; 
//	}
//	else
//	{
		idoffset = 6*2 + parentlen; 
		idlen = (S16)strlen(newitem->id) + 1; 
//	}
	nameoffset = 6*2 + parentlen + idlen; 
	timeoffset = 6*2 + parentlen + idlen + namelen + 1; 

	if(*(newitem->id) == 0)			//是文件类型
	{
		sizelen = (S16)strlen(newitem->size); 
		contentlen = (S16)strlen(newitem->content); 
		sizeoffset = 6*2 + parentlen + idlen + namelen + 1 + timelen + 1; 
		contentoffset = 6*2 + parentlen + idlen + namelen + 1 + timelen + 1 + sizelen + 1; 
		datalen = 6*2 + parentlen + idlen + namelen + 1 + timelen + 1 + sizelen + 1 + contentlen + 1; 
		if((data = (char *)Lmalloc(datalen)) == NULL)
//			if(MessageBox(0, "保存失败!", "提醒", MB_ICONEXCLAMATION|MB_OK) == IDOK)
				return; 

		//填data内容
		Word2Bytes(data, parentoffset); 
		Word2Bytes(data + 2, idoffset); 
		Word2Bytes(data + 4, nameoffset); 
		Word2Bytes(data + 6, timeoffset); 
		Word2Bytes(data + 8, sizeoffset); 
		Word2Bytes(data + 10, contentoffset); 
		
//		if(strlen(newitem->parent) != 0)
			strcpy((data + parentoffset), newitem->parent); 
//		if(*(newitem->id) != 0)
			strcpy((data + idoffset), newitem->id); 
		strcpy((data + nameoffset), newitem->name); 
		strcpy((data + timeoffset), timetemp); 
		strcpy((data + sizeoffset), newitem->size); 
		strcpy((data + contentoffset), newitem->content); 
	}
	else				//是目录类型
	{
		 datalen = 6*sizeof(U16) + parentlen + 1 + idlen + 1 + namelen + 1 + timelen + 1; 
		if((data = (char *)Lmalloc(datalen)) == NULL)
//			if(MessageBox(0, "保存失败!", "提醒", MB_ICONEXCLAMATION|MB_OK) == IDOK)
				return; 

		 //填data内容
		Word2Bytes(data, parentoffset); 
		Word2Bytes(data + 2, idoffset); 
		Word2Bytes(data + 4, nameoffset); 
		Word2Bytes(data + 6, timeoffset); 

//		if(strlen(newitem->parent) != 0)
			strcpy((data + parentoffset), newitem->parent); 
//		if(*(newitem->id) != 0)
			strcpy((data + idoffset), newitem->id); 
		strcpy((data + nameoffset), newitem->name); 
		strcpy((data + timeoffset), timetemp); 
	}
	if(newitem->index == 0)				//当目录/文件不存在时,添加目录/文件,否则修改目录/文件
		LocalAddRecord(lacb, data, datalen); 
	else
		LocalModifyRecord(lacb, newitem->index, data, datalen); 
	Lfree(data); 
	DetachDataBase( lacb ); 
	return; 
}

LOCALSEARCHLIST *SearchTime(void)
{
	//窗口和控件ID
	U32		mainwin; 
	U32		range;				//时间范围选择框	
	U32		ok;					//确定按钮
	U32		cancel;				//取消按钮
	U32		tskbar;				//底部任务栏

	//函数用参数
	MSG		msg; 
	S16		quit = 0; 
	U8		timerange[2]; 
	LOCALSEARCHLIST		*searchlist; 
	DBLACB	*lacb; 
//	WORD	year, day, month, hour, minute, second; 		//时间参数
	char	timetemp[TIME_SIZE + 2]; 
	char	temp[TIME_SIZE + 2]; 

	//初始化参数
	SL_ITEM	 item[] =
	{
		SL_UNCHECKED,	"一天内",
		SL_UNCHECKED,	"一周内",
		SL_UNCHECKED,	"一月内",
		SL_UNCHECKED,	"一年内", 
		0,	NULL,
	}; 
	
	memset(timetemp, 0x00, (TIME_SIZE + 2)); 
	memset(temp, 0x00, (TIME_SIZE + 2)); 
	*timerange =  0xff; 
	*(timerange + 1) = '\0'; 

	//窗口创建
	mainwin = CreateWindow(WNDCLASS_WIN, "按时间查找", WS_OVERLAPPEDWINDOW, 0, 0, PHY_LCD_W, PHY_LCD_H, 0, 0, NULL); 
	range = CreateWindow(WNDCLASS_SELECT, "时间", WS_CHILD|SLS_ENABLE|SLS_FRAME|SLS_RADIOBOX, (LCD_WIDTH - 140)/2, 23, 140, 160, mainwin, 0, item); 
	ok = CreateWindow(WNDCLASS_BUTTON, "确定", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 120)/2, 190, 40, 20, mainwin, 0, NULL); 
	cancel = CreateWindow(WNDCLASS_BUTTON, "取消", WS_CHILD|BS_REGULAR, (LCD_WIDTH + 40)/2, 190, 40, 20, mainwin, 0, NULL); 

	tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);

	lacb = LinkDataBase(NOTEPAD_DATA_BASE); 
	while(!quit)
	{
		ASIXGetMessage(&msg, NULL, 0, 0); 
		switch(msg.message)
		{
			case WM_COMMAND:
				if(msg.lparam == ok)
				{
					if(*timerange == 0xff)		//没有选中时间范围
					{
						MessageBox(mainwin, "请选择时间范围!", "提醒", MB_ICONEXCLAMATION|MB_OK); 
					}
					else
					{
							ASIX_DATE	date; 
							ASIX_TIME	time; 
							ReadDateTime(&date, &time); 	//获取系统时间
							strcpy(timetemp, timerange); 
							sprintf(temp, "%u", date.year); 
							strcat(timetemp, temp); 
							if(date.month < 10)
							{
								strcat(timetemp, "0");
							}
							sprintf(temp, "%u", date.month); 
							strcat(timetemp, temp); 
							if(date.day < 10)
							{
								strcat(timetemp, "0"); 
							}
							sprintf(temp, "%u", date.day); 
							strcat(timetemp, temp); 
							if(time.hour < 10)
							{
								strcat(timetemp, "0"); 
							}

⌨️ 快捷键说明

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