Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/teraterm/vtterm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 9528 by zmatsuo, Thu Nov 11 15:30:24 2021 UTC revision 9538 by zmatsuo, Sat Nov 20 15:13:32 2021 UTC
# Line 5071  void XsProcColor(int mode, unsigned int Line 5071  void XsProcColor(int mode, unsigned int
5071    
5072  static void XsProcClipboard(PCHAR buff)  static void XsProcClipboard(PCHAR buff)
5073  {  {
5074          int len, blen;          char *p;
         char *p, *cbbuff, hdr[20];  
5075          wchar_t *notify_buff, *notify_title;          wchar_t *notify_buff, *notify_title;
         HGLOBAL cbmem;  
         int wide_len;  
         HGLOBAL wide_cbmem;  
         LPWSTR wide_buf;  
5076    
5077          p = buff;          p = buff;
5078          while (strchr("cps01234567", *p)) {          while (strchr("cps01234567", *p)) {
# Line 5087  static void XsProcClipboard(PCHAR buff) Line 5082  static void XsProcClipboard(PCHAR buff)
5082          if (*p++ == ';') {          if (*p++ == ';') {
5083                  if (*p == '?' && *(p+1) == 0) { // Read access                  if (*p == '?' && *(p+1) == 0) { // Read access
5084                          if (ts.CtrlFlag & CSF_CBREAD) {                          if (ts.CtrlFlag & CSF_CBREAD) {
5085                                    char hdr[20];
5086                                  if (ts.NotifyClipboardAccess) {                                  if (ts.NotifyClipboardAccess) {
5087                                          GetI18nStrWW("Tera Term", "MSG_CBACCESS_TITLE",                                          GetI18nStrWW("Tera Term", "MSG_CBACCESS_TITLE",
5088                                                                   L"Clipboard Access", ts.UILanguageFileW, &notify_title);                                                                   L"Clipboard Access", ts.UILanguageFileW, &notify_title);
# Line 5112  static void XsProcClipboard(PCHAR buff) Line 5108  static void XsProcClipboard(PCHAR buff)
5108                          }                          }
5109                  }                  }
5110                  else if (ts.CtrlFlag & CSF_CBWRITE) { // Write access                  else if (ts.CtrlFlag & CSF_CBWRITE) { // Write access
5111                          len = strlen(buff);                          size_t len = strlen(buff);
5112                          blen = len * 3 / 4 + 1;                          size_t blen = len * 3 / 4 + 1;
5113                            char *cbbuff = malloc(blen);
                         if ((cbmem = GlobalAlloc(GMEM_MOVEABLE, blen)) == NULL) {  
                                 return;  
                         };  
                         if ((cbbuff = GlobalLock(cbmem)) == NULL) {  
                                 GlobalFree(cbmem);  
                                 return;  
                         }  
   
5114                          len = b64decode(cbbuff, blen, p);                          len = b64decode(cbbuff, blen, p);
   
5115                          if (len < 0 || len >= blen) {                          if (len < 0 || len >= blen) {
5116                                  GlobalUnlock(cbmem);                                  free(cbbuff);
                                 GlobalFree(cbmem);  
5117                                  return;                                  return;
5118                          }                          }
   
5119                          cbbuff[len] = 0;                          cbbuff[len] = 0;
                         GlobalUnlock(cbmem);  
5120    
5121                          if (ts.NotifyClipboardAccess) {                          if (ts.NotifyClipboardAccess) {
5122                                  wchar_t *buf;                                  wchar_t *buf;
# Line 5147  static void XsProcClipboard(PCHAR buff) Line 5131  static void XsProcClipboard(PCHAR buff)
5131                                  free(notify_buff);                                  free(notify_buff);
5132                          }                          }
5133    
5134                          wide_len = MultiByteToWideChar(CP_ACP, 0, cbbuff, -1, NULL, 0);                          // cbbuff に入っている文字列をクリップボードにセットする
5135                          wide_cbmem = GlobalAlloc(GMEM_MOVEABLE, sizeof(WCHAR) * wide_len);                          {
5136                          if (wide_cbmem) {                                  // wchar_t へ変換して設定
5137                                  wide_buf = (LPWSTR)GlobalLock(wide_cbmem);                                  //      とりあえずUTF-8 が入っている前提
5138                                  MultiByteToWideChar(CP_ACP, 0, cbbuff, -1, wide_buf, wide_len);                                  //      TODO 受信文字コードに合わせて変更すればok?
5139                                  GlobalUnlock(wide_cbmem);                                  wchar_t *cbbuffW = ToWcharU8(cbbuff);
5140                          }                                  CBSetTextW(NULL, cbbuffW, 0);
5141                                    free(cbbuffW);
                         if (OpenClipboard(NULL)) {  
                                 EmptyClipboard();  
                                 SetClipboardData(CF_TEXT, cbmem);  
                                 if (wide_buf) {  
                                         SetClipboardData(CF_UNICODETEXT, wide_cbmem);  
                                 }  
                                 CloseClipboard();  
5142                          }                          }
5143                            free(cbbuff);
5144                  }                  }
5145                  else if (ts.NotifyClipboardAccess) {                  else if (ts.NotifyClipboardAccess) {
5146                          GetI18nStrWW("Tera Term", "MSG_CBACCESS_REJECT_TITLE",                          GetI18nStrWW("Tera Term", "MSG_CBACCESS_REJECT_TITLE",

Legend:
Removed from v.9528  
changed lines
  Added in v.9538

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26