2019-12-25 01:17:12 +00:00
|
|
|
/* macOS System/Graphics/Font API Implementations */
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
//////////////////////
|
|
|
|
// System API //
|
|
|
|
//////////////////////
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
////////////////////////////////
|
2019-12-24 20:31:24 +00:00
|
|
|
|
|
|
|
function
|
|
|
|
system_get_path_sig(){
|
|
|
|
String_Const_u8 result = {};
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
switch (path_code){
|
|
|
|
case SystemPath_CurrentDirectory:
|
|
|
|
{
|
|
|
|
char *working_dir = getcwd(NULL, 0);
|
|
|
|
u64 working_dir_length = cstring_length(working_dir);
|
|
|
|
|
|
|
|
// TODO(yuval): Maybe use push_string_copy instead
|
|
|
|
u8 *out = push_array(arena, u8, working_dir_length);
|
|
|
|
block_copy(out, working_dir, working_dir_length);
|
|
|
|
|
|
|
|
free(working_dir);
|
|
|
|
|
|
|
|
result = SCu8(out, working_dir_length);
|
|
|
|
} break;
|
|
|
|
|
|
|
|
case SystemPath_Binary:
|
|
|
|
{
|
|
|
|
local_persist b32 has_stashed_4ed_path = false;
|
|
|
|
if (!has_stashed_4ed_path){
|
|
|
|
local_const i32 binary_path_capacity = KB(32);
|
|
|
|
u8 *memory = (u8*)system_memory_allocate(binary_path_capacity, string_u8_litexpr(file_name_line_number));
|
2019-12-27 21:59:59 +00:00
|
|
|
|
|
|
|
pid_t pid = getpid();
|
|
|
|
i32 size = proc_pidpath(pid, memory, binary_path_capacity);
|
2019-12-25 01:17:12 +00:00
|
|
|
Assert(size <= binary_path_capacity - 1);
|
|
|
|
|
|
|
|
mac_vars.binary_path = SCu8(memory, size);
|
|
|
|
mac_vars.binary_path = string_remove_last_folder(mac_vars.binary_path);
|
|
|
|
mac_vars.binary_path.str[mac_vars.binary_path.size] = 0;
|
|
|
|
|
|
|
|
has_stashed_4ed_path = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
result = push_string_copy(arena, mac_vars.binary_path);
|
|
|
|
} break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_get_canonical_sig(){
|
2019-12-27 21:59:59 +00:00
|
|
|
NSString *path_ns_str =
|
|
|
|
[[NSString alloc] initWithBytes:name.data length:name.size encoding:NSUTF8StringEncoding];
|
|
|
|
|
|
|
|
NSString *standardized_path_ns_str = [path_ns_str stringByStandardizingPath];
|
2019-12-28 22:11:34 +00:00
|
|
|
String_Const_u8 standardized_path = SCu8((u8*)[standardized_path_ns_str UTF8String],[standardized_path_ns_str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
|
2019-12-27 21:59:59 +00:00
|
|
|
|
|
|
|
String_Const_u8 result = push_string_copy(arena, standardized_path);
|
|
|
|
|
|
|
|
[path_ns_str release];
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-26 22:16:15 +00:00
|
|
|
function File_Attributes
|
|
|
|
mac_get_file_attributes(struct stat file_stat) {
|
|
|
|
File_Attributes result;
|
|
|
|
result.size = file_stat.st_size;
|
|
|
|
result.last_write_time = file_stat.st_mtimespec.tv_sec;
|
|
|
|
|
|
|
|
result.flags = 0;
|
|
|
|
if (S_ISDIR(file_stat.st_mode)) {
|
|
|
|
result.flags |= FileAttribute_IsDirectory;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
function inline File_Attributes
|
2019-12-29 22:34:53 +00:00
|
|
|
mac_file_attributes_from_path(char *path) {
|
2019-12-26 22:16:15 +00:00
|
|
|
File_Attributes result = {};
|
|
|
|
|
|
|
|
struct stat file_stat;
|
|
|
|
if (stat(path, &file_stat) == 0){
|
|
|
|
result = mac_get_file_attributes(file_stat);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
function inline File_Attributes
|
|
|
|
mac_file_attributes_from_fd(i32 fd) {
|
|
|
|
File_Attributes result = {};
|
|
|
|
|
|
|
|
struct stat file_stat;
|
|
|
|
if (fstat(fd, &file_stat) == 0){
|
|
|
|
result = mac_get_file_attributes(file_stat);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(result);
|
|
|
|
}
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_get_file_list_sig(){
|
|
|
|
File_List result = {};
|
|
|
|
|
2019-12-29 22:34:53 +00:00
|
|
|
u8 *c_directory = push_array(arena, u8, directory.size + 1);
|
2019-12-26 01:16:34 +00:00
|
|
|
block_copy(c_directory, directory.str, directory.size);
|
|
|
|
c_directory[directory.size] = 0;
|
|
|
|
|
|
|
|
DIR *dir = opendir((char*)c_directory);
|
|
|
|
if (dir){
|
|
|
|
File_Info* first = 0;
|
|
|
|
File_Info* last = 0;
|
|
|
|
i32 count = 0;
|
|
|
|
|
|
|
|
for (struct dirent *entry = readdir(dir);
|
|
|
|
entry;
|
|
|
|
entry = readdir(dir)){
|
|
|
|
char *c_file_name = entry->d_name;
|
|
|
|
String_Const_u8 file_name = SCu8(c_file_name);
|
2019-12-26 15:54:06 +00:00
|
|
|
|
2019-12-26 01:16:34 +00:00
|
|
|
if (string_match(file_name, string_u8_litexpr(".")) || string_match(file_name, string_u8_litexpr(".."))){
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2019-12-29 22:34:53 +00:00
|
|
|
File_Info *info = push_array(arena, File_Info, 1);
|
2019-12-26 01:16:34 +00:00
|
|
|
sll_queue_push(first, last, info);
|
|
|
|
count += 1;
|
|
|
|
|
|
|
|
info->file_name = push_string_copy(arena, file_name);
|
2019-12-26 15:54:06 +00:00
|
|
|
|
|
|
|
// NOTE(yuval): Get file attributes
|
|
|
|
{
|
|
|
|
Temp_Memory temp = begin_temp(arena);
|
|
|
|
|
|
|
|
b32 append_slash = false;
|
|
|
|
u64 file_path_size = directory.size + file_name.size;
|
2019-12-26 19:30:13 +00:00
|
|
|
if (string_get_character(directory, directory.size - 1) != '/'){
|
2019-12-26 15:54:06 +00:00
|
|
|
append_slash = true;
|
|
|
|
file_path_size += 1;
|
|
|
|
}
|
|
|
|
|
2019-12-29 22:34:53 +00:00
|
|
|
char *file_path = push_array(arena, char, file_path_size + 1);
|
|
|
|
char *file_path_at = file_path;
|
2019-12-26 15:54:06 +00:00
|
|
|
|
|
|
|
block_copy(file_path_at, directory.str, directory.size);
|
|
|
|
file_path_at += directory.size;
|
|
|
|
|
2019-12-26 19:30:13 +00:00
|
|
|
if (append_slash){
|
2019-12-26 15:54:06 +00:00
|
|
|
*file_path_at = '/';
|
|
|
|
file_path_at += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
block_copy(file_path_at, file_name.str, file_name.size);
|
|
|
|
file_path_at += file_name.size;
|
|
|
|
|
|
|
|
*file_path_at = 0;
|
|
|
|
|
2019-12-26 22:16:15 +00:00
|
|
|
info->attributes = mac_file_attributes_from_path(file_path);
|
2019-12-26 15:54:06 +00:00
|
|
|
|
|
|
|
end_temp(temp);
|
|
|
|
}
|
2019-12-26 01:16:34 +00:00
|
|
|
}
|
|
|
|
|
2019-12-26 19:30:13 +00:00
|
|
|
closedir(dir);
|
2019-12-26 01:16:34 +00:00
|
|
|
|
2019-12-26 19:30:13 +00:00
|
|
|
result.infos = push_array(arena, File_Info*, count);
|
|
|
|
result.count = count;
|
2019-12-26 01:16:34 +00:00
|
|
|
|
2019-12-26 19:30:13 +00:00
|
|
|
i32 index = 0;
|
2019-12-29 22:34:53 +00:00
|
|
|
for (File_Info *node = first;
|
2019-12-26 19:30:13 +00:00
|
|
|
node != 0;
|
|
|
|
node = node->next){
|
|
|
|
result.infos[index] = node;
|
|
|
|
index += 1;
|
2019-12-26 01:16:34 +00:00
|
|
|
}
|
|
|
|
}
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_quick_file_attributes_sig(){
|
2019-12-26 22:16:15 +00:00
|
|
|
Temp_Memory temp = begin_temp(scratch);
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-29 22:34:53 +00:00
|
|
|
char *c_file_name = push_array(scratch, char, file_name.size + 1);
|
2019-12-26 22:16:15 +00:00
|
|
|
block_copy(c_file_name, file_name.str, file_name.size);
|
|
|
|
c_file_name[file_name.size] = 0;
|
|
|
|
|
|
|
|
File_Attributes result = mac_file_attributes_from_path(c_file_name);
|
|
|
|
|
|
|
|
end_temp(temp);
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 23:54:33 +00:00
|
|
|
function inline Plat_Handle
|
|
|
|
mac_to_plat_handle(i32 fd){
|
|
|
|
Plat_Handle result = *(Plat_Handle*)(&fd);
|
2019-12-29 01:09:28 +00:00
|
|
|
return(result);
|
2019-12-27 23:54:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function inline i32
|
|
|
|
mac_to_fd(Plat_Handle handle){
|
|
|
|
i32 result = *(i32*)(&handle);
|
2019-12-29 01:09:28 +00:00
|
|
|
return(result);
|
2019-12-27 23:54:33 +00:00
|
|
|
}
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_load_handle_sig(){
|
|
|
|
b32 result = false;
|
|
|
|
|
2019-12-26 22:16:15 +00:00
|
|
|
i32 fd = open(file_name, O_RDONLY);
|
|
|
|
if ((fd != -1) && (fd != 0)) {
|
2019-12-27 23:54:33 +00:00
|
|
|
*out = mac_to_plat_handle(fd);
|
2019-12-26 22:16:15 +00:00
|
|
|
result = true;
|
|
|
|
}
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_load_attributes_sig(){
|
2019-12-27 23:54:33 +00:00
|
|
|
i32 fd = mac_to_fd(handle);
|
2019-12-26 22:16:15 +00:00
|
|
|
File_Attributes result = mac_file_attributes_from_fd(fd);
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_load_file_sig(){
|
2019-12-27 23:54:33 +00:00
|
|
|
i32 fd = mac_to_fd(handle);
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-26 22:16:15 +00:00
|
|
|
do{
|
|
|
|
ssize_t bytes_read = read(fd, buffer, size);
|
|
|
|
if (bytes_read == -1){
|
|
|
|
if (errno != EINTR){
|
|
|
|
// NOTE(yuval): An error occured while reading from the file descriptor
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else{
|
|
|
|
size -= bytes_read;
|
|
|
|
buffer += bytes_read;
|
|
|
|
}
|
|
|
|
} while (size > 0);
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-26 22:16:15 +00:00
|
|
|
b32 result = (size == 0);
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_load_close_sig(){
|
2019-12-26 22:16:15 +00:00
|
|
|
b32 result = true;
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-27 23:54:33 +00:00
|
|
|
i32 fd = mac_to_fd(handle);
|
2019-12-26 22:16:15 +00:00
|
|
|
if (close(fd) == -1){
|
|
|
|
// NOTE(yuval): An error occured while close the file descriptor
|
|
|
|
result = false;
|
|
|
|
}
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_save_file_sig(){
|
|
|
|
File_Attributes result = {};
|
|
|
|
|
2019-12-26 22:16:15 +00:00
|
|
|
i32 fd = open(file_name, O_WRONLY | O_TRUNC | O_CREAT, 00640);
|
|
|
|
if (fd != -1) {
|
|
|
|
do{
|
|
|
|
ssize_t bytes_written = write(fd, data.str, data.size);
|
|
|
|
if (bytes_written == -1){
|
|
|
|
if (errno != EINTR){
|
|
|
|
// NOTE(yuval): An error occured while writing to the file descriptor
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else{
|
|
|
|
data.size -= bytes_written;
|
|
|
|
data.str += bytes_written;
|
|
|
|
}
|
|
|
|
} while (data.size > 0);
|
|
|
|
|
|
|
|
if (data.size == 0) {
|
|
|
|
result = mac_file_attributes_from_fd(fd);
|
|
|
|
}
|
|
|
|
|
|
|
|
close(fd);
|
|
|
|
}
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-27 23:54:33 +00:00
|
|
|
function inline System_Library
|
2019-12-29 22:34:53 +00:00
|
|
|
mac_to_system_library(void *dl_handle){
|
2019-12-27 23:54:33 +00:00
|
|
|
System_Library result = *(System_Library*)(&dl_handle);
|
2019-12-29 01:09:28 +00:00
|
|
|
return(result);
|
2019-12-27 23:54:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function inline void*
|
|
|
|
mac_to_dl_handle(System_Library system_lib){
|
2019-12-29 22:34:53 +00:00
|
|
|
void *result = *(void**)(&system_lib);
|
2019-12-29 01:09:28 +00:00
|
|
|
return(result);
|
2019-12-27 23:54:33 +00:00
|
|
|
}
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_load_library_sig(){
|
|
|
|
b32 result = false;
|
|
|
|
|
2019-12-29 22:34:53 +00:00
|
|
|
void *lib = 0;
|
2019-12-27 23:54:33 +00:00
|
|
|
|
|
|
|
// NOTE(yuval): Open library handle
|
|
|
|
{
|
|
|
|
Temp_Memory temp = begin_temp(scratch);
|
|
|
|
|
2019-12-29 22:34:53 +00:00
|
|
|
char *c_file_name = push_array(scratch, char, file_name.size + 1);
|
2019-12-27 23:54:33 +00:00
|
|
|
block_copy(c_file_name, file_name.str, file_name.size);
|
|
|
|
c_file_name[file_name.size] = 0;
|
|
|
|
|
|
|
|
lib = dlopen(c_file_name, RTLD_LAZY | RTLD_GLOBAL);
|
|
|
|
|
|
|
|
end_temp(temp);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lib){
|
|
|
|
*out = mac_to_system_library(lib);
|
|
|
|
result = true;
|
|
|
|
}
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_release_library_sig(){
|
2019-12-29 22:34:53 +00:00
|
|
|
void *lib = mac_to_dl_handle(handle);
|
2019-12-27 23:54:33 +00:00
|
|
|
i32 rc = dlclose(lib);
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-27 23:54:33 +00:00
|
|
|
b32 result = (rc == 0);
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_get_proc_sig(){
|
2019-12-29 22:34:53 +00:00
|
|
|
void *lib = mac_to_dl_handle(handle);
|
|
|
|
Void_Func *result = (Void_Func*)dlsym(lib, proc_name);
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_now_time_sig(){
|
2019-12-28 22:11:34 +00:00
|
|
|
u64 now = mach_absolute_time();
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-29 01:09:28 +00:00
|
|
|
// NOTE(yuval): Now time nanoseconds conversion
|
2019-12-29 22:34:53 +00:00
|
|
|
f64 now_nano = (f64)((f64)now *
|
|
|
|
(f64)mac_vars.timebase_info.numer /
|
|
|
|
(f64)mac_vars.timebase_info.denom);
|
2019-12-28 22:11:34 +00:00
|
|
|
|
|
|
|
// NOTE(yuval): Conversion to useconds
|
2019-12-29 01:09:28 +00:00
|
|
|
u64 result = (u64)(now_nano * 1.0E-3);
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_wake_up_timer_create_sig(){
|
2019-12-29 22:34:53 +00:00
|
|
|
Mac_Object *object = mac_alloc_object(MacObjectKind_Timer);
|
|
|
|
dll_insert(&mac_vars.timer_objects, &object->node);
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-29 22:34:53 +00:00
|
|
|
object->timer.timer = nil;
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-29 22:34:53 +00:00
|
|
|
Plat_Handle result = mac_to_plat_handle(object);
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_wake_up_timer_release_sig(){
|
2019-12-29 22:34:53 +00:00
|
|
|
Mac_Object *object = (Mac_Object*)mac_to_object(handle);
|
|
|
|
if (object->kind == MacObjectKind_Timer){
|
2019-12-30 00:33:30 +00:00
|
|
|
if ((object->timer.timer != nil) && [object->timer.timer isValid]) {
|
|
|
|
[object->timer.timer invalidate];
|
2019-12-29 22:34:53 +00:00
|
|
|
mac_free_object(object);
|
|
|
|
}
|
|
|
|
}
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_wake_up_timer_set_sig(){
|
2019-12-29 22:34:53 +00:00
|
|
|
Mac_Object *object = (Mac_Object*)mac_to_object(handle);
|
|
|
|
if (object->kind == MacObjectKind_Timer){
|
|
|
|
f64 time_seconds = ((f64)time_milliseconds / 1000.0);
|
2019-12-30 22:04:33 +00:00
|
|
|
object->timer.timer = [NSTimer scheduledTimerWithTimeInterval:time_seconds
|
|
|
|
target:mac_vars.view
|
|
|
|
selector:@selector(requestDisplay)
|
|
|
|
userInfo:nil repeats:NO];
|
2019-12-29 22:34:53 +00:00
|
|
|
}
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_signal_step_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_sleep_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_post_clipboard_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_cli_call_sig(){
|
|
|
|
b32 result = false;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_cli_begin_update_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_cli_update_step_sig(){
|
|
|
|
b32 result = false;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_cli_end_update_sig(){
|
|
|
|
b32 result = false;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_open_color_picker_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_get_screen_scale_factor_sig(){
|
|
|
|
f32 result = 0.0f;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_thread_launch_sig(){
|
|
|
|
System_Thread result = {};
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_thread_join_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_thread_free_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_thread_get_id_sig(){
|
|
|
|
i32 result = 0;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_acquire_global_frame_mutex_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_release_global_frame_mutex_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_mutex_make_sig(){
|
|
|
|
System_Mutex result = {};
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_mutex_acquire_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_mutex_release_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_mutex_free_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_condition_variable_make_sig(){
|
|
|
|
System_Condition_Variable result = {};
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_condition_variable_wait_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_condition_variable_signal_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_condition_variable_free_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_memory_allocate_sig(){
|
2019-12-30 01:21:21 +00:00
|
|
|
void* result = malloc(size);
|
2019-12-24 20:31:24 +00:00
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_memory_set_protection_sig(){
|
|
|
|
b32 result = false;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_memory_free_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_memory_annotation_sig(){
|
|
|
|
Memory_Annotation result = {};
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-24 20:31:24 +00:00
|
|
|
function
|
|
|
|
system_show_mouse_cursor_sig(){
|
|
|
|
NotImplemented;
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_set_fullscreen_sig(){
|
|
|
|
b32 result = false;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_is_fullscreen_sig(){
|
|
|
|
b32 result = false;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
system_get_keyboard_modifiers_sig(){
|
|
|
|
Input_Modifier_Set result = {};
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
return(result);
|
2019-12-24 20:31:24 +00:00
|
|
|
}
|
2019-12-25 01:17:12 +00:00
|
|
|
|
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////////
|
|
|
|
// Graphics API //
|
|
|
|
////////////////////////
|
|
|
|
|
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
function
|
|
|
|
graphics_get_texture_sig(){
|
|
|
|
u32 result = 0;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
|
|
|
return(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
function
|
|
|
|
graphics_fill_texture_sig(){
|
|
|
|
b32 result = false;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
|
|
|
return(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-27 21:30:46 +00:00
|
|
|
////////////////////
|
|
|
|
// Font API //
|
|
|
|
////////////////////
|
|
|
|
|
|
|
|
////////////////////////////////
|
|
|
|
|
2019-12-25 01:17:12 +00:00
|
|
|
function
|
|
|
|
font_make_face_sig(){
|
|
|
|
Face* result = 0;
|
|
|
|
|
|
|
|
NotImplemented;
|
|
|
|
|
|
|
|
return(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////
|