[Ttssh2-commit] [5725] 改行コードを CRLF に変更

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2014年 11月 26日 (水) 01:01:47 JST


Revision: 5725
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5725
Author:   maya
Date:     2014-11-26 01:01:45 +0900 (Wed, 26 Nov 2014)
Log Message:
-----------
改行コードを CRLF に変更

Modified Paths:
--------------
    trunk/teraterm/ttpfile/zmodem.c

-------------- next part --------------
Modified: trunk/teraterm/ttpfile/zmodem.c
===================================================================
--- trunk/teraterm/ttpfile/zmodem.c	2014-11-24 15:09:49 UTC (rev 5724)
+++ trunk/teraterm/ttpfile/zmodem.c	2014-11-25 16:01:45 UTC (rev 5725)
@@ -1,1370 +1,1370 @@
-/* Tera Term
- Copyright(C) 1994-1998 T. Teranishi
- Copyright(C) 2010 Tera Term Project
- All rights reserved. */
-
-/*
- "ZMODEM.LOG"\x82̌\xA9\x95\xFB\x81F
- \x81@"B"\x82̒\xBC\x8C\xE3\x82̓񌅂\xAA Header Type \x82\xF0\x8E\xA6\x82\xB7\x81B
-
-2A 2A 18 42 30 31 30 30 30 30 30 30 32 33 62 65     **.B0100000023be
-35 30 0D 8A 11 
-   \x81\xAB
-2A 2A 18 42 30 31 30 30 30 30 30 30 32 33 62 65     **.B0100000023be
-^^^^^^^^ZPAD+ZPAD+ZDLE 
-         ^^ZHEX
-            ^^^^ZRINIT\x81i2\x8C\x85\x82ŕ\\x82\xB7\x81j
-35 30 0D 8A 11 
-^^^^^CRC
- */
-
-/* TTFILE.DLL, ZMODEM protocol */
-#include "teraterm.h"
-#include "tttypes.h"
-#include "ttftypes.h"
-#include <stdio.h>
-#include <stdarg.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "tt_res.h"
-
-#include "dlglib.h"
-#include "ftlib.h"
-#include "ttcommon.h"
-#include "ttlib.h"
-
-#define NormalTimeOut 10
-#define TCPIPTimeOut 0
-#define IniTimeOut 10
-#define FinTimeOut 3
-
-#define ZPAD   '*'
-#define ZDLE   0x18
-#define ZDLEE  0x58
-#define ZBIN   'A'
-#define ZHEX   'B'
-#define ZBIN32 'C'
-
-#define ZRQINIT 0
-#define ZRINIT	1
-#define ZSINIT	2
-#define ZACK	3
-#define ZFILE	4
-#define ZSKIP	5
-#define ZNAK	6
-#define ZABORT	7
-#define ZFIN	8
-#define ZRPOS	9
-#define ZDATA	10
-#define ZEOF	11
-#define ZFERR	12
-#define ZCRC	13
-#define ZCHALLENGE 14
-#define ZCOMPL	15
-#define ZCAN	16
-#define ZFREECNT 17
-#define ZCOMMAND 18
-#define ZSTDERR 19
-
-#define ZCRCE 'h'
-#define ZCRCG 'i'
-#define ZCRCQ 'j'
-#define ZCRCW 'k'
-#define ZRUB0 'l'
-#define ZRUB1 'm'
-
-#define ZF0 3
-#define ZF1 2
-#define ZF2 1
-#define ZF3 0
-#define ZP0 0
-#define ZP1 1
-#define ZP2 2
-#define ZP3 3
-
-#define CANFDX	0x01
-#define CANOVIO 0x02
-#define CANBRK	0x04
-#define CANCRY	0x08
-#define CANLZW	0x10
-#define CANFC32 0x20
-#define ESCCTL	0x40
-#define ESC8	0x80
-
-#define ZCBIN	1
-#define ZCNL	2
-
-/* \x83\x8D\x83O\x83t\x83@\x83C\x83\x8B\x97p\x83o\x83b\x83t\x83@ */
-#define LOGBUFSIZE 256
-
-static char recvbuf[LOGBUFSIZE];
-static char sendbuf[LOGBUFSIZE];
-
-static void add_recvbuf(char *fmt, ...)
-{
-	va_list arg;
-	char buf[128];
-
-	va_start(arg, fmt);
-	vsnprintf(buf, sizeof(buf), fmt, arg);
-	strncat_s(recvbuf, sizeof(recvbuf), buf, _TRUNCATE);
-	va_end(arg);
-}
-
-
-static void show_recvbuf(PFileVar fv)
-{
-	char *s;
-
-	s = recvbuf;
-	strncat_s(recvbuf, sizeof(recvbuf), "\015\012", _TRUNCATE);
-	_lwrite(fv->LogFile, s, strlen(s));
-
-	memset(recvbuf, 0, sizeof(recvbuf));
-}
-
-static void add_sendbuf(char *fmt, ...)
-{
-	va_list arg;
-	char buf[128];
-
-	va_start(arg, fmt);
-	vsnprintf(buf, sizeof(buf), fmt, arg);
-	strncat_s(sendbuf, sizeof(sendbuf), buf, _TRUNCATE);
-	va_end(arg);
-}
-
-static void show_sendbuf(PFileVar fv)
-{
-	char *s;
-
-	s = sendbuf;
-	strncat_s(sendbuf, sizeof(sendbuf), "\015\012", _TRUNCATE);
-	_lwrite(fv->LogFile, s, strlen(s));
-
-	memset(sendbuf, 0, sizeof(sendbuf));
-}
-
-static char *hdrtype_name(int type)
-{
-	static char *s[] = {
-		"ZRQINIT",
-		"ZRINIT",
-		"ZSINIT",
-		"ZACK",
-		"ZFILE",
-		"ZSKIP",
-		"ZNAK",
-		"ZABORT",
-		"ZFIN",
-		"ZRPOS",
-		"ZDATA",
-		"ZEOF",
-		"ZFERR",
-		"ZCRC",
-		"ZCHALLENGE",
-		"ZCOMPL",
-		"ZCAN",
-		"ZFREECNT",
-		"ZCOMMAND",
-		"ZSTDERR",
-	};
-
-	if (type >= ZRQINIT && type <= ZSTDERR)
-		return (s[type]);
-	else
-		return NULL;
-}
-
-int ZRead1Byte(PFileVar fv, PZVar zv, PComVar cv, LPBYTE b)
-{
-	char *s;
-
-	if (CommRead1Byte(cv, b) == 0)
-		return 0;
-
-	if (fv->LogFlag) {
-		if (fv->LogState == 0) {
-			// \x8Ec\x82\xE8\x82\xCCASCII\x95\\x8E\xA6\x82\xF0\x8Ds\x82\xA4
-			fv->FlushLogLineBuf = 1;
-			FTLog1Byte(fv, 0);
-			fv->FlushLogLineBuf = 0;
-
-			show_sendbuf(fv);
-
-			fv->LogState = 1;
-			fv->LogCount = 0;
-			s = "\015\012<<< Received\015\012";
-			_lwrite(fv->LogFile, s, strlen(s));
-		}
-		FTLog1Byte(fv, *b);
-	}
-	/* ignore 0x11, 0x13, 0x81 and 0x83 */
-	if (((*b & 0x7F) == 0x11) || ((*b & 0x7F) == 0x13))
-		return 0;
-	return 1;
-}
-
-int ZWrite(PFileVar fv, PZVar zv, PComVar cv, PCHAR B, int C)
-{
-	int i, j;
-	char *s;
-
-	i = CommBinaryOut(cv, B, C);
-
-	if (fv->LogFlag && (i > 0)) {
-		if (fv->LogState != 0) {
-			// \x8Ec\x82\xE8\x82\xCCASCII\x95\\x8E\xA6\x82\xF0\x8Ds\x82\xA4
-			fv->FlushLogLineBuf = 1;
-			FTLog1Byte(fv, 0);
-			fv->FlushLogLineBuf = 0;
-
-			show_recvbuf(fv);
-
-			fv->LogState = 0;
-			fv->LogCount = 0;
-			s = "\015\012Sending >>>\015\012";
-			_lwrite(fv->LogFile, s, strlen(s));
-		}
-		for (j = 0; j <= i - 1; j++)
-			FTLog1Byte(fv, B[j]);
-	}
-	return i;
-}
-
-void ZPutHex(PZVar zv, int *i, BYTE b)
-{
-	if (b <= 0x9f)
-		zv->PktOut[*i] = (b >> 4) + 0x30;
-	else
-		zv->PktOut[*i] = (b >> 4) + 0x57;
-
-	(*i)++;
-	if ((b & 0x0F) <= 0x09)
-		zv->PktOut[*i] = (b & 0x0F) + 0x30;
-	else
-		zv->PktOut[*i] = (b & 0x0F) + 0x57;
-
-	(*i)++;
-}
-
-void ZShHdr(PZVar zv, BYTE HdrType)
-{
-	int i;
-
-	zv->PktOut[0] = ZPAD;
-	zv->PktOut[1] = ZPAD;
-	zv->PktOut[2] = ZDLE;
-	zv->PktOut[3] = ZHEX;
-	zv->PktOutCount = 4;
-	ZPutHex(zv, &(zv->PktOutCount), HdrType);
-	zv->CRC = UpdateCRC(HdrType, 0);
-	for (i = 0; i <= 3; i++) {
-		ZPutHex(zv, &(zv->PktOutCount), zv->TxHdr[i]);
-		zv->CRC = UpdateCRC(zv->TxHdr[i], zv->CRC);
-	}
-	ZPutHex(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
-	ZPutHex(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
-	zv->PktOut[zv->PktOutCount] = 0x8D;
-	zv->PktOutCount++;
-	zv->PktOut[zv->PktOutCount] = 0x8A;
-	zv->PktOutCount++;
-
-	if ((HdrType != ZFIN) && (HdrType != ZACK)) {
-		zv->PktOut[zv->PktOutCount] = XON;
-		zv->PktOutCount++;
-	}
-
-	zv->PktOutPtr = 0;
-	zv->Sending = TRUE;
-
-	add_sendbuf("%s: %s", __FUNCTION__, hdrtype_name(HdrType));
-#if 0
-	if (HdrType == ZRPOS) {
-		LONG pos;
-		memcpy(&pos, zv->TxHdr[ZP0], 4);
-		add_sendbuf(" offset=%ld", pos);
-	}
-#endif
-}
-
-void ZPutBin(PZVar zv, int *i, BYTE b)
-{
-	switch (b) {
-	case 0x0D:
-	case 0x8D:
-		/* if (zv->CtlEsc ||
-		   ((zv->LastSent & 0x7f) == '@')) */
-//  {
-		zv->PktOut[*i] = ZDLE;
-		(*i)++;
-		b = b ^ 0x40;
-//  }
-		break;
-	case 0x10:
-	case 0x11:
-	case 0x13:
-	case ZDLE:
-	case 0x90:
-	case 0x91:
-	case 0x93:
-		zv->PktOut[*i] = ZDLE;
-		(*i)++;
-		b = b ^ 0x40;
-		break;
-	default:
-		if (zv->CtlEsc && ((b & 0x60) == 0)) {
-			zv->PktOut[*i] = ZDLE;
-			(*i)++;
-			b = b ^ 0x40;
-		}
-	}
-	zv->LastSent = b;
-	zv->PktOut[*i] = b;
-	(*i)++;
-}
-
-void ZSbHdr(PZVar zv, BYTE HdrType)
-{
-	int i;
-
-	zv->PktOut[0] = ZPAD;
-	zv->PktOut[1] = ZDLE;
-	zv->PktOut[2] = ZBIN;
-	zv->PktOutCount = 3;
-	ZPutBin(zv, &(zv->PktOutCount), HdrType);
-	zv->CRC = UpdateCRC(HdrType, 0);
-	for (i = 0; i <= 3; i++) {
-		ZPutBin(zv, &(zv->PktOutCount), zv->TxHdr[i]);
-		zv->CRC = UpdateCRC(zv->TxHdr[i], zv->CRC);
-	}
-	ZPutBin(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
-	ZPutBin(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
-
-	zv->PktOutPtr = 0;
-	zv->Sending = TRUE;
-
-	add_sendbuf("%s: %s ", __FUNCTION__, hdrtype_name(HdrType));
-}
-
-void ZStoHdr(PZVar zv, LONG Pos)
-{
-	zv->TxHdr[ZP0] = LOBYTE(LOWORD(Pos));
-	zv->TxHdr[ZP1] = HIBYTE(LOWORD(Pos));
-	zv->TxHdr[ZP2] = LOBYTE(HIWORD(Pos));
-	zv->TxHdr[ZP3] = HIBYTE(HIWORD(Pos));
-}
-
-
-LONG ZRclHdr(PZVar zv)
-{
-	LONG L;
-
-	L = (BYTE) (zv->RxHdr[ZP3]);
-	L = (L << 8) + (BYTE) (zv->RxHdr[ZP2]);
-	L = (L << 8) + (BYTE) (zv->RxHdr[ZP1]);
-	return ((L << 8) + (BYTE) (zv->RxHdr[ZP0]));
-}
-
-void ZSendRInit(PFileVar fv, PZVar zv)
-{
-	zv->Pos = 0;
-	ZStoHdr(zv, 0);
-	zv->TxHdr[ZF0] = /* CANFC32 | */ CANFDX | CANOVIO;
-	if (zv->CtlEsc)
-		zv->TxHdr[ZF0] = zv->TxHdr[ZF0] | ESCCTL;
-	ZShHdr(zv, ZRINIT);
-	FTSetTimeOut(fv, IniTimeOut);
-}
-
-void ZSendRQInit(PFileVar fv, PZVar zv, PComVar cv)
-{
-	ZStoHdr(zv, 0);
-	ZShHdr(zv, ZRQINIT);
-}
-
-void ZSendRPOS(PFileVar fv, PZVar zv)
-{
-	ZStoHdr(zv, zv->Pos);
-	ZShHdr(zv, ZRPOS);
-	FTSetTimeOut(fv, zv->TimeOut);
-}
-
-void ZSendACK(PFileVar fv, PZVar zv)
-{
-	ZStoHdr(zv, 0);
-	ZShHdr(zv, ZACK);
-	FTSetTimeOut(fv, zv->TimeOut);
-}
-
-void ZSendNAK(PZVar zv)
-{
-	ZStoHdr(zv, 0);
-	ZShHdr(zv, ZNAK);
-}
-
-void ZSendEOF(PZVar zv)
-{
-	ZStoHdr(zv, zv->Pos);
-	ZShHdr(zv, ZEOF);
-	zv->ZState = Z_SendEOF;
-}
-
-void ZSendFIN(PZVar zv)
-{
-	ZStoHdr(zv, 0);
-	ZShHdr(zv, ZFIN);
-}
-
-void ZSendCancel(PZVar zv)
-{
-	int i;
-
-	for (i = 0; i <= 7; i++)
-		zv->PktOut[i] = ZDLE;
-	for (i = 8; i <= 17; i++)
-		zv->PktOut[i] = 0x08;
-	zv->PktOutCount = 18;
-	zv->PktOutPtr = 0;
-	zv->Sending = TRUE;
-	zv->ZState = Z_Cancel;
-
-	add_sendbuf("%s: ", __FUNCTION__);
-}
-
-void ZSendInitHdr(PZVar zv)
-{
-	ZStoHdr(zv, 0);
-	if (zv->CtlEsc)
-		zv->TxHdr[ZF0] = ESCCTL;
-	ZShHdr(zv, ZSINIT);
-	zv->ZState = Z_SendInitHdr;
-}
-
-void ZSendInitDat(PZVar zv)
-{
-	zv->CRC = 0;
-	zv->PktOutCount = 0;
-	ZPutBin(zv, &(zv->PktOutCount), 0);
-	zv->CRC = UpdateCRC(0, zv->CRC);
-
-	zv->PktOut[zv->PktOutCount] = ZDLE;
-	zv->PktOutCount++;
-	zv->PktOut[zv->PktOutCount] = ZCRCW;
-	zv->PktOutCount++;
-	zv->CRC = UpdateCRC(ZCRCW, zv->CRC);
-
-	ZPutBin(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
-	ZPutBin(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
-
-	zv->PktOutPtr = 0;
-	zv->Sending = TRUE;
-	zv->ZState = Z_SendInitDat;
-
-	add_sendbuf("%s: ", __FUNCTION__);
-}
-
-void ZSendFileHdr(PZVar zv)
-{
-	ZStoHdr(zv, 0);
-	if (zv->BinFlag)
-		zv->TxHdr[ZF0] = ZCBIN;	/* binary file */
-	else
-		zv->TxHdr[ZF0] = ZCNL;	/* text file, convert newline */
-	ZSbHdr(zv, ZFILE);
-	zv->ZState = Z_SendFileHdr;
-}
-
-void ZSendFileDat(PFileVar fv, PZVar zv)
-{
-	int i, j;
-
-	if (!fv->FileOpen) {
-		ZSendCancel(zv);
-		return;
-	}
-	SetDlgItemText(fv->HWin, IDC_PROTOFNAME, &(fv->FullName[fv->DirLen]));
-
-	/* file name */
-	strncpy_s(zv->PktOut, sizeof(zv->PktOut), &(fv->FullName[fv->DirLen]),
-			  _TRUNCATE);
-	FTConvFName(zv->PktOut);	// replace ' ' by '_' in FName
-	zv->PktOutCount = strlen(zv->PktOut);
-	zv->CRC = 0;
-	for (i = 0; i <= zv->PktOutCount - 1; i++)
-		zv->CRC = UpdateCRC(zv->PktOut[i], zv->CRC);
-	ZPutBin(zv, &(zv->PktOutCount), 0);
-	zv->CRC = UpdateCRC(0, zv->CRC);
-	/* file size */
-	fv->FileSize = GetFSize(fv->FullName);
-
-	/* timestamp */
-	fv->FileMtime = GetFMtime(fv->FullName);
-
-	// \x83t\x83@\x83C\x83\x8B\x82̃^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82ƃp\x81[\x83~\x83b\x83V\x83\x87\x83\x93\x82\xE0\x91\x97\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x81B(2007.12.20 maya, yutaka)
-	_snprintf_s(&(zv->PktOut[zv->PktOutCount]),
-				sizeof(zv->PktOut) - zv->PktOutCount, _TRUNCATE,
-				"%lu %lo %o", fv->FileSize, fv->FileMtime,
-				0644 | _S_IFREG);
-	j = strlen(&(zv->PktOut[zv->PktOutCount])) - 1;
-	for (i = 0; i <= j; i++) {
-		zv->CRC = UpdateCRC(zv->PktOut[zv->PktOutCount], zv->CRC);
-		zv->PktOutCount++;
-	}
-
-	ZPutBin(zv, &(zv->PktOutCount), 0);
-	zv->CRC = UpdateCRC(0, zv->CRC);
-	zv->PktOut[zv->PktOutCount] = ZDLE;
-	zv->PktOutCount++;
-	zv->PktOut[zv->PktOutCount] = ZCRCW;
-	zv->PktOutCount++;
-	zv->CRC = UpdateCRC(ZCRCW, zv->CRC);
-
-	ZPutBin(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
-	ZPutBin(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
-
-	zv->PktOutPtr = 0;
-	zv->Sending = TRUE;
-	zv->ZState = Z_SendFileDat;
-
-	fv->ByteCount = 0;
-	fv->ProgStat = 0;
-	fv->StartTime = GetTickCount();
-	SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount);
-	SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS,
-				  fv->ByteCount, fv->FileSize, &fv->ProgStat);
-	SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount);
-
-	add_sendbuf("%s: ZFILE: ZF0=%x ZF1=%x ZF2=%x file=%s size=%lu",
-		__FUNCTION__,
-		zv->TxHdr[ZF0], zv->TxHdr[ZF1],zv->TxHdr[ZF2],
-		&(fv->FullName[fv->DirLen]), fv->FileSize);
-}
-
-void ZSendDataHdr(PZVar zv)
-{
-	ZStoHdr(zv, zv->Pos);
-	ZSbHdr(zv, ZDATA);
-	zv->ZState = Z_SendDataHdr;
-}
-
-void ZSendDataDat(PFileVar fv, PZVar zv)
-{
-	int c;
-	BYTE b;
-
-	if (zv->Pos >= fv->FileSize) {
-		zv->Pos = fv->FileSize;
-		ZSendEOF(zv);
-		return;
-	}
-
-	fv->ByteCount = zv->Pos;
-
-	if (fv->FileOpen && (zv->Pos < fv->FileSize))
-		_llseek(fv->FileHandle, zv->Pos, 0);
-
-	zv->CRC = 0;
-	zv->PktOutCount = 0;
-	do {
-		c = _lread(fv->FileHandle, &b, 1);
-		if (c > 0) {
-			ZPutBin(zv, &(zv->PktOutCount), b);
-			zv->CRC = UpdateCRC(b, zv->CRC);
-			fv->ByteCount++;
-		}
-	} while ((c != 0) && (zv->PktOutCount <= zv->MaxDataLen - 2));
-
-	SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount);
-	SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS,
-				  fv->ByteCount, fv->FileSize, &fv->ProgStat);
-	SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount);
-	zv->Pos = fv->ByteCount;
-
-	zv->PktOut[zv->PktOutCount] = ZDLE;
-	zv->PktOutCount++;
-	if (zv->Pos >= fv->FileSize)
-		b = ZCRCE;
-	else if ((zv->WinSize >= 0) && (zv->Pos - zv->LastPos > zv->WinSize))
-		b = ZCRCQ;
-	else
-		b = ZCRCG;
-	zv->PktOut[zv->PktOutCount] = b;
-	zv->PktOutCount++;
-	zv->CRC = UpdateCRC(b, zv->CRC);
-
-	ZPutBin(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
-	ZPutBin(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
-
-	zv->PktOutPtr = 0;
-	zv->Sending = TRUE;
-	if (b == ZCRCQ)
-		zv->ZState = Z_SendDataDat2;	/* wait response from receiver */
-	else
-		zv->ZState = Z_SendDataDat;
-
-	add_sendbuf("%s: ", __FUNCTION__);
-}
-
-void ZInit(PFileVar fv, PZVar zv, PComVar cv, PTTSet ts) {
-	int Max;
-	char uimsg[MAX_UIMSG];
-
-	zv->CtlEsc = ((ts->FTFlag & FT_ZESCCTL) != 0);
-	zv->MaxDataLen = ts->ZmodemDataLen;
-	zv->WinSize = ts->ZmodemWinSize;
-	fv->LogFlag = ((ts->LogFlag & LOG_Z) != 0);
-
-	if (zv->ZMode == IdZAuto) {
-		CommInsert1Byte(cv, 'B');
-		CommInsert1Byte(cv, ZDLE);
-		CommInsert1Byte(cv, ZPAD);
-		zv->ZMode = IdZReceive;
-	}
-
-	strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption), "Tera Term: ",
-			  _TRUNCATE);
-	switch (zv->ZMode) {
-	case IdZSend:
-		get_lang_msg("FILEDLG_TRANS_TITLE_ZSEND", uimsg, sizeof(uimsg),
-					 TitZSend, UILanguageFile);
-		strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg,
-				  _TRUNCATE);
-		break;
-	case IdZReceive:
-		get_lang_msg("FILEDLG_TRANS_TITLE_ZRCV", uimsg, sizeof(uimsg),
-					 TitZRcv, UILanguageFile);
-		strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg,
-				  _TRUNCATE);
-		break;
-	}
-
-	SetWindowText(fv->HWin, fv->DlgCaption);
-	SetDlgItemText(fv->HWin, IDC_PROTOPROT, "ZMODEM");
-
-	InitDlgProgress(fv->HWin, IDC_PROTOPROGRESS, &fv->ProgStat);
-	fv->StartTime = GetTickCount();
-
-	fv->FileSize = 0;
-	fv->FileMtime = 0;
-
-	zv->PktOutCount = 0;
-	zv->Pos = 0;
-	zv->LastPos = 0;
-	zv->ZPktState = Z_PktGetPAD;
-	zv->Sending = FALSE;
-	zv->LastSent = 0;
-	zv->CanCount = 5;
-
-	if (zv->MaxDataLen <= 0)
-		zv->MaxDataLen = 1024;
-	if (zv->MaxDataLen < 64)
-		zv->MaxDataLen = 64;
-
-	/* Time out & Max block size */
-	if (cv->PortType == IdTCPIP) {
-		zv->TimeOut = TCPIPTimeOut;
-		Max = 1024;
-	} else {
-		zv->TimeOut = NormalTimeOut;
-		if (ts->Baud <= 110) {
-			Max = 64;
-		}
-		else if (ts->Baud <= 300) {
-			Max = 128;
-		}
-		else if (ts->Baud <= 1200) {
-			Max = 256;
-		}
-		else if (ts->Baud <= 2400) {
-			Max = 512;
-		}
-		else {
-			Max = 1024;
-		}
-	}
-	if (zv->MaxDataLen > Max)
-		zv->MaxDataLen = Max;
-
-	if (fv->LogFlag)
-		fv->LogFile = _lcreat("ZMODEM.LOG", 0);
-	fv->LogState = 0;
-	fv->LogCount = 0;
-
-	switch (zv->ZMode) {
-	case IdZReceive:
-		zv->ZState = Z_RecvInit;
-		ZSendRInit(fv, zv);
-		break;
-	case IdZSend:
-		zv->ZState = Z_SendInit;
-
-		// \x83t\x83@\x83C\x83\x8B\x91\x97\x90M\x8AJ\x8En\x91O\x82ɁA"rz"\x82\xF0\x8E\xA9\x93\xAE\x93I\x82ɌĂяo\x82\xB7\x81B(2007.12.21 yutaka)
-		if (ts->ZModemRcvCommand[0] != '\0') {
-			ZWrite(fv, zv, cv, ts->ZModemRcvCommand,
-				   strlen(ts->ZModemRcvCommand));
-			ZWrite(fv, zv, cv, "\015", 1);
-		}
-
-		ZSendRQInit(fv, zv, cv);
-		break;
-	}
-}
-
-void ZTimeOutProc(PFileVar fv, PZVar zv, PComVar cv)
-{
-	switch (zv->ZState) {
-	case Z_RecvInit:
-		ZSendRInit(fv, zv);
-		break;
-	case Z_RecvInit2:
-		ZSendACK(fv, zv);		/* Ack for ZSINIT */
-		break;
-	case Z_RecvData:
-		ZSendRPOS(fv, zv);
-		break;
-	case Z_RecvFIN:
-		zv->ZState = Z_End;
-		break;
-	}
-}
-
-BOOL ZCheckHdr(PFileVar fv, PZVar zv)
-{
-	int i;
-	BOOL Ok;
-
-	if (zv->CRC32) {
-		zv->CRC3 = 0xFFFFFFFF;
-		for (i = 0; i <= 8; i++)
-			zv->CRC3 = UpdateCRC32(zv->PktIn[i], zv->CRC3);
-		Ok = zv->CRC3 == 0xDEBB20E3;
-	} else {
-		zv->CRC = 0;
-		for (i = 0; i <= 6; i++)
-			zv->CRC = UpdateCRC(zv->PktIn[i], zv->CRC);
-		Ok = zv->CRC == 0;
-	}
-
-	if (!Ok) {
-		switch (zv->ZState) {
-		case Z_RecvInit:
-			ZSendRInit(fv, zv);
-			break;
-		case Z_RecvData:
-			ZSendRPOS(fv, zv);
-			break;
-		}
-	}
-	zv->RxType = zv->PktIn[0];
-	for (i = 1; i <= 4; i++)
-		zv->RxHdr[i - 1] = zv->PktIn[i];
-
-	return Ok;
-}
-
-void ZParseRInit(PFileVar fv, PZVar zv)
-{
-	int Max;
-
-	if ((zv->ZState != Z_SendInit) && (zv->ZState != Z_SendEOF))
-		return;
-
-	if (fv->FileOpen)			// close previous file
-	{
-		_lclose(fv->FileHandle);
-		fv->FileOpen = FALSE;
-
+/* Tera Term
+ Copyright(C) 1994-1998 T. Teranishi
+ Copyright(C) 2010 Tera Term Project
+ All rights reserved. */
+
+/*
+ "ZMODEM.LOG"\x82̌\xA9\x95\xFB\x81F
+ \x81@"B"\x82̒\xBC\x8C\xE3\x82̓񌅂\xAA Header Type \x82\xF0\x8E\xA6\x82\xB7\x81B
+
+2A 2A 18 42 30 31 30 30 30 30 30 30 32 33 62 65     **.B0100000023be
+35 30 0D 8A 11 
+   \x81\xAB
+2A 2A 18 42 30 31 30 30 30 30 30 30 32 33 62 65     **.B0100000023be
+^^^^^^^^ZPAD+ZPAD+ZDLE 
+         ^^ZHEX
+            ^^^^ZRINIT\x81i2\x8C\x85\x82ŕ\\x82\xB7\x81j
+35 30 0D 8A 11 
+^^^^^CRC
+ */
+
+/* TTFILE.DLL, ZMODEM protocol */
+#include "teraterm.h"
+#include "tttypes.h"
+#include "ttftypes.h"
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "tt_res.h"
+
+#include "dlglib.h"
+#include "ftlib.h"
+#include "ttcommon.h"
+#include "ttlib.h"
+
+#define NormalTimeOut 10
+#define TCPIPTimeOut 0
+#define IniTimeOut 10
+#define FinTimeOut 3
+
+#define ZPAD   '*'
+#define ZDLE   0x18
+#define ZDLEE  0x58
+#define ZBIN   'A'
+#define ZHEX   'B'
+#define ZBIN32 'C'
+
+#define ZRQINIT 0
+#define ZRINIT	1
+#define ZSINIT	2
+#define ZACK	3
+#define ZFILE	4
+#define ZSKIP	5
+#define ZNAK	6
+#define ZABORT	7
+#define ZFIN	8
+#define ZRPOS	9
+#define ZDATA	10
+#define ZEOF	11
+#define ZFERR	12
+#define ZCRC	13
+#define ZCHALLENGE 14
+#define ZCOMPL	15
+#define ZCAN	16
+#define ZFREECNT 17
+#define ZCOMMAND 18
+#define ZSTDERR 19
+
+#define ZCRCE 'h'
+#define ZCRCG 'i'
+#define ZCRCQ 'j'
+#define ZCRCW 'k'
+#define ZRUB0 'l'
+#define ZRUB1 'm'
+
+#define ZF0 3
+#define ZF1 2
+#define ZF2 1
+#define ZF3 0
+#define ZP0 0
+#define ZP1 1
+#define ZP2 2
+#define ZP3 3
+
+#define CANFDX	0x01
+#define CANOVIO 0x02
+#define CANBRK	0x04
+#define CANCRY	0x08
+#define CANLZW	0x10
+#define CANFC32 0x20
+#define ESCCTL	0x40
+#define ESC8	0x80
+
+#define ZCBIN	1
+#define ZCNL	2
+
+/* \x83\x8D\x83O\x83t\x83@\x83C\x83\x8B\x97p\x83o\x83b\x83t\x83@ */
+#define LOGBUFSIZE 256
+
+static char recvbuf[LOGBUFSIZE];
+static char sendbuf[LOGBUFSIZE];
+
+static void add_recvbuf(char *fmt, ...)
+{
+	va_list arg;
+	char buf[128];
+
+	va_start(arg, fmt);
+	vsnprintf(buf, sizeof(buf), fmt, arg);
+	strncat_s(recvbuf, sizeof(recvbuf), buf, _TRUNCATE);
+	va_end(arg);
+}
+
+
+static void show_recvbuf(PFileVar fv)
+{
+	char *s;
+
+	s = recvbuf;
+	strncat_s(recvbuf, sizeof(recvbuf), "\015\012", _TRUNCATE);
+	_lwrite(fv->LogFile, s, strlen(s));
+
+	memset(recvbuf, 0, sizeof(recvbuf));
+}
+
+static void add_sendbuf(char *fmt, ...)
+{
+	va_list arg;
+	char buf[128];
+
+	va_start(arg, fmt);
+	vsnprintf(buf, sizeof(buf), fmt, arg);
+	strncat_s(sendbuf, sizeof(sendbuf), buf, _TRUNCATE);
+	va_end(arg);
+}
+
+static void show_sendbuf(PFileVar fv)
+{
+	char *s;
+
+	s = sendbuf;
+	strncat_s(sendbuf, sizeof(sendbuf), "\015\012", _TRUNCATE);
+	_lwrite(fv->LogFile, s, strlen(s));
+
+	memset(sendbuf, 0, sizeof(sendbuf));
+}
+
+static char *hdrtype_name(int type)
+{
+	static char *s[] = {
+		"ZRQINIT",
+		"ZRINIT",
+		"ZSINIT",
+		"ZACK",
+		"ZFILE",
+		"ZSKIP",
+		"ZNAK",
+		"ZABORT",
+		"ZFIN",
+		"ZRPOS",
+		"ZDATA",
+		"ZEOF",
+		"ZFERR",
+		"ZCRC",
+		"ZCHALLENGE",
+		"ZCOMPL",
+		"ZCAN",
+		"ZFREECNT",
+		"ZCOMMAND",
+		"ZSTDERR",
+	};
+
+	if (type >= ZRQINIT && type <= ZSTDERR)
+		return (s[type]);
+	else
+		return NULL;
+}
+
+int ZRead1Byte(PFileVar fv, PZVar zv, PComVar cv, LPBYTE b)
+{
+	char *s;
+
+	if (CommRead1Byte(cv, b) == 0)
+		return 0;
+
+	if (fv->LogFlag) {
+		if (fv->LogState == 0) {
+			// \x8Ec\x82\xE8\x82\xCCASCII\x95\\x8E\xA6\x82\xF0\x8Ds\x82\xA4
+			fv->FlushLogLineBuf = 1;
+			FTLog1Byte(fv, 0);
+			fv->FlushLogLineBuf = 0;
+
+			show_sendbuf(fv);
+
+			fv->LogState = 1;
+			fv->LogCount = 0;
+			s = "\015\012<<< Received\015\012";
+			_lwrite(fv->LogFile, s, strlen(s));
+		}
+		FTLog1Byte(fv, *b);
+	}
+	/* ignore 0x11, 0x13, 0x81 and 0x83 */
+	if (((*b & 0x7F) == 0x11) || ((*b & 0x7F) == 0x13))
+		return 0;
+	return 1;
+}
+
+int ZWrite(PFileVar fv, PZVar zv, PComVar cv, PCHAR B, int C)
+{
+	int i, j;
+	char *s;
+
+	i = CommBinaryOut(cv, B, C);
+
+	if (fv->LogFlag && (i > 0)) {
+		if (fv->LogState != 0) {
+			// \x8Ec\x82\xE8\x82\xCCASCII\x95\\x8E\xA6\x82\xF0\x8Ds\x82\xA4
+			fv->FlushLogLineBuf = 1;
+			FTLog1Byte(fv, 0);
+			fv->FlushLogLineBuf = 0;
+
+			show_recvbuf(fv);
+
+			fv->LogState = 0;
+			fv->LogCount = 0;
+			s = "\015\012Sending >>>\015\012";
+			_lwrite(fv->LogFile, s, strlen(s));
+		}
+		for (j = 0; j <= i - 1; j++)
+			FTLog1Byte(fv, B[j]);
+	}
+	return i;
+}
+
+void ZPutHex(PZVar zv, int *i, BYTE b)
+{
+	if (b <= 0x9f)
+		zv->PktOut[*i] = (b >> 4) + 0x30;
+	else
+		zv->PktOut[*i] = (b >> 4) + 0x57;
+
+	(*i)++;
+	if ((b & 0x0F) <= 0x09)
+		zv->PktOut[*i] = (b & 0x0F) + 0x30;
+	else
+		zv->PktOut[*i] = (b & 0x0F) + 0x57;
+
+	(*i)++;
+}
+
+void ZShHdr(PZVar zv, BYTE HdrType)
+{
+	int i;
+
+	zv->PktOut[0] = ZPAD;
+	zv->PktOut[1] = ZPAD;
+	zv->PktOut[2] = ZDLE;
+	zv->PktOut[3] = ZHEX;
+	zv->PktOutCount = 4;
+	ZPutHex(zv, &(zv->PktOutCount), HdrType);
+	zv->CRC = UpdateCRC(HdrType, 0);
+	for (i = 0; i <= 3; i++) {
+		ZPutHex(zv, &(zv->PktOutCount), zv->TxHdr[i]);
+		zv->CRC = UpdateCRC(zv->TxHdr[i], zv->CRC);
+	}
+	ZPutHex(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
+	ZPutHex(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
+	zv->PktOut[zv->PktOutCount] = 0x8D;
+	zv->PktOutCount++;
+	zv->PktOut[zv->PktOutCount] = 0x8A;
+	zv->PktOutCount++;
+
+	if ((HdrType != ZFIN) && (HdrType != ZACK)) {
+		zv->PktOut[zv->PktOutCount] = XON;
+		zv->PktOutCount++;
+	}
+
+	zv->PktOutPtr = 0;
+	zv->Sending = TRUE;
+
+	add_sendbuf("%s: %s", __FUNCTION__, hdrtype_name(HdrType));
+#if 0
+	if (HdrType == ZRPOS) {
+		LONG pos;
+		memcpy(&pos, zv->TxHdr[ZP0], 4);
+		add_sendbuf(" offset=%ld", pos);
+	}
+#endif
+}
+
+void ZPutBin(PZVar zv, int *i, BYTE b)
+{
+	switch (b) {
+	case 0x0D:
+	case 0x8D:
+		/* if (zv->CtlEsc ||
+		   ((zv->LastSent & 0x7f) == '@')) */
+//  {
+		zv->PktOut[*i] = ZDLE;
+		(*i)++;
+		b = b ^ 0x40;
+//  }
+		break;
+	case 0x10:
+	case 0x11:
+	case 0x13:
+	case ZDLE:
+	case 0x90:
+	case 0x91:
+	case 0x93:
+		zv->PktOut[*i] = ZDLE;
+		(*i)++;
+		b = b ^ 0x40;
+		break;
+	default:
+		if (zv->CtlEsc && ((b & 0x60) == 0)) {
+			zv->PktOut[*i] = ZDLE;
+			(*i)++;
+			b = b ^ 0x40;
+		}
+	}
+	zv->LastSent = b;
+	zv->PktOut[*i] = b;
+	(*i)++;
+}
+
+void ZSbHdr(PZVar zv, BYTE HdrType)
+{
+	int i;
+
+	zv->PktOut[0] = ZPAD;
+	zv->PktOut[1] = ZDLE;
+	zv->PktOut[2] = ZBIN;
+	zv->PktOutCount = 3;
+	ZPutBin(zv, &(zv->PktOutCount), HdrType);
+	zv->CRC = UpdateCRC(HdrType, 0);
+	for (i = 0; i <= 3; i++) {
+		ZPutBin(zv, &(zv->PktOutCount), zv->TxHdr[i]);
+		zv->CRC = UpdateCRC(zv->TxHdr[i], zv->CRC);
+	}
+	ZPutBin(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
+	ZPutBin(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
+
+	zv->PktOutPtr = 0;
+	zv->Sending = TRUE;
+
+	add_sendbuf("%s: %s ", __FUNCTION__, hdrtype_name(HdrType));
+}
+
+void ZStoHdr(PZVar zv, LONG Pos)
+{
+	zv->TxHdr[ZP0] = LOBYTE(LOWORD(Pos));
+	zv->TxHdr[ZP1] = HIBYTE(LOWORD(Pos));
+	zv->TxHdr[ZP2] = LOBYTE(HIWORD(Pos));
+	zv->TxHdr[ZP3] = HIBYTE(HIWORD(Pos));
+}
+
+
+LONG ZRclHdr(PZVar zv)
+{
+	LONG L;
+
+	L = (BYTE) (zv->RxHdr[ZP3]);
+	L = (L << 8) + (BYTE) (zv->RxHdr[ZP2]);
+	L = (L << 8) + (BYTE) (zv->RxHdr[ZP1]);
+	return ((L << 8) + (BYTE) (zv->RxHdr[ZP0]));
+}
+
+void ZSendRInit(PFileVar fv, PZVar zv)
+{
+	zv->Pos = 0;
+	ZStoHdr(zv, 0);
+	zv->TxHdr[ZF0] = /* CANFC32 | */ CANFDX | CANOVIO;
+	if (zv->CtlEsc)
+		zv->TxHdr[ZF0] = zv->TxHdr[ZF0] | ESCCTL;
+	ZShHdr(zv, ZRINIT);
+	FTSetTimeOut(fv, IniTimeOut);
+}
+
+void ZSendRQInit(PFileVar fv, PZVar zv, PComVar cv)
+{
+	ZStoHdr(zv, 0);
+	ZShHdr(zv, ZRQINIT);
+}
+
+void ZSendRPOS(PFileVar fv, PZVar zv)
+{
+	ZStoHdr(zv, zv->Pos);
+	ZShHdr(zv, ZRPOS);
+	FTSetTimeOut(fv, zv->TimeOut);
+}
+
+void ZSendACK(PFileVar fv, PZVar zv)
+{
+	ZStoHdr(zv, 0);
+	ZShHdr(zv, ZACK);
+	FTSetTimeOut(fv, zv->TimeOut);
+}
+
+void ZSendNAK(PZVar zv)
+{
+	ZStoHdr(zv, 0);
+	ZShHdr(zv, ZNAK);
+}
+
+void ZSendEOF(PZVar zv)
+{
+	ZStoHdr(zv, zv->Pos);
+	ZShHdr(zv, ZEOF);
+	zv->ZState = Z_SendEOF;
+}
+
+void ZSendFIN(PZVar zv)
+{
+	ZStoHdr(zv, 0);
+	ZShHdr(zv, ZFIN);
+}
+
+void ZSendCancel(PZVar zv)
+{
+	int i;
+
+	for (i = 0; i <= 7; i++)
+		zv->PktOut[i] = ZDLE;
+	for (i = 8; i <= 17; i++)
+		zv->PktOut[i] = 0x08;
+	zv->PktOutCount = 18;
+	zv->PktOutPtr = 0;
+	zv->Sending = TRUE;
+	zv->ZState = Z_Cancel;
+
+	add_sendbuf("%s: ", __FUNCTION__);
+}
+
+void ZSendInitHdr(PZVar zv)
+{
+	ZStoHdr(zv, 0);
+	if (zv->CtlEsc)
+		zv->TxHdr[ZF0] = ESCCTL;
+	ZShHdr(zv, ZSINIT);
+	zv->ZState = Z_SendInitHdr;
+}
+
+void ZSendInitDat(PZVar zv)
+{
+	zv->CRC = 0;
+	zv->PktOutCount = 0;
+	ZPutBin(zv, &(zv->PktOutCount), 0);
+	zv->CRC = UpdateCRC(0, zv->CRC);
+
+	zv->PktOut[zv->PktOutCount] = ZDLE;
+	zv->PktOutCount++;
+	zv->PktOut[zv->PktOutCount] = ZCRCW;
+	zv->PktOutCount++;
+	zv->CRC = UpdateCRC(ZCRCW, zv->CRC);
+
+	ZPutBin(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
+	ZPutBin(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
+
+	zv->PktOutPtr = 0;
+	zv->Sending = TRUE;
+	zv->ZState = Z_SendInitDat;
+
+	add_sendbuf("%s: ", __FUNCTION__);
+}
+
+void ZSendFileHdr(PZVar zv)
+{
+	ZStoHdr(zv, 0);
+	if (zv->BinFlag)
+		zv->TxHdr[ZF0] = ZCBIN;	/* binary file */
+	else
+		zv->TxHdr[ZF0] = ZCNL;	/* text file, convert newline */
+	ZSbHdr(zv, ZFILE);
+	zv->ZState = Z_SendFileHdr;
+}
+
+void ZSendFileDat(PFileVar fv, PZVar zv)
+{
+	int i, j;
+
+	if (!fv->FileOpen) {
+		ZSendCancel(zv);
+		return;
+	}
+	SetDlgItemText(fv->HWin, IDC_PROTOFNAME, &(fv->FullName[fv->DirLen]));
+
+	/* file name */
+	strncpy_s(zv->PktOut, sizeof(zv->PktOut), &(fv->FullName[fv->DirLen]),
+			  _TRUNCATE);
+	FTConvFName(zv->PktOut);	// replace ' ' by '_' in FName
+	zv->PktOutCount = strlen(zv->PktOut);
+	zv->CRC = 0;
+	for (i = 0; i <= zv->PktOutCount - 1; i++)
+		zv->CRC = UpdateCRC(zv->PktOut[i], zv->CRC);
+	ZPutBin(zv, &(zv->PktOutCount), 0);
+	zv->CRC = UpdateCRC(0, zv->CRC);
+	/* file size */
+	fv->FileSize = GetFSize(fv->FullName);
+
+	/* timestamp */
+	fv->FileMtime = GetFMtime(fv->FullName);
+
+	// \x83t\x83@\x83C\x83\x8B\x82̃^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82ƃp\x81[\x83~\x83b\x83V\x83\x87\x83\x93\x82\xE0\x91\x97\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x81B(2007.12.20 maya, yutaka)
+	_snprintf_s(&(zv->PktOut[zv->PktOutCount]),
+				sizeof(zv->PktOut) - zv->PktOutCount, _TRUNCATE,
+				"%lu %lo %o", fv->FileSize, fv->FileMtime,
+				0644 | _S_IFREG);
+	j = strlen(&(zv->PktOut[zv->PktOutCount])) - 1;
+	for (i = 0; i <= j; i++) {
+		zv->CRC = UpdateCRC(zv->PktOut[zv->PktOutCount], zv->CRC);
+		zv->PktOutCount++;
+	}
+
+	ZPutBin(zv, &(zv->PktOutCount), 0);
+	zv->CRC = UpdateCRC(0, zv->CRC);
+	zv->PktOut[zv->PktOutCount] = ZDLE;
+	zv->PktOutCount++;
+	zv->PktOut[zv->PktOutCount] = ZCRCW;
+	zv->PktOutCount++;
+	zv->CRC = UpdateCRC(ZCRCW, zv->CRC);
+
+	ZPutBin(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
+	ZPutBin(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
+
+	zv->PktOutPtr = 0;
+	zv->Sending = TRUE;
+	zv->ZState = Z_SendFileDat;
+
+	fv->ByteCount = 0;
+	fv->ProgStat = 0;
+	fv->StartTime = GetTickCount();
+	SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount);
+	SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS,
+				  fv->ByteCount, fv->FileSize, &fv->ProgStat);
+	SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount);
+
+	add_sendbuf("%s: ZFILE: ZF0=%x ZF1=%x ZF2=%x file=%s size=%lu",
+		__FUNCTION__,
+		zv->TxHdr[ZF0], zv->TxHdr[ZF1],zv->TxHdr[ZF2],
+		&(fv->FullName[fv->DirLen]), fv->FileSize);
+}
+
+void ZSendDataHdr(PZVar zv)
+{
+	ZStoHdr(zv, zv->Pos);
+	ZSbHdr(zv, ZDATA);
+	zv->ZState = Z_SendDataHdr;
+}
+
+void ZSendDataDat(PFileVar fv, PZVar zv)
+{
+	int c;
+	BYTE b;
+
+	if (zv->Pos >= fv->FileSize) {
+		zv->Pos = fv->FileSize;
+		ZSendEOF(zv);
+		return;
+	}
+
+	fv->ByteCount = zv->Pos;
+
+	if (fv->FileOpen && (zv->Pos < fv->FileSize))
+		_llseek(fv->FileHandle, zv->Pos, 0);
+
+	zv->CRC = 0;
+	zv->PktOutCount = 0;
+	do {
+		c = _lread(fv->FileHandle, &b, 1);
+		if (c > 0) {
+			ZPutBin(zv, &(zv->PktOutCount), b);
+			zv->CRC = UpdateCRC(b, zv->CRC);
+			fv->ByteCount++;
+		}
+	} while ((c != 0) && (zv->PktOutCount <= zv->MaxDataLen - 2));
+
+	SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount);
+	SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS,
+				  fv->ByteCount, fv->FileSize, &fv->ProgStat);
+	SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount);
+	zv->Pos = fv->ByteCount;
+
+	zv->PktOut[zv->PktOutCount] = ZDLE;
+	zv->PktOutCount++;
+	if (zv->Pos >= fv->FileSize)
+		b = ZCRCE;
+	else if ((zv->WinSize >= 0) && (zv->Pos - zv->LastPos > zv->WinSize))
+		b = ZCRCQ;
+	else
+		b = ZCRCG;
+	zv->PktOut[zv->PktOutCount] = b;
+	zv->PktOutCount++;
+	zv->CRC = UpdateCRC(b, zv->CRC);
+
+	ZPutBin(zv, &(zv->PktOutCount), HIBYTE(zv->CRC));
+	ZPutBin(zv, &(zv->PktOutCount), LOBYTE(zv->CRC));
+
+	zv->PktOutPtr = 0;
+	zv->Sending = TRUE;
+	if (b == ZCRCQ)
+		zv->ZState = Z_SendDataDat2;	/* wait response from receiver */
+	else
+		zv->ZState = Z_SendDataDat;
+
+	add_sendbuf("%s: ", __FUNCTION__);
+}
+
+void ZInit(PFileVar fv, PZVar zv, PComVar cv, PTTSet ts) {
+	int Max;
+	char uimsg[MAX_UIMSG];
+
+	zv->CtlEsc = ((ts->FTFlag & FT_ZESCCTL) != 0);
+	zv->MaxDataLen = ts->ZmodemDataLen;
+	zv->WinSize = ts->ZmodemWinSize;
+	fv->LogFlag = ((ts->LogFlag & LOG_Z) != 0);
+
+	if (zv->ZMode == IdZAuto) {
+		CommInsert1Byte(cv, 'B');
+		CommInsert1Byte(cv, ZDLE);
+		CommInsert1Byte(cv, ZPAD);
+		zv->ZMode = IdZReceive;
+	}
+
+	strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption), "Tera Term: ",
+			  _TRUNCATE);
+	switch (zv->ZMode) {
+	case IdZSend:
+		get_lang_msg("FILEDLG_TRANS_TITLE_ZSEND", uimsg, sizeof(uimsg),
+					 TitZSend, UILanguageFile);
+		strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg,
+				  _TRUNCATE);
+		break;
+	case IdZReceive:
+		get_lang_msg("FILEDLG_TRANS_TITLE_ZRCV", uimsg, sizeof(uimsg),
+					 TitZRcv, UILanguageFile);
+		strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg,
+				  _TRUNCATE);
+		break;
+	}
+
+	SetWindowText(fv->HWin, fv->DlgCaption);
+	SetDlgItemText(fv->HWin, IDC_PROTOPROT, "ZMODEM");
+
+	InitDlgProgress(fv->HWin, IDC_PROTOPROGRESS, &fv->ProgStat);
+	fv->StartTime = GetTickCount();
+
+	fv->FileSize = 0;
+	fv->FileMtime = 0;
+
+	zv->PktOutCount = 0;
+	zv->Pos = 0;
+	zv->LastPos = 0;
+	zv->ZPktState = Z_PktGetPAD;
+	zv->Sending = FALSE;
+	zv->LastSent = 0;
+	zv->CanCount = 5;
+
+	if (zv->MaxDataLen <= 0)
+		zv->MaxDataLen = 1024;
+	if (zv->MaxDataLen < 64)
+		zv->MaxDataLen = 64;
+
+	/* Time out & Max block size */
+	if (cv->PortType == IdTCPIP) {
+		zv->TimeOut = TCPIPTimeOut;
+		Max = 1024;
+	} else {
+		zv->TimeOut = NormalTimeOut;
+		if (ts->Baud <= 110) {
+			Max = 64;
+		}
+		else if (ts->Baud <= 300) {
+			Max = 128;
+		}
+		else if (ts->Baud <= 1200) {
+			Max = 256;
+		}
+		else if (ts->Baud <= 2400) {
+			Max = 512;
+		}
+		else {
+			Max = 1024;
+		}
+	}
+	if (zv->MaxDataLen > Max)
+		zv->MaxDataLen = Max;
+
+	if (fv->LogFlag)
+		fv->LogFile = _lcreat("ZMODEM.LOG", 0);
+	fv->LogState = 0;
+	fv->LogCount = 0;
+
+	switch (zv->ZMode) {
+	case IdZReceive:
+		zv->ZState = Z_RecvInit;
+		ZSendRInit(fv, zv);
+		break;
+	case IdZSend:
+		zv->ZState = Z_SendInit;
+
+		// \x83t\x83@\x83C\x83\x8B\x91\x97\x90M\x8AJ\x8En\x91O\x82ɁA"rz"\x82\xF0\x8E\xA9\x93\xAE\x93I\x82ɌĂяo\x82\xB7\x81B(2007.12.21 yutaka)
+		if (ts->ZModemRcvCommand[0] != '\0') {
+			ZWrite(fv, zv, cv, ts->ZModemRcvCommand,
+				   strlen(ts->ZModemRcvCommand));
+			ZWrite(fv, zv, cv, "\015", 1);
+		}
+
+		ZSendRQInit(fv, zv, cv);
+		break;
+	}
+}
+
+void ZTimeOutProc(PFileVar fv, PZVar zv, PComVar cv)
+{
+	switch (zv->ZState) {
+	case Z_RecvInit:
+		ZSendRInit(fv, zv);
+		break;
+	case Z_RecvInit2:
+		ZSendACK(fv, zv);		/* Ack for ZSINIT */
+		break;
+	case Z_RecvData:
+		ZSendRPOS(fv, zv);
+		break;
+	case Z_RecvFIN:
+		zv->ZState = Z_End;
+		break;
+	}
+}
+
+BOOL ZCheckHdr(PFileVar fv, PZVar zv)
+{
+	int i;
+	BOOL Ok;
+
+	if (zv->CRC32) {
+		zv->CRC3 = 0xFFFFFFFF;
+		for (i = 0; i <= 8; i++)
+			zv->CRC3 = UpdateCRC32(zv->PktIn[i], zv->CRC3);
+		Ok = zv->CRC3 == 0xDEBB20E3;
+	} else {
+		zv->CRC = 0;
+		for (i = 0; i <= 6; i++)
+			zv->CRC = UpdateCRC(zv->PktIn[i], zv->CRC);
+		Ok = zv->CRC == 0;
+	}
+
+	if (!Ok) {
+		switch (zv->ZState) {
+		case Z_RecvInit:
+			ZSendRInit(fv, zv);
+			break;
+		case Z_RecvData:
+			ZSendRPOS(fv, zv);
+			break;
+		}
+	}
+	zv->RxType = zv->PktIn[0];
+	for (i = 1; i <= 4; i++)
+		zv->RxHdr[i - 1] = zv->PktIn[i];
+
+	return Ok;
+}
+
+void ZParseRInit(PFileVar fv, PZVar zv)
+{
+	int Max;
+
+	if ((zv->ZState != Z_SendInit) && (zv->ZState != Z_SendEOF))
+		return;
+
+	if (fv->FileOpen)			// close previous file
+	{
+		_lclose(fv->FileHandle);
+		fv->FileOpen = FALSE;
+
 		if (fv->FileMtime > 0) {
 			SetFMtime(fv->FullName, fv->FileMtime);
-		}
-	}
-
-	if (!GetNextFname(fv)) {
-		zv->ZState = Z_SendFIN;
-		ZSendFIN(zv);
-		return;
-	}
-
-	/* file open */
-	fv->FileHandle = _lopen(fv->FullName, OF_READ);
-	fv->FileOpen = fv->FileHandle > 0;
-
-	if (zv->CtlEsc) {
-		if ((zv->RxHdr[ZF0] & ESCCTL) == 0) {
-			zv->ZState = Z_SendInitHdr;
-			ZSendInitHdr(zv);
-			return;
-		}
-	} else
-		zv->CtlEsc = (zv->RxHdr[ZF0] & ESCCTL) != 0;
-
-	Max = (zv->RxHdr[ZP1] << 8) + zv->RxHdr[ZP0];
-	if (Max <= 0)
-		Max = 1024;
-	if (zv->MaxDataLen > Max)
-		zv->MaxDataLen = Max;
-
-	zv->ZState = Z_SendFileHdr;
-	ZSendFileHdr(zv);
-}
-
-BOOL ZParseSInit(PZVar zv)
-{
-	if (zv->ZState != Z_RecvInit)
-		return FALSE;
-	zv->ZState = Z_RecvInit2;
-	zv->CtlEsc = zv->CtlEsc || ((zv->RxHdr[ZF0] & ESCCTL) != 0);
-	return TRUE;
-}
-
-void ZParseHdr(PFileVar fv, PZVar zv, PComVar cv)
-{
-	add_recvbuf("%s: RxType %s ", __FUNCTION__, hdrtype_name(zv->RxType));
-
-	switch (zv->RxType) {
-	case ZRQINIT:
-		if (zv->ZState == Z_RecvInit)
-			ZSendRInit(fv, zv);
-		break;
-	case ZRINIT:
-		ZParseRInit(fv, zv);
-		break;
-	case ZSINIT:
-		zv->ZPktState = Z_PktGetData;
-		if (zv->ZState == Z_RecvInit)
-			FTSetTimeOut(fv, IniTimeOut);
-		break;
-	case ZACK:
-		switch (zv->ZState) {
-		case Z_SendInitDat:
-			ZSendFileHdr(zv);
-			break;
-		case Z_SendDataDat2:
-			zv->LastPos = ZRclHdr(zv);
-			if (zv->Pos == zv->LastPos)
-				ZSendDataDat(fv, zv);
-			else {
-				zv->Pos = zv->LastPos;
-				ZSendDataHdr(zv);
-			}
-			break;
-		}
-		break;
-	case ZFILE:
-		zv->ZPktState = Z_PktGetData;
-		if ((zv->ZState == Z_RecvInit) || (zv->ZState == Z_RecvInit2)) {
-			zv->BinFlag = zv->RxHdr[ZF0] != ZCNL;
-			FTSetTimeOut(fv, IniTimeOut);
-		}
-		break;
-	case ZSKIP:
-		if (fv->FileOpen) {
-			_lclose(fv->FileHandle);
-			// \x83T\x81[\x83o\x91\xA4\x82ɑ\xB6\x8D݂\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x82𑗐M\x82\xB5\x82悤\x82Ƃ\xB7\x82\xE9\x82ƁAZParseRInit()\x82œ\xF1\x8Fdclose\x82ɂȂ邽\x82߁A
-			// \x82\xB1\x82\xB1\x82Ńt\x83\x89\x83O\x82𗎂Ƃ\xB5\x82Ă\xA8\x82\xAD\x81B (2007.12.20 yutaka)
-			fv->FileOpen = FALSE;
-		}
-		ZStoHdr(zv, 0);
-		if (zv->CtlEsc)
-			zv->RxHdr[ZF0] = ESCCTL;
-		zv->ZState = Z_SendInit;
-		ZParseRInit(fv, zv);
-		break;
-	case ZNAK:
-		switch (zv->ZState) {
-		case Z_SendInitHdr:
-		case Z_SendInitDat:
-			ZSendInitHdr(zv);
-			break;
-		case Z_SendFileHdr:
-		case Z_SendFileDat:
-			ZSendFileHdr(zv);
-			break;
-		}
-		break;
-	case ZABORT:
-	case ZFERR:
-		if (zv->ZMode == IdZSend) {
-			zv->ZState = Z_SendFIN;
-			ZSendFIN(zv);
-		}
-		break;
-	case ZFIN:
-		fv->Success = TRUE;
-		if (zv->ZMode == IdZReceive) {
-			zv->ZState = Z_RecvFIN;
-			ZSendFIN(zv);
-			zv->CanCount = 2;
-			FTSetTimeOut(fv, FinTimeOut);
-		} else {
-			zv->ZState = Z_End;
-			ZWrite(fv, zv, cv, "OO", 2);
-		}
-		break;
-	case ZRPOS:
-		switch (zv->ZState) {
-		case Z_SendFileDat:
-		case Z_SendDataHdr:
-		case Z_SendDataDat:
-		case Z_SendDataDat2:
-		case Z_SendEOF:
-			zv->Pos = ZRclHdr(zv);
-			zv->LastPos = zv->Pos;
-			add_recvbuf(" pos=%ld", zv->Pos);
-			ZSendDataHdr(zv);
-			break;
-		}
-		break;
-	case ZDATA:
-		if (zv->Pos != ZRclHdr(zv)) {
-			ZSendRPOS(fv, zv);
-			return;
-		} else {
-			FTSetTimeOut(fv, zv->TimeOut);
-			zv->ZPktState = Z_PktGetData;
-		}
-		break;
-	case ZEOF:
-		if (zv->Pos != ZRclHdr(zv)) {
-			ZSendRPOS(fv, zv);
-			return;
-		} else {
-			if (fv->FileOpen) {
-				if (zv->CRRecv) {
-					zv->CRRecv = FALSE;
-					_lwrite(fv->FileHandle, "\012", 1);
-				}
-				_lclose(fv->FileHandle);
-				fv->FileOpen = FALSE;
-
-				if (fv->FileMtime > 0) {
-					SetFMtime(fv->FullName, fv->FileMtime);
-				}
-			}
-			zv->ZState = Z_RecvInit;
-			ZSendRInit(fv, zv);
-		}
-		break;
-	}
-	zv->Quoted = FALSE;
-	zv->CRC = 0;
-	zv->CRC3 = 0xFFFFFFFF;
-	zv->PktInPtr = 0;
-	zv->PktInCount = 0;
-}
-
-BOOL ZParseFile(PFileVar fv, PZVar zv)
-{
-	BYTE b;
-	int i, j;
-	char *p;
+		}
+	}
+
+	if (!GetNextFname(fv)) {
+		zv->ZState = Z_SendFIN;
+		ZSendFIN(zv);
+		return;
+	}
+
+	/* file open */
+	fv->FileHandle = _lopen(fv->FullName, OF_READ);
+	fv->FileOpen = fv->FileHandle > 0;
+
+	if (zv->CtlEsc) {
+		if ((zv->RxHdr[ZF0] & ESCCTL) == 0) {
+			zv->ZState = Z_SendInitHdr;
+			ZSendInitHdr(zv);
+			return;
+		}
+	} else
+		zv->CtlEsc = (zv->RxHdr[ZF0] & ESCCTL) != 0;
+
+	Max = (zv->RxHdr[ZP1] << 8) + zv->RxHdr[ZP0];
+	if (Max <= 0)
+		Max = 1024;
+	if (zv->MaxDataLen > Max)
+		zv->MaxDataLen = Max;
+
+	zv->ZState = Z_SendFileHdr;
+	ZSendFileHdr(zv);
+}
+
+BOOL ZParseSInit(PZVar zv)
+{
+	if (zv->ZState != Z_RecvInit)
+		return FALSE;
+	zv->ZState = Z_RecvInit2;
+	zv->CtlEsc = zv->CtlEsc || ((zv->RxHdr[ZF0] & ESCCTL) != 0);
+	return TRUE;
+}
+
+void ZParseHdr(PFileVar fv, PZVar zv, PComVar cv)
+{
+	add_recvbuf("%s: RxType %s ", __FUNCTION__, hdrtype_name(zv->RxType));
+
+	switch (zv->RxType) {
+	case ZRQINIT:
+		if (zv->ZState == Z_RecvInit)
+			ZSendRInit(fv, zv);
+		break;
+	case ZRINIT:
+		ZParseRInit(fv, zv);
+		break;
+	case ZSINIT:
+		zv->ZPktState = Z_PktGetData;
+		if (zv->ZState == Z_RecvInit)
+			FTSetTimeOut(fv, IniTimeOut);
+		break;
+	case ZACK:
+		switch (zv->ZState) {
+		case Z_SendInitDat:
+			ZSendFileHdr(zv);
+			break;
+		case Z_SendDataDat2:
+			zv->LastPos = ZRclHdr(zv);
+			if (zv->Pos == zv->LastPos)
+				ZSendDataDat(fv, zv);
+			else {
+				zv->Pos = zv->LastPos;
+				ZSendDataHdr(zv);
+			}
+			break;
+		}
+		break;
+	case ZFILE:
+		zv->ZPktState = Z_PktGetData;
+		if ((zv->ZState == Z_RecvInit) || (zv->ZState == Z_RecvInit2)) {
+			zv->BinFlag = zv->RxHdr[ZF0] != ZCNL;
+			FTSetTimeOut(fv, IniTimeOut);
+		}
+		break;
+	case ZSKIP:
+		if (fv->FileOpen) {
+			_lclose(fv->FileHandle);
+			// \x83T\x81[\x83o\x91\xA4\x82ɑ\xB6\x8D݂\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x82𑗐M\x82\xB5\x82悤\x82Ƃ\xB7\x82\xE9\x82ƁAZParseRInit()\x82œ\xF1\x8Fdclose\x82ɂȂ邽\x82߁A
+			// \x82\xB1\x82\xB1\x82Ńt\x83\x89\x83O\x82𗎂Ƃ\xB5\x82Ă\xA8\x82\xAD\x81B (2007.12.20 yutaka)
+			fv->FileOpen = FALSE;
+		}
+		ZStoHdr(zv, 0);
+		if (zv->CtlEsc)
+			zv->RxHdr[ZF0] = ESCCTL;
+		zv->ZState = Z_SendInit;
+		ZParseRInit(fv, zv);
+		break;
+	case ZNAK:
+		switch (zv->ZState) {
+		case Z_SendInitHdr:
+		case Z_SendInitDat:
+			ZSendInitHdr(zv);
+			break;
+		case Z_SendFileHdr:
+		case Z_SendFileDat:
+			ZSendFileHdr(zv);
+			break;
+		}
+		break;
+	case ZABORT:
+	case ZFERR:
+		if (zv->ZMode == IdZSend) {
+			zv->ZState = Z_SendFIN;
+			ZSendFIN(zv);
+		}
+		break;
+	case ZFIN:
+		fv->Success = TRUE;
+		if (zv->ZMode == IdZReceive) {
+			zv->ZState = Z_RecvFIN;
+			ZSendFIN(zv);
+			zv->CanCount = 2;
+			FTSetTimeOut(fv, FinTimeOut);
+		} else {
+			zv->ZState = Z_End;
+			ZWrite(fv, zv, cv, "OO", 2);
+		}
+		break;
+	case ZRPOS:
+		switch (zv->ZState) {
+		case Z_SendFileDat:
+		case Z_SendDataHdr:
+		case Z_SendDataDat:
+		case Z_SendDataDat2:
+		case Z_SendEOF:
+			zv->Pos = ZRclHdr(zv);
+			zv->LastPos = zv->Pos;
+			add_recvbuf(" pos=%ld", zv->Pos);
+			ZSendDataHdr(zv);
+			break;
+		}
+		break;
+	case ZDATA:
+		if (zv->Pos != ZRclHdr(zv)) {
+			ZSendRPOS(fv, zv);
+			return;
+		} else {
+			FTSetTimeOut(fv, zv->TimeOut);
+			zv->ZPktState = Z_PktGetData;
+		}
+		break;
+	case ZEOF:
+		if (zv->Pos != ZRclHdr(zv)) {
+			ZSendRPOS(fv, zv);
+			return;
+		} else {
+			if (fv->FileOpen) {
+				if (zv->CRRecv) {
+					zv->CRRecv = FALSE;
+					_lwrite(fv->FileHandle, "\012", 1);
+				}
+				_lclose(fv->FileHandle);
+				fv->FileOpen = FALSE;
+
+				if (fv->FileMtime > 0) {
+					SetFMtime(fv->FullName, fv->FileMtime);
+				}
+			}
+			zv->ZState = Z_RecvInit;
+			ZSendRInit(fv, zv);
+		}
+		break;
+	}
+	zv->Quoted = FALSE;
+	zv->CRC = 0;
+	zv->CRC3 = 0xFFFFFFFF;
+	zv->PktInPtr = 0;
+	zv->PktInCount = 0;
+}
+
+BOOL ZParseFile(PFileVar fv, PZVar zv)
+{
+	BYTE b;
+	int i, j;
+	char *p;
 	long modtime;
 	int mode;
 	int ret;
-
-	if ((zv->ZState != Z_RecvInit) && (zv->ZState != Z_RecvInit2))
-		return FALSE;
-	/* kill timer */
-	FTSetTimeOut(fv, 0);
-	zv->CRRecv = FALSE;
-
-	/* file name */
-	zv->PktIn[zv->PktInPtr] = 0;	/* for safety */
-
-	GetFileNamePos(zv->PktIn, &i, &j);
-	strncpy_s(&(fv->FullName[fv->DirLen]),
-			  sizeof(fv->FullName) - fv->DirLen, &(zv->PktIn[j]),
-			  _TRUNCATE);
-	/* file open */
-	if (!FTCreateFile(fv))
-		return FALSE;
-
-	/* file size */
-	i = strlen(zv->PktIn) + 1;
-	do {
-		b = zv->PktIn[i];
-		if ((b >= 0x30) && (b <= 0x39))
-			fv->FileSize = fv->FileSize * 10 + b - 0x30;
-		i++;
-	} while ((b >= 0x30) && (b <= 0x39));
-
-	/* file mtime */
+
+	if ((zv->ZState != Z_RecvInit) && (zv->ZState != Z_RecvInit2))
+		return FALSE;
+	/* kill timer */
+	FTSetTimeOut(fv, 0);
+	zv->CRRecv = FALSE;
+
+	/* file name */
+	zv->PktIn[zv->PktInPtr] = 0;	/* for safety */
+
+	GetFileNamePos(zv->PktIn, &i, &j);
+	strncpy_s(&(fv->FullName[fv->DirLen]),
+			  sizeof(fv->FullName) - fv->DirLen, &(zv->PktIn[j]),
+			  _TRUNCATE);
+	/* file open */
+	if (!FTCreateFile(fv))
+		return FALSE;
+
+	/* file size */
+	i = strlen(zv->PktIn) + 1;
+	do {
+		b = zv->PktIn[i];
+		if ((b >= 0x30) && (b <= 0x39))
+			fv->FileSize = fv->FileSize * 10 + b - 0x30;
+		i++;
+	} while ((b >= 0x30) && (b <= 0x39));
+
+	/* file mtime */
 	p = zv->PktIn + i;
 	if (*p) {
 		ret = sscanf(p, "%lo%o", &modtime, &mode);
 		if (ret >= 1) {
 			fv->FileMtime = modtime;
 		}
-	}
-
-	zv->Pos = 0;
-	fv->ByteCount = 0;
-	ZStoHdr(zv, 0);
-	zv->ZState = Z_RecvData;
-
-	SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, 0);
-	if (fv->FileSize > 0)
-		SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS,
-					  0, fv->FileSize, &fv->ProgStat);
-	SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, GetTickCount(), fv->ByteCount);
-
-	/* set timeout for data */
-	FTSetTimeOut(fv, zv->TimeOut);
-	return TRUE;
-}
-
-BOOL ZWriteData(PFileVar fv, PZVar zv)
-{
-	int i;
-	BYTE b;
-
-	if (zv->ZState != Z_RecvData)
-		return FALSE;
-	/* kill timer */
-	FTSetTimeOut(fv, 0);
-
-	if (zv->BinFlag)
-		_lwrite(fv->FileHandle, zv->PktIn, zv->PktInPtr);
-	else
-		for (i = 0; i <= zv->PktInPtr - 1; i++) {
-			b = zv->PktIn[i];
-			if ((b == 0x0A) && (!zv->CRRecv))
-				_lwrite(fv->FileHandle, "\015", 1);
-			if (zv->CRRecv && (b != 0x0A))
-				_lwrite(fv->FileHandle, "\012", 1);
-			zv->CRRecv = b == 0x0D;
-			_lwrite(fv->FileHandle, &b, 1);
-		}
-
-	fv->ByteCount = fv->ByteCount + zv->PktInPtr;
-	zv->Pos = zv->Pos + zv->PktInPtr;
-	ZStoHdr(zv, zv->Pos);
-	SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount);
-	if (fv->FileSize > 0)
-		SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS,
-					  fv->ByteCount, fv->FileSize, &fv->ProgStat);
-	SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount);
-
-	/* set timeout for data */
-	FTSetTimeOut(fv, zv->TimeOut);
-	return TRUE;
-}
-
-void ZCheckData(PFileVar fv, PZVar zv)
-{
-	BOOL Ok;
-
-	/* check CRC */
-	if (zv->CRC32 && (zv->CRC3 != 0xDEBB20E3) || (!zv->CRC32 && (zv->CRC != 0))) {	/* CRC */
-		switch (zv->ZState) {
-		case Z_RecvInit:
-		case Z_RecvInit2:
-			ZSendNAK(zv);
-			break;
-		case Z_RecvData:
-			ZSendRPOS(fv, zv);
-			break;
-		}
-		zv->ZPktState = Z_PktGetPAD;
-		return;
-	}
-	/* parse data */
-	switch (zv->RxType) {
-	case ZSINIT:
-		Ok = ZParseSInit(zv);
-		break;
-	case ZFILE:
-		Ok = ZParseFile(fv, zv);
-		break;
-	case ZDATA:
-		Ok = ZWriteData(fv, zv);
-		break;
-	default:
-		Ok = FALSE;
-	}
-
-	if (!Ok) {
-		zv->ZPktState = Z_PktGetPAD;
-		return;
-	}
-
-	if (zv->RxType == ZFILE)
-		ZShHdr(zv, ZRPOS);
-
-	/* next state */
-	switch (zv->TERM) {
-	case ZCRCE:
-		zv->ZPktState = Z_PktGetPAD;
-		break;
-	case ZCRCG:
-		zv->ZPktState = Z_PktGetData;
-		break;
-	case ZCRCQ:
-		zv->ZPktState = Z_PktGetData;
-		if (zv->RxType != ZFILE)
-			ZShHdr(zv, ZACK);
-		break;
-	case ZCRCW:
-		zv->ZPktState = Z_PktGetPAD;
-		if (zv->RxType != ZFILE)
-			ZShHdr(zv, ZACK);
-		break;
-	default:
-		zv->ZPktState = Z_PktGetPAD;
-	}
-
-	if (zv->ZPktState == Z_PktGetData) {
-		zv->Quoted = FALSE;
-		zv->CRC = 0;
-		zv->CRC3 = 0xFFFFFFFF;
-		zv->PktInPtr = 0;
-		zv->PktInCount = 0;
-	}
-}
-
-BOOL ZParse(PFileVar fv, PZVar zv, PComVar cv)
-{
-	BYTE b;
-	int c;
-
-	do {
-		/* Send packet */
-		if (zv->Sending) {
-			c = 1;
-			while ((c > 0) && (zv->PktOutCount > 0)) {
-				c = ZWrite(fv, zv, cv, &(zv->PktOut[zv->PktOutPtr]),
-						   zv->PktOutCount);
-				zv->PktOutPtr = zv->PktOutPtr + c;
-				zv->PktOutCount = zv->PktOutCount - c;
-			}
-			if (zv->PktOutCount <= 0)
-				zv->Sending = FALSE;
-			if ((zv->ZMode == IdZReceive) && (zv->PktOutCount > 0))
-				return TRUE;
-		}
-
-		c = ZRead1Byte(fv, zv, cv, &b);
-		while (c > 0) {
-			if (zv->ZState == Z_RecvFIN) {
-				if (b == 'O')
-					zv->CanCount--;
-				if (zv->CanCount <= 0) {
-					zv->ZState = Z_End;
-					return FALSE;
-				}
-			} else
-				switch (b) {
-				case ZDLE:
-					zv->CanCount--;
-					if (zv->CanCount <= 0) {
-						zv->ZState = Z_End;
-						return FALSE;
-					}
-					break;
-				default:
-					zv->CanCount = 5;
-				}
-
-			switch (zv->ZPktState) {
-			case Z_PktGetPAD:
-				switch (b) {
-				case ZPAD:
-					zv->ZPktState = Z_PktGetDLE;
-					break;
-				}
-				break;
-			case Z_PktGetDLE:
-				switch (b) {
-				case ZPAD:
-					break;
-				case ZDLE:
-					zv->ZPktState = Z_PktHdrFrm;
-					break;
-				default:
-					zv->ZPktState = Z_PktGetPAD;
-				}
-				break;
-			case Z_PktHdrFrm:	/* Get header format type */
-				switch (b) {
-				case ZBIN:
-					zv->CRC32 = FALSE;
-					zv->PktInCount = 7;
-					zv->ZPktState = Z_PktGetBin;
-					break;
-				case ZHEX:
-					zv->HexLo = FALSE;
-					zv->CRC32 = FALSE;
-					zv->PktInCount = 7;
-					zv->ZPktState = Z_PktGetHex;
-					break;
-				case ZBIN32:
-					zv->CRC32 = TRUE;
-					zv->PktInCount = 9;
-					zv->ZPktState = Z_PktGetBin;
-					break;
-				default:
-					zv->ZPktState = Z_PktGetPAD;
-				}
-				zv->Quoted = FALSE;
-				zv->PktInPtr = 0;
-				break;
-			case Z_PktGetBin:
-				switch (b) {
-				case ZDLE:
-					zv->Quoted = TRUE;
-					break;
-				default:
-					if (zv->Quoted) {
-						b = b ^ 0x40;
-						zv->Quoted = FALSE;
-					}
-					zv->PktIn[zv->PktInPtr] = b;
-					zv->PktInPtr++;
-					zv->PktInCount--;
-					if (zv->PktInCount == 0) {
-						zv->ZPktState = Z_PktGetPAD;
-						if (ZCheckHdr(fv, zv))
-							ZParseHdr(fv, zv, cv);
-					}
-				}
-				break;
-			case Z_PktGetHex:
-				if (b <= '9')
-					b = b - 0x30;
-				else if ((b >= 'a') && (b <= 'f'))
-					b = b - 0x57;
-				else {
-					zv->ZPktState = Z_PktGetPAD;
-					return TRUE;
-				}
-
-				if (zv->HexLo) {
-					zv->PktIn[zv->PktInPtr] = zv->PktIn[zv->PktInPtr] + b;
-					zv->HexLo = FALSE;
-					zv->PktInPtr++;
-					zv->PktInCount--;
-					if (zv->PktInCount <= 0) {
-						zv->ZPktState = Z_PktGetHexEOL;
-						zv->PktInCount = 2;
-					}
-				} else {
-					zv->PktIn[zv->PktInPtr] = b << 4;
-					zv->HexLo = TRUE;
-				}
-				break;
-			case Z_PktGetHexEOL:
-				zv->PktInCount--;
-				if (zv->PktInCount <= 0) {
-					zv->ZPktState = Z_PktGetPAD;
-					if (ZCheckHdr(fv, zv))
-						ZParseHdr(fv, zv, cv);
-				}
-				break;
-			case Z_PktGetData:
-				switch (b) {
-				case ZDLE:
-					zv->Quoted = TRUE;
-					break;
-				default:
-					if (zv->Quoted) {
-						switch (b) {
-						case ZCRCE:
-						case ZCRCG:
-						case ZCRCQ:
-						case ZCRCW:
-							zv->TERM = b;
-							if (zv->CRC32)
-								zv->PktInCount = 4;
-							else
-								zv->PktInCount = 2;
-							zv->ZPktState = Z_PktGetCRC;
-							break;
-						case ZRUB0:
-							b = 0x7F;
-							break;
-						case ZRUB1:
-							b = 0xFF;
-							break;
-						default:
-							b = b ^ 0x40;
-						}
-						zv->Quoted = FALSE;
-					}
-					if (zv->CRC32)
-						zv->CRC3 = UpdateCRC32(b, zv->CRC3);
-					else
-						zv->CRC = UpdateCRC(b, zv->CRC);
-					if (zv->ZPktState == Z_PktGetData) {
-						if (zv->PktInPtr < 1024) {
-							zv->PktIn[zv->PktInPtr] = b;
-							zv->PktInPtr++;
-						} else
-							zv->ZPktState = Z_PktGetPAD;
-					}
-				}
-				break;
-			case Z_PktGetCRC:
-				switch (b) {
-				case ZDLE:
-					zv->Quoted = TRUE;
-					break;
-				default:
-					if (zv->Quoted) {
-						switch (b) {
-						case ZRUB0:
-							b = 0x7F;
-							break;
-						case ZRUB1:
-							b = 0xFF;
-							break;
-						default:
-							b = b ^ 0x40;
-						}
-						zv->Quoted = FALSE;
-					}
-					if (zv->CRC32)
-						zv->CRC3 = UpdateCRC32(b, zv->CRC3);
-					else
-						zv->CRC = UpdateCRC(b, zv->CRC);
-					zv->PktInCount--;
-					if (zv->PktInCount <= 0)
-						ZCheckData(fv, zv);
-				}
-				break;
-			}
-			c = ZRead1Byte(fv, zv, cv, &b);
-		}
-
-		if (!zv->Sending)
-			switch (zv->ZState) {
-			case Z_SendInitHdr:
-				ZSendInitDat(zv);
-				break;
-			case Z_SendFileHdr:
-				ZSendFileDat(fv, zv);
-				break;
-			case Z_SendDataHdr:
-			case Z_SendDataDat:
-				ZSendDataDat(fv, zv);
-				break;
-			case Z_Cancel:
-				zv->ZState = Z_End;
-				break;
-			}
-
-		if (zv->Sending && (zv->PktOutCount > 0))
-			return TRUE;
-	} while (zv->Sending);
-
-	if (zv->ZState == Z_End)
-		return FALSE;
-	return TRUE;
-}
-
-void ZCancel(PZVar zv)
-{
-	ZSendCancel(zv);
-}
+	}
+
+	zv->Pos = 0;
+	fv->ByteCount = 0;
+	ZStoHdr(zv, 0);
+	zv->ZState = Z_RecvData;
+
+	SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, 0);
+	if (fv->FileSize > 0)
+		SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS,
+					  0, fv->FileSize, &fv->ProgStat);
+	SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, GetTickCount(), fv->ByteCount);
+
+	/* set timeout for data */
+	FTSetTimeOut(fv, zv->TimeOut);
+	return TRUE;
+}
+
+BOOL ZWriteData(PFileVar fv, PZVar zv)
+{
+	int i;
+	BYTE b;
+
+	if (zv->ZState != Z_RecvData)
+		return FALSE;
+	/* kill timer */
+	FTSetTimeOut(fv, 0);
+
+	if (zv->BinFlag)
+		_lwrite(fv->FileHandle, zv->PktIn, zv->PktInPtr);
+	else
+		for (i = 0; i <= zv->PktInPtr - 1; i++) {
+			b = zv->PktIn[i];
+			if ((b == 0x0A) && (!zv->CRRecv))
+				_lwrite(fv->FileHandle, "\015", 1);
+			if (zv->CRRecv && (b != 0x0A))
+				_lwrite(fv->FileHandle, "\012", 1);
+			zv->CRRecv = b == 0x0D;
+			_lwrite(fv->FileHandle, &b, 1);
+		}
+
+	fv->ByteCount = fv->ByteCount + zv->PktInPtr;
+	zv->Pos = zv->Pos + zv->PktInPtr;
+	ZStoHdr(zv, zv->Pos);
+	SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount);
+	if (fv->FileSize > 0)
+		SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS,
+					  fv->ByteCount, fv->FileSize, &fv->ProgStat);
+	SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount);
+
+	/* set timeout for data */
+	FTSetTimeOut(fv, zv->TimeOut);
+	return TRUE;
+}
+
+void ZCheckData(PFileVar fv, PZVar zv)
+{
+	BOOL Ok;
+
+	/* check CRC */
+	if (zv->CRC32 && (zv->CRC3 != 0xDEBB20E3) || (!zv->CRC32 && (zv->CRC != 0))) {	/* CRC */
+		switch (zv->ZState) {
+		case Z_RecvInit:
+		case Z_RecvInit2:
+			ZSendNAK(zv);
+			break;
+		case Z_RecvData:
+			ZSendRPOS(fv, zv);
+			break;
+		}
+		zv->ZPktState = Z_PktGetPAD;
+		return;
+	}
+	/* parse data */
+	switch (zv->RxType) {
+	case ZSINIT:
+		Ok = ZParseSInit(zv);
+		break;
+	case ZFILE:
+		Ok = ZParseFile(fv, zv);
+		break;
+	case ZDATA:
+		Ok = ZWriteData(fv, zv);
+		break;
+	default:
+		Ok = FALSE;
+	}
+
+	if (!Ok) {
+		zv->ZPktState = Z_PktGetPAD;
+		return;
+	}
+
+	if (zv->RxType == ZFILE)
+		ZShHdr(zv, ZRPOS);
+
+	/* next state */
+	switch (zv->TERM) {
+	case ZCRCE:
+		zv->ZPktState = Z_PktGetPAD;
+		break;
+	case ZCRCG:
+		zv->ZPktState = Z_PktGetData;
+		break;
+	case ZCRCQ:
+		zv->ZPktState = Z_PktGetData;
+		if (zv->RxType != ZFILE)
+			ZShHdr(zv, ZACK);
+		break;
+	case ZCRCW:
+		zv->ZPktState = Z_PktGetPAD;
+		if (zv->RxType != ZFILE)
+			ZShHdr(zv, ZACK);
+		break;
+	default:
+		zv->ZPktState = Z_PktGetPAD;
+	}
+
+	if (zv->ZPktState == Z_PktGetData) {
+		zv->Quoted = FALSE;
+		zv->CRC = 0;
+		zv->CRC3 = 0xFFFFFFFF;
+		zv->PktInPtr = 0;
+		zv->PktInCount = 0;
+	}
+}
+
+BOOL ZParse(PFileVar fv, PZVar zv, PComVar cv)
+{
+	BYTE b;
+	int c;
+
+	do {
+		/* Send packet */
+		if (zv->Sending) {
+			c = 1;
+			while ((c > 0) && (zv->PktOutCount > 0)) {
+				c = ZWrite(fv, zv, cv, &(zv->PktOut[zv->PktOutPtr]),
+						   zv->PktOutCount);
+				zv->PktOutPtr = zv->PktOutPtr + c;
+				zv->PktOutCount = zv->PktOutCount - c;
+			}
+			if (zv->PktOutCount <= 0)
+				zv->Sending = FALSE;
+			if ((zv->ZMode == IdZReceive) && (zv->PktOutCount > 0))
+				return TRUE;
+		}
+
+		c = ZRead1Byte(fv, zv, cv, &b);
+		while (c > 0) {
+			if (zv->ZState == Z_RecvFIN) {
+				if (b == 'O')
+					zv->CanCount--;
+				if (zv->CanCount <= 0) {
+					zv->ZState = Z_End;
+					return FALSE;
+				}
+			} else
+				switch (b) {
+				case ZDLE:
+					zv->CanCount--;
+					if (zv->CanCount <= 0) {
+						zv->ZState = Z_End;
+						return FALSE;
+					}
+					break;
+				default:
+					zv->CanCount = 5;
+				}
+
+			switch (zv->ZPktState) {
+			case Z_PktGetPAD:
+				switch (b) {
+				case ZPAD:
+					zv->ZPktState = Z_PktGetDLE;
+					break;
+				}
+				break;
+			case Z_PktGetDLE:
+				switch (b) {
+				case ZPAD:
+					break;
+				case ZDLE:
+					zv->ZPktState = Z_PktHdrFrm;
+					break;
+				default:
+					zv->ZPktState = Z_PktGetPAD;
+				}
+				break;
+			case Z_PktHdrFrm:	/* Get header format type */
+				switch (b) {
+				case ZBIN:
+					zv->CRC32 = FALSE;
+					zv->PktInCount = 7;
+					zv->ZPktState = Z_PktGetBin;
+					break;
+				case ZHEX:
+					zv->HexLo = FALSE;
+					zv->CRC32 = FALSE;
+					zv->PktInCount = 7;
+					zv->ZPktState = Z_PktGetHex;
+					break;
+				case ZBIN32:
+					zv->CRC32 = TRUE;
+					zv->PktInCount = 9;
+					zv->ZPktState = Z_PktGetBin;
+					break;
+				default:
+					zv->ZPktState = Z_PktGetPAD;
+				}
+				zv->Quoted = FALSE;
+				zv->PktInPtr = 0;
+				break;
+			case Z_PktGetBin:
+				switch (b) {
+				case ZDLE:
+					zv->Quoted = TRUE;
+					break;
+				default:
+					if (zv->Quoted) {
+						b = b ^ 0x40;
+						zv->Quoted = FALSE;
+					}
+					zv->PktIn[zv->PktInPtr] = b;
+					zv->PktInPtr++;
+					zv->PktInCount--;
+					if (zv->PktInCount == 0) {
+						zv->ZPktState = Z_PktGetPAD;
+						if (ZCheckHdr(fv, zv))
+							ZParseHdr(fv, zv, cv);
+					}
+				}
+				break;
+			case Z_PktGetHex:
+				if (b <= '9')
+					b = b - 0x30;
+				else if ((b >= 'a') && (b <= 'f'))
+					b = b - 0x57;
+				else {
+					zv->ZPktState = Z_PktGetPAD;
+					return TRUE;
+				}
+
+				if (zv->HexLo) {
+					zv->PktIn[zv->PktInPtr] = zv->PktIn[zv->PktInPtr] + b;
+					zv->HexLo = FALSE;
+					zv->PktInPtr++;
+					zv->PktInCount--;
+					if (zv->PktInCount <= 0) {
+						zv->ZPktState = Z_PktGetHexEOL;
+						zv->PktInCount = 2;
+					}
+				} else {
+					zv->PktIn[zv->PktInPtr] = b << 4;
+					zv->HexLo = TRUE;
+				}
+				break;
+			case Z_PktGetHexEOL:
+				zv->PktInCount--;
+				if (zv->PktInCount <= 0) {
+					zv->ZPktState = Z_PktGetPAD;
+					if (ZCheckHdr(fv, zv))
+						ZParseHdr(fv, zv, cv);
+				}
+				break;
+			case Z_PktGetData:
+				switch (b) {
+				case ZDLE:
+					zv->Quoted = TRUE;
+					break;
+				default:
+					if (zv->Quoted) {
+						switch (b) {
+						case ZCRCE:
+						case ZCRCG:
+						case ZCRCQ:
+						case ZCRCW:
+							zv->TERM = b;
+							if (zv->CRC32)
+								zv->PktInCount = 4;
+							else
+								zv->PktInCount = 2;
+							zv->ZPktState = Z_PktGetCRC;
+							break;
+						case ZRUB0:
+							b = 0x7F;
+							break;
+						case ZRUB1:
+							b = 0xFF;
+							break;
+						default:
+							b = b ^ 0x40;
+						}
+						zv->Quoted = FALSE;
+					}
+					if (zv->CRC32)
+						zv->CRC3 = UpdateCRC32(b, zv->CRC3);
+					else
+						zv->CRC = UpdateCRC(b, zv->CRC);
+					if (zv->ZPktState == Z_PktGetData) {
+						if (zv->PktInPtr < 1024) {
+							zv->PktIn[zv->PktInPtr] = b;
+							zv->PktInPtr++;
+						} else
+							zv->ZPktState = Z_PktGetPAD;
+					}
+				}
+				break;
+			case Z_PktGetCRC:
+				switch (b) {
+				case ZDLE:
+					zv->Quoted = TRUE;
+					break;
+				default:
+					if (zv->Quoted) {
+						switch (b) {
+						case ZRUB0:
+							b = 0x7F;
+							break;
+						case ZRUB1:
+							b = 0xFF;
+							break;
+						default:
+							b = b ^ 0x40;
+						}
+						zv->Quoted = FALSE;
+					}
+					if (zv->CRC32)
+						zv->CRC3 = UpdateCRC32(b, zv->CRC3);
+					else
+						zv->CRC = UpdateCRC(b, zv->CRC);
+					zv->PktInCount--;
+					if (zv->PktInCount <= 0)
+						ZCheckData(fv, zv);
+				}
+				break;
+			}
+			c = ZRead1Byte(fv, zv, cv, &b);
+		}
+
+		if (!zv->Sending)
+			switch (zv->ZState) {
+			case Z_SendInitHdr:
+				ZSendInitDat(zv);
+				break;
+			case Z_SendFileHdr:
+				ZSendFileDat(fv, zv);
+				break;
+			case Z_SendDataHdr:
+			case Z_SendDataDat:
+				ZSendDataDat(fv, zv);
+				break;
+			case Z_Cancel:
+				zv->ZState = Z_End;
+				break;
+			}
+
+		if (zv->Sending && (zv->PktOutCount > 0))
+			return TRUE;
+	} while (zv->Sending);
+
+	if (zv->ZState == Z_End)
+		return FALSE;
+	return TRUE;
+}
+
+void ZCancel(PZVar zv)
+{
+	ZSendCancel(zv);
+}



Ttssh2-commit メーリングリストの案内
Back to archive index