📄 ntpadop.c
字号:
#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 + -