1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
//
// PcsxrMemoryObject.m
// Pcsxr
//
// Created by Charles Betts on 11/23/11.
// Copyright (c) 2011 __MyCompanyName__. All rights reserved.
//
#import "PcsxrMemoryObject.h"
#import <Foundation/NSString.h>
#import <AppKit/NSColor.h>
#import <AppKit/NSImage.h>
@implementation PcsxrMemoryObject
+ (NSImage *)imageFromMcd:(short *)icon
{
NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:16 pixelsHigh:16 bitsPerSample:8 samplesPerPixel:3 hasAlpha:NO isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace bytesPerRow:0 bitsPerPixel:0];
#if 0
int x, y, c;
for (y = 0; y < 32; y++) {
for (x = 0; x < 32; x++) {
c = icon[(y>>1) * 16 + (x>>1)];
c = ((c & 0x001f) << 10) | ((c & 0x7c00) >> 10) | (c & 0x03e0);
c = ((c & 0x001f) << 3) | ((c & 0x03e0) << 6) | ((c & 0x7c00) << 9);
NSUInteger NSc = c;
[imageRep setPixel:&NSc atX:x y:y];
}
}
#else
int x, y, c, i, r, g, b;
for (i = 0; i < 256; i++) {
x = (i % 16);
y = (i / 16);
c = icon[i];
r = (c & 0x001f) << 3;
g = ((c & 0x03e0) >> 5) << 3;
b = ((c & 0x7c00) >> 10) << 3;
[imageRep setColor:[NSColor colorWithCalibratedRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0] atX:x y:y];
}
#endif
NSImage *theImage = [[NSImage alloc] init];
[theImage addRepresentation:imageRep];
[imageRep release];
[theImage setScalesWhenResized:YES];
[theImage setSize:NSMakeSize(32, 32)];
return [theImage autorelease];
}
- (id)initWithMcdBlock:(McdBlock *)infoBlock
{
if (self = [super init]) {
englishName = [[NSString alloc] initWithCString:infoBlock->Title encoding:NSASCIIStringEncoding];
sjisName = [[NSString alloc] initWithCString:infoBlock->sTitle encoding:NSShiftJISStringEncoding];
memImage = [[PcsxrMemoryObject imageFromMcd:infoBlock->Icon] retain];
memName = [[NSString alloc] initWithCString:infoBlock->Name encoding:NSASCIIStringEncoding];
memID = [[NSString alloc] initWithCString:infoBlock->ID encoding:NSASCIIStringEncoding];
memIconCount = infoBlock->IconCount;
memFlags = infoBlock->Flags;
if ((infoBlock->Flags & 0xF0) == 0xA0) {
if ((infoBlock->Flags & 0xF) >= 1 &&
(infoBlock->Flags & 0xF) <= 3) {
notDeleted = NO;
} else
notDeleted = NO;
} else if ((infoBlock->Flags & 0xF0) == 0x50)
notDeleted = YES;
else
notDeleted = NO;
}
return self;
}
@synthesize englishName;
@synthesize sjisName;
@synthesize memImage;
@synthesize notDeleted;
@synthesize memFlags;
@synthesize memName;
@synthesize memID;
@synthesize memIconCount;
- (void)dealloc
{
[englishName release];
[sjisName release];
[memName release];
[memID release];
[memImage release];
[super dealloc];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"%@ (%@): Name: %@ ID: %@ Flags: %d", englishName, sjisName, memName, memID, memFlags];
}
@end
|