[Ttssh2-commit] [8989] プロトコルログを分離

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 11月 2日 (月) 00:33:41 JST


Revision: 8989
          https://osdn.net/projects/ttssh2/scm/svn/commits/8989
Author:   zmatsuo
Date:     2020-11-02 00:33:41 +0900 (Mon, 02 Nov 2020)
Log Message:
-----------
プロトコルログを分離

- ログ用構造体 TProtoLog 追加
- ProtoLogCreate() で作成

Modified Paths:
--------------
    branches/proto_unicode/teraterm/teraterm/filesys_proto.cpp
    branches/proto_unicode/teraterm/teraterm/filesys_proto.h
    branches/proto_unicode/teraterm/ttpfile/ftlib.c
    branches/proto_unicode/teraterm/ttpfile/ftlib.h

-------------- next part --------------
Modified: branches/proto_unicode/teraterm/teraterm/filesys_proto.cpp
===================================================================
--- branches/proto_unicode/teraterm/teraterm/filesys_proto.cpp	2020-11-01 15:33:26 UTC (rev 8988)
+++ branches/proto_unicode/teraterm/teraterm/filesys_proto.cpp	2020-11-01 15:33:41 UTC (rev 8989)
@@ -296,9 +296,6 @@
 			if (FileVar->OpId == OpQVSend)
 				CommTextOut(&cv,"\015",1);
 		}
-		if (FileVar->LogFlag)
-			CloseHandle(FileVar->LogFile);
-		FileVar->LogFile = 0;
 	}
 }
 
@@ -1273,7 +1270,7 @@
 
 void ZMODEMStart(int mode)
 {
-	WORD Opt;
+	WORD Opt = 0; // TODO \x8Eg\x82\xC1\x82Ă\xA2\x82Ȃ\xA2
 	char uimsg[MAX_UIMSG];
 	const char *UILanguageFile = ts.UILanguageFile;
 

Modified: branches/proto_unicode/teraterm/teraterm/filesys_proto.h
===================================================================
--- branches/proto_unicode/teraterm/teraterm/filesys_proto.h	2020-11-01 15:33:26 UTC (rev 8988)
+++ branches/proto_unicode/teraterm/teraterm/filesys_proto.h	2020-11-01 15:33:41 UTC (rev 8989)
@@ -47,20 +47,21 @@
 	LONG FileSize, ByteCount;
 	BOOL OverWrite;
 
+#if 1
 	BOOL LogFlag;
 	HANDLE LogFile;
 	WORD LogState;
 	WORD LogCount;
+	BYTE LogLineBuf[16];
+	int FlushLogLineBuf;
+#endif
 
 	BOOL Success;
 	BOOL NoMsg;
 
-	char LogDefaultPath[MAX_PATH];
+//	char LogDefaultPath[MAX_PATH];
 	BOOL HideDialog;
 
-	BYTE LogLineBuf[16];
-	int FlushLogLineBuf;
-
 	int ProgStat;
 
 	DWORD StartTime;

Modified: branches/proto_unicode/teraterm/ttpfile/ftlib.c
===================================================================
--- branches/proto_unicode/teraterm/ttpfile/ftlib.c	2020-11-01 15:33:26 UTC (rev 8988)
+++ branches/proto_unicode/teraterm/ttpfile/ftlib.c	2020-11-01 15:33:41 UTC (rev 8989)
@@ -101,6 +101,7 @@
   return CRC;
 }
 
+#if 1
 void FTLog1Byte(PFileVarProto fv, BYTE b)
 {
   char d[3];
@@ -154,6 +155,7 @@
   fv->LogLineBuf[fv->LogCount] = b;    // add (2008.6.3 yutaka)
   fv->LogCount++;
 }
+#endif
 
 void FTSetTimeOut(PFileVarProto fv, int T)
 {
@@ -222,3 +224,115 @@
 
   return fv->FileOpen;
 }
+
+//
+// \x83v\x83\x8D\x83g\x83R\x83\x8B\x97p\x83\x8D\x83O
+//
+
+static BOOL Open(TProtoLog *pv, const char *file)
+{
+	pv->LogFile = _lcreat(file, 0);
+	pv->LogCount = 0;
+	pv->LogState = 0;
+	return pv->LogFile == INVALID_HANDLE_VALUE ? FALSE : TRUE;
+}
+
+static void Close(TProtoLog *pv)
+{
+	if (pv->LogFile != INVALID_HANDLE_VALUE) {
+		if (pv->LogCount > 0) {
+			pv->DumpFlush(pv);
+		}
+		CloseHandle(pv->LogFile);
+		pv->LogFile = INVALID_HANDLE_VALUE;
+	}
+}
+
+static size_t WriteRawData(struct ProtoLog *pv, const void *data, size_t len)
+{
+	size_t r = _lwrite(pv->LogFile, data, len);
+	return r;
+}
+
+static size_t WriteStr(TProtoLog *pv, const char *str)
+{
+	size_t len = strlen(str);
+	size_t r = WriteRawData(pv, str, len);
+	return r;
+}
+
+static void DumpByte(TProtoLog *pv, BYTE b)
+{
+	char d[3];
+
+	if (pv->LogCount == _countof(pv->LogLineBuf)) {
+		pv->DumpFlush(pv);
+	}
+
+	if (b<=0x9f)
+		d[0] = (b >> 4) + 0x30;
+	else
+		d[0] = (b >> 4) + 0x37;
+
+	if ((b & 0x0f) <= 0x9)
+		d[1] = (b & 0x0F) + 0x30;
+	else
+		d[1] = (b & 0x0F) + 0x37;
+
+	d[2] = 0x20;
+	_lwrite(pv->LogFile,d,3);
+	pv->LogLineBuf[pv->LogCount] = b;    // add (2008.6.3 yutaka)
+	pv->LogCount++;
+}
+
+static void DumpFlush(TProtoLog *pv)
+{
+	int rest = 16 - pv->LogCount;
+	int i;
+
+	for (i = 0 ; i < rest ; i++)
+		_lwrite(pv->LogFile,"   ", 3);
+
+	// ASCII\x95\\x8E\xA6\x82\xF0\x92lj\xC1 (2008.6.3 yutaka)
+	_lwrite(pv->LogFile,"    ", 4);
+	for (i = 0 ; i < pv->LogCount ; i++) {
+		char ch[5];
+		if (isprint(pv->LogLineBuf[i])) {
+			_snprintf_s(ch, sizeof(ch), _TRUNCATE, "%c", pv->LogLineBuf[i]);
+			_lwrite(pv->LogFile, ch, 1);
+
+		} else {
+			_lwrite(pv->LogFile, ".", 1);
+
+		}
+
+	}
+
+	pv->LogCount = 0;
+	_lwrite(pv->LogFile,"\015\012",2);
+}
+
+static void ProtoLogDestroy(TProtoLog *pv)
+{
+	pv->Close(pv);
+	free(pv);
+}
+
+TProtoLog *ProtoLogCreate()
+{
+	TProtoLog *pv = (TProtoLog *)malloc(sizeof(TProtoLog));
+	if (pv == NULL) {
+		return NULL;
+	}
+
+	memset(pv, 0, sizeof(TProtoLog));
+	pv->Open = Open;
+	pv->Close = Close;
+	pv->WriteStr = WriteStr;
+	pv->DumpByte = DumpByte;
+	pv->DumpFlush = DumpFlush;
+	pv->WriteRaw = WriteRawData;
+	pv->Destory = ProtoLogDestroy;
+	pv->LogFile = INVALID_HANDLE_VALUE;
+	return pv;
+}

Modified: branches/proto_unicode/teraterm/ttpfile/ftlib.h
===================================================================
--- branches/proto_unicode/teraterm/ttpfile/ftlib.h	2020-11-01 15:33:26 UTC (rev 8988)
+++ branches/proto_unicode/teraterm/ttpfile/ftlib.h	2020-11-01 15:33:41 UTC (rev 8989)
@@ -35,17 +35,35 @@
 extern "C" {
 #endif
 
-//extern char UILanguageFile[MAX_PATH];
-
 void GetLongFName(PCHAR FullName, PCHAR LongName, int destlen);
 void FTConvFName(PCHAR FName);
 BOOL GetNextFname(PFileVarProto fv);
 WORD UpdateCRC(BYTE b, WORD CRC);
 LONG UpdateCRC32(BYTE b, LONG CRC);
+#if 1
 void FTLog1Byte(PFileVarProto fv, BYTE b);
+#endif
 void FTSetTimeOut(PFileVarProto fv, int T);
 BOOL FTCreateFile(PFileVarProto fv);
 
+typedef struct ProtoLog {
+	// public
+	WORD LogState;	// \x8E\xA9\x97R\x82Ɏg\x82\xC1\x82Ă\xE0\x97ǂ\xA2\x95ϐ\x94
+	BOOL (*Open)(struct ProtoLog *pv, const char *file);
+	void (*Close)(struct ProtoLog *pv);
+	size_t (*WriteRaw)(struct ProtoLog *pv, const void *data, size_t len);
+	size_t (*WriteStr)(struct ProtoLog *pv, const char *str);
+	void (*DumpByte)(struct ProtoLog *pv, BYTE b);
+	void (*DumpFlush)(struct ProtoLog *pv);
+	void (*Destory)(struct ProtoLog *pv);
+	// private
+	HANDLE LogFile;
+	WORD LogCount;
+	BYTE LogLineBuf[16];
+} TProtoLog;
+
+TProtoLog *ProtoLogCreate(void);
+
 #ifdef __cplusplus
 }
 #endif


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