From 2050c0e0576f05156f192aa4caf48834d2f28b14 Mon Sep 17 00:00:00 2001 From: fschildt Date: Fri, 22 Aug 2025 15:23:11 +0200 Subject: first commit --- src/graveyard/win32/win32_fscord.cpp | 181 +++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 src/graveyard/win32/win32_fscord.cpp (limited to 'src/graveyard/win32/win32_fscord.cpp') diff --git a/src/graveyard/win32/win32_fscord.cpp b/src/graveyard/win32/win32_fscord.cpp new file mode 100644 index 0000000..b390e29 --- /dev/null +++ b/src/graveyard/win32/win32_fscord.cpp @@ -0,0 +1,181 @@ +#define WIN32_LEAN_AND_MEAN + +// disable annoying warnings +#pragma warning(disable: 4820) // padding in structs +#pragma warning(disable: 5045) // ??? +#define _WINSOCK_DEPRECATED_NO_WARNINGS // inet_addr + +#include +#include + +#include +#include +#include + +#include "Win32Window.h" +#include "Win32WindowService.h" +#include "Win32Tcp.h" + +typedef struct +{ + Sys_Offscreen_Buffer sys_ob; +} Win32_Offscreen_Buffer; + +typedef struct +{ + HWND handle; + HDC dc; + Win32_Offscreen_Buffer offscreen_buffer; +} Win32_Window; + +typedef struct +{ + HWND service_window; + PIXELFORMATDESCRIPTOR pfd; +} Win32Data; + +static Win32Data g_win32_data; +static Win32WindowService g_win32_window_service; + +#include "Win32Window.cpp" +#include "Win32WindowService.cpp" +#include "Win32Tcp.cpp" + +void * +sys_allocate_memory(size_t size) +{ + LPVOID addr = VirtualAlloc(0, size, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); + if (!addr) + { + // GetLastError... + printf("VirtualAlloc failed\n"); + } + return addr; +} + +void +sys_free_memory(void *address, size_t size) +{ + BOOL freed = VirtualFree(address, 0, MEM_RELEASE); + if (!freed) + { + printf("VirtualFree failed\n"); + } +} + +Sys_Time +sys_get_time() +{ + // @Incomplete + Sys_Time time = {}; + return time; +} + +Sys_Window * +sys_create_window(const char *name, i32 width, i32 height) +{ + static int counter = 0; + assert(counter++ == 0); + if (!g_win32_window_service.Init()) + { + return 0; + } + + Win32Window *win32_window = g_win32_window_service.CreateWin32Window(name, width, height); + + Sys_Window *sys_window = (Sys_Window*)win32_window; + return sys_window; +} + +void +sys_destroy_window(Sys_Window *window) +{ + Win32Window *win32_window = (Win32Window*)window; + g_win32_window_service.DestroyWin32Window(win32_window); +} + +i32 +sys_get_window_events(Sys_Window *sys_window, Sys_Event *events, i32 max_event_count) +{ + Win32Window *win32_window = (Win32Window*)sys_window; + i32 event_count = g_win32_window_service.GetWindowEvents(win32_window, events, max_event_count); + return event_count; +} + +Sys_Offscreen_Buffer * +sys_get_offscreen_buffer(Sys_Window *sys_window) +{ + Win32Window *window = (Win32Window*)sys_window; + Sys_Offscreen_Buffer *screen = window->GetOffscreenBuffer(); + return screen; +} + +void +sys_show_offscreen_buffer(Sys_Window *sys_window) +{ + Win32Window *window = (Win32Window*)sys_window; + window->ShowOffscreenBuffer(); +} + +Sys_Sound_Device * +sys_open_sound_device() +{ + return 0; +} + +void +sys_close_sound_device(Sys_Sound_Device *device) +{ +} + +Sys_Sound_Buffer * +sys_get_sound_buffer(Sys_Sound_Device *device) +{ + static Sys_Sound_Buffer buff = {}; + return &buff; +} + +void +sys_play_sound_buffer(Sys_Sound_Device *device) +{ +} + +Sys_Tcp * +sys_connect(const char *address, u16 port) +{ + Win32Tcp *tcp = new Win32Tcp(); + if (tcp->Connect(address, port)) { + return (Sys_Tcp*)tcp; + } else { + return 0; + } +} + +void +sys_disconnect(Sys_Tcp *sys_tcp) +{ + Win32Tcp *win32_tcp = (Win32Tcp*)sys_tcp; + delete win32_tcp; +} + +bool +sys_send(Sys_Tcp *sys_tcp, void *buffer, i64 size) +{ + assert(size <= S32_MAX); + + Win32Tcp *win32_tcp = (Win32Tcp*)sys_tcp; + bool sent = win32_tcp->Send(buffer, (i32)size); + return sent; +} + +i64 +sys_recv(Sys_Tcp *sys_tcp, void *buffer, i64 size) +{ + assert(size <= S32_MAX); + + Win32Tcp *win32_tcp = (Win32Tcp*)sys_tcp; + int recvd = win32_tcp->Recv(buffer, (i32)size); + return recvd; +} + + -- cgit v1.2.3