diff options
-rw-r--r-- | openttd.tgt | 4 | ||||
-rw-r--r-- | os2.c | 59 |
2 files changed, 32 insertions, 31 deletions
diff --git a/openttd.tgt b/openttd.tgt index a4ed0e11c..a3666cf9b 100644 --- a/openttd.tgt +++ b/openttd.tgt @@ -2112,8 +2112,8 @@ WVList 0 484 MItem -5 -ttd.c +9 +openttd.c 485 WString 4 @@ -707,45 +707,46 @@ const HalMusicDriver _os2_music_driver = { */ bool InsertTextBufferClipboard(Textbuf *tb) { - HAB hab = 0; // anchor-block handle - PSZ pszClipText, pszClipText2; - uint16 width = 0; - uint16 length = 0; - char clipbuf[300]; - - pszClipText2 = clipbuf; + HAB hab = 0; if (WinOpenClipbrd(hab)) { - if (pszClipText = (PSZ) WinQueryClipbrdData(hab, CF_TEXT)) - strncpy(clipbuf, pszClipText, 300); + const char* text = (const char*)WinQueryClipbrdData(hab, CF_TEXT); - WinCloseClipbrd(hab); - } + if (text != NULL) + { + uint length = 0; + uint width = 0; + const char* i; - if (!pszClipText) - return false; + for (i = text; IsValidAsciiChar(*i); i++) + { + uint w; - for (; IsValidAsciiChar(*pszClipText2) && (tb->length + length) < tb->maxlength - 1 && - (tb->maxwidth == 0 || width + tb->width + GetCharacterWidth((byte)*pszClipText2) <= tb->maxwidth); pszClipText2++) - { - width += GetCharacterWidth((byte)*pszClipText2); - length++; - } + if (tb->length + length >= tb->maxlength - 1) break; - if (length == 0) - return false; + w = GetCharacterWidth((byte)*i); + if (tb->maxwidth != 0 && width + tb->width + w > tb->maxwidth) break; - memmove(tb->buf + tb->caretpos + length, tb->buf + tb->caretpos, tb->length - tb->caretpos); - memcpy(tb->buf + tb->caretpos, clipbuf, length); - tb->width += width; - tb->caretxoffs += width; + width += w; + length++; + } + + memmove(tb->buf + tb->caretpos + length, tb->buf + tb->caretpos, tb->length - tb->caretpos + 1); + memcpy(tb->buf + tb->caretpos, text, length); + tb->width += width; + tb->caretxoffs += width; + tb->length += length; + tb->caretpos += length; + + WinCloseClipbrd(hab); + return true; + } - tb->length += length; - tb->caretpos += length; - tb->buf[tb->length + 1] = '\0'; // terminating zero + WinCloseClipbrd(hab); + } - return true; + return false; } static TID thread1 = 0; |