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