git-svn-id: svn://qnap.local/TwoTerm/trunk@1981 5590a31f-7b70-45f8-8c82-aa3a8e5f4507

This commit is contained in:
Kelvin Sherlock 2011-01-11 00:29:59 +00:00
parent 46eac4c3ec
commit 1658fd2dd6
12 changed files with 834 additions and 487 deletions

View File

@ -31,7 +31,7 @@
breakpoints = (
B676066111DEBFB000D6B66C /* TwoTermAppDelegate.m:34 */,
B676066711DEC06900D6B66C /* TermWindowController.mm:42 */,
B65FA27911E29E8D00EB447E /* EmulatorView.mm:169 */,
B65FA27911E29E8D00EB447E /* EmulatorView.mm:166 */,
B649E13D11E2BC7A0061921F /* VT52View.mm:460 */,
B649E15211E2BF130061921F /* VT52View.mm:107 */,
B649E17111E2C3C50061921F /* VT52View.mm:598 */,
@ -45,21 +45,23 @@
B66979B111E6A8D0002ED475 /* VT52.mm:258 */,
B60EBE0511E916BD00C1974F /* ScanLineFilter.m:23 */,
B60EBE0711E916C000C1974F /* ScanLineFilter.m:24 */,
B6E6A7DE11EAAB3A00A24C0C /* Screen.cpp:498 */,
B6E6A7F711EAAEC100A24C0C /* EmulatorView.mm:556 */,
B6E6A7F711EAAEC100A24C0C /* EmulatorView.mm:553 */,
B64925ED11EE73ED0065E73A /* VT52.mm:82 */,
B649260011EE74E30065E73A /* VT52.mm:149 */,
B6358D0111F6846C00437AA2 /* VT100.mm:502 */,
B6358D0311F6846F00437AA2 /* VT100.mm:477 */,
B6358D0B11F6852300437AA2 /* VT100.mm:457 */,
B6358D0E11F685B600437AA2 /* Screen.cpp:254 */,
B6358D0E11F685B600437AA2 /* Screen.cpp:400 */,
B642D32A11FFA06800CBB349 /* VT100.mm:611 */,
B6F243ED12BDA1280071AF8A /* EmulatorView.mm:471 */,
B6F2442012BDB49A0071AF8A /* PTSE.mm:108 */,
B6F2442B12BDB4F10071AF8A /* PTSE.mm:136 */,
B637CD0B12BEAA05009FDC31 /* PTSE.mm:312 */,
B637CD0E12BEAA18009FDC31 /* PTSE.mm:78 */,
B6C99E5C12BF030500C379FF /* EmulatorView.mm:539 */,
B6F243ED12BDA1280071AF8A /* EmulatorView.mm:468 */,
B6F2442012BDB49A0071AF8A /* PTSE.mm:114 */,
B6F2442B12BDB4F10071AF8A /* PTSE.mm:142 */,
B637CD0B12BEAA05009FDC31 /* PTSE.mm:318 */,
B637CD0E12BEAA18009FDC31 /* PTSE.mm:84 */,
B6C99E5C12BF030500C379FF /* EmulatorView.mm:536 */,
B6720BCA12C182F20030413E /* GNOConsole.mm:247 */,
B6720BED12C1855A0030413E /* EmulatorView.mm:173 */,
B6720BF212C185800030413E /* GNOConsole.mm:198 */,
);
codeSenseManager = B676054911DADB9100D6B66C /* Code sense */;
executables = (
@ -162,17 +164,20 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 314500304;
PBXWorkspaceStateSaveDate = 314500304;
PBXPerProjectTemplateStateSaveDate = 316144660;
PBXWorkspaceStateSaveDate = 316144660;
};
perUserProjectItems = {
B60EBDFB11E916AE00C1974F /* PBXTextBookmark */ = B60EBDFB11E916AE00C1974F /* PBXTextBookmark */;
B60EBDFC11E916AE00C1974F /* PBXTextBookmark */ = B60EBDFC11E916AE00C1974F /* PBXTextBookmark */;
B60EBE6211E91C5900C1974F /* PBXTextBookmark */ = B60EBE6211E91C5900C1974F /* PBXTextBookmark */;
B61069C412B72942007204C0 /* PBXTextBookmark */ = B61069C412B72942007204C0 /* PBXTextBookmark */;
B637CCFC12BEA992009FDC31 /* PBXTextBookmark */ = B637CCFC12BEA992009FDC31 /* PBXTextBookmark */;
B634EF2E12D7FC27004B2F57 /* PBXTextBookmark */ = B634EF2E12D7FC27004B2F57 /* PBXTextBookmark */;
B634EF2F12D7FC27004B2F57 /* PBXTextBookmark */ = B634EF2F12D7FC27004B2F57 /* PBXTextBookmark */;
B634EF3012D7FC27004B2F57 /* PBXTextBookmark */ = B634EF3012D7FC27004B2F57 /* PBXTextBookmark */;
B634EF3512D81161004B2F57 /* PBXTextBookmark */ = B634EF3512D81161004B2F57 /* PBXTextBookmark */;
B641C88811EA8DCC00B6359F /* PBXTextBookmark */ = B641C88811EA8DCC00B6359F /* PBXTextBookmark */;
B64925C411EE622D0065E73A /* PBXTextBookmark */ = B64925C411EE622D0065E73A /* PBXTextBookmark */;
B653E42C12C0701E001DCE27 /* PBXTextBookmark */ = B653E42C12C0701E001DCE27 /* PBXTextBookmark */;
B65FA2FE11E2A5D200EB447E /* PBXTextBookmark */ = B65FA2FE11E2A5D200EB447E /* PBXTextBookmark */;
B662524E12BD9D14002B1529 /* PBXBookmark */ = B662524E12BD9D14002B1529 /* PBXBookmark */;
B66979BD11E6ACB9002ED475 /* PBXTextBookmark */ = B66979BD11E6ACB9002ED475 /* PBXTextBookmark */;
@ -181,10 +186,19 @@
B6697A5411E7E072002ED475 /* PBXTextBookmark */ = B6697A5411E7E072002ED475 /* PBXTextBookmark */;
B6697A5511E7E072002ED475 /* PBXTextBookmark */ = B6697A5511E7E072002ED475 /* PBXTextBookmark */;
B6697A5611E7E072002ED475 /* PBXTextBookmark */ = B6697A5611E7E072002ED475 /* PBXTextBookmark */;
B6697A5811E7E072002ED475 /* PBXTextBookmark */ = B6697A5811E7E072002ED475 /* PBXTextBookmark */;
B6697A5911E7E072002ED475 /* PBXTextBookmark */ = B6697A5911E7E072002ED475 /* PBXTextBookmark */;
B6697A5A11E7E072002ED475 /* PBXTextBookmark */ = B6697A5A11E7E072002ED475 /* PBXTextBookmark */;
B672878912B9C36800774C3B /* PBXBookmark */ = B672878912B9C36800774C3B /* PBXBookmark */;
B673C0D212C2FEA800923CE5 /* PBXTextBookmark */ = B673C0D212C2FEA800923CE5 /* PBXTextBookmark */;
B673C15D12C4401E00923CE5 /* PBXTextBookmark */ = B673C15D12C4401E00923CE5 /* PBXTextBookmark */;
B673C16712C4401E00923CE5 /* PBXTextBookmark */ = B673C16712C4401E00923CE5 /* PBXTextBookmark */;
B673C16812C4401E00923CE5 /* PBXTextBookmark */ = B673C16812C4401E00923CE5 /* PBXTextBookmark */;
B673C17A12C46C0800923CE5 /* PBXTextBookmark */ = B673C17A12C46C0800923CE5 /* PBXTextBookmark */;
B673C1B312C5625100923CE5 /* PBXTextBookmark */ = B673C1B312C5625100923CE5 /* PBXTextBookmark */;
B673C1B412C5625100923CE5 /* PBXTextBookmark */ = B673C1B412C5625100923CE5 /* PBXTextBookmark */;
B673C1B612C5625100923CE5 /* PBXTextBookmark */ = B673C1B612C5625100923CE5 /* PBXTextBookmark */;
B673C1C812C5845400923CE5 /* PBXTextBookmark */ = B673C1C812C5845400923CE5 /* PBXTextBookmark */;
B673C24512C666C700923CE5 /* PBXTextBookmark */ = B673C24512C666C700923CE5 /* PBXTextBookmark */;
B676058811DAE21100D6B66C /* PBXTextBookmark */ = B676058811DAE21100D6B66C /* PBXTextBookmark */;
B676058911DAE21100D6B66C /* PBXTextBookmark */ = B676058911DAE21100D6B66C /* PBXTextBookmark */;
B676058B11DAE21100D6B66C /* PlistBookmark */ = B676058B11DAE21100D6B66C /* PlistBookmark */;
@ -192,18 +206,12 @@
B676060711DD4FA600D6B66C /* PBXTextBookmark */ = B676060711DD4FA600D6B66C /* PBXTextBookmark */;
B676064811DEB80600D6B66C /* PBXTextBookmark */ = B676064811DEB80600D6B66C /* PBXTextBookmark */;
B67606C811DED91C00D6B66C /* PBXTextBookmark */ = B67606C811DED91C00D6B66C /* PBXTextBookmark */;
B67B3D1212B724790033AE07 /* PBXTextBookmark */ = B67B3D1212B724790033AE07 /* PBXTextBookmark */;
B699A0C211E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C211E58D3B00F54CC8 /* PBXTextBookmark */;
B6A0F71A11F22CD200AC3547 /* PBXTextBookmark */ = B6A0F71A11F22CD200AC3547 /* PBXTextBookmark */;
B6C99E2712BEF7BF00C379FF /* PBXTextBookmark */ = B6C99E2712BEF7BF00C379FF /* PBXTextBookmark */;
B6C99E4D12BF011300C379FF /* PBXTextBookmark */ = B6C99E4D12BF011300C379FF /* PBXTextBookmark */;
B6C99E6912BF064F00C379FF /* PBXTextBookmark */ = B6C99E6912BF064F00C379FF /* PBXTextBookmark */;
B6D1D11711FFA83D00196D8E /* PBXTextBookmark */ = B6D1D11711FFA83D00196D8E /* PBXTextBookmark */;
B6E6A7BD11EAA92100A24C0C /* PBXTextBookmark */ = B6E6A7BD11EAA92100A24C0C /* PBXTextBookmark */;
B6F243C512BD9E070071AF8A /* PBXTextBookmark */ = B6F243C512BD9E070071AF8A /* PBXTextBookmark */;
B6F243D812BD9E1A0071AF8A /* PBXTextBookmark */ = B6F243D812BD9E1A0071AF8A /* PBXTextBookmark */;
B6F243F112BDA12E0071AF8A /* PBXTextBookmark */ = B6F243F112BDA12E0071AF8A /* PBXTextBookmark */;
B6FA9C5411FCE85B00F38EC1 /* PBXTextBookmark */ = B6FA9C5411FCE85B00F38EC1 /* PBXTextBookmark */;
B6FA9C6611FCE9BC00F38EC1 /* PBXTextBookmark */ = B6FA9C6611FCE9BC00F38EC1 /* PBXTextBookmark */;
};
sourceControlManager = B676054811DADB9100D6B66C /* Source Control */;
@ -285,7 +293,7 @@
ignoreCount = 0;
lineNumber = 23;
location = 2Term;
modificationTime = 314508599.515075;
modificationTime = 314925648.684403;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -303,7 +311,7 @@
ignoreCount = 0;
lineNumber = 24;
location = 2Term;
modificationTime = 314508599.515301;
modificationTime = 314925648.684919;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -341,6 +349,13 @@
sepNavVisRange = "{0, 1983}";
};
};
B61D0D62125B89E8001C713B /* EmulatorManager.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1022, 1131}}";
sepNavSelRange = "{953, 0}";
sepNavVisRange = "{0, 1504}";
};
};
B61D0D67125B8E06001C713B /* Defaults.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1022, 1046}}";
@ -355,6 +370,43 @@
sepNavVisRange = "{0, 412}";
};
};
B634EF2E12D7FC27004B2F57 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A02F11E528BC00F54CC8 /* Screen.cpp */;
name = "Screen.cpp: 499";
rLen = 0;
rLoc = 11041;
rType = 0;
vrLen = 661;
vrLoc = 8408;
};
B634EF2F12D7FC27004B2F57 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A03211E528DE00F54CC8 /* iGeometry.h */;
name = "iGeometry.h: 78";
rLen = 0;
rLoc = 1746;
rType = 0;
vrLen = 417;
vrLoc = 629;
};
B634EF3012D7FC27004B2F57 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6EBE2B411E0EA9100EA0458 /* CharacterGenerator.m */;
rLen = 11;
rLoc = 2970;
rType = 0;
};
B634EF3512D81161004B2F57 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6EBE2B411E0EA9100EA0458 /* CharacterGenerator.m */;
name = "CharacterGenerator.m: 124";
rLen = 15;
rLoc = 2970;
rType = 0;
vrLen = 365;
vrLoc = 2713;
};
B6358D0111F6846C00437AA2 /* VT100.mm:502 */ = {
isa = PBXFileBreakpoint;
actions = (
@ -369,7 +421,7 @@
ignoreCount = 0;
lineNumber = 502;
location = 2Term;
modificationTime = 314508599.516886;
modificationTime = 314925648.688455;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -387,7 +439,7 @@
ignoreCount = 0;
lineNumber = 477;
location = 2Term;
modificationTime = 314508599.517101;
modificationTime = 314925648.688755;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -405,11 +457,11 @@
ignoreCount = 0;
lineNumber = 457;
location = 2Term;
modificationTime = 314508599.517321;
modificationTime = 314925648.689123;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6358D0E11F685B600437AA2 /* Screen.cpp:254 */ = {
B6358D0E11F685B600437AA2 /* Screen.cpp:400 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -421,23 +473,13 @@
functionName = "Screen::erase(EraseRegion region)";
hitCount = 0;
ignoreCount = 0;
lineNumber = 254;
lineNumber = 400;
location = 2Term;
modificationTime = 314508599.517538;
modificationTime = 314925648.68933;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B637CCFC12BEA992009FDC31 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6697A3C11E7CCA0002ED475 /* PTSE.mm */;
name = "PTSE.mm: 231";
rLen = 0;
rLoc = 6673;
rType = 0;
vrLen = 547;
vrLoc = 6541;
};
B637CD0B12BEAA05009FDC31 /* PTSE.mm:312 */ = {
B637CD0B12BEAA05009FDC31 /* PTSE.mm:318 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -449,13 +491,13 @@
functionName = "-keyDown:screen:output:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 312;
lineNumber = 318;
location = 2Term;
modificationTime = 314508599.518868;
modificationTime = 314925648.691389;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B637CD0E12BEAA18009FDC31 /* PTSE.mm:78 */ = {
B637CD0E12BEAA18009FDC31 /* PTSE.mm:84 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -467,9 +509,9 @@
functionName = "-processCharacter:screen:output:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 78;
lineNumber = 84;
location = 2Term;
modificationTime = 314508599.519105;
modificationTime = 314925648.6916839;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -497,20 +539,10 @@
ignoreCount = 0;
lineNumber = 611;
location = 2Term;
modificationTime = 314508599.51776;
modificationTime = 314925648.690089;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B64925C411EE622D0065E73A /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A02F11E528BC00F54CC8 /* Screen.cpp */;
name = "Screen.cpp: 383";
rLen = 0;
rLoc = 10997;
rType = 0;
vrLen = 772;
vrLoc = 4080;
};
B64925D811EE6C350065E73A /* VT100.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1064, 997}}";
@ -539,7 +571,7 @@
ignoreCount = 0;
lineNumber = 82;
location = 2Term;
modificationTime = 314508599.516414;
modificationTime = 314925648.685899;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -557,7 +589,7 @@
ignoreCount = 0;
lineNumber = 149;
location = 2Term;
modificationTime = 314508599.516672;
modificationTime = 314925648.686222;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -575,7 +607,7 @@
ignoreCount = 0;
lineNumber = 460;
location = 2Term;
modificationTime = 314508599.51114;
modificationTime = 314925648.678896;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -593,7 +625,7 @@
ignoreCount = 0;
lineNumber = 107;
location = 2Term;
modificationTime = 314508599.511371;
modificationTime = 314925648.6790761;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -611,7 +643,7 @@
ignoreCount = 0;
lineNumber = 598;
location = 2Term;
modificationTime = 314508599.512569;
modificationTime = 314925648.6798919;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -629,7 +661,7 @@
ignoreCount = 0;
lineNumber = 607;
location = 2Term;
modificationTime = 314508599.513315;
modificationTime = 314925648.680831;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -647,7 +679,7 @@
ignoreCount = 0;
lineNumber = 170;
location = 2Term;
modificationTime = 314508599.513556;
modificationTime = 314925648.6829211;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -665,11 +697,35 @@
ignoreCount = 0;
lineNumber = 113;
location = 2Term;
modificationTime = 314508599.513762;
modificationTime = 314925648.68312;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B65FA27911E29E8D00EB447E /* EmulatorView.mm:169 */ = {
B653E41612C05C8C001DCE27 /* GNOConsole.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1859, 6435}}";
sepNavSelRange = "{11068, 0}";
sepNavVisRange = "{11024, 650}";
};
};
B653E41712C05C8C001DCE27 /* GNOConsole.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1022, 1046}}";
sepNavSelRange = "{228, 0}";
sepNavVisRange = "{0, 374}";
};
};
B653E42C12C0701E001DCE27 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B67606D811DF6DAB00D6B66C /* EmulatorView.h */;
name = "EmulatorView.h: 89";
rLen = 0;
rLoc = 1578;
rType = 0;
vrLen = 573;
vrLoc = 1273;
};
B65FA27911E29E8D00EB447E /* EmulatorView.mm:166 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -681,9 +737,9 @@
functionName = "-drawRect:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 169;
lineNumber = 166;
location = 2Term;
modificationTime = 314508599.510732;
modificationTime = 314925648.678643;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -736,7 +792,7 @@
ignoreCount = 0;
lineNumber = 202;
location = 2Term;
modificationTime = 314508599.513965;
modificationTime = 314925648.68349;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -754,7 +810,7 @@
ignoreCount = 0;
lineNumber = 201;
location = 2Term;
modificationTime = 314508599.514165;
modificationTime = 314925648.683659;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -772,7 +828,7 @@
ignoreCount = 0;
lineNumber = 296;
location = 2Term;
modificationTime = 314508599.514387;
modificationTime = 314925648.683835;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -790,7 +846,7 @@
ignoreCount = 0;
lineNumber = 290;
location = 2Term;
modificationTime = 314508599.5146;
modificationTime = 314925648.6840121;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -808,7 +864,7 @@
ignoreCount = 0;
lineNumber = 258;
location = 2Term;
modificationTime = 314508599.514853;
modificationTime = 314925648.684189;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -855,9 +911,9 @@
};
B6697A3C11E7CCA0002ED475 /* PTSE.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1022, 4069}}";
sepNavSelRange = "{8084, 0}";
sepNavVisRange = "{7049, 2162}";
sepNavIntBoundsRect = "{{0, 0}, {1022, 4901}}";
sepNavSelRange = "{978, 0}";
sepNavVisRange = "{618, 2099}";
};
};
B6697A5311E7E072002ED475 /* PBXTextBookmark */ = {
@ -900,16 +956,6 @@
vrLen = 482;
vrLoc = 0;
};
B6697A5811E7E072002ED475 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A08B11E5720F00F54CC8 /* Emulator.h */;
name = "Emulator.h: 17";
rLen = 0;
rLoc = 286;
rType = 0;
vrLen = 542;
vrLoc = 0;
};
B6697A5911E7E072002ED475 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6697A3B11E7CCA0002ED475 /* PTSE.h */;
@ -930,10 +976,178 @@
vrLen = 387;
vrLoc = 0;
};
B6720BCA12C182F20030413E /* GNOConsole.mm:247 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = B653E41612C05C8C001DCE27 /* GNOConsole.mm */;
functionName = "-processCharacter:screen:output:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 247;
location = 2Term;
modificationTime = 314925648.692364;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6720BED12C1855A0030413E /* EmulatorView.mm:173 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */;
functionName = "-drawRect:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 173;
location = 2Term;
modificationTime = 314925648.6925861;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6720BF212C185800030413E /* GNOConsole.mm:198 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = B653E41612C05C8C001DCE27 /* GNOConsole.mm */;
functionName = "-processCharacter:screen:output:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 198;
location = 2Term;
modificationTime = 314925648.692897;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B672878912B9C36800774C3B /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = B67B3CE412B6FA040033AE07 /* a2-charset-80.png */;
};
B673C0D212C2FEA800923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B653E41712C05C8C001DCE27 /* GNOConsole.h */;
name = "GNOConsole.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 337;
vrLoc = 0;
};
B673C14912C3F0CF00923CE5 /* Apple80.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1022, 1023}}";
sepNavSelRange = "{208, 0}";
sepNavVisRange = "{0, 309}";
};
};
B673C14A12C3F0CF00923CE5 /* Apple80.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1022, 4043}}";
sepNavSelRange = "{837, 0}";
sepNavVisRange = "{136, 1086}";
};
};
B673C15D12C4401E00923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B61D0D62125B89E8001C713B /* EmulatorManager.m */;
name = "EmulatorManager.m: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 312;
vrLoc = 0;
};
B673C16712C4401E00923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6697A3C11E7CCA0002ED475 /* PTSE.mm */;
name = "PTSE.mm: 153";
rLen = 0;
rLoc = 3621;
rType = 0;
vrLen = 800;
vrLoc = 3158;
};
B673C16812C4401E00923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B673C14912C3F0CF00923CE5 /* Apple80.h */;
name = "Apple80.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 206;
vrLoc = 0;
};
B673C17A12C46C0800923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B673C14A12C3F0CF00923CE5 /* Apple80.mm */;
name = "Apple80.mm: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 307;
vrLoc = 0;
};
B673C1B312C5625100923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A02E11E528BC00F54CC8 /* Screen.h */;
name = "Screen.h: 141";
rLen = 0;
rLoc = 3271;
rType = 0;
vrLen = 382;
vrLoc = 2474;
};
B673C1B412C5625100923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A08B11E5720F00F54CC8 /* Emulator.h */;
name = "Emulator.h: 52";
rLen = 0;
rLoc = 849;
rType = 0;
vrLen = 430;
vrLoc = 357;
};
B673C1B612C5625100923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B676063A11DEAD3500D6B66C /* TermWindowController.mm */;
name = "TermWindowController.mm: 86";
rLen = 0;
rLoc = 1550;
rType = 0;
vrLen = 500;
vrLoc = 1301;
};
B673C1C812C5845400923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */;
name = "EmulatorView.mm: 201";
rLen = 0;
rLoc = 4260;
rType = 0;
vrLen = 675;
vrLoc = 3698;
};
B673C24512C666C700923CE5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B653E41612C05C8C001DCE27 /* GNOConsole.mm */;
name = "GNOConsole.mm: 410";
rLen = 0;
rLoc = 11068;
rType = 0;
vrLen = 514;
vrLoc = 10873;
};
B676053511DADB8100D6B66C /* 2Term */ = {
isa = PBXExecutable;
activeArgIndices = (
@ -1054,9 +1268,9 @@
};
B676063A11DEAD3500D6B66C /* TermWindowController.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1022, 2912}}";
sepNavSelRange = "{288, 0}";
sepNavVisRange = "{2809, 1831}";
sepNavIntBoundsRect = "{{0, 0}, {1022, 3159}}";
sepNavSelRange = "{1559, 0}";
sepNavVisRange = "{434, 1525}";
};
};
B676064811DEB80600D6B66C /* PBXTextBookmark */ = {
@ -1083,7 +1297,7 @@
ignoreCount = 0;
lineNumber = 34;
location = 2Term;
modificationTime = 314508599.510016;
modificationTime = 314925648.6776339;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -1101,7 +1315,7 @@
ignoreCount = 0;
lineNumber = 42;
location = 2Term;
modificationTime = 314508599.510467;
modificationTime = 314925648.678069;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -1132,47 +1346,37 @@
};
B67606D811DF6DAB00D6B66C /* EmulatorView.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1022, 1378}}";
sepNavIntBoundsRect = "{{0, 0}, {1859, 1378}}";
sepNavSelRange = "{1578, 0}";
sepNavVisRange = "{324, 1522}";
sepNavVisRange = "{1273, 573}";
};
};
B67606D911DF6DAB00D6B66C /* EmulatorView.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1513, 9191}}";
sepNavSelRange = "{15910, 8}";
sepNavVisRange = "{11682, 537}";
sepNavIntBoundsRect = "{{0, 0}, {1513, 8970}}";
sepNavSelRange = "{4260, 0}";
sepNavVisRange = "{3698, 675}";
};
};
B67B3D1212B724790033AE07 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6EBE2B411E0EA9100EA0458 /* CharacterGenerator.m */;
name = "CharacterGenerator.m: 135";
rLen = 0;
rLoc = 3078;
rType = 0;
vrLen = 958;
vrLoc = 730;
};
B699A02E11E528BC00F54CC8 /* Screen.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1859, 2769}}";
sepNavSelRange = "{3511, 0}";
sepNavVisRange = "{3307, 377}";
sepNavIntBoundsRect = "{{0, 0}, {1022, 3549}}";
sepNavSelRange = "{673, 0}";
sepNavVisRange = "{0, 1380}";
};
};
B699A02F11E528BC00F54CC8 /* Screen.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1859, 7319}}";
sepNavSelRange = "{3709, 0}";
sepNavVisRange = "{3484, 377}";
sepNavIntBoundsRect = "{{0, 0}, {1513, 9386}}";
sepNavSelRange = "{11041, 0}";
sepNavVisRange = "{8408, 661}";
};
};
B699A03211E528DE00F54CC8 /* iGeometry.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1167, 1365}}";
sepNavSelRange = "{2096, 0}";
sepNavVisRange = "{315, 1803}";
sepNavIntBoundsRect = "{{0, 0}, {1513, 1352}}";
sepNavSelRange = "{1746, 0}";
sepNavVisRange = "{629, 417}";
};
};
B699A05B11E54D4500F54CC8 /* OutputChannel.h */ = {
@ -1191,9 +1395,9 @@
};
B699A08B11E5720F00F54CC8 /* Emulator.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1167, 1011}}";
sepNavSelRange = "{633, 0}";
sepNavVisRange = "{0, 639}";
sepNavIntBoundsRect = "{{0, 0}, {1022, 1046}}";
sepNavSelRange = "{187, 0}";
sepNavVisRange = "{0, 896}";
};
};
B699A08F11E572A300F54CC8 /* VT52.h */ = {
@ -1205,9 +1409,9 @@
};
B699A09011E572A300F54CC8 /* VT52.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1513, 7137}}";
sepNavIntBoundsRect = "{{0, 0}, {1022, 7241}}";
sepNavSelRange = "{3524, 0}";
sepNavVisRange = "{3019, 707}";
sepNavVisRange = "{0, 1377}";
};
};
B699A0C211E58D3B00F54CC8 /* PBXTextBookmark */ = {
@ -1247,14 +1451,7 @@
vrLen = 707;
vrLoc = 3019;
};
B6C99E4D12BF011300C379FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */;
rLen = 8;
rLoc = 15910;
rType = 0;
};
B6C99E5C12BF030500C379FF /* EmulatorView.mm:539 */ = {
B6C99E5C12BF030500C379FF /* EmulatorView.mm:536 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -1266,22 +1463,12 @@
functionName = "-setFrame:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 539;
lineNumber = 536;
location = 2Term;
modificationTime = 314508599.519342;
modificationTime = 314925648.692;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6C99E6912BF064F00C379FF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */;
name = "EmulatorView.mm: 703";
rLen = 8;
rLoc = 15910;
rType = 0;
vrLen = 537;
vrLoc = 11682;
};
B6D1D11711FFA83D00196D8E /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B64925D911EE6C350065E73A /* VT100.mm */;
@ -1292,35 +1479,7 @@
vrLen = 1231;
vrLoc = 16416;
};
B6E6A7BD11EAA92100A24C0C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A03211E528DE00F54CC8 /* iGeometry.h */;
name = "iGeometry.h: 78";
rLen = 0;
rLoc = 1745;
rType = 0;
vrLen = 767;
vrLoc = 278;
};
B6E6A7DE11EAAB3A00A24C0C /* Screen.cpp:498 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = B699A02F11E528BC00F54CC8 /* Screen.cpp */;
functionName = "Screen::setSize(unsigned width, unsigned height)";
hitCount = 0;
ignoreCount = 0;
lineNumber = 498;
location = 2Term;
modificationTime = 314508599.515652;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6E6A7F711EAAEC100A24C0C /* EmulatorView.mm:556 */ = {
B6E6A7F711EAAEC100A24C0C /* EmulatorView.mm:553 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -1332,9 +1491,9 @@
functionName = "ViewScreen::setSize(unsigned width, unsigned height, bool resizeView)";
hitCount = 0;
ignoreCount = 0;
lineNumber = 556;
lineNumber = 553;
location = 2Term;
modificationTime = 314508599.515955;
modificationTime = 314925648.68559;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -1347,9 +1506,9 @@
};
B6EBE2B411E0EA9100EA0458 /* CharacterGenerator.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1048, 1755}}";
sepNavSelRange = "{1960, 0}";
sepNavVisRange = "{1051, 2027}";
sepNavIntBoundsRect = "{{0, 0}, {1513, 1755}}";
sepNavSelRange = "{2970, 15}";
sepNavVisRange = "{2713, 365}";
};
};
B6F243C512BD9E070071AF8A /* PBXTextBookmark */ = {
@ -1372,7 +1531,7 @@
vrLen = 528;
vrLoc = 1084;
};
B6F243ED12BDA1280071AF8A /* EmulatorView.mm:471 */ = {
B6F243ED12BDA1280071AF8A /* EmulatorView.mm:468 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -1384,23 +1543,13 @@
functionName = "-resizeTo:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 471;
lineNumber = 468;
location = 2Term;
modificationTime = 314508599.518015;
modificationTime = 314925648.690321;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6F243F112BDA12E0071AF8A /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B676063A11DEAD3500D6B66C /* TermWindowController.mm */;
name = "TermWindowController.mm: 178";
rLen = 0;
rLoc = 4440;
rType = 0;
vrLen = 560;
vrLoc = 3210;
};
B6F2442012BDB49A0071AF8A /* PTSE.mm:108 */ = {
B6F2442012BDB49A0071AF8A /* PTSE.mm:114 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -1412,13 +1561,13 @@
functionName = "-processCharacter:screen:output:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 108;
lineNumber = 114;
location = 2Term;
modificationTime = 314508599.518389;
modificationTime = 314925648.690596;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6F2442B12BDB4F10071AF8A /* PTSE.mm:136 */ = {
B6F2442B12BDB4F10071AF8A /* PTSE.mm:142 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -1430,9 +1579,9 @@
functionName = "-processCharacter:screen:output:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 136;
lineNumber = 142;
location = 2Term;
modificationTime = 314508599.518633;
modificationTime = 314925648.691081;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -1445,21 +1594,11 @@
};
B6F444C711E41AC000C3A836 /* VT05.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1167, 3315}}";
sepNavIntBoundsRect = "{{0, 0}, {1022, 3432}}";
sepNavSelRange = "{6030, 0}";
sepNavVisRange = "{638, 1966}";
sepNavVisRange = "{0, 1229}";
};
};
B6FA9C5411FCE85B00F38EC1 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A02E11E528BC00F54CC8 /* Screen.h */;
name = "Screen.h: 203";
rLen = 0;
rLoc = 3701;
rType = 0;
vrLen = 266;
vrLoc = 2850;
};
B6FA9C6611FCE9BC00F38EC1 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B64925D811EE6C350065E73A /* VT100.h */;

View File

@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>ActivePerspectiveName</key>
<string>Debug</string>
<string>Project</string>
<key>AllowedModules</key>
<array>
<dict>
@ -285,8 +285,8 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
<integer>26</integer>
<integer>19</integer>
<integer>34</integer>
<integer>23</integer>
<integer>0</integer>
</array>
</array>
@ -307,6 +307,8 @@
<string>MainColumn</string>
<real>324</real>
</array>
<key>RubberWindowFrame</key>
<string>0 59 1920 1119 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -317,12 +319,14 @@
<key>Dock</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>B676054211DADB9000D6B66C</string>
<key>PBXProjectModuleLabel</key>
<string>EmulatorView.mm</string>
<string>CharacterGenerator.m</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@ -330,11 +334,11 @@
<key>PBXProjectModuleGUID</key>
<string>B676054311DADB9000D6B66C</string>
<key>PBXProjectModuleLabel</key>
<string>EmulatorView.mm</string>
<string>CharacterGenerator.m</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>B6C99E6912BF064F00C379FF</string>
<string>B634EF3512D81161004B2F57</string>
<key>history</key>
<array>
<string>B676058811DAE21100D6B66C</string>
@ -352,29 +356,35 @@
<string>B6697A5411E7E072002ED475</string>
<string>B6697A5511E7E072002ED475</string>
<string>B6697A5611E7E072002ED475</string>
<string>B6697A5811E7E072002ED475</string>
<string>B6697A5911E7E072002ED475</string>
<string>B6697A5A11E7E072002ED475</string>
<string>B60EBDFB11E916AE00C1974F</string>
<string>B60EBDFC11E916AE00C1974F</string>
<string>B60EBE6211E91C5900C1974F</string>
<string>B641C88811EA8DCC00B6359F</string>
<string>B6E6A7BD11EAA92100A24C0C</string>
<string>B64925C411EE622D0065E73A</string>
<string>B6A0F71A11F22CD200AC3547</string>
<string>B6FA9C5411FCE85B00F38EC1</string>
<string>B6FA9C6611FCE9BC00F38EC1</string>
<string>B6D1D11711FFA83D00196D8E</string>
<string>B67B3D1212B724790033AE07</string>
<string>B61069C412B72942007204C0</string>
<string>B672878912B9C36800774C3B</string>
<string>B662524E12BD9D14002B1529</string>
<string>B6F243C512BD9E070071AF8A</string>
<string>B6F243D812BD9E1A0071AF8A</string>
<string>B6F243F112BDA12E0071AF8A</string>
<string>B637CCFC12BEA992009FDC31</string>
<string>B6C99E2712BEF7BF00C379FF</string>
<string>B6C99E4D12BF011300C379FF</string>
<string>B653E42C12C0701E001DCE27</string>
<string>B673C0D212C2FEA800923CE5</string>
<string>B673C15D12C4401E00923CE5</string>
<string>B673C16712C4401E00923CE5</string>
<string>B673C16812C4401E00923CE5</string>
<string>B673C17A12C46C0800923CE5</string>
<string>B673C1B312C5625100923CE5</string>
<string>B673C1B412C5625100923CE5</string>
<string>B673C1B612C5625100923CE5</string>
<string>B673C1C812C5845400923CE5</string>
<string>B673C24512C666C700923CE5</string>
<string>B634EF2E12D7FC27004B2F57</string>
<string>B634EF2F12D7FC27004B2F57</string>
<string>B634EF3012D7FC27004B2F57</string>
</array>
</dict>
<key>SplitCount</key>
@ -388,16 +398,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {1574, 361}}</string>
<string>{{0, 0}, {1574, 304}}</string>
<key>RubberWindowFrame</key>
<string>0 59 1920 1119 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>361pt</string>
<string>304pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>712pt</string>
<string>769pt</string>
<key>Tabs</key>
<array>
<dict>
@ -411,7 +423,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {1574, 685}}</string>
<string>{{10, 27}, {1574, 742}}</string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -427,7 +439,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {1574, 685}}</string>
<string>{{10, 27}, {1574, 742}}</string>
<key>RubberWindowFrame</key>
<string>0 59 1920 1119 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXProjectFindModule</string>
@ -466,7 +480,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {1574, 645}}</string>
<string>{{10, 27}, {1574, 727}}</string>
</dict>
<key>Module</key>
<string>PBXCVSModule</string>
@ -486,7 +500,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {1574, 685}}</string>
<string>{{10, 27}, {1574, 727}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -514,11 +528,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>B6C99DFA12BEF1DC00C379FF</string>
<string>B634EF3212D7FC27004B2F57</string>
<string>1CA23ED40692098700951B8B</string>
<string>B6C99DFB12BEF1DC00C379FF</string>
<string>B634EF3312D7FC27004B2F57</string>
<string>B676054211DADB9000D6B66C</string>
<string>B6C99DFC12BEF1DC00C379FF</string>
<string>B634EF3412D7FC27004B2F57</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -569,14 +583,12 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {1920, 403}}</string>
<key>RubberWindowFrame</key>
<string>-1 59 1920 1119 0 0 1920 1178 </string>
<string>{{0, 0}, {1920, 390}}</string>
</dict>
<key>Module</key>
<string>PBXDebugCLIModule</string>
<key>Proportion</key>
<string>403pt</string>
<string>390pt</string>
</dict>
<dict>
<key>ContentConfiguration</key>
@ -595,8 +607,8 @@
<string>yes</string>
<key>sizes</key>
<array>
<string>{{0, 0}, {937, 328}}</string>
<string>{{937, 0}, {983, 328}}</string>
<string>{{0, 0}, {937, 335}}</string>
<string>{{937, 0}, {983, 335}}</string>
</array>
</dict>
<key>VerticalSplitView</key>
@ -611,8 +623,8 @@
<string>yes</string>
<key>sizes</key>
<array>
<string>{{0, 0}, {1920, 328}}</string>
<string>{{0, 328}, {1920, 342}}</string>
<string>{{0, 0}, {1920, 335}}</string>
<string>{{0, 335}, {1920, 348}}</string>
</array>
</dict>
</dict>
@ -632,7 +644,7 @@
<key>DebugSTDIOWindowFrame</key>
<string>{{200, 200}, {500, 300}}</string>
<key>Frame</key>
<string>{{0, 408}, {1920, 670}}</string>
<string>{{0, 395}, {1920, 683}}</string>
<key>PBXDebugSessionStackFrameViewKey</key>
<dict>
<key>DebugVariablesTableConfiguration</key>
@ -645,17 +657,13 @@
<real>656</real>
</array>
<key>Frame</key>
<string>{{937, 0}, {983, 328}}</string>
<key>RubberWindowFrame</key>
<string>-1 59 1920 1119 0 0 1920 1178 </string>
<string>{{937, 0}, {983, 335}}</string>
</dict>
<key>RubberWindowFrame</key>
<string>-1 59 1920 1119 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXDebugSessionModule</string>
<key>Proportion</key>
<string>670pt</string>
<string>683pt</string>
</dict>
</array>
<key>Name</key>
@ -673,14 +681,14 @@
</array>
<key>TableOfContents</key>
<array>
<string>B6C99DFD12BEF1DC00C379FF</string>
<string>B673C0D612C2FEA800923CE5</string>
<string>1CCC7628064C1048000F2A68</string>
<string>1CCC7629064C1048000F2A68</string>
<string>B6C99DFE12BEF1DC00C379FF</string>
<string>B6C99DFF12BEF1DC00C379FF</string>
<string>B6C99E0012BEF1DC00C379FF</string>
<string>B6C99E0112BEF1DC00C379FF</string>
<string>B6C99E0212BEF1DC00C379FF</string>
<string>B673C0D712C2FEA800923CE5</string>
<string>B673C0D812C2FEA800923CE5</string>
<string>B673C0D912C2FEA800923CE5</string>
<string>B673C0DA12C2FEA800923CE5</string>
<string>B673C0DB12C2FEA800923CE5</string>
</array>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
@ -714,17 +722,10 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>1C530D5B069F1CE1000CFCEE</string>
<string>B6C99E3812BEF98500C379FF</string>
<string>B6C99E3912BEF98500C379FF</string>
<string>B6C99E0412BEF1DC00C379FF</string>
<string>B6C99E0612BEF1DC00C379FF</string>
<string>B6C99E2A12BEF7BF00C379FF</string>
<string>/Users/kelvin/Projects/2Term/2Term.xcodeproj</string>
<string>B6C99E2B12BEF7BF00C379FF</string>
</array>
<key>WindowString</key>
<string>-1 59 1920 1119 0 0 1920 1178 </string>
<string>0 59 1920 1119 0 0 1920 1178 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View File

