mirror of
https://github.com/zydeco/minivmac4ios.git
synced 2024-06-08 11:32:36 +00:00
add LocalTalk over TCP
This commit is contained in:
parent
fdbf6aab7e
commit
8ba6622310
|
@ -244,6 +244,7 @@
|
||||||
/* End PBXCopyFilesBuildPhase section */
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
2834204B2B96558700D7DB68 /* LTOVRUDP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LTOVRUDP.h; sourceTree = "<group>"; };
|
||||||
283422CA1CF8EF8C0088B634 /* MacPlus4M.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MacPlus4M.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
283422CA1CF8EF8C0088B634 /* MacPlus4M.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MacPlus4M.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
283422D71CF8EFD80088B634 /* EmulatorProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EmulatorProtocol.h; sourceTree = "<group>"; };
|
283422D71CF8EFD80088B634 /* EmulatorProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EmulatorProtocol.h; sourceTree = "<group>"; };
|
||||||
283422E71CF8F1C80088B634 /* CNFUDOSG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNFUDOSG.h; sourceTree = "<group>"; };
|
283422E71CF8F1C80088B634 /* CNFUDOSG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNFUDOSG.h; sourceTree = "<group>"; };
|
||||||
|
@ -257,6 +258,7 @@
|
||||||
283423EE1CFA329C0088B634 /* Icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@3x.png"; sourceTree = "<group>"; };
|
283423EE1CFA329C0088B634 /* Icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@3x.png"; sourceTree = "<group>"; };
|
||||||
283CA9821DF47AF300B33D5E /* BTCMouse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BTCMouse.h; sourceTree = "<group>"; };
|
283CA9821DF47AF300B33D5E /* BTCMouse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BTCMouse.h; sourceTree = "<group>"; };
|
||||||
285A8C901D05AFD3002993DE /* PlugIn-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "PlugIn-Info.plist"; sourceTree = "<group>"; };
|
285A8C901D05AFD3002993DE /* PlugIn-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "PlugIn-Info.plist"; sourceTree = "<group>"; };
|
||||||
|
287006E92BB032E300A5EB51 /* LTOVRTCP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LTOVRTCP.h; sourceTree = "<group>"; };
|
||||||
28848B601CDE97D600B86C45 /* InsertDiskViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InsertDiskViewController.h; sourceTree = "<group>"; };
|
28848B601CDE97D600B86C45 /* InsertDiskViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InsertDiskViewController.h; sourceTree = "<group>"; };
|
||||||
28848B611CDE97D600B86C45 /* InsertDiskViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InsertDiskViewController.m; sourceTree = "<group>"; };
|
28848B611CDE97D600B86C45 /* InsertDiskViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InsertDiskViewController.m; sourceTree = "<group>"; };
|
||||||
28848B631CDE97E900B86C45 /* SettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsViewController.h; sourceTree = "<group>"; };
|
28848B631CDE97E900B86C45 /* SettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsViewController.h; sourceTree = "<group>"; };
|
||||||
|
@ -556,6 +558,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
28E3B831251D195D007C273F /* PICOMMON.h */,
|
28E3B831251D195D007C273F /* PICOMMON.h */,
|
||||||
|
2834204B2B96558700D7DB68 /* LTOVRUDP.h */,
|
||||||
28E3B7D2251D0F13007C273F /* ADBEMDEV.c */,
|
28E3B7D2251D0F13007C273F /* ADBEMDEV.c */,
|
||||||
28E3B7DE251D0F13007C273F /* ASCEMDEV.c */,
|
28E3B7DE251D0F13007C273F /* ASCEMDEV.c */,
|
||||||
28E3B7CE251D0F12007C273F /* GLOBGLUE.c */,
|
28E3B7CE251D0F12007C273F /* GLOBGLUE.c */,
|
||||||
|
@ -638,6 +641,7 @@
|
||||||
283422EF1CF8F33A0088B634 /* Emulator Bundles */,
|
283422EF1CF8F33A0088B634 /* Emulator Bundles */,
|
||||||
28D3C6162B76B8970079E915 /* DefaultSceneDelegate.swift */,
|
28D3C6162B76B8970079E915 /* DefaultSceneDelegate.swift */,
|
||||||
28D3C61A2B7781700079E915 /* KeyboardSceneDelegate.swift */,
|
28D3C61A2B7781700079E915 /* KeyboardSceneDelegate.swift */,
|
||||||
|
287006E92BB032E300A5EB51 /* LTOVRTCP.h */,
|
||||||
);
|
);
|
||||||
path = "Mini vMac";
|
path = "Mini vMac";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
|
@ -68,7 +68,14 @@ NSString *DocumentsChangedNotification = @"documentsChanged";
|
||||||
|
|
||||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||||
[defaults registerDefaults:defaultValues];
|
[defaults registerDefaults:defaultValues];
|
||||||
[defaults addObserver:self forKeyPath:@"speedValue" options:0 context:NULL];
|
for (NSString *key in @[@"speedValue", @"autoSlow", @"localTalkServer"]) {
|
||||||
|
[defaults addObserver:self forKeyPath:key options:0 context:NULL];
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *localTalkServer = [defaults valueForKey:@"localTalkServer"];
|
||||||
|
if (localTalkServer.length > 0) {
|
||||||
|
setenv("LTOVRTCP_SERVER", localTalkServer.UTF8String, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
|
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
|
||||||
|
@ -78,6 +85,13 @@ NSString *DocumentsChangedNotification = @"documentsChanged";
|
||||||
sharedEmulator.speed = [defaults integerForKey:@"speedValue"];
|
sharedEmulator.speed = [defaults integerForKey:@"speedValue"];
|
||||||
} else if ([keyPath isEqualToString:@"autoSlow"]) {
|
} else if ([keyPath isEqualToString:@"autoSlow"]) {
|
||||||
sharedEmulator.autoSlow = [defaults integerForKey:@"autoSlow"];
|
sharedEmulator.autoSlow = [defaults integerForKey:@"autoSlow"];
|
||||||
|
} else if ([keyPath isEqualToString:@"localTalkServer"]) {
|
||||||
|
NSString *localTalkServer = [defaults stringForKey:@"localTalkServer"];
|
||||||
|
if (localTalkServer.length > 0) {
|
||||||
|
setenv("LTOVRTCP_SERVER", localTalkServer.UTF8String, 1);
|
||||||
|
} else {
|
||||||
|
unsetenv("LTOVRTCP_SERVER");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
||||||
<device id="retina5_9" orientation="portrait" appearance="light"/>
|
<device id="retina5_9" orientation="portrait" appearance="light"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
|
||||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="70W-4V-tYr" customClass="ScreenView">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="70W-4V-tYr" customClass="ScreenView">
|
||||||
<rect key="frame" x="0.0" y="44" width="375" height="734"/>
|
<rect key="frame" x="0.0" y="50" width="375" height="728"/>
|
||||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
</view>
|
</view>
|
||||||
<visualEffectView hidden="YES" opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="o5Z-in-kcg">
|
<visualEffectView hidden="YES" opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="o5Z-in-kcg">
|
||||||
|
@ -218,12 +218,12 @@
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController id="WUA-f8-k8g" customClass="SettingsViewController" sceneMemberID="viewController">
|
<tableViewController id="WUA-f8-k8g" customClass="SettingsViewController" sceneMemberID="viewController">
|
||||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="9gA-gD-7Wx">
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="9gA-gD-7Wx">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="758"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="802"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
|
<color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="speed" id="v4I-0T-H8m">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="speed" id="v4I-0T-H8m">
|
||||||
<rect key="frame" x="0.0" y="49" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="55.333332061767578" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="v4I-0T-H8m" id="cO5-De-1JT">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="v4I-0T-H8m" id="cO5-De-1JT">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
@ -253,7 +253,7 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="mouse" id="JgY-zN-3ID">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="mouse" id="JgY-zN-3ID">
|
||||||
<rect key="frame" x="0.0" y="93" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="99.333332061767578" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="JgY-zN-3ID" id="iUk-se-WGk">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="JgY-zN-3ID" id="iUk-se-WGk">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
@ -282,7 +282,7 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="keyboard" textLabel="6WO-0z-y7c" style="IBUITableViewCellStyleDefault" id="q7C-00-4ss">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="keyboard" textLabel="6WO-0z-y7c" style="IBUITableViewCellStyleDefault" id="q7C-00-4ss">
|
||||||
<rect key="frame" x="0.0" y="137" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="143.33333206176758" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="q7C-00-4ss" id="yUn-mI-DwM">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="q7C-00-4ss" id="yUn-mI-DwM">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
@ -298,7 +298,7 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationWidth="60" reuseIdentifier="machine" textLabel="znE-ML-UrQ" detailTextLabel="xcq-HY-ZDe" style="IBUITableViewCellStyleSubtitle" id="MGj-K1-5lZ">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationWidth="60" reuseIdentifier="machine" textLabel="znE-ML-UrQ" detailTextLabel="xcq-HY-ZDe" style="IBUITableViewCellStyleSubtitle" id="MGj-K1-5lZ">
|
||||||
<rect key="frame" x="0.0" y="181" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="187.33333206176758" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="MGj-K1-5lZ" id="ueO-zm-JQP">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="MGj-K1-5lZ" id="ueO-zm-JQP">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
@ -322,7 +322,7 @@
|
||||||
<inset key="separatorInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
|
<inset key="separatorInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="display" id="P6n-Bf-s6h">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="display" id="P6n-Bf-s6h">
|
||||||
<rect key="frame" x="0.0" y="225" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="231.33333206176758" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="P6n-Bf-s6h" id="NgN-Fe-hXo">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="P6n-Bf-s6h" id="NgN-Fe-hXo">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
@ -348,7 +348,7 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="about" textLabel="YWX-qF-gPj" detailTextLabel="xr3-v1-hzM" style="IBUITableViewCellStyleValue1" id="Mon-vq-IrO">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="about" textLabel="YWX-qF-gPj" detailTextLabel="xr3-v1-hzM" style="IBUITableViewCellStyleValue1" id="Mon-vq-IrO">
|
||||||
<rect key="frame" x="0.0" y="269" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="275.33333206176758" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Mon-vq-IrO" id="mGZ-Jb-6j4">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Mon-vq-IrO" id="mGZ-Jb-6j4">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
@ -371,7 +371,7 @@
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="toggle" textLabel="a1l-XI-MEz" style="IBUITableViewCellStyleDefault" id="1nB-54-Qfk">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="toggle" textLabel="a1l-XI-MEz" style="IBUITableViewCellStyleDefault" id="1nB-54-Qfk">
|
||||||
<rect key="frame" x="0.0" y="313" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="319.33333206176758" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="1nB-54-Qfk" id="fZu-5X-Z4B">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="1nB-54-Qfk" id="fZu-5X-Z4B">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
@ -386,6 +386,22 @@
|
||||||
</subviews>
|
</subviews>
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="field" textLabel="80H-xx-UOs" style="IBUITableViewCellStyleDefault" id="azx-Sd-SM5">
|
||||||
|
<rect key="frame" x="0.0" y="363.33333206176758" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="azx-Sd-SM5" id="XCA-vd-f7d">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="80H-xx-UOs">
|
||||||
|
<rect key="frame" x="16" y="0.0" width="343" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
</tableViewCell>
|
||||||
</prototypes>
|
</prototypes>
|
||||||
<sections/>
|
<sections/>
|
||||||
<connections>
|
<connections>
|
||||||
|
@ -435,7 +451,7 @@
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<toolbar key="toolbar" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="Cuq-Py-BdB">
|
<toolbar key="toolbar" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="Cuq-Py-BdB">
|
||||||
<rect key="frame" x="0.0" y="675" width="375" height="49"/>
|
<rect key="frame" x="0.0" y="758" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</toolbar>
|
</toolbar>
|
||||||
<connections>
|
<connections>
|
||||||
|
@ -451,12 +467,12 @@
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController id="mbX-kA-h6M" customClass="InsertDiskViewController" sceneMemberID="viewController">
|
<tableViewController id="mbX-kA-h6M" customClass="InsertDiskViewController" sceneMemberID="viewController">
|
||||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="EFr-QR-Vqc">
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="EFr-QR-Vqc">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="758"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="802"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="cell" textLabel="8ef-Se-DXA" detailTextLabel="CbL-Kq-e9s" style="IBUITableViewCellStyleValue1" id="iZQ-DG-qho" customClass="FileTableViewCell">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="cell" textLabel="8ef-Se-DXA" detailTextLabel="CbL-Kq-e9s" style="IBUITableViewCellStyleValue1" id="iZQ-DG-qho" customClass="FileTableViewCell">
|
||||||
<rect key="frame" x="0.0" y="44.666666030883789" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="50" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="iZQ-DG-qho" id="pcB-3f-clB">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="iZQ-DG-qho" id="pcB-3f-clB">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
@ -542,7 +558,7 @@
|
||||||
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
</systemColor>
|
</systemColor>
|
||||||
<systemColor name="secondaryLabelColor">
|
<systemColor name="secondaryLabelColor">
|
||||||
<color red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
</systemColor>
|
</systemColor>
|
||||||
<systemColor name="systemBackgroundColor">
|
<systemColor name="systemBackgroundColor">
|
||||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
|
403
Mini vMac/LTOVRTCP.h
Normal file
403
Mini vMac/LTOVRTCP.h
Normal file
|
@ -0,0 +1,403 @@
|
||||||
|
/*
|
||||||
|
LTOVRTCP.h
|
||||||
|
|
||||||
|
Copyright (C) 2012 Michael Fort, Paul C. Pratt, Rob Mitchelmore
|
||||||
|
|
||||||
|
You can redistribute this file and/or modify it under the terms
|
||||||
|
of version 2 of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation. You should have received a copy
|
||||||
|
of the license along with this file; see the file COPYING.
|
||||||
|
|
||||||
|
This file is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
license for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
LocalTalk OVeR Transmission Control Protocol
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define TCP_dolog (dbglog_HAVE && 0)
|
||||||
|
|
||||||
|
#ifndef use_winsock
|
||||||
|
#define use_winsock 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if use_winsock
|
||||||
|
#define my_INVALID_SOCKET INVALID_SOCKET
|
||||||
|
#define my_SOCKET SOCKET
|
||||||
|
#define my_closesocket closesocket
|
||||||
|
#define socklen_t int
|
||||||
|
#else
|
||||||
|
#define my_INVALID_SOCKET (-1)
|
||||||
|
#define my_SOCKET int
|
||||||
|
#define my_closesocket close
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TCP_dolog
|
||||||
|
LOCALPROC dbglog_writeSockErr(char *s)
|
||||||
|
{
|
||||||
|
dbglog_writeCStr(s);
|
||||||
|
dbglog_writeCStr(": err ");
|
||||||
|
#if use_winsock
|
||||||
|
dbglog_writeNum(WSAGetLastError());
|
||||||
|
#else
|
||||||
|
dbglog_writeNum(errno);
|
||||||
|
dbglog_writeCStr(" (");
|
||||||
|
dbglog_writeCStr(strerror(errno));
|
||||||
|
dbglog_writeCStr(")");
|
||||||
|
#endif
|
||||||
|
dbglog_writeReturn();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
Transmit buffer for localtalk data and its metadata
|
||||||
|
*/
|
||||||
|
LOCALVAR ui3b tx_buffer[6 + LT_TxBfMxSz] =
|
||||||
|
"LLpppp";
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Receive buffer for LocalTalk data and its metadata
|
||||||
|
*/
|
||||||
|
LOCALVAR unsigned int rx_buffer_allocation = 1800;
|
||||||
|
|
||||||
|
LOCALVAR my_SOCKET sock_fd = my_INVALID_SOCKET;
|
||||||
|
LOCALVAR blnr tcp_ok = falseblnr;
|
||||||
|
|
||||||
|
#if use_winsock
|
||||||
|
LOCALVAR blnr have_winsock = falseblnr;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
LOCALPROC start_tcp(void)
|
||||||
|
{
|
||||||
|
#if use_winsock
|
||||||
|
WSADATA wsaData;
|
||||||
|
#endif
|
||||||
|
struct sockaddr_in addr;
|
||||||
|
|
||||||
|
#if use_winsock
|
||||||
|
if (0 != WSAStartup(MAKEWORD(2, 2), &wsaData)) {
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeln("WSAStartup fails");
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
have_winsock = trueblnr;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (my_INVALID_SOCKET == (sock_fd =
|
||||||
|
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)))
|
||||||
|
{
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeSockErr("socket");
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* find server from LTOVRTCP_SERVER env, should be in the form 1.2.3.4:12345 */
|
||||||
|
char *server = NULL;
|
||||||
|
char buf[32];
|
||||||
|
short port = 0;
|
||||||
|
if ((server = getenv("LTOVRTCP_SERVER")) && strlen(server) < sizeof(buf)) {
|
||||||
|
strcpy(buf, server);
|
||||||
|
char *separator = strchr(buf, ':');
|
||||||
|
if (separator == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*separator = 0;
|
||||||
|
separator++;
|
||||||
|
if (strlen(separator) > 1) {
|
||||||
|
port = (short)atoi(separator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (port == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* connect to server */
|
||||||
|
memset((char*)&addr, 0, sizeof(addr));
|
||||||
|
addr.sin_family = AF_INET;
|
||||||
|
addr.sin_addr.s_addr = inet_addr(buf);
|
||||||
|
addr.sin_port = htons(port);
|
||||||
|
#if ! use_winsock
|
||||||
|
errno = 0;
|
||||||
|
#endif
|
||||||
|
if (0 != connect(sock_fd, (struct sockaddr*)&addr, sizeof(addr))) {
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeSockErr("connect");
|
||||||
|
#endif
|
||||||
|
MacMsg("Could not connect to LocalTalk server", strerror(errno), falseblnr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeln("tcp connected");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* non-blocking I/O is good for the soul */
|
||||||
|
#if use_winsock
|
||||||
|
{
|
||||||
|
int iResult;
|
||||||
|
u_long iMode = 1;
|
||||||
|
|
||||||
|
iResult = ioctlsocket(sock_fd, FIONBIO, &iMode);
|
||||||
|
if (iResult != NO_ERROR) {
|
||||||
|
/*
|
||||||
|
printf("ioctlsocket failed with error: %ld\n", iResult);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
fcntl(sock_fd, F_SETFL, O_NONBLOCK);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
tcp_ok = trueblnr;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOCALVAR unsigned char *MyRxBuffer = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
External function needed at startup to initialize the LocalTalk
|
||||||
|
functionality.
|
||||||
|
*/
|
||||||
|
LOCALFUNC blnr InitLocalTalk(void)
|
||||||
|
{
|
||||||
|
LT_PickStampNodeHint();
|
||||||
|
|
||||||
|
LT_TxBuffer = &tx_buffer[6];
|
||||||
|
|
||||||
|
MyRxBuffer = malloc(rx_buffer_allocation);
|
||||||
|
if (NULL == MyRxBuffer) {
|
||||||
|
return falseblnr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set up TCP socket */
|
||||||
|
start_tcp();
|
||||||
|
|
||||||
|
/* Initialized properly */
|
||||||
|
return trueblnr;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOCALPROC UnInitLocalTalk(void)
|
||||||
|
{
|
||||||
|
if (my_INVALID_SOCKET != sock_fd) {
|
||||||
|
if (0 != my_closesocket(sock_fd)) {
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeSockErr("my_closesocket sock_fd");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if use_winsock
|
||||||
|
if (have_winsock) {
|
||||||
|
if (0 != WSACleanup()) {
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeSockErr("WSACleanup");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (NULL != MyRxBuffer) {
|
||||||
|
free(MyRxBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOCALPROC embedPacketLength(ui4r length)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
embeds the length of the packet in the packet as a 16-bit big endian
|
||||||
|
*/
|
||||||
|
tx_buffer[0] = (length >> 8) & 0xff;
|
||||||
|
tx_buffer[1] = length & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOCALPROC embedMyPID(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
embeds my process ID in network byte order in the start of the
|
||||||
|
Tx buffer we assume a pid is at most 32 bits. As far as I know
|
||||||
|
there's no actual implementation of POSIX with 64-bit PIDs so we
|
||||||
|
should be ok.
|
||||||
|
*/
|
||||||
|
int i;
|
||||||
|
|
||||||
|
#if LT_MayHaveEcho
|
||||||
|
ui5r v = LT_MyStamp;
|
||||||
|
#else
|
||||||
|
ui5r v = (ui5r)getpid();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
tx_buffer[2+i] = (v >> (3 - i)*8) & 0xff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GLOBALOSGLUPROC LT_TransmitPacket(void)
|
||||||
|
{
|
||||||
|
size_t bytes;
|
||||||
|
/* Write the packet to TCP */
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeln("writing to tcp");
|
||||||
|
#endif
|
||||||
|
embedPacketLength(LT_TxBuffSz + 4);
|
||||||
|
embedMyPID();
|
||||||
|
if (tcp_ok) {
|
||||||
|
|
||||||
|
bytes = send(sock_fd,
|
||||||
|
(const void *)tx_buffer, LT_TxBuffSz + 6, 0);
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeCStr("sent ");
|
||||||
|
dbglog_writeNum(bytes);
|
||||||
|
dbglog_writeCStr(" bytes");
|
||||||
|
dbglog_writeReturn();
|
||||||
|
#endif
|
||||||
|
(void) bytes; /* avoid warning about unused */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
pidInPacketIsMine returns 1 if the process ID embedded in the packet
|
||||||
|
is the same as the process ID of the current process
|
||||||
|
*/
|
||||||
|
LOCALFUNC int pidInPacketIsMine(void)
|
||||||
|
{
|
||||||
|
/* is the PID in the packet my own PID? */
|
||||||
|
int i;
|
||||||
|
ui5r v;
|
||||||
|
|
||||||
|
#if LT_MayHaveEcho
|
||||||
|
v = LT_MyStamp;
|
||||||
|
#else
|
||||||
|
v = (ui5r)getpid();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
if (MyRxBuffer[i] != ((v >> (3 - i)*8) & 0xff)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
packetIsOneISent returns 1 if this looks like a packet that this
|
||||||
|
process sent and 0 if it looks like a packet that a different
|
||||||
|
process sent. This provides loopback protection so that we do not
|
||||||
|
try to consume packets that we sent ourselves. We do this by
|
||||||
|
checking the process ID embedded in the packet and the IP address
|
||||||
|
the packet was sent from. It would be neater to just look at the
|
||||||
|
LocalTalk node ID embedded in the LLAP packet, but this doesn't
|
||||||
|
actually work, because during address acquisition it is entirely
|
||||||
|
legitimate (and, in the case of collision, *required*) for another
|
||||||
|
node to send a packet from what we think is our own node ID.
|
||||||
|
*/
|
||||||
|
#if ! LT_MayHaveEcho
|
||||||
|
LOCALFUNC int packetIsOneISent(void)
|
||||||
|
{
|
||||||
|
return pidInPacketIsMine();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
LOCALFUNC int GetNextPacket(void)
|
||||||
|
{
|
||||||
|
unsigned char* device_buffer = MyRxBuffer;
|
||||||
|
if (tcp_ok == falseblnr)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if ! use_winsock
|
||||||
|
errno = 0;
|
||||||
|
#endif
|
||||||
|
/* peek length */
|
||||||
|
ssize_t bytes = recv(sock_fd, (void *)device_buffer, 2, MSG_PEEK);
|
||||||
|
if (bytes == 2)
|
||||||
|
{
|
||||||
|
int incoming_length = (device_buffer[0] << 8) + device_buffer[1];
|
||||||
|
bytes = recv(sock_fd, (void*)device_buffer, 2 + incoming_length, MSG_PEEK);
|
||||||
|
if (bytes == 2 + incoming_length)
|
||||||
|
{
|
||||||
|
/* read the packet */
|
||||||
|
bytes = recv(sock_fd, (void*)device_buffer, 2 + incoming_length, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bytes < 0) {
|
||||||
|
#if use_winsock
|
||||||
|
if (WSAEWOULDBLOCK != WSAGetLastError())
|
||||||
|
#else
|
||||||
|
if (ECONNRESET == errno || ETIMEDOUT == errno)
|
||||||
|
{
|
||||||
|
MacMsg("Lost connection to LocalTalk server", strerror(errno), falseblnr);
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeCStr("tcp error ");
|
||||||
|
dbglog_writeCStr(strerror(errno));
|
||||||
|
dbglog_writeReturn();
|
||||||
|
#endif
|
||||||
|
tcp_ok = falseblnr;
|
||||||
|
my_closesocket(sock_fd);
|
||||||
|
sock_fd = my_INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
else if (EAGAIN != errno)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeCStr("ret");
|
||||||
|
dbglog_writeNum(bytes);
|
||||||
|
dbglog_writeCStr(", bufsize ");
|
||||||
|
dbglog_writeNum(rx_buffer_allocation);
|
||||||
|
#if ! use_winsock
|
||||||
|
dbglog_writeCStr(", errno = ");
|
||||||
|
dbglog_writeCStr(strerror(errno));
|
||||||
|
#endif
|
||||||
|
dbglog_writeReturn();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeCStr("got ");
|
||||||
|
dbglog_writeNum(bytes);
|
||||||
|
dbglog_writeCStr(", bufsize ");
|
||||||
|
dbglog_writeNum(rx_buffer_allocation);
|
||||||
|
dbglog_writeReturn();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLOBALOSGLUPROC LT_ReceivePacket(void)
|
||||||
|
{
|
||||||
|
int bytes;
|
||||||
|
|
||||||
|
#if ! LT_MayHaveEcho
|
||||||
|
label_retry:
|
||||||
|
#endif
|
||||||
|
bytes = GetNextPacket();
|
||||||
|
if (bytes > 0) {
|
||||||
|
#if LT_MayHaveEcho
|
||||||
|
CertainlyNotMyPacket = ! pidInPacketIsMine();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ! LT_MayHaveEcho
|
||||||
|
if (packetIsOneISent()) {
|
||||||
|
goto label_retry;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
#if TCP_dolog
|
||||||
|
dbglog_writeCStr("passing ");
|
||||||
|
dbglog_writeNum(bytes - 6);
|
||||||
|
dbglog_writeCStr(" bytes to receiver");
|
||||||
|
dbglog_writeReturn();
|
||||||
|
#endif
|
||||||
|
LT_RxBuffer = MyRxBuffer + 6;
|
||||||
|
LT_RxBuffSz = bytes - 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -107,6 +107,12 @@ LOCALPROC dbglog_close0(void) {
|
||||||
#include "COMOSGLU.h"
|
#include "COMOSGLU.h"
|
||||||
#include "PBUFSTDC.h"
|
#include "PBUFSTDC.h"
|
||||||
|
|
||||||
|
#if EmLocalTalk
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include "LTOVRTCP.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#pragma mark - Cocoa Stuff
|
#pragma mark - Cocoa Stuff
|
||||||
|
|
||||||
LOCALFUNC blnr FindNamedChildFilePath(NSString *parentPath, char *ChildName, NSString **childPath) {
|
LOCALFUNC blnr FindNamedChildFilePath(NSString *parentPath, char *ChildName, NSString **childPath) {
|
||||||
|
@ -1492,10 +1498,14 @@ LOCALFUNC blnr InitOSGLU(void) {
|
||||||
#endif
|
#endif
|
||||||
if (LoadInitialImages())
|
if (LoadInitialImages())
|
||||||
if (LoadMacRom())
|
if (LoadMacRom())
|
||||||
if (InitLocationDat()) {
|
if (InitLocationDat())
|
||||||
InitKeyCodes();
|
#if EmLocalTalk
|
||||||
IsOk = trueblnr;
|
if (InitLocalTalk())
|
||||||
}
|
#endif
|
||||||
|
if (true) {
|
||||||
|
InitKeyCodes();
|
||||||
|
IsOk = trueblnr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return IsOk;
|
return IsOk;
|
||||||
|
@ -1508,6 +1518,9 @@ LOCALPROC CheckSavedMacMsg(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
LOCALPROC UnInitOSGLU(void) {
|
LOCALPROC UnInitOSGLU(void) {
|
||||||
|
#if EmLocalTalk
|
||||||
|
UnInitLocalTalk();
|
||||||
|
#endif
|
||||||
#if MySoundEnabled
|
#if MySoundEnabled
|
||||||
MySound_Stop();
|
MySound_Stop();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -35,7 +35,8 @@
|
||||||
|
|
||||||
#define IncludeHostTextClipExchange 1
|
#define IncludeHostTextClipExchange 1
|
||||||
#define EnableAutoSlow 1
|
#define EnableAutoSlow 1
|
||||||
#define EmLocalTalk 0
|
#define EmLocalTalk 1
|
||||||
|
#define LT_MayHaveEcho 0
|
||||||
#define AutoLocation 1
|
#define AutoLocation 1
|
||||||
#define AutoTimeZone 1
|
#define AutoTimeZone 1
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,8 @@
|
||||||
|
|
||||||
#define IncludeHostTextClipExchange 1
|
#define IncludeHostTextClipExchange 1
|
||||||
#define EnableAutoSlow 1
|
#define EnableAutoSlow 1
|
||||||
#define EmLocalTalk 0
|
#define EmLocalTalk 1
|
||||||
|
#define LT_MayHaveEcho 0
|
||||||
#define AutoLocation 1
|
#define AutoLocation 1
|
||||||
#define AutoTimeZone 1
|
#define AutoTimeZone 1
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,8 @@
|
||||||
|
|
||||||
#define IncludeHostTextClipExchange 1
|
#define IncludeHostTextClipExchange 1
|
||||||
#define EnableAutoSlow 1
|
#define EnableAutoSlow 1
|
||||||
#define EmLocalTalk 0
|
#define EmLocalTalk 1
|
||||||
|
#define LT_MayHaveEcho 0
|
||||||
#define AutoLocation 1
|
#define AutoLocation 1
|
||||||
#define AutoTimeZone 1
|
#define AutoTimeZone 1
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,8 @@
|
||||||
|
|
||||||
#define IncludeHostTextClipExchange 1
|
#define IncludeHostTextClipExchange 1
|
||||||
#define EnableAutoSlow 1
|
#define EnableAutoSlow 1
|
||||||
#define EmLocalTalk 0
|
#define EmLocalTalk 1
|
||||||
|
#define LT_MayHaveEcho 0
|
||||||
#define AutoLocation 1
|
#define AutoLocation 1
|
||||||
#define AutoTimeZone 1
|
#define AutoTimeZone 1
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,9 @@ typedef enum : NSInteger {
|
||||||
SettingsSectionKeyboard,
|
SettingsSectionKeyboard,
|
||||||
SettingsSectionDisplay,
|
SettingsSectionDisplay,
|
||||||
SettingsSectionMachine,
|
SettingsSectionMachine,
|
||||||
SettingsSectionAbout
|
SettingsSectionNetwork,
|
||||||
|
SettingsSectionAbout,
|
||||||
|
SettingsSectionCount
|
||||||
} SettingsSection;
|
} SettingsSection;
|
||||||
|
|
||||||
@implementation SettingsViewController
|
@implementation SettingsViewController
|
||||||
|
@ -154,10 +156,21 @@ typedef enum : NSInteger {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)changeLocaltalkServer:(UITextField*)sender {
|
||||||
|
if ([sender isKindOfClass:[UITextField class]]) {
|
||||||
|
NSLog(@"Changed server to %@", sender.text);
|
||||||
|
if (sender.text.length == 0) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"localTalkServer"];
|
||||||
|
} else {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setValue:sender.text forKey:@"localTalkServer"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Table view data source
|
#pragma mark - Table view data source
|
||||||
|
|
||||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||||
return 6;
|
return SettingsSectionCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||||
|
@ -196,6 +209,8 @@ typedef enum : NSInteger {
|
||||||
return NSLocalizedString(@"Display Scaling", nil);
|
return NSLocalizedString(@"Display Scaling", nil);
|
||||||
case SettingsSectionAbout:
|
case SettingsSectionAbout:
|
||||||
return aboutTitle;
|
return aboutTitle;
|
||||||
|
case SettingsSectionNetwork:
|
||||||
|
return NSLocalizedString(@"Network", nil);
|
||||||
default:return nil;
|
default:return nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,7 +284,7 @@ typedef enum : NSInteger {
|
||||||
cell.textLabel.text = [bundle objectForInfoDictionaryKey:@"CFBundleDisplayName"];
|
cell.textLabel.text = [bundle objectForInfoDictionaryKey:@"CFBundleDisplayName"];
|
||||||
cell.detailTextLabel.text = [bundle objectForInfoDictionaryKey:@"CFBundleGetInfoString"];
|
cell.detailTextLabel.text = [bundle objectForInfoDictionaryKey:@"CFBundleGetInfoString"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rowHasHeader) {
|
if (rowHasHeader) {
|
||||||
cell.imageView.image = nil;
|
cell.imageView.image = nil;
|
||||||
cell.indentationLevel = 1;
|
cell.indentationLevel = 1;
|
||||||
|
@ -297,6 +312,9 @@ typedef enum : NSInteger {
|
||||||
} else {
|
} else {
|
||||||
filterControl.selectedSegmentIndex = 1;
|
filterControl.selectedSegmentIndex = 1;
|
||||||
}
|
}
|
||||||
|
} else if (section == SettingsSectionNetwork) {
|
||||||
|
cell = [self fieldCellForTableView:tableView indexPath:indexPath action:@selector(changeLocaltalkServer:) placeholder:@"address:port" text:[defaults valueForKey:@"localTalkServer"]];
|
||||||
|
cell.textLabel.text = @"LocalTalk Server";
|
||||||
}
|
}
|
||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
@ -391,4 +409,22 @@ typedef enum : NSInteger {
|
||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (UITableViewCell*)fieldCellForTableView:(UITableView*)tableView indexPath:(NSIndexPath*)indexPath action:(SEL)action placeholder:(NSString*)placeholder text:(NSString*)text {
|
||||||
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"field" forIndexPath:indexPath];
|
||||||
|
UITextField *cellField = (UITextField*)cell.accessoryView;
|
||||||
|
if (cellField == nil) {
|
||||||
|
CGRect bounds = cell.bounds;
|
||||||
|
bounds.size.width /= 2;
|
||||||
|
cellField = [[UITextField alloc] initWithFrame:bounds];
|
||||||
|
cell.accessoryView = cellField;
|
||||||
|
} else {
|
||||||
|
[cellField removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents];
|
||||||
|
}
|
||||||
|
cellField.text = text;
|
||||||
|
cellField.placeholder = placeholder;
|
||||||
|
cellField.textAlignment = NSTextAlignmentRight;
|
||||||
|
[cellField addTarget:self action:action forControlEvents:UIControlEventEditingDidEnd|UIControlEventEditingDidEndOnExit];
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user