summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--macosx/English.lproj/Configuration.xib471
-rw-r--r--macosx/English.lproj/Localizable.strings22
-rw-r--r--macosx/MemBadgeView.h13
-rw-r--r--macosx/MemBadgeView.m53
-rw-r--r--macosx/Pcsxr.xcodeproj/project.pbxproj12
-rwxr-xr-xmacosx/PcsxrController.m5
-rw-r--r--macosx/PcsxrMemCardArray.h36
-rw-r--r--macosx/PcsxrMemCardArray.m244
-rwxr-xr-xmacosx/PcsxrMemCardController.h10
-rwxr-xr-xmacosx/PcsxrMemCardController.m323
-rwxr-xr-xmacosx/PcsxrMemoryObject.h20
-rwxr-xr-xmacosx/PcsxrMemoryObject.m95
12 files changed, 649 insertions, 655 deletions
diff --git a/macosx/English.lproj/Configuration.xib b/macosx/English.lproj/Configuration.xib
index 9ced3ebb..f7f13369 100644
--- a/macosx/English.lproj/Configuration.xib
+++ b/macosx/English.lproj/Configuration.xib
@@ -18,6 +18,7 @@
<string>NSCollectionView</string>
<string>NSCollectionViewItem</string>
<string>NSCustomObject</string>
+ <string>NSCustomView</string>
<string>NSImageCell</string>
<string>NSImageView</string>
<string>NSMatrix</string>
@@ -74,7 +75,6 @@
<int key="NSvFlags">274</int>
<string key="NSFrame">{{13, 10}, {525, 391}}</string>
<reference key="NSSuperview" ref="644483536"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="782866499"/>
<array class="NSMutableArray" key="NSTabViewItems">
<object class="NSTabViewItem" id="150404821">
@@ -1604,7 +1604,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">269</int>
<string key="NSFrame">{{221, 209}, {63, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="854313175"/>
<string key="NSReuseIdentifierKey">_NS:687</string>
<int key="NSTag">1</int>
@@ -1630,7 +1629,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">293</int>
<string key="NSFrame">{{221, 75}, {63, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="463534292"/>
<string key="NSReuseIdentifierKey">_NS:687</string>
<int key="NSTag">2</int>
@@ -1664,7 +1662,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{179, 246}</string>
<reference key="NSSuperview" ref="781852938"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="913433103"/>
<string key="NSReuseIdentifierKey">_NS:3367</string>
<string key="NSMinGridSize">{0, 0}</string>
@@ -1686,7 +1683,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</array>
<string key="NSFrame">{{1, 1}, {179, 246}}</string>
<reference key="NSSuperview" ref="463534292"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="628077157"/>
<string key="NSReuseIdentifierKey">_NS:3365</string>
<reference key="NSDocView" ref="628077157"/>
@@ -1698,7 +1694,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{234, 1}, {15, 143}}</string>
<reference key="NSSuperview" ref="463534292"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="677138134"/>
<string key="NSReuseIdentifierKey">_NS:3372</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@@ -1712,7 +1707,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{1, 144}, {233, 15}}</string>
<reference key="NSSuperview" ref="463534292"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="985208313"/>
<string key="NSReuseIdentifierKey">_NS:3374</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@@ -1724,7 +1718,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</array>
<string key="NSFrame">{{286, 42}, {181, 248}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="781852938"/>
<string key="NSReuseIdentifierKey">_NS:3363</string>
<int key="NSsFlags">133682</int>
@@ -1748,7 +1741,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{179, 246}</string>
<reference key="NSSuperview" ref="171112102"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="617745638"/>
<string key="NSReuseIdentifierKey">_NS:3367</string>
<string key="NSMinGridSize">{0, 0}</string>
@@ -1765,7 +1757,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</array>
<string key="NSFrame">{{1, 1}, {179, 246}}</string>
<reference key="NSSuperview" ref="137614947"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="855568378"/>
<string key="NSReuseIdentifierKey">_NS:3365</string>
<reference key="NSDocView" ref="855568378"/>
@@ -1777,7 +1768,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{234, 1}, {15, 143}}</string>
<reference key="NSSuperview" ref="137614947"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="24365741"/>
<string key="NSReuseIdentifierKey">_NS:3372</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@@ -1791,7 +1781,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{1, 144}, {233, 15}}</string>
<reference key="NSSuperview" ref="137614947"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="91368854"/>
<string key="NSReuseIdentifierKey">_NS:3374</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@@ -1803,7 +1792,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</array>
<string key="NSFrame">{{38, 42}, {181, 248}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="171112102"/>
<string key="NSReuseIdentifierKey">_NS:3363</string>
<int key="NSsFlags">133682</int>
@@ -1819,7 +1807,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{280, 6}, {98, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="73572364"/>
<string key="NSReuseIdentifierKey">_NS:687</string>
<int key="NSTag">2</int>
@@ -1845,7 +1832,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{32, 6}, {98, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="397679595"/>
<string key="NSReuseIdentifierKey">_NS:687</string>
<int key="NSTag">1</int>
@@ -1871,7 +1857,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{132, 6}, {93, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="682387256"/>
<string key="NSReuseIdentifierKey">_NS:687</string>
<int key="NSTag">1</int>
@@ -1897,7 +1882,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{380, 6}, {93, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:687</string>
<int key="NSTag">2</int>
@@ -1923,7 +1907,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{32, 289}, {80, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="137614947"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<int key="NSTag">1</int>
@@ -1949,7 +1932,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{124, 289}, {101, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="816469593"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<int key="NSTag">1</int>
@@ -1975,7 +1957,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{35, 325}, {187, 17}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="805254006"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -2004,7 +1985,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{280, 289}, {80, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="903286001"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<int key="NSTag">2</int>
@@ -2030,7 +2010,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{372, 289}, {101, 32}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="38178535"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<int key="NSTag">2</int>
@@ -2056,7 +2035,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{283, 325}, {187, 17}}</string>
<reference key="NSSuperview" ref="782866499"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="960369332"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
@@ -2075,7 +2053,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</array>
<string key="NSFrame">{{10, 33}, {505, 345}}</string>
<reference key="NSSuperview" ref="145760790"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="364230398"/>
</object>
<string key="NSLabel">Memory Cards</string>
@@ -2556,7 +2533,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</array>
<string key="NSFrameSize">{551, 407}</string>
<reference key="NSSuperview"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="145760790"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string>
@@ -2587,10 +2563,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
<string>NeXT TIFF v4.0 pasteboard type</string>
</set>
- <string key="NSFrame">{{73, 85}, {32, 32}}</string>
+ <string key="NSFrame">{{65, 79}, {48, 48}}</string>
<reference key="NSSuperview" ref="873539094"/>
- <reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="979844614"/>
+ <reference key="NSNextKeyView" ref="534715842"/>
<string key="NSReuseIdentifierKey">_NS:2141</string>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="544613766">
@@ -2612,9 +2587,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<object class="NSTextField" id="979844614">
<reference key="NSNextResponder" ref="873539094"/>
<int key="NSvFlags">266</int>
- <string key="NSFrame">{{0, 60}, {178, 17}}</string>
+ <string key="NSFrame">{{0, 54}, {178, 17}}</string>
<reference key="NSSuperview" ref="873539094"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="938529027"/>
<string key="NSReuseIdentifierKey">_NS:3944</string>
<bool key="NSEnabled">YES</bool>
@@ -2633,9 +2607,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<object class="NSTextField" id="938529027">
<reference key="NSNextResponder" ref="873539094"/>
<int key="NSvFlags">266</int>
- <string key="NSFrame">{{0, 35}, {178, 17}}</string>
+ <string key="NSFrame">{{0, 29}, {178, 17}}</string>
<reference key="NSSuperview" ref="873539094"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="462204898"/>
<string key="NSReuseIdentifierKey">_NS:3944</string>
<bool key="NSEnabled">YES</bool>
@@ -2654,9 +2627,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<object class="NSTextField" id="462204898">
<reference key="NSNextResponder" ref="873539094"/>
<int key="NSvFlags">266</int>
- <string key="NSFrame">{{0, 16}, {178, 11}}</string>
+ <string key="NSFrame">{{0, 7}, {178, 14}}</string>
<reference key="NSSuperview" ref="873539094"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:3944</string>
<bool key="NSEnabled">YES</bool>
@@ -2677,17 +2649,46 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
+ <object class="NSCustomView" id="534715842">
+ <reference key="NSNextResponder" ref="873539094"/>
+ <int key="NSvFlags">4365</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSTextField" id="370252462">
+ <reference key="NSNextResponder" ref="534715842"/>
+ <int key="NSvFlags">274</int>
+ <string key="NSFrame">{{2, 5}, {20, 14}}</string>
+ <reference key="NSSuperview" ref="534715842"/>
+ <reference key="NSNextKeyView" ref="979844614"/>
+ <string key="NSReuseIdentifierKey">_NS:1535</string>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="502243962">
+ <int key="NSCellFlags">68157504</int>
+ <int key="NSCellFlags2">138544128</int>
+ <string key="NSContents">0</string>
+ <reference key="NSSupport" ref="26"/>
+ <string key="NSCellIdentifier">_NS:1535</string>
+ <reference key="NSControlView" ref="370252462"/>
+ <reference key="NSBackgroundColor" ref="243535788"/>
+ <reference key="NSTextColor" ref="271765176"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ </array>
+ <string key="NSFrame">{{89, 103}, {24, 24}}</string>
+ <reference key="NSSuperview" ref="873539094"/>
+ <reference key="NSNextKeyView" ref="370252462"/>
+ <string key="NSReuseIdentifierKey">_NS:9</string>
+ <string key="NSClassName">MemBadgeView</string>
+ </object>
</array>
- <string key="NSFrameSize">{179, 120}</string>
+ <string key="NSFrameSize">{179, 130}</string>
<reference key="NSSuperview" ref="369120847"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="547270477"/>
<string key="NSReuseIdentifierKey">_NS:11</string>
</object>
</array>
- <string key="NSFrameSize">{179, 120}</string>
+ <string key="NSFrameSize">{179, 130}</string>
<reference key="NSSuperview" ref="128798333"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="873539094"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSOffsets">{0, 0}</string>
@@ -2715,9 +2716,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</object>
</object>
</array>
- <string key="NSFrameSize">{179, 120}</string>
+ <string key="NSFrameSize">{180, 130}</string>
<reference key="NSSuperview"/>
- <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="369120847"/>
</object>
<object class="NSCollectionViewItem" id="1047165271"/>
@@ -3591,35 +3591,35 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">contentArray: self.memCard2Array</string>
+ <string key="label">contentArray: self.memCard2Array.memoryArray</string>
<reference key="source" ref="94388034"/>
<reference key="destination" ref="363971326"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="94388034"/>
<reference key="NSDestination" ref="363971326"/>
- <string key="NSLabel">contentArray: self.memCard2Array</string>
+ <string key="NSLabel">contentArray: self.memCard2Array.memoryArray</string>
<string key="NSBinding">contentArray</string>
- <string key="NSKeyPath">self.memCard2Array</string>
+ <string key="NSKeyPath">self.memCard2Array.memoryArray</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">995</int>
+ <int key="connectionID">1033</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">contentArray: self.memCard1Array</string>
+ <string key="label">contentArray: self.memCard1Array.memoryArray</string>
<reference key="source" ref="104514835"/>
<reference key="destination" ref="363971326"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="104514835"/>
<reference key="NSDestination" ref="363971326"/>
- <string key="NSLabel">contentArray: self.memCard1Array</string>
+ <string key="NSLabel">contentArray: self.memCard1Array.memoryArray</string>
<string key="NSBinding">contentArray</string>
- <string key="NSKeyPath">self.memCard1Array</string>
+ <string key="NSKeyPath">self.memCard1Array.memoryArray</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">994</int>
+ <int key="connectionID">1034</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
@@ -3655,7 +3655,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">988</int>
+ <int key="connectionID">1057</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
@@ -3705,6 +3705,62 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</object>
<int key="connectionID">989</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: representedObject.isBiggerThanOne</string>
+ <reference key="source" ref="534715842"/>
+ <reference key="destination" ref="1047165271"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="534715842"/>
+ <reference key="NSDestination" ref="1047165271"/>
+ <string key="NSLabel">hidden: representedObject.isBiggerThanOne</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">representedObject.isBiggerThanOne</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSValueTransformerName</string>
+ <string key="NS.object.0">NSNegateBoolean</string>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1044</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: representedObject.blockSize</string>
+ <reference key="source" ref="370252462"/>
+ <reference key="destination" ref="1047165271"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="370252462"/>
+ <reference key="NSDestination" ref="1047165271"/>
+ <string key="NSLabel">value: representedObject.blockSize</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">representedObject.blockSize</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1052</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: representedObject.isBiggerThanOne</string>
+ <reference key="source" ref="370252462"/>
+ <reference key="destination" ref="1047165271"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="370252462"/>
+ <reference key="NSDestination" ref="1047165271"/>
+ <string key="NSLabel">hidden: representedObject.isBiggerThanOne</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">representedObject.isBiggerThanOne</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSValueTransformerName</string>
+ <string key="NS.object.0">NSNegateBoolean</string>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1055</int>
+ </object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
@@ -4947,9 +5003,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<reference key="object" ref="369120847"/>
<array class="NSMutableArray" key="children">
<reference ref="547270477"/>
- <reference ref="462204898"/>
+ <reference ref="534715842"/>
<reference ref="979844614"/>
<reference ref="938529027"/>
+ <reference ref="462204898"/>
</array>
<reference key="parent" ref="128798333"/>
</object>
@@ -5005,12 +5062,36 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<reference key="object" ref="544613766"/>
<reference key="parent" ref="547270477"/>
</object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1021</int>
+ <reference key="object" ref="534715842"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="370252462"/>
+ </array>
+ <reference key="parent" ref="369120847"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1047</int>
+ <reference key="object" ref="370252462"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="502243962"/>
+ </array>
+ <reference key="parent" ref="534715842"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1048</int>
+ <reference key="object" ref="502243962"/>
+ <reference key="parent" ref="370252462"/>
+ </object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="1021.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="1047.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="1048.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="21.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSMutableDictionary" key="238.IBAttributePlaceholdersKey">
@@ -5272,295 +5353,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
- <int key="maxID">1018</int>
- </object>
- <object class="IBClassDescriber" key="IBDocument.Classes">
- <array class="NSMutableArray" key="referencedPartialClassDescriptions">
- <object class="IBPartialClassDescription">
- <string key="className">ConfigurationController</string>
- <string key="superclassName">NSWindowController</string>
- <dictionary class="NSMutableDictionary" key="actions">
- <string key="mcdChangeClicked:">id</string>
- <string key="mcdNewClicked:">id</string>
- <string key="setCheckbox:">id</string>
- <string key="setCheckboxInverse:">id</string>
- <string key="setVideoType:">id</string>
- </dictionary>
- <dictionary class="NSMutableDictionary" key="actionInfosByName">
- <object class="IBActionInfo" key="mcdChangeClicked:">
- <string key="name">mcdChangeClicked:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo" key="mcdNewClicked:">
- <string key="name">mcdNewClicked:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo" key="setCheckbox:">
- <string key="name">setCheckbox:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo" key="setCheckboxInverse:">
- <string key="name">setCheckboxInverse:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo" key="setVideoType:">
- <string key="name">setVideoType:</string>
- <string key="candidateClassName">id</string>
- </object>
- </dictionary>
- <dictionary class="NSMutableDictionary" key="outlets">
- <string key="autoVTypeCell">id</string>
- <string key="bwMdecCell">id</string>
- <string key="cdromPlugin">PluginController</string>
- <string key="consoleOutputCell">id</string>
- <string key="enableNetPlayCell">id</string>
- <string key="graphicsPlugin">PluginController</string>
- <string key="hkController">HotkeyController</string>
- <string key="hkTab">NSTabViewItem</string>
- <string key="memCardEdit">PcsxrMemCardController</string>
- <string key="netPlugin">PluginController</string>
- <string key="noCDAudioCell">id</string>
- <string key="noFastBootCell">id</string>
- <string key="noXaAudioCell">id</string>
- <string key="padPlugin">PluginController</string>
- <string key="rCountFixCell">id</string>
- <string key="sio1Plugin">PluginController</string>
- <string key="sioIrqAlwaysCell">id</string>
- <string key="soundPlugin">PluginController</string>
- <string key="spuIrqAlwaysCell">id</string>
- <string key="usesDynarecCell">id</string>
- <string key="usesHleCell">id</string>
- <string key="vSyncWAFixCell">id</string>
- <string key="vTypePALCell">id</string>
- <string key="widescreen">id</string>
- </dictionary>
- <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
- <object class="IBToOneOutletInfo" key="autoVTypeCell">
- <string key="name">autoVTypeCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="bwMdecCell">
- <string key="name">bwMdecCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="cdromPlugin">
- <string key="name">cdromPlugin</string>
- <string key="candidateClassName">PluginController</string>
- </object>
- <object class="IBToOneOutletInfo" key="consoleOutputCell">
- <string key="name">consoleOutputCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="enableNetPlayCell">
- <string key="name">enableNetPlayCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="graphicsPlugin">
- <string key="name">graphicsPlugin</string>
- <string key="candidateClassName">PluginController</string>
- </object>
- <object class="IBToOneOutletInfo" key="hkController">
- <string key="name">hkController</string>
- <string key="candidateClassName">HotkeyController</string>
- </object>
- <object class="IBToOneOutletInfo" key="hkTab">
- <string key="name">hkTab</string>
- <string key="candidateClassName">NSTabViewItem</string>
- </object>
- <object class="IBToOneOutletInfo" key="memCardEdit">
- <string key="name">memCardEdit</string>
- <string key="candidateClassName">PcsxrMemCardController</string>
- </object>
- <object class="IBToOneOutletInfo" key="netPlugin">
- <string key="name">netPlugin</string>
- <string key="candidateClassName">PluginController</string>
- </object>
- <object class="IBToOneOutletInfo" key="noCDAudioCell">
- <string key="name">noCDAudioCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="noFastBootCell">
- <string key="name">noFastBootCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="noXaAudioCell">
- <string key="name">noXaAudioCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="padPlugin">
- <string key="name">padPlugin</string>
- <string key="candidateClassName">PluginController</string>
- </object>
- <object class="IBToOneOutletInfo" key="rCountFixCell">
- <string key="name">rCountFixCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="sio1Plugin">
- <string key="name">sio1Plugin</string>
- <string key="candidateClassName">PluginController</string>
- </object>
- <object class="IBToOneOutletInfo" key="sioIrqAlwaysCell">
- <string key="name">sioIrqAlwaysCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="soundPlugin">
- <string key="name">soundPlugin</string>
- <string key="candidateClassName">PluginController</string>
- </object>
- <object class="IBToOneOutletInfo" key="spuIrqAlwaysCell">
- <string key="name">spuIrqAlwaysCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="usesDynarecCell">
- <string key="name">usesDynarecCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="usesHleCell">
- <string key="name">usesHleCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="vSyncWAFixCell">
- <string key="name">vSyncWAFixCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="vTypePALCell">
- <string key="name">vTypePALCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo" key="widescreen">
- <string key="name">widescreen</string>
- <string key="candidateClassName">id</string>
- </object>
- </dictionary>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">./Classes/ConfigurationController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">HotkeyController</string>
- <string key="superclassName">NSView</string>
- <object class="NSMutableDictionary" key="actions">
- <string key="NS.key.0">hotkeySet:</string>
- <string key="NS.object.0">id</string>
- </object>
- <object class="NSMutableDictionary" key="actionInfosByName">
- <string key="NS.key.0">hotkeySet:</string>
- <object class="IBActionInfo" key="NS.object.0">
- <string key="name">hotkeySet:</string>
- <string key="candidateClassName">id</string>
- </object>
- </object>
- <dictionary class="NSMutableDictionary" key="outlets">
- <string key="FastForward">NSTextField</string>
- <string key="FrameLimit">NSTextField</string>
- <string key="LoadState">NSTextField</string>
- <string key="NextState">NSTextField</string>
- <string key="PrevState">NSTextField</string>
- <string key="SaveState">NSTextField</string>
- </dictionary>
- <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
- <object class="IBToOneOutletInfo" key="FastForward">
- <string key="name">FastForward</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo" key="FrameLimit">
- <string key="name">FrameLimit</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo" key="LoadState">
- <string key="name">LoadState</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo" key="NextState">
- <string key="name">NextState</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo" key="PrevState">
- <string key="name">PrevState</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo" key="SaveState">
- <string key="name">SaveState</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- </dictionary>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">./Classes/HotkeyController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">PcsxrMemCardController</string>
- <string key="superclassName">NSViewController</string>
- <dictionary class="NSMutableDictionary" key="actions">
- <string key="changeMemCard:">id</string>
- <string key="deleteMemoryObject:">id</string>
- <string key="formatCard:">id</string>
- <string key="moveBlock:">id</string>
- <string key="newMemCard:">id</string>
- </dictionary>
- <dictionary class="NSMutableDictionary" key="actionInfosByName">
- <object class="IBActionInfo" key="changeMemCard:">
- <string key="name">changeMemCard:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo" key="deleteMemoryObject:">
- <string key="name">deleteMemoryObject:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo" key="formatCard:">
- <string key="name">formatCard:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo" key="moveBlock:">
- <string key="name">moveBlock:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo" key="newMemCard:">
- <string key="name">newMemCard:</string>
- <string key="candidateClassName">id</string>
- </object>
- </dictionary>
- <dictionary class="NSMutableDictionary" key="outlets">
- <string key="memCard1Label">NSTextField</string>
- <string key="memCard1view">NSCollectionView</string>
- <string key="memCard2Label">NSTextField</string>
- <string key="memCard2view">NSCollectionView</string>
- </dictionary>
- <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
- <object class="IBToOneOutletInfo" key="memCard1Label">
- <string key="name">memCard1Label</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo" key="memCard1view">
- <string key="name">memCard1view</string>
- <string key="candidateClassName">NSCollectionView</string>
- </object>
- <object class="IBToOneOutletInfo" key="memCard2Label">
- <string key="name">memCard2Label</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo" key="memCard2view">
- <string key="name">memCard2view</string>
- <string key="candidateClassName">NSCollectionView</string>
- </object>
- </dictionary>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">./Classes/PcsxrMemCardController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">PluginController</string>
- <string key="superclassName">SPUPluginController</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">./Classes/PluginController.h</string>
- </object>
- </object>
- </array>
+ <int key="maxID">1057</int>
</object>
+ <object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
diff --git a/macosx/English.lproj/Localizable.strings b/macosx/English.lproj/Localizable.strings
index 2166bcfb..5367f575 100644
--- a/macosx/English.lproj/Localizable.strings
+++ b/macosx/English.lproj/Localizable.strings
@@ -52,18 +52,28 @@
"CD-ROM ID: %.9s\n" = "CD-ROM ID: %.9s\n";
"Error opening file: %s.\n" = "Error opening file: %s.\n";
"Unknown CPE opcode %02x at poiition %08x.\n" = "Unknown CPE opcode %02x at position %08x.\n";
+
+"Error opening file" = "Error opening file.";
+"Unable to open %@: %@" = "Unable to open %@: %@.";
+
+
+//Memory card management
"Format Card" = "Format Card";
-"Cancel" = "Cancel";
+"Free Size" = "Free Size";
"Format" = "Format";
"Formatting a memory card will remove all data on it.\n\nThis cannot be undone." = "Formatting a memory card will remove all data on it.\n\nThis cannot be undone.";
"Delete Block" = "Delete Block";
-"Deleting a block will remove all saved data on that block.\n\nThis cannot be undone." = "Deleting a block will remove all saved data on that block.\n\nThis cannot be undone.";
-"Delete" = "Delete";
+"Deleting a block will remove all saved data on that block.\n\nThis cannot be undone." = "Deleting a memory card object will set the blocks to not be readable by the emulator, and may result in the data being overwritten.";
"No Free Space" = "No Free Space";
-"Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue" = "Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue";
+"Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue" = "Memory card %d doesn't have %d free blocks on it. Please remove some blocks on that card to continue.";
+"Memory card %i does not have enough free consecutive blocks.\n\nIn order to copy over \"%@ (%@),\" memory card %i must be compressed. Compressing memory cards will make deleted blocks unrecoverable.\n\nDo you want to continue?" = "Memory card %i does not have enough free consecutive blocks.\n\nIn order to copy over \"%@ (%@),\" memory card %i must be compressed. Compressing memory cards will make deleted blocks unrecoverable.\n\nDo you want to continue?";
+
+//General buttons
"Okay" = "Okay";
-"Error opening file" = "Error opening file";
-"Unable to open %@: %@" = "Unable to open %@: %@";
+"Cancel" = "Cancel";
+"Yes" = "Yes";
+"No" = "No";
+"Delete" = "Delete";
//Mem card flags
"MemCard_Deleted" = "Deleted";
diff --git a/macosx/MemBadgeView.h b/macosx/MemBadgeView.h
new file mode 100644
index 00000000..f9696008
--- /dev/null
+++ b/macosx/MemBadgeView.h
@@ -0,0 +1,13 @@
+//
+// MemBadgeView.h
+// Pcsxr
+//
+// Created by C.W. Betts on 7/6/13.
+//
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface MemBadgeView : NSView
+
+@end
diff --git a/macosx/MemBadgeView.m b/macosx/MemBadgeView.m
new file mode 100644
index 00000000..3a7b8277
--- /dev/null
+++ b/macosx/MemBadgeView.m
@@ -0,0 +1,53 @@
+//
+// MemBadgeView.m
+// Pcsxr
+//
+// Created by C.W. Betts on 7/6/13.
+//
+//
+
+#import "MemBadgeView.h"
+#import "ARCBridge.h"
+
+@implementation MemBadgeView
+
+//TODO: also include the memory count in the view as well.
+- (id)initWithFrame:(NSRect)frame
+{
+ self = [super initWithFrame:frame];
+ if (self) {
+ // Initialization code here.
+ }
+
+ return self;
+}
+
+- (void)drawRect:(NSRect)dirtyRect
+{
+ NSRect drawToRect = dirtyRect;
+ NSImage *tmpDraw = nil;
+ if (!NSEqualSizes(self.frame.size, dirtyRect.size)) {
+ drawToRect = (NSRect) {NSZeroPoint, self.frame.size};
+ tmpDraw = [[NSImage alloc] initWithSize:drawToRect.size];
+ [tmpDraw lockFocus];
+ }
+ [[NSColor whiteColor] set];
+ [[NSBezierPath bezierPathWithOvalInRect:drawToRect] fill];
+ [[NSColor redColor] set];
+ NSRect smallerRect = drawToRect;
+ smallerRect.origin.x += 2;
+ smallerRect.origin.y += 2;
+ smallerRect.size.height -= 4;
+ smallerRect.size.width -= 4;
+ [[NSBezierPath bezierPathWithOvalInRect:smallerRect] fill];
+
+ if (tmpDraw) {
+ [tmpDraw unlockFocus];
+
+ [tmpDraw drawInRect:dirtyRect fromRect:dirtyRect operation:NSCompositeSourceOver fraction:1.0];
+
+ RELEASEOBJ(tmpDraw);
+ }
+}
+
+@end
diff --git a/macosx/Pcsxr.xcodeproj/project.pbxproj b/macosx/Pcsxr.xcodeproj/project.pbxproj
index 8b244e78..d8a8cf58 100644
--- a/macosx/Pcsxr.xcodeproj/project.pbxproj
+++ b/macosx/Pcsxr.xcodeproj/project.pbxproj
@@ -212,6 +212,8 @@
55BBA69914953887003B2CEC /* PcsxrDiscHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 55BBA69814953887003B2CEC /* PcsxrDiscHandler.m */; };
55BBA69C1495839A003B2CEC /* PcsxrFreezeStateHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 55BBA69B1495839A003B2CEC /* PcsxrFreezeStateHandler.m */; };
55C7A214148B2B3800C22ABC /* PcsxrMemCardDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55C7A216148B2B3800C22ABC /* PcsxrMemCardDocument.xib */; };
+ 55EC05FB1788B1230053AC23 /* PcsxrMemCardArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 55EC05FA1788B1230053AC23 /* PcsxrMemCardArray.m */; };
+ 55EC05FE178916E80053AC23 /* MemBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 55EC05FD178916E70053AC23 /* MemBadgeView.m */; };
712FD1E81093096F00575A92 /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 712FD1E51093096F00575A92 /* debug.c */; };
712FD1E91093096F00575A92 /* socket.c in Sources */ = {isa = PBXBuildFile; fileRef = 712FD1E61093096F00575A92 /* socket.c */; };
713B530E110B75650002F164 /* ppf.c in Sources */ = {isa = PBXBuildFile; fileRef = 713B530C110B75650002F164 /* ppf.c */; };
@@ -730,6 +732,10 @@
55BBA69A14958399003B2CEC /* PcsxrFreezeStateHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PcsxrFreezeStateHandler.h; sourceTree = "<group>"; };
55BBA69B1495839A003B2CEC /* PcsxrFreezeStateHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PcsxrFreezeStateHandler.m; sourceTree = "<group>"; };
55C7A215148B2B3800C22ABC /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PcsxrMemCardDocument.xib; sourceTree = "<group>"; };
+ 55EC05F91788B1230053AC23 /* PcsxrMemCardArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PcsxrMemCardArray.h; sourceTree = "<group>"; };
+ 55EC05FA1788B1230053AC23 /* PcsxrMemCardArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PcsxrMemCardArray.m; sourceTree = "<group>"; };
+ 55EC05FC178916E70053AC23 /* MemBadgeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemBadgeView.h; sourceTree = "<group>"; };
+ 55EC05FD178916E70053AC23 /* MemBadgeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MemBadgeView.m; sourceTree = "<group>"; };
712FD1E51093096F00575A92 /* debug.c */ = {isa = PBXFileReference; fileEncoding = 0; lastKnownFileType = sourcecode.c.c; path = debug.c; sourceTree = "<group>"; };
712FD1E61093096F00575A92 /* socket.c */ = {isa = PBXFileReference; fileEncoding = 0; lastKnownFileType = sourcecode.c.c; path = socket.c; sourceTree = "<group>"; };
712FD1E71093096F00575A92 /* socket.h */ = {isa = PBXFileReference; fileEncoding = 0; lastKnownFileType = sourcecode.c.h; path = socket.h; sourceTree = "<group>"; };
@@ -997,6 +1003,10 @@
7161C2970FDED75300225F97 /* ExtendedKeys.h */,
55A90227147D89380037E18F /* PcsxrMemoryObject.h */,
55A90228147D89380037E18F /* PcsxrMemoryObject.m */,
+ 55EC05F91788B1230053AC23 /* PcsxrMemCardArray.h */,
+ 55EC05FA1788B1230053AC23 /* PcsxrMemCardArray.m */,
+ 55EC05FC178916E70053AC23 /* MemBadgeView.h */,
+ 55EC05FD178916E70053AC23 /* MemBadgeView.m */,
02717969167884DF004AED62 /* hotkeys.h */,
02717967167884C9004AED62 /* hotkeys.m */,
5550D2711683C923006C56B5 /* RecentItemsMenu.h */,
@@ -2226,6 +2236,8 @@
02717968167884C9004AED62 /* hotkeys.m in Sources */,
5529EA11169CBE3400BAA2A5 /* RecentItemsMenu.m in Sources */,
D422E67A16DC495800526DCF /* CheatController.m in Sources */,
+ 55EC05FB1788B1230053AC23 /* PcsxrMemCardArray.m in Sources */,
+ 55EC05FE178916E80053AC23 /* MemBadgeView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/macosx/PcsxrController.m b/macosx/PcsxrController.m
index 8ca55692..6943fcac 100755
--- a/macosx/PcsxrController.m
+++ b/macosx/PcsxrController.m
@@ -122,7 +122,7 @@ void ShowHelpAndExit(FILE* output, int exitCode)
[deviceName deleteCharactersInRange:rdiskRange];
}
// execute hdiutil to eject the device
- ejectTask = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/hdiutil" arguments:[NSArray arrayWithObjects:@"eject", deviceName, nil]];
+ ejectTask = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/hdiutil" arguments:@[@"eject", deviceName]];
[ejectTask waitUntilExit];
}
}
@@ -497,9 +497,8 @@ otherblock();\
}
RETAINOBJNORETURN(unknownString);
}
- NSLog(@"%@", unknownString);
+ NSLog(@"%@. This may be due to extra arguments passed by the OS or debugger.", unknownString);
RELEASEOBJ(unknownString);
- NSLog(@"This may be due to extra arguments passed by the OS or debugger.");
}
#endif
if (!isLaunchable && hasParsedAnArgument) {
diff --git a/macosx/PcsxrMemCardArray.h b/macosx/PcsxrMemCardArray.h
new file mode 100644
index 00000000..760f4726
--- /dev/null
+++ b/macosx/PcsxrMemCardArray.h
@@ -0,0 +1,36 @@
+//
+// PcsxrMemCardArray.h
+// Pcsxr
+//
+// Created by C.W. Betts on 7/6/13.
+//
+//
+
+#import <Foundation/Foundation.h>
+#import "PcsxrMemoryObject.h"
+
+@interface PcsxrMemCardArray : NSObject
+{
+ @private
+ NSArray *rawArray;
+ int cardNumber;
+ NSURL *fileURL;
+}
+
+- (id)initWithMemoryCardNumber:(int)carNum;
+
+- (void)deleteMemoryBlocksAtIndex:(int)slotnum;
+- (void)compactMemory;
+//Blocks that are free
+- (int)freeBlocks;
+//Blocks that have been deleted and are free
+- (int)availableBlocks;
+- (int)memorySizeAtIndex:(int)idx;
+- (BOOL)moveBlockAtIndex:(int)idx toMemoryCard:(PcsxrMemCardArray*)otherCard;
+- (int)indexOfFreeBlocksWithSize:(int)asize;
+
+
+@property (nonatomic, readonly, unsafe_unretained) NSArray *memoryArray;
+@property (nonatomic, readonly, unsafe_unretained) NSURL *memCardLocation;
+
+@end
diff --git a/macosx/PcsxrMemCardArray.m b/macosx/PcsxrMemCardArray.m
new file mode 100644
index 00000000..181b993d
--- /dev/null
+++ b/macosx/PcsxrMemCardArray.m
@@ -0,0 +1,244 @@
+//
+// PcsxrMemCardArray.m
+// Pcsxr
+//
+// Created by C.W. Betts on 7/6/13.
+//
+//
+
+#import "PcsxrMemCardArray.h"
+#import "ARCBridge.h"
+#import "ConfigurationController.h"
+
+#define MAX_MEMCARD_BLOCKS 15
+
+static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, char *str)
+{
+ // header
+ memmove(to + (dsti + 1) * 128, from + (srci + 1) * 128, 128);
+ SaveMcd(str, to, (dsti + 1) * 128, 128);
+
+ // data
+ memmove(to + (dsti + 1) * 1024 * 8, from + (srci+1) * 1024 * 8, 1024 * 8);
+ SaveMcd(str, to, (dsti + 1) * 1024 * 8, 1024 * 8);
+
+ //printf("data = %s\n", from + (srci+1) * 128);
+}
+
+
+@interface PcsxrMemCardArray ()
+@property (arcretain) NSArray *rawArray;
+
+@end
+
+@implementation PcsxrMemCardArray
+@synthesize rawArray;
+
+- (id)initWithMemoryCardNumber:(int)carNum
+{
+ NSParameterAssert(carNum == 1 || carNum == 2);
+ if (self = [super init]) {
+ NSMutableArray *tmpMemArray = [[NSMutableArray alloc] initWithCapacity:MAX_MEMCARD_BLOCKS];
+ cardNumber = carNum;
+ int i, x;
+ i = 0;
+ while (i < MAX_MEMCARD_BLOCKS) {
+ x = 1;
+ McdBlock memBlock, tmpBlock;
+ GetMcdBlockInfo(carNum, i + 1, &memBlock);
+
+ if ([PcsxrMemoryObject memFlagsFromBlockFlags:memBlock.Flags] == memFlagFree) {
+ //Free space: ignore
+ i++;
+ continue;
+ }
+ do {
+ GetMcdBlockInfo(carNum, i + x + 1, &tmpBlock);
+ if ((tmpBlock.Flags & 0x3) == 0x3) {
+ x++;
+ break;
+ } else if ((tmpBlock.Flags & 0x2) == 0x2) {
+ x++;
+ } else {
+ break;
+ }
+ } while (i + x - 1 < MAX_MEMCARD_BLOCKS);
+ PcsxrMemoryObject *obj = [[PcsxrMemoryObject alloc] initWithMcdBlock:&memBlock startingIndex:i size:x];
+ [tmpMemArray addObject:obj];
+ RELEASEOBJ(obj);
+ i += x;
+ }
+ self.rawArray = [NSArray arrayWithArray:tmpMemArray];
+ RELEASEOBJ(tmpMemArray);
+ }
+ return self;
+}
+
+- (int)indexOfFreeBlocksWithSize:(int)asize
+{
+ int foundcount = 0, i = 0;
+
+ McdBlock obj;
+ // search for empty (formatted) blocks first
+ while (i < MAX_MEMCARD_BLOCKS && foundcount < asize) {
+ GetMcdBlockInfo(cardNumber, 1 + i++, &obj);
+ //&Blocks[target_card][++i];
+ if ((obj.Flags & 0xFF) == 0xA0) { // if A0 but not A1
+ foundcount++;
+ } else if (foundcount >= 1) { // need to find n count consecutive blocks
+ foundcount = 0;
+ } else {
+ //i++;
+ }
+ //printf("formatstatus=%x\n", Info->Flags);
+ }
+
+ if (foundcount == asize)
+ return (i-foundcount);
+
+ // no free formatted slots, try to find a deleted one
+ foundcount = i = 0;
+ while (i < MAX_MEMCARD_BLOCKS && foundcount < asize) {
+ GetMcdBlockInfo(cardNumber, 1 + i++, &obj);
+ if ((obj.Flags & 0xF0) == 0xA0) { // A2 or A6 f.e.
+ foundcount++;
+ } else if (foundcount >= 1) { // need to find n count consecutive blocks
+ foundcount = 0;
+ } else {
+ //i++;
+ }
+ //printf("delstatus=%x\n", Info->Flags);
+ }
+
+ if (foundcount == asize)
+ return (i-foundcount);
+
+ return -1;
+}
+
+- (BOOL)moveBlockAtIndex:(int)idx toMemoryCard:(PcsxrMemCardArray*)otherCard
+{
+ if (idx == [rawArray count]) {
+#ifdef DEBUG
+ NSLog(@"Trying to get an object one more than the length of the raw array. Perhaps you were trying to \"move\" the free blocks");
+#endif
+ return NO;
+ }
+
+
+ //TODO: Implement!
+ return NO;
+}
+
+
+- (int)freeBlocks
+{
+ int memSize = 15;
+ for (PcsxrMemoryObject *memObj in rawArray) {
+ memSize -= memObj.blockSize;
+ }
+ return memSize;
+}
+
+- (int)availableBlocks
+{
+ int memSize = MAX_MEMCARD_BLOCKS;
+ for (PcsxrMemoryObject *memObj in rawArray) {
+ if (memObj.flagNameIndex != memFlagDeleted) {
+ memSize -= memObj.blockSize;
+ }
+ }
+ return memSize;
+}
+
+- (NSArray*)memoryArray
+{
+ int freeSize = [self freeBlocks];
+
+ if (freeSize) {
+ McdBlock theBlock;
+ //Create a blank "block" that will be used for
+ theBlock.Flags = 0xA0;
+ theBlock.IconCount = 0;
+ PcsxrMemoryObject *freeObj = [[PcsxrMemoryObject alloc] initWithMcdBlock:&theBlock startingIndex:MAX_MEMCARD_BLOCKS - 1 - freeSize size:freeSize];
+ return [rawArray arrayByAddingObject:AUTORELEASEOBJ(freeObj)];
+ } else
+ return rawArray;
+}
+
+- (NSURL*)memCardLocation
+{
+ if (cardNumber == 1) {
+ return [[NSUserDefaults standardUserDefaults] URLForKey:@"Mcd1"];
+ } else {
+ return [[NSUserDefaults standardUserDefaults] URLForKey:@"Mcd2"];
+ }
+}
+
+- (int)memorySizeAtIndex:(int)idx
+{
+ if (idx == [rawArray count]) {
+#ifdef DEBUG
+ NSLog(@"Trying to get an object one more than the length of the raw array. Perhaps you were trying to \"delete\" the free blocks");
+#endif
+ return [self freeBlocks];
+ }
+
+ return [[rawArray objectAtIndex:idx] blockSize];
+}
+
+- (void)compactMemory
+{
+
+#if 0
+ LoadMcd(cardNumber, cardNumber == 1 ? Config.Mcd1 : Config.Mcd2);
+ [[NSNotificationCenter defaultCenter] postNotificationName:memChangeNotifier object:nil userInfo:[NSDictionary dictionaryWithObject:@(cardNumber) forKey:memCardChangeNumberKey]];
+#endif
+}
+
+- (void)deleteMemoryBlocksAtIndex:(int)slotnum
+{
+ int xor = 0, i, j;
+ char *data, *ptr, *filename;
+ if (cardNumber == 1) {
+ filename = Config.Mcd1;
+ data = Mcd1Data;
+ } else {
+ filename = Config.Mcd2;
+ data = Mcd2Data;
+ }
+
+ if (slotnum == [rawArray count]) {
+#ifdef DEBUG
+ NSLog(@"Trying to get an object one more than the length of the raw array. Perhaps you were trying to \"delete\" the free blocks");
+#endif
+ return;
+ }
+
+ PcsxrMemoryObject *theObj = [rawArray objectAtIndex:slotnum];
+
+ McdBlock flagBlock;
+
+ for(i = theObj.startingIndex +1; i < (theObj.startingIndex + theObj.blockSize +1); i++)
+ {
+ GetMcdBlockInfo(cardNumber, i, &flagBlock);
+ ptr = data + i * 128;
+
+ if ((flagBlock.Flags & 0xF0) == 0xA0) {
+ if ((flagBlock.Flags & 0xF) >= 1 &&
+ (flagBlock.Flags & 0xF) <= 3) { // deleted
+ *ptr = 0x50 | (flagBlock.Flags & 0xF);
+ } else return;
+ } else if ((flagBlock.Flags & 0xF0) == 0x50) { // used
+ *ptr = 0xA0 | (flagBlock.Flags & 0xF);
+ } else { continue; }
+
+ for (j = 0; j < 127; j++) xor ^= *ptr++;
+ *ptr = xor;
+
+ SaveMcd(filename, data, i * 128, 128);
+ }
+}
+
+
+@end
diff --git a/macosx/PcsxrMemCardController.h b/macosx/PcsxrMemCardController.h
index 8e92de95..213e1e2c 100755
--- a/macosx/PcsxrMemCardController.h
+++ b/macosx/PcsxrMemCardController.h
@@ -7,6 +7,8 @@
//
#import <Cocoa/Cocoa.h>
+#import "ARCBridge.h"
+@class PcsxrMemCardArray;
@interface PcsxrMemCardController : NSViewController
{
@@ -15,10 +17,12 @@
IBOutlet NSTextField *memCard1Label;
IBOutlet NSTextField *memCard2Label;
- NSMutableArray *memCard1Array;
- NSMutableArray *memCard2Array;
+ PcsxrMemCardArray *memCard1Array;
+ PcsxrMemCardArray *memCard2Array;
NSTimer *imageAnimateTimer;
}
+@property (readonly, arcretain) PcsxrMemCardArray *memCard1Array;
+@property (readonly, arcretain) PcsxrMemCardArray *memCard2Array;
- (IBAction)moveBlock:(id)sender;
- (IBAction)formatCard:(id)sender;
@@ -26,6 +30,4 @@
- (IBAction)newMemCard:(id)sender;
- (IBAction)changeMemCard:(id)sender;
- (void)loadMemoryCardInfoForCard:(int)theCard;
-- (BOOL)isMemoryBlockEmptyOnCard:(int)aCard block:(int)aBlock;
-- (int)countFreeBlocksOnCard:(int)aCard;
@end
diff --git a/macosx/PcsxrMemCardController.m b/macosx/PcsxrMemCardController.m
index 5c430cff..e04ace66 100755
--- a/macosx/PcsxrMemCardController.m
+++ b/macosx/PcsxrMemCardController.m
@@ -10,26 +10,21 @@
#import "PcsxrMemoryObject.h"
#import "ConfigurationController.h"
#import "PcsxrMemCardHandler.h"
+#import "PcsxrMemCardArray.h"
#include "sio.h"
#import "ARCBridge.h"
#define MAX_MEMCARD_BLOCKS 15
-static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, char *str)
-{
- // header
- memcpy(to + (dsti + 1) * 128, from + (srci + 1) * 128, 128);
- SaveMcd(str, to, (dsti + 1) * 128, 128);
-
- // data
- memcpy(to + (dsti + 1) * 1024 * 8, from + (srci+1) * 1024 * 8, 1024 * 8);
- SaveMcd(str, to, (dsti + 1) * 1024 * 8, 1024 * 8);
-
- //printf("data = %s\n", from + (srci+1) * 128);
-}
+@interface PcsxrMemCardController ()
+@property (readwrite, arcretain) PcsxrMemCardArray *memCard1Array;
+@property (readwrite, arcretain) PcsxrMemCardArray *memCard2Array;
+@end
@implementation PcsxrMemCardController
+@synthesize memCard1Array, memCard2Array;
+
//memCard1Array KVO functions
- (void)setupValues:(int)theCards
@@ -50,7 +45,6 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha
fileName = [fm displayNameAtPath:fullPath];
[memCard1Label setTitleWithMnemonic:fileName];
-
[memCard1Label setToolTip:fullPath];
[self loadMemoryCardInfoForCard:1];
@@ -61,65 +55,12 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha
fileName = [fm displayNameAtPath:fullPath];
[memCard2Label setTitleWithMnemonic:fileName];
-
[memCard2Label setToolTip:fullPath];
[self loadMemoryCardInfoForCard:2];
}
}
--(void)insertObject:(PcsxrMemoryObject *)p inMemCard1ArrayAtIndex:(NSUInteger)index
-{
- [memCard1Array insertObject:p atIndex:index];
-}
-
--(void)removeObjectFromMemCard1ArrayAtIndex:(NSUInteger)index
-{
- [memCard1Array removeObjectAtIndex:index];
-}
-
-- (void)setMemCard1Array:(NSMutableArray *)a
-{
- if (memCard1Array != a) {
-#if !__has_feature(objc_arc)
- [memCard1Array release];
-#endif
- memCard1Array = [a mutableCopy];
- }
-}
-
-- (NSArray *)memCard1Array
-{
- return [NSArray arrayWithArray:memCard1Array];
-}
-
-//memCard2Array KVO functions
-
--(void)insertObject:(PcsxrMemoryObject *)p inMemCard2ArrayAtIndex:(NSUInteger)index
-{
- [memCard2Array insertObject:p atIndex:index];
-}
-
--(void)removeObjectFromMemCard2ArrayAtIndex:(NSUInteger)index
-{
- [memCard2Array removeObjectAtIndex:index];
-}
-
-- (void)setMemCard2Array:(NSMutableArray *)a
-{
- if (memCard2Array != a) {
-#if !__has_feature(objc_arc)
- [memCard2Array release];
-#endif
- memCard2Array = [a mutableCopy];
- }
-}
-
-- (NSArray *)memCard2Array
-{
- return [NSArray arrayWithArray:memCard2Array];
-}
-
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
@@ -130,47 +71,10 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha
return self;
}
-- (int)blockCount:(int)card fromIndex:(int)idx
-{
- int i = 1;
- NSArray *memArray = nil;
- if (card == 1) {
- memArray = [self memCard1Array];
- } else {
- memArray = [self memCard2Array];
- }
-
- for (i = 1; i <= (MAX_MEMCARD_BLOCKS-idx); i++) {
- //Get the mem card +1 from the current card
- //And check its attributes
- PcsxrMemoryObject *obj = [memArray objectAtIndex:(i + idx)];
-
- //GetMcdBlockInfo(mcd, idx+i, &b);
- //printf("i=%i, mcd=%i, startblock=%i, diff=%i, flags=%x\n", i, mcd, startblock, (MAX_MEMCARD_BLOCKS-startblock), b.Flags);
- if ((obj.memFlags & 0x3) == 0x3) {
- return i+1;
- } else if ((obj.memFlags & 0x2) == 0x2) {
- //i++
- } else {
- return i;
- }
- }
- return i; // startblock was the last block so count = 1
-}
-
- (void)loadMemoryCardInfoForCard:(int)theCard
{
- NSInteger i;
- McdBlock info;
- NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:MAX_MEMCARD_BLOCKS];
+ PcsxrMemCardArray *newArray = [[PcsxrMemCardArray alloc] initWithMemoryCardNumber:theCard];
- for (i = 0; i < MAX_MEMCARD_BLOCKS; i++) {
- GetMcdBlockInfo(theCard, i + 1, &info);
- PcsxrMemoryObject *ob = [[PcsxrMemoryObject alloc] initWithMcdBlock:&info];
-
- [newArray insertObject:ob atIndex:i];
- RELEASEOBJ(ob);
- }
if (theCard == 1) {
[self setMemCard1Array:newArray];
} else {
@@ -202,109 +106,55 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha
[[NSNotificationCenter defaultCenter] postNotificationName:memoryAnimateTimerKey object:self];
}
-- (int)findFreeMemCardBlockInCard:(int)target_card length:(int)len
-{
- int foundcount = 0, i = 0;
-
- NSArray *cardArray;
- if (target_card == 1) {
- cardArray = [self memCard1Array];
- }else {
- cardArray = [self memCard2Array];
- }
-
- // search for empty (formatted) blocks first
- while (i < MAX_MEMCARD_BLOCKS && foundcount < len) {
- PcsxrMemoryObject *obj = [cardArray objectAtIndex:i++]; //&Blocks[target_card][++i];
- if ((obj.memFlags & 0xFF) == 0xA0) { // if A0 but not A1
- foundcount++;
- } else if (foundcount >= 1) { // need to find n count consecutive blocks
- foundcount = 0;
- } else {
- //i++;
- }
- //printf("formatstatus=%x\n", Info->Flags);
- }
-
- if (foundcount == len)
- return (i-foundcount);
-
- // no free formatted slots, try to find a deleted one
- foundcount = i = 0;
- while (i < MAX_MEMCARD_BLOCKS && foundcount < len) {
- PcsxrMemoryObject *obj = [cardArray objectAtIndex:i++];
- if ((obj.memFlags & 0xF0) == 0xA0) { // A2 or A6 f.e.
- foundcount++;
- } else if (foundcount >= 1) { // need to find n count consecutive blocks
- foundcount = 0;
- } else {
- //i++;
- }
- //printf("delstatus=%x\n", Info->Flags);
- }
-
- if (foundcount == len)
- return (i-foundcount);
-
- return -1;
-}
-
-- (int)findFreeMemCardBlockInCard:(int)target_card
-{
- return [self findFreeMemCardBlockInCard:target_card length:1];
-}
-
- (IBAction)moveBlock:(id)sender
{
NSInteger memCardSelect = [sender tag];
NSCollectionView *cardView;
NSIndexSet *selection;
- int toCard, fromCard, freeSlot;
- int count;
- int j = 0;
- char *str, *source, *destination;
+ PcsxrMemCardArray *toCard, *fromCard;
+ int cardnum;
if (memCardSelect == 1) {
- str = Config.Mcd1;
- source = Mcd2Data;
- destination = Mcd1Data;
cardView = memCard2view;
- toCard = 1;
- fromCard = 2;
+ toCard = memCard1Array;
+ fromCard = memCard2Array;
+ cardnum = 1;
} else {
- str = Config.Mcd2;
- source = Mcd1Data;
- destination = Mcd2Data;
cardView = memCard1view;
- toCard = 2;
- fromCard = 1;
+ toCard = memCard2Array;
+ fromCard = memCard1Array;
+ cardnum = 2;
}
selection = [cardView selectionIndexes];
if (!selection || [selection count] == 0) {
NSBeep();
return;
}
-
NSInteger selectedIndex = [selection firstIndex];
- count = [self blockCount:fromCard fromIndex:selectedIndex];
+ int cardSize, freeConsBlocks, availBlocks;
- freeSlot = [self findFreeMemCardBlockInCard:toCard length:count];
- if (freeSlot == -1) {
- NSRunCriticalAlertPanel(NSLocalizedString(@"No Free Space", nil), NSLocalizedString(@"Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue", nil), nil, nil, nil, count, toCard);
+ cardSize = [fromCard memorySizeAtIndex:selectedIndex];
+ freeConsBlocks = [toCard indexOfFreeBlocksWithSize:cardSize];
+ availBlocks = [toCard availableBlocks];
+ if (freeConsBlocks == -1 && availBlocks >= cardSize) {
+ PcsxrMemoryObject *tmpmemobj = [fromCard.memoryArray objectAtIndex:selectedIndex];
+ NSInteger copyOK = NSRunInformationalAlertPanel(NSLocalizedString(@"Free Size", nil), NSLocalizedString(@"Memory card %i does not have enough free consecutive blocks.\n\nIn order to copy over \"%@ (%@),\" memory card %i must be compressed. Compressing memory cards will make deleted blocks unrecoverable.\n\nDo you want to continue?", nil), NSLocalizedString(@"Yes", nil), NSLocalizedString(@"No", nil), nil, cardnum, tmpmemobj.englishName, tmpmemobj.sjisName, cardnum == 1 ? 2 : 1);
+ if (copyOK != NSAlertDefaultReturn) {
+ return;
+ }
+ } else if (cardSize > availBlocks) {
+ NSRunCriticalAlertPanel(NSLocalizedString(@"No Free Space", nil), NSLocalizedString(@"Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue", nil), nil, nil, nil, availBlocks, cardnum);
return;
}
- for (j=0; j < count; j++) {
- CopyMemcardData(source, destination, (selectedIndex+j), (freeSlot+j), str);
- //printf("count = %i, firstfree=%i, i=%i\n", count, first_free_slot, j);
- }
+ [fromCard moveBlockAtIndex:selectedIndex toMemoryCard:toCard];
- if (toCard == 1) {
+ if (cardnum == 1) {
LoadMcd(1, Config.Mcd1);
} else {
LoadMcd(2, Config.Mcd2);
}
- [self loadMemoryCardInfoForCard:toCard];
+ [self loadMemoryCardInfoForCard:cardnum];
}
- (IBAction)formatCard:(id)sender
@@ -323,60 +173,47 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha
}
}
-- (void)deleteMemoryBlockAtSlot:(int)slotnum card:(int)cardNum
+- (void)deleteMemoryBlocksAtIndex:(int)slotnum card:(int)cardNum
{
- int xor = 0, i, j;
- char *data, *ptr, *filename;
- NSArray *cardArray;
- PcsxrMemoryObject *memObject;
+ PcsxrMemCardArray *cardArray;
if (cardNum == 1) {
- filename = Config.Mcd1;
- data = Mcd1Data;
cardArray = [self memCard1Array];
} else {
- filename = Config.Mcd2;
- data = Mcd2Data;
cardArray = [self memCard2Array];
}
- memObject = [cardArray objectAtIndex:slotnum];
- unsigned char flags = [memObject memFlags];
- i = slotnum;
- i++;
- ptr = data + i * 128;
-
- if ((flags & 0xF0) == 0xA0) {
- if ((flags & 0xF) >= 1 &&
- (flags & 0xF) <= 3) { // deleted
- *ptr = 0x50 | (flags & 0xF);
- } else return;
- } else if ((flags & 0xF0) == 0x50) { // used
- *ptr = 0xA0 | (flags & 0xF);
- } else { return; }
+ [cardArray deleteMemoryBlocksAtIndex:slotnum];
+}
+
+- (IBAction)deleteMemoryObject:(id)sender
+{
+ PcsxrMemCardArray *curCard;
+ NSInteger memCardSelect = [sender tag];
+ NSIndexSet *selected;
+ if (memCardSelect == 1) {
+ curCard = memCard1Array;
+ selected = [memCard1view selectionIndexes];
+ } else {
+ curCard = memCard2Array;
+ selected = [memCard2view selectionIndexes];
+ }
- for (j = 0; j < 127; j++) xor ^= *ptr++;
- *ptr = xor;
+ if (!selected || [selected count] == 0) {
+ NSBeep();
+ return;
+ }
- SaveMcd(filename, data, i * 128, 128);
-}
+ NSInteger selectedIndex = [selected firstIndex];
-- (IBAction)deleteMemoryObject:(id)sender {
+ PcsxrMemoryObject *tmpObj = [[curCard memoryArray] objectAtIndex:selectedIndex];
+
+ if (tmpObj.flagNameIndex == memFlagFree) {
+ NSBeep();
+ return;
+ }
+
NSInteger deleteOkay = NSRunAlertPanel(NSLocalizedString(@"Delete Block", nil), NSLocalizedString(@"Deleting a block will remove all saved data on that block.\n\nThis cannot be undone.", nil), NSLocalizedString(@"Cancel", nil), NSLocalizedString(@"Delete", nil), nil);
if (deleteOkay == NSAlertAlternateReturn) {
- NSInteger memCardSelect = [sender tag];
- NSIndexSet *selected;
- if (memCardSelect == 1) {
- selected = [memCard1view selectionIndexes];
- } else {
- selected = [memCard2view selectionIndexes];
- }
-
- if (!selected || [selected count] == 0) {
- NSBeep();
- return;
- }
-
- NSInteger selectedIndex = [selected firstIndex];
- [self deleteMemoryBlockAtSlot:selectedIndex card:memCardSelect];
+ [self deleteMemoryBlocksAtIndex:selectedIndex card:memCardSelect];
if (memCardSelect == 1) {
LoadMcd(1, Config.Mcd1);
@@ -409,42 +246,4 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha
SUPERDEALLOC;
}
-- (BOOL)isMemoryBlockEmptyOnCard:(int)aCard block:(int)aBlock
-{
- NSArray *memArray;
- PcsxrMemoryObject *obj;
- if (aCard == 1) {
- memArray = [self memCard1Array];
- } else {
- memArray = [self memCard2Array];
- }
- obj = [memArray objectAtIndex:aBlock];
-#if 0
- if (([obj memFlags] & 0xF0) != 0x50)
- return YES;
-
- //FIXME: Does this properly handle saves that span more than one block?
- if ([[obj englishName] isEqualToString:@""]) {
- return YES;
- }
-#else
- if (![obj isNotDeleted]) {
- return YES;
- }
-#endif
-
- return NO;
-}
-
-- (int)countFreeBlocksOnCard:(int)aCard
-{
- int i, count = 0;
- for (i = 0; i < MAX_MEMCARD_BLOCKS; i++) {
- if ([self isMemoryBlockEmptyOnCard:aCard block:i]) {
- count++;
- }
- }
- return count;
-}
-
@end
diff --git a/macosx/PcsxrMemoryObject.h b/macosx/PcsxrMemoryObject.h
index 1f1bb359..8efbe28a 100755
--- a/macosx/PcsxrMemoryObject.h
+++ b/macosx/PcsxrMemoryObject.h
@@ -34,25 +34,31 @@ typedef enum _PCSXRMemFlags {
NSArray *memImages;
NSInteger memImageIndex;
-
+ int startingIndex;
+ int blockSize;
PCSXRMemFlags flagNameIndex;
- unsigned char memFlags;
}
+ (NSArray *)imagesFromMcd:(McdBlock *)block;
+ (NSString*)memoryLabelFromFlag:(PCSXRMemFlags)flagNameIndex;
++ (NSImage *)blankImage;
++ (PCSXRMemFlags)memFlagsFromBlockFlags:(unsigned char)blockFlags;
-- (id)initWithMcdBlock:(McdBlock *)infoBlock;
+- (id)initWithMcdBlock:(McdBlock *)infoBlockc NS_UNAVAILABLE;
+- (id)initWithMcdBlock:(McdBlock *)infoBlockc startingIndex:(int)startIdx;
+- (id)initWithMcdBlock:(McdBlock *)infoBlockc startingIndex:(int)startIdx size:(int)memSize;
@property (readonly, arcstrong) NSString *englishName;
@property (readonly, arcstrong) NSString *sjisName;
@property (readonly, arcstrong) NSString *memName;
@property (readonly, arcstrong) NSString *memID;
@property (readonly) PCSXRMemFlags flagNameIndex;
-@property (readonly) unsigned char memFlags;
-@property (readonly, unsafe_unretained, nonatomic) NSString *flagName;
-@property (readonly, unsafe_unretained, nonatomic) NSAttributedString *attributedFlagName;
+@property (readonly) int startingIndex;
+@property (readonly) int blockSize;
+
@property (readonly, unsafe_unretained, nonatomic) NSImage *memImage;
@property (readonly, nonatomic) int memIconCount;
-@property (readonly, getter = isNotDeleted, nonatomic) BOOL notDeleted DEPRECATED_ATTRIBUTE;
+@property (readonly, unsafe_unretained, nonatomic) NSString *flagName;
+@property (readonly, unsafe_unretained, nonatomic) NSAttributedString *attributedFlagName;
+@property (readonly, nonatomic) BOOL isBiggerThanOne;
@end
diff --git a/macosx/PcsxrMemoryObject.m b/macosx/PcsxrMemoryObject.m
index 0893b238..1a7013e9 100755
--- a/macosx/PcsxrMemoryObject.m
+++ b/macosx/PcsxrMemoryObject.m
@@ -22,7 +22,9 @@ NSString *const memoryAnimateTimerKey = @"PCSXR Memory Card Image Animate";
@property (readwrite, arcstrong) NSString *sjisName;
@property (readwrite, arcstrong) NSString *memName;
@property (readwrite, arcstrong) NSString *memID;
-@property (readwrite) unsigned char memFlags;
+@property (readwrite) int startingIndex;
+@property (readwrite) int blockSize;
+
@property (readwrite, nonatomic) NSInteger memImageIndex;
@property (arcstrong) NSArray *memImages;
@@ -126,39 +128,60 @@ static NSString *MemLabelEndLink;
- (id)initWithMcdBlock:(McdBlock *)infoBlock
{
- if (self = [super init]) {
- self.memFlags = infoBlock->Flags;
- if ((infoBlock->Flags & 0xF0) == 0xA0) {
- if ((infoBlock->Flags & 0xF) >= 1 && (infoBlock->Flags & 0xF) <= 3)
- self.flagNameIndex = memFlagDeleted;
- else
- self.flagNameIndex = memFlagFree;
- } else if ((infoBlock->Flags & 0xF0) == 0x50) {
- if ((infoBlock->Flags & 0xF) == 0x1)
- self.flagNameIndex = memFlagUsed;
- else if ((infoBlock->Flags & 0xF) == 0x2)
- self.flagNameIndex = memFlagLink;
- else if ((infoBlock->Flags & 0xF) == 0x3)
- self.flagNameIndex = memFlagEndLink;
- } else
- self.flagNameIndex = memFlagFree;
+ [self doesNotRecognizeSelector:_cmd];
+ return nil;
+}
+
+- (id)initWithMcdBlock:(McdBlock *)infoBlock startingIndex:(int)startIdx
+{
+ return [self initWithMcdBlock:infoBlock startingIndex:startIdx size:1];
+}
- if (self.flagNameIndex == memFlagLink || self.flagNameIndex == memFlagEndLink || self.flagNameIndex == memFlagFree) {
- //This prevents possible uglies in multi-save images
++ (PCSXRMemFlags)memFlagsFromBlockFlags:(unsigned char)blockFlags
+{
+ if ((blockFlags & 0xF0) == 0xA0) {
+ if ((blockFlags & 0xF) >= 1 && (blockFlags & 0xF) <= 3)
+ return memFlagDeleted;
+ else
+ return memFlagFree;
+ } else if ((blockFlags & 0xF0) == 0x50) {
+ if ((blockFlags & 0xF) == 0x1)
+ return memFlagUsed;
+ else if ((blockFlags & 0xF) == 0x2)
+ return memFlagLink;
+ else if ((blockFlags & 0xF) == 0x3)
+ return memFlagEndLink;
+ } else
+ return memFlagFree;
+
+ //Xcode complains unless we do this...
+#ifdef DEBUG
+ NSLog(@"Unknown flag ");
+#endif
+ return memFlagFree;
+}
+
+- (id)initWithMcdBlock:(McdBlock *)infoBlock startingIndex:(int)startIdx size:(int)memSize
+{
+ if (self = [super init]) {
+ self.startingIndex = startIdx;
+ self.blockSize = memSize;
+ self.flagNameIndex = [PcsxrMemoryObject memFlagsFromBlockFlags:infoBlock->Flags];
+ if (self.flagNameIndex == memFlagFree) {
self.memImages = @[];
self.memImageIndex = -1;
-
- if (flagNameIndex != memFlagFree) {
- self.englishName = self.sjisName = (flagNameIndex == memFlagLink ? @"Multi-save" : @"Multi-save (end)");
- } else {
- self.englishName = self.sjisName = @"Free block";
- }
-
+ self.englishName = self.sjisName = @"Free block";
self.memID = self.memName = @"";
} else {
self.englishName = @(infoBlock->Title);
self.sjisName = [NSString stringWithCString:infoBlock->sTitle encoding:NSShiftJISStringEncoding];
+ if ([englishName isEqualToString:sjisName]) {
+#ifdef DEBUG
+ NSLog(@"English name and SJIS name are the same: %@. Replacing the sjis string with the English string.", englishName);
+#endif
+ self.sjisName = self.englishName;
+ }
@autoreleasepool {
self.memImages = [PcsxrMemoryObject imagesFromMcd:infoBlock];
}
@@ -194,11 +217,12 @@ static NSString *MemLabelEndLink;
[self didChangeValueForKey:@"memImage"];
}
-@synthesize memFlags;
@synthesize memName;
@synthesize memID;
@synthesize memImages;
@synthesize flagNameIndex;
+@synthesize blockSize;
+@synthesize startingIndex;
#pragma mark Non-synthesize Properties
- (int)memIconCount
@@ -247,12 +271,12 @@ NS_INLINE void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtclr)
SetupAttrStr(tmpStr, [NSColor blueColor]);
attribMemLabelEndLink = [tmpStr copy];
RELEASEOBJ(tmpStr);
-
+
tmpStr = [[NSMutableAttributedString alloc] initWithString:MemLabelLink];
SetupAttrStr(tmpStr, [NSColor blueColor]);
attribMemLabelLink = [tmpStr copy];
RELEASEOBJ(tmpStr);
-
+
tmpStr = [[NSMutableAttributedString alloc] initWithString:MemLabelUsed];
SetupAttrStr(tmpStr, [NSColor controlTextColor]);
attribMemLabelUsed = [tmpStr copy];
@@ -272,7 +296,7 @@ NS_INLINE void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtclr)
//display nothing
attribMemLabelUsed = [[NSAttributedString alloc] initWithString:@""];
#endif
-
+
tmpStr = [[NSMutableAttributedString alloc] initWithString:MemLabelDeleted];
SetupAttrStr(tmpStr, [NSColor redColor]);
attribMemLabelDeleted = [tmpStr copy];
@@ -303,12 +327,13 @@ NS_INLINE void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtclr)
}
}
-- (BOOL)isNotDeleted
+- (BOOL)isBiggerThanOne
{
- if (self.flagNameIndex == memFlagFree || self.flagNameIndex == memFlagDeleted) {
- return NO;
- } else {
+ if (flagNameIndex == memFlagFree) {
+ //Always show the size of the free blocks
return YES;
+ } else {
+ return blockSize != 1;
}
}
@@ -330,7 +355,7 @@ NS_INLINE void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtclr)
- (NSString *)description
{
- return [NSString stringWithFormat:@"%@ (%@): Name: %@ ID: %@ Flags: %d", englishName, sjisName, memName, memID, memFlags];
+ return [NSString stringWithFormat:@"%@ (%@): Name: %@ ID: %@, type: %@ start: %i size: %i", englishName, sjisName, memName, memID, self.flagName, startingIndex, blockSize];
}
@end