@ -21,9 +21,11 @@
B61D0D63125B89E8001C713B /* EmulatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B61D0D62125B89E8001C713B /* EmulatorManager.m */; };
B61D0D69125B8E06001C713B /* Defaults.m in Sources */ = {isa = PBXBuildFile; fileRef = B61D0D68125B8E06001C713B /* Defaults.m */; };
B64925DA11EE6C350065E73A /* VT100.mm in Sources */ = {isa = PBXBuildFile; fileRef = B64925D911EE6C350065E73A /* VT100.mm */; };
B653E41812C05C8C001DCE27 /* GNOConsole.mm in Sources */ = {isa = PBXBuildFile; fileRef = B653E41612C05C8C001DCE27 /* GNOConsole.mm */; };
B669798511E6A786002ED475 /* Lock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B669798411E6A786002ED475 /* Lock.cpp */; };
B6697A0F11E6BF95002ED475 /* CurveView.m in Sources */ = {isa = PBXBuildFile; fileRef = B6697A0E11E6BF95002ED475 /* CurveView.m */; };
B6697A3D11E7CCA0002ED475 /* PTSE.mm in Sources */ = {isa = PBXBuildFile; fileRef = B6697A3C11E7CCA0002ED475 /* PTSE.mm */; };
B673C14B12C3F0CF00923CE5 /* Apple80.mm in Sources */ = {isa = PBXBuildFile; fileRef = B673C14A12C3F0CF00923CE5 /* Apple80.mm */; };
B676063B11DEAD3500D6B66C /* TermWindowController.mm in Sources */ = {isa = PBXBuildFile; fileRef = B676063A11DEAD3500D6B66C /* TermWindowController.mm */; };
B676065111DEBAE900D6B66C /* TermWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B676065011DEBAE900D6B66C /* TermWindow.xib */; };
B67606DA11DF6DAB00D6B66C /* EmulatorView.mm in Sources */ = {isa = PBXBuildFile; fileRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; };
@ -85,12 +87,16 @@
B61D0D68125B8E06001C713B /* Defaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Defaults.m; sourceTree = "<group>"; };
B64925D811EE6C350065E73A /* VT100.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VT100.h; sourceTree = "<group>"; };
B64925D911EE6C350065E73A /* VT100.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = VT100.mm; sourceTree = "<group>"; };
B653E41612C05C8C001DCE27 /* GNOConsole.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GNOConsole.mm; sourceTree = "<group>"; };
B653E41712C05C8C001DCE27 /* GNOConsole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GNOConsole.h; sourceTree = "<group>"; };
B669798311E6A786002ED475 /* Lock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lock.h; sourceTree = "<group>"; };
B669798411E6A786002ED475 /* Lock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Lock.cpp; sourceTree = "<group>"; };
B6697A0D11E6BF95002ED475 /* CurveView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CurveView.h; sourceTree = "<group>"; };
B6697A0E11E6BF95002ED475 /* CurveView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CurveView.m; sourceTree = "<group>"; };
B6697A3B11E7CCA0002ED475 /* PTSE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PTSE.h; sourceTree = "<group>"; };
B6697A3C11E7CCA0002ED475 /* PTSE.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PTSE.mm; sourceTree = "<group>"; };
B673C14912C3F0CF00923CE5 /* Apple80.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Apple80.h; sourceTree = "<group>"; };
B673C14A12C3F0CF00923CE5 /* Apple80.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Apple80.mm; sourceTree = "<group>"; };
B676063911DEAD3500D6B66C /* TermWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TermWindowController.h; sourceTree = "<group>"; };
B676063A11DEAD3500D6B66C /* TermWindowController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TermWindowController.mm; sourceTree = "<group>"; };
B676064D11DEBAE300D6B66C /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/TermWindow.xib; sourceTree = "<group>"; };
@ -248,6 +254,8 @@
B6697A3A11E7CC80002ED475 /* Emulators */ = {
isa = PBXGroup;
children = (
B653E41612C05C8C001DCE27 /* GNOConsole.mm */,
B653E41712C05C8C001DCE27 /* GNOConsole.h */,
B699A08B11E5720F00F54CC8 /* Emulator.h */,
B61D0D62125B89E8001C713B /* EmulatorManager.m */,
B6697A3B11E7CCA0002ED475 /* PTSE.h */,
@ -258,6 +266,8 @@
B699A09011E572A300F54CC8 /* VT52.mm */,
B64925D811EE6C350065E73A /* VT100.h */,
B64925D911EE6C350065E73A /* VT100.mm */,
B673C14912C3F0CF00923CE5 /* Apple80.h */,
B673C14A12C3F0CF00923CE5 /* Apple80.mm */,
);
name = Emulators;
sourceTree = "<group>";
@ -347,6 +357,8 @@
B61D0D60125B7ACA001C713B /* NewTerminalWindowController.m in Sources */,
B61D0D63125B89E8001C713B /* EmulatorManager.m in Sources */,
B61D0D69125B8E06001C713B /* Defaults.m in Sources */,
B653E41812C05C8C001DCE27 /* GNOConsole.mm in Sources */,
B673C14B12C3F0CF00923CE5 /* Apple80.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -61,6 +61,13 @@ enum {
return ws;
}
-(void)initTerm: (struct termios *)term
{
// Control-U is used by the up-arrow key.
term->c_cc[VKILL] = CTRL('X');
}
-(void)processCharacter:(uint8_t)c screen:(Screen *)screen output:(OutputChannel *)output
{

View File

@ -7,6 +7,7 @@
//
#include <sys/ttycom.h>
#include <sys/termios.h>
@class NSEvent;
@class NSMenu;
@ -46,4 +47,8 @@ class OutputChannel;
-(struct winsize)defaultSize;
@optional
-(void)initTerm: (struct termios *)term;
@end

View File

@ -194,11 +194,11 @@
screenRect.origin.y = 0;
}
unsigned minX = floor(screenRect.origin.x / _charWidth);
unsigned maxX = ceil((screenRect.origin.x + screenRect.size.width) / _charWidth);
int minX = floor(screenRect.origin.x / _charWidth);
int maxX = ceil((screenRect.origin.x + screenRect.size.width) / _charWidth);
unsigned minY = floor(screenRect.origin.y / _charHeight);
unsigned maxY = ceil((screenRect.origin.y + screenRect.size.height) / _charHeight);
int minY = floor(screenRect.origin.y / _charHeight);
int maxY = ceil((screenRect.origin.y + screenRect.size.height) / _charHeight);
// x/y are 0-indexed here.

View File

@ -10,22 +10,20 @@
#import "Emulator.h"
#include "iGeometry.h"
#include "Screen.h"
@interface GNOConsole : NSObject <Emulator>
{
unsigned _state;
TextPort _textPort;
iPoint _dca;
int _vp[4];
#ifdef __cplusplus
class TextPort;
TextPort *_textPort;
#endif
}

View File

@ -156,11 +156,6 @@ enum {
{
_state = StateText;
if (_textPort)
{
delete _textPort;
_textPort = NULL;
}
// set flags to plain text.
}
@ -177,10 +172,24 @@ enum {
return ws;
}
-(void)dealloc
-(void)initTerm: (struct termios *)term
{
delete _textPort;
[super dealloc];
// Control-U is used by the up-arrow key.
term->c_cc[VKILL] = CTRL('X');
}
-(id)init
{
if ((self = [super init]))
{
_textPort.frame = iRect(0, 0, 24, 80);
_textPort.cursor = iPoint(0,0);
_textPort.scroll = true;
_textPort.advanceCursor = true;
_textPort.leftMargin = TextPort::MarginWrap;
_textPort.rightMargin = TextPort::MarginWrap;
}
}
-(void)processCharacter:(uint8_t)c screen:(Screen *)screen output:(OutputChannel *)output
@ -215,34 +224,35 @@ enum {
break;
case CTRL('H'):
// todo -- honor the viewport.
screen->decrementX(true);
screen->decrementX(&_textPort);
//screen->decrementX(true);
break;
case CTRL('I'):
// tab
screen->tabTo((screen->x() + 8) & ~0x07);
screen->tabTo(&_textPort, (screen->x() + 8) & ~0x07);
//screen->tabTo((screen->x() + 8) & ~0x07);
break;
case CTRL('J'):
// down 1 line.
screen->lineFeed();
screen->lineFeed(&_textPort);
break;
case CTRL('K'):
// clear to end of screen
screen->erase(Screen::EraseAfterCursor);
screen->erase(&_textPort, Screen::EraseAfterCursor);
break;
case CTRL('L'):
// clear screen, go home.
screen->erase(Screen::EraseAll);
screen->setCursor(0, 0, true, true);
screen->erase(&_textPort, Screen::EraseAll);
screen->setCursor(&_textPort.origin, true);
break;
case CTRL('M'):
// move to left edge.
screen->setX(0, true);
screen->setX(&_textPort, 0);
break;
case CTRL('N'):
@ -257,25 +267,25 @@ enum {
case CTRL('Q'):
// insert line.
//TODO
screen->insertLine(&_textPort, screen->y() - _textPort.origin.y);
break;
case CTRL('R'):
// delete line
// TODO
screen->deleteLine(&_textPort, screen->y() - _textPort.origin.y);
break;
case CTRL('U'):
// right arrow.
screen->incrementX(true);
screen->incrementX(&_textPort, true);
break;
case CTRL('V'):
// scroll down 1 line.
// TODO
screen->insertLine(&_textPort, 0);
break;
case CTRL('W'):
// scroll up 1 line.
// TODO
screen->deleteLine(&_textPort, 0);
break;
case CTRL('X'):
@ -285,11 +295,11 @@ enum {
case CTRL('Y'):
// cursor home
screen->setCursor(0, 0, true, true);
screen->setCursor(_textPort.frame.origin, true, true);
break;
case CTRL('Z'):
// clear entire line
screen->erase(Screen::EraseLineAll);
screen->erase(&_textPort, Screen::EraseLineAll);
break;
case CTRL('['):
@ -300,12 +310,12 @@ enum {
case CTRL('\\'):
// move cursor 1 character to the right
screen->incrementX(true);
screen->incrementX(&_textPort);
break;
case CTRL(']'):
// clear to end of line.
screen->erase(Screen::EraseLineAfterCursor);
screen->erase(&_textPort, Screen::EraseLineAfterCursor);
break;
case CTRL('^'):
@ -315,13 +325,13 @@ enum {
case CTRL('_'):
// move up 1 line
screen->decrementY(true);
screen->decrementY(&_textPort, true);
break;
default:
if (c >= 0x20 && c < 0x7f)
{
screen->putc(c);
screen->putc(&_textPort, c);
}
break;
@ -389,22 +399,15 @@ enum {
if (_vp[1] <= _vp[0]) _vp[1] = 80;
if (_vp[3] <= _vp[2]) _vp[3] = 24;
if (_vp[0] == 0 && _vp[1] == 80 && _vp[2] == 0 && _vp[3] == 24)
{
delete _textPort;
_textPort = NULL;
}
else
{
if (!_textPort) _textPort = new TextPort;
_textPort->frame = iRect(_vp[0], _vp[2], _vp[1] - _vp[0], _vp[3] - _vp[2]);
_textPort->rightMargin = TextPort::RMTruncate;
_textPort->advanceCursor = true;
_textPort->scroll = true;
}
_textPort.frame = iRect(_vp[0], _vp[2], _vp[1] - _vp[0], _vp[3] - _vp[2]);
// move the cursor to the top left
// gnome clamps the horizontal, doesn't adjust the vertical.
screen->setCursor(_textPort, 0, 0);
_state = StateText;

View File

@ -72,6 +72,12 @@ enum {
}
-(void)initTerm: (struct termios *)term
{
// Control-U is used by the up-arrow key.
term->c_cc[VKILL] = CTRL('X');
}
-(void)processCharacter:(uint8_t)c screen:(Screen *)screen output:(OutputChannel *)output
{

View File

@ -11,11 +11,20 @@
#include <algorithm>
iPoint TextPort::absoluteCursor() const
{
return iPoint(frame.origin.x + cursor.x, frame.origin.y + cursor.y);
}
Screen::Screen(unsigned height, unsigned width)
{
_port.frame = iRect(0, 0, width, height);
_port.rightMargin = TextPort::RMTruncate;
_port.rightMargin = TextPort::MarginTruncate;
_port.rightMargin = TextPort::MarginTruncate;
_port.advanceCursor = true;
_port.scroll = true;
@ -42,7 +51,7 @@ void Screen::beginUpdate()
{
_lock.lock();
_updates.clear();
_updateCursor = _cursor;
_updateCursor = cursor();
}
iRect Screen::endUpdate()
@ -52,10 +61,11 @@ iRect Screen::endUpdate()
int minX = width();
int minY = height();
iPoint c = cursor();
if (_cursor != _updateCursor)
if (c != _updateCursor)
{
_updates.push_back(_cursor);
_updates.push_back(c);
_updates.push_back(_updateCursor);
}
@ -88,145 +98,268 @@ void Screen::clearFlagBit(uint8_t bit)
}
void Screen::putc(uint8_t c, bool incrementX)
void Screen::putc(TextPort *textPort, uint8_t c)
{
if (_cursor.x < width())
/*
* textport must be valid.
* cursor must be within textport.
*/
if (!textPort) textPort = &_port;
iPoint cursor = textPort->absoluteCursor();
// right margin is a special case.
if (textPort->cursor.x == textPort->frame.width() -1)
{
_updates.push_back(_cursor);
_screen[_cursor.y][_cursor.x] = CharInfo(c, _flag);
if (incrementX && _cursor.x < width() - 1) ++_cursor.x;
}
}
void Screen::deletec()
{
// delete character at cursor.
// move following character up
// set final character to ' ' (retaining flags from previous char)
if (_cursor.x >= width()) return;
_updates.push_back(_cursor);
_updates.push_back(iPoint(width() - 1, _cursor.y));
CharInfoIterator end = _screen[_cursor.y].end() - 1;
CharInfoIterator iter = _screen[_cursor.y].begin() + _cursor.x;
for ( ; iter != end; ++iter)
{
iter[0] = iter[1];
if (textPort->rightMargin == TextPort::MarginTruncate) return;
if (textPort->rightMargin == TextPort::MarginOverwrite)
{
_updates.push_back(cursor);
_screen[cursor.y][cursor.x] = CharInfo(c, _flag);
return;
}
//if (textPort->rightMargin == TextPort::MarginWrap)
}
// retain the flags previously there.
end->c = ' ';
}
void Screen::insertc(uint8_t c)
{
// insert character at cursor.
// move following characters up (retaining flags).
if (_cursor.x >= width()) return;
_updates.push_back(_cursor);
_updates.push_back(iPoint(width() - 1, _cursor.y));
CharInfoIterator end = _screen[_cursor.y].end() - 1;
CharInfoIterator iter = _screen[_cursor.y].begin() + _cursor.x;
for ( ; iter != end; ++iter)
_updates.push_back(cursor);
_screen[cursor.y][cursor.x] = CharInfo(c, _flag);
if (textPort->advanceCursor)
{
iter[1] = iter[0];
incrementX(textPort);
}
iter->c = ' ';
}
void Screen::tabTo(unsigned xPos)
void Screen::tabTo(TextPort *textPort, unsigned xPos)
{
if (!textPort) textPort = &_port;
CharInfo clear(' ', _flag);
CharInfoIterator iter;
iPoint cursor = textPort->absoluteCursor();
xPos = std::min((int)xPos, width() - 1);
xPos = std::min((int)xPos, textPort->frame.width() - 1);
_updates.push_back(cursor);
_updates.push_back(_cursor);
_updates.push_back(iPoint(xPos, _cursor.y));
for (unsigned x = _cursor.x; x < xPos; ++x)
for (unsigned x = textPort->cursor.x; x < xPos; ++x)
{
_screen[_cursor.y][x] = clear;
_screen[cursor.y][x + textPort->frame.minX()] = clear;
}
_cursor.x = xPos;
textPort->cursor.x += xPos;
if (textPort != &_port) _port.cursor = textPort->absoluteCursor();
_updates.push_back(_port.cursor);
}
void Screen::setX(int x, bool clamp)
#pragma mark -
#pragma mark Cursor manipulation.
/*
* sets cursor.x within the textport.
* if x is outside the textport and clampX is true, it will be clamped to 0/width-1
* if x is outside the textport and clampX is false, x will not be updated.
*
* returns the new cursor.x
*/
int Screen::setX(TextPort *textPort, int x)
{
// honors clampX.
if (!textPort) textPort = &_port;
bool clamp = textPort->clampX;
if (x < 0)
{
if (clamp) _cursor.x = 0;
return;
if (clamp) textPort->cursor.x = 0;
}
if (x >= width())
else if (x >= textPort->frame.width())
{
if (clamp) _cursor.x = width() - 1;
return;
if (clamp) textPort->cursor.x = textPort->frame.width() - 1;
}
else
{
textPort->cursor.x = x;
}
if (textPort != &_port) _port.cursor = textPort->absoluteCursor();
_cursor.x = x;
return textPort->cursor.x;
}
/*
* sets cursor.y within the textport.
* if y is outside the textport and clampY is true, it will be clamped to 0/height-1
* if y is outside the textport and clampY is false, y will not be updated.
*
* returns the new cursor.y
*/
void Screen::setY(int y, bool clamp)
int Screen::setY(TextPort *textPort, int y)
{
// honors clampY.
if (!textPort) textPort = &_port;
bool clamp = textPort->clampY;
if (y < 0)
{
if (clamp) _cursor.y = 0;
return;
if (clamp) textPort->cursor.y = 0;
}
if (y >= height())
else if (y >= textPort->frame.height())
{
if (clamp) _cursor.y = height() - 1;
return;
if (clamp) textPort->cursor.y = textPort->frame.height() - 1;
}
else
{
textPort->cursor.y = y;
}
_cursor.y = y;
if (textPort != &_port) _port.cursor = textPort->absoluteCursor();
return textPort->cursor.y;
}
int Screen::incrementX(bool clamp)
/*
* increments cursor.x within the textport.
* if rightMargin wraps, it will set x = 0 and incrementY (which may scroll)
* if rightMargin does not wrap, it will not be updated.
*
* returns the new cursor.x
*/
int Screen::incrementX(TextPort *textPort)
{
setX(_cursor.x + 1, clamp);
return _cursor.x;
// honors wrap, scroll.
if (!textPort) textPort = &_port;
if (textPort->cursor.x == textPort->frame.width() - 1)
{
if (textPort->rightMargin == TextPort::MarginWrap)
{
textPort->cursor.x = 0;
incrementY(textPort);
}
}
else
{
textPort->cursor.x++;
}
if (textPort != &_port) _port.cursor = textPort->absoluteCursor();
return textPort->cursor.x;
}
int Screen::decrementX(bool clamp)
/*
* decrements cursor.x within the textport.
* if leftMargin wraps, it will set x = width - 1 and decrementY (which may scroll)
* if leftMargin does not wrap, it will not be updated.
*
* returns the new cursor.x
*/
int Screen::decrementX(TextPort *textPort)
{
setX(_cursor.x - 1, clamp);
return _cursor.x;
// honors wrap, scroll.
if (!textPort) textPort = &_port;
if (textPort->cursor.x == 0)
{
if (textPort->leftMargin == TextPort::MarginWrap)
{
textPort->cursor.x = textPort->frame.width() - 1;
decrementY(textPort);
}
}
else
{
textPort->cursor.x--;
}
if (textPort != &_port) _port.cursor = textPort->absoluteCursor();
return textPort->cursor.x;
}
int Screen::incrementY(bool clamp)
/*
* increment cursor.y
* this is similar to lineFeed, except that it honors the scroll flag
* at the bottom of the screen.
* returns the new cursor.y
*/
int Screen::incrementY(TextPort *textPort)
{
setY(_cursor.y + 1, clamp);
return _cursor.y;
// similar to linefeed, but honors scroll.
if (!textPort) textPort = &_port;
if (textPort->scroll)
return lineFeed(textPort);
if (textPort->cursor.y < textPort->frame.height() - 1)
return lineFeed(textPort);
return textPort->cursor.y;
}
int Screen::decrementY(bool clamp)
/*
* decrement cursor.y
* this is similar to revereseLineFeed, except that it honors the scroll flag
* at the top of the screen.
* returns the new cursor.y
*/
int Screen::decrementY(TextPort *textPort)
{
setY(_cursor.y - 1, clamp);
return _cursor.y;
// similar to reverseLineFeed, but will not scroll.
if (!textPort) textPort = &_port;
if (!textPort) textPort = &_port;
if (textPort->scroll)
return lineFeed(textPort);
if (textPort->cursor.y > 0)
return reverseLineFeed(textPort);
return textPort->cursor.y;
}
void Screen::setCursor(TextPort *textPort,iPoint point)
{
setX(textPort, point.x);
setY(textPort, point.y);
}
void Screen::setCursor(TextPort *textPort, int x, int y)
{
setX(textPort, x);
setY(textPort, y);
}
#pragma mark -
#pragma mark Erase
void Screen::erase(EraseRegion region)
{
@ -251,13 +384,13 @@ void Screen::erase(EraseRegion region)
// TODO -- be smart and check if cursor is at x = 0 (or x = _width - 1)
if (region == EraseBeforeCursor)
{
ScreenIterator end = _screen.begin() + _cursor.y - 1;
ScreenIterator end = _screen.begin() + y() - 1;
for (screenIter = _screen.begin(); screenIter < end; ++screenIter)
{
std::fill(screenIter->begin(), screenIter->end(), CharInfo(0,0));
}
_updates.push_back(iPoint(0,0));
_updates.push_back(iPoint(width() - 1, _cursor.y));
_updates.push_back(iPoint(width() - 1, y()));
region = EraseLineBeforeCursor;
}
@ -265,46 +398,42 @@ void Screen::erase(EraseRegion region)
if (region == EraseAfterCursor)
{
ScreenIterator end = _screen.end();
for (screenIter = _screen.begin() + _cursor.y + 1; screenIter < end; ++screenIter)
for (screenIter = _screen.begin() + y() + 1; screenIter < end; ++screenIter)
{
std::fill(screenIter->begin(), screenIter->end(), CharInfo(0,0));
}
_updates.push_back(iPoint(0,_cursor.y + 1));
_updates.push_back(iPoint(0, y() + 1));
_updates.push_back(iPoint(width() - 1, height() - 1));
region = EraseLineAfterCursor;
}
if (region == EraseLineAll)
{
int y = _cursor.y;
std::fill(_screen[y].begin(), _screen[y].end(), CharInfo(0,0));
{
std::fill(_screen[y()].begin(), _screen[y()].end(), CharInfo(0,0));
_updates.push_back(iPoint(0, _cursor.y));
_updates.push_back(iPoint(width() - 1, _cursor.y));
_updates.push_back(iPoint(0, y()));
_updates.push_back(iPoint(width() - 1, y()));
return;
}
if (region == EraseLineBeforeCursor)
{
int y = _cursor.y;
std::fill(_screen[y].begin(), _screen[y].begin() + _cursor.x + 1, CharInfo(0,0));
std::fill(_screen[y()].begin(), _screen[y()].begin() + x() + 1, CharInfo(0,0));
_updates.push_back(iPoint(0, _cursor.y));
_updates.push_back(_cursor);
_updates.push_back(iPoint(0, y()));
_updates.push_back(cursor());
return;
}
if (region == EraseLineAfterCursor)
{
int y = _cursor.y;
std::fill(_screen[y].begin() + _cursor.x, _screen[y].end(), CharInfo(0,0));
std::fill(_screen[y()].begin() + x(), _screen[y()].end(), CharInfo(0,0));
_updates.push_back(_cursor);
_updates.push_back(iPoint(width() - 1, _cursor.y));
_updates.push_back(cursor());
_updates.push_back(iPoint(width() - 1, y()));
}
@ -315,13 +444,13 @@ void Screen::eraseLine()
{
// erases everything to the right of, and including, the cursor
for (CharInfoIterator ciIter = _screen[_cursor.y].begin() + _cursor.x; ciIter < _screen[_cursor.y].end(); ++ciIter)
for (CharInfoIterator ciIter = _screen[y()].begin() + x(); ciIter < _screen[y()].end(); ++ciIter)
{
*ciIter = CharInfo(0, _flag);
}
_updates.push_back(_cursor);
_updates.push_back(iPoint(width() - 1, _cursor.y));
_updates.push_back(cursor());
_updates.push_back(iPoint(width() - 1, y()));
}
void Screen::eraseScreen()
{
@ -329,9 +458,9 @@ void Screen::eraseScreen()
eraseLine();
if (_cursor.y == height() -1) return;
if (y() == height() -1) return;
for (ScreenIterator iter = _screen.begin() + _cursor.y; iter < _screen.end(); ++iter)
for (ScreenIterator iter = _screen.begin() + y(); iter < _screen.end(); ++iter)
{
for (CharInfoIterator ciIter = iter->begin(); ciIter < iter->end(); ++ciIter)
{
@ -340,7 +469,7 @@ void Screen::eraseScreen()
}
_updates.push_back(iPoint(0, _cursor.y + 1));
_updates.push_back(iPoint(0, y() + 1));
_updates.push_back(iPoint(width() - 1, height() - 1));
}
@ -371,53 +500,87 @@ void Screen::lineFeed()
{
// moves the screen up one row, inserting a blank line at the bottom.
if (_cursor.y == height() - 1)
if (y() == height() - 1)
{
deleteLine(0);
}
else
{
_cursor.y++;
_port.cursor.y++;
}
}
void Screen::lineFeed(TextPort *textPort)
/*
* perform a line feed. This increments Y. If Y was at the bottom of the
* textPort, the textPort scrolls.
*
*/
int Screen::lineFeed(TextPort *textPort)
{
int maxY;
if (!textPort)
{
lineFeed();
return;
return y();
}
maxY = textPort->frame.maxY();
maxY = std::min(maxY, (int)height());
if (_cursor.y < maxY)
if (textPort->cursor.y == textPort->frame.height() - 1)
{
_cursor.y++;
deleteLine(textPort, 0);
}
else if (textPort->scroll)
else
{
_cursor.y++;
textPort->cursor.y++;
if (textPort != &_port) _port.cursor = textPort->absoluteCursor();
}
return textPort->cursor.y;
}
/*
* perform a reverse line feed. This increments Y. If Y was at the top of the
* textPort, the textPort scrolls.
*
*/
int Screen::reverseLineFeed(TextPort *textPort)
{
if (!textPort)
{
reverseLineFeed();
return y();
}
if (textPort->cursor.y == 0)
{
insertLine(textPort, 0);
}
else
{
textPort->cursor.y--;
if (textPort != &_port) _port.cursor = textPort->absoluteCursor();
}
return textPort->cursor.y;
}
void Screen::reverseLineFeed()
{
// moves the cursor down one row, inserting a blank line at the top.
if (_cursor.y == 0)
if (y() == 0)
{
insertLine(0);
}
else
{
_cursor.y--;
_port.cursor.y--;
}
}
@ -452,37 +615,30 @@ void Screen::insertLine(unsigned line)
void Screen::insertLine(TextPort *textPort, unsigned line)
{
iRect frame;
CharInfo ci;
int minY;
int maxY;
int minX;
int maxX;
if (!textPort) return insertLine(line);
frame = textPort->frame;
iRect frame(textPort->frame);
minY = frame.minY();
maxY = frame.maxY();
int minY = frame.minY();
int maxY = frame.maxY();
minX = frame.minX();
minY = frame.maxX();
int minX = frame.minX();
int maxX = frame.maxX();
if (line < 0) return;
if (line >= frame.height()) return;
// move all subsequent lines forward by 1.
for (int y = maxY - 2; y >= minY + line; --y)
for (int y = frame.height() - 2; y >= line; --y)
{
CharInfoIterator iter;
CharInfoIterator end;
iter = _screen[y].begin() + minX;
end = _screen[y].begin() + maxX;
iter = _screen[minY + y].begin();
std::copy(iter, end, _screen[y + 1].begin() + minX);
std::copy(iter +minX, iter + maxX, _screen[minY + y + 1].begin() + minX);
}
// clear the line.
@ -524,37 +680,30 @@ void Screen::deleteLine(unsigned line)
void Screen::deleteLine(TextPort *textPort, unsigned line)
{
iRect frame;
CharInfo ci;
int minY;
int maxY;
int minX;
int maxX;
if (!textPort) return deleteLine(line);
frame = textPort->frame;
iRect frame(textPort->frame);
minY = frame.minY();
maxY = frame.maxY();
int minY = frame.minY();
int maxY = frame.maxY();
minX = frame.minX();
minY = frame.maxX();
int minX = frame.minX();
int maxX = frame.maxX();
if (line < 0) return;
if (line >= frame.height()) return;
// move all subsequent lines back by 1.
for (int y = minY + line; y < maxY - 2; ++y)
for (int y = line; y < frame.height() - 2; ++y)
{
CharInfoIterator iter;
CharInfoIterator end;
iter = _screen[y + 1].begin() + minX;
end = _screen[y + 1].begin() + maxX;
iter = _screen[minY + y + 1].begin();
std::copy(iter, end, _screen[y].begin() + minX);
std::copy(iter + minX, iter + maxX, _screen[minY + y].begin() + minX);
}
// clear the last line.
@ -571,6 +720,7 @@ void Screen::deleteLine(TextPort *textPort, unsigned line)
void Screen::setSize(unsigned w, unsigned h)
{
// TODO -- have separate minimum size for textport?
if ((height() == h) && (width() == w)) return;
@ -599,8 +749,8 @@ void Screen::setSize(unsigned w, unsigned h)
_port.frame.size = iSize(w, h);
if (_cursor.y >= h) _cursor.y = h - 1;
if (_cursor.x >= w) _cursor.x = w - 1;
if (_port.cursor.y >= h) _port.cursor.y = h - 1;
if (_port.cursor.x >= w) _port.cursor.x = w - 1;
//fprintf(stderr, "setSize(%u, %u)\n", width, height);

View File

@ -30,23 +30,31 @@ typedef struct CharInfo {
typedef struct TextPort {
enum RightMargin {
RMTruncate,
RMWrap,
RMOverwrite
enum MarginBehavior {
MarginTruncate,
MarginWrap,
MarginOverwrite
};
iRect frame;
iPoint cursor;
RightMargin rightMargin;
MarginBehavior leftMargin;
MarginBehavior rightMargin;
bool advanceCursor;
//bool lineFeed;
bool scroll;
// clamp setCursor calls.
bool clampX;
bool clampY;
iPoint absoluteCursor() const;
};
@ -99,9 +107,24 @@ public:
void setX(int x, bool clamp = true);
void setY(int y, bool clamp = true);
void setCursor(iPoint point, bool clampX = true, bool clampY = true);
void setCursor(int x, int y, bool clampX = true, bool clampY = true);
int setX(TextPort *textPort, int x);
int setY(TextPort *textPort, int y);
int incrementX(TextPort *textPort);
int incrementY(TextPort *textPort);
int decrementX(TextPort *textPort);
int decrementY(TextPort *textPort);
void setCursor(TextPort *textPort,iPoint point);
void setCursor(TextPort *textPort, int x, int y);
void setFlag(uint8_t flag);
void setFlagBit(uint8_t bit);
@ -109,13 +132,16 @@ public:
void putc(uint8_t c, bool incrementX = true);
void putc(TextPort *textPort, uint8_t c);
CharInfo getc(int x, int y) const;
void deletec();
void insertc(uint8_t c);
void tabTo(unsigned x);
void tabTo(TextPort *textPort, unsigned x);
void erase(EraseRegion);
@ -127,10 +153,10 @@ public:
void lineFeed();
void lineFeed(TextPort *textPort);
int lineFeed(TextPort *textPort);
void reverseLineFeed();
void reverseLineFeed(TextPort *textPort);
int reverseLineFeed(TextPort *textPort);
@ -153,9 +179,7 @@ public:
private:
iPoint _cursor;
TextPort _port;
@ -181,17 +205,17 @@ private:
inline int Screen::x() const
{
return _cursor.x;
return _port.cursor.x;
}
inline int Screen::y() const
{
return _cursor.y;
return _port.cursor.y;
}
inline iPoint Screen::cursor() const
{
return _cursor;
return _port.cursor;
}
inline uint8_t Screen::flag() const

View File

@ -83,6 +83,8 @@
memcpy(term.c_cc, ttydefchars, sizeof(ttydefchars));
if ([_emulator respondsToSelector: @selector(initTerm:)])
[_emulator initTerm: &term];
pid = forkpty(&fd, NULL, &term, &ws);