| 1440 |
if (b<=US) |
if (b<=US) |
| 1441 |
ParseControl(b); |
ParseControl(b); |
| 1442 |
else if ((b>=0x20) && (b<=0x2F)) { |
else if ((b>=0x20) && (b<=0x2F)) { |
| 1443 |
|
// TODO: ICount が IntCharMax に達した時、最後の IntChar を置き換えるのは妥当? |
| 1444 |
if (ICount<IntCharMax) |
if (ICount<IntCharMax) |
| 1445 |
ICount++; |
ICount++; |
| 1446 |
IntChar[ICount] = b; |
IntChar[ICount] = b; |
| 1457 |
JustAfterESC = FALSE; |
JustAfterESC = FALSE; |
| 1458 |
} |
} |
| 1459 |
|
|
| 1460 |
|
#define CheckParamVal(p,m) \ |
| 1461 |
|
if ((p) == 0) { \ |
| 1462 |
|
(p) = 1; \ |
| 1463 |
|
} \ |
| 1464 |
|
else if ((p) > (m) || p < 0) { \ |
| 1465 |
|
(p) = (m); \ |
| 1466 |
|
} |
| 1467 |
|
|
| 1468 |
|
#define CheckParamValMax(p,m) \ |
| 1469 |
|
if ((p) > (m) || p <= 0) { \ |
| 1470 |
|
(p) = (m); \ |
| 1471 |
|
} |
| 1472 |
|
|
| 1473 |
|
#define RequiredParams(n) \ |
| 1474 |
|
if ((n) > 1) { \ |
| 1475 |
|
while (NParam < n) { \ |
| 1476 |
|
NParam++; \ |
| 1477 |
|
Param[NParam] = 0; \ |
| 1478 |
|
NSParam[NParam] = 0; \ |
| 1479 |
|
} \ |
| 1480 |
|
} |
| 1481 |
|
|
| 1482 |
void CSInsertCharacter() // ICH |
void CSInsertCharacter() // ICH |
| 1483 |
{ |
{ |
| 1484 |
// Insert space characters at cursor |
// Insert space characters at cursor |
| 1485 |
int Count; |
CheckParamVal(Param[1], NumOfColumns); |
| 1486 |
|
|
| 1487 |
BuffUpdateScroll(); |
BuffUpdateScroll(); |
| 1488 |
if (Param[1]<1) Param[1] = 1; |
BuffInsertSpace(Param[1]); |
|
Count = Param[1]; |
|
|
BuffInsertSpace(Count); |
|
| 1489 |
} |
} |
| 1490 |
|
|
| 1491 |
void CSCursorUp(BOOL AffectMargin) // CUU / VPB |
void CSCursorUp(BOOL AffectMargin) // CUU / VPB |
| 1492 |
{ |
{ |
| 1493 |
int topMargin, NewY; |
int topMargin, NewY; |
| 1494 |
|
|
| 1495 |
if (Param[1]<1) |
CheckParamVal(Param[1], CursorY); |
|
Param[1] = 1; |
|
| 1496 |
|
|
| 1497 |
if (AffectMargin && CursorY >= CursorTop) |
if (AffectMargin && CursorY >= CursorTop) |
| 1498 |
topMargin = CursorTop; |
topMargin = CursorTop; |
| 1516 |
{ |
{ |
| 1517 |
int bottomMargin, NewY; |
int bottomMargin, NewY; |
| 1518 |
|
|
|
if (Param[1]<1) |
|
|
Param[1] = 1; |
|
|
|
|
| 1519 |
if (AffectMargin && CursorY <= CursorBottom) |
if (AffectMargin && CursorY <= CursorBottom) |
| 1520 |
bottomMargin = CursorBottom; |
bottomMargin = CursorBottom; |
| 1521 |
else |
else |
| 1522 |
bottomMargin = NumOfLines-StatusLine-1; |
bottomMargin = NumOfLines-StatusLine-1; |
| 1523 |
|
|
| 1524 |
|
CheckParamVal(Param[1], bottomMargin); |
| 1525 |
|
|
| 1526 |
NewY = CursorY + Param[1]; |
NewY = CursorY + Param[1]; |
| 1527 |
if (NewY > bottomMargin) |
if (NewY > bottomMargin) |
| 1528 |
NewY = bottomMargin; |
NewY = bottomMargin; |
| 1604 |
// Insert lines at current position |
// Insert lines at current position |
| 1605 |
int Count, YEnd; |
int Count, YEnd; |
| 1606 |
|
|
| 1607 |
if (CursorY < CursorTop) |
if (CursorY < CursorTop || CursorY > CursorBottom) { |
|
return; |
|
|
if (CursorY > CursorBottom) |
|
| 1608 |
return; |
return; |
| 1609 |
if (Param[1]<1) |
} |
| 1610 |
Param[1] = 1; |
|
| 1611 |
|
CheckParamVal(Param[1], NumOfLines); |
| 1612 |
|
|
| 1613 |
Count = Param[1]; |
Count = Param[1]; |
| 1614 |
|
|
| 1615 |
YEnd = CursorBottom; |
YEnd = CursorBottom; |
| 1616 |
if (CursorY > YEnd) |
if (CursorY > YEnd) |
| 1617 |
YEnd = NumOfLines-1-StatusLine; |
YEnd = NumOfLines-1-StatusLine; |
| 1618 |
|
|
| 1619 |
if (Count > YEnd+1 - CursorY) |
if (Count > YEnd+1 - CursorY) |
| 1620 |
Count = YEnd+1 - CursorY; |
Count = YEnd+1 - CursorY; |
| 1621 |
|
|
| 1663 |
{ |
{ |
| 1664 |
int Count, YEnd; |
int Count, YEnd; |
| 1665 |
|
|
| 1666 |
if (CursorY < CursorTop) |
if (CursorY < CursorTop || CursorY > CursorBottom) { |
|
return; |
|
|
if (CursorY > CursorBottom) |
|
| 1667 |
return; |
return; |
| 1668 |
|
} |
| 1669 |
|
|
| 1670 |
|
CheckParamVal(Param[1], NumOfLines); |
| 1671 |
Count = Param[1]; |
Count = Param[1]; |
|
if (Count<1) Count = 1; |
|
| 1672 |
|
|
| 1673 |
YEnd = CursorBottom; |
YEnd = CursorBottom; |
| 1674 |
if (CursorY > YEnd) |
if (CursorY > YEnd) |
| 1675 |
YEnd = NumOfLines-1-StatusLine; |
YEnd = NumOfLines-1-StatusLine; |
| 1676 |
|
|
| 1677 |
if (Count > YEnd+1-CursorY) |
if (Count > YEnd+1-CursorY) |
| 1678 |
Count = YEnd+1-CursorY; |
Count = YEnd+1-CursorY; |
| 1679 |
|
|
| 1680 |
BuffDeleteLines(Count,YEnd); |
BuffDeleteLines(Count,YEnd); |
| 1681 |
} |
} |
| 1682 |
|
|
| 1683 |
void CSDeleteCharacter() // DCH |
void CSDeleteCharacter() // DCH |
| 1684 |
{ |
{ |
| 1685 |
// Delete characters in current line from cursor |
// Delete characters in current line from cursor |
| 1686 |
|
CheckParamVal(Param[1], NumOfColumns); |
| 1687 |
|
|
|
if (Param[1]<1) Param[1] = 1; |
|
| 1688 |
BuffUpdateScroll(); |
BuffUpdateScroll(); |
| 1689 |
BuffDeleteChars(Param[1]); |
BuffDeleteChars(Param[1]); |
| 1690 |
} |
} |
| 1691 |
|
|
| 1692 |
void CSEraseCharacter() // ECH |
void CSEraseCharacter() // ECH |
| 1693 |
{ |
{ |
| 1694 |
if (Param[1]<1) Param[1] = 1; |
CheckParamVal(Param[1], NumOfColumns); |
| 1695 |
|
|
| 1696 |
BuffUpdateScroll(); |
BuffUpdateScroll(); |
| 1697 |
BuffEraseChars(Param[1]); |
BuffEraseChars(Param[1]); |
| 1698 |
} |
} |
| 1699 |
|
|
| 1700 |
void CSScrollUp() |
void CSScrollUp() |
| 1701 |
{ |
{ |
| 1702 |
if (Param[1]<1) Param[1] = 1; |
// TODO: スクロールの最大値を端末行数に制限すべきか要検討 |
| 1703 |
|
CheckParamVal(Param[1], INT_MAX); |
| 1704 |
|
|
| 1705 |
BuffUpdateScroll(); |
BuffUpdateScroll(); |
| 1706 |
BuffRegionScrollUpNLines(Param[1]); |
BuffRegionScrollUpNLines(Param[1]); |
| 1707 |
} |
} |
| 1708 |
|
|
| 1709 |
void CSScrollDown() |
void CSScrollDown() |
| 1710 |
{ |
{ |
| 1711 |
if (Param[1]<1) Param[1] = 1; |
CheckParamVal(Param[1], NumOfLines); |
| 1712 |
|
|
| 1713 |
BuffUpdateScroll(); |
BuffUpdateScroll(); |
| 1714 |
BuffRegionScrollDownNLines(Param[1]); |
BuffRegionScrollDownNLines(Param[1]); |
| 1715 |
} |
} |
| 1716 |
|
|
| 1717 |
void CSForwardTab() |
void CSForwardTab() |
| 1718 |
{ |
{ |
| 1719 |
if (Param[1]<1) Param[1] = 1; |
CheckParamVal(Param[1], NumOfColumns); |
| 1720 |
CursorForwardTab(Param[1], AutoWrapMode); |
CursorForwardTab(Param[1], AutoWrapMode); |
| 1721 |
} |
} |
| 1722 |
|
|
| 1723 |
void CSBackwardTab() |
void CSBackwardTab() |
| 1724 |
{ |
{ |
| 1725 |
if (Param[1]<1) Param[1] = 1; |
CheckParamVal(Param[1], NumOfColumns); |
| 1726 |
CursorBackwardTab(Param[1]); |
CursorBackwardTab(Param[1]); |
| 1727 |
} |
} |
| 1728 |
|
|
| 1729 |
void CSMoveToColumnN() // CHA / HPA |
void CSMoveToColumnN() // CHA / HPA |
| 1730 |
{ |
{ |
| 1731 |
if (Param[1]<1) |
CheckParamVal(Param[1], NumOfColumns); |
|
Param[1] = 1; |
|
|
else if (Param[1] > NumOfColumns) |
|
|
Param[1] = NumOfColumns; |
|
| 1732 |
|
|
| 1733 |
Param[1]--; |
Param[1]--; |
| 1734 |
|
|
| 1747 |
{ |
{ |
| 1748 |
int NewX, rightMargin; |
int NewX, rightMargin; |
| 1749 |
|
|
| 1750 |
if (Param[1] < 1) |
CheckParamVal(Param[1], NumOfColumns); |
|
Param[1] = 1; |
|
| 1751 |
|
|
| 1752 |
if (AffectMargin && CursorX <= CursorRightM) |
if (AffectMargin && CursorX <= CursorRightM) { |
| 1753 |
rightMargin = CursorRightM; |
rightMargin = CursorRightM; |
| 1754 |
else |
} |
| 1755 |
|
else { |
| 1756 |
rightMargin = NumOfColumns-1; |
rightMargin = NumOfColumns-1; |
| 1757 |
|
} |
| 1758 |
|
|
| 1759 |
NewX = CursorX + Param[1]; |
NewX = CursorX + Param[1]; |
| 1760 |
if (NewX > rightMargin) |
if (NewX > rightMargin) |
| 1767 |
{ |
{ |
| 1768 |
int NewX, leftMargin; |
int NewX, leftMargin; |
| 1769 |
|
|
| 1770 |
if (Param[1] < 1) |
CheckParamVal(Param[1], NumOfColumns); |
|
Param[1] = 1; |
|
| 1771 |
|
|
| 1772 |
if (AffectMargin && CursorX >= CursorLeftM) |
if (AffectMargin && CursorX >= CursorLeftM) { |
| 1773 |
leftMargin = CursorLeftM; |
leftMargin = CursorLeftM; |
| 1774 |
else |
} |
| 1775 |
|
else { |
| 1776 |
leftMargin = 0; |
leftMargin = 0; |
| 1777 |
|
} |
| 1778 |
|
|
| 1779 |
NewX = CursorX - Param[1]; |
NewX = CursorX - Param[1]; |
| 1780 |
if (NewX < leftMargin) |
if (NewX < leftMargin) { |
| 1781 |
NewX = leftMargin; |
NewX = leftMargin; |
| 1782 |
|
} |
| 1783 |
|
|
| 1784 |
MoveCursor(NewX, CursorY); |
MoveCursor(NewX, CursorY); |
| 1785 |
} |
} |
| 1786 |
|
|
| 1787 |
void CSMoveToLineN() // VPA |
void CSMoveToLineN() // VPA |
| 1788 |
{ |
{ |
| 1789 |
if (Param[1]<1) Param[1] = 1; |
CheckParamVal(Param[1], NumOfLines-StatusLine); |
| 1790 |
|
|
| 1791 |
if (RelativeOrgMode) { |
if (RelativeOrgMode) { |
| 1792 |
if (CursorTop+Param[1]-1 > CursorBottom) |
if (CursorTop+Param[1]-1 > CursorBottom) |
| 1793 |
MoveCursor(CursorX,CursorBottom); |
MoveCursor(CursorX,CursorBottom); |
| 1806 |
{ |
{ |
| 1807 |
int NewX, NewY; |
int NewX, NewY; |
| 1808 |
|
|
| 1809 |
if (Param[1] < 1) |
RequiredParams(2); |
| 1810 |
Param[1] = 1; |
CheckParamVal(Param[1], NumOfLines-StatusLine); |
| 1811 |
else if (Param[1] > NumOfLines-StatusLine) |
CheckParamVal(Param[2], NumOfColumns); |
|
Param[1] = NumOfLines-StatusLine; |
|
|
|
|
|
if ((NParam < 2) || (Param[2]<1)) |
|
|
Param[2] = 1; |
|
|
else if (Param[2] > NumOfColumns) |
|
|
Param[2] = NumOfColumns; |
|
| 1812 |
|
|
| 1813 |
NewY = Param[1] - 1; |
NewY = Param[1] - 1; |
| 1814 |
NewX = Param[2] - 1; |
NewX = Param[2] - 1; |
| 1825 |
NewY = CursorBottom; |
NewY = CursorBottom; |
| 1826 |
} |
} |
| 1827 |
else { |
else { |
|
NewY = Param[1] - 1; |
|
| 1828 |
if (NewY > NumOfLines-1-StatusLine) |
if (NewY > NumOfLines-1-StatusLine) |
| 1829 |
NewY = NumOfLines-1-StatusLine; |
NewY = NumOfLines-1-StatusLine; |
| 1830 |
} |
} |
| 2248 |
MoveCursor(0,CursorY); |
MoveCursor(0,CursorY); |
| 2249 |
return; |
return; |
| 2250 |
} |
} |
| 2251 |
if (Param[1]<1) Param[1] =1; |
|
| 2252 |
if ((NParam < 2) | (Param[2]<1)) |
RequiredParams(2); |
| 2253 |
Param[2] = NumOfLines-StatusLine; |
CheckParamVal(Param[1], NumOfLines-StatusLine); |
| 2254 |
Param[1]--; |
CheckParamValMax(Param[2], NumOfLines-StatusLine); |
| 2255 |
Param[2]--; |
|
| 2256 |
if (Param[1] > NumOfLines-1-StatusLine) |
if (Param[1] >= Param[2]) |
| 2257 |
Param[1] = NumOfLines-1-StatusLine; |
return; |
| 2258 |
if (Param[2] > NumOfLines-1-StatusLine) |
|
| 2259 |
Param[2] = NumOfLines-1-StatusLine; |
CursorTop = Param[1] - 1; |
| 2260 |
if (Param[1] >= Param[2]) return; |
CursorBottom = Param[2] - 1; |
| 2261 |
CursorTop = Param[1]; |
|
| 2262 |
CursorBottom = Param[2]; |
if (RelativeOrgMode) |
| 2263 |
if (RelativeOrgMode) MoveCursor(0,CursorTop); |
// TODO: 左マージンを無視してる。要実機確認。 |
| 2264 |
else MoveCursor(0,0); |
MoveCursor(0, CursorTop); |
| 2265 |
|
else |
| 2266 |
|
MoveCursor(0, 0); |
| 2267 |
} |
} |
| 2268 |
|
|
| 2269 |
void CSSetLRScrollRegion() // DECSLRM |
void CSSetLRScrollRegion() // DECSLRM |
| 2270 |
{ |
{ |
| 2271 |
|
// TODO: ステータスライン上での挙動確認。 |
| 2272 |
// if (isCursorOnStatusLine) { |
// if (isCursorOnStatusLine) { |
| 2273 |
// MoveCursor(0,CursorY); |
// MoveCursor(0,CursorY); |
| 2274 |
// return; |
// return; |
| 2275 |
// } |
// } |
| 2276 |
|
|
| 2277 |
if (Param[1] < 1) |
RequiredParams(2); |
| 2278 |
Param[1] =1; |
CheckParamVal(Param[1], NumOfColumns); |
| 2279 |
else if (Param[1] > NumOfColumns) |
CheckParamValMax(Param[2], NumOfColumns); |
|
Param[1] = NumOfColumns; |
|
|
|
|
|
if (NParam < 2 || Param[2] < 1 || Param[2] > NumOfColumns) |
|
|
Param[2] = NumOfColumns; |
|
| 2280 |
|
|
| 2281 |
if (Param[1] >= Param[2]) |
if (Param[1] >= Param[2]) |
| 2282 |
return; |
return; |
| 2283 |
|
|
| 2284 |
Param[1]--; |
CursorLeftM = Param[1] - 1; |
| 2285 |
Param[2]--; |
CursorRightM = Param[2] - 1; |
|
|
|
|
CursorLeftM = Param[1]; |
|
|
CursorRightM = Param[2]; |
|
| 2286 |
|
|
| 2287 |
if (RelativeOrgMode) |
if (RelativeOrgMode) |
| 2288 |
MoveCursor(CursorLeftM, CursorTop); |
MoveCursor(CursorLeftM, CursorTop); |
| 2301 |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
| 2302 |
DispShowWindow(WINDOW_RESTORE); |
DispShowWindow(WINDOW_RESTORE); |
| 2303 |
break; |
break; |
| 2304 |
|
|
| 2305 |
case 2: // Iconify window |
case 2: // Iconify window |
| 2306 |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
| 2307 |
DispShowWindow(WINDOW_MINIMIZE); |
DispShowWindow(WINDOW_MINIMIZE); |
| 2308 |
break; |
break; |
| 2309 |
|
|
| 2310 |
case 3: // set window position |
case 3: // set window position |
| 2311 |
if (ts.WindowFlag & WF_WINDOWCHANGE) { |
if (ts.WindowFlag & WF_WINDOWCHANGE) { |
| 2312 |
if (NParam < 2) Param[2] = 0; |
RequiredParams(3); |
|
if (NParam < 3) Param[3] = 0; |
|
| 2313 |
DispMoveWindow(Param[2], Param[3]); |
DispMoveWindow(Param[2], Param[3]); |
| 2314 |
} |
} |
| 2315 |
break; |
break; |
| 2316 |
|
|
| 2317 |
case 4: // set window size |
case 4: // set window size |
| 2318 |
if (ts.WindowFlag & WF_WINDOWCHANGE) { |
if (ts.WindowFlag & WF_WINDOWCHANGE) { |
| 2319 |
if (NParam < 2) Param[2] = 0; |
RequiredParams(3); |
|
if (NParam < 3) Param[3] = 0; |
|
| 2320 |
DispResizeWin(Param[3], Param[2]); |
DispResizeWin(Param[3], Param[2]); |
| 2321 |
} |
} |
| 2322 |
break; |
break; |
| 2323 |
|
|
| 2324 |
case 5: // Raise window |
case 5: // Raise window |
| 2325 |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
| 2326 |
DispShowWindow(WINDOW_RAISE); |
DispShowWindow(WINDOW_RAISE); |
| 2327 |
break; |
break; |
| 2328 |
|
|
| 2329 |
case 6: // Lower window |
case 6: // Lower window |
| 2330 |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
| 2331 |
DispShowWindow(WINDOW_LOWER); |
DispShowWindow(WINDOW_LOWER); |
| 2332 |
break; |
break; |
| 2333 |
|
|
| 2334 |
case 7: // Refresh window |
case 7: // Refresh window |
| 2335 |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
if (ts.WindowFlag & WF_WINDOWCHANGE) |
| 2336 |
DispShowWindow(WINDOW_REFRESH); |
DispShowWindow(WINDOW_REFRESH); |
| 2337 |
break; |
break; |
| 2338 |
|
|
| 2339 |
case 8: /* set terminal size */ |
case 8: /* set terminal size */ |
| 2340 |
if (ts.WindowFlag & WF_WINDOWCHANGE) { |
if (ts.WindowFlag & WF_WINDOWCHANGE) { |
| 2341 |
if ((Param[2]<=1) || (NParam<2)) Param[2] = 24; |
RequiredParams(3); |
| 2342 |
if ((Param[3]<=1) || (NParam<3)) Param[3] = 80; |
if (Param[2] <= 1) Param[2] = 24; |
| 2343 |
ChangeTerminalSize(Param[3],Param[2]); |
if (Param[3] <= 1) Param[3] = 80; |
| 2344 |
|
ChangeTerminalSize(Param[3], Param[2]); |
| 2345 |
} |
} |
| 2346 |
break; |
break; |
| 2347 |
|
|
| 2348 |
case 9: // Maximize/Restore window |
case 9: // Maximize/Restore window |
| 2349 |
if (ts.WindowFlag & WF_WINDOWCHANGE) { |
if (ts.WindowFlag & WF_WINDOWCHANGE) { |
| 2350 |
if (NParam < 2 || Param[2] == 0) { |
RequiredParams(2); |
| 2351 |
|
if (Param[2] == 0) { |
| 2352 |
DispShowWindow(WINDOW_RESTORE); |
DispShowWindow(WINDOW_RESTORE); |
| 2353 |
} |
} |
| 2354 |
else if (Param[2] == 1) { |
else if (Param[2] == 1) { |
| 2356 |
} |
} |
| 2357 |
} |
} |
| 2358 |
break; |
break; |
| 2359 |
|
|
| 2360 |
case 11: // Report window state |
case 11: // Report window state |
| 2361 |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
| 2362 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "%dt", CLocale, DispWindowIconified()?2:1); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "%dt", CLocale, DispWindowIconified()?2:1); |
| 2363 |
SendCSIstr(Report, len); |
SendCSIstr(Report, len); |
| 2364 |
} |
} |
| 2365 |
break; |
break; |
| 2366 |
|
|
| 2367 |
case 13: // Report window position |
case 13: // Report window position |
| 2368 |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
| 2369 |
DispGetWindowPos(&x, &y); |
DispGetWindowPos(&x, &y); |
| 2371 |
SendCSIstr(Report, len); |
SendCSIstr(Report, len); |
| 2372 |
} |
} |
| 2373 |
break; |
break; |
| 2374 |
|
|
| 2375 |
case 14: /* get window size */ |
case 14: /* get window size */ |
| 2376 |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
| 2377 |
DispGetWindowSize(&x, &y); |
DispGetWindowSize(&x, &y); |
| 2379 |
SendCSIstr(Report, len); |
SendCSIstr(Report, len); |
| 2380 |
} |
} |
| 2381 |
break; |
break; |
| 2382 |
|
|
| 2383 |
case 18: /* get terminal size */ |
case 18: /* get terminal size */ |
| 2384 |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
| 2385 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "8;%u;%ut", CLocale, |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "8;%u;%ut", CLocale, |
| 2387 |
SendCSIstr(Report, len); |
SendCSIstr(Report, len); |
| 2388 |
} |
} |
| 2389 |
break; |
break; |
| 2390 |
|
|
| 2391 |
case 19: // Report display size (character) |
case 19: // Report display size (character) |
| 2392 |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
if (ts.WindowFlag & WF_WINDOWREPORT) { |
| 2393 |
DispGetRootWinSize(&x, &y); |
DispGetRootWinSize(&x, &y); |
| 2395 |
SendCSIstr(Report, len); |
SendCSIstr(Report, len); |
| 2396 |
} |
} |
| 2397 |
break; |
break; |
| 2398 |
|
|
| 2399 |
case 20: // Report icon label |
case 20: // Report icon label |
| 2400 |
switch (ts.WindowFlag & WF_TITLEREPORT) { |
switch (ts.WindowFlag & WF_TITLEREPORT) { |
| 2401 |
case IdTitleReportIgnore: |
case IdTitleReportIgnore: |
| 2402 |
// nothing to do |
// nothing to do |
| 2403 |
break; |
break; |
| 2404 |
|
|
| 2405 |
case IdTitleReportAccept: |
case IdTitleReportAccept: |
| 2406 |
switch (ts.AcceptTitleChangeRequest) { |
switch (ts.AcceptTitleChangeRequest) { |
| 2407 |
case IdTitleChangeRequestOff: |
case IdTitleChangeRequestOff: |
| 2408 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "L%s", CLocale, ts.Title); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "L%s", CLocale, ts.Title); |
| 2409 |
break; |
break; |
| 2410 |
|
|
| 2411 |
case IdTitleChangeRequestAhead: |
case IdTitleChangeRequestAhead: |
| 2412 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "L%s %s", CLocale, cv.TitleRemote, ts.Title); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "L%s %s", CLocale, cv.TitleRemote, ts.Title); |
| 2413 |
break; |
break; |
| 2414 |
|
|
| 2415 |
case IdTitleChangeRequestLast: |
case IdTitleChangeRequestLast: |
| 2416 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "L%s %s", CLocale, ts.Title, cv.TitleRemote); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "L%s %s", CLocale, ts.Title, cv.TitleRemote); |
| 2417 |
break; |
break; |
| 2418 |
|
|
| 2419 |
default: |
default: |
| 2420 |
if (cv.TitleRemote[0] == 0) { |
if (cv.TitleRemote[0] == 0) { |
| 2421 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "L%s", CLocale, ts.Title); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "L%s", CLocale, ts.Title); |
| 2426 |
} |
} |
| 2427 |
SendOSCstr(Report, len, ST); |
SendOSCstr(Report, len, ST); |
| 2428 |
break; |
break; |
| 2429 |
|
|
| 2430 |
default: // IdTitleReportEmpty: |
default: // IdTitleReportEmpty: |
| 2431 |
SendOSCstr("L", 0, ST); |
SendOSCstr("L", 0, ST); |
| 2432 |
break; |
break; |
| 2433 |
} |
} |
| 2434 |
break; |
break; |
| 2435 |
|
|
| 2436 |
case 21: // Report window title |
case 21: // Report window title |
| 2437 |
switch (ts.WindowFlag & WF_TITLEREPORT) { |
switch (ts.WindowFlag & WF_TITLEREPORT) { |
| 2438 |
case IdTitleReportIgnore: |
case IdTitleReportIgnore: |
| 2439 |
// nothing to do |
// nothing to do |
| 2440 |
break; |
break; |
| 2441 |
|
|
| 2442 |
case IdTitleReportAccept: |
case IdTitleReportAccept: |
| 2443 |
switch (ts.AcceptTitleChangeRequest) { |
switch (ts.AcceptTitleChangeRequest) { |
| 2444 |
case IdTitleChangeRequestOff: |
case IdTitleChangeRequestOff: |
| 2445 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "l%s", CLocale, ts.Title); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "l%s", CLocale, ts.Title); |
| 2446 |
break; |
break; |
| 2447 |
|
|
| 2448 |
case IdTitleChangeRequestAhead: |
case IdTitleChangeRequestAhead: |
| 2449 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "l%s %s", CLocale, cv.TitleRemote, ts.Title); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "l%s %s", CLocale, cv.TitleRemote, ts.Title); |
| 2450 |
break; |
break; |
| 2451 |
|
|
| 2452 |
case IdTitleChangeRequestLast: |
case IdTitleChangeRequestLast: |
| 2453 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "l%s %s", CLocale, ts.Title, cv.TitleRemote); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "l%s %s", CLocale, ts.Title, cv.TitleRemote); |
| 2454 |
break; |
break; |
| 2455 |
|
|
| 2456 |
default: |
default: |
| 2457 |
if (cv.TitleRemote[0] == 0) { |
if (cv.TitleRemote[0] == 0) { |
| 2458 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "l%s", CLocale, ts.Title); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "l%s", CLocale, ts.Title); |
| 2463 |
} |
} |
| 2464 |
SendOSCstr(Report, len, ST); |
SendOSCstr(Report, len, ST); |
| 2465 |
break; |
break; |
| 2466 |
|
|
| 2467 |
default: // IdTitleReportEmpty: |
default: // IdTitleReportEmpty: |
| 2468 |
SendOSCstr("l", 0, ST); |
SendOSCstr("l", 0, ST); |
| 2469 |
break; |
break; |
| 2470 |
} |
} |
| 2471 |
break; |
break; |
| 2472 |
|
|
| 2473 |
case 22: // Push Title |
case 22: // Push Title |
| 2474 |
if (NParam < 2) { |
RequiredParams(2); |
|
Param[2] = 0; |
|
|
} |
|
| 2475 |
switch (Param[2]) { |
switch (Param[2]) { |
| 2476 |
case 0: |
case 0: |
| 2477 |
case 1: |
case 1: |
| 2488 |
break; |
break; |
| 2489 |
} |
} |
| 2490 |
break; |
break; |
| 2491 |
|
|
| 2492 |
case 23: // Pop Title |
case 23: // Pop Title |
| 2493 |
if (NParam < 2) { |
RequiredParams(2); |
|
Param[2] = 0; |
|
|
} |
|
| 2494 |
switch (Param[2]) { |
switch (Param[2]) { |
| 2495 |
case 0: |
case 0: |
| 2496 |
case 1: |
case 1: |
| 2538 |
|
|
| 2539 |
switch (b) { |
switch (b) { |
| 2540 |
case 'c': /* Tertiary terminal report (Tertiary DA) */ |
case 'c': /* Tertiary terminal report (Tertiary DA) */ |
| 2541 |
if (Param[1] < 1) { |
if (Param[1] == 0) { |
| 2542 |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "!|%8s", CLocale, ts.TerminalUID); |
len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "!|%8s", CLocale, ts.TerminalUID); |
| 2543 |
SendDCSstr(Report, len); |
SendDCSstr(Report, len); |
| 2544 |
} |
} |
| 2550 |
{ |
{ |
| 2551 |
switch (b) { |
switch (b) { |
| 2552 |
case 'c': /* second terminal report (Secondary DA) */ |
case 'c': /* second terminal report (Secondary DA) */ |
| 2553 |
if (Param[1] < 1) { |
if (Param[1] == 0) { |
| 2554 |
SendCSIstr(">32;278;0c", 0); /* VT382(>32) + xterm rev 278 */ |
SendCSIstr(">32;278;0c", 0); /* VT382(>32) + xterm rev 278 */ |
| 2555 |
} |
} |
| 2556 |
break; |
break; |
| 2557 |
|
|
| 2558 |
case 'J': // IO-8256 terminal |
case 'J': // IO-8256 terminal |
| 2559 |
if (Param[1]==3) { |
if (Param[1]==3) { |
| 2560 |
if (Param[2] < 1 || NParam < 2) Param[2] = 1; |
RequiredParams(5); |
| 2561 |
if (Param[3] < 1 || NParam < 3) Param[3] = 1; |
CheckParamVal(Param[2], NumOfLines-StatusLine); |
| 2562 |
if (Param[4] < 1 || NParam < 4) Param[4] = NumOfLines-StatusLine; |
CheckParamVal(Param[3], NumOfColumns); |
| 2563 |
if (Param[5] < 1 || NParam < 5) Param[5] = NumOfColumns; |
CheckParamValMax(Param[4], NumOfLines-StatusLine); |
| 2564 |
|
CheckParamValMax(Param[5], NumOfColumns); |
| 2565 |
|
|
| 2566 |
|
if (Param[2] > Param[4] || Param[3] > Param[5]) { |
| 2567 |
|
return; |
| 2568 |
|
} |
| 2569 |
|
|
| 2570 |
BuffEraseBox(Param[3]-1, Param[2]-1, Param[5]-1, Param[4]-1); |
BuffEraseBox(Param[3]-1, Param[2]-1, Param[5]-1, Param[4]-1); |
| 2571 |
} |
} |
| 2572 |
break; |
break; |
| 2573 |
|
|
| 2574 |
case 'K': // IO-8256 terminal |
case 'K': // IO-8256 terminal |
| 2575 |
switch (Param[1]) { |
switch (Param[1]) { |
| 2576 |
case 3: |
case 3: |
| 2577 |
if (Param[2] < 1 || NParam < 2) Param[2] = 1; |
RequiredParams(3); |
| 2578 |
if (Param[3] < 1 || NParam < 3) Param[3] = 1; |
CheckParamVal(Param[2], NumOfColumns); |
| 2579 |
|
CheckParamVal(Param[3], NumOfColumns); |
| 2580 |
|
|
| 2581 |
|
if (Param[2] > Param[3]) { |
| 2582 |
|
return; |
| 2583 |
|
} |
| 2584 |
|
|
| 2585 |
BuffEraseCharsInLine(Param[2]-1, Param[3]-Param[2]+1); |
BuffEraseCharsInLine(Param[2]-1, Param[3]-Param[2]+1); |
| 2586 |
break; |
break; |
| 2587 |
|
|
| 2588 |
case 5: |
case 5: |
| 2589 |
if (NParam < 2) Param[2] = 0; |
RequiredParams(3); |
|
if (NParam < 3) Param[3] = 0; |
|
| 2590 |
switch (Param[2]) { |
switch (Param[2]) { |
| 2591 |
case 3: |
case 3: |
| 2592 |
case 4: |
case 4: |
| 3023 |
switch (b) { |
switch (b) { |
| 3024 |
case 'p': // DECSCL |
case 'p': // DECSCL |
| 3025 |
/* Select terminal mode (software reset) */ |
/* Select terminal mode (software reset) */ |
| 3026 |
|
RequiredParams(2); |
| 3027 |
|
|
| 3028 |
SoftReset(); |
SoftReset(); |
| 3029 |
if (NParam > 0) { |
ChangeTerminalID(); |
| 3030 |
ChangeTerminalID(); |
if (Param[1] >= 61 && Param[1] <= 65) { |
| 3031 |
if (Param[1] >= 61 && Param[1] <= 65) { |
if (VTlevel > Param[1] - 60) { |
| 3032 |
if (VTlevel > Param[1] - 60) { |
VTlevel = Param[1] - 60; |
|
VTlevel = Param[1] - 60; |
|
|
} |
|
|
} |
|
|
else { |
|
|
VTlevel = 1; |
|
| 3033 |
} |
} |
|
|
|
|
if (VTlevel < 2 || (NParam > 1 && Param[2] == 1)) |
|
|
Send8BitMode = FALSE; |
|
|
else |
|
|
Send8BitMode = TRUE; |
|
| 3034 |
} |
} |
| 3035 |
|
else { |
| 3036 |
|
VTlevel = 1; |
| 3037 |
|
} |
| 3038 |
|
|
| 3039 |
|
if (VTlevel < 2 || Param[2] == 1) |
| 3040 |
|
Send8BitMode = FALSE; |
| 3041 |
|
else |
| 3042 |
|
Send8BitMode = TRUE; |
| 3043 |
break; |
break; |
| 3044 |
|
|
| 3045 |
case 'q': // DECSCA |
case 'q': // DECSCA |
| 3067 |
char *pp; |
char *pp; |
| 3068 |
int len, resp = 0; |
int len, resp = 0; |
| 3069 |
|
|
|
if (NParam == 0) |
|
|
Param[1] = 0; |
|
|
|
|
| 3070 |
switch (Prv) { |
switch (Prv) { |
| 3071 |
case 0: /* ANSI Mode */ |
case 0: /* ANSI Mode */ |
| 3072 |
resp = 4; |
resp = 4; |
| 3363 |
case 'p': // DECRQM |
case 'p': // DECRQM |
| 3364 |
CSDolRequestMode(); |
CSDolRequestMode(); |
| 3365 |
break; |
break; |
| 3366 |
|
|
| 3367 |
case 'r': // DECCARA |
case 'r': // DECCARA |
| 3368 |
case 't': // DECRARA |
case 't': // DECRARA |
| 3369 |
if (Param[1] < 1 || NParam < 1) Param[1] = 1; |
RequiredParams(4); |
| 3370 |
if (Param[2] < 1 || NParam < 2) Param[2] = 1; |
CheckParamVal(Param[1], NumOfLines-StatusLine); |
| 3371 |
if (Param[3] < 1 || NParam < 3) Param[3] = NumOfLines-StatusLine; |
CheckParamVal(Param[2], NumOfColumns); |
| 3372 |
if (Param[4] < 1 || NParam < 4) Param[4] = NumOfColumns; |
CheckParamValMax(Param[3], NumOfLines-StatusLine); |
| 3373 |
if (Param[1] <= Param[3] && Param[2] <= Param[4]) { |
CheckParamValMax(Param[4], NumOfColumns); |
| 3374 |
if (RelativeOrgMode) { |
|
| 3375 |
Param[1] += CursorTop; |
if (Param[1] > Param[3] || Param[2] > Param[4]) { |
| 3376 |
if (Param[1] > CursorBottom) { |
return; |
| 3377 |
Param[1] = CursorBottom + 1; |
} |
| 3378 |
} |
|
| 3379 |
Param[3] += CursorTop; |
if (RelativeOrgMode) { |
| 3380 |
if (Param[3] > CursorBottom) { |
Param[1] += CursorTop; |
| 3381 |
Param[3] = CursorBottom + 1; |
if (Param[1] > CursorBottom) { |
| 3382 |
} |
Param[1] = CursorBottom + 1; |
| 3383 |
} |
} |
| 3384 |
|
Param[3] += CursorTop; |
| 3385 |
|
if (Param[3] > CursorBottom) { |
| 3386 |
|
Param[3] = CursorBottom + 1; |
| 3387 |
|
} |
| 3388 |
|
|
| 3389 |
|
// TODO: 左右マージンのチェックを行う。 |
| 3390 |
} |
} |
| 3391 |
|
|
| 3392 |
ParseSGRParams(&attr, &mask, 5); |
ParseSGRParams(&attr, &mask, 5); |
| 3393 |
if (b == 'r') { // DECCARA |
if (b == 'r') { // DECCARA |
| 3394 |
attr.Attr &= AttrSgrMask; |
attr.Attr &= AttrSgrMask; |
| 3402 |
BuffChangeAttrBox(Param[2]-1, Param[1]-1, Param[4]-1, Param[3]-1, &attr, NULL); |
BuffChangeAttrBox(Param[2]-1, Param[1]-1, Param[4]-1, Param[3]-1, &attr, NULL); |
| 3403 |
} |
} |
| 3404 |
break; |
break; |
| 3405 |
|
|
| 3406 |
case 'v': // DECCRA |
case 'v': // DECCRA |
| 3407 |
if (Param[1] < 1 || NParam < 1) Param[1] = 1; |
RequiredParams(8); |
| 3408 |
if (Param[2] < 1 || NParam < 2) Param[2] = 1; |
CheckParamVal(Param[1], NumOfLines-StatusLine); // Src Y-start |
| 3409 |
if (Param[3] < 1 || NParam < 3) Param[3] = NumOfLines-StatusLine; |
CheckParamVal(Param[2], NumOfColumns); // Src X-start |
| 3410 |
if (Param[4] < 1 || NParam < 4) Param[4] = NumOfColumns; |
CheckParamValMax(Param[3], NumOfLines-StatusLine); // Src Y-end |
| 3411 |
if (Param[5] < 1 || NParam < 5) Param[5] = 1; |
CheckParamValMax(Param[4], NumOfColumns); // Src X-end |
| 3412 |
if (Param[6] < 1 || NParam < 6) Param[6] = 1; |
CheckParamVal(Param[5], 1); // Src Page |
| 3413 |
if (Param[7] < 1 || NParam < 7) Param[7] = 1; |
CheckParamVal(Param[6], NumOfLines-StatusLine); // Dest Y |
| 3414 |
if (Param[8] < 1 || NParam < 8) Param[8] = 1; |
CheckParamVal(Param[7], NumOfColumns); // Dest X |
| 3415 |
if (Param[1] <= Param[3] && Param[2] <= Param[4]) { |
CheckParamVal(Param[8], 1); // Dest Page |
| 3416 |
if (RelativeOrgMode) { |
|
| 3417 |
Param[1] += CursorTop; |
if (Param[1] > Param[3] || Param[2] > Param[4]) { |
| 3418 |
if (Param[1] > CursorBottom) { |
return; |
| 3419 |
Param[1] = CursorBottom + 1; |
} |
| 3420 |
} |
|
| 3421 |
Param[3] += CursorTop; |
if (RelativeOrgMode) { |
| 3422 |
if (Param[3] > CursorBottom) { |
Param[1] += CursorTop; |
| 3423 |
Param[3] = CursorBottom + 1; |
if (Param[1] > CursorBottom) { |
| 3424 |
} |
Param[1] = CursorBottom + 1; |
|
Param[6] += CursorTop; |
|
|
if (Param[6] > CursorBottom) { |
|
|
Param[6] = CursorBottom + 1; |
|
|
} |
|
|
if (Param[6] + Param[3] - Param[1] > CursorBottom) { |
|
|
Param[3] = Param[1] + CursorBottom - Param[6] + 1; |
|
|
} |
|
| 3425 |
} |
} |
| 3426 |
BuffCopyBox(Param[2], Param[1], Param[4], Param[3], Param[5], Param[7], Param[6], Param[8]); |
Param[3] += CursorTop; |
| 3427 |
|
if (Param[3] > CursorBottom) { |
| 3428 |
|
Param[3] = CursorBottom + 1; |
| 3429 |
|
} |
| 3430 |
|
Param[6] += CursorTop; |
| 3431 |
|
if (Param[6] > CursorBottom) { |
| 3432 |
|
Param[6] = CursorBottom + 1; |
| 3433 |
|
} |
| 3434 |
|
if (Param[6] + Param[3] - Param[1] > CursorBottom) { |
| 3435 |
|
Param[3] = Param[1] + CursorBottom - Param[6] + 1; |
| 3436 |
|
} |
| 3437 |
|
|
| 3438 |
|
// TODO: 左右マージンのチェックを行う。 |
| 3439 |
} |
} |
| 3440 |
|
|
| 3441 |
|
// TODO: 1 origin になっている。0 origin に直す。 |
| 3442 |
|
BuffCopyBox(Param[2], Param[1], Param[4], Param[3], Param[5], Param[7], Param[6], Param[8]); |
| 3443 |
break; |
break; |
| 3444 |
|
|
| 3445 |
case 'x': // DECFRA |
case 'x': // DECFRA |
| 3446 |
if (NParam < 1 || Param[1] < 32 || (Param[1] > 127 && Param[1] < 160) || Param[1] > 255) { |
RequiredParams(5); |
| 3447 |
|
if (Param[1] < 32 || (Param[1] > 127 && Param[1] < 160) || Param[1] > 255) { |
| 3448 |
return; |
return; |
| 3449 |
} |
} |
| 3450 |
if (Param[2] < 1 || NParam < 2) Param[2] = 1; |
CheckParamVal(Param[2], NumOfLines-StatusLine); |
| 3451 |
if (Param[3] < 1 || NParam < 3) Param[3] = 1; |
CheckParamVal(Param[3], NumOfColumns); |
| 3452 |
if (Param[4] < 1 || NParam < 4) Param[4] = NumOfLines-StatusLine; |
CheckParamValMax(Param[4], NumOfLines-StatusLine); |
| 3453 |
if (Param[5] < 1 || NParam < 5) Param[5] = NumOfColumns; |
CheckParamValMax(Param[5], NumOfColumns); |
| 3454 |
|
|
| 3455 |
if (Param[2] > Param[4] || Param[3] > Param[5]) { |
if (Param[2] > Param[4] || Param[3] > Param[5]) { |
| 3456 |
return; |
return; |
| 3457 |
} |
} |
| 3458 |
|
|
| 3459 |
if (RelativeOrgMode) { |
if (RelativeOrgMode) { |
| 3460 |
Param[2] += CursorTop; |
Param[2] += CursorTop; |
| 3461 |
if (Param[2] > CursorBottom) { |
if (Param[2] > CursorBottom) { |
| 3465 |
if (Param[4] > CursorBottom) { |
if (Param[4] > CursorBottom) { |
| 3466 |
Param[4] = CursorBottom + 1; |
Param[4] = CursorBottom + 1; |
| 3467 |
} |
} |
| 3468 |
|
|
| 3469 |
|
// TODO: 左右マージンのチェックを行う。 |
| 3470 |
} |
} |
| 3471 |
|
|
| 3472 |
BuffFillBox(Param[1], Param[3]-1, Param[2]-1, Param[5]-1, Param[4]-1); |
BuffFillBox(Param[1], Param[3]-1, Param[2]-1, Param[5]-1, Param[4]-1); |
| 3473 |
break; |
break; |
| 3474 |
|
|
| 3475 |
case 'z': // DECERA |
case 'z': // DECERA |
| 3476 |
case '{': // DECSERA |
case '{': // DECSERA |
| 3477 |
if (Param[1] < 1 || NParam < 1) Param[1]=1; |
RequiredParams(4); |
| 3478 |
if (Param[2] < 1 || NParam < 2) Param[2]=1; |
CheckParamVal(Param[1], NumOfLines-StatusLine); |
| 3479 |
if (Param[3] < 1 || NParam < 3) Param[3]=NumOfLines-StatusLine; |
CheckParamVal(Param[2], NumOfColumns); |
| 3480 |
if (Param[4] < 1 || NParam < 4) Param[4]=NumOfColumns; |
CheckParamValMax(Param[3], NumOfLines-StatusLine); |
| 3481 |
|
CheckParamValMax(Param[4], NumOfColumns); |
| 3482 |
|
|
| 3483 |
|
if (Param[1] > Param[3] || Param[2] > Param[4]) { |
| 3484 |
|
return; |
| 3485 |
|
} |
| 3486 |
|
|
| 3487 |
if (RelativeOrgMode) { |
if (RelativeOrgMode) { |
| 3488 |
Param[1] += CursorTop; |
Param[1] += CursorTop; |
| 3489 |
if (Param[1] > CursorBottom) { |
if (Param[1] > CursorBottom) { |
| 3493 |
if (Param[3] > CursorBottom) { |
if (Param[3] > CursorBottom) { |
| 3494 |
Param[3] = CursorBottom + 1; |
Param[3] = CursorBottom + 1; |
| 3495 |
} |
} |
| 3496 |
|
|
| 3497 |
|
// TODO: 左右マージンのチェックを行う。 |
| 3498 |
} |
} |
| 3499 |
|
|
| 3500 |
if (b == 'z') { |
if (b == 'z') { |
| 3501 |
BuffEraseBox(Param[2]-1, Param[1]-1, Param[4]-1, Param[3]-1); |
BuffEraseBox(Param[2]-1, Param[1]-1, Param[4]-1, Param[3]-1); |
| 3502 |
} |
} |
| 3506 |
break; |
break; |
| 3507 |
|
|
| 3508 |
case '}': // DECSASD |
case '}': // DECSASD |
| 3509 |
if ((ts.TermFlag & TF_ENABLESLINE)==0) |
if ((ts.TermFlag & TF_ENABLESLINE) == 0 || !StatusLine) { |
| 3510 |
return; |
return; |
| 3511 |
if (StatusLine==0) |
} |
| 3512 |
return; |
|
| 3513 |
if ((Param[1]<1) && (CursorY==NumOfLines-1)) |
switch (Param[1]) { |
| 3514 |
MoveToMainScreen(); |
case 0: |
| 3515 |
else if ((Param[1]==1) && (CursorY<NumOfLines-1)) |
if (isCursorOnStatusLine) { |
| 3516 |
MoveToStatusLine(); |
MoveToMainScreen(); |
| 3517 |
|
} |
| 3518 |
|
break; |
| 3519 |
|
|
| 3520 |
|
case 1: |
| 3521 |
|
if (!isCursorOnStatusLine) { |
| 3522 |
|
MoveToStatusLine(); |
| 3523 |
|
} |
| 3524 |
|
break; |
| 3525 |
|
} |
| 3526 |
break; |
break; |
| 3527 |
|
|
| 3528 |
case '~': // DECSSDT |
case '~': // DECSSDT |
| 3529 |
if ((ts.TermFlag & TF_ENABLESLINE)==0) |
if ((ts.TermFlag & TF_ENABLESLINE)==0) { |
| 3530 |
return; |
return; |
| 3531 |
if (Param[1]<=1) |
} |
| 3532 |
|
|
| 3533 |
|
switch (Param[1]) { |
| 3534 |
|
case 0: |
| 3535 |
|
case 1: |
| 3536 |
HideStatusLine(); |
HideStatusLine(); |
| 3537 |
else if ((StatusLine==0) && (Param[1]==2)) |
break; |
| 3538 |
ShowStatusLine(1); // show |
case 2: |
| 3539 |
|
if (!StatusLine) { |
| 3540 |
|
ShowStatusLine(1); // show |
| 3541 |
|
} |
| 3542 |
|
break; |
| 3543 |
|
} |
| 3544 |
break; |
break; |
| 3545 |
} |
} |
| 3546 |
} |
} |
| 3560 |
switch (b) { |
switch (b) { |
| 3561 |
case 'w': // Enable Filter Rectangle (DECEFR) |
case 'w': // Enable Filter Rectangle (DECEFR) |
| 3562 |
if (MouseReportMode == IdMouseTrackDECELR) { |
if (MouseReportMode == IdMouseTrackDECELR) { |
| 3563 |
|
RequiredParams(4); |
| 3564 |
if (DecLocatorFlag & DecLocatorPixel) { |
if (DecLocatorFlag & DecLocatorPixel) { |
| 3565 |
x = LastX + 1; |
x = LastX + 1; |
| 3566 |
y = LastY + 1; |
y = LastY + 1; |
| 3570 |
x++; |
x++; |
| 3571 |
y++; |
y++; |
| 3572 |
} |
} |
| 3573 |
FilterTop = (NParam<1 || Param[1]<1)? y : Param[1]; |
FilterTop = (Param[1]==0)? y : Param[1]; |
| 3574 |
FilterLeft = (NParam<2 || Param[2]<1)? x : Param[2]; |
FilterLeft = (Param[2]==0)? x : Param[2]; |
| 3575 |
FilterBottom = (NParam<3 || Param[3]<1)? y : Param[3]; |
FilterBottom = (Param[3]==0)? y : Param[3]; |
| 3576 |
FilterRight = (NParam<4 || Param[4]<1)? x : Param[4]; |
FilterRight = (Param[4]==0)? x : Param[4]; |
| 3577 |
if (FilterTop > FilterBottom) { |
if (FilterTop > FilterBottom) { |
| 3578 |
i = FilterTop; FilterTop = FilterBottom; FilterBottom = i; |
i = FilterTop; FilterTop = FilterBottom; FilterBottom = i; |
| 3579 |
} |
} |
| 3645 |
switch (b) { |
switch (b) { |
| 3646 |
case 'q': // DECSCUSR |
case 'q': // DECSCUSR |
| 3647 |
if (ts.WindowFlag & WF_CURSORCHANGE) { |
if (ts.WindowFlag & WF_CURSORCHANGE) { |
| 3648 |
if (NParam > 0) { |
switch (Param[1]) { |
| 3649 |
switch (Param[1]) { |
case 0: |
| 3650 |
case 0: |
case 1: |
| 3651 |
case 1: |
ts.CursorShape = IdBlkCur; |
| 3652 |
ts.CursorShape = IdBlkCur; |
ts.NonblinkingCursor = FALSE; |
| 3653 |
ts.NonblinkingCursor = FALSE; |
break; |
| 3654 |
break; |
case 2: |
| 3655 |
case 2: |
ts.CursorShape = IdBlkCur; |
| 3656 |
ts.CursorShape = IdBlkCur; |
ts.NonblinkingCursor = TRUE; |
| 3657 |
ts.NonblinkingCursor = TRUE; |
break; |
| 3658 |
break; |
case 3: |
| 3659 |
case 3: |
ts.CursorShape = IdHCur; |
| 3660 |
ts.CursorShape = IdHCur; |
ts.NonblinkingCursor = FALSE; |
| 3661 |
ts.NonblinkingCursor = FALSE; |
break; |
| 3662 |
break; |
case 4: |
| 3663 |
case 4: |
ts.CursorShape = IdHCur; |
| 3664 |
ts.CursorShape = IdHCur; |
ts.NonblinkingCursor = TRUE; |
| 3665 |
ts.NonblinkingCursor = TRUE; |
break; |
| 3666 |
break; |
case 5: |
| 3667 |
case 5: |
ts.CursorShape = IdVCur; |
| 3668 |
ts.CursorShape = IdVCur; |
ts.NonblinkingCursor = FALSE; |
| 3669 |
ts.NonblinkingCursor = FALSE; |
break; |
| 3670 |
break; |
case 6: |
| 3671 |
case 6: |
ts.CursorShape = IdVCur; |
| 3672 |
ts.CursorShape = IdVCur; |
ts.NonblinkingCursor = TRUE; |
| 3673 |
ts.NonblinkingCursor = TRUE; |
break; |
| 3674 |
break; |
default: |
| 3675 |
default: |
return; |
|
return; |
|
|
} |
|
|
ChangeCaret(); |
|
| 3676 |
} |
} |
| 3677 |
|
ChangeCaret(); |
| 3678 |
} |
} |
| 3679 |
break; |
break; |
| 3680 |
} |
} |
| 3828 |
IntChar[ICount] = b; |
IntChar[ICount] = b; |
| 3829 |
} |
} |
| 3830 |
else if ((b>=0x30) && (b<=0x39)) { /* parameter value */ |
else if ((b>=0x30) && (b<=0x39)) { /* parameter value */ |
| 3831 |
|
#define ParamIncr(p, b) \ |
| 3832 |
|
do { \ |
| 3833 |
|
unsigned int ptmp; \ |
| 3834 |
|
if ((p) != (int)UINT_MAX) { \ |
| 3835 |
|
ptmp = (unsigned int)(p); \ |
| 3836 |
|
if (ptmp > UINT_MAX / 10 || ptmp * 10 > UINT_MAX - (b - 0x30)) { \ |
| 3837 |
|
(p) = (int)UINT_MAX; \ |
| 3838 |
|
} \ |
| 3839 |
|
else { \ |
| 3840 |
|
(p) = (int)(ptmp * 10 + b - 0x30); \ |
| 3841 |
|
} \ |
| 3842 |
|
} \ |
| 3843 |
|
} while (0); |
| 3844 |
if (NSParam[NParam] > 0) { |
if (NSParam[NParam] > 0) { |
| 3845 |
SubParam[NParam][NSParam[NParam]] = SubParam[NParam][NSParam[NParam]]*10 + b - 0x30; |
ParamIncr(SubParam[NParam][NSParam[NParam]], b); |
| 3846 |
} |
} |
| 3847 |
else { |
else { |
| 3848 |
Param[NParam] = Param[NParam]*10 + b - 0x30; |
ParamIncr(Param[NParam], b); |
| 3849 |
} |
} |
| 3850 |
} |
} |
| 3851 |
else if (b==0x3A) { /* ':' Subparameter delimiter */ |
else if (b==0x3A) { /* ':' Subparameter delimiter */ |