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

This commit is contained in:
Kelvin Sherlock 2010-07-21 01:30:31 +00:00
parent a9b1a2772f
commit 9616e0ea39
8 changed files with 806 additions and 248 deletions

View File

@ -34,7 +34,7 @@
B676069511DEC97D00D6B66C /* TermWindowController.m:97 */,
B67606B011DECD4E00D6B66C /* TermWindowController.m:97 */,
B676070811DF8F4100D6B66C /* TermWindowController.m:97 */,
B65FA27911E29E8D00EB447E /* EmulatorView.mm:121 */,
B65FA27911E29E8D00EB447E /* EmulatorView.mm:123 */,
B649E13D11E2BC7A0061921F /* VT52View.mm:460 */,
B649E15211E2BF130061921F /* VT52View.mm:107 */,
B649E17111E2C3C50061921F /* VT52View.mm:598 */,
@ -46,15 +46,19 @@
B66979AB11E6A8B4002ED475 /* VT52.mm:296 */,
B66979AE11E6A8C5002ED475 /* VT52.mm:290 */,
B66979B111E6A8D0002ED475 /* VT52.mm:258 */,
B66979E511E6BD8B002ED475 /* EmulatorView.mm:48 */,
B60EBD4E11E8DF0D00C1974F /* EmulatorView.mm:68 */,
B66979E511E6BD8B002ED475 /* EmulatorView.mm:50 */,
B60EBD4E11E8DF0D00C1974F /* EmulatorView.mm:70 */,
B60EBE0511E916BD00C1974F /* ScanLineFilter.m:23 */,
B60EBE0711E916C000C1974F /* ScanLineFilter.m:24 */,
B6E6A7DE11EAAB3A00A24C0C /* Screen.cpp:364 */,
B6E6A7F711EAAEC100A24C0C /* EmulatorView.mm:482 */,
B6E6A80A11EAB13000A24C0C /* EmulatorView.mm:464 */,
B6E6A7DE11EAAB3A00A24C0C /* Screen.cpp:449 */,
B6E6A7F711EAAEC100A24C0C /* EmulatorView.mm:484 */,
B6E6A80A11EAB13000A24C0C /* EmulatorView.mm:466 */,
B64925ED11EE73ED0065E73A /* VT52.mm:82 */,
B649260011EE74E30065E73A /* VT52.mm:149 */,
B6358D0111F6846C00437AA2 /* VT100.mm:323 */,
B6358D0311F6846F00437AA2 /* VT100.mm:298 */,
B6358D0B11F6852300437AA2 /* VT100.mm:278 */,
B6358D0E11F685B600437AA2 /* Screen.cpp:205 */,
);
codeSenseManager = B676054911DADB9100D6B66C /* Code sense */;
executables = (
@ -157,17 +161,42 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 301083843;
PBXWorkspaceStateSaveDate = 301083843;
PBXPerProjectTemplateStateSaveDate = 301361100;
PBXWorkspaceStateSaveDate = 301361100;
};
perUserProjectItems = {
B609786711EEB3DC00623E03 = B609786711EEB3DC00623E03 /* PBXTextBookmark */;
B609786811EEB3DC00623E03 = B609786811EEB3DC00623E03 /* PBXTextBookmark */;
B609786911EEB3DC00623E03 = B609786911EEB3DC00623E03 /* PBXTextBookmark */;
B609786C11EEB3DC00623E03 = B609786C11EEB3DC00623E03 /* PBXTextBookmark */;
B60EBDFB11E916AE00C1974F = B60EBDFB11E916AE00C1974F /* PBXTextBookmark */;
B60EBDFC11E916AE00C1974F = B60EBDFC11E916AE00C1974F /* PBXTextBookmark */;
B60EBE6211E91C5900C1974F = B60EBE6211E91C5900C1974F /* PBXTextBookmark */;
B6358CA611F667E200437AA2 /* PBXTextBookmark */ = B6358CA611F667E200437AA2 /* PBXTextBookmark */;
B6358CA711F667E200437AA2 /* PBXTextBookmark */ = B6358CA711F667E200437AA2 /* PBXTextBookmark */;
B6358CC611F67B8200437AA2 /* PBXTextBookmark */ = B6358CC611F67B8200437AA2 /* PBXTextBookmark */;
B6358CC711F67B8200437AA2 /* PBXTextBookmark */ = B6358CC711F67B8200437AA2 /* PBXTextBookmark */;
B6358CC811F67B8200437AA2 /* PBXTextBookmark */ = B6358CC811F67B8200437AA2 /* PBXTextBookmark */;
B6358CCF11F67B8C00437AA2 /* PBXTextBookmark */ = B6358CCF11F67B8C00437AA2 /* PBXTextBookmark */;
B6358CD011F67B8E00437AA2 /* PBXTextBookmark */ = B6358CD011F67B8E00437AA2 /* PBXTextBookmark */;
B6358CD311F67C0B00437AA2 /* PBXTextBookmark */ = B6358CD311F67C0B00437AA2 /* PBXTextBookmark */;
B6358CDF11F67E6200437AA2 /* PBXTextBookmark */ = B6358CDF11F67E6200437AA2 /* PBXTextBookmark */;
B6358CE111F67F6B00437AA2 /* PBXTextBookmark */ = B6358CE111F67F6B00437AA2 /* PBXTextBookmark */;
B6358CF111F683C600437AA2 /* PBXTextBookmark */ = B6358CF111F683C600437AA2 /* PBXTextBookmark */;
B6358CF211F683C800437AA2 /* PBXTextBookmark */ = B6358CF211F683C800437AA2 /* PBXTextBookmark */;
B6358CF511F683CA00437AA2 /* PBXTextBookmark */ = B6358CF511F683CA00437AA2 /* PBXTextBookmark */;
B6358CF611F683CD00437AA2 /* PBXTextBookmark */ = B6358CF611F683CD00437AA2 /* PBXTextBookmark */;
B6358CF711F683D100437AA2 /* PBXTextBookmark */ = B6358CF711F683D100437AA2 /* PBXTextBookmark */;
B6358CF811F683D100437AA2 /* PBXTextBookmark */ = B6358CF811F683D100437AA2 /* PBXTextBookmark */;
B6358CFB11F6840100437AA2 /* PBXTextBookmark */ = B6358CFB11F6840100437AA2 /* PBXTextBookmark */;
B6358CFF11F6845500437AA2 /* PBXTextBookmark */ = B6358CFF11F6845500437AA2 /* PBXTextBookmark */;
B6358D0511F6847000437AA2 /* PBXTextBookmark */ = B6358D0511F6847000437AA2 /* PBXTextBookmark */;
B6358D0811F684EB00437AA2 /* PBXTextBookmark */ = B6358D0811F684EB00437AA2 /* PBXTextBookmark */;
B6358D0A11F684F400437AA2 /* PBXTextBookmark */ = B6358D0A11F684F400437AA2 /* PBXTextBookmark */;
B6358D0D11F6852800437AA2 /* PBXTextBookmark */ = B6358D0D11F6852800437AA2 /* PBXTextBookmark */;
B6358D1011F685B700437AA2 /* PBXTextBookmark */ = B6358D1011F685B700437AA2 /* PBXTextBookmark */;
B6358D1311F685F800437AA2 /* PBXTextBookmark */ = B6358D1311F685F800437AA2 /* PBXTextBookmark */;
B6358D1511F6860100437AA2 /* PBXTextBookmark */ = B6358D1511F6860100437AA2 /* PBXTextBookmark */;
B6358D1611F6861000437AA2 /* PBXTextBookmark */ = B6358D1611F6861000437AA2 /* PBXTextBookmark */;
B6358D1711F6863100437AA2 /* PBXTextBookmark */ = B6358D1711F6863100437AA2 /* PBXTextBookmark */;
B641C82311EA1B1600B6359F = B641C82311EA1B1600B6359F /* PBXTextBookmark */;
B641C88811EA8DCC00B6359F = B641C88811EA8DCC00B6359F /* PBXTextBookmark */;
B64925C411EE622D0065E73A = B64925C411EE622D0065E73A /* PBXTextBookmark */;
@ -194,14 +223,11 @@
B67606C811DED91C00D6B66C = B67606C811DED91C00D6B66C /* PBXTextBookmark */;
B699A0BE11E58D3B00F54CC8 = B699A0BE11E58D3B00F54CC8 /* PBXTextBookmark */;
B699A0C211E58D3B00F54CC8 = B699A0C211E58D3B00F54CC8 /* PBXTextBookmark */;
B6A0F71A11F22CD200AC3547 /* PBXTextBookmark */ = B6A0F71A11F22CD200AC3547 /* PBXTextBookmark */;
B6A0F71B11F22CD200AC3547 /* PBXTextBookmark */ = B6A0F71B11F22CD200AC3547 /* PBXTextBookmark */;
B6A0F72811F22CEE00AC3547 /* PBXTextBookmark */ = B6A0F72811F22CEE00AC3547 /* PBXTextBookmark */;
B6A0F72911F22CEE00AC3547 /* PBXTextBookmark */ = B6A0F72911F22CEE00AC3547 /* PBXTextBookmark */;
B6A0F72A11F22CEE00AC3547 /* PBXTextBookmark */ = B6A0F72A11F22CEE00AC3547 /* PBXTextBookmark */;
B6C0EA2E11F22CA400040D2D = B6C0EA2E11F22CA400040D2D /* PBXTextBookmark */;
B6A0F71A11F22CD200AC3547 = B6A0F71A11F22CD200AC3547 /* PBXTextBookmark */;
B6A0F72811F22CEE00AC3547 = B6A0F72811F22CEE00AC3547 /* PBXTextBookmark */;
B6A0F72911F22CEE00AC3547 = B6A0F72911F22CEE00AC3547 /* PBXTextBookmark */;
B6A0F72B11F22D6900AC3547 = B6A0F72B11F22D6900AC3547 /* PBXTextBookmark */;
B6E6A7BD11EAA92100A24C0C = B6E6A7BD11EAA92100A24C0C /* PBXTextBookmark */;
B6E6A80511EAB12B00A24C0C = B6E6A80511EAB12B00A24C0C /* PBXTextBookmark */;
};
sourceControlManager = B676054811DADB9100D6B66C /* Source Control */;
userBuildSettings = {
@ -227,16 +253,6 @@
sepNavVisRange = "{0, 760}";
};
};
B609786711EEB3DC00623E03 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 465";
rLen = 0;
rLoc = 13402;
rType = 0;
vrLen = 839;
vrLoc = 6591;
};
B609786811EEB3DC00623E03 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B64925D811EE6C350065E73A /* VT100.h */;
@ -251,30 +267,13 @@
isa = PBXTextBookmark;
fRef = B64925D911EE6C350065E73A /* VT100.mm */;
name = "VT100.mm: 76";
rLen = 4;
rLoc = 8596;
rLen = 0;
rLoc = 11197;
rType = 0;
vrLen = 534;
vrLoc = 755;
};
B609786C11EEB3DC00623E03 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B609786D11EEB3DC00623E03 /* ttydefaults.h */;
name = "ttydefaults.h: 84";
rLen = 0;
rLoc = 4001;
rType = 0;
vrLen = 699;
vrLoc = 3609;
};
B609786D11EEB3DC00623E03 /* ttydefaults.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = ttydefaults.h;
path = /Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/ttydefaults.h;
sourceTree = "<absolute>";
};
B60EBD4E11E8DF0D00C1974F /* EmulatorView.mm:68 */ = {
B60EBD4E11E8DF0D00C1974F /* EmulatorView.mm:70 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -286,9 +285,9 @@
functionName = "-awakeFromNib";
hitCount = 0;
ignoreCount = 0;
lineNumber = 68;
lineNumber = 70;
location = 2Term;
modificationTime = 301083852.549086;
modificationTime = 301368822.963769;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -347,7 +346,7 @@
ignoreCount = 0;
lineNumber = 23;
location = 2Term;
modificationTime = 301083852.549254;
modificationTime = 301368822.964031;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -365,7 +364,7 @@
ignoreCount = 0;
lineNumber = 24;
location = 2Term;
modificationTime = 301083852.549416;
modificationTime = 301368822.964296;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -379,6 +378,348 @@
vrLen = 725;
vrLoc = 144;
};
B6358CA611F667E200437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 633;
vrLoc = 3303;
};
B6358CA711F667E200437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A02E11E528BC00F54CC8 /* Screen.h */;
name = "Screen.h: 187";
rLen = 0;
rLoc = 3647;
rType = 0;
vrLen = 361;
vrLoc = 2857;
};
B6358CC611F67B8200437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A02E11E528BC00F54CC8 /* Screen.h */;
name = "Screen.h: 187";
rLen = 0;
rLoc = 3647;
rType = 0;
vrLen = 361;
vrLoc = 2857;
};
B6358CC711F67B8200437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 633;
vrLoc = 3303;
};
B6358CC811F67B8200437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 592;
vrLoc = 3303;
};
B6358CCF11F67B8C00437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 592;
vrLoc = 3303;
};
B6358CD011F67B8E00437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 592;
vrLoc = 3303;
};
B6358CD311F67C0B00437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 592;
vrLoc = 3303;
};
B6358CDF11F67E6200437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 592;
vrLoc = 3303;
};
B6358CE111F67F6B00437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358CF111F683C600437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358CF211F683C800437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358CF511F683CA00437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358CF611F683CD00437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358CF711F683D100437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358CF811F683D100437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358CFB11F6840100437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358CFF11F6845500437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358D0111F6846C00437AA2 /* VT100.mm:323 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = B64925D911EE6C350065E73A /* VT100.mm */;
functionName = "-processCharacter:screen:output:";
hitCount = 1;
ignoreCount = 0;
lineNumber = 323;
location = 2Term;
modificationTime = 301368878.918494;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6358D0311F6846F00437AA2 /* VT100.mm:298 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = B64925D911EE6C350065E73A /* VT100.mm */;
functionName = "-processCharacter:screen:output:";
hitCount = 2;
ignoreCount = 0;
lineNumber = 298;
location = 2Term;
modificationTime = 301368845.385673;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6358D0511F6847000437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358D0811F684EB00437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358D0A11F684F400437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358D0B11F6852300437AA2 /* VT100.mm:278 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = B64925D911EE6C350065E73A /* VT100.mm */;
functionName = "-processCharacter:screen:output:";
hitCount = 2;
ignoreCount = 0;
lineNumber = 278;
location = 2Term;
modificationTime = 301368841.644131;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6358D0D11F6852800437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358D0E11F685B600437AA2 /* Screen.cpp:205 */ = {
isa = PBXFileBreakpoint;
actions = (
);
breakpointStyle = 0;
continueAfterActions = 0;
countType = 0;
delayBeforeContinue = 0;
fileReference = B699A02F11E528BC00F54CC8 /* Screen.cpp */;
functionName = "Screen::erase(EraseRegion region)";
hitCount = 1;
ignoreCount = 0;
lineNumber = 205;
location = 2Term;
modificationTime = 301368833.080995;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6358D1011F685B700437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358D1311F685F800437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358D1511F6860100437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358D1611F6861000437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B6358D1711F6863100437AA2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 544;
vrLoc = 3079;
};
B641C82311EA1B1600B6359F /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6697A3C11E7CCA0002ED475 /* PTSE.mm */;
@ -404,7 +745,7 @@
fRef = B699A02F11E528BC00F54CC8 /* Screen.cpp */;
name = "Screen.cpp: 383";
rLen = 0;
rLoc = 7452;
rLoc = 9812;
rType = 0;
vrLen = 772;
vrLoc = 4080;
@ -412,15 +753,15 @@
B64925D811EE6C350065E73A /* VT100.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1167, 1011}}";
sepNavSelRange = "{244, 0}";
sepNavVisRange = "{0, 472}";
sepNavSelRange = "{523, 0}";
sepNavVisRange = "{0, 531}";
};
};
B64925D911EE6C350065E73A /* VT100.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1167, 7631}}";
sepNavSelRange = "{8015, 0}";
sepNavVisRange = "{6496, 1842}";
sepNavIntBoundsRect = "{{0, 0}, {999, 9425}}";
sepNavSelRange = "{6709, 0}";
sepNavVisRange = "{7064, 725}";
};
};
B64925ED11EE73ED0065E73A /* VT52.mm:82 */ = {
@ -437,7 +778,7 @@
ignoreCount = 0;
lineNumber = 82;
location = 2Term;
modificationTime = 301083852.550082;
modificationTime = 301368822.974227;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -451,11 +792,11 @@
delayBeforeContinue = 0;
fileReference = B699A09011E572A300F54CC8 /* VT52.mm */;
functionName = "-keyDown:screen:output:";
hitCount = 1;
hitCount = 0;
ignoreCount = 0;
lineNumber = 149;
location = 2Term;
modificationTime = 301083883.296228;
modificationTime = 301368822.974489;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -483,7 +824,7 @@
ignoreCount = 0;
lineNumber = 460;
location = 2Term;
modificationTime = 301083852.547109;
modificationTime = 301368822.960588;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -501,7 +842,7 @@
ignoreCount = 0;
lineNumber = 107;
location = 2Term;
modificationTime = 301083852.547258;
modificationTime = 301368822.960837;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -519,7 +860,7 @@
ignoreCount = 0;
lineNumber = 598;
location = 2Term;
modificationTime = 301083852.54742;
modificationTime = 301368822.9611;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -537,7 +878,7 @@
ignoreCount = 0;
lineNumber = 607;
location = 2Term;
modificationTime = 301083852.547608;
modificationTime = 301368822.961329;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -555,7 +896,7 @@
ignoreCount = 0;
lineNumber = 170;
location = 2Term;
modificationTime = 301083852.547768;
modificationTime = 301368822.961551;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -573,11 +914,11 @@
ignoreCount = 0;
lineNumber = 113;
location = 2Term;
modificationTime = 301083852.547931;
modificationTime = 301368822.961807;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B65FA27911E29E8D00EB447E /* EmulatorView.mm:121 */ = {
B65FA27911E29E8D00EB447E /* EmulatorView.mm:123 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -589,9 +930,9 @@
functionName = "-drawRect:";
hitCount = 0;
ignoreCount = 0;
lineNumber = 121;
lineNumber = 123;
location = 2Term;
modificationTime = 301083852.546952;
modificationTime = 301368822.960249;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -621,6 +962,11 @@
name = stl_vector.h;
path = "/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/stl_vector.h";
sourceTree = "<absolute>";
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {999, 12753}}";
sepNavSelRange = "{16903, 0}";
sepNavVisRange = "{16562, 857}";
};
};
B669797711E6A6CE002ED475 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
@ -660,7 +1006,7 @@
ignoreCount = 0;
lineNumber = 202;
location = 2Term;
modificationTime = 301083852.548111;
modificationTime = 301368822.962095;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -678,7 +1024,7 @@
ignoreCount = 0;
lineNumber = 201;
location = 2Term;
modificationTime = 301083852.54827;
modificationTime = 301368822.962435;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -696,7 +1042,7 @@
ignoreCount = 0;
lineNumber = 296;
location = 2Term;
modificationTime = 301083852.548425;
modificationTime = 301368822.962736;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -714,7 +1060,7 @@
ignoreCount = 0;
lineNumber = 290;
location = 2Term;
modificationTime = 301083852.548588;
modificationTime = 301368822.96298;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -732,7 +1078,7 @@
ignoreCount = 0;
lineNumber = 258;
location = 2Term;
modificationTime = 301083852.54875;
modificationTime = 301368822.963273;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -746,7 +1092,7 @@
vrLen = 320;
vrLoc = 0;
};
B66979E511E6BD8B002ED475 /* EmulatorView.mm:48 */ = {
B66979E511E6BD8B002ED475 /* EmulatorView.mm:50 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -758,9 +1104,9 @@
functionName = "-awakeFromNib";
hitCount = 0;
ignoreCount = 0;
lineNumber = 48;
lineNumber = 50;
location = 2Term;
modificationTime = 301083852.548912;
modificationTime = 301368822.963506;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -1002,9 +1348,9 @@
};
B676063A11DEAD3500D6B66C /* TermWindowController.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1167, 1248}}";
sepNavSelRange = "{581, 0}";
sepNavVisRange = "{0, 1558}";
sepNavIntBoundsRect = "{{0, 0}, {1167, 1287}}";
sepNavSelRange = "{1264, 0}";
sepNavVisRange = "{391, 1459}";
};
};
B676064811DEB80600D6B66C /* PBXTextBookmark */ = {
@ -1031,7 +1377,7 @@
ignoreCount = 0;
lineNumber = 34;
location = 2Term;
modificationTime = 301083852.546011;
modificationTime = 301368822.954769;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -1049,7 +1395,7 @@
ignoreCount = 0;
lineNumber = 31;
location = 2Term;
modificationTime = 301083852.546341;
modificationTime = 301368822.955399;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -1067,7 +1413,7 @@
ignoreCount = 0;
lineNumber = 97;
location = 2Term;
modificationTime = 301083852.546494;
modificationTime = 301368822.955677;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -1085,7 +1431,7 @@
ignoreCount = 0;
lineNumber = 97;
location = 2Term;
modificationTime = 301083852.546646;
modificationTime = 301368822.95594;
originalNumberOfMultipleMatches = 1;
state = 2;
};
@ -1123,9 +1469,9 @@
};
B67606D911DF6DAB00D6B66C /* EmulatorView.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1167, 6786}}";
sepNavSelRange = "{1718, 26}";
sepNavVisRange = "{141, 1538}";
sepNavIntBoundsRect = "{{0, 0}, {1167, 6604}}";
sepNavSelRange = "{1680, 0}";
sepNavVisRange = "{619, 1710}";
};
};
B676070811DF8F4100D6B66C /* TermWindowController.m:97 */ = {
@ -1142,22 +1488,22 @@
ignoreCount = 0;
lineNumber = 97;
location = 2Term;
modificationTime = 301083852.546807;
modificationTime = 301368822.956162;
originalNumberOfMultipleMatches = 1;
state = 0;
};
B699A02E11E528BC00F54CC8 /* Screen.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {653, 2535}}";
sepNavSelRange = "{3408, 0}";
sepNavVisRange = "{2857, 361}";
sepNavIntBoundsRect = "{{0, 0}, {1167, 2574}}";
sepNavSelRange = "{971, 0}";
sepNavVisRange = "{369, 1635}";
};
};
B699A02F11E528BC00F54CC8 /* Screen.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {733, 4693}}";
sepNavSelRange = "{7452, 0}";
sepNavVisRange = "{4080, 772}";
sepNavIntBoundsRect = "{{0, 0}, {999, 5798}}";
sepNavSelRange = "{3735, 0}";
sepNavVisRange = "{3445, 696}";
};
};
B699A03211E528DE00F54CC8 /* iGeometry.h */ = {
@ -1190,16 +1536,16 @@
};
B699A08F11E572A300F54CC8 /* VT52.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {653, 422}}";
sepNavSelRange = "{0, 0}";
sepNavIntBoundsRect = "{{0, 0}, {1167, 1011}}";
sepNavSelRange = "{310, 21}";
sepNavVisRange = "{0, 390}";
};
};
B699A09011E572A300F54CC8 /* VT52.mm */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {670, 7462}}";
sepNavIntBoundsRect = "{{0, 0}, {670, 7189}}";
sepNavSelRange = "{3524, 0}";
sepNavVisRange = "{3303, 633}";
sepNavVisRange = "{3079, 544}";
};
};
B699A0BE11E58D3B00F54CC8 /* PBXTextBookmark */ = {
@ -1232,22 +1578,12 @@
vrLen = 625;
vrLoc = 3609;
};
B6A0F71B11F22CD200AC3547 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A02E11E528BC00F54CC8 /* Screen.h */;
name = "Screen.h: 187";
rLen = 0;
rLoc = 3408;
rType = 0;
vrLen = 361;
vrLoc = 2857;
};
B6A0F72811F22CEE00AC3547 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A02E11E528BC00F54CC8 /* Screen.h */;
name = "Screen.h: 187";
rLen = 0;
rLoc = 3408;
rLoc = 3647;
rType = 0;
vrLen = 361;
vrLoc = 2857;
@ -1259,37 +1595,22 @@
rLoc = 149;
rType = 1;
};
B6A0F72A11F22CEE00AC3547 /* PBXTextBookmark */ = {
B6A0F72B11F22D6900AC3547 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A09011E572A300F54CC8 /* VT52.mm */;
name = "VT52.mm: 150";
rLen = 0;
rLoc = 3524;
rType = 0;
vrLen = 633;
vrLen = 696;
vrLoc = 3303;
};
B6C0EA2E11F22CA400040D2D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B6C0EA2F11F22CA400040D2D /* ttydefaults.h */;
name = "ttydefaults.h: 84";
rLen = 0;
rLoc = 4001;
rType = 0;
vrLen = 641;
vrLoc = 3609;
};
B6C0EA2F11F22CA400040D2D /* ttydefaults.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = ttydefaults.h;
path = /Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/ttydefaults.h;
sourceTree = "<absolute>";
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {653, 1742}}";
sepNavSelRange = "{4001, 0}";
sepNavVisRange = "{3609, 625}";
};
};
B6E6A7BD11EAA92100A24C0C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
@ -1301,7 +1622,7 @@
vrLen = 767;
vrLoc = 278;
};
B6E6A7DE11EAAB3A00A24C0C /* Screen.cpp:364 */ = {
B6E6A7DE11EAAB3A00A24C0C /* Screen.cpp:449 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -1313,13 +1634,13 @@
functionName = "Screen::setSize(unsigned width, unsigned height)";
hitCount = 0;
ignoreCount = 0;
lineNumber = 364;
lineNumber = 449;
location = 2Term;
modificationTime = 301083852.549602;
modificationTime = 301368822.964905;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6E6A7F711EAAEC100A24C0C /* EmulatorView.mm:482 */ = {
B6E6A7F711EAAEC100A24C0C /* EmulatorView.mm:484 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -1331,23 +1652,13 @@
functionName = "ViewScreen::setSize(unsigned width, unsigned height, bool resizeView)";
hitCount = 0;
ignoreCount = 0;
lineNumber = 482;
lineNumber = 484;
location = 2Term;
modificationTime = 301083852.549757;
modificationTime = 301368822.973521;
originalNumberOfMultipleMatches = 1;
state = 2;
};
B6E6A80511EAB12B00A24C0C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = B699A02E11E528BC00F54CC8 /* Screen.h */;
name = "Screen.h: 177";
rLen = 0;
rLoc = 3408;
rType = 0;
vrLen = 423;
vrLoc = 2867;
};
B6E6A80A11EAB13000A24C0C /* EmulatorView.mm:464 */ = {
B6E6A80A11EAB13000A24C0C /* EmulatorView.mm:466 */ = {
isa = PBXFileBreakpoint;
actions = (
);
@ -1358,9 +1669,9 @@
fileReference = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */;
hitCount = 0;
ignoreCount = 0;
lineNumber = 464;
lineNumber = 466;
location = 2Term;
modificationTime = 301083852.549918;
modificationTime = 301368822.973945;
originalNumberOfMultipleMatches = 1;
state = 2;
};

View File

@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>ActivePerspectiveName</key>
<string>Project</string>
<string>Debug</string>
<key>AllowedModules</key>
<array>
<dict>
@ -231,8 +231,6 @@
<key>Layout</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@ -309,8 +307,6 @@
<string>MainColumn</string>
<real>324</real>
</array>
<key>RubberWindowFrame</key>
<string>31 145 1060 902 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -338,7 +334,7 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>B6A0F72A11F22CEE00AC3547</string>
<string>B6358D1711F6863100437AA2</string>
<key>history</key>
<array>
<string>B676058811DAE21100D6B66C</string>
@ -374,8 +370,8 @@
<string>B609786811EEB3DC00623E03</string>
<string>B609786911EEB3DC00623E03</string>
<string>B6A0F71A11F22CD200AC3547</string>
<string>B6A0F72811F22CEE00AC3547</string>
<string>B6A0F72911F22CEE00AC3547</string>
<string>B6358CC611F67B8200437AA2</string>
<string>B6358CF511F683CA00437AA2</string>
</array>
</dict>
<key>SplitCount</key>
@ -389,18 +385,16 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {714, 344}}</string>
<key>RubberWindowFrame</key>
<string>31 145 1060 902 0 0 1920 1178 </string>
<string>{{0, 0}, {714, 331}}</string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>344pt</string>
<string>331pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>512pt</string>
<string>525pt</string>
<key>Tabs</key>
<array>
<dict>
@ -414,9 +408,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {714, 485}}</string>
<key>RubberWindowFrame</key>
<string>31 145 1060 902 0 0 1920 1178 </string>
<string>{{10, 27}, {714, 498}}</string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -491,7 +483,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {714, 461}}</string>
<string>{{10, 27}, {714, 498}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -519,11 +511,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>B6A0F71C11F22CD200AC3547</string>
<string>B6358CA811F667E200437AA2</string>
<string>1CA23ED40692098700951B8B</string>
<string>B6A0F71D11F22CD200AC3547</string>
<string>B6358CA911F667E200437AA2</string>
<string>B676054211DADB9000D6B66C</string>
<string>B6A0F71E11F22CD200AC3547</string>
<string>B6358CAA11F667E200437AA2</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -575,6 +567,8 @@
<dict>
<key>Frame</key>
<string>{{0, 0}, {1060, 265}}</string>
<key>RubberWindowFrame</key>
<string>874 165 1060 902 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXDebugCLIModule</string>
@ -649,7 +643,11 @@
</array>
<key>Frame</key>
<string>{{517, 0}, {543, 289}}</string>
<key>RubberWindowFrame</key>
<string>874 165 1060 902 0 0 1920 1178 </string>
</dict>
<key>RubberWindowFrame</key>
<string>874 165 1060 902 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXDebugSessionModule</string>
@ -672,14 +670,14 @@
</array>
<key>TableOfContents</key>
<array>
<string>B6A0F71F11F22CD200AC3547</string>
<string>B6358CAB11F667E200437AA2</string>
<string>1CCC7628064C1048000F2A68</string>
<string>1CCC7629064C1048000F2A68</string>
<string>B6A0F72011F22CD200AC3547</string>
<string>B6A0F72111F22CD200AC3547</string>
<string>B6A0F72211F22CD200AC3547</string>
<string>B6A0F72311F22CD200AC3547</string>
<string>B6A0F72411F22CD200AC3547</string>
<string>B6358CAC11F667E200437AA2</string>
<string>B6358CAD11F667E200437AA2</string>
<string>B6358CAE11F667E200437AA2</string>
<string>B6358CAF11F667E200437AA2</string>
<string>B6358CB011F667E200437AA2</string>
</array>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
@ -713,13 +711,15 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>B6A0F72511F22CD200AC3547</string>
<string>B6A0F72611F22CD200AC3547</string>
<string>B6A0F72711F22CD200AC3547</string>
<string>B6358D1411F685F800437AA2</string>
<string>B6358CCA11F67B8200437AA2</string>
<string>B6358CCB11F67B8200437AA2</string>
<string>B6358CF411F683C800437AA2</string>
<string>B6358CCC11F67B8200437AA2</string>
<string>/Users/kelvin/Projects/2Term/2Term.xcodeproj</string>
</array>
<key>WindowString</key>
<string>31 145 1060 902 0 0 1920 1178 </string>
<string>874 165 1060 902 0 0 1920 1178 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View File

@ -15,6 +15,8 @@
#import "CharacterGenerator.h"
#import "VT52.h"
#import "VT100.h"
#include "OutputChannel.h"
@ -80,7 +82,7 @@
_cursorImg = [[_charGen imageForCharacter: '_'] retain];
_emulator = [VT52 new];
_emulator = [VT100 new];
}

