📄 zmdos.h
字号:
/*--------------------------------------------+
| zmodem header (i86 byte order dependent) |
+--------------------------------------------*/
typedef union
{
long Data; /* generic reference to all bytes */
long Pos; /* reference as a file position value */
WORD BufSz; /* receiver buffer size for ZRINIT */
BYTE Flg[4]; /* reference to individual flag values */
} ZHEADER;
enum zhdrflag { F3, F2, F1, F0 };
/*--------------------------------------------+
| bit mapped zmodem program control flags |
+--------------------------------------------*/
typedef union
{
int Data; /* reference to all bits at once */
struct /* reference to individual fields */
{
unsigned ExistOpts : 3; /* 0=skip, 1=resume, 2=makedup, 3=replace,
4=abort transfer */
unsigned KeepTime : 1; /* use mod time in block 0 header */
unsigned EscCtl : 1; /* escape txd ctl chars even if not req */
unsigned IgnCarrier: 1; /* ignore absence of carrier */
unsigned EndOfFile : 1; /* end of file encountered */
unsigned Receiving : 1; /* receiving if set, sending if reset */
unsigned KBlocks : 2; /* 0 = default (128 if X, 1024 if Y) */
/* 1 = force 128, 2 = force 1024 */
unsigned G : 1; /* 1 = "g" mode, 0 = ACK mode */
unsigned CkSum : 1; /* 1 = checksum block check, 0 = crc */
unsigned FullPath : 1; /* 1 = send/accept complete path */
unsigned KeepAtrib : 1; /* 1 = send/accept file attributes */
unsigned SendHid : 1; /* 1 = send hidden files */
unsigned HideSubs : 1; /* 1 = hide created SUBDIRs with xff or % */
} F;
} TFLAGS;
/*/////////////////////////////////////////////////////////
// //
// async and timer specific functions //
// //
//////////////////////////////////////////////////////// */
#define RxChar() ((--RxBytesQd < 0) ? LoadRxQueue() : *RxQPtr++)
#define FlushTxBuf() async_txflush(tPort)
#define FlushRxBuf() RxBytesQd = 0, async_rxflush(tPort)
#define TxChar(c) async_tx(tPort, (c))
#define TxBlock(blk, n) async_txblk(tPort, (blk), (n))
#define RxBufEmpty() ((RxBytesQd + async_rxcnt(tPort)) == 0)
#define Delay(t) tdelay(t)
/*/////////////////////////////////////////////////////////
// //
// parse file list structure/definitions //
// //
//////////////////////////////////////////////////////// */
/*--------------------------------------------+
| parse file list structure |
+--------------------------------------------*/
typedef struct
{
char *lptr; /* pointer to current positon in list */
DF findstruc; /* dos findfirst/findnext structure */
char findatrib; /* search attribute */
int flags; /* control flags for ParseFileList function */
} FILELIST;
/*--------------------------------------------+
| parse file list definitions |
+--------------------------------------------*/
#define F_NOFILE 0 /* no matching files */
#define F_RDWRITE 1 /* found file, has r/w attribute */
#define F_RDONLY 2 /* found file, has read only attribute */
#define F_SUBDIR 3 /* found subdirectory */
#define F_SYSTEM 4 /* found system or volid type file */
#define F_NOWILD 0x01 /* error if list contains wild cards */
#define F_NOLIST 0x02 /* error if list contains multiple names */
#define F_NOSYS 0x04 /* don't find subdir, hidden, system, or volid */
#define F_UNIQUE 0x08 /* return duplicate name if file exists */
#define F_SLASH 0x10 /* separate pathnames with forward slashes */
#define F_LOWER 0x20 /* return lower case filename */
#define F_FIRST 0x40 /* NZ flag value if no other options used */
/*/////////////////////////////////////////////////////////
// //
// global variables //
// //
//////////////////////////////////////////////////////// */
/*--------------------------------------------+
| initialized global variables |
+--------------------------------------------*/
extern char *DfltPath; /* default download path */
extern long ConnectBaud; /* set to connect rate if using fixed link */
extern int RxTimeOut; /* receive char timeout in ticks (1/18 s.) */
extern int DefRxTimeOut; /* default value for RxTimeOut */
extern int XonTimeOut; /* max ticks before sending XON for RxChar */
extern int XoffTimeOut; /* max ticks before override for rx'd XOFF */
extern int TxWindow; /* max chars in transit, 0 if unlimited */
extern int VBufSize; /* size of variable disk buffer to use */
extern TFLAGS TFlag; /* transfer flags (resume,keeptime,ign car) */
extern WORD Crc16Tbl[256]; /* 16 bit CRC table */
extern BYTE ZTable[256]; /* used to speed up ZRxChar & ZTxChar */
/*++ zrinit local receive buffer size, capability flags ++*/
extern WORD BufSize; /* 0 if overlaying I/O, else <= VBufSize */
extern BYTE ZFR0;
extern BYTE ZFR1;
/*++ zsinit flags ++*/
extern BYTE ZFS0; /* don't need control characters esc'd */
/*++ zfile management flags ++*/
extern ZHEADER ZFMgt; /* not requesting any file management */
extern ZHEADER ZFMgtMask; /* mask for incoming file mgt requests */
/*--------------------------------------------+
| uninitialized global variables |
+--------------------------------------------*/
extern ASYNC *tPort; /* pointer to port structure */
extern char *PathName; /* full pathname of current file */
extern char *NameExt; /* name and extension only of current file */
extern long FilePos; /* current file offset */
extern long FileSize; /* length of current file */
extern long RxdFileSize; /* file size from block 0 information */
extern DWORD UnixTime; /* current file time in Unix format */
extern DWORD RxdUnixTime; /* file time from block 0 information */
extern WORD DosTime, DosDate; /* current file time in DOS format */
extern WORD DosAtrib; /* file attribute of current file */
extern long TotalBytes; /* total bytes for all files */
extern int TotalFiles; /* total number of files */
extern WORD SerNbr; /* serial number of remote program */
extern int BinHdr; /* ZBIN32 if using CRC32, ZBIN if CRC16 */
extern char rData32; /* use 32 bit CRC for rx'd data packets */
extern char tData32; /* use 32 bit CRC for tx'd data packets */
extern int BlkLen; /* current block length */
extern ZHEADER ZFOpts; /* option flags received in last ZFILE hdr */
extern ZHEADER ZHdr; /* I/O buf for zmodem header data */
extern WORD ErrCnt; /* number of errors on current file */
extern int BytesRxd; /* # bytes in last data packet received */
extern BYTE *IOBuf; /* I/O buffer */
extern BYTE RxQueue[128]; /* receive queue */
extern BYTE *RxQPtr; /* pointer to current RxQueue position */
extern int RxBytesQd; /* bytes in receive queue */
/*/////////////////////////////////////////////////////////
// //
// function declarations //
// //
//////////////////////////////////////////////////////// */
void _C_ AsyncMode(int mode);
WORD _C_ Blk16Crc(BYTE *block, int bytes);
int _C_ BuildYZBlk0(void);
void _C_ CloseFile(void);
int _C_ DosFindFirst(char *pathname, int atrib, DF *fstruc);
int _C_ DosFindNext(DF *fstruc);
long _C_ DosGetDiskFree(int drive);
int _C_ DosSetFileTime(int handle, unsigned date, unsigned time);
int _C_ DosSetFileAttr(char *path, unsigned attrib);
void _C_ FlushDisk(void);
char * _C_ GetNameExt(char *FullPath);
int _C_ GetTotalFiles(char *list, int flags);
int _C_ LoadRxQueue(void);
int _C_ OpenFile(char *name, char *mode);
int _C_ ParseFileList(FILELIST *f, int flags, ...);
void _C_ ParseYZBlk0(char *blk0);
int _C_ ReadDisk(int bytes);
int _C_ Seek(long pos);
void _C_ SendBreak(void);
char * _C_ SkipChars(char *str);
char * _C_ SkipSpaces(char *str);
char * _C_ SwapChars(char *str, char find, char replace);
int _C_ WaitTxLevel(int level);
int _C_ WriteDisk(int bytes);
int _C_ XYInitVars(ASYNC *comport);
DWORD _C_ DosToUnix(WORD time, WORD date);
void _C_ UnixToDos(WORD *time, WORD *date, DWORD unixtime);
DWORD _C_ ulmul(DWORD n1, DWORD n2);
DWORD _C_ uldiv(DWORD n1, DWORD n2);
DWORD _C_ ulmod(DWORD n1, DWORD n2);
DWORD _C_ ulshl(DWORD n1, int shiftval);
int _C_ ZmodemRecv(ASYNC *comport);
int _C_ ZmodemSend(ASYNC *comport, char *files);
void _C_ ZMsg(int type, ...);
#ifdef __cplusplus
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -