75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
|  | ! Copyright (C) 2006 Slava Pestov | ||
|  | ! See http://factorcode.org/license.txt for BSD license. | ||
|  | USING: alien alien.c-types alien.syntax kernel math sequences ;
 | ||
|  | IN: core-foundation | ||
|  | 
 | ||
|  | TYPEDEF: int CFIndex | ||
|  | 
 | ||
|  | FUNCTION: void* CFArrayCreateMutable ( void* allocator, CFIndex capacity, void* callbacks ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: void* CFArrayGetValueAtIndex ( void* array, CFIndex idx ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: void CFArraySetValueAtIndex ( void* array, CFIndex index, void* value ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: CFIndex CFArrayGetCount ( void* array ) ;
 | ||
|  | 
 | ||
|  | : kCFURLPOSIXPathStyle 0 ;
 | ||
|  | 
 | ||
|  | FUNCTION: void* CFURLCreateWithFileSystemPath ( void* allocator, void* filePath, int pathStyle, bool isDirectory ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: void* CFURLCreateWithString ( void* allocator, void* string, void* base ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: void* CFURLCopyFileSystemPath ( void* url, int pathStyle ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: void* CFStringCreateWithCharacters ( void* allocator, ushort* cStr, CFIndex numChars ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: CFIndex CFStringGetLength ( void* theString ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: void CFStringGetCharacters ( void* theString, CFIndex start, CFIndex length, void* buffer ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: void* CFBundleCreate ( void* allocator, void* bundleURL ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: bool CFBundleLoadExecutable ( void* bundle ) ;
 | ||
|  | 
 | ||
|  | FUNCTION: void CFRelease ( void* cf ) ;
 | ||
|  | 
 | ||
|  | : CF>array ( alien -- array )
 | ||
|  |     dup CFArrayGetCount [ CFArrayGetValueAtIndex ] curry* map ;
 | ||
|  | 
 | ||
|  | : <CFArray> ( seq -- alien )
 | ||
|  |     [ f swap length f CFArrayCreateMutable ] keep
 | ||
|  |     [ length ] keep
 | ||
|  |     [ >r dupd r> CFArraySetValueAtIndex ] 2each ;
 | ||
|  | 
 | ||
|  | : <CFString> ( string -- alien )
 | ||
|  |     f swap dup length CFStringCreateWithCharacters ;
 | ||
|  | 
 | ||
|  | : CF>string ( alien -- string )
 | ||
|  |     dup CFStringGetLength 1+ "ushort" <c-array> [ | ||
|  |         >r 0 over CFStringGetLength r> CFStringGetCharacters | ||
|  |     ] keep alien>u16-string ;
 | ||
|  | 
 | ||
|  | : CF>string-array ( alien -- seq )
 | ||
|  |     CF>array [ CF>string ] map ;
 | ||
|  | 
 | ||
|  | : <CFFileSystemURL> ( string dir? -- url )
 | ||
|  |     >r <CFString> f over kCFURLPOSIXPathStyle | ||
|  |     r> CFURLCreateWithFileSystemPath swap CFRelease ;
 | ||
|  | 
 | ||
|  | : <CFURL> ( string -- url )
 | ||
|  |     <CFString> | ||
|  |     [ f swap f CFURLCreateWithString ] keep
 | ||
|  |     CFRelease ;
 | ||
|  | 
 | ||
|  | : <CFBundle> ( string -- bundle )
 | ||
|  |     t <CFFileSystemURL> [ | ||
|  |         f swap CFBundleCreate | ||
|  |     ] keep CFRelease ;
 | ||
|  | 
 | ||
|  | : load-framework ( name -- )
 | ||
|  |     dup <CFBundle> [ | ||
|  |         CFBundleLoadExecutable drop
 | ||
|  |     ] [ | ||
|  |         "Cannot load bundled named " swap append throw
 | ||
|  |     ] ?if ;
 |