oblique_mc

Monte Carlo in Single Layer Biological Tissue
git clone anongit@rnpnr.xyz:oblique_mc.git
Log | Files | Refs | Feed | README | LICENSE

Commit: e5c2daae9949170f982cbcfcd638f6194d9fcdf1
Parent: 6b9248dae6459f9b6f2da9489458025aca8b0ac2
Author: Randy Palamar
Date:   Wed,  3 Apr 2024 20:05:51 -0600

implement win32 platform layer

Diffstat:
Mmc.c | 3++-
Mposix.c | 9++++++++-
Awin32.c | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 66 insertions(+), 2 deletions(-)

diff --git a/mc.c b/mc.c @@ -74,7 +74,7 @@ static void die(const char *, ...); #if defined(__unix__) || defined(__APPLE__) #include "posix.c" #elif defined(_WIN32) -#error Win32 is currently unsupported! +#include "win32.c" #else #error Unsupported Platform! #endif @@ -88,6 +88,7 @@ die(const char *fmt, ...) vfprintf(stderr, fmt, ap); va_end(ap); + os_pause(); exit(1); } diff --git a/posix.c b/posix.c @@ -4,9 +4,9 @@ #define OS_READ O_RDONLY #define OS_WRITE (O_WRONLY | O_CREAT | O_TRUNC) #define OS_RW O_RDWR +#define OS_SEEK_BEG SEEK_SET #define OS_SEEK_CUR SEEK_CUR #define OS_SEEK_END SEEK_END -#define OS_SEEK_SET SEEK_SET typedef int os_file; @@ -44,3 +44,10 @@ os_get_core_count(void) { return sysconf(_SC_NPROCESSORS_ONLN); } + +static void +os_pause(void) +{ + /* not useful here since the user will run from command line */ + return; +} diff --git a/win32.c b/win32.c @@ -0,0 +1,56 @@ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> + +#define OS_READ GENERIC_READ +#define OS_WRITE GENERIC_WRITE +#define OS_RW (GENERIC_READ | GENERIC_WRITE) +#define OS_SEEK_BEG FILE_BEGIN +#define OS_SEEK_CUR FILE_CURRENT +#define OS_SEEK_END FILE_END + +typedef HANDLE os_file; + +static os_file +os_open(s8 path, int flags) +{ + os_file f; + f = CreateFileA((char *)path.data, flags, 0, NULL, + OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + if (f == INVALID_HANDLE_VALUE) + die("rip can't open output file: %s\n", path.data); + return f; +} + +static void +os_write(os_file f, s8 s) +{ + if (WriteFile(f, s.data, s.len, 0, 0) == 0) + die("can't write to file\n"); +} + +static void +os_close(os_file f) +{ + CloseHandle(f); +} + +static void +os_seek(os_file f, size off, int whence) +{ + SetFilePointer(f, off, 0, whence); +} + +static u32 +os_get_core_count(void) +{ + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; +} + +static void +os_pause(void) +{ + fputs("Press any key to close...", stdout); + fgetc(stdin); +}