0 >>cbClsExtra
0 >>cbWndExtra
f GetModuleHandle >>hInstance
- f GetModuleHandle "fraptor" utf16n string>alien LoadIcon >>hIcon
+ f GetModuleHandle "APPICON" utf16n string>alien LoadIcon >>hIcon
f IDC_ARROW LoadCursor >>hCursor
class-name-ptr >>lpszClassName
! Copyright (C) 2010 Erik Charlebois.
! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types alien.libraries alien.syntax classes.struct
-kernel math windows.types windows.ole32 ;
+USING: alien alien.c-types alien.libraries alien.syntax
+classes.struct kernel math windows.types windows.ole32 ;
IN: windows.ddk.hid
<< "hid" "hid.dll" stdcall add-library >>
! Copyright (C) 2010 Erik Charlebois.
! See http://factorcode.org/license.txt for BSD license.
-USING: literals windows.kernel32 math alien.syntax windows.types classes.struct
-alien.c-types windows.errors windows.ole32 windows.advapi32 alien.libraries ;
+USING: literals windows.kernel32 math alien.syntax windows.types
+classes.struct alien alien.c-types windows.errors windows.ole32
+windows.advapi32 alien.libraries ;
IN: windows.ddk.setupapi
<< "setupapi" "setupapi.dll" stdcall add-library >>
! Copyright (C) 2010 Erik Charlebois.
! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types alien.syntax classes.struct windows.kernel32
-windows.types alien.libraries ;
+USING: alien alien.c-types alien.syntax classes.struct
+windows.kernel32 windows.types alien.libraries ;
IN: windows.ddk.winusb
<< "winusb" "winusb.dll" stdcall add-library >>
HRESULT HasCharacter ( UINT32 unicodeValue, BOOL* exists )
HRESULT CreateFontFace ( IDWriteFontFace** fontFace ) ;
-C-ENUM: DWRITE_READING_DRECTION
+C-ENUM: DWRITE_READING_DIRECTION
DWRITE_READING_DIRECTION_LEFT_TO_RIGHT
DWRITE_READING_DIRECTION_RIGHT_TO_LEFT ;
! (c)2009 Joe Groff bsd license
-USING: alien.c-types alien.data alien.libraries alien.syntax
-classes.struct kernel math system-info.windows windows.types ;
+USING: alien alien.c-types alien.data alien.libraries
+alien.syntax classes.struct kernel math system-info.windows
+windows.types ;
IN: windows.dwmapi
STRUCT: MARGINS
u64 nano_count()
{
struct timespec t;
- int ret;
- ret = clock_gettime(CLOCK_MONOTONIC,&t);
+ int ret = clock_gettime(CLOCK_MONOTONIC,&t);
if(ret != 0)
fatal_error("clock_gettime failed", 0);
return (u64)t.tv_sec * 1000000000 + t.tv_nsec;
u64 nano_count()
{
- u64 t = mach_absolute_time();
- mach_timebase_info_data_t info;
- kern_return_t ret = mach_timebase_info(&info);
- if(ret != 0)
- fatal_error("mach_timebase_info failed",ret);
- return t * (info.numer/info.denom);
+ u64 time = mach_absolute_time();
+
+ static u64 scaling_factor = 0;
+ if(!scaling_factor)
+ {
+ mach_timebase_info_data_t info;
+ kern_return_t ret = mach_timebase_info(&info);
+ if(ret != 0)
+ fatal_error("mach_timebase_info failed",ret);
+ scaling_factor = info.numer/info.denom;
+ }
+
+ return time * scaling_factor;
}
}
u64 nano_count()
{
- LARGE_INTEGER count;
- LARGE_INTEGER frequency;
+ static double scale_factor;
+
static u32 hi = 0;
static u32 lo = 0;
- BOOL ret;
- ret = QueryPerformanceCounter(&count);
+
+ LARGE_INTEGER count;
+ BOOL ret = QueryPerformanceCounter(&count);
if(ret == 0)
fatal_error("QueryPerformanceCounter", 0);
- ret = QueryPerformanceFrequency(&frequency);
- if(ret == 0)
- fatal_error("QueryPerformanceFrequency", 0);
+
+ if(scale_factor == 0.0)
+ {
+ LARGE_INTEGER frequency;
+ BOOL ret = QueryPerformanceFrequency(&frequency);
+ if(ret == 0)
+ fatal_error("QueryPerformanceFrequency", 0);
+ scale_factor = (1000000000.0 / frequency.QuadPart);
+ }
#ifdef FACTOR_64
hi = count.HighPart;
#endif
lo = count.LowPart;
- return (u64)((((u64)hi << 32) | (u64)lo)*(1000000000.0/frequency.QuadPart));
+ return (u64)((((u64)hi << 32) | (u64)lo) * scale_factor);
}
void sleep_nanos(u64 nsec)