From 829183a0f3e58a01b33138be3a0937d2a4036c0d Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Fri, 9 Jul 2010 01:18:30 +0000 Subject: [PATCH] git-svn-id: svn://qnap.local/TwoTerm/trunk@1650 5590a31f-7b70-45f8-8c82-aa3a8e5f4507 --- 2Term.xcodeproj/kelvin.pbxuser | 884 ++++++++++++++++++++++++--- 2Term.xcodeproj/kelvin.perspectivev3 | 84 ++- 2Term.xcodeproj/project.pbxproj | 12 +- Benaphore.cpp | 48 ++ Benaphore.h | 39 ++ Emulator.h | 6 +- EmulatorView.h | 55 +- EmulatorView.mm | 126 +++- English.lproj/TermWindow.xib | 47 +- Lock.cpp | 26 + Lock.h | 31 + Screen.cpp | 5 + Screen.h | 49 +- TwoTermAppDelegate.m | 1 - VT05.mm | 11 + VT52.mm | 39 +- iGeometry.h | 2 +- 17 files changed, 1222 insertions(+), 243 deletions(-) create mode 100644 Benaphore.cpp create mode 100644 Benaphore.h create mode 100644 Lock.cpp create mode 100644 Lock.h diff --git a/2Term.xcodeproj/kelvin.pbxuser b/2Term.xcodeproj/kelvin.pbxuser index 7b9b55a..c926c74 100644 --- a/2Term.xcodeproj/kelvin.pbxuser +++ b/2Term.xcodeproj/kelvin.pbxuser @@ -9,9 +9,9 @@ }; 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {653, 507}}"; - sepNavSelRange = "{778, 0}"; - sepNavVisRange = "{0, 778}"; + sepNavIntBoundsRect = "{{0, 0}, {999, 494}}"; + sepNavSelRange = "{759, 0}"; + sepNavVisRange = "{272, 495}"; }; }; 256AC3F00F4B6AF500CF3369 /* TwoTerm_Prefix.pch */ = { @@ -29,18 +29,23 @@ 8D1107260486CEB800E47090 /* 2Term */, ); breakpoints = ( - B676066111DEBFB000D6B66C /* TwoTermAppDelegate.m:35 */, + B676066111DEBFB000D6B66C /* TwoTermAppDelegate.m:34 */, B676066711DEC06900D6B66C /* TermWindowController.m:31 */, B676069511DEC97D00D6B66C /* TermWindowController.m:97 */, B67606B011DECD4E00D6B66C /* TermWindowController.m:97 */, B676070811DF8F4100D6B66C /* TermWindowController.m:97 */, - B65FA27911E29E8D00EB447E /* EmulatorView.mm:64 */, + B65FA27911E29E8D00EB447E /* EmulatorView.mm:61 */, B649E13D11E2BC7A0061921F /* VT52View.mm:460 */, B649E15211E2BF130061921F /* VT52View.mm:107 */, B649E17111E2C3C50061921F /* VT52View.mm:598 */, B649E17311E2C3C80061921F /* VT52View.mm:607 */, B649E18B11E2CC4A0061921F /* VT52View.mm:170 */, B649E19511E2CC800061921F /* VT52View.mm:113 */, + B669799C11E6A7FA002ED475 /* VT52.mm:184 */, + B669799E11E6A7FB002ED475 /* VT52.mm:183 */, + B66979AB11E6A8B4002ED475 /* VT52.mm:278 */, + B66979AE11E6A8C5002ED475 /* VT52.mm:272 */, + B66979B111E6A8D0002ED475 /* VT52.mm:240 */, ); codeSenseManager = B676054911DADB9100D6B66C /* Code sense */; executables = ( @@ -115,38 +120,91 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 300230821; - PBXWorkspaceStateSaveDate = 300230821; + PBXPerProjectTemplateStateSaveDate = 300321673; + PBXWorkspaceStateSaveDate = 300321673; }; perUserProjectItems = { - B649E0B511E2A88D0061921F /* PBXTextBookmark */ = B649E0B511E2A88D0061921F /* PBXTextBookmark */; - B649E1B211E2CDDE0061921F /* PBXTextBookmark */ = B649E1B211E2CDDE0061921F /* PBXTextBookmark */; - B65FA28111E29EDE00EB447E /* PBXTextBookmark */ = B65FA28111E29EDE00EB447E /* PBXTextBookmark */; - B65FA2AD11E29F9300EB447E /* PBXTextBookmark */ = B65FA2AD11E29F9300EB447E /* PBXTextBookmark */; - B65FA2B411E29F9A00EB447E /* PBXTextBookmark */ = B65FA2B411E29F9A00EB447E /* PBXTextBookmark */; - B65FA2FE11E2A5D200EB447E /* PBXTextBookmark */ = B65FA2FE11E2A5D200EB447E /* PBXTextBookmark */; - B676058811DAE21100D6B66C /* PBXTextBookmark */ = B676058811DAE21100D6B66C /* PBXTextBookmark */; - B676058911DAE21100D6B66C /* PBXTextBookmark */ = B676058911DAE21100D6B66C /* PBXTextBookmark */; - B676058B11DAE21100D6B66C /* PlistBookmark */ = B676058B11DAE21100D6B66C /* PlistBookmark */; - B676058C11DAE21100D6B66C /* PBXTextBookmark */ = B676058C11DAE21100D6B66C /* PBXTextBookmark */; - B676060711DD4FA600D6B66C /* PBXTextBookmark */ = B676060711DD4FA600D6B66C /* PBXTextBookmark */; - B676062F11DE96AE00D6B66C /* PBXTextBookmark */ = B676062F11DE96AE00D6B66C /* PBXTextBookmark */; - B676064811DEB80600D6B66C /* PBXTextBookmark */ = B676064811DEB80600D6B66C /* PBXTextBookmark */; - B67606C811DED91C00D6B66C /* PBXTextBookmark */ = B67606C811DED91C00D6B66C /* PBXTextBookmark */; - B699A0BE11E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0BE11E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0BF11E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0BF11E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0C011E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C011E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0C111E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C111E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0C211E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C211E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0C311E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C311E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0C411E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C411E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0C511E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C511E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0C611E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C611E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0C711E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C711E58D3B00F54CC8 /* PBXTextBookmark */; - B699A0C811E58D3B00F54CC8 /* PBXTextBookmark */ = B699A0C811E58D3B00F54CC8 /* PBXTextBookmark */; - B6EBE2CA11E0FF3E00EA0458 /* PBXTextBookmark */ = B6EBE2CA11E0FF3E00EA0458 /* PBXTextBookmark */; - B6F444CD11E41C7200C3A836 /* PBXTextBookmark */ = B6F444CD11E41C7200C3A836 /* PBXTextBookmark */; - B6F444CF11E41C7200C3A836 /* PBXTextBookmark */ = B6F444CF11E41C7200C3A836 /* PBXTextBookmark */; + B649E0B511E2A88D0061921F = B649E0B511E2A88D0061921F /* PBXTextBookmark */; + B649E1B211E2CDDE0061921F = B649E1B211E2CDDE0061921F /* PBXTextBookmark */; + B65FA28111E29EDE00EB447E = B65FA28111E29EDE00EB447E /* PBXTextBookmark */; + B65FA2AD11E29F9300EB447E = B65FA2AD11E29F9300EB447E /* PBXTextBookmark */; + B65FA2B411E29F9A00EB447E = B65FA2B411E29F9A00EB447E /* PBXTextBookmark */; + B65FA2FE11E2A5D200EB447E = B65FA2FE11E2A5D200EB447E /* PBXTextBookmark */; + B669791111E68B9C002ED475 /* PBXTextBookmark */ = B669791111E68B9C002ED475 /* PBXTextBookmark */; + B669791211E68B9C002ED475 /* PBXTextBookmark */ = B669791211E68B9C002ED475 /* PBXTextBookmark */; + B669793711E697E9002ED475 /* PBXTextBookmark */ = B669793711E697E9002ED475 /* PBXTextBookmark */; + B669793811E697E9002ED475 /* PBXTextBookmark */ = B669793811E697E9002ED475 /* PBXTextBookmark */; + B669793911E697E9002ED475 /* PBXTextBookmark */ = B669793911E697E9002ED475 /* PBXTextBookmark */; + B669793A11E697E9002ED475 /* XCBuildMessageTextBookmark */ = B669793A11E697E9002ED475 /* XCBuildMessageTextBookmark */; + B669793B11E697E9002ED475 /* PBXTextBookmark */ = B669793B11E697E9002ED475 /* PBXTextBookmark */; + B669794D11E69B3A002ED475 /* PBXTextBookmark */ = B669794D11E69B3A002ED475 /* PBXTextBookmark */; + B669794E11E69B3A002ED475 /* PBXTextBookmark */ = B669794E11E69B3A002ED475 /* PBXTextBookmark */; + B669794F11E69B3A002ED475 /* PBXTextBookmark */ = B669794F11E69B3A002ED475 /* PBXTextBookmark */; + B669796011E6A606002ED475 /* PBXTextBookmark */ = B669796011E6A606002ED475 /* PBXTextBookmark */; + B669796111E6A606002ED475 /* PBXTextBookmark */ = B669796111E6A606002ED475 /* PBXTextBookmark */; + B669796211E6A606002ED475 /* PBXTextBookmark */ = B669796211E6A606002ED475 /* PBXTextBookmark */; + B669796311E6A606002ED475 /* PBXTextBookmark */ = B669796311E6A606002ED475 /* PBXTextBookmark */; + B669796411E6A606002ED475 /* XCBuildMessageTextBookmark */ = B669796411E6A606002ED475 /* XCBuildMessageTextBookmark */; + B669796511E6A606002ED475 /* PBXTextBookmark */ = B669796511E6A606002ED475 /* PBXTextBookmark */; + B669796A11E6A612002ED475 /* PBXTextBookmark */ = B669796A11E6A612002ED475 /* PBXTextBookmark */; + B669796B11E6A62D002ED475 /* PBXTextBookmark */ = B669796B11E6A62D002ED475 /* PBXTextBookmark */; + B669796D11E6A633002ED475 /* PBXTextBookmark */ = B669796D11E6A633002ED475 /* PBXTextBookmark */; + B669797011E6A667002ED475 /* PBXTextBookmark */ = B669797011E6A667002ED475 /* PBXTextBookmark */; + B669797111E6A670002ED475 /* PBXTextBookmark */ = B669797111E6A670002ED475 /* PBXTextBookmark */; + B669797311E6A684002ED475 /* PBXTextBookmark */ = B669797311E6A684002ED475 /* PBXTextBookmark */; + B669797711E6A6CE002ED475 /* PBXTextBookmark */ = B669797711E6A6CE002ED475 /* PBXTextBookmark */; + B669797811E6A6CE002ED475 /* PBXTextBookmark */ = B669797811E6A6CE002ED475 /* PBXTextBookmark */; + B669797911E6A6CE002ED475 /* PBXTextBookmark */ = B669797911E6A6CE002ED475 /* PBXTextBookmark */; + B669797C11E6A6D4002ED475 /* PBXTextBookmark */ = B669797C11E6A6D4002ED475 /* PBXTextBookmark */; + B669797D11E6A6D7002ED475 /* PBXTextBookmark */ = B669797D11E6A6D7002ED475 /* PBXTextBookmark */; + B669798011E6A6F9002ED475 /* PBXTextBookmark */ = B669798011E6A6F9002ED475 /* PBXTextBookmark */; + B669798111E6A6F9002ED475 /* PBXTextBookmark */ = B669798111E6A6F9002ED475 /* PBXTextBookmark */; + B669798211E6A70E002ED475 /* PBXTextBookmark */ = B669798211E6A70E002ED475 /* PBXTextBookmark */; + B669799411E6A7DF002ED475 /* PBXTextBookmark */ = B669799411E6A7DF002ED475 /* PBXTextBookmark */; + B669799511E6A7DF002ED475 /* PBXTextBookmark */ = B669799511E6A7DF002ED475 /* PBXTextBookmark */; + B669799611E6A7DF002ED475 /* PBXTextBookmark */ = B669799611E6A7DF002ED475 /* PBXTextBookmark */; + B669799711E6A7E1002ED475 /* PBXTextBookmark */ = B669799711E6A7E1002ED475 /* PBXTextBookmark */; + B669799911E6A7EF002ED475 /* PBXTextBookmark */ = B669799911E6A7EF002ED475 /* PBXTextBookmark */; + B669799A11E6A7EF002ED475 /* PBXTextBookmark */ = B669799A11E6A7EF002ED475 /* PBXTextBookmark */; + B66979A211E6A805002ED475 /* PBXTextBookmark */ = B66979A211E6A805002ED475 /* PBXTextBookmark */; + B66979A511E6A80A002ED475 /* PBXTextBookmark */ = B66979A511E6A80A002ED475 /* PBXTextBookmark */; + B66979A811E6A846002ED475 /* PBXTextBookmark */ = B66979A811E6A846002ED475 /* PBXTextBookmark */; + B66979AA11E6A856002ED475 /* PBXTextBookmark */ = B66979AA11E6A856002ED475 /* PBXTextBookmark */; + B66979AD11E6A8B5002ED475 /* PBXTextBookmark */ = B66979AD11E6A8B5002ED475 /* PBXTextBookmark */; + B66979B011E6A8C5002ED475 /* PBXTextBookmark */ = B66979B011E6A8C5002ED475 /* PBXTextBookmark */; + B66979B311E6A8D0002ED475 /* PBXTextBookmark */ = B66979B311E6A8D0002ED475 /* PBXTextBookmark */; + B66979B611E6A924002ED475 /* PBXTextBookmark */ = B66979B611E6A924002ED475 /* PBXTextBookmark */; + B66979B811E6A936002ED475 /* PBXTextBookmark */ = B66979B811E6A936002ED475 /* PBXTextBookmark */; + B66979B911E6ACB4002ED475 /* PBXTextBookmark */ = B66979B911E6ACB4002ED475 /* PBXTextBookmark */; + B66979BA11E6ACB4002ED475 /* PBXTextBookmark */ = B66979BA11E6ACB4002ED475 /* PBXTextBookmark */; + B66979BB11E6ACB4002ED475 /* PBXTextBookmark */ = B66979BB11E6ACB4002ED475 /* PBXTextBookmark */; + B66979BC11E6ACB4002ED475 /* PBXTextBookmark */ = B66979BC11E6ACB4002ED475 /* PBXTextBookmark */; + B66979BD11E6ACB9002ED475 /* PBXTextBookmark */ = B66979BD11E6ACB9002ED475 /* PBXTextBookmark */; + B66979BE11E6ACB9002ED475 /* PBXTextBookmark */ = B66979BE11E6ACB9002ED475 /* PBXTextBookmark */; + B66979C111E6B071002ED475 /* PBXTextBookmark */ = B66979C111E6B071002ED475 /* PBXTextBookmark */; + B66979C511E6B0EB002ED475 /* PBXTextBookmark */ = B66979C511E6B0EB002ED475 /* PBXTextBookmark */; + B676058811DAE21100D6B66C = B676058811DAE21100D6B66C /* PBXTextBookmark */; + B676058911DAE21100D6B66C = B676058911DAE21100D6B66C /* PBXTextBookmark */; + B676058B11DAE21100D6B66C = B676058B11DAE21100D6B66C /* PlistBookmark */; + B676058C11DAE21100D6B66C = B676058C11DAE21100D6B66C /* PBXTextBookmark */; + B676060711DD4FA600D6B66C = B676060711DD4FA600D6B66C /* PBXTextBookmark */; + B676062F11DE96AE00D6B66C = B676062F11DE96AE00D6B66C /* PBXTextBookmark */; + B676064811DEB80600D6B66C = B676064811DEB80600D6B66C /* PBXTextBookmark */; + B67606C811DED91C00D6B66C = B67606C811DED91C00D6B66C /* PBXTextBookmark */; + B699A0BE11E58D3B00F54CC8 = B699A0BE11E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0BF11E58D3B00F54CC8 = B699A0BF11E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0C011E58D3B00F54CC8 = B699A0C011E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0C111E58D3B00F54CC8 = B699A0C111E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0C211E58D3B00F54CC8 = B699A0C211E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0C311E58D3B00F54CC8 = B699A0C311E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0C411E58D3B00F54CC8 = B699A0C411E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0C511E58D3B00F54CC8 = B699A0C511E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0C611E58D3B00F54CC8 = B699A0C611E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0C711E58D3B00F54CC8 = B699A0C711E58D3B00F54CC8 /* PBXTextBookmark */; + B699A0C811E58D3B00F54CC8 = B699A0C811E58D3B00F54CC8 /* PBXTextBookmark */; + B6EBE2CA11E0FF3E00EA0458 = B6EBE2CA11E0FF3E00EA0458 /* PBXTextBookmark */; + B6F444CD11E41C7200C3A836 = B6F444CD11E41C7200C3A836 /* PBXTextBookmark */; + B6F444CF11E41C7200C3A836 = B6F444CF11E41C7200C3A836 /* PBXTextBookmark */; }; sourceControlManager = B676054811DADB9100D6B66C /* Source Control */; userBuildSettings = { @@ -189,7 +247,7 @@ ignoreCount = 0; lineNumber = 460; location = 2Term; - modificationTime = 300162433.359401; + modificationTime = 300329250.299538; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -207,7 +265,7 @@ ignoreCount = 0; lineNumber = 107; location = 2Term; - modificationTime = 300162433.3597261; + modificationTime = 300329250.299795; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -225,7 +283,7 @@ ignoreCount = 0; lineNumber = 598; location = 2Term; - modificationTime = 300162433.360043; + modificationTime = 300329250.299994; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -243,7 +301,7 @@ ignoreCount = 0; lineNumber = 607; location = 2Term; - modificationTime = 300162433.360378; + modificationTime = 300329250.3002; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -261,7 +319,7 @@ ignoreCount = 0; lineNumber = 170; location = 2Term; - modificationTime = 300162433.360708; + modificationTime = 300329250.300499; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -279,7 +337,7 @@ ignoreCount = 0; lineNumber = 113; location = 2Term; - modificationTime = 300162433.36103; + modificationTime = 300329250.300704; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -288,12 +346,12 @@ fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; name = "EmulatorView.mm: 56"; rLen = 0; - rLoc = 869; + rLoc = 747; rType = 0; vrLen = 396; vrLoc = 597; }; - B65FA27911E29E8D00EB447E /* EmulatorView.mm:64 */ = { + B65FA27911E29E8D00EB447E /* EmulatorView.mm:61 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -305,9 +363,9 @@ functionName = "-drawRect:"; hitCount = 0; ignoreCount = 0; - lineNumber = 64; + lineNumber = 61; location = 2Term; - modificationTime = 300162433.359032; + modificationTime = 300329250.298297; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -326,7 +384,7 @@ fRef = B67606D811DF6DAB00D6B66C /* EmulatorView.h */; name = "EmulatorView.h: 45"; rLen = 0; - rLoc = 826; + rLoc = 385; rType = 0; vrLen = 578; vrLoc = 567; @@ -336,7 +394,7 @@ fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; name = "TwoTermAppDelegate.m: 36"; rLen = 0; - rLoc = 778; + rLoc = 759; rType = 0; vrLen = 778; vrLoc = 0; @@ -358,6 +416,635 @@ path = "/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/stl_vector.h"; sourceTree = ""; }; + B669791111E68B9C002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A09011E572A300F54CC8 /* VT52.mm */; + name = "VT52.mm: 395"; + rLen = 0; + rLoc = 12421; + rType = 0; + vrLen = 1051; + vrLoc = 6527; + }; + B669791211E68B9C002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A09011E572A300F54CC8 /* VT52.mm */; + name = "VT52.mm: 395"; + rLen = 0; + rLoc = 12421; + rType = 0; + vrLen = 1051; + vrLoc = 6527; + }; + B669793711E697E9002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A09011E572A300F54CC8 /* VT52.mm */; + name = "VT52.mm: 395"; + rLen = 0; + rLoc = 12421; + rType = 0; + vrLen = 1051; + vrLoc = 6527; + }; + B669793811E697E9002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D811DF6DAB00D6B66C /* EmulatorView.h */; + name = "EmulatorView.h: 29"; + rLen = 0; + rLoc = 385; + rType = 0; + vrLen = 495; + vrLoc = 190; + }; + B669793911E697E9002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A08B11E5720F00F54CC8 /* Emulator.h */; + name = "Emulator.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 497; + vrLoc = 0; + }; + B669793A11E697E9002ED475 /* XCBuildMessageTextBookmark */ = { + isa = PBXTextBookmark; + comments = "'_height' was not declared in this scope"; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + fallbackIsa = XCBuildMessageTextBookmark; + rLen = 0; + rLoc = 25; + rType = 1; + }; + B669793B11E697E9002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 25"; + rLen = 0; + rLoc = 373; + rType = 0; + vrLen = 456; + vrLoc = 142; + }; + B669794D11E69B3A002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 25"; + rLen = 0; + rLoc = 373; + rType = 0; + vrLen = 456; + vrLoc = 142; + }; + B669794E11E69B3A002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A02E11E528BC00F54CC8 /* Screen.h */; + name = "Screen.h: 22"; + rLen = 0; + rLoc = 304; + rType = 0; + vrLen = 457; + vrLoc = 132; + }; + B669794F11E69B3A002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A02E11E528BC00F54CC8 /* Screen.h */; + name = "Screen.h: 22"; + rLen = 0; + rLoc = 304; + rType = 0; + vrLen = 457; + vrLoc = 132; + }; + B669796011E6A606002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A02E11E528BC00F54CC8 /* Screen.h */; + name = "Screen.h: 22"; + rLen = 0; + rLoc = 304; + rType = 0; + vrLen = 457; + vrLoc = 132; + }; + B669796111E6A606002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A08B11E5720F00F54CC8 /* Emulator.h */; + name = "Emulator.h: 17"; + rLen = 0; + rLoc = 262; + rType = 0; + vrLen = 496; + vrLoc = 0; + }; + B669796211E6A606002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A08F11E572A300F54CC8 /* VT52.h */; + name = "VT52.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 390; + vrLoc = 0; + }; + B669796311E6A606002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A03211E528DE00F54CC8 /* iGeometry.h */; + name = "iGeometry.h: 55"; + rLen = 0; + rLoc = 983; + rType = 0; + vrLen = 577; + vrLoc = 406; + }; + B669796411E6A606002ED475 /* XCBuildMessageTextBookmark */ = { + isa = PBXTextBookmark; + comments = "Potential leak of an object allocated on line 33"; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + fallbackIsa = XCBuildMessageTextBookmark; + rLen = 1; + rLoc = 34; + rType = 1; + }; + B669796511E6A606002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + name = "TwoTermAppDelegate.m: 35"; + rLen = 0; + rLoc = 759; + rType = 0; + vrLen = 681; + vrLoc = 86; + }; + B669796A11E6A612002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + name = "TwoTermAppDelegate.m: 35"; + rLen = 0; + rLoc = 759; + rType = 0; + vrLen = 681; + vrLoc = 86; + }; + B669796B11E6A62D002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + name = "TwoTermAppDelegate.m: 35"; + rLen = 0; + rLoc = 759; + rType = 0; + vrLen = 495; + vrLoc = 272; + }; + B669796D11E6A633002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + name = "TwoTermAppDelegate.m: 35"; + rLen = 0; + rLoc = 759; + rType = 0; + vrLen = 681; + vrLoc = 86; + }; + B669797011E6A667002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + name = "TwoTermAppDelegate.m: 35"; + rLen = 0; + rLoc = 759; + rType = 0; + vrLen = 681; + vrLoc = 86; + }; + B669797111E6A670002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + name = "TwoTermAppDelegate.m: 35"; + rLen = 0; + rLoc = 759; + rType = 0; + vrLen = 681; + vrLoc = 86; + }; + B669797311E6A684002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + name = "TwoTermAppDelegate.m: 35"; + rLen = 0; + rLoc = 759; + rType = 0; + vrLen = 495; + vrLoc = 272; + }; + B669797711E6A6CE002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + name = "TwoTermAppDelegate.m: 35"; + rLen = 0; + rLoc = 759; + rType = 0; + vrLen = 681; + vrLoc = 86; + }; + B669797811E6A6CE002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 13"; + rLen = 0; + rLoc = 216; + rType = 0; + vrLen = 545; + vrLoc = 0; + }; + B669797911E6A6CE002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 13"; + rLen = 0; + rLoc = 216; + rType = 0; + vrLen = 539; + vrLoc = 0; + }; + B669797C11E6A6D4002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 13"; + rLen = 0; + rLoc = 216; + rType = 0; + vrLen = 539; + vrLoc = 0; + }; + B669797D11E6A6D7002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 13"; + rLen = 0; + rLoc = 216; + rType = 0; + vrLen = 539; + vrLoc = 0; + }; + B669798011E6A6F9002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */; + name = "TwoTermAppDelegate.m: 35"; + rLen = 0; + rLoc = 759; + rType = 0; + vrLen = 495; + vrLoc = 272; + }; + B669798111E6A6F9002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 13"; + rLen = 0; + rLoc = 216; + rType = 0; + vrLen = 300; + vrLoc = 0; + }; + B669798211E6A70E002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 13"; + rLen = 0; + rLoc = 216; + rType = 0; + vrLen = 545; + vrLoc = 0; + }; + B669798311E6A786002ED475 /* Lock.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1249, 978}}"; + sepNavSelRange = "{362, 0}"; + sepNavVisRange = "{0, 371}"; + }; + }; + B669798411E6A786002ED475 /* Lock.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {653, 399}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 320}"; + }; + }; + B669799411E6A7DF002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 13"; + rLen = 0; + rLoc = 216; + rType = 0; + vrLen = 545; + vrLoc = 0; + }; + B669799511E6A7DF002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 354; + vrLoc = 0; + }; + B669799611E6A7DF002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B669799711E6A7E1002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B669799911E6A7EF002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; + name = "EmulatorView.mm: 13"; + rLen = 0; + rLoc = 216; + rType = 0; + vrLen = 300; + vrLoc = 0; + }; + B669799A11E6A7EF002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 246; + vrLoc = 0; + }; + B669799C11E6A7FA002ED475 /* VT52.mm:184 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = B699A09011E572A300F54CC8 /* VT52.mm */; + functionName = "-processCharacter:screen:output:"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 184; + location = 2Term; + modificationTime = 300329250.300913; + originalNumberOfMultipleMatches = 1; + state = 2; + }; + B669799E11E6A7FB002ED475 /* VT52.mm:183 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = B699A09011E572A300F54CC8 /* VT52.mm */; + functionName = "-processCharacter:screen:output:"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 183; + location = 2Term; + modificationTime = 300329250.301294; + originalNumberOfMultipleMatches = 1; + state = 2; + }; + B66979A211E6A805002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979A511E6A80A002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979A811E6A846002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979AA11E6A856002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979AB11E6A8B4002ED475 /* VT52.mm:278 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = B699A09011E572A300F54CC8 /* VT52.mm */; + functionName = "-processCharacter:screen:output:"; + hitCount = 1; + ignoreCount = 0; + lineNumber = 278; + location = 2Term; + modificationTime = 300329266.094097; + originalNumberOfMultipleMatches = 1; + state = 2; + }; + B66979AD11E6A8B5002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979AE11E6A8C5002ED475 /* VT52.mm:272 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = B699A09011E572A300F54CC8 /* VT52.mm */; + functionName = "-processCharacter:screen:output:"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 272; + location = 2Term; + modificationTime = 300329267.528145; + originalNumberOfMultipleMatches = 1; + state = 2; + }; + B66979B011E6A8C5002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979B111E6A8D0002ED475 /* VT52.mm:240 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = B699A09011E572A300F54CC8 /* VT52.mm */; + functionName = "-processCharacter:screen:output:"; + hitCount = 1; + ignoreCount = 0; + lineNumber = 240; + location = 2Term; + modificationTime = 300329259.927299; + originalNumberOfMultipleMatches = 1; + state = 2; + }; + B66979B311E6A8D0002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979B611E6A924002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979B811E6A936002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979B911E6ACB4002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 246; + vrLoc = 0; + }; + B66979BA11E6ACB4002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A05C11E54D4500F54CC8 /* OutputChannel.cpp */; + name = "OutputChannel.cpp: 19"; + rLen = 0; + rLoc = 293; + rType = 0; + vrLen = 328; + vrLoc = 148; + }; + B66979BB11E6ACB4002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A09011E572A300F54CC8 /* VT52.mm */; + rLen = 0; + rLoc = 442; + rType = 1; + }; + B66979BC11E6ACB4002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A09011E572A300F54CC8 /* VT52.mm */; + name = "VT52.mm: 412"; + rLen = 0; + rLoc = 12936; + rType = 0; + vrLen = 701; + vrLoc = 6649; + }; + B66979BD11E6ACB9002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B669798411E6A786002ED475 /* Lock.cpp */; + name = "Lock.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 320; + vrLoc = 0; + }; + B66979BE11E6ACB9002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A09011E572A300F54CC8 /* VT52.mm */; + name = "VT52.mm: 412"; + rLen = 0; + rLoc = 12936; + rType = 0; + vrLen = 973; + vrLoc = 6535; + }; + B66979C111E6B071002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A09011E572A300F54CC8 /* VT52.mm */; + name = "VT52.mm: 445"; + rLen = 0; + rLoc = 12936; + rType = 0; + vrLen = 980; + vrLoc = 6548; + }; + B66979C511E6B0EB002ED475 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B699A09011E572A300F54CC8 /* VT52.mm */; + name = "VT52.mm: 445"; + rLen = 0; + rLoc = 12936; + rType = 0; + vrLen = 1001; + vrLoc = 6570; + }; B676053511DADB8100D6B66C /* 2Term */ = { isa = PBXExecutable; activeArgIndices = ( @@ -396,7 +1083,7 @@ isSCMEnabled = 0; scmConfiguration = { repositoryNamesForRoots = { - "" = ""; + "" = qnap; }; }; }; @@ -503,7 +1190,7 @@ vrLen = 374; vrLoc = 0; }; - B676066111DEBFB000D6B66C /* TwoTermAppDelegate.m:35 */ = { + B676066111DEBFB000D6B66C /* TwoTermAppDelegate.m:34 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -515,9 +1202,9 @@ functionName = "-applicationDidFinishLaunching:"; hitCount = 0; ignoreCount = 0; - lineNumber = 35; + lineNumber = 34; location = 2Term; - modificationTime = 300162433.356804; + modificationTime = 300329250.261573; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -535,7 +1222,7 @@ ignoreCount = 0; lineNumber = 31; location = 2Term; - modificationTime = 300162433.357529; + modificationTime = 300329250.261974; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -553,7 +1240,7 @@ ignoreCount = 0; lineNumber = 97; location = 2Term; - modificationTime = 300162433.357888; + modificationTime = 300329250.262254; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -571,7 +1258,7 @@ ignoreCount = 0; lineNumber = 97; location = 2Term; - modificationTime = 300162433.358252; + modificationTime = 300329250.262532; originalNumberOfMultipleMatches = 1; state = 2; }; @@ -593,31 +1280,43 @@ sourceTree = ""; }; B67606D211DEDB4100D6B66C /* VT52View.h */ = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = sourcecode.c.h; + name = VT52View.h; + path = /Users/kelvin/Projects/2Term/VT52View.h; + sourceTree = ""; uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1249, 978}}"; - sepNavSelRange = "{514, 0}"; - sepNavVisRange = "{0, 515}"; + sepNavIntBoundsRect = "{{0, 0}, {653, 481}}"; + sepNavSelRange = "{475, 0}"; + sepNavVisRange = "{3, 511}"; }; }; B67606D311DEDB4100D6B66C /* VT52View.mm */ = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = sourcecode.cpp.objcpp; + name = VT52View.mm; + path = /Users/kelvin/Projects/2Term/VT52View.mm; + sourceTree = ""; uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1249, 8684}}"; - sepNavSelRange = "{3570, 521}"; - sepNavVisRange = "{8318, 1919}"; + sepNavIntBoundsRect = "{{0, 0}, {1055, 9191}}"; + sepNavSelRange = "{1248, 0}"; + sepNavVisRange = "{896, 747}"; }; }; B67606D811DF6DAB00D6B66C /* EmulatorView.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1249, 1040}}"; - sepNavSelRange = "{826, 0}"; - sepNavVisRange = "{32, 1378}"; + sepNavIntBoundsRect = "{{0, 0}, {1249, 978}}"; + sepNavSelRange = "{375, 0}"; + sepNavVisRange = "{0, 900}"; }; }; B67606D911DF6DAB00D6B66C /* EmulatorView.mm */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {653, 2418}}"; - sepNavSelRange = "{869, 0}"; - sepNavVisRange = "{597, 396}"; + sepNavIntBoundsRect = "{{0, 0}, {999, 3341}}"; + sepNavSelRange = "{216, 0}"; + sepNavVisRange = "{0, 300}"; }; }; B676070811DF8F4100D6B66C /* TermWindowController.m:97 */ = { @@ -633,29 +1332,30 @@ hitCount = 0; ignoreCount = 0; lineNumber = 97; - modificationTime = 300162443.237363; + location = 2Term; + modificationTime = 300329250.290976; originalNumberOfMultipleMatches = 1; - state = 1; + state = 0; }; B699A02E11E528BC00F54CC8 /* Screen.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1249, 1664}}"; - sepNavSelRange = "{652, 155}"; - sepNavVisRange = "{0, 1466}"; + sepNavIntBoundsRect = "{{0, 0}, {1249, 2119}}"; + sepNavSelRange = "{1426, 0}"; + sepNavVisRange = "{838, 1421}"; }; }; B699A02F11E528BC00F54CC8 /* Screen.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1249, 3198}}"; - sepNavSelRange = "{1592, 0}"; - sepNavVisRange = "{277, 1316}"; + sepNavIntBoundsRect = "{{0, 0}, {1249, 3250}}"; + sepNavSelRange = "{474, 0}"; + sepNavVisRange = "{0, 1358}"; }; }; B699A03211E528DE00F54CC8 /* iGeometry.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1249, 978}}"; - sepNavSelRange = "{818, 0}"; - sepNavVisRange = "{0, 983}"; + sepNavIntBoundsRect = "{{0, 0}, {653, 715}}"; + sepNavSelRange = "{983, 0}"; + sepNavVisRange = "{406, 577}"; }; }; B699A05B11E54D4500F54CC8 /* OutputChannel.h */ = { @@ -667,30 +1367,30 @@ }; B699A05C11E54D4500F54CC8 /* OutputChannel.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1249, 978}}"; - sepNavSelRange = "{595, 0}"; - sepNavVisRange = "{0, 1348}"; + sepNavIntBoundsRect = "{{0, 0}, {999, 975}}"; + sepNavSelRange = "{293, 0}"; + sepNavVisRange = "{148, 328}"; }; }; B699A08B11E5720F00F54CC8 /* Emulator.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {663, 432}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{0, 497}"; + sepNavIntBoundsRect = "{{0, 0}, {663, 422}}"; + sepNavSelRange = "{262, 0}"; + sepNavVisRange = "{0, 496}"; }; }; B699A08F11E572A300F54CC8 /* VT52.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1249, 978}}"; - sepNavSelRange = "{383, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {1249, 955}}"; + sepNavSelRange = "{0, 0}"; sepNavVisRange = "{0, 390}"; }; }; B699A09011E572A300F54CC8 /* VT52.mm */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {653, 5967}}"; - sepNavSelRange = "{11766, 0}"; - sepNavVisRange = "{6465, 1113}"; + sepNavIntBoundsRect = "{{0, 0}, {653, 6123}}"; + sepNavSelRange = "{12936, 0}"; + sepNavVisRange = "{6570, 1001}"; }; }; B699A0BE11E58D3B00F54CC8 /* PBXTextBookmark */ = { @@ -708,7 +1408,7 @@ fRef = B699A02E11E528BC00F54CC8 /* Screen.h */; name = "Screen.h: 19"; rLen = 0; - rLoc = 284; + rLoc = 304; rType = 0; vrLen = 564; vrLoc = 16; @@ -718,7 +1418,7 @@ fRef = B699A02F11E528BC00F54CC8 /* Screen.cpp */; name = "Screen.cpp: 160"; rLen = 0; - rLoc = 3566; + rLoc = 3619; rType = 0; vrLen = 881; vrLoc = 2845; @@ -788,7 +1488,7 @@ fRef = B699A09011E572A300F54CC8 /* VT52.mm */; name = "VT52.mm: 392"; rLen = 0; - rLoc = 11766; + rLoc = 12421; rType = 0; vrLen = 1113; vrLoc = 6465; @@ -798,7 +1498,7 @@ fRef = B699A09011E572A300F54CC8 /* VT52.mm */; name = "VT52.mm: 395"; rLen = 0; - rLoc = 11766; + rLoc = 12421; rType = 0; vrLen = 1113; vrLoc = 6465; diff --git a/2Term.xcodeproj/kelvin.perspectivev3 b/2Term.xcodeproj/kelvin.perspectivev3 index c98c4de..86f7d4b 100644 --- a/2Term.xcodeproj/kelvin.perspectivev3 +++ b/2Term.xcodeproj/kelvin.perspectivev3 @@ -273,6 +273,7 @@ 29B97315FDCFA39411CA2CEA 29B97317FDCFA39411CA2CEA 1DDD58140DA1D0A300B32029 + B676065011DEBAE900D6B66C 29B97323FDCFA39411CA2CEA 1C37FBAC04509CD000000102 1C77FABC04509CD000000102 @@ -303,7 +304,7 @@ 324 RubberWindowFrame - 156 170 1060 902 0 0 1920 1178 + 522 243 1060 902 0 0 1920 1178 Module PBXSmartGroupTreeModule @@ -331,7 +332,7 @@ _historyCapacity 0 bookmark - B699A0C811E58D3B00F54CC8 + B66979C511E6B0EB002ED475 history B676058811DAE21100D6B66C @@ -342,25 +343,23 @@ B676062F11DE96AE00D6B66C B676064811DEB80600D6B66C B67606C811DED91C00D6B66C - B6EBE2CA11E0FF3E00EA0458 B65FA28111E29EDE00EB447E - B65FA2AD11E29F9300EB447E - B65FA2B411E29F9A00EB447E B65FA2FE11E2A5D200EB447E B649E0B511E2A88D0061921F - B649E1B211E2CDDE0061921F - B6F444CD11E41C7200C3A836 B6F444CF11E41C7200C3A836 B699A0BE11E58D3B00F54CC8 - B699A0BF11E58D3B00F54CC8 B699A0C011E58D3B00F54CC8 - B699A0C111E58D3B00F54CC8 B699A0C211E58D3B00F54CC8 B699A0C311E58D3B00F54CC8 B699A0C411E58D3B00F54CC8 - B699A0C511E58D3B00F54CC8 - B699A0C611E58D3B00F54CC8 - B699A0C711E58D3B00F54CC8 + B669796011E6A606002ED475 + B669796111E6A606002ED475 + B669796211E6A606002ED475 + B669796311E6A606002ED475 + B669797711E6A6CE002ED475 + B669799411E6A7DF002ED475 + B66979BD11E6ACB9002ED475 + B66979BC11E6ACB4002ED475 SplitCount @@ -374,18 +373,18 @@ GeometryConfiguration Frame - {{0, 0}, {714, 464}} + {{0, 0}, {714, 454}} RubberWindowFrame - 156 170 1060 902 0 0 1920 1178 + 522 243 1060 902 0 0 1920 1178 Module PBXNavigatorGroup Proportion - 464pt + 454pt Proportion - 392pt + 402pt Tabs @@ -399,7 +398,7 @@ GeometryConfiguration Frame - {{10, 27}, {714, 365}} + {{10, 27}, {714, 375}} Module XCDetailModule @@ -425,6 +424,27 @@ PBXCVSModuleFilterTypeKey 1032 + PBXCVSModuleTreeModuleColumnData + + PBXCVSModuleTreeModuleColumnWidthsKey + + 200 + 56.66162109375 + 63 + 60 + 63 + 139.556640625 + + PBXCVSModuleTreeModuleColumnsKey + + Name + Status + Update + Revision + Author + Date + + PBXProjectModuleGUID 1CA23EE10692099D00951B8B PBXProjectModuleLabel @@ -453,9 +473,9 @@ GeometryConfiguration Frame - {{10, 27}, {714, 365}} + {{10, 27}, {714, 375}} RubberWindowFrame - 156 170 1060 902 0 0 1920 1178 + 522 243 1060 902 0 0 1920 1178 Module PBXBuildResultsModule @@ -483,11 +503,11 @@ TableOfContents - B699A0C911E58D3B00F54CC8 + B669791311E68B9C002ED475 1CA23ED40692098700951B8B - B699A0CA11E58D3B00F54CC8 + B669791411E68B9C002ED475 B676054211DADB9000D6B66C - B699A0CB11E58D3B00F54CC8 + B669791511E68B9C002ED475 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -636,14 +656,14 @@ TableOfContents - B699A0CC11E58D3B00F54CC8 + B669791611E68B9C002ED475 1CCC7628064C1048000F2A68 1CCC7629064C1048000F2A68 - B699A0CD11E58D3B00F54CC8 - B699A0CE11E58D3B00F54CC8 - B699A0CF11E58D3B00F54CC8 - B699A0D011E58D3B00F54CC8 - B699A0D111E58D3B00F54CC8 + B669791711E68B9C002ED475 + B669791811E68B9C002ED475 + B669791911E68B9C002ED475 + B669791A11E68B9C002ED475 + B669791B11E68B9C002ED475 ToolbarConfigUserDefaultsMinorVersion 2 @@ -677,11 +697,15 @@ 5 WindowOrderList + B66979B711E6A924002ED475 + B669796711E6A606002ED475 + B669796811E6A606002ED475 + B66979C211E6B071002ED475 /Users/kelvin/Projects/2Term/2Term.xcodeproj - B699A0D211E58D3B00F54CC8 + B66979A411E6A805002ED475 WindowString - 156 170 1060 902 0 0 1920 1178 + 522 243 1060 902 0 0 1920 1178 WindowToolsV3 diff --git a/2Term.xcodeproj/project.pbxproj b/2Term.xcodeproj/project.pbxproj index 59d1ad7..511b805 100644 --- a/2Term.xcodeproj/project.pbxproj +++ b/2Term.xcodeproj/project.pbxproj @@ -12,9 +12,9 @@ 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + B669798511E6A786002ED475 /* Lock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B669798411E6A786002ED475 /* Lock.cpp */; }; B676063B11DEAD3500D6B66C /* TermWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B676063A11DEAD3500D6B66C /* TermWindowController.m */; }; B676065111DEBAE900D6B66C /* TermWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B676065011DEBAE900D6B66C /* TermWindow.xib */; }; - B67606D411DEDB4100D6B66C /* VT52View.mm in Sources */ = {isa = PBXBuildFile; fileRef = B67606D311DEDB4100D6B66C /* VT52View.mm */; }; B67606DA11DF6DAB00D6B66C /* EmulatorView.mm in Sources */ = {isa = PBXBuildFile; fileRef = B67606D911DF6DAB00D6B66C /* EmulatorView.mm */; }; B699A03011E528BC00F54CC8 /* Screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B699A02F11E528BC00F54CC8 /* Screen.cpp */; }; B699A05D11E54D4500F54CC8 /* OutputChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B699A05C11E54D4500F54CC8 /* OutputChannel.cpp */; }; @@ -36,11 +36,11 @@ 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 8D1107310486CEB800E47090 /* TwoTerm-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "TwoTerm-Info.plist"; sourceTree = ""; }; 8D1107320486CEB800E47090 /* 2Term.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = 2Term.app; sourceTree = BUILT_PRODUCTS_DIR; }; + B669798311E6A786002ED475 /* Lock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lock.h; sourceTree = ""; }; + B669798411E6A786002ED475 /* Lock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Lock.cpp; sourceTree = ""; }; B676063911DEAD3500D6B66C /* TermWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TermWindowController.h; sourceTree = ""; }; B676063A11DEAD3500D6B66C /* TermWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TermWindowController.m; sourceTree = ""; }; B676064D11DEBAE300D6B66C /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/TermWindow.xib; sourceTree = ""; }; - B67606D211DEDB4100D6B66C /* VT52View.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VT52View.h; sourceTree = ""; }; - B67606D311DEDB4100D6B66C /* VT52View.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = VT52View.mm; sourceTree = ""; }; B67606D811DF6DAB00D6B66C /* EmulatorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmulatorView.h; sourceTree = ""; }; B67606D911DF6DAB00D6B66C /* EmulatorView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EmulatorView.mm; sourceTree = ""; }; B699A02E11E528BC00F54CC8 /* Screen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Screen.h; sourceTree = ""; }; @@ -72,12 +72,12 @@ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( + B669798311E6A786002ED475 /* Lock.h */, + B669798411E6A786002ED475 /* Lock.cpp */, 256AC3D80F4B6AC300CF3369 /* TwoTermAppDelegate.h */, 256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.m */, B676063911DEAD3500D6B66C /* TermWindowController.h */, B676063A11DEAD3500D6B66C /* TermWindowController.m */, - B67606D211DEDB4100D6B66C /* VT52View.h */, - B67606D311DEDB4100D6B66C /* VT52View.mm */, B67606D811DF6DAB00D6B66C /* EmulatorView.h */, B67606D911DF6DAB00D6B66C /* EmulatorView.mm */, B6EBE2B311E0EA9100EA0458 /* CharacterGenerator.h */, @@ -222,13 +222,13 @@ 8D11072D0486CEB800E47090 /* main.m in Sources */, 256AC3DA0F4B6AC300CF3369 /* TwoTermAppDelegate.m in Sources */, B676063B11DEAD3500D6B66C /* TermWindowController.m in Sources */, - B67606D411DEDB4100D6B66C /* VT52View.mm in Sources */, B67606DA11DF6DAB00D6B66C /* EmulatorView.mm in Sources */, B6EBE2B511E0EA9100EA0458 /* CharacterGenerator.m in Sources */, B6F444C811E41AC000C3A836 /* VT05.mm in Sources */, B699A03011E528BC00F54CC8 /* Screen.cpp in Sources */, B699A05D11E54D4500F54CC8 /* OutputChannel.cpp in Sources */, B699A09111E572A300F54CC8 /* VT52.mm in Sources */, + B669798511E6A786002ED475 /* Lock.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Benaphore.cpp b/Benaphore.cpp new file mode 100644 index 0000000..d1c3328 --- /dev/null +++ b/Benaphore.cpp @@ -0,0 +1,48 @@ +/* + * Benaphore.cpp + * Blue Box + * + * Created by Kelvin Sherlock on 11/29/2009. + * Copyright 2009 Kelvin W Sherlock LLC. All rights reserved. + * + */ + +#include "Benaphore.h" + +#include +#include +#include +#include + +#include + +Benaphore::Benaphore() +{ + _atom = 0; + semaphore_create(mach_task_self(), (semaphore_t *)&_sem, SYNC_POLICY_FIFO, 0); +} + +Benaphore::~Benaphore() +{ + semaphore_destroy(mach_task_self(), (semaphore_t)_sem); + +} +void Benaphore::lock() +{ + // returns new value + if (OSAtomicIncrement32Barrier(&_atom) > 1) + { + fprintf(stderr, "waiting %u\n", _atom); + semaphore_wait((semaphore_t)_sem); + } +} + +void Benaphore::unlock() +{ + if (OSAtomicDecrement32Barrier(&_atom) > 0) + { + fprintf(stderr, "releasing %u\n", _atom); + semaphore_signal((semaphore_t)_sem); + } + +} \ No newline at end of file diff --git a/Benaphore.h b/Benaphore.h new file mode 100644 index 0000000..6f5f09c --- /dev/null +++ b/Benaphore.h @@ -0,0 +1,39 @@ +/* + * Benaphore.h + * Blue Box + * + * Created by Kelvin Sherlock on 11/29/2009. + * Copyright 2009 Kelvin W Sherlock LLC. All rights reserved. + * + */ + +#ifndef __BENAPHORE_H__ +#define __BENAPHORE_H__ + +#include +#include + + +class Benaphore { +public: + Benaphore(); + ~Benaphore(); + + void lock(); + void unlock(); +private: + int32_t _atom; + semaphore_t _sem; + +}; + +class Locker { +public: + Locker(Benaphore& lock) : _lock(lock) { _lock.lock(); } + ~Locker() { _lock.unlock(); } + +private: + Benaphore& _lock; +}; + +#endif \ No newline at end of file diff --git a/Emulator.h b/Emulator.h index 8025814..91441d6 100644 --- a/Emulator.h +++ b/Emulator.h @@ -14,7 +14,7 @@ class Screen; class OutputChannel; #else #define Screen void -#define OutputChannel void; +#define OutputChannel void #endif @protocol Emulator @@ -23,4 +23,8 @@ class OutputChannel; -(void)keyDown: (NSEvent *)event screen: (Screen *)screen output: (OutputChannel *)output; -(void)reset; +-(NSString *)name; + +-(const char *)termName; + @end diff --git a/EmulatorView.h b/EmulatorView.h index a901f4b..93c74f9 100644 --- a/EmulatorView.h +++ b/EmulatorView.h @@ -8,47 +8,27 @@ #import +#include "Emulator.h" + +#include "iGeometry.h" + #ifdef __cplusplus -#include + +#include "Screen.h" + + #endif -struct CursorPosition { -#ifdef __cplusplus - CursorPosition(int _x, int _y) throw() : x(_x), y(_y) {} - CursorPosition() throw() : x(0), y(0) {} - - bool operator == (const CursorPosition& rhs) throw() - { return rhs.x == x && rhs.y == y; } - - bool operator != (const CursorPosition& rhs) throw() - { return ! (*this == rhs); } - -#endif - int x; - int y; -}; - -struct CharInfo { - char c; - uint8_t flags; -}; - - @class CharacterGenerator; @interface EmulatorView : NSView { - int _fd; - - /* these should not be modified without locking */ - struct CursorPosition _cursor; - struct CharInfo _screen[24][80]; - /* end locking */ - + int _fd; + + NSObject *_emulator; NSThread *_readerThread; - NSLock *_lock; CharacterGenerator *_charGen; @@ -57,15 +37,16 @@ struct CharInfo { CGFloat _charHeight; CGFloat _charWidth; - - unsigned _height; - unsigned _width; - + + CGFloat _paddingTop; + CGFloat _paddingBottom; + CGFloat _paddingLeft; + CGFloat _paddingRight; #ifdef __cplusplus - //std::vector< std::vector > _screen; + Screen _screen; #endif } @@ -74,6 +55,6 @@ struct CharInfo { -(void)dataAvailable; @property (nonatomic, assign) int fd; -@property (nonatomic, assign) struct CursorPosition cursorPosition; +//@property (nonatomic, assign) iPoint cursor; @end diff --git a/EmulatorView.mm b/EmulatorView.mm index e9ac340..30f6e78 100644 --- a/EmulatorView.mm +++ b/EmulatorView.mm @@ -10,10 +10,13 @@ #import "CharacterGenerator.h" +#import "VT52.h" + +#include "OutputChannel.h" + @implementation EmulatorView @synthesize fd = _fd; -@synthesize cursorPosition = _cursor; -(void)awakeFromNib @@ -21,21 +24,14 @@ _charWidth = 7; _charHeight = 16; - _height = 24; - _width = 80; _foregroundColor = [[NSColor greenColor] retain]; _backgroundColor = [[NSColor blackColor] retain]; _charGen = [[CharacterGenerator generator] retain]; - _lock = [NSLock new]; - - std::memset(_screen, 0, sizeof(_screen)); - - - _cursor = CursorPosition(0, 0); + _emulator = [VT52 new]; } -(BOOL)isFlipped @@ -63,36 +59,49 @@ { NSRect bounds = [self bounds]; + NSRect screenRect = dirtyRect; unsigned x, y; - unsigned minX = floor(dirtyRect.origin.x / _charWidth); - unsigned maxX = ceil((dirtyRect.origin.x + dirtyRect.size.width) / _charWidth); + screenRect.origin.x -= _paddingLeft; + screenRect.origin.y -= _paddingTop; + + if (screenRect.origin.x < 0) + { + screenRect.size.width -= screenRect.origin.x; + screenRect.origin.x = 0; + } + if (screenRect.origin.y < 0) + { + screenRect.size.width -= screenRect.origin.y; + screenRect.origin.y = 0; + } + + unsigned minX = floor(screenRect.origin.x / _charWidth); + unsigned maxX = ceil((screenRect.origin.x + screenRect.size.width) / _charWidth); - unsigned minY = floor(dirtyRect.origin.y / _charHeight); - unsigned maxY = ceil((dirtyRect.origin.y + dirtyRect.size.height) / _charHeight); + unsigned minY = floor(screenRect.origin.y / _charHeight); + unsigned maxY = ceil((screenRect.origin.y + screenRect.size.height) / _charHeight); // x/y are 0-indexed here. - maxY = std::min(_height - 1, maxY); - maxX = std::min(_width - 1, maxX); + maxY = std::min(_screen.height() - 1, maxY); + maxX = std::min(_screen.width() - 1, maxX); [_backgroundColor setFill]; NSRectFill(dirtyRect); [_foregroundColor setFill]; + _screen.lock(); - - [_lock lock]; - for (x = minX; x <= maxX; ++x) { for (y = minY; y <= maxY; ++y) { NSImage *img; - CharInfo ci = _screen[y][x]; + CharInfo ci = _screen.getc(x, y); // todo -- check flags to determine fg/bg color, etc. @@ -107,7 +116,7 @@ */ if (img) { - [img drawInRect: NSMakeRect(x * _charWidth, y *_charHeight, _charWidth, _charHeight) + [img drawInRect: NSMakeRect(_paddingLeft + x * _charWidth, _paddingTop + y *_charHeight, _charWidth, _charHeight) fromRect: NSZeroRect operation: NSCompositeCopy fraction: 1.0 respectFlipped: YES @@ -116,19 +125,29 @@ } } - [_lock unlock]; - + _screen.unlock(); + } -(void)dealloc { + close(_fd); + [_readerThread release]; - [_lock release]; + + [_emulator release]; [super dealloc]; } +-(void)keyDown:(NSEvent *)theEvent +{ + OutputChannel channel(_fd); + + [_emulator keyDown: theEvent screen: &_screen output: &channel]; +} + -(void)startBackgroundReader { if (_readerThread) return; @@ -169,7 +188,66 @@ } --(void)dataAvailable { } +-(void)dataAvailable +{ + typedef void (*ProcessCharFX)(id, SEL, uint8_t, Screen *, OutputChannel *); + + ProcessCharFX fx; + SEL cmd; + OutputChannel channel(_fd); + + cmd = @selector(processCharacter: screen: output:); + fx = (ProcessCharFX)[_emulator methodForSelector: cmd]; + + for(;;) + { + NSAutoreleasePool *pool; + iRect updateRect; + CGRect rect; + uint8_t buffer[512]; + ssize_t size; + + size = read(_fd, buffer, sizeof(buffer)); + + if (size == 0) break; + if (size < 0) + { + if (errno == EINTR || errno == EAGAIN) continue; + + perror("[EmulatorView dataAvailable]"); + break; + } + + + pool = [NSAutoreleasePool new]; + _screen.beginUpdate(); + + + for (unsigned i = 0; i < size; ++i) + { + fx(_emulator,cmd, buffer[i], &_screen, &channel); + } + + updateRect = _screen.endUpdate(); + + rect.origin.x = updateRect.origin.x; + rect.origin.y = updateRect.origin.y; + rect.size.width = updateRect.size.width; + rect.size.height = updateRect.size.height; + + rect.origin.x *= _charWidth; + rect.origin.y *= _charHeight; + rect.size.width *= _charWidth; + rect.size.height *= _charHeight; + + rect.origin.x += _paddingLeft; + rect.origin.y += _paddingTop; + + [self setNeedsDisplayInRect: rect]; + + [pool release]; + } +} @end diff --git a/English.lproj/TermWindow.xib b/English.lproj/TermWindow.xib index c412bfe..c791d1a 100644 --- a/English.lproj/TermWindow.xib +++ b/English.lproj/TermWindow.xib @@ -12,7 +12,7 @@ YES - + YES @@ -52,22 +52,12 @@ 256 YES - + 268 - - YES - - - 268 - {{10, 10}, {560, 384}} - - VT52View - - - {{20, 20}, {580, 404}} + {{30, 30}, {560, 384}} - NSView + EmulatorView {620, 444} @@ -146,24 +136,14 @@ YES - + - - 7 - - - YES - - - - Back View - 5 - + Emulator View @@ -180,8 +160,6 @@ 1.editorWindowContentRectSynchronizationRect 2.IBPluginDependency 5.IBPluginDependency - 7.IBPluginDependency - 7.IBViewIntegration.shadowColor YES @@ -193,11 +171,6 @@ {{202, 428}, {480, 270}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - 3 - MAA - @@ -248,14 +221,6 @@ TermWindowController.h - - VT52View - EmulatorView - - IBProjectSource - VT52View.h - - YES diff --git a/Lock.cpp b/Lock.cpp new file mode 100644 index 0000000..f89f11f --- /dev/null +++ b/Lock.cpp @@ -0,0 +1,26 @@ +#include "Lock.h" + +Lock::Lock() +{ + pthread_mutex_init(&_mutex, NULL); +} + +Lock::~Lock() +{ + pthread_mutex_destroy(&_mutex); +} + +void Lock::lock() +{ + pthread_mutex_lock(&_mutex); +} + +void Lock::unlock() +{ + pthread_mutex_unlock(&_mutex); +} + +bool Lock::tryLock() +{ + return pthread_mutex_trylock(&_mutex) == 0; +} diff --git a/Lock.h b/Lock.h new file mode 100644 index 0000000..383b371 --- /dev/null +++ b/Lock.h @@ -0,0 +1,31 @@ +#ifndef __LOCK_H__ +#define __LOCK_H__ + +#include + + + +class Lock { +public: + Lock(); + ~Lock(); + + void lock(); + void unlock(); + + bool tryLock(); + +private: + pthread_mutex_t _mutex; +}; + +class Locker { +public: + Locker(Lock& lock) : _lock(lock) { _lock.lock(); } + ~Locker() { _lock.unlock(); } +private: + Lock &_lock; +}; + + +#endif diff --git a/Screen.cpp b/Screen.cpp index ab5217a..5a8b22c 100644 --- a/Screen.cpp +++ b/Screen.cpp @@ -32,6 +32,7 @@ Screen::Screen(unsigned height, unsigned width) void Screen::beginUpdate() { + _lock.lock(); _updates.clear(); } @@ -41,6 +42,8 @@ iRect Screen::endUpdate() int maxY = -1; int minX = _width; int minY = _height; + + for (UpdateIterator iter = _updates.begin(); iter != _updates.end(); ++iter) { @@ -51,6 +54,8 @@ iRect Screen::endUpdate() minY = std::min(minY, iter->y); } + _lock.unlock(); + return iRect(iPoint(minX, minY), iSize(maxX + 1 - minX, maxY + 1 - minY)); } diff --git a/Screen.h b/Screen.h index 8ed43b1..e1cd6b8 100644 --- a/Screen.h +++ b/Screen.h @@ -11,9 +11,12 @@ #define __SCREEN_H__ #include "iGeometry.h" +#include "Lock.h" #include + + typedef struct CharInfo { CharInfo() : c(0), flag(0) {} @@ -28,7 +31,7 @@ class Screen { public: - Screen(unsigned height, unsigned width); + Screen(unsigned height = 24, unsigned width = 80); int x() const; int y() const; @@ -55,6 +58,8 @@ public: void putc(uint8_t c, bool incrementX = true); + CharInfo getc(int x, int y) const; + void eraseLine(); void eraseScreen(); @@ -65,6 +70,10 @@ public: void beginUpdate(); iRect endUpdate(); + + void lock(); + void unlock(); + private: iPoint _cursor; @@ -73,6 +82,9 @@ private: uint8_t _flag; + + Lock _lock; + std::vector< std::vector< CharInfo > > _screen; std::vector _updates; @@ -87,47 +99,66 @@ private: }; -int Screen::x() const +inline int Screen::x() const { return _cursor.x; } -int Screen::y() const +inline int Screen::y() const { return _cursor.y; } -iPoint Screen::cursor() const +inline iPoint Screen::cursor() const { return _cursor; } -uint8_t Screen::flag() const +inline uint8_t Screen::flag() const { return _flag; } -unsigned Screen::height() const +inline unsigned Screen::height() const { return _height; } -unsigned Screen::width() const +inline unsigned Screen::width() const { return _width; } -void Screen::setCursor(iPoint point, bool clampX, bool clampY) +inline void Screen::setCursor(iPoint point, bool clampX, bool clampY) { setX(point.x, clampX); setY(point.y, clampY); } -void Screen::setCursor(int x, int y, bool clampX, bool clampY) +inline void Screen::setCursor(int x, int y, bool clampX, bool clampY) { setX(x, clampX); setY(y, clampY); } +inline void Screen::lock() +{ + _lock.lock(); +} + +inline void Screen::unlock() +{ + _lock.unlock(); +} + + +inline CharInfo Screen::getc(int x, int y) const +{ + if (x < 0 || y < 0) return CharInfo(0,0); + if (x >= _width || y >= _height) return CharInfo(0,0); + + return _screen[y][x]; +} + #endif diff --git a/TwoTermAppDelegate.m b/TwoTermAppDelegate.m index a09a802..687f366 100644 --- a/TwoTermAppDelegate.m +++ b/TwoTermAppDelegate.m @@ -8,7 +8,6 @@ #import "TwoTermAppDelegate.h" -#include "chars.h" #import "TermWindowController.h" diff --git a/VT05.mm b/VT05.mm index 4c37346..6656f4b 100644 --- a/VT05.mm +++ b/VT05.mm @@ -40,6 +40,17 @@ enum { }; + +-(NSString *)name +{ + return @"vt05"; +} + +-(const char *)termName +{ + return "vt05"; +} + -(void)reset { _state = StateText; diff --git a/VT52.mm b/VT52.mm index a5ae990..7d9492f 100644 --- a/VT52.mm +++ b/VT52.mm @@ -36,6 +36,39 @@ enum { @implementation VT52 +-(NSString *)name +{ + switch (_model) + { + case ModelVT50: + return @"VT50"; + case ModelVT50H: + return @"VT50H"; + case ModelVT55: + return @"VT55"; + case ModelVT52: + default: + return @"VT52"; + } +} + +-(const char *)termName +{ + switch (_model) + { + case ModelVT50: + return "vt50"; + case ModelVT50H: + return "vt50h"; + case ModelVT55: + return "vt55"; + case ModelVT52: + default: + return "vt52"; + } +} + + -(void)keyDown: (NSEvent *)event screen: (Screen *)screen output: (OutputChannel *)output { unsigned flags = [event modifierFlags]; @@ -179,6 +212,7 @@ enum { screen->decrementY(); _state = StateText; break; + case 'C': /* cursor right */ screen->incrementX(); @@ -205,6 +239,7 @@ enum { /* home */ screen->setCursor(0, 0); _state = StateText; + break; case 'Y': /* direct cursor addressing (not on the VT50) */ @@ -381,6 +416,7 @@ enum { case 0x09: [self tab: screen]; + break; case 0x0a: screen->lineFeed(); @@ -404,8 +440,9 @@ enum { if (c >= 0140 && (_model == ModelVT50 || _model == ModelVT50H)) c -= 040; - output->write(c); + screen->putc(c); } + break; } break; diff --git a/iGeometry.h b/iGeometry.h index c4d9a62..05966aa 100644 --- a/iGeometry.h +++ b/iGeometry.h @@ -51,4 +51,4 @@ typedef struct iRect { } iRect; -#endif; \ No newline at end of file +#endif