mirror of
https://github.com/ksherlock/ample.git
synced 2026-01-22 16:16:02 +00:00
Compare commits
114 Commits
release-8
...
hardened_r
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
800087096d | ||
|
|
669e9a16f4 | ||
|
|
7c766ba76e | ||
|
|
c307ab0403 | ||
|
|
7d1e1bf6bd | ||
|
|
9da9f6bd63 | ||
|
|
4144a6ad03 | ||
|
|
76ac6f777a | ||
|
|
6b43c42682 | ||
|
|
67f2c60286 | ||
|
|
cae68c7f5a | ||
|
|
681c70d515 | ||
|
|
7abb2f68a0 | ||
|
|
4c003007f5 | ||
|
|
a5a6222c9f | ||
|
|
058da073ee | ||
|
|
5e0d31a772 | ||
|
|
e958ffe65a | ||
|
|
2b0e6d4d9d | ||
|
|
33d6c651d0 | ||
|
|
0381037356 | ||
|
|
c4c2defc01 | ||
|
|
46fe931103 | ||
|
|
141877f8cb | ||
|
|
e9d348ec71 | ||
|
|
37b085e45f | ||
|
|
7af810d14f | ||
|
|
884f8b190a | ||
|
|
7b55c37128 | ||
|
|
c0534f0107 | ||
|
|
69f56830ca | ||
|
|
b8697d326c | ||
|
|
ef2bbeb9c3 | ||
|
|
3d5a2951bb | ||
|
|
789d61d9f1 | ||
|
|
5ffc85f9fc | ||
|
|
7b67522156 | ||
|
|
f14b291e60 | ||
|
|
576931cd71 | ||
|
|
9ed83bf316 | ||
|
|
751083ea26 | ||
|
|
1b7faf3ac4 | ||
|
|
bfbac2cc20 | ||
|
|
3bf2f63bf6 | ||
|
|
6468ee2629 | ||
|
|
5f84c4b2c1 | ||
|
|
8944c88339 | ||
|
|
3d4d0c92c7 | ||
|
|
e48e2a9223 | ||
|
|
a8e03a9490 | ||
|
|
5e87627251 | ||
|
|
41de913e5f | ||
|
|
5f3c346562 | ||
|
|
d992b6960d | ||
|
|
bc9e156af0 | ||
|
|
9be960bb8e | ||
|
|
f3680e0309 | ||
|
|
2465b38916 | ||
|
|
cafecda333 | ||
|
|
2e6edaba1b | ||
|
|
94dfbc6e3e | ||
|
|
821a84923f | ||
|
|
311a3461f6 | ||
|
|
88c12a4832 | ||
|
|
6ca897739a | ||
|
|
2a0462cc41 | ||
|
|
fe0d690f87 | ||
|
|
ffb76a31f9 | ||
|
|
123a51d52f | ||
|
|
f89c932b77 | ||
|
|
0d13fa7167 | ||
|
|
e1eecac557 | ||
|
|
f8b3a1d882 | ||
|
|
9e5b8d45ca | ||
|
|
e975980a3a | ||
|
|
6177001a4c | ||
|
|
b2907eda08 | ||
|
|
48cdd702be | ||
|
|
2f514a1db3 | ||
|
|
d37fb49781 | ||
|
|
34970cb476 | ||
|
|
9626a6588f | ||
|
|
dc7adde938 | ||
|
|
328ab815fb | ||
|
|
d433920740 | ||
|
|
5d5c477bee | ||
|
|
4676c7c1ba | ||
|
|
760f9e6693 | ||
|
|
5f8b00f021 | ||
|
|
750df30533 | ||
|
|
9a7b5e6af0 | ||
|
|
521d33ba55 | ||
|
|
4c1541a7da | ||
|
|
29cfb6c2a0 | ||
|
|
f74f5aaf11 | ||
|
|
e3edc368fe | ||
|
|
9323151102 | ||
|
|
6acbadb195 | ||
|
|
3a03b2180a | ||
|
|
52d140d07d | ||
|
|
0c7c9e9d1b | ||
|
|
dc5ab08d4b | ||
|
|
c51ae648d9 | ||
|
|
74c67be366 | ||
|
|
bfa371ec0c | ||
|
|
2046eed6f4 | ||
|
|
28b1074da2 | ||
|
|
40336585b3 | ||
|
|
07d0e78d04 | ||
|
|
c88fe397f7 | ||
|
|
e86b5c3236 | ||
|
|
6f8e2d806b | ||
|
|
7286ae4f5a | ||
|
|
7587f8c5ef |
15
.github/workflows/xcodebuild.yml
vendored
Normal file
15
.github/workflows/xcodebuild.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
name: xcodebuild
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: build
|
||||
run: xcodebuild -project "Ample.xcodeproj" -target "Ample Lite" | xcpretty
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,6 +1,9 @@
|
||||
dist
|
||||
embedded/mame64
|
||||
embedded/SDL2.framework
|
||||
embedded/Sparkle.framework
|
||||
embedded/Sparkle-*
|
||||
embedded/SDL2-*
|
||||
build
|
||||
embedded/mame-data.tgz
|
||||
__pycache__
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -26,6 +26,11 @@
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>pty_shell.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>vmnet_helper.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<false/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-only</key>
|
||||
<true/>
|
||||
</dict>
|
||||
|
||||
@@ -11,9 +11,22 @@
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
/* ~/Library/ApplicationSupport/Ample/ */
|
||||
NSURL *SupportDirectory(void);
|
||||
NSString *SupportDirectoryPath(void);
|
||||
|
||||
/* mame executable URL */
|
||||
NSURL *MameURL(void);
|
||||
NSString *MamePath(void);
|
||||
|
||||
/* mame working directory */
|
||||
NSURL *MameWorkingDirectory(void);
|
||||
NSString *MameWorkingDirectoryPath(void);
|
||||
|
||||
NSString *InternString(NSString *key);
|
||||
|
||||
NSDictionary *MameMachine(NSString *machine);
|
||||
|
||||
/* NSUserDefaults keys */
|
||||
extern NSString *kUseCustomMame;
|
||||
extern NSString *kMamePath;
|
||||
@@ -27,4 +40,13 @@ extern NSString *kDownloadExtension;
|
||||
extern NSString *kDefaultDownloadURL;
|
||||
extern NSString *kDefaultDownloadExtension;
|
||||
|
||||
|
||||
@protocol Bookmark <NSObject>
|
||||
-(BOOL)loadBookmark: (NSDictionary *)bookmark;
|
||||
-(BOOL)saveBookmark: (NSMutableDictionary *)bookmark;
|
||||
|
||||
-(void)willLoadBookmark: (NSDictionary *)bookmark;
|
||||
-(void)didLoadBookmark: (NSDictionary *)bookmark;
|
||||
@end
|
||||
|
||||
#endif /* Ample_h */
|
||||
|
||||
@@ -35,6 +35,96 @@ NSString *SupportDirectoryPath(void) {
|
||||
}
|
||||
|
||||
|
||||
NSURL *MameURL(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMamePath];
|
||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
||||
}
|
||||
|
||||
return [bundle URLForAuxiliaryExecutable: @"mame64"];
|
||||
}
|
||||
|
||||
NSString *MamePath(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
|
||||
NSString *path;
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
path = [defaults stringForKey: kMamePath];
|
||||
if ([path length]) return path;
|
||||
}
|
||||
path = [bundle pathForAuxiliaryExecutable: @"mame64"];
|
||||
if ([path length]) return path;
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
NSURL *MameWorkingDirectory(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMameWorkingDirectory];
|
||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
||||
}
|
||||
|
||||
return SupportDirectory();
|
||||
}
|
||||
|
||||
NSString *MameWorkingDirectoryPath(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMameWorkingDirectory];
|
||||
if (![path length]) return path;
|
||||
}
|
||||
|
||||
return SupportDirectoryPath();
|
||||
}
|
||||
|
||||
|
||||
NSDictionary *MameMachine(NSString *machine) {
|
||||
static NSMutableDictionary *cache;
|
||||
|
||||
if (!cache) cache = [NSMutableDictionary new];
|
||||
NSDictionary *d;
|
||||
|
||||
if (!machine) return nil;
|
||||
d = [cache objectForKey: machine];
|
||||
if (d) return d;
|
||||
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSURL *url= [bundle URLForResource: machine withExtension: @"plist"];
|
||||
|
||||
d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
if (d) [cache setObject: d forKey: machine];
|
||||
return d;
|
||||
}
|
||||
|
||||
/* NSCache doesn't retain it's key. This essentially interns it. */
|
||||
/* could just abuse NSSelectorFromString() */
|
||||
NSString *InternString(NSString *key) {
|
||||
static NSMutableSet *storage = nil;
|
||||
|
||||
if (!storage) {
|
||||
storage = [NSMutableSet new];
|
||||
}
|
||||
NSString *copy = [storage member: key];
|
||||
if (!copy) {
|
||||
copy = [key copy];
|
||||
[storage addObject: copy];
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
|
||||
NSString *kUseCustomMame = @"UseCustomMame";
|
||||
NSString *kMamePath = @"MamePath";
|
||||
NSString *kMameWorkingDirectory = @"MameWorkingDirectory";
|
||||
|
||||
26
Ample/AmpleLite.m
Normal file
26
Ample/AmpleLite.m
Normal file
@@ -0,0 +1,26 @@
|
||||
//
|
||||
// AmpleLite.m
|
||||
// Ample Lite
|
||||
//
|
||||
// Created by Kelvin Sherlock on 6/14/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class NSMenuItem;
|
||||
|
||||
@interface SUUpdater : NSObject
|
||||
@end
|
||||
|
||||
@implementation SUUpdater
|
||||
|
||||
- (IBAction)checkForUpdates:(id)sender {
|
||||
}
|
||||
|
||||
|
||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -11,7 +11,9 @@
|
||||
#import "PreferencesWindowController.h"
|
||||
#import "DownloadWindowController.h"
|
||||
#import "DiskImagesWindowController.h"
|
||||
#import "CheatSheetWindowController.h"
|
||||
#import "Transformers.h"
|
||||
#import "BookmarkManager.h"
|
||||
|
||||
#import "LogWindowController.h"
|
||||
|
||||
@@ -25,6 +27,7 @@
|
||||
NSWindowController *_launcher;
|
||||
NSWindowController *_downloader;
|
||||
NSWindowController *_diskImages;
|
||||
NSWindowController *_cheatSheet;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +41,10 @@
|
||||
|
||||
RegisterTransformers();
|
||||
|
||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||
[bm loadBookmarks];
|
||||
[bm updateMenu];
|
||||
|
||||
path = [bundle pathForResource: @"Defaults" ofType: @"plist"];
|
||||
dict = [NSDictionary dictionaryWithContentsOfFile: path];
|
||||
|
||||
@@ -94,10 +101,15 @@
|
||||
@"xfz",
|
||||
path
|
||||
];
|
||||
[task setExecutableURL: [NSURL fileURLWithPath: @"/usr/bin/tar"]];
|
||||
if (@available(macOS 10.13, *)) {
|
||||
[task setExecutableURL: [NSURL fileURLWithPath: @"/usr/bin/tar"]];
|
||||
[task setCurrentDirectoryURL: sd];
|
||||
} else {
|
||||
[task setLaunchPath: @"/usr/bin/tar"];
|
||||
[task setCurrentDirectoryPath: SupportDirectoryPath()];
|
||||
}
|
||||
[task setArguments: argv];
|
||||
[task setCurrentDirectoryURL: sd];
|
||||
|
||||
|
||||
|
||||
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
|
||||
[task setTerminationHandler: ^(NSTask *task){
|
||||
@@ -179,6 +191,14 @@
|
||||
}
|
||||
[_diskImages showWindow: sender];
|
||||
}
|
||||
|
||||
- (IBAction)displayCheatSheet:(id)sender {
|
||||
if (!_cheatSheet) {
|
||||
_cheatSheet = [CheatSheetWindowController new];
|
||||
}
|
||||
[_cheatSheet showWindow: sender];
|
||||
}
|
||||
|
||||
- (IBAction)displaySupportDirectory:(id)sender {
|
||||
NSURL *url = SupportDirectory();
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
@@ -191,4 +211,21 @@
|
||||
[ws openURL: url];
|
||||
}
|
||||
|
||||
- (IBAction)mameAppleWiki:(id)sender {
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
|
||||
NSURL *url = [NSURL URLWithString: @"https://wiki.mamedev.org/index.php/Driver:Apple_II"];
|
||||
[ws openURL: url];
|
||||
}
|
||||
|
||||
- (IBAction)mameMac68kWiki:(id)sender {
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
|
||||
NSURL *url = [NSURL URLWithString: @"https://wiki.mamedev.org/index.php/Driver:Mac_68K"];
|
||||
[ws openURL: url];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
42
Ample/AutocompleteControl.h
Normal file
42
Ample/AutocompleteControl.h
Normal file
@@ -0,0 +1,42 @@
|
||||
//
|
||||
// AutocompleteControl.h
|
||||
// Autocomplete
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/20/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class AutocompleteControl;
|
||||
|
||||
@protocol AutocompleteItem
|
||||
-(NSString *)menuTitle;
|
||||
-(NSAttributedString *)menuAttributedTitle; //?? can it still handle color?
|
||||
-(BOOL)menuEnabled;
|
||||
-(BOOL)menuIsHeader;
|
||||
@end
|
||||
|
||||
|
||||
@protocol AutoCompleteDelegate
|
||||
|
||||
-(NSArray<id<AutocompleteItem>> *)autocomplete: (AutocompleteControl *)control completionsForString: (NSString *)string;
|
||||
-(NSArray<id<AutocompleteItem>> *)autocomplete: (AutocompleteControl *)control completionsForItem: (id<AutocompleteItem>)item;
|
||||
|
||||
@end
|
||||
|
||||
@interface AutocompleteControl : NSSearchField
|
||||
|
||||
@property NSInteger minWidth;
|
||||
@property NSInteger maxDisplayItems;
|
||||
@property (nullable, weak) id<AutoCompleteDelegate> autocompleteDelegate;
|
||||
|
||||
-(void)invalidate;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
885
Ample/AutocompleteControl.m
Normal file
885
Ample/AutocompleteControl.m
Normal file
@@ -0,0 +1,885 @@
|
||||
//
|
||||
// AutocompleteControl.m
|
||||
// Autocomplete
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/20/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "AutocompleteControl.h"
|
||||
#include <wctype.h>
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Todo --
|
||||
- when there is a value, can filter the list by only including header items and the selected value
|
||||
- draw inactive menu items
|
||||
- when menu is hidden then text is manually deleted (not esc canceled), then down/up arrow the list needs to update.
|
||||
- eliminate nib and do it manually.
|
||||
- when menus is too tall, macos moves it to the top of the screen.
|
||||
- 1. it's not moved someplace more appropriate when the size shrinks
|
||||
- 2. it should display to the left or right in that case.
|
||||
- need to know parent's frame.
|
||||
|
||||
- fuzzy search - minimum distance between letters?
|
||||
*/
|
||||
|
||||
|
||||
@interface ACMenuView : NSView
|
||||
@property (nonatomic) NSArray<id<AutocompleteItem>> *items;
|
||||
|
||||
@property (weak) AutocompleteControl *parent;
|
||||
|
||||
-(void)reset;
|
||||
-(void)reset: (id<AutocompleteItem>)value;
|
||||
-(void)setItems:(NSArray<id<AutocompleteItem>> *)items;
|
||||
-(void)setItems:(NSArray<id<AutocompleteItem>> *)items value: (id<AutocompleteItem>)value;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface AutocompleteControl ()
|
||||
{
|
||||
IBOutlet NSPanel *_panel;
|
||||
__weak IBOutlet ACMenuView *_menuView;
|
||||
__weak IBOutlet NSScrollView *_scrollView;
|
||||
|
||||
id<AutocompleteItem> _value;
|
||||
BOOL _editing;
|
||||
BOOL _dirty;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface AutocompleteControl (SearchField) <NSSearchFieldDelegate>
|
||||
-(void)fixTextColor: (BOOL)editing;
|
||||
@end
|
||||
|
||||
@implementation AutocompleteControl
|
||||
|
||||
-(void)_init {
|
||||
|
||||
[self setDelegate: self];
|
||||
[self setPlaceholderString: @""];
|
||||
[(NSSearchFieldCell *)[self cell] setSearchButtonCell: nil];
|
||||
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSNib *nib = [[NSNib alloc] initWithNibNamed: @"Autocomplete" bundle: bundle];
|
||||
|
||||
NSArray *topLevel = nil;
|
||||
[nib instantiateWithOwner: self topLevelObjects: &topLevel];
|
||||
|
||||
[_panel setMovable: NO];
|
||||
[_panel setBecomesKeyOnlyIfNeeded: YES];
|
||||
[_menuView setParent: self];
|
||||
}
|
||||
|
||||
-(id)initWithFrame:(NSRect)frameRect {
|
||||
if ((self = [super initWithFrame: frameRect])) {
|
||||
[self _init];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(id)initWithCoder:(NSCoder *)coder {
|
||||
if ((self = [super initWithCoder: coder])) {
|
||||
[self _init];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#if 0
|
||||
-(NSString *)stringValue {
|
||||
return [super stringValue];
|
||||
}
|
||||
#endif
|
||||
|
||||
-(id)objectValue {
|
||||
return _value;
|
||||
}
|
||||
|
||||
-(void)setStringValue:(NSString *)stringValue {
|
||||
[super setStringValue: stringValue ? stringValue : @""];
|
||||
if (_value && [[_value menuTitle] isEqualToString: stringValue] == NO) {
|
||||
// post change notification?
|
||||
_value = nil;
|
||||
[_menuView reset];
|
||||
}
|
||||
|
||||
[self fixTextColor: _editing];
|
||||
// todo -- search for a matching item, update text color.
|
||||
}
|
||||
|
||||
// todo -- _menuView has second copy of value, need to update that.
|
||||
-(void)setObjectValue:(id)objectValue {
|
||||
if (_value == objectValue) return;
|
||||
if (![objectValue conformsToProtocol: @protocol(AutocompleteItem)]) {
|
||||
_value = nil;
|
||||
[_menuView reset];
|
||||
[super setStringValue: @""];
|
||||
[self fixTextColor: _editing];
|
||||
return;
|
||||
}
|
||||
_value = objectValue;
|
||||
if (!_value) [super setStringValue: @""]; //
|
||||
else {
|
||||
[super setStringValue: [_value menuTitle]];
|
||||
[_menuView reset: _value];
|
||||
// TODO -- menu view currently uses text search.
|
||||
//NSArray *array = [_autocompleteDelegate autocomplete: self completionsForItem: _value];
|
||||
//[_menuView setItems: array value: _value];
|
||||
}
|
||||
[self fixTextColor: NO];
|
||||
}
|
||||
|
||||
-(BOOL)valid {
|
||||
return _value != nil;
|
||||
}
|
||||
|
||||
|
||||
-(void)hideSuggestions: (id)sender {
|
||||
|
||||
if (![_panel isVisible]) return;
|
||||
|
||||
NSWindow *window = [self window];
|
||||
|
||||
[window removeChildWindow: _panel];
|
||||
[_panel orderOut: sender];
|
||||
|
||||
}
|
||||
|
||||
-(void)showSuggestions: (id)sender {
|
||||
|
||||
if ([_panel isVisible]) return;
|
||||
NSWindow *window = [self window];
|
||||
|
||||
NSRect wFrame = [_panel frame];
|
||||
NSRect vFrame = [self frame];
|
||||
|
||||
NSRect rect = { .origin = vFrame.origin, .size = wFrame.size };
|
||||
rect = [window convertRectToScreen:rect];
|
||||
|
||||
rect.origin.y -= wFrame.size.height + 4;
|
||||
rect.size.width = MAX(vFrame.size.width, _minWidth);
|
||||
// todo - min width option.
|
||||
[_panel setFrame: rect display: YES];
|
||||
|
||||
//[_panel setFrameOrigin: rect.origin];
|
||||
[window addChildWindow: _panel ordered: NSWindowAbove];
|
||||
}
|
||||
|
||||
-(void)updateSuggestions {
|
||||
|
||||
if (!_autocompleteDelegate) return;
|
||||
NSString *needle = [self stringValue];
|
||||
|
||||
NSArray *items = [_autocompleteDelegate autocomplete: self completionsForString: needle];
|
||||
|
||||
[_menuView setItems: items];
|
||||
if ([items count]) {
|
||||
[self showSuggestions: nil];
|
||||
} else {
|
||||
[self hideSuggestions: nil];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)invalidate {
|
||||
|
||||
if (!_autocompleteDelegate) return;
|
||||
|
||||
NSArray *items = nil;
|
||||
|
||||
/* if there is an object value, try to retain it. */
|
||||
if (_value) {
|
||||
|
||||
[_menuView reset];
|
||||
items = [_autocompleteDelegate autocomplete: self completionsForItem: _value];
|
||||
if (items) {
|
||||
[_menuView setItems: items];
|
||||
return;
|
||||
}
|
||||
_value = nil;
|
||||
[self invoke];
|
||||
}
|
||||
NSString *needle = [self stringValue];
|
||||
|
||||
if ([needle length]) {
|
||||
_dirty = YES;
|
||||
}
|
||||
// if only 1 match, auto-set value?
|
||||
items = [_autocompleteDelegate autocomplete: self completionsForString: needle];
|
||||
[self fixTextColor: _editing];
|
||||
[_menuView setItems: items];
|
||||
}
|
||||
|
||||
|
||||
// prevent action messages from the search field/cell.
|
||||
-(BOOL)sendAction:(SEL)action to:(id)target {
|
||||
if (action == [self action] && target == [self target]) return NO;
|
||||
return [super sendAction: action to: target];
|
||||
|
||||
}
|
||||
|
||||
-(void)invoke {
|
||||
_dirty = NO;
|
||||
[super sendAction: [self action] to: [self target]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation AutocompleteControl (SearchField)
|
||||
|
||||
-(void)fixTextColor: (BOOL)editing {
|
||||
NSColor *color = editing || _value ? [NSColor controlTextColor] : [NSColor systemRedColor];
|
||||
[self setTextColor: color];
|
||||
}
|
||||
|
||||
- (void)controlTextDidChange:(NSNotification *)notification {
|
||||
//NSLog(@"controlTextDidChange");
|
||||
|
||||
if (_value) {
|
||||
_dirty = YES;
|
||||
_value = nil;
|
||||
}
|
||||
|
||||
NSString *s = [self stringValue];
|
||||
if ([s length]) {
|
||||
[self updateSuggestions];
|
||||
} else {
|
||||
_dirty = YES;
|
||||
_value = nil;
|
||||
[_menuView reset];
|
||||
[_menuView setItems: nil];
|
||||
[self hideSuggestions: nil];
|
||||
[self invoke];
|
||||
}
|
||||
}
|
||||
- (void)controlTextDidBeginEditing:(NSNotification *)obj {
|
||||
//NSLog(@"controlTextDidBeginEditing");
|
||||
|
||||
_editing = YES;
|
||||
_dirty = NO;
|
||||
[self fixTextColor: YES];
|
||||
}
|
||||
|
||||
|
||||
|
||||
- (void)controlTextDidEndEditing:(NSNotification *)obj {
|
||||
//NSLog(@"controlTextDidEndEditing");
|
||||
|
||||
_editing = NO;
|
||||
|
||||
[self hideSuggestions: nil];
|
||||
|
||||
if (_dirty) {
|
||||
_value = nil;
|
||||
[self invoke];
|
||||
}
|
||||
[self fixTextColor: NO];
|
||||
}
|
||||
|
||||
|
||||
-(BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor {
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor {
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(void)selectItem:(id<AutocompleteItem>)item withSelector:(SEL)selector {
|
||||
|
||||
// for newline/mousedown, will still retain focus after updating
|
||||
// so we need to invalidate the value if it's edited further.
|
||||
if (selector == @selector(insertNewline:) || selector == @selector(mouseDown:) || selector == @selector(insertTab:)) {
|
||||
|
||||
_value = item;
|
||||
NSString *str = [item menuTitle];
|
||||
|
||||
[super setStringValue: str];
|
||||
|
||||
[self hideSuggestions: nil];
|
||||
|
||||
NSText *fieldEditor = [self currentEditor];
|
||||
//[fieldEditor setSelectedRange: NSMakeRange([str length], 0)];
|
||||
[fieldEditor setSelectedRange: NSMakeRange(0, [str length])];
|
||||
|
||||
[self invoke];
|
||||
|
||||
// need to invalidate the menu so it reloads
|
||||
|
||||
|
||||
#if 0
|
||||
NSArray *array = [_autocompleteDelegate autocomplete: self completionsForItem: _value];
|
||||
[_menuView setItems: array];
|
||||
#else
|
||||
[_menuView setItems: nil];
|
||||
#endif
|
||||
|
||||
//NSLog(@"selectItem:withSelector:");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
|
||||
|
||||
if (commandSelector == @selector(moveUp:)) {
|
||||
//[self showSuggestions: nil];
|
||||
if ([_panel isVisible]) {
|
||||
[_menuView moveUp: textView];
|
||||
} else {
|
||||
[self updateSuggestions];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
if (commandSelector == @selector(moveDown:)) {
|
||||
//[self showSuggestions: nil];
|
||||
if ([_panel isVisible]) {
|
||||
[_menuView moveDown: textView];
|
||||
} else {
|
||||
[self updateSuggestions];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
if (commandSelector == @selector(insertNewline:)) {
|
||||
if ([_panel isVisible])
|
||||
[_menuView insertNewline: textView];
|
||||
return YES;
|
||||
}
|
||||
|
||||
if (commandSelector == @selector(insertTab:)) {
|
||||
if ([_panel isVisible])
|
||||
[_menuView insertTab: textView];
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (commandSelector == @selector(complete:)) {
|
||||
if ([_panel isVisible]) {
|
||||
[self hideSuggestions: nil];
|
||||
} else {
|
||||
[self updateSuggestions];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// esc ?
|
||||
// if panel open, hide
|
||||
// if panel closed, delete.
|
||||
if (commandSelector == @selector(cancelOperation:)) {
|
||||
|
||||
if ([_panel isVisible]) {
|
||||
[self hideSuggestions: nil];
|
||||
} else {
|
||||
_value = nil;
|
||||
[super setStringValue: @""];
|
||||
|
||||
[self hideSuggestions: nil];
|
||||
[_menuView reset];
|
||||
//[_menuView setItems: _completions];
|
||||
// sigh...
|
||||
#if 0
|
||||
NSArray *items =[_autocompleteDelegate autocomplete: self completionsForString: @""];
|
||||
[_menuView setItems: items];
|
||||
#endif
|
||||
[self invoke];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
if (commandSelector == @selector(scrollPageDown:)) {
|
||||
if ([_panel isVisible]) {
|
||||
[_menuView scrollPageDown: textView];
|
||||
} else {
|
||||
[self updateSuggestions];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
if (commandSelector == @selector(scrollPageUp:)) {
|
||||
if ([_panel isVisible]) {
|
||||
[_menuView scrollPageUp: textView];
|
||||
} else {
|
||||
[self updateSuggestions];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
//NSLog(@"%@", NSStringFromSelector(commandSelector));
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface ACMenuView () {
|
||||
id<AutocompleteItem> _value;
|
||||
NSInteger _index;
|
||||
NSInteger _count;
|
||||
NSArray<id<AutocompleteItem>> *_items;
|
||||
NSTrackingArea *_trackingArea;
|
||||
NSColor *_backgroundColor;
|
||||
NSColor *_selectedColor;
|
||||
BOOL _tracking;
|
||||
BOOL _clipped;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation ACMenuView
|
||||
|
||||
#define MENU_FONT_SIZE 11
|
||||
#define MENU_HEIGHT 14
|
||||
#define MARGIN_TOP 0 //6
|
||||
#define MARGIN_BOTTOM 0 //6
|
||||
#define INDENT 7
|
||||
#define HEADER_INDENT 7
|
||||
#define MAX_DISPLAY_ITEMS 16
|
||||
|
||||
|
||||
-(void)_init {
|
||||
_backgroundColor = [NSColor windowBackgroundColor];
|
||||
if (@available(macOS 10.14, *)) {
|
||||
_selectedColor = [NSColor selectedContentBackgroundColor];
|
||||
} else {
|
||||
_selectedColor = [NSColor selectedTextBackgroundColor];
|
||||
}
|
||||
NSTrackingAreaOptions options = NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveInActiveApp;
|
||||
_trackingArea = [[NSTrackingArea alloc] initWithRect: NSZeroRect
|
||||
options: options
|
||||
owner: self
|
||||
userInfo: nil];
|
||||
|
||||
[self addTrackingArea: _trackingArea];
|
||||
}
|
||||
|
||||
-(id)initWithCoder:(NSCoder *)coder {
|
||||
if ((self = [super initWithCoder: coder])) {
|
||||
[self _init];
|
||||
}
|
||||
return self;
|
||||
|
||||
}
|
||||
|
||||
-(BOOL)isFlipped {
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(BOOL)acceptsFirstMouse:(NSEvent *)event {
|
||||
return YES;
|
||||
}
|
||||
|
||||
static CGFloat HeightForItems(NSUInteger count) {
|
||||
return count * MENU_HEIGHT;
|
||||
}
|
||||
|
||||
-(NSSize)intrinsicContentSize {
|
||||
return NSMakeSize(NSViewNoIntrinsicMetric, _count * MENU_HEIGHT + MARGIN_TOP + MARGIN_BOTTOM);
|
||||
}
|
||||
|
||||
- (NSSize)sizeThatFits:(NSSize)size {
|
||||
size.height = _count * MENU_HEIGHT + MARGIN_TOP + MARGIN_BOTTOM;
|
||||
return size;
|
||||
}
|
||||
|
||||
- (void)sizeToFit {
|
||||
NSSize size = [self frame].size;
|
||||
size.height = _count * MENU_HEIGHT + MARGIN_TOP + MARGIN_BOTTOM;
|
||||
[self setFrameSize: size];
|
||||
[self setNeedsDisplay: YES];
|
||||
}
|
||||
|
||||
-(void)reset {
|
||||
[self invalidateRow: _index];
|
||||
_index = -1;
|
||||
_value = nil;
|
||||
_items = nil;
|
||||
}
|
||||
|
||||
-(void)reset: (id<AutocompleteItem>)value {
|
||||
[self invalidateRow: _index];
|
||||
_index = -1;
|
||||
_items = nil;
|
||||
_value = value;
|
||||
}
|
||||
|
||||
-(void)setItems:(NSArray *)items value: (id<AutocompleteItem> )value {
|
||||
if (_items == items && _value == value) return;
|
||||
_items = [items copy];
|
||||
_index = -1;
|
||||
_count = [items count];
|
||||
_value = value;
|
||||
|
||||
if (!_items) {
|
||||
_value = nil;
|
||||
return;
|
||||
}
|
||||
|
||||
// also check enabled status....
|
||||
if (_value) {
|
||||
_index = [_items indexOfObject: _value];
|
||||
if (_index == NSNotFound) {
|
||||
_index = -1;
|
||||
_value = nil;
|
||||
}
|
||||
}
|
||||
|
||||
// if only 1 entry, auto-select it.
|
||||
if (!_value) {
|
||||
NSInteger count = -1;
|
||||
for (id<AutocompleteItem> item in _items) {
|
||||
++count;
|
||||
if ([item menuIsHeader]) continue;
|
||||
if (_value) {
|
||||
_value = nil;
|
||||
_index = -1;
|
||||
break;
|
||||
}
|
||||
_value = item;
|
||||
_index = count;
|
||||
}
|
||||
}
|
||||
|
||||
NSInteger displayCount = MIN(_count, MAX_DISPLAY_ITEMS);
|
||||
CGFloat newHeight = HeightForItems(displayCount) + 8 ; // 4px top/bottom
|
||||
NSWindow *window = [self window];
|
||||
NSRect wFrame = [window frame];
|
||||
|
||||
NSRect contentRect = [[[self enclosingScrollView] contentView] frame];
|
||||
|
||||
//NSSize size = [self intrinsicContentSize];
|
||||
//NSInteger minWidth = [_parent minWidth];
|
||||
//size.width = MAX(wFrame.size.width, minWidth);
|
||||
//size.height += 8;
|
||||
|
||||
CGFloat delta = wFrame.size.height - newHeight;
|
||||
|
||||
wFrame.origin.y += delta;
|
||||
wFrame.size.height = newHeight;
|
||||
|
||||
_clipped = (_count > displayCount);
|
||||
|
||||
[self setFrameSize: NSMakeSize(contentRect.size.width /*- 15.0*/, HeightForItems(_count))];
|
||||
[self setNeedsDisplay: YES];
|
||||
[window setFrame: wFrame display: YES];
|
||||
|
||||
if (_value) {
|
||||
[self scrollToRow: _index position: ScrollToCenter force: NO];
|
||||
} else {
|
||||
[self scrollToRow: 0 position: ScrollToTop force: YES];
|
||||
}
|
||||
|
||||
//[self sizeToFit];
|
||||
//[[self window] setContentSize: [self frame].size];
|
||||
|
||||
//NSLog(@"%@", NSStringFromRect(wFrame));
|
||||
}
|
||||
|
||||
-(void)setItems:(NSArray<id<AutocompleteItem>> *)items {
|
||||
|
||||
if (_items == items) return;
|
||||
[self setItems: items value: _value];
|
||||
}
|
||||
|
||||
|
||||
|
||||
-(id<AutocompleteItem>)itemAtPoint: (NSPoint)point indexPtr: (NSInteger *)indexPtr {
|
||||
|
||||
NSInteger index = floor(point.y / MENU_HEIGHT);
|
||||
if (index < 0 || index >= _count) return nil;
|
||||
if (indexPtr) *indexPtr = index;
|
||||
return [_items objectAtIndex: index];
|
||||
}
|
||||
|
||||
enum {
|
||||
ScrollToTop,
|
||||
ScrollToBottom,
|
||||
ScrollToCenter,
|
||||
};
|
||||
|
||||
-(void)scrollToRow: (NSInteger)row position: (unsigned)position force: (BOOL)force {
|
||||
if (row < 0) return;
|
||||
if (!_clipped) return;
|
||||
|
||||
NSScrollView *scrollView = [self enclosingScrollView];
|
||||
NSClipView *clipView = [scrollView contentView];
|
||||
|
||||
NSRect visibleRect = [self visibleRect];
|
||||
if (!force) {
|
||||
NSRect mRect = NSMakeRect(0, row * MENU_HEIGHT, 1 , MENU_HEIGHT);
|
||||
if (NSContainsRect(visibleRect, mRect)) return;
|
||||
}
|
||||
|
||||
NSInteger topRow = row;
|
||||
switch (position) {
|
||||
case ScrollToTop:
|
||||
break;
|
||||
case ScrollToBottom:
|
||||
topRow -= MAX_DISPLAY_ITEMS -1;
|
||||
break;
|
||||
case ScrollToCenter:
|
||||
topRow -= MAX_DISPLAY_ITEMS/2 - 1;
|
||||
break;
|
||||
}
|
||||
if (topRow < 0) topRow = 0;
|
||||
if (topRow > _count - MAX_DISPLAY_ITEMS)
|
||||
topRow = _count - MAX_DISPLAY_ITEMS;
|
||||
NSPoint point = NSMakePoint(0, topRow * MENU_HEIGHT);
|
||||
|
||||
//[self scrollClipView: clipView toPoint: point];
|
||||
[clipView scrollToPoint: point];
|
||||
[scrollView reflectScrolledClipView: clipView];
|
||||
|
||||
}
|
||||
|
||||
|
||||
-(void)moveUp:(id)sender {
|
||||
if (_count == 0 || _index <= 0) return;
|
||||
|
||||
NSInteger index = 0;
|
||||
id<AutocompleteItem> value = nil;
|
||||
for (index = _index - 1; index >= 0; --index) {
|
||||
value = [_items objectAtIndex: index];
|
||||
if ([value menuIsHeader]) continue;
|
||||
if (![value menuEnabled]) continue;
|
||||
break;
|
||||
}
|
||||
if (index < 0) return;
|
||||
if (index == _index) return;
|
||||
[self invalidateRow: _index];
|
||||
[self invalidateRow: index];
|
||||
|
||||
_index = index;
|
||||
_value = value;
|
||||
[self scrollToRow: index position: ScrollToTop force: NO];
|
||||
[_parent selectItem: _value withSelector: _cmd];
|
||||
}
|
||||
|
||||
-(void)moveDown:(id)sender {
|
||||
|
||||
// _index -1 selects first item.
|
||||
if (_count == 0 || _index == _count - 1) return;
|
||||
|
||||
NSInteger index = 0;
|
||||
id<AutocompleteItem> value = nil;
|
||||
for (index = _index + 1; index < _count ; ++index) {
|
||||
value = [_items objectAtIndex: index];
|
||||
if ([value menuIsHeader]) continue;
|
||||
if (![value menuEnabled]) continue;
|
||||
break;
|
||||
}
|
||||
if (index == _count) return;
|
||||
if (index == _index) return;
|
||||
[self invalidateRow: _index];
|
||||
[self invalidateRow: index];
|
||||
|
||||
_index = index;
|
||||
_value = value;
|
||||
|
||||
[self scrollToRow: index position: ScrollToBottom force: NO];
|
||||
[_parent selectItem: _value withSelector: _cmd];
|
||||
}
|
||||
|
||||
-(void)scrollPageUp:(id)sender {
|
||||
if (_count == 0 || _index <= 0) return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
-(void)scrollPageDown:(id)sender {
|
||||
if (_count == 0 || _index == _count - 1) return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
-(void)insertNewline:(id)sender {
|
||||
if (_value) {
|
||||
[_parent selectItem: _value withSelector: _cmd];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)insertTab:(id)sender {
|
||||
// if only one option, autocomplete?
|
||||
if (_value) {
|
||||
[_parent selectItem: _value withSelector: _cmd];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)mouseMoved:(NSEvent *)event {
|
||||
//NSLog(@"mouse moved");
|
||||
|
||||
if (!_tracking) return;
|
||||
|
||||
NSPoint p = [event locationInWindow];
|
||||
p = [self convertPoint: p fromView: nil];
|
||||
|
||||
|
||||
NSInteger index;
|
||||
id<AutocompleteItem> value = [self itemAtPoint: p indexPtr: &index];
|
||||
if (!value) return;
|
||||
if (index == _index) return;
|
||||
if ([value menuIsHeader]) return;
|
||||
if (![value menuEnabled]) return;
|
||||
|
||||
[self invalidateRow: _index];
|
||||
[self invalidateRow: index];
|
||||
|
||||
_index = index;
|
||||
_value = value;
|
||||
[_parent selectItem: _value withSelector: _cmd];
|
||||
}
|
||||
-(void)mouseDown:(NSEvent *)event {
|
||||
if (!_tracking) return;
|
||||
|
||||
NSPoint p = [event locationInWindow];
|
||||
p = [self convertPoint: p fromView: nil];
|
||||
|
||||
NSInteger index;
|
||||
id<AutocompleteItem> value = [self itemAtPoint: p indexPtr: &index];
|
||||
if (!value) return;
|
||||
if (index != _index) {
|
||||
if ([value menuIsHeader]) return;
|
||||
if (![value menuEnabled]) return;
|
||||
|
||||
[self invalidateRow: _index];
|
||||
[self invalidateRow: index];
|
||||
|
||||
_index = index;
|
||||
_value = value;
|
||||
}
|
||||
|
||||
[_parent selectItem: _value withSelector: _cmd];
|
||||
}
|
||||
|
||||
-(void)mouseEntered:(NSEvent *)event {
|
||||
//NSLog(@"mouse entered");
|
||||
_tracking = YES;
|
||||
|
||||
}
|
||||
-(void)mouseExited:(NSEvent *)event {
|
||||
//NSLog(@"mouse exited");
|
||||
|
||||
_tracking = NO;
|
||||
}
|
||||
|
||||
-(void)invalidateRow:(NSInteger)row {
|
||||
if (row < 0 || row >= _count) return;
|
||||
|
||||
NSRect r = NSZeroRect;
|
||||
NSRect bounds = [self bounds];
|
||||
|
||||
r.size.width = bounds.size.width;
|
||||
r.size.height = MENU_HEIGHT;
|
||||
r.origin.y = MENU_HEIGHT * row + MARGIN_TOP;
|
||||
//NSLog(@"Invalidating %ld - %@", row, NSStringFromRect(r));
|
||||
[self setNeedsDisplayInRect: r];
|
||||
}
|
||||
|
||||
|
||||
static void DrawString(NSString *str, NSDictionary *attr, CGRect rect) {
|
||||
|
||||
NSSize size = [str sizeWithAttributes: attr];
|
||||
if (size.width <= rect.size.width) {
|
||||
[str drawInRect: rect withAttributes: attr];
|
||||
return;
|
||||
}
|
||||
NSMutableString *mstr = [str mutableCopy];
|
||||
// binary search is probably the best way to handle it :/
|
||||
NSInteger l = [mstr length];
|
||||
while (l > 2) {
|
||||
[mstr replaceCharactersInRange: NSMakeRange(l-2, 2) withString: @"…"];
|
||||
--l;
|
||||
size = [mstr sizeWithAttributes: attr];
|
||||
if (size.width <= rect.size.width) {
|
||||
[mstr drawInRect: rect withAttributes: attr];
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(void)drawItem: (id<AutocompleteItem>)item inRect: (NSRect)rect {
|
||||
NSColor *textColor = [NSColor textColor];
|
||||
if (!item) return;
|
||||
|
||||
if (item == _value) {
|
||||
textColor = [NSColor selectedMenuItemTextColor];
|
||||
[_selectedColor setFill];
|
||||
NSRectFill(rect);
|
||||
}
|
||||
NSString *string = [item menuTitle];
|
||||
|
||||
if ([item menuIsHeader]) {
|
||||
textColor = [NSColor secondaryLabelColor];
|
||||
NSDictionary *attr = @{
|
||||
NSForegroundColorAttributeName: textColor,
|
||||
NSFontAttributeName: [NSFont systemFontOfSize: MENU_FONT_SIZE], // [NSFont boldSystemFontOfSize: 13],
|
||||
};
|
||||
NSRect r = NSInsetRect(rect, HEADER_INDENT, 0);
|
||||
DrawString(string, attr, r);
|
||||
} else {
|
||||
|
||||
NSDictionary *attr = @{
|
||||
NSForegroundColorAttributeName: textColor,
|
||||
NSFontAttributeName: [NSFont systemFontOfSize: MENU_FONT_SIZE],
|
||||
};
|
||||
NSRect r = NSInsetRect(rect, INDENT, 0);
|
||||
r.origin.x += INDENT;
|
||||
r.size.width -= INDENT;
|
||||
DrawString(string, attr, r);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)drawRect:(NSRect)dirtyRect {
|
||||
[super drawRect:dirtyRect];
|
||||
|
||||
NSRect r = [self bounds];
|
||||
NSInteger begin = floor((NSMinY(dirtyRect) - MARGIN_TOP) / MENU_HEIGHT);
|
||||
NSInteger end = ceil((NSMaxY(dirtyRect) - MARGIN_TOP) / MENU_HEIGHT);
|
||||
if (begin < 0) begin = 0;
|
||||
if (end > _count) end = _count;
|
||||
|
||||
|
||||
r.origin.y = MENU_HEIGHT * begin + MARGIN_TOP;
|
||||
r.size.height = MENU_HEIGHT;
|
||||
for (NSInteger index = begin; index < end; ++index) {
|
||||
id<AutocompleteItem> item = [_items objectAtIndex: index];
|
||||
[self drawItem: item inRect: r];
|
||||
r.origin.y += MENU_HEIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
/* custom scroller that doesn't draw a background. */
|
||||
@interface ACScroller : NSScroller
|
||||
@end
|
||||
|
||||
@implementation ACScroller
|
||||
|
||||
|
||||
-(void)drawRect:(NSRect)dirtyRect {
|
||||
//[[NSColor windowBackgroundColor] set];
|
||||
[[NSColor clearColor] set];
|
||||
NSRectFill(dirtyRect);
|
||||
[self drawKnob];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface ACPanel : NSPanel
|
||||
@end
|
||||
|
||||
@implementation ACPanel
|
||||
|
||||
/* needed to prevent the pop-up child window from being moved when offscreen. */
|
||||
- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen {
|
||||
return frameRect;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
55
Ample/Base.lproj/Autocomplete.xib
Normal file
55
Ample/Base.lproj/Autocomplete.xib
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="AutocompleteControl">
|
||||
<connections>
|
||||
<outlet property="_menuView" destination="F2h-9b-Ouu" id="min-gE-sma"/>
|
||||
<outlet property="_panel" destination="OYW-cj-FD5" id="DYJ-rN-6Ep"/>
|
||||
<outlet property="_scrollView" destination="VQ6-PE-hTH" id="iKA-Ps-nkl"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="OYW-cj-FD5" customClass="ACPanel">
|
||||
<windowStyleMask key="styleMask" utility="YES" nonactivatingPanel="YES" fullSizeContentView="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="272" y="172" width="300" height="400"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" id="3pz-HL-mV1">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="400"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="0.0" horizontalPageScroll="0.0" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="VQ6-PE-hTH">
|
||||
<rect key="frame" x="0.0" y="4" width="300" height="392"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="HWy-NN-aOV">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="392"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view id="F2h-9b-Ouu" customClass="ACMenuView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="392"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Az6-1a-Hei">
|
||||
<rect key="frame" x="-100" y="-100" width="168" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="tng-g2-1LZ" customClass="ACScroller">
|
||||
<rect key="frame" x="285" y="0.0" width="15" height="392"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="127" y="73"/>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
||||
29
Ample/Base.lproj/CheatSheet.xib
Normal file
29
Ample/Base.lproj/CheatSheet.xib
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="CheatSheetWindowController">
|
||||
<connections>
|
||||
<outlet property="window" destination="QvC-M9-y7g" id="U2v-sN-OzH"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Keyboard Cheat Sheet" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="640" height="640"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="640" height="640"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="u4H-aq-RE2"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="42" y="198"/>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
||||
@@ -33,6 +33,15 @@ Please note that MAME is a registered trademark of Gregory Ember, and permission
|
||||
\cf0 \cb1 \kerning1\expnd0\expndtw0 SDL 2.0 is distributed under the {\field{\*\fldinst{HYPERLINK "https://libsdl.org/license.php"}}{\fldrslt zlib license}}. This license allows you to use SDL freely in any software.\
|
||||
\
|
||||
\pard\pardeftab720\qc\partightenfactor0
|
||||
{\field{\*\fldinst{HYPERLINK "https://sparkle-project.org/"}}{\fldrslt
|
||||
\f0\b\fs36 \cf0 \cb3 \expnd0\expndtw0\kerning0
|
||||
Sparkle}}\
|
||||
\pard\pardeftab720\partightenfactor0
|
||||
\cf0 \
|
||||
Sparkle is open source software available under the permissive MIT license, and is developed on GitHub by the Sparkle Project with the help of dozens of valued contributors.\
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
|
||||
\cf0 \
|
||||
\pard\pardeftab720\qc\partightenfactor0
|
||||
{\field{\*\fldinst{HYPERLINK "https://usdawatercolors.nal.usda.gov/pom/catalog.xhtml?id=POM00001916"}}{\fldrslt
|
||||
\f0\b\fs36 \cf0 \cb3 \expnd0\expndtw0\kerning0
|
||||
Icon}}
|
||||
@@ -42,6 +51,6 @@ Icon}}
|
||||
|
||||
\f1\b0\fs28 \cf0 \
|
||||
\pard\pardeftab720\qj\partightenfactor0
|
||||
\cf4 \cb3 R.C. Steadman, 6-1-\'9221.\
|
||||
\cf4 R.C. Steadman, 6-1-\'9221.\
|
||||
\
|
||||
U.S. Department of Agriculture Pomological Watercolor Collection. Rare and Special Collections, National Agricultural Library, Beltsville, MD 20705}
|
||||
@@ -31,11 +31,11 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="302" height="402"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView focusRingType="none" verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="sourceList" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="22" rowSizeStyle="automatic" viewBased="YES" id="J5l-1d-030">
|
||||
<tableView focusRingType="none" verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="22" rowSizeStyle="automatic" viewBased="YES" id="J5l-1d-030">
|
||||
<rect key="frame" x="0.0" y="0.0" width="302" height="402"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="_sourceListBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="282" minWidth="40" maxWidth="1000" id="1rF-M3-pYV">
|
||||
@@ -107,15 +107,20 @@
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<nil key="backgroundColor"/>
|
||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="ynD-Kb-eb3">
|
||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="Dbq-yF-MKx">
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="Dbq-yF-MKx" customClass="TransparentScroller">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
||||
<color key="value" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
|
||||
@@ -8,8 +8,11 @@
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="DownloadWindowController">
|
||||
<connections>
|
||||
<outlet property="allFilterButton" destination="Kgj-LP-FsF" id="yub-s9-RVW"/>
|
||||
<outlet property="arrayController" destination="jhO-4z-Qwt" id="GHu-xb-4zU"/>
|
||||
<outlet property="downloadField" destination="sJz-So-jbA" id="WjK-48-FcE"/>
|
||||
<outlet property="formatButton" destination="2Rg-eX-DUq" id="oYo-MG-Sc6"/>
|
||||
<outlet property="missingFilterButton" destination="6c7-tU-3F3" id="89Y-wQ-9pB"/>
|
||||
<outlet property="tableView" destination="FLX-Wt-y53" id="a4O-pk-EAt"/>
|
||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
@@ -18,45 +21,29 @@
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="ROMs" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="DownloadManagerWindow" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="400" height="575"/>
|
||||
<rect key="contentRect" x="196" y="240" width="454" height="575"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<value key="minSize" type="size" width="300" height="300"/>
|
||||
<value key="minSize" type="size" width="454" height="300"/>
|
||||
<view key="contentView" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="575"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="454" height="575"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rg5-Qf-4Mw">
|
||||
<rect key="frame" x="324" y="19" width="56" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="i6Z-OM-lqE">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent">.</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.active" id="mBP-8S-yGB"/>
|
||||
</connections>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="cancelAll:" target="-2" id="ycl-eJ-ByB"/>
|
||||
</connections>
|
||||
</button>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="51" horizontalPageScroll="10" verticalLineScroll="51" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CMD-nT-mEa">
|
||||
<rect key="frame" x="0.0" y="130" width="402" height="446"/>
|
||||
<rect key="frame" x="0.0" y="130" width="456" height="446"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" ambiguous="YES" drawsBackground="NO" id="Igp-aH-flp">
|
||||
<rect key="frame" x="1" y="1" width="400" height="444"/>
|
||||
<rect key="frame" x="1" y="1" width="454" height="444"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="49" rowSizeStyle="automatic" viewBased="YES" id="FLX-Wt-y53">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="444"/>
|
||||
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="49" rowSizeStyle="automatic" viewBased="YES" id="FLX-Wt-y53">
|
||||
<rect key="frame" x="0.0" y="0.0" width="454" height="444"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableViewGridLines key="gridStyleMask" dashed="YES"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="397" minWidth="40" maxWidth="1000" id="5jP-bY-fhI">
|
||||
<tableColumn width="451" minWidth="40" maxWidth="1000" id="5jP-bY-fhI">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -69,63 +56,67 @@
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="Cell" focusRingType="none" id="aBv-F5-XWo">
|
||||
<rect key="frame" x="1" y="1" width="397" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pWm-hb-BXB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="397" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="p71-gJ-vFV">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="pWm-hb-BXB" id="NNG-rj-AAQ"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="DownloadCell" focusRingType="none" id="onK-6l-2iV" customClass="DownloadTableCellView">
|
||||
<rect key="frame" x="1" y="20" width="397" height="49"/>
|
||||
<tableCellView focusRingType="none" id="onK-6l-2iV">
|
||||
<rect key="frame" x="1" y="1" width="451" height="49"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="A44-us-TEl">
|
||||
<rect key="frame" x="25" y="28" width="371" height="17"/>
|
||||
<rect key="frame" x="25" y="28" width="425" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="NSU-6I-nsG">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="onK-6l-2iV" name="value" keyPath="objectValue.name" id="t1L-kM-AW6">
|
||||
<dictionary key="options">
|
||||
<string key="NSMultipleValuesPlaceholder">multiple</string>
|
||||
<string key="NSNoSelectionPlaceholder">no selection</string>
|
||||
<string key="NSNotApplicablePlaceholder">n/a</string>
|
||||
<string key="NSNullPlaceholder">null</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="onK-6l-2iV" name="textColor" keyPath="objectValue.titleColor" id="0Qx-rz-DEZ"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<progressIndicator wantsLayer="YES" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="jBN-UJ-tWi">
|
||||
<rect key="frame" x="3" y="29" width="16" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<connections>
|
||||
<binding destination="onK-6l-2iV" name="animate" keyPath="objectValue.task" id="d22-JL-3Z7">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNotNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</progressIndicator>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hfu-hP-QAH">
|
||||
<rect key="frame" x="25" y="3" width="371" height="17"/>
|
||||
<rect key="frame" x="25" y="3" width="425" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="1cQ-Zh-q0o">
|
||||
<font key="font" metaFont="system" size="10"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="onK-6l-2iV" name="textColor" keyPath="objectValue.descriptionColor" id="KVi-3N-Swm"/>
|
||||
<binding destination="onK-6l-2iV" name="value" keyPath="objectValue.statusDescription" id="yV1-5r-YDh"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="activity" destination="jBN-UJ-tWi" id="ZwD-yU-Vne"/>
|
||||
<outlet property="statusTextField" destination="hfu-hP-QAH" id="8Hv-BB-kYA"/>
|
||||
<outlet property="textField" destination="A44-us-TEl" id="Ta5-nd-ed1"/>
|
||||
<outlet property="textField" destination="A44-us-TEl" id="ude-er-Gm4"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
<connections>
|
||||
<binding destination="jhO-4z-Qwt" name="value" keyPath="arrangedObjects.selection" id="KQP-Xo-Fbf"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="-2" id="Ghf-k9-bRK"/>
|
||||
<outlet property="delegate" destination="-2" id="rpR-0W-4Nu"/>
|
||||
<binding destination="jhO-4z-Qwt" name="content" keyPath="arrangedObjects" id="2av-gV-V4K"/>
|
||||
<outlet property="menu" destination="RJM-21-hjO" id="xpL-0n-1jm"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
@@ -142,7 +133,7 @@
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sJz-So-jbA">
|
||||
<rect key="frame" x="51" y="101" width="329" height="21"/>
|
||||
<rect key="frame" x="51" y="101" width="383" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="HKe-di-YSs">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -154,9 +145,9 @@
|
||||
</connections>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fhd-vr-Q2G">
|
||||
<rect key="frame" x="192" y="18" width="124" height="23"/>
|
||||
<rect key="frame" x="208" y="13" width="150" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Download Missing" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AKx-eg-iLS">
|
||||
<buttonCell key="cell" type="push" title="Download Missing" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AKx-eg-iLS">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
@@ -188,13 +179,13 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<box verticalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="AuM-pD-Gul">
|
||||
<rect key="frame" x="12" y="52" width="368" height="5"/>
|
||||
<rect key="frame" x="12" y="52" width="422" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dpY-qZ-2Nk">
|
||||
<rect key="frame" x="90" y="13" width="100" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="ROMs" bezelStyle="rounded" image="NSFolder" imagePosition="leading" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="E0t-sX-rgE">
|
||||
<rect key="frame" x="93" y="13" width="115" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="ROMs" bezelStyle="rounded" image="NSFolder" imagePosition="left" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="E0t-sX-rgE">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
@@ -204,7 +195,7 @@
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Lnv-mh-zAr">
|
||||
<rect key="frame" x="6" y="13" width="87" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Refresh" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="mYS-h7-GUa">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -237,12 +228,66 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rg5-Qf-4Mw">
|
||||
<rect key="frame" x="358" y="13" width="82" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="i6Z-OM-lqE">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent">.</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.active" id="mBP-8S-yGB"/>
|
||||
</connections>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="cancelAll:" target="-2" id="ycl-eJ-ByB"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
<toolbar key="toolbar" implicitIdentifier="B60021E6-BFBC-44E6-97DC-120AA9FD3269" autosavesConfiguration="NO" allowsUserCustomization="NO" displayMode="iconOnly" sizeMode="regular" id="kpz-W4-xgh">
|
||||
<allowedToolbarItems>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarSpaceItem" id="tbY-ts-Irb"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="3Kc-zG-IdN"/>
|
||||
<toolbarItem implicitItemIdentifier="BD743A15-0B61-48FF-9EED-FD8D57EF8459" label="All" paletteLabel="All" tag="1" sizingBehavior="auto" id="Jj0-n8-I5a">
|
||||
<nil key="toolTip"/>
|
||||
<button key="view" verticalHuggingPriority="750" tag="1" id="Kgj-LP-FsF">
|
||||
<rect key="frame" x="0.0" y="14" width="74" height="20"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="recessed" title="All" bezelStyle="recessed" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="9s7-S1-hW1">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||
<font key="font" metaFont="systemBold" size="12"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="filterButton:" target="-2" id="gTc-Ul-FYR"/>
|
||||
</connections>
|
||||
</button>
|
||||
</toolbarItem>
|
||||
<toolbarItem implicitItemIdentifier="5B013840-E582-4568-8448-DDD7EE1E5AE2" label="Missing" paletteLabel="Missing" tag="2" sizingBehavior="auto" id="GV4-aX-5Ox">
|
||||
<nil key="toolTip"/>
|
||||
<button key="view" verticalHuggingPriority="750" tag="2" id="6c7-tU-3F3">
|
||||
<rect key="frame" x="0.0" y="14" width="74" height="20"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="recessed" title="Missing" bezelStyle="recessed" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ui2-dz-IZj">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||
<font key="font" metaFont="systemBold" size="12"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="filterButton:" target="-2" id="R6W-hU-oqL"/>
|
||||
</connections>
|
||||
</button>
|
||||
</toolbarItem>
|
||||
</allowedToolbarItems>
|
||||
<defaultToolbarItems>
|
||||
<toolbarItem reference="Jj0-n8-I5a"/>
|
||||
<toolbarItem reference="GV4-aX-5Ox"/>
|
||||
</defaultToolbarItems>
|
||||
</toolbar>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="32" y="119.5"/>
|
||||
<point key="canvasLocation" x="59" y="119.5"/>
|
||||
</window>
|
||||
<menu id="RJM-21-hjO">
|
||||
<items>
|
||||
@@ -270,6 +315,7 @@
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-348" y="164"/>
|
||||
</menu>
|
||||
<arrayController objectClassName="DownloadItem" editable="NO" preservesSelection="NO" selectsInsertedObjects="NO" avoidsEmptySelection="NO" clearsFilterPredicateOnInsertion="NO" automaticallyRearrangesObjects="YES" id="jhO-4z-Qwt" customClass="DownloadItemArrayController"/>
|
||||
<userDefaultsController representsSharedInstance="YES" id="721-9N-Bma"/>
|
||||
</objects>
|
||||
<resources>
|
||||
|
||||
@@ -8,12 +8,15 @@
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="LaunchWindowController">
|
||||
<connections>
|
||||
<outlet property="addBookmarkWindow" destination="yIt-hP-HBq" id="Qhx-WV-cg4"/>
|
||||
<outlet property="bookmarkTextField" destination="fAl-Vn-x1w" id="GNr-j6-BiQ"/>
|
||||
<outlet property="machineView" destination="oVt-eD-aaj" id="Q9V-Kr-6GN"/>
|
||||
<outlet property="machineViewController" destination="RgH-d9-xl8" id="DIa-h0-6y2"/>
|
||||
<outlet property="machineViewController" destination="FSD-3v-Wni" id="tXv-zJ-QO3"/>
|
||||
<outlet property="mediaController" destination="t7c-zy-czN" id="a7d-HC-TWx"/>
|
||||
<outlet property="mediaView" destination="J9O-xI-P5J" id="PmZ-VC-4SN"/>
|
||||
<outlet property="slotController" destination="lyS-mc-3Tf" id="LXo-Ii-fDX"/>
|
||||
<outlet property="slotView" destination="P9d-sS-qEb" id="qlH-u0-hzq"/>
|
||||
<outlet property="softwareListControl" destination="pNl-g4-ZLh" id="U0i-R9-GLE"/>
|
||||
<outlet property="window" destination="Vze-YF-m6e" id="JUs-Eb-MW8"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
@@ -21,51 +24,19 @@
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Ample" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="LaunchWindow" animationBehavior="default" id="Vze-YF-m6e">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="335" y="390" width="718" height="795"/>
|
||||
<rect key="contentRect" x="335" y="390" width="1000" height="640"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" id="Ssv-Jw-EE0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="795"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1000" height="640"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oVt-eD-aaj">
|
||||
<rect key="frame" x="0.0" y="615" width="718" height="180"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nKp-px-nHg">
|
||||
<rect key="frame" x="587" y="58" width="111" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Launch" bezelStyle="texturedRounded" image="NSAppleMenuImage" imagePosition="left" alignment="center" borderStyle="border" inset="2" id="Ct1-Rb-7uI">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
DQ
|
||||
</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="launchAction:" target="-2" id="a4d-zv-1CU"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nNO-3T-OAy">
|
||||
<rect key="frame" x="470" y="58" width="109" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Reset Slots" bezelStyle="texturedRounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Uii-5h-2R2">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent">r</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="resetSlots:" target="lyS-mc-3Tf" id="1qi-N0-Q8B"/>
|
||||
</connections>
|
||||
</button>
|
||||
<customView id="P9d-sS-qEb" customClass="FlippedView">
|
||||
<rect key="frame" x="20" y="92" width="306" height="363"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<rect key="frame" x="302" y="105" width="316" height="363"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<tabView initialItem="zUN-Qs-haG" id="l8R-bg-6Zm">
|
||||
<rect key="frame" x="13" y="453" width="692" height="160"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<rect key="frame" x="295" y="466" width="692" height="160"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<tabViewItems>
|
||||
<tabViewItem label="Video" identifier="" id="zUN-Qs-haG">
|
||||
@@ -122,18 +93,31 @@ DQ
|
||||
</connections>
|
||||
</button>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hM8-FM-Agh">
|
||||
<rect key="frame" x="382" y="87" width="172" height="25"/>
|
||||
<rect key="frame" x="382" y="87" width="174" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Default" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="Dsm-bi-Txy" id="mBS-h4-BWC">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="WdF-Hw-YI9">
|
||||
<items>
|
||||
<menuItem title="Default" state="on" id="Dsm-bi-Txy"/>
|
||||
<menuItem title="Unfiltered" tag="1" id="xgz-We-TFg"/>
|
||||
<menuItem title="HLSL" tag="2" id="1UE-ea-V9a"/>
|
||||
<menuItem title="CRT Geometry" tag="3" id="Dsx-wI-m3r"/>
|
||||
<menuItem title="CRT Geometry Deluxe" tag="4" id="Ylw-Of-TM5"/>
|
||||
<menuItem title="Default" state="on" id="Dsm-bi-Txy">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="Unfiltered" tag="1" id="xgz-We-TFg">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="HLSL" tag="2" id="1UE-ea-V9a">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="CRT Geometry" tag="3" id="Dsx-wI-m3r">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="CRT Geometry Deluxe" tag="4" id="Ylw-Of-TM5">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="LCD Grid" tag="5" id="A6k-ku-z2M">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
@@ -193,6 +177,17 @@ DQ
|
||||
<binding destination="-2" name="value" keyPath="self.mameMouse" id="vWu-od-2d6"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XNa-8k-X89">
|
||||
<rect key="frame" x="143" y="29" width="137" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Disk Sound Effects" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="MBT-Uv-Lev">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameSamples" id="77G-8C-HgT"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
@@ -214,7 +209,7 @@ DQ
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PGK-yK-2ZK">
|
||||
<rect key="frame" x="15" y="91" width="43" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Speed" id="D9w-Mz-PXs">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -222,7 +217,7 @@ DQ
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FE4-gG-fPb">
|
||||
<rect key="frame" x="62" y="86" width="107" height="25"/>
|
||||
<rect key="frame" x="62" y="86" width="109" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="100%" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="1" imageScaling="proportionallyDown" inset="2" selectedItem="yoI-Ra-evu" id="M40-f0-awc">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
@@ -275,7 +270,7 @@ DQ
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5Yf-ZJ-8kx">
|
||||
<rect key="frame" x="132" y="59" width="523" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.wav" drawsBackground="YES" id="Xqc-zw-28b">
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.wav" drawsBackground="YES" usesSingleLineMode="YES" id="Xqc-zw-28b">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -292,7 +287,7 @@ DQ
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ne8-5I-D1H">
|
||||
<rect key="frame" x="132" y="28" width="523" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.vgm" drawsBackground="YES" id="xGs-Mi-wzj">
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.vgm" drawsBackground="YES" usesSingleLineMode="YES" id="xGs-Mi-wzj">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -317,7 +312,7 @@ DQ
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Xht-PS-Hw8">
|
||||
<rect key="frame" x="132" y="90" width="523" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.avi" drawsBackground="YES" id="iY4-FF-x2e">
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.avi" drawsBackground="YES" usesSingleLineMode="YES" id="iY4-FF-x2e">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -345,26 +340,69 @@ DQ
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Paths" identifier="" id="PVN-Iw-nYG">
|
||||
<view key="view" id="5qP-bQ-Id6">
|
||||
<rect key="frame" x="10" y="33" width="672" height="114"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VDW-FX-9az">
|
||||
<rect key="frame" x="132" y="90" width="523" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/directory/" drawsBackground="YES" usesSingleLineMode="YES" id="ykl-aj-n1L">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="enabled" keyPath="self.mameShareDirectory" id="bPv-hU-XgK"/>
|
||||
<binding destination="-2" name="value" keyPath="self.mameShareDirectoryPath" id="ddj-BN-tsY">
|
||||
<dictionary key="options">
|
||||
<string key="NSNullPlaceholder">/path/to/directory/</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1fA-nr-wns">
|
||||
<rect key="frame" x="15" y="91" width="117" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Share Directory" bezelStyle="regularSquare" imagePosition="left" inset="2" id="xmA-1v-wU7">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameShareDirectory" id="x3D-ho-u4v"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
</tabViewItems>
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine" id="odt-eJ-VrX">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</tabView>
|
||||
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="J9O-xI-P5J" customClass="FlippedView">
|
||||
<rect key="frame" x="392" y="92" width="306" height="363"/>
|
||||
<rect key="frame" x="664" y="107" width="316" height="331"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" horizontalScrollElasticity="none" id="2ue-XT-byh">
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1001" height="69"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="eSY-AU-tvi">
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1001" height="69"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textView focusRingType="none" editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" allowsCharacterPickerTouchBarItem="NO" textCompletion="NO" id="c0R-8x-RL2">
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1001" height="69"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="minSize" width="718" height="51"/>
|
||||
<size key="maxSize" width="718" height="10000000"/>
|
||||
<size key="minSize" width="1001" height="69"/>
|
||||
<size key="maxSize" width="1001" height="10000000"/>
|
||||
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.commandLine" id="deQ-gK-fgu">
|
||||
@@ -385,15 +423,186 @@ DQ
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<searchField wantsLayer="YES" verticalHuggingPriority="750" textCompletion="NO" id="pNl-g4-ZLh" customClass="AutocompleteControl">
|
||||
<rect key="frame" x="664" y="446" width="316" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" placeholderString="Software List" usesSingleLineMode="YES" bezelStyle="round" id="sMi-a3-XEn">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
|
||||
</searchFieldCell>
|
||||
<connections>
|
||||
<action selector="softwareChanged:" target="-2" id="879-da-UEc"/>
|
||||
<binding destination="-2" name="hidden" keyPath="machine" id="RdE-9k-oFd">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</searchField>
|
||||
<customView id="oVt-eD-aaj" customClass="FlippedView">
|
||||
<rect key="frame" x="0.0" y="69" width="294" height="571"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<box verticalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="UwI-q9-hEm">
|
||||
<rect key="frame" x="0.0" y="67" width="1000" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
</box>
|
||||
<box horizontalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="xjH-Gv-MHt">
|
||||
<rect key="frame" x="291" y="69" width="5" height="571"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" heightSizable="YES"/>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nKp-px-nHg">
|
||||
<rect key="frame" x="869.5" y="76" width="111" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Launch" bezelStyle="texturedRounded" image="NSAppleMenuImage" imagePosition="left" alignment="center" borderStyle="border" inset="2" id="Ct1-Rb-7uI">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
DQ
|
||||
</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="launchAction:" target="-2" id="a4d-zv-1CU"/>
|
||||
<binding destination="-2" name="hidden" keyPath="machine" id="8Ks-FY-Tmk">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="769" y="120.5"/>
|
||||
<toolbar key="toolbar" implicitIdentifier="ACA8EE70-5505-4CFD-9F78-7A480D93260B" autosavesConfiguration="NO" allowsUserCustomization="NO" prefersToBeShown="NO" displayMode="iconAndLabel" sizeMode="regular" id="b3J-Bx-3nk">
|
||||
<allowedToolbarItems>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarShowColorsItem" id="uHd-dY-alN"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarShowFontsItem" id="WEM-Gw-Utx"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarPrintItem" id="RCG-fn-6Ue"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarSpaceItem" id="BRc-Qf-FCk"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="Dtt-KT-5NO"/>
|
||||
</allowedToolbarItems>
|
||||
<defaultToolbarItems/>
|
||||
</toolbar>
|
||||
<connections>
|
||||
<outlet property="menu" destination="Aa5-Sk-gZX" id="Sj0-0o-oZb"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="590" y="40"/>
|
||||
</window>
|
||||
<viewController title="Media View" nibName="MediaView" id="t7c-zy-czN" customClass="MediaViewController"/>
|
||||
<viewController title="Slot View" nibName="NewSlotView" id="lyS-mc-3Tf" customClass="NewSlotViewController"/>
|
||||
<customObject id="RgH-d9-xl8" customClass="MachineViewController"/>
|
||||
<viewController title="Slot View" nibName="SlotView" id="lyS-mc-3Tf" customClass="SlotViewController"/>
|
||||
<window title="Add Bookmark" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="yIt-hP-HBq">
|
||||
<windowStyleMask key="styleMask" titled="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="462" height="116"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" wantsLayer="YES" id="WVd-g4-Tbl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="462" height="116"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Gho-Xy-rn4">
|
||||
<rect key="frame" x="358" y="13" width="90" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Add" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Vxo-rD-aMe">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
DQ
|
||||
</string>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="bookmarkSave:" target="-2" id="wLF-LE-5RO"/>
|
||||
<binding destination="-2" name="enabled" keyPath="bookmarkName" id="U5R-gU-1bE">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">StringNotEmptyTransformer</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3sv-Kd-Ep5">
|
||||
<rect key="frame" x="268" y="13" width="90" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="jaa-RY-PAg">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
Gw
|
||||
</string>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="bookmarkCancel:" target="-2" id="uWM-vs-hz7"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1fO-x7-Gft">
|
||||
<rect key="frame" x="18" y="80" width="103" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Add Bookmark…" id="AZS-JR-SNt">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fAl-Vn-x1w">
|
||||
<rect key="frame" x="20" y="49" width="422" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="bookmark name" drawsBackground="YES" id="Enq-2z-cle">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="bookmarkName" id="84v-el-4Uk">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
<string key="NSNullPlaceholder">bookmark name</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="130" y="70"/>
|
||||
</window>
|
||||
<viewController nibName="MachineView" id="FSD-3v-Wni" customClass="NewMachineViewController"/>
|
||||
<menu id="Aa5-Sk-gZX">
|
||||
<items>
|
||||
<menuItem title="Launch" image="NSAppleMenuImage" id="OSH-7C-D6z">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="launchAction:" target="-2" id="ZY2-He-VyK"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="Iti-F9-p35"/>
|
||||
<menuItem title="Reset All" id="PQ0-yO-SKz">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="resetAll:" target="-2" id="hF5-fl-bMr"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Reset Machine" id="1by-3B-LSd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="resetMachine:" target="-2" id="7au-OM-Q88"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Reset Slots" id="ccx-xm-qeo">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="resetSlots:" target="lyS-mc-3Tf" id="39K-rS-u9D"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Reset Media" id="Opr-7k-fO1">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="resetMedia:" target="-2" id="n5j-1R-NJl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
<point key="canvasLocation" x="-121" y="-2"/>
|
||||
</menu>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSAppleMenuImage" width="11" height="14"/>
|
||||
<image name="NSAppleMenuImage" width="128" height="128"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="800" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView fixedFrame="YES" borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Hj3-ou-djb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="800" height="270"/>
|
||||
@@ -52,10 +52,31 @@
|
||||
</scrollView>
|
||||
</subviews>
|
||||
</view>
|
||||
<toolbar key="toolbar" implicitIdentifier="54C242E0-0A7F-491A-9B83-7279A9663A36" autosavesConfiguration="NO" allowsUserCustomization="NO" displayMode="iconOnly" sizeMode="small" id="Cik-bA-ZYu">
|
||||
<allowedToolbarItems>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarShowColorsItem" id="zxC-EA-a7F"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarShowFontsItem" id="xZv-cQ-rPS"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarPrintItem" id="2BZ-oP-sMg"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarSpaceItem" id="j5G-hW-61a"/>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="a72-iv-2QT"/>
|
||||
<toolbarItem implicitItemIdentifier="21A9965C-D1B3-4E82-A344-1688A467E870" label="Clear Log" paletteLabel="Clear Log" tag="-1" image="NSTrashEmpty" id="pn5-MM-9p1">
|
||||
<connections>
|
||||
<action selector="clearLog:" target="-2" id="VU3-mv-6WR"/>
|
||||
</connections>
|
||||
</toolbarItem>
|
||||
</allowedToolbarItems>
|
||||
<defaultToolbarItems>
|
||||
<toolbarItem reference="a72-iv-2QT"/>
|
||||
<toolbarItem reference="pn5-MM-9p1"/>
|
||||
</defaultToolbarItems>
|
||||
</toolbar>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-285" y="-234"/>
|
||||
</window>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSTrashEmpty" width="32" height="32"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -6,98 +6,104 @@
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="NewSlotViewController">
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="NewMachineViewController">
|
||||
<connections>
|
||||
<outlet property="outlineView" destination="Xj3-Qf-yek" id="AWE-Rg-XUM"/>
|
||||
<outlet property="view" destination="D45-lv-6Fv" id="av3-OE-ph2"/>
|
||||
<outlet property="outlineView" destination="9V6-He-b8A" id="XeC-DJ-oXY"/>
|
||||
<outlet property="view" destination="t3T-qF-D0e" id="Svb-w7-hs9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="27" horizontalPageScroll="10" verticalLineScroll="27" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="D45-lv-6Fv">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="386"/>
|
||||
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="26" horizontalPageScroll="10" verticalLineScroll="26" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="t3T-qF-D0e">
|
||||
<rect key="frame" x="0.0" y="0.0" width="274" height="543"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<clipView key="contentView" focusRingType="none" copiesOnScroll="NO" id="8x1-xN-a7c">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="386"/>
|
||||
<clipView key="contentView" drawsBackground="NO" id="DyG-qq-uBF">
|
||||
<rect key="frame" x="0.0" y="0.0" width="274" height="543"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="25" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" outlineTableColumn="u7T-p8-F2Z" id="Xj3-Qf-yek">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="386"/>
|
||||
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="sourceList" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" autosaveName="machine-view" rowHeight="24" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" autosaveExpandedItems="YES" outlineTableColumn="e67-js-boV" id="9V6-He-b8A">
|
||||
<rect key="frame" x="0.0" y="0.0" width="274" height="543"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="280" minWidth="40" maxWidth="1000" id="u7T-p8-F2Z">
|
||||
<tableColumn width="271" minWidth="16" maxWidth="1000" id="e67-js-boV">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="FM7-eO-FE4">
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="jZU-xV-PI4">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="MenuCell" id="1RI-9K-5qj" customClass="SlotTableCellView">
|
||||
<rect key="frame" x="1" y="1" width="280" height="25"/>
|
||||
<tableCellView identifier="HeaderCell" id="2iF-4F-HfC">
|
||||
<rect key="frame" x="1" y="1" width="271" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qIF-d4-kOf">
|
||||
<rect key="frame" x="0.0" y="5" width="90" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="RAM:" id="tIz-xZ-ZJH">
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9tU-X8-FZn">
|
||||
<rect key="frame" x="0.0" y="0.0" width="271" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="HEADER CELL" id="EUi-TS-vlq">
|
||||
<font key="font" metaFont="systemBold"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="2iF-4F-HfC" name="value" keyPath="objectValue.description" id="He3-9c-g9A"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="9tU-X8-FZn" id="p2B-eV-6bS"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="DataCell" id="7b4-T1-d29">
|
||||
<rect key="frame" x="1" y="20" width="271" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FkS-zP-pRB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="271" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="g6t-E7-0lM">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zQ8-o3-yBB">
|
||||
<rect key="frame" x="87" y="0.0" width="193" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="tGi-yg-GFr" id="gt4-HK-pd1">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" autoenablesItems="NO" id="KWV-nn-eiB">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="tGi-yg-GFr"/>
|
||||
<menuItem title="Item 2" id="XJr-Gb-4D4"/>
|
||||
<menuItem title="Item 3" id="JeB-Fb-DeQ"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="9MH-mu-u5V"/>
|
||||
<binding destination="7b4-T1-d29" name="value" keyPath="objectValue.description" id="kp8-ww-1aE"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="menuButton" destination="zQ8-o3-yBB" id="zZf-nm-tCI"/>
|
||||
<outlet property="textField" destination="qIF-d4-kOf" id="zIF-4n-v1e"/>
|
||||
<outlet property="textField" destination="FkS-zP-pRB" id="JkE-pr-7px"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="-2" id="OV9-yE-OFp"/>
|
||||
<outlet property="delegate" destination="-2" id="kXs-TN-3VL"/>
|
||||
<action selector="clickAction:" target="-2" id="O3p-cV-gwk"/>
|
||||
<outlet property="dataSource" destination="-2" id="nW2-qs-3w6"/>
|
||||
<outlet property="delegate" destination="-2" id="4Wc-Pe-v81"/>
|
||||
</connections>
|
||||
</outlineView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<nil key="backgroundColor"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="rYF-ld-adB">
|
||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="kig-a5-Ay0">
|
||||
<rect key="frame" x="-100" y="-100" width="238" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="4pL-Dn-e75" customClass="TransparentScroller">
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="lLp-pv-Fbj" customClass="TransparentScroller">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<point key="canvasLocation" x="-100" y="154"/>
|
||||
<point key="canvasLocation" x="-91" y="132"/>
|
||||
</scrollView>
|
||||
</objects>
|
||||
</document>
|
||||
@@ -19,6 +19,12 @@
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<customObject id="sJn-ug-xF3" customClass="BookmarkManager">
|
||||
<connections>
|
||||
<outlet property="menu" destination="ha0-nx-PIl" id="vTa-TU-DS1"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="3aq-Tx-mno" customClass="SUUpdater"/>
|
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
<menuItem title="Ample" id="1Xt-HY-uBw">
|
||||
@@ -31,6 +37,12 @@
|
||||
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Check for Updates…" id="CPy-r4-rzr">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="checkForUpdates:" target="3aq-Tx-mno" id="qJG-Nv-0Lu"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW">
|
||||
<connections>
|
||||
@@ -117,6 +129,12 @@
|
||||
<action selector="revertDocumentToSaved:" target="-1" id="iJ3-Pv-kwq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Export Shell Script…" id="LmB-h2-UBZ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="exportShellScript:" target="-1" id="9eU-do-ffz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
|
||||
<menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
|
||||
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
|
||||
@@ -383,6 +401,34 @@
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Bookmarks" id="vHO-2e-qJc">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Bookmarks" id="ha0-nx-PIl">
|
||||
<items>
|
||||
<menuItem title="Add Bookmark…" keyEquivalent="d" id="1JF-xV-zmG">
|
||||
<connections>
|
||||
<action selector="addBookmark:" target="-1" id="cqp-ko-BfQ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Manage Bookmarks…" id="isI-q6-b1V">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="Set Default" id="vbR-vS-lqO">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="defaultSave:" target="-1" id="FP9-EX-OKP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="gWR-Yl-mg6"/>
|
||||
<menuItem title="Default" id="mXC-Lp-gem">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="defaultLoad:" target="-1" id="ErS-k6-azP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Window" id="aUF-d1-5bR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
||||
@@ -436,6 +482,24 @@
|
||||
<action selector="showHelp:" target="-1" id="y7X-2Q-9no"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="MAME Keyboard Cheat Sheet" id="vcW-Dz-2Nx">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="displayCheatSheet:" target="Voe-Tx-rLC" id="HvD-mQ-4pe"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="MAME Apple II Wiki" id="GLh-Cc-5uU">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="mameAppleWiki:" target="Voe-Tx-rLC" id="jRe-m6-mP0"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="MAME Mac 68K Wiki" id="hDL-K6-iVF">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="mameMac68kWiki:" target="Voe-Tx-rLC" id="ZzB-54-vXN"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="MAME Documentation" id="1IW-V0-UWA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
|
||||
@@ -14,20 +14,20 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="30" horizontalPageScroll="10" verticalLineScroll="30" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="nVT-kT-bWl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="363"/>
|
||||
<clipView key="contentView" autoresizesSubviews="NO" focusRingType="none" ambiguous="YES" copiesOnScroll="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IBD-wb-pch">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="363"/>
|
||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="25" horizontalPageScroll="10" verticalLineScroll="25" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="nVT-kT-bWl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="331"/>
|
||||
<clipView key="contentView" autoresizesSubviews="NO" focusRingType="none" ambiguous="YES" drawsBackground="NO" copiesOnScroll="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IBD-wb-pch">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="331"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="none" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="27" rowSizeStyle="automatic" viewBased="YES" outlineTableColumn="pBj-py-R6a" id="sIz-DD-PZQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="363"/>
|
||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="22" rowSizeStyle="automatic" viewBased="YES" outlineTableColumn="pBj-py-R6a" id="sIz-DD-PZQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="331"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="2" height="3"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn editable="NO" width="280" minWidth="40" maxWidth="1000" id="pBj-py-R6a">
|
||||
<tableColumn editable="NO" width="296" minWidth="40" maxWidth="1000" id="pBj-py-R6a">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -38,19 +38,23 @@
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="CategoryView" focusRingType="none" id="33q-UT-ur5">
|
||||
<rect key="frame" x="1" y="1" width="280" height="17"/>
|
||||
<rect key="frame" x="1" y="1" width="296" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Pep-mX-LHY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="280" height="17"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="296" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="Rrg-wr-8eL">
|
||||
<font key="font" metaFont="systemBold"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="33q-UT-ur5" name="value" keyPath="objectValue.title" id="JQR-UW-ifh"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
@@ -58,17 +62,19 @@
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="ItemView" translatesAutoresizingMaskIntoConstraints="NO" id="yGq-lc-RCM" customClass="TablePathView">
|
||||
<rect key="frame" x="1" y="21" width="280" height="22"/>
|
||||
<rect key="frame" x="1" y="21" width="296" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<pathControl focusRingType="none" verticalHuggingPriority="750" fixedFrame="YES" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="f7R-TO-fmF">
|
||||
<rect key="frame" x="20" y="0.0" width="228" height="22"/>
|
||||
<rect key="frame" x="20" y="0.0" width="244" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<pathCell key="cell" controlSize="small" selectable="YES" editable="YES" focusRingType="none" alignment="left" pathStyle="popUp" id="dcz-8y-tKb">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
</pathCell>
|
||||
<connections>
|
||||
<action selector="pathAction:" target="-2" id="4oX-bW-ANp"/>
|
||||
<binding destination="yGq-lc-RCM" name="enabled" keyPath="objectValue.valid" id="f8P-gt-vmK"/>
|
||||
<binding destination="yGq-lc-RCM" name="value" keyPath="objectValue.url" id="Ony-ph-VVo"/>
|
||||
</connections>
|
||||
</pathControl>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="6g1-NT-J1w">
|
||||
@@ -77,7 +83,7 @@
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" image="drag-handle-4x10" id="x7F-qD-5y9"/>
|
||||
</imageView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zNo-ij-mUl" customClass="EjectButton">
|
||||
<rect key="frame" x="261" y="3" width="16" height="16"/>
|
||||
<rect key="frame" x="277" y="3" width="16" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="eject-16x16" imagePosition="only" alignment="center" alternateImage="eject-hover-16x16" imageScaling="proportionallyDown" inset="2" id="IZA-Tu-olu">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
@@ -85,6 +91,7 @@
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="ejectAction:" target="-2" id="XAl-eQ-nUj"/>
|
||||
<binding destination="yGq-lc-RCM" name="enabled" keyPath="objectValue.occupied" id="4a4-L7-ztC"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
@@ -94,6 +101,51 @@
|
||||
<outlet property="pathControl" destination="f7R-TO-fmF" id="oH7-N3-JC7"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="BBItemView" id="2Nq-Xz-tkV" customClass="TablePathView">
|
||||
<rect key="frame" x="1" y="46" width="296" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="47E-Ef-Ott">
|
||||
<rect key="frame" x="0.0" y="1" width="20" height="20"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" image="drag-handle-4x10" id="vwE-Ev-NBf"/>
|
||||
</imageView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zxn-1E-o34" customClass="EjectButton">
|
||||
<rect key="frame" x="277" y="3" width="16" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="eject-16x16" imagePosition="only" alignment="center" alternateImage="eject-hover-16x16" imageScaling="proportionallyDown" inset="2" id="Os7-NH-tnx">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="ejectAction:" target="-2" id="uy2-92-9La"/>
|
||||
<binding destination="2Nq-Xz-tkV" name="enabled" keyPath="objectValue.occupied" id="SNi-sQ-J2W"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pNE-yJ-EK8">
|
||||
<rect key="frame" x="20" y="0.0" width="244" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="socket.address:port or /path/to/file" drawsBackground="YES" id="h2U-ig-Cms">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<action selector="textAction:" target="-2" id="lmX-t8-mEc"/>
|
||||
<binding destination="2Nq-Xz-tkV" name="enabled" keyPath="objectValue.valid" id="ZTM-E3-Y9P"/>
|
||||
<binding destination="2Nq-Xz-tkV" name="value" keyPath="objectValue.string" id="2dZ-JJ-asM">
|
||||
<dictionary key="options">
|
||||
<string key="NSNullPlaceholder">socket.address:port or /path/to/file</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="dragHandle" destination="47E-Ef-Ott" id="bnY-rz-24V"/>
|
||||
<outlet property="ejectButton" destination="zxn-1E-o34" id="eC6-Mf-tN6"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
|
||||
@@ -8,625 +8,229 @@
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="SlotViewController">
|
||||
<connections>
|
||||
<outlet property="aux_menu" destination="3kq-qn-7YR" id="wic-Ry-yAf"/>
|
||||
<outlet property="exp_menu" destination="San-wP-1ez" id="X7u-dM-xrI"/>
|
||||
<outlet property="game_menu" destination="K8G-bZ-6mZ" id="IeQ-ZT-5F6"/>
|
||||
<outlet property="modem_menu" destination="KHf-kC-BpZ" id="Qab-mA-anC"/>
|
||||
<outlet property="printer_menu" destination="sTp-en-8Wd" id="zeu-LF-6mV"/>
|
||||
<outlet property="ram_menu" destination="Yks-M5-vi0" id="h5y-Un-jYJ"/>
|
||||
<outlet property="rs232_menu" destination="6ln-U2-0Pi" id="7CT-OE-idV"/>
|
||||
<outlet property="sl0_menu" destination="Jw1-t7-YyU" id="BB5-6y-zyf"/>
|
||||
<outlet property="sl1_menu" destination="bta-RS-JT4" id="cpI-db-kzX"/>
|
||||
<outlet property="sl2_menu" destination="cDU-b1-x5a" id="WtL-Fo-Q1B"/>
|
||||
<outlet property="sl3_menu" destination="aSh-cs-0Nn" id="24o-66-LjH"/>
|
||||
<outlet property="sl4_menu" destination="kU5-cR-hPZ" id="STc-6r-nxH"/>
|
||||
<outlet property="sl5_menu" destination="8z4-8f-kLU" id="cLl-Ee-LUD"/>
|
||||
<outlet property="sl6_menu" destination="GLb-F4-PWe" id="ubk-pt-e1Q"/>
|
||||
<outlet property="sl7_menu" destination="IV2-3M-qfw" id="s5k-4G-w4r"/>
|
||||
<outlet property="view" destination="OM3-7F-wiN" id="yre-ts-aHj"/>
|
||||
<outlet property="_popover" destination="QIT-2T-wdy" id="WUB-OS-kem"/>
|
||||
<outlet property="childOutlineView" destination="uM0-Gk-crn" id="aL5-uC-O28"/>
|
||||
<outlet property="outlineView" destination="Xj3-Qf-yek" id="AWE-Rg-XUM"/>
|
||||
<outlet property="view" destination="D45-lv-6Fv" id="av3-OE-ph2"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<gridView autoresizesSubviews="NO" misplaced="YES" xPlacement="leading" yPlacement="bottom" rowAlignment="none" translatesAutoresizingMaskIntoConstraints="NO" id="OM3-7F-wiN">
|
||||
<rect key="frame" x="0.0" y="0.0" width="306" height="459"/>
|
||||
<rows>
|
||||
<gridRow yPlacement="center" height="25" id="tHD-ui-hIL">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.ram" id="ze9-jx-lv0">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="Ccd-U2-Gx5">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl0" id="YsR-kI-yrh">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="JGU-aq-3uw">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl1" id="1io-aZ-v2G">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="gVW-Ya-phU">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl2" id="AgS-hm-ePr">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="3fP-qp-zmi">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl3" id="98U-4P-iRh">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="86u-5p-UT6">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl4" id="hsy-pm-Qjk">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="Wdg-xb-xQx">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl5" id="0QC-RB-278">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="ein-Fe-vBw">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl6" id="731-3P-DUy">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="qjB-2w-AWE">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.sl7" id="sew-Ds-4I9">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="EEX-dh-jwn">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.exp" id="EOZ-lS-QHF">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="OaZ-ZQ-gKK">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.aux" id="OlF-v7-JZx">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="wQi-Oz-7Ye">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.rs232" id="AeP-bn-blv">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="gr2-eY-995">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.gameio" id="x3I-Bd-9di">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="1xN-lm-s4l">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.printer" id="T9a-lH-z5K">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
<gridRow yPlacement="center" height="25" id="M2s-qn-SIT">
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="machine.modem" id="PSe-R3-S3e">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</gridRow>
|
||||
</rows>
|
||||
<columns>
|
||||
<gridColumn xPlacement="fill" width="100" id="zpB-Rf-dWg"/>
|
||||
<gridColumn xPlacement="fill" width="200" id="6Vn-yh-FoQ"/>
|
||||
</columns>
|
||||
<gridCells>
|
||||
<gridCell row="tHD-ui-hIL" column="zpB-Rf-dWg" id="deJ-sv-Hb7">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nHa-QG-HjJ">
|
||||
<rect key="frame" x="-2" y="439" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="RAM:" id="CvY-8m-Ni9">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="tHD-ui-hIL" column="6Vn-yh-FoQ" id="dak-Ha-01u">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="16" translatesAutoresizingMaskIntoConstraints="NO" id="Yks-M5-vi0">
|
||||
<rect key="frame" x="104" y="433" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="92u-m2-3yN" id="XFo-KF-ueS">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="k8O-sG-Qld">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="92u-m2-3yN">
|
||||
<attributedString key="attributedTitle"/>
|
||||
</menuItem>
|
||||
<menuItem title="Item 2" id="dPG-tR-M4A"/>
|
||||
<menuItem title="Item 3" id="q2n-oZ-46s"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="27" horizontalPageScroll="10" verticalLineScroll="27" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="D45-lv-6Fv">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<clipView key="contentView" autoresizesSubviews="NO" focusRingType="none" drawsBackground="NO" copiesOnScroll="NO" id="8x1-xN-a7c">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="25" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="2" autoresizesOutlineColumn="YES" outlineTableColumn="u7T-p8-F2Z" id="Xj3-Qf-yek">
|
||||
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn editable="NO" width="296" minWidth="40" maxWidth="1000" id="u7T-p8-F2Z">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="FM7-eO-FE4">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="MenuCell" id="1RI-9K-5qj" customClass="SlotTableCellView">
|
||||
<rect key="frame" x="1" y="1" width="296" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qIF-d4-kOf">
|
||||
<rect key="frame" x="0.0" y="5" width="90" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="RAM:" id="tIz-xZ-ZJH">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zQ8-o3-yBB">
|
||||
<rect key="frame" x="82" y="0.0" width="199" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="tGi-yg-GFr" id="gt4-HK-pd1">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" autoenablesItems="NO" id="KWV-nn-eiB">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="tGi-yg-GFr"/>
|
||||
<menuItem title="Item 2" id="XJr-Gb-4D4"/>
|
||||
<menuItem title="Item 3" id="JeB-Fb-DeQ"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="9MH-mu-u5V"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xCe-sY-sGe">
|
||||
<rect key="frame" x="282" y="8" width="14" height="10"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSListViewTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="0qU-ID-kJ8">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="hamburger:" target="-2" id="5Xa-j7-Aod"/>
|
||||
<binding destination="1RI-9K-5qj" name="hidden" keyPath="objectValue.selectedItem.children" id="rY2-0l-0N8">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="hamburgerButton" destination="xCe-sY-sGe" id="5Da-If-Bt4"/>
|
||||
<outlet property="menuButton" destination="zQ8-o3-yBB" id="zZf-nm-tCI"/>
|
||||
<outlet property="textField" destination="qIF-d4-kOf" id="zIF-4n-v1e"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<action selector="memoryMenuChanged:" target="-2" id="m1Q-Xj-z22"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.ram" id="UCD-j5-7Bh"/>
|
||||
<outlet property="dataSource" destination="-2" id="OV9-yE-OFp"/>
|
||||
<outlet property="delegate" destination="-2" id="kXs-TN-3VL"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="Ccd-U2-Gx5" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="QI6-Cz-URX">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="v8c-Rp-Mnt">
|
||||
<rect key="frame" x="-2" y="408" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 0:" id="EF7-NX-RMW">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="Ccd-U2-Gx5" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="0KQ-Qt-8KP">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jw1-t7-YyU">
|
||||
<rect key="frame" x="104" y="402" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="8Iv-mH-mEI" id="47g-IO-4Xt">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="nrR-Tr-UaW">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="8Iv-mH-mEI"/>
|
||||
<menuItem title="Item 2" id="Prr-6W-NWp"/>
|
||||
<menuItem title="Item 3" id="xz3-bi-5IM"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="wPZ-cY-9Ir"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.sl0" id="2aW-3q-Mvt"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="JGU-aq-3uw" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="Y1R-Ob-g2b">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0gP-wH-DVr">
|
||||
<rect key="frame" x="-2" y="377" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 1:" id="bfg-tf-E34">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="JGU-aq-3uw" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="v8q-Rj-E4q">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="bta-RS-JT4">
|
||||
<rect key="frame" x="104" y="371" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="dXO-at-nGw" id="kNn-6b-ysf">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="4ah-BI-RD5">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="dXO-at-nGw"/>
|
||||
<menuItem title="Item 2" id="UZY-8b-qmE"/>
|
||||
<menuItem title="Item 3" id="zxA-OM-BIY"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="hl3-N2-89k"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.sl1" id="wQI-oy-SYz"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="gVW-Ya-phU" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="tpv-Yc-qii">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EHZ-ol-QVz">
|
||||
<rect key="frame" x="-2" y="346" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 2:" id="FlL-pN-rn7">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="gVW-Ya-phU" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="OzN-rM-Pgi">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="cDU-b1-x5a">
|
||||
<rect key="frame" x="104" y="340" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="vCY-qF-aB3" id="jvL-SH-nvG">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="Hp6-Gt-pVV">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="vCY-qF-aB3"/>
|
||||
<menuItem title="Item 2" id="pbR-nc-itb"/>
|
||||
<menuItem title="Item 3" id="L8Z-vH-OCa"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="T5w-C4-Ohq"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.sl2" id="uXQ-0A-98q"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="3fP-qp-zmi" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="LbW-TT-AQ7">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zGs-8d-L0S">
|
||||
<rect key="frame" x="-2" y="315" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 3:" id="KZK-h8-8cw">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="3fP-qp-zmi" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="h8H-TB-p2z">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="3" translatesAutoresizingMaskIntoConstraints="NO" id="aSh-cs-0Nn">
|
||||
<rect key="frame" x="104" y="309" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="2yS-4z-8OR" id="HaE-TD-5Wx">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="zka-z5-hPa">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="2yS-4z-8OR"/>
|
||||
<menuItem title="Item 2" id="q4H-Fz-zVr"/>
|
||||
<menuItem title="Item 3" id="HtQ-6y-S25"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="5uS-La-5cM"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.sl3" id="YgU-fX-fPC"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="86u-5p-UT6" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="hJR-nJ-yYi">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zsX-jd-6ba">
|
||||
<rect key="frame" x="-2" y="284" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 4:" id="WXv-RF-e7f">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="86u-5p-UT6" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="dHu-cL-FyO">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="4" translatesAutoresizingMaskIntoConstraints="NO" id="kU5-cR-hPZ">
|
||||
<rect key="frame" x="104" y="278" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="NaS-CV-XQm" id="rOP-eY-UKe">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="Iwv-z3-oJb">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="NaS-CV-XQm"/>
|
||||
<menuItem title="Item 2" id="ovb-SG-Eg4"/>
|
||||
<menuItem title="Item 3" id="GVh-L4-3Cp"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="I35-wl-YdH"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.sl4" id="yfx-hj-6Ly"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="Wdg-xb-xQx" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="dsM-t5-8ng">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ANg-c1-hGf">
|
||||
<rect key="frame" x="-2" y="253" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 5:" id="EhN-EV-65V">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="Wdg-xb-xQx" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="ffm-pA-jjo">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="5" translatesAutoresizingMaskIntoConstraints="NO" id="8z4-8f-kLU">
|
||||
<rect key="frame" x="104" y="247" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="gH7-4J-xsg" id="cmc-Gf-Slp">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="Cma-00-qCY">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="gH7-4J-xsg"/>
|
||||
<menuItem title="Item 2" id="meM-WH-GgP"/>
|
||||
<menuItem title="Item 3" id="ILg-Ld-9Ri"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="jSe-j9-QUW"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.sl5" id="Uo1-Rg-wko"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="ein-Fe-vBw" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="PSw-Jx-eS2">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Cr1-RK-Z7V">
|
||||
<rect key="frame" x="-2" y="222" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 6:" id="uzy-th-5Yc">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="ein-Fe-vBw" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="FsV-vO-KAs">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="6" translatesAutoresizingMaskIntoConstraints="NO" id="GLb-F4-PWe">
|
||||
<rect key="frame" x="104" y="216" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="VaX-M9-Op0" id="CjU-rC-HUT">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="3xq-Hn-icN">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="VaX-M9-Op0"/>
|
||||
<menuItem title="Item 2" id="Fhy-5D-e6z"/>
|
||||
<menuItem title="Item 3" id="9jw-LA-666"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="yZO-kH-P6Q"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.sl6" id="0ze-xJ-DNX"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="qjB-2w-AWE" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="1WE-Mm-0O3">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3Ia-XB-C6D">
|
||||
<rect key="frame" x="-2" y="191" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 7:" id="32J-6e-nRV">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="qjB-2w-AWE" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="Yvr-uR-Hr5">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="7" translatesAutoresizingMaskIntoConstraints="NO" id="IV2-3M-qfw">
|
||||
<rect key="frame" x="104" y="185" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="8nb-Bq-4R4" id="nKb-Ar-bCb">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="R2a-Mg-LsY">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="8nb-Bq-4R4"/>
|
||||
<menuItem title="Item 2" id="rFT-bC-KE9"/>
|
||||
<menuItem title="Item 3" id="4jB-gp-lYT"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="llh-ab-ayK"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.sl7" id="hT6-pS-WmL"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="EEX-dh-jwn" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="iRl-IX-FSD">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Avf-lX-f2Q">
|
||||
<rect key="frame" x="-2" y="160" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Expansion:" id="PEU-OV-910">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="EEX-dh-jwn" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="Ehv-aA-Llc">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="8" translatesAutoresizingMaskIntoConstraints="NO" id="San-wP-1ez">
|
||||
<rect key="frame" x="104" y="154" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="jtv-Qx-oVD" id="42u-b4-3kx">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="1hM-MS-UEz">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="jtv-Qx-oVD"/>
|
||||
<menuItem title="Item 2" id="UeB-A1-nyv"/>
|
||||
<menuItem title="Item 3" id="GyZ-dv-MS4"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="fi5-WL-lQa"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.exp" id="C88-Gb-QTE"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="OaZ-ZQ-gKK" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="wRB-Wh-7kG">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EMz-7i-H38">
|
||||
<rect key="frame" x="-2" y="129" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Auxiliary:" id="SoV-Qy-h2g">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="OaZ-ZQ-gKK" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="bx6-Rc-x2V">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="9" translatesAutoresizingMaskIntoConstraints="NO" id="3kq-qn-7YR">
|
||||
<rect key="frame" x="104" y="123" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="vWX-Cb-ldP" id="NqP-Uq-Knv">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="7Ef-KS-ulj">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="vWX-Cb-ldP"/>
|
||||
<menuItem title="Item 2" id="Yg1-xZ-vXq"/>
|
||||
<menuItem title="Item 3" id="BwC-w9-hBy"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="uvt-uD-Adn"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.aux" id="KA7-7x-qeJ"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="wQi-Oz-7Ye" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="KoQ-xV-fQu">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JAG-sJ-u2B">
|
||||
<rect key="frame" x="-2" y="98" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="RS 232:" id="iG2-rY-VDv">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="wQi-Oz-7Ye" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="zWk-jd-i0V">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="10" translatesAutoresizingMaskIntoConstraints="NO" id="6ln-U2-0Pi">
|
||||
<rect key="frame" x="104" y="92" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="uu3-rr-iD8" id="daT-eX-4Vu">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="fMw-mh-Qfi">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="uu3-rr-iD8"/>
|
||||
<menuItem title="Item 2" id="f1r-MS-itp"/>
|
||||
<menuItem title="Item 3" id="WhP-Di-CHP"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="gmZ-pW-35n"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.rs232" id="LxA-8b-jb4"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="gr2-eY-995" column="zpB-Rf-dWg" id="xIE-bJ-mzr">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Svb-pu-WPf">
|
||||
<rect key="frame" x="-2" y="67" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Game I/O:" id="2Gc-mV-zCZ">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="gr2-eY-995" column="6Vn-yh-FoQ" id="nhy-Gp-GLL">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="11" translatesAutoresizingMaskIntoConstraints="NO" id="K8G-bZ-6mZ">
|
||||
<rect key="frame" x="104" y="61" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="GOm-Tf-6qc" id="Mig-Nu-gZB">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="faU-zS-LgN">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="GOm-Tf-6qc"/>
|
||||
<menuItem title="Item 2" id="XgG-U0-2G7"/>
|
||||
<menuItem title="Item 3" id="4Ea-aE-sB1"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="o53-71-xuf"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.gameio" id="tJw-AS-RUz"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="1xN-lm-s4l" column="zpB-Rf-dWg" id="vPV-KN-NNp">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="31K-iE-RCe">
|
||||
<rect key="frame" x="-2" y="36" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Printer:" id="QZI-H7-i8m">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="1xN-lm-s4l" column="6Vn-yh-FoQ" id="KRc-Z8-drK">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="12" translatesAutoresizingMaskIntoConstraints="NO" id="sTp-en-8Wd">
|
||||
<rect key="frame" x="104" y="30" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="TU9-ed-ofw" id="1OL-aw-xNL">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="MSP-Iu-ix3">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="TU9-ed-ofw"/>
|
||||
<menuItem title="Item 2" id="7wI-Tn-rE0"/>
|
||||
<menuItem title="Item 3" id="bQc-pc-ccM"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="Fxc-YB-SF9"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.printer" id="3l1-Hn-v47"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="M2s-qn-SIT" column="zpB-Rf-dWg" id="8R2-aA-mLq">
|
||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MH0-Nk-5Py">
|
||||
<rect key="frame" x="-2" y="5" width="104" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Modem:" id="HQq-VN-Ju9">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="M2s-qn-SIT" column="6Vn-yh-FoQ" id="idI-pW-e7v">
|
||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="13" translatesAutoresizingMaskIntoConstraints="NO" id="KHf-kC-BpZ">
|
||||
<rect key="frame" x="104" y="-1" width="205" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="CxO-3g-va1" id="jDr-6p-C7y">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="lxi-Z0-ya6">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="CxO-3g-va1"/>
|
||||
<menuItem title="Item 2" id="OpR-vy-iL5"/>
|
||||
<menuItem title="Item 3" id="xvH-9B-ge5"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="pHW-GG-2VQ"/>
|
||||
<binding destination="-2" name="content" keyPath="machine.modem" id="hFa-pj-NnN"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
</gridCells>
|
||||
<point key="canvasLocation" x="268" y="71"/>
|
||||
</gridView>
|
||||
<userDefaultsController representsSharedInstance="YES" id="ZGN-Cx-9po"/>
|
||||
</outlineView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="rYF-ld-adB">
|
||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="4pL-Dn-e75" customClass="TransparentScroller">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
||||
<color key="value" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</scroller>
|
||||
<point key="canvasLocation" x="-100" y="154"/>
|
||||
</scrollView>
|
||||
<viewController id="ziL-Zf-s1k" userLabel="Popover View Controller">
|
||||
<connections>
|
||||
<outlet property="view" destination="uew-UQ-Q25" id="qjB-ya-gFf"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<popover behavior="t" id="QIT-2T-wdy">
|
||||
<connections>
|
||||
<outlet property="contentViewController" destination="ziL-Zf-s1k" id="rj8-2U-9t0"/>
|
||||
</connections>
|
||||
</popover>
|
||||
<customView id="uew-UQ-Q25">
|
||||
<rect key="frame" x="0.0" y="0.0" width="250" height="400"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<button id="2jh-iq-DV6">
|
||||
<rect key="frame" x="232" y="382" width="14" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSStopProgressFreestandingTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="Wp7-Km-kYI">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
Gw
|
||||
</string>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="performClose:" target="QIT-2T-wdy" id="Q04-24-ZOK"/>
|
||||
</connections>
|
||||
</button>
|
||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="27" horizontalPageScroll="10" verticalLineScroll="27" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="5gB-oE-Gza">
|
||||
<rect key="frame" x="0.0" y="20" width="250" height="360"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" focusRingType="none" drawsBackground="NO" copiesOnScroll="NO" id="X5e-Ka-JLr">
|
||||
<rect key="frame" x="0.0" y="0.0" width="250" height="360"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="25" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" autoresizesOutlineColumn="YES" outlineTableColumn="o1K-z1-KVi" id="uM0-Gk-crn">
|
||||
<rect key="frame" x="0.0" y="0.0" width="250" height="360"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="230" minWidth="40" maxWidth="1000" id="o1K-z1-KVi">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="A12-NQ-gW3">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="MenuCell" id="Mgb-8H-DmI" customClass="SlotTableCellView">
|
||||
<rect key="frame" x="1" y="1" width="230" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ThL-Yz-7Kd">
|
||||
<rect key="frame" x="1" y="0.0" width="229" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="djR-rV-wzX" id="SkW-fW-gwL">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" autoenablesItems="NO" id="7Ib-TL-f6U">
|
||||
<items>
|
||||
<menuItem title="Item 1" state="on" id="djR-rV-wzX"/>
|
||||
<menuItem title="Item 2" id="qbC-4D-6t6"/>
|
||||
<menuItem title="Item 3" id="qPv-x5-zpj"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="menuChanged:" target="-2" id="ytA-nD-fIS"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="menuButton" destination="ThL-Yz-7Kd" id="3Oc-hx-qKl"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="-2" id="HXP-pH-3Lc"/>
|
||||
<outlet property="delegate" destination="-2" id="nwb-IL-MsP"/>
|
||||
</connections>
|
||||
</outlineView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Keh-oo-CPO">
|
||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="wtc-gL-alh" customClass="TransparentScroller">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
<point key="canvasLocation" x="-451" y="61"/>
|
||||
</customView>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSListViewTemplate" width="14" height="10"/>
|
||||
<image name="NSStopProgressFreestandingTemplate" width="14" height="14"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
34
Ample/BookmarkManager.h
Normal file
34
Ample/BookmarkManager.h
Normal file
@@ -0,0 +1,34 @@
|
||||
//
|
||||
// BookmarkManager.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 6/1/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class NSMenu;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface BookmarkManager : NSObject
|
||||
|
||||
@property (weak) IBOutlet NSMenu *menu;
|
||||
|
||||
+(instancetype)sharedManager;
|
||||
|
||||
-(void)loadBookmarks;
|
||||
-(void)updateMenu;
|
||||
|
||||
-(BOOL)validateName: (NSString *)name;
|
||||
|
||||
-(BOOL)saveBookmark: (NSDictionary *)bookmark name: (NSString *)name;
|
||||
-(NSDictionary *)loadBookmarkFromURL: (NSURL *)url;
|
||||
|
||||
-(BOOL)saveDefault: (NSDictionary *)bookmark;
|
||||
-(NSDictionary *)loadDefault;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
214
Ample/BookmarkManager.m
Normal file
214
Ample/BookmarkManager.m
Normal file
@@ -0,0 +1,214 @@
|
||||
//
|
||||
// BookmarkManager.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 6/1/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "BookmarkManager.h"
|
||||
#import "Ample.h"
|
||||
|
||||
@interface BookmarkManager () {
|
||||
NSArray<NSURL *> *_urls;
|
||||
NSURL *_bookmarkDirectory;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation BookmarkManager
|
||||
|
||||
static BookmarkManager *singleton = nil;
|
||||
|
||||
-(void)awakeFromNib {
|
||||
if (!singleton) singleton = self;
|
||||
}
|
||||
|
||||
+(instancetype)sharedManager {
|
||||
if (!singleton) singleton = [BookmarkManager new];
|
||||
return singleton;
|
||||
}
|
||||
|
||||
-(instancetype)init {
|
||||
if (singleton) return singleton;
|
||||
return [super init];
|
||||
}
|
||||
|
||||
-(NSURL *)bookmarkDirectory {
|
||||
|
||||
if (_bookmarkDirectory) return _bookmarkDirectory;
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
NSURL *url = SupportDirectory();
|
||||
url = [url URLByAppendingPathComponent: @"Bookmarks"];
|
||||
NSError *error = nil;
|
||||
[fm createDirectoryAtURL: url withIntermediateDirectories: YES attributes: nil error: &error];
|
||||
if (error) NSLog(@"%@", error);
|
||||
_bookmarkDirectory = url;
|
||||
return url;
|
||||
}
|
||||
|
||||
/* disallow leading .
|
||||
* disallow : or / characters.
|
||||
*/
|
||||
-(BOOL)validateName: (NSString *)name {
|
||||
|
||||
enum { kMaxLength = 128 };
|
||||
unichar buffer[kMaxLength];
|
||||
NSUInteger length = [name length];
|
||||
if (length == 0 || length > kMaxLength) return NO;
|
||||
[name getCharacters: buffer range: NSMakeRange(0, length)];
|
||||
if (buffer[0] == '.') return NO;
|
||||
for (unsigned i = 0; i < length; ++i) {
|
||||
unichar c = buffer[i];
|
||||
if (c == ':' || c == '/') return NO;
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
-(NSDictionary *)loadDefault {
|
||||
NSURL *url = [self bookmarkDirectory];
|
||||
url = [url URLByAppendingPathComponent: @".Default"];
|
||||
|
||||
NSDictionary *d;
|
||||
|
||||
if (@available(macOS 10.13, *)) {
|
||||
NSError *error = nil;
|
||||
d = [NSDictionary dictionaryWithContentsOfURL: url error: &error];
|
||||
if (!d) NSLog(@"Error loading %@: %@", url, error);
|
||||
} else {
|
||||
d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
if (!d) NSLog(@"Error loading %@", url);
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
/* save as .Default */
|
||||
-(BOOL)saveDefault: (NSDictionary *)bookmark {
|
||||
|
||||
NSURL *url = [self bookmarkDirectory];
|
||||
url = [url URLByAppendingPathComponent: @".Default"];
|
||||
|
||||
NSError *error = nil;
|
||||
BOOL ok = NO;
|
||||
if (@available(macOS 10.13, *)) {
|
||||
ok = [bookmark writeToURL: url error: &error];
|
||||
if (!ok) NSLog(@"%@", error);
|
||||
} else {
|
||||
ok = [bookmark writeToURL: url atomically: YES];
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
-(BOOL)saveBookmark: (NSDictionary *)bookmark name: (NSString *)name {
|
||||
|
||||
NSError *error;
|
||||
NSData *data = [NSPropertyListSerialization dataWithPropertyList: bookmark
|
||||
format: NSPropertyListXMLFormat_v1_0
|
||||
options: 0
|
||||
error: &error];
|
||||
|
||||
|
||||
|
||||
NSURL *base = [self bookmarkDirectory];
|
||||
|
||||
NSURL *url = [base URLByAppendingPathComponent: name];
|
||||
|
||||
BOOL ok = [data writeToURL: url options: NSDataWritingWithoutOverwriting error: &error];
|
||||
|
||||
if (!ok) {
|
||||
for (unsigned i = 1 ; i < 100; ++i) {
|
||||
NSString *tmp = [name stringByAppendingFormat: @"(%d)", i];
|
||||
[base URLByAppendingPathComponent: tmp];
|
||||
|
||||
ok = [data writeToURL: url options: NSDataWritingWithoutOverwriting error: &error];
|
||||
if (ok) {
|
||||
name = tmp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!ok) return NO;
|
||||
|
||||
if (!_menu) return YES; // ?
|
||||
|
||||
NSUInteger ix = [_urls indexOfObjectPassingTest: ^BOOL(NSURL *object, NSUInteger index, BOOL *stop){
|
||||
NSString *path = [object lastPathComponent];
|
||||
return [name caseInsensitiveCompare: path] == NSOrderedAscending;
|
||||
}];
|
||||
|
||||
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle: name action: @selector(bookmarkMenu:) keyEquivalent: @""];
|
||||
[item setRepresentedObject: url];
|
||||
|
||||
if (ix == NSNotFound) {
|
||||
_urls = [_urls arrayByAddingObject: url];
|
||||
[_menu addItem: item];
|
||||
} else {
|
||||
|
||||
NSInteger n = [_menu numberOfItems];
|
||||
[_menu insertItem: item atIndex: n - [_urls count] + ix];
|
||||
NSMutableArray *tmp = [_urls mutableCopy];
|
||||
|
||||
[tmp insertObject: url atIndex: ix];
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(NSDictionary *)loadBookmarkFromURL: (NSURL *)url {
|
||||
|
||||
NSDictionary *d;
|
||||
|
||||
if (@available(macOS 10.13, *)) {
|
||||
NSError *error = nil;
|
||||
d = [NSDictionary dictionaryWithContentsOfURL: url error: &error];
|
||||
if (!d) NSLog(@"Error loading %@: %@", url, error);
|
||||
} else {
|
||||
d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
if (!d) NSLog(@"Error loading %@", url);
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
|
||||
-(void)loadBookmarks {
|
||||
|
||||
NSURL *url = [self bookmarkDirectory];
|
||||
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
NSError *error = nil;
|
||||
|
||||
NSArray *files = [fm contentsOfDirectoryAtURL: url
|
||||
includingPropertiesForKeys: nil
|
||||
options: NSDirectoryEnumerationSkipsHiddenFiles
|
||||
error: &error];
|
||||
|
||||
// bleh, has to create 2 new NSStrings for every comparison
|
||||
files = [files sortedArrayUsingComparator: ^(NSURL *a, NSURL *b){
|
||||
NSString *aa = [a lastPathComponent];
|
||||
NSString *bb = [b lastPathComponent];
|
||||
return [aa caseInsensitiveCompare: bb];
|
||||
}];
|
||||
|
||||
|
||||
_urls = files;
|
||||
}
|
||||
|
||||
-(void)updateMenu {
|
||||
|
||||
NSArray *menus = [_menu itemArray];
|
||||
for (NSMenuItem *item in [menus reverseObjectEnumerator]) {
|
||||
if ([item tag] == 0xdeadbeef) [_menu removeItem: item];
|
||||
}
|
||||
for (NSURL *url in _urls) {
|
||||
NSString *title = [url lastPathComponent]; // [[url lastPathComponent] stringByDeletingPathExtension];
|
||||
|
||||
NSMenuItem *item = [_menu addItemWithTitle: title action: @selector(bookmarkMenu:) keyEquivalent: @""];
|
||||
[item setRepresentedObject: url];
|
||||
[item setTag: 0xdeadbeef];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
17
Ample/CheatSheetWindowController.h
Normal file
17
Ample/CheatSheetWindowController.h
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// CheatSheetWindowController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 1/14/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface CheatSheetWindowController : NSWindowController
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
61
Ample/CheatSheetWindowController.m
Normal file
61
Ample/CheatSheetWindowController.m
Normal file
@@ -0,0 +1,61 @@
|
||||
//
|
||||
// CheatSheetWindowController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 1/14/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "CheatSheetWindowController.h"
|
||||
|
||||
#import <WebKit/WebKit.h>
|
||||
|
||||
@interface CheatSheetWindowController ()
|
||||
@property (weak) IBOutlet WKWebView *webView;
|
||||
|
||||
@end
|
||||
|
||||
@interface CheatSheetWindowController (NavigationDelegate) <WKNavigationDelegate>
|
||||
@end
|
||||
|
||||
@implementation CheatSheetWindowController
|
||||
|
||||
-(NSString *)windowNibName {
|
||||
return @"CheatSheet";
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
|
||||
if (!_webView) {
|
||||
WKWebView *webView;
|
||||
NSWindow *window = [self window];
|
||||
CGRect frame = [[window contentView] frame];
|
||||
|
||||
|
||||
webView = [WKWebView new];
|
||||
[webView setFrame: frame];
|
||||
[webView setNavigationDelegate: self];
|
||||
[[window contentView]addSubview: webView];
|
||||
_webView = webView;
|
||||
}
|
||||
|
||||
|
||||
[_webView setHidden: YES];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSURL *url = [bundle URLForResource: @"CheatSheet" withExtension: @"html"];
|
||||
//[[[_webView configuration] preferences] setValue: @YES forKey: @"developerExtrasEnabled"];
|
||||
[_webView loadFileURL: url allowingReadAccessToURL: url];
|
||||
|
||||
}
|
||||
|
||||
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
|
||||
// delay to prevent flash in dark mode.
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0/8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[webView setHidden: NO];
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -3,7 +3,7 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>MameComponentsDate</key>
|
||||
<date>2020-09-02T16:00:00Z</date>
|
||||
<date>2021-06-15T16:00:00Z</date>
|
||||
<key>UseCustomMame</key>
|
||||
<false/>
|
||||
<key>AutoCloseLogWindow</key>
|
||||
@@ -15,8 +15,8 @@
|
||||
<key>NSQuitAlwaysKeepsWindows</key>
|
||||
<true/>
|
||||
<key>DefaultDownloadURL</key>
|
||||
<string>https://archive.org/download/mame0226_rom</string>
|
||||
<string>https://archive.org/download/mame.0229</string>
|
||||
<key>DefaultDownloadExtension</key>
|
||||
<string>7z</string>
|
||||
<string>zip</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -67,8 +67,11 @@
|
||||
[window setRestorable: YES];
|
||||
[window setRestorationClass: [self class]];
|
||||
|
||||
|
||||
[_tableView registerForDraggedTypes: @[NSPasteboardTypeFileURL]];
|
||||
if (@available(macOS 10.13, *)) {
|
||||
[_tableView registerForDraggedTypes: @[NSPasteboardTypeFileURL]];
|
||||
} else {
|
||||
[_tableView registerForDraggedTypes: @[ (NSString *)kUTTypeFileURL ]];
|
||||
}
|
||||
[_tableView setDraggingSourceOperationMask: NSDragOperationCopy forLocal: NO]; // enable drag/drop to othr apps.
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
@@ -95,6 +98,11 @@
|
||||
[nc addObserver: self selector: @selector(willTerminate:) name: NSApplicationWillTerminateNotification object: nil];
|
||||
}
|
||||
|
||||
-(void)timerCallback: (NSTimer *)timer {
|
||||
_timer = nil;
|
||||
[self saveFile];
|
||||
}
|
||||
|
||||
-(void)diskImageAdded: (NSNotification *)notification {
|
||||
|
||||
NSURL *url = [notification object];
|
||||
@@ -105,11 +113,15 @@
|
||||
-(void)markDirty {
|
||||
_dirty = YES;
|
||||
if (_timer) [_timer invalidate];
|
||||
_timer = [NSTimer scheduledTimerWithTimeInterval: 5 * 60 target: self selector: @selector(timerCallback:) userInfo: nil repeats: NO];
|
||||
#if 0
|
||||
// 10.12+
|
||||
_timer = [NSTimer scheduledTimerWithTimeInterval: 5 * 60 repeats: NO block: ^(NSTimer *t) {
|
||||
|
||||
self->_timer = nil;
|
||||
[self saveFile];
|
||||
}];
|
||||
#endif
|
||||
}
|
||||
|
||||
-(void)saveFile {
|
||||
@@ -199,11 +211,10 @@
|
||||
|
||||
-(NSMutableDictionary *)clickedItem {
|
||||
|
||||
NSArray *array = [_arrayController arrangedObjects];
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0) return nil;
|
||||
|
||||
NSTableCellView *v = [_tableView viewAtColumn: 0 row: row makeIfNecessary: NO];
|
||||
return [v objectValue];
|
||||
if (row < 0 || row >= [array count]) return nil;
|
||||
return [array objectAtIndex: row];
|
||||
}
|
||||
#pragma mark - IBActions
|
||||
|
||||
@@ -241,19 +252,6 @@
|
||||
|
||||
@implementation DiskImagesWindowController (TableView)
|
||||
|
||||
#if 0
|
||||
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
||||
return 5; //[_data count];
|
||||
}
|
||||
|
||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||
|
||||
NSTableCellView *v = [tableView makeViewWithIdentifier: @"PathCell" owner: self];
|
||||
|
||||
return v;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
-(id<NSPasteboardWriting>)tableView:(NSTableView *)tableView pasteboardWriterForRow:(NSInteger)row {
|
||||
|
||||
@@ -306,11 +304,16 @@
|
||||
for (NSPasteboardItem *item in [pb pasteboardItems]) {
|
||||
|
||||
// need to convert from a string to a url back to a file in case it's a file id url?
|
||||
NSString *s = [item stringForType: NSPasteboardTypeFileURL];
|
||||
NSString *s;
|
||||
if (@available(macOS 10.13, *)) {
|
||||
s = [item stringForType: NSPasteboardTypeFileURL];
|
||||
} else {
|
||||
// El Capitan still has kUTTypeFileURL aka public.file-url but doesn't have NSPasteboardTypeFileURL
|
||||
s = [item stringForType: (NSString *)kUTTypeFileURL];
|
||||
}
|
||||
if (!s) continue;
|
||||
NSURL *url = [NSURL URLWithString: s];
|
||||
if (!url) continue;
|
||||
|
||||
ok |= [self addFile: url];
|
||||
}
|
||||
return ok;
|
||||
|
||||
@@ -26,17 +26,9 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@interface DownloadWindowController (URL) <NSURLSessionTaskDelegate, NSURLSessionDownloadDelegate>
|
||||
@end
|
||||
|
||||
@interface DownloadWindowController (Table) <NSTableViewDelegate, NSTableViewDataSource>
|
||||
@end
|
||||
|
||||
@interface DownloadWindowController (Menu) <NSMenuDelegate, NSMenuItemValidation>
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface DownloadTableCellView : NSTableCellView
|
||||
@property (weak) IBOutlet NSTextField *statusTextField;
|
||||
@property (weak) IBOutlet NSProgressIndicator *activity;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -90,6 +90,9 @@ enum {
|
||||
@property NSUInteger status;
|
||||
@property NSUInteger index;
|
||||
|
||||
@property (readonly) NSColor *titleColor;
|
||||
@property (readonly) NSColor *descriptionColor;
|
||||
|
||||
|
||||
-(void)cancelDownload;
|
||||
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task;
|
||||
@@ -98,6 +101,21 @@ enum {
|
||||
@end
|
||||
|
||||
|
||||
@interface DownloadItemArrayController : NSArrayController
|
||||
|
||||
@property(readonly, copy) NSArray<NSString *> *automaticRearrangementKeyPaths;
|
||||
|
||||
@end
|
||||
|
||||
@implementation DownloadItemArrayController
|
||||
|
||||
-(NSArray<NSString *> *)automaticRearrangementKeyPaths {
|
||||
return @[@"localURL"]; // , @"error", @"task", @"statusDescription"];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface DownloadWindowController ()
|
||||
@property (weak) IBOutlet NSTableView *tableView;
|
||||
@@ -105,6 +123,14 @@ enum {
|
||||
@property (weak) IBOutlet NSTextField *downloadField;
|
||||
@property NSString *downloadExtension;
|
||||
|
||||
/* filter buttons */
|
||||
@property (weak) IBOutlet NSButton *allFilterButton;
|
||||
@property (weak) IBOutlet NSButton *missingFilterButton;
|
||||
|
||||
@property (strong) IBOutlet NSArrayController *arrayController;
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@implementation DownloadWindowController {
|
||||
@@ -117,6 +143,8 @@ enum {
|
||||
NSURLSession *_session;
|
||||
NSMutableDictionary *_taskIndex;
|
||||
NSUserDefaults *_defaults;
|
||||
|
||||
NSArray<NSButton *> *_filterButtons;
|
||||
}
|
||||
|
||||
+(instancetype)sharedInstance {
|
||||
@@ -166,6 +194,12 @@ enum {
|
||||
[window setRestorationClass: [self class]];
|
||||
#endif
|
||||
|
||||
_filterButtons = @[
|
||||
_allFilterButton,
|
||||
_missingFilterButton
|
||||
];
|
||||
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
|
||||
NSError *error = nil;
|
||||
@@ -217,6 +251,7 @@ enum {
|
||||
}
|
||||
_items = tmp;
|
||||
[self refreshROMs: nil];
|
||||
[_arrayController setContent: _items];
|
||||
|
||||
//[_tableView reloadData];
|
||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
@@ -299,8 +334,10 @@ enum {
|
||||
-(DownloadItem *)clickedItem {
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0 || row >= [_items count]) return nil;
|
||||
return [_items objectAtIndex: row];
|
||||
return [[_arrayController arrangedObjects] objectAtIndex: row];
|
||||
//return [_items objectAtIndex: row];
|
||||
}
|
||||
#if 0
|
||||
-(void)redrawRow: (NSUInteger)row {
|
||||
|
||||
//NSRect r = [_tableView rectOfRow: row];
|
||||
@@ -311,7 +348,7 @@ enum {
|
||||
|
||||
[_tableView reloadDataForRowIndexes: rIx columnIndexes: cIx];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
-(void)initializeExtensionMenu {
|
||||
|
||||
@@ -350,7 +387,7 @@ enum {
|
||||
[self setCurrentCount: 0];
|
||||
[self setActive: NO];
|
||||
|
||||
[_tableView reloadData];
|
||||
//[_tableView reloadData];
|
||||
//[_tableView setNeedsDisplay: YES]; // doesn't work...
|
||||
}
|
||||
|
||||
@@ -368,7 +405,7 @@ enum {
|
||||
|
||||
if (delta) {
|
||||
[self setActive: YES];
|
||||
[_tableView reloadData];
|
||||
//[_tableView reloadData];
|
||||
}
|
||||
}
|
||||
- (IBAction)showRomFolder:(id)sender {
|
||||
@@ -399,11 +436,10 @@ enum {
|
||||
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
[item setStatus: ItemMissing];
|
||||
[item setLocalURL: nil];
|
||||
}
|
||||
// only needed if items aren't bound.
|
||||
[_tableView reloadData];
|
||||
}
|
||||
|
||||
- (IBAction)showInFinder:(id)sender {
|
||||
@@ -422,14 +458,14 @@ enum {
|
||||
|
||||
[self downloadItem: item];
|
||||
[self setActive: YES];
|
||||
[self redrawRow: [item index]];
|
||||
//[self redrawRow: [item index]];
|
||||
}
|
||||
- (IBAction)cancel:(id)sender {
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
|
||||
[item cancelDownload];
|
||||
[self redrawRow: [item index]];
|
||||
//[self redrawRow: [item index]];
|
||||
}
|
||||
|
||||
// binding screws up with placeholder.
|
||||
@@ -449,6 +485,36 @@ enum {
|
||||
[_defaults setValue: _downloadExtension forKey: kDownloadExtension];
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)filterButton:(id)sender {
|
||||
|
||||
NSPredicate *p = nil;
|
||||
NSUInteger tag = [sender tag];
|
||||
[sender setState: NSControlStateValueOn];
|
||||
|
||||
|
||||
|
||||
for (NSButton *b in _filterButtons) {
|
||||
if (b != sender) [b setState: NSControlStateValueOff];
|
||||
}
|
||||
switch (tag) {
|
||||
case 1: // all
|
||||
default:
|
||||
[_arrayController setFilterPredicate: nil];
|
||||
break;
|
||||
case 2: // missing.
|
||||
p = [NSPredicate predicateWithBlock: ^BOOL(DownloadItem *item, NSDictionary *bindings){
|
||||
NSURL *localURL = [item localURL];
|
||||
return localURL == nil;
|
||||
}];
|
||||
|
||||
[_arrayController setFilterPredicate: p];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark - NSURLSessionDelegate
|
||||
|
||||
static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
||||
@@ -495,9 +561,9 @@ static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
||||
|
||||
if (item) {
|
||||
[item completeWithError: error];
|
||||
NSUInteger row = [item index];
|
||||
//NSUInteger row = [item index];
|
||||
|
||||
[self redrawRow: row];
|
||||
//[self redrawRow: row];
|
||||
}
|
||||
});
|
||||
|
||||
@@ -536,91 +602,46 @@ static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
||||
|
||||
@end
|
||||
|
||||
@implementation DownloadWindowController (Table)
|
||||
|
||||
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
||||
return [_items count];
|
||||
}
|
||||
|
||||
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||
|
||||
return [_items objectAtIndex: row];
|
||||
}
|
||||
|
||||
|
||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||
|
||||
DownloadItem *item = [_items objectAtIndex: row];
|
||||
DownloadTableCellView *v = [tableView makeViewWithIdentifier: @"DownloadCell" owner: self];
|
||||
|
||||
NSTextField *tf;
|
||||
NSColor *redColor = [NSColor systemRedColor];
|
||||
|
||||
tf = [v textField];
|
||||
[[v textField] setObjectValue: [item name]];
|
||||
|
||||
if ([item localURL]) {
|
||||
[tf setTextColor: nil];
|
||||
} else {
|
||||
[tf setTextColor: redColor];
|
||||
}
|
||||
|
||||
tf = [v statusTextField];
|
||||
[tf setObjectValue: [item statusDescription]];
|
||||
if ([item error]) {
|
||||
[tf setTextColor: redColor];
|
||||
} else {
|
||||
[tf setTextColor: nil];
|
||||
//if ([tableView isRowSelected: row]){
|
||||
//[tf setTextColor: [NSColor whiteColor]];
|
||||
//}
|
||||
}
|
||||
|
||||
if ([item task]) {
|
||||
[[v activity] startAnimation: nil];
|
||||
} else {
|
||||
[[v activity] stopAnimation: nil];
|
||||
}
|
||||
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation DownloadTableCellView
|
||||
|
||||
@end
|
||||
|
||||
@implementation DownloadItem
|
||||
|
||||
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task {
|
||||
_task = task;
|
||||
_error = nil;
|
||||
if (task) _status = ItemDownloading;
|
||||
[self setTask: task];
|
||||
[self setError: nil];
|
||||
if (task) [self setStatus: ItemDownloading];
|
||||
}
|
||||
|
||||
-(void)cancelDownload {
|
||||
if (!_task) return;
|
||||
|
||||
[_task cancel];
|
||||
_task = nil;
|
||||
_status = ItemCanceled;
|
||||
[self setTask: nil];
|
||||
[self setStatus: ItemCanceled];
|
||||
}
|
||||
|
||||
-(void)completeWithError: (NSError *)error {
|
||||
_task = nil;
|
||||
[self setTask: nil];
|
||||
if (error) {
|
||||
_error = error;
|
||||
_status = ItemError;
|
||||
[self setError: error];
|
||||
[self setStatus: ItemError];
|
||||
} else {
|
||||
// what if there was an error moving it?
|
||||
_error = nil;
|
||||
_status = ItemDownloaded;
|
||||
[self setError: nil];
|
||||
[self setStatus: ItemDownloaded];
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
// in practice, error and status set concurrently.
|
||||
+(NSSet *)keyPathsForValuesAffectingStatus {
|
||||
static NSSet *set = nil;
|
||||
if (!set) set = [NSSet setWithObjects: @"error", nil];
|
||||
return set;
|
||||
}
|
||||
#endif
|
||||
|
||||
-(NSString *)statusDescription {
|
||||
|
||||
static NSString *Names[] = {
|
||||
@@ -637,6 +658,19 @@ static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
||||
return Names[_status];
|
||||
}
|
||||
|
||||
+(NSSet *)keyPathsForValuesAffectingTitleColor {
|
||||
return [NSSet setWithObject: @"localURL"];
|
||||
}
|
||||
-(NSColor *)titleColor {
|
||||
return _localURL ? nil : [NSColor systemRedColor];
|
||||
}
|
||||
+(NSSet *)keyPathsForValuesAffectingDescriptionColor {
|
||||
return [NSSet setWithObject: @"error"];
|
||||
}
|
||||
-(NSColor *)descriptionColor {
|
||||
return _error ? [NSColor systemRedColor] : nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -655,7 +689,7 @@ enum {
|
||||
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0) return NO;
|
||||
DownloadItem *item = [_items objectAtIndex: row];
|
||||
DownloadItem *item = [[_arrayController arrangedObjects] objectAtIndex: row]; //[_items objectAtIndex: row];
|
||||
|
||||
NSUInteger status = [item status];
|
||||
switch([menuItem tag]) {
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2020 Kelvin Sherlock. All rights reserved.</string>
|
||||
<string>Copyright © 2020-2021 Kelvin Sherlock. All rights reserved.</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
@@ -59,5 +59,9 @@
|
||||
<true/>
|
||||
<key>NSSupportsSuddenTermination</key>
|
||||
<true/>
|
||||
<key>SUFeedURL</key>
|
||||
<string>https://ample.ksherlock.com/updates/appcast.xml</string>
|
||||
<key>SUPublicEDKey</key>
|
||||
<string>MgYKY5J1nIJ9+C3IabG24ri2M0CuoMqP78fva2GI5BY=</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -9,18 +9,29 @@
|
||||
#import "Ample.h"
|
||||
#import "LaunchWindowController.h"
|
||||
#import "MediaViewController.h"
|
||||
#import "NewSlotViewController.h"
|
||||
#import "MachineViewController.h"
|
||||
#import "SlotViewController.h"
|
||||
#import "NewMachineViewController.h"
|
||||
#import "LogWindowController.h"
|
||||
|
||||
#import "AutocompleteControl.h"
|
||||
#import "SoftwareList.h"
|
||||
#import "BookmarkManager.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <wctype.h>
|
||||
|
||||
static NSString *kMyContext = @"kMyContext";
|
||||
static NSString *kContextMachine = @"kContextMachine";
|
||||
|
||||
|
||||
@interface LaunchWindowController ()
|
||||
@interface LaunchWindowController () {
|
||||
BOOL _loadingBookmark;
|
||||
NSString *_machine;
|
||||
NSDictionary *_machineDescription;
|
||||
}
|
||||
@property (strong) IBOutlet MediaViewController *mediaController;
|
||||
@property (strong) IBOutlet NewSlotViewController *slotController;
|
||||
@property (strong) IBOutlet MachineViewController *machineViewController;
|
||||
@property (strong) IBOutlet SlotViewController *slotController;
|
||||
@property (strong) IBOutlet NewMachineViewController *machineViewController;
|
||||
|
||||
@property (weak) IBOutlet NSView *machineView;
|
||||
@property (weak) IBOutlet NSView *slotView;
|
||||
@@ -30,30 +41,94 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
@property NSString *commandLine;
|
||||
@property NSArray *args;
|
||||
|
||||
@property NSString *mameMachine;
|
||||
@property NSString *machine;
|
||||
//@property NSString *machineName;
|
||||
|
||||
@property BOOL mameDebug;
|
||||
@property BOOL mameSquarePixels;
|
||||
@property BOOL mameMouse;
|
||||
@property BOOL mameSamples;
|
||||
@property BOOL mameBGFX;
|
||||
|
||||
@property BOOL mameAVI;
|
||||
@property BOOL mameWAV;
|
||||
@property BOOL mameVGM;
|
||||
@property BOOL mameBitBanger;
|
||||
@property BOOL mameShareDirectory;
|
||||
|
||||
@property NSString *mameAVIPath;
|
||||
@property NSString *mameWAVPath;
|
||||
@property NSString *mameVGMPath;
|
||||
@property NSString *mameShareDirectoryPath;
|
||||
@property NSString *mameBitBangerPath;
|
||||
|
||||
@property NSInteger mameSpeed;
|
||||
|
||||
@property BOOL mameBGFX;
|
||||
@property NSInteger mameBackend;
|
||||
@property NSInteger mameEffects;
|
||||
|
||||
|
||||
@property NSInteger mameWindowMode;
|
||||
|
||||
@property (weak) IBOutlet AutocompleteControl *softwareListControl;
|
||||
@property SoftwareSet *softwareSet;
|
||||
@property Software *software;
|
||||
|
||||
|
||||
|
||||
@property (strong) IBOutlet NSWindow *addBookmarkWindow;
|
||||
@property (strong) NSString *bookmarkName;
|
||||
@property (weak) IBOutlet NSTextField *bookmarkTextField;
|
||||
@end
|
||||
|
||||
@interface LaunchWindowController (SoftwareList)
|
||||
|
||||
-(void)updateSoftwareList;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface LaunchWindowController (Bookmark)
|
||||
|
||||
-(IBAction)addBookmark:(id)sender;
|
||||
|
||||
-(IBAction)defaultLoad:(id)sender;
|
||||
|
||||
@end
|
||||
|
||||
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
||||
static NSString *BackendStrings[] = {
|
||||
@"",
|
||||
@"metal",
|
||||
@"opengl",
|
||||
};
|
||||
|
||||
static NSString *EffectsStrings[] = {
|
||||
@"-",
|
||||
@"unfiltered",
|
||||
@"hlsl",
|
||||
@"crt-geom",
|
||||
@"crt-geom-deluxe",
|
||||
@"lcd-grid",
|
||||
};
|
||||
|
||||
|
||||
static int BackEndIndex(NSString *str) {
|
||||
if (!str) return -1;
|
||||
for (int i = 1; i < SIZEOF(BackendStrings); ++i) {
|
||||
if ([str isEqualToString: BackendStrings[i]]) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int EffectsIndex(NSString *str) {
|
||||
if (!str) return -1;
|
||||
for (int i = 1; i < SIZEOF(EffectsStrings); ++i) {
|
||||
if ([str isEqualToString: EffectsStrings[i]]) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@implementation LaunchWindowController
|
||||
|
||||
@@ -61,32 +136,90 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
return @"LaunchWindow";
|
||||
}
|
||||
|
||||
-(void)windowWillLoad {
|
||||
-(void)reset {
|
||||
// handled elsewhere.
|
||||
//[self setMachine: nil];
|
||||
|
||||
[self setMameSpeed: 1];
|
||||
[self setMameBGFX: YES];
|
||||
[self setMameMouse: NO];
|
||||
[self setMameSamples: NO];
|
||||
[self setMameSquarePixels: NO];
|
||||
[self setMameDebug: NO];
|
||||
[self setMameWindowMode: 0];
|
||||
|
||||
[self setMameBackend: 0];
|
||||
[self setMameEffects: 0];
|
||||
|
||||
[self setMameBitBangerPath: nil];
|
||||
[self setMameShareDirectoryPath: nil];
|
||||
[self setMameAVIPath: nil];
|
||||
[self setMameWAVPath: nil];
|
||||
[self setMameVGMPath: nil];
|
||||
|
||||
[self setMameAVI: NO];
|
||||
[self setMameWAV: NO];
|
||||
[self setMameVGM: NO];
|
||||
[self setMameBitBanger: NO];
|
||||
[self setMameShareDirectory: NO];
|
||||
|
||||
#if 0
|
||||
[self setSoftware: nil];
|
||||
//_softwareSet = nil;
|
||||
[_softwareListControl setObjectValue: nil];
|
||||
#endif
|
||||
}
|
||||
|
||||
-(void)resetSoftware {
|
||||
[self setSoftware: nil];
|
||||
//_softwareSet = nil;
|
||||
[_softwareListControl setObjectValue: nil];
|
||||
}
|
||||
|
||||
-(void)windowWillLoad {
|
||||
|
||||
// if this calls [self window], it will recurse. that is bad.
|
||||
//[self defaultLoad: nil];
|
||||
[self reset];
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void AddSubview(NSView *parent, NSView *child) {
|
||||
|
||||
[child setFrame: [parent bounds]];
|
||||
[parent addSubview: child];
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
|
||||
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
|
||||
AddSubview(_slotView, [_slotController view]);
|
||||
AddSubview(_mediaView, [_mediaController view]);
|
||||
AddSubview(_machineView, [_machineViewController view]);
|
||||
|
||||
|
||||
// can't be done until above views are set up.
|
||||
[self defaultLoad: nil];
|
||||
|
||||
[_slotView addSubview: [_slotController view]];
|
||||
[_mediaView addSubview: [_mediaController view]];
|
||||
[_machineView addSubview: [_machineViewController view]];
|
||||
|
||||
|
||||
NSArray *keys = @[
|
||||
@"mameMachine", @"mameSquarePixels", @"mameWindowMode",
|
||||
@"mameMouse",
|
||||
//@"mameMachine", // - handled
|
||||
@"mameSquarePixels", @"mameWindowMode",
|
||||
@"mameMouse", @"mameSamples",
|
||||
@"mameDebug",
|
||||
@"mameSpeed",
|
||||
@"mameAVI", @"mameAVIPath",
|
||||
@"mameWAV", @"mameWAVPath",
|
||||
@"mameVGM", @"mameVGMPath",
|
||||
@"mameShareDirectory", @"mameShareDirectoryPath",
|
||||
@"mameBitBanger", @"mameBitBangerPath",
|
||||
@"mameBGFX", @"mameBackend", @"mameEffects",
|
||||
@"software",
|
||||
];
|
||||
|
||||
for (NSString *key in keys) {
|
||||
@@ -101,6 +234,10 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
|
||||
[_machineViewController addObserver: self forKeyPath: @"machine" options: 0 context: (__bridge void * _Nullable)kContextMachine];
|
||||
|
||||
|
||||
[_softwareListControl setMinWidth: 250];
|
||||
[_softwareListControl setHidden: YES];
|
||||
|
||||
[self buildCommandLine];
|
||||
}
|
||||
|
||||
@@ -108,10 +245,13 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
|
||||
|
||||
if (context == (__bridge void *)kMyContext) {
|
||||
if (_loadingBookmark) return;
|
||||
[self buildCommandLine];
|
||||
} else if (context == (__bridge void *)kContextMachine) {
|
||||
if (_loadingBookmark) return;
|
||||
|
||||
NSString *machine = [_machineViewController machine];
|
||||
[self setMameMachine: machine];
|
||||
[self setMachine: machine];
|
||||
[_slotController setMachine: machine];
|
||||
[self buildCommandLine];
|
||||
} else {
|
||||
@@ -120,39 +260,38 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
}
|
||||
|
||||
|
||||
static NSURL *MameURL(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMamePath];
|
||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
||||
}
|
||||
|
||||
return [bundle URLForAuxiliaryExecutable: @"mame64"];
|
||||
|
||||
return nil;
|
||||
-(NSString *)machine {
|
||||
return _machine;
|
||||
}
|
||||
|
||||
static NSString *MamePath(void) {
|
||||
-(void)setMachine:(NSString *)machine {
|
||||
if (_machine == machine) return;
|
||||
_machine = machine;
|
||||
_machineDescription = MameMachine(machine);
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
#if 0
|
||||
[self setMachineName: [_machineDescription objectForKey: @"description"]];
|
||||
#else
|
||||
NSString *title = _machineDescription
|
||||
? [NSString stringWithFormat: @"Ample – %@", [_machineDescription objectForKey: @"description"]]
|
||||
: @"Ample";
|
||||
|
||||
NSString *path;
|
||||
[[self window] setTitle: title];
|
||||
#endif
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
path = [defaults stringForKey: kMamePath];
|
||||
if ([path length]) return path;
|
||||
}
|
||||
path = [bundle pathForAuxiliaryExecutable: @"mame64"];
|
||||
if ([path length]) return path;
|
||||
return nil;
|
||||
// enable/disable the right-click menu
|
||||
NSWindow *window = [self window];
|
||||
NSView *view = [window contentView];
|
||||
if (_machine) [view setMenu: [window menu]];
|
||||
else [view setMenu: nil];
|
||||
|
||||
|
||||
// software list.
|
||||
[self updateSoftwareList];
|
||||
}
|
||||
|
||||
|
||||
static NSString * JoinArguments(NSArray *argv) {
|
||||
static NSString * JoinArguments(NSArray *argv, NSString *argv0) {
|
||||
|
||||
static NSCharacterSet *safe = nil;
|
||||
static NSCharacterSet *unsafe = nil;
|
||||
@@ -172,9 +311,13 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
|
||||
//unsigned ix = 0;
|
||||
//[rv appendString: @"mame"];
|
||||
NSString *path = MamePath();
|
||||
path = path ? [path lastPathComponent] : @"mame";
|
||||
[rv appendString: path];
|
||||
if (argv0) {
|
||||
[rv appendString: argv0];
|
||||
} else {
|
||||
NSString *path = MamePath();
|
||||
path = path ? [path lastPathComponent] : @"mame";
|
||||
[rv appendString: path];
|
||||
}
|
||||
for (NSString *s in argv) {
|
||||
[rv appendString: @" "];
|
||||
NSUInteger l = [s length];
|
||||
@@ -223,11 +366,72 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
static NSString *ShellQuote(NSString *s) {
|
||||
|
||||
static NSCharacterSet *safe = nil;
|
||||
static NSCharacterSet *unsafe = nil;
|
||||
|
||||
if (!safe) {
|
||||
NSString *str =
|
||||
@"%+-./:=_"
|
||||
@"0123456789"
|
||||
@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
;
|
||||
safe = [NSCharacterSet characterSetWithCharactersInString: str];
|
||||
unsafe = [safe invertedSet];
|
||||
}
|
||||
|
||||
NSUInteger l = [s length];
|
||||
|
||||
if (!l) {
|
||||
return @"''";
|
||||
}
|
||||
|
||||
if (!CFStringFindCharacterFromSet((CFStringRef)s, (CFCharacterSetRef)unsafe, CFRangeMake(0, l), 0, NULL)) {
|
||||
return s;
|
||||
}
|
||||
|
||||
NSMutableString *rv = [NSMutableString new];
|
||||
|
||||
unichar *buffer = malloc(sizeof(unichar) * l);
|
||||
[s getCharacters: buffer range: NSMakeRange(0, l)];
|
||||
|
||||
[rv appendString: @"'"];
|
||||
for (NSUInteger i = 0; i < l; ++i) {
|
||||
unichar c = buffer[i];
|
||||
switch (c) {
|
||||
case '\'':
|
||||
[rv appendString: @"\\'"];
|
||||
break;
|
||||
case '\\':
|
||||
[rv appendString: @"\\\\"];
|
||||
break;
|
||||
case 0x7f:
|
||||
[rv appendString: @"\\177"];
|
||||
break;
|
||||
default: {
|
||||
NSString *cc;
|
||||
if (c < 0x20) {
|
||||
cc = [NSString stringWithFormat: @"\\%o", c];
|
||||
} else {
|
||||
cc = [NSString stringWithCharacters: &c length: 1];
|
||||
}
|
||||
[rv appendString: cc];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
[rv appendString: @"'"];
|
||||
free(buffer);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
-(void)buildCommandLine {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
if (!_mameMachine) {
|
||||
if (!_machine) {
|
||||
[self setCommandLine: @""];
|
||||
return;
|
||||
}
|
||||
@@ -235,7 +439,12 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
NSMutableArray *argv = [NSMutableArray new];
|
||||
|
||||
//[argv addObject: @"mame"];
|
||||
[argv addObject: _mameMachine];
|
||||
[argv addObject: _machine];
|
||||
|
||||
if (_software) {
|
||||
NSString *name = [_softwareSet nameForSoftware: _software];
|
||||
if (name) [argv addObject: name];
|
||||
}
|
||||
|
||||
// -confirm_quit?
|
||||
[argv addObject: @"-skip_gameinfo"];
|
||||
@@ -243,6 +452,9 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
|
||||
if (_mameMouse)
|
||||
[argv addObject: @"-mouse"]; // capture the mouse cursor when over the window.
|
||||
|
||||
if (!_mameSamples)
|
||||
[argv addObject: @"-nosamples"];
|
||||
|
||||
if (_mameDebug) [argv addObject: @"-debug"];
|
||||
|
||||
@@ -294,24 +506,12 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
|
||||
if (_mameBGFX) {
|
||||
if (_mameBackend) {
|
||||
static NSString *Names[] = {
|
||||
@"-",
|
||||
@"metal",
|
||||
@"opengl",
|
||||
};
|
||||
[argv addObject: @"-bgfx_backend"];
|
||||
[argv addObject: Names[_mameBackend]];
|
||||
[argv addObject: BackendStrings[_mameBackend]];
|
||||
}
|
||||
if (_mameEffects) {
|
||||
static NSString *Names[] = {
|
||||
@"-",
|
||||
@"unfiltered",
|
||||
@"hlsl",
|
||||
@"crt-geom",
|
||||
@"crt-geom-deluxe",
|
||||
};
|
||||
[argv addObject: @"-bgfx_screen_chains"];
|
||||
[argv addObject: Names[_mameEffects]];
|
||||
[argv addObject: EffectsStrings[_mameEffects]];
|
||||
}
|
||||
|
||||
} else {
|
||||
@@ -361,44 +561,366 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
}
|
||||
}
|
||||
|
||||
[self setCommandLine: JoinArguments(argv)];
|
||||
if (_mameShareDirectory && [_mameShareDirectoryPath length]) {
|
||||
[argv addObject: @"-share_directory"];
|
||||
[argv addObject: _mameShareDirectoryPath];
|
||||
}
|
||||
|
||||
if (_mameBitBanger && [_mameBitBangerPath length]) {
|
||||
[argv addObject: @"-bitbanger"];
|
||||
[argv addObject: _mameBitBangerPath];
|
||||
}
|
||||
|
||||
[self setCommandLine: JoinArguments(argv, nil)];
|
||||
[self setArgs: argv];
|
||||
}
|
||||
|
||||
|
||||
-(BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||
SEL cmd = [menuItem action];
|
||||
if (cmd == @selector(exportShellScript:)) {
|
||||
return [_args count] ? YES : NO;
|
||||
}
|
||||
if (cmd == @selector(addBookmark:)) {
|
||||
return _machine ? YES : NO;
|
||||
}
|
||||
|
||||
return YES;
|
||||
//return [super validateMenuItem: menuItem]; // not implemented?
|
||||
}
|
||||
|
||||
# pragma mark - IBActions
|
||||
|
||||
|
||||
|
||||
|
||||
- (IBAction)launchAction:(id)sender {
|
||||
|
||||
[[self window] makeFirstResponder: nil]; // in case text is being edited...
|
||||
if (![_args count]) return;
|
||||
|
||||
[LogWindowController controllerForArgs: _args];
|
||||
|
||||
#if 0
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSURL *url = MameURL();
|
||||
|
||||
if (!url) {
|
||||
NSAlert *alert = [NSAlert new];
|
||||
}
|
||||
|
||||
[alert setMessageText: @"Unable to find MAME executable path"];
|
||||
[alert runModal];
|
||||
return;
|
||||
}
|
||||
-(IBAction)exportShellScript: (id)sender {
|
||||
|
||||
NSTask *task = [NSTask new];
|
||||
[task setExecutableURL: url];
|
||||
[task setArguments: _args];
|
||||
NSSavePanel *p = [NSSavePanel savePanel];
|
||||
|
||||
NSString *defaultName = [_machine stringByAppendingString: @".sh"];
|
||||
|
||||
[p setTitle: @"Export Shell Script"];
|
||||
[p setExtensionHidden: NO];
|
||||
[p setNameFieldStringValue: defaultName];
|
||||
|
||||
//[p setDelegate: self];
|
||||
|
||||
NSWindow *w = [self window];
|
||||
|
||||
NSMutableString *data = [NSMutableString new];
|
||||
|
||||
[data appendString: @"#!/bin/sh\n\n"];
|
||||
[data appendFormat: @"MAME=%@\n", ShellQuote(MamePath())];
|
||||
[data appendFormat: @"cd %@\n", ShellQuote(MameWorkingDirectoryPath())];
|
||||
[data appendString: JoinArguments(_args, @"$MAME")];
|
||||
[data appendString: @"\n\n"];
|
||||
|
||||
[p beginSheetModalForWindow: w completionHandler: ^(NSModalResponse r) {
|
||||
|
||||
if (r != NSModalResponseOK) return;
|
||||
|
||||
NSURL *url = [p URL];
|
||||
NSError *error = nil;
|
||||
[data writeToURL: url atomically: YES encoding: NSUTF8StringEncoding error: &error];
|
||||
|
||||
if (![defaults boolForKey: kUseCustomMame]) {
|
||||
// run in Application Support/Ample.
|
||||
[task setCurrentDirectoryURL: SupportDirectory()];
|
||||
}
|
||||
|
||||
[LogWindowController controllerForTask: task];
|
||||
#endif
|
||||
[p orderOut: nil];
|
||||
|
||||
if (error) {
|
||||
[self presentError: error];
|
||||
return;
|
||||
}
|
||||
|
||||
// chmod 755...
|
||||
int ok = chmod([url fileSystemRepresentation], 0755);
|
||||
if (ok < 0) {
|
||||
// ...
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
-(IBAction)resetMachine:(id)sender {
|
||||
[self reset];
|
||||
}
|
||||
|
||||
-(IBAction)resetAll:(id)sender {
|
||||
|
||||
[self reset];
|
||||
[self resetSoftware];
|
||||
[_slotController resetSlots: sender];
|
||||
[_mediaController resetMedia: sender];
|
||||
}
|
||||
|
||||
-(IBAction)resetMedia:(id)sender {
|
||||
[_mediaController resetMedia: sender];
|
||||
[_softwareListControl setObjectValue: nil];
|
||||
[self setSoftware: nil];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation LaunchWindowController (SoftwareList)
|
||||
|
||||
-(void)updateSoftwareList {
|
||||
|
||||
_softwareSet = [SoftwareSet softwareSetForMachine: _machine];
|
||||
|
||||
[_softwareListControl setAutocompleteDelegate: _softwareSet];
|
||||
|
||||
if (_softwareSet) {
|
||||
[_softwareListControl invalidate];
|
||||
[_softwareListControl setHidden: NO];
|
||||
} else {
|
||||
_software = nil;
|
||||
[_softwareListControl setHidden: YES];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)softwareChanged:(id)sender {
|
||||
|
||||
id o = [(NSControl *)sender objectValue];
|
||||
//NSLog(@"%@", o);
|
||||
[self setSoftware: o];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation LaunchWindowController (Bookmark)
|
||||
|
||||
-(IBAction)defaultSave:(id)sender {
|
||||
|
||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||
|
||||
NSDictionary *d = [self makeBookmark];
|
||||
|
||||
[bm saveDefault: d];
|
||||
}
|
||||
|
||||
-(IBAction)defaultLoad:(id)sender {
|
||||
|
||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||
|
||||
NSDictionary *d = [bm loadDefault];
|
||||
if (!d) {
|
||||
[self resetAll: sender];
|
||||
[self setMachine: nil];
|
||||
[_machineViewController reset];
|
||||
[_slotController setMachine: nil];
|
||||
return;
|
||||
}
|
||||
[self loadBookmark: d];
|
||||
}
|
||||
|
||||
-(IBAction)addBookmark:(id)sender {
|
||||
|
||||
if (!_machine) return;
|
||||
|
||||
NSString *name = nil;
|
||||
if (_machineDescription) name = [_machineDescription objectForKey:@"description"];
|
||||
if (!name) name = _machine;
|
||||
|
||||
|
||||
if (_software) {
|
||||
name = [name stringByAppendingFormat: @" - %@", [_software title]];
|
||||
}
|
||||
[self setBookmarkName: name];
|
||||
[_bookmarkTextField selectText: nil];
|
||||
[[self window] beginSheet: _addBookmarkWindow completionHandler: nil];
|
||||
}
|
||||
|
||||
-(IBAction)bookmarkCancel:(id)sender {
|
||||
[[self window] endSheet: _addBookmarkWindow];
|
||||
[_addBookmarkWindow orderOut: nil];
|
||||
}
|
||||
|
||||
-(IBAction)bookmarkSave:(id)sender {
|
||||
|
||||
|
||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||
|
||||
if (![bm validateName: _bookmarkName]) {
|
||||
[_bookmarkTextField selectText: nil];
|
||||
NSBeep();
|
||||
return;
|
||||
}
|
||||
|
||||
NSDictionary *d = [self makeBookmark];
|
||||
|
||||
[bm saveBookmark: d name: _bookmarkName];
|
||||
|
||||
[[self window] endSheet: _addBookmarkWindow];
|
||||
[_addBookmarkWindow orderOut: nil];
|
||||
[self setBookmarkName: nil];
|
||||
}
|
||||
|
||||
|
||||
-(IBAction)bookmarkMenu:(id)sender {
|
||||
|
||||
NSURL *url = [sender representedObject];
|
||||
if (!url) return;
|
||||
|
||||
NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
if (!d) return; // oops...
|
||||
|
||||
[self loadBookmark: d];
|
||||
}
|
||||
|
||||
|
||||
-(void)loadBookmark: (NSDictionary *)d {
|
||||
Class StringClass = [NSString class];
|
||||
Class NumberClass = [NSNumber class];
|
||||
|
||||
|
||||
NSString *machine = [d objectForKey: @"machine"];
|
||||
if (!machine) return;
|
||||
|
||||
_loadingBookmark = YES;
|
||||
[_machineViewController willLoadBookmark: d];
|
||||
[_slotController willLoadBookmark: d];
|
||||
[_mediaController willLoadBookmark: d];
|
||||
|
||||
[self reset];
|
||||
|
||||
[self setMachine: machine];
|
||||
[self updateSoftwareList];
|
||||
[_softwareListControl setObjectValue: nil]; // will reload the completion list.
|
||||
|
||||
NSString *str;
|
||||
|
||||
str = [d objectForKey: @"software"];
|
||||
if ([str isKindOfClass: StringClass]) {
|
||||
Software *s = [_softwareSet softwareForName: str];
|
||||
if (s) {
|
||||
[_softwareListControl setObjectValue: s];
|
||||
[self setSoftware: s];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Boolean values.
|
||||
NSNumber *n;
|
||||
#undef _
|
||||
#define _(a,b) n = [d objectForKey: a]; if ([n isKindOfClass: NumberClass]) [self b : [n boolValue]]
|
||||
|
||||
_(@"debug", setMameDebug);
|
||||
_(@"squarePixels", setMameSquarePixels);
|
||||
_(@"mouse", setMameMouse);
|
||||
_(@"samples", setMameSamples);
|
||||
_(@"bgfx", setMameBGFX);
|
||||
|
||||
// numeric values
|
||||
// check if in range?
|
||||
#undef _
|
||||
#define _(a,b) n = [d objectForKey: a]; if ([n isKindOfClass: NumberClass]) [self b : [n intValue]]
|
||||
|
||||
_(@"windowMode", setMameWindowMode);
|
||||
_(@"speed", setMameSpeed);
|
||||
|
||||
|
||||
// string values
|
||||
#undef _
|
||||
#define _(a,b) str = [d objectForKey: a]; if ([str isKindOfClass: StringClass]) [self b : str]
|
||||
|
||||
_(@"shareDirectory", setMameShareDirectoryPath);
|
||||
_(@"bitBanger", setMameBitBangerPath);
|
||||
if ([_mameShareDirectoryPath length]) [self setMameShareDirectory: YES];
|
||||
if ([_mameBitBangerPath length]) [self setMameBitBanger: YES];
|
||||
|
||||
_(@"AVIPath", setMameAVIPath);
|
||||
_(@"WAVPath", setMameWAVPath);
|
||||
_(@"VGMPath", setMameVGMPath);
|
||||
if ([_mameAVIPath length]) [self setMameAVI: YES];
|
||||
if ([_mameVGMPath length]) [self setMameVGM: YES];
|
||||
if ([_mameWAVPath length]) [self setMameWAV: YES];
|
||||
|
||||
|
||||
str = [d objectForKey: @"backend"];
|
||||
if ([str isKindOfClass: [NSString class]]) {
|
||||
int ix = BackEndIndex(str);
|
||||
if (ix >= 0) [self setMameBackend: ix];
|
||||
}
|
||||
|
||||
str = [d objectForKey: @"effects"];
|
||||
if ([str isKindOfClass: [NSString class]]) {
|
||||
int ix = EffectsIndex(str);
|
||||
if (ix >= 0) [self setMameEffects: ix];
|
||||
}
|
||||
|
||||
[_machineViewController loadBookmark: d];
|
||||
[_slotController loadBookmark: d];
|
||||
[_mediaController loadBookmark: d];
|
||||
|
||||
[_machineViewController didLoadBookmark: d];
|
||||
[_slotController didLoadBookmark: d];
|
||||
[_mediaController didLoadBookmark: d];
|
||||
|
||||
_loadingBookmark = NO;
|
||||
|
||||
[self buildCommandLine];
|
||||
}
|
||||
|
||||
-(NSDictionary *)makeBookmark {
|
||||
|
||||
[[self window] makeFirstResponder: nil];
|
||||
|
||||
NSMutableDictionary *dict = [NSMutableDictionary new];
|
||||
|
||||
[dict setObject: _machine forKey: @"machine"];
|
||||
[dict setObject: @232 forKey: @"version"];
|
||||
[_machineViewController saveBookmark: dict];
|
||||
[_slotController saveBookmark: dict];
|
||||
[_mediaController saveBookmark: dict];
|
||||
|
||||
|
||||
// Boolean values
|
||||
#undef _
|
||||
#define _(v,k) [dict setObject: v ? (NSObject *)kCFBooleanTrue : (NSObject *)kCFBooleanFalse forKey: k]
|
||||
|
||||
_(_mameDebug, @"debug");
|
||||
_(_mameSquarePixels, @"squarePixels");
|
||||
_(_mameMouse, @"mouse");
|
||||
_(_mameSamples, @"samples");
|
||||
_(_mameBGFX, @"bgfx");
|
||||
|
||||
// numeric values
|
||||
#undef _
|
||||
#define _(v,k) [dict setObject: @(v) forKey: k]
|
||||
_(_mameWindowMode, @"windowMode");
|
||||
_(_mameSpeed, @"speed");
|
||||
|
||||
// String values
|
||||
#undef _
|
||||
#define _(v,k) [dict setObject: v forKey: k]
|
||||
|
||||
if (_mameAVI && [_mameAVIPath length]) _(_mameAVIPath, @"AVIPath");
|
||||
if (_mameWAV && [_mameWAVPath length]) _(_mameWAVPath, @"WAVPath");
|
||||
if (_mameVGM && [_mameVGMPath length]) _(_mameVGMPath, @"VGMPath");
|
||||
|
||||
if (_mameShareDirectory && [_mameShareDirectoryPath length]) _(_mameShareDirectoryPath, @"shareDirectory");
|
||||
if (_mameBitBanger && [_mameBitBangerPath length]) _(_mameBitBangerPath, @"bitBanger");
|
||||
|
||||
|
||||
if (_software) _([_software fullName], @"software");
|
||||
|
||||
|
||||
if (_mameBackend) _(BackendStrings[_mameBackend], @"backend");
|
||||
if (_mameEffects) _(EffectsStrings[_mameEffects], @"effects");
|
||||
|
||||
|
||||
return dict;
|
||||
|
||||
#undef _
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -36,31 +36,6 @@ static NSMutableSet *LogWindows;
|
||||
return controller;
|
||||
}
|
||||
|
||||
static NSURL *MameURL(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMamePath];
|
||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
||||
}
|
||||
|
||||
return [bundle URLForAuxiliaryExecutable: @"mame64"];
|
||||
}
|
||||
|
||||
static NSURL *MameWorkingDirectory(void) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMameWorkingDirectory];
|
||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
||||
}
|
||||
|
||||
return SupportDirectory();
|
||||
}
|
||||
|
||||
|
||||
|
||||
+(id)controllerForArgs: (NSArray *)args {
|
||||
@@ -78,9 +53,16 @@ static NSURL *MameWorkingDirectory(void) {
|
||||
}
|
||||
|
||||
NSTask *task = [NSTask new];
|
||||
[task setExecutableURL: url];
|
||||
|
||||
if (@available(macOS 10.13, *)) {
|
||||
[task setExecutableURL: url];
|
||||
[task setCurrentDirectoryURL: MameWorkingDirectory()];
|
||||
} else {
|
||||
[task setLaunchPath: MamePath()];
|
||||
[task setCurrentDirectoryPath: MameWorkingDirectoryPath()];
|
||||
}
|
||||
|
||||
[task setArguments: args];
|
||||
[task setCurrentDirectoryURL: MameWorkingDirectory()];
|
||||
|
||||
return [LogWindowController controllerForTask: task];
|
||||
}
|
||||
@@ -97,7 +79,17 @@ static NSURL *MameWorkingDirectory(void) {
|
||||
{
|
||||
if ([string length])
|
||||
{
|
||||
[[[_textView textStorage] mutableString] appendString: string];
|
||||
// needs explicit color attribute for proper dark mode support.
|
||||
NSDictionary *attr = @{ NSForegroundColorAttributeName: [NSColor textColor] };
|
||||
NSAttributedString *astr = [[NSAttributedString alloc] initWithString: string attributes: attr];
|
||||
[[_textView textStorage] appendAttributedString: astr];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)appendAttributedString: (NSAttributedString *)string {
|
||||
|
||||
if ([string length]) {
|
||||
[[_textView textStorage] appendAttributedString: string];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,20 +98,39 @@ static NSURL *MameWorkingDirectory(void) {
|
||||
|
||||
if (_task) return nil;
|
||||
|
||||
NSError *error = nil;
|
||||
NSPipe *pipe = [NSPipe pipe];
|
||||
|
||||
// window not yet loaded until [self window] called.
|
||||
const char *path = [[task executableURL] fileSystemRepresentation];
|
||||
// if (cp) [self appendString: [NSString stringWithFormat: @"MAME path: %s", cp]];
|
||||
const char *wd = [[task currentDirectoryURL] fileSystemRepresentation];
|
||||
// if (cp) [self appendString: [NSString stringWithFormat: @"Working Directory: %s", cp]];
|
||||
|
||||
const char *path = nil;
|
||||
const char *wd = nil;
|
||||
|
||||
|
||||
[task setStandardError: pipe];
|
||||
[task setStandardOutput: pipe];
|
||||
[task launchAndReturnError: &error];
|
||||
|
||||
if (@available(macOS 10.13, *)) {
|
||||
NSError *error = nil;
|
||||
path = [[task executableURL] fileSystemRepresentation];
|
||||
wd = [[task currentDirectoryURL] fileSystemRepresentation];
|
||||
|
||||
[task launchAndReturnError: &error];
|
||||
if (error) {
|
||||
NSLog(@"NSTask error. Path = %s error = %@", path, error);
|
||||
return error;
|
||||
}
|
||||
} else {
|
||||
path = [[task launchPath] fileSystemRepresentation];
|
||||
wd = [[task currentDirectoryPath] fileSystemRepresentation];
|
||||
@try {
|
||||
[task launch];
|
||||
} @catch (NSException *exception) {
|
||||
|
||||
NSLog(@"NSTask exception. Path = %s exception = %@", path, exception);
|
||||
return nil; // ?
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (error) {
|
||||
// NSURL *url = [task executableURL];
|
||||
// NSString *path = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
@@ -128,6 +139,7 @@ static NSURL *MameWorkingDirectory(void) {
|
||||
// [self appendString: [error description]];
|
||||
return error;
|
||||
}
|
||||
#endif
|
||||
_task = task;
|
||||
NSString *title = [NSString stringWithFormat: @"Ample Log - %u", [task processIdentifier]];
|
||||
[[self window] setTitle: title];
|
||||
@@ -195,8 +207,7 @@ static NSURL *MameWorkingDirectory(void) {
|
||||
}
|
||||
else
|
||||
{
|
||||
string = @"\n\n[Caught signal]\n\n";
|
||||
|
||||
string = [NSString stringWithFormat: @"\n\n[Caught signal %d (%s)]\n\n", status, strsignal(status)];
|
||||
}
|
||||
|
||||
[self appendString: string];
|
||||
@@ -220,4 +231,12 @@ static NSURL *MameWorkingDirectory(void) {
|
||||
[LogWindows removeObject: self];
|
||||
}
|
||||
|
||||
#pragma mark - IBActions
|
||||
|
||||
- (IBAction)clearLog:(id)sender {
|
||||
NSAttributedString *empty = [NSAttributedString new];
|
||||
[[_textView textStorage] setAttributedString: empty];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "Ample.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@@ -17,4 +18,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@end
|
||||
|
||||
@interface MachineViewController (Bookmark) <Bookmark>
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -110,5 +110,67 @@
|
||||
return [data count];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation MachineViewController (Bookmark)
|
||||
|
||||
-(BOOL)loadBookmark: (NSDictionary *)bookmark {
|
||||
|
||||
NSBrowser *browser = (NSBrowser *)[self view];
|
||||
NSString *machine = [bookmark objectForKey: @"machine"];
|
||||
|
||||
NSIndexPath *path = nil;
|
||||
NSUInteger ix[2] = {0, 0 };
|
||||
for (NSDictionary *d in _data) {
|
||||
|
||||
NSArray *children = [d objectForKey: @"children"];
|
||||
|
||||
for (NSDictionary *dd in children) {
|
||||
NSString *value = [dd objectForKey: @"value"];
|
||||
|
||||
if ([machine isEqualToString: value]) {
|
||||
path = [NSIndexPath indexPathWithIndexes: ix length: 2];
|
||||
[browser selectRow: ix[0] inColumn: 0];
|
||||
[browser selectRow: ix[1] inColumn: 1];
|
||||
|
||||
//[browser setSelectionIndexPath: path];
|
||||
return YES;
|
||||
}
|
||||
++ix[1];
|
||||
}
|
||||
ix[1] = 0;
|
||||
|
||||
|
||||
// check parent after.
|
||||
NSString *value = [d objectForKey: @"value"];
|
||||
if ([machine isEqualToString: value]) {
|
||||
path = [NSIndexPath indexPathWithIndexes: ix length: 1];
|
||||
[browser selectRow: ix[0] inColumn: 0];
|
||||
// "setSelectionIndexPath: is not supported for browsers with matrix delegates."
|
||||
//[browser setSelectionIndexPath: path];
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
++ix[0];
|
||||
|
||||
}
|
||||
NSLog(@"MachineViewController: Unable to find %@", machine);
|
||||
return NO;
|
||||
}
|
||||
|
||||
-(BOOL)saveBookmark: (NSMutableDictionary *)bookmark {
|
||||
// machine saved in parent.
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(void)willLoadBookmark:(NSDictionary *)bookmark {
|
||||
}
|
||||
|
||||
-(void)didLoadBookmark:(NSDictionary *)bookmark {
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
31
Ample/Media.h
Normal file
31
Ample/Media.h
Normal file
@@ -0,0 +1,31 @@
|
||||
//
|
||||
// Media.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 3/7/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef Media_h
|
||||
#define Media_h
|
||||
|
||||
|
||||
typedef struct Media {
|
||||
unsigned cass;
|
||||
unsigned cdrom;
|
||||
unsigned hard;
|
||||
unsigned floppy_5_25;
|
||||
unsigned floppy_3_5;
|
||||
unsigned pseudo_disk;
|
||||
unsigned bitbanger;
|
||||
} Media;
|
||||
|
||||
struct Media MediaFromDictionary(NSDictionary *);
|
||||
|
||||
void MediaAdd(Media *dest, const Media *src);
|
||||
|
||||
BOOL MediaEqual(const Media *lhs, const Media *rhs);
|
||||
|
||||
extern const Media EmptyMedia;
|
||||
|
||||
#endif /* Media_h */
|
||||
61
Ample/Media.m
Normal file
61
Ample/Media.m
Normal file
@@ -0,0 +1,61 @@
|
||||
//
|
||||
// Media.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 3/7/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "Media.h"
|
||||
|
||||
const Media EmptyMedia = { 0 };
|
||||
|
||||
struct Media MediaFromDictionary(NSDictionary *dict) {
|
||||
|
||||
Media m = { 0 };
|
||||
|
||||
#define _(name) m.name = [[dict objectForKey: @ # name] unsignedIntValue]
|
||||
_(cass);
|
||||
_(cdrom);
|
||||
_(hard);
|
||||
_(floppy_3_5);
|
||||
_(floppy_5_25);
|
||||
_(pseudo_disk);
|
||||
_(bitbanger);
|
||||
|
||||
return m;
|
||||
#undef _
|
||||
}
|
||||
|
||||
void MediaAdd(Media *dest, const Media *src) {
|
||||
|
||||
if (!src || !dest) return;
|
||||
|
||||
#define _(name) dest->name += src->name;
|
||||
_(cass);
|
||||
_(cdrom);
|
||||
_(hard);
|
||||
_(floppy_3_5);
|
||||
_(floppy_5_25);
|
||||
_(pseudo_disk);
|
||||
_(bitbanger);
|
||||
#undef _
|
||||
}
|
||||
|
||||
BOOL MediaEqual(const Media *lhs, const Media *rhs) {
|
||||
if (lhs == rhs) return YES;
|
||||
if (!lhs || !rhs) return NO;
|
||||
|
||||
|
||||
#define _(name) if (lhs->name != rhs->name) return NO;
|
||||
_(cass);
|
||||
_(cdrom);
|
||||
_(hard);
|
||||
_(floppy_3_5);
|
||||
_(floppy_5_25);
|
||||
_(pseudo_disk);
|
||||
_(bitbanger);
|
||||
return YES;
|
||||
#undef _
|
||||
}
|
||||
@@ -7,20 +7,25 @@
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "Media.h"
|
||||
#import "Ample.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MediaViewController : NSViewController <NSOutlineViewDelegate, NSOutlineViewDataSource>
|
||||
|
||||
@property (weak) IBOutlet NSOutlineView *outlineView;
|
||||
@property (nonatomic) NSDictionary *media;
|
||||
@property (nonatomic) Media media;
|
||||
@property NSArray *args;
|
||||
|
||||
- (IBAction)ejectAction:(id)sender;
|
||||
- (IBAction)pathAction:(id)sender;
|
||||
|
||||
-(IBAction)resetMedia:(id)sender;
|
||||
|
||||
//-(void)setMedia: (NSDictionary *)media;
|
||||
@end
|
||||
|
||||
@interface MediaViewController (Bookmark) <Bookmark>
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -9,11 +9,25 @@
|
||||
#import "MediaViewController.h"
|
||||
#import "TableCellView.h"
|
||||
|
||||
enum {
|
||||
kIndexFloppy525 = 0,
|
||||
kIndexFloppy35,
|
||||
kIndexHardDrive,
|
||||
kIndexCDROM,
|
||||
kIndexCassette,
|
||||
kIndexDiskImage,
|
||||
kIndexBitBanger,
|
||||
};
|
||||
|
||||
#define CATEGORY_COUNT 7
|
||||
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
||||
|
||||
|
||||
@protocol MediaNode
|
||||
-(BOOL)isGroupItem;
|
||||
-(BOOL)isExpandable;
|
||||
-(NSInteger) count;
|
||||
-(NSInteger)count;
|
||||
-(NSInteger)category;
|
||||
|
||||
-(NSString *)viewIdentifier;
|
||||
-(void)prepareView: (NSTableCellView *)view;
|
||||
@@ -28,6 +42,7 @@
|
||||
@property NSMutableArray *children; // URLs?
|
||||
@property NSString *title;
|
||||
@property NSInteger index;
|
||||
@property NSInteger category;
|
||||
|
||||
-(NSInteger)count;
|
||||
-(id)objectAtIndex:(NSInteger)index;
|
||||
@@ -36,9 +51,13 @@
|
||||
|
||||
@interface MediaItem : NSObject <MediaNode>
|
||||
|
||||
@property NSString *string;
|
||||
@property NSURL *url;
|
||||
@property BOOL valid;
|
||||
@property NSInteger index;
|
||||
@property NSInteger category;
|
||||
|
||||
@property (readonly) BOOL occupied;
|
||||
|
||||
-(NSInteger)count;
|
||||
-(id)objectAtIndex:(NSInteger)index;
|
||||
@@ -51,6 +70,10 @@
|
||||
|
||||
@implementation MediaCategory
|
||||
|
||||
+(instancetype)categoryWithTitle: (NSString *)title {
|
||||
return [[self alloc] initWithTitle: title];
|
||||
}
|
||||
|
||||
-(instancetype)initWithTitle: (NSString *)title {
|
||||
[self setTitle: title];
|
||||
return self;
|
||||
@@ -76,7 +99,7 @@
|
||||
}
|
||||
|
||||
-(void)prepareView: (NSTableCellView *)view {
|
||||
[[view textField] setStringValue: _title];
|
||||
|
||||
}
|
||||
|
||||
-(CGFloat)height {
|
||||
@@ -98,6 +121,7 @@
|
||||
for (unsigned i = count; i < newCount; ++i) {
|
||||
MediaItem *item = [MediaItem new];
|
||||
[item setIndex: i];
|
||||
[item setCategory: _category];
|
||||
[_children addObject: item];
|
||||
}
|
||||
|
||||
@@ -109,7 +133,7 @@
|
||||
|
||||
for (unsigned i = newCount; i < count; ++i) {
|
||||
MediaItem *item = [_children lastObject];
|
||||
if ([item url]) break;
|
||||
if ([item occupied]) break;
|
||||
|
||||
[_children removeLastObject];
|
||||
}
|
||||
@@ -125,7 +149,7 @@
|
||||
|
||||
for (NSInteger i = _validCount; i < count; ++i) {
|
||||
MediaItem *item = [_children lastObject];
|
||||
if ([item url]) break;
|
||||
if ([item occupied]) break;
|
||||
|
||||
[_children removeLastObject];
|
||||
[set addIndex: [_children count]];
|
||||
@@ -175,11 +199,37 @@
|
||||
|
||||
@implementation MediaItem
|
||||
|
||||
|
||||
|
||||
-(instancetype)initWithURL: (NSURL *)url {
|
||||
[self setUrl: url];
|
||||
_url = url;
|
||||
return self;
|
||||
}
|
||||
|
||||
-(instancetype)initWithString: (NSString *)string {
|
||||
_string = string;
|
||||
return self;
|
||||
}
|
||||
|
||||
-(NSString *)argument {
|
||||
if (_string)
|
||||
return _string;
|
||||
|
||||
// todo -- have setURL also update _string?
|
||||
if (_url)
|
||||
return [NSString stringWithCString: [_url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
+(NSSet *)keyPathsForValuesAffectingOccupied {
|
||||
return [NSSet setWithObjects: @"url", @"string", nil];
|
||||
}
|
||||
|
||||
-(BOOL)occupied {
|
||||
return _url || _string;
|
||||
}
|
||||
|
||||
-(NSInteger) count {
|
||||
return 0;
|
||||
}
|
||||
@@ -197,37 +247,12 @@
|
||||
}
|
||||
|
||||
-(NSString *)viewIdentifier {
|
||||
if (_category == kIndexBitBanger) return @"BBItemView";
|
||||
return @"ItemView";
|
||||
}
|
||||
|
||||
-(void)prepareView: (TablePathView *)view {
|
||||
|
||||
NSValueTransformer *t;
|
||||
NSDictionary *options;
|
||||
|
||||
NSPathControl *pc = [view pathControl];
|
||||
NSButton *button = [view ejectButton];
|
||||
|
||||
[pc unbind: @"value"];
|
||||
[pc unbind: @"enabled"];
|
||||
[pc bind: @"value" toObject: self withKeyPath: @"url" options: nil];
|
||||
[pc bind: @"enabled" toObject: self withKeyPath: @"valid" options: options];
|
||||
|
||||
[button unbind: @"enabled"];
|
||||
[button unbind: @"contentTintColor"];
|
||||
t = [NSValueTransformer valueTransformerForName: NSIsNotNilTransformerName];
|
||||
options = @{ NSValueTransformerBindingOption: t};
|
||||
[button bind: @"enabled" toObject: self withKeyPath: @"url" options: options];
|
||||
|
||||
t = [NSValueTransformer valueTransformerForName: @"ValidColorTransformer"];
|
||||
options = @{ NSValueTransformerBindingOption: t};
|
||||
[button bind: @"contentTintColor" toObject: self withKeyPath: @"valid" options: options];
|
||||
|
||||
#if 0
|
||||
NSColor *tintColor = nil;
|
||||
if (!_valid) tintColor = [NSColor systemRedColor];
|
||||
[button setContentTintColor: tintColor];
|
||||
#endif
|
||||
}
|
||||
|
||||
-(CGFloat)height {
|
||||
@@ -240,17 +265,24 @@
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
|
||||
|
||||
@interface MediaViewController () {
|
||||
|
||||
MediaCategory *_data[5];
|
||||
MediaCategory *_data[CATEGORY_COUNT];
|
||||
NSArray *_root;
|
||||
NSDictionary *_media;
|
||||
Media _media;
|
||||
|
||||
BOOL _loadingBookmark;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation MediaViewController
|
||||
|
||||
|
||||
|
||||
-(void)awakeFromNib {
|
||||
|
||||
static unsigned first = 0;
|
||||
@@ -258,44 +290,34 @@
|
||||
if (first) return;
|
||||
first++;
|
||||
|
||||
MediaCategory *a, *b, *c, *d, *e;
|
||||
|
||||
a = [[MediaCategory alloc] initWithTitle: @"5.25\" Floppies"];
|
||||
b = [[MediaCategory alloc] initWithTitle: @"3.5\" Floppies"];
|
||||
c = [[MediaCategory alloc] initWithTitle: @"Hard Drives"];
|
||||
d = [[MediaCategory alloc] initWithTitle: @"CD-ROMs"];
|
||||
e = [[MediaCategory alloc] initWithTitle: @"Cassettes"];
|
||||
_data[kIndexFloppy525] = [MediaCategory categoryWithTitle: @"5.25\" Floppies"];
|
||||
_data[kIndexFloppy35] = [MediaCategory categoryWithTitle: @"3.5\" Floppies"];
|
||||
_data[kIndexHardDrive] = [MediaCategory categoryWithTitle: @"Hard Drives"];
|
||||
_data[kIndexCDROM] = [MediaCategory categoryWithTitle: @"CD-ROMs"];
|
||||
_data[kIndexCassette] = [MediaCategory categoryWithTitle: @"Cassettes"];
|
||||
_data[kIndexDiskImage] = [MediaCategory categoryWithTitle: @"Hard Disk Images"]; // Mac Nubus psuedo image device
|
||||
_data[kIndexBitBanger] = [MediaCategory categoryWithTitle: @"Serial Bit Banger"]; // null_modem
|
||||
|
||||
for (unsigned i = 0; i < CATEGORY_COUNT; ++i)
|
||||
[_data[i] setCategory: i];
|
||||
|
||||
_data[0] = a;
|
||||
_data[1] = b;
|
||||
_data[2] = c;
|
||||
_data[3] = d;
|
||||
_data[4] = e;
|
||||
|
||||
_root = @[];
|
||||
|
||||
}
|
||||
|
||||
|
||||
enum {
|
||||
kIndexFloppy_5_25 = 0,
|
||||
kIndexFloppy_3_5,
|
||||
kIndex_HardDrive,
|
||||
kIndexCDROM,
|
||||
kIndexCassette
|
||||
};
|
||||
|
||||
-(void)rebuildArgs {
|
||||
|
||||
static char* prefix[] = {
|
||||
"flop", "flop", "hard", "cdrm", "cass"
|
||||
"flop", "flop", "hard", "cdrm", "cass", "disk", "bitb",
|
||||
};
|
||||
static_assert(SIZEOF(prefix) == CATEGORY_COUNT, "Missing item");
|
||||
NSMutableArray *args = [NSMutableArray new];
|
||||
|
||||
unsigned counts[5] = { 0, 0, 0, 0, 0 };
|
||||
unsigned counts[CATEGORY_COUNT] = { 0 };
|
||||
|
||||
for (unsigned j = 0; j < 5; ++j) {
|
||||
for (unsigned j = 0; j < CATEGORY_COUNT; ++j) {
|
||||
|
||||
MediaCategory *cat = _data[j];
|
||||
NSInteger valid = [cat validCount];
|
||||
@@ -303,12 +325,12 @@ enum {
|
||||
counts[j]++;
|
||||
|
||||
MediaItem *item = [cat objectAtIndex: i];
|
||||
NSURL *url = [item url];
|
||||
if (!url) continue;
|
||||
[args addObject: [NSString stringWithFormat: @"-%s%u", prefix[j], counts[j]]];
|
||||
NSString *s = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
|
||||
[args addObject: s];
|
||||
NSString *arg = [item argument];
|
||||
|
||||
if (arg) {
|
||||
[args addObject: [NSString stringWithFormat: @"-%s%u", prefix[j], counts[j]]];
|
||||
[args addObject: arg];
|
||||
}
|
||||
}
|
||||
if (j == 0) counts[1] = counts[0]; // 3.5/5.25
|
||||
}
|
||||
@@ -319,7 +341,7 @@ enum {
|
||||
-(void)rebuildRoot {
|
||||
NSMutableArray *tmp = [NSMutableArray new];
|
||||
int ix = 0;
|
||||
for (unsigned j = 0 ; j < 5; ++j) {
|
||||
for (unsigned j = 0 ; j < CATEGORY_COUNT; ++j) {
|
||||
MediaCategory *cat = _data[j];
|
||||
[cat setIndex: -1];
|
||||
if ([cat count]) {
|
||||
@@ -332,41 +354,60 @@ enum {
|
||||
// todo - switch this to use removeItemsAtIndexes:inParent:withAnimation:
|
||||
// and insertItemsAtIndexes:inParent:withAnimation:
|
||||
|
||||
[_outlineView reloadData];
|
||||
[_outlineView expandItem: nil expandChildren: YES];
|
||||
if (!_loadingBookmark) {
|
||||
[_outlineView reloadData];
|
||||
[_outlineView expandItem: nil expandChildren: YES];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setMedia: (NSDictionary *)media {
|
||||
-(void)setMedia: (Media)media {
|
||||
|
||||
static NSString *Keys[] = {
|
||||
@"flop_5_25",
|
||||
@"flop_3_5",
|
||||
@"hard",
|
||||
@"cdrm",
|
||||
@"cass"
|
||||
};
|
||||
|
||||
NSNumber *o;
|
||||
MediaCategory *cat;
|
||||
unsigned i;
|
||||
BOOL delta = NO;
|
||||
|
||||
|
||||
if (_media == media) return;
|
||||
unsigned x;
|
||||
|
||||
if (MediaEqual(&_media, &media)) return;
|
||||
_media = media;
|
||||
|
||||
for (unsigned j = 0; j < 5; ++j) {
|
||||
|
||||
o = [media objectForKey: Keys[j]];
|
||||
i = [o unsignedIntValue];
|
||||
cat = _data[j];
|
||||
delta |= [cat setItemCount: i];
|
||||
}
|
||||
#undef _
|
||||
#define _(name, index) \
|
||||
x = media.name; cat = _data[index]; delta |= [cat setItemCount: x]
|
||||
_(cass, kIndexCassette);
|
||||
_(cdrom, kIndexCDROM);
|
||||
_(hard, kIndexHardDrive);
|
||||
_(floppy_3_5, kIndexFloppy35);
|
||||
_(floppy_5_25, kIndexFloppy525);
|
||||
_(pseudo_disk, kIndexDiskImage);
|
||||
_(bitbanger, kIndexBitBanger);
|
||||
|
||||
|
||||
|
||||
if (delta) {
|
||||
[self rebuildRoot];
|
||||
[self rebuildArgs];
|
||||
if (!_loadingBookmark) [self rebuildArgs];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)resetDiskImages {
|
||||
|
||||
BOOL delta = NO;
|
||||
for (unsigned j = 0; j < CATEGORY_COUNT; ++j) {
|
||||
|
||||
MediaCategory *cat = _data[j];
|
||||
NSInteger count = [cat count];
|
||||
for (NSInteger i = 0; i < count; ++i) {
|
||||
|
||||
MediaItem *item = [cat objectAtIndex: i];
|
||||
if (![item occupied]) continue;
|
||||
[item setUrl: nil];
|
||||
[item setString: nil];
|
||||
delta = YES;
|
||||
}
|
||||
if ([cat pruneChildrenWithOutlineView: _outlineView]) delta = YES;
|
||||
}
|
||||
if (delta) {
|
||||
[self rebuildRoot];
|
||||
if (!_loadingBookmark) [self rebuildArgs];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -396,15 +437,14 @@ static NSString *kDragType = @"private.ample.media";
|
||||
|
||||
}
|
||||
|
||||
//- (NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item;
|
||||
|
||||
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id<MediaNode>)item {
|
||||
|
||||
NSString *ident = [item viewIdentifier];
|
||||
if (!ident) return nil;
|
||||
NSTableCellView *v = [outlineView makeViewWithIdentifier: ident owner: self];
|
||||
[(id<MediaNode>)item prepareView: v];
|
||||
[v setObjectValue: item];
|
||||
|
||||
[(id<MediaNode>)item prepareView: v];
|
||||
return v;
|
||||
}
|
||||
|
||||
@@ -436,12 +476,6 @@ static NSString *kDragType = @"private.ample.media";
|
||||
}
|
||||
|
||||
|
||||
- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
|
||||
//return nil;
|
||||
return [[item cellClass] new];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#pragma mark - NSOutlineViewDataSource
|
||||
@@ -604,10 +638,9 @@ static NSString *kDragType = @"private.ample.media";
|
||||
NSInteger row = [_outlineView rowForView: sender];
|
||||
if (row < 0) return;
|
||||
|
||||
//TablePathView *pv = [_outlineView viewAtColumn: 0 row: row makeIfNecessary: NO];
|
||||
MediaItem *item = [_outlineView itemAtRow: row];
|
||||
[item setUrl: nil];
|
||||
//[[pv pathControl] setURL: nil];
|
||||
[item setString: nil];
|
||||
|
||||
// if item is invalid, should attempt to remove...
|
||||
if (![item valid]) {
|
||||
@@ -624,15 +657,165 @@ static NSString *kDragType = @"private.ample.media";
|
||||
}
|
||||
|
||||
- (IBAction)pathAction:(id)sender {
|
||||
// need to update the eject button...
|
||||
|
||||
NSURL *url = [(NSPathControl *)sender URL];
|
||||
|
||||
if (url) {
|
||||
NSInteger tag = [sender tag];
|
||||
// TODO - don't add to recent disks if this is a bitbanger / midi / printer device.
|
||||
if (url && tag == 0) {
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
[nc postNotificationName: @"DiskImageAdded" object: url];
|
||||
}
|
||||
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
-(IBAction)textAction: (id)sender {
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
-(IBAction)resetMedia:(id)sender {
|
||||
[self resetDiskImages];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation MediaViewController (Bookmark)
|
||||
|
||||
-(void)willLoadBookmark:(NSDictionary *)bookmark {
|
||||
_loadingBookmark = YES;
|
||||
[self resetDiskImages];
|
||||
}
|
||||
-(void)didLoadBookmark:(NSDictionary *)bookmark {
|
||||
_loadingBookmark = NO;
|
||||
|
||||
|
||||
[self rebuildRoot];
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
static NSString * BookmarkStrings[] = {
|
||||
@"flop_525", @"flop_35", @"hard", @"cdrm", @"cass", @"disk", @"bitb",
|
||||
};
|
||||
static_assert(SIZEOF(BookmarkStrings) == CATEGORY_COUNT, "Missing item");
|
||||
|
||||
static int BookmarkIndex(NSString *str) {
|
||||
if (!str) return -1;
|
||||
for (int i = 0; i < SIZEOF(BookmarkStrings); ++i) {
|
||||
if ([str isEqualToString: BookmarkStrings[i]]) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
-(BOOL)loadBookmark: (NSDictionary *)bookmark {
|
||||
|
||||
// fragile - depends on order
|
||||
id media = [bookmark objectForKey: @"media"];
|
||||
|
||||
if ([media isKindOfClass: [NSArray class]]) {
|
||||
unsigned ix = 0;
|
||||
for (NSArray *a in (NSArray *)media) {
|
||||
if (ix >= CATEGORY_COUNT) {
|
||||
NSLog(@"MediaViewController: too many categories.");
|
||||
break;
|
||||
}
|
||||
MediaCategory *cat = _data[ix];
|
||||
NSInteger count = [cat count];
|
||||
unsigned i = 0;
|
||||
for (NSString *path in a) {
|
||||
if (i >= count) {
|
||||
NSLog(@"MediaViewController: too many files.");
|
||||
break; //
|
||||
}
|
||||
MediaItem *item = [cat objectAtIndex: i++];
|
||||
if (![path length]) continue;
|
||||
|
||||
if (ix == kIndexBitBanger) {
|
||||
[item setString: path];
|
||||
} else {
|
||||
NSURL *url = [NSURL fileURLWithPath: path];
|
||||
[item setUrl: url];
|
||||
}
|
||||
}
|
||||
++ix;
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
if ([media isKindOfClass: [NSDictionary class]]) {
|
||||
|
||||
for (NSString *key in (NSDictionary *)media) {
|
||||
NSInteger ix = BookmarkIndex(key);
|
||||
if (ix < 0) {
|
||||
NSLog(@"MediaViewController: unrecognized category: %@", key);
|
||||
continue;
|
||||
}
|
||||
MediaCategory *cat = _data[ix];
|
||||
NSInteger count = [cat count];
|
||||
NSArray *a = [(NSDictionary *)media objectForKey: key];
|
||||
unsigned i = 0;
|
||||
|
||||
for (NSString *path in a) {
|
||||
if (i >= count) {
|
||||
NSLog(@"MediaViewController: too many files.");
|
||||
break; //
|
||||
}
|
||||
MediaItem *item = [cat objectAtIndex: i++];
|
||||
if (![path length]) continue;
|
||||
|
||||
if (ix == kIndexBitBanger) {
|
||||
[item setString: path];
|
||||
} else {
|
||||
NSURL *url = [NSURL fileURLWithPath: path];
|
||||
[item setUrl: url];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
static void CompressArray(NSMutableArray *array) {
|
||||
|
||||
for(;;) {
|
||||
NSString *s = [array lastObject];
|
||||
if (!s) return;
|
||||
if ([s length]) return;
|
||||
[array removeLastObject];
|
||||
}
|
||||
}
|
||||
|
||||
-(BOOL)saveBookmark: (NSMutableDictionary *)bookmark {
|
||||
|
||||
|
||||
NSMutableDictionary *media = [NSMutableDictionary new];
|
||||
|
||||
for (unsigned ix = 0; ix < CATEGORY_COUNT; ++ix) {
|
||||
|
||||
MediaCategory *cat = _data[ix];
|
||||
NSInteger count = [cat validCount];
|
||||
if (!count) continue;
|
||||
|
||||
NSMutableArray *array = [NSMutableArray new];
|
||||
for (NSInteger i = 0; i < count; ++i) {
|
||||
|
||||
MediaItem *item = [cat objectAtIndex: i];
|
||||
NSString *s = [item argument];
|
||||
if (!s) s = @"";
|
||||
[array addObject: s];
|
||||
}
|
||||
|
||||
CompressArray(array);
|
||||
|
||||
if ([array count])
|
||||
[media setObject: array forKey: BookmarkStrings[ix]];
|
||||
}
|
||||
|
||||
[bookmark setObject: media forKey: @"media"];
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
30
Ample/NewMachineViewController.h
Normal file
30
Ample/NewMachineViewController.h
Normal file
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// NewMachineViewController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 6/8/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "Ample.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface NewMachineViewController : NSViewController
|
||||
|
||||
@property (nullable) NSString *machine;
|
||||
|
||||
-(void)reset;
|
||||
|
||||
@end
|
||||
|
||||
@interface NewMachineViewController (Table) <NSOutlineViewDelegate, NSOutlineViewDataSource>
|
||||
|
||||
@end
|
||||
|
||||
@interface NewMachineViewController (Bookmark) <Bookmark>
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
234
Ample/NewMachineViewController.m
Normal file
234
Ample/NewMachineViewController.m
Normal file
@@ -0,0 +1,234 @@
|
||||
//
|
||||
// NewMachineViewController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 6/8/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "NewMachineViewController.h"
|
||||
|
||||
@interface NewMachineViewController () {
|
||||
|
||||
NSArray *_data;
|
||||
}
|
||||
|
||||
@property (weak) IBOutlet NSOutlineView *outlineView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation NewMachineViewController
|
||||
|
||||
-(void)awakeFromNib {
|
||||
|
||||
static unsigned first = 0;
|
||||
|
||||
if (first) return;
|
||||
first++;
|
||||
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSString *path = [bundle pathForResource: @"models" ofType: @"plist"];
|
||||
_data = [NSArray arrayWithContentsOfFile: path];
|
||||
|
||||
}
|
||||
|
||||
-(void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
//[_outlineView reloadData];
|
||||
//[_outlineView setAutosaveExpandedItems: YES];
|
||||
//[_outlineView expandItem: nil expandChildren: YES];
|
||||
}
|
||||
|
||||
#pragma mark - IBActions
|
||||
- (IBAction)clickAction:(id)sender {
|
||||
|
||||
NSInteger row = [_outlineView clickedRow];
|
||||
if (row < 0) return;
|
||||
NSDictionary *item = [_outlineView itemAtRow: row];
|
||||
if (!item) return;
|
||||
|
||||
NSString *value = [item objectForKey: @"value"];
|
||||
NSArray *children = [item objectForKey: @"children"];
|
||||
|
||||
if (value) {
|
||||
[self setMachine: value];
|
||||
} else if (children) {
|
||||
id ap = [_outlineView animator];
|
||||
[_outlineView isItemExpanded: item] ? [ap collapseItem: item] : [ap expandItem: item];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
-(void)reset {
|
||||
|
||||
[_outlineView deselectAll: nil];
|
||||
[self setMachine: nil];
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
@implementation NewMachineViewController (Table)
|
||||
|
||||
#if 0
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldExpandItem:(id)item {
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item {
|
||||
return NO;
|
||||
}
|
||||
#endif
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item {
|
||||
// disclosure triangle.
|
||||
if (!item) return YES;
|
||||
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||
return [children count] > 0;
|
||||
}
|
||||
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
|
||||
if (!item) return YES;
|
||||
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||
return [children count] > 0;
|
||||
}
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item {
|
||||
|
||||
#if 0
|
||||
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||
return [children count] > 0;
|
||||
#else
|
||||
return NO;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
|
||||
|
||||
#if 0
|
||||
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||
if ([children count]) {
|
||||
return [outlineView makeViewWithIdentifier: @"HeaderCell" owner: self];
|
||||
}
|
||||
#endif
|
||||
NSTableCellView *v = [outlineView makeViewWithIdentifier: @"DataCell" owner: self];
|
||||
//[v setObjectValue: item];
|
||||
return v;
|
||||
}
|
||||
|
||||
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
|
||||
if (!item) return [_data count];
|
||||
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||
return [children count];
|
||||
}
|
||||
|
||||
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
|
||||
|
||||
if (item == nil) {
|
||||
return [_data objectAtIndex: index];
|
||||
}
|
||||
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||
return [children objectAtIndex: index];
|
||||
}
|
||||
|
||||
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item {
|
||||
if (!item) return NO;
|
||||
return [(NSDictionary *)item objectForKey: @"value"] != nil;
|
||||
}
|
||||
|
||||
|
||||
// saving/restoring expanded items
|
||||
- (id)outlineView:(NSOutlineView *)outlineView persistentObjectForItem:(id)item {
|
||||
|
||||
return [item objectForKey: @"description"];
|
||||
}
|
||||
|
||||
- (id)outlineView:(NSOutlineView *)outlineView itemForPersistentObject:(id)object {
|
||||
|
||||
if ([object isKindOfClass: [NSString class]]) {
|
||||
|
||||
for(NSDictionary *d in _data) {
|
||||
if ([(NSString *)object isEqualToString: [d objectForKey: @"description"]])
|
||||
return d;
|
||||
}
|
||||
|
||||
}
|
||||
return nil;
|
||||
//return object;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation NewMachineViewController (Bookmark)
|
||||
|
||||
|
||||
- (void)didLoadBookmark:(NSDictionary *)bookmark {
|
||||
}
|
||||
|
||||
- (BOOL)loadBookmark:(NSDictionary *)bookmark {
|
||||
NSString *machine = [bookmark objectForKey: @"machine"];
|
||||
|
||||
|
||||
|
||||
//NSInteger row = [_outlineView selectedRow];
|
||||
if (!machine) {
|
||||
[self setMachine: nil];
|
||||
[_outlineView deselectAll: nil];
|
||||
return NO;
|
||||
}
|
||||
|
||||
for (NSDictionary *parent in _data) {
|
||||
NSArray *children = [parent objectForKey: @"children"];
|
||||
|
||||
for (NSDictionary *child in children) {
|
||||
if ([machine isEqualToString: [child objectForKey: @"value"]]) {
|
||||
|
||||
id ap = [_outlineView animator];
|
||||
[ap expandItem: parent];
|
||||
NSInteger row = [_outlineView rowForItem: child];
|
||||
if (row >= 0) {
|
||||
NSIndexSet *set = [NSIndexSet indexSetWithIndex: row];
|
||||
[_outlineView selectRowIndexes: set byExtendingSelection: NO];
|
||||
[_outlineView scrollRowToVisible: row];
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
// could also match parent.
|
||||
if ([machine isEqualToString: [parent objectForKey: @"value"]]) {
|
||||
NSInteger row = [_outlineView rowForItem: parent];
|
||||
if (row >= 0) {
|
||||
NSIndexSet *set = [NSIndexSet indexSetWithIndex: row];
|
||||
[_outlineView selectRowIndexes: set byExtendingSelection: NO];
|
||||
[_outlineView scrollRowToVisible: row];
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)saveBookmark:(NSMutableDictionary *)bookmark {
|
||||
// machine saved in parent.
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)willLoadBookmark:(NSDictionary *)bookmark {
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,47 +0,0 @@
|
||||
//
|
||||
// NewSlotViewController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/9/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface NewSlotViewController : NSViewController
|
||||
|
||||
@property NSArray *args;
|
||||
@property NSDictionary *media;
|
||||
@property NSSize resolution;
|
||||
@property (nonatomic) NSString *machine;
|
||||
@end
|
||||
|
||||
@interface NewSlotViewController (OutlineView) <NSOutlineViewDelegate, NSOutlineViewDataSource>
|
||||
|
||||
@end
|
||||
|
||||
@interface SlotTableCellView : NSTableCellView
|
||||
|
||||
@property (weak) IBOutlet NSPopUpButton *menuButton;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface SlotItem : NSObject
|
||||
@property unsigned index;
|
||||
@property NSArray *children;
|
||||
@property NSArray *menuItems;
|
||||
@property NSInteger defaultIndex;
|
||||
@property NSInteger selectedIndex;
|
||||
|
||||
-(NSDictionary *)selectedItem;
|
||||
-(NSDictionary *)selectedMedia;
|
||||
-(BOOL)hasDefault;
|
||||
|
||||
-(void)reset;
|
||||
@end
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,495 +0,0 @@
|
||||
//
|
||||
// NewSlotViewController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/9/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "NewSlotViewController.h"
|
||||
#import "Menu.h"
|
||||
|
||||
|
||||
@implementation SlotTableCellView
|
||||
|
||||
@end
|
||||
|
||||
@implementation SlotItem
|
||||
|
||||
-(id)init {
|
||||
_defaultIndex = -1;
|
||||
_selectedIndex = -1;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
-(NSString *)label {
|
||||
static NSString *Names[] = {
|
||||
@"RAM:",
|
||||
@"Slot 0:",
|
||||
@"Slot 1:",
|
||||
@"Slot 2:",
|
||||
@"Slot 3:",
|
||||
@"Slot 4:",
|
||||
@"Slot 5:",
|
||||
@"Slot 6:",
|
||||
@"Slot 7:",
|
||||
@"Expansion:",
|
||||
@"Auxiliary:",
|
||||
@"RS232:",
|
||||
@"Game I/O:",
|
||||
@"Modem:",
|
||||
@"Printer:"
|
||||
};
|
||||
return Names[_index];
|
||||
}
|
||||
|
||||
-(NSString *)flag {
|
||||
|
||||
static NSString *Names[] = {
|
||||
@"-ramsize",
|
||||
@"-sl0",
|
||||
@"-sl1",
|
||||
@"-sl2",
|
||||
@"-sl3",
|
||||
@"-sl4",
|
||||
@"-sl5",
|
||||
@"-sl6",
|
||||
@"-sl7",
|
||||
@"-exp",
|
||||
@"-aux",
|
||||
@"-rs232",
|
||||
@"-gameio",
|
||||
@"-modem",
|
||||
@"-printer"
|
||||
};
|
||||
return Names[_index];
|
||||
|
||||
}
|
||||
|
||||
-(void)buildMenuWithSelectedValue: (NSString *)value {
|
||||
|
||||
NSMutableArray *tmp = [NSMutableArray arrayWithCapacity: [_children count]];
|
||||
_defaultIndex = -1;
|
||||
_selectedIndex = -1;
|
||||
|
||||
int ix = 0;
|
||||
for (NSDictionary *d in _children) {
|
||||
NSString *title = [d objectForKey: @"description"];
|
||||
NSMenuItem *mi = [[NSMenuItem alloc] initWithTitle: title action: NULL keyEquivalent: @""];
|
||||
|
||||
// row 0 for slots is -- None -- which should be nil...
|
||||
[mi setRepresentedObject: d];
|
||||
|
||||
|
||||
BOOL disabled = [(NSNumber *)[d objectForKey: @"disabled"] boolValue];
|
||||
if (disabled) {
|
||||
[mi setEnabled: NO];
|
||||
}
|
||||
|
||||
BOOL def = [(NSNumber *)[d objectForKey: @"default"] boolValue];
|
||||
if (def) {
|
||||
[mi setAttributedTitle: ItalicMenuString(title)];
|
||||
_defaultIndex = ix;
|
||||
}
|
||||
|
||||
if (value) {
|
||||
NSString *v = [d objectForKey: @"value"];
|
||||
if ([value compare: v] == NSOrderedSame) {
|
||||
_selectedIndex = ix;
|
||||
}
|
||||
}
|
||||
|
||||
[tmp addObject: mi];
|
||||
++ix;
|
||||
}
|
||||
|
||||
|
||||
[self setMenuItems: tmp];
|
||||
if (_selectedIndex < 0) _selectedIndex = _defaultIndex;
|
||||
if (_selectedIndex < 0) _selectedIndex = 0;
|
||||
}
|
||||
|
||||
-(void)reset {
|
||||
[self setSelectedIndex: _defaultIndex >= 0 ? _defaultIndex : 0];
|
||||
}
|
||||
|
||||
-(NSDictionary *)selectedItem {
|
||||
if (_selectedIndex < 0) return nil;
|
||||
return [_children objectAtIndex: _selectedIndex];
|
||||
}
|
||||
|
||||
-(NSDictionary *)selectedMedia {
|
||||
if (_selectedIndex < 0) return nil;
|
||||
NSDictionary *d = [_children objectAtIndex: _selectedIndex];
|
||||
return [d objectForKey: @"media"];
|
||||
}
|
||||
|
||||
-(BOOL)hasDefault {
|
||||
return _defaultIndex >= 0;
|
||||
}
|
||||
|
||||
-(void)prepareView: (SlotTableCellView *)view {
|
||||
|
||||
NSPopUpButton *button = [view menuButton];
|
||||
NSTextField *text = [view textField];
|
||||
|
||||
[text setObjectValue: [self label]];
|
||||
|
||||
[button unbind: @"selectedIndex"];
|
||||
[[button menu] setItemArray: _menuItems];
|
||||
[button bind: @"selectedIndex" toObject: self withKeyPath: @"selectedIndex" options: nil];
|
||||
[button setTag: _index];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@interface NewSlotViewController ()
|
||||
@property (weak) IBOutlet NSOutlineView *outlineView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation NewSlotViewController {
|
||||
NSMutableArray *_root;
|
||||
|
||||
unsigned _slots_explicit;
|
||||
unsigned _slots_valid;
|
||||
unsigned _slots_default;
|
||||
|
||||
NSDictionary *_slot_object[16];
|
||||
NSDictionary *_slot_media[16];
|
||||
NSString *_slot_value[16]; // when explicitely set.
|
||||
NSDictionary *_machine_media;
|
||||
|
||||
NSDictionary *_machine_data;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
// Do view setup here.
|
||||
|
||||
_root = [NSMutableArray new];
|
||||
}
|
||||
|
||||
-(void)resetMachine {
|
||||
|
||||
[_root removeAllObjects];
|
||||
[_outlineView reloadData];
|
||||
|
||||
_slots_valid = 0;
|
||||
_slots_explicit = 0;
|
||||
_slots_default = 0;
|
||||
_machine_media = nil;
|
||||
_machine_data = nil;
|
||||
|
||||
for (unsigned i = 0; i < 16; ++i) {
|
||||
_slot_media[i] = nil;
|
||||
_slot_object[i] = nil;
|
||||
_slot_value[i] = nil;
|
||||
}
|
||||
|
||||
[self setResolution: NSMakeSize(0, 0)];
|
||||
[self setArgs: @[]];
|
||||
[self setMedia: @{}];
|
||||
}
|
||||
|
||||
-(void)loadMachine {
|
||||
|
||||
static NSString *Keys[] = {
|
||||
@"ram",
|
||||
@"sl0", @"sl1", @"sl2", @"sl3",
|
||||
@"sl4", @"sl5", @"sl6", @"sl7",
|
||||
@"exp", @"aux", @"rs232",
|
||||
@"gameio", @"printer", @"modem",
|
||||
};
|
||||
static unsigned SizeofKeys = sizeof(Keys)/sizeof(Keys[0]);
|
||||
|
||||
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSURL *url= [bundle URLForResource: _machine withExtension: @"plist"];
|
||||
|
||||
NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
|
||||
if (!d) {
|
||||
[self resetMachine];
|
||||
return;
|
||||
}
|
||||
|
||||
NSArray *r = [d objectForKey: @"resolution"];
|
||||
NSSize res = NSMakeSize(0, 0);
|
||||
if (r) {
|
||||
res.width = [(NSNumber *)[r objectAtIndex: 0 /*@"width"*/] doubleValue];
|
||||
res.height = [(NSNumber *)[r objectAtIndex: 1 /*@"height"*/] doubleValue];
|
||||
}
|
||||
[self setResolution: res];
|
||||
|
||||
_slots_valid = 0;
|
||||
//_slots_explicit = 0;
|
||||
_slots_default = 0;
|
||||
|
||||
_machine_media = [d objectForKey: @"media"];
|
||||
|
||||
_machine_data = d;
|
||||
|
||||
[_root removeAllObjects];
|
||||
|
||||
unsigned mask = 1;
|
||||
for (unsigned i = 0; i < SizeofKeys; ++i, mask <<= 1) {
|
||||
|
||||
NSString *v = [_slot_object[i] objectForKey: @"value"];
|
||||
_slot_media[i] = nil;
|
||||
_slot_object[i] = nil;
|
||||
if (v) _slot_value[i] = v;
|
||||
|
||||
NSArray *options = [d objectForKey: Keys[i]];
|
||||
if (!options) continue;
|
||||
|
||||
_slots_valid |= mask;
|
||||
|
||||
SlotItem *item = [SlotItem new];
|
||||
[item setIndex: i];
|
||||
[item setChildren: options];
|
||||
[item buildMenuWithSelectedValue: _slot_value[i]];
|
||||
|
||||
if ([item defaultIndex] >= 0) {
|
||||
_slots_default |= mask;
|
||||
}
|
||||
// default media...
|
||||
_slot_media[i] = [item selectedMedia];
|
||||
[_root addObject: item];
|
||||
}
|
||||
|
||||
|
||||
|
||||
[_outlineView reloadData];
|
||||
[self rebuildMedia];
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
-(void)setMachine: (NSString *)machine {
|
||||
if (_machine == machine) return;
|
||||
if (_machine && machine && [machine compare: _machine] == NSOrderedSame) return;
|
||||
_machine = machine;
|
||||
|
||||
if (!machine) {
|
||||
[self resetMachine];
|
||||
return;
|
||||
}
|
||||
[self loadMachine];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
-(void)rebuildMedia {
|
||||
|
||||
|
||||
#define _(var, o) var += [[o objectForKey: @ # var ] unsignedIntValue]
|
||||
|
||||
unsigned cass = 0;
|
||||
unsigned cdrm = 0;
|
||||
unsigned hard = 0;
|
||||
unsigned flop_5_25 = 0;
|
||||
unsigned flop_3_5 = 0;
|
||||
|
||||
#if 0
|
||||
for (SlotItem *item in _root) {
|
||||
NSDictionary *tmp = [item selectedMedia];
|
||||
if (tmp) {
|
||||
_(cass, tmp);
|
||||
_(cdrm, tmp);
|
||||
_(hard, tmp);
|
||||
_(flop_5_25, tmp);
|
||||
_(flop_3_5, tmp);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if 1
|
||||
unsigned mask = 1;
|
||||
for (unsigned i = 0; i < 16; ++i, mask <<= 1) {
|
||||
|
||||
if (_slots_valid & mask) {
|
||||
NSDictionary *tmp = _slot_media[i];
|
||||
if (tmp) {
|
||||
_(cass, tmp);
|
||||
_(cdrm, tmp);
|
||||
_(hard, tmp);
|
||||
_(flop_5_25, tmp);
|
||||
_(flop_3_5, tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
NSDictionary *tmp = _machine_media;
|
||||
if (tmp) {
|
||||
_(cass, tmp);
|
||||
_(cdrm, tmp);
|
||||
_(hard, tmp);
|
||||
_(flop_5_25, tmp);
|
||||
_(flop_3_5, tmp);
|
||||
}
|
||||
|
||||
[self setMedia: @{
|
||||
@"cass": @(cass),
|
||||
@"cdrm": @(cdrm),
|
||||
@"hard": @(hard),
|
||||
@"flop_5_25": @(flop_5_25),
|
||||
@"flop_3_5": @(flop_3_5),
|
||||
}];
|
||||
|
||||
}
|
||||
|
||||
|
||||
static NSString *SlotFlagForIndex(unsigned index){
|
||||
static NSString *Names[] = {
|
||||
@"-ramsize",
|
||||
@"-sl0",
|
||||
@"-sl1",
|
||||
@"-sl2",
|
||||
@"-sl3",
|
||||
@"-sl4",
|
||||
@"-sl5",
|
||||
@"-sl6",
|
||||
@"-sl7",
|
||||
@"-exp",
|
||||
@"-aux",
|
||||
@"-rs232",
|
||||
@"-gameio",
|
||||
@"-modem",
|
||||
@"-printer"
|
||||
};
|
||||
return Names[index];
|
||||
}
|
||||
|
||||
-(void)rebuildArgs {
|
||||
|
||||
NSMutableArray *args = [NSMutableArray new];
|
||||
|
||||
for (SlotItem *item in _root) {
|
||||
NSDictionary *d = [item selectedItem];
|
||||
if ([(NSNumber *)[d objectForKey: @"default"] boolValue]) {
|
||||
continue; // default, don't include it.
|
||||
}
|
||||
NSString *value = [d objectForKey: @"value"];
|
||||
|
||||
if (!value || ![value length]) {
|
||||
if (![item hasDefault]) continue;
|
||||
value = @"";
|
||||
}
|
||||
[args addObject: [item flag]];
|
||||
[args addObject: value];
|
||||
}
|
||||
|
||||
#if 0
|
||||
unsigned mask = 1;
|
||||
for (unsigned i = 0 ; i < 16; ++i, mask <<= 1) {
|
||||
|
||||
if (!(_slots_valid & mask)) continue;
|
||||
NSDictionary *d = _slot_object[i];
|
||||
|
||||
if ([(NSNumber *)[d objectForKey: @"default"] boolValue]) {
|
||||
continue; // default, don't include it.
|
||||
}
|
||||
NSString *value = [d objectForKey: @"value"];
|
||||
|
||||
if (!value) {
|
||||
// if slot has a default, need to overwrite it.
|
||||
if (!(_slots_default & mask)) continue;
|
||||
value = @"";
|
||||
}
|
||||
|
||||
[args addObject: SlotFlagForIndex(i)];
|
||||
[args addObject: value];
|
||||
}
|
||||
#endif
|
||||
[self setArgs: args];
|
||||
}
|
||||
|
||||
- (IBAction)menuChanged:(NSPopUpButton *)sender {
|
||||
|
||||
unsigned index = (unsigned)[sender tag];
|
||||
unsigned mask = 1 << index;
|
||||
|
||||
|
||||
// index 0 = ram = special case...
|
||||
|
||||
NSDictionary *d = [[sender selectedItem] representedObject];
|
||||
|
||||
_slots_explicit |= mask;
|
||||
_slot_value[index] = [d objectForKey: @"value"];
|
||||
//_slots_default &= ~mask;
|
||||
|
||||
//_slot_object[index] = d;
|
||||
|
||||
// media...
|
||||
NSDictionary *newMedia = [d objectForKey: @"media"];
|
||||
NSDictionary *oldMedia = _slot_media[index];
|
||||
|
||||
if (newMedia != oldMedia) {
|
||||
_slot_media[index] = newMedia;
|
||||
[self rebuildMedia];
|
||||
}
|
||||
|
||||
[self rebuildArgs];
|
||||
}
|
||||
-(IBAction)resetSlots:(id)sender {
|
||||
|
||||
_slots_explicit = 0;
|
||||
for (unsigned i = 0; i < 16; ++i) {
|
||||
_slot_media[i] = nil;
|
||||
_slot_object[i] = nil;
|
||||
_slot_value[i] = nil;
|
||||
}
|
||||
for (SlotItem *item in _root) {
|
||||
[item reset];
|
||||
// if children, reset them too...
|
||||
unsigned index = [item index];
|
||||
_slot_media[index] = [item selectedMedia];
|
||||
}
|
||||
//[_outlineView reloadData]; // will need to reload if changing the default makes children disappear.
|
||||
|
||||
[self rebuildMedia];
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation NewSlotViewController (OutlineView)
|
||||
|
||||
|
||||
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
|
||||
|
||||
if (!item) return [_root count];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
|
||||
if (!item) return [_root objectAtIndex: index];
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
|
||||
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(SlotItem *)item {
|
||||
|
||||
SlotTableCellView *v = [outlineView makeViewWithIdentifier: @"MenuCell" owner: self];
|
||||
|
||||
[item prepareView: v];
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
@@ -176,13 +176,15 @@
|
||||
const char* args_chmod[] = {"+s", cp, NULL};
|
||||
|
||||
// well ... the second command executes a lot more consistently when the (optional) fp is provided and the we fgets the buffer.
|
||||
// textmate does a wait() to wait for a child to exit. Using the fp (which is popened()?) and reading until EOF
|
||||
// accomplishes the same thing.
|
||||
myStatus = AuthorizationExecuteWithPrivileges(myAuthorizationRef, "/usr/sbin/chown", kAuthorizationFlagDefaults, (char**)args_chown, &fp);
|
||||
fgets(buffer, sizeof(buffer), fp);
|
||||
while (fgets(buffer, sizeof(buffer), fp));
|
||||
fclose(fp);
|
||||
// fprintf(stderr, "myStatus = %d\ndata: %s\n", myStatus, buffer);
|
||||
|
||||
myStatus = AuthorizationExecuteWithPrivileges(myAuthorizationRef, "/bin/chmod", kAuthorizationFlagDefaults, (char**)args_chmod, &fp);
|
||||
fgets(buffer, sizeof(buffer), fp);
|
||||
while (fgets(buffer, sizeof(buffer), fp));
|
||||
fclose(fp);
|
||||
// fprintf(stderr, "myStatus = %d\ndata: %s\n", myStatus, buffer);
|
||||
|
||||
|
||||
227
Ample/Resources/CheatSheet.html
Normal file
227
Ample/Resources/CheatSheet.html
Normal file
@@ -0,0 +1,227 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Keyboard Cheat Sheet</title>
|
||||
<style type="text/css">
|
||||
:root {
|
||||
color-scheme: light dark;
|
||||
font-family: -apple-system, 'HelveticaNeue' ;
|
||||
font: -apple-system-body;
|
||||
}
|
||||
|
||||
body {
|
||||
user-select: none;
|
||||
|
||||
background-color: rgb(236, 236, 236);
|
||||
color: rgb(38, 38, 38);
|
||||
}
|
||||
h1, h2 {
|
||||
text-align: center;
|
||||
font-size: 150%;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
kbd {
|
||||
display: inline-block;
|
||||
border-radius: 3px;
|
||||
padding-left: .5em;
|
||||
padding-right: .5em;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 2px;
|
||||
margin-bottom: 5px;
|
||||
margin-right: 5px;
|
||||
margin-left: 4px;
|
||||
|
||||
border: solid 1px black;
|
||||
box-shadow: 1px 1px 2px 0px rgba(0,0,0,0.75), inset 1px 1px 2px 0px white;
|
||||
text-shadow: 0px 1px 0px rgb(255, 255, 255);
|
||||
background-color: rgb(225, 225, 225);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
background-color: rgb(50, 50, 50);
|
||||
color: rgb(225, 225, 225);
|
||||
}
|
||||
|
||||
kbd {
|
||||
border: solid 1px black;
|
||||
text-shadow: 0px 1px 0px black;
|
||||
box-shadow: 1px 1px 2px 0px rgba(0,0,0,0.75);
|
||||
background-color: rgb(101, 101, 101);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
/* os x 10.11 */
|
||||
if (window.NodeList && !NodeList.prototype.forEach) {
|
||||
NodeList.prototype.forEach = Array.prototype.forEach;
|
||||
}
|
||||
|
||||
function macbook(onoff) {
|
||||
var nodes = document.querySelectorAll("[data-macbook]");
|
||||
nodes.forEach( function(e) {
|
||||
var m = (e.dataset.macbook == "true");
|
||||
e.hidden = m ^ onoff;
|
||||
});
|
||||
}
|
||||
window.addEventListener('load', function(event) {
|
||||
macbook(false);
|
||||
|
||||
var e = document.getElementById('macbook');
|
||||
if (e) {
|
||||
e.checked = false;
|
||||
e.addEventListener('click', function (event) {
|
||||
macbook(e.checked);
|
||||
});
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
MacBook: <input type="checkbox" id="macbook" />
|
||||
</div>
|
||||
<h1>Full UI Mode</h1>
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width: 14em;" />
|
||||
<col />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<span data-macbook=false><kbd>Delete</kbd></span>
|
||||
<span data-macbook=true><kbd>Fn</kbd>+<kbd>Delete</kbd></span>
|
||||
</td>
|
||||
<td>Toggle partial UI mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Option</kbd>+<kbd>Enter</kbd></td>
|
||||
<td>Toggle full screen mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>F12</kbd></td>
|
||||
<td>Reset Key</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h1>Partial UI Mode</h1>
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width: 14em;" />
|
||||
<col />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<span data-macbook=false><kbd>Delete</kbd></span>
|
||||
<span data-macbook=true><kbd>Fn</kbd>+<kbd>Delete</kbd></span>
|
||||
</td>
|
||||
<td>Toggle full UI mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Option</kbd>+<kbd>Enter</kbd></td>
|
||||
<td>Toggle full screen mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Tab</kbd></td>
|
||||
<td>Config menu</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Esc</kbd></td>
|
||||
<td>Quit</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>P</kbd></td>
|
||||
<td>Pause</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>~</kbd></td>
|
||||
<td>Debugger break (when active)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<span data-macbook=false><kbd>Page Down</kbd></span>
|
||||
<span data-macbook=true><kbd>Fn</kbd>+<kbd>Down Arrow</kbd></span>
|
||||
</td>
|
||||
<td>Fast forward (while pressed)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F3</kbd></td>
|
||||
<td>Soft reset</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F3</kbd></td>
|
||||
<td>Hard reset</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<td><kbd>F5</kbd></td>
|
||||
<td>Toggle debugger</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F5</kbd></td>
|
||||
<td>Toggle graphic filters</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F7</kbd></td>
|
||||
<td>Load state</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F7</kbd></td>
|
||||
<td>Save state</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F10</kbd></td>
|
||||
<td>Toggle throttle</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F11</kbd></td>
|
||||
<td>Show FPS</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F11</kbd></td>
|
||||
<td>Show profiler</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>F12</kbd></td>
|
||||
<td>Save snapshot</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><kbd>Shift</kbd>+<kbd>F12</kbd></td>
|
||||
<td>Record MNG video</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>F12</kbd></td>
|
||||
<td>Record AVI video</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><kbd>Option</kbd>+<kbd>Shift</kbd>+<kbd>F12</kbd></td>
|
||||
<td>Record rendered AVI video</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Note</h2>
|
||||
<ul class="note">
|
||||
<li><kbd>F</kbd> keys may require <kbd>Fn</kbd> key depending on keyboard and system settings.</li>
|
||||
<li><kbd>Shift</kbd>, <kbd>Control</kbd>, and <kbd>Option</kbd> assume left-key unless otherwise specified.</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
5937
Ample/Resources/ace1000.plist
Normal file
5937
Ample/Resources/ace1000.plist
Normal file
File diff suppressed because it is too large
Load Diff
@@ -6,19 +6,6 @@
|
||||
<string>agat7</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7</string>
|
||||
<key>ram</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>32768</integer>
|
||||
<key>description</key>
|
||||
<string>32K</string>
|
||||
<key>value</key>
|
||||
<string>32K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cass</key>
|
||||
@@ -29,325 +16,562 @@
|
||||
<integer>512</integer>
|
||||
<integer>512</integer>
|
||||
</array>
|
||||
<key>sl2</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>32768</integer>
|
||||
<key>description</key>
|
||||
<string>32K</string>
|
||||
<key>value</key>
|
||||
<string>32K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>name</key>
|
||||
<string>sl2</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Slot 2</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>name</key>
|
||||
<string>sl3</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Slot 3</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>name</key>
|
||||
<string>sl4</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<string>Slot 4</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>name</key>
|
||||
<string>sl5</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<string>Slot 5</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>name</key>
|
||||
<string>sl6</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Slot 6</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat840k_hle</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>devname</key>
|
||||
<string>agat_fdc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat7_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7lang</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>a7ram</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>devname</key>
|
||||
<string>a7ports</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>sl3</key>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<key>name</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:centronics</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Centronics Printer</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pl80</string>
|
||||
<key>description</key>
|
||||
<string>COMX PL-80</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>covox_stereo</string>
|
||||
<key>description</key>
|
||||
<string>Covox (Stereo-in-1)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>covox</string>
|
||||
<key>description</key>
|
||||
<string>Covox Speech Thing</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ap2000</string>
|
||||
<key>description</key>
|
||||
<string>Epson ActionPrinter 2000</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ex800</string>
|
||||
<key>description</key>
|
||||
<string>Epson EX-800</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>lx800</string>
|
||||
<key>description</key>
|
||||
<string>Epson LX-800</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>lx810l</string>
|
||||
<key>description</key>
|
||||
<string>Espon LX-810L</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>p72</string>
|
||||
<key>description</key>
|
||||
<string>NEC PinWriter P72</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>samdac</string>
|
||||
<key>description</key>
|
||||
<string>SAMDAC</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>chessmec</string>
|
||||
<key>description</key>
|
||||
<string>Tasc ChessMachine EC Interface</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>smartboard</string>
|
||||
<key>description</key>
|
||||
<string>Tasc SmartBoard SB30 Interface</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>agat_fdc</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>525dsqd</string>
|
||||
<key>description</key>
|
||||
<string>5.25" quad density floppy drive</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>525dsqd</string>
|
||||
<key>description</key>
|
||||
<string>5.25" quad density floppy drive</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>sl4</key>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>sl5</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>sl6</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdchle</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a9fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat 840K floppy controller card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7fdc</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 140K floppy card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7lang</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K Language Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ram</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 32K RAM Card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>a7ports</string>
|
||||
<key>description</key>
|
||||
<string>Agat-7 Ports Card</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -6,129 +6,6 @@
|
||||
<string>apple1</string>
|
||||
<key>description</key>
|
||||
<string>Apple I</string>
|
||||
<key>ram</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4096</integer>
|
||||
<key>description</key>
|
||||
<string>4K</string>
|
||||
<key>value</key>
|
||||
<string>4K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8192</integer>
|
||||
<key>description</key>
|
||||
<string>8K</string>
|
||||
<key>value</key>
|
||||
<string>8K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>12288</integer>
|
||||
<key>description</key>
|
||||
<string>12K</string>
|
||||
<key>value</key>
|
||||
<string>12K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>16384</integer>
|
||||
<key>description</key>
|
||||
<string>16K</string>
|
||||
<key>value</key>
|
||||
<string>16K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>20480</integer>
|
||||
<key>description</key>
|
||||
<string>20K</string>
|
||||
<key>value</key>
|
||||
<string>20K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>24576</integer>
|
||||
<key>description</key>
|
||||
<string>24K</string>
|
||||
<key>value</key>
|
||||
<string>24K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>28672</integer>
|
||||
<key>description</key>
|
||||
<string>28K</string>
|
||||
<key>value</key>
|
||||
<string>28K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>32768</integer>
|
||||
<key>description</key>
|
||||
<string>32K</string>
|
||||
<key>value</key>
|
||||
<string>32K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>36864</integer>
|
||||
<key>description</key>
|
||||
<string>36K</string>
|
||||
<key>value</key>
|
||||
<string>36K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>40960</integer>
|
||||
<key>description</key>
|
||||
<string>40K</string>
|
||||
<key>value</key>
|
||||
<string>40K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>45056</integer>
|
||||
<key>description</key>
|
||||
<string>44K</string>
|
||||
<key>value</key>
|
||||
<string>44K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>49152</integer>
|
||||
<key>description</key>
|
||||
<string>48K</string>
|
||||
<key>value</key>
|
||||
<string>48K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
@@ -137,42 +14,273 @@
|
||||
<integer>560</integer>
|
||||
<integer>384</integer>
|
||||
</array>
|
||||
<key>exp</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4096</integer>
|
||||
<key>description</key>
|
||||
<string>4K</string>
|
||||
<key>value</key>
|
||||
<string>4K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8192</integer>
|
||||
<key>description</key>
|
||||
<string>8K</string>
|
||||
<key>value</key>
|
||||
<string>8K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>12288</integer>
|
||||
<key>description</key>
|
||||
<string>12K</string>
|
||||
<key>value</key>
|
||||
<string>12K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>16384</integer>
|
||||
<key>description</key>
|
||||
<string>16K</string>
|
||||
<key>value</key>
|
||||
<string>16K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>20480</integer>
|
||||
<key>description</key>
|
||||
<string>20K</string>
|
||||
<key>value</key>
|
||||
<string>20K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>24576</integer>
|
||||
<key>description</key>
|
||||
<string>24K</string>
|
||||
<key>value</key>
|
||||
<string>24K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>28672</integer>
|
||||
<key>description</key>
|
||||
<string>28K</string>
|
||||
<key>value</key>
|
||||
<string>28K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>32768</integer>
|
||||
<key>description</key>
|
||||
<string>32K</string>
|
||||
<key>value</key>
|
||||
<string>32K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>36864</integer>
|
||||
<key>description</key>
|
||||
<string>36K</string>
|
||||
<key>value</key>
|
||||
<string>36K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>40960</integer>
|
||||
<key>description</key>
|
||||
<string>40K</string>
|
||||
<key>value</key>
|
||||
<string>40K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>45056</integer>
|
||||
<key>description</key>
|
||||
<string>44K</string>
|
||||
<key>value</key>
|
||||
<string>44K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>49152</integer>
|
||||
<key>description</key>
|
||||
<string>48K</string>
|
||||
<key>value</key>
|
||||
<string>48K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cassette</string>
|
||||
<key>name</key>
|
||||
<string>exp</string>
|
||||
<key>description</key>
|
||||
<string>Apple I cassette board</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cass</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<string>Expansion</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cassette</string>
|
||||
<key>description</key>
|
||||
<string>Apple I cassette board</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>a1cass</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cass</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cffa</string>
|
||||
<key>description</key>
|
||||
<string>CFFA Compact Flash for Apple I</string>
|
||||
<key>devname</key>
|
||||
<string>cffa1</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cffa</string>
|
||||
<key>description</key>
|
||||
<string>CFFA Compact Flash for Apple I</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>name</key>
|
||||
<string>cffa1</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:cffa_ata:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>hdd</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:cffa_ata:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>hdd</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>apple1.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,253 +6,512 @@
|
||||
<string>apple2c</string>
|
||||
<key>description</key>
|
||||
<string>Apple //c</string>
|
||||
<key>ram</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>560</integer>
|
||||
<integer>384</integer>
|
||||
</array>
|
||||
<key>gameio</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>name</key>
|
||||
<string>gameio</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Game I/O</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>devname</key>
|
||||
<string>a2joy</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>devname</key>
|
||||
<string>a2pdls</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>devname</key>
|
||||
<string>a2ceyes</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>devname</key>
|
||||
<string>a2gizmo</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>printer</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<key>name</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Printer</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>devname</key>
|
||||
<string>mockingboardd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>name</key>
|
||||
<string>modem</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Modem</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>devname</key>
|
||||
<string>mockingboardd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>modem</key>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sl6:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>525</string>
|
||||
<key>description</key>
|
||||
<string>5.25"</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sl6:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>525</string>
|
||||
<key>description</key>
|
||||
<string>5.25"</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:keyboard</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type3hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 3 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type4hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 4 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5gbhle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Great Britain - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5jphle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Japan - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5sehle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Sweden - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (U.S.A. - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>apple2_flop_clcracked.xml</string>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>name</key>
|
||||
<string>apple2_flop_orig.xml</string>
|
||||
<key>filter</key>
|
||||
<string>A2C</string>
|
||||
</dict>
|
||||
<string>apple2_flop_misc.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -6,64 +6,11 @@
|
||||
<string>apple2cp</string>
|
||||
<key>description</key>
|
||||
<string>Apple //c Plus</string>
|
||||
<key>ram</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>393216</integer>
|
||||
<key>description</key>
|
||||
<string>384K</string>
|
||||
<key>value</key>
|
||||
<string>384K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>655360</integer>
|
||||
<key>description</key>
|
||||
<string>640K</string>
|
||||
<key>value</key>
|
||||
<string>640K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>917504</integer>
|
||||
<key>description</key>
|
||||
<string>896K</string>
|
||||
<key>value</key>
|
||||
<string>896K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>1179648</integer>
|
||||
<key>description</key>
|
||||
<string>1152K</string>
|
||||
<key>value</key>
|
||||
<string>1152K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
<key>flop_3_5</key>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
@@ -71,230 +18,462 @@
|
||||
<integer>560</integer>
|
||||
<integer>384</integer>
|
||||
</array>
|
||||
<key>gameio</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>393216</integer>
|
||||
<key>description</key>
|
||||
<string>384K</string>
|
||||
<key>value</key>
|
||||
<string>384K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>655360</integer>
|
||||
<key>description</key>
|
||||
<string>640K</string>
|
||||
<key>value</key>
|
||||
<string>640K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>917504</integer>
|
||||
<key>description</key>
|
||||
<string>896K</string>
|
||||
<key>value</key>
|
||||
<string>896K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>1179648</integer>
|
||||
<key>description</key>
|
||||
<string>1152K</string>
|
||||
<key>value</key>
|
||||
<string>1152K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>name</key>
|
||||
<string>gameio</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Game I/O</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>devname</key>
|
||||
<string>a2joy</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>devname</key>
|
||||
<string>a2pdls</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>devname</key>
|
||||
<string>a2ceyes</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>devname</key>
|
||||
<string>a2gizmo</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>printer</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<key>name</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Printer</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>devname</key>
|
||||
<string>mockingboardd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>name</key>
|
||||
<string>modem</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Modem</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>devname</key>
|
||||
<string>mockingboardd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>modem</key>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:keyboard</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type3hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 3 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type4hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 4 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5gbhle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Great Britain - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5jphle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Japan - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5sehle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Sweden - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (U.S.A. - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>apple2_flop_clcracked.xml</string>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>name</key>
|
||||
<string>apple2_flop_orig.xml</string>
|
||||
<key>filter</key>
|
||||
<string>A2C</string>
|
||||
</dict>
|
||||
<string>apple2_flop_misc.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -6,62 +6,9 @@
|
||||
<string>las128e2</string>
|
||||
<key>description</key>
|
||||
<string>Laser 128ex2 (version 6.1)</string>
|
||||
<key>ram</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>393216</integer>
|
||||
<key>description</key>
|
||||
<string>384K</string>
|
||||
<key>value</key>
|
||||
<string>384K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>655360</integer>
|
||||
<key>description</key>
|
||||
<string>640K</string>
|
||||
<key>value</key>
|
||||
<string>640K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>917504</integer>
|
||||
<key>description</key>
|
||||
<string>896K</string>
|
||||
<key>value</key>
|
||||
<string>896K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>1179648</integer>
|
||||
<key>description</key>
|
||||
<string>1152K</string>
|
||||
<key>value</key>
|
||||
<string>1152K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>flop_5_25</key>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
@@ -69,230 +16,462 @@
|
||||
<integer>560</integer>
|
||||
<integer>384</integer>
|
||||
</array>
|
||||
<key>gameio</key>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>393216</integer>
|
||||
<key>description</key>
|
||||
<string>384K</string>
|
||||
<key>value</key>
|
||||
<string>384K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>655360</integer>
|
||||
<key>description</key>
|
||||
<string>640K</string>
|
||||
<key>value</key>
|
||||
<string>640K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>917504</integer>
|
||||
<key>description</key>
|
||||
<string>896K</string>
|
||||
<key>value</key>
|
||||
<string>896K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>1179648</integer>
|
||||
<key>description</key>
|
||||
<string>1152K</string>
|
||||
<key>value</key>
|
||||
<string>1152K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>name</key>
|
||||
<string>gameio</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Game I/O</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>joy</string>
|
||||
<key>description</key>
|
||||
<string>Apple II analog joysticks</string>
|
||||
<key>devname</key>
|
||||
<string>a2joy</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>devname</key>
|
||||
<string>a2pdls</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>devname</key>
|
||||
<string>a2ceyes</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>devname</key>
|
||||
<string>a2gizmo</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>paddles</string>
|
||||
<key>description</key>
|
||||
<string>Apple II paddles</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>compeyes</string>
|
||||
<key>description</key>
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>printer</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<key>name</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Printer</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>devname</key>
|
||||
<string>mockingboardd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>name</key>
|
||||
<string>modem</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<string>Modem</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>ie15_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>devname</key>
|
||||
<string>pseudo_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>devname</key>
|
||||
<string>dec_rs232_loopback</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>devname</key>
|
||||
<string>null_modem</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Synchronous I/O</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_sync_io</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>devname</key>
|
||||
<string>serial_keyboard</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>devname</key>
|
||||
<string>serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>serial_terminal</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>devname</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>devname</key>
|
||||
<string>mockingboardd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>devname</key>
|
||||
<string>swtpc8212_terminal</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>modem</key>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:keyboard</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type3hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 3 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type4hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 4 Keyboard (HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5gbhle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Great Britain - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5jphle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Japan - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5sehle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (Sweden - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>type5hle</string>
|
||||
<key>description</key>
|
||||
<string>Sun Type 5 Keyboard (U.S.A. - HLE)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>apple2_flop_clcracked.xml</string>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>ie15</string>
|
||||
<key>description</key>
|
||||
<string>IE15 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pty</string>
|
||||
<key>description</key>
|
||||
<string>Pseudo terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>dec_loopback</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>null_modem</string>
|
||||
<key>description</key>
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>keyboard</string>
|
||||
<key>description</key>
|
||||
<string>Serial Keyboard</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<string>Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>terminal</string>
|
||||
<key>description</key>
|
||||
<string>Serial Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>sunkbd</string>
|
||||
<key>description</key>
|
||||
<string>Sun Keyboard Adaptor</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>name</key>
|
||||
<string>apple2_flop_orig.xml</string>
|
||||
<key>filter</key>
|
||||
<string>A2C</string>
|
||||
</dict>
|
||||
<string>apple2_flop_misc.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
370
Ample/Resources/mac128k.plist
Normal file
370
Ample/Resources/mac128k.plist
Normal file
@@ -0,0 +1,370 @@
|
||||
<?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>
|
||||
<key>value</key>
|
||||
<string>mac128k</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh 128k</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>131072</integer>
|
||||
<key>description</key>
|
||||
<string>128K</string>
|
||||
<key>value</key>
|
||||
<string>128K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120p</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
1616
Ample/Resources/mac2fdhd.plist
Normal file
1616
Ample/Resources/mac2fdhd.plist
Normal file
File diff suppressed because it is too large
Load Diff
370
Ample/Resources/mac512k.plist
Normal file
370
Ample/Resources/mac512k.plist
Normal file
@@ -0,0 +1,370 @@
|
||||
<?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>
|
||||
<key>value</key>
|
||||
<string>mac512k</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh 512k</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>524288</integer>
|
||||
<key>description</key>
|
||||
<string>512K</string>
|
||||
<key>value</key>
|
||||
<string>512K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120p</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
370
Ample/Resources/mac512ke.plist
Normal file
370
Ample/Resources/mac512ke.plist
Normal file
@@ -0,0 +1,370 @@
|
||||
<?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>
|
||||
<key>value</key>
|
||||
<string>mac512ke</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh 512ke</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>524288</integer>
|
||||
<key>description</key>
|
||||
<string>512K</string>
|
||||
<key>value</key>
|
||||
<string>512K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>mackbd_m0120p</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:kbd</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gb</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (British - M0110B)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>fr</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (French - M0110F)</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>it</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (Italian - M0110T)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>us</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Keyboard (U.S. - M0110)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>pad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (English - M0120)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>eupad</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Numeric Keypad (European - M0120P)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>frp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (French - M0110A F)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>jpp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (Japanese - M0110A J)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>usp</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Plus Keyboard (U.S. - M0110A)</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
510
Ample/Resources/macclas2.plist
Normal file
510
Ample/Resources/macclas2.plist
Normal file
@@ -0,0 +1,510 @@
|
||||
<?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>
|
||||
<key>value</key>
|
||||
<string>macclas2</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Classic II</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2097152</integer>
|
||||
<key>description</key>
|
||||
<string>2M</string>
|
||||
<key>value</key>
|
||||
<string>2M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4194304</integer>
|
||||
<key>description</key>
|
||||
<string>4M</string>
|
||||
<key>value</key>
|
||||
<string>4M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>6291456</integer>
|
||||
<key>description</key>
|
||||
<string>6M</string>
|
||||
<key>value</key>
|
||||
<string>6M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8388608</integer>
|
||||
<key>description</key>
|
||||
<string>8M</string>
|
||||
<key>value</key>
|
||||
<string>8M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>10485760</integer>
|
||||
<key>description</key>
|
||||
<string>10M</string>
|
||||
<key>value</key>
|
||||
<string>10M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:2</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:3</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:4</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:5</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:6</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_hdflop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
490
Ample/Resources/macclasc.plist
Normal file
490
Ample/Resources/macclasc.plist
Normal file
@@ -0,0 +1,490 @@
|
||||
<?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>
|
||||
<key>value</key>
|
||||
<string>macclasc</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Classic</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>342</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2097152</integer>
|
||||
<key>description</key>
|
||||
<string>2M</string>
|
||||
<key>value</key>
|
||||
<string>2M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2621440</integer>
|
||||
<key>description</key>
|
||||
<string>2560K</string>
|
||||
<key>value</key>
|
||||
<string>2560K</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4194304</integer>
|
||||
<key>description</key>
|
||||
<string>4M</string>
|
||||
<key>value</key>
|
||||
<string>4M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsibus:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsibus:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsibus:2</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsibus:3</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsibus:4</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsibus:5</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsibus:6</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_hdflop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
1615
Ample/Resources/macii.plist
Normal file
1615
Ample/Resources/macii.plist
Normal file
File diff suppressed because it is too large
Load Diff
1184
Ample/Resources/maciici.plist
Normal file
1184
Ample/Resources/maciici.plist
Normal file
File diff suppressed because it is too large
Load Diff
1166
Ample/Resources/maciicx.plist
Normal file
1166
Ample/Resources/maciicx.plist
Normal file
File diff suppressed because it is too large
Load Diff
1615
Ample/Resources/maciihmu.plist
Normal file
1615
Ample/Resources/maciihmu.plist
Normal file
File diff suppressed because it is too large
Load Diff
540
Ample/Resources/maciisi.plist
Normal file
540
Ample/Resources/maciisi.plist
Normal file
@@ -0,0 +1,540 @@
|
||||
<?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>
|
||||
<key>value</key>
|
||||
<string>maciisi</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh IIsi</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>640</integer>
|
||||
<integer>480</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2097152</integer>
|
||||
<key>description</key>
|
||||
<string>2M</string>
|
||||
<key>value</key>
|
||||
<string>2M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4194304</integer>
|
||||
<key>description</key>
|
||||
<string>4M</string>
|
||||
<key>value</key>
|
||||
<string>4M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8388608</integer>
|
||||
<key>description</key>
|
||||
<string>8M</string>
|
||||
<key>value</key>
|
||||
<string>8M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>16777216</integer>
|
||||
<key>description</key>
|
||||
<string>16M</string>
|
||||
<key>value</key>
|
||||
<string>16M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>33554432</integer>
|
||||
<key>description</key>
|
||||
<string>32M</string>
|
||||
<key>value</key>
|
||||
<string>32M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>50331648</integer>
|
||||
<key>description</key>
|
||||
<string>48M</string>
|
||||
<key>value</key>
|
||||
<string>48M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>67108864</integer>
|
||||
<key>description</key>
|
||||
<string>64M</string>
|
||||
<key>value</key>
|
||||
<string>64M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>134217728</integer>
|
||||
<key>description</key>
|
||||
<string>128M</string>
|
||||
<key>value</key>
|
||||
<string>128M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:2</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:3</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:4</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:5</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:6</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_hdflop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
1264
Ample/Resources/maciivi.plist
Normal file
1264
Ample/Resources/maciivi.plist
Normal file
File diff suppressed because it is too large
Load Diff
1264
Ample/Resources/maciivx.plist
Normal file
1264
Ample/Resources/maciivx.plist
Normal file
File diff suppressed because it is too large
Load Diff
1616
Ample/Resources/maciix.plist
Normal file
1616
Ample/Resources/maciix.plist
Normal file
File diff suppressed because it is too large
Load Diff
510
Ample/Resources/maclc.plist
Normal file
510
Ample/Resources/maclc.plist
Normal file
@@ -0,0 +1,510 @@
|
||||
<?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>
|
||||
<key>value</key>
|
||||
<string>maclc</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh LC</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>640</integer>
|
||||
<integer>480</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>2097152</integer>
|
||||
<key>description</key>
|
||||
<string>2M</string>
|
||||
<key>value</key>
|
||||
<string>2M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4194304</integer>
|
||||
<key>description</key>
|
||||
<string>4M</string>
|
||||
<key>value</key>
|
||||
<string>4M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>6291456</integer>
|
||||
<key>description</key>
|
||||
<string>6M</string>
|
||||
<key>value</key>
|
||||
<string>6M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8388608</integer>
|
||||
<key>description</key>
|
||||
<string>8M</string>
|
||||
<key>value</key>
|
||||
<string>8M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>10485760</integer>
|
||||
<key>description</key>
|
||||
<string>10M</string>
|
||||
<key>value</key>
|
||||
<string>10M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:2</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:3</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:4</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:5</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:6</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_hdflop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
500
Ample/Resources/maclc2.plist
Normal file
500
Ample/Resources/maclc2.plist
Normal file
@@ -0,0 +1,500 @@
|
||||
<?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>
|
||||
<key>value</key>
|
||||
<string>maclc2</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh LC II</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>640</integer>
|
||||
<integer>480</integer>
|
||||
</array>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>ramsize</string>
|
||||
<key>description</key>
|
||||
<string>RAM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>4194304</integer>
|
||||
<key>description</key>
|
||||
<string>4M</string>
|
||||
<key>value</key>
|
||||
<string>4M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>6291456</integer>
|
||||
<key>description</key>
|
||||
<string>6M</string>
|
||||
<key>value</key>
|
||||
<string>6M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>8388608</integer>
|
||||
<key>description</key>
|
||||
<string>8M</string>
|
||||
<key>value</key>
|
||||
<string>8M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
<integer>10485760</integer>
|
||||
<key>description</key>
|
||||
<string>10M</string>
|
||||
<key>value</key>
|
||||
<string>10M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>description</key>
|
||||
<string>Disk Drives</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string></string>
|
||||
<key>devname</key>
|
||||
<string>smartport</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>fdc:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35dd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" DD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35hd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" HD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>35sd</string>
|
||||
<key>description</key>
|
||||
<string>3.5" SD</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:0</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:1</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:2</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:3</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:4</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:5</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>scsi:6</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—None—</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
<key>description</key>
|
||||
<string>CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>harddisk</string>
|
||||
<key>description</key>
|
||||
<string>Hard Disk</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>hard</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_hdflop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user