diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/bfc/platform/linux.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Wasabi/bfc/platform/linux.h')
-rw-r--r-- | Src/Wasabi/bfc/platform/linux.h | 437 |
1 files changed, 437 insertions, 0 deletions
diff --git a/Src/Wasabi/bfc/platform/linux.h b/Src/Wasabi/bfc/platform/linux.h new file mode 100644 index 00000000..b57ec3f0 --- /dev/null +++ b/Src/Wasabi/bfc/platform/linux.h @@ -0,0 +1,437 @@ +#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 + |