# define INCL_DOSERRORS
# define INCL_BASE
# define INCL_PM
# include "os2.h"
# include <GL/pgl.h>
# define glXSwapBuffers(d,w) (Perl_Serve_Messages(0),pglSwapBuffers(*(Display*)d,w))
# define XOpenDisplay(dummy0) (perl_hab_GET(),(hmq = Perl_Register_MQ(1)),myDisplay=Perl_hab,&myDisplay)
# define glutCreateWindow(name) my_glutCreateWindow(name)
# define XMapWindow(d, w) 0
# define glXChooseVisual(d, scr, att) pglChooseConfig(*d,att)
# define glXCreateContext(d, vis, sharel, isDirect) \
pglCreateContext(*d, vis, sharel, isDirect)
# define XCreateColormap(d, win, vis, alloc) 0
# define RootWindow(d, screen) HWND_DESKTOP
# define XCreateWindow(d, par, x, y, w, h, qqq0, de, io, vis, msk, attr) \
MyCreateWindow(d, par, x, y, w, h)
# define XIfEvent(a,b,c,d)
# define glXMakeCurrent(dpy, win, cx) pglMakeCurrent(*dpy, cx, win)
# define None PGL_None
# define XPending(d) (av_len(EventAv)+1)
#define GLX_USE_GL PGL_USE_GL
#define GLX_BUFFER_SIZE PGL_BUFFER_SIZE
#define GLX_LEVEL PGL_LEVEL
#define GLX_RGBA PGL_RGBA
#define GLX_DOUBLEBUFFER PGL_DOUBLEBUFFER
#define GLX_STEREO PGL_STEREO
#define GLX_AUX_BUFFERS PGL_AUX_BUFFERS
#define GLX_RED_SIZE PGL_RED_SIZE
#define GLX_GREEN_SIZE PGL_GREEN_SIZE
#define GLX_BLUE_SIZE PGL_BLUE_SIZE
#define GLX_ALPHA_SIZE PGL_ALPHA_SIZE
#define GLX_DEPTH_SIZE PGL_DEPTH_SIZE
#define GLX_STENCIL_SIZE PGL_STENCIL_SIZE
#define GLX_ACCUM_RED_SIZE PGL_ACCUM_RED_SIZE
#define GLX_ACCUM_GREEN_SIZE PGL_ACCUM_GREEN_SIZE
#define GLX_ACCUM_BLUE_SIZE PGL_ACCUM_BLUE_SIZE
#define GLX_ACCUM_ALPHA_SIZE PGL_ACCUM_ALPHA_SIZE
#define GLX_X_VISUAL_TYPE_EXT PGL_X_VISUAL_TYPE_EXT
#define GLX_TRANSPARENT_TYPE_EXT PGL_TRANSPARENT_TYPE_EXT
#define GLX_TRANSPARENT_INDEX_VALUE_EXT PGL_TRANSPARENT_INDEX_VALUE_EXT
#define GLX_TRANSPARENT_RED_VALUE_EXT PGL_TRANSPARENT_RED_VALUE_EXT
#define GLX_TRANSPARENT_GREEN_VALUE_EXT PGL_TRANSPARENT_GREEN_VALUE_EXT
#define GLX_TRANSPARENT_BLUE_VALUE_EXT PGL_TRANSPARENT_BLUE_VALUE_EXT
#define GLX_TRANSPARENT_ALPHA_VALUE_EXT PGL_TRANSPARENT_ALPHA_VALUE_EXT
typedef
HWND
Window;
typedef
HAB Display;
typedef
VISUALCONFIG XVisualInfo;
typedef
HGC GLXContext;
typedef
struct
XSetWindowAttributes {
int
colormap;
int
border_pixel;
long
event_mask;
} XSetWindowAttributes;
typedef
long
Colormap;
typedef
HWND
Drawable;
typedef
HWND
GLXDrawable;
typedef
int
KeySym;
typedef
bool
Bool;
typedef
long
Time;
typedef
long
Atom;
typedef
long
XID;
#define NoEventMask 0L
#define KeyPressMask (1L<<0)
#define KeyReleaseMask (1L<<1)
#define ButtonPressMask (1L<<2)
#define ButtonReleaseMask (1L<<3)
#define EnterWindowMask (1L<<4)
#define LeaveWindowMask (1L<<5)
#define PointerMotionMask (1L<<6)
#define PointerMotionHintMask (1L<<7)
#define Button1MotionMask (1L<<8)
#define Button2MotionMask (1L<<9)
#define Button3MotionMask (1L<<10)
#define Button4MotionMask (1L<<11)
#define Button5MotionMask (1L<<12)
#define ButtonMotionMask (1L<<13)
#define KeymapStateMask (1L<<14)
#define ExposureMask (1L<<15)
#define VisibilityChangeMask (1L<<16)
#define StructureNotifyMask (1L<<17)
#define ResizeRedirectMask (1L<<18)
#define SubstructureNotifyMask (1L<<19)
#define SubstructureRedirectMask (1L<<20)
#define FocusChangeMask (1L<<21)
#define PropertyChangeMask (1L<<22)
#define ColormapChangeMask (1L<<23)
#define OwnerGrabButtonMask (1L<<24)
#define KeyPress 2
#define KeyRelease 3
#define ButtonPress 4
#define ButtonRelease 5
#define MotionNotify 6
#define EnterNotify 7
#define LeaveNotify 8
#define FocusIn 9
#define FocusOut 10
#define KeymapNotify 11
#define Expose 12
#define GraphicsExpose 13
#define NoExpose 14
#define VisibilityNotify 15
#define CreateNotify 16
#define DestroyNotify 17
#define UnmapNotify 18
#define MapNotify 19
#define MapRequest 20
#define ReparentNotify 21
#define ConfigureNotify 22
#define ConfigureRequest 23
#define GravityNotify 24
#define ResizeRequest 25
#define CirculateNotify 26
#define CirculateRequest 27
#define PropertyNotify 28
#define SelectionClear 29
#define SelectionRequest 30
#define SelectionNotify 31
#define ColormapNotify 32
#define ClientMessage 33
#define MappingNotify 34
#define LASTEvent 35 /* must be bigger than any event # */
#define ShiftMask (1<<0)
#define LockMask (1<<1)
#define ControlMask (1<<2)
#define Mod1Mask (1<<3)
#define Mod2Mask (1<<4)
#define Mod3Mask (1<<5)
#define Mod4Mask (1<<6)
#define Mod5Mask (1<<7)
#define Button1MaskOS2 (1<<8)
#define Button2MaskOS2 (1<<9)
#define Button3MaskOS2 (1<<10)
#define Button4Mask (1<<11)
#define Button5Mask (1<<12)
#define AnyModifier (1<<15) /* used in GrabButton, GrabKey */
#define True 1
#define XMaxTransChars 4
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
Window root;
Window subwindow;
Time
time
;
int
x, y;
int
x_root, y_root;
unsigned
int
state;
unsigned
int
keycode;
Bool same_screen;
char
trans_chars[XMaxTransChars];
int
nchars;
} XKeyEvent;
typedef
XKeyEvent XKeyPressedEvent;
typedef
XKeyEvent XKeyReleasedEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
Window root;
Window subwindow;
Time
time
;
int
x, y;
int
x_root, y_root;
unsigned
int
state;
unsigned
int
button;
Bool same_screen;
} XButtonEvent;
typedef
XButtonEvent XButtonPressedEvent;
typedef
XButtonEvent XButtonReleasedEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
Window root;
Window subwindow;
Time
time
;
int
x, y;
int
x_root, y_root;
unsigned
int
state;
char
is_hint;
Bool same_screen;
} XMotionEvent;
typedef
XMotionEvent XPointerMovedEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
Window root;
Window subwindow;
Time
time
;
int
x, y;
int
x_root, y_root;
int
mode;
int
detail;
Bool same_screen;
Bool focus;
unsigned
int
state;
} XCrossingEvent;
typedef
XCrossingEvent XEnterWindowEvent;
typedef
XCrossingEvent XLeaveWindowEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
int
mode;
int
detail;
} XFocusChangeEvent;
typedef
XFocusChangeEvent XFocusInEvent;
typedef
XFocusChangeEvent XFocusOutEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
char
key_vector[32];
} XKeymapEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
int
x, y;
int
width, height;
int
count;
} XExposeEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Drawable drawable;
int
x, y;
int
width, height;
int
count;
int
major_code;
int
minor_code;
} XGraphicsExposeEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Drawable drawable;
int
major_code;
int
minor_code;
} XNoExposeEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
int
state;
} XVisibilityEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window parent;
Window window;
int
x, y;
int
width, height;
int
border_width;
Bool override_redirect;
} XCreateWindowEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window event;
Window window;
} XDestroyWindowEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window event;
Window window;
Bool from_configure;
} XUnmapEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window event;
Window window;
Bool override_redirect;
} XMapEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window parent;
Window window;
} XMapRequestEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window event;
Window window;
Window parent;
int
x, y;
Bool override_redirect;
} XReparentEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window event;
Window window;
int
x, y;
int
width, height;
int
border_width;
Window above;
Bool override_redirect;
} XConfigureEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window event;
Window window;
int
x, y;
} XGravityEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
int
width, height;
} XResizeRequestEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window parent;
Window window;
int
x, y;
int
width, height;
int
border_width;
Window above;
int
detail;
unsigned
long
value_mask;
} XConfigureRequestEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window event;
Window window;
int
place;
} XCirculateEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window parent;
Window window;
int
place;
} XCirculateRequestEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
Atom atom;
Time
time
;
int
state;
} XPropertyEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
Atom selection;
Time
time
;
} XSelectionClearEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window owner;
Window requestor;
Atom selection;
Atom target;
Atom property;
Time
time
;
} XSelectionRequestEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window requestor;
Atom selection;
Atom target;
Atom property;
Time
time
;
} XSelectionEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
Colormap colormap;
#if defined(__cplusplus) || defined(c_plusplus)
Bool c_new;
#else
Bool
new
;
#endif
int
state;
} XColormapEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
Atom message_type;
int
format;
union
{
char
b[20];
short
s[10];
long
l[5];
} data;
} XClientMessageEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
int
request;
int
first_keycode;
int
count;
} XMappingEvent;
typedef
struct
{
int
type;
Display *display;
XID resourceid;
unsigned
long
serial;
unsigned
char
error_code;
unsigned
char
request_code;
unsigned
char
minor_code;
} XErrorEvent;
typedef
struct
{
int
type;
unsigned
long
serial;
Bool send_event;
Display *display;
Window window;
} XAnyEvent;
typedef
union
_XEvent {
int
type;
XAnyEvent xany;
XKeyEvent xkey;
XButtonEvent xbutton;
XMotionEvent xmotion;
XCrossingEvent xcrossing;
XFocusChangeEvent xfocus;
XExposeEvent xexpose;
XGraphicsExposeEvent xgraphicsexpose;
XNoExposeEvent xnoexpose;
XVisibilityEvent xvisibility;
XCreateWindowEvent xcreatewindow;
XDestroyWindowEvent xdestroywindow;
XUnmapEvent xunmap;
XMapEvent xmap;
XMapRequestEvent xmaprequest;
XReparentEvent xreparent;
XConfigureEvent xconfigure;
XGravityEvent xgravity;
XResizeRequestEvent xresizerequest;
XConfigureRequestEvent xconfigurerequest;
XCirculateEvent xcirculate;
XCirculateRequestEvent xcirculaterequest;
XPropertyEvent xproperty;
XSelectionClearEvent xselectionclear;
XSelectionRequestEvent xselectionrequest;
XSelectionEvent xselection;
XColormapEvent xcolormap;
XClientMessageEvent xclient;
XMappingEvent xmapping;
XErrorEvent xerror;
XKeymapEvent xkeymap;
long
pad[24];
} XEvent;
void
InitSys(
void
);
Bool XQueryPointer(
Display* display,
Window w,
Window* root_return,
Window* child_return,
int
* root_x_return,
int
* root_y_return,
int
* win_x_return,
int
* win_y_return,
unsigned
int
* mask_return);
void
XNextEvent(Display *d, XEvent *event);
void
XLookupString(XKeyEvent *xkey,
char
*buf,
int
sizeof_buf, KeySym *ks,
int
f);
Window MyCreateWindow(Display *d, Window par,
int
x,
int
y,
int
w,
int
h);
void
morphPM();
Window nativeWindowId(Display *, Window);
void
glpMoveResizeWindow(
int
x,
int
y, unsigned
int
width, unsigned
int
height, Window w, Display* display);
void
glpMoveWindow(
int
x,
int
y, Window w, Display* display);
void
glpResizeWindow(unsigned
int
width, unsigned
int
height, Window w, Display* display);
extern
AV *EventAv;
extern
unsigned
long
LastEventMask;