source: trunk/Cocoa/Pester/Source/NDAppleScript/NSAppleEventDescriptor+NDAppleScriptObject.m @ 35

Last change on this file since 35 was 35, checked in by Nicholas Riley, 19 years ago

Nathan Day's NDAppleScript and related classes, somewhat modified.
Still need to commit Nathan's changes to NDResourceFork.

File size: 5.3 KB
Line 
1/*
2 *  NSAppleEventDescriptor+NDAppleScriptObject.m
3 *  AppleScriptObjectProject
4 *
5 *  Created by Nathan Day on Fri Dec 14 2001.
6 *  Copyright (c) 2001 Nathan Day. All rights reserved.
7 */
8
9#import "NSAppleEventDescriptor+NDAppleScriptObject.h"
10#import "NSURL+NDCarbonUtilities.h"
11
12@implementation NSAppleEventDescriptor (NDAppleScriptObject)
13
14/*
15 * + appleEventDescriptorWithString:
16 */
17
18+ (NSAppleEventDescriptor *)appleEventDescriptorWithString:(NSString *)aString
19{
20    return [self descriptorWithDescriptorType:typeChar data:[aString dataUsingEncoding:NSMacOSRomanStringEncoding]];
21}
22
23/*
24 * + aliasListDescriptorWithArray:
25 */
26+ (NSAppleEventDescriptor *)aliasListDescriptorWithArray:(NSArray *)aArray
27{
28    NSAppleEventDescriptor      * theEventList = nil;
29    unsigned int                                theIndex,
30        theNumOfParam;
31
32    theNumOfParam = [aArray count];
33
34    if( theNumOfParam > 0)
35       {
36        theEventList = [self listDescriptor];
37
38        for( theIndex = 0; theIndex < theNumOfParam; theIndex++ )
39           {
40            id                          theObject;
41            theObject = [aArray objectAtIndex:theIndex];
42
43            if( [theObject isKindOfClass:[NSString class]] )
44                theObject = [NSURL fileURLWithPath:theObject];
45
46            [theEventList insertDescriptor:[self aliasDescriptorWithURL:theObject] atIndex:theIndex+1];
47           }
48       }
49
50    return theEventList;
51}
52
53/*
54 * + appleEventDescriptorWithURL:
55 */
56+ (NSAppleEventDescriptor *)appleEventDescriptorWithURL:(NSURL *)aURL
57{
58    return [self descriptorWithDescriptorType:typeFileURL data:[NSData dataWithBytes:(void *)aURL length:sizeof(NSURL)]];
59}
60
61/*
62 * + aliasDescriptorWithURL:
63 */
64+ (NSAppleEventDescriptor *)aliasDescriptorWithURL:(NSURL *)aURL
65{
66    AliasHandle                                         theAliasHandle;
67    FSRef                                                               theReference;
68    NSAppleEventDescriptor              * theAppleEventDescriptor = nil;
69
70    if( [aURL getFSRef:&theReference] == YES && FSNewAliasMinimal( &theReference, &theAliasHandle ) == noErr )
71       {
72        HLock((Handle)theAliasHandle);
73        theAppleEventDescriptor = [self descriptorWithDescriptorType:typeAlias data:[NSData dataWithBytes:*theAliasHandle length:GetHandleSize((Handle) theAliasHandle)]];
74        HUnlock((Handle)theAliasHandle);
75        DisposeHandle((Handle)theAliasHandle);
76       }
77
78    return theAppleEventDescriptor;
79}
80
81// typeBoolean
82+ (NSAppleEventDescriptor *)appleEventDescriptorWithBOOL:(BOOL)aValue
83{
84    return [self descriptorWithDescriptorType:typeBoolean data:[NSData dataWithBytes:&aValue length: sizeof(aValue)]];
85}
86// typeTrue
87+ (NSAppleEventDescriptor *)trueBoolDescriptor
88{
89    return [self descriptorWithDescriptorType:typeTrue data:[NSData data]];
90}
91// typeFalse
92+ (NSAppleEventDescriptor *)falseBoolDescriptor
93{
94    return [self descriptorWithDescriptorType:typeFalse data:[NSData data]];
95}
96// typeShortInteger
97+ (NSAppleEventDescriptor *)appleEventDescriptorWithShort:(short int)aValue
98{
99    return [self descriptorWithDescriptorType:typeShortInteger data:[NSData dataWithBytes:&aValue length: sizeof(aValue)]];
100}
101// typeLongInteger
102+ (NSAppleEventDescriptor *)appleEventDescriptorWithLong:(long int)aValue
103{
104    return [self descriptorWithDescriptorType:typeLongInteger data:[NSData dataWithBytes:&aValue length: sizeof(aValue)]];
105}
106// typeInteger
107+ (NSAppleEventDescriptor *)appleEventDescriptorWithInt:(int)aValue
108{
109    return [self descriptorWithDescriptorType:typeInteger data:[NSData dataWithBytes:&aValue length: sizeof(aValue)]];
110}
111// typeShortFloat
112+ (NSAppleEventDescriptor *)appleEventDescriptorWithFloat:(float)aValue
113{
114    return [self descriptorWithDescriptorType:typeShortFloat data:[NSData dataWithBytes:&aValue length: sizeof(aValue)]];
115}
116// typeLongFloat
117+ (NSAppleEventDescriptor *)appleEventDescriptorWithDouble:(double)aValue
118{
119    return [self descriptorWithDescriptorType:typeLongFloat data:[NSData dataWithBytes:&aValue length: sizeof(aValue)]];
120}
121// typeMagnitude
122+ (NSAppleEventDescriptor *)appleEventDescriptorWithUnsignedInt:(unsigned int)aValue
123{
124    return [self descriptorWithDescriptorType:typeMagnitude data:[NSData dataWithBytes:&aValue length: sizeof(aValue)]];
125}
126
127/*
128 * targetProcessSerialNumber
129 */
130- (ProcessSerialNumber)targetProcessSerialNumber
131{
132    NSAppleEventDescriptor      * theTarget;
133    ProcessSerialNumber         theProcessSerialNumber = { 0, 0 };
134
135    theTarget = [self attributeDescriptorForKeyword:keyAddressAttr];
136
137    if( theTarget )
138       {
139        if( [theTarget descriptorType] != typeProcessSerialNumber )
140            theTarget = [theTarget coerceToDescriptorType:typeProcessSerialNumber];
141
142        [[theTarget data] getBytes:&theProcessSerialNumber length:sizeof(ProcessSerialNumber)];
143       }
144    return theProcessSerialNumber;
145}
146
147/*
148 * targetCreator
149 */
150- (OSType)targetCreator
151{
152    NSAppleEventDescriptor      * theTarget;
153    OSType                                              theCreator = 0;
154
155    theTarget = [self attributeDescriptorForKeyword:keyAddressAttr];
156
157    if( theTarget )
158       {
159        if( [theTarget descriptorType] != typeApplSignature )
160            theTarget = [theTarget coerceToDescriptorType:typeApplSignature];
161
162        [[theTarget data] getBytes:&theCreator length:sizeof(OSType)];
163       }
164    return theCreator;
165}
166
167/*
168 * isTargetCurrentProcess
169 */
170- (BOOL)isTargetCurrentProcess
171{
172    ProcessSerialNumber         theProcessSerialNumber;
173
174    theProcessSerialNumber = [self targetProcessSerialNumber];
175
176    return theProcessSerialNumber.highLongOfPSN == 0 && theProcessSerialNumber.lowLongOfPSN == kCurrentProcess;
177}
178
179@end
Note: See TracBrowser for help on using the repository browser.