?? 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 + -