View File

@ -164,6 +164,91 @@ int Screen::decrementY(bool clamp)
}
void Screen::erase(EraseRegion region)
{
CharInfoIterator ciIter;
ScreenIterator screenIter;
if (region == EraseAll)
{
ScreenIterator end = _screen.end();
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, _height - 1));
return;
}
// 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;
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));
region = EraseLineBeforeCursor;
}
if (region == EraseAfterCursor)
{
ScreenIterator end = _screen.end();
for (screenIter = _screen.begin() + _cursor.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(_width - 1, _height - 1));
region = EraseLineAfterCursor;
}
if (region == EraseLineAll)
{
int y = _cursor.y;
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));
return;
}
if (region == EraseLineBeforeCursor)
{
int y = _cursor.y;
std::fill(_screen[y].begin(), _screen[y].begin() + _cursor.x + 1, CharInfo(0,0));
_updates.push_back(iPoint(0, _cursor.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));
_updates.push_back(_cursor);
_updates.push_back(iPoint(_width - 1, _cursor.y));
}
}
void Screen::eraseLine()
{
// erases everything to the right of, and including, the cursor

View File

@ -40,7 +40,20 @@ public:
static const unsigned FlagSelected = 0x20;
enum EraseRegion {
EraseAll,
EraseBeforeCursor,
EraseAfterCursor,
EraseLineAll,
EraseLineBeforeCursor,
EraseLineAfterCursor
};
Screen(unsigned height = 24, unsigned width = 80);
virtual ~Screen();
@ -75,6 +88,9 @@ public:
CharInfo getc(int x, int y) const;
void erase(EraseRegion);
void eraseLine();
void eraseScreen();

View File

@ -65,7 +65,7 @@
if (pid == 0)
{
const char *environ[] = {
"TERM=vt52",
"TERM=vt100",
"LANG=C",
"TERM_PROGRAM=2Term",
NULL

View File

@ -21,6 +21,9 @@
unsigned _state;
BOOL _altKeyPad;
BOOL _keyMode;
BOOL _vt52Mode;
BOOL _graphics;
@ -34,4 +37,7 @@
}
-(void)tab: (Screen *)screen;
@end

280
VT100.mm
View File

@ -131,11 +131,11 @@ enum {
case '=':
// alt key pad
_keyMode = YES;
_altKeyPad = YES;
_state = StateText;
break;
case '>':
_keyMode = NO;
_altKeyPad = NO;
_state = StateText;
break;
@ -284,6 +284,66 @@ enum {
else screen->setCursor(0, 0);
_state = StateText;
break;
case 'J':
/*
* erase
* 0 J -> erase from cursor to end of screen
* 1 J -> erase from beginning of screen to cursor
* 2 J -> erase entire screen
*/
{
switch (_parms[0])
{
default:
screen->erase(Screen::EraseAfterCursor);
break;
case 1:
screen->erase(Screen::EraseBeforeCursor);
break;
case 2:
screen->erase(Screen::EraseAll);
break;
}
_state = StateText;
break;
}
case 'K':
/*
* erase
* 0 K -> erase from cursor to end of line
* 1 K -> erase from beginning of line to cursor
* 2 K -> erase entire line contaning the cursor.
*/
{
switch(_parms[0])
{
default:
screen->erase(Screen::EraseLineAfterCursor);
break;
case 1:
screen->erase(Screen::EraseLineBeforeCursor);
break;
case 2:
screen->erase(Screen::EraseLineAll);;
break;
}
_state = StateText;
break;
}
default:
NSLog(@"[%s %s]: unrecognized escape character: `ESC [ %c' (%02x)", object_getClassName(self), sel_getName(_cmd), c, (int)c);
_state = StateText;
break;
}
@ -327,52 +387,68 @@ enum {
_state = StateText;
break;
default:
NSLog(@"[%s %s]: unrecognized escape character: `ESC %c' (%02x)", object_getClassName(self), sel_getName(_cmd), c, (int)c);
_state = StateText;
break;
}
}
}
static void commonKey(unichar uc, unsigned flags, Screen * screen, OutputChannel *output)
{
switch (uc)
if (_state == StateText)
{
case NSDeleteCharacter:
output->write(0x7f);
break;
default:
if (uc <= 0x7f)
{
char c = uc;
if (flags & NSControlKeyMask)
c = CTRL(c);
output->write(c);
}
}
}
static void keyModeKey(unichar uc, unsigned flags, Screen * screen, OutputChannel *output)
{
if (flags & NSNumericPadKeyMask)
{
const char *str = NULL;
switch(uc)
switch (c)
{
case 0x00:
case 0x7f:
break;
case 0x1b:
_state = StateEsc;
break;
case CTRL('G'):
NSBeep();
break;
case 0x08:
screen->decrementX();
break;
case '\t':
[self tab: screen];
break;
case '\n':
screen->lineFeed();
break;
case '\r':
screen->setX(0);
break;
default:
if (c >= 0x20 && c < 0x7f)
{
screen->putc(c);
}
break;
}
}
}
static void vt100ModeKey(unichar uc, unsigned flags, Screen *screen, OutputChannel *output, BOOL altKeyPad)
{
const char *str = NULL;
if (altKeyPad && (flags & NSFunctionKeyMask))
{
switch (uc)
{
case '0':
str = ESC "Op";
break;
@ -419,54 +495,76 @@ static void keyModeKey(unichar uc, unsigned flags, Screen * screen, OutputChanne
str = ESC "?M";
break;
}
if (str)
{
output->write(str);
return;
}
}
}
switch(uc)
{
case NSUpArrowFunctionKey:
output->write(ESC "OA");
str = altKeyPad ? ESC "OA" : ESC "[A";
break;
case NSDownArrowFunctionKey:
output->write(ESC "OB");
str = altKeyPad ? ESC "OB" : ESC "[B";
break;
case NSRightArrowFunctionKey:
output->write(ESC "OC");
str = altKeyPad ? ESC "OC" : ESC "[C";
break;
case NSLeftArrowFunctionKey:
output->write(ESC "OD");
str = altKeyPad ? ESC "OD" : ESC "[D";
break;
// these are located at numlock/*-
case NSF1FunctionKey:
output->write(ESC "OP");
str = ESC "OP";
break;
case NSF2FunctionKey:
output->write(ESC "OQ");
str = ESC "OQ";
break;
case NSF3FunctionKey:
output->write(ESC "OR");
str = ESC "OR";
break;
case NSF4FunctionKey:
output->write(ESC "OS");
break;
str = ESC "OS";
break;
case NSDeleteCharacter:
uc = 0x7f;
// fallthrough.
default:
commonKey(uc, flags, screen, output);
if (uc <= 0x7f)
{
uint8_t c = uc;
if (flags & NSControlKeyMask)
{
c = CTRL(c);
}
output->write(c);
}
break;
}
if (str)
{
output->write(str);
}
}
static void vt52ModeKey(unichar uc, unsigned flags, Screen * screen, OutputChannel *output)
static void vt52ModeKey(unichar uc, unsigned flags, Screen * screen, OutputChannel *output, BOOL altKeyPad)
{
if (flags & NSNumericPadKeyMask)
const char *str = NULL;
if (altKeyPad && (flags & NSNumericPadKeyMask))
{
const char *str = NULL;
switch(uc)
{
case '0':
@ -525,35 +623,52 @@ static void vt52ModeKey(unichar uc, unsigned flags, Screen * screen, OutputChann
switch(uc)
{
case NSUpArrowFunctionKey:
output->write(ESC "A");
str = ESC "A";
break;
case NSDownArrowFunctionKey:
output->write(ESC "B");
str = ESC "B";
break;
case NSRightArrowFunctionKey:
output->write(ESC "C");
str = ESC "C";
break;
case NSLeftArrowFunctionKey:
output->write(ESC "D");
str = ESC "D";
break;
case NSF1FunctionKey:
output->write(ESC "P");
str = ESC "P";
break;
case NSF2FunctionKey:
output->write(ESC "Q");
str = ESC "Q";
break;
case NSF3FunctionKey:
output->write(ESC "R");
str = ESC "R";
break;
case NSF4FunctionKey:
output->write(ESC "S");
str = ESC "S";
break;
case NSDeleteCharacter:
uc = 0x7f;
// fallthrough..
default:
commonKey(uc, flags, screen, output);
if (uc <= 0x7f)
{
uint8_t c = uc;
if (flags & NSControlKeyMask)
{
c = CTRL(c);
}
output->write(c);
}
break;
}
if (str)
{
output->write(str);
}
}
@ -568,13 +683,36 @@ static void vt52ModeKey(unichar uc, unsigned flags, Screen * screen, OutputChann
unichar uc = [chars characterAtIndex: i];
if (_vt52Mode)
vt52ModeKey(uc, flags, screen, output);
else if (_keyMode)
keyModeKey(uc, flags, screen, output);
vt52ModeKey(uc, flags, screen, output, _altKeyPad);
else
commonKey(uc, flags, screen, output);
vt100ModeKey(uc, flags, screen, output, _altKeyPad);
}
}
-(void)tab: (Screen *)screen
{
/*
* TAB (011_8) causes the cursor to move right to the next TAB stop each time the TAB code is received.
* TAB stops are preset eight character spaces apart. TAB stop locations are at characters positions 1, 9,
* 17, 25, 33, 41, 49, 57, and 65. Once the cursor reaches character position 65, all TAB commands
* received thereafter will cause the cursor to move only one character position. Once the cursor reaches
* character position 72, receipt of the the TAB code has no effect.
*/
int x = screen->x();
if (x >= screen->width() - 8)
{
screen->tabTo(x + 1);
}
else
{
screen->tabTo((x + 8) & ~7);
}
}
@end