Compare commits

...

12 Commits
r6 ... master

Author SHA1 Message Date
Kelvin Sherlock
43cb3c9e4f esc [0J was dropping through to esc[1J 2022-11-25 14:49:22 -05:00
ksherlock
6cb2b91ac0
fix answer back string
testing with an actual vt100, answer back is a string defined in the setup B screen. It is unrelated to the device attributes.
2021-04-22 23:10:55 -04:00
Kelvin Sherlock
8a5f5a9e61 bump submodule 2021-03-27 23:55:54 -04:00
Kelvin Sherlock
b1340d2a56 mousetext flag was blocking inverse flag. 2021-03-27 23:53:52 -04:00
ksherlock
5a971ac08c
Update xcodebuild.yml 2020-11-14 20:42:15 -05:00
ksherlock
254dfd548e
Update xcodebuild.yml 2020-11-14 20:14:30 -05:00
ksherlock
bd6d13e51b
Create xcodebuild.yml 2020-11-14 17:38:47 -05:00
Kelvin Sherlock
54335e2e3b xcode upgrade, adjust signing settings. 2020-11-14 17:17:29 -05:00
Kelvin Sherlock
98dc438fa5 vt100: up/down/left/right were always limited to 1 position. fixed. 2019-01-08 23:28:49 -05:00
Kelvin Sherlock
ceb1349199 Project update. 2018-12-25 13:56:10 -05:00
Kelvin Sherlock
22266914ed Add Apple III console support. Not usable via termcap since cursor positioning uses 0x00 which is converted by terminfo to 0x80 which has a very different meaning (last column/row vs first column/row). 2018-12-25 13:55:36 -05:00
Kelvin Sherlock
542dddd335 OS X Mojave hardening. 2018-11-24 14:29:16 -05:00
14 changed files with 579 additions and 23 deletions

21
.github/workflows/xcodebuild.yml vendored Normal file
View File

@ -0,0 +1,21 @@
name: xcodebuild
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: brew
run: brew install ragel
- name: xcodebuild
run: xcodebuild -target TwoTerm | xcpretty

33
Emulators/Apple3.h Normal file
View File

@ -0,0 +1,33 @@
//
// Apple3.h
// 2Term
//
// Created by Kelvin Sherlock on 12/24/2018.
// Copyright 2018 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "Emulator.h"
#include "iGeometry.h"
#include "Screen.h"
struct iii_context : public context {
unsigned cursor_control = 0b1101;
unsigned fg_color = 0;
unsigned bg_color = 0;
unsigned mode = 2;
};
@interface Apple3 : NSObject <Emulator>
{
unsigned cs;
iii_context _context;
iii_context _saved_context;
Screen::CursorType _cursorType;
}
@end

466
Emulators/Apple3.mm.ragel Normal file
View File

@ -0,0 +1,466 @@
//
// Apple3.mm
// 2Term
//
// Created by Kelvin Sherlock on 12/24/2018.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
/*
* See Apple III Standard Device Drivers Manual (ch 3, The Console Driver)
* Also implemented via AppleWorks (which started life as III EZ Pieces)
*
* Apple III console can be 24 x 40 (BW), 24 x 40 (16 color), or 24 x 80 (BW).
*
*/
#import "Apple3.h"
#include <sys/ttydefaults.h>
#include "OutputChannel.h"
#include "Screen.h"
#include "algorithm.h"
#import "CharacterGenerator.h"
enum {
kAdvance = 1 << 0,
kLineFeed = 1 << 1,
kWrap = 1 << 2,
kScroll = 1 << 3,
};
%%{
machine console;
alphtype unsigned int;
action nop {}
action advance {
// advance cursor
if (_context.cursor_control & kAdvance) {
switch (_context.cursor_control & (kWrap | kScroll)) {
default:
if (cursor.x < window.maxX() - 1) ++cursor.x;
break;
case kWrap:
if (cursor.x < window.maxX() - 1) ++cursor.x;
else {
cursor.x = window.minX();
if (cursor.y < window.maxY() - 1) ++cursor.y;
}
break;
case kWrap | kScroll:
if (cursor.x < window.maxX() - 1) ++cursor.x;
else {
cursor.x = window.minX();
if (cursor.y < window.maxY() - 1) ++cursor.y;
else screen->scrollUp(window);
}
break;
}
}
}
action setx {
/* horizontal position */
int x = (unsigned)fc;
x += window.minX();
cursor.x = std::min(x, window.maxX() - 1);
}
action sety {
/* vertical position */
int y = (unsigned)fc;
y += window.minY();
cursor.y = std::min(y, window.maxY() - 1);
}
# arg1 = any ${ _scratch[0] = fc; };
# arg2 = any ${ _scratch[1] = fc; };
main := (
0x00 $nop
| 0x01 ${
/* save viewport and reset */
_saved_context = _context;
window = iRect(0, 0, 80, 24);
/* currently ignores mode */
}
| 0x02 ${
/* set viewport top */
iPoint tl = cursor;
iPoint br = window.bottomRight();
_context.window = iRect(tl, br);
}
| 0x03 ${
/* set viewport bottom */
iPoint tl = _context.window.topLeft();
iPoint br = _context.cursor.offset(1,1);
_context.window = iRect(tl, br);
}
| 0x04 ${
/* restore viewport */
_context = _saved_context;
}
| 0x05 ${
/* E - $05 - Turns cursor on (enables cursor display) */
screen->setCursorType(Screen::CursorTypeUnderscore);
}
| 0x06 ${
/* F - $06 - Turns cursor off (disables cursor display) */
screen->setCursorType(Screen::CursorTypeNone);
}
| 0x07 ${
/* Beep */
NSBeep();
}
| 0x08 ${
/* Moves cursor left */
if (cursor.x > window.minX()) --cursor.x;
else if (_context.cursor_control & kWrap) {
cursor.x = window.maxX() - 1;
if (cursor.y > window.minY()) --cursor.y;
else if (_context.cursor_control & kScroll) {
screen->scrollDown(window);
}
}
}
| 0x09 ${
/* move cursor right */
if (cursor.x < window.maxX()-1) ++cursor.x;
else if (_context.cursor_control & kWrap) {
cursor.x = window.minX();
if (cursor.y < window.maxY()-1) ++cursor.y;
else if (_context.cursor_control & kScroll) {
screen->scrollUp(window);
}
}
}
| 0x0a ${
/* move cursor down */
if (cursor.y < window.maxY() - 1) ++cursor.y;
else if (_context.cursor_control & kScroll) {
screen->scrollUp(window);
}
}
| 0x0b ${
/* move cursor up */
if (cursor.y > window.minY()) --cursor.y;
else if (_context.cursor_control & kScroll) {
screen->scrollDown(window);
}
}
| 0x0c ${
/* home */
cursor = iPoint(window.topLeft());
}
| 0x0d ${
/* carriage return */
/* also LF depending on cursor motion */
cursor.x = window.minX();
if (_context.cursor_control & kLineFeed) {
if (cursor.y < window.maxY() - 1) ++cursor.y;
else if (_context.cursor_control & kScroll) {
screen->scrollUp(window);
}
}
}
| 0x0e ${
/* turn screen off ... */
}
| 0x0f ${
/* turn screen on ... */
}
| 0x10 any ${
/* set text mode (40 vs 80, color vs bw) */
_context.mode = fc & 0x03;
}
| 0x11 ${
/* normal text */
_context.clearFlagBit(Screen::FlagInverse);
}
| 0x12 ${
/* invert text */
_context.setFlagBit(Screen::FlagInverse);
}
| 0x13 any ${
/* set foreground text color */
_context.fg_color = fc & 0x0f;
}
| 0x14 any ${
/* set background text color */
_context.bg_color = fc & 0x0f;
}
| 0x15 any ${
/* set cursor motion control */
_context.cursor_control = fc & 0x0f;
}
# sync
| 0x16 $nop
| 0x17 any ${
/* horizontal shift */
int count = (int8_t)fc;
/* if > 0, shift right */
if (count > 0) screen->scrollRight(window, count);
/* if < 0, shift left */
if (count < 0) screen->scrollLeft(window, -count);
}
# horizontal position
| 0x18 any $setx
# vertical position
| 0x19 any $sety
# horizontal + vertical position
| 0x1a any $setx any $sety
# esc - reserved
| 0x1b $nop
| 0x1c ${
/* HOME + clear viewport */
cursor = window.topLeft();
screen->eraseRect(window);
}
| 0x1d ${
/* clear to end of viewport */
iRect r(cursor, window.bottomRight());
r.size.height = 1;
screen->eraseRect(r);
r = iRect(window.minX(), cursor.y + 1, window.width(), window.maxY() - cursor.y - 1);
screen->eraseRect(r);
}
| 0x1e ${
/* move to left edge of viewport, clear line */
cursor.y = window.minY();
iRect r(cursor, window.bottomRight());
r.size.height = 1;
screen->eraseRect(r);
}
| 0x1f ${
/* clear to end of line */
iRect r(cursor, window.bottomRight());
r.size.height = 1;
screen->eraseRect(r);
}
| 0x20 .. 0x7f ${
screen->putc(fc, _context);
} $advance
| 0x80 .. 0x9f ${
/* display control char? */
}
| 0xa0 .. 0xff ${
screen->putc(fc & 0x7f, _context);
} $advance
)* $err{ fgoto main; };
write data;
}%%
@implementation Apple3
+(void)load {
[EmulatorManager registerClass: self];
}
- (NSString *)name {
return @"Apple III";
}
+ (NSString *)name {
return @"Apple III";
}
- (const char *)termName {
return "appleIII";
}
-(void)reset: (BOOL)hard
{
%%write init;
_context.flags = 0;
_cursorType = Screen::CursorTypeUnderscore;
_context.fg_color = 15; /* white */
_context.bg_color = 0; /* black */
_context.cursor_control = kScroll | kWrap | kAdvance;
if (hard) {
_context.window = iRect(0, 0, 80, 24);
_context.cursor = iPoint(0,0);
_context.mode = 2;
_saved_context = iii_context();
}
}
-(BOOL)resizable
{
return NO;
}
-(struct winsize)defaultSize
{
struct winsize ws = { 24, 80, 0, 0 };
return ws;
}
-(void)initTerm: (struct termios *)term
{
// Control-U is used by the up-arrow key.
term->c_cc[VKILL] = CTRL('X');
// tab is right arrow, so expand to spaces.
term->c_oflag |= OXTABS;
}
-(id)init
{
if ((self = [super init]))
{
[self reset: YES];
}
return self;
}
-(void)processData:(uint8_t *)data length: (size_t)length screen:(Screen *)screen output:(OutputChannel *)output
{
const uint8_t *eof = nullptr;
const uint8_t *p = data;
const uint8_t *pe = data + length;
auto &cursor = _context.cursor;
auto &window = _context.window;
auto &cursor_control = _context.cursor_control;
%%write exec;
screen->setCursor(cursor);
}
-(void)keyDown:(NSEvent *)event screen:(Screen *)screen output:(OutputChannel *)output
{
NSEventModifierFlags flags = [event modifierFlags];
NSString *chars = [event charactersIgnoringModifiers];
NSUInteger length = [chars length];
for (unsigned i = 0; i < length; ++i)
{
unichar uc = [chars characterAtIndex: i];
switch (uc)
{
case NSEnterCharacter:
output->write(CTRL('M'));
break;
/*
case NSDeleteCharacter:
output->write(0x7f);
break;
*/
// the Apple II keyboard had a delete where the backspace key was.
// it functions as a backspace key.
case NSBackspaceCharacter:
output->write(0x7f);
break;
case NSLeftArrowFunctionKey:
output->write(CTRL('H'));
break;
case NSRightArrowFunctionKey:
output->write(CTRL('U'));
break;
case NSUpArrowFunctionKey:
output->write(CTRL('K'));
break;
case NSDownArrowFunctionKey:
output->write(CTRL('J'));
break;
default:
if (uc <= 0x7f)
{
char c = uc;
//NSLog(@"%@", event);
if (flags & NSAlphaShiftKeyMask)
{
c = flags & NSShiftKeyMask ? tolower(c) : toupper(c);
}
if (flags & NSControlKeyMask)
c = CTRL(c);
output->write(c);
}
break;
}
}
}
@end

View File

@ -34,7 +34,7 @@
}
action answerback {
output->write(ESC "[?1;0c");
/* no answerback string */
}
@ -84,7 +84,7 @@
#
action cursor_up {
/* cursor up */
unsigned count = _flags.DECANM ? std::min(1u, _args.front()) : 1;
unsigned count = _flags.DECANM ? std::max(1u, _args.front()) : 1;
if (cursor_in_region()) {
cursor.y = clamp(cursor.y - count, region_y.first, region_y.second);
@ -94,7 +94,7 @@
}
action cursor_down {
/* cursor down */
unsigned count = _flags.DECANM ? std::min(1u, _args.front()) : 1;
unsigned count = _flags.DECANM ? std::max(1u, _args.front()) : 1;
if (cursor_in_region()) {
cursor.y = clamp(cursor.y + count, region_y.first, region_y.second);
@ -105,13 +105,13 @@
action cursor_left {
/* cursor left */
unsigned count = _flags.DECANM ? std::min(1u, _args.front()) : 1;
unsigned count = _flags.DECANM ? std::max(1u, _args.front()) : 1;
cursor.x = clamp(cursor.x - count, window_x.first, window_x.second);
}
action cursor_right {
/* cursor right */
unsigned count = _flags.DECANM ? std::min(1u, _args.front()) : 1;
unsigned count = _flags.DECANM ? std::max(1u, _args.front()) : 1;
cursor.x = clamp(cursor.x + count, window_x.first, window_x.second);
}
@ -297,6 +297,7 @@
iRect tmp(0, cursor.y + 1, 80, 24 - cursor.y - 1);
screen->eraseRect(tmp);
break;
}
case 1: {
// 0 ... x

View File

@ -55,6 +55,7 @@
B69E32A920221C9E0086D7B1 /* ChildMonitor.mm in Sources */ = {isa = PBXBuildFile; fileRef = B69E32A820221C9E0086D7B1 /* ChildMonitor.mm */; };
B6ACA2AD1E614E38000E774B /* VT52.mm in Sources */ = {isa = PBXBuildFile; fileRef = B612F46312DD5DF1005D1B77 /* VT52.mm */; };
B6ACA2AF1E635CEC000E774B /* vt52-charset.png in Resources */ = {isa = PBXBuildFile; fileRef = B6ACA2AE1E635CEC000E774B /* vt52-charset.png */; };
B6C0909021D292E20067F7A4 /* Apple3.mm.ragel in Sources */ = {isa = PBXBuildFile; fileRef = B6C0908D21D1BBE70067F7A4 /* Apple3.mm.ragel */; };
B6C21CCE2033382B00671774 /* TabClose_Busy.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B6C21CC82033382A00671774 /* TabClose_Busy.tiff */; };
B6C21CCF2033382B00671774 /* TabClose_Busy_Pressed.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B6C21CC92033382A00671774 /* TabClose_Busy_Pressed.tiff */; };
B6C21CD02033382B00671774 /* TabClose.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B6C21CCA2033382A00671774 /* TabClose.tiff */; };
@ -77,6 +78,8 @@
isa = PBXBuildRule;
compilerSpec = "com.apple.build-tasks.copy-strings-file";
fileType = sourcecode.glsl;
inputFiles = (
);
isEditable = 1;
outputFiles = (
);
@ -87,6 +90,8 @@
compilerSpec = com.apple.compilers.proxy.script;
filePatterns = "*.mm.ragel";
fileType = pattern.proxy;
inputFiles = (
);
isEditable = 1;
outputFiles = (
"$(DERIVED_SOURCES_DIR)/$(INPUT_FILE_BASE)",
@ -108,10 +113,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
256AC3D80F4B6AC300CF3369 /* TwoTermAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TwoTermAppDelegate.h; sourceTree = "<group>"; };
256AC3D90F4B6AC300CF3369 /* TwoTermAppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TwoTermAppDelegate.mm; sourceTree = "<group>"; };
256AC3F00F4B6AF500CF3369 /* TwoTerm_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TwoTerm_Prefix.pch; sourceTree = "<group>"; };
@ -163,10 +166,8 @@
B61D0D68125B8E06001C713B /* Defaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Defaults.m; sourceTree = "<group>"; };
B61EF7C31481561E008C1891 /* titlebar-corner.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "titlebar-corner.png"; sourceTree = "<group>"; };
B61EF7C41481561E008C1891 /* titlebar-middle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "titlebar-middle.png"; sourceTree = "<group>"; };
B61EF7C814815AF8008C1891 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/NewTerminal.xib; sourceTree = "<group>"; };
B61EF7CA14815E07008C1891 /* TitleBarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TitleBarView.h; sourceTree = "<group>"; };
B61EF7CB14815E07008C1891 /* TitleBarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TitleBarView.m; sourceTree = "<group>"; };
B61EF7CE148163E7008C1891 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/TitleBarView.xib; sourceTree = "<group>"; };
B61EF7D41482FB6D008C1891 /* titlebar-center.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "titlebar-center.png"; sourceTree = "<group>"; };
B61EF7D51482FB6D008C1891 /* titlebar-left.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "titlebar-left.png"; sourceTree = "<group>"; };
B61EF7D61482FB6D008C1891 /* titlebar-right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "titlebar-right.png"; sourceTree = "<group>"; };
@ -176,20 +177,27 @@
B66412381480A070003BC8D3 /* EmulatorWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EmulatorWindow.m; sourceTree = "<group>"; };
B676063911DEAD3500D6B66C /* TermWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TermWindowController.h; sourceTree = "<group>"; };
B676063A11DEAD3500D6B66C /* TermWindowController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TermWindowController.mm; sourceTree = "<group>"; };
B676064D11DEBAE300D6B66C /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/TermWindow.xib; sourceTree = "<group>"; };
B67B3CE312B6FA040033AE07 /* a2-charset-40.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "a2-charset-40.png"; sourceTree = "<group>"; };
B67B3CE412B6FA040033AE07 /* a2-charset-80.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "a2-charset-80.png"; sourceTree = "<group>"; };
B6801BD812EB549300B22E9E /* vt100-charset.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "vt100-charset.png"; sourceTree = "<group>"; };
B683F70E2049E7B000470B99 /* VT50.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VT50.h; sourceTree = "<group>"; };
B683F70F2049E7B000470B99 /* VT50.mm.ragel */ = {isa = PBXFileReference; lastKnownFileType = text; path = VT50.mm.ragel; sourceTree = "<group>"; };
B683F711204AE32900470B99 /* VT05.mm.ragel */ = {isa = PBXFileReference; lastKnownFileType = text; path = VT05.mm.ragel; sourceTree = "<group>"; };
B6887810235CD76A00407374 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
B6887811235CD76A00407374 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/TermWindow.xib; sourceTree = "<group>"; };
B6887812235CD76A00407374 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/NewTerminal.xib; sourceTree = "<group>"; };
B6887813235CD76B00407374 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/TermConfig.xib; sourceTree = "<group>"; };
B6887814235CD76B00407374 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/TitleBarView.xib; sourceTree = "<group>"; };
B6887815235CD77600407374 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
B68A37D621A9D45A004CBDE4 /* TwoTerm.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = TwoTerm.entitlements; path = TwoTerm/TwoTerm.entitlements; sourceTree = "<group>"; };
B68E632812FF909C00EAFF5F /* ExampleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExampleView.h; sourceTree = "<group>"; };
B68E632912FF909C00EAFF5F /* ExampleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExampleView.m; sourceTree = "<group>"; };
B69D0FB9202799B10073CCB7 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/TermConfig.xib; sourceTree = "<group>"; };
B69E32A820221C9E0086D7B1 /* ChildMonitor.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ChildMonitor.mm; sourceTree = "<group>"; };
B69E32AA20221CCA0086D7B1 /* ChildMonitor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChildMonitor.h; sourceTree = "<group>"; };
B6ACA2AB1E5C8BEC000E774B /* GNOConsole.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GNOConsole.mm; sourceTree = "<group>"; };
B6ACA2AE1E635CEC000E774B /* vt52-charset.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "vt52-charset.png"; sourceTree = "<group>"; };
B6C0908D21D1BBE70067F7A4 /* Apple3.mm.ragel */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Apple3.mm.ragel; sourceTree = "<group>"; };
B6C0908F21D1D2070067F7A4 /* Apple3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Apple3.h; sourceTree = "<group>"; };
B6C173901D31D2B80024E360 /* GSOSConsole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSOSConsole.h; sourceTree = "<group>"; };
B6C173911D31D2B80024E360 /* GSOSConsole.mm.ragel */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = GSOSConsole.mm.ragel; sourceTree = "<group>"; };
B6C173941D35546A0024E360 /* algorithm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = algorithm.h; sourceTree = "<group>"; };
@ -279,6 +287,7 @@
29B97314FDCFA39411CA2CEA /* 2Term */ = {
isa = PBXGroup;
children = (
B68A37D621A9D45A004CBDE4 /* TwoTerm.entitlements */,
B612F46B12DD5E02005D1B77 /* Views */,
B612F45512DD5DF1005D1B77 /* Emulators */,
B612F44612DD5DAD005D1B77 /* cpp */,
@ -365,7 +374,9 @@
B612F45912DD5DF1005D1B77 /* EmulatorManager.mm */,
B612F45612DD5DF1005D1B77 /* Apple80.h */,
B612F45712DD5DF1005D1B77 /* Apple80.mm.ragel */,
B6C0908D21D1BBE70067F7A4 /* Apple3.mm.ragel */,
B612F45A12DD5DF1005D1B77 /* GNOConsole.h */,
B6C0908F21D1D2070067F7A4 /* Apple3.h */,
B612F45B12DD5DF1005D1B77 /* GNOConsole.mm.ragel */,
B6ACA2AB1E5C8BEC000E774B /* GNOConsole.mm */,
B6C173901D31D2B80024E360 /* GSOSConsole.h */,
@ -471,15 +482,25 @@
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0930;
LastUpgradeCheck = 1110;
TargetAttributes = {
8D1107260486CEB800E47090 = {
ProvisioningStyle = Automatic;
SystemCapabilities = {
com.apple.HardenedRuntime = {
enabled = 1;
};
};
};
};
};
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "TwoTerm" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
developmentRegion = en;
hasScannedForEncodings = 1;
knownRegions = (
en,
English,
Base,
);
mainGroup = 29B97314FDCFA39411CA2CEA /* 2Term */;
projectDirPath = "";
@ -553,6 +574,7 @@
buildActionMask = 2147483647;
files = (
B675F4A91E561D20004B0D9C /* Apple80.mm.ragel in Sources */,
B6C0909021D292E20067F7A4 /* Apple3.mm.ragel in Sources */,
B675F4AC1E56A7F2004B0D9C /* GSOSConsole.mm.ragel in Sources */,
B6D1CD071E577E7D00C4A6BC /* PTSE.mm.ragel in Sources */,
B683F7102049E7B000470B99 /* VT50.mm.ragel in Sources */,
@ -591,7 +613,7 @@
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
B6887815235CD77600407374 /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@ -599,7 +621,7 @@
1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
1DDD58150DA1D0A300B32029 /* English */,
B6887810235CD76A00407374 /* Base */,
);
name = MainMenu.xib;
sourceTree = "<group>";
@ -607,7 +629,7 @@
B61EF7C714815AF8008C1891 /* NewTerminal.xib */ = {
isa = PBXVariantGroup;
children = (
B61EF7C814815AF8008C1891 /* English */,
B6887812235CD76A00407374 /* Base */,
);
name = NewTerminal.xib;
sourceTree = "<group>";
@ -615,7 +637,7 @@
B61EF7CD148163E7008C1891 /* TitleBarView.xib */ = {
isa = PBXVariantGroup;
children = (
B61EF7CE148163E7008C1891 /* English */,
B6887814235CD76B00407374 /* Base */,
);
name = TitleBarView.xib;
sourceTree = "<group>";
@ -623,7 +645,7 @@
B676065011DEBAE900D6B66C /* TermWindow.xib */ = {
isa = PBXVariantGroup;
children = (
B676064D11DEBAE300D6B66C /* English */,
B6887811235CD76A00407374 /* Base */,
);
name = TermWindow.xib;
sourceTree = "<group>";
@ -631,7 +653,7 @@
B69D0FB8202799B10073CCB7 /* TermConfig.xib */ = {
isa = PBXVariantGroup;
children = (
B69D0FB9202799B10073CCB7 /* English */,
B6887813235CD76B00407374 /* Base */,
);
name = TermConfig.xib;
sourceTree = "<group>";
@ -645,8 +667,12 @@
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = YES;
GCC_DYNAMIC_NO_PIC = NO;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
@ -656,6 +682,7 @@
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_BUNDLE_IDENTIFIER = "com.ksherlock.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = TwoTerm;
PROVISIONING_PROFILE_SPECIFIER = "";
};
name = Debug;
};
@ -665,8 +692,11 @@
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = YES;
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = TwoTerm_Prefix.pch;

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

View File

@ -343,9 +343,9 @@
{
// mouse text actually requires mouse text and inverse to be on.
if (flag & Screen::FlagMouseText)
if ((flag & Screen::FlagMouseText) && c >= '@' && c <= '_')
{
if (c >= '@' && c <= '_') c |= 0x80;
c |= 0x80;
}
else
{

@ -1 +1 @@
Subproject commit b91763ed705d32ec0fc7cbdca84f9d597696b050
Subproject commit c7b95dda17a1239b303d01eeca8c8f9fba3d2131