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); }