mirror of
https://github.com/TomHarte/CLK.git
synced 2024-09-04 06:29:47 +00:00
Merge branch 'master' into DecodersAhoy
This commit is contained in:
commit
d4095b1b3b
@ -1343,7 +1343,6 @@
|
|||||||
4B9378E322A199C600973513 /* Audio.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Audio.hpp; sourceTree = "<group>"; };
|
4B9378E322A199C600973513 /* Audio.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Audio.hpp; sourceTree = "<group>"; };
|
||||||
4B95FA9C1F11893B0008E395 /* ZX8081OptionsPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZX8081OptionsPanel.swift; sourceTree = "<group>"; };
|
4B95FA9C1F11893B0008E395 /* ZX8081OptionsPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZX8081OptionsPanel.swift; sourceTree = "<group>"; };
|
||||||
4B961408222760E0001A7BF2 /* Screenshot.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Screenshot.hpp; sourceTree = "<group>"; };
|
4B961408222760E0001A7BF2 /* Screenshot.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Screenshot.hpp; sourceTree = "<group>"; };
|
||||||
4B97ADC722C6FD9B00A22A41 /* 68000ArithmeticTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = 68000ArithmeticTests.mm; path = "/Users/thomasharte/Projects/CLK/OSBindings/Mac/Clock SignalTests/68000ArithmeticTests.mm"; sourceTree = "<absolute>"; };
|
|
||||||
4B98A05C1FFAD3F600ADF63B /* CSROMFetcher.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = CSROMFetcher.hpp; sourceTree = "<group>"; };
|
4B98A05C1FFAD3F600ADF63B /* CSROMFetcher.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = CSROMFetcher.hpp; sourceTree = "<group>"; };
|
||||||
4B98A05D1FFAD3F600ADF63B /* CSROMFetcher.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = CSROMFetcher.mm; sourceTree = "<group>"; };
|
4B98A05D1FFAD3F600ADF63B /* CSROMFetcher.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = CSROMFetcher.mm; sourceTree = "<group>"; };
|
||||||
4B98A0601FFADCDE00ADF63B /* MSXStaticAnalyserTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MSXStaticAnalyserTests.mm; sourceTree = "<group>"; };
|
4B98A0601FFADCDE00ADF63B /* MSXStaticAnalyserTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MSXStaticAnalyserTests.mm; sourceTree = "<group>"; };
|
||||||
@ -3465,7 +3464,7 @@
|
|||||||
children = (
|
children = (
|
||||||
4B85322922778E4200F26553 /* Comparative68000.hpp */,
|
4B85322922778E4200F26553 /* Comparative68000.hpp */,
|
||||||
4B90467222C6FA31000E2074 /* TestRunner68000.hpp */,
|
4B90467222C6FA31000E2074 /* TestRunner68000.hpp */,
|
||||||
4B97ADC722C6FD9B00A22A41 /* 68000ArithmeticTests.mm */,
|
4B90467522C6FD6E000E2074 /* 68000ArithmeticTests.mm */,
|
||||||
4B9D0C4A22C7D70900DE1AD3 /* 68000BCDTests.mm */,
|
4B9D0C4A22C7D70900DE1AD3 /* 68000BCDTests.mm */,
|
||||||
4B90467322C6FADD000E2074 /* 68000BitwiseTests.mm */,
|
4B90467322C6FADD000E2074 /* 68000BitwiseTests.mm */,
|
||||||
4B680CE123A5553100451D43 /* 68000ComparativeTests.mm */,
|
4B680CE123A5553100451D43 /* 68000ComparativeTests.mm */,
|
||||||
@ -3510,7 +3509,6 @@
|
|||||||
4BFCA12A1ECBE7C400AC40C1 /* ZexallTests.swift */,
|
4BFCA12A1ECBE7C400AC40C1 /* ZexallTests.swift */,
|
||||||
4B3BA0C41D318B44005DD7A7 /* Bridges */,
|
4B3BA0C41D318B44005DD7A7 /* Bridges */,
|
||||||
4B1414631B588A1100E04248 /* Test Binaries */,
|
4B1414631B588A1100E04248 /* Test Binaries */,
|
||||||
4B90467522C6FD6E000E2074 /* 68000ArithmeticTests.mm */,
|
|
||||||
);
|
);
|
||||||
path = "Clock SignalTests";
|
path = "Clock SignalTests";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="16097.2" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="16097.2"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
||||||
<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>
|
||||||
<objects>
|
<objects>
|
||||||
@ -21,15 +21,15 @@
|
|||||||
<windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
|
<windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="80" y="250" width="600" height="450"/>
|
<rect key="contentRect" x="80" y="250" width="600" height="450"/>
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="3840" height="2137"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
|
||||||
<value key="minSize" type="size" width="228" height="171"/>
|
<value key="minSize" type="size" width="228" height="171"/>
|
||||||
<view key="contentView" id="gIp-Ho-8D9">
|
<view key="contentView" id="gIp-Ho-8D9">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="600" height="450"/>
|
<rect key="frame" x="0.0" y="0.0" width="600" height="450"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<openGLView hidden="YES" wantsLayer="YES" useAuxiliaryDepthBufferStencil="NO" allowOffline="YES" wantsBestResolutionOpenGLSurface="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DEG-fq-cjd" customClass="CSScanTargetView">
|
<view hidden="YES" wantsLayer="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DEG-fq-cjd" customClass="CSScanTargetView">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="600" height="450"/>
|
<rect key="frame" x="0.0" y="0.0" width="600" height="450"/>
|
||||||
</openGLView>
|
</view>
|
||||||
<box hidden="YES" boxType="custom" cornerRadius="4" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="4ap-Gi-2AO">
|
<box hidden="YES" boxType="custom" cornerRadius="4" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="4ap-Gi-2AO">
|
||||||
<rect key="frame" x="150" y="20" width="300" height="48"/>
|
<rect key="frame" x="150" y="20" width="300" height="48"/>
|
||||||
<view key="contentView" id="gwO-Ty-LCX">
|
<view key="contentView" id="gwO-Ty-LCX">
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
@class CSApplication;
|
@class CSApplication;
|
||||||
|
|
||||||
@protocol CSApplicationEventDelegate
|
@protocol CSApplicationEventDelegate <NSObject>
|
||||||
- (BOOL)application:(nonnull CSApplication *)application shouldSendEvent:(nonnull NSEvent *)event;
|
- (BOOL)application:(nonnull CSApplication *)application shouldSendEvent:(nonnull NSEvent *)event;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ class MachineDocument:
|
|||||||
//
|
//
|
||||||
// So: MAKE SURE IT'S SAFE TO ENTER THIS FUNCTION TWICE. Hence the non-assumption here about
|
// So: MAKE SURE IT'S SAFE TO ENTER THIS FUNCTION TWICE. Hence the non-assumption here about
|
||||||
// any windows still existing.
|
// any windows still existing.
|
||||||
if self.windowControllers.count > 0, let window = self.windowControllers[0].window {
|
if let window = self.windowControllers.first?.window {
|
||||||
for sheet in window.sheets {
|
for sheet in window.sheets {
|
||||||
window.endSheet(sheet)
|
window.endSheet(sheet)
|
||||||
}
|
}
|
||||||
@ -146,10 +146,7 @@ class MachineDocument:
|
|||||||
} else {
|
} else {
|
||||||
// Store the selected machine and list of missing ROMs, and
|
// Store the selected machine and list of missing ROMs, and
|
||||||
// show the missing ROMs dialogue.
|
// show the missing ROMs dialogue.
|
||||||
self.missingROMs = []
|
self.missingROMs = missingROMs.map({$0 as! CSMissingROM})
|
||||||
for untypedMissingROM in missingROMs {
|
|
||||||
self.missingROMs.append(untypedMissingROM as! CSMissingROM)
|
|
||||||
}
|
|
||||||
|
|
||||||
requestRoms()
|
requestRoms()
|
||||||
}
|
}
|
||||||
@ -252,7 +249,7 @@ class MachineDocument:
|
|||||||
// TODO: this needs to be threadsafe. FIX!
|
// TODO: this needs to be threadsafe. FIX!
|
||||||
let maximumSamplingRate = CSAudioQueue.preferredSamplingRate()
|
let maximumSamplingRate = CSAudioQueue.preferredSamplingRate()
|
||||||
let selectedSamplingRate = Float64(self.machine.idealSamplingRate(from: NSRange(location: 0, length: NSInteger(maximumSamplingRate))))
|
let selectedSamplingRate = Float64(self.machine.idealSamplingRate(from: NSRange(location: 0, length: NSInteger(maximumSamplingRate))))
|
||||||
let isStereo = self.machine.isStereo()
|
let isStereo = self.machine.isStereo
|
||||||
if selectedSamplingRate > 0 {
|
if selectedSamplingRate > 0 {
|
||||||
// [Re]create the audio queue only if necessary.
|
// [Re]create the audio queue only if necessary.
|
||||||
if self.audioQueue == nil || self.audioQueue.samplingRate != selectedSamplingRate {
|
if self.audioQueue == nil || self.audioQueue.samplingRate != selectedSamplingRate {
|
||||||
@ -284,10 +281,8 @@ class MachineDocument:
|
|||||||
/// Delegate message to receive drag and drop files.
|
/// Delegate message to receive drag and drop files.
|
||||||
final func scanTargetView(_ view: CSScanTargetView, didReceiveFileAt URL: URL) {
|
final func scanTargetView(_ view: CSScanTargetView, didReceiveFileAt URL: URL) {
|
||||||
let mediaSet = CSMediaSet(fileAt: URL)
|
let mediaSet = CSMediaSet(fileAt: URL)
|
||||||
if let mediaSet = mediaSet {
|
|
||||||
mediaSet.apply(to: self.machine)
|
mediaSet.apply(to: self.machine)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// Action for the insert menu command; displays an NSOpenPanel and then segues into the same process
|
/// Action for the insert menu command; displays an NSOpenPanel and then segues into the same process
|
||||||
/// as if a file had been received via drag and drop.
|
/// as if a file had been received via drag and drop.
|
||||||
@ -298,13 +293,11 @@ class MachineDocument:
|
|||||||
if response == .OK {
|
if response == .OK {
|
||||||
for url in openPanel.urls {
|
for url in openPanel.urls {
|
||||||
let mediaSet = CSMediaSet(fileAt: url)
|
let mediaSet = CSMediaSet(fileAt: url)
|
||||||
if let mediaSet = mediaSet {
|
|
||||||
mediaSet.apply(to: self.machine)
|
mediaSet.apply(to: self.machine)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Input Management.
|
// MARK: - Input Management.
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#import "CSStaticAnalyser.h"
|
#import "CSStaticAnalyser.h"
|
||||||
|
|
||||||
@class CSMachine;
|
@class CSMachine;
|
||||||
@protocol CSMachineDelegate
|
@protocol CSMachineDelegate <NSObject>
|
||||||
- (void)machineSpeakerDidChangeInputClock:(nonnull CSMachine *)machine;
|
- (void)machineSpeakerDidChangeInputClock:(nonnull CSMachine *)machine;
|
||||||
- (void)machine:(nonnull CSMachine *)machine led:(nonnull NSString *)led didChangeToLit:(BOOL)isLit;
|
- (void)machine:(nonnull CSMachine *)machine led:(nonnull NSString *)led didChangeToLit:(BOOL)isLit;
|
||||||
- (void)machine:(nonnull CSMachine *)machine ledShouldBlink:(nonnull NSString *)led;
|
- (void)machine:(nonnull CSMachine *)machine ledShouldBlink:(nonnull NSString *)led;
|
||||||
@ -59,7 +59,7 @@ typedef NS_ENUM(NSInteger, CSMachineKeyboardInputMode) {
|
|||||||
- (nullable instancetype)initWithAnalyser:(nonnull CSStaticAnalyser *)result missingROMs:(nullable inout NSMutableArray<CSMissingROM *> *)missingROMs NS_DESIGNATED_INITIALIZER;
|
- (nullable instancetype)initWithAnalyser:(nonnull CSStaticAnalyser *)result missingROMs:(nullable inout NSMutableArray<CSMissingROM *> *)missingROMs NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
- (float)idealSamplingRateFromRange:(NSRange)range;
|
- (float)idealSamplingRateFromRange:(NSRange)range;
|
||||||
- (BOOL)isStereo;
|
@property (readonly, getter=isStereo) BOOL stereo;
|
||||||
- (void)setAudioSamplingRate:(float)samplingRate bufferSize:(NSUInteger)bufferSize stereo:(BOOL)stereo;
|
- (void)setAudioSamplingRate:(float)samplingRate bufferSize:(NSUInteger)bufferSize stereo:(BOOL)stereo;
|
||||||
|
|
||||||
- (void)setView:(nullable CSScanTargetView *)view aspectRatio:(float)aspectRatio;
|
- (void)setView:(nullable CSScanTargetView *)view aspectRatio:(float)aspectRatio;
|
||||||
|
@ -74,7 +74,7 @@ struct ActivityObserver: public Activity::Observer {
|
|||||||
__unsafe_unretained CSMachine *machine;
|
__unsafe_unretained CSMachine *machine;
|
||||||
};
|
};
|
||||||
|
|
||||||
@interface CSMissingROM (Mutability)
|
@interface CSMissingROM (/*Mutability*/)
|
||||||
@property (nonatomic, nonnull, copy) NSString *machineName;
|
@property (nonatomic, nonnull, copy) NSString *machineName;
|
||||||
@property (nonatomic, nonnull, copy) NSString *fileName;
|
@property (nonatomic, nonnull, copy) NSString *fileName;
|
||||||
@property (nonatomic, nullable, copy) NSString *descriptiveName;
|
@property (nonatomic, nullable, copy) NSString *descriptiveName;
|
||||||
@ -82,53 +82,13 @@ struct ActivityObserver: public Activity::Observer {
|
|||||||
@property (nonatomic, copy) NSArray<NSNumber *> *crc32s;
|
@property (nonatomic, copy) NSArray<NSNumber *> *crc32s;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation CSMissingROM {
|
@implementation CSMissingROM
|
||||||
NSString *_machineName;
|
|
||||||
NSString *_fileName;
|
|
||||||
NSString *_descriptiveName;
|
|
||||||
NSUInteger _size;
|
|
||||||
NSArray<NSNumber *> *_crc32s;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)machineName {
|
@synthesize machineName=_machineName;
|
||||||
return _machineName;
|
@synthesize fileName=_fileName;
|
||||||
}
|
@synthesize descriptiveName=_descriptiveName;
|
||||||
|
@synthesize size=_size;
|
||||||
- (void)setMachineName:(NSString *)machineName {
|
@synthesize crc32s=_crc32s;
|
||||||
_machineName = [machineName copy];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)fileName {
|
|
||||||
return _fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setFileName:(NSString *)fileName {
|
|
||||||
_fileName = [fileName copy];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)descriptiveName {
|
|
||||||
return _descriptiveName;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setDescriptiveName:(NSString *)descriptiveName {
|
|
||||||
_descriptiveName = [descriptiveName copy];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSUInteger)size {
|
|
||||||
return _size;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setSize:(NSUInteger)size {
|
|
||||||
_size = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<NSNumber *> *)crc32s {
|
|
||||||
return _crc32s;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setCrc32s:(NSArray<NSNumber *> *)crc32s {
|
|
||||||
_crc32s = [crc32s copy];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)description {
|
- (NSString *)description {
|
||||||
return [NSString stringWithFormat:@"%@/%@, %lu bytes, CRCs: %@", _fileName, _descriptiveName, (unsigned long)_size, _crc32s];
|
return [NSString stringWithFormat:@"%@/%@, %lu bytes, CRCs: %@", _fileName, _descriptiveName, (unsigned long)_size, _crc32s];
|
||||||
@ -179,17 +139,17 @@ struct ActivityObserver: public Activity::Observer {
|
|||||||
CSMissingROM *rom = [[CSMissingROM alloc] init];
|
CSMissingROM *rom = [[CSMissingROM alloc] init];
|
||||||
|
|
||||||
// Copy/convert the primitive fields.
|
// Copy/convert the primitive fields.
|
||||||
rom.machineName = [NSString stringWithUTF8String:missing_rom.machine_name.c_str()];
|
rom.machineName = @(missing_rom.machine_name.c_str());
|
||||||
rom.fileName = [NSString stringWithUTF8String:missing_rom.file_name.c_str()];
|
rom.fileName = @(missing_rom.file_name.c_str());
|
||||||
rom.descriptiveName = missing_rom.descriptive_name.empty() ? nil : [NSString stringWithUTF8String:missing_rom.descriptive_name.c_str()];
|
rom.descriptiveName = missing_rom.descriptive_name.empty() ? nil : @(missing_rom.descriptive_name.c_str());
|
||||||
rom.size = missing_rom.size;
|
rom.size = missing_rom.size;
|
||||||
|
|
||||||
// Convert the CRC list.
|
// Convert the CRC list.
|
||||||
NSMutableArray<NSNumber *> *crc32s = [[NSMutableArray alloc] init];
|
NSMutableArray<NSNumber *> *crc32s = [[NSMutableArray alloc] initWithCapacity:missing_rom.crc32s.size()];
|
||||||
for(const auto &crc : missing_rom.crc32s) {
|
for(const auto &crc : missing_rom.crc32s) {
|
||||||
[crc32s addObject:@(crc)];
|
[crc32s addObject:@(crc)];
|
||||||
}
|
}
|
||||||
rom.crc32s = [crc32s copy];
|
rom.crc32s = crc32s;
|
||||||
|
|
||||||
// Add to the missing list.
|
// Add to the missing list.
|
||||||
[missingROMs addObject:rom];
|
[missingROMs addObject:rom];
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#import "CSStaticAnalyser.h"
|
#import "CSStaticAnalyser.h"
|
||||||
|
|
||||||
@interface CSStaticAnalyser (ResultVector)
|
@interface CSStaticAnalyser ()
|
||||||
|
|
||||||
- (Analyser::Static::TargetList &)targets;
|
- (Analyser::Static::TargetList &)targets;
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@class CSMachine;
|
@class CSMachine;
|
||||||
|
|
||||||
typedef NS_ENUM(NSInteger, CSMachineAppleIIModel) {
|
typedef NS_ENUM(NSInteger, CSMachineAppleIIModel) {
|
||||||
@ -72,7 +74,7 @@ typedef int Kilobytes;
|
|||||||
|
|
||||||
@interface CSStaticAnalyser : NSObject
|
@interface CSStaticAnalyser : NSObject
|
||||||
|
|
||||||
- (instancetype)initWithFileAtURL:(NSURL *)url;
|
- (nullable instancetype)initWithFileAtURL:(NSURL *)url;
|
||||||
|
|
||||||
- (instancetype)initWithElectronDFS:(BOOL)dfs adfs:(BOOL)adfs;
|
- (instancetype)initWithElectronDFS:(BOOL)dfs adfs:(BOOL)adfs;
|
||||||
- (instancetype)initWithAmstradCPCModel:(CSMachineCPCModel)model;
|
- (instancetype)initWithAmstradCPCModel:(CSMachineCPCModel)model;
|
||||||
@ -85,7 +87,7 @@ typedef int Kilobytes;
|
|||||||
- (instancetype)initWithMacintoshModel:(CSMachineMacintoshModel)model;
|
- (instancetype)initWithMacintoshModel:(CSMachineMacintoshModel)model;
|
||||||
- (instancetype)initWithAtariSTModel:(CSMachineAtariSTModel)model;
|
- (instancetype)initWithAtariSTModel:(CSMachineAtariSTModel)model;
|
||||||
|
|
||||||
@property(nonatomic, readonly) NSString *optionsPanelNibName;
|
@property(nonatomic, readonly, nullable) NSString *optionsPanelNibName;
|
||||||
@property(nonatomic, readonly) NSString *displayName;
|
@property(nonatomic, readonly) NSString *displayName;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@ -96,3 +98,5 @@ typedef int Kilobytes;
|
|||||||
- (void)applyToMachine:(CSMachine *)machine;
|
- (void)applyToMachine:(CSMachine *)machine;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
// TODO: could this better be supplied by the analyser? A hypothetical file format might
|
// TODO: could this better be supplied by the analyser? A hypothetical file format might
|
||||||
// provide a better name for it contents than the file name?
|
// provide a better name for it contents than the file name?
|
||||||
_displayName = [[url pathComponents] lastObject];
|
_displayName = [url.lastPathComponent copy];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -140,7 +140,7 @@ class MachinePicker: NSObject {
|
|||||||
|
|
||||||
switch machineSelector!.selectedTabViewItem!.identifier as! String {
|
switch machineSelector!.selectedTabViewItem!.identifier as! String {
|
||||||
case "electron":
|
case "electron":
|
||||||
return CSStaticAnalyser(electronDFS: electronDFSButton!.state == .on, adfs: electronADFSButton!.state == .on)!
|
return CSStaticAnalyser(electronDFS: electronDFSButton!.state == .on, adfs: electronADFSButton!.state == .on)
|
||||||
|
|
||||||
case "appleii":
|
case "appleii":
|
||||||
var model: CSMachineAppleIIModel = .appleII
|
var model: CSMachineAppleIIModel = .appleII
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
@class CSROMReceiverView;
|
@class CSROMReceiverView;
|
||||||
|
|
||||||
@protocol CSROMReciverViewDelegate
|
@protocol CSROMReciverViewDelegate <NSObject>
|
||||||
/*!
|
/*!
|
||||||
Announces receipt of a file by drag and drop to the delegate.
|
Announces receipt of a file by drag and drop to the delegate.
|
||||||
@param view The view making the request.
|
@param view The view making the request.
|
||||||
|
Loading…
Reference in New Issue
Block a user