#ifndef _SYNC_H_
#define _SYNC_H_
#include <X11/Xfuncproto.h>
_XFUNCPROTOBEGIN
#define SYNC_NAME "SYNC"
#define SYNC_MAJOR_VERSION 3
#define SYNC_MINOR_VERSION 0
#define X_SyncInitialize 0
#define X_SyncListSystemCounters 1
#define X_SyncCreateCounter 2
#define X_SyncSetCounter 3
#define X_SyncChangeCounter 4
#define X_SyncQueryCounter 5
#define X_SyncDestroyCounter 6
#define X_SyncAwait 7
#define X_SyncCreateAlarm 8
#define X_SyncChangeAlarm 9
#define X_SyncQueryAlarm 10
#define X_SyncDestroyAlarm 11
#define X_SyncSetPriority 12
#define X_SyncGetPriority 13
#define XSyncCounterNotify 0
#define XSyncAlarmNotify 1
#define XSyncAlarmNotifyMask (1L << XSyncAlarmNotify)
#define XSyncNumberEvents 2L
#define XSyncBadCounter 0L
#define XSyncBadAlarm 1L
#define XSyncNumberErrors (XSyncBadAlarm + 1)
#define XSyncCACounter (1L<<0)
#define XSyncCAValueType (1L<<1)
#define XSyncCAValue (1L<<2)
#define XSyncCATestType (1L<<3)
#define XSyncCADelta (1L<<4)
#define XSyncCAEvents (1L<<5)
typedef enum {
XSyncAbsolute,
XSyncRelative
} XSyncValueType;
typedef enum {
XSyncPositiveTransition,
XSyncNegativeTransition,
XSyncPositiveComparison,
XSyncNegativeComparison
} XSyncTestType;
typedef enum {
XSyncAlarmActive,
XSyncAlarmInactive,
XSyncAlarmDestroyed
} XSyncAlarmState;
typedef XID XSyncCounter;
typedef XID XSyncAlarm;
typedef struct _XSyncValue {
int hi;
unsigned int lo;
} XSyncValue;
extern void XSyncIntToValue(
XSyncValue* ,
int
);
extern void XSyncIntsToValue(
XSyncValue* ,
unsigned int ,
int
);
extern Bool XSyncValueGreaterThan(
XSyncValue ,
XSyncValue
);
extern Bool XSyncValueLessThan(
XSyncValue ,
XSyncValue
);
extern Bool XSyncValueGreaterOrEqual(
XSyncValue ,
XSyncValue
);
extern Bool XSyncValueLessOrEqual(
XSyncValue ,
XSyncValue
);
extern Bool XSyncValueEqual(
XSyncValue ,
XSyncValue
);
extern Bool XSyncValueIsNegative(
XSyncValue
);
extern Bool XSyncValueIsZero(
XSyncValue
);
extern Bool XSyncValueIsPositive(
XSyncValue
);
extern unsigned int XSyncValueLow32(
XSyncValue
);
extern int XSyncValueHigh32(
XSyncValue
);
extern void XSyncValueAdd(
XSyncValue* ,
XSyncValue ,
XSyncValue ,
int*
);
extern void XSyncValueSubtract(
XSyncValue* ,
XSyncValue ,
XSyncValue ,
int*
);
extern void XSyncMaxValue(
XSyncValue*
);
extern void XSyncMinValue(
XSyncValue*
);
_XFUNCPROTOEND
#define _XSyncIntToValue(pv, i) ((pv)->hi=((i<0)?~0:0),(pv)->lo=(i))
#define _XSyncIntsToValue(pv, l, h) ((pv)->lo = (l), (pv)->hi = (h))
#define _XSyncValueGreaterThan(a, b)\
((a).hi>(b).hi || ((a).hi==(b).hi && (a).lo>(b).lo))
#define _XSyncValueLessThan(a, b)\
((a).hi<(b).hi || ((a).hi==(b).hi && (a).lo<(b).lo))
#define _XSyncValueGreaterOrEqual(a, b)\
((a).hi>(b).hi || ((a).hi==(b).hi && (a).lo>=(b).lo))
#define _XSyncValueLessOrEqual(a, b)\
((a).hi<(b).hi || ((a).hi==(b).hi && (a).lo<=(b).lo))
#define _XSyncValueEqual(a, b) ((a).lo==(b).lo && (a).hi==(b).hi)
#define _XSyncValueIsNegative(v) (((v).hi & 0x80000000) ? 1 : 0)
#define _XSyncValueIsZero(a) ((a).lo==0 && (a).hi==0)
#define _XSyncValueIsPositive(v) (((v).hi & 0x80000000) ? 0 : 1)
#define _XSyncValueLow32(v) ((v).lo)
#define _XSyncValueHigh32(v) ((v).hi)
#define _XSyncValueAdd(presult,a,b,poverflow) {\
int t = (a).lo;\
Bool signa = XSyncValueIsNegative(a);\
Bool signb = XSyncValueIsNegative(b);\
((presult)->lo = (a).lo + (b).lo);\
((presult)->hi = (a).hi + (b).hi);\
if (t>(presult)->lo) (presult)->hi++;\
*poverflow = ((signa == signb) && !(signa == XSyncValueIsNegative(*presult)));\
}
#define _XSyncValueSubtract(presult,a,b,poverflow) {\
int t = (a).lo;\
Bool signa = XSyncValueIsNegative(a);\
Bool signb = XSyncValueIsNegative(b);\
((presult)->lo = (a).lo - (b).lo);\
((presult)->hi = (a).hi - (b).hi);\
if (t>(presult)->lo) (presult)->hi--;\
*poverflow = ((signa == signb) && !(signa == XSyncValueIsNegative(*presult)));\
}
#define _XSyncMaxValue(pv) ((pv)->hi = 0x7fffffff, (pv)->lo = 0xffffffff)
#define _XSyncMinValue(pv) ((pv)->hi = 0x80000000, (pv)->lo = 0)
#define XSyncIntToValue(pv, i) _XSyncIntToValue(pv, i)
#define XSyncIntsToValue(pv, l, h) _XSyncIntsToValue(pv, l, h)
#define XSyncValueGreaterThan(a, b) _XSyncValueGreaterThan(a, b)
#define XSyncValueLessThan(a, b) _XSyncValueLessThan(a, b)
#define XSyncValueGreaterOrEqual(a, b) _XSyncValueGreaterOrEqual(a, b)
#define XSyncValueLessOrEqual(a, b) _XSyncValueLessOrEqual(a, b)
#define XSyncValueEqual(a, b) _XSyncValueEqual(a, b)
#define XSyncValueIsNegative(v) _XSyncValueIsNegative(v)
#define XSyncValueIsZero(a) _XSyncValueIsZero(a)
#define XSyncValueIsPositive(v) _XSyncValueIsPositive(v)
#define XSyncValueLow32(v) _XSyncValueLow32(v)
#define XSyncValueHigh32(v) _XSyncValueHigh32(v)
#define XSyncValueAdd(presult,a,b,poverflow) _XSyncValueAdd(presult,a,b,poverflow)
#define XSyncValueSubtract(presult,a,b,poverflow) _XSyncValueSubtract(presult,a,b,poverflow)
#define XSyncMaxValue(pv) _XSyncMaxValue(pv)
#define XSyncMinValue(pv) _XSyncMinValue(pv)
#ifndef _SYNC_SERVER
typedef struct _XSyncSystemCounter {
char *name;
XSyncCounter counter;
XSyncValue resolution;
} XSyncSystemCounter;
typedef struct {
XSyncCounter counter;
XSyncValueType value_type;
XSyncValue wait_value;
XSyncTestType test_type;
} XSyncTrigger;
typedef struct {
XSyncTrigger trigger;
XSyncValue event_threshold;
} XSyncWaitCondition;
typedef struct {
XSyncTrigger trigger;
XSyncValue delta;
Bool events;
XSyncAlarmState state;
} XSyncAlarmAttributes;
typedef struct {
int type;
unsigned long serial;
Bool send_event;
Display *display;
XSyncCounter counter;
XSyncValue wait_value;
XSyncValue counter_value;
Time time;
int count;
Bool destroyed;
} XSyncCounterNotifyEvent;
typedef struct {
int type;
unsigned long serial;
Bool send_event;
Display *display;
XSyncAlarm alarm;
XSyncValue counter_value;
XSyncValue alarm_value;
Time time;
XSyncAlarmState state;
} XSyncAlarmNotifyEvent;
typedef struct {
int type;
Display *display;
XSyncAlarm alarm;
unsigned long serial;
unsigned char error_code;
unsigned char request_code;
unsigned char minor_code;
} XSyncAlarmError;
typedef struct {
int type;
Display *display;
XSyncCounter counter;
unsigned long serial;
unsigned char error_code;
unsigned char request_code;
unsigned char minor_code;
} XSyncCounterError;
_XFUNCPROTOBEGIN
extern Status XSyncQueryExtension(
Display* ,
int* ,
int*
);
extern Status XSyncInitialize(
Display* ,
int* ,
int*
);
extern XSyncSystemCounter *XSyncListSystemCounters(
Display* ,
int*
);
extern void XSyncFreeSystemCounterList(
XSyncSystemCounter*
);
extern XSyncCounter XSyncCreateCounter(
Display* ,
XSyncValue
);
extern Status XSyncSetCounter(
Display* ,
XSyncCounter ,
XSyncValue
);
extern Status XSyncChangeCounter(
Display* ,
XSyncCounter ,
XSyncValue
);
extern Status XSyncDestroyCounter(
Display* ,
XSyncCounter
);
extern Status XSyncQueryCounter(
Display* ,
XSyncCounter ,
XSyncValue*
);
extern Status XSyncAwait(
Display* ,
XSyncWaitCondition* ,
int
);
extern XSyncAlarm XSyncCreateAlarm(
Display* ,
unsigned long ,
XSyncAlarmAttributes*
);
extern Status XSyncDestroyAlarm(
Display* ,
XSyncAlarm
);
extern Status XSyncQueryAlarm(
Display* ,
XSyncAlarm ,
XSyncAlarmAttributes*
);
extern Status XSyncChangeAlarm(
Display* ,
XSyncAlarm ,
unsigned long ,
XSyncAlarmAttributes*
);
extern Status XSyncSetPriority(
Display* ,
XID ,
int
);
extern Status XSyncGetPriority(
Display* ,
XID ,
int*
);
#endif
_XFUNCPROTOEND
#endif