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

📄 asixmail.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
			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 + -