mirror of
https://github.com/ksherlock/ample.git
synced 2026-04-25 01:18:53 +00:00
Compare commits
10 Commits
r39
..
bookmarks-1
| Author | SHA1 | Date | |
|---|---|---|---|
| f628d99e4a | |||
| 0b248e6aad | |||
| 94aac38af4 | |||
| 6215a0df12 | |||
| d348c15dc5 | |||
| e14336a009 | |||
| 4baf545245 | |||
| 0f3e6c8307 | |||
| 8fdb149eb3 | |||
| 787eac87f6 |
@@ -1,9 +1,6 @@
|
||||
dist
|
||||
embedded/mame64
|
||||
embedded/SDL2.framework
|
||||
embedded/Sparkle.framework
|
||||
embedded/Sparkle-*
|
||||
embedded/SDL2-*
|
||||
build
|
||||
embedded/mame-data.tgz
|
||||
__pycache__
|
||||
|
||||
+11
-219
@@ -64,18 +64,8 @@
|
||||
B6152B5B25F5B57E00605E6E /* Media.m in Sources */ = {isa = PBXBuildFile; fileRef = B6152B5925F5B57E00605E6E /* Media.m */; };
|
||||
B615A99F26640940001FBF99 /* SlotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6E9A18125088B36005E7525 /* SlotView.xib */; };
|
||||
B615A9A026640A70001FBF99 /* SlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E9A17F25088B1B005E7525 /* SlotViewController.m */; };
|
||||
B618B8C42729F6690045C2D8 /* laser128o.plist in Resources */ = {isa = PBXBuildFile; fileRef = B618B8C32729F6690045C2D8 /* laser128o.plist */; };
|
||||
B618B8C52729F6690045C2D8 /* laser128o.plist in Resources */ = {isa = PBXBuildFile; fileRef = B618B8C32729F6690045C2D8 /* laser128o.plist */; };
|
||||
B63005332666D6940014C381 /* BookmarkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B63005322666D6940014C381 /* BookmarkManager.m */; };
|
||||
B63005342666D6940014C381 /* BookmarkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B63005322666D6940014C381 /* BookmarkManager.m */; };
|
||||
B6301BE429107BE800495022 /* maclc520.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6301BE329107BE800495022 /* maclc520.plist */; };
|
||||
B6301BE529107BE800495022 /* maclc520.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6301BE329107BE800495022 /* maclc520.plist */; };
|
||||
B6301BE729107C1E00495022 /* maccclas.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6301BE629107C1E00495022 /* maccclas.plist */; };
|
||||
B6301BE829107C1E00495022 /* maccclas.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6301BE629107C1E00495022 /* maccclas.plist */; };
|
||||
B635C09A26784A1200B23BFD /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B635C09926784A1200B23BFD /* Sparkle.framework */; };
|
||||
B635C09B26784A1200B23BFD /* Sparkle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B635C09926784A1200B23BFD /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
B635C09D26784A4800B23BFD /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B635C09C26784A4800B23BFD /* Sparkle.framework */; };
|
||||
B635C09F26784D4700B23BFD /* AmpleLite.m in Sources */ = {isa = PBXBuildFile; fileRef = B635C09E26784D4700B23BFD /* AmpleLite.m */; };
|
||||
B6374AC4260EBBCF0045CA16 /* pty_shell.c in Sources */ = {isa = PBXBuildFile; fileRef = B6374AB6260EBB970045CA16 /* pty_shell.c */; };
|
||||
B6374AC5260EBC5A0045CA16 /* pty_shell in CopyFiles */ = {isa = PBXBuildFile; fileRef = B6374ABD260EBBC90045CA16 /* pty_shell */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
B6374AD1260ECB400045CA16 /* macclas2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6374AC9260ECB3F0045CA16 /* macclas2.plist */; };
|
||||
@@ -124,8 +114,6 @@
|
||||
B63C1F1025B1447C0016A611 /* CheatSheetWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */; };
|
||||
B63C1F1225B147E10016A611 /* CheatSheet.html in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F1125B147E10016A611 /* CheatSheet.html */; };
|
||||
B63C1F1325B147E10016A611 /* CheatSheet.html in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F1125B147E10016A611 /* CheatSheet.html */; };
|
||||
B63E57E22755AF2000F8B5D1 /* ace500.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63E57E12755AF1F00F8B5D1 /* ace500.plist */; };
|
||||
B63E57E32755AF2000F8B5D1 /* ace500.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63E57E12755AF1F00F8B5D1 /* ace500.plist */; };
|
||||
B646D10B263A5DF30014C586 /* ace1000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B646D10A263A5DF20014C586 /* ace1000.plist */; };
|
||||
B646D10C263A5DF30014C586 /* ace1000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B646D10A263A5DF20014C586 /* ace1000.plist */; };
|
||||
B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64979C124EF6703008ABD20 /* MediaViewController.m */; };
|
||||
@@ -137,6 +125,7 @@
|
||||
B64AF1F7250ED5E400A09B9B /* TableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = B64AF1F5250ED5E400A09B9B /* TableCellView.m */; };
|
||||
B64AF1FA250EF6A500A09B9B /* Transformers.m in Sources */ = {isa = PBXBuildFile; fileRef = B64AF1F9250EF6A500A09B9B /* Transformers.m */; };
|
||||
B64AF1FB250EF6A500A09B9B /* Transformers.m in Sources */ = {isa = PBXBuildFile; fileRef = B64AF1F9250EF6A500A09B9B /* Transformers.m */; };
|
||||
B64E15A924EA1D5300E8AD3D /* MachineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64E15A824EA1D5300E8AD3D /* MachineViewController.m */; };
|
||||
B65085B925B616AC00354EC9 /* maclc2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B65085B625B616AC00354EC9 /* maclc2.plist */; };
|
||||
B65085BA25B616AC00354EC9 /* maclc2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B65085B625B616AC00354EC9 /* maclc2.plist */; };
|
||||
B65085BB25B616AC00354EC9 /* maclc3.plist in Resources */ = {isa = PBXBuildFile; fileRef = B65085B725B616AC00354EC9 /* maclc3.plist */; };
|
||||
@@ -157,14 +146,8 @@
|
||||
B6841BD7251EC926006A5C39 /* vmnet_helper.c in Sources */ = {isa = PBXBuildFile; fileRef = B6841BCA251EC88E006A5C39 /* vmnet_helper.c */; };
|
||||
B6841BDA251ECB1C006A5C39 /* mame64 in CopyFiles */ = {isa = PBXBuildFile; fileRef = B66236B824FDA698006CABD7 /* mame64 */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
B6841BDE251ECC29006A5C39 /* vmnet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6841BDD251ECC29006A5C39 /* vmnet.framework */; };
|
||||
B68A899026BE18E000B2C8C6 /* MidiManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B68A898F26BE18E000B2C8C6 /* MidiManager.m */; };
|
||||
B68A899126BE18E000B2C8C6 /* MidiManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B68A898F26BE18E000B2C8C6 /* MidiManager.m */; };
|
||||
B68A899426BF124B00B2C8C6 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B68A899326BF124B00B2C8C6 /* CoreMIDI.framework */; };
|
||||
B68A899526BF12A600B2C8C6 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B68A899326BF124B00B2C8C6 /* CoreMIDI.framework */; };
|
||||
B6A1A1942528EB1700DB0FD7 /* Menu.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A1A1932528EB1700DB0FD7 /* Menu.m */; };
|
||||
B6A1A1952528EB1700DB0FD7 /* Menu.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A1A1932528EB1700DB0FD7 /* Menu.m */; };
|
||||
B6ABF47C275986EB00DC3D48 /* ace2200.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6ABF47B275986EA00DC3D48 /* ace2200.plist */; };
|
||||
B6ABF47D275986EB00DC3D48 /* ace2200.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6ABF47B275986EA00DC3D48 /* ace2200.plist */; };
|
||||
B6B9EA662506A5550080E70D /* EjectButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B9EA642506A5550080E70D /* EjectButton.m */; };
|
||||
B6B9EA672506A5550080E70D /* EjectButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B9EA642506A5550080E70D /* EjectButton.m */; };
|
||||
B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA257F24E99BE9005FB8FF /* AppDelegate.m */; };
|
||||
@@ -219,6 +202,7 @@
|
||||
B6E08076252574690075F4E1 /* vmnet_helper in CopyFiles */ = {isa = PBXBuildFile; fileRef = B6841BD0251EC913006A5C39 /* vmnet_helper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
B6E4B5B024FDE2670094A35C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA258724E99BEB005FB8FF /* main.m */; };
|
||||
B6E4B5B124FDE2670094A35C /* LaunchWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6D6DE4024FADFAC00661A5F /* LaunchWindowController.m */; };
|
||||
B6E4B5B224FDE2670094A35C /* MachineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64E15A824EA1D5300E8AD3D /* MachineViewController.m */; };
|
||||
B6E4B5B324FDE2670094A35C /* MediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64979C124EF6703008ABD20 /* MediaViewController.m */; };
|
||||
B6E4B5B424FDE2670094A35C /* FlippedView.m in Sources */ = {isa = PBXBuildFile; fileRef = B60A6E1324EE0AE2004B7EEF /* FlippedView.m */; };
|
||||
B6E4B5B524FDE2670094A35C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA257F24E99BE9005FB8FF /* AppDelegate.m */; };
|
||||
@@ -277,28 +261,8 @@
|
||||
B6E4B5F024FDE2670094A35C /* apple2jp.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F224F5F36F005CB652 /* apple2jp.plist */; };
|
||||
B6E4B5F124FDE2670094A35C /* apple2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0324F5F371005CB652 /* apple2.plist */; };
|
||||
B6E4B5F224FDE2670094A35C /* prav8m.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0024F5F371005CB652 /* prav8m.plist */; };
|
||||
B6E6DCEB27AEE15F00E0A76E /* Ample.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCE927AEE15F00E0A76E /* Ample.xcdatamodeld */; };
|
||||
B6E6DCEC27AEE15F00E0A76E /* Ample.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCE927AEE15F00E0A76E /* Ample.xcdatamodeld */; };
|
||||
B6E6DCF727B0873200E0A76E /* BookmarkWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6E6DCF527B0873100E0A76E /* BookmarkWindow.xib */; };
|
||||
B6E6DCF827B0873200E0A76E /* BookmarkWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6E6DCF527B0873100E0A76E /* BookmarkWindow.xib */; };
|
||||
B6E6DCFB27B0A09300E0A76E /* BookmarkWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCFA27B0A09300E0A76E /* BookmarkWindowController.m */; };
|
||||
B6E6DCFC27B0A09300E0A76E /* BookmarkWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCFA27B0A09300E0A76E /* BookmarkWindowController.m */; };
|
||||
B6E6DD0127B0D17C00E0A76E /* Bookmark+CoreDataClass.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCFF27B0D17C00E0A76E /* Bookmark+CoreDataClass.m */; };
|
||||
B6E6DD0227B0D17C00E0A76E /* Bookmark+CoreDataClass.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCFF27B0D17C00E0A76E /* Bookmark+CoreDataClass.m */; };
|
||||
B6E6DD0327B0D17C00E0A76E /* Bookmark+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD0027B0D17C00E0A76E /* Bookmark+CoreDataProperties.m */; };
|
||||
B6E6DD0427B0D17C00E0A76E /* Bookmark+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD0027B0D17C00E0A76E /* Bookmark+CoreDataProperties.m */; };
|
||||
B6E6DD1327B1D71700E0A76E /* DiskImage+CoreDataClass.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD1127B1D71700E0A76E /* DiskImage+CoreDataClass.m */; };
|
||||
B6E6DD1427B1D71700E0A76E /* DiskImage+CoreDataClass.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD1127B1D71700E0A76E /* DiskImage+CoreDataClass.m */; };
|
||||
B6E6DD1527B1D71700E0A76E /* DiskImage+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD1227B1D71700E0A76E /* DiskImage+CoreDataProperties.m */; };
|
||||
B6E6DD1627B1D71700E0A76E /* DiskImage+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD1227B1D71700E0A76E /* DiskImage+CoreDataProperties.m */; };
|
||||
B6E9A18025088B1B005E7525 /* SlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E9A17F25088B1B005E7525 /* SlotViewController.m */; };
|
||||
B6E9A18325088B36005E7525 /* SlotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6E9A18125088B36005E7525 /* SlotView.xib */; };
|
||||
B6F7B538266FDA5B00624C6B /* MachineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6F7B536266FDA5B00624C6B /* MachineView.xib */; };
|
||||
B6F7B539266FDA5B00624C6B /* MachineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6F7B536266FDA5B00624C6B /* MachineView.xib */; };
|
||||
B6F7B53C267017A200624C6B /* NewMachineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6F7B53B267017A200624C6B /* NewMachineViewController.m */; };
|
||||
B6F7B53D267017A200624C6B /* NewMachineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6F7B53B267017A200624C6B /* NewMachineViewController.m */; };
|
||||
B6FECAFB28C0093600E143DA /* las3000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6FECAFA28C0093600E143DA /* las3000.plist */; };
|
||||
B6FECAFC28C0093600E143DA /* las3000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6FECAFA28C0093600E143DA /* las3000.plist */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
@@ -318,7 +282,6 @@
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
B66236B524FDA527006CABD7 /* SDL2.framework in Embed Frameworks */,
|
||||
B635C09B26784A1200B23BFD /* Sparkle.framework in Embed Frameworks */,
|
||||
);
|
||||
name = "Embed Frameworks";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -410,20 +373,12 @@
|
||||
B6109A1424F5F376005CB652 /* apple2cp.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2cp.plist; sourceTree = "<group>"; };
|
||||
B6109A1524F5F376005CB652 /* apple2p.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2p.plist; sourceTree = "<group>"; };
|
||||
B6109A1624F5F376005CB652 /* agat7.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = agat7.plist; sourceTree = "<group>"; };
|
||||
B611BA392679489F008597B5 /* pty_shell.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = pty_shell.entitlements; sourceTree = "<group>"; };
|
||||
B611BA3A267948B5008597B5 /* vmnet_helper.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = vmnet_helper.entitlements; sourceTree = "<group>"; };
|
||||
B6152B5425F4549F00605E6E /* Slot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Slot.h; sourceTree = "<group>"; };
|
||||
B6152B5525F4549F00605E6E /* Slot.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Slot.m; sourceTree = "<group>"; };
|
||||
B6152B5825F5B4F100605E6E /* Media.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Media.h; sourceTree = "<group>"; };
|
||||
B6152B5925F5B57E00605E6E /* Media.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Media.m; sourceTree = "<group>"; };
|
||||
B618B8C32729F6690045C2D8 /* laser128o.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = laser128o.plist; sourceTree = "<group>"; };
|
||||
B63005312666D6940014C381 /* BookmarkManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BookmarkManager.h; sourceTree = "<group>"; };
|
||||
B63005322666D6940014C381 /* BookmarkManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BookmarkManager.m; sourceTree = "<group>"; };
|
||||
B6301BE329107BE800495022 /* maclc520.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maclc520.plist; sourceTree = "<group>"; };
|
||||
B6301BE629107C1E00495022 /* maccclas.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maccclas.plist; sourceTree = "<group>"; };
|
||||
B635C09926784A1200B23BFD /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = embedded/Sparkle.framework; sourceTree = "<group>"; };
|
||||
B635C09C26784A4800B23BFD /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = embedded/Sparkle.framework; sourceTree = "<group>"; };
|
||||
B635C09E26784D4700B23BFD /* AmpleLite.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AmpleLite.m; sourceTree = "<group>"; };
|
||||
B6374AB6260EBB970045CA16 /* pty_shell.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pty_shell.c; sourceTree = "<group>"; };
|
||||
B6374ABD260EBBC90045CA16 /* pty_shell */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = pty_shell; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B6374AC9260ECB3F0045CA16 /* macclas2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = macclas2.plist; sourceTree = "<group>"; };
|
||||
@@ -453,7 +408,6 @@
|
||||
B63C1F0D25B1447C0016A611 /* CheatSheetWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CheatSheetWindowController.h; sourceTree = "<group>"; };
|
||||
B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CheatSheetWindowController.m; sourceTree = "<group>"; };
|
||||
B63C1F1125B147E10016A611 /* CheatSheet.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = CheatSheet.html; sourceTree = "<group>"; };
|
||||
B63E57E12755AF1F00F8B5D1 /* ace500.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ace500.plist; sourceTree = "<group>"; };
|
||||
B646D10A263A5DF20014C586 /* ace1000.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ace1000.plist; sourceTree = "<group>"; };
|
||||
B64979C024EF6703008ABD20 /* MediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaViewController.h; sourceTree = "<group>"; };
|
||||
B64979C124EF6703008ABD20 /* MediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MediaViewController.m; sourceTree = "<group>"; };
|
||||
@@ -483,12 +437,8 @@
|
||||
B6841BCA251EC88E006A5C39 /* vmnet_helper.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = vmnet_helper.c; sourceTree = "<group>"; };
|
||||
B6841BD0251EC913006A5C39 /* vmnet_helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = vmnet_helper; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B6841BDD251ECC29006A5C39 /* vmnet.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = vmnet.framework; path = System/Library/Frameworks/vmnet.framework; sourceTree = SDKROOT; };
|
||||
B68A898F26BE18E000B2C8C6 /* MidiManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MidiManager.m; sourceTree = "<group>"; };
|
||||
B68A899226BE320200B2C8C6 /* MidiManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MidiManager.h; sourceTree = "<group>"; };
|
||||
B68A899326BF124B00B2C8C6 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
|
||||
B6A1A1932528EB1700DB0FD7 /* Menu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Menu.m; sourceTree = "<group>"; };
|
||||
B6A1A1962528EB4600DB0FD7 /* Menu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Menu.h; sourceTree = "<group>"; };
|
||||
B6ABF47B275986EA00DC3D48 /* ace2200.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ace2200.plist; sourceTree = "<group>"; };
|
||||
B6B9EA642506A5550080E70D /* EjectButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EjectButton.m; sourceTree = "<group>"; };
|
||||
B6B9EA652506A5550080E70D /* EjectButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EjectButton.h; sourceTree = "<group>"; };
|
||||
B6BA257B24E99BE9005FB8FF /* Ample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
@@ -526,27 +476,9 @@
|
||||
B6DE32422605482500418375 /* mac512k.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = mac512k.plist; sourceTree = "<group>"; };
|
||||
B6DE32432605482500418375 /* macse.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = macse.plist; sourceTree = "<group>"; };
|
||||
B6E4B5FA24FDE2670094A35C /* Ample Lite.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Ample Lite.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B6E6DCEA27AEE15F00E0A76E /* Ample.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Ample.xcdatamodel; sourceTree = "<group>"; };
|
||||
B6E6DCF627B0873100E0A76E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/BookmarkWindow.xib; sourceTree = "<group>"; };
|
||||
B6E6DCF927B0A09300E0A76E /* BookmarkWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BookmarkWindowController.h; sourceTree = "<group>"; };
|
||||
B6E6DCFA27B0A09300E0A76E /* BookmarkWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BookmarkWindowController.m; sourceTree = "<group>"; };
|
||||
B6E6DCFD27B0D17C00E0A76E /* Bookmark+CoreDataProperties.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Bookmark+CoreDataProperties.h"; sourceTree = "<group>"; };
|
||||
B6E6DCFE27B0D17C00E0A76E /* Bookmark+CoreDataClass.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Bookmark+CoreDataClass.h"; sourceTree = "<group>"; };
|
||||
B6E6DCFF27B0D17C00E0A76E /* Bookmark+CoreDataClass.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Bookmark+CoreDataClass.m"; sourceTree = "<group>"; };
|
||||
B6E6DD0027B0D17C00E0A76E /* Bookmark+CoreDataProperties.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Bookmark+CoreDataProperties.m"; sourceTree = "<group>"; };
|
||||
B6E6DD0E27B161C400E0A76E /* Bookmark.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Bookmark.h; path = Ample/Bookmark.h; sourceTree = SOURCE_ROOT; };
|
||||
B6E6DD0F27B1D71700E0A76E /* DiskImage+CoreDataProperties.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DiskImage+CoreDataProperties.h"; sourceTree = "<group>"; };
|
||||
B6E6DD1027B1D71700E0A76E /* DiskImage+CoreDataClass.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DiskImage+CoreDataClass.h"; sourceTree = "<group>"; };
|
||||
B6E6DD1127B1D71700E0A76E /* DiskImage+CoreDataClass.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "DiskImage+CoreDataClass.m"; sourceTree = "<group>"; };
|
||||
B6E6DD1227B1D71700E0A76E /* DiskImage+CoreDataProperties.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "DiskImage+CoreDataProperties.m"; sourceTree = "<group>"; };
|
||||
B6E6DD1727B1DF5F00E0A76E /* DiskImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DiskImage.h; sourceTree = "<group>"; };
|
||||
B6E9A17E25088B1B005E7525 /* SlotViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SlotViewController.h; sourceTree = "<group>"; };
|
||||
B6E9A17F25088B1B005E7525 /* SlotViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SlotViewController.m; sourceTree = "<group>"; };
|
||||
B6E9A18225088B36005E7525 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/SlotView.xib; sourceTree = "<group>"; };
|
||||
B6F7B537266FDA5B00624C6B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MachineView.xib; sourceTree = "<group>"; };
|
||||
B6F7B53A267017A200624C6B /* NewMachineViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NewMachineViewController.h; sourceTree = "<group>"; };
|
||||
B6F7B53B267017A200624C6B /* NewMachineViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NewMachineViewController.m; sourceTree = "<group>"; };
|
||||
B6FECAFA28C0093600E143DA /* las3000.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = las3000.plist; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -570,9 +502,6 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B65D718625E70BD5008C5F87 /* WebKit.framework in Frameworks */,
|
||||
B635C09D26784A4800B23BFD /* Sparkle.framework in Frameworks */,
|
||||
B68A899426BF124B00B2C8C6 /* CoreMIDI.framework in Frameworks */,
|
||||
B635C09A26784A1200B23BFD /* Sparkle.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -580,7 +509,6 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B68A899526BF12A600B2C8C6 /* CoreMIDI.framework in Frameworks */,
|
||||
B65D718725E70BE5008C5F87 /* WebKit.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -591,7 +519,6 @@
|
||||
B6374AB2260EBB970045CA16 /* pty_shell */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B611BA392679489F008597B5 /* pty_shell.entitlements */,
|
||||
B6374AB6260EBB970045CA16 /* pty_shell.c */,
|
||||
);
|
||||
path = pty_shell;
|
||||
@@ -608,9 +535,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B6109A0824F5F373005CB652 /* ace100.plist */,
|
||||
B63E57E12755AF1F00F8B5D1 /* ace500.plist */,
|
||||
B646D10A263A5DF20014C586 /* ace1000.plist */,
|
||||
B6ABF47B275986EA00DC3D48 /* ace2200.plist */,
|
||||
B6109A1624F5F376005CB652 /* agat7.plist */,
|
||||
B6109A1224F5F375005CB652 /* agat9.plist */,
|
||||
B6109A1124F5F375005CB652 /* albert.plist */,
|
||||
@@ -649,8 +574,6 @@
|
||||
B61099F724F5F36F005CB652 /* las128ex.plist */,
|
||||
B61099F824F5F36F005CB652 /* laser2c.plist */,
|
||||
B6109A1024F5F375005CB652 /* laser128.plist */,
|
||||
B618B8C32729F6690045C2D8 /* laser128o.plist */,
|
||||
B6FECAFA28C0093600E143DA /* las3000.plist */,
|
||||
B6109A0B24F5F373005CB652 /* maxxi.plist */,
|
||||
B61099ED24F5F36E005CB652 /* microeng.plist */,
|
||||
B61099F524F5F36F005CB652 /* models.plist */,
|
||||
@@ -670,7 +593,6 @@
|
||||
B6374AE2260ECDDD0045CA16 /* mac2fdhd.plist */,
|
||||
B6DE32422605482500418375 /* mac512k.plist */,
|
||||
B6DE323F2605482400418375 /* mac512ke.plist */,
|
||||
B6301BE629107C1E00495022 /* maccclas.plist */,
|
||||
B6374AC9260ECB3F0045CA16 /* macclas2.plist */,
|
||||
B6DE323E2605482400418375 /* macclasc.plist */,
|
||||
B6374ACA260ECB3F0045CA16 /* macii.plist */,
|
||||
@@ -684,7 +606,6 @@
|
||||
B6DD1FE725B407E6004A3242 /* maclc.plist */,
|
||||
B65085B625B616AC00354EC9 /* maclc2.plist */,
|
||||
B65085B725B616AC00354EC9 /* maclc3.plist */,
|
||||
B6301BE329107BE800495022 /* maclc520.plist */,
|
||||
B6DE32412605482500418375 /* macplus.plist */,
|
||||
B6DE32432605482500418375 /* macse.plist */,
|
||||
B6374AD0260ECB400045CA16 /* macse30.plist */,
|
||||
@@ -696,8 +617,6 @@
|
||||
B66236B624FDA686006CABD7 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B68A899326BF124B00B2C8C6 /* CoreMIDI.framework */,
|
||||
B635C09926784A1200B23BFD /* Sparkle.framework */,
|
||||
B65D718525E70BD5008C5F87 /* WebKit.framework */,
|
||||
B6841BDD251ECC29006A5C39 /* vmnet.framework */,
|
||||
);
|
||||
@@ -709,7 +628,6 @@
|
||||
children = (
|
||||
B63C1B8D25004C6D00511A71 /* mame-data.tgz */,
|
||||
B66236B824FDA698006CABD7 /* mame64 */,
|
||||
B635C09C26784A4800B23BFD /* Sparkle.framework */,
|
||||
B66236B224FDA522006CABD7 /* SDL2.framework */,
|
||||
);
|
||||
name = "Embedded Content";
|
||||
@@ -718,7 +636,6 @@
|
||||
B6841BD1251EC913006A5C39 /* vmnet_helper */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B611BA3A267948B5008597B5 /* vmnet_helper.entitlements */,
|
||||
B6841BCA251EC88E006A5C39 /* vmnet_helper.c */,
|
||||
);
|
||||
path = vmnet_helper;
|
||||
@@ -751,16 +668,12 @@
|
||||
B6BA257D24E99BE9005FB8FF /* Ample */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B6E6DD0527B160D400E0A76E /* Core Data */,
|
||||
B6665C12265A0E3E00254939 /* AutocompleteControl.h */,
|
||||
B6665C13265A0E3E00254939 /* AutocompleteControl.m */,
|
||||
B6BA257E24E99BE9005FB8FF /* AppDelegate.h */,
|
||||
B6BA257F24E99BE9005FB8FF /* AppDelegate.m */,
|
||||
B63C1B8924FF4B7100511A71 /* Ample.h */,
|
||||
B635C09E26784D4700B23BFD /* AmpleLite.m */,
|
||||
B63C1B8A24FF4BF700511A71 /* Ample.m */,
|
||||
B6E6DD0E27B161C400E0A76E /* Bookmark.h */,
|
||||
B6E6DD1727B1DF5F00E0A76E /* DiskImage.h */,
|
||||
B64AF1F4250ED5E400A09B9B /* TableCellView.h */,
|
||||
B64AF1F5250ED5E400A09B9B /* TableCellView.m */,
|
||||
B6152B5425F4549F00605E6E /* Slot.h */,
|
||||
@@ -783,15 +696,11 @@
|
||||
B66D0FE926113AA8000902F1 /* SoftwareList.h */,
|
||||
B63005312666D6940014C381 /* BookmarkManager.h */,
|
||||
B63005322666D6940014C381 /* BookmarkManager.m */,
|
||||
B6F7B53A267017A200624C6B /* NewMachineViewController.h */,
|
||||
B6F7B53B267017A200624C6B /* NewMachineViewController.m */,
|
||||
B6BA563A251685DA00B0C47D /* Window Controllers */,
|
||||
B6B9EA652506A5550080E70D /* EjectButton.h */,
|
||||
B6B9EA642506A5550080E70D /* EjectButton.m */,
|
||||
B64AF1F8250EF6A500A09B9B /* Transformers.h */,
|
||||
B64AF1F9250EF6A500A09B9B /* Transformers.m */,
|
||||
B68A898F26BE18E000B2C8C6 /* MidiManager.m */,
|
||||
B68A899226BE320200B2C8C6 /* MidiManager.h */,
|
||||
B6BA258124E99BEB005FB8FF /* Assets.xcassets */,
|
||||
B64E15AF24EA365E00E8AD3D /* Resources */,
|
||||
B6BA258624E99BEB005FB8FF /* Info.plist */,
|
||||
@@ -807,8 +716,6 @@
|
||||
B6BA563A251685DA00B0C47D /* Window Controllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B6E6DCF927B0A09300E0A76E /* BookmarkWindowController.h */,
|
||||
B6E6DCFA27B0A09300E0A76E /* BookmarkWindowController.m */,
|
||||
B64AF1F0250ECB2E00A09B9B /* DiskImagesWindowController.h */,
|
||||
B64AF1F1250ECB2E00A09B9B /* DiskImagesWindowController.m */,
|
||||
B63C1B9125008A2700511A71 /* DownloadWindowController.h */,
|
||||
@@ -829,9 +736,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B6665C1A265C639900254939 /* Autocomplete.xib */,
|
||||
B6E6DCF527B0873100E0A76E /* BookmarkWindow.xib */,
|
||||
B6E9A18125088B36005E7525 /* SlotView.xib */,
|
||||
B6F7B536266FDA5B00624C6B /* MachineView.xib */,
|
||||
B63C1B9325008A2700511A71 /* DownloadWindow.xib */,
|
||||
B66236BF24FDB7A6006CABD7 /* Credits.rtf */,
|
||||
B6D6DE3C24FADF8B00661A5F /* LaunchWindow.xib */,
|
||||
@@ -864,22 +769,6 @@
|
||||
path = images;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B6E6DD0527B160D400E0A76E /* Core Data */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B6E6DCE927AEE15F00E0A76E /* Ample.xcdatamodeld */,
|
||||
B6E6DCFE27B0D17C00E0A76E /* Bookmark+CoreDataClass.h */,
|
||||
B6E6DCFF27B0D17C00E0A76E /* Bookmark+CoreDataClass.m */,
|
||||
B6E6DCFD27B0D17C00E0A76E /* Bookmark+CoreDataProperties.h */,
|
||||
B6E6DD0027B0D17C00E0A76E /* Bookmark+CoreDataProperties.m */,
|
||||
B6E6DD1027B1D71700E0A76E /* DiskImage+CoreDataClass.h */,
|
||||
B6E6DD1127B1D71700E0A76E /* DiskImage+CoreDataClass.m */,
|
||||
B6E6DD0F27B1D71700E0A76E /* DiskImage+CoreDataProperties.h */,
|
||||
B6E6DD1227B1D71700E0A76E /* DiskImage+CoreDataProperties.m */,
|
||||
);
|
||||
path = "Core Data";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
@@ -927,7 +816,6 @@
|
||||
B66236B124FDA443006CABD7 /* Embed Frameworks */,
|
||||
B6152B5C25F6F4F800605E6E /* ShellScript */,
|
||||
B66236BB24FDA71D006CABD7 /* CopyFiles */,
|
||||
B611BA3D26796483008597B5 /* ShellScript */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@@ -1004,7 +892,6 @@
|
||||
files = (
|
||||
B6DDECD62505A86E0093587A /* eject-16x16.png in Resources */,
|
||||
B6DDECCC2505A86E0093587A /* eject-16x16@2x.png in Resources */,
|
||||
B6FECAFB28C0093600E143DA /* las3000.plist in Resources */,
|
||||
B6DDECCE2505A86E0093587A /* eject-16x16@3x.png in Resources */,
|
||||
B6DDECD02505A86E0093587A /* eject-hover-16x16.png in Resources */,
|
||||
B6DDECD22505A86E0093587A /* eject-hover-16x16@2x.png in Resources */,
|
||||
@@ -1027,10 +914,8 @@
|
||||
B6D6DE3924FAC8B500661A5F /* Preferences.xib in Resources */,
|
||||
B63C1F0B25B143C50016A611 /* CheatSheet.xib in Resources */,
|
||||
B6109A3324F5F377005CB652 /* apple2eeuk.plist in Resources */,
|
||||
B6E6DCF727B0873200E0A76E /* BookmarkWindow.xib in Resources */,
|
||||
B6374ADB260ECB400045CA16 /* maciix.plist in Resources */,
|
||||
B6109A2424F5F377005CB652 /* las128ex.plist in Resources */,
|
||||
B618B8C42729F6690045C2D8 /* laser128o.plist in Resources */,
|
||||
B646D10B263A5DF30014C586 /* ace1000.plist in Resources */,
|
||||
B63C1BA8250192E600511A71 /* zijini.plist in Resources */,
|
||||
B6109A1D24F5F377005CB652 /* space84.plist in Resources */,
|
||||
@@ -1039,7 +924,6 @@
|
||||
B63C1B9D250192D800511A71 /* cece.plist in Resources */,
|
||||
B6109A3124F5F377005CB652 /* apple1.plist in Resources */,
|
||||
B6374AD3260ECB400045CA16 /* macii.plist in Resources */,
|
||||
B63E57E22755AF2000F8B5D1 /* ace500.plist in Resources */,
|
||||
B6109A3524F5F377005CB652 /* ace100.plist in Resources */,
|
||||
B65085BB25B616AC00354EC9 /* maclc3.plist in Resources */,
|
||||
B6109A3424F5F377005CB652 /* am64.plist in Resources */,
|
||||
@@ -1050,7 +934,6 @@
|
||||
B6109A2524F5F377005CB652 /* laser2c.plist in Resources */,
|
||||
B6109A3D24F5F377005CB652 /* laser128.plist in Resources */,
|
||||
B6109A2824F5F377005CB652 /* apple2ep.plist in Resources */,
|
||||
B6F7B538266FDA5B00624C6B /* MachineView.xib in Resources */,
|
||||
B6109A1924F5F377005CB652 /* apple2ees.plist in Resources */,
|
||||
B6DE32482605482500418375 /* mac512ke.plist in Resources */,
|
||||
B6109A3924F5F377005CB652 /* prav8c.plist in Resources */,
|
||||
@@ -1082,13 +965,11 @@
|
||||
B63C1B9F250192D800511A71 /* ceci.plist in Resources */,
|
||||
B6109A3224F5F377005CB652 /* basis108.plist in Resources */,
|
||||
B6109A4324F5F377005CB652 /* agat7.plist in Resources */,
|
||||
B6ABF47C275986EB00DC3D48 /* ace2200.plist in Resources */,
|
||||
B6DE324E2605482500418375 /* mac512k.plist in Resources */,
|
||||
B6109A2B24F5F377005CB652 /* elppa.plist in Resources */,
|
||||
B63C1B8E25004C6D00511A71 /* mame-data.tgz in Resources */,
|
||||
B6109A3B24F5F377005CB652 /* apple2gsr1.plist in Resources */,
|
||||
B65085BD25B616AC00354EC9 /* maciici.plist in Resources */,
|
||||
B6301BE429107BE800495022 /* maclc520.plist in Resources */,
|
||||
B6374AE3260ECDDD0045CA16 /* maciihmu.plist in Resources */,
|
||||
B6374ADF260ECB400045CA16 /* macse30.plist in Resources */,
|
||||
B63C1F1225B147E10016A611 /* CheatSheet.html in Resources */,
|
||||
@@ -1109,7 +990,6 @@
|
||||
B6374AD7260ECB400045CA16 /* maciivi.plist in Resources */,
|
||||
B6374AD1260ECB400045CA16 /* macclas2.plist in Resources */,
|
||||
B6DE324A2605482500418375 /* macsefd.plist in Resources */,
|
||||
B6301BE729107C1E00495022 /* maccclas.plist in Resources */,
|
||||
B6109A3024F5F377005CB652 /* apple2.plist in Resources */,
|
||||
B6109A2D24F5F377005CB652 /* prav8m.plist in Resources */,
|
||||
);
|
||||
@@ -1144,7 +1024,6 @@
|
||||
B6665C1D265C639A00254939 /* Autocomplete.xib in Resources */,
|
||||
B6E4B5C124FDE2670094A35C /* apple1.plist in Resources */,
|
||||
B6E4B5C224FDE2670094A35C /* ace100.plist in Resources */,
|
||||
B6E6DCF827B0873200E0A76E /* BookmarkWindow.xib in Resources */,
|
||||
B6374AD6260ECB400045CA16 /* maciisi.plist in Resources */,
|
||||
B6DE32472605482500418375 /* macclasc.plist in Resources */,
|
||||
B6E4B5C324FDE2670094A35C /* am64.plist in Resources */,
|
||||
@@ -1170,11 +1049,9 @@
|
||||
B6DE324B2605482500418375 /* macsefd.plist in Resources */,
|
||||
B6E4B5CF24FDE2670094A35C /* apple2eefr.plist in Resources */,
|
||||
B6374AD8260ECB400045CA16 /* maciivi.plist in Resources */,
|
||||
B63E57E32755AF2000F8B5D1 /* ace500.plist in Resources */,
|
||||
B6E4B5D124FDE2670094A35C /* spectred.plist in Resources */,
|
||||
B63C1B9725008A2700511A71 /* DownloadWindow.xib in Resources */,
|
||||
B6E4B5D224FDE2670094A35C /* apple2cp.plist in Resources */,
|
||||
B618B8C52729F6690045C2D8 /* laser128o.plist in Resources */,
|
||||
B6E4B5D324FDE2670094A35C /* MainMenu.xib in Resources */,
|
||||
B6E4B5D424FDE2670094A35C /* prav82.plist in Resources */,
|
||||
B6E4B5D524FDE2670094A35C /* apple2euk.plist in Resources */,
|
||||
@@ -1200,13 +1077,10 @@
|
||||
B6E4B5E024FDE2670094A35C /* agat7.plist in Resources */,
|
||||
B6E4B5E124FDE2670094A35C /* elppa.plist in Resources */,
|
||||
B6E4B5E224FDE2670094A35C /* apple2gsr1.plist in Resources */,
|
||||
B6301BE529107BE800495022 /* maclc520.plist in Resources */,
|
||||
B6E4B5E324FDE2670094A35C /* Defaults.plist in Resources */,
|
||||
B6E4B5E424FDE2670094A35C /* models.plist in Resources */,
|
||||
B6F7B539266FDA5B00624C6B /* MachineView.xib in Resources */,
|
||||
B63C1BA9250192E600511A71 /* zijini.plist in Resources */,
|
||||
B6E4B5E524FDE2670094A35C /* craft2p.plist in Resources */,
|
||||
B6ABF47D275986EB00DC3D48 /* ace2200.plist in Resources */,
|
||||
B6E4B5E624FDE2670094A35C /* uniap2pt.plist in Resources */,
|
||||
B6E4B5E724FDE2670094A35C /* las128e2.plist in Resources */,
|
||||
B63C1B9E250192D800511A71 /* cece.plist in Resources */,
|
||||
@@ -1214,7 +1088,6 @@
|
||||
B6E4B5E924FDE2670094A35C /* uniap2en.plist in Resources */,
|
||||
B6374AD2260ECB400045CA16 /* macclas2.plist in Resources */,
|
||||
B6E4B5EA24FDE2670094A35C /* apple3.plist in Resources */,
|
||||
B6301BE829107C1E00495022 /* maccclas.plist in Resources */,
|
||||
B6E4B5EB24FDE2670094A35C /* apple2ee.plist in Resources */,
|
||||
B6E4B5EC24FDE2670094A35C /* dodo.plist in Resources */,
|
||||
B63C1F1325B147E10016A611 /* CheatSheet.html in Resources */,
|
||||
@@ -1222,7 +1095,6 @@
|
||||
B6E4B5ED24FDE2670094A35C /* Preferences.xib in Resources */,
|
||||
B6374ADE260ECB400045CA16 /* maciivx.plist in Resources */,
|
||||
B6E4B5EF24FDE2670094A35C /* apple2gs.plist in Resources */,
|
||||
B6FECAFC28C0093600E143DA /* las3000.plist in Resources */,
|
||||
B6E4B5F024FDE2670094A35C /* apple2jp.plist in Resources */,
|
||||
B6E4B5F124FDE2670094A35C /* apple2.plist in Resources */,
|
||||
B6E4B5F224FDE2670094A35C /* prav8m.plist in Resources */,
|
||||
@@ -1232,26 +1104,6 @@
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
B611BA3D26796483008597B5 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"$(TARGET_BUILD_DIR)/$(EXECUTABLE_FOLDER_PATH)/mame64",
|
||||
);
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(TARGET_BUILD_DIR)/$(EXECUTABLE_FOLDER_PATH)/mame-link",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n#cd \"$TARGET_BUILD_DIR/$EXECUTABLE_FOLDER_PATH\"\n#if [ ! -e mame-link] ; then ln -s mame64 mame-link ; fi\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
B6152B5C25F6F4F800605E6E /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@@ -1267,7 +1119,7 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "# set the mame rpath and entitlements.\n\ncd \"embedded\"\necho perl install_name_tool.pl --verbose mame64 \"@executable_path/../Frameworks\"\nperl install_name_tool.pl --verbose mame64 \"@executable_path/../Frameworks\"\n\necho /usr/bin/codesign --sign - --deep --force --options=runtime --entitlements mame64.entitlements --timestamp mame64\n/usr/bin/codesign --sign - --deep --force --options=runtime --entitlements mame64.entitlements --timestamp mame64\n\n";
|
||||
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\ncd \"embedded\"\necho perl install_name_tool.pl --verbose mame64 \"@executable_path/../Frameworks\"\nperl install_name_tool.pl --verbose mame64 \"@executable_path/../Frameworks\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
@@ -1295,32 +1147,25 @@
|
||||
files = (
|
||||
B608E17F2502FE0C00D53465 /* TransparentScroller.m in Sources */,
|
||||
B6E9A18025088B1B005E7525 /* SlotViewController.m in Sources */,
|
||||
B6E6DD1527B1D71700E0A76E /* DiskImage+CoreDataProperties.m in Sources */,
|
||||
B6A1A1942528EB1700DB0FD7 /* Menu.m in Sources */,
|
||||
B6E6DD1327B1D71700E0A76E /* DiskImage+CoreDataClass.m in Sources */,
|
||||
B6E6DD0127B0D17C00E0A76E /* Bookmark+CoreDataClass.m in Sources */,
|
||||
B6BA258824E99BEB005FB8FF /* main.m in Sources */,
|
||||
B63C1B8B24FF4BF700511A71 /* Ample.m in Sources */,
|
||||
B6E6DCFB27B0A09300E0A76E /* BookmarkWindowController.m in Sources */,
|
||||
B6B9EA662506A5550080E70D /* EjectButton.m in Sources */,
|
||||
B6152B5A25F5B57E00605E6E /* Media.m in Sources */,
|
||||
B6152B5625F4549F00605E6E /* Slot.m in Sources */,
|
||||
B6D6DE4124FADFAC00661A5F /* LaunchWindowController.m in Sources */,
|
||||
B6665C14265A0E3E00254939 /* AutocompleteControl.m in Sources */,
|
||||
B64E15A924EA1D5300E8AD3D /* MachineViewController.m in Sources */,
|
||||
B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */,
|
||||
B60A6E1424EE0AE2004B7EEF /* FlippedView.m in Sources */,
|
||||
B68A899026BE18E000B2C8C6 /* MidiManager.m in Sources */,
|
||||
B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */,
|
||||
B6004DF024FB05D600D38596 /* LogWindowController.m in Sources */,
|
||||
B6E6DD0327B0D17C00E0A76E /* Bookmark+CoreDataProperties.m in Sources */,
|
||||
B63005332666D6940014C381 /* BookmarkManager.m in Sources */,
|
||||
B66236A924FD9A34006CABD7 /* PreferencesWindowController.m in Sources */,
|
||||
B63C1F0F25B1447C0016A611 /* CheatSheetWindowController.m in Sources */,
|
||||
B64AF1F2250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */,
|
||||
B6F7B53C267017A200624C6B /* NewMachineViewController.m in Sources */,
|
||||
B64AF1F6250ED5E400A09B9B /* TableCellView.m in Sources */,
|
||||
B66D0FE72611386C000902F1 /* SoftwareList.m in Sources */,
|
||||
B6E6DCEB27AEE15F00E0A76E /* Ample.xcdatamodeld in Sources */,
|
||||
B63C1B9425008A2700511A71 /* DownloadWindowController.m in Sources */,
|
||||
B64AF1FA250EF6A500A09B9B /* Transformers.m in Sources */,
|
||||
);
|
||||
@@ -1330,33 +1175,25 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B68A899126BE18E000B2C8C6 /* MidiManager.m in Sources */,
|
||||
B608E1802502FE0C00D53465 /* TransparentScroller.m in Sources */,
|
||||
B64AF1FB250EF6A500A09B9B /* Transformers.m in Sources */,
|
||||
B6E4B5B024FDE2670094A35C /* main.m in Sources */,
|
||||
B63C1F1025B1447C0016A611 /* CheatSheetWindowController.m in Sources */,
|
||||
B6E6DD1427B1D71700E0A76E /* DiskImage+CoreDataClass.m in Sources */,
|
||||
B63C1B8C24FF4BF700511A71 /* Ample.m in Sources */,
|
||||
B64AF1F3250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */,
|
||||
B6E6DCEC27AEE15F00E0A76E /* Ample.xcdatamodeld in Sources */,
|
||||
B6B9EA672506A5550080E70D /* EjectButton.m in Sources */,
|
||||
B6A1A1952528EB1700DB0FD7 /* Menu.m in Sources */,
|
||||
B6152B5B25F5B57E00605E6E /* Media.m in Sources */,
|
||||
B6E4B5B124FDE2670094A35C /* LaunchWindowController.m in Sources */,
|
||||
B6152B5725F4549F00605E6E /* Slot.m in Sources */,
|
||||
B6E4B5B224FDE2670094A35C /* MachineViewController.m in Sources */,
|
||||
B6E4B5B324FDE2670094A35C /* MediaViewController.m in Sources */,
|
||||
B6E6DCFC27B0A09300E0A76E /* BookmarkWindowController.m in Sources */,
|
||||
B6E6DD1627B1D71700E0A76E /* DiskImage+CoreDataProperties.m in Sources */,
|
||||
B64AF1F7250ED5E400A09B9B /* TableCellView.m in Sources */,
|
||||
B6E4B5B424FDE2670094A35C /* FlippedView.m in Sources */,
|
||||
B6E6DD0227B0D17C00E0A76E /* Bookmark+CoreDataClass.m in Sources */,
|
||||
B6E6DD0427B0D17C00E0A76E /* Bookmark+CoreDataProperties.m in Sources */,
|
||||
B63005342666D6940014C381 /* BookmarkManager.m in Sources */,
|
||||
B615A9A026640A70001FBF99 /* SlotViewController.m in Sources */,
|
||||
B6665C15265A0E3E00254939 /* AutocompleteControl.m in Sources */,
|
||||
B6E4B5B524FDE2670094A35C /* AppDelegate.m in Sources */,
|
||||
B6F7B53D267017A200624C6B /* NewMachineViewController.m in Sources */,
|
||||
B635C09F26784D4700B23BFD /* AmpleLite.m in Sources */,
|
||||
B66D0FE82611386C000902F1 /* SoftwareList.m in Sources */,
|
||||
B6E4B5B624FDE2670094A35C /* LogWindowController.m in Sources */,
|
||||
B6E4B5B724FDE2670094A35C /* PreferencesWindowController.m in Sources */,
|
||||
@@ -1431,14 +1268,6 @@
|
||||
name = LaunchWindow.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B6E6DCF527B0873100E0A76E /* BookmarkWindow.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
B6E6DCF627B0873100E0A76E /* Base */,
|
||||
);
|
||||
name = BookmarkWindow.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B6E9A18125088B36005E7525 /* SlotView.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
@@ -1447,14 +1276,6 @@
|
||||
name = SlotView.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B6F7B536266FDA5B00624C6B /* MachineView.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
B6F7B537266FDA5B00624C6B /* Base */,
|
||||
);
|
||||
name = MachineView.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
@@ -1462,9 +1283,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = NO;
|
||||
CODE_SIGN_ENTITLEMENTS = pty_shell/pty_shell.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
INSTALL_PATH = "";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
@@ -1474,9 +1293,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = NO;
|
||||
CODE_SIGN_ENTITLEMENTS = pty_shell/pty_shell.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
INSTALL_PATH = "";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
@@ -1485,9 +1302,7 @@
|
||||
B6841BD5251EC913006A5C39 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_ENTITLEMENTS = vmnet_helper/vmnet_helper.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
INSTALL_PATH = "";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
@@ -1496,9 +1311,7 @@
|
||||
B6841BD6251EC913006A5C39 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_ENTITLEMENTS = vmnet_helper/vmnet_helper.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
INSTALL_PATH = "";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
@@ -1620,18 +1433,14 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 39;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/embedded",
|
||||
);
|
||||
CURRENT_PROJECT_VERSION = 14;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = Ample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = "0.251-u2";
|
||||
MARKETING_VERSION = 0.232;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.ksherlock.ample;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
@@ -1644,18 +1453,14 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 39;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/embedded",
|
||||
);
|
||||
CURRENT_PROJECT_VERSION = 14;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = Ample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = "0.251-u2";
|
||||
MARKETING_VERSION = 0.232;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.ksherlock.ample;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
@@ -1746,19 +1551,6 @@
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCVersionGroup section */
|
||||
B6E6DCE927AEE15F00E0A76E /* Ample.xcdatamodeld */ = {
|
||||
isa = XCVersionGroup;
|
||||
children = (
|
||||
B6E6DCEA27AEE15F00E0A76E /* Ample.xcdatamodel */,
|
||||
);
|
||||
currentVersion = B6E6DCEA27AEE15F00E0A76E /* Ample.xcdatamodel */;
|
||||
path = Ample.xcdatamodeld;
|
||||
sourceTree = "<group>";
|
||||
versionGroupType = wrapper.xcdatamodel;
|
||||
};
|
||||
/* End XCVersionGroup section */
|
||||
};
|
||||
rootObject = B6BA257324E99BE9005FB8FF /* Project object */;
|
||||
}
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<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>
|
||||
|
||||
@@ -40,9 +40,6 @@ extern NSString *kDownloadExtension;
|
||||
extern NSString *kDefaultDownloadURL;
|
||||
extern NSString *kDefaultDownloadExtension;
|
||||
|
||||
extern NSString *kNotificationDiskImageAdded;
|
||||
extern NSString *kNotificationDiskImageMagicRoute;
|
||||
extern NSString *kNotificationBookmarkMagicRoute;
|
||||
|
||||
@protocol Bookmark <NSObject>
|
||||
-(BOOL)loadBookmark: (NSDictionary *)bookmark;
|
||||
|
||||
+1
-5
@@ -42,7 +42,7 @@ NSURL *MameURL(void) {
|
||||
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMamePath];
|
||||
if ([path length]) return [NSURL fileURLWithPath: path];
|
||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
||||
}
|
||||
|
||||
return [bundle URLForAuxiliaryExecutable: @"mame64"];
|
||||
@@ -135,7 +135,3 @@ NSString *kDefaultDownloadExtension = @"DefaultDownloadExtension";
|
||||
|
||||
NSString *kDownloadURL = @"DownloadURL";
|
||||
NSString *kDownloadExtension = @"DownloadExtension";
|
||||
|
||||
NSString *kNotificationDiskImageAdded = @"Disk Image Added";
|
||||
NSString *kNotificationDiskImageMagicRoute = @"Disk Image Magic Route";
|
||||
NSString *kNotificationBookmarkMagicRoute = @"Bookmark Magic Route";
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
//
|
||||
// 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
|
||||
+1
-1
@@ -11,6 +11,6 @@
|
||||
@interface AppDelegate : NSObject <NSApplicationDelegate>
|
||||
|
||||
- (IBAction)displayPreferences:(id)sender;
|
||||
- (IBAction)manageBookmarks: (id)sender;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
+9
-85
@@ -12,8 +12,6 @@
|
||||
#import "DownloadWindowController.h"
|
||||
#import "DiskImagesWindowController.h"
|
||||
#import "CheatSheetWindowController.h"
|
||||
#import "BookmarkWindowController.h"
|
||||
|
||||
#import "Transformers.h"
|
||||
#import "BookmarkManager.h"
|
||||
|
||||
@@ -30,8 +28,6 @@
|
||||
NSWindowController *_downloader;
|
||||
NSWindowController *_diskImages;
|
||||
NSWindowController *_cheatSheet;
|
||||
NSWindowController *_bookmarks;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +41,9 @@
|
||||
|
||||
RegisterTransformers();
|
||||
|
||||
//BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||
[bm loadBookmarks];
|
||||
[bm updateMenu];
|
||||
|
||||
path = [bundle pathForResource: @"Defaults" ofType: @"plist"];
|
||||
dict = [NSDictionary dictionaryWithContentsOfFile: path];
|
||||
@@ -55,17 +53,17 @@
|
||||
[[NSUserDefaults standardUserDefaults] registerDefaults: dict];
|
||||
}
|
||||
|
||||
|
||||
|
||||
_diskImages = [DiskImagesWindowController sharedInstance]; //[DiskImagesWindowController new];
|
||||
|
||||
if ([self installMameComponents]) {
|
||||
|
||||
[self displayLaunchWindow];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
-(void)displayLaunchWindow {
|
||||
|
||||
if (!_launcher) {
|
||||
@@ -115,11 +113,11 @@
|
||||
|
||||
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
|
||||
[task setTerminationHandler: ^(NSTask *task){
|
||||
|
||||
int st = [task terminationStatus];
|
||||
// delay so the install window is visible, I think
|
||||
|
||||
dispatch_after(when, dispatch_get_main_queue(), ^{
|
||||
|
||||
int st = [task terminationStatus];
|
||||
|
||||
if (st) {
|
||||
NSAlert *alert = [NSAlert new];
|
||||
[alert setMessageText: @"An error occurred extracting MAME components"];
|
||||
@@ -148,7 +146,6 @@
|
||||
|
||||
- (void)applicationWillTerminate:(NSNotification *)aNotification {
|
||||
// Insert code here to tear down your application
|
||||
|
||||
}
|
||||
|
||||
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
|
||||
@@ -229,79 +226,6 @@
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)manageBookmarks: (id)sender {
|
||||
|
||||
if (!_bookmarks) {
|
||||
_bookmarks = [BookmarkWindowController new];
|
||||
}
|
||||
[_bookmarks showWindow: sender];
|
||||
}
|
||||
|
||||
|
||||
-(IBAction)installMameComponents:(id)sender {
|
||||
|
||||
|
||||
/* install the mame data components. */
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSURL *sd = SupportDirectory();
|
||||
|
||||
NSURL *ample_url = [sd URLByAppendingPathComponent: @"Ample.plist"];
|
||||
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithContentsOfURL: ample_url];
|
||||
|
||||
//NSDate *oldDate = [d objectForKey: kMameComponentsDate];
|
||||
NSDate *newDate = [defaults objectForKey: kMameComponentsDate];
|
||||
if (![newDate isKindOfClass: [NSDate class]])
|
||||
newDate = nil;
|
||||
|
||||
NSString *path = [bundle pathForResource: @"mame-data" ofType: @"tgz"];
|
||||
if (!path) return; // Ample Lite?
|
||||
|
||||
|
||||
NSWindow *win = _installWindow;
|
||||
[win makeKeyAndOrderFront: nil];
|
||||
NSTask *task = [NSTask new];
|
||||
NSArray *argv = @[
|
||||
@"xfz",
|
||||
path
|
||||
];
|
||||
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];
|
||||
|
||||
|
||||
//dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
|
||||
[task setTerminationHandler: ^(NSTask *task){
|
||||
|
||||
int st = [task terminationStatus];
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
|
||||
if (st) {
|
||||
NSAlert *alert = [NSAlert new];
|
||||
[alert setMessageText: @"An error occurred extracting MAME components"];
|
||||
[alert runModal];
|
||||
[win close];
|
||||
return;
|
||||
}
|
||||
|
||||
if (d) {
|
||||
[d setObject: newDate forKey: kMameComponentsDate];
|
||||
[d writeToURL: ample_url atomically: YES];
|
||||
} else {
|
||||
[@{ kMameComponentsDate: newDate } writeToURL: ample_url atomically: YES];
|
||||
}
|
||||
[win close];
|
||||
// need to reload the software list data.
|
||||
});
|
||||
|
||||
}];
|
||||
[task launch];
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
+11
-70
@@ -11,7 +11,7 @@
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
Todo --
|
||||
- when there is a value, can filter the list by only including header items and the selected value
|
||||
- draw inactive menu items
|
||||
@@ -21,7 +21,7 @@ Todo --
|
||||
- 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?
|
||||
*/
|
||||
|
||||
@@ -32,10 +32,6 @@ Todo --
|
||||
@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
|
||||
|
||||
|
||||
@@ -101,36 +97,26 @@ Todo --
|
||||
|
||||
-(void)setStringValue:(NSString *)stringValue {
|
||||
[super setStringValue: stringValue ? stringValue : @""];
|
||||
if (_value && [[_value menuTitle] isEqualToString: stringValue] == NO) {
|
||||
// post change notification?
|
||||
if (_value && [[_value menuTitle] isEqualToString: stringValue] == NO)
|
||||
_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];
|
||||
NSArray *array = [_autocompleteDelegate autocomplete: self completionsForItem: _value];
|
||||
[_menuView setItems: array];
|
||||
}
|
||||
[self fixTextColor: NO];
|
||||
}
|
||||
|
||||
-(BOOL)valid {
|
||||
@@ -391,23 +377,6 @@ Todo --
|
||||
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;
|
||||
}
|
||||
@@ -499,24 +468,14 @@ static CGFloat HeightForItems(NSUInteger count) {
|
||||
_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;
|
||||
-(void)setItems:(NSArray *)items {
|
||||
if (_items == items) return;
|
||||
_items = [items copy];
|
||||
_index = -1;
|
||||
_count = [items count];
|
||||
_value = value;
|
||||
|
||||
|
||||
if (!_items) {
|
||||
_value = nil;
|
||||
return;
|
||||
}
|
||||
if (!_items) return;
|
||||
|
||||
// also check enabled status....
|
||||
if (_value) {
|
||||
@@ -543,6 +502,8 @@ static CGFloat HeightForItems(NSUInteger count) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
NSInteger displayCount = MIN(_count, MAX_DISPLAY_ITEMS);
|
||||
CGFloat newHeight = HeightForItems(displayCount) + 8 ; // 4px top/bottom
|
||||
NSWindow *window = [self window];
|
||||
@@ -578,14 +539,6 @@ static CGFloat HeightForItems(NSUInteger count) {
|
||||
//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);
|
||||
@@ -683,18 +636,6 @@ enum {
|
||||
[_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];
|
||||
|
||||
@@ -1,223 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="BookmarkWindowController">
|
||||
<connections>
|
||||
<outlet property="arrayController" destination="7gA-MI-adT" id="XJ0-qj-ho5"/>
|
||||
<outlet property="bookmarkManager" destination="Ryd-Nr-sPf" id="LM4-IP-ehb"/>
|
||||
<outlet property="tableView" destination="mkQ-pQ-kXu" id="jqC-GF-vrE"/>
|
||||
<outlet property="window" destination="QvC-M9-y7g" id="ovK-qY-XrZ"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Bookmarks" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="400" height="450"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="450"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cgh-jG-i97">
|
||||
<rect key="frame" x="-1" y="-1" width="402" height="452"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" id="xDr-v4-sVR">
|
||||
<rect key="frame" x="1" y="1" width="400" height="450"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="firstColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" headerView="hmS-CB-Huq" viewBased="YES" id="mkQ-pQ-kXu">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="425"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="232" minWidth="40" maxWidth="1000" id="U9x-dw-Kd3">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Name">
|
||||
<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="jIY-mU-1gw">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<sortDescriptor key="sortDescriptorPrototype" selector="caseInsensitiveCompare:" sortKey="name"/>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="R8h-Wj-cHA">
|
||||
<rect key="frame" x="1" y="1" width="237" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cIh-ya-lB0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="237" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" title="Table View Cell" id="a7b-vf-Kzd">
|
||||
<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="R8h-Wj-cHA" name="value" keyPath="objectValue.name" id="UWc-85-Ghw">
|
||||
<dictionary key="options">
|
||||
<bool key="NSValidatesImmediately" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="cIh-ya-lB0" id="DMK-Kc-RpK"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
<tableColumn editable="NO" width="100" minWidth="100" maxWidth="100" id="fvh-YG-X9R">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Machine">
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="waa-dh-M0V">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<sortDescriptor key="sortDescriptorPrototype" selector="compare:" sortKey="machine"/>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="LUd-BZ-Kpw">
|
||||
<rect key="frame" x="241" y="1" width="100" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4Qd-Zj-XZi">
|
||||
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="ztJ-V1-N1t">
|
||||
<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="LUd-BZ-Kpw" name="value" keyPath="objectValue.machine" id="IYK-LP-fHo"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="4Qd-Zj-XZi" id="u3u-3q-Vc2"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
<tableColumn editable="NO" width="50" minWidth="50" maxWidth="50" id="rmr-1r-2Cb">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Default">
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="zuw-8H-5ck">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<sortDescriptor key="sortDescriptorPrototype" selector="compare:" sortKey="automatic"/>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="f3C-qX-bVY">
|
||||
<rect key="frame" x="344" y="1" width="54" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="LzD-ps-EdD">
|
||||
<rect key="frame" x="19" y="1" width="16" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="kH7-IH-D1y"/>
|
||||
<connections>
|
||||
<binding destination="f3C-qX-bVY" name="hidden" keyPath="objectValue.automatic" id="izX-1f-EU8">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="imageView" destination="LzD-ps-EdD" id="hef-CI-Ly8"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<action trigger="doubleAction" selector="doubleClick:" target="-2" id="VaT-3X-cCf"/>
|
||||
<binding destination="7gA-MI-adT" name="content" keyPath="arrangedObjects" id="5So-FR-r94"/>
|
||||
<outlet property="dataSource" destination="-2" id="kso-yU-XdI"/>
|
||||
<outlet property="delegate" destination="-2" id="Lyf-Wr-8w0"/>
|
||||
<outlet property="menu" destination="cH2-L7-ScC" id="3MS-Tc-P04"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="O1o-6N-F5z">
|
||||
<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="3n8-lN-RGL">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" wantsLayer="YES" id="hmS-CB-Huq">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="4OM-KB-CAh"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-72" y="91"/>
|
||||
</window>
|
||||
<arrayController mode="entity" entityName="Bookmark" automaticallyPreparesContent="YES" preservesSelection="NO" selectsInsertedObjects="NO" avoidsEmptySelection="NO" clearsFilterPredicateOnInsertion="NO" id="7gA-MI-adT">
|
||||
<connections>
|
||||
<binding destination="Ryd-Nr-sPf" name="managedObjectContext" keyPath="managedObjectContext" id="hMi-JG-LQC"/>
|
||||
<binding destination="-2" name="selectionIndexes" keyPath="tableView.selectedRowIndexes" id="dyb-Wv-Duo"/>
|
||||
<binding destination="-2" name="sortDescriptors" keyPath="tableView.sortDescriptors" previousBinding="dyb-Wv-Duo" id="fkc-Yv-ZLN"/>
|
||||
</connections>
|
||||
</arrayController>
|
||||
<customObject id="Ryd-Nr-sPf" customClass="BookmarkManagerProxy"/>
|
||||
<menu id="cH2-L7-ScC">
|
||||
<items>
|
||||
<menuItem title="Set Default" id="JGR-HC-oCO">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="setDefault:" target="-2" id="QQK-aI-l2p"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Clear Default" id="ulz-3z-Pgl">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="clearDefault:" target="-2" id="mIc-UM-kj0"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Delete" id="B7V-fY-Cbe">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="deleteBookmark:" target="-2" id="zQl-vg-Eg4"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="raV-YO-2UW"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="355" y="-28"/>
|
||||
</menu>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSStatusAvailable" width="16" height="16"/>
|
||||
</resources>
|
||||
</document>
|
||||
@@ -33,15 +33,6 @@ 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}}
|
||||
@@ -51,6 +42,6 @@ Icon}}
|
||||
|
||||
\f1\b0\fs28 \cf0 \
|
||||
\pard\pardeftab720\qj\partightenfactor0
|
||||
\cf4 R.C. Steadman, 1921-06-01.\
|
||||
\cf4 \cb3 R.C. Steadman, 6-1-\'9221.\
|
||||
\
|
||||
U.S. Department of Agriculture Pomological Watercolor Collection. Rare and Special Collections, National Agricultural Library, Beltsville, MD 20705}
|
||||
+122
-162
@@ -1,24 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||
<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="DiskImagesWindowController">
|
||||
<connections>
|
||||
<outlet property="arrayController" destination="YmL-8S-msS" id="Pva-sz-XFI"/>
|
||||
<outlet property="tableView" destination="cqO-ig-A9t" id="hbI-ho-WYj"/>
|
||||
<outlet property="window" destination="AtY-lA-KIp" id="aaq-cR-kq8"/>
|
||||
<outlet property="arrayController" destination="vmp-9h-Z5R" id="WYF-Xq-BnN"/>
|
||||
<outlet property="tableView" destination="J5l-1d-030" id="3hU-ho-1ag"/>
|
||||
<outlet property="window" destination="R7r-B9-Bw0" id="hDE-Qa-m4g"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="stE-9g-lJ2" customClass="BookmarkManagerProxy"/>
|
||||
<arrayController mode="entity" entityName="DiskImage" automaticallyPreparesContent="YES" avoidsEmptySelection="NO" automaticallyRearrangesObjects="YES" id="YmL-8S-msS">
|
||||
<window title="Recent Disk Images" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="RecentDiskImagesWindow" animationBehavior="default" titlebarAppearsTransparent="YES" id="R7r-B9-Bw0" customClass="NSPanel">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" rightStrut="YES"/>
|
||||
<rect key="contentRect" x="200" y="172" width="300" height="400"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" focusRingType="none" id="Kkg-Tp-4m1">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="400"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<scrollView focusRingType="none" fixedFrame="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" findBarPosition="belowContent" translatesAutoresizingMaskIntoConstraints="NO" id="ivr-XT-BPS">
|
||||
<rect key="frame" x="-1" y="-1" width="302" height="402"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" ambiguous="YES" copiesOnScroll="NO" id="1jn-uc-06s">
|
||||
<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="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="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="282" minWidth="40" maxWidth="1000" id="1rF-M3-pYV">
|
||||
<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="erY-fh-OHK">
|
||||
<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 id="AJH-gH-E8G">
|
||||
<rect key="frame" x="1" y="1" width="282" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="esO-OR-AcY">
|
||||
<rect key="frame" x="6" y="5" width="196" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="Image Name.2mg" id="xgc-u7-sFX">
|
||||
<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="AJH-gH-E8G" name="value" keyPath="objectValue.path" id="S0h-hl-OPM">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">FilePathTransformer</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="AJH-gH-E8G" name="toolTip" keyPath="objectValue.path" id="gXq-2p-MpM"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Wzl-mV-Pmp">
|
||||
<rect key="frame" x="206" y="3" width="75" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" alignment="right" title="32MB" id="QYB-us-igD">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="AJH-gH-E8G" name="value" keyPath="objectValue.size" id="omG-8X-flx">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">FileSizeTransformer</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="esO-OR-AcY" id="9mX-Yt-vpg"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
<connections>
|
||||
<binding destination="vmp-9h-Z5R" name="value" keyPath="arrangedObjects.selection" id="32X-Ez-K7S"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<binding destination="vmp-9h-Z5R" name="content" keyPath="arrangedObjects" id="GHn-tz-ash"/>
|
||||
<outlet property="dataSource" destination="-2" id="PRV-Rt-UuC"/>
|
||||
<outlet property="delegate" destination="-2" id="WuV-c9-o5I"/>
|
||||
<outlet property="menu" destination="bCS-1z-UOZ" id="UCb-2v-WrM"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<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" 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>
|
||||
</view>
|
||||
<connections>
|
||||
<binding destination="stE-9g-lJ2" name="managedObjectContext" keyPath="managedObjectContext" id="GyD-kH-DBa"/>
|
||||
<outlet property="delegate" destination="-2" id="1Hn-2t-Vzj"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-188" y="143"/>
|
||||
</window>
|
||||
<arrayController id="vmp-9h-Z5R">
|
||||
<connections>
|
||||
<binding destination="-2" name="contentArray" keyPath="self.content" id="UTv-za-ry7"/>
|
||||
</connections>
|
||||
</arrayController>
|
||||
<menu id="bCS-1z-UOZ">
|
||||
@@ -41,159 +155,5 @@
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-667" y="170"/>
|
||||
</menu>
|
||||
<window title="Recent Disk Images" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="RecentDiskImagesWindow" animationBehavior="default" id="AtY-lA-KIp">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="283" y="305" width="408" height="270"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||
<view key="contentView" id="zHI-2R-bOe">
|
||||
<rect key="frame" x="0.0" y="0.0" width="408" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="a3G-Wf-K8I">
|
||||
<rect key="frame" x="-1" y="-1" width="410" height="272"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" id="SFr-s6-6di">
|
||||
<rect key="frame" x="1" y="1" width="408" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" headerView="iwP-JL-O3g" viewBased="YES" id="cqO-ig-A9t">
|
||||
<rect key="frame" x="0.0" y="0.0" width="408" height="245"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="300" minWidth="40" maxWidth="1000" id="k9E-Si-iTY">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Name">
|
||||
<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="trJ-af-d0b">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<sortDescriptor key="sortDescriptorPrototype" selector="caseInsensitiveCompare:" sortKey="name"/>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="2Ic-UI-Je3">
|
||||
<rect key="frame" x="1" y="1" width="305" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gkM-KB-x76">
|
||||
<rect key="frame" x="0.0" y="0.0" width="305" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="PitchDark.2mg" id="Wcg-zo-CeN">
|
||||
<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="2Ic-UI-Je3" name="value" keyPath="objectValue.name" id="FAu-HR-0jF"/>
|
||||
<binding destination="2Ic-UI-Je3" name="toolTip" keyPath="objectValue.path" id="0MM-sv-mET"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="gkM-KB-x76" id="tpG-TS-sXI"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
<tableColumn width="93" minWidth="40" maxWidth="1000" id="0aJ-xJ-YSS">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Size">
|
||||
<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="jRd-9Y-U6W">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<sortDescriptor key="sortDescriptorPrototype" selector="compare:" sortKey="size"/>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="UW9-AF-U9F">
|
||||
<rect key="frame" x="309" y="1" width="97" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6Ry-Zn-euh">
|
||||
<rect key="frame" x="0.0" y="0.0" width="97" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="32 MB" id="fXp-OZ-Qcu">
|
||||
<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="UW9-AF-U9F" name="value" keyPath="objectValue.size" id="Hca-7L-QN7">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">FileSizeTransformer</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="6Ry-Zn-euh" id="vUm-0h-5qV"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<action trigger="doubleAction" selector="doubleClick:" target="-2" id="wdp-Ek-Olo"/>
|
||||
<binding destination="YmL-8S-msS" name="content" keyPath="arrangedObjects" id="v56-YR-Qve"/>
|
||||
<binding destination="YmL-8S-msS" name="sortDescriptors" keyPath="sortDescriptors" previousBinding="v56-YR-Qve" id="BGa-9c-RdD"/>
|
||||
<outlet property="dataSource" destination="-2" id="gCn-sa-fuX"/>
|
||||
<outlet property="delegate" destination="-2" id="VHT-aS-4iS"/>
|
||||
<outlet property="menu" destination="bCS-1z-UOZ" id="a2u-hd-hPS"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Z7O-AK-X5q">
|
||||
<rect key="frame" x="1" y="119" width="223" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="OLa-ra-vIN">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" id="iwP-JL-O3g">
|
||||
<rect key="frame" x="0.0" y="0.0" width="408" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
</view>
|
||||
<toolbar key="toolbar" implicitIdentifier="D9701924-6955-47B8-A2FF-DBD466AAEB92" autosavesConfiguration="NO" allowsUserCustomization="NO" displayMode="iconOnly" sizeMode="regular" id="Gp6-Kl-lr2">
|
||||
<allowedToolbarItems>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="lBE-ee-rCy"/>
|
||||
<toolbarItem implicitItemIdentifier="C346E56F-4480-4D8A-8485-33A3A51D7B78" label="" paletteLabel="Filter" sizingBehavior="auto" id="DsU-uu-UmZ">
|
||||
<nil key="toolTip"/>
|
||||
<searchField key="view" wantsLayer="YES" verticalHuggingPriority="750" textCompletion="NO" id="qHV-IA-ysc">
|
||||
<rect key="frame" x="0.0" y="14" width="96" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" continuous="YES" borderStyle="bezel" placeholderString="Filter" usesSingleLineMode="YES" bezelStyle="round" id="BWo-eC-ahz">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</searchFieldCell>
|
||||
<connections>
|
||||
<action selector="filter:" target="-2" id="KhW-DS-b8s"/>
|
||||
</connections>
|
||||
</searchField>
|
||||
</toolbarItem>
|
||||
</allowedToolbarItems>
|
||||
<defaultToolbarItems>
|
||||
<toolbarItem reference="lBE-ee-rCy"/>
|
||||
<toolbarItem reference="lBE-ee-rCy"/>
|
||||
<toolbarItem reference="DsU-uu-UmZ"/>
|
||||
</defaultToolbarItems>
|
||||
</toolbar>
|
||||
<point key="canvasLocation" x="-196" y="513"/>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
||||
|
||||
@@ -8,11 +8,8 @@
|
||||
<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>
|
||||
@@ -21,29 +18,45 @@
|
||||
<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="454" height="575"/>
|
||||
<rect key="contentRect" x="196" y="240" width="400" height="575"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<value key="minSize" type="size" width="454" height="300"/>
|
||||
<value key="minSize" type="size" width="300" height="300"/>
|
||||
<view key="contentView" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="454" height="575"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="575"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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="456" height="446"/>
|
||||
<rect key="frame" x="0.0" y="130" width="402" 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="454" height="444"/>
|
||||
<rect key="frame" x="1" y="1" width="400" height="444"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<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"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" 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="451" minWidth="40" maxWidth="1000" id="5jP-bY-fhI">
|
||||
<tableColumn width="397" 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"/>
|
||||
@@ -56,68 +69,63 @@
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView focusRingType="none" id="onK-6l-2iV">
|
||||
<rect key="frame" x="1" y="1" width="451" height="49"/>
|
||||
<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"/>
|
||||
<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="41" y="28" width="409" height="17"/>
|
||||
<rect key="frame" x="25" y="28" width="371" 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"/>
|
||||
<binding destination="onK-6l-2iV" name="toolTip" keyPath="objectValue.value" id="rUb-Jb-KbT"/>
|
||||
</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"/>
|
||||
</progressIndicator>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hfu-hP-QAH">
|
||||
<rect key="frame" x="41" y="3" width="409" height="17"/>
|
||||
<rect key="frame" x="25" y="3" width="371" 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>
|
||||
<progressIndicator wantsLayer="YES" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="jBN-UJ-tWi">
|
||||
<rect key="frame" x="3" y="9" width="32" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="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>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="A44-us-TEl" id="ude-er-Gm4"/>
|
||||
<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"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
<connections>
|
||||
<binding destination="jhO-4z-Qwt" name="value" keyPath="arrangedObjects.selection" id="KQP-Xo-Fbf"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<binding destination="jhO-4z-Qwt" name="content" keyPath="arrangedObjects" id="2av-gV-V4K"/>
|
||||
<outlet property="dataSource" destination="-2" id="Ghf-k9-bRK"/>
|
||||
<outlet property="delegate" destination="-2" id="rpR-0W-4Nu"/>
|
||||
<outlet property="menu" destination="RJM-21-hjO" id="xpL-0n-1jm"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
@@ -134,7 +142,7 @@
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sJz-So-jbA">
|
||||
<rect key="frame" x="51" y="101" width="383" height="21"/>
|
||||
<rect key="frame" x="51" y="101" width="329" 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"/>
|
||||
@@ -146,9 +154,9 @@
|
||||
</connections>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fhd-vr-Q2G">
|
||||
<rect key="frame" x="208" y="13" width="150" height="32"/>
|
||||
<rect key="frame" x="192" y="18" width="124" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<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">
|
||||
<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">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
@@ -180,13 +188,13 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<box verticalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="AuM-pD-Gul">
|
||||
<rect key="frame" x="12" y="52" width="422" height="5"/>
|
||||
<rect key="frame" x="12" y="52" width="368" 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="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">
|
||||
<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">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
@@ -196,7 +204,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" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="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"/>
|
||||
@@ -229,66 +237,12 @@
|
||||
</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="59" y="119.5"/>
|
||||
<point key="canvasLocation" x="32" y="119.5"/>
|
||||
</window>
|
||||
<menu id="RJM-21-hjO">
|
||||
<items>
|
||||
@@ -298,12 +252,6 @@
|
||||
<action selector="showInFinder:" target="-2" id="ltL-yL-7EP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Move to Trash" id="x1Q-OF-5hM">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="moveToTrash:" target="-2" id="swr-yf-hA2"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Download" tag="2" id="ree-Zg-jYB">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
@@ -322,7 +270,6 @@
|
||||
</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>
|
||||
|
||||
@@ -9,10 +9,9 @@
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="LaunchWindowController">
|
||||
<connections>
|
||||
<outlet property="addBookmarkWindow" destination="yIt-hP-HBq" id="Qhx-WV-cg4"/>
|
||||
<outlet property="bookmarkErrorField" destination="RiJ-Xw-sgW" id="6y5-Fo-AnM"/>
|
||||
<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="FSD-3v-Wni" id="tXv-zJ-QO3"/>
|
||||
<outlet property="machineViewController" destination="RgH-d9-xl8" id="DIa-h0-6y2"/>
|
||||
<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"/>
|
||||
@@ -25,19 +24,51 @@
|
||||
<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="1000" height="640"/>
|
||||
<rect key="contentRect" x="335" y="390" width="718" height="795"/>
|
||||
<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="1000" height="640"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="795"/>
|
||||
<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="588.5" 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.5" 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="302" y="105" width="326" height="363"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<rect key="frame" x="20" y="92" width="316" height="363"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<tabView initialItem="zUN-Qs-haG" id="l8R-bg-6Zm">
|
||||
<rect key="frame" x="295" y="466" width="692" height="160"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<rect key="frame" x="13" y="453" width="692" height="160"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<tabViewItems>
|
||||
<tabViewItem label="Video" identifier="" id="zUN-Qs-haG">
|
||||
@@ -238,17 +269,6 @@
|
||||
<binding destination="-2" name="selectedTag" keyPath="self.mameSpeed" id="nFG-yA-KC1"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="knB-Rn-1Cm">
|
||||
<rect key="frame" x="15" y="40" width="67" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Rewind" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Y7b-jN-HCc">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameRewind" id="Hw5-n7-O27"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
@@ -282,7 +302,7 @@
|
||||
<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" usesSingleLineMode="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" 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"/>
|
||||
@@ -299,7 +319,7 @@
|
||||
<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" usesSingleLineMode="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" 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"/>
|
||||
@@ -324,7 +344,7 @@
|
||||
<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" usesSingleLineMode="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" 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"/>
|
||||
@@ -357,64 +377,79 @@
|
||||
<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">
|
||||
<textField toolTip="path or socket.address:port" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Wga-1O-bDR">
|
||||
<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"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="socket.127.0.0.1:23 or /path/to/file" drawsBackground="YES" id="6d8-LZ-wh1">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<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">
|
||||
<binding destination="-2" name="value" keyPath="self.mameBitBanger" id="O76-B6-FhP">
|
||||
<dictionary key="options">
|
||||
<string key="NSNullPlaceholder">socket.127.0.0.1:23 or /path/to/file</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VDW-FX-9az">
|
||||
<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/directory/" drawsBackground="YES" id="ykl-aj-n1L">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<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="self.mameShareDirectory" id="fqw-G0-t5P">
|
||||
<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"/>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="uPk-SB-lIF">
|
||||
<rect key="frame" x="15" y="92" width="71" height="16"/>
|
||||
<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"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Bit Banger:" id="9jA-4x-Abr">
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.mameShareDirectory" id="x3D-ho-u4v"/>
|
||||
</connections>
|
||||
</button>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="upA-x5-LVd">
|
||||
<rect key="frame" x="15" y="61" width="103" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Share Directory:" id="RmQ-pY-o5K">
|
||||
<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>
|
||||
</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="654" y="107" width="326" height="331"/>
|
||||
<rect key="frame" x="382" y="92" 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="1001" height="69"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="eSY-AU-tvi">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1001" height="69"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
||||
<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="1001" height="69"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
||||
<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="1001" height="69"/>
|
||||
<size key="maxSize" width="1001" height="10000000"/>
|
||||
<size key="minSize" width="718" height="51"/>
|
||||
<size key="maxSize" width="718" height="10000000"/>
|
||||
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.commandLine" id="deQ-gK-fgu">
|
||||
@@ -436,8 +471,8 @@
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<searchField wantsLayer="YES" verticalHuggingPriority="750" textCompletion="NO" id="pNl-g4-ZLh" customClass="AutocompleteControl">
|
||||
<rect key="frame" x="654" y="446" width="326" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<rect key="frame" x="382" y="431" width="316" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="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"/>
|
||||
@@ -447,57 +482,13 @@
|
||||
<action selector="softwareChanged:" target="-2" id="879-da-UEc"/>
|
||||
</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>
|
||||
<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"/>
|
||||
<point key="canvasLocation" x="769" y="120.5"/>
|
||||
</window>
|
||||
<viewController title="Media View" nibName="MediaView" id="t7c-zy-czN" customClass="MediaViewController"/>
|
||||
<viewController title="Slot View" nibName="SlotView" id="lyS-mc-3Tf" customClass="SlotViewController"/>
|
||||
<customObject id="RgH-d9-xl8" customClass="MachineViewController"/>
|
||||
<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"/>
|
||||
@@ -550,10 +541,10 @@ Gw
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fAl-Vn-x1w">
|
||||
<rect key="frame" x="20" y="49" width="422" height="21"/>
|
||||
<rect key="frame" x="20" y="49" width="422" height="23"/>
|
||||
<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"/>
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@@ -566,93 +557,10 @@ Gw
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RiJ-Xw-sgW">
|
||||
<rect key="frame" x="20" y="20" width="248" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Ehz-4Z-Tjq">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EFq-dZ-y90">
|
||||
<rect key="frame" x="378" y="79" width="66" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Default" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="cOs-WH-9Dr">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="bookmarkDefault" id="Oiv-hR-5fn"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="-62" y="95"/>
|
||||
<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="List Media…" id="M5h-4W-0nV">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="listMedia:" target="-2" id="IO7-MG-zud"/>
|
||||
<binding destination="-2" name="hidden" keyPath="optionKey" id="LhL-2l-iss">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="List Slots…" id="cNj-Sb-KkE">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="listSlots:" target="-2" id="3nb-mV-eUK"/>
|
||||
<binding destination="-2" name="hidden" keyPath="optionKey" id="dwp-Kn-LfC">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="yZx-W2-lZg"/>
|
||||
<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>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="wqC-IG-63F"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-121" y="-2"/>
|
||||
</menu>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSAppleMenuImage" width="11" height="14"/>
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
<?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="NewMachineViewController">
|
||||
<connections>
|
||||
<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 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" 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 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="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="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="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" 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>
|
||||
<connections>
|
||||
<binding destination="7b4-T1-d29" name="value" keyPath="objectValue.description" id="kp8-ww-1aE"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="FkS-zP-pRB" id="JkE-pr-7px"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<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>
|
||||
<nil key="backgroundColor"/>
|
||||
</clipView>
|
||||
<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="lLp-pv-Fbj" customClass="TransparentScroller">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<point key="canvasLocation" x="-91" y="132"/>
|
||||
</scrollView>
|
||||
</objects>
|
||||
</document>
|
||||
@@ -13,19 +13,17 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="rSq-qV-SGy" customClass="BookmarkManager">
|
||||
<connections>
|
||||
<outlet property="menu" destination="ha0-nx-PIl" id="Ozd-ID-egK"/>
|
||||
<outlet property="updateMenuItem" destination="30b-vT-HIa" id="AgZ-LE-no6"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate">
|
||||
<connections>
|
||||
<outlet property="installWindow" destination="jWX-pY-Zpb" id="xAj-Vj-Vxn"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<customObject id="3aq-Tx-mno" customClass="SUUpdater"/>
|
||||
<customObject id="sJn-ug-xF3" customClass="BookmarkManager">
|
||||
<connections>
|
||||
<outlet property="menu" destination="ha0-nx-PIl" id="vTa-TU-DS1"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
<menuItem title="Ample" id="1Xt-HY-uBw">
|
||||
@@ -38,16 +36,7 @@
|
||||
<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="Reinstall MAME components" hidden="YES" id="c3P-WT-eUP">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW">
|
||||
<connections>
|
||||
<action selector="displayPreferences:" target="Voe-Tx-rLC" id="Hsm-pX-sUc"/>
|
||||
@@ -409,39 +398,16 @@
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Bookmarks" id="ha0-nx-PIl">
|
||||
<items>
|
||||
<menuItem title="Manage Bookmarks…" keyEquivalent="b" id="isI-q6-b1V">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="manageBookmarks:" target="-1" id="vOm-90-AoO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Add Bookmark…" keyEquivalent="d" id="1JF-xV-zmG">
|
||||
<connections>
|
||||
<action selector="addBookmark:" target="-1" id="cqp-ko-BfQ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Update Bookmark" keyEquivalent="D" id="30b-vT-HIa">
|
||||
<connections>
|
||||
<action selector="updateBookmark:" target="-1" id="Au0-Sp-cUD"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Set Default" hidden="YES" id="vbR-vS-lqO">
|
||||
<menuItem title="Manage Bookmarks…" id="isI-q6-b1V">
|
||||
<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" hidden="YES" id="mXC-Lp-gem">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="defaultLoad:" target="-1" id="ErS-k6-azP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="rSq-qV-SGy" id="Z7N-CG-hU1"/>
|
||||
</connections>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Window" id="aUF-d1-5bR">
|
||||
@@ -547,6 +513,5 @@
|
||||
</view>
|
||||
<point key="canvasLocation" x="13" y="-182"/>
|
||||
</window>
|
||||
<userDefaultsController representsSharedInstance="YES" id="uGS-pc-Wsn"/>
|
||||
</objects>
|
||||
</document>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<?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>
|
||||
@@ -52,16 +51,13 @@
|
||||
<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>
|
||||
<outlet property="textField" destination="Pep-mX-LHY" id="hUe-cf-6vq"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="ItemView" translatesAutoresizingMaskIntoConstraints="NO" id="yGq-lc-RCM" customClass="PathTableCellView">
|
||||
<tableCellView identifier="ItemView" translatesAutoresizingMaskIntoConstraints="NO" id="yGq-lc-RCM" customClass="TablePathView">
|
||||
<rect key="frame" x="1" y="21" width="296" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
@@ -73,8 +69,6 @@
|
||||
</pathCell>
|
||||
<connections>
|
||||
<action selector="pathAction:" target="-2" id="4oX-bW-ANp"/>
|
||||
<binding destination="yGq-lc-RCM" name="value" keyPath="objectValue.url" id="Ony-ph-VVo"/>
|
||||
<binding destination="yGq-lc-RCM" name="enabled" keyPath="objectValue.valid" id="f8P-gt-vmK"/>
|
||||
</connections>
|
||||
</pathControl>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="6g1-NT-J1w">
|
||||
@@ -91,7 +85,6 @@
|
||||
</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>
|
||||
@@ -101,147 +94,6 @@
|
||||
<outlet property="pathControl" destination="f7R-TO-fmF" id="oH7-N3-JC7"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="BBItemView" id="2Nq-Xz-tkV" customClass="PathTableCellView">
|
||||
<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="value" keyPath="objectValue.string" id="2dZ-JJ-asM">
|
||||
<dictionary key="options">
|
||||
<string key="NSNullPlaceholder">socket.address:port or /path/to/file</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="2Nq-Xz-tkV" name="enabled" keyPath="objectValue.valid" id="ZTM-E3-Y9P"/>
|
||||
</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>
|
||||
<tableCellView identifier="OutputItemView" id="jQd-Ar-5uf" customClass="PathTableCellView">
|
||||
<rect key="frame" x="1" y="71" width="296" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="Jg1-Wh-HDk">
|
||||
<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="SjY-iM-xSZ"/>
|
||||
</imageView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vG4-PP-efF" 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="VX6-hb-mCU">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="ejectAction:" target="-2" id="LNr-rK-kpx"/>
|
||||
<binding destination="jQd-Ar-5uf" name="enabled" keyPath="objectValue.occupied" id="p4S-6q-dCG"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Tm9-Zq-fag">
|
||||
<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="/path/to/file" drawsBackground="YES" id="RUQ-s4-75A">
|
||||
<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="N7h-6y-D8W"/>
|
||||
<binding destination="jQd-Ar-5uf" name="value" keyPath="objectValue.string" id="kXU-qJ-HKa">
|
||||
<dictionary key="options">
|
||||
<string key="NSNullPlaceholder">/path/to/file</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="jQd-Ar-5uf" name="enabled" keyPath="objectValue.valid" id="1wE-NY-Vb2"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="dragHandle" destination="Jg1-Wh-HDk" id="o14-ay-0Ou"/>
|
||||
<outlet property="ejectButton" destination="vG4-PP-efF" id="X2I-2N-t5r"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView identifier="MidiItemView" id="HDi-YM-iKn" customClass="MidiTableCellView">
|
||||
<rect key="frame" x="1" y="96" width="296" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="XcO-0S-W4c">
|
||||
<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="4a2-So-rxD"/>
|
||||
</imageView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="F3v-8Z-LaF" 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="b3t-Zp-2si">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="ejectAction:" target="-2" id="AvU-Sz-QKJ"/>
|
||||
<binding destination="HDi-YM-iKn" name="enabled" keyPath="objectValue.occupied" id="ERy-Iz-T9Q"/>
|
||||
</connections>
|
||||
</button>
|
||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="L2F-mj-lkr">
|
||||
<rect key="frame" x="20" y="-3" width="244" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="CaJ-NG-vbR" id="Rac-za-bEQ">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<menu key="menu" id="I55-5S-oM2">
|
||||
<items>
|
||||
<menuItem state="on" id="CaJ-NG-vbR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="midiAction:" target="-2" id="LDL-4h-xUR"/>
|
||||
<binding destination="HDi-YM-iKn" name="selectedValue" keyPath="objectValue.string" id="xjL-hx-VG3">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">EmptyStringTransformer</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="dragHandle" destination="XcO-0S-W4c" id="oKY-UF-LkW"/>
|
||||
<outlet property="ejectButton" destination="F3v-8Z-LaF" id="ql8-4u-qCA"/>
|
||||
<outlet property="popUpButton" destination="L2F-mj-lkr" id="Ktx-Yc-DIp"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
//
|
||||
// Bookmark.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/7/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef Bookmark_h
|
||||
#define Bookmark_h
|
||||
|
||||
#import "Bookmark+CoreDataClass.h"
|
||||
|
||||
#endif /* Bookmark_h */
|
||||
+6
-17
@@ -7,39 +7,28 @@
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
@class NSMenu;
|
||||
@class NSMenuItem;
|
||||
@class Bookmark;
|
||||
@class DiskImage;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface BookmarkManager : NSObject
|
||||
|
||||
@property (weak) IBOutlet NSMenu *menu;
|
||||
@property (weak) IBOutlet NSMenuItem *updateMenuItem;
|
||||
@property (readonly) NSManagedObjectContext *managedObjectContext;
|
||||
|
||||
@property (nullable) Bookmark *currentBookmark;
|
||||
|
||||
+(instancetype)sharedManager;
|
||||
|
||||
-(NSString *)uniqueBookmarkName: (NSString *)name;
|
||||
-(void)loadBookmarks;
|
||||
-(void)updateMenu;
|
||||
|
||||
-(NSError *)saveBookmark: (NSDictionary *)bookmark name: (NSString *)name automatic: (BOOL)automatic;
|
||||
-(BOOL)validateName: (NSString *)name;
|
||||
|
||||
//-(NSError *)saveDefault: (NSDictionary *)bookmark;
|
||||
-(BOOL)saveBookmark: (NSDictionary *)bookmark name: (NSString *)name;
|
||||
-(NSDictionary *)loadBookmarkFromURL: (NSURL *)url;
|
||||
|
||||
-(Bookmark *)defaultBookmark;
|
||||
-(BOOL)saveDefault: (NSDictionary *)bookmark;
|
||||
-(NSDictionary *)loadDefault;
|
||||
|
||||
-(NSError *)setAutomatic: (Bookmark *)bookmark;
|
||||
|
||||
-(BOOL)addDiskImage: (NSObject *)pathOrURL;
|
||||
|
||||
//-(void)convertLegacyBookmarks;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
+119
-556
@@ -9,43 +9,19 @@
|
||||
#import "BookmarkManager.h"
|
||||
#import "Ample.h"
|
||||
|
||||
#import "Bookmark.h"
|
||||
#import "DiskImage.h"
|
||||
#import "Menu.h"
|
||||
|
||||
|
||||
@interface BookmarkManager () {
|
||||
|
||||
NSPersistentStoreCoordinator *_psc;
|
||||
NSManagedObjectContext *_moc;
|
||||
NSManagedObjectModel *_mom;
|
||||
NSPersistentStore *_store;
|
||||
|
||||
NSFetchRequest *_defaultRequest;
|
||||
|
||||
|
||||
NSArray<NSURL *> *_urls;
|
||||
NSURL *_bookmarkDirectory;
|
||||
NSArrayController *_items;
|
||||
NSUInteger _newMenuGeneration;
|
||||
NSUInteger _currentMenuGeneration;
|
||||
|
||||
Bookmark *_currentBookmark;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface BookmarkManager (MenuDelegate) <NSMenuDelegate>
|
||||
@end
|
||||
|
||||
@implementation BookmarkManager
|
||||
|
||||
static BookmarkManager *singleton = nil;
|
||||
|
||||
-(void)awakeFromNib {
|
||||
if (!singleton) {
|
||||
singleton = self;
|
||||
if (!_items) [self initMenus];
|
||||
}
|
||||
if (!singleton) singleton = self;
|
||||
}
|
||||
|
||||
+(instancetype)sharedManager {
|
||||
@@ -55,171 +31,7 @@ static BookmarkManager *singleton = nil;
|
||||
|
||||
-(instancetype)init {
|
||||
if (singleton) return singleton;
|
||||
|
||||
|
||||
if ((self = [super init])) {
|
||||
[self initCoreData];
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
[nc addObserver: self selector: @selector(willTerminate:) name: NSApplicationWillTerminateNotification object: nil];
|
||||
[nc addObserver: self selector: @selector(diskImageAdded:) name: kNotificationDiskImageAdded object: nil];
|
||||
|
||||
|
||||
_newMenuGeneration = 1;
|
||||
_currentMenuGeneration = 0;
|
||||
}
|
||||
|
||||
|
||||
//singleton = self;
|
||||
return self;
|
||||
}
|
||||
|
||||
-(NSManagedObjectContext *)managedObjectContext {
|
||||
return _moc;
|
||||
}
|
||||
|
||||
-(void)initCoreData {
|
||||
|
||||
NSError *error;
|
||||
BOOL new = NO;
|
||||
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSURL *url = [bundle URLForResource: @"Ample" withExtension: @"momd"];
|
||||
_mom = [[NSManagedObjectModel alloc] initWithContentsOfURL: url];
|
||||
|
||||
_psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: _mom];
|
||||
|
||||
_moc = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSMainQueueConcurrencyType];
|
||||
[_moc setPersistentStoreCoordinator: _psc];
|
||||
|
||||
//[_moc setMergePolicy: [NSMergePolicy rollbackMergePolicy]];
|
||||
|
||||
url = SupportDirectory();
|
||||
#if 0
|
||||
url = [url URLByAppendingPathComponent: @"Ample.db"];
|
||||
|
||||
if (![url checkResourceIsReachableAndReturnError: &error])
|
||||
new = YES;
|
||||
|
||||
|
||||
_store = [_psc addPersistentStoreWithType: NSSQLiteStoreType
|
||||
configuration: nil
|
||||
URL: url
|
||||
options: nil
|
||||
error: &error];
|
||||
#else
|
||||
|
||||
url = [url URLByAppendingPathComponent: @"Ample.xml"];
|
||||
|
||||
if (![url checkResourceIsReachableAndReturnError: &error])
|
||||
new = YES;
|
||||
|
||||
|
||||
_store = [_psc addPersistentStoreWithType: NSXMLStoreType
|
||||
configuration: nil
|
||||
URL: url
|
||||
options: nil
|
||||
error: &error];
|
||||
|
||||
|
||||
#endif
|
||||
_defaultRequest = [Bookmark fetchRequest];
|
||||
[_defaultRequest setPredicate: [NSPredicate predicateWithFormat: @"automatic == TRUE"]];
|
||||
|
||||
if (new) {
|
||||
[self convertLegacyBookmarks];
|
||||
[self convertLegacyDiskImages];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-(void)willTerminate: (NSNotification *)notification {
|
||||
|
||||
NSError *error;
|
||||
|
||||
if (![_moc save: &error]) {
|
||||
NSLog(@"%@", error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-(void)convertLegacyBookmarks {
|
||||
|
||||
//NSEntityDescription *e;
|
||||
|
||||
//e = [NSEntityDescription entityForName: @"Bookmark" inManagedObjectContext: moc];
|
||||
|
||||
NSURL *url = [self bookmarkDirectory];
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
NSError *error = nil;
|
||||
|
||||
NSArray *files = [fm contentsOfDirectoryAtURL: url
|
||||
includingPropertiesForKeys: nil
|
||||
options: NSDirectoryEnumerationSkipsHiddenFiles
|
||||
error: &error];
|
||||
|
||||
NSDate *now = [NSDate date];
|
||||
for (NSURL *url in files) {
|
||||
|
||||
|
||||
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
//NSData *data = [NSPropertyListSerialization dataWithPropertyList: dict format: NSPropertyListBinaryFormat_v1_0 options: 0 error: &error];
|
||||
|
||||
Bookmark *b = (Bookmark *)[NSEntityDescription insertNewObjectForEntityForName: @"Bookmark" inManagedObjectContext: _moc];
|
||||
|
||||
[b setName: [url lastPathComponent]];
|
||||
[b setDictionary: dict];
|
||||
//[b setData: data];
|
||||
[b setMachine: [dict objectForKey: @"machine"]];
|
||||
[b setCreated: now];
|
||||
}
|
||||
|
||||
// default...
|
||||
|
||||
url = [url URLByAppendingPathComponent: @".Default"];
|
||||
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
if (dict) {
|
||||
//NSData *data = [NSPropertyListSerialization dataWithPropertyList: dict format: NSPropertyListBinaryFormat_v1_0 options: 0 error: &error];
|
||||
|
||||
NSString *name = [self uniqueBookmarkName: @"Default"];
|
||||
Bookmark *b = (Bookmark *)[NSEntityDescription insertNewObjectForEntityForName: @"Bookmark" inManagedObjectContext: _moc];
|
||||
|
||||
[b setName: name];
|
||||
[b setAutomatic: YES];
|
||||
[b setDictionary: dict];
|
||||
//[b setData: data];
|
||||
[b setMachine: [dict objectForKey: @"machine"]];
|
||||
[b setCreated: now];
|
||||
|
||||
}
|
||||
|
||||
if (![_moc save: &error]) {
|
||||
NSLog(@"%@", error);
|
||||
}
|
||||
}
|
||||
|
||||
-(void)convertLegacyDiskImages {
|
||||
|
||||
NSError *error;
|
||||
NSURL *sd = SupportDirectory();
|
||||
NSURL *url = [sd URLByAppendingPathComponent: @"RecentDiskImages.plist"];
|
||||
|
||||
NSArray *array = [NSArray arrayWithContentsOfURL: url];
|
||||
if (!array) return;
|
||||
|
||||
for (NSDictionary *d in array) {
|
||||
|
||||
NSManagedObject *o = [NSEntityDescription insertNewObjectForEntityForName: @"DiskImage" inManagedObjectContext: _moc];
|
||||
[o setValue: [d objectForKey: @"date"] forKey: @"added"];
|
||||
[o setValue: [d objectForKey: @"date"] forKey: @"accessed"];
|
||||
[o setValue: [d objectForKey: @"path"] forKey: @"path"];
|
||||
[o setValue: [d objectForKey: @"size"] forKey: @"size"];
|
||||
}
|
||||
|
||||
if (![_moc save: &error]) {
|
||||
NSLog(@"%@", error);
|
||||
}
|
||||
return [super init];
|
||||
}
|
||||
|
||||
-(NSURL *)bookmarkDirectory {
|
||||
@@ -236,61 +48,45 @@ static BookmarkManager *singleton = nil;
|
||||
return url;
|
||||
}
|
||||
|
||||
|
||||
-(Bookmark *)defaultBookmark {
|
||||
|
||||
NSFetchRequest *req;
|
||||
NSError *error;
|
||||
NSArray *array;
|
||||
|
||||
req = [Bookmark fetchRequest];
|
||||
[req setPredicate: [NSPredicate predicateWithFormat: @"automatic == TRUE"]];
|
||||
array = [_moc executeFetchRequest: req error: &error];
|
||||
|
||||
return [array firstObject];
|
||||
/* 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 {
|
||||
Bookmark *b = [self defaultBookmark];
|
||||
return [b dictionary];
|
||||
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 */
|
||||
-(NSError *)saveDefault: (NSDictionary *)bookmark {
|
||||
-(BOOL)saveDefault: (NSDictionary *)bookmark {
|
||||
|
||||
return nil;
|
||||
|
||||
#if 0
|
||||
/* check if it already exists */
|
||||
|
||||
NSFetchRequest *req;
|
||||
NSError *error;
|
||||
NSArray *array;
|
||||
Bookmark *b;
|
||||
NSDate *now = [NSDate date];
|
||||
BOOL ok;
|
||||
|
||||
req = [[NSFetchRequest alloc] initWithEntityName: @"Default"];
|
||||
array = [_moc executeFetchRequest: req error: &error];
|
||||
|
||||
|
||||
b = [array firstObject];
|
||||
if (b) {
|
||||
[b setModified: now];
|
||||
} else {
|
||||
b = (Bookmark *)[NSEntityDescription insertNewObjectForEntityForName: @"Default" inManagedObjectContext: _moc];
|
||||
|
||||
[b setName: @"Default"];
|
||||
[b setCreated: now];
|
||||
}
|
||||
[b setDictionary: bookmark];
|
||||
[b setMachine: [bookmark objectForKey: @"machine"]];
|
||||
|
||||
ok = [_moc save: &error];
|
||||
if (!ok) NSLog(@"%@", error);
|
||||
return error;
|
||||
|
||||
#if 0
|
||||
NSURL *url = [self bookmarkDirectory];
|
||||
url = [url URLByAppendingPathComponent: @".Default"];
|
||||
|
||||
@@ -303,349 +99,116 @@ static BookmarkManager *singleton = nil;
|
||||
ok = [bookmark writeToURL: url atomically: YES];
|
||||
}
|
||||
return ok;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
-(NSError *)setAutomatic: (Bookmark *)bookmark {
|
||||
-(BOOL)saveBookmark: (NSDictionary *)bookmark name: (NSString *)name {
|
||||
|
||||
NSError *error = nil;
|
||||
NSFetchRequest *req = [Bookmark fetchRequest];
|
||||
[req setPredicate: [NSPredicate predicateWithFormat: @"automatic == TRUE"]];
|
||||
|
||||
NSArray *array = [_moc executeFetchRequest: req error: &error];
|
||||
for (Bookmark *b in array) {
|
||||
if (b != bookmark) [b setAutomatic: NO];
|
||||
}
|
||||
[bookmark setAutomatic: YES];
|
||||
if (error) return error;
|
||||
[_moc save: &error];
|
||||
return error;
|
||||
}
|
||||
|
||||
-(NSError *)saveBookmark: (NSDictionary *)bookmark name: (NSString *)name automatic: (BOOL)automatic {
|
||||
|
||||
NSDate *now = [NSDate date];
|
||||
NSError *error;
|
||||
BOOL ok;
|
||||
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];
|
||||
|
||||
Bookmark *b = (Bookmark *)[NSEntityDescription insertNewObjectForEntityForName: @"Bookmark" inManagedObjectContext: _moc];
|
||||
|
||||
[b setName: name];
|
||||
[b setDictionary: bookmark];
|
||||
[b setMachine: [bookmark objectForKey: @"machine"]];
|
||||
[b setCreated: now];
|
||||
[b setAutomatic: automatic];
|
||||
|
||||
ok = [b validateForInsert: &error];
|
||||
if (!ok) {
|
||||
// will be useful, eg "name is too long"
|
||||
// keys: NSValidationErrorObject, NSLocalizedDescription, NSValidationErrorKey, NSValidationErrorValue
|
||||
//NSLog(@"%@", error);
|
||||
[_moc deleteObject: b];
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
ok = [_moc save: &error];
|
||||
if (!ok) {
|
||||
//NSLog(@"%@", error);
|
||||
[_moc deleteObject: b];
|
||||
error = [NSError errorWithDomain: @"Ample" code: 0 userInfo: @{ NSLocalizedDescriptionKey: @"Duplicate name" }];
|
||||
return error;
|
||||
}
|
||||
for (unsigned i = 1 ; i < 100; ++i) {
|
||||
NSString *tmp = [name stringByAppendingFormat: @"(%d)", i];
|
||||
[base URLByAppendingPathComponent: tmp];
|
||||
|
||||
if (automatic) {
|
||||
[self setAutomatic: b];
|
||||
}
|
||||
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
-(void)loadBookmarks {
|
||||
|
||||
NSSortDescriptor *s = [NSSortDescriptor sortDescriptorWithKey: @"name" ascending: YES selector: @selector(caseInsensitiveCompare:)];
|
||||
|
||||
|
||||
_items = [NSArrayController new];
|
||||
[_items setManagedObjectContext: _moc];
|
||||
[_items setAvoidsEmptySelection: NO];
|
||||
[_items setAutomaticallyPreparesContent: YES];
|
||||
[_items setAutomaticallyRearrangesObjects: YES];
|
||||
[_items setEntityName: @"Bookmark"];
|
||||
[_items setSortDescriptors: @[ s ]];
|
||||
|
||||
[_items fetch: nil];
|
||||
}
|
||||
|
||||
|
||||
/* extract the number from a trailing " (%d)" */
|
||||
static int extract_number(NSString *s, NSInteger offset) {
|
||||
|
||||
unichar buffer[32];
|
||||
NSInteger len = [s length] - offset;
|
||||
unichar c;
|
||||
int i;
|
||||
int n = 0;
|
||||
|
||||
if (len < 4) return -1; /* " (1)"*/
|
||||
if (len > 8) return -1; /* " (99999)" */
|
||||
|
||||
NSRange r = NSMakeRange(offset, len);
|
||||
[s getCharacters: buffer range: r];
|
||||
|
||||
buffer[len] = 0;
|
||||
i = 0;
|
||||
if (buffer[i++] != ' ') return -1;
|
||||
if (buffer[i++] != '(') return -1;
|
||||
|
||||
c = buffer[i++];
|
||||
if (c < '1' || c > '9') return -1;
|
||||
n = c - '0';
|
||||
|
||||
for (;;) {
|
||||
c = buffer[i];
|
||||
if (c < '0' || c > '9') break;
|
||||
n = n * 10 + (c - '0');
|
||||
++i;
|
||||
}
|
||||
|
||||
if (buffer[i++] != ')') return -1;
|
||||
if (buffer[i++] != 0) return -1;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
-(NSString *)uniqueBookmarkName: (NSString *)name {
|
||||
|
||||
NSInteger length = [name length];
|
||||
|
||||
NSError *error = nil;
|
||||
NSPredicate *p = [NSPredicate predicateWithFormat: @"name BEGINSWITH %@", name];
|
||||
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName: @"Bookmark"];
|
||||
[req setPredicate: p];
|
||||
|
||||
NSArray *array = [_moc executeFetchRequest: req error: &error];
|
||||
if (![array count]) return name;
|
||||
|
||||
uint64_t bits = 1; /* mark 0 as unavailable */
|
||||
NSInteger max = 0;
|
||||
BOOL exact = NO;
|
||||
for (Bookmark *b in array) {
|
||||
NSString *s = [b name];
|
||||
if ([name isEqualToString: s]) {
|
||||
exact = YES;
|
||||
continue;
|
||||
ok = [data writeToURL: url options: NSDataWritingWithoutOverwriting error: &error];
|
||||
if (ok) {
|
||||
name = tmp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
int n = extract_number(s, length);
|
||||
if (n < 1) continue;
|
||||
if (n > max) max = n;
|
||||
if (n < 64)
|
||||
bits |= (1 << n);
|
||||
}
|
||||
if (!exact) return name;
|
||||
if (!ok) return NO;
|
||||
|
||||
if (bits == (uint64_t)-1) {
|
||||
return [name stringByAppendingFormat: @" (%u)", (int)(max + 1)];
|
||||
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(loadBookmark:) 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];
|
||||
}
|
||||
|
||||
#if 1
|
||||
int ix = 0;
|
||||
while (bits & 0x01) {
|
||||
++ix;
|
||||
bits >>= 1;
|
||||
}
|
||||
#else
|
||||
// this doesn't work correctly.
|
||||
int ix = __builtin_ffsll(~bits);
|
||||
#endif
|
||||
return [name stringByAppendingFormat: @" (%u)", ix];
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
-(BOOL)addDiskImage: (NSObject *)pathOrURL {
|
||||
|
||||
NSError *error;
|
||||
|
||||
NSString *path = nil;
|
||||
NSURL *url = nil;
|
||||
if ([pathOrURL isKindOfClass: [NSString class]]) {
|
||||
path = (NSString *)pathOrURL;
|
||||
} else if ([pathOrURL isKindOfClass: [NSURL class]]){
|
||||
url = (NSURL *)pathOrURL;
|
||||
|
||||
path = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
}
|
||||
if (!path) return NO;
|
||||
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
|
||||
NSDictionary *attr = [fm attributesOfItemAtPath: path error: &error];
|
||||
if (error) {
|
||||
NSLog(@"%@ : %@", path, error);
|
||||
return NO;
|
||||
}
|
||||
|
||||
NSNumber *size = [attr objectForKey: NSFileSize];
|
||||
|
||||
NSDate *now = [NSDate date];
|
||||
|
||||
NSPredicate *p = [NSPredicate predicateWithFormat: @"path = %@", path];
|
||||
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName: @"DiskImage"];
|
||||
[req setPredicate: p];
|
||||
|
||||
|
||||
NSArray *array = [_moc executeFetchRequest: req error: &error];
|
||||
BOOL found = 0;
|
||||
for (NSManagedObject *o in array) {
|
||||
found = YES;
|
||||
[o setValue: now forKey: @"accessed"];
|
||||
}
|
||||
if (found) return NO;
|
||||
|
||||
DiskImage *o = [NSEntityDescription insertNewObjectForEntityForName: @"DiskImage" inManagedObjectContext: _moc];
|
||||
|
||||
|
||||
[o setPath: path];
|
||||
[o setAdded: now];
|
||||
[o setAccessed: now];
|
||||
[o setSize: [size longLongValue]];
|
||||
[o updatePath];
|
||||
|
||||
if (![_moc save: &error]) {
|
||||
NSLog(@"%@", error);
|
||||
[_moc deleteObject: o];
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(void)diskImageAdded: (NSNotification *)notification {
|
||||
-(NSDictionary *)loadBookmarkFromURL: (NSURL *)url {
|
||||
|
||||
NSURL *url = [notification object];
|
||||
if (url) [self addDiskImage: url];
|
||||
}
|
||||
|
||||
static NSString *kMenuContext = @"";
|
||||
|
||||
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
|
||||
if (context == (__bridge void * _Nullable)(kMenuContext)) {
|
||||
|
||||
//NSLog(@"observeValueForKeyPath %@", keyPath);
|
||||
|
||||
_newMenuGeneration++;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
[super observeValueForKeyPath: keyPath ofObject: object change: change context: context];
|
||||
}
|
||||
|
||||
-(void)initMenus {
|
||||
NSDictionary *d;
|
||||
|
||||
if (!_items) {
|
||||
[self loadBookmarks];
|
||||
[_items addObserver: self forKeyPath: @"arrangedObjects.name" options: 0 context: (__bridge void * _Nullable)(kMenuContext)];
|
||||
[_items addObserver: self forKeyPath: @"arrangedObjects.automatic" options: 0 context: (__bridge void * _Nullable)(kMenuContext)];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-(IBAction)bookmarkMenu:(id)sender
|
||||
{
|
||||
}
|
||||
|
||||
-(Bookmark *)currentBookmark {
|
||||
return _currentBookmark;
|
||||
}
|
||||
-(void)setCurrentBookmark:(Bookmark *)currentBookmark {
|
||||
if (currentBookmark == _currentBookmark) return;
|
||||
_currentBookmark = currentBookmark;
|
||||
_newMenuGeneration++;
|
||||
}
|
||||
|
||||
-(void)menuNeedsUpdate:(NSMenu *)menu {
|
||||
|
||||
if (_currentMenuGeneration == _newMenuGeneration) return;
|
||||
_currentMenuGeneration = _newMenuGeneration;
|
||||
|
||||
if (_currentBookmark && _updateMenuItem) {
|
||||
NSString *title = [NSString stringWithFormat: @"Update “%@”", [_currentBookmark name]];
|
||||
[_updateMenuItem setHidden: NO];
|
||||
[_updateMenuItem setTitle: title];
|
||||
[_updateMenuItem setRepresentedObject: _currentBookmark];
|
||||
if (@available(macOS 10.13, *)) {
|
||||
NSError *error = nil;
|
||||
d = [NSDictionary dictionaryWithContentsOfURL: url error: &error];
|
||||
if (!d) NSLog(@"Error loading %@: %@", url, error);
|
||||
} else {
|
||||
[_updateMenuItem setHidden: YES];
|
||||
[_updateMenuItem setRepresentedObject: nil];
|
||||
d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
if (!d) NSLog(@"Error loading %@", url);
|
||||
}
|
||||
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
NSArray *menus = [menu itemArray];
|
||||
|
||||
-(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];
|
||||
|
||||
NSArray *array = [_items arrangedObjects];
|
||||
for (Bookmark *b in array) {
|
||||
|
||||
NSString *title = [b name];
|
||||
NSMenuItem *item = [menu addItemWithTitle: title action: @selector(bookmarkMenu:) keyEquivalent: @""];
|
||||
[item setRepresentedObject: b];
|
||||
NSMenuItem *item = [_menu addItemWithTitle: title action: @selector(loadBookmark:) keyEquivalent: @""];
|
||||
[item setRepresentedObject: url];
|
||||
[item setTag: 0xdeadbeef];
|
||||
if ([b automatic]) {
|
||||
|
||||
[item setOnStateImage: [NSImage imageNamed: NSImageNameStatusAvailable]];
|
||||
[item setState: NSOnState];
|
||||
}
|
||||
//if ([b automatic]) [item setAttributedTitle: ItalicMenuString([b name])];
|
||||
//[item setState: [b automatic] ? NSMixedState : NSOffState];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
/* MacOS 12.1+ doesn't like class clusters in nibs -
|
||||
|
||||
[General] This coder is expecting the replaced object 0x600000938f60 to be returned from
|
||||
NSClassSwapper.initWithCoder instead of <BookmarkManager: 0x600000905da0>
|
||||
|
||||
*/
|
||||
@interface BookmarkManagerProxy : NSProxy {
|
||||
BookmarkManager *_target;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation BookmarkManagerProxy
|
||||
|
||||
-(id)init {
|
||||
_target = [BookmarkManager sharedManager];
|
||||
return self;
|
||||
}
|
||||
|
||||
-(NSMethodSignature *)methodSignatureForSelector:(SEL)sel {
|
||||
return [_target methodSignatureForSelector: sel];
|
||||
}
|
||||
|
||||
+(BOOL)respondsToSelector:(SEL)aSelector {
|
||||
return [BookmarkManager respondsToSelector: aSelector];
|
||||
}
|
||||
-(void)forwardInvocation:(NSInvocation *)invocation {
|
||||
if ([_target respondsToSelector: [invocation selector]]) {
|
||||
[invocation invokeWithTarget: _target];
|
||||
} else {
|
||||
[super forwardInvocation: invocation];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
//
|
||||
// BookmarkWindowController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/6/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface BookmarkWindowController : NSWindowController
|
||||
|
||||
+(instancetype)sharedInstance;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,170 +0,0 @@
|
||||
//
|
||||
// BookmarkWindowController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/6/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "BookmarkWindowController.h"
|
||||
#import "BookmarkManager.h"
|
||||
#import "Bookmark.h"
|
||||
#import "Ample.h"
|
||||
|
||||
|
||||
|
||||
@interface BookmarkWindowController ()
|
||||
@property (strong) IBOutlet NSArrayController *arrayController;
|
||||
@property (strong) IBOutlet BookmarkManager *bookmarkManager;
|
||||
|
||||
@property (weak) IBOutlet NSTableView *tableView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation BookmarkWindowController
|
||||
|
||||
|
||||
+(instancetype)sharedInstance {
|
||||
static BookmarkWindowController *me = nil;
|
||||
if (!me) {
|
||||
me = [self new];
|
||||
}
|
||||
return me;
|
||||
}
|
||||
|
||||
-(NSString *)windowNibName {
|
||||
return @"BookmarkWindow";
|
||||
}
|
||||
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
|
||||
NSSortDescriptor *s = [NSSortDescriptor sortDescriptorWithKey: @"name" ascending: YES selector: @selector(caseInsensitiveCompare:)];
|
||||
|
||||
[_arrayController setSortDescriptors: @[s]];
|
||||
|
||||
}
|
||||
|
||||
-(BOOL)windowShouldClose: (NSWindow *)sender {
|
||||
|
||||
NSManagedObjectContext *moc = [_arrayController managedObjectContext];
|
||||
NSError *error;
|
||||
|
||||
if (![_arrayController commitEditing]) return NO;
|
||||
|
||||
if ([moc save: &error]) return YES;
|
||||
NSLog(@"%@", error);
|
||||
|
||||
#if 0
|
||||
NSDictionary *dict = [error userInfo];
|
||||
NSArray *array = [dict objectForKey: @"conflictList"];
|
||||
for (NSConstraintConflict *c in array) {
|
||||
|
||||
NSArray * arr = [c conflictingObjects];
|
||||
for (NSManagedObject *o in arr) {
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return YES;
|
||||
|
||||
//[self presentError: error];
|
||||
//return NO;
|
||||
}
|
||||
|
||||
-(void)keyDown:(NSEvent *)event {
|
||||
/* Carbon/Events.h */
|
||||
enum {
|
||||
kVK_Delete = 0x33,
|
||||
kVK_ForwardDelete = 0x75,
|
||||
|
||||
};
|
||||
unsigned short keyCode = [event keyCode];
|
||||
|
||||
if (keyCode == kVK_Delete || keyCode == kVK_ForwardDelete) {
|
||||
|
||||
// arraycontroller selected object / selected index doesn't work right.
|
||||
|
||||
NSInteger row = [_tableView selectedRow];
|
||||
if (row >= 0)
|
||||
[_arrayController removeObjectAtArrangedObjectIndex: row];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
-(Bookmark *)clickedItem {
|
||||
|
||||
NSArray *array = [_arrayController arrangedObjects];
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0 || row >= [array count]) return nil;
|
||||
return [array objectAtIndex: row];
|
||||
}
|
||||
|
||||
-(IBAction)doubleClick:(id)sender {
|
||||
|
||||
Bookmark *b = [self clickedItem];
|
||||
if (!b) return;
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
[nc postNotificationName: kNotificationBookmarkMagicRoute object: b];
|
||||
}
|
||||
|
||||
-(IBAction)toggleDefault:(id)sender {
|
||||
NSLog(@"%@", sender);
|
||||
|
||||
|
||||
}
|
||||
|
||||
-(IBAction)setDefault:(id)sender {
|
||||
|
||||
Bookmark *b = [self clickedItem];
|
||||
if (!b) return;
|
||||
|
||||
[_bookmarkManager setAutomatic: b];
|
||||
}
|
||||
|
||||
-(IBAction)clearDefault:(id)sender {
|
||||
|
||||
Bookmark *b = [self clickedItem];
|
||||
if (!b) return;
|
||||
|
||||
[b setAutomatic: NO];
|
||||
}
|
||||
|
||||
|
||||
-(IBAction)deleteBookmark:(id)sender {
|
||||
|
||||
//Bookmark *b = [self clickedItem];
|
||||
//if (!b) return;
|
||||
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row >= 0)
|
||||
[_arrayController removeObjectAtArrangedObjectIndex: row];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation BookmarkWindowController (Menu)
|
||||
|
||||
-(BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||
|
||||
Bookmark *b = [self clickedItem];
|
||||
|
||||
if (!b) return NO;
|
||||
SEL action = [menuItem action];
|
||||
|
||||
if (action == @selector(clearDefault:)) {
|
||||
return [b automatic];
|
||||
}
|
||||
|
||||
if (action == @selector(setDefault:)) {
|
||||
return ![b automatic];
|
||||
}
|
||||
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="15702" systemVersion="18G9323" minimumToolsVersion="Automatic" sourceLanguage="Objective-C" userDefinedModelVersionIdentifier="0">
|
||||
<entity name="Bookmark" representedClassName="Bookmark" syncable="YES">
|
||||
<attribute name="automatic" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
||||
<attribute name="comment" optional="YES" attributeType="String"/>
|
||||
<attribute name="created" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="data" attributeType="Binary"/>
|
||||
<attribute name="machine" optional="YES" attributeType="String"/>
|
||||
<attribute name="modified" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="name" attributeType="String" minValueString="1" maxValueString="32"/>
|
||||
<fetchIndex name="Bookmark_name">
|
||||
<fetchIndexElement property="name" type="Binary" order="ascending"/>
|
||||
</fetchIndex>
|
||||
</entity>
|
||||
<entity name="DiskImage" representedClassName="DiskImage" syncable="YES">
|
||||
<attribute name="accessed" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="added" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="name" optional="YES" transient="YES" attributeType="String"/>
|
||||
<attribute name="path" attributeType="String"/>
|
||||
<attribute name="size" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
|
||||
<fetchIndex name="DiskImage_path">
|
||||
<fetchIndexElement property="path" type="Binary" order="ascending"/>
|
||||
</fetchIndex>
|
||||
</entity>
|
||||
<elements>
|
||||
<element name="Bookmark" positionX="994.5546875" positionY="-404.046875" width="128" height="148"/>
|
||||
<element name="DiskImage" positionX="1242" positionY="-333" width="128" height="118"/>
|
||||
</elements>
|
||||
</model>
|
||||
@@ -1,25 +0,0 @@
|
||||
//
|
||||
// Bookmark+CoreDataClass.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/6/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface Bookmark : NSManagedObject
|
||||
|
||||
@property NSDictionary *dictionary;
|
||||
|
||||
+(NSString *)uniqueName: (NSString *)name inContext: (NSManagedObjectContext *)context;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
#import "Bookmark+CoreDataProperties.h"
|
||||
@@ -1,175 +0,0 @@
|
||||
//
|
||||
// Bookmark+CoreDataClass.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/6/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
//
|
||||
|
||||
#import "Bookmark+CoreDataClass.h"
|
||||
|
||||
@implementation Bookmark
|
||||
|
||||
/* extract the number from a trailing " (%d)" */
|
||||
static int extract_number(NSString *s, NSInteger offset) {
|
||||
|
||||
unichar buffer[32];
|
||||
NSInteger len = [s length] - offset;
|
||||
unichar c;
|
||||
int i;
|
||||
int n = 0;
|
||||
|
||||
if (len < 4) return -1; /* " (1)"*/
|
||||
if (len > 6) return -1; /* " (999)" */
|
||||
|
||||
NSRange r = NSMakeRange(offset, len);
|
||||
[s getCharacters: buffer range: r];
|
||||
|
||||
buffer[len] = 0;
|
||||
i = 0;
|
||||
if (buffer[i++] != ' ') return -1;
|
||||
if (buffer[i++] != '(') return -1;
|
||||
|
||||
c = buffer[i++];
|
||||
if (c < '1' || c > '9') return -1;
|
||||
n = c - '0';
|
||||
|
||||
for (;;) {
|
||||
c = buffer[i];
|
||||
if (c < '0' || c > '9') break;
|
||||
n = n * 10 + (c - '0');
|
||||
++i;
|
||||
}
|
||||
|
||||
if (buffer[i++] != ')') return -1;
|
||||
if (buffer[i++] != 0) return -1;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
+(NSString *)uniqueName: (NSString *)name inContext: (NSManagedObjectContext *)context {
|
||||
|
||||
NSInteger length = [name length];
|
||||
|
||||
NSError *error = nil;
|
||||
NSPredicate *p = [NSPredicate predicateWithFormat: @"name BEGINSWITH %@", name];
|
||||
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName: @"Bookmark"];
|
||||
[req setPredicate: p];
|
||||
|
||||
NSArray *array = [context executeFetchRequest: req error: &error];
|
||||
if (![array count]) return name;
|
||||
|
||||
uint64_t bits = 1; /* mark 0 as unavailable */
|
||||
NSInteger max = 0;
|
||||
BOOL exact = NO;
|
||||
for (Bookmark *b in array) {
|
||||
NSString *s = [b name];
|
||||
if ([name isEqualToString: s]) {
|
||||
exact = YES;
|
||||
continue;
|
||||
}
|
||||
int n = extract_number(s, length);
|
||||
if (n < 1) continue;
|
||||
if (n > max) max = n;
|
||||
if (n < 64)
|
||||
bits |= (1 << n);
|
||||
}
|
||||
if (!exact) return name;
|
||||
|
||||
if (bits == (uint64_t)-1) {
|
||||
if (max == 999) return nil;
|
||||
return [name stringByAppendingFormat: @" (%u)", (int)(max + 1)];
|
||||
}
|
||||
|
||||
#if 1
|
||||
int ix = 0;
|
||||
while (bits) {
|
||||
++ix;
|
||||
bits >>= 1;
|
||||
}
|
||||
#else
|
||||
// this doesn't work correctly.
|
||||
int ix = __builtin_ffsll(~bits);
|
||||
#endif
|
||||
return [name stringByAppendingFormat: @" (%u)", ix];
|
||||
|
||||
}
|
||||
|
||||
-(void)setDictionary:(NSDictionary *)dictionary {
|
||||
|
||||
NSData *data;
|
||||
NSError *error = nil;
|
||||
|
||||
data = [NSPropertyListSerialization dataWithPropertyList: dictionary
|
||||
format: NSPropertyListBinaryFormat_v1_0
|
||||
options: 0
|
||||
error: &error];
|
||||
|
||||
[self setData: data];
|
||||
}
|
||||
|
||||
-(NSDictionary *)dictionary {
|
||||
|
||||
// NSDictionary *dict;
|
||||
NSData *data = [self data];
|
||||
NSError *error = nil;
|
||||
|
||||
return [NSPropertyListSerialization propertyListWithData: data
|
||||
options: 0
|
||||
format: nil
|
||||
error: &error];
|
||||
}
|
||||
|
||||
|
||||
- (NSError *)errorFromOriginalError:(NSError *)originalError error:(NSError*)secondError
|
||||
{
|
||||
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
|
||||
NSMutableArray *errors = [NSMutableArray arrayWithObject:secondError];
|
||||
if ([originalError code] == NSValidationMultipleErrorsError) {
|
||||
[userInfo addEntriesFromDictionary:[originalError userInfo]];
|
||||
[errors addObjectsFromArray:[userInfo objectForKey:NSDetailedErrorsKey]];
|
||||
} else {
|
||||
[errors addObject:originalError];
|
||||
}
|
||||
[userInfo setObject:errors forKey:NSDetailedErrorsKey];
|
||||
return [NSError errorWithDomain:NSCocoaErrorDomain code:NSValidationMultipleErrorsError userInfo:userInfo];
|
||||
}
|
||||
|
||||
- (BOOL)validateName:(id*)ioValue error:(NSError**)outError {
|
||||
|
||||
if (!ioValue || !*ioValue) return YES;
|
||||
NSString *name = *ioValue;
|
||||
|
||||
NSFetchRequest *frq = [NSFetchRequest fetchRequestWithEntityName: @"Bookmark"];
|
||||
|
||||
NSPredicate *p = [NSPredicate predicateWithFormat: @"name = %@", name];
|
||||
[frq setPredicate: p];
|
||||
|
||||
NSArray * arr = [[self managedObjectContext] executeFetchRequest: frq error: nil];
|
||||
BOOL dupe = NO;
|
||||
for (Bookmark *b in arr) {
|
||||
if (b == self) continue;
|
||||
dupe = YES;
|
||||
break;
|
||||
}
|
||||
if (dupe && outError) {
|
||||
NSDictionary *dict = @{ NSLocalizedFailureReasonErrorKey: @"duplicate name",
|
||||
NSLocalizedDescriptionKey: @"duplicate name",
|
||||
NSValidationKeyErrorKey: @"name",
|
||||
NSValidationValueErrorKey: name,
|
||||
NSValidationObjectErrorKey: self
|
||||
};
|
||||
NSError *e = [NSError errorWithDomain: @"Ample" code: 1 userInfo: dict];
|
||||
|
||||
if (*outError) {
|
||||
*outError = [self errorFromOriginalError: *outError error: e];
|
||||
} else {
|
||||
*outError = e;
|
||||
}
|
||||
}
|
||||
return !dupe;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,28 +0,0 @@
|
||||
//
|
||||
// Bookmark+CoreDataProperties.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/6/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
//
|
||||
|
||||
#import "Bookmark+CoreDataClass.h"
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface Bookmark (CoreDataProperties)
|
||||
|
||||
+ (NSFetchRequest<Bookmark *> *)fetchRequest;
|
||||
|
||||
@property (nullable, nonatomic, copy) NSString *name;
|
||||
@property (nullable, nonatomic, copy) NSString *machine;
|
||||
@property (nullable, nonatomic, retain) NSData *data;
|
||||
@property (nullable, nonatomic, copy) NSDate *created;
|
||||
@property (nullable, nonatomic, copy) NSDate *modified;
|
||||
@property (nullable, nonatomic, copy) NSString *comment;
|
||||
@property (nonatomic) BOOL automatic;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,26 +0,0 @@
|
||||
//
|
||||
// Bookmark+CoreDataProperties.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/6/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
//
|
||||
|
||||
#import "Bookmark+CoreDataProperties.h"
|
||||
|
||||
@implementation Bookmark (CoreDataProperties)
|
||||
|
||||
+ (NSFetchRequest<Bookmark *> *)fetchRequest {
|
||||
return [NSFetchRequest fetchRequestWithEntityName:@"Bookmark"];
|
||||
}
|
||||
|
||||
@dynamic name;
|
||||
@dynamic machine;
|
||||
@dynamic data;
|
||||
@dynamic created;
|
||||
@dynamic modified;
|
||||
@dynamic comment;
|
||||
@dynamic automatic;
|
||||
|
||||
@end
|
||||
@@ -1,21 +0,0 @@
|
||||
//
|
||||
// DiskImage+CoreDataClass.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/7/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface DiskImage : NSManagedObject
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
#import "DiskImage+CoreDataProperties.h"
|
||||
@@ -1,14 +0,0 @@
|
||||
//
|
||||
// DiskImage+CoreDataClass.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/7/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
//
|
||||
|
||||
#import "DiskImage+CoreDataClass.h"
|
||||
|
||||
@implementation DiskImage
|
||||
|
||||
@end
|
||||
@@ -1,29 +0,0 @@
|
||||
//
|
||||
// DiskImage+CoreDataProperties.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/7/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
//
|
||||
|
||||
#import "DiskImage+CoreDataClass.h"
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface DiskImage (CoreDataProperties)
|
||||
|
||||
+ (NSFetchRequest<DiskImage *> *)fetchRequest;
|
||||
|
||||
@property (nullable, nonatomic, copy) NSString *path;
|
||||
@property (nullable, nonatomic, copy) NSDate *added;
|
||||
@property (nonatomic) int64_t size;
|
||||
@property (nullable, nonatomic, copy) NSDate *accessed;
|
||||
@property (nullable, nonatomic, copy) NSString *name;
|
||||
|
||||
-(void)updatePath;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,52 +0,0 @@
|
||||
//
|
||||
// DiskImage+CoreDataProperties.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/7/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
//
|
||||
|
||||
#import "DiskImage+CoreDataProperties.h"
|
||||
|
||||
#if 0
|
||||
@interface DiskImage () {
|
||||
NSString *_name;
|
||||
}
|
||||
@end
|
||||
#endif
|
||||
|
||||
@implementation DiskImage (CoreDataProperties)
|
||||
|
||||
+ (NSFetchRequest<DiskImage *> *)fetchRequest {
|
||||
return [NSFetchRequest fetchRequestWithEntityName:@"DiskImage"];
|
||||
}
|
||||
|
||||
@dynamic path;
|
||||
@dynamic added;
|
||||
@dynamic size;
|
||||
@dynamic accessed;
|
||||
@dynamic name;
|
||||
|
||||
-(void)updatePath {
|
||||
|
||||
NSString *path = [self primitiveValueForKey: @"path"];
|
||||
[self setName: [path lastPathComponent]];
|
||||
}
|
||||
|
||||
-(void)awakeFromFetch {
|
||||
[super awakeFromFetch];
|
||||
|
||||
[self updatePath];
|
||||
}
|
||||
|
||||
#if 0
|
||||
-(void)awakeFromInsert {
|
||||
[super awakeFromInsert];
|
||||
|
||||
NSString *path = [self primitiveValueForKey: @"path"];
|
||||
[self setName: [path lastPathComponent]];
|
||||
}
|
||||
#endif
|
||||
|
||||
@end
|
||||
@@ -3,7 +3,7 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>MameComponentsDate</key>
|
||||
<date>2022-12-31T16:00:00Z</date>
|
||||
<date>2021-05-27T16:00:00Z</date>
|
||||
<key>UseCustomMame</key>
|
||||
<false/>
|
||||
<key>AutoCloseLogWindow</key>
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>NSQuitAlwaysKeepsWindows</key>
|
||||
<true/>
|
||||
<key>DefaultDownloadURL</key>
|
||||
<string>https://archive.org/download/mame-merged/mame-merged</string>
|
||||
<string>https://archive.org/download/mame.0229</string>
|
||||
<key>DefaultDownloadExtension</key>
|
||||
<string>zip</string>
|
||||
</dict>
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
//
|
||||
// DiskImage.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 2/7/2022.
|
||||
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef DiskImage_h
|
||||
#define DiskImage_h
|
||||
|
||||
#import "DiskImage+CoreDataClass.h"
|
||||
|
||||
#endif /* DiskImage_h */
|
||||
@@ -9,18 +9,19 @@
|
||||
#import "DiskImagesWindowController.h"
|
||||
#import "TableCellView.h"
|
||||
#import "Ample.h"
|
||||
#import "DiskImage.h"
|
||||
|
||||
#import "BookmarkManager.h"
|
||||
|
||||
@interface DiskImagesWindowController ()
|
||||
@property (weak) IBOutlet NSTableView *tableView;
|
||||
@property (strong) IBOutlet NSArrayController *arrayController;
|
||||
@property (strong) NSMutableArray *content;
|
||||
|
||||
@end
|
||||
|
||||
@implementation DiskImagesWindowController {
|
||||
BOOL _dirty;
|
||||
NSSet *_extensions;
|
||||
NSTimer *_timer;
|
||||
|
||||
}
|
||||
|
||||
+(instancetype)sharedInstance {
|
||||
@@ -43,7 +44,7 @@
|
||||
|
||||
if ((self = [super init])) {
|
||||
|
||||
//[self loadRecentDiskImages];
|
||||
[self loadRecentDiskImages];
|
||||
|
||||
_extensions = [NSSet setWithObjects:
|
||||
@"2img", @"2mg", @"chd", @"dc", @"do", @"dsk", @"hd", @"hdv", @"image", @"nib", @"po", @"wav", @"woz", @"iso", @"raw", nil
|
||||
@@ -58,6 +59,9 @@
|
||||
|
||||
- (void)windowDidLoad {
|
||||
|
||||
if (!_content)
|
||||
[self setContent: [NSMutableArray new]];
|
||||
|
||||
[super windowDidLoad];
|
||||
NSWindow *window = [self window];
|
||||
[window setRestorable: YES];
|
||||
@@ -71,12 +75,8 @@
|
||||
[_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.
|
||||
|
||||
NSSortDescriptor *s = [NSSortDescriptor sortDescriptorWithKey: @"name" ascending: YES selector: @selector(caseInsensitiveCompare:)];
|
||||
[_arrayController setSortDescriptors: @[ s ]];
|
||||
}
|
||||
|
||||
#if 0
|
||||
-(void)loadRecentDiskImages {
|
||||
// NSError *error;
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
[nc addObserver: self selector: @selector(diskImageAdded:) name: kNotificationDiskImageAdded object: nil];
|
||||
[nc addObserver: self selector: @selector(diskImageAdded:) name: @"DiskImageAdded" object: nil];
|
||||
|
||||
[nc addObserver: self selector: @selector(willTerminate:) name: NSApplicationWillTerminateNotification object: nil];
|
||||
}
|
||||
@@ -102,16 +102,14 @@
|
||||
_timer = nil;
|
||||
[self saveFile];
|
||||
}
|
||||
#endif
|
||||
|
||||
-(void)diskImageAdded: (NSNotification *)notification {
|
||||
|
||||
NSURL *url = [notification object];
|
||||
if (!url) return;
|
||||
|
||||
//[self addFile: url];
|
||||
[self addFile: url];
|
||||
}
|
||||
#if 0
|
||||
-(void)markDirty {
|
||||
_dirty = YES;
|
||||
if (_timer) [_timer invalidate];
|
||||
@@ -126,7 +124,6 @@
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
-(void)saveFile {
|
||||
|
||||
[_timer invalidate];
|
||||
@@ -150,11 +147,10 @@
|
||||
[self saveFile];
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
-(BOOL)addFile: (NSObject *)pathOrURL {
|
||||
|
||||
NSString *path = nil;
|
||||
@@ -186,7 +182,7 @@
|
||||
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
NSError *error;
|
||||
|
||||
|
||||
NSDictionary *attr = [fm attributesOfItemAtPath: path error: &error];
|
||||
if (error) {
|
||||
NSLog(@"%@ : %@", path, error);
|
||||
@@ -202,43 +198,32 @@
|
||||
[NSDate new], @"date",
|
||||
nil];
|
||||
|
||||
#if 0
|
||||
@synchronized (self) {
|
||||
if (_arrayController)
|
||||
[_arrayController addObject: d];
|
||||
else
|
||||
[_content addObject: d];
|
||||
}
|
||||
#endif
|
||||
[self markDirty];
|
||||
return YES;
|
||||
}
|
||||
|
||||
#endif
|
||||
-(DiskImage *)clickedItem {
|
||||
|
||||
NSArray *array = [_arrayController arrangedObjects];
|
||||
-(NSMutableDictionary *)clickedItem {
|
||||
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0 || row >= [array count]) return nil;
|
||||
return [array objectAtIndex: row];
|
||||
if (row < 0) return nil;
|
||||
|
||||
NSTableCellView *v = [_tableView viewAtColumn: 0 row: row makeIfNecessary: NO];
|
||||
return [v objectValue];
|
||||
}
|
||||
#pragma mark - IBActions
|
||||
|
||||
- (IBAction)filter:(id)sender {
|
||||
NSString *text = [sender stringValue];
|
||||
NSPredicate *p = nil;
|
||||
if ([text length]) {
|
||||
p = [NSPredicate predicateWithFormat: @"name CONTAINS[cd] %@",text];
|
||||
}
|
||||
|
||||
[_arrayController setFilterPredicate: p];
|
||||
}
|
||||
|
||||
- (IBAction)showInFinder:(id)sender {
|
||||
|
||||
DiskImage *item = [self clickedItem];
|
||||
NSMutableDictionary *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
NSString *path = [item path];
|
||||
NSString *path = [item objectForKey: @"path"];
|
||||
|
||||
NSURL *url = [NSURL fileURLWithPath: path];
|
||||
if (!url) return;
|
||||
@@ -249,33 +234,46 @@
|
||||
|
||||
- (IBAction)eject:(id)sender {
|
||||
|
||||
DiskImage *item = [self clickedItem];
|
||||
NSMutableDictionary *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
|
||||
[_arrayController removeObject: item];
|
||||
}
|
||||
@synchronized (self) {
|
||||
|
||||
if (_arrayController) {
|
||||
[_arrayController removeObject: item];
|
||||
} else {
|
||||
[_content removeObject: item];
|
||||
}
|
||||
[self markDirty];
|
||||
}
|
||||
|
||||
-(IBAction)doubleClick: (id)sender {
|
||||
DiskImage *d = [self clickedItem];
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
NSDictionary *userInfo = @{ @"path": [d path] };
|
||||
[nc postNotificationName: kNotificationDiskImageMagicRoute object: nil userInfo: userInfo];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@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 {
|
||||
|
||||
id objects = [_arrayController arrangedObjects];
|
||||
|
||||
DiskImage *d = [objects objectAtIndex: row];
|
||||
if (!d) return nil;
|
||||
NSString *path = [d path];
|
||||
NSDictionary *d = [objects objectAtIndex: row];
|
||||
|
||||
NSString *path = [d objectForKey: @"path"];
|
||||
|
||||
NSURL *url = [NSURL fileURLWithPath: path];
|
||||
return url;
|
||||
@@ -312,8 +310,6 @@
|
||||
|
||||
-(BOOL)tableView:(NSTableView *)tableView acceptDrop:(id<NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation {
|
||||
|
||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||
|
||||
if ([info draggingSource] == _tableView) return NO;
|
||||
|
||||
NSPasteboard * pb = [info draggingPasteboard];
|
||||
@@ -332,9 +328,7 @@
|
||||
if (!s) continue;
|
||||
NSURL *url = [NSURL URLWithString: s];
|
||||
if (!url) continue;
|
||||
|
||||
ok |= [bm addDiskImage: url];
|
||||
//ok |= [self addFile: url];
|
||||
ok |= [self addFile: url];
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
@@ -26,9 +26,17 @@ 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
|
||||
|
||||
+161
-321
@@ -11,9 +11,6 @@
|
||||
#import "Menu.h"
|
||||
|
||||
|
||||
static NSString *Extensions[] = { @"zip", @"7z" };
|
||||
|
||||
|
||||
enum {
|
||||
kTagZip = 1,
|
||||
kTag7z = 2,
|
||||
@@ -84,7 +81,6 @@ enum {
|
||||
|
||||
@interface DownloadItem : NSObject
|
||||
|
||||
@property NSString *value;
|
||||
@property NSString *name;
|
||||
@property NSError *error;
|
||||
@property NSString *pathName;
|
||||
@@ -93,36 +89,15 @@ enum {
|
||||
|
||||
@property NSUInteger status;
|
||||
@property NSUInteger index;
|
||||
@property NSUInteger fileSize;
|
||||
|
||||
@property (readonly) NSColor *titleColor;
|
||||
@property (readonly) NSColor *descriptionColor;
|
||||
|
||||
|
||||
-(void)cancelDownload;
|
||||
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task;
|
||||
-(void)completeWithError: (NSError *)error;
|
||||
-(NSString *)statusDescription;
|
||||
|
||||
-(void)refresh: (NSURL *)localURL;
|
||||
@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;
|
||||
@@ -130,18 +105,10 @@ 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 {
|
||||
|
||||
|
||||
NSArray *_items;
|
||||
NSURL *_romFolder;
|
||||
NSURL *_defaultDownloadURL;
|
||||
@@ -150,8 +117,6 @@ enum {
|
||||
NSURLSession *_session;
|
||||
NSMutableDictionary *_taskIndex;
|
||||
NSUserDefaults *_defaults;
|
||||
|
||||
NSArray<NSButton *> *_filterButtons;
|
||||
}
|
||||
|
||||
+(instancetype)sharedInstance {
|
||||
@@ -174,7 +139,7 @@ enum {
|
||||
|
||||
#if 0
|
||||
- (void)encodeWithCoder:(nonnull NSCoder *)coder {
|
||||
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -184,11 +149,11 @@ enum {
|
||||
|
||||
-(void)windowWillLoad {
|
||||
_defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
|
||||
// set here so binding works.
|
||||
NSString *s = [_defaults stringForKey: kDownloadExtension];
|
||||
if (![s length]) s = [_defaults stringForKey: kDefaultDownloadExtension];
|
||||
|
||||
|
||||
_downloadExtension = s;
|
||||
}
|
||||
|
||||
@@ -200,13 +165,7 @@ enum {
|
||||
[window setRestorable: YES];
|
||||
[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;
|
||||
@@ -214,20 +173,20 @@ enum {
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
NSURL *url = [bundle URLForResource: @"roms" withExtension: @"plist"];
|
||||
|
||||
NSArray *roms = [NSArray arrayWithContentsOfURL: url];
|
||||
|
||||
|
||||
NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
|
||||
NSURL *sd = SupportDirectory();
|
||||
|
||||
_romFolder = [sd URLByAppendingPathComponent: @"roms"];
|
||||
|
||||
|
||||
[fm createDirectoryAtURL: _romFolder withIntermediateDirectories: YES attributes: nil error: &error];
|
||||
|
||||
// so blank URL isn't overwritten.
|
||||
NSString *s = [_defaults stringForKey: kDefaultDownloadURL];
|
||||
_defaultDownloadURL = [NSURL URLWithString: s];
|
||||
[_downloadField setPlaceholderString: s];
|
||||
|
||||
|
||||
s = [_defaults stringForKey: kDownloadURL];
|
||||
if ([s length]) {
|
||||
[_downloadField setStringValue: s];
|
||||
@@ -235,36 +194,35 @@ enum {
|
||||
} else {
|
||||
_downloadURL = _defaultDownloadURL;
|
||||
}
|
||||
|
||||
|
||||
[self initializeExtensionMenu];
|
||||
|
||||
|
||||
|
||||
NSArray *roms = [d objectForKey: @"roms"];
|
||||
[self setCurrentROM: @""];
|
||||
[self setCurrentCount: 0];
|
||||
[self setTotalCount: [roms count]];
|
||||
[self setErrorCount: 0];
|
||||
|
||||
|
||||
|
||||
NSMutableArray *tmp = [NSMutableArray arrayWithCapacity: [roms count]];
|
||||
unsigned ix = 0;
|
||||
for (NSDictionary *d in roms) {
|
||||
|
||||
for (NSString *name in roms) {
|
||||
|
||||
DownloadItem *item = [DownloadItem new];
|
||||
[item setValue: [d objectForKey: @"value"]];
|
||||
[item setName: [d objectForKey: @"description"]];
|
||||
[item setName: name];
|
||||
[item setIndex: ix++];
|
||||
|
||||
[tmp addObject: item];
|
||||
}
|
||||
_items = tmp;
|
||||
[self refreshROMs: nil];
|
||||
[_arrayController setContent: _items];
|
||||
|
||||
|
||||
//[_tableView reloadData];
|
||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
_session = [NSURLSession sessionWithConfiguration: config delegate: self delegateQueue: nil];
|
||||
_taskIndex = [NSMutableDictionary dictionaryWithCapacity: [_items count]];
|
||||
|
||||
|
||||
//[self download];
|
||||
}
|
||||
|
||||
@@ -273,13 +231,13 @@ enum {
|
||||
#if 0
|
||||
-(void)validateURL: (NSString *)url {
|
||||
NSURL *v;
|
||||
|
||||
|
||||
if (![url length]) {
|
||||
_effectiveURL = [NSURL URLWithString: _downloadURL];
|
||||
[_downloadField setTextColor: nil];
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
v = [NSURL URLWithString: url];
|
||||
if (v) {
|
||||
_effectiveURL = v;
|
||||
@@ -297,36 +255,36 @@ enum {
|
||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
_session = [NSURLSession sessionWithConfiguration: config delegate: self delegateQueue: nil];
|
||||
}
|
||||
|
||||
|
||||
NSURLSessionDownloadTask *task;
|
||||
NSString *s = [item value];
|
||||
NSString *s = [item name];
|
||||
NSString *path = [s stringByAppendingPathExtension: _downloadExtension];
|
||||
NSURL *url = [_downloadURL URLByAppendingPathComponent: path];
|
||||
|
||||
|
||||
task = [_session downloadTaskWithURL: url];
|
||||
|
||||
|
||||
[item beginDownloadWithTask: task];
|
||||
[_taskIndex setObject: item forKey: task];
|
||||
|
||||
[task resume];
|
||||
|
||||
|
||||
}
|
||||
|
||||
-(void)download {
|
||||
|
||||
|
||||
// run in thread?
|
||||
//unsigned count = 0;
|
||||
|
||||
for (DownloadItem *item in _items) {
|
||||
|
||||
|
||||
NSURLSessionDownloadTask *task;
|
||||
NSString *s = [item value];
|
||||
NSString *s = [item name];
|
||||
NSString *path = [s stringByAppendingPathExtension: _downloadExtension];
|
||||
NSURL *url = [_downloadURL URLByAppendingPathComponent: path];
|
||||
|
||||
|
||||
task = [_session downloadTaskWithURL: url];
|
||||
[_taskIndex setObject: item forKey: task];
|
||||
|
||||
|
||||
[item setTask: task];
|
||||
|
||||
[task resume];
|
||||
@@ -335,35 +293,33 @@ enum {
|
||||
//if (count >= 2) break;
|
||||
}
|
||||
[self setActive: YES];
|
||||
|
||||
|
||||
}
|
||||
|
||||
-(DownloadItem *)clickedItem {
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0 || row >= [_items count]) return nil;
|
||||
return [[_arrayController arrangedObjects] objectAtIndex: row];
|
||||
//return [_items objectAtIndex: row];
|
||||
return [_items objectAtIndex: row];
|
||||
}
|
||||
#if 0
|
||||
-(void)redrawRow: (NSUInteger)row {
|
||||
|
||||
|
||||
//NSRect r = [_tableView rectOfRow: row];
|
||||
//[_tableView setNeedsDisplayInRect: r];
|
||||
|
||||
|
||||
NSIndexSet *rIx = [NSIndexSet indexSetWithIndex: row];
|
||||
NSIndexSet *cIx = [NSIndexSet indexSetWithIndex: 0];
|
||||
|
||||
|
||||
[_tableView reloadDataForRowIndexes: rIx columnIndexes: cIx];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
-(void)initializeExtensionMenu {
|
||||
|
||||
|
||||
unsigned tag;
|
||||
// mark default download extension.
|
||||
NSString *defaultExt = [_defaults stringForKey: kDefaultDownloadExtension];
|
||||
tag = [DownloadExtensionTransformer stringToNumber: defaultExt];
|
||||
|
||||
|
||||
NSMenuItem *item = [[_formatButton menu] itemWithTag: tag];
|
||||
if (item) {
|
||||
[item setAttributedTitle: ItalicMenuString([item title])];
|
||||
@@ -380,10 +336,6 @@ enum {
|
||||
#endif
|
||||
}
|
||||
|
||||
-(void) defocus {
|
||||
[[self window] makeFirstResponder: nil];
|
||||
}
|
||||
|
||||
#pragma mark - IBActions
|
||||
|
||||
-(IBAction)cancelAll:(id)sender {
|
||||
@@ -397,11 +349,13 @@ enum {
|
||||
[_taskIndex removeAllObjects];
|
||||
[self setCurrentCount: 0];
|
||||
[self setActive: NO];
|
||||
|
||||
[_tableView reloadData];
|
||||
//[_tableView setNeedsDisplay: YES]; // doesn't work...
|
||||
}
|
||||
|
||||
- (IBAction)downloadMissing:(id)sender {
|
||||
|
||||
[self defocus];
|
||||
BOOL delta = NO;
|
||||
for (DownloadItem *item in _items) {
|
||||
NSURL *url = [item localURL];
|
||||
@@ -411,9 +365,10 @@ enum {
|
||||
delta = YES;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (delta) {
|
||||
[self setActive: YES];
|
||||
[_tableView reloadData];
|
||||
}
|
||||
}
|
||||
- (IBAction)showRomFolder:(id)sender {
|
||||
@@ -423,32 +378,32 @@ enum {
|
||||
}
|
||||
|
||||
-(IBAction)refreshROMs: (id)sender {
|
||||
|
||||
|
||||
NSString *romdir = [SupportDirectoryPath() stringByAppendingPathComponent: @"roms"];
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
for (DownloadItem *item in _items) {
|
||||
NSDictionary *attr = nil;
|
||||
NSString *value = [item value];
|
||||
NSString *s = [romdir stringByAppendingPathComponent: value];
|
||||
NSString *name = [item name];
|
||||
NSString *s = [romdir stringByAppendingPathComponent: name];
|
||||
NSString *path;
|
||||
|
||||
for (unsigned i = 0; i < 2; ++i) {
|
||||
path = [s stringByAppendingPathExtension: Extensions[i]];
|
||||
attr = [fm attributesOfItemAtPath: path error: nil];
|
||||
if (attr) break;
|
||||
}
|
||||
|
||||
if (attr) {
|
||||
path = [s stringByAppendingPathExtension: @"zip"];
|
||||
if ([fm fileExistsAtPath: path]) {
|
||||
[item setStatus: ItemFound];
|
||||
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
||||
[item setFileSize: [attr fileSize]];
|
||||
} else {
|
||||
[item setStatus: ItemMissing];
|
||||
[item setLocalURL: nil];
|
||||
[item setFileSize: 0];
|
||||
continue;
|
||||
}
|
||||
|
||||
path = [s stringByAppendingPathExtension: @"7z"];
|
||||
if ([fm fileExistsAtPath: path]) {
|
||||
[item setStatus: ItemFound];
|
||||
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// only needed if items aren't bound.
|
||||
[_tableView reloadData];
|
||||
}
|
||||
|
||||
- (IBAction)showInFinder:(id)sender {
|
||||
@@ -461,37 +416,20 @@ enum {
|
||||
[ws activateFileViewerSelectingURLs: @[url]];
|
||||
}
|
||||
|
||||
- (IBAction)moveToTrash:(id)sender {
|
||||
NSError *error = nil;
|
||||
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
NSURL *url = [item localURL];
|
||||
if (!url) return;
|
||||
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
if ([fm trashItemAtURL: url resultingItemURL: NULL error: &error]) {
|
||||
[item refresh: nil];
|
||||
} else {
|
||||
[self presentError: error];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (IBAction)download:(id)sender {
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
|
||||
[self defocus];
|
||||
|
||||
[self downloadItem: item];
|
||||
[self setActive: YES];
|
||||
[self redrawRow: [item index]];
|
||||
}
|
||||
- (IBAction)cancel:(id)sender {
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
|
||||
[item cancelDownload];
|
||||
[self redrawRow: [item index]];
|
||||
}
|
||||
|
||||
// binding screws up with placeholder.
|
||||
@@ -511,35 +449,6 @@ 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) {
|
||||
@@ -566,7 +475,7 @@ static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
||||
error = [NSError errorWithDomain: NSURLErrorDomain code: NSURLErrorFileDoesNotExist userInfo: info];
|
||||
}
|
||||
|
||||
|
||||
|
||||
// not sure if strictly necessary but this happens in a background thread
|
||||
// and these are used in KVO binding. Also, main thread only
|
||||
// means no race conditions.
|
||||
@@ -583,22 +492,25 @@ static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
||||
if ([taskIndex count] == 0) {
|
||||
[self setActive: NO];
|
||||
}
|
||||
|
||||
|
||||
if (item) {
|
||||
[item completeWithError: error];
|
||||
NSUInteger row = [item index];
|
||||
|
||||
[self redrawRow: row];
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
- (void)URLSession:(NSURLSession *)session downloadTask:(nonnull NSURLSessionDownloadTask *)task didFinishDownloadingToURL:(nonnull NSURL *)location {
|
||||
|
||||
|
||||
|
||||
// NSLog(@"%@", task);
|
||||
// NSLog(@"%@", [task response]);
|
||||
|
||||
|
||||
if (TaskStatusCode(task) != 200) return;
|
||||
|
||||
|
||||
|
||||
// need to move to the destination directory...
|
||||
// file deleted after this function returns, so can't move asynchronously.
|
||||
@@ -606,161 +518,109 @@ static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
||||
NSURL *src = [[task originalRequest] URL];
|
||||
NSURL *dest = [_romFolder URLByAppendingPathComponent: [src lastPathComponent]];
|
||||
NSError *error = nil;
|
||||
|
||||
|
||||
[fm moveItemAtURL: location toURL: dest error: &error];
|
||||
|
||||
DownloadItem *item = [_taskIndex objectForKey: task];
|
||||
[item setLocalURL: dest];
|
||||
|
||||
/*
|
||||
dispatch_async(dispatch_get_main_queue(), ^(void){
|
||||
NSMutableDictionary *taskIndex = self->_taskIndex;
|
||||
DownloadItem *item = [taskIndex objectForKey: task];
|
||||
|
||||
[item refresh: dest];
|
||||
});
|
||||
|
||||
[item setLocalURL: dest];
|
||||
}
|
||||
*/
|
||||
NSLog(@"%@", src);
|
||||
}
|
||||
|
||||
|
||||
|
||||
-(NSURLCredential *)credentialForChallenge: (NSURLAuthenticationChallenge *)challenge {
|
||||
|
||||
|
||||
//if ([challenge previousFailureCount]) return nil;
|
||||
|
||||
NSURLCredential *credential = nil;
|
||||
NSURLProtectionSpace *space = [challenge protectionSpace];
|
||||
|
||||
|
||||
OSStatus status;
|
||||
NSDictionary *query;
|
||||
CFTypeRef item = nil;
|
||||
|
||||
|
||||
query = @{
|
||||
(id)kSecClass: (id)kSecClassInternetPassword,
|
||||
(id)kSecReturnData: (id)kCFBooleanTrue,
|
||||
(id)kSecReturnAttributes: (id)kCFBooleanTrue,
|
||||
(id)kSecAttrServer: [space host],
|
||||
//(id)kSecAttrProtocol: [space protocol],
|
||||
(id)kSecMatchLimit: (id)kSecMatchLimitOne,
|
||||
};
|
||||
|
||||
status = SecItemCopyMatching((CFDictionaryRef)query, &item);
|
||||
//NSLog(@"%@", query);
|
||||
if (status != 0) return nil;
|
||||
|
||||
NSDictionary *d = (__bridge NSDictionary *)item;
|
||||
//NSLog(@"%@", d);
|
||||
|
||||
NSString *account = [d objectForKey: (id)kSecAttrAccount];
|
||||
NSData *passwordData = [d objectForKey: (id)kSecValueData];
|
||||
NSString *password = [[NSString alloc] initWithData: passwordData encoding: NSUTF8StringEncoding];
|
||||
|
||||
|
||||
credential = [NSURLCredential credentialWithUser: account password: password persistence: NSURLCredentialPersistenceForSession];
|
||||
|
||||
return credential;
|
||||
|
||||
}
|
||||
|
||||
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
|
||||
|
||||
NSLog(@"challenge: %@", challenge);
|
||||
|
||||
if ([challenge previousFailureCount]) {
|
||||
completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
|
||||
return;
|
||||
}
|
||||
|
||||
NSURLProtectionSpace *space = [challenge protectionSpace];
|
||||
NSString *method = [space authenticationMethod];
|
||||
|
||||
if ([NSURLAuthenticationMethodHTTPBasic isEqualToString: method] ||
|
||||
[NSURLAuthenticationMethodNTLM isEqualToString: method] ||
|
||||
[NSURLAuthenticationMethodHTTPDigest isEqualToString: method]) {
|
||||
|
||||
NSURLCredential *credential = [self credentialForChallenge: challenge];
|
||||
|
||||
if (credential) {
|
||||
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
|
||||
}
|
||||
|
||||
@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 {
|
||||
[self setTask: task];
|
||||
[self setError: nil];
|
||||
if (task) [self setStatus: ItemDownloading];
|
||||
_task = task;
|
||||
_error = nil;
|
||||
if (task) _status = ItemDownloading;
|
||||
}
|
||||
|
||||
-(void)cancelDownload {
|
||||
if (!_task) return;
|
||||
|
||||
[_task cancel];
|
||||
[self setTask: nil];
|
||||
[self setStatus: ItemCanceled];
|
||||
_task = nil;
|
||||
_status = ItemCanceled;
|
||||
}
|
||||
|
||||
-(void)completeWithError: (NSError *)error {
|
||||
[self setTask: nil];
|
||||
_task = nil;
|
||||
if (error) {
|
||||
[self setError: error];
|
||||
[self setStatus: ItemError];
|
||||
_error = error;
|
||||
_status = ItemError;
|
||||
} else {
|
||||
// what if there was an error moving it?
|
||||
[self setError: nil];
|
||||
[self setStatus: ItemDownloaded];
|
||||
_error = nil;
|
||||
_status = ItemDownloaded;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-(void)refresh: (NSURL *)localURL {
|
||||
NSDictionary *attr = nil;
|
||||
NSError * error = nil;
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
if (localURL) {
|
||||
attr = [fm attributesOfItemAtPath: [localURL path] error: &error];
|
||||
} else {
|
||||
NSString *romdir = [SupportDirectoryPath() stringByAppendingPathComponent: @"roms"];
|
||||
NSString *s = [romdir stringByAppendingPathComponent: _value];
|
||||
|
||||
NSString *path = nil;
|
||||
for (unsigned i = 0; i < 2; ++i) {
|
||||
path = [s stringByAppendingPathExtension: Extensions[i]];
|
||||
attr = [fm attributesOfItemAtPath: path error: nil];
|
||||
if (attr) {
|
||||
localURL = [NSURL fileURLWithPath: path];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (attr && localURL) {
|
||||
[self setLocalURL: localURL];
|
||||
[self setFileSize: [attr fileSize]];
|
||||
[self setStatus: ItemFound];
|
||||
} else {
|
||||
[self setLocalURL: nil];
|
||||
[self setFileSize: 0];
|
||||
if (_status == ItemFound || _status == ItemDownloaded)
|
||||
[self setStatus: ItemMissing];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+(NSSet *)keyPathsForValuesAffectingStatusDescription {
|
||||
return [NSSet setWithObjects: @"error", @"status", nil];
|
||||
}
|
||||
-(NSString *)statusDescription {
|
||||
|
||||
static NSString *Names[] = {
|
||||
@@ -777,19 +637,6 @@ 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
|
||||
|
||||
|
||||
@@ -803,34 +650,27 @@ enum {
|
||||
};
|
||||
|
||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||
|
||||
if ([menuItem action] == @selector(downloadExtensionChanged:)) return YES;
|
||||
|
||||
SEL action = [menuItem action];
|
||||
if (action == @selector(downloadExtensionChanged:)) return YES;
|
||||
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return NO;
|
||||
#if 0
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0) return NO;
|
||||
DownloadItem *item = [[_arrayController arrangedObjects] objectAtIndex: row]; //[_items objectAtIndex: row];
|
||||
#endif
|
||||
|
||||
DownloadItem *item = [_items objectAtIndex: row];
|
||||
|
||||
NSUInteger status = [item status];
|
||||
|
||||
if (action == @selector(moveToTrash:)) {
|
||||
return [item localURL] != nil;
|
||||
switch([menuItem tag]) {
|
||||
case kOpenInFinder:
|
||||
return status == ItemFound || status == ItemDownloaded;
|
||||
break;
|
||||
case kDownload:
|
||||
return YES;
|
||||
//return status == ItemMissing || status == ItemError || status == ItemCanceled;
|
||||
break;
|
||||
case kCancel:
|
||||
return status == ItemDownloading;
|
||||
break;
|
||||
|
||||
}
|
||||
if (action == @selector(showInFinder:)) {
|
||||
return [item localURL] != nil;
|
||||
}
|
||||
if (action == @selector(download:)) {
|
||||
return YES;
|
||||
}
|
||||
if (action == @selector(cancel:)) {
|
||||
return status == ItemDownloading;
|
||||
}
|
||||
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
+2
-8
@@ -47,12 +47,10 @@
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2020-2022 Kelvin Sherlock. All rights reserved.</string>
|
||||
<string>Copyright © 2020 Kelvin Sherlock. All rights reserved.</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
@@ -60,10 +58,6 @@
|
||||
<key>NSSupportsAutomaticTermination</key>
|
||||
<true/>
|
||||
<key>NSSupportsSuddenTermination</key>
|
||||
<false/>
|
||||
<key>SUFeedURL</key>
|
||||
<string>https://ample.ksherlock.com/updates/appcast.xml</string>
|
||||
<key>SUPublicEDKey</key>
|
||||
<string>MgYKY5J1nIJ9+C3IabG24ri2M0CuoMqP78fva2GI5BY=</string>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface LaunchWindowController : NSWindowController <NSBrowserDelegate, NSMenuDelegate>
|
||||
@interface LaunchWindowController : NSWindowController <NSBrowserDelegate>
|
||||
|
||||
@end
|
||||
|
||||
|
||||
+60
-414
@@ -10,13 +10,12 @@
|
||||
#import "LaunchWindowController.h"
|
||||
#import "MediaViewController.h"
|
||||
#import "SlotViewController.h"
|
||||
#import "NewMachineViewController.h"
|
||||
#import "MachineViewController.h"
|
||||
#import "LogWindowController.h"
|
||||
|
||||
#import "AutocompleteControl.h"
|
||||
#import "SoftwareList.h"
|
||||
#import "BookmarkManager.h"
|
||||
#import "Bookmark.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <wctype.h>
|
||||
@@ -27,13 +26,10 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
|
||||
@interface LaunchWindowController () {
|
||||
BOOL _loadingBookmark;
|
||||
NSString *_machine;
|
||||
NSDictionary *_machineDescription;
|
||||
BookmarkManager *_manager;
|
||||
}
|
||||
@property (strong) IBOutlet MediaViewController *mediaController;
|
||||
@property (strong) IBOutlet SlotViewController *slotController;
|
||||
@property (strong) IBOutlet NewMachineViewController *machineViewController;
|
||||
@property (strong) IBOutlet MachineViewController *machineViewController;
|
||||
|
||||
@property (weak) IBOutlet NSView *machineView;
|
||||
@property (weak) IBOutlet NSView *slotView;
|
||||
@@ -43,27 +39,22 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
@property NSString *commandLine;
|
||||
@property NSArray *args;
|
||||
|
||||
@property NSString *machine;
|
||||
//@property NSString *machineName;
|
||||
|
||||
@property NSString *mameMachine;
|
||||
@property BOOL mameDebug;
|
||||
@property BOOL mameSquarePixels;
|
||||
@property BOOL mameMouse;
|
||||
@property BOOL mameSamples;
|
||||
@property BOOL mameBGFX;
|
||||
@property BOOL mameRewind;
|
||||
|
||||
@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 NSString *mameShareDirectory;
|
||||
@property NSString *mameBitBanger;
|
||||
|
||||
@property NSInteger mameSpeed;
|
||||
|
||||
@@ -81,13 +72,7 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
|
||||
@property (strong) IBOutlet NSWindow *addBookmarkWindow;
|
||||
@property (strong) NSString *bookmarkName;
|
||||
@property BOOL bookmarkDefault;
|
||||
@property (weak) IBOutlet NSTextField *bookmarkTextField;
|
||||
@property (weak) IBOutlet NSTextField *bookmarkErrorField;
|
||||
|
||||
@property BOOL optionKey;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@interface LaunchWindowController (SoftwareList)
|
||||
@@ -101,13 +86,8 @@ static NSString *kContextMachine = @"kContextMachine";
|
||||
|
||||
-(IBAction)addBookmark:(id)sender;
|
||||
|
||||
-(IBAction)defaultLoad:(id)sender;
|
||||
|
||||
-(void)bookmarkNotification: (NSNotification *)notification;
|
||||
|
||||
@end
|
||||
|
||||
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
||||
static NSString *BackendStrings[] = {
|
||||
@"",
|
||||
@"metal",
|
||||
@@ -124,22 +104,6 @@ static NSString *EffectsStrings[] = {
|
||||
};
|
||||
|
||||
|
||||
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
|
||||
|
||||
@@ -147,91 +111,34 @@ static int EffectsIndex(NSString *str) {
|
||||
return @"LaunchWindow";
|
||||
}
|
||||
|
||||
-(void)reset {
|
||||
// handled elsewhere.
|
||||
//[self setMachine: nil];
|
||||
|
||||
-(void)windowWillLoad {
|
||||
[self setMameSpeed: 1];
|
||||
[self setMameBGFX: YES];
|
||||
[self setMameMouse: NO];
|
||||
[self setMameSamples: NO];
|
||||
[self setMameSquarePixels: NO];
|
||||
[self setMameDebug: NO];
|
||||
[self setMameRewind: NO];
|
||||
[self setMameWindowMode: 1]; // default = 1x window.
|
||||
|
||||
[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 {
|
||||
|
||||
_manager = [BookmarkManager sharedManager];
|
||||
|
||||
// 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];
|
||||
[self setMameSamples: YES];
|
||||
}
|
||||
|
||||
- (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]);
|
||||
|
||||
[_slotView addSubview: [_slotController view]];
|
||||
[_mediaView addSubview: [_mediaController view]];
|
||||
[_machineView addSubview: [_machineViewController view]];
|
||||
|
||||
[_softwareListControl setMinWidth: 250];
|
||||
[_softwareListControl setHidden: YES];
|
||||
|
||||
|
||||
NSArray *keys = @[
|
||||
//@"mameMachine", // - handled
|
||||
@"mameSquarePixels", @"mameWindowMode",
|
||||
@"mameMouse", @"mameSamples",
|
||||
@"mameDebug", @"mameRewind",
|
||||
@"mameDebug",
|
||||
@"mameSpeed",
|
||||
@"mameAVI", @"mameAVIPath",
|
||||
@"mameWAV", @"mameWAVPath",
|
||||
@"mameVGM", @"mameVGMPath",
|
||||
@"mameShareDirectory", @"mameShareDirectoryPath",
|
||||
@"mameBitBanger", @"mameBitBangerPath",
|
||||
@"mameShareDirectory", @"mameBitBanger",
|
||||
@"mameBGFX", @"mameBackend", @"mameEffects",
|
||||
@"software",
|
||||
];
|
||||
@@ -249,17 +156,10 @@ static void AddSubview(NSView *parent, NSView *child) {
|
||||
[_machineViewController addObserver: self forKeyPath: @"machine" options: 0 context: (__bridge void * _Nullable)kContextMachine];
|
||||
|
||||
|
||||
|
||||
|
||||
// can't be done until above views are set up.
|
||||
[self defaultLoad: nil];
|
||||
|
||||
[_softwareListControl setMinWidth: 250];
|
||||
[_softwareListControl setHidden: YES];
|
||||
|
||||
[self buildCommandLine];
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
[nc addObserver: self selector: @selector(bookmarkNotification:) name: kNotificationBookmarkMagicRoute object: nil];
|
||||
}
|
||||
|
||||
|
||||
@@ -272,8 +172,9 @@ static void AddSubview(NSView *parent, NSView *child) {
|
||||
if (_loadingBookmark) return;
|
||||
|
||||
NSString *machine = [_machineViewController machine];
|
||||
[self setMachine: machine];
|
||||
[self setMameMachine: machine];
|
||||
[_slotController setMachine: machine];
|
||||
[self updateSoftwareList];
|
||||
[self buildCommandLine];
|
||||
} else {
|
||||
[super observeValueForKeyPath: keyPath ofObject: object change: change context: context];
|
||||
@@ -282,35 +183,6 @@ static void AddSubview(NSView *parent, NSView *child) {
|
||||
|
||||
|
||||
|
||||
-(NSString *)machine {
|
||||
return _machine;
|
||||
}
|
||||
|
||||
-(void)setMachine:(NSString *)machine {
|
||||
if (_machine == machine) return;
|
||||
_machine = machine;
|
||||
_machineDescription = MameMachine(machine);
|
||||
|
||||
#if 0
|
||||
[self setMachineName: [_machineDescription objectForKey: @"description"]];
|
||||
#else
|
||||
NSString *title = _machineDescription
|
||||
? [NSString stringWithFormat: @"Ample – %@", [_machineDescription objectForKey: @"description"]]
|
||||
: @"Ample";
|
||||
|
||||
[[self window] setTitle: title];
|
||||
#endif
|
||||
|
||||
// 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, NSString *argv0) {
|
||||
|
||||
@@ -452,7 +324,7 @@ static NSString *ShellQuote(NSString *s) {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
if (!_machine) {
|
||||
if (!_mameMachine) {
|
||||
[self setCommandLine: @""];
|
||||
return;
|
||||
}
|
||||
@@ -460,8 +332,15 @@ static NSString *ShellQuote(NSString *s) {
|
||||
NSMutableArray *argv = [NSMutableArray new];
|
||||
|
||||
//[argv addObject: @"mame"];
|
||||
[argv addObject: _machine];
|
||||
[argv addObject: _mameMachine];
|
||||
|
||||
if (_software) {
|
||||
NSString *name = [_software name];
|
||||
if (![_softwareSet nameIsUnique: name])
|
||||
name = [_software fullName];
|
||||
[argv addObject: name];
|
||||
}
|
||||
|
||||
// -confirm_quit?
|
||||
[argv addObject: @"-skip_gameinfo"];
|
||||
|
||||
@@ -473,7 +352,7 @@ static NSString *ShellQuote(NSString *s) {
|
||||
[argv addObject: @"-nosamples"];
|
||||
|
||||
if (_mameDebug) [argv addObject: @"-debug"];
|
||||
if (_mameRewind) [argv addObject: @"-rewind"];
|
||||
|
||||
|
||||
|
||||
/*
|
||||
@@ -550,12 +429,6 @@ static NSString *ShellQuote(NSString *s) {
|
||||
[argv addObjectsFromArray: tmp];
|
||||
}
|
||||
|
||||
// software *AFTER* slots so, eg, apple2ee has access to the superdrive.
|
||||
if (_software) {
|
||||
NSString *name = [_softwareSet nameForSoftware: _software];
|
||||
if (name) [argv addObject: name];
|
||||
}
|
||||
|
||||
if (_mameSpeed < 0) {
|
||||
[argv addObject: @"-nothrottle"];
|
||||
} else if (_mameSpeed > 1) {
|
||||
@@ -564,7 +437,7 @@ static NSString *ShellQuote(NSString *s) {
|
||||
}
|
||||
|
||||
// audio video.
|
||||
|
||||
|
||||
if (_mameAVI && [_mameAVIPath length]) {
|
||||
[argv addObject: @"-aviwrite"];
|
||||
[argv addObject: _mameAVIPath];
|
||||
@@ -583,14 +456,14 @@ static NSString *ShellQuote(NSString *s) {
|
||||
}
|
||||
}
|
||||
|
||||
if (_mameShareDirectory && [_mameShareDirectoryPath length]) {
|
||||
if (_mameShareDirectory && [_mameShareDirectory length]) {
|
||||
[argv addObject: @"-share_directory"];
|
||||
[argv addObject: _mameShareDirectoryPath];
|
||||
[argv addObject: _mameShareDirectory];
|
||||
}
|
||||
|
||||
if (_mameBitBanger && [_mameBitBangerPath length]) {
|
||||
if (_mameBitBanger && [_mameBitBanger length]) {
|
||||
[argv addObject: @"-bitbanger"];
|
||||
[argv addObject: _mameBitBangerPath];
|
||||
[argv addObject: _mameBitBanger];
|
||||
}
|
||||
|
||||
[self setCommandLine: JoinArguments(argv, nil)];
|
||||
@@ -604,89 +477,29 @@ static NSString *ShellQuote(NSString *s) {
|
||||
return [_args count] ? YES : NO;
|
||||
}
|
||||
if (cmd == @selector(addBookmark:)) {
|
||||
return _machine ? YES : NO;
|
||||
return _mameMachine ? YES : NO;
|
||||
}
|
||||
|
||||
return YES;
|
||||
//return [super validateMenuItem: menuItem]; // not implemented?
|
||||
}
|
||||
|
||||
-(void)defocus {
|
||||
[[self window] makeFirstResponder: nil]; // in case text is being edited...
|
||||
}
|
||||
|
||||
# pragma mark - IBActions
|
||||
|
||||
- (IBAction)launchAction:(id)sender {
|
||||
|
||||
[self defocus];
|
||||
[[self window] makeFirstResponder: nil]; // in case text is being edited...
|
||||
if (![_args count]) return;
|
||||
|
||||
[LogWindowController controllerForArgs: _args];
|
||||
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)listMedia:(id)sender {
|
||||
|
||||
[self defocus];
|
||||
if (!_machine) return;
|
||||
|
||||
NSMutableArray *argv = [NSMutableArray new];
|
||||
|
||||
[argv addObject: _machine];
|
||||
[argv addObject: @"-listmedia"];
|
||||
|
||||
|
||||
NSArray *tmp;
|
||||
tmp = [_slotController args];
|
||||
if ([tmp count]) {
|
||||
[argv addObjectsFromArray: tmp];
|
||||
}
|
||||
|
||||
#if 0
|
||||
tmp = [_mediaController args];
|
||||
if ([tmp count]) {
|
||||
[argv addObjectsFromArray: tmp];
|
||||
}
|
||||
#endif
|
||||
|
||||
[LogWindowController controllerForArgs: argv close: NO];
|
||||
}
|
||||
|
||||
- (IBAction)listSlots:(id)sender {
|
||||
|
||||
[self defocus];
|
||||
if (!_machine) return;
|
||||
|
||||
NSMutableArray *argv = [NSMutableArray new];
|
||||
|
||||
[argv addObject: _machine];
|
||||
[argv addObject: @"-listslots"];
|
||||
|
||||
|
||||
NSArray *tmp;
|
||||
tmp = [_slotController args];
|
||||
if ([tmp count]) {
|
||||
[argv addObjectsFromArray: tmp];
|
||||
}
|
||||
|
||||
#if 0
|
||||
tmp = [_mediaController args];
|
||||
if ([tmp count]) {
|
||||
[argv addObjectsFromArray: tmp];
|
||||
}
|
||||
#endif
|
||||
|
||||
[LogWindowController controllerForArgs: argv close: NO];
|
||||
}
|
||||
|
||||
|
||||
-(IBAction)exportShellScript: (id)sender {
|
||||
|
||||
NSSavePanel *p = [NSSavePanel savePanel];
|
||||
|
||||
NSString *defaultName = [_machine stringByAppendingString: @".sh"];
|
||||
NSString *defaultName = [_mameMachine stringByAppendingString: @".sh"];
|
||||
|
||||
[p setTitle: @"Export Shell Script"];
|
||||
[p setExtensionHidden: NO];
|
||||
@@ -727,27 +540,6 @@ static NSString *ShellQuote(NSString *s) {
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
-(IBAction)resetMachine:(id)sender {
|
||||
[self reset];
|
||||
}
|
||||
|
||||
-(IBAction)resetAll:(id)sender {
|
||||
|
||||
[_manager setCurrentBookmark: nil];
|
||||
[self reset];
|
||||
[self resetSoftware];
|
||||
[_slotController resetSlots: sender];
|
||||
[_mediaController resetMedia: sender];
|
||||
}
|
||||
|
||||
-(IBAction)resetMedia:(id)sender {
|
||||
[_mediaController resetMedia: sender];
|
||||
[_softwareListControl setObjectValue: nil];
|
||||
[self setSoftware: nil];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -755,7 +547,7 @@ static NSString *ShellQuote(NSString *s) {
|
||||
|
||||
-(void)updateSoftwareList {
|
||||
|
||||
_softwareSet = [SoftwareSet softwareSetForMachine: _machine];
|
||||
_softwareSet = [SoftwareSet softwareSetForMachine: _mameMachine];
|
||||
|
||||
[_softwareListControl setAutocompleteDelegate: _softwareSet];
|
||||
|
||||
@@ -781,58 +573,16 @@ static NSString *ShellQuote(NSString *s) {
|
||||
|
||||
@implementation LaunchWindowController (Bookmark)
|
||||
|
||||
-(IBAction)defaultSave:(id)sender {
|
||||
|
||||
#if 0
|
||||
NSDictionary *d = [self makeBookmark];
|
||||
|
||||
[_manager saveDefault: d];
|
||||
#endif
|
||||
}
|
||||
|
||||
-(IBAction)defaultLoad:(id)sender {
|
||||
|
||||
Bookmark *b = [_manager defaultBookmark];
|
||||
|
||||
if (!b) {
|
||||
[self resetAll: sender];
|
||||
[self setMachine: nil];
|
||||
[_machineViewController reset];
|
||||
[_slotController setMachine: nil];
|
||||
return;
|
||||
}
|
||||
[self loadBookmark: b];
|
||||
}
|
||||
|
||||
-(IBAction)updateBookmark: (id)sender {
|
||||
|
||||
Bookmark *b = [sender representedObject];
|
||||
if (!b) return;
|
||||
|
||||
NSDictionary *d = [self makeBookmark];
|
||||
[b setDictionary: d];
|
||||
}
|
||||
|
||||
-(IBAction)addBookmark:(id)sender {
|
||||
|
||||
if (!_machine) return;
|
||||
|
||||
NSString *name = nil;
|
||||
if (_machineDescription) name = [_machineDescription objectForKey:@"description"];
|
||||
if (!name) name = _machine;
|
||||
|
||||
|
||||
if (!_mameMachine) return;
|
||||
|
||||
NSString *name = _mameMachine;
|
||||
if (_software) {
|
||||
name = [name stringByAppendingFormat: @" - %@", [_software title]];
|
||||
}
|
||||
|
||||
name = [_manager uniqueBookmarkName: name];
|
||||
|
||||
[self setBookmarkName: name];
|
||||
[self setBookmarkDefault: NO];
|
||||
[_bookmarkTextField selectText: nil];
|
||||
[_bookmarkErrorField setStringValue: @""];
|
||||
|
||||
[[self window] beginSheet: _addBookmarkWindow completionHandler: nil];
|
||||
}
|
||||
|
||||
@@ -842,26 +592,22 @@ static NSString *ShellQuote(NSString *s) {
|
||||
}
|
||||
|
||||
-(IBAction)bookmarkSave:(id)sender {
|
||||
|
||||
|
||||
#if 0
|
||||
if (![_manager validateName: _bookmarkName]) {
|
||||
[_bookmarkTextField selectText: nil];
|
||||
NSBeep();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
NSDictionary *d = [self makeBookmark];
|
||||
NSError *e;
|
||||
|
||||
if (( e = [_manager saveBookmark: d name: _bookmarkName automatic: _bookmarkDefault])) {
|
||||
// probably a duplicate name...
|
||||
|
||||
BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||
|
||||
if (![bm validateName: _bookmarkName]) {
|
||||
[_bookmarkTextField selectText: nil];
|
||||
[_bookmarkErrorField setStringValue: [e localizedDescription]];
|
||||
NSBeep();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//NSLog(@"%@", _bookmarkName);
|
||||
NSDictionary *d = [self makeBookmark];
|
||||
//NSLog(@"%@", d);
|
||||
|
||||
[bm saveBookmark: d name: _bookmarkName];
|
||||
|
||||
[[self window] endSheet: _addBookmarkWindow];
|
||||
[_addBookmarkWindow orderOut: nil];
|
||||
@@ -869,27 +615,12 @@ static NSString *ShellQuote(NSString *s) {
|
||||
}
|
||||
|
||||
|
||||
-(void)bookmarkNotification: (NSNotification *)notification {
|
||||
-(IBAction)loadBookmark:(id)sender {
|
||||
NSURL *url = [sender representedObject];
|
||||
if (!url) return;
|
||||
|
||||
Bookmark *b = [notification object];
|
||||
[self loadBookmark: b];
|
||||
}
|
||||
|
||||
-(IBAction)bookmarkMenu:(id)sender {
|
||||
|
||||
// represented object is a Bookmark.
|
||||
Bookmark *b = [sender representedObject];
|
||||
[self loadBookmark: b];
|
||||
}
|
||||
|
||||
|
||||
-(void)loadBookmark: (Bookmark *)b {
|
||||
Class StringClass = [NSString class];
|
||||
Class NumberClass = [NSNumber class];
|
||||
|
||||
NSDictionary *d = [b dictionary];
|
||||
|
||||
[_manager setCurrentBookmark: b];
|
||||
NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
if (!d) return; // oops...
|
||||
|
||||
NSString *machine = [d objectForKey: @"machine"];
|
||||
if (!machine) return;
|
||||
@@ -899,75 +630,11 @@ static NSString *ShellQuote(NSString *s) {
|
||||
[_slotController willLoadBookmark: d];
|
||||
[_mediaController willLoadBookmark: d];
|
||||
|
||||
[self reset];
|
||||
[self resetSoftware];
|
||||
|
||||
[self setMachine: machine];
|
||||
[self setMameMachine: machine];
|
||||
[self updateSoftwareList];
|
||||
[_softwareListControl setObjectValue: nil]; // will reload the completion list.
|
||||
|
||||
NSString *str;
|
||||
[_softwareListControl setStringValue: [d objectForKey: @"software"]];
|
||||
|
||||
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);
|
||||
_(@"rewind", setMameRewind);
|
||||
_(@"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];
|
||||
@@ -983,11 +650,11 @@ static NSString *ShellQuote(NSString *s) {
|
||||
|
||||
-(NSDictionary *)makeBookmark {
|
||||
|
||||
[self defocus];
|
||||
[[self window] makeFirstResponder: nil];
|
||||
|
||||
NSMutableDictionary *dict = [NSMutableDictionary new];
|
||||
|
||||
[dict setObject: _machine forKey: @"machine"];
|
||||
[dict setObject: _mameMachine forKey: @"machine"];
|
||||
[dict setObject: @232 forKey: @"version"];
|
||||
[_machineViewController saveBookmark: dict];
|
||||
[_slotController saveBookmark: dict];
|
||||
@@ -999,7 +666,6 @@ static NSString *ShellQuote(NSString *s) {
|
||||
#define _(v,k) [dict setObject: v ? (NSObject *)kCFBooleanTrue : (NSObject *)kCFBooleanFalse forKey: k]
|
||||
|
||||
_(_mameDebug, @"debug");
|
||||
_(_mameRewind, @"rewind");
|
||||
_(_mameSquarePixels, @"squarePixels");
|
||||
_(_mameMouse, @"mouse");
|
||||
_(_mameSamples, @"samples");
|
||||
@@ -1019,8 +685,8 @@ static NSString *ShellQuote(NSString *s) {
|
||||
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 ([_mameShareDirectory length]) _(_mameShareDirectory, @"shareDirectory");
|
||||
if ([_mameBitBanger length]) _(_mameBitBanger, @"shareDirectory");
|
||||
|
||||
|
||||
if (_software) _([_software fullName], @"software");
|
||||
@@ -1036,24 +702,4 @@ static NSString *ShellQuote(NSString *s) {
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - NSMenuDelegate
|
||||
|
||||
#if 1
|
||||
-(void)menuNeedsUpdate:(NSMenu *)menu {
|
||||
NSEventModifierFlags modifiers = [NSEvent modifierFlags];
|
||||
|
||||
[self setOptionKey: modifiers & NSEventModifierFlagOption ? YES : NO];
|
||||
}
|
||||
|
||||
#else
|
||||
/* doesn't trigger when menu is the first responder. */
|
||||
-(void)flagsChanged:(NSEvent *)event {
|
||||
NSEventModifierFlags modifiers = [event modifierFlags];
|
||||
|
||||
[self setOptionKey: modifiers & NSEventModifierFlagOption ? YES : NO];
|
||||
|
||||
[super flagsChanged: event];
|
||||
}
|
||||
#endif
|
||||
|
||||
@end
|
||||
|
||||
@@ -12,13 +12,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface LogWindowController : NSWindowController <NSWindowDelegate>
|
||||
|
||||
#if 0
|
||||
+(id)controllerForTask: (NSTask *)task;
|
||||
+(id)controllerForTask: (NSTask *)task close: (BOOL)close;
|
||||
#endif
|
||||
|
||||
+(id)controllerForArgs: (NSArray *)args;
|
||||
+(id)controllerForArgs: (NSArray *)args close: (BOOL)close;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
+30
-53
@@ -19,10 +19,6 @@ static NSMutableSet *LogWindows;
|
||||
@implementation LogWindowController {
|
||||
NSTask *_task;
|
||||
NSFileHandle *_handle;
|
||||
NSFont *_font;
|
||||
|
||||
BOOL _close;
|
||||
BOOL _eof;
|
||||
}
|
||||
|
||||
+(void)initialize {
|
||||
@@ -34,14 +30,17 @@ static NSMutableSet *LogWindows;
|
||||
}
|
||||
|
||||
|
||||
+(id)controllerForTask: (NSTask *)task close: (BOOL)close{
|
||||
+(id)controllerForTask: (NSTask *)task {
|
||||
LogWindowController *controller = [[LogWindowController alloc] initWithWindowNibName: @"LogWindow"];
|
||||
[controller runTask: task close: close];
|
||||
[controller runTask: task];
|
||||
return controller;
|
||||
}
|
||||
|
||||
|
||||
+(id)controllerForArgs: (NSArray *)args close: (BOOL)close {
|
||||
|
||||
+(id)controllerForArgs: (NSArray *)args {
|
||||
|
||||
// NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
NSURL *url = MameURL();
|
||||
|
||||
@@ -65,24 +64,15 @@ static NSMutableSet *LogWindows;
|
||||
|
||||
[task setArguments: args];
|
||||
|
||||
return [LogWindowController controllerForTask: task close: close];
|
||||
|
||||
}
|
||||
|
||||
+(id)controllerForArgs: (NSArray *)args {
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
BOOL close = [defaults boolForKey: kAutoCloseLogWindow];
|
||||
return [self controllerForArgs: args close: close];
|
||||
return [LogWindowController controllerForTask: task];
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
|
||||
[LogWindows addObject: self];
|
||||
|
||||
_font = [NSFont userFixedPitchFontOfSize: 0];
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
}
|
||||
|
||||
-(void)appendString: (NSString *)string
|
||||
@@ -90,10 +80,7 @@ static NSMutableSet *LogWindows;
|
||||
if ([string length])
|
||||
{
|
||||
// needs explicit color attribute for proper dark mode support.
|
||||
NSDictionary *attr = @{
|
||||
NSForegroundColorAttributeName: [NSColor textColor],
|
||||
NSFontAttributeName: _font,
|
||||
};
|
||||
NSDictionary *attr = @{ NSForegroundColorAttributeName: [NSColor textColor] };
|
||||
NSAttributedString *astr = [[NSAttributedString alloc] initWithString: string attributes: attr];
|
||||
[[_textView textStorage] appendAttributedString: astr];
|
||||
}
|
||||
@@ -106,12 +93,10 @@ static NSMutableSet *LogWindows;
|
||||
}
|
||||
}
|
||||
|
||||
-(NSError *)runTask: (NSTask *)task close: (BOOL)close {
|
||||
-(NSError *)runTask: (NSTask *)task {
|
||||
|
||||
|
||||
if (_task) return nil;
|
||||
_close = close;
|
||||
_eof = NO;
|
||||
|
||||
NSPipe *pipe = [NSPipe pipe];
|
||||
|
||||
@@ -145,6 +130,16 @@ static NSMutableSet *LogWindows;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (error) {
|
||||
// NSURL *url = [task executableURL];
|
||||
// NSString *path = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
NSLog(@"NSTask error. Path = %s error = %@", path, error);
|
||||
// [self appendString: path];
|
||||
// [self appendString: [error description]];
|
||||
return error;
|
||||
}
|
||||
#endif
|
||||
_task = task;
|
||||
NSString *title = [NSString stringWithFormat: @"Ample Log - %u", [task processIdentifier]];
|
||||
[[self window] setTitle: title];
|
||||
@@ -155,7 +150,6 @@ static NSMutableSet *LogWindows;
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
|
||||
[nc addObserver: self
|
||||
selector: @selector(taskComplete:)
|
||||
name: NSTaskDidTerminateNotification
|
||||
@@ -166,7 +160,6 @@ static NSMutableSet *LogWindows;
|
||||
object: _handle];
|
||||
|
||||
[_handle readInBackgroundAndNotify];
|
||||
|
||||
[[self window] setDocumentEdited: YES];
|
||||
return nil;
|
||||
}
|
||||
@@ -179,33 +172,21 @@ static NSMutableSet *LogWindows;
|
||||
// read complete, queue up another.
|
||||
NSDictionary *dict = [notification userInfo];
|
||||
NSData *data = [dict objectForKey: NSFileHandleNotificationDataItem];
|
||||
|
||||
|
||||
if ([data length])
|
||||
{
|
||||
|
||||
NSString *string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
|
||||
|
||||
[self appendString: string];
|
||||
|
||||
[_handle readInBackgroundAndNotify];
|
||||
} else {
|
||||
[self appendString: @"\n"]; // -listmedia sometimes causes display issues.
|
||||
_eof = YES;
|
||||
//[_textView setNeedsDisplay: YES]; // -listmedia sometimes weird.
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-(void)taskCompleteHack {
|
||||
|
||||
}
|
||||
|
||||
/* hask! task complete may occur while output still being processed. add a delay to compensate. */
|
||||
-(void)taskComplete: (NSNotification *)notification
|
||||
{
|
||||
if (!_eof) {
|
||||
[self performSelector: @selector(taskComplete:) withObject: notification afterDelay: 0.5];
|
||||
return;
|
||||
}
|
||||
|
||||
BOOL ok = NO;
|
||||
NSTaskTerminationReason reason;
|
||||
int status;
|
||||
@@ -219,7 +200,7 @@ static NSMutableSet *LogWindows;
|
||||
|
||||
if (status == 0)
|
||||
{
|
||||
//string = @"\n\n[Success]\n\n";
|
||||
string = @"\n\n[Success]\n\n";
|
||||
ok = YES;
|
||||
}
|
||||
else string = @"\n\n[An error occurred]\n\n";
|
||||
@@ -228,22 +209,18 @@ static NSMutableSet *LogWindows;
|
||||
{
|
||||
string = [NSString stringWithFormat: @"\n\n[Caught signal %d (%s)]\n\n", status, strsignal(status)];
|
||||
}
|
||||
if (string) {
|
||||
NSDictionary *attr = @{
|
||||
NSForegroundColorAttributeName: [NSColor systemRedColor],
|
||||
NSFontAttributeName: _font,
|
||||
};
|
||||
NSAttributedString *astr = [[NSAttributedString alloc] initWithString: string attributes: attr];
|
||||
[self appendAttributedString: astr];
|
||||
}
|
||||
|
||||
|
||||
[self appendString: string];
|
||||
|
||||
_handle = nil;
|
||||
_task = nil;
|
||||
|
||||
[[self window] setDocumentEdited: NO];
|
||||
|
||||
if (ok && _close) {
|
||||
if (ok && [[NSUserDefaults standardUserDefaults] boolForKey: kAutoCloseLogWindow]) {
|
||||
|
||||
[[self window] close];
|
||||
//[LogWindows removeObject: self]; // close sends WindowWillClose notification.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,26 +17,8 @@ typedef struct Media {
|
||||
unsigned floppy_5_25;
|
||||
unsigned floppy_3_5;
|
||||
unsigned pseudo_disk;
|
||||
unsigned bitbanger;
|
||||
unsigned midiin;
|
||||
unsigned midiout;
|
||||
unsigned picture;
|
||||
uint64_t floppy_mask;
|
||||
} Media;
|
||||
|
||||
|
||||
typedef enum {
|
||||
MediaTypeError = -1,
|
||||
MediaTypeUnknown = 0,
|
||||
MediaType_5_25,
|
||||
MediaType_3_5,
|
||||
MediaType_HardDisk,
|
||||
MediaType_CDROM,
|
||||
MediaType_Cassette,
|
||||
MediaType_Picture,
|
||||
MediaType_MIDI,
|
||||
} MediaType;
|
||||
|
||||
struct Media MediaFromDictionary(NSDictionary *);
|
||||
|
||||
void MediaAdd(Media *dest, const Media *src);
|
||||
@@ -45,6 +27,4 @@ BOOL MediaEqual(const Media *lhs, const Media *rhs);
|
||||
|
||||
extern const Media EmptyMedia;
|
||||
|
||||
MediaType ClassifyMediaFile(id file);
|
||||
|
||||
#endif /* Media_h */
|
||||
|
||||
-247
@@ -22,10 +22,6 @@ struct Media MediaFromDictionary(NSDictionary *dict) {
|
||||
_(floppy_3_5);
|
||||
_(floppy_5_25);
|
||||
_(pseudo_disk);
|
||||
_(bitbanger);
|
||||
_(midiin);
|
||||
_(midiout);
|
||||
_(picture);
|
||||
|
||||
return m;
|
||||
#undef _
|
||||
@@ -35,12 +31,6 @@ void MediaAdd(Media *dest, const Media *src) {
|
||||
|
||||
if (!src || !dest) return;
|
||||
|
||||
// could merge from src media but not currently set there.
|
||||
|
||||
unsigned count;
|
||||
unsigned flops = dest->floppy_5_25 + dest->floppy_3_5;
|
||||
|
||||
|
||||
#define _(name) dest->name += src->name;
|
||||
_(cass);
|
||||
_(cdrom);
|
||||
@@ -48,21 +38,7 @@ void MediaAdd(Media *dest, const Media *src) {
|
||||
_(floppy_3_5);
|
||||
_(floppy_5_25);
|
||||
_(pseudo_disk);
|
||||
_(bitbanger);
|
||||
_(midiin);
|
||||
_(midiout);
|
||||
_(picture);
|
||||
#undef _
|
||||
|
||||
|
||||
if ((count = src->floppy_5_25)) {
|
||||
uint64_t bits = (1 << count) - 1;
|
||||
//dest->floppy_mask <<= count;
|
||||
bits <<= flops;
|
||||
dest->floppy_mask |= bits;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
BOOL MediaEqual(const Media *lhs, const Media *rhs) {
|
||||
@@ -77,229 +53,6 @@ BOOL MediaEqual(const Media *lhs, const Media *rhs) {
|
||||
_(floppy_3_5);
|
||||
_(floppy_5_25);
|
||||
_(pseudo_disk);
|
||||
_(bitbanger);
|
||||
_(midiin);
|
||||
_(midiout);
|
||||
_(picture);
|
||||
|
||||
_(floppy_mask);
|
||||
|
||||
return YES;
|
||||
#undef _
|
||||
}
|
||||
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
|
||||
|
||||
#define _x2(a,b) (a | (b << 8))
|
||||
#define _x3(a,b,c) (a | (b << 8) | (c << 16))
|
||||
#define _x4(a,b,c, d) (a | (b << 8) | (c << 16) | (d << 24))
|
||||
static unsigned hash(const char *cp) {
|
||||
unsigned rv = 0;
|
||||
int i, shift;
|
||||
if (!cp) return 0;
|
||||
for (i = 0, shift = 0; i < 4; ++i, shift += 8) {
|
||||
unsigned c = cp[i];
|
||||
if (!c) break;
|
||||
c = tolower(c);
|
||||
rv |= (c << shift);
|
||||
}
|
||||
//if (i > 4) return 0; // .image is 5....
|
||||
return rv;
|
||||
}
|
||||
|
||||
const char *extname(const char *path) {
|
||||
|
||||
const char *rv = NULL;
|
||||
if (!path) return path;
|
||||
for(unsigned i = 0; ; ++i) {
|
||||
unsigned c = path[i];
|
||||
if (c == 0) break;
|
||||
if (c == '/') rv = NULL;
|
||||
if (c == '.') rv = path + i + 1;
|
||||
}
|
||||
if (rv && !*rv) rv = NULL;
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*
|
||||
* MAME cares deeply about file extensions. LIST NOT EXHAUSTIVE
|
||||
*
|
||||
* Hard Disk: .chd .hd .hdv .2mg .hdi
|
||||
* CD-ROM: .chd .cue .toc .nrg .gdi .iso .cdr
|
||||
* 5.25: .dsk .do .po .edd .woz .nib .mfi .dfi .rti
|
||||
* 3.5: .dc42 .woz .2mg .mfi .dfi .hfe .mfm .td0 .imd
|
||||
.d77 .d88 .1dd .cqm .cqi .dsk .ima .img .ufi
|
||||
.360 .ipf [also .po and .hdv]
|
||||
* Midi in: .mid
|
||||
* Midi out: .mid
|
||||
* Picture: .png
|
||||
* Cassette: .wav
|
||||
*/
|
||||
|
||||
static bool is_raw_525(size_t disk_size) {
|
||||
if (disk_size & 255) return NO;
|
||||
size_t blocks = disk_size >> 8;
|
||||
|
||||
return blocks == 560 || blocks == 640;
|
||||
}
|
||||
|
||||
static BOOL is_raw_35(size_t disk_size) {
|
||||
if (disk_size & 511) return NO;
|
||||
size_t blocks = disk_size >> 9;
|
||||
|
||||
return blocks == 800 || blocks == 1600 || blocks == 1440 || blocks == 2880;
|
||||
}
|
||||
|
||||
static MediaType is_woz(const uint8_t *buffer, size_t file_size) {
|
||||
|
||||
/* woz 1/2 ? */
|
||||
if (!memcmp(buffer, "WOZ1\xff\x0a\x0d\x0a", 8) || !memcmp(buffer, "WOZ2\xff\x0a\x0d\x0a", 8)) {
|
||||
|
||||
if (!memcmp(buffer + 12, "INFO", 4)) {
|
||||
unsigned type = buffer[21]; // 1 = 5.25, 2 = 3.5
|
||||
if (type == 1) return MediaType_5_25;
|
||||
if (type == 2) return MediaType_3_5;
|
||||
}
|
||||
return MediaTypeUnknown;
|
||||
}
|
||||
return MediaTypeError;
|
||||
}
|
||||
|
||||
static MediaType is_dc42(const uint8_t *buffer, size_t file_size) {
|
||||
|
||||
if (buffer[0x52] == 0x01 && buffer[0x53] == 0x00 && buffer[0] >= 1 && buffer[0] <= 0x3f) {
|
||||
int dsize = OSReadBigInt32(buffer, 0x40);
|
||||
int tsize = OSReadBigInt32(buffer, 0x44);
|
||||
if (dsize + tsize + 0x54 == file_size) {
|
||||
if (is_raw_35(dsize)) return MediaType_3_5;
|
||||
return MediaType_HardDisk;
|
||||
}
|
||||
}
|
||||
|
||||
return MediaTypeError;
|
||||
}
|
||||
|
||||
static MediaType is_2img(const uint8_t *buffer, size_t file_size) {
|
||||
|
||||
if (!memcmp(buffer, "2IMG", 4)) {
|
||||
int format = OSReadLittleInt32(buffer, 0x0c); // 0 - dos order, 1 = prodos order, 2 = nib data
|
||||
int blocks = OSReadLittleInt32(buffer, 0x14); // prodos only.
|
||||
//int bytes = OSReadLittleInt32(buffer, 0x1c);
|
||||
|
||||
if (format == 2 || format == 0) return MediaType_5_25; // nib and dos order
|
||||
if (is_raw_525(blocks * 512)) return MediaType_5_25;
|
||||
if (is_raw_35(blocks * 512)) return MediaType_3_5;
|
||||
return MediaType_HardDisk; //
|
||||
//return MediaTypeUnknown;
|
||||
}
|
||||
|
||||
return MediaTypeError;
|
||||
}
|
||||
|
||||
static MediaType is_chd(const uint8_t *buffer, size_t file_size) {
|
||||
if (!memcmp(buffer, "MComprHD", 8)) {
|
||||
static int offsets[] = { 0, 0, 0, 28, 28, 32}; // offset for logival bytes.
|
||||
int version = OSReadBigInt32(buffer, 12);
|
||||
|
||||
if (version >= 3 && version <= 5) {
|
||||
long bytes = OSReadBigInt64(buffer, offsets[version]);
|
||||
if (is_raw_525(bytes)) return MediaType_5_25;
|
||||
if (is_raw_35(bytes)) return MediaType_3_5;
|
||||
return MediaType_HardDisk; // iso?
|
||||
}
|
||||
return MediaTypeUnknown;
|
||||
}
|
||||
return MediaTypeError;
|
||||
}
|
||||
|
||||
|
||||
|
||||
MediaType ClassifyMediaFile(id file) {
|
||||
|
||||
struct stat st;
|
||||
ssize_t size;
|
||||
unsigned char buffer[128];
|
||||
int fd;
|
||||
const char *path = [file fileSystemRepresentation]; // or URL
|
||||
const char *ext = extname(path);
|
||||
unsigned ext_hash = hash(ext);
|
||||
|
||||
memset(&st, 0, sizeof(st));
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
|
||||
fd = open(path, O_RDONLY);
|
||||
if (fd < 0) return MediaTypeError;
|
||||
fstat(fd, &st);
|
||||
|
||||
size = read(fd, buffer, sizeof(buffer));
|
||||
close(fd);
|
||||
if (size <= 0) return MediaTypeError;
|
||||
|
||||
// 13 sector support ? not on an event 512 block boundary.
|
||||
// = 116480 bytes.
|
||||
|
||||
switch(ext_hash) {
|
||||
case _x3('w', 'o', 'z'):
|
||||
return is_woz(buffer, st.st_size);
|
||||
|
||||
case _x3('2', 'm', 'g'):
|
||||
case _x4('2', 'i', 'm', 'g'):
|
||||
return is_2img(buffer, st.st_size);
|
||||
|
||||
case _x3('c', 'h', 'd'):
|
||||
return is_chd(buffer, st.st_size);
|
||||
|
||||
// dc42 - dc,dc42,dsk,img,image
|
||||
case _x2('d', 'c'): // n.b. as of .233, allowed for mac, not for apple2
|
||||
case _x4('d', 'c', '4', '2'):
|
||||
return is_dc42(buffer, st.st_size);
|
||||
|
||||
// dsk, image, img may also be raw or disk copy.
|
||||
case _x3('d', 's', 'k'):
|
||||
case _x3('i', 'm', 'g'):
|
||||
case _x4('i', 'm', 'a', 'g'):
|
||||
|
||||
if (is_raw_525(st.st_size)) return MediaType_5_25;
|
||||
if (is_raw_35(st.st_size)) return MediaType_3_5;
|
||||
return is_dc42(buffer, st.st_size);
|
||||
|
||||
case _x2('d', 'o'):
|
||||
case _x2('p', 'o'):
|
||||
if (is_raw_525(st.st_size)) return MediaType_5_25;
|
||||
if (is_raw_35(st.st_size)) return MediaType_3_5;
|
||||
return MediaTypeUnknown;
|
||||
|
||||
// hdv - 3.5 or hard drive.
|
||||
case _x3('h', 'd', 'v'):
|
||||
case _x3('r', 'a', 'w'):
|
||||
if (is_raw_35(st.st_size)) return MediaType_3_5;
|
||||
if ((st.st_size & 511) == 0) return MediaType_HardDisk;
|
||||
return MediaTypeUnknown;
|
||||
|
||||
case _x3('n', 'i', 'b'):
|
||||
return MediaType_5_25;
|
||||
|
||||
case _x3('w', 'a', 'v'):
|
||||
return MediaType_Cassette;
|
||||
|
||||
// cd-rom
|
||||
case _x3('i', 's', 'o'):
|
||||
case _x3('c', 'u', 'e'):
|
||||
case _x3('c', 'd', 'r'):
|
||||
return MediaType_CDROM;
|
||||
|
||||
case _x3('p', 'n', 'g'):
|
||||
return MediaType_Picture;
|
||||
|
||||
case _x3('m', 'i', 'd'):
|
||||
return MediaType_MIDI;
|
||||
|
||||
}
|
||||
|
||||
return MediaTypeUnknown;
|
||||
|
||||
}
|
||||
|
||||
@@ -21,11 +21,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (IBAction)ejectAction:(id)sender;
|
||||
- (IBAction)pathAction:(id)sender;
|
||||
|
||||
-(IBAction)resetMedia:(id)sender;
|
||||
|
||||
-(BOOL)smartRouteURL: (NSURL *)url;
|
||||
-(BOOL)smartRouteFile: (NSString *)file;
|
||||
|
||||
@end
|
||||
|
||||
@interface MediaViewController (Bookmark) <Bookmark>
|
||||
|
||||
+149
-392
@@ -9,14 +9,11 @@
|
||||
#import "MediaViewController.h"
|
||||
#import "TableCellView.h"
|
||||
|
||||
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
||||
|
||||
|
||||
@protocol MediaNode
|
||||
-(BOOL)isGroupItem;
|
||||
-(BOOL)isExpandable;
|
||||
-(NSInteger)count;
|
||||
-(NSInteger)category;
|
||||
-(NSInteger) count;
|
||||
|
||||
-(NSString *)viewIdentifier;
|
||||
-(void)prepareView: (NSTableCellView *)view;
|
||||
@@ -31,8 +28,6 @@
|
||||
@property NSMutableArray *children; // URLs?
|
||||
@property NSString *title;
|
||||
@property NSInteger index;
|
||||
@property NSInteger category;
|
||||
@property (weak)NSOutlineView *view;
|
||||
|
||||
-(NSInteger)count;
|
||||
-(id)objectAtIndex:(NSInteger)index;
|
||||
@@ -41,13 +36,9 @@
|
||||
|
||||
@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;
|
||||
@@ -90,6 +81,8 @@
|
||||
|
||||
-(void)prepareView: (NSTableCellView *)view {
|
||||
|
||||
[view setObjectValue: self];
|
||||
[[view textField] setStringValue: _title];
|
||||
}
|
||||
|
||||
-(CGFloat)height {
|
||||
@@ -111,7 +104,6 @@
|
||||
for (unsigned i = count; i < newCount; ++i) {
|
||||
MediaItem *item = [MediaItem new];
|
||||
[item setIndex: i];
|
||||
[item setCategory: _category];
|
||||
[_children addObject: item];
|
||||
}
|
||||
|
||||
@@ -123,7 +115,7 @@
|
||||
|
||||
for (unsigned i = newCount; i < count; ++i) {
|
||||
MediaItem *item = [_children lastObject];
|
||||
if ([item occupied]) break;
|
||||
if ([item url]) break;
|
||||
|
||||
[_children removeLastObject];
|
||||
}
|
||||
@@ -131,36 +123,7 @@
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(BOOL)addURL: (NSURL *)url {
|
||||
|
||||
for (MediaItem *item in _children) {
|
||||
if (![item occupied]) {
|
||||
[item setUrl: url];
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
// add an extra item...
|
||||
|
||||
if (!_children) _children = [NSMutableArray new];
|
||||
NSUInteger ix = [_children count];
|
||||
|
||||
MediaItem *item = [MediaItem new];
|
||||
[item setIndex: ix];
|
||||
[item setCategory: _category];
|
||||
[item setUrl: url];
|
||||
[item setValid: ix < _validCount];
|
||||
[_children addObject: item];
|
||||
if (_view) {
|
||||
NSIndexSet *set = [NSIndexSet indexSetWithIndex: ix];
|
||||
[_view insertItemsAtIndexes: set
|
||||
inParent: self
|
||||
withAnimation: NSTableViewAnimationEffectFade];
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(BOOL)pruneChildren {
|
||||
-(BOOL)pruneChildrenWithOutlineView: (NSOutlineView *)view {
|
||||
NSUInteger count = [_children count];
|
||||
BOOL delta = NO;
|
||||
if (_validCount == count) return NO;
|
||||
@@ -168,7 +131,7 @@
|
||||
|
||||
for (NSInteger i = _validCount; i < count; ++i) {
|
||||
MediaItem *item = [_children lastObject];
|
||||
if ([item occupied]) break;
|
||||
if ([item url]) break;
|
||||
|
||||
[_children removeLastObject];
|
||||
[set addIndex: [_children count]];
|
||||
@@ -177,15 +140,15 @@
|
||||
}
|
||||
if (delta) {
|
||||
|
||||
if (_view)
|
||||
[_view removeItemsAtIndexes: set inParent: self withAnimation: NSTableViewAnimationEffectFade];
|
||||
if (view)
|
||||
[view removeItemsAtIndexes: set inParent: self withAnimation: NSTableViewAnimationEffectFade];
|
||||
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
-(BOOL)moveItemFrom: (NSInteger)oldIndex to: (NSInteger)newIndex {
|
||||
-(BOOL)moveItemFrom: (NSInteger)oldIndex to: (NSInteger)newIndex outlineView: (NSOutlineView *)view {
|
||||
if (newIndex == oldIndex) return NO;
|
||||
NSUInteger count = [_children count];
|
||||
if (oldIndex >= count) return NO;
|
||||
@@ -198,7 +161,7 @@
|
||||
} else {
|
||||
[_children insertObject: item atIndex: newIndex];
|
||||
}
|
||||
if (_view) [_view moveItemAtIndex: oldIndex inParent: self toIndex: newIndex inParent: self];
|
||||
if (view) [view moveItemAtIndex: oldIndex inParent: self toIndex: newIndex inParent: self];
|
||||
|
||||
// re-index and re-validate.
|
||||
unsigned ix = 0;
|
||||
@@ -210,7 +173,7 @@
|
||||
|
||||
++ix;
|
||||
}
|
||||
[self pruneChildren];
|
||||
[self pruneChildrenWithOutlineView: view];
|
||||
//[view reloadItem: self reloadChildren: YES];
|
||||
return YES;
|
||||
}
|
||||
@@ -218,37 +181,11 @@
|
||||
|
||||
@implementation MediaItem
|
||||
|
||||
|
||||
|
||||
-(instancetype)initWithURL: (NSURL *)url {
|
||||
_url = url;
|
||||
[self setUrl: 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;
|
||||
}
|
||||
@@ -266,23 +203,43 @@
|
||||
}
|
||||
|
||||
-(NSString *)viewIdentifier {
|
||||
if (_category == kIndexBitBanger) return @"BBItemView";
|
||||
if (_category == kIndexMidiOut) return @"MidiItemView";
|
||||
if (_category == kIndexMidiIn) return @"MidiItemView";
|
||||
return @"ItemView";
|
||||
}
|
||||
|
||||
-(void)prepareView: (MediaTableCellView *)view {
|
||||
/* set the path tag = category. */
|
||||
|
||||
[view prepareView: _category];
|
||||
#if 0
|
||||
if (_category == kIndexMidiIn || _category == kIndexMidiOut || _category == kIndexBitBanger) {
|
||||
return;
|
||||
}
|
||||
-(void)prepareView: (TablePathView *)view {
|
||||
|
||||
NSValueTransformer *t;
|
||||
NSDictionary *options;
|
||||
|
||||
[view setObjectValue: self];
|
||||
|
||||
NSPathControl *pc = [view pathControl];
|
||||
[pc setTag: _category + 1]; // to differentiate 0 / no path control.
|
||||
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"];
|
||||
t = [NSValueTransformer valueTransformerForName: NSIsNotNilTransformerName];
|
||||
options = @{ NSValueTransformerBindingOption: t};
|
||||
[button bind: @"enabled" toObject: self withKeyPath: @"url" options: options];
|
||||
|
||||
|
||||
if (@available(macOS 10.14, *)) {
|
||||
[button unbind: @"contentTintColor"];
|
||||
|
||||
t = [NSValueTransformer valueTransformerForName: @"ValidColorTransformer"];
|
||||
options = @{ NSValueTransformerBindingOption: t};
|
||||
[button bind: @"contentTintColor" toObject: self withKeyPath: @"valid" options: options];
|
||||
} else {
|
||||
// El Capitan TODO...
|
||||
}
|
||||
#if 0
|
||||
NSColor *tintColor = nil;
|
||||
if (!_valid) tintColor = [NSColor systemRedColor];
|
||||
[button setContentTintColor: tintColor];
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -297,12 +254,13 @@
|
||||
@end
|
||||
|
||||
|
||||
|
||||
#define CATEGORY_COUNT 6
|
||||
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
||||
|
||||
@interface MediaViewController () {
|
||||
|
||||
MediaCategory *_data[CATEGORY_COUNT];
|
||||
NSMutableArray *_root;
|
||||
NSArray *_root;
|
||||
Media _media;
|
||||
|
||||
BOOL _loadingBookmark;
|
||||
@@ -312,6 +270,14 @@
|
||||
|
||||
@implementation MediaViewController
|
||||
|
||||
enum {
|
||||
kIndexFloppy525 = 0,
|
||||
kIndexFloppy35,
|
||||
kIndexHardDrive,
|
||||
kIndexCDROM,
|
||||
kIndexCassette,
|
||||
kIndexDiskImage,
|
||||
};
|
||||
|
||||
|
||||
-(void)awakeFromNib {
|
||||
@@ -327,18 +293,8 @@
|
||||
_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
|
||||
|
||||
_data[kIndexMidiIn] = [MediaCategory categoryWithTitle: @"MIDI (In)"];
|
||||
_data[kIndexMidiOut] = [MediaCategory categoryWithTitle: @"MIDI (Out)"];
|
||||
_data[kIndexPicture] = [MediaCategory categoryWithTitle: @"Picture"];
|
||||
|
||||
for (unsigned i = 0; i < CATEGORY_COUNT; ++i) {
|
||||
[_data[i] setCategory: i];
|
||||
[_data[i] setIndex: -1];
|
||||
}
|
||||
|
||||
_root = [NSMutableArray new];
|
||||
_root = @[];
|
||||
|
||||
}
|
||||
|
||||
@@ -347,55 +303,35 @@
|
||||
-(void)rebuildArgs {
|
||||
|
||||
static char* prefix[] = {
|
||||
"flop", "flop", "hard", "cdrm", "cass", "disk", "bitb", "min", "mout", "pic"
|
||||
"flop", "flop", "hard", "cdrm", "cass", "disk"
|
||||
};
|
||||
static_assert(SIZEOF(prefix) == CATEGORY_COUNT, "Missing item");
|
||||
NSMutableArray *args = [NSMutableArray new];
|
||||
|
||||
//unsigned counts[CATEGORY_COUNT] = { 0 };
|
||||
|
||||
unsigned counts[CATEGORY_COUNT] = { 0 };
|
||||
|
||||
for (unsigned j = 0; j < CATEGORY_COUNT; ++j) {
|
||||
|
||||
uint64_t floppy_mask = _media.floppy_mask;
|
||||
unsigned index = 0;
|
||||
|
||||
MediaCategory *cat = _data[j];
|
||||
NSInteger valid = [cat validCount];
|
||||
for (NSInteger i = 0; i < valid; ++i) {
|
||||
counts[j]++;
|
||||
|
||||
MediaItem *item = [cat objectAtIndex: i];
|
||||
NSString *arg = [item argument];
|
||||
|
||||
|
||||
if (j == kIndexFloppy525) {
|
||||
// assumes < 64 floppies....
|
||||
// infinite loop if no floppy device...
|
||||
if (floppy_mask == 0) break;
|
||||
while ((floppy_mask & 0x01) == 0) {
|
||||
floppy_mask >>= 1;
|
||||
++index;
|
||||
}
|
||||
} else if (j == kIndexFloppy35) {
|
||||
while ((floppy_mask & 0x01)) {
|
||||
floppy_mask >>= 1;
|
||||
++index;
|
||||
}
|
||||
}
|
||||
|
||||
++index;
|
||||
floppy_mask >>= 1;
|
||||
if (!arg) continue;
|
||||
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: [NSString stringWithFormat: @"-%s%u", prefix[j], index]];
|
||||
[args addObject: arg];
|
||||
[args addObject: s];
|
||||
}
|
||||
if (j == 0) counts[1] = counts[0]; // 3.5/5.25
|
||||
}
|
||||
|
||||
[self setArgs: args];
|
||||
}
|
||||
|
||||
-(void)rebuildRoot {
|
||||
|
||||
NSMutableArray *tmp = [NSMutableArray new];
|
||||
int ix = 0;
|
||||
for (unsigned j = 0 ; j < CATEGORY_COUNT; ++j) {
|
||||
@@ -411,16 +347,12 @@
|
||||
// todo - switch this to use removeItemsAtIndexes:inParent:withAnimation:
|
||||
// and insertItemsAtIndexes:inParent:withAnimation:
|
||||
|
||||
if (!_loadingBookmark) {
|
||||
[_outlineView reloadData];
|
||||
[_outlineView expandItem: nil expandChildren: YES];
|
||||
}
|
||||
[_outlineView reloadData];
|
||||
[_outlineView expandItem: nil expandChildren: YES];
|
||||
}
|
||||
|
||||
-(void)setMedia: (Media)media {
|
||||
|
||||
// todo -- fancy diff algorithm to animate changes.
|
||||
|
||||
MediaCategory *cat;
|
||||
BOOL delta = NO;
|
||||
unsigned x;
|
||||
@@ -428,8 +360,6 @@
|
||||
if (MediaEqual(&_media, &media)) return;
|
||||
_media = media;
|
||||
|
||||
[_outlineView beginUpdates];
|
||||
|
||||
|
||||
#undef _
|
||||
#define _(name, index) \
|
||||
@@ -440,25 +370,12 @@ x = media.name; cat = _data[index]; delta |= [cat setItemCount: x]
|
||||
_(floppy_3_5, kIndexFloppy35);
|
||||
_(floppy_5_25, kIndexFloppy525);
|
||||
_(pseudo_disk, kIndexDiskImage);
|
||||
_(bitbanger, kIndexBitBanger);
|
||||
// disable midi for now - it's either a midi file (which auto-plays too soon to be useful)
|
||||
// or a midi device ("default" for first one).
|
||||
// So we should build a device list (and pre-populate the default one)
|
||||
// another approach is a separate utility to act as a midi/serial input converter
|
||||
// and midi file / serial converter so the modem/serial port could be used.
|
||||
#if 1
|
||||
_(midiin, kIndexMidiIn);
|
||||
_(midiout, kIndexMidiOut);
|
||||
#endif
|
||||
_(picture, kIndexPicture);
|
||||
|
||||
|
||||
if (delta) {
|
||||
[self rebuildRoot];
|
||||
if (!_loadingBookmark) [self rebuildArgs];
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
[_outlineView endUpdates];
|
||||
}
|
||||
|
||||
-(void)resetDiskImages {
|
||||
@@ -471,24 +388,21 @@ x = media.name; cat = _data[index]; delta |= [cat setItemCount: x]
|
||||
for (NSInteger i = 0; i < count; ++i) {
|
||||
|
||||
MediaItem *item = [cat objectAtIndex: i];
|
||||
if (![item occupied]) continue;
|
||||
NSURL *url = [item url];
|
||||
if (!url) continue;
|
||||
[item setUrl: nil];
|
||||
[item setString: nil];
|
||||
delta = YES;
|
||||
}
|
||||
if ([cat pruneChildren]) delta = YES;
|
||||
}
|
||||
if (delta) {
|
||||
[self rebuildRoot];
|
||||
if (!_loadingBookmark) [self rebuildArgs];
|
||||
[self rebuildArgs];
|
||||
}
|
||||
}
|
||||
|
||||
static NSString *kDragType = @"private.ample.media";
|
||||
- (void)viewDidLoad {
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
|
||||
[super viewDidLoad];
|
||||
|
||||
//NSOutlineView *view = [self view];
|
||||
@@ -499,21 +413,6 @@ static NSString *kDragType = @"private.ample.media";
|
||||
[_outlineView expandItem: nil expandChildren: YES];
|
||||
|
||||
[_outlineView registerForDraggedTypes: @[kDragType]];
|
||||
|
||||
for (unsigned i = 0; i < CATEGORY_COUNT; ++i)
|
||||
[_data[i] setView: _outlineView];
|
||||
|
||||
|
||||
[nc addObserver: self selector: @selector(magicRouteNotification:) name: kNotificationDiskImageMagicRoute object: nil];
|
||||
|
||||
}
|
||||
|
||||
-(void)viewWillDisappear {
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
[nc removeObserver: self];
|
||||
|
||||
for (unsigned i = 0; i < CATEGORY_COUNT; ++i)
|
||||
[_data[i] setView: nil];
|
||||
}
|
||||
|
||||
#pragma mark - NSOutlineViewDelegate
|
||||
@@ -527,14 +426,15 @@ 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];
|
||||
[v setObjectValue: item];
|
||||
|
||||
[(id<MediaNode>)item prepareView: v];
|
||||
[v setObjectValue: item];
|
||||
return v;
|
||||
}
|
||||
|
||||
@@ -566,6 +466,12 @@ 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
|
||||
@@ -676,7 +582,7 @@ static NSString *kDragType = @"private.ample.media";
|
||||
}
|
||||
|
||||
- (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id<NSDraggingInfo>)info item:(id)item childIndex:(NSInteger)index {
|
||||
|
||||
|
||||
if (index < 0) return NO;
|
||||
|
||||
|
||||
@@ -710,7 +616,7 @@ static NSString *kDragType = @"private.ample.media";
|
||||
NSInteger oldIndex = indexes[1];
|
||||
|
||||
[_outlineView beginUpdates];
|
||||
[cat moveItemFrom: oldIndex to: index];
|
||||
[cat moveItemFrom: oldIndex to: index outlineView: _outlineView];
|
||||
[_outlineView endUpdates];
|
||||
[self rebuildArgs];
|
||||
|
||||
@@ -728,267 +634,111 @@ 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];
|
||||
[item setString: nil];
|
||||
//[[pv pathControl] setURL: nil];
|
||||
|
||||
// if item is invalid, should attempt to remove...
|
||||
if (![item valid]) {
|
||||
MediaCategory *cat = [_outlineView parentForItem: item];
|
||||
[_outlineView beginUpdates];
|
||||
[cat pruneChildren];
|
||||
|
||||
// remove the entire category??
|
||||
if (![cat validCount] && ![cat count]) {
|
||||
NSUInteger ix = [_root indexOfObject: cat];
|
||||
if (ix != NSNotFound) {
|
||||
NSIndexSet *set = [NSIndexSet indexSetWithIndex: ix];
|
||||
[_outlineView removeItemsAtIndexes: set
|
||||
inParent: nil
|
||||
withAnimation: NSTableViewAnimationEffectFade];
|
||||
|
||||
[_root removeObjectAtIndex: ix];
|
||||
[cat setIndex: -1];
|
||||
}
|
||||
}
|
||||
|
||||
[cat pruneChildrenWithOutlineView: _outlineView];
|
||||
[_outlineView endUpdates];
|
||||
}
|
||||
|
||||
// todo -- if this eliminates a category completely, it will still be included
|
||||
// since we're now using animaations instead of reloading.
|
||||
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
- (IBAction)pathAction:(id)sender {
|
||||
// need to update the eject button...
|
||||
|
||||
NSURL *url = [(NSPathControl *)sender URL];
|
||||
NSInteger tag = [sender tag] - 1;
|
||||
|
||||
switch(tag) {
|
||||
|
||||
case kIndexFloppy525:
|
||||
case kIndexFloppy35:
|
||||
case kIndexHardDrive:
|
||||
case kIndexCDROM:
|
||||
case kIndexCassette:
|
||||
case kIndexDiskImage:
|
||||
if (url) {
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
[nc postNotificationName: kNotificationDiskImageAdded object: url];
|
||||
}
|
||||
break;
|
||||
|
||||
// not disk images or don't use a path control.
|
||||
case kIndexPicture:
|
||||
case kIndexMidiIn:
|
||||
case kIndexMidiOut:
|
||||
case kIndexBitBanger:
|
||||
default: break;
|
||||
if (url) {
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
[nc postNotificationName: @"DiskImageAdded" object: url];
|
||||
}
|
||||
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
-(IBAction)textAction: (id)sender {
|
||||
[self rebuildArgs];
|
||||
}
|
||||
- (IBAction)midiAction:(id)sender {
|
||||
[self rebuildArgs];
|
||||
}
|
||||
|
||||
-(IBAction)resetMedia:(id)sender {
|
||||
[self resetDiskImages];
|
||||
}
|
||||
|
||||
|
||||
|
||||
-(void)magicRouteNotification: (NSNotification *)notification {
|
||||
NSDictionary *userInfo = [notification userInfo];
|
||||
id path = [userInfo objectForKey: @"path"];
|
||||
|
||||
if ([path isKindOfClass: [NSURL class]]) {
|
||||
[self smartRouteURL: path];
|
||||
return;
|
||||
}
|
||||
|
||||
if ([path isKindOfClass: [NSString class]]) {
|
||||
NSURL *url = [NSURL fileURLWithPath: path];
|
||||
[self smartRouteURL: url];
|
||||
return;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* given a file, add it to the media list.
|
||||
* TODO - how to handle if full or media type missing?
|
||||
*/
|
||||
-(BOOL)smartRouteURL: (NSURL *)url {
|
||||
|
||||
if (!url) return NO;
|
||||
|
||||
MediaType mt = ClassifyMediaFile(url);
|
||||
if (mt < 1) return NO; // unknown / error.
|
||||
|
||||
unsigned ix = 0;
|
||||
switch(mt) {
|
||||
case MediaType_3_5: ix = kIndexFloppy35; break;
|
||||
case MediaType_5_25: ix = kIndexFloppy525; break;
|
||||
case MediaType_Cassette: ix = kIndexCassette; break;
|
||||
case MediaType_HardDisk: ix = kIndexHardDrive; break;
|
||||
case MediaType_CDROM: ix = kIndexCDROM; break;
|
||||
|
||||
case MediaType_Picture: ix = kIndexPicture; break;
|
||||
case MediaType_MIDI: // ix = kIndexMidiIn; break;
|
||||
case MediaTypeError:
|
||||
case MediaTypeUnknown:
|
||||
return NO;
|
||||
}
|
||||
|
||||
[_outlineView beginUpdates];
|
||||
// todo -- check root, insert if necessary?
|
||||
MediaCategory *cat = _data[ix];
|
||||
[cat addURL: url];
|
||||
[_outlineView endUpdates];
|
||||
|
||||
[self rebuildArgs];
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(BOOL)smartRouteFile: (NSString *)file {
|
||||
return NO;
|
||||
}
|
||||
|
||||
@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", @"midiin", @"midiout", @"pic"
|
||||
};
|
||||
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 0
|
||||
// hmmm... should rely on machine/slots to set media
|
||||
// so it doesn't go out of sync after an update.
|
||||
NSDictionary *d = [bookmark objectForKey: @"media"];
|
||||
Media m = EmptyMedia;
|
||||
|
||||
if (d) m = MediaFromDictionary(d);
|
||||
[self setMedia: m];
|
||||
#endif
|
||||
|
||||
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 || ix == kIndexMidiOut || ix == kIndexMidiIn) {
|
||||
[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 || ix == kIndexMidiOut || ix == kIndexMidiIn) {
|
||||
[item setString: path];
|
||||
} else {
|
||||
NSURL *url = [NSURL fileURLWithPath: path];
|
||||
[item setUrl: url];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
static void CompressArray(NSMutableArray *array) {
|
||||
// reset all media
|
||||
[self resetDiskImages];
|
||||
|
||||
for(;;) {
|
||||
NSString *s = [array lastObject];
|
||||
if (!s) return;
|
||||
if ([s length]) return;
|
||||
[array removeLastObject];
|
||||
// if order of indexes change, would need to do a version check.
|
||||
|
||||
NSArray *media = [bookmark objectForKey: @"media"];
|
||||
unsigned ix = 0;
|
||||
for (NSArray *a in 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++];
|
||||
NSURL *url = nil;
|
||||
if ([path length])
|
||||
url = [NSURL fileURLWithPath: path];
|
||||
|
||||
[item setUrl: url];
|
||||
}
|
||||
}
|
||||
|
||||
// add will load bookmark / did load bookmark to block all the rebuilding ?
|
||||
[self rebuildRoot];
|
||||
[self rebuildArgs];
|
||||
return YES;
|
||||
|
||||
}
|
||||
|
||||
-(BOOL)saveBookmark: (NSMutableDictionary *)bookmark {
|
||||
|
||||
|
||||
NSMutableDictionary *media = [NSMutableDictionary new];
|
||||
NSMutableArray *media = [NSMutableArray arrayWithCapacity: CATEGORY_COUNT];
|
||||
|
||||
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 = @"";
|
||||
NSURL *url = [item url];
|
||||
NSString *s = @"";
|
||||
if (url)
|
||||
s = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
|
||||
[array addObject: s];
|
||||
}
|
||||
|
||||
CompressArray(array);
|
||||
|
||||
if ([array count])
|
||||
[media setObject: array forKey: BookmarkStrings[ix]];
|
||||
[media addObject: array];
|
||||
}
|
||||
|
||||
[bookmark setObject: media forKey: @"media"];
|
||||
@@ -996,4 +746,11 @@ static void CompressArray(NSMutableArray *array) {
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(void)willLoadBookmark:(NSDictionary *)bookmark {
|
||||
_loadingBookmark = YES;
|
||||
}
|
||||
-(void)didLoadBookmark:(NSDictionary *)bookmark {
|
||||
_loadingBookmark = NO;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
//
|
||||
// MidiManager.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 8/6/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef MidiManager_h
|
||||
#define MidiManager_h
|
||||
|
||||
|
||||
extern NSString *kMidiSourcesChangedNotification;
|
||||
extern NSString *kMidiDestinationsChangedNotification;
|
||||
|
||||
@interface MidiManager : NSObject
|
||||
|
||||
@property NSArray *sources;
|
||||
@property NSArray *destinations;
|
||||
|
||||
+(instancetype)sharedManager;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* MidiManager_h */
|
||||
@@ -1,153 +0,0 @@
|
||||
//
|
||||
// Midi.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 8/6/2021.
|
||||
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreMIDI/CoreMIDI.h>
|
||||
|
||||
#import "MidiManager.h"
|
||||
|
||||
static NSArray *MidiSources(void) {
|
||||
|
||||
ItemCount count = MIDIGetNumberOfSources();
|
||||
if (count <= 0) return @[];
|
||||
|
||||
NSMutableArray *rv = [NSMutableArray arrayWithCapacity: count + 1];
|
||||
|
||||
MIDIEndpointRef ep;
|
||||
for(int i = 0; i < count; ++i) {
|
||||
ep = MIDIGetSource(i);
|
||||
if (!ep) continue;
|
||||
|
||||
// https://developer.apple.com/library/archive/qa/qa1374/_index.html
|
||||
CFStringRef str = NULL;
|
||||
MIDIObjectGetStringProperty(ep, kMIDIPropertyDisplayName, &str);
|
||||
|
||||
if (str) {
|
||||
[rv addObject: (__bridge id _Nonnull)(str)];
|
||||
CFRelease(str);
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
static NSArray *MidiDestinations(void) {
|
||||
|
||||
ItemCount count = MIDIGetNumberOfDestinations();
|
||||
if (count <= 0) return @[];
|
||||
|
||||
NSMutableArray *rv = [NSMutableArray arrayWithCapacity: count + 1];
|
||||
|
||||
MIDIEndpointRef ep;
|
||||
for(int i = 0; i < count; ++i) {
|
||||
ep = MIDIGetDestination(i);
|
||||
if (!ep) continue;
|
||||
|
||||
// https://developer.apple.com/library/archive/qa/qa1374/_index.html
|
||||
CFStringRef str = NULL;
|
||||
MIDIObjectGetStringProperty(ep, kMIDIPropertyDisplayName, &str);
|
||||
|
||||
if (str) {
|
||||
[rv addObject: (__bridge id _Nonnull)(str)];
|
||||
CFRelease(str);
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
NSString *kMidiSourcesChangedNotification = @"Midi Sources Changed";
|
||||
NSString *kMidiDestinationsChangedNotification = @"Midi Destinations Changed";
|
||||
|
||||
|
||||
@interface MidiManager () {
|
||||
MIDIClientRef _client;
|
||||
}
|
||||
|
||||
-(void)objectAddRemove: (const MIDIObjectAddRemoveNotification *)message;
|
||||
-(void)objectPropertyChanged: (const MIDIObjectPropertyChangeNotification *)message;
|
||||
@end
|
||||
|
||||
|
||||
static MidiManager *singleton = nil;
|
||||
@implementation MidiManager
|
||||
|
||||
-(void)awakeFromNib {
|
||||
if (!singleton) singleton = self;
|
||||
}
|
||||
|
||||
+(instancetype)sharedManager {
|
||||
if (!singleton) singleton = [MidiManager new];
|
||||
return singleton;
|
||||
}
|
||||
|
||||
-(instancetype)init {
|
||||
|
||||
if (singleton) return singleton;
|
||||
|
||||
OSStatus status;
|
||||
|
||||
|
||||
status = MIDIClientCreateWithBlock(
|
||||
CFSTR("serial_midi"),
|
||||
&_client,
|
||||
^(const MIDINotification *message){
|
||||
switch(message->messageID) {
|
||||
case kMIDIMsgObjectAdded:
|
||||
case kMIDIMsgObjectRemoved:
|
||||
[self objectAddRemove: (const MIDIObjectAddRemoveNotification *)message];
|
||||
break;
|
||||
case kMIDIMsgPropertyChanged:
|
||||
[self objectPropertyChanged: (const MIDIObjectPropertyChangeNotification *)message];
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
_sources = MidiSources();
|
||||
_destinations = MidiDestinations();
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)objectAddRemove: (const MIDIObjectAddRemoveNotification *)message {
|
||||
|
||||
const MIDIObjectAddRemoveNotification *m = (const MIDIObjectAddRemoveNotification *)message;
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
|
||||
if (m->childType == kMIDIObjectType_Source) {
|
||||
[self setSources: MidiSources()];
|
||||
[nc postNotificationName: kMidiSourcesChangedNotification object: self];
|
||||
}
|
||||
|
||||
if (m->childType == kMIDIObjectType_Destination) {
|
||||
[self setDestinations: MidiDestinations()];
|
||||
[nc postNotificationName: kMidiDestinationsChangedNotification object: self];
|
||||
}
|
||||
|
||||
}
|
||||
-(void)objectPropertyChanged: (const MIDIObjectPropertyChangeNotification *)message {
|
||||
|
||||
const MIDIObjectPropertyChangeNotification *m = (const MIDIObjectPropertyChangeNotification *)message;
|
||||
if (m->propertyName == kMIDIPropertyDisplayName) {
|
||||
[self setSources: MidiSources()];
|
||||
[self setDestinations: MidiDestinations()];
|
||||
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
[nc postNotificationName: kMidiSourcesChangedNotification object: self];
|
||||
[nc postNotificationName: kMidiDestinationsChangedNotification object: self];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-(void)dealloc {
|
||||
|
||||
if (_client)
|
||||
MIDIClientDispose(_client);
|
||||
}
|
||||
@end
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// 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
|
||||
@@ -1,234 +0,0 @@
|
||||
//
|
||||
// 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
|
||||
@@ -51,30 +51,25 @@
|
||||
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);
|
||||
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) {
|
||||
function macbook(onoff) {
|
||||
var nodes = document.querySelectorAll("[data-macbook]");
|
||||
nodes.forEach( function(e) {
|
||||
nodes.forEach( (e) => {
|
||||
var m = (e.dataset.macbook == "true");
|
||||
e.hidden = m ^ onoff;
|
||||
});
|
||||
}
|
||||
window.addEventListener('load', function(event) {
|
||||
window.addEventListener('load', (event)=> {
|
||||
macbook(false);
|
||||
|
||||
var e = document.getElementById('macbook');
|
||||
if (e) {
|
||||
e.checked = false;
|
||||
e.addEventListener('click', function (event) {
|
||||
e.addEventListener('click', (event) => {
|
||||
macbook(e.checked);
|
||||
});
|
||||
}
|
||||
@@ -104,17 +99,14 @@
|
||||
<td>Toggle full screen mode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<span data-macbook=false><kbd>F12</kbd></span>
|
||||
<span data-macbook=true><kbd>Fn</kbd>+<kbd>F12</kbd></span>
|
||||
</td>
|
||||
<td><kbd>F12</kbd></td>
|
||||
<td>Reset Key</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h1>Partial UI Mode</h1>
|
||||
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width: 14em;" />
|
||||
|
||||
+114
-604
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,543 +0,0 @@
|
||||
<?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>ace500</string>
|
||||
<key>description</key>
|
||||
<string>Franklin ACE 500</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>560</integer>
|
||||
<integer>384</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>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>gameio</string>
|
||||
<key>description</key>
|
||||
<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>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>picture</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</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>name</key>
|
||||
<string>modem</string>
|
||||
<key>description</key>
|
||||
<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>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</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>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<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>name</key>
|
||||
<string>rs232_patch_box</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:dce</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>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>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</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/>
|
||||
<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>default</key>
|
||||
<false/>
|
||||
<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>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>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<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>name</key>
|
||||
<string>apple2_flop_orig.xml</string>
|
||||
<key>filter</key>
|
||||
<string>A2C</string>
|
||||
</dict>
|
||||
<string>apple2_flop_misc.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
+26
-99
@@ -37,41 +37,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>bios</string>
|
||||
<key>description</key>
|
||||
<string>ROM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—Default—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>v1</string>
|
||||
<key>description</key>
|
||||
<string>Version 1</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>v2</string>
|
||||
<key>description</key>
|
||||
<string>Version 2</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>debug</string>
|
||||
<key>description</key>
|
||||
<string>Debug</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sl2</string>
|
||||
@@ -110,6 +75,11 @@
|
||||
<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>
|
||||
@@ -179,6 +149,11 @@
|
||||
<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>
|
||||
@@ -244,6 +219,11 @@
|
||||
<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>
|
||||
@@ -311,6 +291,11 @@
|
||||
<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>
|
||||
@@ -376,6 +361,11 @@
|
||||
<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>
|
||||
@@ -486,7 +476,7 @@
|
||||
<key>value</key>
|
||||
<string>lx810l</string>
|
||||
<key>description</key>
|
||||
<string>Epson LX-810L</string>
|
||||
<string>Espon LX-810L</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -526,69 +516,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>agat7_flop</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>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>: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>name</key>
|
||||
<string>agat_fdc</string>
|
||||
|
||||
+79
-174
@@ -37,35 +37,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>bios</string>
|
||||
<key>description</key>
|
||||
<string>ROM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—Default—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>v1</string>
|
||||
<key>description</key>
|
||||
<string>Version 1</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>v2</string>
|
||||
<key>description</key>
|
||||
<string>Version 2</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sl1</string>
|
||||
@@ -112,14 +83,24 @@
|
||||
<string>Agat-9 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat9_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>diskiing</string>
|
||||
<string>diskii</string>
|
||||
<key>description</key>
|
||||
<string>Apple Disk II NG controller (16-sector)</string>
|
||||
<string>Apple Disk II controller</string>
|
||||
<key>devname</key>
|
||||
<string>a2diskiing</string>
|
||||
<string>a2diskii</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -177,14 +158,24 @@
|
||||
<string>Agat-9 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat9_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>diskiing</string>
|
||||
<string>diskii</string>
|
||||
<key>description</key>
|
||||
<string>Apple Disk II NG controller (16-sector)</string>
|
||||
<string>Apple Disk II controller</string>
|
||||
<key>devname</key>
|
||||
<string>a2diskiing</string>
|
||||
<string>a2diskii</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -242,14 +233,24 @@
|
||||
<string>Agat-9 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat9_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>diskiing</string>
|
||||
<string>diskii</string>
|
||||
<key>description</key>
|
||||
<string>Apple Disk II NG controller (16-sector)</string>
|
||||
<string>Apple Disk II controller</string>
|
||||
<key>devname</key>
|
||||
<string>a2diskiing</string>
|
||||
<string>a2diskii</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -307,14 +308,24 @@
|
||||
<string>Agat-9 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat9_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>diskiing</string>
|
||||
<string>diskii</string>
|
||||
<key>description</key>
|
||||
<string>Apple Disk II NG controller (16-sector)</string>
|
||||
<string>Apple Disk II controller</string>
|
||||
<key>devname</key>
|
||||
<string>a2diskiing</string>
|
||||
<string>a2diskii</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -374,14 +385,24 @@
|
||||
<string>Agat-9 140K floppy card</string>
|
||||
<key>devname</key>
|
||||
<string>agat9_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>diskiing</string>
|
||||
<string>diskii</string>
|
||||
<key>description</key>
|
||||
<string>Apple Disk II NG controller (16-sector)</string>
|
||||
<string>Apple Disk II controller</string>
|
||||
<key>devname</key>
|
||||
<string>a2diskiing</string>
|
||||
<string>a2diskii</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -441,14 +462,24 @@
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>agat9_flop</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>diskiing</string>
|
||||
<string>diskii</string>
|
||||
<key>description</key>
|
||||
<string>Apple Disk II NG controller (16-sector)</string>
|
||||
<string>Apple Disk II controller</string>
|
||||
<key>devname</key>
|
||||
<string>a2diskiing</string>
|
||||
<string>a2diskii</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -463,69 +494,6 @@
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>a2diskiing</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>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>: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>name</key>
|
||||
<string>a7ports</string>
|
||||
@@ -604,7 +572,7 @@
|
||||
<key>value</key>
|
||||
<string>lx810l</string>
|
||||
<key>description</key>
|
||||
<string>Epson LX-810L</string>
|
||||
<string>Espon LX-810L</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
@@ -644,69 +612,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>agat9_flop</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>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>: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>name</key>
|
||||
<string>agat_fdc</string>
|
||||
|
||||
+113
-603
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
+113
-632
File diff suppressed because it is too large
Load Diff
@@ -92,11 +92,6 @@
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>devname</key>
|
||||
<string>a2ceyes</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>picture</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -147,14 +142,6 @@
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
@@ -178,11 +165,6 @@
|
||||
<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>
|
||||
@@ -191,11 +173,6 @@
|
||||
<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>
|
||||
@@ -286,14 +263,6 @@
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
@@ -317,11 +286,6 @@
|
||||
<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>
|
||||
@@ -330,11 +294,6 @@
|
||||
<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>
|
||||
@@ -452,150 +411,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>rs232_patch_box</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:dce</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>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>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</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/>
|
||||
<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>default</key>
|
||||
<false/>
|
||||
<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>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>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
<string>Apple //c Plus</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
<key>floppy_3_5</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
@@ -75,25 +79,6 @@
|
||||
</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>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>gameio</string>
|
||||
@@ -132,11 +117,6 @@
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>devname</key>
|
||||
<string>a2ceyes</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>picture</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -187,14 +167,6 @@
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
@@ -218,11 +190,6 @@
|
||||
<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>
|
||||
@@ -231,11 +198,6 @@
|
||||
<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>
|
||||
@@ -326,14 +288,6 @@
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
@@ -357,11 +311,6 @@
|
||||
<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>
|
||||
@@ -370,11 +319,6 @@
|
||||
<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>
|
||||
@@ -429,321 +373,6 @@
|
||||
</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>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>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>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>fdc: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>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: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>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>rs232_patch_box</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:dce</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>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>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</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/>
|
||||
<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>default</key>
|
||||
<false/>
|
||||
<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>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>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
|
||||
+113
-1341
File diff suppressed because it is too large
Load Diff
+113
-1341
File diff suppressed because it is too large
Load Diff
+113
-1341
File diff suppressed because it is too large
Load Diff
+113
-1341
File diff suppressed because it is too large
Load Diff
+113
-1341
File diff suppressed because it is too large
Load Diff
+113
-1341
File diff suppressed because it is too large
Load Diff
+113
-1341
File diff suppressed because it is too large
Load Diff
+23
-1254
File diff suppressed because it is too large
Load Diff
+23
-1254
File diff suppressed because it is too large
Load Diff
+23
-1254
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
@@ -55,35 +55,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>bios</string>
|
||||
<key>description</key>
|
||||
<string>ROM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—Default—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>original</string>
|
||||
<key>description</key>
|
||||
<string>Apple /// boot ROM</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>soshd</string>
|
||||
<key>description</key>
|
||||
<string>Rob Justice SOSHDBOOT</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
@@ -130,7 +101,7 @@
|
||||
<key>value</key>
|
||||
<string>cffa2</string>
|
||||
<key>description</key>
|
||||
<string>CFFA 2.0 Compact Flash (6502 firmware)</string>
|
||||
<string>CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)</string>
|
||||
<key>devname</key>
|
||||
<string>a2cffa02</string>
|
||||
</dict>
|
||||
@@ -142,22 +113,6 @@
|
||||
<key>disabled</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>grafex</string>
|
||||
<key>description</key>
|
||||
<string>Grafex-32</string>
|
||||
<key>devname</key>
|
||||
<string>a2grafex</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>softcard3</string>
|
||||
<key>description</key>
|
||||
<string>Microsoft SoftCard ///</string>
|
||||
<key>devname</key>
|
||||
<string>softcard3</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>focusdrive</string>
|
||||
@@ -174,14 +129,6 @@
|
||||
<key>devname</key>
|
||||
<string>a2aplcrd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard Sound/Speech I</string>
|
||||
<key>devname</key>
|
||||
<string>a2mockbd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>thclock</string>
|
||||
@@ -190,14 +137,6 @@
|
||||
<key>devname</key>
|
||||
<string>a2thunpl</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>titan3plus2</string>
|
||||
<key>description</key>
|
||||
<string>Titan /// Plus //</string>
|
||||
<key>devname</key>
|
||||
<string>titan3p2</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -227,7 +166,7 @@
|
||||
<key>value</key>
|
||||
<string>cffa2</string>
|
||||
<key>description</key>
|
||||
<string>CFFA 2.0 Compact Flash (6502 firmware)</string>
|
||||
<string>CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)</string>
|
||||
<key>devname</key>
|
||||
<string>a2cffa02</string>
|
||||
</dict>
|
||||
@@ -239,22 +178,6 @@
|
||||
<key>disabled</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>grafex</string>
|
||||
<key>description</key>
|
||||
<string>Grafex-32</string>
|
||||
<key>devname</key>
|
||||
<string>a2grafex</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>softcard3</string>
|
||||
<key>description</key>
|
||||
<string>Microsoft SoftCard ///</string>
|
||||
<key>devname</key>
|
||||
<string>softcard3</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>focusdrive</string>
|
||||
@@ -271,14 +194,6 @@
|
||||
<key>devname</key>
|
||||
<string>a2aplcrd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard Sound/Speech I</string>
|
||||
<key>devname</key>
|
||||
<string>a2mockbd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>thclock</string>
|
||||
@@ -287,14 +202,6 @@
|
||||
<key>devname</key>
|
||||
<string>a2thunpl</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>titan3plus2</string>
|
||||
<key>description</key>
|
||||
<string>Titan /// Plus //</string>
|
||||
<key>devname</key>
|
||||
<string>titan3p2</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -324,7 +231,7 @@
|
||||
<key>value</key>
|
||||
<string>cffa2</string>
|
||||
<key>description</key>
|
||||
<string>CFFA 2.0 Compact Flash (6502 firmware)</string>
|
||||
<string>CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)</string>
|
||||
<key>devname</key>
|
||||
<string>a2cffa02</string>
|
||||
</dict>
|
||||
@@ -336,22 +243,6 @@
|
||||
<key>disabled</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>grafex</string>
|
||||
<key>description</key>
|
||||
<string>Grafex-32</string>
|
||||
<key>devname</key>
|
||||
<string>a2grafex</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>softcard3</string>
|
||||
<key>description</key>
|
||||
<string>Microsoft SoftCard ///</string>
|
||||
<key>devname</key>
|
||||
<string>softcard3</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>focusdrive</string>
|
||||
@@ -368,14 +259,6 @@
|
||||
<key>devname</key>
|
||||
<string>a2aplcrd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard Sound/Speech I</string>
|
||||
<key>devname</key>
|
||||
<string>a2mockbd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>thclock</string>
|
||||
@@ -384,14 +267,6 @@
|
||||
<key>devname</key>
|
||||
<string>a2thunpl</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>titan3plus2</string>
|
||||
<key>description</key>
|
||||
<string>Titan /// Plus //</string>
|
||||
<key>devname</key>
|
||||
<string>titan3p2</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -421,7 +296,7 @@
|
||||
<key>value</key>
|
||||
<string>cffa2</string>
|
||||
<key>description</key>
|
||||
<string>CFFA 2.0 Compact Flash (6502 firmware)</string>
|
||||
<string>CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)</string>
|
||||
<key>devname</key>
|
||||
<string>a2cffa02</string>
|
||||
</dict>
|
||||
@@ -433,22 +308,6 @@
|
||||
<key>disabled</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>grafex</string>
|
||||
<key>description</key>
|
||||
<string>Grafex-32</string>
|
||||
<key>devname</key>
|
||||
<string>a2grafex</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>softcard3</string>
|
||||
<key>description</key>
|
||||
<string>Microsoft SoftCard ///</string>
|
||||
<key>devname</key>
|
||||
<string>softcard3</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>focusdrive</string>
|
||||
@@ -465,14 +324,6 @@
|
||||
<key>devname</key>
|
||||
<string>a2aplcrd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard Sound/Speech I</string>
|
||||
<key>devname</key>
|
||||
<string>a2mockbd</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>thclock</string>
|
||||
@@ -481,14 +332,6 @@
|
||||
<key>devname</key>
|
||||
<string>a2thunpl</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>titan3plus2</string>
|
||||
<key>description</key>
|
||||
<string>Titan /// Plus //</string>
|
||||
<key>devname</key>
|
||||
<string>titan3p2</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
@@ -530,14 +373,6 @@
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
@@ -561,11 +396,6 @@
|
||||
<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>
|
||||
@@ -574,11 +404,6 @@
|
||||
<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>
|
||||
@@ -948,19 +773,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1002,19 +814,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1056,19 +855,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1110,19 +896,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1164,19 +937,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1218,19 +978,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1272,19 +1019,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1315,150 +1049,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>rs232_patch_box</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:dce</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>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>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</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/>
|
||||
<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>default</key>
|
||||
<false/>
|
||||
<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>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>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
@@ -1529,65 +1119,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>titan3p2</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:gameio</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>default</key>
|
||||
<false/>
|
||||
</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/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>picture</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>gizmo</string>
|
||||
<key>description</key>
|
||||
<string>HAL Labs Gizmo</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
|
||||
+113
-603
File diff suppressed because it is too large
Load Diff
+83
-1189
File diff suppressed because it is too large
Load Diff
+83
-1189
File diff suppressed because it is too large
Load Diff
+83
-1189
File diff suppressed because it is too large
Load Diff
+83
-1224
File diff suppressed because it is too large
Load Diff
+83
-1189
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,8 @@
|
||||
<string>Laser 128ex2 (version 6.1)</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>floppy_5_25</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
@@ -75,25 +77,6 @@
|
||||
</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>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>gameio</string>
|
||||
@@ -132,11 +115,6 @@
|
||||
<string>Digital Vision ComputerEyes</string>
|
||||
<key>devname</key>
|
||||
<string>a2ceyes</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>picture</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -187,14 +165,6 @@
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
@@ -218,11 +188,6 @@
|
||||
<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>
|
||||
@@ -231,11 +196,6 @@
|
||||
<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>
|
||||
@@ -326,14 +286,6 @@
|
||||
<key>devname</key>
|
||||
<string>rs_serial_printer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>loopback</string>
|
||||
@@ -357,11 +309,6 @@
|
||||
<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>
|
||||
@@ -370,11 +317,6 @@
|
||||
<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>
|
||||
@@ -429,213 +371,6 @@
|
||||
</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>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>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>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>name</key>
|
||||
<string>rs232_patch_box</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:dce</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>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>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</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/>
|
||||
<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>default</key>
|
||||
<false/>
|
||||
<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>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>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>sunkbd_adaptor</string>
|
||||
|
||||
+40
-1079
File diff suppressed because it is too large
Load Diff
@@ -1,46 +0,0 @@
|
||||
<?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>las3000</string>
|
||||
<key>description</key>
|
||||
<string>Laser 3000</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>560</integer>
|
||||
<integer>384</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>192</integer>
|
||||
<key>description</key>
|
||||
<string>192K</string>
|
||||
<key>value</key>
|
||||
<string>192K</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>devices</key>
|
||||
<array>
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
+41
-1115
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+113
-603
File diff suppressed because it is too large
Load Diff
+132
-249
@@ -121,37 +121,21 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -185,6 +169,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -193,6 +185,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -273,35 +273,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -335,6 +319,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -343,6 +335,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -423,35 +423,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -485,6 +469,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -493,6 +485,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -573,35 +573,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -635,6 +619,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -643,6 +635,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -723,35 +723,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -785,6 +769,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -793,6 +785,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -873,35 +873,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -935,6 +919,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -943,6 +935,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -1135,19 +1135,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1189,19 +1176,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1243,19 +1217,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1297,19 +1258,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1351,19 +1299,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1405,19 +1340,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1459,19 +1381,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1527,11 +1436,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1570,11 +1474,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1606,11 +1505,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1642,11 +1536,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1678,11 +1567,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1701,7 +1585,6 @@
|
||||
<array>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdflop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -35,41 +35,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>bios</string>
|
||||
<key>description</key>
|
||||
<string>ROM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—Default—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>v3</string>
|
||||
<key>description</key>
|
||||
<string>Loud Harmonicas</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>v2</string>
|
||||
<key>description</key>
|
||||
<string>Lonely Heifers</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>v1</string>
|
||||
<key>description</key>
|
||||
<string>Lonely Hearts</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
|
||||
@@ -1,974 +0,0 @@
|
||||
<?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>maccclas</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh Color Classic</string>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
</dict>
|
||||
<key>resolution</key>
|
||||
<array>
|
||||
<integer>512</integer>
|
||||
<integer>384</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>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<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>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</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>name</key>
|
||||
<string>modem</string>
|
||||
<key>description</key>
|
||||
<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>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</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>devices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<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>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</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>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</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>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</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>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</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>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</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>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</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>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</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>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>rs232_patch_box</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:dce</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>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>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</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/>
|
||||
<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>default</key>
|
||||
<false/>
|
||||
<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>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>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<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>mac_hdd.xml</string>
|
||||
<string>mac_hdflop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
+13
-586
@@ -23,6 +23,16 @@
|
||||
<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>
|
||||
@@ -31,7 +41,7 @@
|
||||
<key>value</key>
|
||||
<string>4M</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>intValue</key>
|
||||
@@ -61,7 +71,7 @@
|
||||
<key>value</key>
|
||||
<string>10M</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
@@ -84,284 +94,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>printer</string>
|
||||
<key>description</key>
|
||||
<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>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</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>name</key>
|
||||
<string>modem</string>
|
||||
<key>description</key>
|
||||
<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>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</string>
|
||||
<key>devname</key>
|
||||
<string>rs232_patch_box</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>devices</key>
|
||||
<array>
|
||||
@@ -491,19 +223,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -545,19 +264,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -599,19 +305,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -653,19 +346,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -707,19 +387,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -761,19 +428,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -815,19 +469,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -858,225 +499,11 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>rs232_patch_box</string>
|
||||
<key>slots</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>:dce</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>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>rs_printer</string>
|
||||
<key>description</key>
|
||||
<string>Radio Shack Serial Printer</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>patch</string>
|
||||
<key>description</key>
|
||||
<string>RS-232 Patch Box</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/>
|
||||
<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>default</key>
|
||||
<false/>
|
||||
<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>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>mockingboard</string>
|
||||
<key>description</key>
|
||||
<string>Sweet Micro Systems Mockingboard D</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>swtpc8212</string>
|
||||
<key>description</key>
|
||||
<string>SWTPC8212 Terminal</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<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>mac_hdd.xml</string>
|
||||
<string>mac_hdflop.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -203,19 +203,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -257,19 +244,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -311,19 +285,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -365,19 +326,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -419,19 +367,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -473,19 +408,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -527,19 +449,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -575,7 +484,6 @@
|
||||
<array>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_hdflop.xml</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
+132
-277
@@ -85,35 +85,6 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>bios</string>
|
||||
<key>description</key>
|
||||
<string>ROM</string>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string></string>
|
||||
<key>description</key>
|
||||
<string>—Default—</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>default</string>
|
||||
<key>description</key>
|
||||
<string>rev. B</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>original</string>
|
||||
<key>description</key>
|
||||
<string>rev. A</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>smartport</string>
|
||||
@@ -150,37 +121,21 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -214,6 +169,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -222,6 +185,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -302,35 +273,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -364,6 +319,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -372,6 +335,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -452,35 +423,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -514,6 +469,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -522,6 +485,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -602,35 +573,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -664,6 +619,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -672,6 +635,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -752,35 +723,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -814,6 +769,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -822,6 +785,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -902,35 +873,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -964,6 +919,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -972,6 +935,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -1164,19 +1135,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1218,19 +1176,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1272,19 +1217,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1326,19 +1258,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1380,19 +1299,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1434,19 +1340,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1488,19 +1381,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1556,11 +1436,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1599,11 +1474,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1635,11 +1505,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1671,11 +1536,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1707,11 +1567,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
|
||||
+66
-183
@@ -141,35 +141,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -203,6 +187,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -211,6 +203,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -291,35 +291,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -353,6 +337,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -361,6 +353,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -441,35 +441,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -503,6 +487,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -511,6 +503,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -703,19 +703,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -757,19 +744,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -811,19 +785,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -865,19 +826,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -919,19 +867,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -973,19 +908,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1027,19 +949,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1095,11 +1004,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1138,11 +1042,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1174,11 +1073,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1210,11 +1104,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1246,11 +1135,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1267,7 +1151,6 @@
|
||||
</array>
|
||||
<key>software</key>
|
||||
<array>
|
||||
<string>mac_hdflop.xml</string>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
</array>
|
||||
|
||||
+66
-183
@@ -121,37 +121,21 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>default</key>
|
||||
<true/>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -185,6 +169,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -193,6 +185,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -273,35 +273,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -335,6 +319,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -343,6 +335,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -423,35 +423,19 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc48</string>
|
||||
<string>48gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 4/8 (MDC 1.0.1)</string>
|
||||
<string>Apple 4*8 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc48</string>
|
||||
<string>nb_48gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>mdc824</string>
|
||||
<string>824gc</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh Display Card 8/24 (MDC 1.2)</string>
|
||||
<string>Apple 8*24 video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_mdc824</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II High Resolution Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Apple Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
<string>nb_824gc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -485,6 +469,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_btbug</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2hires</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Hi-Resolution video card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2hr</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>portrait</string>
|
||||
@@ -493,6 +485,14 @@
|
||||
<key>devname</key>
|
||||
<string>nb_wspt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>m2video</string>
|
||||
<key>description</key>
|
||||
<string>Macintosh II Video Card</string>
|
||||
<key>devname</key>
|
||||
<string>nb_m2vc</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>vikbw</string>
|
||||
@@ -685,19 +685,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -739,19 +726,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -793,19 +767,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -847,19 +808,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -901,19 +849,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -955,19 +890,6 @@
|
||||
<key>default</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1009,19 +931,6 @@
|
||||
<key>default</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>aplcdsc</string>
|
||||
<key>description</key>
|
||||
<string>Apple SCSI CD-ROM</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>cdrom</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
<string>cdrom</string>
|
||||
@@ -1077,11 +986,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1120,11 +1024,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1156,11 +1055,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1192,11 +1086,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1228,11 +1117,6 @@
|
||||
<string>RS232 Null Modem</string>
|
||||
<key>default</key>
|
||||
<false/>
|
||||
<key>media</key>
|
||||
<dict>
|
||||
<key>bitbanger</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>value</key>
|
||||
@@ -1251,7 +1135,6 @@
|
||||
<array>
|
||||
<string>mac_hdd.xml</string>
|
||||
<string>mac_flop.xml</string>
|
||||
<string>mac_hdflop.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