Revision: 10771 https://osdn.net/projects/ttssh2/scm/svn/commits/10771 Author: zmatsuo Date: 2023-06-17 23:47:20 +0900 (Sat, 17 Jun 2023) Log Message: ----------- デバグ用文字出力を charset.c へ移動 - PutDebugChar() を vtterm.c から移動 - 受信文字を表示用文字に変換する箇所が charset.c にまとまった Modified Paths: -------------- trunk/teraterm/common/tttypes_charset.h trunk/teraterm/teraterm/charset.c trunk/teraterm/teraterm/vtterm.c trunk/teraterm/teraterm/vtterm.h trunk/teraterm/ttpdlg/ttdlg.c -------------- next part -------------- Modified: trunk/teraterm/common/tttypes_charset.h =================================================================== --- trunk/teraterm/common/tttypes_charset.h 2023-06-17 14:47:11 UTC (rev 10770) +++ trunk/teraterm/common/tttypes_charset.h 2023-06-17 14:47:20 UTC (rev 10771) @@ -30,13 +30,16 @@ #pragma once /* Language */ -#define IdEnglish 1 -#define IdJapanese 2 -#define IdRussian 3 -#define IdKorean 4 //HKS -#define IdUtf8 5 -#define IdChinese 6 -#define IdLangMax IdChinese +typedef enum { + IdEnglish = 1, + IdJapanese, + IdRussian, + IdKorean, //HKS + IdUtf8, + IdChinese, + IdDebug, + IdLangMax, +} IdLanguage; /* Kanji Code ID */ /* ts.KanjiCode, ts.KanjiCodeSend \x82̒l */ Modified: trunk/teraterm/teraterm/charset.c =================================================================== --- trunk/teraterm/teraterm/charset.c 2023-06-17 14:47:11 UTC (rev 10770) +++ trunk/teraterm/teraterm/charset.c 2023-06-17 14:47:20 UTC (rev 10771) @@ -43,6 +43,7 @@ #include "unicode.h" #include "language.h" // for JIS2SJIS() #include "ttcstd.h" +#include "keyboard.h" // for DebugFlag #include "charset.h" @@ -773,20 +774,80 @@ return TRUE; } -void ParseFirst(BYTE b) { - switch (ts.Language) { - case IdUtf8: - ParseFirstUTF8(b); +static void PutDebugChar(BYTE b) +{ + int i; + BOOL svInsertMode, svAutoWrapMode; + TCharAttr svCharAttr; + TCharAttr char_attr; + + svInsertMode = TermGetInsertMode(); + TermSetInsertMode(FALSE); + svAutoWrapMode = TermGetAutoWrapMode(); + TermSetAutoWrapMode(TRUE); + + TermGetAttr(&svCharAttr); + char_attr = svCharAttr; + char_attr.Attr = AttrDefault; + TermSetAttr(&char_attr); + + if (DebugFlag==DEBUG_FLAG_HEXD) { + char buff[3]; + _snprintf(buff, 3, "%02X", (unsigned int) b); + + for (i=0; i<2; i++) + PutChar(buff[i]); + PutChar(' '); + } + else if (DebugFlag==DEBUG_FLAG_NORM) { + + if ((b & 0x80) == 0x80) { + //UpdateStr(); + char_attr.Attr = AttrReverse; + TermSetAttr(&char_attr); + b = b & 0x7f; + } + + if (b<=US) { + PutChar('^'); + PutChar((char)(b+0x40)); + } + else if (b==DEL) { + PutChar('<'); + PutChar('D'); + PutChar('E'); + PutChar('L'); + PutChar('>'); + } + else + PutChar(b); + } + + TermSetAttr(&char_attr); + TermSetInsertMode(svInsertMode); + TermSetAutoWrapMode(svAutoWrapMode); +} + +void ParseFirst(BYTE b) +{ + WORD language = ts.Language; + if (DebugFlag != DEBUG_FLAG_NONE) { + language = IdDebug; + } + + switch (language) { + case IdUtf8: + ParseFirstUTF8(b); return; - case IdJapanese: + case IdJapanese: switch (ts.KanjiCode) { - case IdUTF8: - if (ParseFirstUTF8(b)) { + case IdUTF8: + if (ParseFirstUTF8(b)) { return; } break; - default: + default: if (ParseFirstJP(b)) { return; } @@ -793,14 +854,14 @@ } break; - case IdKorean: + case IdKorean: switch (ts.KanjiCode) { - case IdUTF8: + case IdUTF8: if (ParseFirstUTF8(b)) { return; } break; - default: + default: if (ParseFirstKR(b)) { return; } @@ -807,7 +868,7 @@ } break; - case IdRussian: + case IdRussian: if (ParseFirstRus(b)) { return; } @@ -832,7 +893,11 @@ } break; } + case IdDebug: { + PutDebugChar(b); + return; } + } if (SSflag) { PutChar(b); Modified: trunk/teraterm/teraterm/vtterm.c =================================================================== --- trunk/teraterm/teraterm/vtterm.c 2023-06-17 14:47:11 UTC (rev 10770) +++ trunk/teraterm/teraterm/vtterm.c 2023-06-17 14:47:20 UTC (rev 10771) @@ -994,64 +994,6 @@ PutU32(b); } -static void PutDebugChar(BYTE b) -{ - static BYTE buff[3]; - int i; - BOOL svInsertMode, svAutoWrapMode; - BYTE svCharAttr; - - if (DebugFlag!=DEBUG_FLAG_NOUT) { - svInsertMode = InsertMode; - svAutoWrapMode = AutoWrapMode; - InsertMode = FALSE; - AutoWrapMode = TRUE; - - svCharAttr = CharAttr.Attr; - if (CharAttr.Attr != AttrDefault) { - UpdateStr(); - CharAttr.Attr = AttrDefault; - } - - if (DebugFlag==DEBUG_FLAG_HEXD) { - _snprintf(buff, 3, "%02X", (unsigned int) b); - - for (i=0; i<2; i++) - PutChar(buff[i]); - PutChar(' '); - } - else if (DebugFlag==DEBUG_FLAG_NORM) { - - if ((b & 0x80) == 0x80) { - UpdateStr(); - CharAttr.Attr = AttrReverse; - b = b & 0x7f; - } - - if (b<=US) { - PutChar('^'); - PutChar((char)(b+0x40)); - } - else if (b==DEL) { - PutChar('<'); - PutChar('D'); - PutChar('E'); - PutChar('L'); - PutChar('>'); - } - else - PutChar(b); - } - - if (CharAttr.Attr != svCharAttr) { - UpdateStr(); - CharAttr.Attr = svCharAttr; - } - InsertMode = svInsertMode; - AutoWrapMode = svAutoWrapMode; - } -} - static void PrnParseControl(BYTE b) // printer mode { switch (b) { @@ -5435,44 +5377,40 @@ printf("%02x(%c) ", b, isprint(b) ? b : '.'); } #endif - if (DebugFlag!=DEBUG_FLAG_NONE) - PutDebugChar(b); - else { - switch (ParseMode) { - case ModeFirst: - ParseFirst(b); - break; - case ModeESC: - EscapeSequence(b); - break; - case ModeDCS: - DeviceControl(b); - break; - case ModeDCUserKey: - DCUserKey(b); - break; - case ModeSOS: - IgnoreString(b); - break; - case ModeCSI: - ControlSequence(b); - break; - case ModeXS: - XSequence(b); - break; - case ModeDLE: - DLESeen(b); - break; - case ModeCAN: - CANSeen(b); - break; - case ModeIgnore: - IgnoreString(b); - break; - default: - ParseMode = ModeFirst; - ParseFirst(b); - } + switch (ParseMode) { + case ModeFirst: + ParseFirst(b); + break; + case ModeESC: + EscapeSequence(b); + break; + case ModeDCS: + DeviceControl(b); + break; + case ModeDCUserKey: + DCUserKey(b); + break; + case ModeSOS: + IgnoreString(b); + break; + case ModeCSI: + ControlSequence(b); + break; + case ModeXS: + XSequence(b); + break; + case ModeDLE: + DLESeen(b); + break; + case ModeCAN: + CANSeen(b); + break; + case ModeIgnore: + IgnoreString(b); + break; + default: + ParseMode = ModeFirst; + ParseFirst(b); } PrevCharacter = b; // memorize previous character for AUTO CR/LF-receive mode @@ -5915,3 +5853,34 @@ return; } + +void TermGetAttr(TCharAttr *attr) +{ + *attr = CharAttr; +} + +void TermSetAttr(const TCharAttr *attr) +{ + UpdateStr(); + CharAttr = *attr; +} + +BOOL TermGetInsertMode(void) +{ + return InsertMode; +} + +void TermSetInsertMode(BOOL insert_mode) +{ + InsertMode = insert_mode; +} + +BOOL TermGetAutoWrapMode(void) +{ + return AutoWrapMode; +} + +void TermSetAutoWrapMode(BOOL auto_wrap_mode) +{ + AutoWrapMode = auto_wrap_mode; +} Modified: trunk/teraterm/teraterm/vtterm.h =================================================================== --- trunk/teraterm/teraterm/vtterm.h 2023-06-17 14:47:11 UTC (rev 10770) +++ trunk/teraterm/teraterm/vtterm.h 2023-06-17 14:47:20 UTC (rev 10771) @@ -29,6 +29,10 @@ /* TERATERM.EXE, VT terminal emulation */ +#pragma once + +#include "buffer.h" for TCharAttr + #ifdef __cplusplus extern "C" { #endif @@ -50,6 +54,12 @@ void TermPasteString(const wchar_t *str, size_t len); void TermSendStartBracket(void); void TermSendEndBracket(void); +void TermGetAttr(TCharAttr *attr); +void TermSetAttr(const TCharAttr *attr); +BOOL TermGetInsertMode(void); +void TermSetInsertMode(BOOL insert_mode); +BOOL TermGetAutoWrapMode(void); +void TermSetAutoWrapMode(BOOL auto_wrap_mode); #ifdef __cplusplus } Modified: trunk/teraterm/ttpdlg/ttdlg.c =================================================================== --- trunk/teraterm/ttpdlg/ttdlg.c 2023-06-17 14:47:11 UTC (rev 10770) +++ trunk/teraterm/ttpdlg/ttdlg.c 2023-06-17 14:47:20 UTC (rev 10771) @@ -2836,7 +2836,7 @@ // Language \x82\xAA\x95ύX\x82\xB3\x82ꂽ\x82Ƃ\xAB\x81A // KanjiCode/KanjiCodeSend \x82\xF0\x95ύX\x90\xE6\x82\xCC Language \x82ɑ\xB6\x8D݂\xB7\x82\xE9\x92l\x82ɒu\x82\xAB\x8A\xB7\x82\xA6\x82\xE9 - if (1 <= language && language <= IdLangMax && language != ts->Language) { + if (1 <= language && language < IdLangMax && language != ts->Language) { WORD KanjiCode = ts->KanjiCode; WORD KanjiCodeSend = ts->KanjiCodeSend; ts->KanjiCode = KanjiCodeTranslate(language,KanjiCode);