e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef CRUTAPI_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUTAPI_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef WINDOWS
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_APIENTRY __stdcall
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_APIENTRY
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_net.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_protocol.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Compile-time version tests */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_MAJOR_VERSION 1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_MINOR_VERSION 9
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_PATCH_VERSION 0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Display mode bit masks. */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_RGB 0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_RGBA GLUT_RGB
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_INDEX 1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_SINGLE 0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_DOUBLE 2
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_ACCUM 4
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_ALPHA 8
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_DEPTH 16
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_STENCIL 32
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Mouse buttons. */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* CRUT_NO_BUTTON provided for menu definition. Not every menu will
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync have a button associated with it. */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_NO_BUTTON -1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_LEFT_BUTTON 0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_MIDDLE_BUTTON 1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_RIGHT_BUTTON 2
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Mouse button state. */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_DOWN 0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_UP 1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Visibility state. */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_NOT_VISIBLE 0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_VISIBLE 1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* function keys */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F1 1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F2 2
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F3 3
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F4 4
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F5 5
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F6 6
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F7 7
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F8 8
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F9 9
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F10 10
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F11 11
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_F12 12
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* directional keys */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_LEFT 100
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_UP 101
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_RIGHT 102
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_DOWN 103
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_PAGE_UP 104
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_PAGE_DOWN 105
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_HOME 106
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_END 107
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEY_INSERT 108
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* event types */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_NO_EVENT 0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_MOUSE_EVENT 1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_RESHAPE_EVENT 2
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_KEYBOARD_EVENT 3
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_MOTION_EVENT 4
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_PASSIVE_MOTION_EVENT 5
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_MENU_EVENT 6
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CRUT_VISIBILITY_EVENT 7
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define DEFAULT_CRUT_PORT 9000
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define MENU_MAX_SIZE 1024
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define MENU_ITEM_REGULAR 0
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define MENU_ITEM_SUBMENU 1
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* CRUTMessage is just a placeholder to find the msg_type */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMessageHeader header;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int msg_type;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTMessage;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMessageHeader header;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int msg_type;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int button;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int state;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int x;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int y;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTMouseMsg;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMessageHeader header;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int msg_type;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int width;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int height;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTReshapeMsg;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMessageHeader header;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int msg_type;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int state;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTVisibilityMsg;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMessageHeader header;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int msg_type;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync unsigned char key;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int x;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int y;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTKeyboardMsg;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMessageHeader header;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int msg_type;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int x;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int y;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTMotionMsg;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMessageHeader header;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int msg_type;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int x;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int y;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTPassiveMotionMsg;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMessageHeader header;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int msg_type;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int menuID;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int value;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTMenuMsg;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync unsigned short tcpip_port;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int mtu;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync char protocol[1024];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRConnection *send_conn;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTClientPointer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRUTClientPointer *crutclients;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRConnection *mothershipConn;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int numclients;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int winX;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int winY;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int winWidth;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int winHeight;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int compositeAlpha;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int compositeDepth;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync char menuBuffer[MENU_MAX_SIZE];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRUTAPI;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define MAX_MSG_SIZE sizeof(CRUTMouseMsg)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* extern CRUTAPI crut_api;*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutInitAPI( CRUTAPI *crut_api, const char *mothership );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutGetWindowParams( CRUTAPI *crut_api );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutGetMenuXML( CRUTAPI *crut_api );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutSetWindowID( CRUTAPI *crut_api, int windowID );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutConnectToClients( CRUTAPI *crut_api );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid crutSendEvent( CRUTAPI *crut_api, void *msg, int size );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutSendMouseEvent( CRUTAPI *crut_api, int button, int state, int x, int y );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutSendKeyboardEvent( CRUTAPI *crut_api, int key, int x, int y );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutSendReshapeEvent( CRUTAPI *crut_api, int width, int height );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutSendVisibilityEvent( CRUTAPI *crut_api, int state );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutSendMotionEvent( CRUTAPI *crut_api, int x, int y );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutSendPassiveMotionEvent( CRUTAPI *crut_api, int x, int y );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid CRUT_APIENTRY crutSendMenuEvent( CRUTAPI *crut_api, int menuID, int value );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CRUTAPI_H */