1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/darwin/darwin.v

52 lines
1.4 KiB
V
Raw Normal View History

module darwin
#include <Cocoa/Cocoa.h>
2019-09-30 23:29:14 +03:00
#include <CoreFoundation/CoreFoundation.h>
#flag -framework Cocoa
2019-10-31 13:08:01 +03:00
#flag -framework Carbon
struct C.NSString { }
// macOS and iOS helpers
2019-11-01 00:57:16 +03:00
//pub fn nsstring(s string) *C.NSString {
pub fn nsstring(s string) voidptr {
// println('ns $s len=$s.len')
# return [ [ NSString alloc ] initWithBytesNoCopy:s.str length:s.len
# encoding:NSUTF8StringEncoding freeWhenDone: false];
return 0
2019-12-01 21:08:39 +03:00
//ns := C.alloc_NSString()
//return ns.initWithBytesNoCopy(s.str, length: s.len,
//encoding: NSUTF8StringEncoding, freeWhenDone: false)
}
2019-09-30 23:29:14 +03:00
// returns absolute path to folder where your resources should / will reside
// for .app packages: .../my.app/Contents/Resources
// for cli: .../parent_folder/Resources
2019-12-01 21:08:39 +03:00
fn C.CFBundleCopyResourcesDirectoryURL() byteptr
fn C.CFBundleGetMainBundle() voidptr
fn C.CFURLGetFileSystemRepresentation() int
fn C.CFRelease()
2019-09-30 23:29:14 +03:00
pub fn resource_path() string {
main_bundle := C.CFBundleGetMainBundle()
resource_dir_url := C.CFBundleCopyResourcesDirectoryURL(main_bundle)
2019-10-23 23:40:07 +03:00
if (isnil(resource_dir_url)) {
panic('CFBundleCopyResourcesDirectoryURL failed')
}
2019-09-30 23:29:14 +03:00
buffer_size := 4096
mut buffer := malloc(buffer_size)
buffer[0] = 0
conv_result := C.CFURLGetFileSystemRepresentation(resource_dir_url, true, buffer, buffer_size)
2019-10-23 23:40:07 +03:00
if(conv_result == 0) {
panic('CFURLGetFileSystemRepresentation failed')
}
2019-09-30 23:29:14 +03:00
result := string(buffer)
C.CFRelease(resource_dir_url)
return result
}