| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | #include <ctype.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef wcslen
 | 
					
						
							| 
									
										
										
										
											2010-01-16 09:43:22 -05:00
										 |  |  | 	/* for cygwin */ | 
					
						
							|  |  |  | 	#include <wchar.h>
 | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-19 15:02:32 -04:00
										 |  |  | #undef _WIN32_WINNT
 | 
					
						
							|  |  |  | #define _WIN32_WINNT 0x0501  // For AddVectoredExceptionHandler
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef UNICODE
 | 
					
						
							|  |  |  | #define UNICODE
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <windows.h>
 | 
					
						
							|  |  |  | #include <shellapi.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef _MSC_VER
 | 
					
						
							|  |  |  | 	#undef min
 | 
					
						
							|  |  |  | 	#undef max
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Difference between Jan 1 00:00:00 1601 and Jan 1 00:00:00 1970 */ | 
					
						
							|  |  |  | #define EPOCH_OFFSET 0x019db1ded53e8000LL
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | namespace factor | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-04 05:50:24 -04:00
										 |  |  | typedef wchar_t vm_char; | 
					
						
							| 
									
										
										
										
											2010-09-19 15:02:32 -04:00
										 |  |  | typedef char symbol_char; | 
					
						
							|  |  |  | typedef HANDLE THREADHANDLE; | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define STRING_LITERAL(string) L##string
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define MAX_UNICODE_PATH 32768
 | 
					
						
							| 
									
										
										
										
											2009-05-04 02:00:30 -04:00
										 |  |  | #define VM_C_API extern "C" __declspec(dllexport)
 | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | #define SSCANF swscanf
 | 
					
						
							|  |  |  | #define STRCMP wcscmp
 | 
					
						
							|  |  |  | #define STRNCMP wcsncmp
 | 
					
						
							|  |  |  | #define STRDUP _wcsdup
 | 
					
						
							| 
									
										
										
										
											2010-01-16 09:43:22 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef _MSC_VER
 | 
					
						
							|  |  |  | 	#define FTELL ftell
 | 
					
						
							|  |  |  | 	#define FSEEK fseek
 | 
					
						
							|  |  |  | 	#define SNPRINTF _snprintf
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | 	#define FTELL ftello64
 | 
					
						
							|  |  |  | 	#define FSEEK fseeko64
 | 
					
						
							|  |  |  | 	#define SNPRINTF snprintf
 | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-18 21:25:06 -04:00
										 |  |  | #define FACTOR_OS_STRING "windows"
 | 
					
						
							| 
									
										
										
										
											2010-09-19 15:02:32 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define FACTOR_DLL NULL
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // SSE traps raise these exception codes, which are defined in internal NT headers
 | 
					
						
							|  |  |  | // but not winbase.h
 | 
					
						
							|  |  |  | #ifndef STATUS_FLOAT_MULTIPLE_FAULTS
 | 
					
						
							|  |  |  | #define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef STATUS_FLOAT_MULTIPLE_TRAPS
 | 
					
						
							|  |  |  | #define STATUS_FLOAT_MULTIPLE_TRAPS  0xC00002B5
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-20 23:40:25 -05:00
										 |  |  | #define OPEN_READ(path) _wfopen((path),L"rb")
 | 
					
						
							|  |  |  | #define OPEN_WRITE(path) _wfopen((path),L"wb")
 | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 12:33:35 -04:00
										 |  |  | inline static void early_init() {} | 
					
						
							| 
									
										
										
										
											2009-11-18 16:58:48 -05:00
										 |  |  | u64 nano_count(); | 
					
						
							| 
									
										
										
										
											2009-11-20 05:21:21 -05:00
										 |  |  | void sleep_nanos(u64 nsec); | 
					
						
							| 
									
										
										
										
											2009-09-26 03:41:01 -04:00
										 |  |  | long getpagesize(); | 
					
						
							| 
									
										
										
										
											2010-02-03 16:12:13 -05:00
										 |  |  | void move_file(const vm_char *path1, const vm_char *path2); | 
					
						
							| 
									
										
										
										
											2010-09-19 15:02:32 -04:00
										 |  |  | VM_C_API LONG exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c, void *dispatch); | 
					
						
							|  |  |  | THREADHANDLE start_thread(void *(*start_routine)(void *),void *args); | 
					
						
							| 
									
										
										
										
											2011-10-26 20:19:23 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | inline static THREADHANDLE thread_id() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	DWORD id = GetCurrentThreadId(); | 
					
						
							|  |  |  | 	HANDLE threadHandle = OpenThread( | 
					
						
							|  |  |  | 		THREAD_GET_CONTEXT | THREAD_SET_CONTEXT | THREAD_SUSPEND_RESUME, | 
					
						
							|  |  |  | 		FALSE, | 
					
						
							|  |  |  | 		id | 
					
						
							|  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2011-11-17 23:42:30 -05:00
										 |  |  | 	FACTOR_ASSERT(threadHandle != NULL); | 
					
						
							| 
									
										
										
										
											2011-10-26 20:19:23 -04:00
										 |  |  | 	return threadHandle; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-12 22:23:44 -05:00
										 |  |  | inline static void breakpoint() | 
					
						
							| 
									
										
										
										
											2011-11-11 16:29:46 -05:00
										 |  |  | { | 
					
						
							|  |  |  | 	DebugBreak(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-20 18:11:50 -04:00
										 |  |  | #define CODE_TO_FUNCTION_POINTER(code) (void)0
 | 
					
						
							|  |  |  | #define CODE_TO_FUNCTION_POINTER_CALLBACK(vm, code) (void)0
 | 
					
						
							|  |  |  | #define FUNCTION_CODE_POINTER(ptr) ptr
 | 
					
						
							|  |  |  | #define FUNCTION_TOC_POINTER(ptr) ptr
 | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | } |