Revision: 10760 https://osdn.net/projects/ttssh2/scm/svn/commits/10760 Author: zmatsuo Date: 2023-06-13 00:20:40 +0900 (Tue, 13 Jun 2023) Log Message: ----------- 各モジュール間APIをUnicode版のみを使用するようにした - buffer.c 内 BuffPutChar() -> BuffPutUnicode() - vtterm.c 内 PutChar() -> PutU32() Modified Paths: -------------- trunk/teraterm/teraterm/buffer.c trunk/teraterm/teraterm/buffer.h trunk/teraterm/teraterm/charset.c trunk/teraterm/teraterm/charset.h trunk/teraterm/teraterm/vtterm.c -------------- next part -------------- Modified: trunk/teraterm/teraterm/buffer.c =================================================================== --- trunk/teraterm/teraterm/buffer.c 2023-06-12 15:20:30 UTC (rev 10759) +++ trunk/teraterm/teraterm/buffer.c 2023-06-12 15:20:40 UTC (rev 10760) @@ -3244,11 +3244,6 @@ return move_x; } -void BuffPutChar(BYTE b, TCharAttr Attr, BOOL Insert) -{ - BuffPutUnicode(b, Attr, Insert); -} - static BOOL CheckSelect(int x, int y) // subroutine called by BuffUpdateRect { Modified: trunk/teraterm/teraterm/buffer.h =================================================================== --- trunk/teraterm/teraterm/buffer.h 2023-06-12 15:20:30 UTC (rev 10759) +++ trunk/teraterm/teraterm/buffer.h 2023-06-12 15:20:40 UTC (rev 10760) @@ -98,7 +98,6 @@ wchar_t *BuffCBCopyUnicode(BOOL Table); void BuffPrint(BOOL ScrollRegion); void BuffDumpCurrentLine(PrintFile *handle, BYTE TERM); -void BuffPutChar(BYTE b, TCharAttr Attr, BOOL Insert); int BuffPutUnicode(unsigned int uc, TCharAttr Attr, BOOL Insert); void BuffUpdateRect(int XStart, int YStart, int XEnd, int YEnd); void UpdateStr(void); Modified: trunk/teraterm/teraterm/charset.c =================================================================== --- trunk/teraterm/teraterm/charset.c 2023-06-12 15:20:30 UTC (rev 10759) +++ trunk/teraterm/teraterm/charset.c 2023-06-12 15:20:40 UTC (rev 10760) @@ -70,6 +70,11 @@ static VttermKanjiWork KanjiWork; +// Unicode\x83x\x81[\x83X\x82ɐ\xE8\x91ւ\xA6 +static void PutChar(BYTE b) +{ + PutU32(b); +} /** * ISO2022\x97p\x83\x8F\x81[\x83N\x82\xF0\x8F\x89\x8A\x{227B0B7}\x82\xE9 @@ -492,17 +497,13 @@ if (b<=US) { ParseControl(b); } else if ((b>=0x20) && (b<=0x7E)) { - //Kanji = 0; - //PutKanji(b); - PutChar(b); + PutU32(b); } else if ((b==0x8E) || (b==0x8F)) { PutChar('?'); } else if ((b>=0x80) && (b<=0x9F)) { ParseControl(b); } else if (b>=0xA0) { - //Kanji = 0; - //PutKanji(b); - PutChar(b); + PutU32(b); } } @@ -800,10 +801,13 @@ /** * DEC\x93\xC1\x8E\xEA\x83t\x83H\x83\x93\x83g(Tera Special font) * 0140(0x60) ... 0176(0x7f) \x82Ɍr\x90\xFC\x82ŃA\x83T\x83C\x83\x93\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9 + * (0xe0) ... (0xff) \x82\xE0? * <ESC>(0 \x82Ƃ\xA2\x82\xA4\x93\xC1\x8E\xEA\x82ȃG\x83X\x83P\x81[\x83v\x83V\x81[\x83P\x83\x93\x83X\x82Œ\xE8\x8B` * about/emulations.html * * @param b \x83R\x81[\x83h + * @retval TRUE IdSpecial + * @retval FALSE IdSpecial\x82ł͂Ȃ\xA2 */ BOOL CharSetIsSpecial(BYTE b) { Modified: trunk/teraterm/teraterm/charset.h =================================================================== --- trunk/teraterm/teraterm/charset.h 2023-06-12 15:20:30 UTC (rev 10759) +++ trunk/teraterm/teraterm/charset.h 2023-06-12 15:20:40 UTC (rev 10760) @@ -36,7 +36,6 @@ void ParseFirst(BYTE b); // output buffer -void PutChar(BYTE b); void PutU32(unsigned int code); void CarriageReturn(BOOL logFlag); void LineFeed(BYTE b, BOOL logFlag); Modified: trunk/teraterm/teraterm/vtterm.c =================================================================== --- trunk/teraterm/teraterm/vtterm.c 2023-06-12 15:20:30 UTC (rev 10759) +++ trunk/teraterm/teraterm/vtterm.c 2023-06-12 15:20:40 UTC (rev 10760) @@ -694,6 +694,11 @@ if (NeedsOutputBufs()) OutputLogByte(HT); } +static void BuffPutChar(BYTE b, TCharAttr Attr, BOOL Insert) +{ + BuffPutUnicode(b, Attr, Insert); +} + static void RepeatChar(BYTE b, int count) { int i; @@ -742,8 +747,163 @@ } } -void PutChar(BYTE b) +/** + * unicode(UTF-32,wchar_t)\x82\xF0\x83o\x83b\x83t\x83@\x82֏\x91\x82\xAB\x8D\x9E\x82\xDE + * \x83\x8D\x83O\x82ɂ\xE0\x8F\x91\x82\xAB\x8D\x9E\x82\xDE + * + * PutChar() \x82\xCC UTF-32\x94\xC5 + */ +void PutU32(unsigned int code) { + unsigned short cset; + int LineEnd; + + TCharAttr CharAttrTmp; + CharAttrTmp = CharAttr; + if (code <= US) { + // U+0000 .. U+001f + // C0\x90\xA7\x8C䕶\x8E\x9A, C0 Coontrols + ParseControl(code); + return; + } else if ((0x80<=code) && (code<=0x9F)) { + // U+0080 .. u+009f + // C1\x90\xA7\x8C䕶\x8E\x9A, C1 Controls + ParseControl(code); + return; + } + + { + int r; + BOOL SpecialNew = FALSE; + + if (code <= 0xff) { + SpecialNew = CharSetIsSpecial(code); + if (SpecialNew) { + code = code & 0x7F; + } + } + + // Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82ւ̃}\x83b\x83s\x83\x93\x83O + if (SpecialNew == FALSE && ts.UnicodeDecSpMapping) { + cset = UTF32ToDecSp(code); + if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) { + SpecialNew = TRUE; + code = cset & 0xff; + } + } + + if (SpecialNew != Special) { + UpdateStr(); + Special = SpecialNew; + } + + if (Special) { + CharAttrTmp.Attr |= AttrSpecial; + } + else { + CharAttrTmp.Attr |= CharAttr.Attr; + } + + if (CursorX > CursorRightM) + LineEnd = NumOfColumns - 1; + else + LineEnd = CursorRightM; + + // Wrap\x8F\x88\x97\x9D\x81A\x83J\x81[\x83\\x83\x8B\x88ړ\xAE + if (Wrap) { + // \x8C\xBB\x8D\xDD Wrap \x8F\xF3\x91\xD4 + if (!BuffIsCombiningCharacter(CursorX, CursorY, code)) { + // \x95\xB6\x8E\x9A\x83R\x81[\x83h\x82\xAA\x8C\x8B\x8D\x87\x95\xB6\x8E\x9A\x82ł͂Ȃ\xA2 = \x83J\x81[\x83\\x83\x8B\x82\xAA\x88ړ\xAE\x82\xB7\x82\xE9 + + // \x83J\x81[\x83\\x83\x8B\x88ʒu\x82ɍs\x8Cp\x91\xB1\x83A\x83g\x83\x8A\x83r\x83\x85\x81[\x83g\x82\xF0\x92lj\xC1 + TCharAttr t = BuffGetCursorCharAttr(CursorX, CursorY); + t.Attr |= AttrLineContinued; + t.AttrEx = t.Attr; + BuffSetCursorCharAttr(CursorX, CursorY, t); + + // \x8Ds\x8Cp\x91\xB1\x83A\x83g\x83\x8A\x83r\x83\x85\x81[\x83g\x82\xF0\x82\xAF\x82\xE9 + CharAttrTmp.Attr |= AttrLineContinued; + CharAttrTmp.AttrEx = CharAttrTmp.Attr; + + // \x8E\x9F\x82̍s\x82̍s\x93\xAA\x82\xD6 + CarriageReturn(FALSE); + LineFeed(LF,FALSE); + } + } + + // \x83o\x83b\x83t\x83@\x82ɕ\xB6\x8E\x9A\x82\xF0\x93\xFC\x82\xEA\x82\xE9 + // BuffPutUnicode()\x82\xB5\x82\xBD\x96߂\xE8\x92l\x82ŕ\xB6\x8E\x9A\x82̃Z\x83\x8B\x90\x94\x82\xF0\x92m\x82邱\x82Ƃ\xAA\x82ł\xAB\x82\xE9 + // \x83G\x83\x89\x81[\x8E\x9E\x82̓J\x81[\x83\\x83\x8B\x88ʒu\x82\xF0\x8C\x9F\x93\xA2\x82\xB7\x82\xE9 + CharAttrTmp.AttrEx = CharAttrTmp.Attr; + retry: + r = BuffPutUnicode(code, CharAttrTmp, InsertMode); + if (r == -1) { + // \x95\xB6\x8E\x9A\x91S\x8Ap\x82ōs\x96\x96\x81A\x93\xFC\x97͂ł\xAB\x82Ȃ\xA2 + + if (AutoWrapMode) { + // \x8E\xA9\x93\xAE\x89\xFC\x8Ds + // \x81Awrap\x8F\x88\x97\x9D + CharAttrTmp = CharAttr; + CharAttrTmp.Attr |= AttrLineContinued; + CharAttrTmp.AttrEx = CharAttrTmp.Attr | AttrPadding; + // AutoWrapMode + // ts.EnableContinuedLineCopy + //if (CursorX != LineEnd){ + //&& BuffIsHalfWidthFromCode(&ts, code)) { + + // full width\x8Fo\x97͂\xAA\x94\xBC\x95\xAA\x8Fo\x97͂ɂȂ\xE7\x82Ȃ\xA2\x82悤\x82\xC90x20\x82\xF0\x8Fo\x97\xCD + BuffPutUnicode(0x20, CharAttrTmp, FALSE); + CharAttrTmp.AttrEx = CharAttrTmp.AttrEx & ~AttrPadding; + + // \x8E\x9F\x82̍s\x82̍s\x93\xAA\x82\xD6 + CarriageReturn(FALSE); + LineFeed(LF,FALSE); + } + else { + // \x8Ds\x93\xAA\x82ɖ߂\xB7 + CursorX = 0; + } + + //CharAttrTmp.Attr &= ~AttrLineContinued; + goto retry; + } + else if (r == 0) { + // \x83J\x81[\x83\\x83\x8B\x82̈ړ\xAE\x82Ȃ\xB5,\x8C\x8B\x8D\x87\x95\xB6\x8E\x9A,\x8D\x87\x8E\x9A\x82Ȃ\xC7 + // Wrap \x82͕ω\xBB\x82\xB5\x82Ȃ\xA2 + UpdateStr(); // \x81u\x82فv->\x81u\x82ہv\x82ȂǁA\x95ω\xBB\x82\xB7\x82邱\x82Ƃ\xAA\x82\xA0\x82\xE9\x82̂ŕ`\x89悷\x82\xE9 + } else if (r == 1) { + // \x94\xBC\x8Ap(1\x83Z\x83\x8B) + if (CursorX + 0 == CursorRightM || CursorX >= NumOfColumns - 1) { + UpdateStr(); + Wrap = AutoWrapMode; + } else { + MoveRight(); + Wrap = FALSE; + } + } else if (r == 2) { + // \x91S\x8Ap(2\x83Z\x83\x8B) + if (CursorX + 1 == CursorRightM || CursorX + 1 >= NumOfColumns - 1) { + MoveRight(); // \x91S\x8Ap\x82̉E\x91\xA4\x82ɃJ\x81[\x83\\x83\x8B\x88ړ\xAE + UpdateStr(); + Wrap = AutoWrapMode; + } else { + MoveRight(); + MoveRight(); + Wrap = FALSE; + } + } + else { + assert(FALSE); + } + } + + // \x83\x8D\x83O\x82\xF0\x8Fo\x97\xCD + OutputLogUTF32(code); +} + +#if 0 +static void PutChar(BYTE b) +{ BOOL SpecialNew; TCharAttr CharAttrTmp; @@ -839,6 +999,11 @@ MoveRight(); } } +#endif +static void PutChar(BYTE b) +{ + PutU32(b); +} static void PutDebugChar(BYTE b) { @@ -5224,160 +5389,6 @@ } /** - * unicode(UTF-32,wchar_t)\x82\xF0\x83o\x83b\x83t\x83@\x82֏\x91\x82\xAB\x8D\x9E\x82\xDE - * \x83\x8D\x83O\x82ɂ\xE0\x8F\x91\x82\xAB\x8D\x9E\x82\xDE - * - * PutChar() \x82\xCC UTF-32\x94\xC5 - */ -void PutU32(unsigned int code) -{ - unsigned short cset; - int LineEnd; - - TCharAttr CharAttrTmp; - CharAttrTmp = CharAttr; - if (code <= US) { - // U+0000 .. U+001f - // C0\x90\xA7\x8C䕶\x8E\x9A, C0 Coontrols - ParseControl(code); - return; - } else if ((0x80<=code) && (code<=0x9F)) { - // U+0080 .. u+009f - // C1\x90\xA7\x8C䕶\x8E\x9A, C1 Controls - ParseControl(code); - return; - } - - { - int r; - BOOL SpecialNew = FALSE; - - if (code <= 0xff) { - SpecialNew = CharSetIsSpecial(code); - if (SpecialNew) { - code = code & 0x7F; - } - } - - // Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82ւ̃}\x83b\x83s\x83\x93\x83O - if (SpecialNew == FALSE && ts.UnicodeDecSpMapping) { - cset = UTF32ToDecSp(code); - if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) { - SpecialNew = TRUE; - code = cset & 0xff; - } - } - - if (SpecialNew != Special) { - UpdateStr(); - Special = SpecialNew; - } - - if (Special) { - CharAttrTmp.Attr |= AttrSpecial; - } - else { - CharAttrTmp.Attr |= CharAttr.Attr; - } - - if (CursorX > CursorRightM) - LineEnd = NumOfColumns - 1; - else - LineEnd = CursorRightM; - - // Wrap\x8F\x88\x97\x9D\x81A\x83J\x81[\x83\\x83\x8B\x88ړ\xAE - if (Wrap) { - // \x8C\xBB\x8D\xDD Wrap \x8F\xF3\x91\xD4 - if (!BuffIsCombiningCharacter(CursorX, CursorY, code)) { - // \x95\xB6\x8E\x9A\x83R\x81[\x83h\x82\xAA\x8C\x8B\x8D\x87\x95\xB6\x8E\x9A\x82ł͂Ȃ\xA2 = \x83J\x81[\x83\\x83\x8B\x82\xAA\x88ړ\xAE\x82\xB7\x82\xE9 - - // \x83J\x81[\x83\\x83\x8B\x88ʒu\x82ɍs\x8Cp\x91\xB1\x83A\x83g\x83\x8A\x83r\x83\x85\x81[\x83g\x82\xF0\x92lj\xC1 - TCharAttr t = BuffGetCursorCharAttr(CursorX, CursorY); - t.Attr |= AttrLineContinued; - t.AttrEx = t.Attr; - BuffSetCursorCharAttr(CursorX, CursorY, t); - - // \x8Ds\x8Cp\x91\xB1\x83A\x83g\x83\x8A\x83r\x83\x85\x81[\x83g\x82\xF0\x82\xAF\x82\xE9 - CharAttrTmp.Attr |= AttrLineContinued; - CharAttrTmp.AttrEx = CharAttrTmp.Attr; - - // \x8E\x9F\x82̍s\x82̍s\x93\xAA\x82\xD6 - CarriageReturn(FALSE); - LineFeed(LF,FALSE); - } - } - - // \x83o\x83b\x83t\x83@\x82ɕ\xB6\x8E\x9A\x82\xF0\x93\xFC\x82\xEA\x82\xE9 - // BuffPutUnicode()\x82\xB5\x82\xBD\x96߂\xE8\x92l\x82ŕ\xB6\x8E\x9A\x82̃Z\x83\x8B\x90\x94\x82\xF0\x92m\x82邱\x82Ƃ\xAA\x82ł\xAB\x82\xE9 - // \x83G\x83\x89\x81[\x8E\x9E\x82̓J\x81[\x83\\x83\x8B\x88ʒu\x82\xF0\x8C\x9F\x93\xA2\x82\xB7\x82\xE9 - CharAttrTmp.AttrEx = CharAttrTmp.Attr; - retry: - r = BuffPutUnicode(code, CharAttrTmp, InsertMode); - if (r == -1) { - // \x95\xB6\x8E\x9A\x91S\x8Ap\x82ōs\x96\x96\x81A\x93\xFC\x97͂ł\xAB\x82Ȃ\xA2 - - if (AutoWrapMode) { - // \x8E\xA9\x93\xAE\x89\xFC\x8Ds - // \x81Awrap\x8F\x88\x97\x9D - CharAttrTmp = CharAttr; - CharAttrTmp.Attr |= AttrLineContinued; - CharAttrTmp.AttrEx = CharAttrTmp.Attr | AttrPadding; - // AutoWrapMode - // ts.EnableContinuedLineCopy - //if (CursorX != LineEnd){ - //&& BuffIsHalfWidthFromCode(&ts, code)) { - - // full width\x8Fo\x97͂\xAA\x94\xBC\x95\xAA\x8Fo\x97͂ɂȂ\xE7\x82Ȃ\xA2\x82悤\x82\xC90x20\x82\xF0\x8Fo\x97\xCD - BuffPutUnicode(0x20, CharAttrTmp, FALSE); - CharAttrTmp.AttrEx = CharAttrTmp.AttrEx & ~AttrPadding; - - // \x8E\x9F\x82̍s\x82̍s\x93\xAA\x82\xD6 - CarriageReturn(FALSE); - LineFeed(LF,FALSE); - } - else { - // \x8Ds\x93\xAA\x82ɖ߂\xB7 - CursorX = 0; - } - - //CharAttrTmp.Attr &= ~AttrLineContinued; - goto retry; - } - else if (r == 0) { - // \x83J\x81[\x83\\x83\x8B\x82̈ړ\xAE\x82Ȃ\xB5,\x8C\x8B\x8D\x87\x95\xB6\x8E\x9A,\x8D\x87\x8E\x9A\x82Ȃ\xC7 - // Wrap \x82͕ω\xBB\x82\xB5\x82Ȃ\xA2 - UpdateStr(); // \x81u\x82فv->\x81u\x82ہv\x82ȂǁA\x95ω\xBB\x82\xB7\x82邱\x82Ƃ\xAA\x82\xA0\x82\xE9\x82̂ŕ`\x89悷\x82\xE9 - } else if (r == 1) { - // \x94\xBC\x8Ap(1\x83Z\x83\x8B) - if (CursorX + 0 == CursorRightM || CursorX >= NumOfColumns - 1) { - UpdateStr(); - Wrap = AutoWrapMode; - } else { - MoveRight(); - Wrap = FALSE; - } - } else if (r == 2) { - // \x91S\x8Ap(2\x83Z\x83\x8B) - if (CursorX + 1 == CursorRightM || CursorX + 1 >= NumOfColumns - 1) { - MoveRight(); // \x91S\x8Ap\x82̉E\x91\xA4\x82ɃJ\x81[\x83\\x83\x8B\x88ړ\xAE - UpdateStr(); - Wrap = AutoWrapMode; - } else { - MoveRight(); - MoveRight(); - Wrap = FALSE; - } - } - else { - assert(FALSE); - } - } - - // \x83\x8D\x83O\x82\xF0\x8Fo\x97\xCD - OutputLogUTF32(code); -} - -/** * 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