📄 asixmail.c
字号:
/********************************************************************
The main entry of asixmail system shell.
We can use this mailbox system dial line system and GSM SMS system
we defined the macros in asixmail.h
if we use dial line then we define DIALLINE
if we use GSM SMS then we define GSMSMS
********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <mem.h>
#include <asixwin.h>
#include <asixapp.h>
#include <ppsm.h>
#include <asixwin\asix_mn.h>
#include <asixwin\select.h>
#include <asixwin\asix_sb.h>
#include <asixwin\asix_lb.h>
#include <asixwin\disp.h>
#include <sys\flash.h>
//#include <simdrv\include\flash.h>
//#include <Const.h>
//#include <net\asixmail.h>
#include "asixmail.h"
//#include "Const.h"
#include "netcfg.h"
char *OutSideMail1[MAXBOXITEM];// the outside mail buffer pointer
U8 Mailed;
// const char ASIX_version[];
char send_mark[MAXBOXITEM];
U16 Datagroup[0x8000];
U8 *Datatemp;
//U8 *Datatemp;
U8 Dataspace[40000];
struct asix_state ASIX_Stat;
extern struct zhangcfg *Cfg;
struct inbox_index *InboxIndex;
struct outbox_index *OutboxIndex;
//U8 MailChanged;
#define FirstMailMemory 0x900000
//#define FirstMailMemory 0x800000+0xd0000;
const char format_ok[]="ASIXMAIL";
#ifdef GSM_LINE
const char ASIX_version[]="版本:0.99.1012_GSM";
#endif
#ifdef DIAL_LINE
const char ASIX_version[]="版本:0.99.1012";
#endif
//struct asix_state ASIX_Stat;
struct asix_addr AsixAddr[ASIX_ADDR_NUM];
#define FCHECK_OK 0x5a
#define FCHECK_FAIL 0x0
struct flash_checkpoint {
U8 formated;
U8 netcfg;
U8 inboxindex;
U8 outboxindex;
U8 inbox;
U8 outbox;
U8 mailend;
};
static struct flash_checkpoint FlashCheck;
void mailmain(void)
{
static MSG Msg;
U32 gc;
U32 mainwin,bt_receive,bt_send,bt_sent,bt_cfg,bt_newmail,bt_receivesend,bt_exit;
U8 quit=0;
U16 delay,i;
char formatedornot[9];
U32 cur;
gc=GetGC();
ClearScreen(gc,GPC_WHITE);
mainwin=CreateWindow(WNDCLASS_WIN,"asix 邮件",WS_OVERLAPPEDWINDOW,0,0,159,239,0,0,NULL);
//strncpy( (char *)formatedornot,(char *)Datatemp,9);
//if(strcmp(formatedornot,format_ok) != 0)
//MFlashWrite((char *)FirstMailMemory,MAILFORMAT);
memset((char *)&Cfg,0x0,sizeof(struct zhangcfg));
Mailed=FALSE;
Datatemp = (U8 *)Datagroup;
FlashReadBlock( (U32)Datatemp,(U32 )FirstMailMemory,0x10000);
strncpy( (char *)formatedornot,(char *)Datatemp,9);
if(strcmp(formatedornot,format_ok) != 0)
MFlashWrite((char *)FirstMailMemory,MAILFORMAT);
/*getcfg(Datatemp+NETCFG_HEAD);
for (i=0;i<100;i++)
for (delay=0;delay<6000;delay++);
cur = GetCurWindow( );
RepaintWindow(cur, 0);
Disp16String("正在检查存储器",10,125);
if (MCheckFlash(Datatemp)) {
for (i=0;i<100;i++)
for (delay=0;delay<60;delay++);
cur = GetCurWindow( );
RepaintWindow(cur, 0);
Disp16String("存储器错误! ",10,125);
for (i=0;i<100;i++)
for (delay=0;delay<60;delay++);
cur = GetCurWindow( );
RepaintWindow(cur, 0);
Disp16String("尝试恢复... ",10,125);
for (i=0;i<100;i++)
for (delay=0;delay<60;delay++);
//MFlashFix();
MFlashWrite((char *)FirstMailMemory,MAILFORMAT);
}*/
Disp16String("资料载入中... ",30,60);
for (i=0;i<100;i++)
for (delay=0;delay<600;delay++);
cur = GetCurWindow( );
SysClearRec( gc, GPC_LIGHTGREY, 0, 20, 140, 200 , GPC_AND_STYLE);
//FlashReadBlock( (U32)Datatemp,(U32 )FirstMailMemory,0x10000);
Disp16String("导入新邮件... ",30,60);
getcfg(Datatemp+NETCFG_HEAD);
for (i=0;i<100;i++)
for (delay=0;delay<600;delay++);
SysClearRec( gc, GPC_LIGHTGREY, 0, 20, 140, 200 , GPC_AND_STYLE);
bt_receive = CreateWindow(WNDCLASS_BUTTON, " 收件箱", WS_CHILD|BS_TOOLBAR, 45,60,70,18,mainwin,0,NULL);
bt_send = CreateWindow(WNDCLASS_BUTTON, " 发件箱", WS_CHILD|BS_TOOLBAR, 45,90,70,18,mainwin,0,NULL);
bt_sent = CreateWindow(WNDCLASS_BUTTON, "已发送邮件", WS_CHILD|BS_TOOLBAR, 45,120,70,18,mainwin,0,NULL);
bt_cfg = CreateWindow(WNDCLASS_BUTTON, " 系统配置", WS_CHILD|BS_TOOLBAR, 45,150,70,18,mainwin,0,NULL);
bt_newmail = CreateWindow(WNDCLASS_BUTTON, "新信", WS_CHILD|BS_TOOLBAR, 0,223,53,16,mainwin,0,NULL);
bt_receivesend = CreateWindow(WNDCLASS_BUTTON, "收发", WS_CHILD|BS_TOOLBAR, 53,223,53,16,mainwin,0,NULL);
bt_exit = CreateWindow(WNDCLASS_BUTTON, "退出", WS_CHILD|BS_TOOLBAR, 106,223,53,16,mainwin,0,NULL);
while(!quit) {
ASIXGetMessage(&Msg, NULL, 0, 0);
switch ( Msg.message )
{
case ASIX_RTC:
break;
case WM_COMMAND:
if(Msg.lparam == bt_receive){
MailBox(INBOXLIST);
}
if(Msg.lparam == bt_send){
MailBox(OUTBOXLIST);
}
if(Msg.lparam == bt_sent){
MailBox(SENTBOXLIST);
}
if(Msg.lparam == bt_cfg){
netcfg();
}
if(Msg.lparam == bt_newmail){
NewMail(NULL,NEW_MAIL);
}
if(Msg.lparam == bt_receivesend){
dial();
//mailsend_smtp();
SendMail();
}
if(Msg.lparam == bt_exit){
quit=1;
break;
}
break;
case WM_QUIT:
quit = 1;
break;
default:
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
if (Mailed)
MFlashWrite((char *)FirstMailMemory,MAILSAVE);
/*flush all the asix data and return them clean to the sys*/
memset(Datatemp,0x0,0x10000);
memset(Dataspace,0x0,40000);
//ClearRec(gc,0,18,102,124,GPC_WHITE,GPC_REPLACE_STYLE);
// temp_st = CreateWindow(WNDCLASS_STATIC, "正在保存中,请等待...", WS_CHILD|SS_TEXT, 30,30,50,80,mainwin,0,NULL);
// if(MailWriteToFlash( )!=ASIX_OK)
//msgbox = MessageBox( mainwin, "邮件写入失败,请重试!", "友情提醒", MB_OK|MB_DEFBUTTON1|MB_ICONERROR);
DestroyWindow(mainwin);
EndofTask();
}
U8 MCheckFlash(char *fhead)
{
struct netcfg *test;
U8 check_result=0;
char formated_mark[10];
memcpy(formated_mark,fhead,10);
formated_mark[9]='\0';
if(strcmp(formated_mark,format_ok)!=0) {
FlashCheck.formated=FCHECK_FAIL;
check_result=1;
} else {
FlashCheck.formated=FCHECK_OK;
}
test=(struct netcfg *)(fhead+NETCFG_HEAD);
if ( *(unsigned int*)(test->Valid)!=CFGVALID ) {
FlashCheck.netcfg=FCHECK_FAIL;
check_result=1;
}else {
FlashCheck.netcfg=FCHECK_OK;
}
if ( *(fhead+INBOX_INDEX_HEAD-1)!=CHECK_CHAR ) {
FlashCheck.inboxindex=FCHECK_FAIL;
check_result=1;
}else {
FlashCheck.inboxindex=FCHECK_OK;
}
if ( *(fhead+OUTBOX_INDEX_HEAD-1)!=CHECK_CHAR ) {
FlashCheck.outboxindex=FCHECK_FAIL;
check_result=1;
}else {
FlashCheck.outboxindex=FCHECK_OK;
}
if ( *(fhead+INBOX_HEAD-1)!=CHECK_CHAR ) {
FlashCheck.inbox=FCHECK_FAIL;
check_result=1;
}else {
FlashCheck.inbox=FCHECK_OK;
}
if ( *(fhead+OUTBOX_HEAD-1)!=CHECK_CHAR ) {
FlashCheck.outbox=FCHECK_FAIL;
check_result=1;
}else {
FlashCheck.outbox=FCHECK_OK;
}
if ( *(fhead+0x10000-1)!=CHECK_CHAR ) {
FlashCheck.mailend=FCHECK_FAIL;
check_result=1;
}else {
FlashCheck.mailend=FCHECK_OK;
}
return check_result;
}
U8 MFlashFix(void)
{
U32 msgbox;
U32 cur;
cur = GetCurWindow( );
if (FlashCheck.formated==FCHECK_FAIL) return (MFlashWrite((char *)FirstMailMemory,MAILFORMAT));
if (FlashCheck.netcfg==FCHECK_FAIL) {
//AdvHintWin("配置信息错!","请重新配置.",60,0);
msgbox = MessageBox( cur, "配置信息错!请重新配置.", "友情提醒", MB_OK|MB_DEFBUTTON1|MB_ICONERROR);
netcfg();
}
if (FlashCheck.inboxindex==FCHECK_FAIL) {
Datatemp[INBOX_INDEX_HEAD-1]=CHECK_CHAR;
DelMail(0,DELINBOX,0);
msgbox = MessageBox( cur, "配置信息错!请重新配置.", "友情提醒", MB_OK|MB_DEFBUTTON1|MB_ICONERROR);
netcfg();
}
if (FlashCheck.outboxindex==FCHECK_FAIL) {
Datatemp[OUTBOX_INDEX_HEAD-1]=CHECK_CHAR;
InboxIndex=Datatemp+INBOX_INDEX_HEAD;
InboxIndex[MAXBOXITEM-1].flag=EMPTYINDEX;
DelMail(0,DELOUTBOX,0);
}
if (FlashCheck.inbox==FCHECK_FAIL) {
Datatemp[INBOX_HEAD-1]=CHECK_CHAR;
OutboxIndex=Datatemp+OUTBOX_INDEX_HEAD;
OutboxIndex[MAXBOXITEM-1].flag=EMPTYINDEX;
}
if (FlashCheck.outbox==FCHECK_FAIL) {
Datatemp[OUTBOX_HEAD-1]=CHECK_CHAR;
InboxIndex=(struct inbox_index *)(Datatemp+INBOX_INDEX_HEAD);
while(InboxIndex->flag!=EMPTYINDEX)
InboxIndex++;
InboxIndex->flag=EMPTYINDEX;
}
//AdvHintWin("尝试恢复完毕","数据可能丢失",60,0);
//Disp16String("尝试恢复完毕,数据可能丢失 ",10,125);
msgbox = MessageBox( cur, "尝试恢复完毕,数据可能丢失 ","友情提醒", MB_OK|MB_DEFBUTTON1|MB_ICONERROR);
Mailed=TRUE;
return 0;
}
U8 MFlashWrite(char *fhead,unsigned char mode)
{
static MSG Msg;
register U8 quit=0;
U16 i,delay;
// U32 process[10];
U32 gc;
U32 cur;
// U16 xSrc,ySrc,xDest,yDest;
// register char *RamhPoint;
char * statestr;
unsigned long UserFlashPoint;
P_U32 RamPoint;
gc=GetGC();
ClearScreen(gc,GPC_WHITE);
cur = GetCurWindow();
//RepaintWindow(cur, 0);
if(mode==MAILFORMAT)
{
cur = GetCurWindow();
if(MessageBox( cur, "严重错误!需格式化,将删除所有文件", "友情提醒", MB_OKCANCEL ) == IDOK){
//if (SelButtonWin("严重错误!需格式化","将删除所有文件",str1,2,0)==0){
//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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -