📄 zmodemcore.h
字号:
//-----------------------------------------------------------------------------
// project: ZModem
// author: Frank Weiler, Genshagen, Germany
// version: 0.91
// date: October 11, 2000
// email: frank@weilersplace.de
// copyright: This Software is OpenSource.
// file: ZModemCore.h
//-----------------------------------------------------------------------------
#if !defined(AFX_ZMODEMCORE_H__6A43214A_9C2E_11D4_8639_F6B82A27C85A__INCLUDED_)
#define AFX_ZMODEMCORE_H__6A43214A_9C2E_11D4_8639_F6B82A27C85A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "zmodemdef.h"
#include "crcxm.h"
#include "crc32.h"
#include "ZModemComm.h"
#include "ZModemFile.h"
// macros
#define ALLOK (GetLastError()==NO_ERROR)
#define needsDLE(x) (((x) == ZDLE) || ((x) == 0x10) || ((x) == 0x11) || ((x) == 0x13)) //masking special ZModem chars
// states of the zmodem state machine
#define SM_SENDZDATA 0 //sending / receiving file information
#define SM_SENDZEOF 1 //finishing file
#define SM_SENDDATA 2 //data transfer is running
#define SM_ACTIONRPOS 3 //reposition the filepointer during sending or receiving
#define SM_WAITZRINIT 4 //waiting for initalisation finish
// constants
#define ZMCORE_MAXBUF 18000
#define ZMCORE_MAXTX 1024 //sending/receiving max. 1024 bytes over com-port in one step
// errors used by this implementation
#define ZMODEM_INIT 0x20000001 //zmodem-initialization failed
#define ZMODEM_POS 0x20000002 //force reposition
#define ZMODEM_ZDATA 0x20000003 //
#define ZMODEM_CRCXM 0x20000004 //16-bit-checksum error
#define ZMODEM_LONGSP 0x20000005 //too long subpaket recieved
#define ZMODEM_CRC32 0x20000006 //32-bit-checksum error
#define ZMODEM_FILEDATA 0x20000007 //filedata has errors or missing
#define ZMODEM_BADHEX 0x20000008 //unexpected hex-char received (in a hex header)
#define ZMODEM_TIMEOUT 0x20000009 //by name
#define ZMODEM_GOTZCAN 0x2000000A //cancel recieved (form other side)
#define ZMODEM_ABORTFROMOUTSIDE 0x2000000B //user break
#define ZMODEM_ERROR_FILE 0x2000000C //file handling error (during open, create, read, write)
// msgs used by this implementation, posted to notify window
#define WM_USER_ZMODEMTOTALFILES WM_USER+1 //number of files we will receiving
#define WM_USER_ZMODEMTOTALSIZE WM_USER+2 //size of all files we will receiving
#define WM_USER_ZMODEMRPOS WM_USER+3 //reposition was done (mostly forced by checksum errors)
#define WM_USER_ZMODEMERROR WM_USER+4 //generic error
#define WM_USER_ZMODEMPROGRESS WM_USER+5 //informs about the sent or received bytes
#define WM_USER_ZMODEMNEXTFILE WM_USER+6 //file sending/receiving starts
#define WM_USER_ZMODEMNEXTFILESIZE WM_USER+7 //by name
// ZModem core class
class ZMODEM CZModemCore
{
public:
//construction, destruction
CZModemCore(HWND howner,HANDLE hcomm,HANDLE hcancelevent);
virtual ~CZModemCore();
//actions
bool Send(CStringArray* filelist);
bool Receive(CStringArray* filelist,CString receivedir);
protected:
// layer 3 methods
void ResetAll();
bool sendFiles();
bool sendFile();
void receiveFile();
void receiveData();
// layer 2 methods
void getZMHeaderImmediate();
void getZMHeader();
void getOO();
void getFILEINFO();
void sendZRINIT();
void sendZSKIP();
void sendZRPOS();
void sendZFIN();
void sendZACK();
void sendrz();
void sendZRQINIT();
void sendZFILE();
void sendFILEINFO();
void sendZDATA();
void sendZEOF();
void sendOO();
// layer 1 methods
void sendHeader();
void sendHexHeader();
void sendBinHeader();
void sendBin32Header();
void getHexHeader();
void getBinaryHeader();
void getBin32Header();
void getData();
void getData16();
void getData32();
bool posMatch();
void sendData();
void sendData32(int len,char frameend);
void sendData16(int len,char frameend);
// layer 0 methods
void getNextHexCh();
void getNextDLECh();
void getNextCh();
void sendChar();
void sendChar(int c);
void sendDLEChar();
void sendHexChar();
// data members
int ch;
int gotSpecial;
bool m_bWait;
int gotHeader;
unsigned char frameType;
unsigned char headerType;
int headerData[4];
int moreData;
char mainBuf[1024];
char* bufPos;
char* bufTop;
DWORD goodOffset;
DWORD bytes;
bool bcrc32,bcanfdx;
bool skip;
DWORD maxTx;
//
HWND m_hOwner;
HANDLE m_hcomm;
HANDLE m_hCancelEvent;
CZModemComm* m_ZModemComm;
CZModemFile* m_ZModemFile;
CStringArray* m_Filelist;
};
#endif // !defined(AFX_ZMODEMCORE_H__6A43214A_9C2E_11D4_8639_F6B82A27C85A__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -