| 59 |
#include "filesys_log_res.h" |
#include "filesys_log_res.h" |
| 60 |
#include "filesys_log.h" |
#include "filesys_log.h" |
| 61 |
|
|
| 62 |
|
/* |
| 63 |
|
Line Head flag for timestamping |
| 64 |
|
2007.05.24 Gentaro |
| 65 |
|
*/ |
| 66 |
|
enum enumLineEnd { |
| 67 |
|
Line_Other = 0, |
| 68 |
|
Line_LineHead = 1, |
| 69 |
|
Line_FileHead = 2, |
| 70 |
|
}; |
| 71 |
|
|
| 72 |
typedef struct { |
typedef struct { |
| 73 |
wchar_t *FullName; |
wchar_t *FullName; |
| 74 |
wchar_t *FileName; |
wchar_t *FileName; |
| 75 |
|
|
| 76 |
|
HANDLE FileHandle; |
| 77 |
|
LONG FileSize, ByteCount; |
| 78 |
|
|
| 79 |
BOOL FileOpen; |
DWORD StartTime; |
|
HANDLE FileHandle; |
|
|
LONG FileSize, ByteCount; |
|
| 80 |
|
|
| 81 |
DWORD StartTime; |
enum enumLineEnd eLineEnd; |
| 82 |
|
|
| 83 |
// log rotate |
// log rotate |
| 84 |
int RotateMode; // enum rotate_mode RotateMode; |
int RotateMode; // enum rotate_mode RotateMode; |
| 85 |
LONG RotateSize; |
LONG RotateSize; |
| 86 |
int RotateStep; |
int RotateStep; |
| 87 |
|
|
| 88 |
HANDLE LogThread; |
HANDLE LogThread; |
| 89 |
DWORD LogThreadId; |
DWORD LogThreadId; |
| 90 |
HANDLE LogThreadEvent; |
HANDLE LogThreadEvent; |
| 91 |
|
|
| 92 |
BOOL IsPause; |
BOOL IsPause; |
| 93 |
|
|
| 94 |
|
PFileTransDlg FLogDlg; |
| 95 |
} TFileVar_; |
} TFileVar_; |
| 96 |
typedef TFileVar_ *PFileVar_; |
typedef TFileVar_ *PFileVar_; |
| 97 |
|
|
| 103 |
static BOOL FileLog = FALSE; |
static BOOL FileLog = FALSE; |
| 104 |
static BOOL BinLog = FALSE; |
static BOOL BinLog = FALSE; |
| 105 |
|
|
|
/* |
|
|
Line Head flag for timestamping |
|
|
2007.05.24 Gentaro |
|
|
*/ |
|
|
enum enumLineEnd { |
|
|
Line_Other = 0, |
|
|
Line_LineHead = 1, |
|
|
Line_FileHead = 2, |
|
|
}; |
|
|
|
|
|
static enum enumLineEnd eLineEnd = Line_LineHead; |
|
|
|
|
|
|
|
| 106 |
// 遅延書き込み用スレッドのメッセージ |
// 遅延書き込み用スレッドのメッセージ |
| 107 |
#define WM_DPC_LOGTHREAD_SEND (WM_APP + 1) |
#define WM_DPC_LOGTHREAD_SEND (WM_APP + 1) |
| 108 |
|
|
| 112 |
static BOOL CreateLogBuf(void); |
static BOOL CreateLogBuf(void); |
| 113 |
static BOOL CreateBinBuf(void); |
static BOOL CreateBinBuf(void); |
| 114 |
|
|
|
static PFileTransDlg FLogDlg = NULL; |
|
| 115 |
|
|
| 116 |
static BOOL OpenFTDlg_(PFileVar fv) |
static BOOL OpenFTDlg_(PFileVar fv) |
| 117 |
{ |
{ |
| 137 |
FTDlg->Create(hInst, &info); |
FTDlg->Create(hInst, &info); |
| 138 |
FTDlg->RefreshNum(0, fv->FileSize, fv->ByteCount); |
FTDlg->RefreshNum(0, fv->FileSize, fv->ByteCount); |
| 139 |
|
|
| 140 |
FLogDlg = FTDlg; |
fv->FLogDlg = FTDlg; |
| 141 |
|
|
| 142 |
free(DlgCaption); |
free(DlgCaption); |
| 143 |
return TRUE; |
return TRUE; |
| 221 |
{ |
{ |
| 222 |
BOOL ret; |
BOOL ret; |
| 223 |
|
|
| 224 |
if (!ptr->FileOpen) |
if (ptr->FileHandle == INVALID_HANDLE_VALUE) { |
| 225 |
return; |
return; |
| 226 |
|
} |
| 227 |
|
|
| 228 |
if (ptr->LogThread != INVALID_HANDLE_VALUE) { |
if (ptr->LogThread != INVALID_HANDLE_VALUE) { |
| 229 |
// スレッドの終了待ち |
// スレッドの終了待ち |
| 239 |
ptr->LogThread = INVALID_HANDLE_VALUE; |
ptr->LogThread = INVALID_HANDLE_VALUE; |
| 240 |
} |
} |
| 241 |
CloseHandle(ptr->FileHandle); |
CloseHandle(ptr->FileHandle); |
| 242 |
|
ptr->FileHandle = INVALID_HANDLE_VALUE; |
| 243 |
} |
} |
| 244 |
|
|
| 245 |
// 遅延書き込み用スレッド |
// 遅延書き込み用スレッド |
| 278 |
return (0); |
return (0); |
| 279 |
} |
} |
| 280 |
|
|
| 281 |
|
// 遅延書き込み用スレッドを起こす。 |
| 282 |
|
// (2013.4.19 yutaka) |
| 283 |
|
// DeferredLogWriteThread スレッドが起床して、スレッドキューが作成されるより前に、 |
| 284 |
|
// ログファイルのクローズ(CloseFileSync)が行われると、エンキューが失敗し、デッドロック |
| 285 |
|
// するという問題を修正した。 |
| 286 |
|
// スレッド間の同期を行うため、名前なしイベントオブジェクトを使って、スレッドキューの |
| 287 |
|
// 作成まで待ち合わせするようにした。名前付きイベントオブジェクトを使う場合は、 |
| 288 |
|
// システム(Windows OS)上でユニークな名前にする必要がある。 |
| 289 |
|
// (2016.9.23 yutaka) |
| 290 |
|
static void StartThread(PFileVar fv) |
| 291 |
|
{ |
| 292 |
|
unsigned tid; |
| 293 |
|
fv->LogThreadEvent = CreateEvent(NULL, TRUE, FALSE, NULL); |
| 294 |
|
fv->LogThread = (HANDLE)_beginthreadex(NULL, 0, DeferredLogWriteThread, fv, 0, &tid); |
| 295 |
|
fv->LogThreadId = tid; |
| 296 |
|
if (fv->LogThreadEvent != NULL) { |
| 297 |
|
WaitForSingleObject(fv->LogThreadEvent, INFINITE); |
| 298 |
|
CloseHandle(fv->LogThreadEvent); |
| 299 |
|
} |
| 300 |
|
} |
| 301 |
|
|
| 302 |
/** |
/** |
| 303 |
* ダイアログの内容を ts に書き戻し |
* ダイアログの内容を ts に書き戻し |
| 304 |
* |
* |
| 665 |
return FALSE; |
return FALSE; |
| 666 |
} |
} |
| 667 |
|
|
| 668 |
|
static void OpenLogFile(PFileVar fv) |
| 669 |
|
{ |
| 670 |
|
int dwShareMode = FILE_SHARE_READ; |
| 671 |
|
if (!ts.LogLockExclusive) { |
| 672 |
|
dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; |
| 673 |
|
} |
| 674 |
|
LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, |
| 675 |
|
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); |
| 676 |
|
} |
| 677 |
|
|
| 678 |
static BOOL LogStart(const wchar_t *fname) |
static BOOL LogStart(const wchar_t *fname) |
| 679 |
{ |
{ |
| 680 |
unsigned tid; |
PFileVar fv = LogVar; |
| 681 |
|
|
| 682 |
LogVar->FullName = _wcsdup(fname); |
fv->FullName = _wcsdup(fname); |
| 683 |
|
|
|
PFileVar fv = LogVar; |
|
| 684 |
wchar_t *p = wcsrchr(fv->FullName, L'\\'); |
wchar_t *p = wcsrchr(fv->FullName, L'\\'); |
| 685 |
if (p == NULL) { |
if (p == NULL) { |
| 686 |
p = wcsrchr(fv->FullName, L'/'); |
p = wcsrchr(fv->FullName, L'/'); |
| 689 |
fv->FileName = _wcsdup(fv->FullName); |
fv->FileName = _wcsdup(fv->FullName); |
| 690 |
} |
} |
| 691 |
else { |
else { |
| 692 |
fv->FileName = _wcsdup(p++); |
fv->FileName = _wcsdup(p + 1); |
| 693 |
} |
} |
| 694 |
FixLogOption(); |
FixLogOption(); |
| 695 |
|
|
| 699 |
FileLog = FALSE; |
FileLog = FALSE; |
| 700 |
if (! CreateBinBuf()) |
if (! CreateBinBuf()) |
| 701 |
{ |
{ |
|
FileTransEnd_(); |
|
| 702 |
return FALSE; |
return FALSE; |
| 703 |
} |
} |
| 704 |
} |
} |
| 707 |
FileLog = TRUE; |
FileLog = TRUE; |
| 708 |
if (! CreateLogBuf()) |
if (! CreateLogBuf()) |
| 709 |
{ |
{ |
|
FileTransEnd_(); |
|
| 710 |
return FALSE; |
return FALSE; |
| 711 |
} |
} |
| 712 |
} |
} |
| 713 |
cv.LStart = cv.LogPtr; |
cv.LStart = cv.LogPtr; |
| 714 |
cv.LCount = 0; |
cv.LCount = 0; |
| 715 |
|
|
| 716 |
/* 2007.05.24 Gentaro */ |
OpenLogFile(fv); |
| 717 |
eLineEnd = Line_LineHead; |
if (LogVar->FileHandle == INVALID_HANDLE_VALUE) { |
| 718 |
|
return FALSE; |
| 719 |
|
} |
| 720 |
|
|
| 721 |
|
/* 2007.05.24 Gentaro */ |
| 722 |
|
fv->eLineEnd = Line_LineHead; |
| 723 |
if (ts.Append > 0) |
if (ts.Append > 0) |
| 724 |
{ |
{ |
| 725 |
int dwShareMode = FILE_SHARE_READ; |
SetFilePointer(LogVar->FileHandle, 0, NULL, FILE_END); |
| 726 |
if (!ts.LogLockExclusive) { |
/* 2007.05.24 Gentaro |
| 727 |
dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; |
If log file already exists, |
| 728 |
} |
a newline is inserted before the first timestamp. |
| 729 |
LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, |
*/ |
| 730 |
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); |
fv->eLineEnd = Line_FileHead; |
|
if (LogVar->FileHandle != INVALID_HANDLE_VALUE){ |
|
|
SetFilePointer(LogVar->FileHandle, 0, NULL, FILE_END); |
|
|
/* 2007.05.24 Gentaro |
|
|
If log file already exists, |
|
|
a newline is inserted before the first timestamp. |
|
|
*/ |
|
|
eLineEnd = Line_FileHead; |
|
|
} |
|
| 731 |
} |
} |
|
else { |
|
|
int dwShareMode = FILE_SHARE_READ; |
|
|
if (!ts.LogLockExclusive) { |
|
|
dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; |
|
|
} |
|
|
LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, |
|
|
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); |
|
|
} |
|
|
LogVar->FileOpen = (LogVar->FileHandle != INVALID_HANDLE_VALUE); |
|
|
if (! LogVar->FileOpen) |
|
|
{ |
|
|
FileTransEnd_(); |
|
|
return FALSE; |
|
|
} |
|
|
LogVar->ByteCount = 0; |
|
| 732 |
|
|
| 733 |
// Log rotate configuration |
// Log rotate configuration |
| 734 |
LogVar->RotateMode = ts.LogRotate; |
LogVar->RotateMode = ts.LogRotate; |
| 740 |
// (2016.4.9 yutaka) |
// (2016.4.9 yutaka) |
| 741 |
if (LogVar->RotateMode != ROTATE_NONE) { |
if (LogVar->RotateMode != ROTATE_NONE) { |
| 742 |
DWORD size = GetFileSize(LogVar->FileHandle, NULL); |
DWORD size = GetFileSize(LogVar->FileHandle, NULL); |
| 743 |
if (size != -1) |
if (size == -1) { |
| 744 |
LogVar->ByteCount = size; |
return FALSE; |
| 745 |
|
} |
| 746 |
|
LogVar->ByteCount = size; |
| 747 |
|
} |
| 748 |
|
else { |
| 749 |
|
LogVar->ByteCount = 0; |
| 750 |
} |
} |
| 751 |
|
|
| 752 |
if (! OpenFTDlg_(LogVar)) { |
if (! OpenFTDlg_(LogVar)) { |
|
FileTransEnd_(); |
|
| 753 |
return FALSE; |
return FALSE; |
| 754 |
} |
} |
| 755 |
|
|
| 756 |
LogVar->IsPause = FALSE; |
LogVar->IsPause = FALSE; |
| 757 |
LogVar->StartTime = GetTickCount(); |
LogVar->StartTime = GetTickCount(); |
| 758 |
|
|
| 759 |
// 遅延書き込み用スレッドを起こす。 |
if (ts.DeferredLogWriteMode) { |
| 760 |
// (2013.4.19 yutaka) |
StartThread(LogVar); |
|
// DeferredLogWriteThread スレッドが起床して、スレッドキューが作成されるより前に、 |
|
|
// ログファイルのクローズ(CloseFileSync)が行われると、エンキューが失敗し、デッドロック |
|
|
// するという問題を修正した。 |
|
|
// スレッド間の同期を行うため、名前なしイベントオブジェクトを使って、スレッドキューの |
|
|
// 作成まで待ち合わせするようにした。名前付きイベントオブジェクトを使う場合は、 |
|
|
// システム(Windows OS)上でユニークな名前にする必要がある。 |
|
|
// (2016.9.23 yutaka) |
|
|
LogVar->LogThreadEvent = CreateEvent(NULL, TRUE, FALSE, NULL); |
|
|
LogVar->LogThread = (HANDLE)_beginthreadex(NULL, 0, DeferredLogWriteThread, LogVar, 0, &tid); |
|
|
LogVar->LogThreadId = tid; |
|
|
if (LogVar->LogThreadEvent != NULL) { |
|
|
WaitForSingleObject(LogVar->LogThreadEvent, INFINITE); |
|
|
CloseHandle(LogVar->LogThreadEvent); |
|
| 761 |
} |
} |
| 762 |
|
|
| 763 |
// 現在バッファにあるデータをすべて書き出してから、 |
// 現在バッファにあるデータをすべて書き出してから、 |
| 864 |
{ |
{ |
| 865 |
DWORD wrote; |
DWORD wrote; |
| 866 |
|
|
| 867 |
if (LogVar == NULL || !LogVar->FileOpen) { |
if (LogVar == NULL) { |
| 868 |
char uimsg[MAX_UIMSG]; |
char uimsg[MAX_UIMSG]; |
| 869 |
get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts.UILanguageFile); |
get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts.UILanguageFile); |
| 870 |
get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, sizeof(ts.UIMsg), |
get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, sizeof(ts.UIMsg), |
| 879 |
/* Set Line End Flag |
/* Set Line End Flag |
| 880 |
2007.05.24 Gentaro |
2007.05.24 Gentaro |
| 881 |
*/ |
*/ |
| 882 |
eLineEnd = Line_LineHead; |
LogVar->eLineEnd = Line_LineHead; |
| 883 |
logfile_unlock(); |
logfile_unlock(); |
| 884 |
} |
} |
| 885 |
|
|
| 889 |
{ |
{ |
| 890 |
int loopmax = 10000; // XXX |
int loopmax = 10000; // XXX |
| 891 |
int i, k; |
int i, k; |
|
int dwShareMode = FILE_SHARE_READ; |
|
|
unsigned tid; |
|
|
|
|
|
if (! LogVar->FileOpen) return; |
|
| 892 |
|
|
| 893 |
if (LogVar->RotateMode == ROTATE_NONE) |
if (LogVar->RotateMode == ROTATE_NONE) |
| 894 |
return; |
return; |
| 907 |
|
|
| 908 |
// いったん今のファイルをクローズして、別名のファイルをオープンする。 |
// いったん今のファイルをクローズして、別名のファイルをオープンする。 |
| 909 |
CloseFileSync(LogVar); |
CloseFileSync(LogVar); |
|
//_lclose(LogVar->FileHandle); |
|
| 910 |
|
|
| 911 |
// 世代ローテーションのステップ数の指定があるか |
// 世代ローテーションのステップ数の指定があるか |
| 912 |
if (LogVar->RotateStep > 0) |
if (LogVar->RotateStep > 0) |
| 917 |
aswprintf(&filename, L"%s.%d", LogVar->FullName, i); |
aswprintf(&filename, L"%s.%d", LogVar->FullName, i); |
| 918 |
DWORD attr = _GetFileAttributesW(filename); |
DWORD attr = _GetFileAttributesW(filename); |
| 919 |
free(filename); |
free(filename); |
| 920 |
if ((attr != INVALID_FILE_ATTRIBUTES) && ((attr & FILE_ATTRIBUTE_DIRECTORY) == 0)) |
if (attr == INVALID_FILE_ATTRIBUTES) |
| 921 |
break; |
break; |
| 922 |
} |
} |
| 923 |
if (i > loopmax) { |
if (i > loopmax) { |
| 943 |
} |
} |
| 944 |
|
|
| 945 |
// 再オープン |
// 再オープン |
| 946 |
if (!ts.LogLockExclusive) { |
OpenLogFile(LogVar); |
| 947 |
dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; |
if (ts.DeferredLogWriteMode) { |
| 948 |
} |
StartThread(LogVar); |
|
LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, |
|
|
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); |
|
|
|
|
|
// 遅延書き込み用スレッドを起こす。 |
|
|
// (2013.4.19 yutaka) |
|
|
// DeferredLogWriteThread スレッドが起床して、スレッドキューが作成されるより前に、 |
|
|
// ログファイルのクローズ(CloseFileSync)が行われると、エンキューが失敗し、デッドロック |
|
|
// するという問題を修正した。 |
|
|
// スレッド間の同期を行うため、名前なしイベントオブジェクトを使って、スレッドキューの |
|
|
// 作成まで待ち合わせするようにした。名前付きイベントオブジェクトを使う場合は、 |
|
|
// システム(Windows OS)上でユニークな名前にする必要がある。 |
|
|
// (2016.9.26 yutaka) |
|
|
LogVar->LogThreadEvent = CreateEvent(NULL, TRUE, FALSE, NULL); |
|
|
LogVar->LogThread = (HANDLE)_beginthreadex(NULL, 0, DeferredLogWriteThread, LogVar, 0, &tid); |
|
|
LogVar->LogThreadId = tid; |
|
|
if (LogVar->LogThreadEvent != NULL) { |
|
|
WaitForSingleObject(LogVar->LogThreadEvent, INFINITE); |
|
|
CloseHandle(LogVar->LogThreadEvent); |
|
| 949 |
} |
} |
| 950 |
|
|
| 951 |
logfile_unlock(); |
logfile_unlock(); |
|
|
|
| 952 |
} |
} |
| 953 |
|
|
| 954 |
/** |
/** |
| 963 |
DWORD WriteBufMax, WriteBufLen; |
DWORD WriteBufMax, WriteBufLen; |
| 964 |
CHAR tmp[128]; |
CHAR tmp[128]; |
| 965 |
DWORD wrote; |
DWORD wrote; |
| 966 |
|
PFileVar fv = LogVar; |
| 967 |
|
|
|
if (! LogVar->FileOpen) return; |
|
| 968 |
if (FileLog) |
if (FileLog) |
| 969 |
{ |
{ |
| 970 |
Buf = cv.LogBuf; |
Buf = cv.LogBuf; |
| 994 |
if (!FLogIsPause() && (! cv.ProtoFlag)) |
if (!FLogIsPause() && (! cv.ProtoFlag)) |
| 995 |
{ |
{ |
| 996 |
tmp[0] = 0; |
tmp[0] = 0; |
| 997 |
if ( ts.LogTimestamp && eLineEnd ) { |
if ( ts.LogTimestamp && fv->eLineEnd ) { |
| 998 |
char *strtime = NULL; |
char *strtime = NULL; |
| 999 |
|
|
| 1000 |
switch (ts.LogTimestampType) { |
switch (ts.LogTimestampType) { |
| 1013 |
} |
} |
| 1014 |
|
|
| 1015 |
/* 2007.05.24 Gentaro */ |
/* 2007.05.24 Gentaro */ |
| 1016 |
if( eLineEnd == Line_FileHead ){ |
if(fv->eLineEnd == Line_FileHead ){ |
| 1017 |
strncat_s(tmp, sizeof(tmp), "\r\n", _TRUNCATE); |
strncat_s(tmp, sizeof(tmp), "\r\n", _TRUNCATE); |
| 1018 |
} |
} |
| 1019 |
strncat_s(tmp, sizeof(tmp), "[", _TRUNCATE); |
strncat_s(tmp, sizeof(tmp), "[", _TRUNCATE); |
| 1023 |
|
|
| 1024 |
/* 2007.05.24 Gentaro */ |
/* 2007.05.24 Gentaro */ |
| 1025 |
if( b == 0x0a ){ |
if( b == 0x0a ){ |
| 1026 |
eLineEnd = Line_LineHead; /* set endmark*/ |
fv->eLineEnd = Line_LineHead; /* set endmark*/ |
| 1027 |
} |
} |
| 1028 |
else { |
else { |
| 1029 |
eLineEnd = Line_Other; /* clear endmark*/ |
fv->eLineEnd = Line_Other; /* clear endmark*/ |
| 1030 |
} |
} |
| 1031 |
|
|
| 1032 |
if (WriteBufLen >= (WriteBufMax*4/5)) { |
if (WriteBufLen >= (WriteBufMax*4/5)) { |
| 1049 |
{ |
{ |
| 1050 |
if (!FLogIsPause() && (! cv.ProtoFlag)) |
if (!FLogIsPause() && (! cv.ProtoFlag)) |
| 1051 |
{ |
{ |
| 1052 |
if ( ts.LogTimestamp && eLineEnd ) { |
if ( ts.LogTimestamp && fv->eLineEnd ) { |
| 1053 |
char *strtime = NULL; |
char *strtime = NULL; |
| 1054 |
|
|
| 1055 |
switch (ts.LogTimestampType) { |
switch (ts.LogTimestampType) { |
| 1073 |
|
|
| 1074 |
/* 2007.05.24 Gentaro */ |
/* 2007.05.24 Gentaro */ |
| 1075 |
if( b == 0x0a ){ |
if( b == 0x0a ){ |
| 1076 |
eLineEnd = Line_LineHead; /* set endmark*/ |
fv->eLineEnd = Line_LineHead; /* set endmark*/ |
| 1077 |
} |
} |
| 1078 |
else { |
else { |
| 1079 |
eLineEnd = Line_Other; /* clear endmark*/ |
fv->eLineEnd = Line_Other; /* clear endmark*/ |
| 1080 |
} |
} |
| 1081 |
|
|
| 1082 |
WriteFile(LogVar->FileHandle, (PCHAR)&b, 1, &wrote, NULL); |
WriteFile(LogVar->FileHandle, (PCHAR)&b, 1, &wrote, NULL); |
| 1098 |
cv.BCount = Count; |
cv.BCount = Count; |
| 1099 |
} |
} |
| 1100 |
if (FLogIsPause() || cv.ProtoFlag) return; |
if (FLogIsPause() || cv.ProtoFlag) return; |
| 1101 |
if (FLogDlg!=NULL) |
LogVar->FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount); |
|
FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount); |
|
| 1102 |
|
|
| 1103 |
|
|
| 1104 |
// ログ・ローテート |
// ログ・ローテート |
| 1105 |
LogRotate(); |
LogRotate(); |
|
|
|
| 1106 |
} |
} |
| 1107 |
|
|
| 1108 |
static BOOL CreateLogBuf(void) |
static BOOL CreateLogBuf(void) |
| 1169 |
cv.Log1Byte = NULL; |
cv.Log1Byte = NULL; |
| 1170 |
cv.Log1Bin = NULL; |
cv.Log1Bin = NULL; |
| 1171 |
cv.LogBinSkip = NULL; |
cv.LogBinSkip = NULL; |
| 1172 |
if (FLogDlg!=NULL) |
PFileTransDlg FLogDlg = LogVar->FLogDlg; |
| 1173 |
{ |
if (FLogDlg != NULL) { |
| 1174 |
FLogDlg->DestroyWindow(); |
FLogDlg->DestroyWindow(); |
| 1175 |
FLogDlg = NULL; |
FLogDlg = NULL; |
| 1176 |
} |
} |
| 1190 |
return; |
return; |
| 1191 |
} |
} |
| 1192 |
LogVar->IsPause = Pause; |
LogVar->IsPause = Pause; |
| 1193 |
FLogDlg->ChangeButton(Pause); |
LogVar->FLogDlg->ChangeButton(Pause); |
| 1194 |
} |
} |
| 1195 |
|
|
| 1196 |
/** |
/** |
| 1238 |
{ 0, "DLG_COMMENT_TITLE" }, |
{ 0, "DLG_COMMENT_TITLE" }, |
| 1239 |
{ IDOK, "BTN_OK" } |
{ IDOK, "BTN_OK" } |
| 1240 |
}; |
}; |
|
char buf[256]; |
|
| 1241 |
UINT ret; |
UINT ret; |
| 1242 |
|
|
| 1243 |
switch (msg) { |
switch (msg) { |
| 1250 |
|
|
| 1251 |
case WM_COMMAND: |
case WM_COMMAND: |
| 1252 |
switch (LOWORD(wp)) { |
switch (LOWORD(wp)) { |
| 1253 |
case IDOK: |
case IDOK: { |
| 1254 |
|
char buf[256]; |
| 1255 |
memset(buf, 0, sizeof(buf)); |
memset(buf, 0, sizeof(buf)); |
| 1256 |
ret = GetDlgItemTextA(hDlgWnd, IDC_EDIT_COMMENT, buf, sizeof(buf) - 1); |
ret = GetDlgItemTextA(hDlgWnd, IDC_EDIT_COMMENT, buf, sizeof(buf) - 1); |
| 1257 |
if (ret > 0) { // テキスト取得成功 |
if (ret > 0) { // テキスト取得成功 |
| 1260 |
} |
} |
| 1261 |
TTEndDialog(hDlgWnd, IDOK); |
TTEndDialog(hDlgWnd, IDOK); |
| 1262 |
break; |
break; |
| 1263 |
|
} |
| 1264 |
default: |
default: |
| 1265 |
return FALSE; |
return FALSE; |
| 1266 |
} |
} |
| 1315 |
} |
} |
| 1316 |
LogVar = fv; |
LogVar = fv; |
| 1317 |
memset(fv, 0, sizeof(TFileVar)); |
memset(fv, 0, sizeof(TFileVar)); |
| 1318 |
|
fv->FileHandle = INVALID_HANDLE_VALUE; |
| 1319 |
fv->FileOpen = FALSE; |
fv->LogThread = INVALID_HANDLE_VALUE; |
| 1320 |
|
fv->eLineEnd = Line_LineHead; |
| 1321 |
|
|
| 1322 |
ret = LogStart(fname); |
ret = LogStart(fname); |
| 1323 |
|
if (ret == FALSE) { |
| 1324 |
|
FileTransEnd_(); |
| 1325 |
|
} |
| 1326 |
|
|
| 1327 |
return ret; |
return ret; |
| 1328 |
} |
} |
| 1329 |
|
|
| 1330 |
BOOL FLogIsOpend(void) |
BOOL FLogIsOpend(void) |
| 1331 |
{ |
{ |
|
// LogVar->FileOpen |
|
| 1332 |
return LogVar != NULL; |
return LogVar != NULL; |
| 1333 |
} |
} |
| 1334 |
|
|
| 1341 |
WriteFile(LogVar->FileHandle, str, len, &wrote, NULL); |
WriteFile(LogVar->FileHandle, str, len, &wrote, NULL); |
| 1342 |
LogVar->ByteCount = |
LogVar->ByteCount = |
| 1343 |
LogVar->ByteCount + len; |
LogVar->ByteCount + len; |
| 1344 |
if (FLogDlg!=NULL) |
LogVar->FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount); |
|
FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount); |
|
| 1345 |
} |
} |
| 1346 |
} |
} |
| 1347 |
|
|
| 1459 |
if (LogVar == NULL) { |
if (LogVar == NULL) { |
| 1460 |
return; |
return; |
| 1461 |
} |
} |
|
if (FLogDlg == NULL) |
|
|
return; |
|
| 1462 |
|
|
| 1463 |
HWND HWndLog = FLogDlg->m_hWnd; |
HWND HWndLog = LogVar->FLogDlg->m_hWnd; |
| 1464 |
ShowWindow(HWndLog, nCmdShow); |
ShowWindow(HWndLog, nCmdShow); |
| 1465 |
if (nCmdShow == SW_RESTORE) { |
if (nCmdShow == SW_RESTORE) { |
| 1466 |
// 拡張スタイル WS_EX_NOACTIVATE 状態を解除する |
// 拡張スタイル WS_EX_NOACTIVATE 状態を解除する |
| 1473 |
if (LogVar == NULL) { |
if (LogVar == NULL) { |
| 1474 |
return; |
return; |
| 1475 |
} |
} |
| 1476 |
if (FLogDlg != NULL) { |
HWND HWndLog = LogVar->FLogDlg->m_hWnd; |
| 1477 |
FLogDlg->ShowWindow(SW_SHOWNORMAL); |
ShowWindow(HWndLog, SW_SHOWNORMAL); |
| 1478 |
SetForegroundWindow(FLogDlg->GetSafeHwnd()); |
SetForegroundWindow(HWndLog); |
|
} |
|
| 1479 |
} |
} |
| 1480 |
|
|
| 1481 |
/** |
/** |