📄 asixmail.c
字号:
Datatemp[OUTBOX_INDEX_HEAD-1]=CHECK_CHAR;
Datatemp[INBOX_HEAD-1]=CHECK_CHAR;
Datatemp[OUTBOX_HEAD-1]=CHECK_CHAR;
Datatemp[0x10000-1]=CHECK_CHAR;
InboxIndex=(struct inbox_index *)(Datatemp+INBOX_INDEX_HEAD);
OutboxIndex=(struct outbox_index *)(Datatemp+OUTBOX_INDEX_HEAD);
for (i=0;i<MAXBOXITEM;i++) {
InboxIndex->flag=EMPTYINDEX;
InboxIndex++;
OutboxIndex->flag=EMPTYINDEX;
OutboxIndex++;
}
Mailed=TRUE;
for (i=0;i<300;i++)
for (delay=0;delay<600;delay++);
cur = GetCurWindow( );
RepaintWindow(cur, 0);
} else return 1;
/*if(mode==MAILFORMAT)
{
bt_ok = CreateWindow(WNDCLASS_BUTTON, "确定", WS_CHILD|BS_TOOLBAR, 0,143,60,16,0,0,NULL);
bt_cancel = CreateWindow(WNDCLASS_BUTTON, "取消", WS_CHILD|BS_TOOLBAR, 60,143,60,16,0,0,NULL);
while(!quit) {
ASIXGetMessage(&Msg, NULL, 0, 0);
switch ( Msg.message )
{
case ASIX_RTC:
break;
case WM_COMMAND:
if(Msg.lparam == bt_ok) {
//for(i=0;i<10;i++)
// DrawTextIcon((P_U32)&process[i],5+14*i,160,10,20,GB_NORMAL_FONT,"",0,BLACK,PositionMiddle);
Disp16String("正在进行格式化...",10,55);
Disp16String("这是你第一次使用",20,80);
Disp16String("或存储器有错",20,100);
memset(Datatemp,0x0,0x10000);
strcpy(Datatemp,format_ok);
Datatemp[INBOX_INDEX_HEAD-1]=CHECK_CHAR;
Datatemp[OUTBOX_INDEX_HEAD-1]=CHECK_CHAR;
Datatemp[INBOX_HEAD-1]=CHECK_CHAR;
Datatemp[OUTBOX_HEAD-1]=CHECK_CHAR;
Datatemp[0x10000-1]=CHECK_CHAR;
InboxIndex=(struct inbox_index *)(Datatemp+INBOX_INDEX_HEAD);
OutboxIndex=(struct outbox_index *)(Datatemp+OUTBOX_INDEX_HEAD);
for (i=0;i<MAXBOXITEM;i++) {
InboxIndex->flag=EMPTYINDEX;
InboxIndex++;
OutboxIndex->flag=EMPTYINDEX;
OutboxIndex++;
}
MailChanged=TRUE;
}
if(Msg.lparam == bt_cancel) {
quit=1;
return 1;
} break;
default:
break;
}
}*/
} else if (mode==MAILSAVE) {
Disp16String("正在进行保存... ",5,20);
//for(i=0;i<10;i++)
// DrawTextIcon((P_U32)&process[i],5+14*i,160,10,20,GB_NORMAL_FONT,"",0,BLACK,PositionMiddle);
ASIXstat();
statestr = malloc(25);
sprintf(statestr,"收件箱%02d封,%5d字节",ASIX_Stat.inboxnum,ASIX_Stat.inbyte);
Disp16String(statestr,5,80);
sprintf(statestr,"发件箱%02d封,%5d字节",ASIX_Stat.outboxnum,ASIX_Stat.outbyte);
Disp16String(statestr,5,100);
sprintf(statestr,"已发送%02d封,%5d字节",ASIX_Stat.sentboxnum,ASIX_Stat.sentbyte);
Disp16String(statestr,5,120);
} else return 1;//mode error
/*UserFlashPoint=FirstMailMemory;
(* FlashUnlockBlockP)(UserFlashPoint);
UserFlashPoint=FirstSaveMemory;
(* FlashEraseBlockP)(UserFlashPoint);
//ActiveAreaRead(process[0],&xSrc,&ySrc,&xDest,&yDest);
//InvRec((xSrc+1),(ySrc+1),(xDest-(xSrc+1)),(yDest-(ySrc+1)));
(*FlashWriteBlockP)(fhead+10,Datatemp+10,0x1000-10);
UserFlashPoint=FirstSaveMemory+0x1000;
RamhPoint=Datatemp+0x1000;
for(i=1;i<9;i++)
{
(*FlashWriteBlockP)(UserFlashPoint,RamhPoint,0x1e00);
//ActiveAreaRead(process[i],&xSrc,&ySrc,&xDest,&yDest);
//InvRec((xSrc+1),(ySrc+1),(xDest-(xSrc+1)),(yDest-(ySrc+1)));
RamhPoint+=0x1e00;
UserFlashPoint+=0x1e00;
}
(*FlashWriteBlockP)(fhead,Datatemp,10);
(*FlashLockBlockP)(fhead);
//ActiveAreaRead(process[9],&xSrc,&ySrc,&xDest,&yDest);
//InvRec((xSrc+1),(ySrc+1),(xDest-(xSrc+1)),(yDest-(ySrc+1)));
//for(i=0;i<10;i++)
// ActiveAreaDisable(process[i]);
//memset(data,0x00,TOPADDRESSMEMO);
//strcpy((P_VOID)data, (P_VOID)FormatConst);
*/
UserFlashPoint = FirstMailMemory;
(* FlashUnlockBlockP)(UserFlashPoint);
UserFlashPoint = FirstMailMemory;
RamPoint=(unsigned int *)Datatemp;
//FlashEraseBlock( (U32)UserFlashPoint );
//FlashEraseBlock(0x8d0000);
//FlashWriteBlock((unsigned long)UserFlashPoint,(unsigned long)RamPoint,0x10000);
UserFlashPoint=FirstMailMemory;
(* FlashLockBlockP)(UserFlashPoint);
return 0;/*format or save OK*/
}
void ASIXstat(void)
{
register U8 i;
InboxIndex=(struct inbox_index *)(Datatemp+INBOX_INDEX_HEAD);
OutboxIndex=(struct outbox_index *)(Datatemp+OUTBOX_INDEX_HEAD);
memset((char *)&ASIX_Stat,0x0,sizeof(struct asix_state));
for (i=0;(InboxIndex[i].flag!=EMPTYINDEX )&&(i<(MAXBOXITEM-1));i++){
ASIX_Stat.inboxnum++;
ASIX_Stat.inbyte+=InboxIndex[i].len;
}
for (i=0;(OutboxIndex[i].flag!=EMPTYINDEX )&&(i<(MAXBOXITEM-1));i++){
if (OutboxIndex[i].flag==MAILUNSENT){
ASIX_Stat.outboxnum++;
ASIX_Stat.outbyte+=OutboxIndex[i].len;
} else if (OutboxIndex[i].flag==MAILSENT){
ASIX_Stat.sentboxnum++;
ASIX_Stat.sentbyte+=OutboxIndex[i].len;
}
}
}
U8 DelMail(U8 index,U8 mode, U8 confirm)
{
const char *str1[2]={"确认","取消" };
// char tempstr[20];
register U8 i,l;
U32 moveoffset=0;
U32 movesize=0;
P_U32 src;
P_U32 des;
U32 cur;
if (index>=MAXBOXITEM) return 1;
if ( mode==DELINBOX ) {
InboxIndex=(struct inbox_index *)(Datatemp+INBOX_INDEX_HEAD);
for (i=0;(InboxIndex[i].flag!=EMPTYINDEX )&&(i<(MAXBOXITEM-1));i++);
}else if ( mode==DELOUTBOX ) {
OutboxIndex=(struct outbox_index *)(Datatemp+OUTBOX_INDEX_HEAD);
for (i=0;(OutboxIndex[i].flag!=EMPTYINDEX )&&(i<(MAXBOXITEM-1));i++);
} else return 1;
if (confirm){
cur = GetCurWindow( );
if(MessageBox( cur,"将删除该邮件,继续吗?", "友情提醒", MB_YESNO ) == IDOK)return 1;
}
if (i==index+1) { //we delete the last one
if ( mode==DELINBOX ) {
InboxIndex[index].flag=EMPTYINDEX;
} else {
OutboxIndex[index].flag=EMPTYINDEX;
}
Mailed=TRUE;
return 0;
}
if (mode==DELINBOX ) {
moveoffset=InboxIndex[index].len;
src=(P_U32)(Datatemp+INBOX_HEAD+InboxIndex[index+1].headoff);
des=(P_U32)(Datatemp+INBOX_HEAD+InboxIndex[index].headoff);
for (l=index+1;l<i;l++)
movesize+=InboxIndex[l].len;
for (l=index;l<i;l++) {
memcpy((char *)&InboxIndex[l],(char *)&InboxIndex[l+1],sizeof(struct inbox_index));
InboxIndex[l].headoff-=moveoffset;
}
} else {
moveoffset=OutboxIndex[index].len;
src=(P_U32)(Datatemp+OUTBOX_HEAD+OutboxIndex[index+1].headoff);
des=(P_U32)(Datatemp+OUTBOX_HEAD+OutboxIndex[index].headoff);
for (l=index+1;l<i;l++)
movesize+=OutboxIndex[l].len;
for (l=index;l<i;l++) {
memcpy((char *)&OutboxIndex[l],(char *)&OutboxIndex[l+1],sizeof(struct outbox_index));
OutboxIndex[l].headoff-=moveoffset;
}
}
// src = Lmalloc(movesize);
// des = Lmalloc(movesize);
memmove(src,des,movesize);
Mailed=TRUE;
return 0;
}
U8 SaveMail(char *buf,U8 mode)
{
register U8 i;
char *Boxhead;
struct outbox_index *tmpcfg;
if ( mode==SAVEINBOX ) {
InboxIndex=(struct inbox_index *)(Datatemp+INBOX_INDEX_HEAD);
for (i=0;(InboxIndex[i].flag!=EMPTYINDEX )&&(i<(MAXBOXITEM-1));i++);
}else if ( mode==SAVEOUTBOX ) {
//OutboxIndex=(struct outbox_index *)(Datatemp+OUTBOX_INDEX_HEAD);
tmpcfg = (struct outbox_index *)malloc(MAXBOXITEM*sizeof(struct outbox_index));
memcpy(tmpcfg,Datatemp+OUTBOX_INDEX_HEAD,MAXBOXITEM*sizeof(struct outbox_index));
OutboxIndex=(struct outbox_index *)tmpcfg;
for (i=0;(OutboxIndex[i].flag!=EMPTYINDEX )&&(i<(MAXBOXITEM-1));i++);
} else return 1;
if ( i==(MAXBOXITEM-1) ) return 2;
if (mode==SAVEINBOX) {
InboxIndex[i].flag=MAILUNREADED;
Boxhead=Datatemp+INBOX_HEAD;
if (i==0) {
InboxIndex[i].headoff=0;
} else {
InboxIndex[i].headoff=InboxIndex[i-1].headoff+InboxIndex[i-1].len;
}
InboxIndex[i].len=(unsigned short)strlen(buf)+1;/*the strlen do not include '\0' */
Boxhead+=InboxIndex[i].headoff;
memcpy(Boxhead,buf,InboxIndex[i].len);
}else if (mode==SAVEOUTBOX) {
OutboxIndex[i].flag=MAILUNSENT;
Boxhead=Datatemp+OUTBOX_HEAD;
if (i==0) {
OutboxIndex[i].headoff=0;
} else {
OutboxIndex[i].headoff=OutboxIndex[i-1].headoff+OutboxIndex[i-1].len;
}
OutboxIndex[i].len=(unsigned short)strlen(buf)+1;/*the strlen do not include '\0' */
Boxhead+=OutboxIndex[i].headoff;
memcpy(Boxhead,buf,OutboxIndex[i].len);
tmpcfg = (struct outbox_index *)(Datatemp+OUTBOX_INDEX_HEAD);
memcpy(tmpcfg,OutboxIndex,MAXBOXITEM*sizeof(struct outbox_index));
}
Mailed=TRUE;
return 0;
}
U8 SendMail(void)
{
U8 total=0;
register U8 i;
register char *mailptr;
memset(send_mark,0x0,100*sizeof(char));
OutboxIndex=(struct outbox_index *)(Datatemp+OUTBOX_INDEX_HEAD);
Dataspace[0]=0x0; //so the next time we enter smtpcli,it will not
//mistakenly find there has mails to send, if, in
//fact there is no new mail to send
mailptr=Dataspace;
for(i=0;OutboxIndex[i].flag!=EMPTYINDEX;i++){
if (OutboxIndex[i].flag==MAILUNSENT) {
strcpy(mailptr,&Datatemp[OUTBOX_HEAD+OutboxIndex[i].headoff]);
mailptr+=OutboxIndex[i].len-1;
*mailptr='\n';
*(++mailptr)='.';
*(++mailptr)='\n';
mailptr++;
send_mark[i]=1;
total++;
}
}
if(total!=0)
{
*mailptr='^';
*(++mailptr)='\n';
}
/* We call the task initiator. Lingming 11/15/1999*
* To satisfy the lint.12/4/1999*/
//ASIX();
for(i=0; i < MAXBOXITEM; i++){
if (send_mark[i]==2) {
OutboxIndex[i].flag=MAILSENT;
Mailed=TRUE;
}
}
return 0;
}
U8 ReceiveMail(P_U8 mailpoint)
{
return SaveMail((char *)mailpoint,SAVEINBOX);
}
U8 ClearReadMail(void)
{
register U8 i;
InboxIndex=(struct inbox_index *)(Datatemp+INBOX_INDEX_HEAD);
for(i=0;i<MAXBOXITEM;i++)
InboxIndex[i].flag=EMPTYINDEX;
return 0;
}
/*void initAsix(void)
{
* clear the asix mail address book*
memset((char *)AsixAddr,0x0,ASIX_ADDR_NUM*sizeof(struct asix_addr));
*read data from bussiness card app*
* clear the upper dns cache*
memset((char *)Ldnscache,0x0,LDNSCACHE_NUM*sizeof(struct ldnscache));
* clear the newmail edit history*
memset((char *)from_his,0x0,HISTORY_NUM*sizeof(struct newmail_his));
memset((char *)to_his,0x0,HISTORY_NUM*sizeof(struct newmail_his));
* clear the net config history*
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -