[Ttssh2-commit] [8906] ログに関する変数を移動、バッファをヒープから取るよう修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 8月 19日 (水) 00:31:35 JST


Revision: 8906
          https://osdn.net/projects/ttssh2/scm/svn/commits/8906
Author:   zmatsuo
Date:     2020-08-19 00:31:34 +0900 (Wed, 19 Aug 2020)
Log Message:
-----------
ログに関する変数を移動、バッファをヒープから取るよう修正

- ログに関する変数を filesys_log.cpp に移動した
- バッファをヒープから取るようにした
  - GlobalAlloc() で取得するのをやめた
  - GlobalLock(), GlobalUnlock() を行う必要がなくなった

Modified Paths:
--------------
    trunk/teraterm/common/tttypes.h
    trunk/teraterm/teraterm/commlib.c
    trunk/teraterm/teraterm/filesys_log.cpp
    trunk/teraterm/teraterm/teraterm.cpp
    trunk/teraterm/teraterm/vtterm.c
    trunk/teraterm/teraterm/vtwin.cpp

-------------- next part --------------
Modified: trunk/teraterm/common/tttypes.h
===================================================================
--- trunk/teraterm/common/tttypes.h	2020-08-18 15:31:25 UTC (rev 8905)
+++ trunk/teraterm/common/tttypes.h	2020-08-18 15:31:34 UTC (rev 8906)
@@ -1072,15 +1072,15 @@
 	BOOL TelAutoDetect; /* TTPLUG */
 
 	/* Text log */
-	HANDLE HLogBuf;
-	PCHAR LogBuf;
-	int LogPtr, LStart, LCount;
+	HANDLE reserve_2;		// HLogBuf;
+	PCHAR reserve_4;		// LogBuf;
+	int reserve_5[3];		// LogPtr, LStart, LCount;
 	/* Binary log */
-	HANDLE HBinBuf;
-	PCHAR BinBuf;
-	int BinPtr, BStart, BCount;
-	int reserve_0[2];		// DStart, DCount;
-	int BinSkip;
+	HANDLE reserve_3;		// HBinBuf;
+	PCHAR reserve_6;		// BinBuf;
+	int reserve_7[3];		// BinPtr, BStart, BCount;
+	int reserve_1[2];		// DStart, DCount;
+	int reserve_8;			// BinSkip;
 	WORD FilePause;
 	BOOL ProtoFlag;
 	/* message flag */

Modified: trunk/teraterm/teraterm/commlib.c
===================================================================
--- trunk/teraterm/teraterm/commlib.c	2020-08-18 15:31:25 UTC (rev 8905)
+++ trunk/teraterm/teraterm/commlib.c	2020-08-18 15:31:34 UTC (rev 8906)
@@ -48,6 +48,7 @@
 #include <time.h>
 #include <locale.h>
 
+#include "filesys_log.h"
 #include "ttlib.h"
 #include "codeconv.h"
 
@@ -133,19 +134,6 @@
 	cv->Ready = FALSE;
 
 // log-buffer variables
-	cv->HLogBuf = 0;
-	cv->HBinBuf = 0;
-	cv->LogBuf = NULL;
-	cv->BinBuf = NULL;
-	cv->LogPtr = 0;
-	cv->LStart = 0;
-	cv->LCount = 0;
-	cv->BinPtr = 0;
-	cv->BStart = 0;
-	cv->BCount = 0;
-//	cv->DStart = 0;
-//	cv->DCount = 0;
-	cv->BinSkip = 0;
 	cv->FilePause = 0;
 	cv->ProtoFlag = FALSE;
 /* message flag */
@@ -837,13 +825,9 @@
 	if (cv->InBuffCount>0) {
 		return FALSE;
 	}
-	if ((cv->HLogBuf!=NULL) && (cv->LCount>0)) {
+	if (FLogIsOpend() && FLogGetCount() > 0) {
 		return FALSE;
 	}
-	if ((cv->HBinBuf!=NULL) &&
-	    (cv->BCount>0)) {
-		return FALSE;
-	}
 	if (DDELog && DDEGetCount() > 0) {
 		return FALSE;
 	}

Modified: trunk/teraterm/teraterm/filesys_log.cpp
===================================================================
--- trunk/teraterm/teraterm/filesys_log.cpp	2020-08-18 15:31:25 UTC (rev 8905)
+++ trunk/teraterm/teraterm/filesys_log.cpp	2020-08-18 15:31:34 UTC (rev 8906)
@@ -106,6 +106,12 @@
 static BOOL FileLog = FALSE;
 static BOOL BinLog = FALSE;
 
+static PCHAR cv_LogBuf;
+static int cv_LogPtr, cv_LStart, cv_LCount;
+static PCHAR cv_BinBuf;
+static int cv_BinPtr, cv_BStart, cv_BCount;
+static int cv_BinSkip;
+
 // \x92x\x89\x84\x8F\x91\x82\xAB\x8D\x9E\x82ݗp\x83X\x83\x8C\x83b\x83h\x82̃\x81\x83b\x83Z\x81[\x83W
 #define WM_DPC_LOGTHREAD_SEND (WM_APP + 1)
 
@@ -703,8 +709,8 @@
 			return FALSE;
 		}
 	}
-	cv.LStart = cv.LogPtr;
-	cv.LCount = 0;
+	cv_LStart = cv_LogPtr;
+	cv_LCount = 0;
 
 	OpenLogFile(fv);
 	if (LogVar->FileHandle == INVALID_HANDLE_VALUE) {
@@ -803,23 +809,23 @@
  */
 void LogPut1(BYTE b)
 {
-	cv.LogBuf[cv.LogPtr] = b;
-	cv.LogPtr++;
-	if (cv.LogPtr>=InBuffSize)
-		cv.LogPtr = cv.LogPtr-InBuffSize;
+	cv_LogBuf[cv_LogPtr] = b;
+	cv_LogPtr++;
+	if (cv_LogPtr>=InBuffSize)
+		cv_LogPtr = cv_LogPtr-InBuffSize;
 
 	if (FileLog)
 	{
-		if (cv.LCount>=InBuffSize)
+		if (cv_LCount>=InBuffSize)
 		{
-			cv.LCount = InBuffSize;
-			cv.LStart = cv.LogPtr;
+			cv_LCount = InBuffSize;
+			cv_LStart = cv_LogPtr;
 		}
 		else
-			cv.LCount++;
+			cv_LCount++;
 	}
 	else
-		cv.LCount = 0;
+		cv_LCount = 0;
 }
 
 static BOOL Get1(PCHAR Buf, int *Start, int *Count, PBYTE b)
@@ -936,15 +942,15 @@
 
 	if (FileLog)
 	{
-		Buf = cv.LogBuf;
-		Start = cv.LStart;
-		Count = cv.LCount;
+		Buf = cv_LogBuf;
+		Start = cv_LStart;
+		Count = cv_LCount;
 	}
 	else if (BinLog)
 	{
-		Buf = cv.BinBuf;
-		Start = cv.BStart;
-		Count = cv.BCount;
+		Buf = cv_BinBuf;
+		Start = cv_BStart;
+		Count = cv_BCount;
 	}
 	else
 		return;
@@ -1059,12 +1065,12 @@
 
 	if (FileLog)
 	{
-		cv.LStart = Start;
-		cv.LCount = Count;
+		cv_LStart = Start;
+		cv_LCount = Count;
 	}
 	else {
-		cv.BStart = Start;
-		cv.BCount = Count;
+		cv_BStart = Start;
+		cv_BCount = Count;
 	}
 	if (FLogIsPause() || cv.ProtoFlag) return;
 	LogVar->FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount);
@@ -1076,56 +1082,44 @@
 
 static BOOL CreateLogBuf(void)
 {
-	if (cv.HLogBuf==NULL)
+	if (cv_LogBuf==NULL)
 	{
-		cv.HLogBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);
-		cv.LogBuf = NULL;
-		cv.LogPtr = 0;
-		cv.LStart = 0;
-		cv.LCount = 0;
+		cv_LogBuf = (char *)malloc(InBuffSize);
+		cv_LogPtr = 0;
+		cv_LStart = 0;
+		cv_LCount = 0;
 	}
-	return (cv.HLogBuf!=NULL);
+	return (cv_LogBuf!=NULL);
 }
 
 static void FreeLogBuf(void)
 {
-	if ((cv.HLogBuf==NULL) || FileLog)
-		return;
-	if (cv.LogBuf!=NULL)
-		GlobalUnlock(cv.HLogBuf);
-	GlobalFree(cv.HLogBuf);
-	cv.HLogBuf = NULL;
-	cv.LogBuf = NULL;
-	cv.LogPtr = 0;
-	cv.LStart = 0;
-	cv.LCount = 0;
+	free(cv_LogBuf);
+	cv_LogBuf = NULL;
+	cv_LogPtr = 0;
+	cv_LStart = 0;
+	cv_LCount = 0;
 }
 
 static BOOL CreateBinBuf(void)
 {
-	if (cv.HBinBuf==NULL)
+	if (cv_BinBuf==NULL)
 	{
-		cv.HBinBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);
-		cv.BinBuf = NULL;
-		cv.BinPtr = 0;
-		cv.BStart = 0;
-		cv.BCount = 0;
+		cv_BinBuf = (PCHAR)malloc(InBuffSize);
+		cv_BinPtr = 0;
+		cv_BStart = 0;
+		cv_BCount = 0;
 	}
-	return (cv.HBinBuf!=NULL);
+	return (cv_BinBuf!=NULL);
 }
 
 static void FreeBinBuf(void)
 {
-	if ((cv.HBinBuf==NULL) || BinLog)
-		return;
-	if (cv.BinBuf!=NULL)
-		GlobalUnlock(cv.HBinBuf);
-	GlobalFree(cv.HBinBuf);
-	cv.HBinBuf = NULL;
-	cv.BinBuf = NULL;
-	cv.BinPtr = 0;
-	cv.BStart = 0;
-	cv.BCount = 0;
+	free(cv_BinBuf);
+	cv_BinBuf = NULL;
+	cv_BinPtr = 0;
+	cv_BStart = 0;
+	cv_BCount = 0;
 }
 
 static void FileTransEnd_(void)
@@ -1475,28 +1469,28 @@
 	if (LogVar->IsPause || cv.ProtoFlag) {
 		return;
 	}
-	if (cv.BinSkip > 0) {
-		cv.BinSkip--;
+	if (cv_BinSkip > 0) {
+		cv_BinSkip--;
 		return;
 	}
-	cv.BinBuf[cv.BinPtr] = b;
-	cv.BinPtr++;
-	if (cv.BinPtr>=InBuffSize) {
-		cv.BinPtr = cv.BinPtr-InBuffSize;
+	cv_BinBuf[cv_BinPtr] = b;
+	cv_BinPtr++;
+	if (cv_BinPtr>=InBuffSize) {
+		cv_BinPtr = cv_BinPtr-InBuffSize;
 	}
-	if (cv.BCount>=InBuffSize) {
-		cv.BCount = InBuffSize;
-		cv.BStart = cv.BinPtr;
+	if (cv_BCount>=InBuffSize) {
+		cv_BCount = InBuffSize;
+		cv_BStart = cv_BinPtr;
 	}
 	else {
-		cv.BCount++;
+		cv_BCount++;
 	}
 }
 
 static void LogBinSkip(int add)
 {
-	if (cv.HBinBuf!=0 ) {
-		cv.BinSkip += add;
+	if (cv_BinBuf != NULL) {
+		cv_BinSkip += add;
 	}
 }
 
@@ -1506,35 +1500,47 @@
 int FLogGetCount(void)
 {
 	if (FileLog) {
-		return cv.LCount;
+		return cv_LCount;
 	}
 	if (BinLog) {
-		return cv.BCount;
+		return cv_BCount;
 	}
 	return 0;
 }
 
 /**
+ *	\x83\x8D\x83O\x83o\x83b\x83t\x83@\x82̋󂫃o\x83C\x83g\x90\x94\x82\xF0\x95Ԃ\xB7
+ */
+int FLogGetFreeCount(void)
+{
+	if (FileLog) {
+		return InBuffSize - cv_LCount;
+	}
+	if (BinLog) {
+		return InBuffSize - cv_BCount;
+	}
+	return 0;
+}
+
+/**
  * \x83o\x83b\x83t\x83@\x93\xE0\x82̃\x8D\x83O\x82\xF0\x83t\x83@\x83C\x83\x8B\x82֏\x91\x82\xAB\x8D\x9E\x82\xDE
  */
 void FLogWriteFile(void)
 {
-	if (cv.LogBuf!=NULL)
+	if (cv_LogBuf!=NULL)
 	{
 		if (FileLog) {
 			LogToFile();
 		}
-		GlobalUnlock(cv.HLogBuf);
-		cv.LogBuf = NULL;
 	}
 
-	if (cv.BinBuf!=NULL)
+	if (cv_BinBuf!=NULL)
 	{
 		if (BinLog) {
 			LogToFile();
 		}
-		GlobalUnlock(cv.HBinBuf);
-		cv.BinBuf = NULL;
+//		GlobalUnlock(cv_HBinBuf);
+//		cv_BinBuf = NULL;
 	}
 }
 
@@ -1542,7 +1548,7 @@
 {
 	PFileVar fv = LogVar;
 	size_t i;
-	BOOL log_available = (cv.HLogBuf != 0);
+	BOOL log_available = (cv_LogBuf != 0);
 
 	if (!log_available) {
 		// \x83\x8D\x83O\x82ɂ͏o\x97͂\xB5\x82Ȃ\xA2
@@ -1585,13 +1591,7 @@
 void FLogOutputBOM(void)
 {
 	PFileVar fv = LogVar;
-	BOOL needs_unlock = FALSE;
 
-	if ((cv.HLogBuf!=NULL) && (cv.LogBuf==NULL)) {
-		cv.LogBuf = (PCHAR)GlobalLock(cv.HLogBuf);
-		needs_unlock = TRUE;
-	}
-
 	switch(fv->log_code) {
 	case 0:
 		// UTF-8
@@ -1612,11 +1612,6 @@
 	default:
 		break;
 	}
-
-	if (needs_unlock) {
-		GlobalUnlock(cv.HLogBuf);
-		cv.LogBuf = NULL;
-	}
 }
 
 void FLogSetCode(int code)

Modified: trunk/teraterm/teraterm/teraterm.cpp
===================================================================
--- trunk/teraterm/teraterm/teraterm.cpp	2020-08-18 15:31:25 UTC (rev 8905)
+++ trunk/teraterm/teraterm/teraterm.cpp	2020-08-18 15:31:34 UTC (rev 8906)
@@ -132,12 +132,6 @@
 		CommSend(&cv);
 
 		/* Parser */
-		if ((cv.HLogBuf!=NULL) && (cv.LogBuf==NULL))
-			cv.LogBuf = (PCHAR)GlobalLock(cv.HLogBuf);
-
-		if ((cv.HBinBuf!=NULL) && (cv.BinBuf==NULL))
-			cv.BinBuf = (PCHAR)GlobalLock(cv.HBinBuf);
-
 		if ((TelStatus==TelIdle) && cv.TelMode)
 			TelStatus = TelIAC;
 

Modified: trunk/teraterm/teraterm/vtterm.c
===================================================================
--- trunk/teraterm/teraterm/vtterm.c	2020-08-18 15:31:25 UTC (rev 8905)
+++ trunk/teraterm/teraterm/vtterm.c	2020-08-18 15:31:34 UTC (rev 8906)
@@ -216,7 +216,7 @@
 static _locale_t CLocale = NULL;
 
 typedef struct {
-	CheckEOLData_t *eol;
+	CheckEOLData_t *check_eol;
 	int log_cr_type;
 } vtterm_work_t;
 
@@ -362,7 +362,7 @@
 
 	{
 		vtterm_work_t *vtterm = &vtterm_work;
-		vtterm->eol = CheckEOLCreate();
+		vtterm->check_eol = CheckEOLCreate();
 		vtterm->log_cr_type = 0;
 	}
 }
@@ -495,15 +495,17 @@
  */
 static void OutputLogUTF32(unsigned int u32)
 {
-	if (!FLogIsOpend() && !DDELog) {
+	vtterm_work_t *vtterm;
+	CheckEOLRet r;
+
+	if (!FLogIsOpendText() && !DDELog) {
 		return;
 	}
-	vtterm_work_t *vtterm = &vtterm_work;
-
-	CheckEOLRet r = CheckEOLCheck(vtterm->eol, u32);
+	vtterm = &vtterm_work;
+	r = CheckEOLCheck(vtterm->check_eol, u32);
 	if ((r & CheckEOLOutputEOL) != 0) {
 		// \x83\x8D\x83O\x81A\x89\xFC\x8Ds\x82\xF0\x8Fo\x97\xCD
-		if (FLogIsOpend()) {
+		if (FLogIsOpendText()) {
 			OutputLogNewLine(vtterm);
 		}
 
@@ -515,7 +517,7 @@
 	}
 	if ((r & CheckEOLOutputChar) != 0) {
 		// \x83\x8D\x83O\x81Au32\x82\xF0\x8Fo\x97\xCD
-		if (FLogIsOpend()) {
+		if (FLogIsOpendText()) {
 			FLogPutUTF32(u32);
 		}
 
@@ -539,7 +541,7 @@
  */
 static BOOL NeedsOutputBufs(void)
 {
-	return cv.HLogBuf != 0 || DDELog;
+	return FLogIsOpendText() || DDELog;
 }
 
 void MoveToStatusLine()
@@ -6350,11 +6352,15 @@
 		PutChar(b);
 }
 
-int VTParse()
+/**
+ *	1byte\x82\xE6\x82݂\xBE\x82\xB5
+ *	\x82\xBD\x82\xBE\x82\xB5\x8E\x9F\x82̏ꍇ\x81A\x93ǂݏo\x82\xB5\x82\xF0\x8Ds\x82\xED\x82Ȃ\xA2
+ *		- macro\x91\x97\x90M\x83o\x83b\x83t\x83@\x82ɗ]\x97T\x82\xAA\x82Ȃ\xA2
+ *		- \x83\x8D\x83O\x83o\x83b\x83t\x83@\x82ɗ]\x97T\x82\xAA\x82Ȃ\xA2
+ *
+ */
+static int CommRead1Byte_(PComVar cv, LPBYTE b)
 {
-	BYTE b;
-	int c;
-
 	if (DDELog && DDEGetCount() >= InBuffSize - 10) {
 		/* \x83o\x83b\x83t\x83@\x82ɗ]\x97T\x82\xAA\x82Ȃ\xA2\x8Fꍇ */
 		Sleep(1);
@@ -6361,7 +6367,7 @@
 		return 0;
 	}
 
-	if (FLogGetCount() >= InBuffSize - 10) {
+	if (FLogIsOpend() && FLogGetFreeCount() < 10) {
 		// \x8E\xA9\x95\xAA\x82̃o\x83b\x83t\x83@\x82ɗ]\x97T\x82\xAA\x82Ȃ\xA2\x8Fꍇ\x82́ACPU\x83X\x83P\x83W\x83\x85\x81[\x83\x8A\x83\x93\x83O\x82𑼂ɉ񂵁A
 		// CPU\x82\xAA\x83X\x83g\x81[\x83\x8B\x82\xB7\x82\xE9\x82̖h\x82\xAE\x81B
 		// (2006.10.13 yutaka)
@@ -6369,8 +6375,16 @@
 		return 0;
 	}
 
-	c = CommRead1Byte(&cv,&b);
+	return CommRead1Byte(cv, b);
+}
 
+int VTParse()
+{
+	BYTE b;
+	int c;
+
+	c = CommRead1Byte_(&cv,&b);
+
 	if (c==0) return 0;
 
 	CaretOff();
@@ -6443,7 +6457,7 @@
 		}
 
 		if (ChangeEmu==0)
-			c = CommRead1Byte(&cv,&b);
+			c = CommRead1Byte_(&cv,&b);
 	}
 
 	BuffUpdateScroll();

Modified: trunk/teraterm/teraterm/vtwin.cpp
===================================================================
--- trunk/teraterm/teraterm/vtwin.cpp	2020-08-18 15:31:25 UTC (rev 8905)
+++ trunk/teraterm/teraterm/vtwin.cpp	2020-08-18 15:31:34 UTC (rev 8906)
@@ -4159,6 +4159,15 @@
 
 void CVTWindow::OnCommentToLog()
 {
+	if (!FLogIsOpendText()) {
+		// \x91I\x91\xF0\x82ł\xAB\x82Ȃ\xA2\x82̂ŌĂ΂\xEA\x82Ȃ\xA2\x82͂\xB8
+		char uimsg[MAX_UIMSG];
+		get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts.UILanguageFile);
+		get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, sizeof(ts.UIMsg),
+		             "It is not opened by the log file yet.", ts.UILanguageFile);
+		::MessageBox(NULL, ts.UIMsg, uimsg, MB_OK|MB_ICONEXCLAMATION);
+		return;
+	}
 	FLogAddCommentDlg(m_hInst, HVTWin);
 }
 


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