mirror of
https://github.com/ksherlock/ample.git
synced 2026-01-22 16:16:02 +00:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1d9a03175 | ||
|
|
8b2f4c762b | ||
|
|
ebdf8b9395 | ||
|
|
26dbdae365 | ||
|
|
fef59d29cf | ||
|
|
152197cae7 | ||
|
|
e73ff01c00 | ||
|
|
b262c8bf2f | ||
|
|
fe7c71e7c7 | ||
|
|
8264aa1515 | ||
|
|
cfe0e950c4 | ||
|
|
e512fb982a | ||
|
|
90be56f96d | ||
|
|
076af87f91 | ||
|
|
13529d130c | ||
|
|
b0ff495fd3 | ||
|
|
8c282596d6 | ||
|
|
fde5b664b4 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,6 @@
|
||||
dist
|
||||
embedded/mame64
|
||||
embedded/SDL2.framework
|
||||
build
|
||||
embedded/mame-data.tgz
|
||||
__pycache__
|
||||
|
||||
12
.travis.yml
Normal file
12
.travis.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
language: objective-c
|
||||
|
||||
osx_image:
|
||||
- xcode12
|
||||
- xcode11.3
|
||||
- xcode10.1
|
||||
xcode_project: Ample.xcodeproj
|
||||
xcode_scheme: Ample Lite
|
||||
|
||||
script:
|
||||
- set -o pipefail
|
||||
- xcodebuild -project "${TRAVIS_XCODE_PROJECT}" -target "Ample Lite" | xcpretty
|
||||
@@ -57,12 +57,30 @@
|
||||
B6109A4124F5F377005CB652 /* apple2cp.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1424F5F376005CB652 /* apple2cp.plist */; };
|
||||
B6109A4224F5F377005CB652 /* apple2p.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1524F5F376005CB652 /* apple2p.plist */; };
|
||||
B6109A4324F5F377005CB652 /* agat7.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1624F5F376005CB652 /* agat7.plist */; };
|
||||
B63C1B8B24FF4BF700511A71 /* Ample.m in Sources */ = {isa = PBXBuildFile; fileRef = B63C1B8A24FF4BF700511A71 /* Ample.m */; };
|
||||
B63C1B8C24FF4BF700511A71 /* Ample.m in Sources */ = {isa = PBXBuildFile; fileRef = B63C1B8A24FF4BF700511A71 /* Ample.m */; };
|
||||
B63C1B8E25004C6D00511A71 /* mame-data.tgz in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B8D25004C6D00511A71 /* mame-data.tgz */; };
|
||||
B63C1B90250088DD00511A71 /* roms.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B8F250088DC00511A71 /* roms.plist */; };
|
||||
B63C1B9425008A2700511A71 /* DownloadWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B63C1B9225008A2700511A71 /* DownloadWindowController.m */; };
|
||||
B63C1B9525008A2700511A71 /* DownloadWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B63C1B9225008A2700511A71 /* DownloadWindowController.m */; };
|
||||
B63C1B9625008A2700511A71 /* DownloadWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9325008A2700511A71 /* DownloadWindow.xib */; };
|
||||
B63C1B9725008A2700511A71 /* DownloadWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9325008A2700511A71 /* DownloadWindow.xib */; };
|
||||
B63C1B9D250192D800511A71 /* cece.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B98250192D700511A71 /* cece.plist */; };
|
||||
B63C1B9E250192D800511A71 /* cece.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B98250192D700511A71 /* cece.plist */; };
|
||||
B63C1B9F250192D800511A71 /* ceci.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B99250192D700511A71 /* ceci.plist */; };
|
||||
B63C1BA0250192D800511A71 /* ceci.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B99250192D700511A71 /* ceci.plist */; };
|
||||
B63C1BA1250192D800511A71 /* cecg.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9A250192D700511A71 /* cecg.plist */; };
|
||||
B63C1BA2250192D800511A71 /* cecg.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9A250192D700511A71 /* cecg.plist */; };
|
||||
B63C1BA3250192D800511A71 /* cec2000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9B250192D800511A71 /* cec2000.plist */; };
|
||||
B63C1BA4250192D800511A71 /* cec2000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9B250192D800511A71 /* cec2000.plist */; };
|
||||
B63C1BA5250192D800511A71 /* cecm.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9C250192D800511A71 /* cecm.plist */; };
|
||||
B63C1BA6250192D800511A71 /* cecm.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9C250192D800511A71 /* cecm.plist */; };
|
||||
B63C1BA8250192E600511A71 /* zijini.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1BA7250192E600511A71 /* zijini.plist */; };
|
||||
B63C1BA9250192E600511A71 /* zijini.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1BA7250192E600511A71 /* zijini.plist */; };
|
||||
B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64979C124EF6703008ABD20 /* MediaViewController.m */; };
|
||||
B64E15A924EA1D5300E8AD3D /* MachineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64E15A824EA1D5300E8AD3D /* MachineViewController.m */; };
|
||||
B65593B124ECB61800722E0C /* SlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B65593B024ECB61800722E0C /* SlotViewController.m */; };
|
||||
B658DBF324FB58EC0063AB5F /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6BA258624E99BEB005FB8FF /* Info.plist */; };
|
||||
B66236A924FD9A34006CABD7 /* PreferencesWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B66236A824FD9A34006CABD7 /* PreferencesWindowController.m */; };
|
||||
B66236B424FDA527006CABD7 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B66236B224FDA522006CABD7 /* SDL2.framework */; };
|
||||
B66236B524FDA527006CABD7 /* SDL2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B66236B224FDA522006CABD7 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
B66236BC24FDA72E006CABD7 /* mame64 in CopyFiles */ = {isa = PBXBuildFile; fileRef = B66236B724FDA686006CABD7 /* mame64 */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
B66236C124FDB7A6006CABD7 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = B66236BF24FDB7A6006CABD7 /* Credits.rtf */; };
|
||||
@@ -74,6 +92,69 @@
|
||||
B6D6DE3B24FACF4F00661A5F /* Defaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6D6DE3A24FACF4F00661A5F /* Defaults.plist */; };
|
||||
B6D6DE3E24FADF8B00661A5F /* LaunchWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6D6DE3C24FADF8B00661A5F /* LaunchWindow.xib */; };
|
||||
B6D6DE4124FADFAC00661A5F /* LaunchWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6D6DE4024FADFAC00661A5F /* LaunchWindowController.m */; };
|
||||
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 */; };
|
||||
B6E4B5B624FDE2670094A35C /* LogWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6004DEE24FB05D600D38596 /* LogWindowController.m */; };
|
||||
B6E4B5B724FDE2670094A35C /* PreferencesWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B66236A824FD9A34006CABD7 /* PreferencesWindowController.m */; };
|
||||
B6E4B5B824FDE2670094A35C /* SlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B65593B024ECB61800722E0C /* SlotViewController.m */; };
|
||||
B6E4B5BC24FDE2670094A35C /* apple2eeuk.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0624F5F372005CB652 /* apple2eeuk.plist */; };
|
||||
B6E4B5BD24FDE2670094A35C /* las128ex.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F724F5F36F005CB652 /* las128ex.plist */; };
|
||||
B6E4B5BE24FDE2670094A35C /* space84.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F024F5F36E005CB652 /* space84.plist */; };
|
||||
B6E4B5BF24FDE2670094A35C /* agat9.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1224F5F375005CB652 /* agat9.plist */; };
|
||||
B6E4B5C024FDE2670094A35C /* LaunchWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6D6DE3C24FADF8B00661A5F /* LaunchWindow.xib */; };
|
||||
B6E4B5C124FDE2670094A35C /* apple1.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0424F5F372005CB652 /* apple1.plist */; };
|
||||
B6E4B5C224FDE2670094A35C /* ace100.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0824F5F373005CB652 /* ace100.plist */; };
|
||||
B6E4B5C324FDE2670094A35C /* am64.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0724F5F372005CB652 /* am64.plist */; };
|
||||
B6E4B5C424FDE2670094A35C /* LogWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6004DEF24FB05D600D38596 /* LogWindow.xib */; };
|
||||
B6E4B5C524FDE2670094A35C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B6BA258124E99BEB005FB8FF /* Assets.xcassets */; };
|
||||
B6E4B5C624FDE2670094A35C /* apple2e.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099EA24F5F36E005CB652 /* apple2e.plist */; };
|
||||
B6E4B5C724FDE2670094A35C /* am100.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0F24F5F374005CB652 /* am100.plist */; };
|
||||
B6E4B5C824FDE2670094A35C /* laser2c.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F824F5F36F005CB652 /* laser2c.plist */; };
|
||||
B6E4B5C924FDE2670094A35C /* laser128.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1024F5F375005CB652 /* laser128.plist */; };
|
||||
B6E4B5CA24FDE2670094A35C /* apple2ep.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099FB24F5F370005CB652 /* apple2ep.plist */; };
|
||||
B6E4B5CB24FDE2670094A35C /* apple2ees.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099EC24F5F36E005CB652 /* apple2ees.plist */; };
|
||||
B6E4B5CC24FDE2670094A35C /* prav8c.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0C24F5F374005CB652 /* prav8c.plist */; };
|
||||
B6E4B5CD24FDE2670094A35C /* ivelultr.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099EF24F5F36E005CB652 /* ivelultr.plist */; };
|
||||
B6E4B5CE24FDE2670094A35C /* maxxi.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0B24F5F373005CB652 /* maxxi.plist */; };
|
||||
B6E4B5CF24FDE2670094A35C /* apple2eefr.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0124F5F371005CB652 /* apple2eefr.plist */; };
|
||||
B6E4B5D124FDE2670094A35C /* spectred.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099FF24F5F371005CB652 /* spectred.plist */; };
|
||||
B6E4B5D224FDE2670094A35C /* apple2cp.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1424F5F376005CB652 /* apple2cp.plist */; };
|
||||
B6E4B5D324FDE2670094A35C /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6BA258324E99BEB005FB8FF /* MainMenu.xib */; };
|
||||
B6E4B5D424FDE2670094A35C /* prav82.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0D24F5F374005CB652 /* prav82.plist */; };
|
||||
B6E4B5D524FDE2670094A35C /* apple2euk.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F324F5F36F005CB652 /* apple2euk.plist */; };
|
||||
B6E4B5D624FDE2670094A35C /* uniap2ti.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0224F5F371005CB652 /* uniap2ti.plist */; };
|
||||
B6E4B5D724FDE2670094A35C /* apple2c.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F124F5F36F005CB652 /* apple2c.plist */; };
|
||||
B6E4B5D824FDE2670094A35C /* microeng.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099ED24F5F36E005CB652 /* microeng.plist */; };
|
||||
B6E4B5D924FDE2670094A35C /* albert.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1124F5F375005CB652 /* albert.plist */; };
|
||||
B6E4B5DA24FDE2670094A35C /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = B66236BF24FDB7A6006CABD7 /* Credits.rtf */; };
|
||||
B6E4B5DB24FDE2670094A35C /* apple2p.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1524F5F376005CB652 /* apple2p.plist */; };
|
||||
B6E4B5DC24FDE2670094A35C /* hkc8800a.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099EB24F5F36E005CB652 /* hkc8800a.plist */; };
|
||||
B6E4B5DD24FDE2670094A35C /* apple2gsr0.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F624F5F36F005CB652 /* apple2gsr0.plist */; };
|
||||
B6E4B5DE24FDE2670094A35C /* mprof3.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F924F5F370005CB652 /* mprof3.plist */; };
|
||||
B6E4B5DF24FDE2670094A35C /* basis108.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0524F5F372005CB652 /* basis108.plist */; };
|
||||
B6E4B5E024FDE2670094A35C /* agat7.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1624F5F376005CB652 /* agat7.plist */; };
|
||||
B6E4B5E124FDE2670094A35C /* elppa.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099FE24F5F370005CB652 /* elppa.plist */; };
|
||||
B6E4B5E224FDE2670094A35C /* apple2gsr1.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0E24F5F374005CB652 /* apple2gsr1.plist */; };
|
||||
B6E4B5E324FDE2670094A35C /* Defaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6D6DE3A24FACF4F00661A5F /* Defaults.plist */; };
|
||||
B6E4B5E424FDE2670094A35C /* models.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F524F5F36F005CB652 /* models.plist */; };
|
||||
B6E4B5E524FDE2670094A35C /* craft2p.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A1324F5F375005CB652 /* craft2p.plist */; };
|
||||
B6E4B5E624FDE2670094A35C /* uniap2pt.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099EE24F5F36E005CB652 /* uniap2pt.plist */; };
|
||||
B6E4B5E724FDE2670094A35C /* las128e2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0A24F5F373005CB652 /* las128e2.plist */; };
|
||||
B6E4B5E824FDE2670094A35C /* MediaView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B61099E524F5F230005CB652 /* MediaView.xib */; };
|
||||
B6E4B5E924FDE2670094A35C /* uniap2en.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099FA24F5F370005CB652 /* uniap2en.plist */; };
|
||||
B6E4B5EA24FDE2670094A35C /* apple3.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099FD24F5F370005CB652 /* apple3.plist */; };
|
||||
B6E4B5EB24FDE2670094A35C /* apple2ee.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F424F5F36F005CB652 /* apple2ee.plist */; };
|
||||
B6E4B5EC24FDE2670094A35C /* dodo.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0924F5F373005CB652 /* dodo.plist */; };
|
||||
B6E4B5ED24FDE2670094A35C /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6D6DE3724FAC8B500661A5F /* Preferences.xib */; };
|
||||
B6E4B5EE24FDE2670094A35C /* SlotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B61099E324F5F230005CB652 /* SlotView.xib */; };
|
||||
B6E4B5EF24FDE2670094A35C /* apple2gs.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099FC24F5F370005CB652 /* apple2gs.plist */; };
|
||||
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 */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
@@ -98,6 +179,16 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B6E4B5F324FDE2670094A35C /* Embed Frameworks */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
);
|
||||
name = "Embed Frameworks";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
@@ -154,6 +245,19 @@
|
||||
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>"; };
|
||||
B63C1B8924FF4B7100511A71 /* Ample.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Ample.h; sourceTree = "<group>"; };
|
||||
B63C1B8A24FF4BF700511A71 /* Ample.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Ample.m; sourceTree = "<group>"; };
|
||||
B63C1B8D25004C6D00511A71 /* mame-data.tgz */ = {isa = PBXFileReference; lastKnownFileType = file; name = "mame-data.tgz"; path = "embedded/mame-data.tgz"; sourceTree = "<group>"; };
|
||||
B63C1B8F250088DC00511A71 /* roms.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = roms.plist; sourceTree = "<group>"; };
|
||||
B63C1B9125008A2700511A71 /* DownloadWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DownloadWindowController.h; sourceTree = "<group>"; };
|
||||
B63C1B9225008A2700511A71 /* DownloadWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DownloadWindowController.m; sourceTree = "<group>"; };
|
||||
B63C1B9325008A2700511A71 /* DownloadWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = DownloadWindow.xib; path = Base.lproj/DownloadWindow.xib; sourceTree = "<group>"; };
|
||||
B63C1B98250192D700511A71 /* cece.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = cece.plist; sourceTree = "<group>"; };
|
||||
B63C1B99250192D700511A71 /* ceci.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ceci.plist; sourceTree = "<group>"; };
|
||||
B63C1B9A250192D700511A71 /* cecg.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = cecg.plist; sourceTree = "<group>"; };
|
||||
B63C1B9B250192D800511A71 /* cec2000.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = cec2000.plist; sourceTree = "<group>"; };
|
||||
B63C1B9C250192D800511A71 /* cecm.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = cecm.plist; sourceTree = "<group>"; };
|
||||
B63C1BA7250192E600511A71 /* zijini.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = zijini.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>"; };
|
||||
B64E15A724EA1D5300E8AD3D /* MachineViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MachineViewController.h; sourceTree = "<group>"; };
|
||||
@@ -180,6 +284,7 @@
|
||||
B6D6DE3D24FADF8B00661A5F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchWindow.xib; sourceTree = "<group>"; };
|
||||
B6D6DE3F24FADFAC00661A5F /* LaunchWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LaunchWindowController.h; sourceTree = "<group>"; };
|
||||
B6D6DE4024FADFAC00661A5F /* LaunchWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LaunchWindowController.m; sourceTree = "<group>"; };
|
||||
B6E4B5FA24FDE2670094A35C /* Ample Lite.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Ample Lite.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -187,7 +292,13 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B66236B424FDA527006CABD7 /* SDL2.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B6E4B5B924FDE2670094A35C /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -206,6 +317,13 @@
|
||||
B64E15AF24EA365E00E8AD3D /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B63C1B8F250088DC00511A71 /* roms.plist */,
|
||||
B63C1B9B250192D800511A71 /* cec2000.plist */,
|
||||
B63C1B98250192D700511A71 /* cece.plist */,
|
||||
B63C1B9A250192D700511A71 /* cecg.plist */,
|
||||
B63C1B99250192D700511A71 /* ceci.plist */,
|
||||
B63C1B9C250192D800511A71 /* cecm.plist */,
|
||||
B63C1BA7250192E600511A71 /* zijini.plist */,
|
||||
B6109A0824F5F373005CB652 /* ace100.plist */,
|
||||
B6109A1624F5F376005CB652 /* agat7.plist */,
|
||||
B6109A1224F5F375005CB652 /* agat9.plist */,
|
||||
@@ -266,6 +384,7 @@
|
||||
B66236BD24FDA7EA006CABD7 /* Embedded Content */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B63C1B8D25004C6D00511A71 /* mame-data.tgz */,
|
||||
B66236B824FDA698006CABD7 /* mame64 */,
|
||||
B66236B224FDA522006CABD7 /* SDL2.framework */,
|
||||
);
|
||||
@@ -287,6 +406,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B6BA257B24E99BE9005FB8FF /* Ample.app */,
|
||||
B6E4B5FA24FDE2670094A35C /* Ample Lite.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -294,8 +414,12 @@
|
||||
B6BA257D24E99BE9005FB8FF /* Ample */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B63C1B9125008A2700511A71 /* DownloadWindowController.h */,
|
||||
B63C1B9225008A2700511A71 /* DownloadWindowController.m */,
|
||||
B6BA257E24E99BE9005FB8FF /* AppDelegate.h */,
|
||||
B6BA257F24E99BE9005FB8FF /* AppDelegate.m */,
|
||||
B63C1B8924FF4B7100511A71 /* Ample.h */,
|
||||
B63C1B8A24FF4BF700511A71 /* Ample.m */,
|
||||
B6D6DE3F24FADFAC00661A5F /* LaunchWindowController.h */,
|
||||
B6D6DE4024FADFAC00661A5F /* LaunchWindowController.m */,
|
||||
B65593B024ECB61800722E0C /* SlotViewController.m */,
|
||||
@@ -324,6 +448,7 @@
|
||||
B6D6DE4224FAEE8900661A5F /* Nibs */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B63C1B9325008A2700511A71 /* DownloadWindow.xib */,
|
||||
B66236BF24FDB7A6006CABD7 /* Credits.rtf */,
|
||||
B6D6DE3C24FADF8B00661A5F /* LaunchWindow.xib */,
|
||||
B6004DEF24FB05D600D38596 /* LogWindow.xib */,
|
||||
@@ -357,6 +482,24 @@
|
||||
productReference = B6BA257B24E99BE9005FB8FF /* Ample.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
B6E4B5AE24FDE2670094A35C /* Ample Lite */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = B6E4B5F724FDE2670094A35C /* Build configuration list for PBXNativeTarget "Ample Lite" */;
|
||||
buildPhases = (
|
||||
B6E4B5AF24FDE2670094A35C /* Sources */,
|
||||
B6E4B5B924FDE2670094A35C /* Frameworks */,
|
||||
B6E4B5BB24FDE2670094A35C /* Resources */,
|
||||
B6E4B5F324FDE2670094A35C /* Embed Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "Ample Lite";
|
||||
productName = MA2ME;
|
||||
productReference = B6E4B5FA24FDE2670094A35C /* Ample Lite.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
@@ -385,6 +528,7 @@
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
B6BA257A24E99BE9005FB8FF /* Ample */,
|
||||
B6E4B5AE24FDE2670094A35C /* Ample Lite */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@@ -396,8 +540,10 @@
|
||||
files = (
|
||||
B6109A3324F5F377005CB652 /* apple2eeuk.plist in Resources */,
|
||||
B6109A2424F5F377005CB652 /* las128ex.plist in Resources */,
|
||||
B63C1BA8250192E600511A71 /* zijini.plist in Resources */,
|
||||
B6109A1D24F5F377005CB652 /* space84.plist in Resources */,
|
||||
B6109A3F24F5F377005CB652 /* agat9.plist in Resources */,
|
||||
B63C1B9D250192D800511A71 /* cece.plist in Resources */,
|
||||
B6D6DE3E24FADF8B00661A5F /* LaunchWindow.xib in Resources */,
|
||||
B6109A3124F5F377005CB652 /* apple1.plist in Resources */,
|
||||
B6109A3524F5F377005CB652 /* ace100.plist in Resources */,
|
||||
@@ -414,7 +560,6 @@
|
||||
B6109A1C24F5F377005CB652 /* ivelultr.plist in Resources */,
|
||||
B6109A3824F5F377005CB652 /* maxxi.plist in Resources */,
|
||||
B6109A2E24F5F377005CB652 /* apple2eefr.plist in Resources */,
|
||||
B658DBF324FB58EC0063AB5F /* Info.plist in Resources */,
|
||||
B6109A2C24F5F377005CB652 /* spectred.plist in Resources */,
|
||||
B6109A4124F5F377005CB652 /* apple2cp.plist in Resources */,
|
||||
B6BA258524E99BEB005FB8FF /* MainMenu.xib in Resources */,
|
||||
@@ -428,20 +573,27 @@
|
||||
B6109A4224F5F377005CB652 /* apple2p.plist in Resources */,
|
||||
B6109A1824F5F377005CB652 /* hkc8800a.plist in Resources */,
|
||||
B6109A2324F5F377005CB652 /* apple2gsr0.plist in Resources */,
|
||||
B63C1BA1250192D800511A71 /* cecg.plist in Resources */,
|
||||
B63C1BA3250192D800511A71 /* cec2000.plist in Resources */,
|
||||
B6109A2624F5F377005CB652 /* mprof3.plist in Resources */,
|
||||
B63C1B9F250192D800511A71 /* ceci.plist in Resources */,
|
||||
B6109A3224F5F377005CB652 /* basis108.plist in Resources */,
|
||||
B6109A4324F5F377005CB652 /* agat7.plist in Resources */,
|
||||
B6109A2B24F5F377005CB652 /* elppa.plist in Resources */,
|
||||
B63C1B8E25004C6D00511A71 /* mame-data.tgz in Resources */,
|
||||
B6109A3B24F5F377005CB652 /* apple2gsr1.plist in Resources */,
|
||||
B63C1B9625008A2700511A71 /* DownloadWindow.xib in Resources */,
|
||||
B6D6DE3B24FACF4F00661A5F /* Defaults.plist in Resources */,
|
||||
B6109A2224F5F377005CB652 /* models.plist in Resources */,
|
||||
B6109A4024F5F377005CB652 /* craft2p.plist in Resources */,
|
||||
B6109A1B24F5F377005CB652 /* uniap2pt.plist in Resources */,
|
||||
B6109A3724F5F377005CB652 /* las128e2.plist in Resources */,
|
||||
B61099E824F5F231005CB652 /* MediaView.xib in Resources */,
|
||||
B63C1B90250088DD00511A71 /* roms.plist in Resources */,
|
||||
B6109A2724F5F377005CB652 /* uniap2en.plist in Resources */,
|
||||
B6109A2A24F5F377005CB652 /* apple3.plist in Resources */,
|
||||
B6109A2124F5F377005CB652 /* apple2ee.plist in Resources */,
|
||||
B63C1BA5250192D800511A71 /* cecm.plist in Resources */,
|
||||
B6109A3624F5F377005CB652 /* dodo.plist in Resources */,
|
||||
B6D6DE3924FAC8B500661A5F /* Preferences.xib in Resources */,
|
||||
B61099E724F5F231005CB652 /* SlotView.xib in Resources */,
|
||||
@@ -452,6 +604,74 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B6E4B5BB24FDE2670094A35C /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B6E4B5BC24FDE2670094A35C /* apple2eeuk.plist in Resources */,
|
||||
B63C1BA0250192D800511A71 /* ceci.plist in Resources */,
|
||||
B6E4B5BD24FDE2670094A35C /* las128ex.plist in Resources */,
|
||||
B6E4B5BE24FDE2670094A35C /* space84.plist in Resources */,
|
||||
B63C1BA6250192D800511A71 /* cecm.plist in Resources */,
|
||||
B6E4B5BF24FDE2670094A35C /* agat9.plist in Resources */,
|
||||
B6E4B5C024FDE2670094A35C /* LaunchWindow.xib in Resources */,
|
||||
B6E4B5C124FDE2670094A35C /* apple1.plist in Resources */,
|
||||
B6E4B5C224FDE2670094A35C /* ace100.plist in Resources */,
|
||||
B6E4B5C324FDE2670094A35C /* am64.plist in Resources */,
|
||||
B6E4B5C424FDE2670094A35C /* LogWindow.xib in Resources */,
|
||||
B6E4B5C524FDE2670094A35C /* Assets.xcassets in Resources */,
|
||||
B6E4B5C624FDE2670094A35C /* apple2e.plist in Resources */,
|
||||
B63C1BA2250192D800511A71 /* cecg.plist in Resources */,
|
||||
B6E4B5C724FDE2670094A35C /* am100.plist in Resources */,
|
||||
B6E4B5C824FDE2670094A35C /* laser2c.plist in Resources */,
|
||||
B6E4B5C924FDE2670094A35C /* laser128.plist in Resources */,
|
||||
B6E4B5CA24FDE2670094A35C /* apple2ep.plist in Resources */,
|
||||
B6E4B5CB24FDE2670094A35C /* apple2ees.plist in Resources */,
|
||||
B6E4B5CC24FDE2670094A35C /* prav8c.plist in Resources */,
|
||||
B6E4B5CD24FDE2670094A35C /* ivelultr.plist in Resources */,
|
||||
B6E4B5CE24FDE2670094A35C /* maxxi.plist in Resources */,
|
||||
B6E4B5CF24FDE2670094A35C /* apple2eefr.plist in Resources */,
|
||||
B6E4B5D124FDE2670094A35C /* spectred.plist in Resources */,
|
||||
B63C1B9725008A2700511A71 /* DownloadWindow.xib in Resources */,
|
||||
B6E4B5D224FDE2670094A35C /* apple2cp.plist in Resources */,
|
||||
B6E4B5D324FDE2670094A35C /* MainMenu.xib in Resources */,
|
||||
B6E4B5D424FDE2670094A35C /* prav82.plist in Resources */,
|
||||
B6E4B5D524FDE2670094A35C /* apple2euk.plist in Resources */,
|
||||
B6E4B5D624FDE2670094A35C /* uniap2ti.plist in Resources */,
|
||||
B6E4B5D724FDE2670094A35C /* apple2c.plist in Resources */,
|
||||
B6E4B5D824FDE2670094A35C /* microeng.plist in Resources */,
|
||||
B6E4B5D924FDE2670094A35C /* albert.plist in Resources */,
|
||||
B6E4B5DA24FDE2670094A35C /* Credits.rtf in Resources */,
|
||||
B6E4B5DB24FDE2670094A35C /* apple2p.plist in Resources */,
|
||||
B63C1BA4250192D800511A71 /* cec2000.plist in Resources */,
|
||||
B6E4B5DC24FDE2670094A35C /* hkc8800a.plist in Resources */,
|
||||
B6E4B5DD24FDE2670094A35C /* apple2gsr0.plist in Resources */,
|
||||
B6E4B5DE24FDE2670094A35C /* mprof3.plist in Resources */,
|
||||
B6E4B5DF24FDE2670094A35C /* basis108.plist in Resources */,
|
||||
B6E4B5E024FDE2670094A35C /* agat7.plist in Resources */,
|
||||
B6E4B5E124FDE2670094A35C /* elppa.plist in Resources */,
|
||||
B6E4B5E224FDE2670094A35C /* apple2gsr1.plist in Resources */,
|
||||
B6E4B5E324FDE2670094A35C /* Defaults.plist in Resources */,
|
||||
B6E4B5E424FDE2670094A35C /* models.plist in Resources */,
|
||||
B63C1BA9250192E600511A71 /* zijini.plist in Resources */,
|
||||
B6E4B5E524FDE2670094A35C /* craft2p.plist in Resources */,
|
||||
B6E4B5E624FDE2670094A35C /* uniap2pt.plist in Resources */,
|
||||
B6E4B5E724FDE2670094A35C /* las128e2.plist in Resources */,
|
||||
B63C1B9E250192D800511A71 /* cece.plist in Resources */,
|
||||
B6E4B5E824FDE2670094A35C /* MediaView.xib in Resources */,
|
||||
B6E4B5E924FDE2670094A35C /* uniap2en.plist in Resources */,
|
||||
B6E4B5EA24FDE2670094A35C /* apple3.plist in Resources */,
|
||||
B6E4B5EB24FDE2670094A35C /* apple2ee.plist in Resources */,
|
||||
B6E4B5EC24FDE2670094A35C /* dodo.plist in Resources */,
|
||||
B6E4B5ED24FDE2670094A35C /* Preferences.xib in Resources */,
|
||||
B6E4B5EE24FDE2670094A35C /* SlotView.xib in Resources */,
|
||||
B6E4B5EF24FDE2670094A35C /* apple2gs.plist in Resources */,
|
||||
B6E4B5F024FDE2670094A35C /* apple2jp.plist in Resources */,
|
||||
B6E4B5F124FDE2670094A35C /* apple2.plist in Resources */,
|
||||
B6E4B5F224FDE2670094A35C /* prav8m.plist in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
@@ -460,6 +680,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B6BA258824E99BEB005FB8FF /* main.m in Sources */,
|
||||
B63C1B8B24FF4BF700511A71 /* Ample.m in Sources */,
|
||||
B6D6DE4124FADFAC00661A5F /* LaunchWindowController.m in Sources */,
|
||||
B64E15A924EA1D5300E8AD3D /* MachineViewController.m in Sources */,
|
||||
B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */,
|
||||
@@ -468,6 +689,25 @@
|
||||
B6004DF024FB05D600D38596 /* LogWindowController.m in Sources */,
|
||||
B66236A924FD9A34006CABD7 /* PreferencesWindowController.m in Sources */,
|
||||
B65593B124ECB61800722E0C /* SlotViewController.m in Sources */,
|
||||
B63C1B9425008A2700511A71 /* DownloadWindowController.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B6E4B5AF24FDE2670094A35C /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B6E4B5B024FDE2670094A35C /* main.m in Sources */,
|
||||
B63C1B8C24FF4BF700511A71 /* Ample.m in Sources */,
|
||||
B6E4B5B124FDE2670094A35C /* LaunchWindowController.m in Sources */,
|
||||
B6E4B5B224FDE2670094A35C /* MachineViewController.m in Sources */,
|
||||
B6E4B5B324FDE2670094A35C /* MediaViewController.m in Sources */,
|
||||
B6E4B5B424FDE2670094A35C /* FlippedView.m in Sources */,
|
||||
B6E4B5B524FDE2670094A35C /* AppDelegate.m in Sources */,
|
||||
B6E4B5B624FDE2670094A35C /* LogWindowController.m in Sources */,
|
||||
B6E4B5B724FDE2670094A35C /* PreferencesWindowController.m in Sources */,
|
||||
B6E4B5B824FDE2670094A35C /* SlotViewController.m in Sources */,
|
||||
B63C1B9525008A2700511A71 /* DownloadWindowController.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -641,11 +881,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Ample/Frameworks",
|
||||
"$(PROJECT_DIR)/embedded",
|
||||
);
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = Ample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -663,11 +899,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Ample/Frameworks",
|
||||
"$(PROJECT_DIR)/embedded",
|
||||
);
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = Ample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -678,6 +910,42 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
B6E4B5F824FDE2670094A35C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = Ample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.ksherlock.ample-lite";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
B6E4B5F924FDE2670094A35C /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = Ample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.ksherlock.ample-lite";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
@@ -699,6 +967,15 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
B6E4B5F724FDE2670094A35C /* Build configuration list for PBXNativeTarget "Ample Lite" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
B6E4B5F824FDE2670094A35C /* Debug */,
|
||||
B6E4B5F924FDE2670094A35C /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = B6BA257324E99BE9005FB8FF /* Project object */;
|
||||
|
||||
@@ -4,6 +4,16 @@
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>Ample Lite.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>Ample copy.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>Ample.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
|
||||
23
Ample/Ample.h
Normal file
23
Ample/Ample.h
Normal file
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// Ample.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/1/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef Ample_h
|
||||
#define Ample_h
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NSURL *SupportDirectory(void);
|
||||
NSString *SupportDirectoryPath(void);
|
||||
|
||||
/* NSUserDefaults keys */
|
||||
extern NSString *kUseCustomMame;
|
||||
extern NSString *kMamePath;
|
||||
extern NSString *kAutoCloseLogWindow;
|
||||
extern NSString *kMameComponentsDate;
|
||||
|
||||
#endif /* Ample_h */
|
||||
41
Ample/Ample.m
Normal file
41
Ample/Ample.m
Normal file
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// Ample.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/1/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#include "Ample.h"
|
||||
|
||||
NSURL *SupportDirectory(void) {
|
||||
static NSURL *cached = nil;
|
||||
|
||||
if (!cached) {
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
NSError *error = nil;
|
||||
|
||||
NSURL *url = [fm URLForDirectory: NSApplicationSupportDirectory inDomain: NSUserDomainMask appropriateForURL: nil create: YES error: &error];
|
||||
cached = [url URLByAppendingPathComponent: @"Ample"];
|
||||
|
||||
[fm createDirectoryAtURL: cached withIntermediateDirectories: YES attributes: nil error: &error];
|
||||
}
|
||||
return cached;
|
||||
|
||||
}
|
||||
|
||||
NSString *SupportDirectoryPath(void) {
|
||||
static NSString *cached = nil;
|
||||
|
||||
if (!cached) {
|
||||
NSURL *url = SupportDirectory();
|
||||
cached = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||
}
|
||||
return cached;
|
||||
}
|
||||
|
||||
|
||||
NSString *kUseCustomMame = @"UseCustomMame";
|
||||
NSString *kMamePath = @"MamePath";
|
||||
NSString *kAutoCloseLogWindow = @"AutoCloseLogWindow";
|
||||
NSString *kMameComponentsDate = @"MameComponentsDate";
|
||||
@@ -5,20 +5,21 @@
|
||||
// Created by Kelvin Sherlock on 8/16/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "AppDelegate.h"
|
||||
#import "SlotViewController.h"
|
||||
#import "MediaViewController.h"
|
||||
#import "LaunchWindowController.h"
|
||||
#import "PreferencesWindowController.h"
|
||||
#import "DownloadWindowController.h"
|
||||
|
||||
@interface AppDelegate ()
|
||||
@property (weak) IBOutlet NSWindow *installWindow;
|
||||
|
||||
@end
|
||||
|
||||
@implementation AppDelegate {
|
||||
NSWindowController *_prefs;
|
||||
NSWindowController *_launcher;
|
||||
NSWindowController *_downloader;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,10 +39,87 @@
|
||||
[[NSUserDefaults standardUserDefaults] registerDefaults: dict];
|
||||
}
|
||||
|
||||
_launcher = [LaunchWindowController new];
|
||||
|
||||
|
||||
if ([self installMameComponents]) {
|
||||
[self displayLaunchWindow];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-(void)displayLaunchWindow {
|
||||
|
||||
if (!_launcher) {
|
||||
_launcher = [LaunchWindowController new];
|
||||
}
|
||||
[_launcher showWindow: nil];
|
||||
}
|
||||
|
||||
-(BOOL)installMameComponents {
|
||||
|
||||
/* 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;
|
||||
|
||||
if (!newDate) return YES; //????
|
||||
if (oldDate && [oldDate compare: newDate] >= 0) return YES;
|
||||
|
||||
NSString *path = [bundle pathForResource: @"mame-data" ofType: @"tgz"];
|
||||
if (!path) return YES; // Ample Lite?
|
||||
|
||||
|
||||
NSWindow *win = _installWindow;
|
||||
[win makeKeyAndOrderFront: nil];
|
||||
NSTask *task = [NSTask new];
|
||||
NSArray *argv = @[
|
||||
@"xfz",
|
||||
path
|
||||
];
|
||||
[task setExecutableURL: [NSURL fileURLWithPath: @"/usr/bin/tar"]];
|
||||
[task setArguments: argv];
|
||||
[task setCurrentDirectoryURL: sd];
|
||||
|
||||
|
||||
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
|
||||
[task setTerminationHandler: ^(NSTask *task){
|
||||
|
||||
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"];
|
||||
[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];
|
||||
[self displayLaunchWindow];
|
||||
});
|
||||
|
||||
}];
|
||||
[task launch];
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
- (void)applicationWillTerminate:(NSNotification *)aNotification {
|
||||
// Insert code here to tear down your application
|
||||
@@ -65,4 +143,12 @@
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)downloadROMS:(id)sender {
|
||||
|
||||
if (!_downloader) {
|
||||
_downloader = [DownloadWindowController new];
|
||||
}
|
||||
[_downloader showWindow: sender];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
192
Ample/Base.lproj/DownloadWindow.xib
Normal file
192
Ample/Base.lproj/DownloadWindow.xib
Normal file
@@ -0,0 +1,192 @@
|
||||
<?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="DownloadWindowController">
|
||||
<connections>
|
||||
<outlet property="tableView" destination="FLX-Wt-y53" id="a4O-pk-EAt"/>
|
||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="ROMs" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="400" height="500"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<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="400" height="500"/>
|
||||
<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="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CMD-nT-mEa">
|
||||
<rect key="frame" x="0.0" y="58" width="402" height="443"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" ambiguous="YES" drawsBackground="NO" id="Igp-aH-flp">
|
||||
<rect key="frame" x="1" y="1" width="400" height="441"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" id="FLX-Wt-y53">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="441"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableViewGridLines key="gridStyleMask" dashed="YES"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="397" minWidth="40" maxWidth="1000" id="5jP-bY-fhI">
|
||||
<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="VZP-ti-Ti8">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="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="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>
|
||||
</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="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"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="activity" destination="jBN-UJ-tWi" id="ZwD-yU-Vne"/>
|
||||
<outlet property="statusTextField" destination="hfu-hP-QAH" id="8Hv-BB-kYA"/>
|
||||
<outlet property="textField" destination="A44-us-TEl" id="Ta5-nd-ed1"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<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>
|
||||
</subviews>
|
||||
<nil key="backgroundColor"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="pcd-MD-gho">
|
||||
<rect key="frame" x="1" y="314" width="480" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="jGc-PE-vaF">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fhd-vr-Q2G">
|
||||
<rect key="frame" x="20" y="19" width="124" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<buttonCell key="cell" type="roundTextured" title="Download Missing" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AKx-eg-iLS">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="downloadMissing:" target="-2" id="azE-F0-5wx"/>
|
||||
<binding destination="-2" name="enabled" keyPath="self.active" id="NOL-Db-hgp">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="142" y="179"/>
|
||||
</window>
|
||||
<menu id="RJM-21-hjO">
|
||||
<items>
|
||||
<menuItem title="Show in Finder" tag="1" id="hDp-fh-9nU">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="showInFinder:" target="-2" id="ltL-yL-7EP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Download" tag="2" id="ree-Zg-jYB">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="download:" target="-2" id="2ua-nq-Zy1"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Cancel" tag="3" id="7fY-83-Ads">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="cancel:" target="-2" id="cHE-Wq-jwc"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="fC3-h6-xe2"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="-348" y="164"/>
|
||||
</menu>
|
||||
</objects>
|
||||
</document>
|
||||
@@ -21,7 +21,6 @@
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Ample" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="Vze-YF-m6e">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="335" y="390" width="718" height="763"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" id="Ssv-Jw-EE0">
|
||||
@@ -144,6 +143,6 @@ DQ
|
||||
<customObject id="RgH-d9-xl8" customClass="MachineViewController"/>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSAppleMenuImage" width="128" height="128"/>
|
||||
<image name="NSAppleMenuImage" width="11" height="14"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<window title="Ample Log" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="800" height="270"/>
|
||||
@@ -36,7 +36,7 @@
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="minSize" width="785" height="270"/>
|
||||
<size key="maxSize" width="788" height="10000000"/>
|
||||
<size key="maxSize" width="800" height="10000000"/>
|
||||
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
</textView>
|
||||
</subviews>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<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="NSApplication">
|
||||
@@ -12,7 +13,11 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate"/>
|
||||
<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"/>
|
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
@@ -26,6 +31,12 @@
|
||||
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Manage ROMs…" id="St3-qR-2Y8">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="downloadROMS:" target="Voe-Tx-rLC" id="jFm-nv-kRC"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW">
|
||||
<connections>
|
||||
@@ -680,5 +691,25 @@
|
||||
</items>
|
||||
<point key="canvasLocation" x="132" y="154"/>
|
||||
</menu>
|
||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="jWX-pY-Zpb">
|
||||
<rect key="contentRect" x="283" y="305" width="226" height="56"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" id="L7W-DF-UXe">
|
||||
<rect key="frame" x="0.0" y="0.0" width="226" height="56"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="iC1-A6-a6T">
|
||||
<rect key="frame" x="18" y="20" width="190" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Installing MAME components…" id="ura-rh-zmZ">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="13" y="-182"/>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
||||
|
||||
@@ -2,6 +2,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>MameComponentsDate</key>
|
||||
<date>2020-09-02T16:00:00Z</date>
|
||||
<key>UseCustomMame</key>
|
||||
<false/>
|
||||
<key>AutoCloseLogWindow</key>
|
||||
|
||||
39
Ample/DownloadWindowController.h
Normal file
39
Ample/DownloadWindowController.h
Normal file
@@ -0,0 +1,39 @@
|
||||
//
|
||||
// DownloadWindowController.h
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/2/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface DownloadWindowController : NSWindowController
|
||||
|
||||
@property NSString *currentROM;
|
||||
@property NSInteger currentCount;
|
||||
@property NSInteger totalCount;
|
||||
@property NSInteger errorCount;
|
||||
@property BOOL active;
|
||||
|
||||
@end
|
||||
|
||||
@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
|
||||
434
Ample/DownloadWindowController.m
Normal file
434
Ample/DownloadWindowController.m
Normal file
@@ -0,0 +1,434 @@
|
||||
//
|
||||
// DownloadWindowController.m
|
||||
// Ample
|
||||
//
|
||||
// Created by Kelvin Sherlock on 9/2/2020.
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "DownloadWindowController.h"
|
||||
|
||||
enum {
|
||||
ItemMissing = 0,
|
||||
ItemFound,
|
||||
ItemDownloading,
|
||||
ItemDownloaded,
|
||||
ItemCanceled,
|
||||
ItemError
|
||||
};
|
||||
|
||||
@interface DownloadItem : NSObject
|
||||
|
||||
@property NSString *name;
|
||||
@property NSError *error;
|
||||
@property NSString *pathName;
|
||||
@property NSURLSessionDownloadTask *task;
|
||||
@property NSURL *localURL;
|
||||
|
||||
@property NSUInteger status;
|
||||
@property NSUInteger index;
|
||||
|
||||
|
||||
-(void)cancelDownload;
|
||||
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task;
|
||||
-(void)completeWithError: (NSError *)error;
|
||||
-(NSString *)statusDescription;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@interface DownloadWindowController ()
|
||||
@property (weak) IBOutlet NSTableView *tableView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation DownloadWindowController {
|
||||
|
||||
NSArray *_items;
|
||||
NSURL *_romFolder;
|
||||
NSURL *_sourceURL;
|
||||
NSURLSession *_session;
|
||||
NSMutableDictionary *_taskIndex;
|
||||
}
|
||||
|
||||
-(NSString *)windowNibName {
|
||||
return @"DownloadWindow";
|
||||
}
|
||||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
|
||||
NSError *error = nil;
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
|
||||
NSURL *url = [bundle URLForResource: @"roms" withExtension: @"plist"];
|
||||
|
||||
NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||
|
||||
NSURL *sd = SupportDirectory();
|
||||
NSString *romdir = [SupportDirectoryPath() stringByAppendingPathComponent: @"roms"];
|
||||
|
||||
_romFolder = [sd URLByAppendingPathComponent: @"roms"];
|
||||
|
||||
[fm createDirectoryAtURL: _romFolder withIntermediateDirectories: YES attributes: nil error: &error];
|
||||
|
||||
|
||||
NSArray *roms = [d objectForKey: @"roms"];
|
||||
[self setCurrentROM: @""];
|
||||
[self setCurrentCount: 0];
|
||||
[self setTotalCount: [roms count]];
|
||||
[self setErrorCount: 0];
|
||||
_sourceURL = [NSURL URLWithString: @"https://archive.org/download/mame0224_rom"]; // hardcoded....
|
||||
|
||||
|
||||
NSMutableArray *tmp = [NSMutableArray arrayWithCapacity: [roms count]];
|
||||
unsigned ix = 0;
|
||||
for (NSString *name in roms) {
|
||||
|
||||
DownloadItem *item = [DownloadItem new];
|
||||
[item setName: name];
|
||||
[item setIndex: ix++];
|
||||
|
||||
[tmp addObject: item];
|
||||
|
||||
// check if the file exists.
|
||||
NSString *s = [romdir stringByAppendingPathComponent: name];
|
||||
NSString *path;
|
||||
|
||||
path = [s stringByAppendingPathExtension: @"zip"];
|
||||
if ([fm fileExistsAtPath: path]) {
|
||||
[item setStatus: ItemFound];
|
||||
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
||||
continue;
|
||||
}
|
||||
path = [s stringByAppendingPathExtension: @"7z"];
|
||||
if ([fm fileExistsAtPath: path]) {
|
||||
[item setStatus: ItemFound];
|
||||
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
||||
continue;
|
||||
}
|
||||
}
|
||||
_items = tmp;
|
||||
|
||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
_session = [NSURLSession sessionWithConfiguration: config delegate: self delegateQueue: nil];
|
||||
_taskIndex = [NSMutableDictionary dictionaryWithCapacity: [_items count]];
|
||||
|
||||
//[self download];
|
||||
}
|
||||
|
||||
-(void)downloadItem: (DownloadItem *)item {
|
||||
|
||||
if (!_session) {
|
||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
_session = [NSURLSession sessionWithConfiguration: config delegate: self delegateQueue: nil];
|
||||
}
|
||||
|
||||
NSURLSessionDownloadTask *task;
|
||||
NSString *s = [item name];
|
||||
NSString *path = [s stringByAppendingString: @".7z"]; // hardcoded.
|
||||
NSURL *url = [_sourceURL 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 name];
|
||||
NSString *path = [s stringByAppendingString: @".7z"]; // hardcoded.
|
||||
NSURL *url = [_sourceURL URLByAppendingPathComponent: path];
|
||||
|
||||
task = [_session downloadTaskWithURL: url];
|
||||
[_taskIndex setObject: item forKey: task];
|
||||
|
||||
[item setTask: task];
|
||||
|
||||
[task resume];
|
||||
|
||||
//++count;
|
||||
//if (count >= 2) break;
|
||||
}
|
||||
[self setActive: YES];
|
||||
|
||||
}
|
||||
|
||||
-(DownloadItem *)clickedItem {
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0 || row >= [_items count]) return nil;
|
||||
return [_items objectAtIndex: row];
|
||||
}
|
||||
-(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];
|
||||
}
|
||||
#pragma mark - IBActions
|
||||
|
||||
-(IBAction)cancelAll:(id)sender {
|
||||
|
||||
for (DownloadItem *item in _items) {
|
||||
[item cancelDownload];
|
||||
}
|
||||
|
||||
[_session invalidateAndCancel];
|
||||
_session = nil;
|
||||
[_taskIndex removeAllObjects];
|
||||
[self setCurrentCount: 0];
|
||||
[self setActive: NO];
|
||||
|
||||
[_tableView reloadData];
|
||||
//[_tableView setNeedsDisplay: YES]; // doesn't work...
|
||||
}
|
||||
|
||||
- (IBAction)downloadMissing:(id)sender {
|
||||
|
||||
BOOL delta = NO;
|
||||
for (DownloadItem *item in _items) {
|
||||
NSURL *url = [item localURL];
|
||||
id task = [item task];
|
||||
if (!url && !task) {
|
||||
[self downloadItem: item];
|
||||
delta = YES;
|
||||
}
|
||||
}
|
||||
|
||||
if (delta) {
|
||||
[self setActive: YES];
|
||||
[_tableView reloadData];
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)showInFinder:(id)sender {
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
NSURL *url = [item localURL];
|
||||
if (!url) return;
|
||||
|
||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||
[ws activateFileViewerSelectingURLs: @[url]];
|
||||
}
|
||||
|
||||
- (IBAction)download:(id)sender {
|
||||
DownloadItem *item = [self clickedItem];
|
||||
if (!item) return;
|
||||
|
||||
[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]];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - NSURLSessionDelegate
|
||||
|
||||
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
|
||||
|
||||
|
||||
// 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.
|
||||
dispatch_async(dispatch_get_main_queue(), ^(void){
|
||||
if (error)
|
||||
[self setErrorCount: self->_errorCount + 1];
|
||||
else
|
||||
[self setCurrentCount: self->_currentCount + 1];
|
||||
|
||||
NSMutableDictionary *taskIndex = self->_taskIndex;
|
||||
DownloadItem *item = [taskIndex objectForKey: task];
|
||||
[taskIndex removeObjectForKey: 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 {
|
||||
|
||||
|
||||
// need to move to the destination directory...
|
||||
// file deleted after this function returns, so can't move asynchronously.
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
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){
|
||||
|
||||
|
||||
[item setLocalURL: dest];
|
||||
}
|
||||
*/
|
||||
NSLog(@"%@", src);
|
||||
}
|
||||
@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];
|
||||
|
||||
[[v textField] setObjectValue: [item name]];
|
||||
|
||||
NSTextField *tf = [v statusTextField];
|
||||
|
||||
[tf setObjectValue: [item statusDescription]];
|
||||
if ([item error]) {
|
||||
[tf setTextColor: [NSColor redColor]];
|
||||
} else {
|
||||
[tf setTextColor: [NSColor blackColor]];
|
||||
//if ([tableView isRowSelected: row]){
|
||||
//[tf setTextColor: [NSColor whiteColor]];
|
||||
//}
|
||||
}
|
||||
|
||||
if ([item task]) {
|
||||
[[v activity] startAnimation: nil];
|
||||
} else {
|
||||
[[v activity] stopAnimation: nil];
|
||||
}
|
||||
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation DownloadTableCellView
|
||||
|
||||
@end
|
||||
|
||||
@implementation DownloadItem
|
||||
|
||||
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task {
|
||||
_task = task;
|
||||
_error = nil;
|
||||
if (task) _status = ItemDownloading;
|
||||
}
|
||||
|
||||
-(void)cancelDownload {
|
||||
if (!_task) return;
|
||||
[_task cancel];
|
||||
_task = nil;
|
||||
_status = ItemCanceled;
|
||||
}
|
||||
|
||||
-(void)completeWithError: (NSError *)error {
|
||||
_task = nil;
|
||||
if (error) {
|
||||
_error = error;
|
||||
_status = ItemError;
|
||||
} else {
|
||||
// what if there was an error moving it?
|
||||
_error = nil;
|
||||
_status = ItemDownloaded;
|
||||
}
|
||||
}
|
||||
|
||||
-(NSString *)statusDescription {
|
||||
|
||||
static NSString *Names[] = {
|
||||
@"ROM missing",
|
||||
@"ROM found",
|
||||
@"Downloading…",
|
||||
@"Downloaded",
|
||||
@"Canceled",
|
||||
@"Error"
|
||||
};
|
||||
if (_error) return [_error description];
|
||||
|
||||
if (_status > sizeof(Names)/sizeof(Names[0])) return @"Unknown";
|
||||
return Names[_status];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@implementation DownloadWindowController (Menu)
|
||||
|
||||
enum {
|
||||
kOpenInFinder = 1,
|
||||
kDownload,
|
||||
kCancel,
|
||||
};
|
||||
|
||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||
NSInteger row = [_tableView clickedRow];
|
||||
if (row < 0) return NO;
|
||||
DownloadItem *item = [_items objectAtIndex: row];
|
||||
|
||||
NSUInteger status = [item status];
|
||||
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;
|
||||
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -17,9 +17,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>release 3</string>
|
||||
<string>release 4</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3</string>
|
||||
<string>4</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "LaunchWindowController.h"
|
||||
#import "MediaViewController.h"
|
||||
#import "SlotViewController.h"
|
||||
@@ -97,8 +98,8 @@ static NSURL *MameURL(void) {
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
|
||||
if ([defaults boolForKey: @"UseSystemMame"]) {
|
||||
NSString *path = [defaults stringForKey: @"MamePath"];
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
NSString *path = [defaults stringForKey: kMamePath];
|
||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
||||
}
|
||||
|
||||
@@ -114,8 +115,8 @@ static NSString *MamePath(void) {
|
||||
|
||||
NSString *path;
|
||||
|
||||
if ([defaults boolForKey: @"UseCustomMame"]) {
|
||||
path = [defaults stringForKey: @"MamePath"];
|
||||
if ([defaults boolForKey: kUseCustomMame]) {
|
||||
path = [defaults stringForKey: kMamePath];
|
||||
if ([path length]) return path;
|
||||
}
|
||||
path = [bundle pathForAuxiliaryExecutable: @"mame64"];
|
||||
@@ -197,7 +198,6 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
|
||||
-(void)buildCommandLine {
|
||||
|
||||
|
||||
if (!_mameMachine) {
|
||||
[self setCommandLine: @""];
|
||||
return;
|
||||
@@ -252,7 +252,7 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
if (_mameNoThrottle) [argv addObject: @"-nothrottle"];
|
||||
|
||||
|
||||
[self setCommandLine: JoinArguments(argv)]; //[argv componentsJoinedByString:@" "]];
|
||||
[self setCommandLine: JoinArguments(argv)];
|
||||
[self setArgs: argv];
|
||||
}
|
||||
|
||||
@@ -264,7 +264,8 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
- (IBAction)launchAction:(id)sender {
|
||||
|
||||
if (![_args count]) return;
|
||||
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSURL *url = MameURL();
|
||||
|
||||
if (!url) {
|
||||
@@ -278,12 +279,12 @@ static NSString * JoinArguments(NSArray *argv) {
|
||||
NSTask *task = [NSTask new];
|
||||
[task setExecutableURL: url];
|
||||
[task setArguments: _args];
|
||||
#if 0
|
||||
// interferes w/ termination notification.
|
||||
[task setTerminationHandler: ^(NSTask *t){
|
||||
|
||||
}];
|
||||
#endif
|
||||
|
||||
if (![defaults boolForKey: kUseCustomMame]) {
|
||||
// run in Application Support/Ample.
|
||||
[task setCurrentDirectoryURL: SupportDirectory()];
|
||||
}
|
||||
|
||||
[LogWindowController controllerForTask: task];
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "LogWindowController.h"
|
||||
|
||||
static NSMutableSet *LogWindows;
|
||||
@@ -73,7 +74,7 @@ static NSMutableSet *LogWindows;
|
||||
return error;
|
||||
}
|
||||
_task = task;
|
||||
NSString *title = [NSString stringWithFormat: @"Log Window - %u", [task processIdentifier]];
|
||||
NSString *title = [NSString stringWithFormat: @"Ample Log - %u", [task processIdentifier]];
|
||||
[[self window] setTitle: title];
|
||||
_handle = [pipe fileHandleForReading];
|
||||
|
||||
@@ -148,7 +149,7 @@ static NSMutableSet *LogWindows;
|
||||
|
||||
[[self window] setDocumentEdited: NO];
|
||||
|
||||
if (ok && [[NSUserDefaults standardUserDefaults] boolForKey: @"AutoCloseLogWindow"]) {
|
||||
if (ok && [[NSUserDefaults standardUserDefaults] boolForKey: kAutoCloseLogWindow]) {
|
||||
|
||||
[[self window] close];
|
||||
//[LogWindows removeObject: self]; // close sends WindowWillClose notification.
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Ample.h"
|
||||
#import "PreferencesWindowController.h"
|
||||
|
||||
@interface PreferencesWindowController ()
|
||||
@@ -25,7 +26,7 @@
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
|
||||
[self validateMamePath: [defaults stringForKey: @"MamePath"]];
|
||||
[self validateMamePath: [defaults stringForKey: kMamePath]];
|
||||
|
||||
}
|
||||
|
||||
|
||||
2511
Ample/Resources/cec2000.plist
Normal file
2511
Ample/Resources/cec2000.plist
Normal file
File diff suppressed because it is too large
Load Diff
2511
Ample/Resources/cece.plist
Normal file
2511
Ample/Resources/cece.plist
Normal file
File diff suppressed because it is too large
Load Diff
2511
Ample/Resources/cecg.plist
Normal file
2511
Ample/Resources/cecg.plist
Normal file
File diff suppressed because it is too large
Load Diff
2511
Ample/Resources/ceci.plist
Normal file
2511
Ample/Resources/ceci.plist
Normal file
File diff suppressed because it is too large
Load Diff
2511
Ample/Resources/cecm.plist
Normal file
2511
Ample/Resources/cecm.plist
Normal file
File diff suppressed because it is too large
Load Diff
@@ -173,6 +173,43 @@
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>description</key>
|
||||
<string>China Education Computer</string>
|
||||
<key>children</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>description</key>
|
||||
<string>China Education Computer 2000</string>
|
||||
<key>value</key>
|
||||
<string>cec2000</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>description</key>
|
||||
<string>China Education Computer E</string>
|
||||
<key>value</key>
|
||||
<string>cece</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>description</key>
|
||||
<string>China Education Computer G</string>
|
||||
<key>value</key>
|
||||
<string>cecg</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>description</key>
|
||||
<string>China Education Computer I</string>
|
||||
<key>value</key>
|
||||
<string>ceci</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>description</key>
|
||||
<string>China Education Computer M</string>
|
||||
<key>value</key>
|
||||
<string>cecm</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>description</key>
|
||||
<string>II Clones</string>
|
||||
@@ -323,6 +360,12 @@
|
||||
<key>value</key>
|
||||
<string>spectred</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>description</key>
|
||||
<string>Zi Jin I</string>
|
||||
<key>value</key>
|
||||
<string>zijini</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
67
Ample/Resources/roms.plist
Normal file
67
Ample/Resources/roms.plist
Normal file
@@ -0,0 +1,67 @@
|
||||
<?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>source</key>
|
||||
<string>https://archive.org/download/mame0224_rom</string>
|
||||
<key>type</key>
|
||||
<string>7z</string>
|
||||
<key>version</key>
|
||||
<string>0.224</string>
|
||||
<key>roms</key>
|
||||
<array>
|
||||
<string>a1cass</string>
|
||||
<string>a2aevm80</string>
|
||||
<string>a2ap16</string>
|
||||
<string>a2ap16a</string>
|
||||
<string>a2aplcrd</string>
|
||||
<string>a2cffa02</string>
|
||||
<string>a2cffa2</string>
|
||||
<string>a2corvus</string>
|
||||
<string>a2diskii</string>
|
||||
<string>a2diskiing</string>
|
||||
<string>a2focdrv</string>
|
||||
<string>a2hsscsi</string>
|
||||
<string>a2iwm</string>
|
||||
<string>a2memexp</string>
|
||||
<string>a2mouse</string>
|
||||
<string>a2pic</string>
|
||||
<string>a2ramfac</string>
|
||||
<string>a2scsi</string>
|
||||
<string>a2ssc</string>
|
||||
<string>a2surance</string>
|
||||
<string>a2swyft</string>
|
||||
<string>a2thunpl</string>
|
||||
<string>a2tmstho</string>
|
||||
<string>a2twarp</string>
|
||||
<string>a2ultrme</string>
|
||||
<string>a2ulttrm</string>
|
||||
<string>a2vidtrm</string>
|
||||
<string>a2vtc1</string>
|
||||
<string>a2vulcan</string>
|
||||
<string>a2vulgld</string>
|
||||
<string>a2vuliie</string>
|
||||
<string>a2zipdrv</string>
|
||||
<string>a3fdc</string>
|
||||
<string>apple1</string>
|
||||
<string>apple2</string>
|
||||
<string>apple2c</string>
|
||||
<string>apple2e</string>
|
||||
<string>apple2gs</string>
|
||||
<string>apple3</string>
|
||||
<string>cec2000</string>
|
||||
<string>cece</string>
|
||||
<string>cecg</string>
|
||||
<string>ceci</string>
|
||||
<string>cecm</string>
|
||||
<string>cga</string>
|
||||
<string>cmsscsi</string>
|
||||
<string>d2fdc</string>
|
||||
<string>diskii13</string>
|
||||
<string>keytronic_pc3270</string>
|
||||
<string>m68705p3</string>
|
||||
<string>votrax</string>
|
||||
<string>zijini</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
2511
Ample/Resources/zijini.plist
Normal file
2511
Ample/Resources/zijini.plist
Normal file
File diff suppressed because it is too large
Load Diff
@@ -18,6 +18,9 @@ MACHINES = (
|
||||
"dodo", "elppa", "hkc8800a", "ivelultr",
|
||||
"maxxi", "microeng", "prav82", "prav8m",
|
||||
"space84", "uniap2en", "uniap2pt", "uniap2ti",
|
||||
"zijini",
|
||||
# China Education Computer
|
||||
"cec2000", "cece", "cecg", "ceci", "cecm",
|
||||
)
|
||||
|
||||
|
||||
@@ -30,4 +33,4 @@ SLOTS = (
|
||||
"gameio",
|
||||
"printer",
|
||||
"modem"
|
||||
)
|
||||
)
|
||||
@@ -34,5 +34,5 @@ for m in MACHINES:
|
||||
devices[name] = tmp
|
||||
|
||||
|
||||
with open("Resources/devices.plist", "w") as f:
|
||||
f.write(to_plist(devices))
|
||||
with open("../Ample/Resources/devices.plist", "w") as f:
|
||||
f.write(to_plist(devices))
|
||||
@@ -14,9 +14,10 @@ DISABLED = set((
|
||||
'hsscsi', # doesn't work
|
||||
'corvus', # these apparently don't use normal disk images.
|
||||
'zipdrive',
|
||||
'vulcan',
|
||||
'focusdrive',
|
||||
'vulcangold'
|
||||
'vulcan',
|
||||
'vulcangold',
|
||||
'vulcaniie',
|
||||
))
|
||||
|
||||
|
||||
@@ -165,7 +166,7 @@ for m in MACHINES:
|
||||
data[s] = tmp
|
||||
|
||||
|
||||
path = "Resources/{}.plist".format(m)
|
||||
path = "../Ample/Resources/{}.plist".format(m)
|
||||
with open(path, "w") as f:
|
||||
f.write(to_plist(data))
|
||||
|
||||
@@ -20,7 +20,8 @@ ii_clones_children = ["ace100", "agat7", "agat9", "albert",
|
||||
"dodo", "elppa", "hkc8800a", "ivelultr",
|
||||
"maxxi", "microeng", "prav82", "prav8m",
|
||||
"space84", "uniap2en", "uniap2pt", "uniap2ti"]
|
||||
iie_clones_children = ["mprof3", "prav8c", "spectred"]
|
||||
iie_clones_children = ["mprof3", "prav8c", "spectred", "zijini"]
|
||||
cec_children = ["cec2000", "cece", "cecg", "ceci", "cecm"]
|
||||
|
||||
tree = [
|
||||
("Apple I", "apple1", apple1_children),
|
||||
@@ -30,6 +31,7 @@ tree = [
|
||||
("Apple IIgs", "apple2gs", apple2gs_children),
|
||||
("Apple ///", "apple3", apple3_children),
|
||||
("Laser", "laser128", laser_children),
|
||||
("China Education Computer", None, cec_children),
|
||||
("II Clones", None, ii_clones_children),
|
||||
("IIe Clones", None, iie_clones_children),
|
||||
]
|
||||
@@ -74,7 +76,7 @@ for x in tree:
|
||||
|
||||
data.append(tmp)
|
||||
|
||||
path = "Resources/models.plist"
|
||||
path = "../Ample/Resources/models.plist"
|
||||
with open(path, "w") as f:
|
||||
f.write(to_plist(data))
|
||||
|
||||
76
python/rom.py
Normal file
76
python/rom.py
Normal file
@@ -0,0 +1,76 @@
|
||||
from plist import to_plist
|
||||
|
||||
ROMS = """
|
||||
a1cass
|
||||
a2aevm80
|
||||
a2ap16
|
||||
a2ap16a
|
||||
a2aplcrd
|
||||
a2cffa02
|
||||
a2cffa2
|
||||
a2corvus
|
||||
a2diskii
|
||||
a2diskiing
|
||||
a2focdrv
|
||||
a2hsscsi
|
||||
a2iwm
|
||||
a2memexp
|
||||
a2mouse
|
||||
a2pic
|
||||
a2ramfac
|
||||
a2scsi
|
||||
a2ssc
|
||||
a2surance
|
||||
a2swyft
|
||||
a2thunpl
|
||||
a2tmstho
|
||||
a2twarp
|
||||
a2ultrme
|
||||
a2ulttrm
|
||||
a2vidtrm
|
||||
a2vtc1
|
||||
a2vulcan
|
||||
a2vulgld
|
||||
a2vuliie
|
||||
a2zipdrv
|
||||
a3fdc
|
||||
apple1
|
||||
apple2
|
||||
apple2c
|
||||
apple2e
|
||||
apple2gs
|
||||
apple3
|
||||
cec2000
|
||||
cece
|
||||
cecg
|
||||
ceci
|
||||
cecm
|
||||
cga
|
||||
cmsscsi
|
||||
d2fdc
|
||||
diskii13
|
||||
keytronic_pc3270
|
||||
m68705p3
|
||||
votrax
|
||||
zijini
|
||||
""".splitlines()
|
||||
#
|
||||
# others
|
||||
# mprof3
|
||||
# spectred
|
||||
# tk3000
|
||||
# prav8c
|
||||
#
|
||||
|
||||
ROMS.remove("")
|
||||
ROMS.sort()
|
||||
|
||||
data = {}
|
||||
data["source"] = "https://archive.org/download/mame0224_rom"
|
||||
data["type"] = "7z"
|
||||
data["version"] = "0.224"
|
||||
data["roms"] = ROMS
|
||||
|
||||
# print(ROMS)
|
||||
with open("../Ample/Resources/roms.plist", "w") as f:
|
||||
f.write(to_plist(data))
|
||||
Reference in New Issue
Block a user