?? email_database.cxx
字號:
#include "Email_database.h"
char buffer[20] = "", tempbuf[100];
int add_changelog2db(CHANGELOG * buf, int db_id)
{
if (db_add_record(db_id, buf, MAXCHLOG) == 0) {
printf("add record(numchr) to database error!\n");
return -1;
}
return 0;
}
int sort_changelog_database(int db_id)
{
int key_offset, key_length;
struct key_field kf;
get_field_offset_and_length(loginfo, order, key_offset, key_length);
kf.offset = key_offset;
kf.size = key_length;
kf.key_type = KEY_INT;
if (db_new_sort(db_id, kf) == 0) {
printf("sort loginfo error!\n");
return -1;
}
return 0;
}
int del_chlog(int db_id, int order)
{
int flag, n, db_num;
struct loginfo *buf;
buf = (struct loginfo *) malloc(MAXCHLOG);
db_num = db_get_record_number(changelog_id);
printf("chlog db_num = %d\n", db_num);
sort_changelog_database(db_id);
db_change_current_pos(db_id, order);
flag = db_delete_current_record(db_id);
if (flag >= 0 || flag == -1)
printf("dele log info succeed!\n");
if (db_num != order + 1) {
for (;;) {
db_get_current_pos(db_id, buf);
printf("buf->order: %d; buf->mailid: %d; buf->opid: %d\n",
buf->order, buf->mailid, buf->opid);
buf->order--;
db_modify_current(db_id, buf, MAXCHLOG);
if ((n = db_get_next(db_id, buf)) == -1)
break;
}
}
return 0;
}
int changelog_data_create()
{
int key_offset, key_length;
int db_id;
struct key_field kf;
get_field_offset_and_length(loginfo, order, key_offset, key_length);
kf.offset = key_offset;
kf.size = key_length;
kf.key_type = KEY_INT;
if ((db_id = db_register("chlog", &kf, MAXCHLOG, MAXCHLOG)) == 0) {
db_create("chlog");
db_id = db_register("chlog", &kf, MAXCHLOG, MAXCHLOG);
}
if (db_id == 0) {
printf("create/register chlog database error!\n");
return -1;
} else
return db_id;
}
int sort_setnum_database(int db_id)
{
int key_offset, key_length;
struct key_field kf;
get_field_offset_and_length(numberset, chr_num, key_offset,
key_length);
kf.offset = key_offset;
kf.size = key_length;
kf.key_type = KEY_INT;
if (db_new_sort(db_id, kf) == 0) {
printf("sort numset error!\n");
return -1;
}
return 0;
}
int setnum_data_create()
{
int key_offset, key_length;
int db_id;
struct key_field kf;
get_field_offset_and_length(numberset, chr_num, key_offset,
key_length);
kf.offset = key_offset;
kf.size = key_length;
kf.key_type = KEY_INT;
if ((db_id = db_register("setnum", &kf, MAXCHRNUM, MAXCHRNUM)) == 0) {
db_create("setnum");
db_id = db_register("setnum", &kf, MAXCHRNUM, MAXCHRNUM);
}
if (db_id == 0) {
printf("create/register setnum database error!\n");
return -1;
} else
return db_id;
}
int sort_newmail_database(int db_id)
{
int key_offset, key_length;
struct key_field kf;
get_field_offset_and_length(new_email, mail_line, key_offset,
key_length);
kf.offset = key_offset;
kf.size = key_length;
kf.key_type = KEY_INT;
if (db_new_sort(db_id, kf) == 0) {
printf("sort newmail error!\n");
return -1;
}
return 0;
}
int newmail_data_create()
{
int key_offset, key_length;
int db_id;
struct key_field kf;
get_field_offset_and_length(new_email, mail_line, key_offset,
key_length);
kf.offset = key_offset;
kf.size = key_length;
kf.key_type = KEY_INT;
db_id = db_register("newmail", &kf, MAXNEWMAIL, MAXNEWMAIL);
if (db_id == 0) {
db_create("newmail");
db_id = db_register("newmail", &kf, MAXNEWMAIL, MAXNEWMAIL);
}
if (db_id == 0) {
printf("create/register newmail database error!\n");
return -1;
} else
return db_id;
}
int sort_oldmail_database(int db_id)
{
int key_offset, key_length;
struct key_field kf;
get_field_offset_and_length(new_rvmail, mail_line, key_offset,
key_length);
kf.offset = key_offset;
kf.size = key_length;
kf.key_type = KEY_INT;
if (db_new_sort(db_id, kf) == 0) {
printf("sort oldmail error!\n");
return -1;
}
return 0;
}
int oldmail_data_create()
{
int key_offset, key_length;
int db_id;
struct key_field kf;
get_field_offset_and_length(new_rvmail, mail_line, key_offset,
key_length);
kf.offset = key_offset;
kf.size = key_length;
kf.key_type = KEY_INT;
db_id = db_register("oldmail", &kf, MAXRCVMAIL, MAXRCVMAIL);
if (db_id == 0) {
db_create("oldmail");
db_id = db_register("oldmail", &kf, MAXRCVMAIL, MAXRCVMAIL);
}
if (db_id == 0) {
printf("create/register oldmail database error!\n");
return -1;
} else
return db_id;
}
int unreg_database(int num_id, int new_id, int old_id, int ch_id)
{
int unreg;
int db_num;
struct loginfo *buf;
if ((unreg = db_unregister(num_id)) == 0) {
printf("unregister setnum database error!\n");
return -1;
}
if ((unreg = db_unregister(new_id)) == 0) {
printf("unregister newmail database error!\n");
return -1;
}
if ((unreg = db_unregister(old_id)) == 0) {
printf("unregister oldmail database error!\n");
return -1;
}
buf = (struct loginfo *) malloc(MAXCHLOG);
db_num = db_get_record_number(ch_id);
buf->order = db_num;
buf->mailid = total_mailid;
buf->opid = 0;
strncpy(buf->user, USERNAME, 20);
add_changelog2db(buf, ch_id);
free(buf);
if ((unreg = db_unregister(ch_id)) == 0) {
printf("unregister changelog database error!\n");
return -1;
}
return 0;
}
char *read_fromdatabase(char *buf, int d, int com, int new_id, int old_id)
{
int db_id = 0;
int i, db_num, current, equal;
if (com == SEND) {
db_id = new_id;
sort_newmail_database(db_id);
} else if (com == RECEIVE) {
db_id = old_id;
sort_oldmail_database(db_id);
}
db_num = db_get_record_number(db_id);
for (i = 0, current = 0; i < db_num; i++) {
db_change_current_pos(db_id, i);
db_get_current_pos(db_id, buf);
if (com == SEND)
equal = strcmp(((struct new_email *) buf)->user, USERNAME);
else
equal = strcmp(((struct new_rvmail *) buf)->user, USERNAME);
if (!equal) {
current++;
}
if (current == d) {
return buf;
}
}
return NULL;
}
/******************************************************************
cp add 2001.7.5
when AP closed in accident ,this function can show
the email save in database
******************************************************************/
char *tran(char *p, int n)
{
int i, len;
if (p == NULL) {
return buffer;
}
len = strlen(p);
if (len < n - 2) {
snprintf(buffer, 20, p);
for (i = len; i < n - 1; i++)
buffer[i] = ' ';
buffer[i] = '\0';
} else {
for (i = 0; i < n - 4; i++)
buffer[i] = *p++;
for (; i < n - 1; i++)
buffer[i] = '.';
buffer[i] = '\0';
}
return buffer;
}
char *format(char *p0, char *p1, char *p2)
{
char br[3][32];
snprintf(br[0], 32, tran(p0, 13));
snprintf(br[1], 32, tran(p1, 13));
snprintf(br[2], 32, tran(p2, 14));
snprintf(tempbuf, 100, "%s %s %s", br[0], br[1], br[2]);
return tempbuf;
}
int get_mail_fdb(int NS, int db_id)
{
int i;
char *buf = NULL;
int db_num, current;
if ((db_num = db_get_record_number(db_id)) == -1) {
printf("get record number error!\n");
return -1;
}
printf("there is %d mails\n", db_num);
if (NS == RECVMAIL) {
sort_oldmail_database(db_id);
buf = (char *) malloc(MAXRCVMAIL);
for (i = 0, current = 0; i < db_num; i++) {
if (db_search_key(db_id, &i, buf, sizeof(int)) == 0) {
printf("search the record error!\n");
return -1;
}
if (!strcmp(USERNAME, ((RCV *) buf)->user)) {
current++;
Rm_browser->insert(current, format(((RCV *) buf)->sender,
((RCV *) buf)->date,
((RCV *) buf)->
subject));
Rm_browser->redraw();
}
}
} else {
sort_newmail_database(db_id);
buf = (char *) malloc(MAXNEWMAIL);
for (i = 0, current = 0; i < db_num; i++) {
if (db_search_key(db_id, &i, buf, sizeof(int)) == 0) {
printf("search the record error!\n");
return -1;
}
if (!strcmp(USERNAME, ((NEW *) buf)->user)) {
current++;
Sm_browser->insert(current, format(((NEW *) buf)->from,
((NEW *) buf)->to,
((NEW *) buf)->
subject));
Sm_browser->redraw();
}
}
}
free(buf);
return 0;
}
int get_the_datanum(int db_id)
{
int db_num;
if ((db_num = db_get_record_number(db_id)) == -1) {
printf("get the datanum error!\n");
return -1;
} else
return db_num;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -