⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zmdos.h

📁 这个程序是用于通讯的
💻 H
📖 第 1 页 / 共 2 页
字号:
/*--------------------------------------------+
|  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 + -