| 145 |
/* IME Status */ |
/* IME Status */ |
| 146 |
BOOL IMEstat; |
BOOL IMEstat; |
| 147 |
|
|
| 148 |
|
/* OSC String buffer */ |
| 149 |
|
#define MAXOSCBUFFSIZE 4096 |
| 150 |
|
static char *OSCStrBuff; |
| 151 |
|
static unsigned int OSCStrBuffSize; |
| 152 |
|
|
| 153 |
static _locale_t CLocale = NULL; |
static _locale_t CLocale = NULL; |
| 154 |
|
|
| 155 |
void ResetSBuffer(PStatusBuff sbuff) |
void ResetSBuffer(PStatusBuff sbuff) |
| 3444 |
} |
} |
| 3445 |
} |
} |
| 3446 |
|
|
| 3447 |
|
void XsProcClipboard(PCHAR buff) |
| 3448 |
|
{ |
| 3449 |
|
int len, blen; |
| 3450 |
|
char *p, *cbbuff; |
| 3451 |
|
HGLOBAL cbmem; |
| 3452 |
|
|
| 3453 |
|
p = buff; |
| 3454 |
|
while (strchr("cps01234567", *p)) { |
| 3455 |
|
p++; |
| 3456 |
|
} |
| 3457 |
|
|
| 3458 |
|
if (*p++ == ';') { |
| 3459 |
|
if (*p == '?' && *(p+1) == 0) { // Read access |
| 3460 |
|
if (ts.CtrlFlag & CSF_CBREAD) { |
| 3461 |
|
; // not supported. |
| 3462 |
|
} |
| 3463 |
|
} |
| 3464 |
|
else if (ts.CtrlFlag & CSF_CBWRITE) { // Write access |
| 3465 |
|
len = strlen(buff); |
| 3466 |
|
blen = len * 3 / 4 + 1; |
| 3467 |
|
|
| 3468 |
|
if ((cbmem = GlobalAlloc(GMEM_MOVEABLE, blen)) == NULL) { |
| 3469 |
|
return; |
| 3470 |
|
}; |
| 3471 |
|
if ((cbbuff = GlobalLock(cbmem)) == NULL) { |
| 3472 |
|
GlobalFree(cbmem); |
| 3473 |
|
return; |
| 3474 |
|
} |
| 3475 |
|
|
| 3476 |
|
len = b64decode(cbbuff, blen, p); |
| 3477 |
|
|
| 3478 |
|
if (len == 0 || len >= blen) { |
| 3479 |
|
GlobalUnlock(cbmem); |
| 3480 |
|
GlobalFree(cbmem); |
| 3481 |
|
return; |
| 3482 |
|
} |
| 3483 |
|
|
| 3484 |
|
cbbuff[len] = 0; |
| 3485 |
|
GlobalUnlock(cbmem); |
| 3486 |
|
|
| 3487 |
|
if (OpenClipboard(NULL)) { |
| 3488 |
|
EmptyClipboard(); |
| 3489 |
|
SetClipboardData(CF_TEXT, cbmem); |
| 3490 |
|
CloseClipboard(); |
| 3491 |
|
} |
| 3492 |
|
} |
| 3493 |
|
} |
| 3494 |
|
} |
| 3495 |
|
|
| 3496 |
#define ModeXsFirst 1 |
#define ModeXsFirst 1 |
| 3497 |
#define ModeXsString 2 |
#define ModeXsString 2 |
| 3498 |
#define ModeXsColorNum 3 |
#define ModeXsColorNum 3 |
| 3504 |
static BYTE XsParseMode = ModeXsFirst, PrevMode; |
static BYTE XsParseMode = ModeXsFirst, PrevMode; |
| 3505 |
static char StrBuff[sizeof(ts.Title)]; |
static char StrBuff[sizeof(ts.Title)]; |
| 3506 |
static unsigned int ColorNumber, StrLen; |
static unsigned int ColorNumber, StrLen; |
| 3507 |
|
static char realloc_failed = FALSE; |
| 3508 |
|
char *p; |
| 3509 |
|
unsigned int new_size; |
| 3510 |
|
|
| 3511 |
switch (XsParseMode) { |
switch (XsParseMode) { |
| 3512 |
case ModeXsFirst: |
case ModeXsFirst: |
| 3528 |
ColorNumber = 0; |
ColorNumber = 0; |
| 3529 |
XsParseMode = ModeXsColorSpec; |
XsParseMode = ModeXsColorSpec; |
| 3530 |
break; |
break; |
| 3531 |
|
case 52: |
| 3532 |
|
if ((ts.CtrlFlag & CSF_CBRW) == 0) { |
| 3533 |
|
XsParseMode = ModeXsIgnore; |
| 3534 |
|
break; |
| 3535 |
|
} |
| 3536 |
|
if (OSCStrBuff == NULL) { |
| 3537 |
|
OSCStrBuff = malloc(sizeof(ts.Title)); |
| 3538 |
|
if (OSCStrBuff == NULL) { |
| 3539 |
|
XsParseMode = ModeXsIgnore; |
| 3540 |
|
break; |
| 3541 |
|
} |
| 3542 |
|
OSCStrBuffSize = sizeof(ts.Title); |
| 3543 |
|
} |
| 3544 |
|
XsParseMode = ModeXsString; |
| 3545 |
|
break; |
| 3546 |
default: |
default: |
| 3547 |
XsParseMode = ModeXsString; |
XsParseMode = ModeXsString; |
| 3548 |
} |
} |
| 3554 |
break; |
break; |
| 3555 |
case ModeXsString: |
case ModeXsString: |
| 3556 |
if ((b==ST && Accept8BitCtrl && !(ts.Language==IdJapanese && ts.KanjiCode==IdSJIS)) || b==BEL) { /* String Terminator */ |
if ((b==ST && Accept8BitCtrl && !(ts.Language==IdJapanese && ts.KanjiCode==IdSJIS)) || b==BEL) { /* String Terminator */ |
|
StrBuff[StrLen] = '\0'; |
|
| 3557 |
switch (Param[1]) { |
switch (Param[1]) { |
| 3558 |
case 0: /* Change window title and icon name */ |
case 0: /* Change window title and icon name */ |
| 3559 |
case 1: /* Change icon name */ |
case 1: /* Change icon name */ |
| 3560 |
case 2: /* Change window title */ |
case 2: /* Change window title */ |
| 3561 |
|
StrBuff[StrLen] = '\0'; |
| 3562 |
if (ts.AcceptTitleChangeRequest) { |
if (ts.AcceptTitleChangeRequest) { |
| 3563 |
strncpy_s(cv.TitleRemote, sizeof(cv.TitleRemote), StrBuff, _TRUNCATE); |
strncpy_s(cv.TitleRemote, sizeof(cv.TitleRemote), StrBuff, _TRUNCATE); |
| 3564 |
// (2006.6.15 maya) タイトルに渡す文字列をSJISに変換 |
// (2006.6.15 maya) タイトルに渡す文字列をSJISに変換 |
| 3566 |
ChangeTitle(); |
ChangeTitle(); |
| 3567 |
} |
} |
| 3568 |
break; |
break; |
| 3569 |
|
case 52: /* Clipboard access */ |
| 3570 |
|
OSCStrBuff[StrLen] = '\0'; |
| 3571 |
|
XsProcClipboard(OSCStrBuff); |
| 3572 |
|
|
| 3573 |
|
break; |
| 3574 |
default: |
default: |
| 3575 |
/* nothing to do */; |
/* nothing to do */; |
| 3576 |
} |
} |
| 3585 |
ParseMode = ModeFirst; |
ParseMode = ModeFirst; |
| 3586 |
XsParseMode = ModeXsFirst; |
XsParseMode = ModeXsFirst; |
| 3587 |
} |
} |
| 3588 |
|
else if (Param[1] == 52) { |
| 3589 |
|
if (StrLen < OSCStrBuffSize - 1) { |
| 3590 |
|
OSCStrBuff[StrLen++] = b; |
| 3591 |
|
} |
| 3592 |
|
else if (!realloc_failed && OSCStrBuffSize < MAXOSCBUFFSIZE) { |
| 3593 |
|
new_size = OSCStrBuffSize * 2; |
| 3594 |
|
if (new_size > MAXOSCBUFFSIZE) { |
| 3595 |
|
new_size = MAXOSCBUFFSIZE; |
| 3596 |
|
} |
| 3597 |
|
|
| 3598 |
|
p = realloc(OSCStrBuff, new_size); |
| 3599 |
|
if (p == NULL) { |
| 3600 |
|
realloc_failed = TRUE; |
| 3601 |
|
} |
| 3602 |
|
else { |
| 3603 |
|
OSCStrBuff = p; |
| 3604 |
|
OSCStrBuffSize = new_size; |
| 3605 |
|
if (StrLen < OSCStrBuffSize - 1) { |
| 3606 |
|
OSCStrBuff[StrLen++] = b; |
| 3607 |
|
} |
| 3608 |
|
} |
| 3609 |
|
} |
| 3610 |
|
} |
| 3611 |
else if (StrLen < sizeof(StrBuff) - 1) { |
else if (StrLen < sizeof(StrBuff) - 1) { |
| 3612 |
StrBuff[StrLen++] = b; |
StrBuff[StrLen++] = b; |
| 3613 |
} |
} |
| 3693 |
PrevMode = ModeXsIgnore; |
PrevMode = ModeXsIgnore; |
| 3694 |
XsParseMode = ModeXsEsc; |
XsParseMode = ModeXsEsc; |
| 3695 |
} |
} |
| 3696 |
break; |
break; |
| 3697 |
} |
} |
| 3698 |
} |
} |
| 3699 |
|
|
| 4621 |
if (CLocale) { |
if (CLocale) { |
| 4622 |
_free_locale(CLocale); |
_free_locale(CLocale); |
| 4623 |
} |
} |
| 4624 |
|
if (OSCStrBuff) { |
| 4625 |
|
free(OSCStrBuff); |
| 4626 |
|
OSCStrBuff = NULL; |
| 4627 |
|
OSCStrBuffSize = 0; |
| 4628 |
|
} |
| 4629 |
CLocale = NULL; |
CLocale = NULL; |
| 4630 |
} |
} |
| 4631 |
|
|