]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/windows/types/types.factor
functors: inline the parts of interpolate this needs
[factor.git] / basis / windows / types / types.factor
old mode 100755 (executable)
new mode 100644 (file)
index 544abb6..aadb0d4
@@ -1,8 +1,8 @@
 ! Copyright (C) 2005, 2006 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types alien.syntax namespaces kernel words
-sequences math math.bitwise math.vectors colors
-io.encodings.utf16n classes.struct accessors ;
+! See https://factorcode.org/license.txt for BSD license.
+USING: alien.c-types alien.syntax classes.struct colors
+io.encodings.utf16 io.encodings.utf8 kernel math math.bitwise
+math.functions math.vectors sequences ;
 FROM: alien.c-types => float short ;
 IN: windows.types
 
@@ -11,10 +11,13 @@ TYPEDEF: uchar               UCHAR
 TYPEDEF: uchar               BYTE
 
 TYPEDEF: ushort              wchar_t
+
 TYPEDEF: wchar_t             WCHAR
 
 TYPEDEF: short               SHORT
 TYPEDEF: ushort              USHORT
+TYPEDEF: short               INT16
+TYPEDEF: ushort              UINT16
 
 TYPEDEF: ushort              WORD
 TYPEDEF: ulong               DWORD
@@ -30,12 +33,10 @@ TYPEDEF: int                 HFILE
 
 TYPEDEF: long                LONG
 TYPEDEF: long*               LPLONG
-TYPEDEF: long                LONG_PTR
-TYPEDEF: long*               PLONG_PTR
+TYPEDEF: intptr_t            LONG_PTR
 
 TYPEDEF: uint                ULONG
-TYPEDEF: void*               ULONG_PTR
-TYPEDEF: void*               PULONG_PTR
+TYPEDEF: uintptr_t           ULONG_PTR
 
 TYPEDEF: void                VOID
 TYPEDEF: void*               PVOID
@@ -49,12 +50,10 @@ TYPEDEF: intptr_t    UHALF_PTR
 TYPEDEF: intptr_t    INT_PTR
 TYPEDEF: intptr_t    UINT_PTR
 
-TYPEDEF: int         LONG_PTR
-TYPEDEF: ulong       ULONG_PTR
-
 TYPEDEF: int         INT32
 TYPEDEF: uint        UINT32
 TYPEDEF: uint        DWORD32
+TYPEDEF: long        LONG32
 TYPEDEF: ulong       ULONG32
 TYPEDEF: ulonglong   ULONG64
 TYPEDEF: long*       POINTER_32
@@ -69,12 +68,13 @@ TYPEDEF: longlong    LARGE_INTEGER
 TYPEDEF: ulonglong   ULARGE_INTEGER
 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
+TYPEDEF: size_t SIZE_T
+TYPEDEF: ptrdiff_t SSIZE_T
 
-SYMBOL: wchar_t*
-<< { char* utf16n } \ wchar_t* typedef >>
+TYPEDEF: { c-string utf16n } LPCSTR
+TYPEDEF: { c-string utf16n } LPTCSTR
 
-TYPEDEF: wchar_t*  LPCSTR
-TYPEDEF: wchar_t*  LPWSTR
+TYPEDEF: { c-string utf16n } LPWSTR
 TYPEDEF: WCHAR       TCHAR
 TYPEDEF: LPWSTR      LPTCH
 TYPEDEF: LPWSTR      PTCH
@@ -82,7 +82,6 @@ TYPEDEF: TCHAR       TBYTE
 
 TYPEDEF: WORD                ATOM
 TYPEDEF: BYTE                BOOLEAN
-TYPEDEF: DWORD               COLORREF
 TYPEDEF: ULONGLONG           DWORDLONG
 TYPEDEF: ULONG_PTR           DWORD_PTR
 TYPEDEF: PVOID               HANDLE
@@ -99,7 +98,7 @@ TYPEDEF: HANDLE              HDDEDATA
 TYPEDEF: HANDLE              HDESK
 TYPEDEF: HANDLE              HDROP
 TYPEDEF: HANDLE              HDWP
-TYPEDEF: HANDLE              HENMETAFILE
+TYPEDEF: HANDLE              HENHMETAFILE
 TYPEDEF: HANDLE              HFONT
 TYPEDEF: HANDLE              HGDIOBJ
 TYPEDEF: HANDLE              HGLOBAL
@@ -110,6 +109,7 @@ TYPEDEF: HANDLE              HKL
 TYPEDEF: HANDLE              HLOCAL
 TYPEDEF: HANDLE              HMENU
 TYPEDEF: HANDLE              HMETAFILE
+TYPEDEF: HANDLE              HMETAFILEPICT
 TYPEDEF: HINSTANCE           HMODULE
 TYPEDEF: HANDLE              HMONITOR
 TYPEDEF: HANDLE              HPALETTE
@@ -129,15 +129,14 @@ TYPEDEF: DWORD               LGRPID
 TYPEDEF: LONG_PTR            LPARAM
 TYPEDEF: BOOL*               LPBOOL
 TYPEDEF: BYTE*               LPBYTE
-TYPEDEF: DWORD*              LPCOLORREF
-TYPEDEF: WCHAR*              LPCWSTR
-! TYPEDEF: WCHAR*              LPWSTR
 
-TYPEDEF: WCHAR*               LPSTR
-TYPEDEF: wchar_t* LPCTSTR
-TYPEDEF: wchar_t* LPWTSTR
+TYPEDEF: { c-string utf16n } LPCWSTR
+! TYPEDEF: WCHAR*              LPWSTR
 
-TYPEDEF: wchar_t*       LPTSTR
+TYPEDEF: { c-string utf8 } LPSTR
+TYPEDEF: { c-string utf16n } LPCTSTR
+TYPEDEF: { c-string utf16n } LPWTSTR
+TYPEDEF: { c-string utf16n } LPTSTR
 TYPEDEF: LPCSTR      PCTSTR
 TYPEDEF: LPSTR       PTSTR
 
@@ -150,7 +149,7 @@ TYPEDEF: BOOLEAN*            PBOOLEAN
 TYPEDEF: BYTE*               PBYTE
 TYPEDEF: CHAR*               PCHAR
 TYPEDEF: CHAR*               PCSTR
-TYPEDEF: WCHAR*              PCWSTR
+TYPEDEF: { c-string utf16n } PCWSTR
 TYPEDEF: DWORD*              PDWORD
 TYPEDEF: DWORDLONG*          PDWORDLONG
 TYPEDEF: DWORD_PTR*          PDWORD_PTR
@@ -187,25 +186,16 @@ TYPEDEF: ULONG_PTR*          PULONG_PTR
 TYPEDEF: ULONG32*            PULONG32
 TYPEDEF: ULONG64*            PULONG64
 TYPEDEF: USHORT*             PUSHORT
-TYPEDEF: WCHAR*              PWCHAR
+TYPEDEF: { c-string utf16n } PWCHAR
 TYPEDEF: WORD*               PWORD
-TYPEDEF: WCHAR*              PWSTR
+TYPEDEF: { c-string utf16n } PWSTR
 TYPEDEF: HANDLE              SC_HANDLE
 TYPEDEF: LPVOID              SC_LOCK
 TYPEDEF: HANDLE              SERVICE_STATUS_HANDLE
-TYPEDEF: ULONG_PTR           SIZE_T
-TYPEDEF: LONG_PTR            SSIZE_T
 TYPEDEF: LONGLONG            USN
 TYPEDEF: UINT_PTR            WPARAM
-
-TYPEDEF: RECT* LPRECT
-TYPEDEF: void* PWNDCLASS
-TYPEDEF: void* PWNDCLASSEX
-TYPEDEF: void* LPWNDCLASS
-TYPEDEF: void* LPWNDCLASSEX
-TYPEDEF: void* MSGBOXPARAMSA
-TYPEDEF: void* MSGBOXPARAMSW
-TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
+TYPEDEF: DWORD               ACCESS_MASK
+TYPEDEF: ACCESS_MASK*        PACCESS_MASK
 
 TYPEDEF: size_t socklen_t
 
@@ -250,14 +240,13 @@ STRUCT: RECT
     { right LONG }
     { bottom LONG } ;
 
-C-STRUCT: PAINTSTRUCT
-    { "HDC" " hdc" }
-    { "BOOL" "fErase" }
-    { "RECT" "rcPaint" }
-    { "BOOL" "fRestore" }
-    { "BOOL" "fIncUpdate" }
-    { "BYTE[32]" "rgbReserved" }
-;
+STRUCT: PAINTSTRUCT
+    { hdc HDC }
+    { fErase BOOL }
+    { rcPaint RECT }
+    { fRestore BOOL }
+    { fIncUpdate BOOL }
+    { rgbReserved BYTE[32] } ;
 
 STRUCT: BITMAPINFOHEADER
     { biSize DWORD }
@@ -285,21 +274,22 @@ STRUCT: BITMAPINFO
 TYPEDEF: void* LPPAINTSTRUCT
 TYPEDEF: void* PAINTSTRUCT
 
-C-STRUCT: POINT
-    { "LONG" "x" }
-    { "LONG" "y" } ; 
+STRUCT: POINT
+    { x LONG }
+    { y LONG } ;
+TYPEDEF: POINT* LPPOINT
 
 STRUCT: SIZE
     { cx LONG }
     { cy LONG } ;
 
-C-STRUCT: MSG
-    { "HWND" "hWnd" }
-    { "UINT" "message" }
-    { "WPARAM" "wParam" }
-    { "LPARAM" "lParam" }
-    { "DWORD" "time" }
-    { "POINT" "pt" } ;
+STRUCT: MSG
+    { hWnd HWND }
+    { message UINT }
+    { wParam WPARAM }
+    { lParam LPARAM }
+    { time DWORD }
+    { pt POINT } ;
 
 TYPEDEF: MSG*                LPMSG
 
@@ -332,43 +322,50 @@ STRUCT: PIXELFORMATDESCRIPTOR
     { dwDamageMask DWORD } ;
 
 : <RECT> ( loc dim -- RECT )
-    dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
+    dupd v+ [ first2 ] bi@ RECT boa ;
 
 TYPEDEF: RECT* PRECT
 TYPEDEF: RECT* LPRECT
 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
 TYPEDEF: PFD* LPPFD
 TYPEDEF: HANDLE HGLRC
-TYPEDEF: HANDLE HRGN
-
-C-STRUCT: LVITEM
-    { "uint" "mask" }
-    { "int" "iItem" }
-    { "int" "iSubItem" }
-    { "uint" "state" }
-    { "uint" "stateMask" }
-    { "void*" "pszText" }
-    { "int" "cchTextMax" }
-    { "int" "iImage" }
-    { "long" "lParam" }
-    { "int" "iIndent" }
-    { "int" "iGroupId" }
-    { "uint" "cColumns" }
-    { "uint*" "puColumns" }
-    { "int*" "piColFmt" }
-    { "int" "iGroup" } ;
-
-C-STRUCT: LVFINDINFO
-    { "uint" "flags" }
-    { "char*" "psz" }
-    { "long" "lParam" }
-    { "POINT" "pt" }
-    { "uint" "vkDirection" } ;
-
-C-STRUCT: ACCEL
-    { "BYTE" "fVirt" }
-    { "WORD" "key" }
-    { "WORD" "cmd" } ;
+
+TYPEDEF: void* PWNDCLASS
+TYPEDEF: void* PWNDCLASSEX
+TYPEDEF: void* LPWNDCLASS
+TYPEDEF: void* LPWNDCLASSEX
+TYPEDEF: void* MSGBOXPARAMSA
+TYPEDEF: void* MSGBOXPARAMSW
+TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
+
+STRUCT: LVITEM
+    { mask uint }
+    { iItem int }
+    { iSubItem int }
+    { state uint }
+    { stateMask uint }
+    { pszText void* }
+    { cchTextMax int }
+    { iImage int }
+    { lParam long }
+    { iIndent int }
+    { iGroupId int }
+    { cColumns uint }
+    { puColumns uint* }
+    { piColFmt int* }
+    { iGroup int } ;
+
+STRUCT: LVFINDINFO
+    { flags uint }
+    { psz c-string }
+    { lParam long }
+    { pt POINT }
+    { vkDirection uint } ;
+
+STRUCT: ACCEL
+    { fVirt BYTE }
+    { key WORD }
+    { cmd WORD } ;
 TYPEDEF: ACCEL* LPACCEL
 
 TYPEDEF: DWORD COLORREF
@@ -376,9 +373,15 @@ TYPEDEF: DWORD* LPCOLORREF
 
 : RGB ( r g b -- COLORREF )
     { 16 8 0 } bitfield ; inline
+: >RGB< ( COLORREF -- r g b )
+    [           0xff bitand ]
+    [  -8 shift 0xff bitand ]
+    [ -16 shift 0xff bitand ] tri ;
 
 : color>RGB ( color -- COLORREF )
-    >rgba-components drop [ 255 * >integer ] tri@ RGB ;
+    >rgba-components drop [ 255 round * >integer ] tri@ RGB ;
+: RGB>color ( COLORREF -- color )
+    >RGB< [ 255 /f ] tri@ 1.0 <rgba> ;
 
 STRUCT: TEXTMETRICW
     { tmHeight LONG }
@@ -403,3 +406,8 @@ STRUCT: TEXTMETRICW
     { tmCharSet BYTE } ;
 
 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC
+
+TYPEDEF: ULONG PROPID
+
+CALLBACK: BOOL WNDENUMPROC ( HWND hWnd, LPARAM lParam )
+CALLBACK: LRESULT HOOKPROC ( int nCode, WPARAM wParam, LPARAM lParam )