+
+// **********************************************************************
+// The Cheat - A universal game cheater for Mac OS X
+// (C) 2003-2005 Chaz McGarvey (BrokenZipper)
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 1, or (at your option)
+// any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+
+#import "Process.h"
+
+
+@interface Process ( PrivateAPI )
+
+- (void)_setName:(NSString *)name;
+- (void)_setVersion:(NSString *)version;
+- (void)_setIcon:(NSImage *)icon;
+- (void)_setPID:(pid_t)pid;
+
+@end
+
+
+@implementation Process
+
+
+- (id)initWithName:(NSString *)name version:(NSString *)version icon:(NSImage *)icon pid:(pid_t)pid
+{
+ if ( self = [super init] ) {
+ [self _setName:name];
+ [self _setVersion:version];
+ [self _setIcon:icon];
+ [self _setPID:pid];
+ }
+ return self;
+}
+
+- (id)initWithName:(NSString *)name version:(NSString *)version icon:(NSImage *)icon
+{
+ return [self initWithName:name version:version icon:icon pid:0];
+}
+
+- (id)initWithName:(NSString *)name version:(NSString *)version
+{
+ return [self initWithName:name version:version icon:nil pid:0];
+}
+
+- (void)dealloc
+{
+ // release local objects
+ [_name release];
+ [_version release];
+ [_icon release];
+
+ [super dealloc];
+}
+
+
+// #############################################################################
+#pragma mark NSCoding
+// #############################################################################
+
+- (id)copyWithZone:(NSZone *)zone
+{
+ return [[Process allocWithZone:zone] initWithName:_name version:_version icon:_icon pid:_pid];
+}
+
+
+// #############################################################################
+#pragma mark NSCoding
+// #############################################################################
+
+- (id)initWithCoder:(NSCoder *)coder
+{
+ if ( self = [super init] )
+ {
+ [self _setName:[coder decodeObject]];
+ [self _setVersion:[coder decodeObject]];
+ //[self setIcon:[coder decodeObject]];
+ [coder decodeValueOfObjCType:@encode(pid_t) at:&_pid];
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)coder
+{
+ [coder encodeObject:_name];
+ [coder encodeObject:_version];
+ //[coder encodeObject:_icon];
+ [coder encodeValueOfObjCType:@encode(pid_t) at:&_pid];
+}
+
+
+#pragma mark NSObject Override
+
+- (BOOL)isEqual:(id)anObject
+{
+ if ( [_name isEqualToString:[(Process *)anObject name]] &&
+ [_version isEqualToString:[(Process *)anObject version]] &&
+ _pid == [(Process *)anObject pid] ) {
+ // they are the same process
+ return YES;
+ }
+ return NO;
+}
+
+- (unsigned)hash
+{
+ return [[NSString stringWithFormat:@"%@%@%u", _name, _version, _pid] hash];
+}
+
+
+- (BOOL)sameApplicationAs:(id)anObject
+{
+ if ( [_name isEqualToString:[(Process *)anObject name]] &&
+ [_version isEqualToString:[(Process *)anObject version]] ) {
+ // they are the same application
+ return YES;
+ }
+ return NO;
+}
+
+
+#pragma mark Accessors
+
+- (NSString *)name
+{
+ return _name;
+}
+
+- (NSString *)version
+{
+ return _version;
+}
+
+- (NSImage *)icon
+{
+ return _icon;
+}
+
+- (pid_t)pid
+{
+ return _pid;
+}
+
+
+- (void)_setName:(NSString *)name
+{
+ if ( !name ) {
+ name = [NSString stringWithString:@"Unknown Process"];
+ }
+ [name retain];
+ [_name release];
+ _name = name;
+}
+
+- (void)_setVersion:(NSString *)version
+{
+ if ( !version ) {
+ version = [NSString stringWithString:@"Unknown Version"];
+ }
+ [version retain];
+ [_version release];
+ _version = version;
+}
+
+- (void)_setIcon:(NSImage *)icon
+{
+ [icon retain];
+ [_icon release];
+ _icon = icon;
+
+ // resize new image
+ [_icon setScalesWhenResized:YES];
+ [_icon setSize:NSMakeSize(16,16)];
+}
+
+- (void)_setPID:(pid_t)pid
+{
+ _pid = pid;
+}
+
+
+@end