| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | #import <Cocoa/Cocoa.h> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "master.h" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void c_to_factor_toplevel(CELL quot) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2007-09-21 23:30:47 -04:00
										 |  |  | 	for(;;) | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2007-09-21 23:30:47 -04:00
										 |  |  | NS_DURING | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 		c_to_factor(quot); | 
					
						
							| 
									
										
										
										
											2007-09-21 23:30:47 -04:00
										 |  |  | 		NS_VOIDRETURN; | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | NS_HANDLER | 
					
						
							|  |  |  | 		dpush(allot_alien(F,(CELL)localException)); | 
					
						
							|  |  |  | 		quot = userenv[COCOA_EXCEPTION_ENV]; | 
					
						
							|  |  |  | 		if(type_of(quot) != QUOTATION_TYPE) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			/* No Cocoa exception handler was registered, so | 
					
						
							|  |  |  | 			extra/cocoa/ is not loaded. So we pass the exception | 
					
						
							| 
									
										
										
										
											2007-09-21 23:30:47 -04:00
										 |  |  | 			along. */ | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 			[localException raise]; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | NS_ENDHANDLER | 
					
						
							| 
									
										
										
										
											2007-09-21 23:30:47 -04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void early_init(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	[[NSAutoreleasePool alloc] init]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const char *vm_executable_path(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2008-01-26 20:32:12 -05:00
										 |  |  | 	return [[[NSBundle mainBundle] executablePath] UTF8String]; | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const char *default_image_path(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	NSBundle *bundle = [NSBundle mainBundle]; | 
					
						
							|  |  |  | 	NSString *path = [bundle bundlePath]; | 
					
						
							|  |  |  | 	NSString *executable = [[bundle executablePath] lastPathComponent]; | 
					
						
							|  |  |  | 	NSString *image = [executable stringByAppendingString:@".image"]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	NSString *returnVal; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if([path hasSuffix:@".app"] || [path hasSuffix:@".app/"]) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		NSFileManager *mgr = [NSFileManager defaultManager]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		NSString *imageInBundle = [[path stringByAppendingPathComponent:@"Contents/Resources"] stringByAppendingPathComponent:image]; | 
					
						
							|  |  |  | 		NSString *imageAlongBundle = [[path stringByDeletingLastPathComponent] stringByAppendingPathComponent:image]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		returnVal = ([mgr fileExistsAtPath:imageInBundle] | 
					
						
							|  |  |  | 			? imageInBundle : imageAlongBundle); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		returnVal = [path stringByAppendingPathComponent:image]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-26 20:32:12 -05:00
										 |  |  | 	return [returnVal UTF8String]; | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void init_signals(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	unix_init_signals(); | 
					
						
							|  |  |  | 	mach_initialize(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Amateurs at Apple: implement this function, properly! */ | 
					
						
							|  |  |  | Protocol *objc_getProtocol(char *name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if(strcmp(name,"NSTextInput") == 0) | 
					
						
							|  |  |  | 		return @protocol(NSTextInput); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		return nil; | 
					
						
							|  |  |  | } |