vn/code/vn_platform.md

3.6 KiB

@table(Name, NameLower, NameCaps, Type, Arguments) platform_functions: { { Reserve reserve RESERVE void * u64 Size } { Release release RELEASE void void *Pointer } { Commit commit COMMIT void void *Pointer, u64 Size } { Decommit decommit DECOMMIT void void *Pointer, u64 Size } { Allocate allocate ALLOCATE void * u64 Size } { Deallocate deallocate DEALLOCATE void void *Pointer, u64 Size } { OpenFile open_file OPEN_FILE platform_file_handle string Path, platform_access_flags FileAccess } { CloseFile close_file CLOSE_FILE void platform_file_handle Handle } { ReadFile read_file READ_FILE void platform_file_handle Handle, void *Dest, u64 Offset, u64 Size } { WriteFile write_file WRITE_FILE void platform_file_handle Handle, void *Source, u64 Offset, u64 Size } { GetFileSize get_file_size GET_FILE_SIZE u64 platform_file_handle Handle } { SetCursor set_cursor SET_CURSOR void platform_cursor Cursor } { ToggleFullscreen toggle_fullscreen TOGGLE_FULLSCREEN void void } { ShowMessage show_message SHOW_MESSAGE void string Message, platform_message_type Type } { BeginFileIter begin_file_iter BEGIN_FILE_ITER platform_file_iter * arena *Arena, string Path } { AdvanceFileIter advance_file_iter ADVANCE_FILE_ITER b32 arena *Arena, platform_file_iter *Iter, platform_file_info *OutInfo } { EndFileIter end_file_iter END_FILE_ITER void platform_file_iter *Iter } { SetClipboard set_clipboard SET_CLIPBOARD void string String } { GetClipboard get_clipboard GET_CLIPBOARD string arena *Arena } }

@table_gen { @expand(platform_functions s) #define PLATFORM_$(s.NameCaps)(name) $(s.Type) name($(s.Arguments)) }

@table_gen { @expand(platform_functions s) typedef PLATFORM_$(s.NameCaps)(platform_$(s.NameLower)); }

@table_gen { struct platform_api { @expand(platform_functions s) platform_$(s.NameLower) *$(s.Name); }; }

@table_gen { #define RegisterPlatformFunctions(PlatformName)\\ @expand(platform_functions s) Platform.$(s.Name) = PlatformName##_$(s.Name);\\ }