📄 trans.cpp
字号:
// Trans.cpp : implementation file
//
#include "stdafx.h"
#include "wgl_32.h"
#include "Trans.h"
#include "TTY.h"
#include "ShowWyy.h"
#include "Dialing.h"
#include "Analysis.h"
#include "ZhxSet.h"
#include <stdio.h>
#include <io.h>
#include <time.h>
#define WM_TRANS_MESSAGE WM_USER +101
#define HEADSIZE 256
#define BLOCKSIZE 512L
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CDialing MMyDialing;
extern CZhxSet CMySet;
/////////////////////////////////////////////////////////////////////////////
// CTrans dialog
CTrans::CTrans(CWnd* pParent /*=NULL*/)
: CDialog(CTrans::IDD, pParent)
{
lstrcpy(szName, "c:\\wgl-12\\data");
memset(m_PerStr, 0x00, sizeof(m_PerStr));
memset(&FileHead, 0x00, sizeof(FileHead));
memset(&NameIndex, 0x00, sizeof(NameIndex));
TransStatus = 0;
//{1,1,1,1,1,512,-1}
for(int i=0;i<5;i++)
TransFlag[0][i] =1;
TransFlag[0][5] = 512;
TransFlag[0][6] = -1;
//{1,80,1,4100,1,512, -1}
TransFlag[1][0] = 1;
TransFlag[1][1] = 80;
TransFlag[1][2] = 1;
TransFlag[1][3] = BLOCKSIZE + 4;
TransFlag[1][4] = 1;
TransFlag[1][5] = 512;
TransFlag[1][6] = -1;
FLAG = 6;
SendOrRece = 0;
//{{AFX_DATA_INIT(CTrans)
m_HangUp = FALSE;
//}}AFX_DATA_INIT
}
void CTrans::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTrans)
DDX_Control(pDX, IDC_LIST1, m_List1Ctrl);
DDX_Control(pDX, IDC_LIST2, m_List2Ctrl);
DDX_Check(pDX, IDC_HANGUP, m_HangUp);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTrans, CDialog)
//{{AFX_MSG_MAP(CTrans)
ON_BN_CLICKED(IDC_HANGUP, OnHangup)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_RECEIVE, OnReceive)
ON_MESSAGE(WM_TRANS_MESSAGE, OnWMTRANSMESSAGE)
ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList2)
ON_NOTIFY(NM_DBLCLK, IDC_LIST2, OnDblclkList2)
ON_BN_CLICKED(IDC_GETDIR, OnGetdir)
ON_BN_CLICKED(IDC_RECEIVE_CONFIG, OnReceiveConfig)
ON_BN_CLICKED(IDC_REDIAL, OnRedial)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTrans message handlers
BOOL CTrans::OnInitDialog()
{
CDialog::OnInitDialog();
UINT ID_No[3] = {IDS_TOPIC1_STRING, IDS_TOPIC2_STRING, IDS_TOPIC3_STRING};
CString Topic;
LV_COLUMN lv_Column;
for(int i = 0; i<3; i++)
{
memset(&lv_Column, 0x00, sizeof(LV_COLUMN));
lv_Column.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
lv_Column.fmt = LVCFMT_LEFT;
if(i==0)lv_Column.cx = 100;
else if (i==1)lv_Column.cx = 130;
else lv_Column.cx = 80;
Topic.LoadString(ID_No[i]);
lv_Column.pszText =(char *) LPCTSTR(Topic);
lv_Column.cchTextMax = Topic.GetLength();
lv_Column.iSubItem = i;
((CListCtrl *)GetDlgItem(IDC_LIST1))->InsertColumn(i, &lv_Column);
((CListCtrl *)GetDlgItem(IDC_LIST2))->InsertColumn(i, &lv_Column);
}
// TODO: Add extra initialization here
GetDlgItem(IDC_STATUS)->GetWindowRect(&m_StatusRect);
ScreenToClient(&m_StatusRect);
m_HangUp = TRUE;
((CButton *)GetDlgItem(IDC_HANGUP))->SetCheck(1);
((CButton *)GetDlgItem(IDC_SEND))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RECEIVE))->EnableWindow(FALSE);
AddLeftList();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CTrans::OnHangup()
{
// TODO: Add your control notification handler code here
m_HangUp ^= 1;
}
void CTrans::OnOK()
{
// TODO: Add extra validation here
if(m_HangUp == TRUE)
MyTTY.CloseConnection();
UpdateData();
DestroyWindow();
}
void CTrans::OnCancel()
{
// TODO: Add extra cleanup here
if(m_HangUp == TRUE)
MyTTY.CloseConnection();
DestroyWindow();
}
/*
void CTrans::OnSend()
{
CListCtrl *temp;
temp = (CListCtrl *)GetDlgItem(IDC_LIST1);
((CButton *)GetDlgItem(IDC_SEND))->EnableWindow(TRUE);
((CButton *)GetDlgItem(IDC_RECEIVE))->EnableWindow(FALSE);
UINT Count = temp->GetItemCount();
LV_ITEM lvItem;
char FileName[13];
for(UINT i=0; i<Count; i++)
{
memset(&lvItem, 0x00, sizeof(LV_ITEM));
lvItem.mask = LVIF_TEXT|LVIF_STATE;
lvItem.iItem = i;
lvItem.iSubItem = 0;
lvItem.pszText = FileName;
lvItem.cchTextMax = 12;
lvItem.stateMask = LVIS_SELECTED;
BOOL WWW = temp->GetItem(&lvItem);
if(lvItem.mask & LVIF_STATE)
{
if(lvItem.state & LVIS_SELECTED)break;
}
}
if(i==Count)return;
char tempstr[13];
temp->GetItemText(i, 0, tempstr, 13);
lstrcpy(szName, m_strRecordPath.GetBuffer(_MAX_DIR));
m_strRecordPath.ReleaseBuffer();
lstrcat(szName, tempstr);
WyySendFile();
}
*/
void CTrans::Delay(UINT Dtime)
{
DWORD OldTime;
OldTime = GetCurrentTime();
while((GetCurrentTime() - OldTime) < Dtime);
}
int CTrans::WyyReceFile(void)
{
DWORD OldTime, TimeOut,OldTwo;
int i;
BOOL wyyt=TRUE;
BYTE far *buf;
char ch;
int SENDTIME = 0;
NEXTTIME:
TransStatus = RECEIVING;
lstrcpy(StatusStr, "正在准备接收,请稍等...");
InvalidateRect(&m_StatusRect);
UpdateWindow();
if( MissConnected() )
{ AfxMessageBox("调制解调器没有连通!"); return (-1); }
if(strlen(szName)==0)return (-1);
buf = (BYTE far *)malloc(512);
if(buf==NULL)
{ AfxMessageBox("No enough memory.",MB_OK); return (-1);}
buf[0]=0x81; buf[1]=0x00; buf[2]=0x01; buf[3] = 0x02;
buf[4]='W'; buf[5]='M'; buf[7]=2;
strcpy((char *)(buf+8), szName);
buf[8+strlen(szName)+1]=-1;
buf[8+strlen(szName)+2]=-1;
ch=0;
for(i=7;i<512;i++)ch+=buf[i];
buf[6]=ch;
WriteCommBlock( MyTTY.npTTYInfo, buf , 512);
MyTTY.npTTYInfo->HeadPtr = 0;
MyTTY.npTTYInfo->TailPtr = 0;
OldTwo = TimeOut=0;
OldTime = GetCurrentTime();
while(MyTTY.npTTYInfo->HeadPtr==0 && TimeOut<30)
{
if( MissConnected() )
{
AfxMessageBox("线路中断!");
free(buf); return (-1);
}
TimeOut = (GetCurrentTime()-OldTime)/1000;
}
free(buf);
if(TimeOut>=30)
{
if(SENDTIME<3)
{
SENDTIME++;
Sleep(100);
goto NEXTTIME;
}
}
if(MyTTY.npTTYInfo->Queue[MyTTY.npTTYInfo->TailPtr]==0x90)
{
Sleep(10);
int lll = ReceiveFile();
if(lll>0)
{
WinExec("arj e send.arj -y",SW_HIDE);
Sleep(2000);
int Index = GetNewName();
wsprintf(WyyFileName,"%swgu%02d.wgl", m_strRecordPath, Index);
rename(ReceFileName, WyyFileName);
remove(ReceFileName);
((CListCtrl *)GetDlgItem(IDC_LIST1))->DeleteAllItems( );
AddLeftList();
return (1);
}
return (0);
}
else
{
if(SENDTIME<3)
{
SENDTIME++;
Sleep(100);
goto NEXTTIME;
}
AfxMessageBox("出错: 等待远方的握手信号出错!",MB_OK);
return (-1);
}
}
int CTrans::WyyReceConfig(void)
{
DWORD OldTime, TimeOut,OldTwo;
int i;
BOOL wyyt=TRUE;
BYTE far *buf;
char ch;
int SENDTIME = 0;
NEXTTIME:
TransStatus = RECEIVING;
lstrcpy(StatusStr, "正在准备接收,请稍等...1");
InvalidateRect(&m_StatusRect);
UpdateWindow();
if( MissConnected() )
{
AfxMessageBox("调制解调器没有连通!");
TransStatus = 0;
return (-1);
}
lstrcpy(szName, "CONFIG");
if(strlen(szName)==0){ TransStatus = 0; return (-1); }
buf = (BYTE far *)malloc(512);
if(buf==NULL)
{ AfxMessageBox("No enough memory.",MB_OK); TransStatus = 0; return (-1);}
buf[0]=0x81; buf[1]=0x00; buf[2]=0x01; buf[3] = 0x02;
buf[4]='W'; buf[5]='M'; buf[7]=8;
strcpy((char *)(buf+8), szName);
buf[8+strlen(szName)+1]=-1;
buf[8+strlen(szName)+2]=-1;
ch=0;
for(i=7;i<512;i++)ch+=buf[i];
buf[6]=ch;
WriteCommBlock( MyTTY.npTTYInfo, buf , 512);
MyTTY.npTTYInfo->HeadPtr = 0;
MyTTY.npTTYInfo->TailPtr = 0;
OldTwo = TimeOut=0;
OldTime = GetCurrentTime();
while(MyTTY.npTTYInfo->HeadPtr==0 && TimeOut<30)
{
if( MissConnected() )
{
AfxMessageBox("线路中断!");
TransStatus = 0;
free(buf); return (-1);
}
TimeOut = (GetCurrentTime()-OldTime)/1000;
}
free(buf);
if(TimeOut>=30)
{
if(SENDTIME<3)
{
SENDTIME++;
Sleep(100);
goto NEXTTIME;
}
}
if(MyTTY.npTTYInfo->Queue[MyTTY.npTTYInfo->TailPtr]==0x90)
{
Sleep(10);
int kkkk = ReceiveFile();
if(kkkk>0)
{
WinExec("arj e send.arj -y",SW_HIDE);
Sleep(2000);
char tempstr[256];
wsprintf(tempstr,"%ssys1.dat", m_strRecordPath);
remove(tempstr);
rename("sys1.dat", tempstr);
wsprintf(tempstr,"%ssys2.dat", m_strRecordPath);
remove(tempstr);
rename("sys2.dat", tempstr);
wsprintf(tempstr,"%sglconfig.dat", m_strRecordPath);
remove(tempstr);
rename("glconfig.dat", tempstr);
AfxMessageBox("配置文件已正确接收!");
TransStatus = 0;
return (1);
}
TransStatus = 0;
return (0);
}
else
{
if(SENDTIME<3)
{
SENDTIME++;
Sleep(100);
goto NEXTTIME;
}
AfxMessageBox("出错: 等待远方的握手信号出错!",MB_OK);
TransStatus = 0;
return (-1);
}
}
int CTrans::GetNewName(void)
{
for(int i=0; i<100; i++)
{
if(NameIndex[i]==0)break;
}
if(i==100)i=0;
return (i);
}
int CTrans::WyyReceList(void)
{
DWORD OldTime, TimeOut;
int i;
unsigned char far *buf;
char ch;
int SENDTIME=0;
NEXTTIME:
TransStatus = RECEIVING;
lstrcpy(StatusStr, "正在列远方目录,请稍等...");
InvalidateRect(&m_StatusRect);
UpdateWindow();
if( MissConnected() )
{ AfxMessageBox("调制解调器没有连通!"); TransStatus = 0; return (-1); }
buf = (BYTE far *)malloc(512);
if(buf==NULL)
{ AfxMessageBox("No enough memory.",MB_OK); TransStatus = 0; return (-1);}
buf[0]=0x81; buf[1]=0x00; buf[2]=0x01; buf[3] = 0x02;
buf[4]='W'; buf[5]='M';
buf[7]=1;
lstrcpy(szName, m_strDataPath);
strcpy((char *)(buf+8),szName);
buf[8+strlen(szName)+1]=-1;
buf[8+strlen(szName)+2]=-1;
ch=0;
for(i=7;i<512;i++)ch+=buf[i];
buf[6]=ch;
MyTTY.npTTYInfo->HeadPtr = 0;
MyTTY.npTTYInfo->TailPtr = 0;
memset(MyTTY.npTTYInfo->Queue, 0x00, 4000);
TimeOut=0 ;
OldTime = GetCurrentTime();
WriteCommBlock( MyTTY.npTTYInfo, buf , 512);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -