📄 emldb.c
字号:
#include "email.h"
#include "emlfunc.h"
#include "emldb.h"
#include "fstouser.h" ////gfd
/***********************************************************************************************/
STATUS TransCreateEmail( EMAIL_STRU *email_stru, U8 reserved )
{
U8 i;
U8 *add_data, *data;
FIELDLIST fieldlist[EMAIL_FIELD_NUM];
U16 datalen;
U32 tmp_id;
DBLACB *emaillacb;
emaillacb = LinkDataBase( EMAIL_DATA_BASE ); //链接电子邮件数据库
fieldlist[0].fieldvalue = email_stru->time;
fieldlist[1].fieldvalue = email_stru->subject;
fieldlist[2].fieldvalue = email_stru->addresser;
fieldlist[3].fieldvalue = email_stru->type;
fieldlist[4].fieldvalue = email_stru->box;
fieldlist[5].fieldvalue = email_stru->addressee;
fieldlist[6].fieldvalue = email_stru->content;
datalen = (WORD)( EMAIL_FIELD_NUM * sizeof(WORD) );
for( i = 0; i < EMAIL_FIELD_NUM; i++ )
{
if( fieldlist[i].fieldvalue == NULL )
{
fieldlist[i].headoffset = 0;
}else{
fieldlist[i].headoffset = datalen;
datalen += (U16)( strlen( fieldlist[i].fieldvalue ) + 1 );
}
}
add_data = (BYTE *)Lmalloc(datalen);
if( add_data == NULL )
return EMAIL_ERROR;
data = add_data;
for( i = 0; i < EMAIL_FIELD_NUM; i++ ) //填充偏移值
{
memcpy( data, &fieldlist[i].headoffset, sizeof(WORD) );
data += sizeof(WORD);
}
for( i = 0; i < EMAIL_FIELD_NUM; i++ ) //填充字段值
{
if( fieldlist[i].headoffset != 0 )
{
memcpy( data, fieldlist[i].fieldvalue , ( strlen( fieldlist[i].fieldvalue ) + 1 ) );
data += ( strlen( fieldlist[i].fieldvalue ) + 1 );
}
}
tmp_id = LocalAddRecord( emaillacb, add_data, datalen );
DetachDataBase( emaillacb );
Lfree(add_data);
if( tmp_id == DB_ERROR )
return EMAIL_ERROR;
return EMAIL_OK;
}
/***********************************************************************************************/
STATUS TransModifyEmail( LOCALSEARCHLIST *global_email_list, U16 select_no, EMAIL_STRU *email_stru, U8 reserved )
{
U8 i;
U8 *modify_data, *data;
FIELDLIST fieldlist[EMAIL_FIELD_NUM];
U16 datalen;
DBLACB *emaillacb;
emaillacb = LinkDataBase( EMAIL_DATA_BASE ); //链接电子邮件数据库
fieldlist[0].fieldvalue = email_stru->time;
fieldlist[1].fieldvalue = email_stru->subject;
fieldlist[2].fieldvalue = email_stru->addresser;
fieldlist[3].fieldvalue = email_stru->type;
fieldlist[4].fieldvalue = email_stru->box;
fieldlist[5].fieldvalue = email_stru->addressee;
fieldlist[6].fieldvalue = email_stru->content;
datalen = (WORD)( EMAIL_FIELD_NUM * sizeof(WORD) );
for( i = 0; i < EMAIL_FIELD_NUM; i++ )
{
if( fieldlist[i].fieldvalue == NULL )
{
fieldlist[i].headoffset = 0;
}else{
fieldlist[i].headoffset = datalen;
datalen += (U16)( strlen( fieldlist[i].fieldvalue ) + 1 );
}
}
modify_data = (BYTE *)Lmalloc(datalen);
if( modify_data == NULL )
return EMAIL_ERROR;
data = modify_data;
for( i = 0; i < EMAIL_FIELD_NUM; i++ ) //填充偏移值
{
memcpy( data, &fieldlist[i].headoffset, sizeof(WORD) );
data += sizeof(WORD);
}
for( i = 0; i < EMAIL_FIELD_NUM; i++ ) //填充字段值
{
if( fieldlist[i].headoffset != 0 )
{
memcpy( data, fieldlist[i].fieldvalue , ( strlen( fieldlist[i].fieldvalue ) + 1 ) );
data += ( strlen( fieldlist[i].fieldvalue ) + 1 );
}
}
if( LocalModifyRecord( emaillacb, global_email_list->head[select_no].index, modify_data, datalen ) == DB_ERROR )
{
Lfree(modify_data);
DetachDataBase( emaillacb );
return EMAIL_ERROR;
}
DetachDataBase( emaillacb );
Lfree(modify_data);
return EMAIL_OK;
}
/***********************************************************************************************/
STATUS TransDelEmail( LOCALSEARCHLIST *global_email_list, U16 select_no, U8 reserved )
{
// U16 i;
DBLACB *emaillacb;
emaillacb = LinkDataBase( EMAIL_DATA_BASE ); //链接电子邮件数据库
if( LocalDelRecord( emaillacb, global_email_list->head[select_no].index ) == DB_ERROR )
{
DetachDataBase( emaillacb );
return EMAIL_ERROR;
}
/* Lfree( global_email_list->head[select_no].data );
for( i = select_no; i < (U16)( global_email_list->num - 1 ); i++ )
{
global_email_list->head[i].index = global_email_list->head[i+1].index;
global_email_list->head[i].data = global_email_list->head[i+1].data;
global_email_list->head[i].datalen = global_email_list->head[i+1].datalen;
}
global_email_list->num--;
*/
DetachDataBase( emaillacb );
return EMAIL_OK;
}
/***********************************************************************************************/
EMAIL_STRU* TransReadEmail( LOCALSEARCHLIST *global_email_list, U16 select_no, U8 reserved)
{
EMAIL_STRU *email_stru;
DBRECORDHEAD *head_info;
U8 *data;
#ifdef SIM_ON_PC
U16 *field_head;
#else
U16 field_head;
#endif
U8 i = 0;
if( ( email_stru = (EMAIL_STRU *)Lmalloc(sizeof(EMAIL_STRU)) ) == NULL )
return NULL;
head_info = (DBRECORDHEAD *)( global_email_list->head[select_no].data );
data = (BYTE *)(&head_info->data);
#ifdef SIM_ON_PC
field_head = (WORD *)data;
email_stru->time = data + field_head[EMAIL_TIME];
email_stru->subject = data + field_head[EMAIL_SUBIECT];
email_stru->addresser = data + field_head[EMAIL_ADDRESSER];
email_stru->type = data + field_head[EMAIL_TYPE];
email_stru->box = data + field_head[EMAIL_BOX];
email_stru->addressee = data + field_head[EMAIL_ADDRESSEE];
email_stru->content = data + field_head[EMAIL_CONTENT];
#else
Bytes2Word( &field_head, data+(EMAIL_TIME)*sizeof(WORD) );
email_stru->time = data + field_head;
Bytes2Word( &field_head, data+(EMAIL_SUBIECT)*sizeof(WORD) );
email_stru->subject = data + field_head;
Bytes2Word( &field_head, data+(EMAIL_ADDRESSER)*sizeof(WORD) );
email_stru->addresser = data + field_head;
Bytes2Word( &field_head, data+(EMAIL_TYPE)*sizeof(WORD) );
email_stru->type = data + field_head;
Bytes2Word( &field_head, data+(EMAIL_BOX)*sizeof(WORD) );
email_stru->box = data + field_head;
Bytes2Word( &field_head, data+(EMAIL_ADDRESSEE)*sizeof(WORD) );
email_stru->addressee = data + field_head;
Bytes2Word( &field_head, data+(EMAIL_CONTENT)*sizeof(WORD) );
email_stru->content = data + field_head;
#endif
return email_stru;
}
/***********************************************************************************************/
LOCALSEARCHLIST* TransSearchEmail( EMAIL_SEARCH_STRU *email_search_stru, U8 reserved )
{
LOCALSEARCHLIST *temp_searchlist, *searchlist;
RECORDDATA *next_record_data, *next_record_head, *temp_record_data;
DBRECORDHEAD *head_info;
U8 *data, *field_value;
U16 *field_head;
U16 i, count;
DBLACB *emaillacb;
emaillacb = LinkDataBase( EMAIL_DATA_BASE ); //链接电子邮件数据库
// temp_searchlist = LocalFindRecord( emaillacb, EMAIL_ADDRESSEE, cur_account, PRECISE_PART_MATCH );
temp_searchlist = LocalFindRecord( emaillacb, email_search_stru->field, email_search_stru->keystring, email_search_stru->mode );
temp_record_data = (RECORDDATA *)Lmalloc( sizeof(RECORDDATA) ); //暂存交换变量
if( temp_record_data == NULL )
{
DelOldSearchList( temp_searchlist );
DetachDataBase( emaillacb );
return NULL;
}
next_record_head = next_record_data = temp_searchlist->head;
for( count = 0, i = 0; i< temp_searchlist->num; i++ )
{
head_info = (DBRECORDHEAD *)(next_record_data->data);
data = (BYTE *)(&head_info->data);
field_head = (WORD *)data;
field_value = data + field_head[EMAIL_ADDRESSEE];
if( strcmp( field_value, cur_account ) == 0 )
{
temp_record_data->index = next_record_head->index;
temp_record_data->data = next_record_head->data;
temp_record_data->datalen = next_record_head->datalen;
next_record_head->index = next_record_data->index;
next_record_head->data = next_record_data->data;
next_record_head->datalen = next_record_data->datalen;
next_record_data->index = temp_record_data->index;
next_record_data->data = temp_record_data->data;
next_record_data->datalen = temp_record_data->datalen;
next_record_head++;
count++;
}
next_record_data++;
}
Lfree( temp_record_data );
searchlist = (LOCALSEARCHLIST *)Lmalloc( sizeof(LOCALSEARCHLIST) );
if( searchlist == NULL )
{
DelOldSearchList( temp_searchlist );
DetachDataBase( emaillacb );
return NULL;
}
if( count != 0 )
{
searchlist->head = (RECORDDATA *)Lmalloc( sizeof(RECORDDATA) * count );
if( searchlist->head == NULL )
{
Lfree( searchlist );
DelOldSearchList( temp_searchlist );
DetachDataBase( emaillacb );
return NULL;
}
memcpy( searchlist->head, temp_searchlist->head, ( sizeof(RECORDDATA) * count ) );
searchlist->num = count;
// DelOldSearchList( temp_searchlist );
}else{
searchlist->head = NULL;
searchlist->num = 0;
}
Lfree( temp_searchlist );
DetachDataBase( emaillacb );
return searchlist;
// return temp_searchlist;
}
/***********************************************************************************************/
//把整型值的时间转换成字符串型的时间
//void Time2Char( EMAIL_TIME_STRU *time, EMAIL_TIME_STRU *conversion_time )
//{
/*
conversion_time->year = (U32)( time->year/1000 + 0x30 ) | ( ( ( time->year%1000 )/100 + 0x30 ) << 8 )
| ( ( ( ( time->year%1000 )%100 )/10 + 0x30 ) << 16 )
| ( ( ( ( time->year%1000 )%100 )%10 + 0x30 ) << 24 );
conversion_time->month = (U16)( time->month/10 + 0x30 ) | ( ( time->month%10 + 0x30 ) << 8 );
conversion_time->day = (U16)( time->day/10 + 0x30 ) | ( ( time->day%10 + 0x30 ) << 8 );
conversion_time->hour = (U16)( time->hour /10 + 0x30 ) | ( ( time->hour%10 + 0x30 ) << 8 );
conversion_time->minute = (U16)( time->minute/10 + 0x30 ) | ( ( time->minute%10 + 0x30 ) << 8 );
conversion_time->second = (U16)( time->second/10 + 0x30 ) | ( ( time->second%10 + 0x30 ) << 8 );
*/
/* sprintf( (void *)&conversion_time->year, "%04.4d", conversion_time->year );
sprintf( (void *)&conversion_time->month, "%02.2d", conversion_time->month );
sprintf( (void *)&conversion_time->day, "%02.2d", conversion_time->day );
sprintf( (void *)&conversion_time->hour, "%02.2d", conversion_time->hour );
sprintf( (void *)&conversion_time->minute, "%02.2d", conversion_time->minute );
sprintf( (void *)&conversion_time->second, "%02.2d", conversion_time->second );
*/
//}
/***********************************************************************************************/
//把整型值的数目转换成5位的字符串
char* NumtoChar( U16 number )
{
char *temp_str;
if( ( temp_str = (char *)Lmalloc(5) ) == NULL ) //可显示数字为5位
return NULL;
if( number/1000 == 0 ) //计算邮件数
{
if( number/100 == 0 )
{
if( number/10 == 0 )
{
if( number == 0 )
{
temp_str[0] = '0';
}else{
temp_str[0] = (U8)( number + 0x30 );
}
temp_str[1] = '\0';
}else{
temp_str[0] = (U8)( number/10 + 0x30 );
temp_str[1] = (U8)( number%10 + 0x30 );
temp_str[2] = '\0';
}
}else{
temp_str[0] = (U8)( number/100 + 0x30 );
temp_str[1] = (U8)( ( number%100 )/10 + 0x30 );
temp_str[2] = (U8)( ( number%100 )%10 + 0x30 );
temp_str[3] = '\0';
}
}else{
temp_str[0] = (U8)( number/1000 + 0x30 );
temp_str[1] = (U8)( ( number%1000 )/100 + 0x30 );
temp_str[2] = (U8)( ( ( number%1000 )%100 )/10 + 0x30 );
temp_str[3] = (U8)( ( ( number%1000 )%100 )%10 + 0x30 );
temp_str[4] = '\0';
}
return temp_str;
}
/***********************************************************************************************/
//释放从数据库得到的列表
void FreeDBList( LOCALSEARCHLIST **DB_list, U16 *num )
{
if( *DB_list != NULL )
DelOldSearchList( *DB_list );
*DB_list = NULL;
*num = 0;
}
/***********************************************************************************************/
STATUS GetAccountList( U16 *num, char *account_list )
{
U16 i = 0;
FILE *fp;
// static char account_list[ACCOUNT_MAX_NUM][ACCOUNT_LEN];
#ifdef SIM_ON_PC
char *file_path = "emlacnt.txt";
#else
char *file_path = "/db5/emlacnt.txt";
#endif
// 程序开始
fp = fopen( file_path, "rb+" );
if( fp == NULL) //判断打开文件是否成功
{ //首次打开
fp = fopen( file_path, "wb+" );
if( fp != NULL )
{
memset( account_list, 0x00, ACCOUNT_LEN*ACCOUNT_MAX_NUM );
fwrite( account_list, ACCOUNT_LEN, ACCOUNT_MAX_NUM, fp );
num = 0;
fclose( fp );
}else{
return EMAIL_ERROR;
}
}else{//打开成功开始读入
fread( account_list, ACCOUNT_LEN, ACCOUNT_MAX_NUM, fp );
for( i = 0; i < ACCOUNT_MAX_NUM; i++ )
{
if( *(account_list + ACCOUNT_LEN*i ) != 0 )
(*num)++;
}
fclose(fp);
}
return EMAIL_OK;
}
/***********************************************************************************************/
//保存电子信箱
STATUS SaveEmailAccount( char *account_list, U8 reserved )
{
FILE *fp;
#ifdef SIM_ON_PC
char *file_path = "emlacnt.txt";
#else
char *file_path = "/db5/emlacnt.txt";
#endif
// 程序开始
fp = fopen( file_path, "rb+" );
if( fp == NULL) //判断打开文件是否成功
{
return EMAIL_ERROR;
}else{//打开成功开始读入
fwrite( account_list, ACCOUNT_LEN, ACCOUNT_MAX_NUM, fp );
fclose(fp);
return EMAIL_OK;
}
}
/***********************************************************************************************/
STATUS ReadNetServer( void )
{
U16 i = 0;
FILE *fp;
#ifdef SIM_ON_PC
char *file_path = "netsrv.txt";
#else
char *file_path = "/db5/netsrv.txt";
#endif
// 程序开始
fp = fopen( file_path, "rb+" );
if( fp == NULL) //判断打开文件是否成功
{ //首次打开
fp = fopen( file_path, "wb+" );
if( fp != NULL )
{
memset( &net_server_stru, 0x00, sizeof( net_server_stru ) );
fwrite( &net_server_stru, sizeof( net_server_stru ), 1, fp );
fclose( fp );
}else{
return EMAIL_ERROR;
}
}else{//打开成功开始读入
fread( &net_server_stru, sizeof( net_server_stru ), 1, fp );
fclose(fp);
}
return EMAIL_OK;
}
/***********************************************************************************************/
//保存电子信箱
STATUS SaveNetServer( void )
{
FILE *fp;
#ifdef SIM_ON_PC
char *file_path = "netsrv.txt";
#else
char *file_path = "/db5/netsrv.txt";
#endif
// 程序开始
fp = fopen( file_path, "rb+" );
if( fp == NULL) //判断打开文件是否成功
{
return EMAIL_ERROR;
}else{//打开成功开始读入
fwrite( &net_server_stru, sizeof( net_server_stru ), 1, fp );
fclose(fp);
return EMAIL_OK;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -