123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437 |
- #ifndef __LINUX_H_WASABI
- #define __LINUX_H_WASABI
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <unistd.h>
- #include <sys/timeb.h>
- #include <stdarg.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <dirent.h>
- #include <dlfcn.h>
- #include <signal.h>
- #include <sys/ipc.h>
- #include <sys/msg.h>
- #include <errno.h>
- #include <math.h>
- #include <string.h>
- #include <strings.h>
- #include <sys/shm.h>
- #ifndef NOVTABLE
- #define NOVTABLE
- #endif
- #ifndef __USE_GNU
- #define __USE_GNU
- #include <pthread.h>
- #undef __USE_GNU
- #else
- #include <pthread.h>
- #endif
- #ifdef WASABI_COMPILE_WND
- // Fucking api_region and Font namespace conflicts
- #define _XRegion _XRegion
- #define api_region HRGN
- #define Font HFONT
- #define Cursor _Cursor
- #include <X11/Xlib.h>
- #include <X11/Xutil.h>
- #include <X11/Xresource.h>
- #include <X11/extensions/shape.h>
- #include <X11/extensions/XShm.h>
- #include <X11/Xos.h>
- #include <X11/Xatom.h>
- #include <X11/xpm.h>
- #include <X11/keysym.h>
- #include <X11/cursorfont.h>
- #undef _XRegion
- #undef api_region
- #undef Font
- #undef Cursor
- #ifdef WASABI_COMPILE_FONTS
- #ifdef __INCLUDE_FREETYPE
- #include <freetype/freetype.h>
- #include <freetype/ftglyph.h>
- #endif // freetype
- //typedef FT_Face HFONT;
- #endif // fonts
- #ifdef __INCLUDE_GTK
- #include <gdk/gdkx.h>
- #include <gtk/gtk.h>
- #endif // gtk
- typedef Window HWND;
- #else // wnd
- typedef void * HWND;
- #endif // wnd
- // I know about XRectangle, but it's easier to recreate this than it is
- // to merge it with the rest of the code
- typedef struct { int left, top, right, bottom; } RECT;
- typedef unsigned long COLORREF;
- typedef struct {
- char rgbBlue;
- char rgbGreen;
- char rgbRed;
- char filler;
- } RGBQUAD;
- #define RGB( r, g, b ) ((((r)&0xFF)<<16)|(((g)&0xFF)<<8)|((b)&0xFF))
- #define min( a, b ) ((a>b)?b:a)
- #define max( a, b ) ((a>b)?a:b)
- #define CLR_NONE 0
- #ifdef __cplusplus
- #ifndef XMD_H
- typedef int BOOL; // It's int not bool because of some inheritance conflicts
- #endif
- #ifndef TRUE
- #define TRUE true
- #endif
- #ifndef FALSE
- #define FALSE false
- #endif
- #else
- #ifndef XMD_H
- typedef int BOOL;
- #endif
- #ifndef TRUE
- #define TRUE 1
- #endif
- #ifndef FALSE
- #define FALSE 0
- #endif
- #endif
- typedef BOOL BOOLEAN;
- typedef struct { int x, y; } POINT;
- #ifdef WASABI_COMPILE_WND
- typedef void *HPEN;
- // The HDC knows what it's drawing on
- typedef struct hdc_typ {
- GC gc;
- Drawable d;
- HRGN clip;
- } *HDC;
- // Pixmaps don't have associated width and height, at least not that I know of
- typedef struct {
- Pixmap p;
- int bmWidth;
- int bmHeight;
- XShmSegmentInfo *shmseginfo;
- } BITMAP, HBITMAP;
- typedef Pixmap HICON;
- #endif // wnd
- typedef int LRESULT;
- typedef int LPARAM;
- typedef int WPARAM;
- typedef int RPARAM;
- typedef unsigned int TCHAR;
- typedef long long __int64;
- typedef long long LARGE_INTEGER;
- typedef unsigned long long ULARGE_INTEGER;
- #define OSPIPE int
- #define OSPROCESSID int
- #define LOWORD(a) ((a)&0xffff)
- #define HIWORD(a) (((a)>>16)&0xffff)
- #define MAX_PATH 8192
- #define COMEXP
- #define EXTC extern "C"
- #define __cdecl
- #define CALLBACK
- #define WINAPI
- #define HRESULT void*
- #define WINUSERAPI
- #define APIENTRY
- #define __declspec(a)
- typedef char * LPSTR;
- typedef unsigned long DWORD;
- typedef short int WORD;
- #ifndef XMD_H
- typedef unsigned char BYTE;
- #endif
- typedef void* LPVOID;
- typedef struct {
- long cx, cy;
- } SIZE;
- typedef long LONG;
- #define VOID void
- #ifdef WASABI_COMPILE_WND
- // Fix this for canvas
- typedef void * PAINTSTRUCT;
- #endif
- #ifndef WASABI_COMPILE_WND
- #ifndef None
- #define None (HWND)0
- #endif
- #endif
- typedef void* THREAD_RET;
- #ifdef WASABI_COMPILE_WND
- // Fix this with editwnd!
- typedef void * WNDPROC;
- typedef void * DRAWITEMSTRUCT;
- #define VK_MENU (XK_Alt_L | (XK_Alt_R << 16))
- #define VK_MBUTTON (XK_Meta_L | (XK_Meta_R << 16))
- #define VK_SHIFT (XK_Shift_L | (XK_Shift_R << 16))
- #define MK_RBUTTON ((XK_VoidSymbol << 16) | 1)
- #define MK_LBUTTON ((XK_VoidSymbol << 16) | 2)
- #define VK_CONTROL (XK_Control_L | (XK_Control_R << 16))
- #define VK_DELETE (XK_Delete | (XK_KP_Delete << 16))
- #define VK_RETURN (XK_Return)
- #define VK_ESCAPE (XK_Escape)
- #define VK_DOWN (XK_Down)
- #define VK_UP (XK_Up)
- #define VK_LEFT (XK_Left)
- #define VK_RIGHT (XK_Right)
- #define VK_HOME (XK_Home)
- #define VK_END (XK_End)
- #define VK_PRIOR (XK_Prior)
- #define VK_NEXT (XK_Next)
- #define VK_BACK (XK_BackSpace)
- #define VK_F1 (XK_F1)
- #define VK_SPACE (XK_space)
- #define INVALID_HANDLE_VALUE NULL
- #endif
- // Come back here later
- typedef struct {
- pthread_mutex_t mutex;
- pthread_t id;
- int count;
- } CRITICAL_SECTION;
- typedef pthread_t HANDLE;
- typedef char OLECHAR;
- //#define NO_MMX
- //CUT? #define NULLREGION 0
- #define MAIN_MINX 0
- #define MAIN_MINY 0
- typedef void (*TIMERPROC)(HWND, UINT, UINT, DWORD);
- typedef struct {
- HWND hwnd;
- UINT message;
- WPARAM wParam;
- LPARAM lParam;
- DWORD time;
- POINT pt;
- } MSG;
- #ifdef __cplusplus
- #define _TRY try
- #define _EXCEPT(x) catch(...)
- #include <new>
- #ifdef WASABI_COMPILE_WND
- #define NULLREGION 1
- #define SIMPLEREGION 2
- #define COMPLEXREGION 3
- #endif
- // some of these are used even without wnd support
- enum {
- WM_CREATE, // MULL
- WM_CLOSE, // NULL
- WM_PAINT, // NULL
- WM_NCPAINT, // NULL
- WM_SYNCPAINT, // NULL
- WM_SETCURSOR, // NULL
- WM_TIMER, // timerid
- WM_SETFOCUS, // NULL
- WM_KILLFOCUS, // NULL
- WM_LBUTTONDOWN, // xPos | yPos << 16
- WM_RBUTTONDOWN, // "
- WM_MOUSEMOVE, // "
- WM_LBUTTONUP, // "
- WM_RBUTTONUP, // "
- WM_CONTEXTMENU, // "
- WM_ERASEBKGND, // NULL
- WM_MOUSEWHEEL, // a << 16 | t (l=a/120)
- WM_CHAR, // char
- WM_KEYDOWN, // keypress
- WM_KEYUP, // "
- WM_SYSKEYDOWN, // look at OnSysKeyDown
- WM_SYSKEYUP, // "
- WM_SYSCOMMAND, // Hunh?
- WM_MOUSEACTIVATE, // Hunh?
- WM_ACTIVATEAPP, // Hunh?
- WM_ACTIVATE, // WA_ACTIVE || WA_CLICKACTIVE
- WM_NCACTIVATE, // NULL
- WM_WINDOWPOSCHANGED, // NULL, WINDOWPOS *
- WM_DROPFILES, // HDROP
- WM_CAPTURECHANGED, // NULL
- WM_COMMAND, // Commands?..
- WM_SETTINGCHANGE,
- WM_QUIT,
- WM_DESTROY,
- WM_USER = 1000, // wParam, lParam -> make sure this is last
- };
- #define PM_NOREMOVE 0x0000
- #define PM_REMOVE 0x0001
- #define PM_NOYIELD 0x0002 // ignored
- #ifdef WASABI_COMPILE_WND
- enum {
- WA_ACTIVE, WA_CLICKACTIVE,
- };
- enum {
- SC_CLOSE,
- };
- enum {
- DT_LEFT,
- DT_CENTER,
- DT_RIGHT,
- DT_VCENTER,
- DT_WORDBREAK,
- DT_SINGLELINE,
- DT_NOPREFIX,
- DT_PATH_ELLIPSIS,
- DT_END_ELLIPSIS,
- DT_MODIFYSTRING,
- DT_CALCRECT,
- };
- #define ALL_EVENTS ExposureMask | StructureNotifyMask | \
- KeyPressMask | KeyReleaseMask | \
- ButtonPressMask | ButtonReleaseMask | \
- PointerMotionMask | FocusChangeMask | \
- EnterWindowMask | LeaveWindowMask
- #define NO_INPUT_EVENTS ExposureMask | StructureNotifyMask | \
- PointerMotionMask | FocusChangeMask | \
- EnterWindowMask | LeaveWindowMask
- class Linux {
- private:
- static Display *display;
- static XContext context;
- public:
- static Display *getDisplay();
- static int getScreenNum();
- static Window RootWin();
- static Visual *DefaultVis();
- static int convertEvent( MSG *, XEvent * );
- static void initContextData( HWND h );
- static void nukeContextData( HWND h );
- static XContext getContext();
- static void setCursor( HWND h, int cursor );
- };
- #endif
- #endif
- typedef void* HINSTANCE; // Useless, just a placeholder
- typedef void* HMONITOR;
- typedef void* WIN32_FIND_DATA;
- typedef void* WIN32_FIND_DATAW;
- typedef void* BLENDFUNCTION;
- typedef void* ATOM;
- typedef void* HGLOBAL;
- typedef void* HKEY;
- typedef char* LPTSTR;
- typedef char* LPCTSTR;
- typedef DWORD* LPDWORD;
- #if defined(WASABI_API_TIMER) || defined(WASABI_API_WND)
- int GetMessage( MSG *, HWND, UINT, UINT );
- int PeekMessage( MSG *, HWND, UINT, UINT, UINT );
- int DispatchMessage( MSG * );
- int SendMessage( HWND, UINT, WPARAM, LPARAM );
- int SetTimer( HWND, int id, int ms, TIMERPROC );
- void KillTimer( HWND, int id );
- #endif
- #ifdef WASABI_COMPILE_WND
- void TranslateMessage( MSG * );
- void PostMessage( HWND, UINT, WPARAM, LPARAM );
- void PostQuitMessage( int );
- enum contextdata {
- GWL_HINSTANCE = 0,
- GWL_USERDATA,
- GWL_INVALIDREGION,
- GWL_RECT_LEFT,
- GWL_RECT_TOP,
- GWL_RECT_RIGHT,
- GWL_RECT_BOTTOM,
- GWL_HWND,
- GWL_PARENT,
- GWL_ENUM_SIZE
- };
- void MoveWindowRect( HWND, int, int );
- void SetWindowRect( HWND, RECT * );
- int GetWindowRect( HWND, RECT * );
- void SetWindowLong( HWND, enum contextdata, LONG );
- LONG GetWindowLong( HWND, enum contextdata );
- int GetUpdateRect( HWND, RECT *, BOOL );
- void GetUpdateRgn( HWND, HRGN, BOOL );
- void InvalidateRgn( HWND, HRGN, BOOL );
- void InvalidateRect( HWND, const RECT *, BOOL );
- void ValidateRgn( HWND, HRGN );
- void ValidateRect( HWND, const RECT * );
- HWND GetActiveWindow();
- HWND WindowFromPoint( POINT p );
- #endif
- void OutputDebugString( const char *s );
- int MulDiv( int m1, int m2, int d );
- DWORD GetTickCount();
- void Sleep( int ms );
- int IntersectRect(RECT *, const RECT *, const RECT *);
- void ExitProcess( int ret );
- DWORD GetModuleFileName(void *pid, const char *filename, int bufsize);
- const char *CharPrev(const char *lpszStart, const char *lpszCurrent);
- int SubtractRect( RECT *out, RECT *in1, RECT *in2 );
- int EqualRect( RECT *a, RECT *b );
- void CopyFile( const char *f1, const char *f2, BOOL b );
- #endif
|